From 0f4b4da0aa817e3fc34ecf90f59aaa088b10a466 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Wed, 11 Oct 2023 18:44:50 +0000 Subject: [PATCH] OpenSSL 3.1.3 built for android. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4508 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../usr/local/include/crypto/aes_platform.h | 517 ++++ .../arm64-v8a/usr/local/include/crypto/aria.h | 17 +- .../arm64-v8a/usr/local/include/crypto/asn1.h | 80 +- .../usr/local/include/crypto/asn1_dsa.h | 24 + .../usr/local/include/crypto/asn1err.h | 27 + .../usr/local/include/crypto/async.h | 12 +- .../usr/local/include/crypto/asyncerr.h | 27 + .../usr/local/include/crypto/bioerr.h | 27 + .../arm64-v8a/usr/local/include/crypto/bn.h | 31 +- .../usr/local/include/crypto/bn_conf.h | 5 +- .../usr/local/include/crypto/bn_conf.h.in | 5 +- .../usr/local/include/crypto/bn_dh.h | 41 +- .../usr/local/include/crypto/bn_srp.h | 24 +- .../usr/local/include/crypto/bnerr.h | 27 + .../usr/local/include/crypto/buffererr.h | 27 + .../usr/local/include/crypto/chacha.h | 11 +- .../usr/local/include/crypto/cmll_platform.h | 51 + .../usr/local/include/crypto/cmperr.h | 30 + .../usr/local/include/crypto/cmserr.h | 30 + .../usr/local/include/crypto/comperr.h | 30 + .../usr/local/include/crypto/conferr.h | 27 + .../usr/local/include/crypto/context.h | 41 + .../usr/local/include/crypto/crmferr.h | 30 + .../usr/local/include/crypto/cryptlib.h | 36 +- .../usr/local/include/crypto/cryptoerr.h | 27 + .../usr/local/include/crypto/cterr.h | 30 + .../usr/local/include/crypto/ctype.h | 18 +- .../usr/local/include/crypto/decoder.h | 40 + .../usr/local/include/crypto/decodererr.h | 27 + .../usr/local/include/crypto/des_platform.h | 35 + .../arm64-v8a/usr/local/include/crypto/dh.h | 62 + .../usr/local/include/crypto/dherr.h | 30 + .../arm64-v8a/usr/local/include/crypto/dsa.h | 49 + .../usr/local/include/crypto/dsaerr.h | 30 + .../usr/local/include/crypto/dso_conf.h | 6 +- .../usr/local/include/crypto/dso_conf.h.in | 8 +- .../arm64-v8a/usr/local/include/crypto/ec.h | 65 +- .../usr/local/include/crypto/ecerr.h | 30 + .../arm64-v8a/usr/local/include/crypto/ecx.h | 150 + .../usr/local/include/crypto/encoder.h | 20 + .../usr/local/include/crypto/encodererr.h | 27 + .../usr/local/include/crypto/engine.h | 2 +- .../usr/local/include/crypto/engineerr.h | 30 + .../arm64-v8a/usr/local/include/crypto/err.h | 9 +- .../arm64-v8a/usr/local/include/crypto/ess.h | 76 + .../usr/local/include/crypto/esserr.h | 27 + .../arm64-v8a/usr/local/include/crypto/evp.h | 674 ++++- .../usr/local/include/crypto/evperr.h | 27 + .../usr/local/include/crypto/httperr.h | 27 + .../usr/local/include/crypto/lhash.h | 9 +- .../usr/local/include/crypto/md32_common.h | 26 +- .../usr/local/include/crypto/modes.h | 224 ++ .../usr/local/include/crypto/objects.h | 6 +- .../usr/local/include/crypto/objectserr.h | 27 + .../usr/local/include/crypto/ocsperr.h | 30 + .../arm64-v8a/usr/local/include/crypto/pem.h | 51 + .../usr/local/include/crypto/pemerr.h | 27 + .../usr/local/include/crypto/pkcs12err.h | 27 + .../usr/local/include/crypto/pkcs7.h | 19 + .../usr/local/include/crypto/pkcs7err.h | 27 + .../usr/local/include/crypto/poly1305.h | 29 +- .../usr/local/include/crypto/ppc_arch.h | 29 + .../usr/local/include/crypto/punycode.h | 27 + .../arm64-v8a/usr/local/include/crypto/rand.h | 166 +- .../usr/local/include/crypto/rand_pool.h | 109 + .../usr/local/include/crypto/randerr.h | 27 + .../usr/local/include/crypto/riscv_arch.def | 43 + .../usr/local/include/crypto/riscv_arch.h | 59 + .../arm64-v8a/usr/local/include/crypto/rsa.h | 130 + .../usr/local/include/crypto/rsaerr.h | 27 + .../usr/local/include/crypto/security_bits.h | 16 + .../arm64-v8a/usr/local/include/crypto/sha.h | 9 +- .../usr/local/include/crypto/siphash.h | 39 +- .../arm64-v8a/usr/local/include/crypto/siv.h | 33 + .../arm64-v8a/usr/local/include/crypto/sm2.h | 71 +- .../usr/local/include/crypto/sm2err.h | 44 +- .../arm64-v8a/usr/local/include/crypto/sm4.h | 11 +- .../usr/local/include/crypto/sm4_platform.h | 75 + .../usr/local/include/crypto/sparc_arch.h | 122 + .../usr/local/include/crypto/sparse_array.h | 92 + .../usr/local/include/crypto/store.h | 17 +- .../usr/local/include/crypto/storeerr.h | 27 + .../usr/local/include/crypto/tserr.h | 30 + .../usr/local/include/crypto/types.h | 32 + .../usr/local/include/crypto/uierr.h | 27 + .../arm64-v8a/usr/local/include/crypto/x509.h | 103 +- .../usr/local/include/crypto/x509err.h | 27 + .../usr/local/include/crypto/x509v3err.h | 27 + .../internal/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../internal/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../usr/local/include/internal/asn1.h | 16 + .../usr/local/include/internal/bio.h | 64 +- .../usr/local/include/internal/comp.h | 6 +- .../usr/local/include/internal/conf.h | 15 +- .../local/include/internal/constant_time.h | 38 +- .../usr/local/include/internal/core.h | 71 + .../usr/local/include/internal/cryptlib.h | 163 +- .../usr/local/include/internal/dane.h | 7 +- .../usr/local/include/internal/deprecated.h | 30 + .../usr/local/include/internal/der.h | 88 + .../usr/local/include/internal/dso.h | 7 +- .../usr/local/include/internal/dsoerr.h | 88 +- .../usr/local/include/internal/e_os.h | 432 +++ .../usr/local/include/internal/endian.h | 51 + .../usr/local/include/internal/err.h | 5 +- .../usr/local/include/internal/ffc.h | 216 ++ .../usr/local/include/internal/ktls.h | 404 +++ .../usr/local/include/internal/namemap.h | 41 + .../usr/local/include/internal/nelem.h | 5 +- .../usr/local/include/internal/numbers.h | 27 +- .../usr/local/include/internal/o_dir.h | 5 +- .../usr/local/include/internal/o_str.h | 17 - .../usr/local/include/internal/packet.h | 937 ++++++ .../local/include/internal/param_build_set.h | 46 + .../usr/local/include/internal/passphrase.h | 122 + .../usr/local/include/internal/property.h | 99 + .../usr/local/include/internal/propertyerr.h | 43 + .../usr/local/include/internal/provider.h | 119 + .../usr/local/include/internal/refcount.h | 128 +- .../usr/local/include/internal/sha3.h | 54 + .../usr/local/include/internal/sizes.h | 22 + .../local/include/{crypto => internal}/sm3.h | 20 +- .../usr/local/include/internal/sockets.h | 39 +- .../usr/local/include/internal/sslconf.h | 5 +- .../usr/local/include/internal/symhacks.h | 27 + .../usr/local/include/internal/thread_once.h | 36 +- .../usr/local/include/internal/tlsgroups.h | 50 + .../usr/local/include/internal/tsan_assist.h | 34 +- .../usr/local/include/internal/unicode.h | 31 + .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../arm64-v8a/usr/local/include/openssl/aes.h | 73 +- .../usr/local/include/openssl/asn1.h | 485 +++- .../usr/local/include/openssl/asn1.h.in | 964 +++++++ .../usr/local/include/openssl/asn1_mac.h | 2 +- .../usr/local/include/openssl/asn1err.h | 134 +- .../usr/local/include/openssl/asn1t.h | 309 +- .../usr/local/include/openssl/asn1t.h.in | 923 ++++++ .../usr/local/include/openssl/async.h | 26 +- .../usr/local/include/openssl/asyncerr.h | 29 +- .../arm64-v8a/usr/local/include/openssl/bio.h | 168 +- .../usr/local/include/openssl/bio.h.in | 864 ++++++ .../usr/local/include/openssl/bioerr.h | 83 +- .../usr/local/include/openssl/blowfish.h | 67 +- .../arm64-v8a/usr/local/include/openssl/bn.h | 145 +- .../usr/local/include/openssl/bnerr.h | 74 +- .../usr/local/include/openssl/buffer.h | 34 +- .../usr/local/include/openssl/buffererr.h | 25 +- .../usr/local/include/openssl/camellia.h | 102 +- .../usr/local/include/openssl/cast.h | 36 +- .../usr/local/include/openssl/cmac.h | 53 +- .../arm64-v8a/usr/local/include/openssl/cmp.h | 597 ++++ .../usr/local/include/openssl/cmp.h.in | 478 ++++ .../usr/local/include/openssl/cmp_util.h | 56 + .../usr/local/include/openssl/cmperr.h | 116 + .../arm64-v8a/usr/local/include/openssl/cms.h | 188 +- .../usr/local/include/openssl/cms.h.in | 395 +++ .../usr/local/include/openssl/cmserr.h | 118 +- .../usr/local/include/openssl/comp.h | 18 +- .../usr/local/include/openssl/comperr.h | 29 +- .../usr/local/include/openssl/conf.h | 112 +- .../usr/local/include/openssl/conf.h.in | 177 ++ .../usr/local/include/openssl/conf_api.h | 12 +- .../usr/local/include/openssl/conferr.h | 49 +- .../usr/local/include/openssl/configuration.h | 137 + .../local/include/openssl/configuration.h.in | 69 + .../usr/local/include/openssl/conftypes.h | 44 + .../usr/local/include/openssl/core.h | 233 ++ .../usr/local/include/openssl/core_dispatch.h | 943 ++++++ .../usr/local/include/openssl/core_names.h | 560 ++++ .../usr/local/include/openssl/core_object.h | 41 + .../usr/local/include/openssl/crmf.h | 227 ++ .../usr/local/include/openssl/crmf.h.in | 180 ++ .../usr/local/include/openssl/crmferr.h | 50 + .../usr/local/include/openssl/crypto.h | 341 ++- .../usr/local/include/openssl/crypto.h.in | 535 ++++ .../usr/local/include/openssl/cryptoerr.h | 74 +- .../local/include/openssl/cryptoerr_legacy.h | 1466 ++++++++++ .../arm64-v8a/usr/local/include/openssl/ct.h | 125 +- .../usr/local/include/openssl/ct.h.in | 525 ++++ .../usr/local/include/openssl/cterr.h | 51 +- .../usr/local/include/openssl/decoder.h | 133 + .../usr/local/include/openssl/decodererr.h | 28 + .../arm64-v8a/usr/local/include/openssl/des.h | 147 +- .../arm64-v8a/usr/local/include/openssl/dh.h | 592 ++-- .../usr/local/include/openssl/dherr.h | 54 +- .../arm64-v8a/usr/local/include/openssl/dsa.h | 344 ++- .../usr/local/include/openssl/dsaerr.h | 50 +- .../usr/local/include/openssl/dtls1.h | 40 +- .../usr/local/include/openssl/e_os2.h | 85 +- .../usr/local/include/openssl/ebcdic.h | 12 +- .../arm64-v8a/usr/local/include/openssl/ec.h | 926 +++--- .../usr/local/include/openssl/ecdh.h | 2 +- .../usr/local/include/openssl/ecdsa.h | 2 +- .../usr/local/include/openssl/ecerr.h | 212 +- .../usr/local/include/openssl/encoder.h | 124 + .../usr/local/include/openssl/encodererr.h | 28 + .../usr/local/include/openssl/engine.h | 499 ++-- .../usr/local/include/openssl/engineerr.h | 64 +- .../arm64-v8a/usr/local/include/openssl/err.h | 490 +++- .../usr/local/include/openssl/err.h.in | 493 ++++ .../arm64-v8a/usr/local/include/openssl/ess.h | 128 + .../usr/local/include/openssl/ess.h.in | 81 + .../usr/local/include/openssl/esserr.h | 32 + .../arm64-v8a/usr/local/include/openssl/evp.h | 1387 ++++++--- .../usr/local/include/openssl/evperr.h | 168 +- .../usr/local/include/openssl/fips_names.h | 77 + .../usr/local/include/openssl/fipskey.h | 36 + .../usr/local/include/openssl/fipskey.h.in | 35 + .../usr/local/include/openssl/hmac.h | 69 +- .../usr/local/include/openssl/http.h | 109 + .../usr/local/include/openssl/httperr.h | 55 + .../usr/local/include/openssl/idea.h | 96 +- .../arm64-v8a/usr/local/include/openssl/kdf.h | 147 +- .../usr/local/include/openssl/kdferr.h | 53 +- .../usr/local/include/openssl/lhash.h | 244 +- .../usr/local/include/openssl/lhash.h.in | 306 ++ .../usr/local/include/openssl/macros.h | 325 +++ .../arm64-v8a/usr/local/include/openssl/md2.h | 48 +- .../arm64-v8a/usr/local/include/openssl/md4.h | 52 +- .../arm64-v8a/usr/local/include/openssl/md5.h | 50 +- .../usr/local/include/openssl/mdc2.h | 51 +- .../usr/local/include/openssl/modes.h | 17 +- .../usr/local/include/openssl/obj_mac.h | 351 ++- .../usr/local/include/openssl/objects.h | 22 +- .../usr/local/include/openssl/objectserr.h | 32 +- .../usr/local/include/openssl/ocsp.h | 231 +- .../usr/local/include/openssl/ocsp.h.in | 387 +++ .../usr/local/include/openssl/ocsperr.h | 45 +- .../usr/local/include/openssl/opensslconf.h | 199 +- .../local/include/openssl/opensslconf.h.in | 160 -- .../usr/local/include/openssl/opensslv.h | 181 +- .../usr/local/include/openssl/opensslv.h.in | 113 + .../usr/local/include/openssl/ossl_typ.h | 195 +- .../usr/local/include/openssl/param_build.h | 63 + .../usr/local/include/openssl/params.h | 160 ++ .../arm64-v8a/usr/local/include/openssl/pem.h | 489 ++-- .../usr/local/include/openssl/pem2.h | 12 +- .../usr/local/include/openssl/pemerr.h | 67 +- .../usr/local/include/openssl/pkcs12.h | 152 +- .../usr/local/include/openssl/pkcs12.h.in | 330 +++ .../usr/local/include/openssl/pkcs12err.h | 54 +- .../usr/local/include/openssl/pkcs7.h | 137 +- .../usr/local/include/openssl/pkcs7.h.in | 359 +++ .../usr/local/include/openssl/pkcs7err.h | 56 +- .../usr/local/include/openssl/prov_ssl.h | 34 + .../usr/local/include/openssl/proverr.h | 149 + .../usr/local/include/openssl/provider.h | 60 + .../usr/local/include/openssl/rand.h | 82 +- .../usr/local/include/openssl/rand_drbg.h | 130 - .../usr/local/include/openssl/randerr.h | 52 +- .../arm64-v8a/usr/local/include/openssl/rc2.h | 71 +- .../arm64-v8a/usr/local/include/openssl/rc4.h | 39 +- .../arm64-v8a/usr/local/include/openssl/rc5.h | 80 +- .../usr/local/include/openssl/ripemd.h | 58 +- .../arm64-v8a/usr/local/include/openssl/rsa.h | 591 ++-- .../usr/local/include/openssl/rsaerr.h | 96 +- .../usr/local/include/openssl/safestack.h | 178 +- .../usr/local/include/openssl/safestack.h.in | 227 ++ .../usr/local/include/openssl/seed.h | 77 +- .../usr/local/include/openssl/self_test.h | 94 + .../arm64-v8a/usr/local/include/openssl/sha.h | 111 +- .../arm64-v8a/usr/local/include/openssl/srp.h | 204 +- .../usr/local/include/openssl/srp.h.in | 214 ++ .../usr/local/include/openssl/srtp.h | 12 +- .../arm64-v8a/usr/local/include/openssl/ssl.h | 608 ++-- .../usr/local/include/openssl/ssl.h.in | 2530 +++++++++++++++++ .../usr/local/include/openssl/ssl2.h | 12 +- .../usr/local/include/openssl/ssl3.h | 19 +- .../usr/local/include/openssl/sslerr.h | 462 +-- .../usr/local/include/openssl/sslerr_legacy.h | 468 +++ .../usr/local/include/openssl/stack.h | 17 +- .../usr/local/include/openssl/store.h | 183 +- .../usr/local/include/openssl/storeerr.h | 64 +- .../usr/local/include/openssl/symhacks.h | 18 +- .../usr/local/include/openssl/tls1.h | 173 +- .../usr/local/include/openssl/trace.h | 312 ++ .../arm64-v8a/usr/local/include/openssl/ts.h | 152 +- .../usr/local/include/openssl/tserr.h | 81 +- .../usr/local/include/openssl/txt_db.h | 12 +- .../usr/local/include/openssl/types.h | 239 ++ .../arm64-v8a/usr/local/include/openssl/ui.h | 73 +- .../usr/local/include/openssl/ui.h.in | 384 +++ .../usr/local/include/openssl/uierr.h | 43 +- .../usr/local/include/openssl/whrlpool.h | 58 +- .../usr/local/include/openssl/x509.h | 665 +++-- .../usr/local/include/openssl/x509.h.in | 1085 +++++++ .../usr/local/include/openssl/x509_vfy.h | 630 ++-- .../usr/local/include/openssl/x509_vfy.h.in | 797 ++++++ .../usr/local/include/openssl/x509err.h | 86 +- .../usr/local/include/openssl/x509v3.h | 593 +++- .../usr/local/include/openssl/x509v3.h.in | 1020 +++++++ .../usr/local/include/openssl/x509v3err.h | 93 +- .../arm64-v8a/usr/local/lib/libcrypto.a | Bin 6321712 -> 11155436 bytes .../android/arm64-v8a/usr/local/lib/libssl.a | Bin 1191074 -> 1458788 bytes .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../usr/local/include/crypto/aes_platform.h | 517 ++++ .../usr/local/include/crypto/aria.h | 17 +- .../usr/local/include/crypto/asn1.h | 80 +- .../usr/local/include/crypto/asn1_dsa.h | 24 + .../usr/local/include/crypto/asn1err.h | 27 + .../usr/local/include/crypto/async.h | 12 +- .../usr/local/include/crypto/asyncerr.h | 27 + .../usr/local/include/crypto/bioerr.h | 27 + .../armeabi-v7a/usr/local/include/crypto/bn.h | 31 +- .../usr/local/include/crypto/bn_conf.h | 5 +- .../usr/local/include/crypto/bn_conf.h.in | 5 +- .../usr/local/include/crypto/bn_dh.h | 41 +- .../usr/local/include/crypto/bn_srp.h | 24 +- .../usr/local/include/crypto/bnerr.h | 27 + .../usr/local/include/crypto/buffererr.h | 27 + .../usr/local/include/crypto/chacha.h | 11 +- .../usr/local/include/crypto/cmll_platform.h | 51 + .../usr/local/include/crypto/cmperr.h | 30 + .../usr/local/include/crypto/cmserr.h | 30 + .../usr/local/include/crypto/comperr.h | 30 + .../usr/local/include/crypto/conferr.h | 27 + .../usr/local/include/crypto/context.h | 41 + .../usr/local/include/crypto/crmferr.h | 30 + .../usr/local/include/crypto/cryptlib.h | 36 +- .../usr/local/include/crypto/cryptoerr.h | 27 + .../usr/local/include/crypto/cterr.h | 30 + .../usr/local/include/crypto/ctype.h | 18 +- .../usr/local/include/crypto/decoder.h | 40 + .../usr/local/include/crypto/decodererr.h | 27 + .../usr/local/include/crypto/des_platform.h | 35 + .../armeabi-v7a/usr/local/include/crypto/dh.h | 62 + .../usr/local/include/crypto/dherr.h | 30 + .../usr/local/include/crypto/dsa.h | 49 + .../usr/local/include/crypto/dsaerr.h | 30 + .../usr/local/include/crypto/dso_conf.h | 6 +- .../usr/local/include/crypto/dso_conf.h.in | 8 +- .../armeabi-v7a/usr/local/include/crypto/ec.h | 65 +- .../usr/local/include/crypto/ecerr.h | 30 + .../usr/local/include/crypto/ecx.h | 150 + .../usr/local/include/crypto/encoder.h | 20 + .../usr/local/include/crypto/encodererr.h | 27 + .../usr/local/include/crypto/engine.h | 2 +- .../usr/local/include/crypto/engineerr.h | 30 + .../usr/local/include/crypto/err.h | 9 +- .../usr/local/include/crypto/ess.h | 76 + .../usr/local/include/crypto/esserr.h | 27 + .../usr/local/include/crypto/evp.h | 674 ++++- .../usr/local/include/crypto/evperr.h | 27 + .../usr/local/include/crypto/httperr.h | 27 + .../usr/local/include/crypto/lhash.h | 9 +- .../usr/local/include/crypto/md32_common.h | 26 +- .../usr/local/include/crypto/modes.h | 224 ++ .../usr/local/include/crypto/objects.h | 6 +- .../usr/local/include/crypto/objectserr.h | 27 + .../usr/local/include/crypto/ocsperr.h | 30 + .../usr/local/include/crypto/pem.h | 51 + .../usr/local/include/crypto/pemerr.h | 27 + .../usr/local/include/crypto/pkcs12err.h | 27 + .../usr/local/include/crypto/pkcs7.h | 19 + .../usr/local/include/crypto/pkcs7err.h | 27 + .../usr/local/include/crypto/poly1305.h | 29 +- .../usr/local/include/crypto/ppc_arch.h | 29 + .../usr/local/include/crypto/punycode.h | 27 + .../usr/local/include/crypto/rand.h | 166 +- .../usr/local/include/crypto/rand_pool.h | 109 + .../usr/local/include/crypto/randerr.h | 27 + .../usr/local/include/crypto/riscv_arch.def | 43 + .../usr/local/include/crypto/riscv_arch.h | 59 + .../usr/local/include/crypto/rsa.h | 130 + .../usr/local/include/crypto/rsaerr.h | 27 + .../usr/local/include/crypto/security_bits.h | 16 + .../usr/local/include/crypto/sha.h | 9 +- .../usr/local/include/crypto/siphash.h | 39 +- .../usr/local/include/crypto/siv.h | 33 + .../usr/local/include/crypto/sm2.h | 71 +- .../usr/local/include/crypto/sm2err.h | 44 +- .../usr/local/include/crypto/sm4.h | 11 +- .../usr/local/include/crypto/sm4_platform.h | 75 + .../usr/local/include/crypto/sparc_arch.h | 122 + .../usr/local/include/crypto/sparse_array.h | 92 + .../usr/local/include/crypto/store.h | 17 +- .../usr/local/include/crypto/storeerr.h | 27 + .../usr/local/include/crypto/tserr.h | 30 + .../usr/local/include/crypto/types.h | 32 + .../usr/local/include/crypto/uierr.h | 27 + .../usr/local/include/crypto/x509.h | 103 +- .../usr/local/include/crypto/x509err.h | 27 + .../usr/local/include/crypto/x509v3err.h | 27 + .../internal/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../internal/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../usr/local/include/internal/asn1.h | 16 + .../usr/local/include/internal/bio.h | 64 +- .../usr/local/include/internal/comp.h | 6 +- .../usr/local/include/internal/conf.h | 15 +- .../local/include/internal/constant_time.h | 38 +- .../usr/local/include/internal/core.h | 71 + .../usr/local/include/internal/cryptlib.h | 163 +- .../usr/local/include/internal/dane.h | 7 +- .../usr/local/include/internal/deprecated.h | 30 + .../usr/local/include/internal/der.h | 88 + .../usr/local/include/internal/dso.h | 7 +- .../usr/local/include/internal/dsoerr.h | 88 +- .../usr/local/include/internal/e_os.h | 432 +++ .../usr/local/include/internal/endian.h | 51 + .../usr/local/include/internal/err.h | 5 +- .../usr/local/include/internal/ffc.h | 216 ++ .../usr/local/include/internal/ktls.h | 404 +++ .../usr/local/include/internal/namemap.h | 41 + .../usr/local/include/internal/nelem.h | 5 +- .../usr/local/include/internal/numbers.h | 27 +- .../usr/local/include/internal/o_dir.h | 5 +- .../usr/local/include/internal/o_str.h | 17 - .../usr/local/include/internal/packet.h | 937 ++++++ .../local/include/internal/param_build_set.h | 46 + .../usr/local/include/internal/passphrase.h | 122 + .../usr/local/include/internal/property.h | 99 + .../usr/local/include/internal/propertyerr.h | 43 + .../usr/local/include/internal/provider.h | 119 + .../usr/local/include/internal/refcount.h | 128 +- .../usr/local/include/internal/sha3.h | 54 + .../usr/local/include/internal/sizes.h | 22 + .../local/include/{crypto => internal}/sm3.h | 20 +- .../usr/local/include/internal/sockets.h | 39 +- .../usr/local/include/internal/sslconf.h | 5 +- .../usr/local/include/internal/symhacks.h | 27 + .../usr/local/include/internal/thread_once.h | 36 +- .../usr/local/include/internal/tlsgroups.h | 50 + .../usr/local/include/internal/tsan_assist.h | 34 +- .../usr/local/include/internal/unicode.h | 31 + .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../usr/local/include/openssl/aes.h | 73 +- .../usr/local/include/openssl/asn1.h | 485 +++- .../usr/local/include/openssl/asn1.h.in | 964 +++++++ .../usr/local/include/openssl/asn1_mac.h | 2 +- .../usr/local/include/openssl/asn1err.h | 134 +- .../usr/local/include/openssl/asn1t.h | 309 +- .../usr/local/include/openssl/asn1t.h.in | 923 ++++++ .../usr/local/include/openssl/async.h | 26 +- .../usr/local/include/openssl/asyncerr.h | 29 +- .../usr/local/include/openssl/bio.h | 168 +- .../usr/local/include/openssl/bio.h.in | 864 ++++++ .../usr/local/include/openssl/bioerr.h | 83 +- .../usr/local/include/openssl/blowfish.h | 67 +- .../usr/local/include/openssl/bn.h | 145 +- .../usr/local/include/openssl/bnerr.h | 74 +- .../usr/local/include/openssl/buffer.h | 34 +- .../usr/local/include/openssl/buffererr.h | 25 +- .../usr/local/include/openssl/camellia.h | 102 +- .../usr/local/include/openssl/cast.h | 36 +- .../usr/local/include/openssl/cmac.h | 53 +- .../usr/local/include/openssl/cmp.h | 597 ++++ .../usr/local/include/openssl/cmp.h.in | 478 ++++ .../usr/local/include/openssl/cmp_util.h | 56 + .../usr/local/include/openssl/cmperr.h | 116 + .../usr/local/include/openssl/cms.h | 188 +- .../usr/local/include/openssl/cms.h.in | 395 +++ .../usr/local/include/openssl/cmserr.h | 118 +- .../usr/local/include/openssl/comp.h | 18 +- .../usr/local/include/openssl/comperr.h | 29 +- .../usr/local/include/openssl/conf.h | 112 +- .../usr/local/include/openssl/conf.h.in | 177 ++ .../usr/local/include/openssl/conf_api.h | 12 +- .../usr/local/include/openssl/conferr.h | 49 +- .../usr/local/include/openssl/configuration.h | 137 + .../local/include/openssl/configuration.h.in | 69 + .../usr/local/include/openssl/conftypes.h | 44 + .../usr/local/include/openssl/core.h | 233 ++ .../usr/local/include/openssl/core_dispatch.h | 943 ++++++ .../usr/local/include/openssl/core_names.h | 560 ++++ .../usr/local/include/openssl/core_object.h | 41 + .../usr/local/include/openssl/crmf.h | 227 ++ .../usr/local/include/openssl/crmf.h.in | 180 ++ .../usr/local/include/openssl/crmferr.h | 50 + .../usr/local/include/openssl/crypto.h | 341 ++- .../usr/local/include/openssl/crypto.h.in | 535 ++++ .../usr/local/include/openssl/cryptoerr.h | 74 +- .../local/include/openssl/cryptoerr_legacy.h | 1466 ++++++++++ .../usr/local/include/openssl/ct.h | 125 +- .../usr/local/include/openssl/ct.h.in | 525 ++++ .../usr/local/include/openssl/cterr.h | 51 +- .../usr/local/include/openssl/decoder.h | 133 + .../usr/local/include/openssl/decodererr.h | 28 + .../usr/local/include/openssl/des.h | 147 +- .../usr/local/include/openssl/dh.h | 592 ++-- .../usr/local/include/openssl/dherr.h | 54 +- .../usr/local/include/openssl/dsa.h | 344 ++- .../usr/local/include/openssl/dsaerr.h | 50 +- .../usr/local/include/openssl/dtls1.h | 40 +- .../usr/local/include/openssl/e_os2.h | 85 +- .../usr/local/include/openssl/ebcdic.h | 12 +- .../usr/local/include/openssl/ec.h | 926 +++--- .../usr/local/include/openssl/ecdh.h | 2 +- .../usr/local/include/openssl/ecdsa.h | 2 +- .../usr/local/include/openssl/ecerr.h | 212 +- .../usr/local/include/openssl/encoder.h | 124 + .../usr/local/include/openssl/encodererr.h | 28 + .../usr/local/include/openssl/engine.h | 499 ++-- .../usr/local/include/openssl/engineerr.h | 64 +- .../usr/local/include/openssl/err.h | 490 +++- .../usr/local/include/openssl/err.h.in | 493 ++++ .../usr/local/include/openssl/ess.h | 128 + .../usr/local/include/openssl/ess.h.in | 81 + .../usr/local/include/openssl/esserr.h | 32 + .../usr/local/include/openssl/evp.h | 1387 ++++++--- .../usr/local/include/openssl/evperr.h | 168 +- .../usr/local/include/openssl/fips_names.h | 77 + .../usr/local/include/openssl/fipskey.h | 36 + .../usr/local/include/openssl/fipskey.h.in | 35 + .../usr/local/include/openssl/hmac.h | 69 +- .../usr/local/include/openssl/http.h | 109 + .../usr/local/include/openssl/httperr.h | 55 + .../usr/local/include/openssl/idea.h | 96 +- .../usr/local/include/openssl/kdf.h | 147 +- .../usr/local/include/openssl/kdferr.h | 53 +- .../usr/local/include/openssl/lhash.h | 244 +- .../usr/local/include/openssl/lhash.h.in | 306 ++ .../usr/local/include/openssl/macros.h | 325 +++ .../usr/local/include/openssl/md2.h | 48 +- .../usr/local/include/openssl/md4.h | 52 +- .../usr/local/include/openssl/md5.h | 50 +- .../usr/local/include/openssl/mdc2.h | 51 +- .../usr/local/include/openssl/modes.h | 17 +- .../usr/local/include/openssl/obj_mac.h | 351 ++- .../usr/local/include/openssl/objects.h | 22 +- .../usr/local/include/openssl/objectserr.h | 32 +- .../usr/local/include/openssl/ocsp.h | 231 +- .../usr/local/include/openssl/ocsp.h.in | 387 +++ .../usr/local/include/openssl/ocsperr.h | 45 +- .../usr/local/include/openssl/opensslconf.h | 202 +- .../local/include/openssl/opensslconf.h.in | 160 -- .../usr/local/include/openssl/opensslv.h | 181 +- .../usr/local/include/openssl/opensslv.h.in | 113 + .../usr/local/include/openssl/ossl_typ.h | 195 +- .../usr/local/include/openssl/param_build.h | 63 + .../usr/local/include/openssl/params.h | 160 ++ .../usr/local/include/openssl/pem.h | 489 ++-- .../usr/local/include/openssl/pem2.h | 12 +- .../usr/local/include/openssl/pemerr.h | 67 +- .../usr/local/include/openssl/pkcs12.h | 152 +- .../usr/local/include/openssl/pkcs12.h.in | 330 +++ .../usr/local/include/openssl/pkcs12err.h | 54 +- .../usr/local/include/openssl/pkcs7.h | 137 +- .../usr/local/include/openssl/pkcs7.h.in | 359 +++ .../usr/local/include/openssl/pkcs7err.h | 56 +- .../usr/local/include/openssl/prov_ssl.h | 34 + .../usr/local/include/openssl/proverr.h | 149 + .../usr/local/include/openssl/provider.h | 60 + .../usr/local/include/openssl/rand.h | 82 +- .../usr/local/include/openssl/rand_drbg.h | 130 - .../usr/local/include/openssl/randerr.h | 52 +- .../usr/local/include/openssl/rc2.h | 71 +- .../usr/local/include/openssl/rc4.h | 39 +- .../usr/local/include/openssl/rc5.h | 80 +- .../usr/local/include/openssl/ripemd.h | 58 +- .../usr/local/include/openssl/rsa.h | 591 ++-- .../usr/local/include/openssl/rsaerr.h | 96 +- .../usr/local/include/openssl/safestack.h | 178 +- .../usr/local/include/openssl/safestack.h.in | 227 ++ .../usr/local/include/openssl/seed.h | 77 +- .../usr/local/include/openssl/self_test.h | 94 + .../usr/local/include/openssl/sha.h | 111 +- .../usr/local/include/openssl/srp.h | 204 +- .../usr/local/include/openssl/srp.h.in | 214 ++ .../usr/local/include/openssl/srtp.h | 12 +- .../usr/local/include/openssl/ssl.h | 608 ++-- .../usr/local/include/openssl/ssl.h.in | 2530 +++++++++++++++++ .../usr/local/include/openssl/ssl2.h | 12 +- .../usr/local/include/openssl/ssl3.h | 19 +- .../usr/local/include/openssl/sslerr.h | 462 +-- .../usr/local/include/openssl/sslerr_legacy.h | 468 +++ .../usr/local/include/openssl/stack.h | 17 +- .../usr/local/include/openssl/store.h | 183 +- .../usr/local/include/openssl/storeerr.h | 64 +- .../usr/local/include/openssl/symhacks.h | 18 +- .../usr/local/include/openssl/tls1.h | 173 +- .../usr/local/include/openssl/trace.h | 312 ++ .../usr/local/include/openssl/ts.h | 152 +- .../usr/local/include/openssl/tserr.h | 81 +- .../usr/local/include/openssl/txt_db.h | 12 +- .../usr/local/include/openssl/types.h | 239 ++ .../usr/local/include/openssl/ui.h | 73 +- .../usr/local/include/openssl/ui.h.in | 384 +++ .../usr/local/include/openssl/uierr.h | 43 +- .../usr/local/include/openssl/whrlpool.h | 58 +- .../usr/local/include/openssl/x509.h | 665 +++-- .../usr/local/include/openssl/x509.h.in | 1085 +++++++ .../usr/local/include/openssl/x509_vfy.h | 630 ++-- .../usr/local/include/openssl/x509_vfy.h.in | 797 ++++++ .../usr/local/include/openssl/x509err.h | 86 +- .../usr/local/include/openssl/x509v3.h | 593 +++- .../usr/local/include/openssl/x509v3.h.in | 1020 +++++++ .../usr/local/include/openssl/x509v3err.h | 93 +- .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../usr/local/include/crypto/aes_platform.h | 517 ++++ .../x86/usr/local/include/crypto/aria.h | 17 +- .../x86/usr/local/include/crypto/asn1.h | 80 +- .../x86/usr/local/include/crypto/asn1_dsa.h | 24 + .../x86/usr/local/include/crypto/asn1err.h | 27 + .../x86/usr/local/include/crypto/async.h | 12 +- .../x86/usr/local/include/crypto/asyncerr.h | 27 + .../x86/usr/local/include/crypto/bioerr.h | 27 + .../android/x86/usr/local/include/crypto/bn.h | 31 +- .../x86/usr/local/include/crypto/bn_conf.h | 5 +- .../x86/usr/local/include/crypto/bn_conf.h.in | 5 +- .../x86/usr/local/include/crypto/bn_dh.h | 41 +- .../x86/usr/local/include/crypto/bn_srp.h | 24 +- .../x86/usr/local/include/crypto/bnerr.h | 27 + .../x86/usr/local/include/crypto/buffererr.h | 27 + .../x86/usr/local/include/crypto/chacha.h | 11 +- .../usr/local/include/crypto/cmll_platform.h | 51 + .../x86/usr/local/include/crypto/cmperr.h | 30 + .../x86/usr/local/include/crypto/cmserr.h | 30 + .../x86/usr/local/include/crypto/comperr.h | 30 + .../x86/usr/local/include/crypto/conferr.h | 27 + .../x86/usr/local/include/crypto/context.h | 41 + .../x86/usr/local/include/crypto/crmferr.h | 30 + .../x86/usr/local/include/crypto/cryptlib.h | 36 +- .../x86/usr/local/include/crypto/cryptoerr.h | 27 + .../x86/usr/local/include/crypto/cterr.h | 30 + .../x86/usr/local/include/crypto/ctype.h | 18 +- .../x86/usr/local/include/crypto/decoder.h | 40 + .../x86/usr/local/include/crypto/decodererr.h | 27 + .../usr/local/include/crypto/des_platform.h | 35 + .../android/x86/usr/local/include/crypto/dh.h | 62 + .../x86/usr/local/include/crypto/dherr.h | 30 + .../x86/usr/local/include/crypto/dsa.h | 49 + .../x86/usr/local/include/crypto/dsaerr.h | 30 + .../x86/usr/local/include/crypto/dso_conf.h | 6 +- .../usr/local/include/crypto/dso_conf.h.in | 8 +- .../android/x86/usr/local/include/crypto/ec.h | 65 +- .../x86/usr/local/include/crypto/ecerr.h | 30 + .../x86/usr/local/include/crypto/ecx.h | 150 + .../x86/usr/local/include/crypto/encoder.h | 20 + .../x86/usr/local/include/crypto/encodererr.h | 27 + .../x86/usr/local/include/crypto/engine.h | 2 +- .../x86/usr/local/include/crypto/engineerr.h | 30 + .../x86/usr/local/include/crypto/err.h | 9 +- .../x86/usr/local/include/crypto/ess.h | 76 + .../x86/usr/local/include/crypto/esserr.h | 27 + .../x86/usr/local/include/crypto/evp.h | 674 ++++- .../x86/usr/local/include/crypto/evperr.h | 27 + .../x86/usr/local/include/crypto/httperr.h | 27 + .../x86/usr/local/include/crypto/lhash.h | 9 +- .../usr/local/include/crypto/md32_common.h | 26 +- .../x86/usr/local/include/crypto/modes.h | 224 ++ .../x86/usr/local/include/crypto/objects.h | 6 +- .../x86/usr/local/include/crypto/objectserr.h | 27 + .../x86/usr/local/include/crypto/ocsperr.h | 30 + .../x86/usr/local/include/crypto/pem.h | 51 + .../x86/usr/local/include/crypto/pemerr.h | 27 + .../x86/usr/local/include/crypto/pkcs12err.h | 27 + .../x86/usr/local/include/crypto/pkcs7.h | 19 + .../x86/usr/local/include/crypto/pkcs7err.h | 27 + .../x86/usr/local/include/crypto/poly1305.h | 29 +- .../x86/usr/local/include/crypto/ppc_arch.h | 29 + .../x86/usr/local/include/crypto/punycode.h | 27 + .../x86/usr/local/include/crypto/rand.h | 166 +- .../x86/usr/local/include/crypto/rand_pool.h | 109 + .../x86/usr/local/include/crypto/randerr.h | 27 + .../usr/local/include/crypto/riscv_arch.def | 43 + .../x86/usr/local/include/crypto/riscv_arch.h | 59 + .../x86/usr/local/include/crypto/rsa.h | 130 + .../x86/usr/local/include/crypto/rsaerr.h | 27 + .../usr/local/include/crypto/security_bits.h | 16 + .../x86/usr/local/include/crypto/sha.h | 9 +- .../x86/usr/local/include/crypto/siphash.h | 39 +- .../x86/usr/local/include/crypto/siv.h | 33 + .../x86/usr/local/include/crypto/sm2.h | 71 +- .../x86/usr/local/include/crypto/sm2err.h | 44 +- .../x86/usr/local/include/crypto/sm4.h | 11 +- .../usr/local/include/crypto/sm4_platform.h | 75 + .../x86/usr/local/include/crypto/sparc_arch.h | 122 + .../usr/local/include/crypto/sparse_array.h | 92 + .../x86/usr/local/include/crypto/store.h | 17 +- .../x86/usr/local/include/crypto/storeerr.h | 27 + .../x86/usr/local/include/crypto/tserr.h | 30 + .../x86/usr/local/include/crypto/types.h | 32 + .../x86/usr/local/include/crypto/uierr.h | 27 + .../x86/usr/local/include/crypto/x509.h | 103 +- .../x86/usr/local/include/crypto/x509err.h | 27 + .../x86/usr/local/include/crypto/x509v3err.h | 27 + .../internal/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../internal/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../x86/usr/local/include/internal/asn1.h | 16 + .../x86/usr/local/include/internal/bio.h | 64 +- .../x86/usr/local/include/internal/comp.h | 6 +- .../x86/usr/local/include/internal/conf.h | 15 +- .../local/include/internal/constant_time.h | 38 +- .../x86/usr/local/include/internal/core.h | 71 + .../x86/usr/local/include/internal/cryptlib.h | 163 +- .../x86/usr/local/include/internal/dane.h | 7 +- .../usr/local/include/internal/deprecated.h | 30 + .../x86/usr/local/include/internal/der.h | 88 + .../x86/usr/local/include/internal/dso.h | 7 +- .../x86/usr/local/include/internal/dsoerr.h | 88 +- .../x86/usr/local/include/internal/e_os.h | 432 +++ .../x86/usr/local/include/internal/endian.h | 51 + .../x86/usr/local/include/internal/err.h | 5 +- .../x86/usr/local/include/internal/ffc.h | 216 ++ .../x86/usr/local/include/internal/ktls.h | 404 +++ .../x86/usr/local/include/internal/namemap.h | 41 + .../x86/usr/local/include/internal/nelem.h | 5 +- .../x86/usr/local/include/internal/numbers.h | 27 +- .../x86/usr/local/include/internal/o_dir.h | 5 +- .../x86/usr/local/include/internal/o_str.h | 17 - .../x86/usr/local/include/internal/packet.h | 937 ++++++ .../local/include/internal/param_build_set.h | 46 + .../usr/local/include/internal/passphrase.h | 122 + .../x86/usr/local/include/internal/property.h | 99 + .../usr/local/include/internal/propertyerr.h | 43 + .../x86/usr/local/include/internal/provider.h | 119 + .../x86/usr/local/include/internal/refcount.h | 128 +- .../x86/usr/local/include/internal/sha3.h | 54 + .../x86/usr/local/include/internal/sizes.h | 22 + .../local/include/{crypto => internal}/sm3.h | 20 +- .../x86/usr/local/include/internal/sockets.h | 39 +- .../x86/usr/local/include/internal/sslconf.h | 5 +- .../x86/usr/local/include/internal/symhacks.h | 27 + .../usr/local/include/internal/thread_once.h | 36 +- .../usr/local/include/internal/tlsgroups.h | 50 + .../usr/local/include/internal/tsan_assist.h | 34 +- .../x86/usr/local/include/internal/unicode.h | 31 + .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../x86/usr/local/include/openssl/aes.h | 73 +- .../x86/usr/local/include/openssl/asn1.h | 485 +++- .../x86/usr/local/include/openssl/asn1.h.in | 964 +++++++ .../x86/usr/local/include/openssl/asn1_mac.h | 2 +- .../x86/usr/local/include/openssl/asn1err.h | 134 +- .../x86/usr/local/include/openssl/asn1t.h | 309 +- .../x86/usr/local/include/openssl/asn1t.h.in | 923 ++++++ .../x86/usr/local/include/openssl/async.h | 26 +- .../x86/usr/local/include/openssl/asyncerr.h | 29 +- .../x86/usr/local/include/openssl/bio.h | 168 +- .../x86/usr/local/include/openssl/bio.h.in | 864 ++++++ .../x86/usr/local/include/openssl/bioerr.h | 83 +- .../x86/usr/local/include/openssl/blowfish.h | 67 +- .../x86/usr/local/include/openssl/bn.h | 145 +- .../x86/usr/local/include/openssl/bnerr.h | 74 +- .../x86/usr/local/include/openssl/buffer.h | 34 +- .../x86/usr/local/include/openssl/buffererr.h | 25 +- .../x86/usr/local/include/openssl/camellia.h | 102 +- .../x86/usr/local/include/openssl/cast.h | 36 +- .../x86/usr/local/include/openssl/cmac.h | 53 +- .../x86/usr/local/include/openssl/cmp.h | 597 ++++ .../x86/usr/local/include/openssl/cmp.h.in | 478 ++++ .../x86/usr/local/include/openssl/cmp_util.h | 56 + .../x86/usr/local/include/openssl/cmperr.h | 116 + .../x86/usr/local/include/openssl/cms.h | 188 +- .../x86/usr/local/include/openssl/cms.h.in | 395 +++ .../x86/usr/local/include/openssl/cmserr.h | 118 +- .../x86/usr/local/include/openssl/comp.h | 18 +- .../x86/usr/local/include/openssl/comperr.h | 29 +- .../x86/usr/local/include/openssl/conf.h | 112 +- .../x86/usr/local/include/openssl/conf.h.in | 177 ++ .../x86/usr/local/include/openssl/conf_api.h | 12 +- .../x86/usr/local/include/openssl/conferr.h | 49 +- .../usr/local/include/openssl/configuration.h | 137 + .../local/include/openssl/configuration.h.in | 69 + .../x86/usr/local/include/openssl/conftypes.h | 44 + .../x86/usr/local/include/openssl/core.h | 233 ++ .../usr/local/include/openssl/core_dispatch.h | 943 ++++++ .../usr/local/include/openssl/core_names.h | 560 ++++ .../usr/local/include/openssl/core_object.h | 41 + .../x86/usr/local/include/openssl/crmf.h | 227 ++ .../x86/usr/local/include/openssl/crmf.h.in | 180 ++ .../x86/usr/local/include/openssl/crmferr.h | 50 + .../x86/usr/local/include/openssl/crypto.h | 341 ++- .../x86/usr/local/include/openssl/crypto.h.in | 535 ++++ .../x86/usr/local/include/openssl/cryptoerr.h | 74 +- .../local/include/openssl/cryptoerr_legacy.h | 1466 ++++++++++ .../x86/usr/local/include/openssl/ct.h | 125 +- .../x86/usr/local/include/openssl/ct.h.in | 525 ++++ .../x86/usr/local/include/openssl/cterr.h | 51 +- .../x86/usr/local/include/openssl/decoder.h | 133 + .../usr/local/include/openssl/decodererr.h | 28 + .../x86/usr/local/include/openssl/des.h | 147 +- .../x86/usr/local/include/openssl/dh.h | 592 ++-- .../x86/usr/local/include/openssl/dherr.h | 54 +- .../x86/usr/local/include/openssl/dsa.h | 344 ++- .../x86/usr/local/include/openssl/dsaerr.h | 50 +- .../x86/usr/local/include/openssl/dtls1.h | 40 +- .../x86/usr/local/include/openssl/e_os2.h | 85 +- .../x86/usr/local/include/openssl/ebcdic.h | 12 +- .../x86/usr/local/include/openssl/ec.h | 926 +++--- .../x86/usr/local/include/openssl/ecdh.h | 2 +- .../x86/usr/local/include/openssl/ecdsa.h | 2 +- .../x86/usr/local/include/openssl/ecerr.h | 212 +- .../x86/usr/local/include/openssl/encoder.h | 124 + .../usr/local/include/openssl/encodererr.h | 28 + .../x86/usr/local/include/openssl/engine.h | 499 ++-- .../x86/usr/local/include/openssl/engineerr.h | 64 +- .../x86/usr/local/include/openssl/err.h | 490 +++- .../x86/usr/local/include/openssl/err.h.in | 493 ++++ .../x86/usr/local/include/openssl/ess.h | 128 + .../x86/usr/local/include/openssl/ess.h.in | 81 + .../x86/usr/local/include/openssl/esserr.h | 32 + .../x86/usr/local/include/openssl/evp.h | 1387 ++++++--- .../x86/usr/local/include/openssl/evperr.h | 168 +- .../usr/local/include/openssl/fips_names.h | 77 + .../x86/usr/local/include/openssl/fipskey.h | 36 + .../usr/local/include/openssl/fipskey.h.in | 35 + .../x86/usr/local/include/openssl/hmac.h | 69 +- .../x86/usr/local/include/openssl/http.h | 109 + .../x86/usr/local/include/openssl/httperr.h | 55 + .../x86/usr/local/include/openssl/idea.h | 96 +- .../x86/usr/local/include/openssl/kdf.h | 147 +- .../x86/usr/local/include/openssl/kdferr.h | 53 +- .../x86/usr/local/include/openssl/lhash.h | 244 +- .../x86/usr/local/include/openssl/lhash.h.in | 306 ++ .../x86/usr/local/include/openssl/macros.h | 325 +++ .../x86/usr/local/include/openssl/md2.h | 48 +- .../x86/usr/local/include/openssl/md4.h | 52 +- .../x86/usr/local/include/openssl/md5.h | 50 +- .../x86/usr/local/include/openssl/mdc2.h | 51 +- .../x86/usr/local/include/openssl/modes.h | 17 +- .../x86/usr/local/include/openssl/obj_mac.h | 351 ++- .../x86/usr/local/include/openssl/objects.h | 22 +- .../usr/local/include/openssl/objectserr.h | 32 +- .../x86/usr/local/include/openssl/ocsp.h | 231 +- .../x86/usr/local/include/openssl/ocsp.h.in | 387 +++ .../x86/usr/local/include/openssl/ocsperr.h | 45 +- .../usr/local/include/openssl/opensslconf.h | 202 +- .../local/include/openssl/opensslconf.h.in | 160 -- .../x86/usr/local/include/openssl/opensslv.h | 181 +- .../usr/local/include/openssl/opensslv.h.in | 113 + .../x86/usr/local/include/openssl/ossl_typ.h | 195 +- .../usr/local/include/openssl/param_build.h | 63 + .../x86/usr/local/include/openssl/params.h | 160 ++ .../x86/usr/local/include/openssl/pem.h | 489 ++-- .../x86/usr/local/include/openssl/pem2.h | 12 +- .../x86/usr/local/include/openssl/pemerr.h | 67 +- .../x86/usr/local/include/openssl/pkcs12.h | 152 +- .../x86/usr/local/include/openssl/pkcs12.h.in | 330 +++ .../x86/usr/local/include/openssl/pkcs12err.h | 54 +- .../x86/usr/local/include/openssl/pkcs7.h | 137 +- .../x86/usr/local/include/openssl/pkcs7.h.in | 359 +++ .../x86/usr/local/include/openssl/pkcs7err.h | 56 +- .../x86/usr/local/include/openssl/prov_ssl.h | 34 + .../x86/usr/local/include/openssl/proverr.h | 149 + .../x86/usr/local/include/openssl/provider.h | 60 + .../x86/usr/local/include/openssl/rand.h | 82 +- .../x86/usr/local/include/openssl/rand_drbg.h | 130 - .../x86/usr/local/include/openssl/randerr.h | 52 +- .../x86/usr/local/include/openssl/rc2.h | 71 +- .../x86/usr/local/include/openssl/rc4.h | 39 +- .../x86/usr/local/include/openssl/rc5.h | 80 +- .../x86/usr/local/include/openssl/ripemd.h | 58 +- .../x86/usr/local/include/openssl/rsa.h | 591 ++-- .../x86/usr/local/include/openssl/rsaerr.h | 96 +- .../x86/usr/local/include/openssl/safestack.h | 178 +- .../usr/local/include/openssl/safestack.h.in | 227 ++ .../x86/usr/local/include/openssl/seed.h | 77 +- .../x86/usr/local/include/openssl/self_test.h | 94 + .../x86/usr/local/include/openssl/sha.h | 111 +- .../x86/usr/local/include/openssl/srp.h | 204 +- .../x86/usr/local/include/openssl/srp.h.in | 214 ++ .../x86/usr/local/include/openssl/srtp.h | 12 +- .../x86/usr/local/include/openssl/ssl.h | 608 ++-- .../x86/usr/local/include/openssl/ssl.h.in | 2530 +++++++++++++++++ .../x86/usr/local/include/openssl/ssl2.h | 12 +- .../x86/usr/local/include/openssl/ssl3.h | 19 +- .../x86/usr/local/include/openssl/sslerr.h | 462 +-- .../usr/local/include/openssl/sslerr_legacy.h | 468 +++ .../x86/usr/local/include/openssl/stack.h | 17 +- .../x86/usr/local/include/openssl/store.h | 183 +- .../x86/usr/local/include/openssl/storeerr.h | 64 +- .../x86/usr/local/include/openssl/symhacks.h | 18 +- .../x86/usr/local/include/openssl/tls1.h | 173 +- .../x86/usr/local/include/openssl/trace.h | 312 ++ .../x86/usr/local/include/openssl/ts.h | 152 +- .../x86/usr/local/include/openssl/tserr.h | 81 +- .../x86/usr/local/include/openssl/txt_db.h | 12 +- .../x86/usr/local/include/openssl/types.h | 239 ++ .../x86/usr/local/include/openssl/ui.h | 73 +- .../x86/usr/local/include/openssl/ui.h.in | 384 +++ .../x86/usr/local/include/openssl/uierr.h | 43 +- .../x86/usr/local/include/openssl/whrlpool.h | 58 +- .../x86/usr/local/include/openssl/x509.h | 665 +++-- .../x86/usr/local/include/openssl/x509.h.in | 1085 +++++++ .../x86/usr/local/include/openssl/x509_vfy.h | 630 ++-- .../usr/local/include/openssl/x509_vfy.h.in | 797 ++++++ .../x86/usr/local/include/openssl/x509err.h | 86 +- .../x86/usr/local/include/openssl/x509v3.h | 593 +++- .../x86/usr/local/include/openssl/x509v3.h.in | 1020 +++++++ .../x86/usr/local/include/openssl/x509v3err.h | 93 +- .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../usr/local/include/crypto/aes_platform.h | 517 ++++ .../x86_64/usr/local/include/crypto/aria.h | 17 +- .../x86_64/usr/local/include/crypto/asn1.h | 80 +- .../usr/local/include/crypto/asn1_dsa.h | 24 + .../x86_64/usr/local/include/crypto/asn1err.h | 27 + .../x86_64/usr/local/include/crypto/async.h | 12 +- .../usr/local/include/crypto/asyncerr.h | 27 + .../x86_64/usr/local/include/crypto/bioerr.h | 27 + .../x86_64/usr/local/include/crypto/bn.h | 31 +- .../x86_64/usr/local/include/crypto/bn_conf.h | 5 +- .../usr/local/include/crypto/bn_conf.h.in | 5 +- .../x86_64/usr/local/include/crypto/bn_dh.h | 41 +- .../x86_64/usr/local/include/crypto/bn_srp.h | 24 +- .../x86_64/usr/local/include/crypto/bnerr.h | 27 + .../usr/local/include/crypto/buffererr.h | 27 + .../x86_64/usr/local/include/crypto/chacha.h | 11 +- .../usr/local/include/crypto/cmll_platform.h | 51 + .../x86_64/usr/local/include/crypto/cmperr.h | 30 + .../x86_64/usr/local/include/crypto/cmserr.h | 30 + .../x86_64/usr/local/include/crypto/comperr.h | 30 + .../x86_64/usr/local/include/crypto/conferr.h | 27 + .../x86_64/usr/local/include/crypto/context.h | 41 + .../x86_64/usr/local/include/crypto/crmferr.h | 30 + .../usr/local/include/crypto/cryptlib.h | 36 +- .../usr/local/include/crypto/cryptoerr.h | 27 + .../x86_64/usr/local/include/crypto/cterr.h | 30 + .../x86_64/usr/local/include/crypto/ctype.h | 18 +- .../x86_64/usr/local/include/crypto/decoder.h | 40 + .../usr/local/include/crypto/decodererr.h | 27 + .../usr/local/include/crypto/des_platform.h | 35 + .../x86_64/usr/local/include/crypto/dh.h | 62 + .../x86_64/usr/local/include/crypto/dherr.h | 30 + .../x86_64/usr/local/include/crypto/dsa.h | 49 + .../x86_64/usr/local/include/crypto/dsaerr.h | 30 + .../usr/local/include/crypto/dso_conf.h | 6 +- .../usr/local/include/crypto/dso_conf.h.in | 8 +- .../x86_64/usr/local/include/crypto/ec.h | 65 +- .../x86_64/usr/local/include/crypto/ecerr.h | 30 + .../x86_64/usr/local/include/crypto/ecx.h | 150 + .../x86_64/usr/local/include/crypto/encoder.h | 20 + .../usr/local/include/crypto/encodererr.h | 27 + .../x86_64/usr/local/include/crypto/engine.h | 2 +- .../usr/local/include/crypto/engineerr.h | 30 + .../x86_64/usr/local/include/crypto/err.h | 9 +- .../x86_64/usr/local/include/crypto/ess.h | 76 + .../x86_64/usr/local/include/crypto/esserr.h | 27 + .../x86_64/usr/local/include/crypto/evp.h | 674 ++++- .../x86_64/usr/local/include/crypto/evperr.h | 27 + .../x86_64/usr/local/include/crypto/httperr.h | 27 + .../x86_64/usr/local/include/crypto/lhash.h | 9 +- .../usr/local/include/crypto/md32_common.h | 26 +- .../x86_64/usr/local/include/crypto/modes.h | 224 ++ .../x86_64/usr/local/include/crypto/objects.h | 6 +- .../usr/local/include/crypto/objectserr.h | 27 + .../x86_64/usr/local/include/crypto/ocsperr.h | 30 + .../x86_64/usr/local/include/crypto/pem.h | 51 + .../x86_64/usr/local/include/crypto/pemerr.h | 27 + .../usr/local/include/crypto/pkcs12err.h | 27 + .../x86_64/usr/local/include/crypto/pkcs7.h | 19 + .../usr/local/include/crypto/pkcs7err.h | 27 + .../usr/local/include/crypto/poly1305.h | 29 +- .../usr/local/include/crypto/ppc_arch.h | 29 + .../usr/local/include/crypto/punycode.h | 27 + .../x86_64/usr/local/include/crypto/rand.h | 166 +- .../usr/local/include/crypto/rand_pool.h | 109 + .../x86_64/usr/local/include/crypto/randerr.h | 27 + .../usr/local/include/crypto/riscv_arch.def | 43 + .../usr/local/include/crypto/riscv_arch.h | 59 + .../x86_64/usr/local/include/crypto/rsa.h | 130 + .../x86_64/usr/local/include/crypto/rsaerr.h | 27 + .../usr/local/include/crypto/security_bits.h | 16 + .../x86_64/usr/local/include/crypto/sha.h | 9 +- .../x86_64/usr/local/include/crypto/siphash.h | 39 +- .../x86_64/usr/local/include/crypto/siv.h | 33 + .../x86_64/usr/local/include/crypto/sm2.h | 71 +- .../x86_64/usr/local/include/crypto/sm2err.h | 44 +- .../x86_64/usr/local/include/crypto/sm4.h | 11 +- .../usr/local/include/crypto/sm4_platform.h | 75 + .../usr/local/include/crypto/sparc_arch.h | 122 + .../usr/local/include/crypto/sparse_array.h | 92 + .../x86_64/usr/local/include/crypto/store.h | 17 +- .../usr/local/include/crypto/storeerr.h | 27 + .../x86_64/usr/local/include/crypto/tserr.h | 30 + .../x86_64/usr/local/include/crypto/types.h | 32 + .../x86_64/usr/local/include/crypto/uierr.h | 27 + .../x86_64/usr/local/include/crypto/x509.h | 103 +- .../x86_64/usr/local/include/crypto/x509err.h | 27 + .../usr/local/include/crypto/x509v3err.h | 27 + .../internal/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../internal/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../x86_64/usr/local/include/internal/asn1.h | 16 + .../x86_64/usr/local/include/internal/bio.h | 64 +- .../x86_64/usr/local/include/internal/comp.h | 6 +- .../x86_64/usr/local/include/internal/conf.h | 15 +- .../local/include/internal/constant_time.h | 38 +- .../x86_64/usr/local/include/internal/core.h | 71 + .../usr/local/include/internal/cryptlib.h | 163 +- .../x86_64/usr/local/include/internal/dane.h | 7 +- .../usr/local/include/internal/deprecated.h | 30 + .../x86_64/usr/local/include/internal/der.h | 88 + .../x86_64/usr/local/include/internal/dso.h | 7 +- .../usr/local/include/internal/dsoerr.h | 88 +- .../x86_64/usr/local/include/internal/e_os.h | 432 +++ .../usr/local/include/internal/endian.h | 51 + .../x86_64/usr/local/include/internal/err.h | 5 +- .../x86_64/usr/local/include/internal/ffc.h | 216 ++ .../x86_64/usr/local/include/internal/ktls.h | 404 +++ .../usr/local/include/internal/namemap.h | 41 + .../x86_64/usr/local/include/internal/nelem.h | 5 +- .../usr/local/include/internal/numbers.h | 27 +- .../x86_64/usr/local/include/internal/o_dir.h | 5 +- .../x86_64/usr/local/include/internal/o_str.h | 17 - .../usr/local/include/internal/packet.h | 937 ++++++ .../local/include/internal/param_build_set.h | 46 + .../usr/local/include/internal/passphrase.h | 122 + .../usr/local/include/internal/property.h | 99 + .../usr/local/include/internal/propertyerr.h | 43 + .../usr/local/include/internal/provider.h | 119 + .../usr/local/include/internal/refcount.h | 128 +- .../x86_64/usr/local/include/internal/sha3.h | 54 + .../x86_64/usr/local/include/internal/sizes.h | 22 + .../local/include/{crypto => internal}/sm3.h | 20 +- .../usr/local/include/internal/sockets.h | 39 +- .../usr/local/include/internal/sslconf.h | 5 +- .../usr/local/include/internal/symhacks.h | 27 + .../usr/local/include/internal/thread_once.h | 36 +- .../usr/local/include/internal/tlsgroups.h | 50 + .../usr/local/include/internal/tsan_assist.h | 34 +- .../usr/local/include/internal/unicode.h | 31 + .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 2 +- .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 2 +- .../x86_64/usr/local/include/openssl/aes.h | 73 +- .../x86_64/usr/local/include/openssl/asn1.h | 485 +++- .../usr/local/include/openssl/asn1.h.in | 964 +++++++ .../usr/local/include/openssl/asn1_mac.h | 2 +- .../usr/local/include/openssl/asn1err.h | 134 +- .../x86_64/usr/local/include/openssl/asn1t.h | 309 +- .../usr/local/include/openssl/asn1t.h.in | 923 ++++++ .../x86_64/usr/local/include/openssl/async.h | 26 +- .../usr/local/include/openssl/asyncerr.h | 29 +- .../x86_64/usr/local/include/openssl/bio.h | 168 +- .../x86_64/usr/local/include/openssl/bio.h.in | 864 ++++++ .../x86_64/usr/local/include/openssl/bioerr.h | 83 +- .../usr/local/include/openssl/blowfish.h | 67 +- .../x86_64/usr/local/include/openssl/bn.h | 145 +- .../x86_64/usr/local/include/openssl/bnerr.h | 74 +- .../x86_64/usr/local/include/openssl/buffer.h | 34 +- .../usr/local/include/openssl/buffererr.h | 25 +- .../usr/local/include/openssl/camellia.h | 102 +- .../x86_64/usr/local/include/openssl/cast.h | 36 +- .../x86_64/usr/local/include/openssl/cmac.h | 53 +- .../x86_64/usr/local/include/openssl/cmp.h | 597 ++++ .../x86_64/usr/local/include/openssl/cmp.h.in | 478 ++++ .../usr/local/include/openssl/cmp_util.h | 56 + .../x86_64/usr/local/include/openssl/cmperr.h | 116 + .../x86_64/usr/local/include/openssl/cms.h | 188 +- .../x86_64/usr/local/include/openssl/cms.h.in | 395 +++ .../x86_64/usr/local/include/openssl/cmserr.h | 118 +- .../x86_64/usr/local/include/openssl/comp.h | 18 +- .../usr/local/include/openssl/comperr.h | 29 +- .../x86_64/usr/local/include/openssl/conf.h | 112 +- .../usr/local/include/openssl/conf.h.in | 177 ++ .../usr/local/include/openssl/conf_api.h | 12 +- .../usr/local/include/openssl/conferr.h | 49 +- .../usr/local/include/openssl/configuration.h | 137 + .../local/include/openssl/configuration.h.in | 69 + .../usr/local/include/openssl/conftypes.h | 44 + .../x86_64/usr/local/include/openssl/core.h | 233 ++ .../usr/local/include/openssl/core_dispatch.h | 943 ++++++ .../usr/local/include/openssl/core_names.h | 560 ++++ .../usr/local/include/openssl/core_object.h | 41 + .../x86_64/usr/local/include/openssl/crmf.h | 227 ++ .../usr/local/include/openssl/crmf.h.in | 180 ++ .../usr/local/include/openssl/crmferr.h | 50 + .../x86_64/usr/local/include/openssl/crypto.h | 341 ++- .../usr/local/include/openssl/crypto.h.in | 535 ++++ .../usr/local/include/openssl/cryptoerr.h | 74 +- .../local/include/openssl/cryptoerr_legacy.h | 1466 ++++++++++ .../x86_64/usr/local/include/openssl/ct.h | 125 +- .../x86_64/usr/local/include/openssl/ct.h.in | 525 ++++ .../x86_64/usr/local/include/openssl/cterr.h | 51 +- .../usr/local/include/openssl/decoder.h | 133 + .../usr/local/include/openssl/decodererr.h | 28 + .../x86_64/usr/local/include/openssl/des.h | 147 +- .../x86_64/usr/local/include/openssl/dh.h | 592 ++-- .../x86_64/usr/local/include/openssl/dherr.h | 54 +- .../x86_64/usr/local/include/openssl/dsa.h | 344 ++- .../x86_64/usr/local/include/openssl/dsaerr.h | 50 +- .../x86_64/usr/local/include/openssl/dtls1.h | 40 +- .../x86_64/usr/local/include/openssl/e_os2.h | 85 +- .../x86_64/usr/local/include/openssl/ebcdic.h | 12 +- .../x86_64/usr/local/include/openssl/ec.h | 926 +++--- .../x86_64/usr/local/include/openssl/ecdh.h | 2 +- .../x86_64/usr/local/include/openssl/ecdsa.h | 2 +- .../x86_64/usr/local/include/openssl/ecerr.h | 212 +- .../usr/local/include/openssl/encoder.h | 124 + .../usr/local/include/openssl/encodererr.h | 28 + .../x86_64/usr/local/include/openssl/engine.h | 499 ++-- .../usr/local/include/openssl/engineerr.h | 64 +- .../x86_64/usr/local/include/openssl/err.h | 490 +++- .../x86_64/usr/local/include/openssl/err.h.in | 493 ++++ .../x86_64/usr/local/include/openssl/ess.h | 128 + .../x86_64/usr/local/include/openssl/ess.h.in | 81 + .../x86_64/usr/local/include/openssl/esserr.h | 32 + .../x86_64/usr/local/include/openssl/evp.h | 1387 ++++++--- .../x86_64/usr/local/include/openssl/evperr.h | 168 +- .../usr/local/include/openssl/fips_names.h | 77 + .../usr/local/include/openssl/fipskey.h | 36 + .../usr/local/include/openssl/fipskey.h.in | 35 + .../x86_64/usr/local/include/openssl/hmac.h | 69 +- .../x86_64/usr/local/include/openssl/http.h | 109 + .../usr/local/include/openssl/httperr.h | 55 + .../x86_64/usr/local/include/openssl/idea.h | 96 +- .../x86_64/usr/local/include/openssl/kdf.h | 147 +- .../x86_64/usr/local/include/openssl/kdferr.h | 53 +- .../x86_64/usr/local/include/openssl/lhash.h | 244 +- .../usr/local/include/openssl/lhash.h.in | 306 ++ .../x86_64/usr/local/include/openssl/macros.h | 325 +++ .../x86_64/usr/local/include/openssl/md2.h | 48 +- .../x86_64/usr/local/include/openssl/md4.h | 52 +- .../x86_64/usr/local/include/openssl/md5.h | 50 +- .../x86_64/usr/local/include/openssl/mdc2.h | 51 +- .../x86_64/usr/local/include/openssl/modes.h | 17 +- .../usr/local/include/openssl/obj_mac.h | 351 ++- .../usr/local/include/openssl/objects.h | 22 +- .../usr/local/include/openssl/objectserr.h | 32 +- .../x86_64/usr/local/include/openssl/ocsp.h | 231 +- .../usr/local/include/openssl/ocsp.h.in | 387 +++ .../usr/local/include/openssl/ocsperr.h | 45 +- .../usr/local/include/openssl/opensslconf.h | 199 +- .../local/include/openssl/opensslconf.h.in | 160 -- .../usr/local/include/openssl/opensslv.h | 181 +- .../usr/local/include/openssl/opensslv.h.in | 113 + .../usr/local/include/openssl/ossl_typ.h | 195 +- .../usr/local/include/openssl/param_build.h | 63 + .../x86_64/usr/local/include/openssl/params.h | 160 ++ .../x86_64/usr/local/include/openssl/pem.h | 489 ++-- .../x86_64/usr/local/include/openssl/pem2.h | 12 +- .../x86_64/usr/local/include/openssl/pemerr.h | 67 +- .../x86_64/usr/local/include/openssl/pkcs12.h | 152 +- .../usr/local/include/openssl/pkcs12.h.in | 330 +++ .../usr/local/include/openssl/pkcs12err.h | 54 +- .../x86_64/usr/local/include/openssl/pkcs7.h | 137 +- .../usr/local/include/openssl/pkcs7.h.in | 359 +++ .../usr/local/include/openssl/pkcs7err.h | 56 +- .../usr/local/include/openssl/prov_ssl.h | 34 + .../usr/local/include/openssl/proverr.h | 149 + .../usr/local/include/openssl/provider.h | 60 + .../x86_64/usr/local/include/openssl/rand.h | 82 +- .../usr/local/include/openssl/rand_drbg.h | 130 - .../usr/local/include/openssl/randerr.h | 52 +- .../x86_64/usr/local/include/openssl/rc2.h | 71 +- .../x86_64/usr/local/include/openssl/rc4.h | 39 +- .../x86_64/usr/local/include/openssl/rc5.h | 80 +- .../x86_64/usr/local/include/openssl/ripemd.h | 58 +- .../x86_64/usr/local/include/openssl/rsa.h | 591 ++-- .../x86_64/usr/local/include/openssl/rsaerr.h | 96 +- .../usr/local/include/openssl/safestack.h | 178 +- .../usr/local/include/openssl/safestack.h.in | 227 ++ .../x86_64/usr/local/include/openssl/seed.h | 77 +- .../usr/local/include/openssl/self_test.h | 94 + .../x86_64/usr/local/include/openssl/sha.h | 111 +- .../x86_64/usr/local/include/openssl/srp.h | 204 +- .../x86_64/usr/local/include/openssl/srp.h.in | 214 ++ .../x86_64/usr/local/include/openssl/srtp.h | 12 +- .../x86_64/usr/local/include/openssl/ssl.h | 608 ++-- .../x86_64/usr/local/include/openssl/ssl.h.in | 2530 +++++++++++++++++ .../x86_64/usr/local/include/openssl/ssl2.h | 12 +- .../x86_64/usr/local/include/openssl/ssl3.h | 19 +- .../x86_64/usr/local/include/openssl/sslerr.h | 462 +-- .../usr/local/include/openssl/sslerr_legacy.h | 468 +++ .../x86_64/usr/local/include/openssl/stack.h | 17 +- .../x86_64/usr/local/include/openssl/store.h | 183 +- .../usr/local/include/openssl/storeerr.h | 64 +- .../usr/local/include/openssl/symhacks.h | 18 +- .../x86_64/usr/local/include/openssl/tls1.h | 173 +- .../x86_64/usr/local/include/openssl/trace.h | 312 ++ .../x86_64/usr/local/include/openssl/ts.h | 152 +- .../x86_64/usr/local/include/openssl/tserr.h | 81 +- .../x86_64/usr/local/include/openssl/txt_db.h | 12 +- .../x86_64/usr/local/include/openssl/types.h | 239 ++ .../x86_64/usr/local/include/openssl/ui.h | 73 +- .../x86_64/usr/local/include/openssl/ui.h.in | 384 +++ .../x86_64/usr/local/include/openssl/uierr.h | 43 +- .../usr/local/include/openssl/whrlpool.h | 58 +- .../x86_64/usr/local/include/openssl/x509.h | 665 +++-- .../usr/local/include/openssl/x509.h.in | 1085 +++++++ .../usr/local/include/openssl/x509_vfy.h | 630 ++-- .../usr/local/include/openssl/x509_vfy.h.in | 797 ++++++ .../usr/local/include/openssl/x509err.h | 86 +- .../x86_64/usr/local/include/openssl/x509v3.h | 593 +++- .../usr/local/include/openssl/x509v3.h.in | 1020 +++++++ .../usr/local/include/openssl/x509v3err.h | 93 +- .../android/x86_64/usr/local/lib/libcrypto.a | Bin 6408948 -> 11860070 bytes .../android/x86_64/usr/local/lib/libssl.a | Bin 1228378 -> 1531204 bytes tools/ssl-android | 5 +- 1185 files changed, 151646 insertions(+), 31997 deletions(-) create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/aes_platform.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1_dsa.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1err.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/asyncerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/bioerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/bnerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/buffererr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmll_platform.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmperr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmserr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/comperr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/conferr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/context.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/crmferr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptoerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/cterr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/decoder.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/decodererr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/des_platform.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/dh.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/dherr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsa.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsaerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecx.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/encoder.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/encodererr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/engineerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ess.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/esserr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/evperr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/httperr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/modes.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/objectserr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ocsperr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/pem.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/pemerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs12err.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7err.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ppc_arch.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/punycode.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand_pool.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/randerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.def create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsa.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsaerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/security_bits.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/siv.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4_platform.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparc_arch.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparse_array.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/storeerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/tserr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/types.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/uierr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509err.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509v3err.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/asn1.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/core.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/deprecated.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/der.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/e_os.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/endian.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/ffc.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/ktls.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/namemap.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/o_str.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/packet.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/param_build_set.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/passphrase.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/property.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/propertyerr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/provider.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/sha3.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/sizes.h rename deps/openssl/android/arm64-v8a/usr/local/include/{crypto => internal}/sm3.h (56%) create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/symhacks.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/tlsgroups.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/unicode.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp_util.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmperr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/conftypes.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/core.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_dispatch.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_object.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmferr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr_legacy.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/decoder.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/decodererr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/encoder.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/encodererr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/esserr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/fips_names.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/http.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/httperr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/macros.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/param_build.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/params.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/prov_ssl.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/proverr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/provider.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand_drbg.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/self_test.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr_legacy.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/trace.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/types.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/aes_platform.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1_dsa.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1err.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asyncerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bioerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bnerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/buffererr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmll_platform.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmperr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmserr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/comperr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/conferr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/context.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/crmferr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptoerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cterr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decoder.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decodererr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/des_platform.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dh.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dherr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsa.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsaerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecx.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encoder.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encodererr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engineerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ess.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/esserr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evperr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/httperr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/modes.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objectserr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ocsperr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pem.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pemerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs12err.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7err.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ppc_arch.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/punycode.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand_pool.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/randerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.def create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsa.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsaerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/security_bits.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siv.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4_platform.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparc_arch.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparse_array.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/storeerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/tserr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/types.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/uierr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509err.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509v3err.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/asn1.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/core.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/deprecated.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/der.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/e_os.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/endian.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/ffc.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/ktls.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/namemap.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/o_str.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_build_set.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/passphrase.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/property.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/propertyerr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/provider.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/sha3.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/sizes.h rename deps/openssl/android/armeabi-v7a/usr/local/include/{crypto => internal}/sm3.h (56%) create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/symhacks.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/tlsgroups.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/unicode.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp_util.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmperr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conftypes.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_dispatch.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_object.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmferr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr_legacy.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decoder.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decodererr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encoder.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encodererr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/esserr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fips_names.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/http.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/httperr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/macros.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslconf.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/param_build.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/params.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/prov_ssl.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/proverr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/provider.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand_drbg.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/self_test.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr_legacy.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/trace.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/types.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/aes_platform.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/asn1_dsa.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/asn1err.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/asyncerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/bioerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/bnerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/buffererr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/cmll_platform.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/cmperr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/cmserr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/comperr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/conferr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/context.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/crmferr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/cryptoerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/cterr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/decoder.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/decodererr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/des_platform.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/dh.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/dherr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/dsa.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/dsaerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ecerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ecx.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/encoder.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/encodererr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/engineerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ess.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/esserr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/evperr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/httperr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/modes.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/objectserr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ocsperr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/pem.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/pemerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/pkcs12err.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/pkcs7.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/pkcs7err.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ppc_arch.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/punycode.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/rand_pool.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/randerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.def create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/rsa.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/rsaerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/security_bits.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/siv.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/sm4_platform.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/sparc_arch.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/sparse_array.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/storeerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/tserr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/types.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/uierr.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/x509err.h create mode 100644 deps/openssl/android/x86/usr/local/include/crypto/x509v3err.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/asn1.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/core.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/deprecated.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/der.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/e_os.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/endian.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/ffc.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/ktls.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/namemap.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/o_str.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/packet.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/param_build_set.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/passphrase.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/property.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/propertyerr.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/provider.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/sha3.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/sizes.h rename deps/openssl/android/x86/usr/local/include/{crypto => internal}/sm3.h (56%) create mode 100644 deps/openssl/android/x86/usr/local/include/internal/symhacks.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/tlsgroups.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/unicode.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/asn1.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/asn1t.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/bio.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cmp.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cmp.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cmp_util.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cmperr.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cms.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/conf.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/configuration.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/configuration.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/conftypes.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/core.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/core_dispatch.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/core_names.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/core_object.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/crmf.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/crmf.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/crmferr.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/crypto.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cryptoerr_legacy.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ct.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/decoder.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/decodererr.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/encoder.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/encodererr.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/err.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ess.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ess.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/esserr.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/fips_names.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/fipskey.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/fipskey.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/http.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/httperr.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/lhash.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/macros.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ocsp.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/opensslconf.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/opensslv.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/param_build.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/params.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/prov_ssl.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/proverr.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/provider.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/rand_drbg.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/safestack.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/self_test.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/srp.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ssl.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/sslerr_legacy.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/trace.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/types.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ui.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/x509.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/x509v3.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/aes_platform.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/asn1_dsa.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/asn1err.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/asyncerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/bioerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/bnerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/buffererr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/cmll_platform.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/cmperr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/cmserr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/comperr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/conferr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/context.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/crmferr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/cryptoerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/cterr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/decoder.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/decodererr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/des_platform.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/dh.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/dherr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/dsa.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/dsaerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ecerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ecx.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/encoder.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/encodererr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/engineerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ess.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/esserr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/evperr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/httperr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/modes.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/objectserr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ocsperr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/pem.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/pemerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/pkcs12err.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/pkcs7.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/pkcs7err.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ppc_arch.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/punycode.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/rand_pool.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/randerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.def create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/rsa.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/rsaerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/security_bits.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/siv.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/sm4_platform.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/sparc_arch.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/sparse_array.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/storeerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/tserr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/types.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/uierr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/x509err.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/x509v3err.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/asn1.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/core.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/deprecated.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/der.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/e_os.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/endian.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/ffc.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/ktls.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/namemap.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/o_str.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/packet.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/param_build_set.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/passphrase.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/property.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/propertyerr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/provider.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/sha3.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/sizes.h rename deps/openssl/android/x86_64/usr/local/include/{crypto => internal}/sm3.h (56%) create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/symhacks.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/tlsgroups.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/unicode.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/asn1t.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/bio.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cmp_util.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cmperr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cms.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/conf.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/conftypes.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/core.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/core_dispatch.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/core_object.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/crmferr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cryptoerr_legacy.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ct.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/decoder.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/decodererr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/encoder.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/encodererr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/err.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ess.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ess.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/esserr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/fips_names.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/fipskey.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/fipskey.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/http.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/httperr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/macros.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ocsp.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/opensslconf.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/param_build.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/params.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/prov_ssl.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/proverr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/provider.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/rand_drbg.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/safestack.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/self_test.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/srp.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/sslerr_legacy.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/trace.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/types.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ui.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/x509.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h.in diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H index c350018a..e57c0eab 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H index 9a9c777f..a0139575 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/aes_platform.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/aes_platform.h new file mode 100644 index 00000000..87c35255 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/aes_platform.h @@ -0,0 +1,517 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_AES_PLATFORM_H +# define OSSL_AES_PLATFORM_H +# pragma once + +# include + +# ifdef VPAES_ASM +int vpaes_set_encrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +int vpaes_set_decrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +void vpaes_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void vpaes_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void vpaes_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key, unsigned char *ivec, int enc); +# endif /* VPAES_ASM */ + +# ifdef BSAES_ASM +void ossl_bsaes_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char ivec[16], int enc); +void ossl_bsaes_ctr32_encrypt_blocks(const unsigned char *in, + unsigned char *out, size_t len, + const AES_KEY *key, + const unsigned char ivec[16]); +void ossl_bsaes_xts_encrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +void ossl_bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +# endif /* BSAES_ASM */ + +# ifdef AES_CTR_ASM +void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + const unsigned char ivec[AES_BLOCK_SIZE]); +# endif /* AES_CTR_ASM */ + +# ifdef AES_XTS_ASM +void AES_xts_encrypt(const unsigned char *inp, unsigned char *out, size_t len, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); +void AES_xts_decrypt(const unsigned char *inp, unsigned char *out, size_t len, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); +# endif /* AES_XTS_ASM */ + +# if defined(OPENSSL_CPUID_OBJ) +# if (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC)) +# include "crypto/ppc_arch.h" +# ifdef VPAES_ASM +# define VPAES_CAPABLE (OPENSSL_ppccap_P & PPC_ALTIVEC) +# endif +# define HWAES_CAPABLE (OPENSSL_ppccap_P & PPC_CRYPTO207) +# define HWAES_set_encrypt_key aes_p8_set_encrypt_key +# define HWAES_set_decrypt_key aes_p8_set_decrypt_key +# define HWAES_encrypt aes_p8_encrypt +# define HWAES_decrypt aes_p8_decrypt +# define HWAES_cbc_encrypt aes_p8_cbc_encrypt +# define HWAES_ctr32_encrypt_blocks aes_p8_ctr32_encrypt_blocks +# define HWAES_xts_encrypt aes_p8_xts_encrypt +# define HWAES_xts_decrypt aes_p8_xts_decrypt +# if !defined(OPENSSL_SYS_AIX) && !defined(OPENSSL_SYS_MACOSX) +# define PPC_AES_GCM_CAPABLE (OPENSSL_ppccap_P & PPC_MADD300) +# define AES_GCM_ENC_BYTES 128 +# define AES_GCM_DEC_BYTES 128 +size_t ppc_aes_gcm_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, unsigned char ivec[16], + u64 *Xi); +size_t ppc_aes_gcm_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, unsigned char ivec[16], + u64 *Xi); +# define AES_GCM_ASM_PPC(gctx) ((gctx)->ctr==aes_p8_ctr32_encrypt_blocks && \ + (gctx)->gcm.funcs.ghash==gcm_ghash_p8) +void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); +# endif /* OPENSSL_SYS_AIX || OPENSSL_SYS_MACOSX */ +# endif /* PPC */ + +# if (defined(__arm__) || defined(__arm) || defined(__aarch64__)) +# include "arm_arch.h" +# if __ARM_MAX_ARCH__>=7 +# if defined(BSAES_ASM) +# define BSAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON) +# endif +# if defined(VPAES_ASM) +# define VPAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON) +# endif +# define HWAES_CAPABLE (OPENSSL_armcap_P & ARMV8_AES) +# define HWAES_set_encrypt_key aes_v8_set_encrypt_key +# define HWAES_set_decrypt_key aes_v8_set_decrypt_key +# define HWAES_encrypt aes_v8_encrypt +# define HWAES_decrypt aes_v8_decrypt +# define HWAES_cbc_encrypt aes_v8_cbc_encrypt +# define HWAES_ecb_encrypt aes_v8_ecb_encrypt +# if __ARM_MAX_ARCH__>=8 && defined(__aarch64__) +# define HWAES_xts_encrypt aes_v8_xts_encrypt +# define HWAES_xts_decrypt aes_v8_xts_decrypt +# endif +# define HWAES_ctr32_encrypt_blocks aes_v8_ctr32_encrypt_blocks +# define AES_PMULL_CAPABLE ((OPENSSL_armcap_P & ARMV8_PMULL) && (OPENSSL_armcap_P & ARMV8_AES)) +# define AES_GCM_ENC_BYTES 512 +# define AES_GCM_DEC_BYTES 512 +# if __ARM_MAX_ARCH__>=8 && defined(__aarch64__) +# define AES_gcm_encrypt armv8_aes_gcm_encrypt +# define AES_gcm_decrypt armv8_aes_gcm_decrypt +# define AES_GCM_ASM(gctx) ((gctx)->ctr==aes_v8_ctr32_encrypt_blocks && \ + (gctx)->gcm.funcs.ghash==gcm_ghash_v8) +/* The [unroll8_eor3_]aes_gcm_(enc|dec)_(128|192|256)_kernel() functions + * take input length in BITS and return number of BYTES processed */ +size_t aes_gcm_enc_128_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_enc_192_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_enc_256_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_128_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_192_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_256_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_128_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_192_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_256_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_128_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_192_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_256_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t armv8_aes_gcm_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, + unsigned char ivec[16], u64 *Xi); +size_t armv8_aes_gcm_decrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, + unsigned char ivec[16], u64 *Xi); +void gcm_ghash_v8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); +# endif +# endif +# endif +# endif /* OPENSSL_CPUID_OBJ */ + +# if defined(AES_ASM) && ( \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) ) +# define AES_CBC_HMAC_SHA_CAPABLE 1 +# define AESNI_CBC_HMAC_SHA_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32))) +# endif + +# if defined(__loongarch__) || defined(__loongarch64) +# include "loongarch_arch.h" +# if defined(VPAES_ASM) +# define VPAES_CAPABLE (OPENSSL_loongarch_hwcap_P & LOONGARCH_HWCAP_LSX) +# endif +# endif + +# if defined(AES_ASM) && !defined(I386_ONLY) && ( \ + ((defined(__i386) || defined(__i386__) || \ + defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) ) + +/* AES-NI section */ + +# define AESNI_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32))) +# ifdef VPAES_ASM +# define VPAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32))) +# endif +# ifdef BSAES_ASM +# define BSAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32))) +# endif + +# define AES_GCM_ENC_BYTES 32 +# define AES_GCM_DEC_BYTES 16 + +int aesni_set_encrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +int aesni_set_decrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); + +void aesni_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void aesni_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); + +void aesni_ecb_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, const AES_KEY *key, int enc); +void aesni_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key, unsigned char *ivec, int enc); +# ifndef OPENSSL_NO_OCB +void aesni_ocb_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +void aesni_ocb_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# endif /* OPENSSL_NO_OCB */ + +void aesni_ctr32_encrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, const unsigned char *ivec); + +void aesni_xts_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); + +void aesni_xts_decrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); + +void aesni_ccm64_encrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +void aesni_ccm64_decrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +# if defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) +size_t aesni_gcm_encrypt(const unsigned char *in, unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], u64 *Xi); +size_t aesni_gcm_decrypt(const unsigned char *in, unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], u64 *Xi); +void gcm_ghash_avx(u64 Xi[2], const u128 Htable[16], const u8 *in, size_t len); + +# define AES_gcm_encrypt aesni_gcm_encrypt +# define AES_gcm_decrypt aesni_gcm_decrypt +# define AES_GCM_ASM(ctx) (ctx->ctr == aesni_ctr32_encrypt_blocks && \ + ctx->gcm.funcs.ghash == gcm_ghash_avx) +# endif + + +# elif defined(AES_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# define SPARC_AES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_AES) +# define HWAES_CAPABLE (OPENSSL_sparcv9cap_P[0] & SPARCV9_FJAESX) +# define HWAES_set_encrypt_key aes_fx_set_encrypt_key +# define HWAES_set_decrypt_key aes_fx_set_decrypt_key +# define HWAES_encrypt aes_fx_encrypt +# define HWAES_decrypt aes_fx_decrypt +# define HWAES_cbc_encrypt aes_fx_cbc_encrypt +# define HWAES_ctr32_encrypt_blocks aes_fx_ctr32_encrypt_blocks + +void aes_t4_set_encrypt_key(const unsigned char *key, int bits, AES_KEY *ks); +void aes_t4_set_decrypt_key(const unsigned char *key, int bits, AES_KEY *ks); +void aes_t4_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void aes_t4_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +/* + * Key-length specific subroutines were chosen for following reason. + * Each SPARC T4 core can execute up to 8 threads which share core's + * resources. Loading as much key material to registers allows to + * minimize references to shared memory interface, as well as amount + * of instructions in inner loops [much needed on T4]. But then having + * non-key-length specific routines would require conditional branches + * either in inner loops or on subroutines' entries. Former is hardly + * acceptable, while latter means code size increase to size occupied + * by multiple key-length specific subroutines, so why fight? + */ +void aes128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes192_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes192_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes192_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes128_t4_xts_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes128_t4_xts_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes256_t4_xts_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); + +# elif defined(OPENSSL_CPUID_OBJ) && defined(__s390__) +/* IBM S390X support */ +# include "s390x_arch.h" + + +/* Convert key size to function code: [16,24,32] -> [18,19,20]. */ +# define S390X_AES_FC(keylen) (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6)) + +/* Most modes of operation need km for partial block processing. */ +# define S390X_aes_128_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_128)) +# define S390X_aes_192_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_192)) +# define S390X_aes_256_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_256)) + +# define S390X_aes_128_cbc_CAPABLE 1 /* checked by callee */ +# define S390X_aes_192_cbc_CAPABLE 1 +# define S390X_aes_256_cbc_CAPABLE 1 + +# define S390X_aes_128_ecb_CAPABLE S390X_aes_128_CAPABLE +# define S390X_aes_192_ecb_CAPABLE S390X_aes_192_CAPABLE +# define S390X_aes_256_ecb_CAPABLE S390X_aes_256_CAPABLE + +# define S390X_aes_128_ofb_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_ofb_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_ofb_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_256))) + +# define S390X_aes_128_cfb_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_cfb_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_cfb_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_256))) +# define S390X_aes_128_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_128)) +# define S390X_aes_192_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_192)) +# define S390X_aes_256_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_256)) +# define S390X_aes_128_cfb1_CAPABLE 0 +# define S390X_aes_192_cfb1_CAPABLE 0 +# define S390X_aes_256_cfb1_CAPABLE 0 + +# define S390X_aes_128_ctr_CAPABLE 1 /* checked by callee */ +# define S390X_aes_192_ctr_CAPABLE 1 +# define S390X_aes_256_ctr_CAPABLE 1 + +# define S390X_aes_128_xts_CAPABLE 1 /* checked by callee */ +# define S390X_aes_256_xts_CAPABLE 1 + +# define S390X_aes_128_gcm_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_gcm_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_gcm_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_256))) + +# define S390X_aes_128_ccm_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_ccm_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_ccm_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_256))) +# define S390X_CCM_AAD_FLAG 0x40 + +# ifndef OPENSSL_NO_OCB +# define S390X_aes_128_ocb_CAPABLE 0 +# define S390X_aes_192_ocb_CAPABLE 0 +# define S390X_aes_256_ocb_CAPABLE 0 +# endif /* OPENSSL_NO_OCB */ + +# ifndef OPENSSL_NO_SIV +# define S390X_aes_128_siv_CAPABLE 0 +# define S390X_aes_192_siv_CAPABLE 0 +# define S390X_aes_256_siv_CAPABLE 0 +# endif /* OPENSSL_NO_SIV */ + +/* Convert key size to function code: [16,24,32] -> [18,19,20]. */ +# define S390X_AES_FC(keylen) (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6)) +# elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 64 +/* RISC-V 64 support */ +# include "riscv_arch.h" +# define RV64I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) + +int rv64i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv64i_zknd_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void rv64i_zkne_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void rv64i_zknd_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +# elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 32 +/* RISC-V 32 support */ +# include "riscv_arch.h" +# define RV32I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) +# define RV32I_ZBKB_ZKND_ZKNE_CAPABLE (RV32I_ZKND_ZKNE_CAPABLE && RISCV_HAS_ZBKB()) + +int rv32i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +/* set_decrypt_key needs both zknd and zkne */ +int rv32i_zknd_zkne_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv32i_zbkb_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv32i_zbkb_zknd_zkne_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void rv32i_zkne_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void rv32i_zknd_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +# endif + +# if defined(HWAES_CAPABLE) +int HWAES_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int HWAES_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void HWAES_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void HWAES_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void HWAES_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +void HWAES_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + const int enc); +void HWAES_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +void HWAES_xts_encrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +void HWAES_xts_decrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +# ifndef OPENSSL_NO_OCB +# ifdef HWAES_ocb_encrypt +void HWAES_ocb_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# else +# define HWAES_ocb_encrypt ((ocb128_f)NULL) +# endif +# ifdef HWAES_ocb_decrypt +void HWAES_ocb_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# else +# define HWAES_ocb_decrypt ((ocb128_f)NULL) +# endif +# endif /* OPENSSL_NO_OCB */ + +# endif /* HWAES_CAPABLE */ + +#endif /* OSSL_AES_PLATFORM_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/aria.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/aria.h index 03a62950..21a9932e 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/aria.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/aria.h @@ -1,8 +1,8 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -12,6 +12,7 @@ #ifndef OSSL_CRYPTO_ARIA_H # define OSSL_CRYPTO_ARIA_H +# pragma once # include @@ -39,12 +40,12 @@ struct aria_key_st { typedef struct aria_key_st ARIA_KEY; -int aria_set_encrypt_key(const unsigned char *userKey, const int bits, - ARIA_KEY *key); -int aria_set_decrypt_key(const unsigned char *userKey, const int bits, - ARIA_KEY *key); +int ossl_aria_set_encrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); +int ossl_aria_set_decrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); -void aria_encrypt(const unsigned char *in, unsigned char *out, - const ARIA_KEY *key); +void ossl_aria_encrypt(const unsigned char *in, unsigned char *out, + const ARIA_KEY *key); #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1.h index 9c9b4d89..ec76ae6f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1.h @@ -1,23 +1,32 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OSSL_CRYPTO_ASN1_H +# define OSSL_CRYPTO_ASN1_H +# pragma once + +# include +# include /* OSSL_FUNC_keymgmt_import() */ + /* Internal ASN1 structures and functions: not for application use */ /* ASN1 public key method structure */ +#include + struct evp_pkey_asn1_method_st { int pkey_id; int pkey_base_id; unsigned long pkey_flags; char *pem_str; char *info; - int (*pub_decode) (EVP_PKEY *pk, X509_PUBKEY *pub); + int (*pub_decode) (EVP_PKEY *pk, const X509_PUBKEY *pub); int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk); int (*pub_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); int (*pub_print) (BIO *out, const EVP_PKEY *pkey, int indent, @@ -47,9 +56,10 @@ struct evp_pkey_asn1_method_st { const unsigned char **pder, int derlen); int (*old_priv_encode) (const EVP_PKEY *pkey, unsigned char **pder); /* Custom ASN1 signature verification */ - int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, - X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey); - int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, + int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, const void *data, + const X509_ALGOR *a, const ASN1_BIT_STRING *sig, + EVP_PKEY *pkey); + int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, const void *data, X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig); int (*siginf_set) (X509_SIG_INFO *siginf, const X509_ALGOR *alg, @@ -63,26 +73,35 @@ struct evp_pkey_asn1_method_st { int (*set_pub_key) (EVP_PKEY *pk, const unsigned char *pub, size_t len); int (*get_priv_key) (const EVP_PKEY *pk, unsigned char *priv, size_t *len); int (*get_pub_key) (const EVP_PKEY *pk, unsigned char *pub, size_t *len); + + /* Exports and imports to / from providers */ + size_t (*dirty_cnt) (const EVP_PKEY *pk); + int (*export_to) (const EVP_PKEY *pk, void *to_keydata, + OSSL_FUNC_keymgmt_import_fn *importer, + OSSL_LIB_CTX *libctx, const char *propq); + OSSL_CALLBACK *import_from; + int (*copy) (EVP_PKEY *to, EVP_PKEY *from); + + int (*priv_decode_ex) (EVP_PKEY *pk, + const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, + const char *propq); } /* EVP_PKEY_ASN1_METHOD */ ; DEFINE_STACK_OF_CONST(EVP_PKEY_ASN1_METHOD) -extern const EVP_PKEY_ASN1_METHOD cmac_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dh_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dhx_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meths[5]; -extern const EVP_PKEY_ASN1_METHOD eckey_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ecx25519_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ecx448_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ed448_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD sm2_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD poly1305_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dh_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dhx_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dsa_asn1_meths[5]; +extern const EVP_PKEY_ASN1_METHOD ossl_eckey_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ecx25519_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ecx448_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ed25519_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ed448_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_sm2_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD hmac_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[2]; -extern const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD siphash_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_rsa_asn1_meths[2]; +extern const EVP_PKEY_ASN1_METHOD ossl_rsa_pss_asn1_meth; /* * These are used internally in the ASN1_OBJECT to keep track of whether the @@ -110,4 +129,21 @@ struct asn1_pctx_st { unsigned long str_flags; } /* ASN1_PCTX */ ; -int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb); +/* ASN1 type functions */ + +int ossl_asn1_type_set_octetstring_int(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ossl_asn1_type_get_octetstring_int(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +int ossl_x509_algor_new_from_md(X509_ALGOR **palg, const EVP_MD *md); +const EVP_MD *ossl_x509_algor_get_md(X509_ALGOR *alg); +X509_ALGOR *ossl_x509_algor_mgf1_decode(X509_ALGOR *alg); +int ossl_x509_algor_md_to_mgf1(X509_ALGOR **palg, const EVP_MD *mgf1md); +int ossl_asn1_time_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); + +EVP_PKEY * ossl_d2i_PrivateKey_legacy(int keytype, EVP_PKEY **a, + const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); + +#endif /* ndef OSSL_CRYPTO_ASN1_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1_dsa.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1_dsa.h new file mode 100644 index 00000000..3eadb9ec --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1_dsa.h @@ -0,0 +1,24 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASN1_DSA_H +# define OSSL_CRYPTO_ASN1_DSA_H +# pragma once + +#include "internal/packet.h" + +int ossl_encode_der_length(WPACKET *pkt, size_t cont_len); +int ossl_encode_der_integer(WPACKET *pkt, const BIGNUM *n); +int ossl_encode_der_dsa_sig(WPACKET *pkt, const BIGNUM *r, const BIGNUM *s); +int ossl_decode_der_length(PACKET *pkt, PACKET *subpkt); +int ossl_decode_der_integer(PACKET *pkt, BIGNUM *n); +size_t ossl_decode_der_dsa_sig(BIGNUM *r, BIGNUM *s, const unsigned char **ppin, + size_t len); + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1err.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1err.h new file mode 100644 index 00000000..6441386b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASN1ERR_H +# define OSSL_CRYPTO_ASN1ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ASN1_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/async.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/async.h index dc8e937b..7bc0dbb6 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/async.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/async.h @@ -1,15 +1,19 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_CRYPTO_ASYNC_H +# define OSSL_CRYPTO_ASYNC_H +# pragma once + +# include int async_init(void); void async_deinit(void); -void async_delete_thread_state(void); +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asyncerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asyncerr.h new file mode 100644 index 00000000..574e0af7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asyncerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASYNCERR_H +# define OSSL_CRYPTO_ASYNCERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ASYNC_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bioerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bioerr.h new file mode 100644 index 00000000..a0c06099 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bioerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BIOERR_H +# define OSSL_CRYPTO_BIOERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BIO_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn.h index 250914c4..00544d9d 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn.h @@ -1,7 +1,7 @@ /* * Copyright 2014-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_CRYPTO_BN_H # define OSSL_CRYPTO_BN_H +# pragma once # include # include @@ -87,4 +88,32 @@ int bn_rshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); int bn_div_fixed_top(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); +#define BN_PRIMETEST_COMPOSITE 0 +#define BN_PRIMETEST_COMPOSITE_WITH_FACTOR 1 +#define BN_PRIMETEST_COMPOSITE_NOT_POWER_OF_PRIME 2 +#define BN_PRIMETEST_PROBABLY_PRIME 3 + +int ossl_bn_miller_rabin_is_prime(const BIGNUM *w, int iterations, BN_CTX *ctx, + BN_GENCB *cb, int enhanced, int *status); +int ossl_bn_check_generated_prime(const BIGNUM *w, int checks, BN_CTX *ctx, + BN_GENCB *cb); + +const BIGNUM *ossl_bn_get0_small_factors(void); + +int ossl_bn_rsa_fips186_4_gen_prob_primes(BIGNUM *p, BIGNUM *Xpout, + BIGNUM *p1, BIGNUM *p2, + const BIGNUM *Xp, const BIGNUM *Xp1, + const BIGNUM *Xp2, int nlen, + const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); + +int ossl_bn_rsa_fips186_4_derive_prime(BIGNUM *Y, BIGNUM *X, const BIGNUM *Xin, + const BIGNUM *r1, const BIGNUM *r2, + int nlen, const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); + +OSSL_LIB_CTX *ossl_bn_get_libctx(BN_CTX *ctx); + +extern const BIGNUM ossl_bn_inv_sqrt_2; + #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h index 5312ef5a..0347a6dd 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h @@ -1,9 +1,9 @@ /* WARNING: do not edit! */ /* Generated by Makefile from include/crypto/bn_conf.h.in */ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,6 +11,7 @@ #ifndef OSSL_CRYPTO_BN_CONF_H # define OSSL_CRYPTO_BN_CONF_H +# pragma once /* * The contents of this file are not used in the UEFI build, as diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h.in index b6b9eb74..dbc901b1 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h.in +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h.in @@ -1,8 +1,8 @@ {- join("\n",map { "/* $_ */" } @autowarntext) -} /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,7 @@ #ifndef OSSL_CRYPTO_BN_CONF_H # define OSSL_CRYPTO_BN_CONF_H +# pragma once /* * The contents of this file are not used in the UEFI build, as diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_dh.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_dh.h index 70ebca28..6d12c20e 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_dh.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_dh.h @@ -1,24 +1,43 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #define declare_dh_bn(x) \ - extern const BIGNUM _bignum_dh##x##_p; \ - extern const BIGNUM _bignum_dh##x##_g; \ - extern const BIGNUM _bignum_dh##x##_q; + extern const BIGNUM ossl_bignum_dh##x##_p; \ + extern const BIGNUM ossl_bignum_dh##x##_q; \ + extern const BIGNUM ossl_bignum_dh##x##_g; \ declare_dh_bn(1024_160) declare_dh_bn(2048_224) declare_dh_bn(2048_256) -extern const BIGNUM _bignum_ffdhe2048_p; -extern const BIGNUM _bignum_ffdhe3072_p; -extern const BIGNUM _bignum_ffdhe4096_p; -extern const BIGNUM _bignum_ffdhe6144_p; -extern const BIGNUM _bignum_ffdhe8192_p; -extern const BIGNUM _bignum_const_2; +extern const BIGNUM ossl_bignum_const_2; + +extern const BIGNUM ossl_bignum_ffdhe2048_p; +extern const BIGNUM ossl_bignum_ffdhe3072_p; +extern const BIGNUM ossl_bignum_ffdhe4096_p; +extern const BIGNUM ossl_bignum_ffdhe6144_p; +extern const BIGNUM ossl_bignum_ffdhe8192_p; +extern const BIGNUM ossl_bignum_ffdhe2048_q; +extern const BIGNUM ossl_bignum_ffdhe3072_q; +extern const BIGNUM ossl_bignum_ffdhe4096_q; +extern const BIGNUM ossl_bignum_ffdhe6144_q; +extern const BIGNUM ossl_bignum_ffdhe8192_q; + +extern const BIGNUM ossl_bignum_modp_1536_p; +extern const BIGNUM ossl_bignum_modp_2048_p; +extern const BIGNUM ossl_bignum_modp_3072_p; +extern const BIGNUM ossl_bignum_modp_4096_p; +extern const BIGNUM ossl_bignum_modp_6144_p; +extern const BIGNUM ossl_bignum_modp_8192_p; +extern const BIGNUM ossl_bignum_modp_1536_q; +extern const BIGNUM ossl_bignum_modp_2048_q; +extern const BIGNUM ossl_bignum_modp_3072_q; +extern const BIGNUM ossl_bignum_modp_4096_q; +extern const BIGNUM ossl_bignum_modp_6144_q; +extern const BIGNUM ossl_bignum_modp_8192_q; diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_srp.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_srp.h index d4b282a6..00b160aa 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_srp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_srp.h @@ -1,7 +1,7 @@ /* - * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,24 +9,24 @@ #ifndef OPENSSL_NO_SRP -extern const BIGNUM bn_group_1024; +extern const BIGNUM ossl_bn_group_1024; -extern const BIGNUM bn_group_1536; +extern const BIGNUM ossl_bn_group_1536; -extern const BIGNUM bn_group_2048; +extern const BIGNUM ossl_bn_group_2048; -extern const BIGNUM bn_group_3072; +extern const BIGNUM ossl_bn_group_3072; -extern const BIGNUM bn_group_4096; +extern const BIGNUM ossl_bn_group_4096; -extern const BIGNUM bn_group_6144; +extern const BIGNUM ossl_bn_group_6144; -extern const BIGNUM bn_group_8192; +extern const BIGNUM ossl_bn_group_8192; -extern const BIGNUM bn_generator_19; +extern const BIGNUM ossl_bn_generator_19; -extern const BIGNUM bn_generator_5; +extern const BIGNUM ossl_bn_generator_5; -extern const BIGNUM bn_generator_2; +extern const BIGNUM ossl_bn_generator_2; #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bnerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bnerr.h new file mode 100644 index 00000000..131e30fa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bnerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BNERR_H +# define OSSL_CRYPTO_BNERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BN_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/buffererr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/buffererr.h new file mode 100644 index 00000000..54976d95 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/buffererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BUFFERERR_H +# define OSSL_CRYPTO_BUFFERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BUF_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/chacha.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/chacha.h index 4029400a..d29998ff 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/chacha.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/chacha.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_CRYPTO_CHACHA_H #define OSSL_CRYPTO_CHACHA_H +# pragma once #include @@ -35,8 +36,8 @@ void ChaCha20_ctr32(unsigned char *out, const unsigned char *inp, ((unsigned int)(p)[0]) | ((unsigned int)(p)[1]<<8) | \ ((unsigned int)(p)[2]<<16) | ((unsigned int)(p)[3]<<24) ) -#define CHACHA_KEY_SIZE 32 -#define CHACHA_CTR_SIZE 16 -#define CHACHA_BLK_SIZE 64 +#define CHACHA_KEY_SIZE 32 +#define CHACHA_CTR_SIZE 16 +#define CHACHA_BLK_SIZE 64 #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmll_platform.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmll_platform.h new file mode 100644 index 00000000..8cadadf6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmll_platform.h @@ -0,0 +1,51 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CMLL_PLATFORM_H +# define OSSL_CMLL_PLATFORM_H +# pragma once + +# if defined(CMLL_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# ifndef OPENSSL_NO_CAMELLIA +# define SPARC_CMLL_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_CAMELLIA) +# include + +void cmll_t4_set_key(const unsigned char *key, int bits, CAMELLIA_KEY *ks); +void cmll_t4_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); +void cmll_t4_decrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); + +void cmll128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const CAMELLIA_KEY *key, + unsigned char *ivec); +void cmll256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const CAMELLIA_KEY *key, + unsigned char *ivec); +# endif /* OPENSSL_NO_CAMELLIA */ + +# endif /* CMLL_ASM && sparc */ + +#endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmperr.h new file mode 100644 index 00000000..2bd16373 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CMPERR_H +# define OSSL_CRYPTO_CMPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CMP + +int ossl_err_load_CMP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmserr.h new file mode 100644 index 00000000..1de2f9c7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmserr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CMSERR_H +# define OSSL_CRYPTO_CMSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CMS + +int ossl_err_load_CMS_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/comperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/comperr.h new file mode 100644 index 00000000..0fd9c6de --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/comperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_COMPERR_H +# define OSSL_CRYPTO_COMPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_COMP + +int ossl_err_load_COMP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/conferr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/conferr.h new file mode 100644 index 00000000..cb367e4f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/conferr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CONFERR_H +# define OSSL_CRYPTO_CONFERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_CONF_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/context.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/context.h new file mode 100644 index 00000000..cc06c71b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/context.h @@ -0,0 +1,41 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +void *ossl_provider_store_new(OSSL_LIB_CTX *); +void *ossl_property_string_data_new(OSSL_LIB_CTX *); +void *ossl_stored_namemap_new(OSSL_LIB_CTX *); +void *ossl_property_defns_new(OSSL_LIB_CTX *); +void *ossl_ctx_global_properties_new(OSSL_LIB_CTX *); +void *ossl_rand_ctx_new(OSSL_LIB_CTX *); +void *ossl_prov_conf_ctx_new(OSSL_LIB_CTX *); +void *ossl_bio_core_globals_new(OSSL_LIB_CTX *); +void *ossl_child_prov_ctx_new(OSSL_LIB_CTX *); +void *ossl_prov_drbg_nonce_ctx_new(OSSL_LIB_CTX *); +void *ossl_self_test_set_callback_new(OSSL_LIB_CTX *); +void *ossl_rand_crng_ctx_new(OSSL_LIB_CTX *); +void *ossl_thread_event_ctx_new(OSSL_LIB_CTX *); +void *ossl_fips_prov_ossl_ctx_new(OSSL_LIB_CTX *); + +void ossl_provider_store_free(void *); +void ossl_property_string_data_free(void *); +void ossl_stored_namemap_free(void *); +void ossl_property_defns_free(void *); +void ossl_ctx_global_properties_free(void *); +void ossl_rand_ctx_free(void *); +void ossl_prov_conf_ctx_free(void *); +void ossl_bio_core_globals_free(void *); +void ossl_child_prov_ctx_free(void *); +void ossl_prov_drbg_nonce_ctx_free(void *); +void ossl_self_test_set_callback_free(void *); +void ossl_rand_crng_ctx_free(void *); +void ossl_thread_event_ctx_free(void *); +void ossl_fips_prov_ossl_ctx_free(void *); +void ossl_release_default_drbg_ctx(void); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/crmferr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/crmferr.h new file mode 100644 index 00000000..f1a27e04 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/crmferr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CRMFERR_H +# define OSSL_CRYPTO_CRMFERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CRMF + +int ossl_err_load_CRMF_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptlib.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptlib.h index 38b5dac9..39a956bf 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptlib.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptlib.h @@ -1,35 +1,39 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include "internal/cryptlib.h" +#ifndef OSSL_CRYPTO_CRYPTLIB_H +# define OSSL_CRYPTO_CRYPTLIB_H +# pragma once + +# include +# include "internal/cryptlib.h" /* This file is not scanned by mkdef.pl, whereas cryptlib.h is */ -struct thread_local_inits_st { - int async; - int err_state; - int rand; -}; - -int ossl_init_thread_start(uint64_t opts); +int ossl_init_thread_start(const void *index, void *arg, + OSSL_thread_stop_handler_fn handfn); +int ossl_init_thread_deregister(void *index); +int ossl_init_thread(void); +void ossl_cleanup_thread(void); +void ossl_ctx_thread_stop(OSSL_LIB_CTX *ctx); /* * OPENSSL_INIT flags. The primary list of these is in crypto.h. Flags below * are those omitted from crypto.h because they are "reserved for internal * use". */ -# define OPENSSL_INIT_ZLIB 0x00010000L # define OPENSSL_INIT_BASE_ONLY 0x00040000L -/* OPENSSL_INIT_THREAD flags */ -# define OPENSSL_INIT_THREAD_ASYNC 0x01 -# define OPENSSL_INIT_THREAD_ERR_STATE 0x02 -# define OPENSSL_INIT_THREAD_RAND 0x04 - +void ossl_trace_cleanup(void); void ossl_malloc_setup_failures(void); + +int ossl_crypto_alloc_ex_data_intern(int class_index, void *obj, + CRYPTO_EX_DATA *ad, int idx); + +#endif /* OSSL_CRYPTO_CRYPTLIB_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptoerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptoerr.h new file mode 100644 index 00000000..1b6192e3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptoerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CRYPTOERR_H +# define OSSL_CRYPTO_CRYPTOERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_CRYPTO_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cterr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cterr.h new file mode 100644 index 00000000..760bc796 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cterr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CTERR_H +# define OSSL_CRYPTO_CTERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CT + +int ossl_err_load_CT_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ctype.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ctype.h index 81ef8f5c..22f69221 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ctype.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ctype.h @@ -1,7 +1,7 @@ /* - * Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -20,6 +20,9 @@ */ #ifndef OSSL_CRYPTO_CTYPE_H # define OSSL_CRYPTO_CTYPE_H +# pragma once + +# include # define CTYPE_MASK_lower 0x1 # define CTYPE_MASK_upper 0x2 @@ -54,10 +57,15 @@ int ossl_fromascii(int c); # define ossl_fromascii(c) (c) # endif int ossl_ctype_check(int c, unsigned int mask); + int ossl_tolower(int c); int ossl_toupper(int c); -int ascii_isdigit(const char inchar); +int ossl_isdigit(int c); +int ossl_islower(int c); +int ossl_isupper(int c); + +int ossl_ascii_isdigit(int c); # define ossl_isalnum(c) (ossl_ctype_check((c), CTYPE_MASK_alnum)) # define ossl_isalpha(c) (ossl_ctype_check((c), CTYPE_MASK_alpha)) @@ -68,15 +76,11 @@ int ascii_isdigit(const char inchar); # endif # define ossl_isblank(c) (ossl_ctype_check((c), CTYPE_MASK_blank)) # define ossl_iscntrl(c) (ossl_ctype_check((c), CTYPE_MASK_cntrl)) -# define ossl_isdigit(c) (ossl_ctype_check((c), CTYPE_MASK_digit)) # define ossl_isgraph(c) (ossl_ctype_check((c), CTYPE_MASK_graph)) -# define ossl_islower(c) (ossl_ctype_check((c), CTYPE_MASK_lower)) # define ossl_isprint(c) (ossl_ctype_check((c), CTYPE_MASK_print)) # define ossl_ispunct(c) (ossl_ctype_check((c), CTYPE_MASK_punct)) # define ossl_isspace(c) (ossl_ctype_check((c), CTYPE_MASK_space)) -# define ossl_isupper(c) (ossl_ctype_check((c), CTYPE_MASK_upper)) # define ossl_isxdigit(c) (ossl_ctype_check((c), CTYPE_MASK_xdigit)) # define ossl_isbase64(c) (ossl_ctype_check((c), CTYPE_MASK_base64)) # define ossl_isasn1print(c) (ossl_ctype_check((c), CTYPE_MASK_asn1print)) - #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/decoder.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/decoder.h new file mode 100644 index 00000000..6b5ee56a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/decoder.h @@ -0,0 +1,40 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DECODER_H +# define OSSL_CRYPTO_DECODER_H +# pragma once + +# include + +/* + * These are specially made for the 'file:' provider-native loader, which + * uses this to install a DER to anything decoder, which doesn't do much + * except read a DER blob and pass it on as a provider object abstraction + * (provider-object(7)). + */ +void *ossl_decoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef, + OSSL_PROVIDER *prov); + +OSSL_DECODER_INSTANCE * +ossl_decoder_instance_new(OSSL_DECODER *decoder, void *decoderctx); +void ossl_decoder_instance_free(OSSL_DECODER_INSTANCE *decoder_inst); +int ossl_decoder_ctx_add_decoder_inst(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_INSTANCE *di); + +int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, + EVP_PKEY **pkey, const char *keytype, + OSSL_LIB_CTX *libctx, + const char *propquery); + +int ossl_decoder_get_number(const OSSL_DECODER *encoder); +int ossl_decoder_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_decoder_store_remove_all_provided(const OSSL_PROVIDER *prov); + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/decodererr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/decodererr.h new file mode 100644 index 00000000..d7badc43 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/decodererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DECODERERR_H +# define OSSL_CRYPTO_DECODERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_DECODER_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/des_platform.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/des_platform.h new file mode 100644 index 00000000..07ea1ddd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/des_platform.h @@ -0,0 +1,35 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_DES_PLATFORM_H +# define OSSL_DES_PLATFORM_H +# pragma once + +# if defined(DES_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# ifndef OPENSSL_NO_DES +# define SPARC_DES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_DES) +# include +void des_t4_key_expand(const void *key, DES_key_schedule *ks); +void des_t4_ede3_cbc_encrypt(const void *inp, void *out, size_t len, + const DES_key_schedule ks[3], unsigned char iv[8]); +void des_t4_ede3_cbc_decrypt(const void *inp, void *out, size_t len, + const DES_key_schedule ks[3], unsigned char iv[8]); +void des_t4_cbc_encrypt(const void *inp, void *out, size_t len, + const DES_key_schedule *ks, unsigned char iv[8]); +void des_t4_cbc_decrypt(const void *inp, void *out, size_t len, + const DES_key_schedule *ks, unsigned char iv[8]); +# endif /* OPENSSL_NO_DES */ + +# endif /* DES_ASM && sparc */ + +#endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dh.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dh.h new file mode 100644 index 00000000..51232d18 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dh.h @@ -0,0 +1,62 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DH_H +# define OSSL_CRYPTO_DH_H +# pragma once + +# include +# include +# include +# include "internal/ffc.h" + +DH *ossl_dh_new_by_nid_ex(OSSL_LIB_CTX *libctx, int nid); +DH *ossl_dh_new_ex(OSSL_LIB_CTX *libctx); +void ossl_dh_set0_libctx(DH *d, OSSL_LIB_CTX *libctx); +int ossl_dh_generate_ffc_parameters(DH *dh, int type, int pbits, int qbits, + BN_GENCB *cb); +int ossl_dh_generate_public_key(BN_CTX *ctx, const DH *dh, + const BIGNUM *priv_key, BIGNUM *pub_key); +int ossl_dh_get_named_group_uid_from_size(int pbits); +const char *ossl_dh_gen_type_id2name(int id); +int ossl_dh_gen_type_name2id(const char *name, int type); +void ossl_dh_cache_named_group(DH *dh); +int ossl_dh_is_named_safe_prime_group(const DH *dh); + +FFC_PARAMS *ossl_dh_get0_params(DH *dh); +int ossl_dh_get0_nid(const DH *dh); +int ossl_dh_params_fromdata(DH *dh, const OSSL_PARAM params[]); +int ossl_dh_key_fromdata(DH *dh, const OSSL_PARAM params[], int include_private); +int ossl_dh_params_todata(DH *dh, OSSL_PARAM_BLD *bld, OSSL_PARAM params[]); +int ossl_dh_key_todata(DH *dh, OSSL_PARAM_BLD *bld, OSSL_PARAM params[], + int include_private); +DH *ossl_dh_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_dh_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); + +int ossl_dh_check_pub_key_partial(const DH *dh, const BIGNUM *pub_key, int *ret); +int ossl_dh_check_priv_key(const DH *dh, const BIGNUM *priv_key, int *ret); +int ossl_dh_check_pairwise(const DH *dh); + +const DH_METHOD *ossl_dh_get_method(const DH *dh); + +int ossl_dh_buf2key(DH *key, const unsigned char *buf, size_t len); +size_t ossl_dh_key2buf(const DH *dh, unsigned char **pbuf, size_t size, + int alloc); + +int ossl_dh_kdf_X9_42_asn1(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const char *cek_alg, + const unsigned char *ukm, size_t ukmlen, + const EVP_MD *md, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_dh_is_foreign(const DH *dh); +DH *ossl_dh_dup(const DH *dh, int selection); + +#endif /* OSSL_CRYPTO_DH_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dherr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dherr.h new file mode 100644 index 00000000..bb24d131 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dherr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DHERR_H +# define OSSL_CRYPTO_DHERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DH + +int ossl_err_load_DH_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsa.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsa.h new file mode 100644 index 00000000..260c30fa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsa.h @@ -0,0 +1,49 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DSA_H +# define OSSL_CRYPTO_DSA_H +# pragma once + +# include +# include +# include "internal/ffc.h" + +#define DSA_PARAMGEN_TYPE_FIPS_186_4 0 /* Use FIPS186-4 standard */ +#define DSA_PARAMGEN_TYPE_FIPS_186_2 1 /* Use legacy FIPS186-2 standard */ +#define DSA_PARAMGEN_TYPE_FIPS_DEFAULT 2 + +DSA *ossl_dsa_new(OSSL_LIB_CTX *libctx); +void ossl_dsa_set0_libctx(DSA *d, OSSL_LIB_CTX *libctx); + +int ossl_dsa_generate_ffc_parameters(DSA *dsa, int type, int pbits, int qbits, + BN_GENCB *cb); + +int ossl_dsa_sign_int(int type, const unsigned char *dgst, int dlen, + unsigned char *sig, unsigned int *siglen, DSA *dsa); + +FFC_PARAMS *ossl_dsa_get0_params(DSA *dsa); +int ossl_dsa_ffc_params_fromdata(DSA *dsa, const OSSL_PARAM params[]); +int ossl_dsa_key_fromdata(DSA *dsa, const OSSL_PARAM params[], + int include_private); +DSA *ossl_dsa_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_dsa_generate_public_key(BN_CTX *ctx, const DSA *dsa, + const BIGNUM *priv_key, BIGNUM *pub_key); +int ossl_dsa_check_params(const DSA *dsa, int checktype, int *ret); +int ossl_dsa_check_pub_key(const DSA *dsa, const BIGNUM *pub_key, int *ret); +int ossl_dsa_check_pub_key_partial(const DSA *dsa, const BIGNUM *pub_key, + int *ret); +int ossl_dsa_check_priv_key(const DSA *dsa, const BIGNUM *priv_key, int *ret); +int ossl_dsa_check_pairwise(const DSA *dsa); +int ossl_dsa_is_foreign(const DSA *dsa); +DSA *ossl_dsa_dup(const DSA *dsa, int selection); + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsaerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsaerr.h new file mode 100644 index 00000000..fde8358f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsaerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DSAERR_H +# define OSSL_CRYPTO_DSAERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DSA + +int ossl_err_load_DSA_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h index 4b1167c3..795dfa0f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h @@ -1,9 +1,9 @@ /* WARNING: do not edit! */ /* Generated by Makefile from include/crypto/dso_conf.h.in */ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,6 +11,8 @@ #ifndef OSSL_CRYPTO_DSO_CONF_H # define OSSL_CRYPTO_DSO_CONF_H +# pragma once + # define DSO_DLFCN # define HAVE_DLFCN_H # define DSO_EXTENSION ".so" diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h.in index 57a09b10..12de11ad 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h.in +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h.in @@ -1,8 +1,8 @@ {- join("\n",map { "/* $_ */" } @autowarntext) -} /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,8 @@ #ifndef OSSL_CRYPTO_DSO_CONF_H # define OSSL_CRYPTO_DSO_CONF_H +# pragma once + {- # The DSO code currently always implements all functions so that no # applications will have to worry about that from a compilation point # of view. However, the "method"s may return zero unless that platform @@ -27,5 +29,5 @@ @macros = ( "DSO_DLFCN" ); } join("\n", map { "# define $_" } @macros); -} -# define DSO_EXTENSION "{- $target{dso_extension} -}" +# define DSO_EXTENSION "{- platform->dsoext() -}" #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ec.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ec.h index fe52ae70..62163b31 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ec.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ec.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,11 +11,20 @@ #ifndef OSSL_CRYPTO_EC_H # define OSSL_CRYPTO_EC_H +# pragma once + # include +# include + +int ossl_ec_curve_name2nid(const char *name); +const char *ossl_ec_curve_nid2nist_int(int nid); +int ossl_ec_curve_nist2nid_int(const char *name); +int evp_pkey_ctx_set_ec_param_enc_prov(EVP_PKEY_CTX *ctx, int param_enc); # ifndef OPENSSL_NO_EC - +# include # include +# include "crypto/types.h" /*- * Computes the multiplicative inverse of x in the range @@ -38,16 +47,54 @@ * reduction round on the input can be omitted by the underlying * implementations for better SCA properties on regular input values). */ -__owur int ec_group_do_inverse_ord(const EC_GROUP *group, BIGNUM *res, - const BIGNUM *x, BN_CTX *ctx); +__owur int ossl_ec_group_do_inverse_ord(const EC_GROUP *group, BIGNUM *res, + const BIGNUM *x, BN_CTX *ctx); /*- * ECDH Key Derivation Function as defined in ANSI X9.63 */ -int ecdh_KDF_X9_63(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); +int ossl_ecdh_kdf_X9_63(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const unsigned char *sinfo, size_t sinfolen, + const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); + +int ossl_ec_key_public_check(const EC_KEY *eckey, BN_CTX *ctx); +int ossl_ec_key_public_check_quick(const EC_KEY *eckey, BN_CTX *ctx); +int ossl_ec_key_private_check(const EC_KEY *eckey); +int ossl_ec_key_pairwise_check(const EC_KEY *eckey, BN_CTX *ctx); +OSSL_LIB_CTX *ossl_ec_key_get_libctx(const EC_KEY *eckey); +const char *ossl_ec_key_get0_propq(const EC_KEY *eckey); +void ossl_ec_key_set0_libctx(EC_KEY *key, OSSL_LIB_CTX *libctx); + +/* Backend support */ +int ossl_ec_group_todata(const EC_GROUP *group, OSSL_PARAM_BLD *tmpl, + OSSL_PARAM params[], OSSL_LIB_CTX *libctx, + const char *propq, + BN_CTX *bnctx, unsigned char **genbuf); +int ossl_ec_group_fromdata(EC_KEY *ec, const OSSL_PARAM params[]); +int ossl_ec_group_set_params(EC_GROUP *group, const OSSL_PARAM params[]); +int ossl_ec_key_fromdata(EC_KEY *ecx, const OSSL_PARAM params[], + int include_private); +int ossl_ec_key_otherparams_fromdata(EC_KEY *ec, const OSSL_PARAM params[]); +int ossl_ec_key_is_foreign(const EC_KEY *ec); +EC_KEY *ossl_ec_key_dup(const EC_KEY *key, int selection); +int ossl_x509_algor_is_sm2(const X509_ALGOR *palg); +EC_KEY *ossl_ec_key_param_from_x509_algor(const X509_ALGOR *palg, + OSSL_LIB_CTX *libctx, + const char *propq); +EC_KEY *ossl_ec_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_ec_set_ecdh_cofactor_mode(EC_KEY *ec, int mode); +int ossl_ec_encoding_name2id(const char *name); +int ossl_ec_encoding_param2id(const OSSL_PARAM *p, int *id); +int ossl_ec_pt_format_name2id(const char *name); +int ossl_ec_pt_format_param2id(const OSSL_PARAM *p, int *id); +char *ossl_ec_pt_format_id2name(int id); + +char *ossl_ec_check_group_type_id2name(int flags); +int ossl_ec_set_check_group_type_from_name(EC_KEY *ec, const char *name); # endif /* OPENSSL_NO_EC */ #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecerr.h new file mode 100644 index 00000000..782526bf --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ECERR_H +# define OSSL_CRYPTO_ECERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_EC + +int ossl_err_load_EC_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecx.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecx.h new file mode 100644 index 00000000..48b95fa5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecx.h @@ -0,0 +1,150 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* Internal EC functions for other submodules: not for application use */ + +#ifndef OSSL_CRYPTO_ECX_H +# define OSSL_CRYPTO_ECX_H +# pragma once + +# include + +# ifndef OPENSSL_NO_EC + +# include +# include +# include +# include "internal/refcount.h" +# include "crypto/types.h" + +# define X25519_KEYLEN 32 +# define X448_KEYLEN 56 +# define ED25519_KEYLEN 32 +# define ED448_KEYLEN 57 + +# define MAX_KEYLEN ED448_KEYLEN + +# define X25519_BITS 253 +# define X25519_SECURITY_BITS 128 + +# define X448_BITS 448 +# define X448_SECURITY_BITS 224 + +# define ED25519_BITS 256 +/* RFC8032 Section 8.5 */ +# define ED25519_SECURITY_BITS 128 +# define ED25519_SIGSIZE 64 + +# define ED448_BITS 456 +/* RFC8032 Section 8.5 */ +# define ED448_SECURITY_BITS 224 +# define ED448_SIGSIZE 114 + + +typedef enum { + ECX_KEY_TYPE_X25519, + ECX_KEY_TYPE_X448, + ECX_KEY_TYPE_ED25519, + ECX_KEY_TYPE_ED448 +} ECX_KEY_TYPE; + +#define KEYTYPE2NID(type) \ + ((type) == ECX_KEY_TYPE_X25519 \ + ? EVP_PKEY_X25519 \ + : ((type) == ECX_KEY_TYPE_X448 \ + ? EVP_PKEY_X448 \ + : ((type) == ECX_KEY_TYPE_ED25519 \ + ? EVP_PKEY_ED25519 \ + : EVP_PKEY_ED448))) + +struct ecx_key_st { + OSSL_LIB_CTX *libctx; + char *propq; + unsigned int haspubkey:1; + unsigned char pubkey[MAX_KEYLEN]; + unsigned char *privkey; + size_t keylen; + ECX_KEY_TYPE type; + CRYPTO_REF_COUNT references; + CRYPTO_RWLOCK *lock; +}; + +size_t ossl_ecx_key_length(ECX_KEY_TYPE type); +ECX_KEY *ossl_ecx_key_new(OSSL_LIB_CTX *libctx, ECX_KEY_TYPE type, + int haspubkey, const char *propq); +void ossl_ecx_key_set0_libctx(ECX_KEY *key, OSSL_LIB_CTX *libctx); +unsigned char *ossl_ecx_key_allocate_privkey(ECX_KEY *key); +void ossl_ecx_key_free(ECX_KEY *key); +int ossl_ecx_key_up_ref(ECX_KEY *key); +ECX_KEY *ossl_ecx_key_dup(const ECX_KEY *key, int selection); + +int ossl_x25519(uint8_t out_shared_key[32], const uint8_t private_key[32], + const uint8_t peer_public_value[32]); +void ossl_x25519_public_from_private(uint8_t out_public_value[32], + const uint8_t private_key[32]); + +int +ossl_ed25519_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[32], + const uint8_t private_key[32], + const char *propq); +int +ossl_ed25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, + const uint8_t public_key[32], const uint8_t private_key[32], + OSSL_LIB_CTX *libctx, const char *propq); +int +ossl_ed25519_verify(const uint8_t *message, size_t message_len, + const uint8_t signature[64], const uint8_t public_key[32], + OSSL_LIB_CTX *libctx, const char *propq); + +int +ossl_ed448_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[57], + const uint8_t private_key[57], const char *propq); +int +ossl_ed448_sign(OSSL_LIB_CTX *ctx, uint8_t *out_sig, const uint8_t *message, + size_t message_len, const uint8_t public_key[57], + const uint8_t private_key[57], const uint8_t *context, + size_t context_len, const char *propq); + +int +ossl_ed448_verify(OSSL_LIB_CTX *ctx, const uint8_t *message, size_t message_len, + const uint8_t signature[114], const uint8_t public_key[57], + const uint8_t *context, size_t context_len, const char *propq); + +int +ossl_x448(uint8_t out_shared_key[56], const uint8_t private_key[56], + const uint8_t peer_public_value[56]); +void +ossl_x448_public_from_private(uint8_t out_public_value[56], + const uint8_t private_key[56]); + + +/* Backend support */ +typedef enum { + KEY_OP_PUBLIC, + KEY_OP_PRIVATE, + KEY_OP_KEYGEN +} ecx_key_op_t; + +ECX_KEY *ossl_ecx_key_op(const X509_ALGOR *palg, + const unsigned char *p, int plen, + int pkey_id, ecx_key_op_t op, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_ecx_public_from_private(ECX_KEY *key); +int ossl_ecx_key_fromdata(ECX_KEY *ecx, const OSSL_PARAM params[], + int include_private); +ECX_KEY *ossl_ecx_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +ECX_KEY *ossl_evp_pkey_get1_X25519(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_X448(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_ED25519(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_ED448(EVP_PKEY *pkey); +# endif /* OPENSSL_NO_EC */ +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/encoder.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/encoder.h new file mode 100644 index 00000000..5c53bbea --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/encoder.h @@ -0,0 +1,20 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENCODER_H +# define OSSL_CRYPTO_ENCODER_H +# pragma once + +# include + +int ossl_encoder_get_number(const OSSL_ENCODER *encoder); +int ossl_encoder_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_encoder_store_remove_all_provided(const OSSL_PROVIDER *prov); + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/encodererr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/encodererr.h new file mode 100644 index 00000000..56c45823 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/encodererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENCODERERR_H +# define OSSL_CRYPTO_ENCODERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_ENCODER_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/engine.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/engine.h index f80ae3ec..fac6ed09 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/engine.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/engine.h @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/engineerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/engineerr.h new file mode 100644 index 00000000..737c841d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/engineerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENGINEERR_H +# define OSSL_CRYPTO_ENGINEERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_ENGINE + +int ossl_err_load_ENGINE_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/err.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/err.h index 8ab0e5ba..15ec6fd0 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/err.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,10 +9,11 @@ #ifndef OSSL_CRYPTO_ERR_H # define OSSL_CRYPTO_ERR_H +# pragma once -int err_load_crypto_strings_int(void); +int ossl_err_load_ERR_strings(void); +int ossl_err_load_crypto_strings(void); void err_cleanup(void); -void err_delete_thread_state(void); int err_shelve_state(void **); void err_unshelve_state(void *); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ess.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ess.h new file mode 100644 index 00000000..7acde5f8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ess.h @@ -0,0 +1,76 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ESS_H +# define OSSL_CRYPTO_ESS_H +# pragma once + +/*- + * IssuerSerial ::= SEQUENCE { + * issuer GeneralNames, + * serialNumber CertificateSerialNumber + * } + */ + +struct ESS_issuer_serial { + STACK_OF(GENERAL_NAME) *issuer; + ASN1_INTEGER *serial; +}; + +/*- + * ESSCertID ::= SEQUENCE { + * certHash Hash, + * issuerSerial IssuerSerial OPTIONAL + * } + */ + +struct ESS_cert_id { + ASN1_OCTET_STRING *hash; /* Always SHA-1 digest. */ + ESS_ISSUER_SERIAL *issuer_serial; +}; + +/*- + * SigningCertificate ::= SEQUENCE { + * certs SEQUENCE OF ESSCertID, + * policies SEQUENCE OF PolicyInformation OPTIONAL + * } + */ + +struct ESS_signing_cert { + STACK_OF(ESS_CERT_ID) *cert_ids; + STACK_OF(POLICYINFO) *policy_info; +}; + +/*- + * ESSCertIDv2 ::= SEQUENCE { + * hashAlgorithm AlgorithmIdentifier DEFAULT id-sha256, + * certHash Hash, + * issuerSerial IssuerSerial OPTIONAL + * } + */ + +struct ESS_cert_id_v2_st { + X509_ALGOR *hash_alg; /* Default: SHA-256 */ + ASN1_OCTET_STRING *hash; + ESS_ISSUER_SERIAL *issuer_serial; +}; + +/*- + * SigningCertificateV2 ::= SEQUENCE { + * certs SEQUENCE OF ESSCertIDv2, + * policies SEQUENCE OF PolicyInformation OPTIONAL + * } + */ + +struct ESS_signing_cert_v2_st { + STACK_OF(ESS_CERT_ID_V2) *cert_ids; + STACK_OF(POLICYINFO) *policy_info; +}; + +#endif /* OSSL_CRYPTO_ESS_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/esserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/esserr.h new file mode 100644 index 00000000..8df2df11 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/esserr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ESSERR_H +# define OSSL_CRYPTO_ESSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ESS_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evp.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evp.h index d86aed36..dbbdcccb 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evp.h @@ -1,14 +1,20 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include -#include "internal/refcount.h" +#ifndef OSSL_CRYPTO_EVP_H +# define OSSL_CRYPTO_EVP_H +# pragma once + +# include +# include +# include "internal/refcount.h" +# include "crypto/ecx.h" /* * Don't free up md_ctx->pctx in EVP_MD_CTX_reset, use the reserved flag @@ -16,7 +22,93 @@ */ #define EVP_MD_CTX_FLAG_KEEP_PKEY_CTX 0x0400 +#define evp_pkey_ctx_is_legacy(ctx) \ + ((ctx)->keymgmt == NULL) +#define evp_pkey_ctx_is_provided(ctx) \ + (!evp_pkey_ctx_is_legacy(ctx)) + struct evp_pkey_ctx_st { + /* Actual operation */ + int operation; + + /* + * Library context, property query, keytype and keymgmt associated with + * this context + */ + OSSL_LIB_CTX *libctx; + char *propquery; + const char *keytype; + /* If |pkey| below is set, this field is always a reference to its keymgmt */ + EVP_KEYMGMT *keymgmt; + + union { + struct { + void *genctx; + } keymgmt; + + struct { + EVP_KEYEXCH *exchange; + /* + * Opaque ctx returned from a providers exchange algorithm + * implementation OSSL_FUNC_keyexch_newctx() + */ + void *algctx; + } kex; + + struct { + EVP_SIGNATURE *signature; + /* + * Opaque ctx returned from a providers signature algorithm + * implementation OSSL_FUNC_signature_newctx() + */ + void *algctx; + } sig; + + struct { + EVP_ASYM_CIPHER *cipher; + /* + * Opaque ctx returned from a providers asymmetric cipher algorithm + * implementation OSSL_FUNC_asym_cipher_newctx() + */ + void *algctx; + } ciph; + struct { + EVP_KEM *kem; + /* + * Opaque ctx returned from a providers KEM algorithm + * implementation OSSL_FUNC_kem_newctx() + */ + void *algctx; + } encap; + } op; + + /* + * Cached parameters. Inits of operations that depend on these should + * call evp_pkey_ctx_use_delayed_data() when the operation has been set + * up properly. + */ + struct { + /* Distinguishing Identifier, ISO/IEC 15946-3, FIPS 196 */ + char *dist_id_name; /* The name used with EVP_PKEY_CTX_ctrl_str() */ + void *dist_id; /* The distinguishing ID itself */ + size_t dist_id_len; /* The length of the distinguishing ID */ + + /* Indicators of what has been set. Keep them together! */ + unsigned int dist_id_set : 1; + } cached_parameters; + + /* Application specific data, usually used by the callback */ + void *app_data; + /* Keygen callback */ + EVP_PKEY_gen_cb *pkey_gencb; + /* implementation specific keygen data */ + int *keygen_info; + int keygen_info_count; + + /* Legacy fields below */ + + /* EVP_PKEY identity */ + int legacy_keytype; /* Method associated with this operation */ const EVP_PKEY_METHOD *pmeth; /* Engine that implements this method or NULL if builtin */ @@ -25,17 +117,17 @@ struct evp_pkey_ctx_st { EVP_PKEY *pkey; /* Peer key for key agreement, may be NULL */ EVP_PKEY *peerkey; - /* Actual operation */ - int operation; /* Algorithm specific data */ void *data; - /* Application specific data */ - void *app_data; - /* Keygen callback */ - EVP_PKEY_gen_cb *pkey_gencb; - /* implementation specific keygen data */ - int *keygen_info; - int keygen_info_count; + /* Indicator if digest_custom needs to be called */ + unsigned int flag_call_digest_custom:1; + /* + * Used to support taking custody of memory in the case of a provider being + * used with the deprecated EVP_PKEY_CTX_set_rsa_keygen_pubexp() API. This + * member should NOT be used for any other purpose and should be removed + * when said deprecated API is excised completely. + */ + BIGNUM *rsa_pubexp; } /* EVP_PKEY_CTX */ ; #define EVP_PKEY_FLAG_DYNAMIC 1 @@ -44,7 +136,7 @@ struct evp_pkey_method_st { int pkey_id; int flags; int (*init) (EVP_PKEY_CTX *ctx); - int (*copy) (EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src); + int (*copy) (EVP_PKEY_CTX *dst, const EVP_PKEY_CTX *src); void (*cleanup) (EVP_PKEY_CTX *ctx); int (*paramgen_init) (EVP_PKEY_CTX *ctx); int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); @@ -93,30 +185,74 @@ DEFINE_STACK_OF_CONST(EVP_PKEY_METHOD) void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx); -extern const EVP_PKEY_METHOD cmac_pkey_meth; -extern const EVP_PKEY_METHOD dh_pkey_meth; -extern const EVP_PKEY_METHOD dhx_pkey_meth; -extern const EVP_PKEY_METHOD dsa_pkey_meth; -extern const EVP_PKEY_METHOD ec_pkey_meth; -extern const EVP_PKEY_METHOD sm2_pkey_meth; -extern const EVP_PKEY_METHOD ecx25519_pkey_meth; -extern const EVP_PKEY_METHOD ecx448_pkey_meth; -extern const EVP_PKEY_METHOD ed25519_pkey_meth; -extern const EVP_PKEY_METHOD ed448_pkey_meth; -extern const EVP_PKEY_METHOD hmac_pkey_meth; -extern const EVP_PKEY_METHOD rsa_pkey_meth; -extern const EVP_PKEY_METHOD rsa_pss_pkey_meth; -extern const EVP_PKEY_METHOD scrypt_pkey_meth; -extern const EVP_PKEY_METHOD tls1_prf_pkey_meth; -extern const EVP_PKEY_METHOD hkdf_pkey_meth; -extern const EVP_PKEY_METHOD poly1305_pkey_meth; -extern const EVP_PKEY_METHOD siphash_pkey_meth; +const EVP_PKEY_METHOD *ossl_dh_pkey_method(void); +const EVP_PKEY_METHOD *ossl_dhx_pkey_method(void); +const EVP_PKEY_METHOD *ossl_dsa_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ec_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ecx25519_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ecx448_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ed25519_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ed448_pkey_method(void); +const EVP_PKEY_METHOD *ossl_rsa_pkey_method(void); +const EVP_PKEY_METHOD *ossl_rsa_pss_pkey_method(void); + +struct evp_mac_st { + OSSL_PROVIDER *prov; + int name_id; + char *type_name; + const char *description; + + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + + OSSL_FUNC_mac_newctx_fn *newctx; + OSSL_FUNC_mac_dupctx_fn *dupctx; + OSSL_FUNC_mac_freectx_fn *freectx; + OSSL_FUNC_mac_init_fn *init; + OSSL_FUNC_mac_update_fn *update; + OSSL_FUNC_mac_final_fn *final; + OSSL_FUNC_mac_gettable_params_fn *gettable_params; + OSSL_FUNC_mac_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_mac_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_mac_get_params_fn *get_params; + OSSL_FUNC_mac_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_mac_set_ctx_params_fn *set_ctx_params; +}; + +struct evp_kdf_st { + OSSL_PROVIDER *prov; + int name_id; + char *type_name; + const char *description; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + + OSSL_FUNC_kdf_newctx_fn *newctx; + OSSL_FUNC_kdf_dupctx_fn *dupctx; + OSSL_FUNC_kdf_freectx_fn *freectx; + OSSL_FUNC_kdf_reset_fn *reset; + OSSL_FUNC_kdf_derive_fn *derive; + OSSL_FUNC_kdf_gettable_params_fn *gettable_params; + OSSL_FUNC_kdf_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_kdf_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_kdf_get_params_fn *get_params; + OSSL_FUNC_kdf_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_kdf_set_ctx_params_fn *set_ctx_params; +}; + +#define EVP_ORIG_DYNAMIC 0 +#define EVP_ORIG_GLOBAL 1 +#define EVP_ORIG_METH 2 struct evp_md_st { + /* nid */ int type; + + /* Legacy structure members */ int pkey_type; int md_size; unsigned long flags; + int origin; int (*init) (EVP_MD_CTX *ctx); int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); int (*final) (EVP_MD_CTX *ctx, unsigned char *md); @@ -126,16 +262,44 @@ struct evp_md_st { int ctx_size; /* how big does the ctx->md_data need to be */ /* control function */ int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, void *p2); + + /* New structure members */ + /* Above comment to be removed when legacy has gone */ + int name_id; + char *type_name; + const char *description; + OSSL_PROVIDER *prov; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + OSSL_FUNC_digest_newctx_fn *newctx; + OSSL_FUNC_digest_init_fn *dinit; + OSSL_FUNC_digest_update_fn *dupdate; + OSSL_FUNC_digest_final_fn *dfinal; + OSSL_FUNC_digest_digest_fn *digest; + OSSL_FUNC_digest_freectx_fn *freectx; + OSSL_FUNC_digest_dupctx_fn *dupctx; + OSSL_FUNC_digest_get_params_fn *get_params; + OSSL_FUNC_digest_set_ctx_params_fn *set_ctx_params; + OSSL_FUNC_digest_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_digest_gettable_params_fn *gettable_params; + OSSL_FUNC_digest_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_digest_gettable_ctx_params_fn *gettable_ctx_params; + } /* EVP_MD */ ; struct evp_cipher_st { int nid; + int block_size; /* Default value for variable length ciphers */ int key_len; int iv_len; + + /* Legacy structure members */ /* Various flags */ unsigned long flags; + /* How the EVP_CIPHER was created. */ + int origin; /* init key */ int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); @@ -154,6 +318,29 @@ struct evp_cipher_st { int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr); /* Application data */ void *app_data; + + /* New structure members */ + /* Above comment to be removed when legacy has gone */ + int name_id; + char *type_name; + const char *description; + OSSL_PROVIDER *prov; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + OSSL_FUNC_cipher_newctx_fn *newctx; + OSSL_FUNC_cipher_encrypt_init_fn *einit; + OSSL_FUNC_cipher_decrypt_init_fn *dinit; + OSSL_FUNC_cipher_update_fn *cupdate; + OSSL_FUNC_cipher_final_fn *cfinal; + OSSL_FUNC_cipher_cipher_fn *ccipher; + OSSL_FUNC_cipher_freectx_fn *freectx; + OSSL_FUNC_cipher_dupctx_fn *dupctx; + OSSL_FUNC_cipher_get_params_fn *get_params; + OSSL_FUNC_cipher_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_cipher_set_ctx_params_fn *set_ctx_params; + OSSL_FUNC_cipher_gettable_params_fn *gettable_params; + OSSL_FUNC_cipher_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_cipher_settable_ctx_params_fn *settable_ctx_params; } /* EVP_CIPHER */ ; /* Macros to code block cipher wrappers */ @@ -165,7 +352,7 @@ struct evp_cipher_st { #define BLOCK_CIPHER_ecb_loop() \ size_t i, bl; \ - bl = EVP_CIPHER_CTX_cipher(ctx)->block_size; \ + bl = EVP_CIPHER_CTX_get0_cipher(ctx)->block_size; \ if (inl < bl) return 1;\ inl -= bl; \ for (i=0; i <= inl; i+=bl) @@ -174,26 +361,26 @@ struct evp_cipher_st { static int cname##_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ {\ BLOCK_CIPHER_ecb_loop() \ - cprefix##_ecb_encrypt(in + i, out + i, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_encrypting(ctx)); \ + cprefix##_ecb_encrypt(in + i, out + i, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_is_encrypting(ctx)); \ return 1;\ } -#define EVP_MAXCHUNK ((size_t)1<<(sizeof(long)*8-2)) +#define EVP_MAXCHUNK ((size_t)1 << 30) #define BLOCK_CIPHER_func_ofb(cname, cprefix, cbits, kstruct, ksched) \ static int cname##_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ {\ while(inl>=EVP_MAXCHUNK) {\ - int num = EVP_CIPHER_CTX_num(ctx);\ - cprefix##_ofb##cbits##_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), &num); \ + int num = EVP_CIPHER_CTX_get_num(ctx);\ + cprefix##_ofb##cbits##_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, &num); \ EVP_CIPHER_CTX_set_num(ctx, num);\ inl-=EVP_MAXCHUNK;\ in +=EVP_MAXCHUNK;\ out+=EVP_MAXCHUNK;\ }\ if (inl) {\ - int num = EVP_CIPHER_CTX_num(ctx);\ - cprefix##_ofb##cbits##_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), &num); \ + int num = EVP_CIPHER_CTX_get_num(ctx);\ + cprefix##_ofb##cbits##_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, &num); \ EVP_CIPHER_CTX_set_num(ctx, num);\ }\ return 1;\ @@ -204,13 +391,13 @@ static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const uns {\ while(inl>=EVP_MAXCHUNK) \ {\ - cprefix##_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_encrypting(ctx));\ + cprefix##_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ inl-=EVP_MAXCHUNK;\ in +=EVP_MAXCHUNK;\ out+=EVP_MAXCHUNK;\ }\ if (inl)\ - cprefix##_cbc_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_encrypting(ctx));\ + cprefix##_cbc_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ return 1;\ } @@ -222,13 +409,13 @@ static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, if (inl < chunk) chunk = inl;\ while (inl && inl >= chunk)\ {\ - int num = EVP_CIPHER_CTX_num(ctx);\ + int num = EVP_CIPHER_CTX_get_num(ctx);\ cprefix##_cfb##cbits##_encrypt(in, out, (long) \ ((cbits == 1) \ && !EVP_CIPHER_CTX_test_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS) \ ? chunk*8 : chunk), \ - &EVP_C_DATA(kstruct, ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx),\ - &num, EVP_CIPHER_CTX_encrypting(ctx));\ + &EVP_C_DATA(kstruct, ctx)->ksched, ctx->iv,\ + &num, EVP_CIPHER_CTX_is_encrypting(ctx));\ EVP_CIPHER_CTX_set_num(ctx, num);\ inl -= chunk;\ in += chunk;\ @@ -250,6 +437,7 @@ static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, static const EVP_CIPHER cname##_##mode = { \ nid##_##nmode, block_size, key_len, iv_len, \ flags | EVP_CIPH_##MODE##_MODE, \ + EVP_ORIG_GLOBAL, \ init_key, \ cname##_##mode##_cipher, \ cleanup, \ @@ -305,6 +493,7 @@ BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, flags, \ static const EVP_CIPHER cname##_cbc = {\ nid##_cbc, block_size, key_len, iv_len, \ flags | EVP_CIPH_CBC_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_cbc_cipher,\ cleanup,\ @@ -318,6 +507,7 @@ const EVP_CIPHER *EVP_##cname##_cbc(void) { return &cname##_cbc; }\ static const EVP_CIPHER cname##_cfb = {\ nid##_cfb64, 1, key_len, iv_len, \ flags | EVP_CIPH_CFB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_cfb_cipher,\ cleanup,\ @@ -331,6 +521,7 @@ const EVP_CIPHER *EVP_##cname##_cfb(void) { return &cname##_cfb; }\ static const EVP_CIPHER cname##_ofb = {\ nid##_ofb64, 1, key_len, iv_len, \ flags | EVP_CIPH_OFB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_ofb_cipher,\ cleanup,\ @@ -344,6 +535,7 @@ const EVP_CIPHER *EVP_##cname##_ofb(void) { return &cname##_ofb; }\ static const EVP_CIPHER cname##_ecb = {\ nid##_ecb, block_size, key_len, iv_len, \ flags | EVP_CIPH_ECB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_ecb_cipher,\ cleanup,\ @@ -372,66 +564,293 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; } (fl)|EVP_CIPH_FLAG_DEFAULT_ASN1, \ cipher##_init_key, NULL, NULL, NULL, NULL) - -# ifndef OPENSSL_NO_EC - -#define X25519_KEYLEN 32 -#define X448_KEYLEN 56 -#define ED448_KEYLEN 57 - -#define MAX_KEYLEN ED448_KEYLEN - typedef struct { - unsigned char pubkey[MAX_KEYLEN]; - unsigned char *privkey; -} ECX_KEY; + unsigned char iv[EVP_MAX_IV_LENGTH]; + unsigned int iv_len; + unsigned int tag_len; +} evp_cipher_aead_asn1_params; -#endif +int evp_cipher_param_to_asn1_ex(EVP_CIPHER_CTX *c, ASN1_TYPE *type, + evp_cipher_aead_asn1_params *params); + +int evp_cipher_asn1_to_param_ex(EVP_CIPHER_CTX *c, ASN1_TYPE *type, + evp_cipher_aead_asn1_params *params); /* - * Type needs to be a bit field Sub-type needs to be for variations on the - * method, as in, can it do arbitrary encryption.... + * To support transparent execution of operation in backends other + * than the "origin" key, we support transparent export/import to + * those providers, and maintain a cache of the imported keydata, + * so we don't need to redo the export/import every time we perform + * the same operation in that same provider. + * This requires that the "origin" backend (whether it's a legacy or a + * provider "origin") implements exports, and that the target provider + * has an EVP_KEYMGMT that implements import. */ +typedef struct { + EVP_KEYMGMT *keymgmt; + void *keydata; + int selection; +} OP_CACHE_ELEM; + +DEFINE_STACK_OF(OP_CACHE_ELEM) + +/* + * An EVP_PKEY can have the following states: + * + * untyped & empty: + * + * type == EVP_PKEY_NONE && keymgmt == NULL + * + * typed & empty: + * + * (type != EVP_PKEY_NONE && pkey.ptr == NULL) ## legacy (libcrypto only) + * || (keymgmt != NULL && keydata == NULL) ## provider side + * + * fully assigned: + * + * (type != EVP_PKEY_NONE && pkey.ptr != NULL) ## legacy (libcrypto only) + * || (keymgmt != NULL && keydata != NULL) ## provider side + * + * The easiest way to detect a legacy key is: + * + * keymgmt == NULL && type != EVP_PKEY_NONE + * + * The easiest way to detect a provider side key is: + * + * keymgmt != NULL + */ +#define evp_pkey_is_blank(pk) \ + ((pk)->type == EVP_PKEY_NONE && (pk)->keymgmt == NULL) +#define evp_pkey_is_typed(pk) \ + ((pk)->type != EVP_PKEY_NONE || (pk)->keymgmt != NULL) +#ifndef FIPS_MODULE +# define evp_pkey_is_assigned(pk) \ + ((pk)->pkey.ptr != NULL || (pk)->keydata != NULL) +#else +# define evp_pkey_is_assigned(pk) \ + ((pk)->keydata != NULL) +#endif +#define evp_pkey_is_legacy(pk) \ + ((pk)->type != EVP_PKEY_NONE && (pk)->keymgmt == NULL) +#define evp_pkey_is_provided(pk) \ + ((pk)->keymgmt != NULL) + +union legacy_pkey_st { + void *ptr; + struct rsa_st *rsa; /* RSA */ +# ifndef OPENSSL_NO_DSA + struct dsa_st *dsa; /* DSA */ +# endif +# ifndef OPENSSL_NO_DH + struct dh_st *dh; /* DH */ +# endif +# ifndef OPENSSL_NO_EC + struct ec_key_st *ec; /* ECC */ + ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ +# endif +}; + struct evp_pkey_st { + /* == Legacy attributes == */ int type; int save_type; - CRYPTO_REF_COUNT references; + +# ifndef FIPS_MODULE + /* + * Legacy key "origin" is composed of a pointer to an EVP_PKEY_ASN1_METHOD, + * a pointer to a low level key and possibly a pointer to an engine. + */ const EVP_PKEY_ASN1_METHOD *ameth; ENGINE *engine; ENGINE *pmeth_engine; /* If not NULL public key ENGINE to use */ - union { - void *ptr; -# ifndef OPENSSL_NO_RSA - struct rsa_st *rsa; /* RSA */ + + /* Union to store the reference to an origin legacy key */ + union legacy_pkey_st pkey; + + /* Union to store the reference to a non-origin legacy key */ + union legacy_pkey_st legacy_cache_pkey; # endif -# ifndef OPENSSL_NO_DSA - struct dsa_st *dsa; /* DSA */ -# endif -# ifndef OPENSSL_NO_DH - struct dh_st *dh; /* DH */ -# endif -# ifndef OPENSSL_NO_EC - struct ec_key_st *ec; /* ECC */ - ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ -# endif - } pkey; - int save_parameters; - STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ + + /* == Common attributes == */ + CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; +#ifndef FIPS_MODULE + STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ + int save_parameters; + unsigned int foreign:1; /* the low-level key is using an engine or an app-method */ + CRYPTO_EX_DATA ex_data; +#endif + + /* == Provider attributes == */ + + /* + * Provider keydata "origin" is composed of a pointer to an EVP_KEYMGMT + * and a pointer to the provider side key data. This is never used at + * the same time as the legacy key data above. + */ + EVP_KEYMGMT *keymgmt; + void *keydata; + /* + * If any libcrypto code does anything that may modify the keydata + * contents, this dirty counter must be incremented. + */ + size_t dirty_cnt; + + /* + * To support transparent execution of operation in backends other + * than the "origin" key, we support transparent export/import to + * those providers, and maintain a cache of the imported keydata, + * so we don't need to redo the export/import every time we perform + * the same operation in that same provider. + */ + STACK_OF(OP_CACHE_ELEM) *operation_cache; + + /* + * We keep a copy of that "origin"'s dirty count, so we know if the + * operation cache needs flushing. + */ + size_t dirty_cnt_copy; + + /* Cache of key object information */ + struct { + int bits; + int security_bits; + int size; + } cache; } /* EVP_PKEY */ ; +#define EVP_PKEY_CTX_IS_SIGNATURE_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_SIGN \ + || (ctx)->operation == EVP_PKEY_OP_SIGNCTX \ + || (ctx)->operation == EVP_PKEY_OP_VERIFY \ + || (ctx)->operation == EVP_PKEY_OP_VERIFYCTX \ + || (ctx)->operation == EVP_PKEY_OP_VERIFYRECOVER) + +#define EVP_PKEY_CTX_IS_DERIVE_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_DERIVE) + +#define EVP_PKEY_CTX_IS_ASYM_CIPHER_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_ENCRYPT \ + || (ctx)->operation == EVP_PKEY_OP_DECRYPT) + +#define EVP_PKEY_CTX_IS_GEN_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_PARAMGEN \ + || (ctx)->operation == EVP_PKEY_OP_KEYGEN) + +#define EVP_PKEY_CTX_IS_FROMDATA_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_FROMDATA) + +#define EVP_PKEY_CTX_IS_KEM_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_ENCAPSULATE \ + || (ctx)->operation == EVP_PKEY_OP_DECAPSULATE) void openssl_add_all_ciphers_int(void); void openssl_add_all_digests_int(void); void evp_cleanup_int(void); void evp_app_cleanup_int(void); +void *evp_pkey_export_to_provider(EVP_PKEY *pk, OSSL_LIB_CTX *libctx, + EVP_KEYMGMT **keymgmt, + const char *propquery); +#ifndef FIPS_MODULE +int evp_pkey_copy_downgraded(EVP_PKEY **dest, const EVP_PKEY *src); +void *evp_pkey_get_legacy(EVP_PKEY *pk); +void evp_pkey_free_legacy(EVP_PKEY *x); +EVP_PKEY *evp_pkcs82pkey_legacy(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); +#endif + +/* + * KEYMGMT utility functions + */ + +/* + * Key import structure and helper function, to be used as an export callback + */ +struct evp_keymgmt_util_try_import_data_st { + EVP_KEYMGMT *keymgmt; + void *keydata; + + int selection; +}; +int evp_keymgmt_util_try_import(const OSSL_PARAM params[], void *arg); +int evp_keymgmt_util_assign_pkey(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt, + void *keydata); +EVP_PKEY *evp_keymgmt_util_make_pkey(EVP_KEYMGMT *keymgmt, void *keydata); + +int evp_keymgmt_util_export(const EVP_PKEY *pk, int selection, + OSSL_CALLBACK *export_cb, void *export_cbarg); +void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, + int selection); +OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk, + EVP_KEYMGMT *keymgmt, + int selection); +int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk, int locking); +int evp_keymgmt_util_cache_keydata(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, + void *keydata, int selection); +void evp_keymgmt_util_cache_keyinfo(EVP_PKEY *pk); +void *evp_keymgmt_util_fromdata(EVP_PKEY *target, EVP_KEYMGMT *keymgmt, + int selection, const OSSL_PARAM params[]); +int evp_keymgmt_util_has(EVP_PKEY *pk, int selection); +int evp_keymgmt_util_match(EVP_PKEY *pk1, EVP_PKEY *pk2, int selection); +int evp_keymgmt_util_copy(EVP_PKEY *to, EVP_PKEY *from, int selection); +void *evp_keymgmt_util_gen(EVP_PKEY *target, EVP_KEYMGMT *keymgmt, + void *genctx, OSSL_CALLBACK *cb, void *cbarg); +int evp_keymgmt_util_get_deflt_digest_name(EVP_KEYMGMT *keymgmt, + void *keydata, + char *mdname, size_t mdname_sz); +const char *evp_keymgmt_util_query_operation_name(EVP_KEYMGMT *keymgmt, + int op_id); + +/* + * KEYMGMT provider interface functions + */ +void *evp_keymgmt_newdata(const EVP_KEYMGMT *keymgmt); +void evp_keymgmt_freedata(const EVP_KEYMGMT *keymgmt, void *keyddata); +int evp_keymgmt_get_params(const EVP_KEYMGMT *keymgmt, + void *keydata, OSSL_PARAM params[]); +int evp_keymgmt_set_params(const EVP_KEYMGMT *keymgmt, + void *keydata, const OSSL_PARAM params[]); +void *evp_keymgmt_gen_init(const EVP_KEYMGMT *keymgmt, int selection, + const OSSL_PARAM params[]); +int evp_keymgmt_gen_set_template(const EVP_KEYMGMT *keymgmt, void *genctx, + void *template); +int evp_keymgmt_gen_set_params(const EVP_KEYMGMT *keymgmt, void *genctx, + const OSSL_PARAM params[]); +void *evp_keymgmt_gen(const EVP_KEYMGMT *keymgmt, void *genctx, + OSSL_CALLBACK *cb, void *cbarg); +void evp_keymgmt_gen_cleanup(const EVP_KEYMGMT *keymgmt, void *genctx); + +int evp_keymgmt_has_load(const EVP_KEYMGMT *keymgmt); +void *evp_keymgmt_load(const EVP_KEYMGMT *keymgmt, + const void *objref, size_t objref_sz); + +int evp_keymgmt_has(const EVP_KEYMGMT *keymgmt, void *keyddata, int selection); +int evp_keymgmt_validate(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, int checktype); +int evp_keymgmt_match(const EVP_KEYMGMT *keymgmt, + const void *keydata1, const void *keydata2, + int selection); + +int evp_keymgmt_import(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, const OSSL_PARAM params[]); +const OSSL_PARAM *evp_keymgmt_import_types(const EVP_KEYMGMT *keymgmt, + int selection); +int evp_keymgmt_export(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, OSSL_CALLBACK *param_cb, void *cbarg); +const OSSL_PARAM *evp_keymgmt_export_types(const EVP_KEYMGMT *keymgmt, + int selection); +void *evp_keymgmt_dup(const EVP_KEYMGMT *keymgmt, + const void *keydata_from, int selection); +EVP_KEYMGMT *evp_keymgmt_fetch_from_prov(OSSL_PROVIDER *prov, + const char *name, + const char *properties); /* Pulling defines out of C source files */ -#define EVP_RC4_KEY_SIZE 16 -#ifndef TLS1_1_VERSION -# define TLS1_1_VERSION 0x0302 -#endif +# define EVP_RC4_KEY_SIZE 16 +# ifndef TLS1_1_VERSION +# define TLS1_1_VERSION 0x0302 +# endif void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags); @@ -440,3 +859,96 @@ void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags); #define EVP_ENCODE_CTX_NO_NEWLINES 1 /* Use the SRP base64 alphabet instead of the standard one */ #define EVP_ENCODE_CTX_USE_SRP_ALPHABET 2 + +const EVP_CIPHER *evp_get_cipherbyname_ex(OSSL_LIB_CTX *libctx, + const char *name); +const EVP_MD *evp_get_digestbyname_ex(OSSL_LIB_CTX *libctx, + const char *name); + +int ossl_pkcs5_pbkdf2_hmac_ex(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + const EVP_MD *digest, int keylen, + unsigned char *out, + OSSL_LIB_CTX *libctx, const char *propq); + +# ifndef FIPS_MODULE +/* + * Internal helpers for stricter EVP_PKEY_CTX_{set,get}_params(). + * + * Return 1 on success, 0 or negative for errors. + * + * In particular they return -2 if any of the params is not supported. + * + * They are not available in FIPS_MODULE as they depend on + * - EVP_PKEY_CTX_{get,set}_params() + * - EVP_PKEY_CTX_{gettable,settable}_params() + * + */ +int evp_pkey_ctx_set_params_strict(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); +int evp_pkey_ctx_get_params_strict(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); + +EVP_MD_CTX *evp_md_ctx_new_ex(EVP_PKEY *pkey, const ASN1_OCTET_STRING *id, + OSSL_LIB_CTX *libctx, const char *propq); +int evp_pkey_name2type(const char *name); +const char *evp_pkey_type2name(int type); + +int evp_pkey_ctx_set1_id_prov(EVP_PKEY_CTX *ctx, const void *id, int len); +int evp_pkey_ctx_get1_id_prov(EVP_PKEY_CTX *ctx, void *id); +int evp_pkey_ctx_get1_id_len_prov(EVP_PKEY_CTX *ctx, size_t *id_len); + +int evp_pkey_ctx_use_cached_data(EVP_PKEY_CTX *ctx); +# endif /* !defined(FIPS_MODULE) */ + +int evp_method_store_cache_flush(OSSL_LIB_CTX *libctx); +int evp_method_store_remove_all_provided(const OSSL_PROVIDER *prov); + +int evp_default_properties_enable_fips_int(OSSL_LIB_CTX *libctx, int enable, + int loadconfig); +int evp_set_default_properties_int(OSSL_LIB_CTX *libctx, const char *propq, + int loadconfig, int mirrored); +char *evp_get_global_properties_str(OSSL_LIB_CTX *libctx, int loadconfig); + +void evp_md_ctx_clear_digest(EVP_MD_CTX *ctx, int force, int keep_digest); +/* just free the algctx if set, returns 0 on inconsistent state of ctx */ +int evp_md_ctx_free_algctx(EVP_MD_CTX *ctx); + +/* Three possible states: */ +# define EVP_PKEY_STATE_UNKNOWN 0 +# define EVP_PKEY_STATE_LEGACY 1 +# define EVP_PKEY_STATE_PROVIDER 2 +int evp_pkey_ctx_state(const EVP_PKEY_CTX *ctx); + +/* These two must ONLY be called for provider side operations */ +int evp_pkey_ctx_ctrl_to_param(EVP_PKEY_CTX *ctx, + int keytype, int optype, + int cmd, int p1, void *p2); +int evp_pkey_ctx_ctrl_str_to_param(EVP_PKEY_CTX *ctx, + const char *name, const char *value); + +/* These two must ONLY be called for legacy operations */ +int evp_pkey_ctx_set_params_to_ctrl(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params); +int evp_pkey_ctx_get_params_to_ctrl(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); + +/* This must ONLY be called for legacy EVP_PKEYs */ +int evp_pkey_get_params_to_ctrl(const EVP_PKEY *pkey, OSSL_PARAM *params); + +/* Same as the public get0 functions but are not const */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DH *evp_pkey_get0_DH_int(const EVP_PKEY *pkey); +EC_KEY *evp_pkey_get0_EC_KEY_int(const EVP_PKEY *pkey); +RSA *evp_pkey_get0_RSA_int(const EVP_PKEY *pkey); +# endif + +/* Get internal identification number routines */ +int evp_asym_cipher_get_number(const EVP_ASYM_CIPHER *cipher); +int evp_cipher_get_number(const EVP_CIPHER *cipher); +int evp_kdf_get_number(const EVP_KDF *kdf); +int evp_kem_get_number(const EVP_KEM *wrap); +int evp_keyexch_get_number(const EVP_KEYEXCH *keyexch); +int evp_keymgmt_get_number(const EVP_KEYMGMT *keymgmt); +int evp_mac_get_number(const EVP_MAC *mac); +int evp_md_get_number(const EVP_MD *md); +int evp_rand_get_number(const EVP_RAND *rand); +int evp_signature_get_number(const EVP_SIGNATURE *signature); + +#endif /* OSSL_CRYPTO_EVP_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evperr.h new file mode 100644 index 00000000..d90ba83f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evperr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_EVPERR_H +# define OSSL_CRYPTO_EVPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_EVP_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/httperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/httperr.h new file mode 100644 index 00000000..969df17b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/httperr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_HTTPERR_H +# define OSSL_CRYPTO_HTTPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_HTTP_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/lhash.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/lhash.h index ab060cce..0f64869f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/lhash.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/lhash.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,7 +9,8 @@ #ifndef OSSL_CRYPTO_LHASH_H # define OSSL_CRYPTO_LHASH_H +# pragma once -unsigned long openssl_lh_strcasehash(const char *); +unsigned long ossl_lh_strcasehash(const char *); -#endif +#endif /* OSSL_CRYPTO_LHASH_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/md32_common.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/md32_common.h index 1124e9c2..966e2684 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/md32_common.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/md32_common.h @@ -1,7 +1,7 @@ /* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -95,6 +95,28 @@ #define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n)))) +#ifndef PEDANTIC +# if defined(__GNUC__) && __GNUC__>=2 && \ + !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) +# if defined(__riscv_zbb) || defined(__riscv_zbkb) +# if __riscv_xlen == 64 +# undef ROTATE +# define ROTATE(x, n) ({ MD32_REG_T ret; \ + asm ("roriw %0, %1, %2" \ + : "=r"(ret) \ + : "r"(x), "i"(32 - (n))); ret;}) +# endif +# if __riscv_xlen == 32 +# undef ROTATE +# define ROTATE(x, n) ({ MD32_REG_T ret; \ + asm ("rori %0, %1, %2" \ + : "=r"(ret) \ + : "r"(x), "i"(32 - (n))); ret;}) +# endif +# endif +# endif +#endif + #if defined(DATA_ORDER_IS_BIG_ENDIAN) # define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/modes.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/modes.h new file mode 100644 index 00000000..573e1197 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/modes.h @@ -0,0 +1,224 @@ +/* + * Copyright 2010-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* This header can move into provider when legacy support is removed */ +#include + +#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +typedef __int64 i64; +typedef unsigned __int64 u64; +# define U64(C) C##UI64 +#elif defined(__arch64__) +typedef long i64; +typedef unsigned long u64; +# define U64(C) C##UL +#else +typedef long long i64; +typedef unsigned long long u64; +# define U64(C) C##ULL +#endif + +typedef unsigned int u32; +typedef unsigned char u8; + +#define STRICT_ALIGNMENT 1 +#ifndef PEDANTIC +# if defined(__i386) || defined(__i386__) || \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \ + defined(__aarch64__) || \ + defined(__s390__) || defined(__s390x__) +# undef STRICT_ALIGNMENT +# endif +#endif + +#if !defined(PEDANTIC) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) +# if defined(__GNUC__) && __GNUC__>=2 +# if defined(__x86_64) || defined(__x86_64__) +# define BSWAP8(x) ({ u64 ret_=(x); \ + asm ("bswapq %0" \ + : "+r"(ret_)); ret_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("bswapl %0" \ + : "+r"(ret_)); ret_; }) +# elif (defined(__i386) || defined(__i386__)) && !defined(I386_ONLY) +# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \ + asm ("bswapl %0; bswapl %1" \ + : "+r"(hi_),"+r"(lo_)); \ + (u64)hi_<<32|lo_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("bswapl %0" \ + : "+r"(ret_)); ret_; }) +# elif defined(__aarch64__) +# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \ + __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ +# define BSWAP8(x) ({ u64 ret_; \ + asm ("rev %0,%1" \ + : "=r"(ret_) : "r"(x)); ret_; }) +# define BSWAP4(x) ({ u32 ret_; \ + asm ("rev %w0,%w1" \ + : "=r"(ret_) : "r"(x)); ret_; }) +# endif +# elif (defined(__arm__) || defined(__arm)) && !defined(STRICT_ALIGNMENT) +# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \ + asm ("rev %0,%0; rev %1,%1" \ + : "+r"(hi_),"+r"(lo_)); \ + (u64)hi_<<32|lo_; }) +# define BSWAP4(x) ({ u32 ret_; \ + asm ("rev %0,%1" \ + : "=r"(ret_) : "r"((u32)(x))); \ + ret_; }) +# elif (defined(__riscv_zbb) || defined(__riscv_zbkb)) && __riscv_xlen == 64 +# define BSWAP8(x) ({ u64 ret_=(x); \ + asm ("rev8 %0,%0" \ + : "+r"(ret_)); ret_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("rev8 %0,%0; srli %0,%0,32"\ + : "+&r"(ret_)); ret_; }) +# endif +# elif defined(_MSC_VER) +# if _MSC_VER>=1300 +# include +# pragma intrinsic(_byteswap_uint64,_byteswap_ulong) +# define BSWAP8(x) _byteswap_uint64((u64)(x)) +# define BSWAP4(x) _byteswap_ulong((u32)(x)) +# elif defined(_M_IX86) +__inline u32 _bswap4(u32 val) +{ +_asm mov eax, val _asm bswap eax} +# define BSWAP4(x) _bswap4(x) +# endif +# endif +#endif +#if defined(BSWAP4) && !defined(STRICT_ALIGNMENT) +# define GETU32(p) BSWAP4(*(const u32 *)(p)) +# define PUTU32(p,v) *(u32 *)(p) = BSWAP4(v) +#else +# define GETU32(p) ((u32)(p)[0]<<24|(u32)(p)[1]<<16|(u32)(p)[2]<<8|(u32)(p)[3]) +# define PUTU32(p,v) ((p)[0]=(u8)((v)>>24),(p)[1]=(u8)((v)>>16),(p)[2]=(u8)((v)>>8),(p)[3]=(u8)(v)) +#endif +/*- GCM definitions */ typedef struct { + u64 hi, lo; +} u128; + +typedef void (*gcm_init_fn)(u128 Htable[16], const u64 H[2]); +typedef void (*gcm_ghash_fn)(u64 Xi[2], const u128 Htable[16], const u8 *inp, size_t len); +typedef void (*gcm_gmult_fn)(u64 Xi[2], const u128 Htable[16]); +struct gcm_funcs_st { + gcm_init_fn ginit; + gcm_ghash_fn ghash; + gcm_gmult_fn gmult; +}; + +struct gcm128_context { + /* Following 6 names follow names in GCM specification */ + union { + u64 u[2]; + u32 d[4]; + u8 c[16]; + size_t t[16 / sizeof(size_t)]; + } Yi, EKi, EK0, len, Xi, H; + /* + * Relative position of Yi, EKi, EK0, len, Xi, H and pre-computed Htable is + * used in some assembler modules, i.e. don't change the order! + */ + u128 Htable[16]; + struct gcm_funcs_st funcs; + unsigned int mres, ares; + block128_f block; + void *key; +#if !defined(OPENSSL_SMALL_FOOTPRINT) + unsigned char Xn[48]; +#endif +}; + +/* + * The maximum permitted number of cipher blocks per data unit in XTS mode. + * Reference IEEE Std 1619-2018. + */ +#define XTS_MAX_BLOCKS_PER_DATA_UNIT (1<<20) + +struct xts128_context { + void *key1, *key2; + block128_f block1, block2; +}; + +struct ccm128_context { + union { + u64 u[2]; + u8 c[16]; + } nonce, cmac; + u64 blocks; + block128_f block; + void *key; +}; + +#ifndef OPENSSL_NO_OCB + +typedef union { + u64 a[2]; + unsigned char c[16]; +} OCB_BLOCK; +# define ocb_block16_xor(in1,in2,out) \ + ( (out)->a[0]=(in1)->a[0]^(in2)->a[0], \ + (out)->a[1]=(in1)->a[1]^(in2)->a[1] ) +# if STRICT_ALIGNMENT +# define ocb_block16_xor_misaligned(in1,in2,out) \ + ocb_block_xor((in1)->c,(in2)->c,16,(out)->c) +# else +# define ocb_block16_xor_misaligned ocb_block16_xor +# endif + +struct ocb128_context { + /* Need both encrypt and decrypt key schedules for decryption */ + block128_f encrypt; + block128_f decrypt; + void *keyenc; + void *keydec; + ocb128_f stream; /* direction dependent */ + /* Key dependent variables. Can be reused if key remains the same */ + size_t l_index; + size_t max_l_index; + OCB_BLOCK l_star; + OCB_BLOCK l_dollar; + OCB_BLOCK *l; + /* Must be reset for each session */ + struct { + u64 blocks_hashed; + u64 blocks_processed; + OCB_BLOCK offset_aad; + OCB_BLOCK sum; + OCB_BLOCK offset; + OCB_BLOCK checksum; + } sess; +}; +#endif /* OPENSSL_NO_OCB */ + +#ifndef OPENSSL_NO_SIV + +#define SIV_LEN 16 + +typedef union siv_block_u { + uint64_t word[SIV_LEN/sizeof(uint64_t)]; + unsigned char byte[SIV_LEN]; +} SIV_BLOCK; + +struct siv128_context { + /* d stores intermediate results of S2V; it corresponds to D from the + pseudocode in section 2.4 of RFC 5297. */ + SIV_BLOCK d; + SIV_BLOCK tag; + EVP_CIPHER_CTX *cipher_ctx; + EVP_MAC *mac; + EVP_MAC_CTX *mac_ctx_init; + int final_ret; + int crypto_ok; +}; + +#endif /* OPENSSL_NO_SIV */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/objects.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/objects.h index 76e1b4d9..f22e9287 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/objects.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/objects.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,4 +9,4 @@ #include -void obj_cleanup_int(void); +void ossl_obj_cleanup_int(void); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/objectserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/objectserr.h new file mode 100644 index 00000000..ec994824 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/objectserr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_OBJECTSERR_H +# define OSSL_CRYPTO_OBJECTSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OBJ_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ocsperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ocsperr.h new file mode 100644 index 00000000..f9529b2a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ocsperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_OCSPERR_H +# define OSSL_CRYPTO_OCSPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_OCSP + +int ossl_err_load_OCSP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pem.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pem.h new file mode 100644 index 00000000..2cb4253d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pem.h @@ -0,0 +1,51 @@ +/* + * Copyright 2018-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PEM_H +# define OSSL_INTERNAL_PEM_H +# pragma once + +# include +# include "crypto/types.h" + +/* Found in crypto/pem/pvkfmt.c */ + +/* Maximum length of a blob after header */ +# define BLOB_MAX_LENGTH 102400 + +int ossl_do_blob_header(const unsigned char **in, unsigned int length, + unsigned int *pmagic, unsigned int *pbitlen, + int *pisdss, int *pispub); +unsigned int ossl_blob_length(unsigned bitlen, int isdss, int ispub); +int ossl_do_PVK_header(const unsigned char **in, unsigned int length, + int skip_magic, + unsigned int *psaltlen, unsigned int *pkeylen); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DSA *ossl_b2i_DSA_after_header(const unsigned char **in, unsigned int bitlen, + int ispub); +# endif +RSA *ossl_b2i_RSA_after_header(const unsigned char **in, unsigned int bitlen, + int ispub); +# endif +EVP_PKEY *ossl_b2i(const unsigned char **in, unsigned int length, int *ispub); +EVP_PKEY *ossl_b2i_bio(BIO *in, int *ispub); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DSA *b2i_DSA_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +DSA *b2i_DSA_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +# endif +RSA *b2i_RSA_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +RSA *b2i_RSA_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pemerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pemerr.h new file mode 100644 index 00000000..b255ff5c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pemerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PEMERR_H +# define OSSL_CRYPTO_PEMERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PEM_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs12err.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs12err.h new file mode 100644 index 00000000..662f412e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs12err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS12ERR_H +# define OSSL_CRYPTO_PKCS12ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PKCS12_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7.h new file mode 100644 index 00000000..9caa9af4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7.h @@ -0,0 +1,19 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS7_H +# define OSSL_CRYPTO_PKCS7_H +# pragma once + +void ossl_pkcs7_resolve_libctx(PKCS7 *p7); + +void ossl_pkcs7_set0_libctx(PKCS7 *p7, OSSL_LIB_CTX *ctx); +int ossl_pkcs7_set1_propq(PKCS7 *p7, const char *propq); + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7err.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7err.h new file mode 100644 index 00000000..c195190b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS7ERR_H +# define OSSL_CRYPTO_PKCS7ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PKCS7_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/poly1305.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/poly1305.h index 5fef239d..ba54f3bd 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/poly1305.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/poly1305.h @@ -1,12 +1,16 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OSSL_CRYPTO_POLY1305_H +# define OSSL_CRYPTO_POLY1305_H +# pragma once + #include #define POLY1305_BLOCK_SIZE 16 @@ -15,7 +19,28 @@ typedef struct poly1305_context POLY1305; +typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp, + size_t len, unsigned int padbit); +typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16], + const unsigned int nonce[4]); + +struct poly1305_context { + double opaque[24]; /* large enough to hold internal state, declared + * 'double' to ensure at least 64-bit invariant + * alignment across all platforms and + * configurations */ + unsigned int nonce[4]; + unsigned char data[POLY1305_BLOCK_SIZE]; + size_t num; + struct { + poly1305_blocks_f blocks; + poly1305_emit_f emit; + } func; +}; + size_t Poly1305_ctx_size(void); void Poly1305_Init(POLY1305 *ctx, const unsigned char key[32]); void Poly1305_Update(POLY1305 *ctx, const unsigned char *inp, size_t len); void Poly1305_Final(POLY1305 *ctx, unsigned char mac[16]); + +#endif /* OSSL_CRYPTO_POLY1305_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ppc_arch.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ppc_arch.h new file mode 100644 index 00000000..d999396a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ppc_arch.h @@ -0,0 +1,29 @@ +/* + * Copyright 2014-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PPC_ARCH_H +# define OSSL_CRYPTO_PPC_ARCH_H + +extern unsigned int OPENSSL_ppccap_P; + +/* + * Flags' usage can appear ambiguous, because they are set rather + * to reflect OpenSSL performance preferences than actual processor + * capabilities. + */ +# define PPC_FPU64 (1<<0) +# define PPC_ALTIVEC (1<<1) +# define PPC_CRYPTO207 (1<<2) +# define PPC_FPU (1<<3) +# define PPC_MADD300 (1<<4) +# define PPC_MFTB (1<<5) +# define PPC_MFSPR268 (1<<6) +# define PPC_BRD31 (1<<7) + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/punycode.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/punycode.h new file mode 100644 index 00000000..4c6e49f5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/punycode.h @@ -0,0 +1,27 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PUNYCODE_H +# define OSSL_CRYPTO_PUNYCODE_H +# pragma once + +# include /* for size_t */ + +int ossl_punycode_decode ( + const char *pEncoded, + const size_t enc_len, + unsigned int *pDecoded, + unsigned int *pout_length +); + +int ossl_a2ulabel(const char *in, char *out, size_t outlen); + +int ossl_a2ucompare(const char *a, const char *u); + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand.h index 9e02bb0e..6a71a339 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand.h @@ -1,14 +1,14 @@ /* - * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ /* - * Licensed under the OpenSSL licenses, (the "License"); + * Licensed under the Apache License 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * https://www.openssl.org/source/license.html @@ -17,8 +17,10 @@ #ifndef OSSL_CRYPTO_RAND_H # define OSSL_CRYPTO_RAND_H +# pragma once # include +# include "crypto/rand_pool.h" # if defined(__APPLE__) && !defined(OPENSSL_NO_APPLE_CRYPTO_RANDOM) # include @@ -30,115 +32,97 @@ # endif # endif -/* forward declaration */ -typedef struct rand_pool_st RAND_POOL; - -void rand_cleanup_int(void); -void rand_drbg_cleanup_int(void); -void drbg_delete_thread_state(void); - -/* Hardware-based seeding functions. */ -size_t rand_acquire_entropy_from_tsc(RAND_POOL *pool); -size_t rand_acquire_entropy_from_cpu(RAND_POOL *pool); - -/* DRBG entropy callbacks. */ -size_t rand_drbg_get_entropy(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, size_t max_len, - int prediction_resistance); -void rand_drbg_cleanup_entropy(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); -size_t rand_drbg_get_nonce(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, size_t max_len); -void rand_drbg_cleanup_nonce(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); - -size_t rand_drbg_get_additional_data(RAND_POOL *pool, unsigned char **pout); - -void rand_drbg_cleanup_additional_data(RAND_POOL *pool, unsigned char *out); - /* - * RAND_POOL functions + * Defines related to seed sources */ -RAND_POOL *rand_pool_new(int entropy_requested, int secure, - size_t min_len, size_t max_len); -RAND_POOL *rand_pool_attach(const unsigned char *buffer, size_t len, - size_t entropy); -void rand_pool_free(RAND_POOL *pool); - -const unsigned char *rand_pool_buffer(RAND_POOL *pool); -unsigned char *rand_pool_detach(RAND_POOL *pool); -void rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer); - -size_t rand_pool_entropy(RAND_POOL *pool); -size_t rand_pool_length(RAND_POOL *pool); - -size_t rand_pool_entropy_available(RAND_POOL *pool); -size_t rand_pool_entropy_needed(RAND_POOL *pool); -/* |entropy_factor| expresses how many bits of data contain 1 bit of entropy */ -size_t rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor); -size_t rand_pool_bytes_remaining(RAND_POOL *pool); - -int rand_pool_add(RAND_POOL *pool, - const unsigned char *buffer, size_t len, size_t entropy); -unsigned char *rand_pool_add_begin(RAND_POOL *pool, size_t len); -int rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy); - - +#ifndef DEVRANDOM /* - * Add random bytes to the pool to acquire requested amount of entropy - * - * This function is platform specific and tries to acquire the requested - * amount of entropy by polling platform specific entropy sources. - * - * If the function succeeds in acquiring at least |entropy_requested| bits - * of entropy, the total entropy count is returned. If it fails, it returns - * an entropy count of 0. + * set this to a comma-separated list of 'random' device files to try out. By + * default, we will try to read at least one of these files */ -size_t rand_pool_acquire_entropy(RAND_POOL *pool); - +# define DEVRANDOM "/dev/urandom", "/dev/random", "/dev/hwrng", "/dev/srandom" +# if defined(__linux) && !defined(__ANDROID__) +# ifndef DEVRANDOM_WAIT +# define DEVRANDOM_WAIT "/dev/random" +# endif /* - * Add some application specific nonce data - * - * This function is platform specific and adds some application specific - * data to the nonce used for instantiating the drbg. - * - * This data currently consists of the process and thread id, and a high - * resolution timestamp. The data does not include an atomic counter, - * because that is added by the calling function rand_drbg_get_nonce(). - * - * Returns 1 on success and 0 on failure. + * Linux kernels 4.8 and later changes how their random device works and there + * is no reliable way to tell that /dev/urandom has been seeded -- getentropy(2) + * should be used instead. */ -int rand_pool_add_nonce_data(RAND_POOL *pool); - - +# ifndef DEVRANDOM_SAFE_KERNEL +# define DEVRANDOM_SAFE_KERNEL 4, 8 +# endif /* - * Add some platform specific additional data - * - * This function is platform specific and adds some random noise to the - * additional data used for generating random bytes and for reseeding - * the drbg. - * - * Returns 1 on success and 0 on failure. + * Some operating systems do not permit select(2) on their random devices, + * defining this to zero will force the use of read(2) to extract one byte + * from /dev/random. */ -int rand_pool_add_additional_data(RAND_POOL *pool); +# ifndef DEVRANDM_WAIT_USE_SELECT +# define DEVRANDM_WAIT_USE_SELECT 1 +# endif +/* + * Define the shared memory identifier used to indicate if the operating + * system has properly seeded the DEVRANDOM source. + */ +# ifndef OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID +# define OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID 114 +# endif + +# endif +#endif + +#if !defined(OPENSSL_NO_EGD) && !defined(DEVRANDOM_EGD) +/* + * set this to a comma-separated list of 'egd' sockets to try out. These + * sockets will be tried in the order listed in case accessing the device + * files listed in DEVRANDOM did not return enough randomness. + */ +# define DEVRANDOM_EGD "/var/run/egd-pool", "/dev/egd-pool", "/etc/egd-pool", "/etc/entropy" +#endif + +void ossl_rand_cleanup_int(void); /* * Initialise the random pool reseeding sources. * * Returns 1 on success and 0 on failure. */ -int rand_pool_init(void); +int ossl_rand_pool_init(void); /* * Finalise the random pool reseeding sources. */ -void rand_pool_cleanup(void); +void ossl_rand_pool_cleanup(void); /* * Control the random pool use of open file descriptors. */ -void rand_pool_keep_random_devices_open(int keep); +void ossl_rand_pool_keep_random_devices_open(int keep); + +/* + * Configuration + */ +void ossl_random_add_conf_module(void); + +/* + * Get and cleanup random seed material. + */ +size_t ossl_rand_get_entropy(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char **pout, int entropy, + size_t min_len, size_t max_len); +void ossl_rand_cleanup_entropy(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len); +size_t ossl_rand_get_nonce(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char **pout, size_t min_len, size_t max_len, + const void *salt, size_t salt_len); +void ossl_rand_cleanup_nonce(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len); + +/* + * Get seeding material from the operating system sources. + */ +size_t ossl_pool_acquire_entropy(RAND_POOL *pool); +int ossl_pool_add_nonce_data(RAND_POOL *pool); #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand_pool.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand_pool.h new file mode 100644 index 00000000..f4d1d954 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand_pool.h @@ -0,0 +1,109 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_PROVIDER_RAND_POOL_H +# define OSSL_PROVIDER_RAND_POOL_H +# pragma once + +# include +# include + +/* + * Maximum allocation size for RANDOM_POOL buffers + * + * The max_len value for the buffer provided to the rand_drbg_get_entropy() + * callback is currently 2^31 bytes (2 gigabytes), if a derivation function + * is used. Since this is much too large to be allocated, the ossl_rand_pool_new() + * function chooses more modest values as default pool length, bounded + * by RAND_POOL_MIN_LENGTH and RAND_POOL_MAX_LENGTH + * + * The choice of the RAND_POOL_FACTOR is large enough such that the + * RAND_POOL can store a random input which has a lousy entropy rate of + * 8/256 (= 0.03125) bits per byte. This input will be sent through the + * derivation function which 'compresses' the low quality input into a + * high quality output. + * + * The factor 1.5 below is the pessimistic estimate for the extra amount + * of entropy required when no get_nonce() callback is defined. + */ +# define RAND_POOL_FACTOR 256 +# define RAND_POOL_MAX_LENGTH (RAND_POOL_FACTOR * \ + 3 * (RAND_DRBG_STRENGTH / 16)) +/* + * = (RAND_POOL_FACTOR * \ + * 1.5 * (RAND_DRBG_STRENGTH / 8)) + */ + +/* + * Initial allocation minimum. + * + * There is a distinction between the secure and normal allocation minimums. + * Ideally, the secure allocation size should be a power of two. The normal + * allocation size doesn't have any such restriction. + * + * The secure value is based on 128 bits of secure material, which is 16 bytes. + * Typically, the DRBGs will set a minimum larger than this so optimal + * allocation ought to take place (for full quality seed material). + * + * The normal value has been chosen by noticing that the rand_drbg_get_nonce + * function is usually the largest of the built in allocation (twenty four + * bytes and then appending another sixteen bytes). This means the buffer ends + * with 40 bytes. The value of forty eight is comfortably above this which + * allows some slack in the platform specific values used. + */ +# define RAND_POOL_MIN_ALLOCATION(secure) ((secure) ? 16 : 48) + +/* + * The 'random pool' acts as a dumb container for collecting random + * input from various entropy sources. It is the callers duty to 1) initialize + * the random pool, 2) pass it to the polling callbacks, 3) seed the RNG, and + * 4) cleanup the random pool again. + * + * The random pool contains no locking mechanism because its scope and + * lifetime is intended to be restricted to a single stack frame. + */ +typedef struct rand_pool_st { + unsigned char *buffer; /* points to the beginning of the random pool */ + size_t len; /* current number of random bytes contained in the pool */ + + int attached; /* true pool was attached to existing buffer */ + int secure; /* 1: allocated on the secure heap, 0: otherwise */ + + size_t min_len; /* minimum number of random bytes requested */ + size_t max_len; /* maximum number of random bytes (allocated buffer size) */ + size_t alloc_len; /* current number of bytes allocated */ + size_t entropy; /* current entropy count in bits */ + size_t entropy_requested; /* requested entropy count in bits */ +} RAND_POOL; + +RAND_POOL *ossl_rand_pool_new(int entropy_requested, int secure, + size_t min_len, size_t max_len); +RAND_POOL *ossl_rand_pool_attach(const unsigned char *buffer, size_t len, + size_t entropy); +void ossl_rand_pool_free(RAND_POOL *pool); + +const unsigned char *ossl_rand_pool_buffer(RAND_POOL *pool); +unsigned char *ossl_rand_pool_detach(RAND_POOL *pool); +void ossl_rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer); + +size_t ossl_rand_pool_entropy(RAND_POOL *pool); +size_t ossl_rand_pool_length(RAND_POOL *pool); + +size_t ossl_rand_pool_entropy_available(RAND_POOL *pool); +size_t ossl_rand_pool_entropy_needed(RAND_POOL *pool); +/* |entropy_factor| expresses how many bits of data contain 1 bit of entropy */ +size_t ossl_rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor); +size_t ossl_rand_pool_bytes_remaining(RAND_POOL *pool); + +int ossl_rand_pool_add(RAND_POOL *pool, + const unsigned char *buffer, size_t len, size_t entropy); +unsigned char *ossl_rand_pool_add_begin(RAND_POOL *pool, size_t len); +int ossl_rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy); + +#endif /* OSSL_PROVIDER_RAND_POOL_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/randerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/randerr.h new file mode 100644 index 00000000..832a8b7d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/randerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RANDERR_H +# define OSSL_CRYPTO_RANDERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_RAND_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.def b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.def new file mode 100644 index 00000000..6c26dbf4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.def @@ -0,0 +1,43 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* X Macro Definitions for Specification of RISC-V Arch Capabilities */ + +/* + * Each RISC-V capability ends up encoded as a single set bit in an array of + * words. When specifying a new capability, write a new RISCV_DEFINE_CAP + * statement, with an argument as the extension name in all-caps, + * second argument as the index in the array where the capability will be stored + * and third argument as the index of the bit to be used to encode the + * capability. + * RISCV_DEFINE_CAP(EXTENSION NAME, array index, bit index) */ + +RISCV_DEFINE_CAP(ZBA, 0, 0) +RISCV_DEFINE_CAP(ZBB, 0, 1) +RISCV_DEFINE_CAP(ZBC, 0, 2) +RISCV_DEFINE_CAP(ZBS, 0, 3) +RISCV_DEFINE_CAP(ZBKB, 0, 4) +RISCV_DEFINE_CAP(ZBKC, 0, 5) +RISCV_DEFINE_CAP(ZBKX, 0, 6) +RISCV_DEFINE_CAP(ZKND, 0, 7) +RISCV_DEFINE_CAP(ZKNE, 0, 8) +RISCV_DEFINE_CAP(ZKNH, 0, 9) +RISCV_DEFINE_CAP(ZKSED, 0, 10) +RISCV_DEFINE_CAP(ZKSH, 0, 11) +RISCV_DEFINE_CAP(ZKR, 0, 12) +RISCV_DEFINE_CAP(ZKT, 0, 13) + +/* + * In the future ... + * RISCV_DEFINE_CAP(ZFOO, 0, 31) + * RISCV_DEFINE_CAP(ZBAR, 1, 0) + * ... and so on. + */ + +#undef RISCV_DEFINE_CAP diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.h new file mode 100644 index 00000000..89a40bea --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.h @@ -0,0 +1,59 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RISCV_ARCH_H +# define OSSL_CRYPTO_RISCV_ARCH_H + +# include +# include + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +extern uint32_t OPENSSL_riscvcap_P[ (( +# include "riscv_arch.def" +) + sizeof(uint32_t) - 1) / sizeof(uint32_t) ]; + +# ifdef OPENSSL_RISCVCAP_IMPL +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +uint32_t OPENSSL_riscvcap_P[ (( +# include "riscv_arch.def" +) + sizeof(uint32_t) - 1) / sizeof(uint32_t) ]; +# endif + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) \ + static inline int RISCV_HAS_##NAME(void) \ + { \ + return (OPENSSL_riscvcap_P[INDEX] & (1 << BIT_INDEX)) != 0; \ + } +# include "riscv_arch.def" + +struct RISCV_capability_s { + const char *name; + size_t index; + size_t bit_offset; +}; + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +extern const struct RISCV_capability_s RISCV_capabilities[ +# include "riscv_arch.def" +]; + +# ifdef OPENSSL_RISCVCAP_IMPL +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) \ + { #NAME, INDEX, BIT_INDEX }, +const struct RISCV_capability_s RISCV_capabilities[] = { +# include "riscv_arch.def" +}; +# endif + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +static const size_t kRISCVNumCaps = +# include "riscv_arch.def" +; + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsa.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsa.h new file mode 100644 index 00000000..949873d0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsa.h @@ -0,0 +1,130 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_RSA_H +# define OSSL_INTERNAL_RSA_H +# pragma once + +# include +# include +# include "crypto/types.h" + +#define RSA_MIN_MODULUS_BITS 512 + +typedef struct rsa_pss_params_30_st { + int hash_algorithm_nid; + struct { + int algorithm_nid; /* Currently always NID_mgf1 */ + int hash_algorithm_nid; + } mask_gen; + int salt_len; + int trailer_field; +} RSA_PSS_PARAMS_30; + +RSA_PSS_PARAMS_30 *ossl_rsa_get0_pss_params_30(RSA *r); +int ossl_rsa_pss_params_30_set_defaults(RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_copy(RSA_PSS_PARAMS_30 *to, + const RSA_PSS_PARAMS_30 *from); +int ossl_rsa_pss_params_30_is_unrestricted(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_set_hashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int hashalg_nid); +int ossl_rsa_pss_params_30_set_maskgenalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int maskgenalg_nid); +int ossl_rsa_pss_params_30_set_maskgenhashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int maskgenhashalg_nid); +int ossl_rsa_pss_params_30_set_saltlen(RSA_PSS_PARAMS_30 *rsa_pss_params, + int saltlen); +int ossl_rsa_pss_params_30_set_trailerfield(RSA_PSS_PARAMS_30 *rsa_pss_params, + int trailerfield); +int ossl_rsa_pss_params_30_hashalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_maskgenalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_maskgenhashalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_saltlen(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_trailerfield(const RSA_PSS_PARAMS_30 *rsa_pss_params); + +const char *ossl_rsa_mgf_nid2name(int mgf); +int ossl_rsa_oaeppss_md2nid(const EVP_MD *md); +const char *ossl_rsa_oaeppss_nid2name(int md); + +RSA *ossl_rsa_new_with_ctx(OSSL_LIB_CTX *libctx); +OSSL_LIB_CTX *ossl_rsa_get0_libctx(RSA *r); +void ossl_rsa_set0_libctx(RSA *r, OSSL_LIB_CTX *libctx); + +int ossl_rsa_set0_all_params(RSA *r, const STACK_OF(BIGNUM) *primes, + const STACK_OF(BIGNUM) *exps, + const STACK_OF(BIGNUM) *coeffs); +int ossl_rsa_get0_all_params(RSA *r, STACK_OF(BIGNUM_const) *primes, + STACK_OF(BIGNUM_const) *exps, + STACK_OF(BIGNUM_const) *coeffs); +int ossl_rsa_is_foreign(const RSA *rsa); +RSA *ossl_rsa_dup(const RSA *rsa, int selection); + +int ossl_rsa_todata(RSA *rsa, OSSL_PARAM_BLD *bld, OSSL_PARAM params[], + int include_private); +int ossl_rsa_fromdata(RSA *rsa, const OSSL_PARAM params[], int include_private); +int ossl_rsa_pss_params_30_todata(const RSA_PSS_PARAMS_30 *pss, + OSSL_PARAM_BLD *bld, OSSL_PARAM params[]); +int ossl_rsa_pss_params_30_fromdata(RSA_PSS_PARAMS_30 *pss_params, + int *defaults_set, + const OSSL_PARAM params[], + OSSL_LIB_CTX *libctx); +int ossl_rsa_set0_pss_params(RSA *r, RSA_PSS_PARAMS *pss); +int ossl_rsa_pss_get_param_unverified(const RSA_PSS_PARAMS *pss, + const EVP_MD **pmd, const EVP_MD **pmgf1md, + int *psaltlen, int *ptrailerField); +RSA_PSS_PARAMS *ossl_rsa_pss_decode(const X509_ALGOR *alg); +int ossl_rsa_param_decode(RSA *rsa, const X509_ALGOR *alg); +RSA *ossl_rsa_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_rsa_padding_check_PKCS1_type_2_TLS(OSSL_LIB_CTX *ctx, unsigned char *to, + size_t tlen, + const unsigned char *from, + size_t flen, int client_version, + int alt_version); +int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx, + unsigned char *to, int tlen, + const unsigned char *from, int flen, + const unsigned char *param, + int plen, const EVP_MD *md, + const EVP_MD *mgf1md); + +int ossl_rsa_validate_public(const RSA *key); +int ossl_rsa_validate_private(const RSA *key); +int ossl_rsa_validate_pairwise(const RSA *key); + +int ossl_rsa_verify(int dtype, const unsigned char *m, + unsigned int m_len, unsigned char *rm, + size_t *prm_len, const unsigned char *sigbuf, + size_t siglen, RSA *rsa); + +const unsigned char *ossl_rsa_digestinfo_encoding(int md_nid, size_t *len); + +extern const char *ossl_rsa_mp_factor_names[]; +extern const char *ossl_rsa_mp_exp_names[]; +extern const char *ossl_rsa_mp_coeff_names[]; + +ASN1_STRING *ossl_rsa_ctx_to_pss_string(EVP_PKEY_CTX *pkctx); +int ossl_rsa_pss_to_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pkctx, + const X509_ALGOR *sigalg, EVP_PKEY *pkey); + +# if defined(FIPS_MODULE) && !defined(OPENSSL_NO_ACVP_TESTS) +int ossl_rsa_acvp_test_gen_params_new(OSSL_PARAM **dst, const OSSL_PARAM src[]); +void ossl_rsa_acvp_test_gen_params_free(OSSL_PARAM *dst); + +int ossl_rsa_acvp_test_set_params(RSA *r, const OSSL_PARAM params[]); +int ossl_rsa_acvp_test_get_params(RSA *r, OSSL_PARAM params[]); +typedef struct rsa_acvp_test_st RSA_ACVP_TEST; +void ossl_rsa_acvp_test_free(RSA_ACVP_TEST *t); +# else +# define RSA_ACVP_TEST void +# endif + +RSA *evp_pkey_get1_RSA_PSS(EVP_PKEY *pkey); +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsaerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsaerr.h new file mode 100644 index 00000000..9b23500b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsaerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RSAERR_H +# define OSSL_CRYPTO_RSAERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_RSA_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/security_bits.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/security_bits.h new file mode 100644 index 00000000..58f49681 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/security_bits.h @@ -0,0 +1,16 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_SECURITY_BITS_H +# define OSSL_SECURITY_BITS_H +# pragma once + +uint16_t ossl_ifc_ffc_compute_security_bits(int n); + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sha.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sha.h index 6d15edb9..64305d17 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sha.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sha.h @@ -1,8 +1,8 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,10 +10,13 @@ #ifndef OSSL_CRYPTO_SHA_H # define OSSL_CRYPTO_SHA_H +# pragma once -# include +# include int sha512_224_init(SHA512_CTX *); int sha512_256_init(SHA512_CTX *); +int ossl_sha1_ctrl(SHA_CTX *ctx, int cmd, int mslen, void *ms); +unsigned char *ossl_sha1(const unsigned char *d, size_t n, unsigned char *md); #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/siphash.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/siphash.h index 9573680f..0d0767fc 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/siphash.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/siphash.h @@ -1,18 +1,22 @@ /* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_CRYPTO_SIPHASH_H +# define OSSL_CRYPTO_SIPHASH_H +# pragma once -#define SIPHASH_BLOCK_SIZE 8 -#define SIPHASH_KEY_SIZE 16 -#define SIPHASH_MIN_DIGEST_SIZE 8 -#define SIPHASH_MAX_DIGEST_SIZE 16 +# include + +# define SIPHASH_BLOCK_SIZE 8 +# define SIPHASH_KEY_SIZE 16 +# define SIPHASH_MIN_DIGEST_SIZE 8 +# define SIPHASH_MAX_DIGEST_SIZE 16 typedef struct siphash_st SIPHASH; @@ -23,3 +27,24 @@ int SipHash_Init(SIPHASH *ctx, const unsigned char *k, int crounds, int drounds); void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen); int SipHash_Final(SIPHASH *ctx, unsigned char *out, size_t outlen); + +/* Based on https://131002.net/siphash C reference implementation */ + +struct siphash_st { + uint64_t total_inlen; + uint64_t v0; + uint64_t v1; + uint64_t v2; + uint64_t v3; + unsigned int len; + unsigned int hash_size; + unsigned int crounds; + unsigned int drounds; + unsigned char leavings[SIPHASH_BLOCK_SIZE]; +}; + +/* default: SipHash-2-4 */ +# define SIPHASH_C_ROUNDS 2 +# define SIPHASH_D_ROUNDS 4 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/siv.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/siv.h new file mode 100644 index 00000000..8dc58bd3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/siv.h @@ -0,0 +1,33 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_NO_SIV + +typedef struct siv128_context SIV128_CONTEXT; + +SIV128_CONTEXT *ossl_siv128_new(const unsigned char *key, int klen, + EVP_CIPHER *cbc, EVP_CIPHER *ctr, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_siv128_init(SIV128_CONTEXT *ctx, const unsigned char *key, int klen, + const EVP_CIPHER *cbc, const EVP_CIPHER *ctr, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_siv128_copy_ctx(SIV128_CONTEXT *dest, SIV128_CONTEXT *src); +int ossl_siv128_aad(SIV128_CONTEXT *ctx, const unsigned char *aad, size_t len); +int ossl_siv128_encrypt(SIV128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, size_t len); +int ossl_siv128_decrypt(SIV128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, size_t len); +int ossl_siv128_finish(SIV128_CONTEXT *ctx); +int ossl_siv128_set_tag(SIV128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +int ossl_siv128_get_tag(SIV128_CONTEXT *ctx, unsigned char *tag, size_t len); +int ossl_siv128_cleanup(SIV128_CONTEXT *ctx); +int ossl_siv128_speed(SIV128_CONTEXT *ctx, int arg); + +#endif /* OPENSSL_NO_SIV */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2.h index a7f5548c..9ab6c0b7 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2.h @@ -3,7 +3,7 @@ * Copyright 2017 Ribose Inc. All Rights Reserved. * Ported from Ribose contributions from Botan. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,67 +11,76 @@ #ifndef OSSL_CRYPTO_SM2_H # define OSSL_CRYPTO_SM2_H +# pragma once + # include -# ifndef OPENSSL_NO_SM2 +# if !defined(OPENSSL_NO_SM2) && !defined(FIPS_MODULE) # include +# include "crypto/types.h" + +int ossl_sm2_key_private_check(const EC_KEY *eckey); /* The default user id as specified in GM/T 0009-2012 */ # define SM2_DEFAULT_USERID "1234567812345678" -int sm2_compute_z_digest(uint8_t *out, - const EVP_MD *digest, - const uint8_t *id, - const size_t id_len, - const EC_KEY *key); +int ossl_sm2_compute_z_digest(uint8_t *out, + const EVP_MD *digest, + const uint8_t *id, + const size_t id_len, + const EC_KEY *key); /* * SM2 signature operation. Computes Z and then signs H(Z || msg) using SM2 */ -ECDSA_SIG *sm2_do_sign(const EC_KEY *key, +ECDSA_SIG *ossl_sm2_do_sign(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *id, + const size_t id_len, + const uint8_t *msg, size_t msg_len); + +int ossl_sm2_do_verify(const EC_KEY *key, const EVP_MD *digest, + const ECDSA_SIG *signature, const uint8_t *id, const size_t id_len, const uint8_t *msg, size_t msg_len); -int sm2_do_verify(const EC_KEY *key, - const EVP_MD *digest, - const ECDSA_SIG *signature, - const uint8_t *id, - const size_t id_len, - const uint8_t *msg, size_t msg_len); - /* * SM2 signature generation. */ -int sm2_sign(const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); +int ossl_sm2_internal_sign(const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, + EC_KEY *eckey); /* * SM2 signature verification. */ -int sm2_verify(const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); +int ossl_sm2_internal_verify(const unsigned char *dgst, int dgstlen, + const unsigned char *sig, int siglen, + EC_KEY *eckey); /* * SM2 encryption */ -int sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len, - size_t *ct_size); +int ossl_sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, + size_t msg_len, size_t *ct_size); -int sm2_plaintext_size(const unsigned char *ct, size_t ct_size, size_t *pt_size); +int ossl_sm2_plaintext_size(const unsigned char *ct, size_t ct_size, + size_t *pt_size); -int sm2_encrypt(const EC_KEY *key, - const EVP_MD *digest, - const uint8_t *msg, - size_t msg_len, - uint8_t *ciphertext_buf, size_t *ciphertext_len); +int ossl_sm2_encrypt(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *msg, size_t msg_len, + uint8_t *ciphertext_buf, size_t *ciphertext_len); -int sm2_decrypt(const EC_KEY *key, - const EVP_MD *digest, - const uint8_t *ciphertext, - size_t ciphertext_len, uint8_t *ptext_buf, size_t *ptext_len); +int ossl_sm2_decrypt(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *ciphertext, size_t ciphertext_len, + uint8_t *ptext_buf, size_t *ptext_len); +const unsigned char *ossl_sm2_algorithmidentifier_encoding(int md_nid, + size_t *len); # endif /* OPENSSL_NO_SM2 */ #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2err.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2err.h index d1c0ee25..706f4d69 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2err.h @@ -1,8 +1,8 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,39 +10,18 @@ #ifndef OSSL_CRYPTO_SM2ERR_H # define OSSL_CRYPTO_SM2ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +# pragma once # include +# include + +# ifdef __cplusplus +extern "C" { +# endif # ifndef OPENSSL_NO_SM2 -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_SM2_strings(void); - -/* - * SM2 function codes. - */ -# define SM2_F_PKEY_SM2_COPY 115 -# define SM2_F_PKEY_SM2_CTRL 109 -# define SM2_F_PKEY_SM2_CTRL_STR 110 -# define SM2_F_PKEY_SM2_DIGEST_CUSTOM 114 -# define SM2_F_PKEY_SM2_INIT 111 -# define SM2_F_PKEY_SM2_SIGN 112 -# define SM2_F_SM2_COMPUTE_MSG_HASH 100 -# define SM2_F_SM2_COMPUTE_USERID_DIGEST 101 -# define SM2_F_SM2_COMPUTE_Z_DIGEST 113 -# define SM2_F_SM2_DECRYPT 102 -# define SM2_F_SM2_ENCRYPT 103 -# define SM2_F_SM2_PLAINTEXT_SIZE 104 -# define SM2_F_SM2_SIGN 105 -# define SM2_F_SM2_SIG_GEN 106 -# define SM2_F_SM2_SIG_VERIFY 107 -# define SM2_F_SM2_VERIFY 108 +int ossl_err_load_SM2_strings(void); /* * SM2 reason codes. @@ -58,8 +37,13 @@ int ERR_load_SM2_strings(void); # define SM2_R_INVALID_DIGEST_TYPE 103 # define SM2_R_INVALID_ENCODING 104 # define SM2_R_INVALID_FIELD 105 +# define SM2_R_INVALID_PRIVATE_KEY 113 # define SM2_R_NO_PARAMETERS_SET 109 # define SM2_R_USER_ID_TOO_LARGE 106 +# endif + +# ifdef __cplusplus +} # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4.h index abe28f38..e21ec81c 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4.h @@ -1,8 +1,8 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2017 Ribose Inc. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,7 @@ #ifndef OSSL_CRYPTO_SM4_H # define OSSL_CRYPTO_SM4_H +# pragma once # include # include @@ -28,10 +29,10 @@ typedef struct SM4_KEY_st { uint32_t rk[SM4_KEY_SCHEDULE]; } SM4_KEY; -int SM4_set_key(const uint8_t *key, SM4_KEY *ks); +int ossl_sm4_set_key(const uint8_t *key, SM4_KEY *ks); -void SM4_encrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); +void ossl_sm4_encrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); -void SM4_decrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); +void ossl_sm4_decrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4_platform.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4_platform.h new file mode 100644 index 00000000..6cc1dfa5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4_platform.h @@ -0,0 +1,75 @@ +/* + * Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_SM4_PLATFORM_H +# define OSSL_SM4_PLATFORM_H +# pragma once + +# if defined(OPENSSL_CPUID_OBJ) +# if defined(__aarch64__) +# include "arm_arch.h" +extern unsigned int OPENSSL_arm_midr; +static inline int vpsm4_capable(void) +{ + return (OPENSSL_armcap_P & ARMV8_CPUID) && + (MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_V1) || + MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_N1)); +} +# if defined(VPSM4_ASM) +# define VPSM4_CAPABLE vpsm4_capable() +# endif +# define HWSM4_CAPABLE (OPENSSL_armcap_P & ARMV8_SM4) +# define HWSM4_set_encrypt_key sm4_v8_set_encrypt_key +# define HWSM4_set_decrypt_key sm4_v8_set_decrypt_key +# define HWSM4_encrypt sm4_v8_encrypt +# define HWSM4_decrypt sm4_v8_decrypt +# define HWSM4_cbc_encrypt sm4_v8_cbc_encrypt +# define HWSM4_ecb_encrypt sm4_v8_ecb_encrypt +# define HWSM4_ctr32_encrypt_blocks sm4_v8_ctr32_encrypt_blocks +# endif +# endif /* OPENSSL_CPUID_OBJ */ + +# if defined(HWSM4_CAPABLE) +int HWSM4_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); +int HWSM4_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); +void HWSM4_encrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void HWSM4_decrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void HWSM4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + unsigned char *ivec, const int enc); +void HWSM4_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + const int enc); +void HWSM4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +# endif /* HWSM4_CAPABLE */ + +#ifdef VPSM4_CAPABLE +int vpsm4_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); +int vpsm4_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); +void vpsm4_encrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void vpsm4_decrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void vpsm4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + unsigned char *ivec, const int enc); +void vpsm4_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + const int enc); +void vpsm4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +# endif /* VPSM4_CAPABLE */ + + +#endif /* OSSL_SM4_PLATFORM_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparc_arch.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparc_arch.h new file mode 100644 index 00000000..447e715b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparc_arch.h @@ -0,0 +1,122 @@ +/* + * Copyright 2012-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_SPARC_ARCH_H +# define OSSL_CRYPTO_SPARC_ARCH_H + +# define SPARCV9_TICK_PRIVILEGED (1<<0) +# define SPARCV9_PREFER_FPU (1<<1) +# define SPARCV9_VIS1 (1<<2) +# define SPARCV9_VIS2 (1<<3)/* reserved */ +# define SPARCV9_FMADD (1<<4) +# define SPARCV9_BLK (1<<5)/* VIS1 block copy */ +# define SPARCV9_VIS3 (1<<6) +# define SPARCV9_RANDOM (1<<7) +# define SPARCV9_64BIT_STACK (1<<8) +# define SPARCV9_FJAESX (1<<9)/* Fujitsu SPARC64 X AES */ +# define SPARCV9_FJDESX (1<<10)/* Fujitsu SPARC64 X DES, reserved */ +# define SPARCV9_FJHPCACE (1<<11)/* Fujitsu HPC-ACE, reserved */ +# define SPARCV9_IMA (1<<13)/* reserved */ +# define SPARCV9_VIS4 (1<<14)/* reserved */ + +/* + * OPENSSL_sparcv9cap_P[1] is copy of Compatibility Feature Register, + * %asr26, SPARC-T4 and later. There is no SPARCV9_CFR bit in + * OPENSSL_sparcv9cap_P[0], as %cfr copy is sufficient... + */ +# define CFR_AES 0x00000001/* Supports AES opcodes */ +# define CFR_DES 0x00000002/* Supports DES opcodes */ +# define CFR_KASUMI 0x00000004/* Supports KASUMI opcodes */ +# define CFR_CAMELLIA 0x00000008/* Supports CAMELLIA opcodes */ +# define CFR_MD5 0x00000010/* Supports MD5 opcodes */ +# define CFR_SHA1 0x00000020/* Supports SHA1 opcodes */ +# define CFR_SHA256 0x00000040/* Supports SHA256 opcodes */ +# define CFR_SHA512 0x00000080/* Supports SHA512 opcodes */ +# define CFR_MPMUL 0x00000100/* Supports MPMUL opcodes */ +# define CFR_MONTMUL 0x00000200/* Supports MONTMUL opcodes */ +# define CFR_MONTSQR 0x00000400/* Supports MONTSQR opcodes */ +# define CFR_CRC32C 0x00000800/* Supports CRC32C opcodes */ +# define CFR_XMPMUL 0x00001000/* Supports XMPMUL opcodes */ +# define CFR_XMONTMUL 0x00002000/* Supports XMONTMUL opcodes */ +# define CFR_XMONTSQR 0x00004000/* Supports XMONTSQR opcodes */ + +# if defined(OPENSSL_PIC) && !defined(__PIC__) +# define __PIC__ +# endif + +# if defined(__SUNPRO_C) && defined(__sparcv9) && !defined(__arch64__) +# define __arch64__ +# endif + +# define SPARC_PIC_THUNK(reg) \ + .align 32; \ +.Lpic_thunk: \ + jmp %o7 + 8; \ + add %o7, reg, reg; + +# define SPARC_PIC_THUNK_CALL(reg) \ + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), reg; \ + call .Lpic_thunk; \ + or reg, %lo(_GLOBAL_OFFSET_TABLE_+4), reg; + +# if 1 +# define SPARC_SETUP_GOT_REG(reg) SPARC_PIC_THUNK_CALL(reg) +# else +# define SPARC_SETUP_GOT_REG(reg) \ + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), reg; \ + call .+8; \ + or reg,%lo(_GLOBAL_OFFSET_TABLE_+4), reg; \ + add %o7, reg, reg +# endif + +# if defined(__arch64__) + +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + setx SYM, %o7, reg; +# define LDPTR ldx +# define SIZE_T_CC %xcc +# define STACK_FRAME 192 +# define STACK_BIAS 2047 +# define STACK_7thARG (STACK_BIAS+176) + +# else + +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + set SYM, reg; +# define LDPTR ld +# define SIZE_T_CC %icc +# define STACK_FRAME 112 +# define STACK_BIAS 0 +# define STACK_7thARG 92 +# define SPARC_LOAD_ADDRESS_LEAF(SYM,reg,tmp) SPARC_LOAD_ADDRESS(SYM,reg) + +# endif + +# ifdef __PIC__ +# undef SPARC_LOAD_ADDRESS +# undef SPARC_LOAD_ADDRESS_LEAF +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + SPARC_SETUP_GOT_REG(reg); \ + sethi %hi(SYM), %o7; \ + or %o7, %lo(SYM), %o7; \ + LDPTR [reg + %o7], reg; +# endif + +# ifndef SPARC_LOAD_ADDRESS_LEAF +# define SPARC_LOAD_ADDRESS_LEAF(SYM, reg, tmp) \ + mov %o7, tmp; \ + SPARC_LOAD_ADDRESS(SYM, reg) \ + mov tmp, %o7; +# endif + +# ifndef __ASSEMBLER__ +extern unsigned int OPENSSL_sparcv9cap_P[2]; +# endif + +#endif /* OSSL_CRYPTO_SPARC_ARCH_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparse_array.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparse_array.h new file mode 100644 index 00000000..7ef74283 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparse_array.h @@ -0,0 +1,92 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_SPARSE_ARRAY_H +# define OSSL_CRYPTO_SPARSE_ARRAY_H +# pragma once + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define SPARSE_ARRAY_OF(type) struct sparse_array_st_ ## type + +# define DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, ctype) \ + SPARSE_ARRAY_OF(type); \ + static ossl_unused ossl_inline SPARSE_ARRAY_OF(type) * \ + ossl_sa_##type##_new(void) \ + { \ + return (SPARSE_ARRAY_OF(type) *)ossl_sa_new(); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_free(SPARSE_ARRAY_OF(type) *sa) \ + { \ + ossl_sa_free((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_free_leaves(SPARSE_ARRAY_OF(type) *sa) \ + { \ + ossl_sa_free_leaves((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline size_t \ + ossl_sa_##type##_num(const SPARSE_ARRAY_OF(type) *sa) \ + { \ + return ossl_sa_num((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_doall(const SPARSE_ARRAY_OF(type) *sa, \ + void (*leaf)(ossl_uintmax_t, type *)) \ + { \ + ossl_sa_doall((OPENSSL_SA *)sa, \ + (void (*)(ossl_uintmax_t, void *))leaf); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_doall_arg(const SPARSE_ARRAY_OF(type) *sa, \ + void (*leaf)(ossl_uintmax_t, type *, void *), \ + void *arg) \ + { \ + ossl_sa_doall_arg((OPENSSL_SA *)sa, \ + (void (*)(ossl_uintmax_t, void *, void *))leaf, arg); \ + } \ + static ossl_unused ossl_inline ctype \ + *ossl_sa_##type##_get(const SPARSE_ARRAY_OF(type) *sa, ossl_uintmax_t n) \ + { \ + return (type *)ossl_sa_get((OPENSSL_SA *)sa, n); \ + } \ + static ossl_unused ossl_inline int \ + ossl_sa_##type##_set(SPARSE_ARRAY_OF(type) *sa, \ + ossl_uintmax_t n, ctype *val) \ + { \ + return ossl_sa_set((OPENSSL_SA *)sa, n, (void *)val); \ + } \ + SPARSE_ARRAY_OF(type) + +# define DEFINE_SPARSE_ARRAY_OF(type) \ + DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, type) +# define DEFINE_SPARSE_ARRAY_OF_CONST(type) \ + DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, const type) + +typedef struct sparse_array_st OPENSSL_SA; +OPENSSL_SA *ossl_sa_new(void); +void ossl_sa_free(OPENSSL_SA *sa); +void ossl_sa_free_leaves(OPENSSL_SA *sa); +size_t ossl_sa_num(const OPENSSL_SA *sa); +void ossl_sa_doall(const OPENSSL_SA *sa, void (*leaf)(ossl_uintmax_t, void *)); +void ossl_sa_doall_arg(const OPENSSL_SA *sa, + void (*leaf)(ossl_uintmax_t, void *, void *), void *); +void *ossl_sa_get(const OPENSSL_SA *sa, ossl_uintmax_t n); +int ossl_sa_set(OPENSSL_SA *sa, ossl_uintmax_t n, void *val); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/store.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/store.h index 428d3c60..5645fc92 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/store.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/store.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,20 +9,15 @@ #ifndef OSSL_CRYPTO_STORE_H # define OSSL_CRYPTO_STORE_H +# pragma once # include # include # include -/* - * Two functions to read PEM data off an already opened BIO. To be used - * instead of OSSLSTORE_open() and OSSLSTORE_close(). Everything is done - * as usual with OSSLSTORE_load() and OSSLSTORE_eof(). - */ -OSSL_STORE_CTX *ossl_store_attach_pem_bio(BIO *bp, const UI_METHOD *ui_method, - void *ui_data); -int ossl_store_detach_pem_bio(OSSL_STORE_CTX *ctx); - void ossl_store_cleanup_int(void); +int ossl_store_loader_get_number(const OSSL_STORE_LOADER *loader); +int ossl_store_loader_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_store_loader_store_remove_all_provided(const OSSL_PROVIDER *prov); #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/storeerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/storeerr.h new file mode 100644 index 00000000..c46d845f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/storeerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_STOREERR_H +# define OSSL_CRYPTO_STOREERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_STORE_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/tserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/tserr.h new file mode 100644 index 00000000..2f34ba31 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/tserr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_TSERR_H +# define OSSL_CRYPTO_TSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_TS + +int ossl_err_load_TS_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/types.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/types.h new file mode 100644 index 00000000..ad17f052 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/types.h @@ -0,0 +1,32 @@ +/* + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* When removal is simulated, we still need the type internally */ + +#ifndef OSSL_CRYPTO_TYPES_H +# define OSSL_CRYPTO_TYPES_H +# pragma once + +# ifdef OPENSSL_NO_DEPRECATED_3_0 +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; +# ifndef OPENSSL_NO_EC +typedef struct ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; +# endif +# ifndef OPENSSL_NO_DSA +typedef struct dsa_st DSA; +# endif +# endif + +# ifndef OPENSSL_NO_EC +typedef struct ecx_key_st ECX_KEY; +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/uierr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/uierr.h new file mode 100644 index 00000000..789077a8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/uierr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_UIERR_H +# define OSSL_CRYPTO_UIERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_UI_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509.h index 243ea74f..631150b7 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509.h @@ -1,15 +1,21 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include "internal/refcount.h" -#include -#include +#ifndef OSSL_CRYPTO_X509_H +# define OSSL_CRYPTO_X509_H +# pragma once + +# include "internal/refcount.h" +# include +# include +# include +# include "crypto/types.h" /* Internal X509 structures and functions: not for application use */ @@ -73,6 +79,11 @@ struct X509_req_st { ASN1_BIT_STRING *signature; /* signature */ CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; + + /* Set on live certificates for authentication purposes */ + ASN1_OCTET_STRING *distinguishing_id; + OSSL_LIB_CTX *libctx; + char *propq; }; struct X509_crl_info_st { @@ -111,6 +122,9 @@ struct X509_crl_st { const X509_CRL_METHOD *meth; void *meth_data; CRYPTO_RWLOCK *lock; + + OSSL_LIB_CTX *libctx; + char *propq; }; struct x509_revoked_st { @@ -177,7 +191,7 @@ struct x509_st { STACK_OF(DIST_POINT) *crldp; STACK_OF(GENERAL_NAME) *altname; NAME_CONSTRAINTS *nc; -#ifndef OPENSSL_NO_RFC3779 +# ifndef OPENSSL_NO_RFC3779 STACK_OF(IPAddressFamily) *rfc3779_addr; struct ASIdentifiers_st *rfc3779_asid; # endif @@ -185,6 +199,12 @@ struct x509_st { X509_CERT_AUX *aux; CRYPTO_RWLOCK *lock; volatile int ex_cached; + + /* Set on live certificates for authentication purposes */ + ASN1_OCTET_STRING *distinguishing_id; + + OSSL_LIB_CTX *libctx; + char *propq; } /* X509 */ ; /* @@ -193,7 +213,7 @@ struct x509_st { * kept and passed around. */ struct x509_store_ctx_st { /* X509_STORE_CTX */ - X509_STORE *ctx; + X509_STORE *store; /* The following are set by the caller */ /* The cert to check */ X509 *cert; @@ -223,8 +243,11 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check policy status of the chain */ int (*check_policy) (X509_STORE_CTX *ctx); - STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); - STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); + STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, + const X509_NAME *nm); + /* cannot constify 'ctx' param due to lookup_certs_sk() in x509_vfy.c */ + STACK_OF(X509_CRL) *(*lookup_crls) (const X509_STORE_CTX *ctx, + const X509_NAME *nm); int (*cleanup) (X509_STORE_CTX *ctx); /* The following is built up */ /* if 0, rebuild chain */ @@ -255,6 +278,9 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ SSL_DANE *dane; /* signed via bare TA public key, rather than CA certificate */ int bare_ta_signed; + + OSSL_LIB_CTX *libctx; + char *propq; }; /* PKCS#8 private key info structure */ @@ -282,10 +308,63 @@ struct x509_object_st { } data; }; -int a2i_ipadd(unsigned char *ipout, const char *ipasc); -int x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_a2i_ipadd(unsigned char *ipout, const char *ipasc); +int ossl_x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_x509_print_ex_brief(BIO *bio, X509 *cert, unsigned long neg_cflags); +int ossl_x509v3_cache_extensions(X509 *x); +int ossl_x509_init_sig_info(X509 *x); -void x509_init_sig_info(X509 *x); +int ossl_x509_set0_libctx(X509 *x, OSSL_LIB_CTX *libctx, const char *propq); +int ossl_x509_crl_set0_libctx(X509_CRL *x, OSSL_LIB_CTX *libctx, + const char *propq); +int ossl_x509_req_set0_libctx(X509_REQ *x, OSSL_LIB_CTX *libctx, + const char *propq); +int ossl_asn1_item_digest_ex(const ASN1_ITEM *it, const EVP_MD *type, + void *data, unsigned char *md, unsigned int *len, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_x509_add_cert_new(STACK_OF(X509) **sk, X509 *cert, int flags); +int ossl_x509_add_certs_new(STACK_OF(X509) **p_sk, STACK_OF(X509) *certs, + int flags); + +STACK_OF(X509_ATTRIBUTE) *ossl_x509at_dup(const STACK_OF(X509_ATTRIBUTE) *x); + +int ossl_x509_PUBKEY_get0_libctx(OSSL_LIB_CTX **plibctx, const char **ppropq, + const X509_PUBKEY *key); +/* Calculate default key identifier according to RFC 5280 section 4.2.1.2 (1) */ +ASN1_OCTET_STRING *ossl_x509_pubkey_hash(X509_PUBKEY *pubkey); + +X509_PUBKEY *ossl_d2i_X509_PUBKEY_INTERNAL(const unsigned char **pp, + long len, OSSL_LIB_CTX *libctx); +void ossl_X509_PUBKEY_INTERNAL_free(X509_PUBKEY *xpub); + +RSA *ossl_d2i_RSA_PSS_PUBKEY(RSA **a, const unsigned char **pp, long length); +int ossl_i2d_RSA_PSS_PUBKEY(const RSA *a, unsigned char **pp); +# ifndef OPENSSL_NO_DSA +DSA *ossl_d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# endif /* OPENSSL_NO_DSA */ +# ifndef OPENSSL_NO_DH +DH *ossl_d2i_DH_PUBKEY(DH **a, const unsigned char **pp, long length); +int ossl_i2d_DH_PUBKEY(const DH *a, unsigned char **pp); +DH *ossl_d2i_DHx_PUBKEY(DH **a, const unsigned char **pp, long length); +int ossl_i2d_DHx_PUBKEY(const DH *a, unsigned char **pp); +# endif /* OPENSSL_NO_DH */ +# ifndef OPENSSL_NO_EC +ECX_KEY *ossl_d2i_ED25519_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_ED25519_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_ED448_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_ED448_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_X25519_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_X25519_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_X448_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_X448_PUBKEY(const ECX_KEY *a, unsigned char **pp); +# endif /* OPENSSL_NO_EC */ +EVP_PKEY *ossl_d2i_PUBKEY_legacy(EVP_PKEY **a, const unsigned char **pp, + long length); int x509v3_add_len_value_uchar(const char *name, const unsigned char *value, size_t vallen, STACK_OF(CONF_VALUE) **extlist); +#endif /* OSSL_CRYPTO_X509_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509err.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509err.h new file mode 100644 index 00000000..0a67975b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_X509ERR_H +# define OSSL_CRYPTO_X509ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_X509_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509v3err.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509v3err.h new file mode 100644 index 00000000..66d3ad92 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509v3err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_X509V3ERR_H +# define OSSL_CRYPTO_X509V3ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_X509V3_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H b/deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H index c350018a..e57c0eab 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H b/deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H index 9a9c777f..a0139575 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/asn1.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/asn1.h new file mode 100644 index 00000000..3143e340 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/asn1.h @@ -0,0 +1,16 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_ASN1_H +# define OSSL_INTERNAL_ASN1_H +# pragma once + +int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb); + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio.h index c343b276..547a73d0 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio.h @@ -1,13 +1,18 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_INTERNAL_BIO_H +# define OSSL_INTERNAL_BIO_H +# pragma once + +# include +# include struct bio_method_st { int type; @@ -31,3 +36,56 @@ void bio_cleanup(void); /* Old style to new style BIO_METHOD conversion functions */ int bwrite_conv(BIO *bio, const char *data, size_t datal, size_t *written); int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); + +/* Changes to these internal BIOs must also update include/openssl/bio.h */ +# define BIO_CTRL_SET_KTLS 72 +# define BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG 74 +# define BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG 75 + +/* + * This is used with socket BIOs: + * BIO_FLAGS_KTLS_TX means we are using ktls with this BIO for sending. + * BIO_FLAGS_KTLS_TX_CTRL_MSG means we are about to send a ctrl message next. + * BIO_FLAGS_KTLS_RX means we are using ktls with this BIO for receiving. + */ +# define BIO_FLAGS_KTLS_TX_CTRL_MSG 0x1000 +# define BIO_FLAGS_KTLS_RX 0x2000 +# define BIO_FLAGS_KTLS_TX 0x4000 + +/* KTLS related controls and flags */ +# define BIO_set_ktls_flag(b, is_tx) \ + BIO_set_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX) +# define BIO_should_ktls_flag(b, is_tx) \ + BIO_test_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX) +# define BIO_set_ktls_ctrl_msg_flag(b) \ + BIO_set_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) +# define BIO_should_ktls_ctrl_msg_flag(b) \ + BIO_test_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) +# define BIO_clear_ktls_ctrl_msg_flag(b) \ + BIO_clear_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) + +# define BIO_set_ktls(b, keyblob, is_tx) \ + BIO_ctrl(b, BIO_CTRL_SET_KTLS, is_tx, keyblob) +# define BIO_set_ktls_ctrl_msg(b, record_type) \ + BIO_ctrl(b, BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG, record_type, NULL) +# define BIO_clear_ktls_ctrl_msg(b) \ + BIO_ctrl(b, BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG, 0, NULL) + +/* Functions to allow the core to offer the CORE_BIO type to providers */ +OSSL_CORE_BIO *ossl_core_bio_new_from_bio(BIO *bio); +OSSL_CORE_BIO *ossl_core_bio_new_file(const char *filename, const char *mode); +OSSL_CORE_BIO *ossl_core_bio_new_mem_buf(const void *buf, int len); +int ossl_core_bio_read_ex(OSSL_CORE_BIO *cb, void *data, size_t dlen, + size_t *readbytes); +int ossl_core_bio_write_ex(OSSL_CORE_BIO *cb, const void *data, size_t dlen, + size_t *written); +int ossl_core_bio_gets(OSSL_CORE_BIO *cb, char *buf, int size); +int ossl_core_bio_puts(OSSL_CORE_BIO *cb, const char *buf); +long ossl_core_bio_ctrl(OSSL_CORE_BIO *cb, int cmd, long larg, void *parg); +int ossl_core_bio_up_ref(OSSL_CORE_BIO *cb); +int ossl_core_bio_free(OSSL_CORE_BIO *cb); +int ossl_core_bio_vprintf(OSSL_CORE_BIO *cb, const char *format, va_list args); + +int ossl_bio_init_core(OSSL_LIB_CTX *libctx, const OSSL_DISPATCH *fns); + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/comp.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/comp.h index ac6e38b4..3ad86fc7 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/comp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/comp.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,4 +9,4 @@ #include -void comp_zlib_cleanup_int(void); +void ossl_comp_zlib_cleanup(void); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/conf.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/conf.h index 163fea8d..8c6c29cd 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/conf.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/conf.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,10 +9,11 @@ #ifndef OSSL_INTERNAL_CONF_H # define OSSL_INTERNAL_CONF_H +# pragma once -#include +# include -#define DEFAULT_CONF_MFLAGS \ +# define DEFAULT_CONF_MFLAGS \ (CONF_MFLAGS_DEFAULT_SECTION | \ CONF_MFLAGS_IGNORE_MISSING_FILE | \ CONF_MFLAGS_IGNORE_RETURN_CODES) @@ -23,8 +24,8 @@ struct ossl_init_settings_st { unsigned long flags; }; -int openssl_config_int(const OPENSSL_INIT_SETTINGS *); -void openssl_no_config_int(void); -void conf_modules_free_int(void); +int ossl_config_int(const OPENSSL_INIT_SETTINGS *); +void ossl_no_config_int(void); +void ossl_config_modules_free(void); #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/constant_time.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/constant_time.h index 6600a1d7..0ed6f823 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/constant_time.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/constant_time.h @@ -1,7 +1,7 @@ /* - * Copyright 2014-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_CONSTANT_TIME_H # define OSSL_INTERNAL_CONSTANT_TIME_H +# pragma once # include # include @@ -181,6 +182,11 @@ static ossl_inline uint32_t constant_time_is_zero_32(uint32_t a) return constant_time_msb_32(~a & (a - 1)); } +static ossl_inline uint64_t constant_time_is_zero_64(uint64_t a) +{ + return constant_time_msb_64(~a & (a - 1)); +} + static ossl_inline unsigned int constant_time_eq(unsigned int a, unsigned int b) { @@ -352,6 +358,34 @@ static ossl_inline void constant_time_cond_swap_64(uint64_t mask, uint64_t *a, *b ^= xor; } +/* + * mask must be 0xFF or 0x00. + * "constant time" is per len. + * + * if (mask) { + * unsigned char tmp[len]; + * + * memcpy(tmp, a, len); + * memcpy(a, b); + * memcpy(b, tmp); + * } + */ +static ossl_inline void constant_time_cond_swap_buff(unsigned char mask, + unsigned char *a, + unsigned char *b, + size_t len) +{ + size_t i; + unsigned char tmp; + + for (i = 0; i < len; i++) { + tmp = a[i] ^ b[i]; + tmp &= mask; + a[i] ^= tmp; + b[i] ^= tmp; + } +} + /* * table is a two dimensional array of bytes. Each row has rowsize elements. * Copies row number idx into out. rowsize and numrows are not considered diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/core.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/core.h new file mode 100644 index 00000000..03adb66b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/core.h @@ -0,0 +1,71 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_CORE_H +# define OSSL_INTERNAL_CORE_H +# pragma once + +/* + * namespaces: + * + * ossl_method_ Core Method API + */ + +/* + * construct an arbitrary method from a dispatch table found by looking + * up a match for the < operation_id, name, property > combination. + * constructor and destructor are the constructor and destructor for that + * arbitrary object. + * + * These objects are normally cached, unless the provider says not to cache. + * However, force_cache can be used to force caching whatever the provider + * says (for example, because the application knows better). + */ +typedef struct ossl_method_construct_method_st { + /* Get a temporary store */ + void *(*get_tmp_store)(void *data); + /* Reserve the appropriate method store */ + int (*lock_store)(void *store, void *data); + /* Unreserve the appropriate method store */ + int (*unlock_store)(void *store, void *data); + /* Get an already existing method from a store */ + void *(*get)(void *store, const OSSL_PROVIDER **prov, void *data); + /* Store a method in a store */ + int (*put)(void *store, void *method, const OSSL_PROVIDER *prov, + const char *name, const char *propdef, void *data); + /* Construct a new method */ + void *(*construct)(const OSSL_ALGORITHM *algodef, OSSL_PROVIDER *prov, + void *data); + /* Destruct a method */ + void (*destruct)(void *method, void *data); +} OSSL_METHOD_CONSTRUCT_METHOD; + +void *ossl_method_construct(OSSL_LIB_CTX *ctx, int operation_id, + OSSL_PROVIDER **provider_rw, int force_cache, + OSSL_METHOD_CONSTRUCT_METHOD *mcm, void *mcm_data); + +void ossl_algorithm_do_all(OSSL_LIB_CTX *libctx, int operation_id, + OSSL_PROVIDER *provider, + int (*pre)(OSSL_PROVIDER *, int operation_id, + int no_store, void *data, int *result), + int (*reserve_store)(int no_store, void *data), + void (*fn)(OSSL_PROVIDER *provider, + const OSSL_ALGORITHM *algo, + int no_store, void *data), + int (*unreserve_store)(void *data), + int (*post)(OSSL_PROVIDER *, int operation_id, + int no_store, void *data, int *result), + void *data); +char *ossl_algorithm_get1_first_name(const OSSL_ALGORITHM *algo); + +__owur int ossl_lib_ctx_write_lock(OSSL_LIB_CTX *ctx); +__owur int ossl_lib_ctx_read_lock(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_unlock(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_child(OSSL_LIB_CTX *ctx); +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/cryptlib.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/cryptlib.h index 6e7291ae..ac50eb3b 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/cryptlib.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/cryptlib.h @@ -1,7 +1,7 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,19 +9,22 @@ #ifndef OSSL_INTERNAL_CRYPTLIB_H # define OSSL_INTERNAL_CRYPTLIB_H +# pragma once # include # include # ifdef OPENSSL_USE_APPLINK -# undef BIO_FLAGS_UPLINK -# define BIO_FLAGS_UPLINK 0x8000 +# define BIO_FLAGS_UPLINK_INTERNAL 0x8000 # include "ms/uplink.h" +# else +# define BIO_FLAGS_UPLINK_INTERNAL 0 # endif # include # include # include +# include # include # include "internal/nelem.h" @@ -42,14 +45,21 @@ __owur static ossl_inline int ossl_assert_int(int expr, const char *exprstr, #endif -typedef struct ex_callback_st EX_CALLBACK; +/* + * Use this inside a union with the field that needs to be aligned to a + * reasonable boundary for the platform. The most pessimistic alignment + * of the listed types will be used by the compiler. + */ +# define OSSL_UNION_ALIGN \ + double align; \ + ossl_uintmax_t align_int; \ + void *align_ptr +typedef struct ex_callback_st EX_CALLBACK; DEFINE_STACK_OF(EX_CALLBACK) -typedef struct app_mem_info_st APP_INFO; - typedef struct mem_st MEM; -DEFINE_LHASH_OF(MEM); +DEFINE_LHASH_OF_EX(MEM); # define OPENSSL_CONF "openssl.cnf" @@ -76,9 +86,14 @@ DEFINE_LHASH_OF(MEM); # define HEX_SIZE(type) (sizeof(type)*2) void OPENSSL_cpuid_setup(void); +#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) extern unsigned int OPENSSL_ia32cap_P[]; +#endif void OPENSSL_showfatal(const char *fmta, ...); -void crypto_cleanup_all_ex_data_int(void); +int ossl_do_ex_data_init(OSSL_LIB_CTX *ctx); +void ossl_crypto_cleanup_all_ex_data_int(OSSL_LIB_CTX *ctx); int openssl_init_fork_handlers(void); int openssl_get_fork_id(void); @@ -96,4 +111,134 @@ uint32_t OPENSSL_rdtsc(void); size_t OPENSSL_instrument_bus(unsigned int *, size_t); size_t OPENSSL_instrument_bus2(unsigned int *, size_t, size_t); +/* ex_data structures */ + +/* + * Each structure type (sometimes called a class), that supports + * exdata has a stack of callbacks for each instance. + */ +struct ex_callback_st { + long argl; /* Arbitrary long */ + void *argp; /* Arbitrary void * */ + int priority; /* Priority ordering for freeing */ + CRYPTO_EX_new *new_func; + CRYPTO_EX_free *free_func; + CRYPTO_EX_dup *dup_func; +}; + +/* + * The state for each class. This could just be a typedef, but + * a structure allows future changes. + */ +typedef struct ex_callbacks_st { + STACK_OF(EX_CALLBACK) *meth; +} EX_CALLBACKS; + +typedef struct ossl_ex_data_global_st { + CRYPTO_RWLOCK *ex_data_lock; + EX_CALLBACKS ex_data[CRYPTO_EX_INDEX__COUNT]; +} OSSL_EX_DATA_GLOBAL; + + +/* OSSL_LIB_CTX */ + +# define OSSL_LIB_CTX_PROVIDER_STORE_RUN_ONCE_INDEX 0 +# define OSSL_LIB_CTX_DEFAULT_METHOD_STORE_RUN_ONCE_INDEX 1 +# define OSSL_LIB_CTX_METHOD_STORE_RUN_ONCE_INDEX 2 +# define OSSL_LIB_CTX_MAX_RUN_ONCE 3 + +# define OSSL_LIB_CTX_EVP_METHOD_STORE_INDEX 0 +# define OSSL_LIB_CTX_PROVIDER_STORE_INDEX 1 +# define OSSL_LIB_CTX_PROPERTY_DEFN_INDEX 2 +# define OSSL_LIB_CTX_PROPERTY_STRING_INDEX 3 +# define OSSL_LIB_CTX_NAMEMAP_INDEX 4 +# define OSSL_LIB_CTX_DRBG_INDEX 5 +# define OSSL_LIB_CTX_DRBG_NONCE_INDEX 6 +# define OSSL_LIB_CTX_RAND_CRNGT_INDEX 7 +# ifdef FIPS_MODULE +# define OSSL_LIB_CTX_THREAD_EVENT_HANDLER_INDEX 8 +# endif +# define OSSL_LIB_CTX_FIPS_PROV_INDEX 9 +# define OSSL_LIB_CTX_ENCODER_STORE_INDEX 10 +# define OSSL_LIB_CTX_DECODER_STORE_INDEX 11 +# define OSSL_LIB_CTX_SELF_TEST_CB_INDEX 12 +# define OSSL_LIB_CTX_BIO_PROV_INDEX 13 +# define OSSL_LIB_CTX_GLOBAL_PROPERTIES 14 +# define OSSL_LIB_CTX_STORE_LOADER_STORE_INDEX 15 +# define OSSL_LIB_CTX_PROVIDER_CONF_INDEX 16 +# define OSSL_LIB_CTX_BIO_CORE_INDEX 17 +# define OSSL_LIB_CTX_CHILD_PROVIDER_INDEX 18 +# define OSSL_LIB_CTX_MAX_INDEXES 19 + +OSSL_LIB_CTX *ossl_lib_ctx_get_concrete(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_default(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_global_default(OSSL_LIB_CTX *ctx); + +/* Functions to retrieve pointers to data by index */ +void *ossl_lib_ctx_get_data(OSSL_LIB_CTX *, int /* index */); + +void ossl_lib_ctx_default_deinit(void); +OSSL_EX_DATA_GLOBAL *ossl_lib_ctx_get_ex_data_global(OSSL_LIB_CTX *ctx); + +const char *ossl_lib_ctx_get_descriptor(OSSL_LIB_CTX *libctx); + +OSSL_LIB_CTX *ossl_crypto_ex_data_get_ossl_lib_ctx(const CRYPTO_EX_DATA *ad); +int ossl_crypto_new_ex_data_ex(OSSL_LIB_CTX *ctx, int class_index, void *obj, + CRYPTO_EX_DATA *ad); +int ossl_crypto_get_ex_new_index_ex(OSSL_LIB_CTX *ctx, int class_index, + long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func, + int priority); +int ossl_crypto_free_ex_index_ex(OSSL_LIB_CTX *ctx, int class_index, int idx); + +/* Function for simple binary search */ + +/* Flags */ +# define OSSL_BSEARCH_VALUE_ON_NOMATCH 0x01 +# define OSSL_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 + +const void *ossl_bsearch(const void *key, const void *base, int num, + int size, int (*cmp) (const void *, const void *), + int flags); + +char *ossl_sk_ASN1_UTF8STRING2text(STACK_OF(ASN1_UTF8STRING) *text, + const char *sep, size_t max_len); +char *ossl_ipaddr_to_asc(unsigned char *p, int len); + +char *ossl_buf2hexstr_sep(const unsigned char *buf, long buflen, char sep); +unsigned char *ossl_hexstr2buf_sep(const char *str, long *buflen, + const char sep); + +static ossl_inline int ossl_ends_with_dirsep(const char *path) +{ + if (*path != '\0') + path += strlen(path) - 1; +# if defined __VMS + if (*path == ']' || *path == '>' || *path == ':') + return 1; +# elif defined _WIN32 + if (*path == '\\') + return 1; +# endif + return *path == '/'; +} + +static ossl_inline int ossl_is_absolute_path(const char *path) +{ +# if defined __VMS + if (strchr(path, ':') != NULL + || ((path[0] == '[' || path[0] == '<') + && path[1] != '.' && path[1] != '-' + && path[1] != ']' && path[1] != '>')) + return 1; +# elif defined _WIN32 + if (path[0] == '\\' + || (path[0] != '\0' && path[1] == ':')) + return 1; +# endif + return path[0] == '/'; +} + #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/dane.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/dane.h index 7a39bd7d..a3d78a7f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/dane.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/dane.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,8 +9,9 @@ #ifndef OSSL_INTERNAL_DANE_H #define OSSL_INTERNAL_DANE_H +# pragma once -#include +# include /*- * Certificate usages: diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/deprecated.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/deprecated.h new file mode 100644 index 00000000..a313a015 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/deprecated.h @@ -0,0 +1,30 @@ +/* + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file should be included by internal code that needs to use APIs + * that have been deprecated for public use, but where those symbols will still + * be available internally. For example the EVP and provider code needs to use + * low level APIs that are otherwise deprecated. + * + * This header *must* be the first OpenSSL header included by a source file. + */ + +#ifndef OSSL_INTERNAL_DEPRECATED_H +# define OSSL_INTERNAL_DEPRECATED_H +# pragma once + +# include + +# undef OPENSSL_NO_DEPRECATED +# define OPENSSL_SUPPRESS_DEPRECATED + +# include + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/der.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/der.h new file mode 100644 index 00000000..f23fabc2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/der.h @@ -0,0 +1,88 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include +#include "internal/packet.h" + +/* + * NOTE: X.690 numbers the identifier octet bits 1 to 8. + * We use the same numbering in comments here. + */ + +/* Well known primitive tags */ + +/* + * DER UNIVERSAL tags, occupying bits 1-5 in the DER identifier byte + * These are only valid for the UNIVERSAL class. With the other classes, + * these bits have a different meaning. + */ +#define DER_P_EOC 0 /* BER End Of Contents tag */ +#define DER_P_BOOLEAN 1 +#define DER_P_INTEGER 2 +#define DER_P_BIT_STRING 3 +#define DER_P_OCTET_STRING 4 +#define DER_P_NULL 5 +#define DER_P_OBJECT 6 +#define DER_P_OBJECT_DESCRIPTOR 7 +#define DER_P_EXTERNAL 8 +#define DER_P_REAL 9 +#define DER_P_ENUMERATED 10 +#define DER_P_UTF8STRING 12 +#define DER_P_SEQUENCE 16 +#define DER_P_SET 17 +#define DER_P_NUMERICSTRING 18 +#define DER_P_PRINTABLESTRING 19 +#define DER_P_T61STRING 20 +#define DER_P_VIDEOTEXSTRING 21 +#define DER_P_IA5STRING 22 +#define DER_P_UTCTIME 23 +#define DER_P_GENERALIZEDTIME 24 +#define DER_P_GRAPHICSTRING 25 +#define DER_P_ISO64STRING 26 +#define DER_P_GENERALSTRING 27 +#define DER_P_UNIVERSALSTRING 28 +#define DER_P_BMPSTRING 30 + +/* DER Flags, occupying bit 6 in the DER identifier byte */ +#define DER_F_PRIMITIVE 0x00 +#define DER_F_CONSTRUCTED 0x20 + +/* DER classes tags, occupying bits 7-8 in the DER identifier byte */ +#define DER_C_UNIVERSAL 0x00 +#define DER_C_APPLICATION 0x40 +#define DER_C_CONTEXT 0x80 +#define DER_C_PRIVATE 0xC0 + +/* + * Run-time constructors. + * + * They all construct DER backwards, so care should be taken to use them + * that way. + */ + +/* This can be used for all items that don't have a context */ +#define DER_NO_CONTEXT -1 + +int ossl_DER_w_precompiled(WPACKET *pkt, int tag, + const unsigned char *precompiled, + size_t precompiled_n); + +int ossl_DER_w_boolean(WPACKET *pkt, int tag, int b); +int ossl_DER_w_uint32(WPACKET *pkt, int tag, uint32_t v); +int ossl_DER_w_bn(WPACKET *pkt, int tag, const BIGNUM *v); +int ossl_DER_w_null(WPACKET *pkt, int tag); +int ossl_DER_w_octet_string(WPACKET *pkt, int tag, + const unsigned char *data, size_t data_n); +int ossl_DER_w_octet_string_uint32(WPACKET *pkt, int tag, uint32_t value); + +/* + * All constructors for constructed elements have a begin and a end function + */ +int ossl_DER_w_begin_sequence(WPACKET *pkt, int tag); +int ossl_DER_w_end_sequence(WPACKET *pkt, int tag); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/dso.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/dso.h index c57c0c40..160ddb98 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/dso.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/dso.h @@ -1,7 +1,7 @@ /* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_DSO_H # define OSSL_INTERNAL_DSO_H +# pragma once # include # include "internal/dsoerr.h" @@ -160,6 +161,4 @@ DSO *DSO_dsobyaddr(void *addr, int flags); */ void *DSO_global_lookup(const char *name); -int ERR_load_DSO_strings(void); - #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/dsoerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/dsoerr.h index 94d642a2..b1719e83 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/dsoerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/dsoerr.h @@ -1,8 +1,8 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,73 +10,39 @@ #ifndef OSSL_INTERNAL_DSOERR_H # define OSSL_INTERNAL_DSOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include # ifdef __cplusplus -extern "C" +extern "C" { # endif -int ERR_load_DSO_strings(void); -/* - * DSO function codes. - */ -# define DSO_F_DLFCN_BIND_FUNC 100 -# define DSO_F_DLFCN_LOAD 102 -# define DSO_F_DLFCN_MERGER 130 -# define DSO_F_DLFCN_NAME_CONVERTER 123 -# define DSO_F_DLFCN_UNLOAD 103 -# define DSO_F_DL_BIND_FUNC 104 -# define DSO_F_DL_LOAD 106 -# define DSO_F_DL_MERGER 131 -# define DSO_F_DL_NAME_CONVERTER 124 -# define DSO_F_DL_UNLOAD 107 -# define DSO_F_DSO_BIND_FUNC 108 -# define DSO_F_DSO_CONVERT_FILENAME 126 -# define DSO_F_DSO_CTRL 110 -# define DSO_F_DSO_FREE 111 -# define DSO_F_DSO_GET_FILENAME 127 -# define DSO_F_DSO_GLOBAL_LOOKUP 139 -# define DSO_F_DSO_LOAD 112 -# define DSO_F_DSO_MERGE 132 -# define DSO_F_DSO_NEW_METHOD 113 -# define DSO_F_DSO_PATHBYADDR 105 -# define DSO_F_DSO_SET_FILENAME 129 -# define DSO_F_DSO_UP_REF 114 -# define DSO_F_VMS_BIND_SYM 115 -# define DSO_F_VMS_LOAD 116 -# define DSO_F_VMS_MERGER 133 -# define DSO_F_VMS_UNLOAD 117 -# define DSO_F_WIN32_BIND_FUNC 101 -# define DSO_F_WIN32_GLOBALLOOKUP 142 -# define DSO_F_WIN32_JOINER 135 -# define DSO_F_WIN32_LOAD 120 -# define DSO_F_WIN32_MERGER 134 -# define DSO_F_WIN32_NAME_CONVERTER 125 -# define DSO_F_WIN32_PATHBYADDR 109 -# define DSO_F_WIN32_SPLITTER 136 -# define DSO_F_WIN32_UNLOAD 121 +int ossl_err_load_DSO_strings(void); /* * DSO reason codes. */ -# define DSO_R_CTRL_FAILED 100 -# define DSO_R_DSO_ALREADY_LOADED 110 -# define DSO_R_EMPTY_FILE_STRUCTURE 113 -# define DSO_R_FAILURE 114 -# define DSO_R_FILENAME_TOO_BIG 101 -# define DSO_R_FINISH_FAILED 102 -# define DSO_R_INCORRECT_FILE_SYNTAX 115 -# define DSO_R_LOAD_FAILED 103 -# define DSO_R_NAME_TRANSLATION_FAILED 109 -# define DSO_R_NO_FILENAME 111 -# define DSO_R_NULL_HANDLE 104 -# define DSO_R_SET_FILENAME_FAILED 112 -# define DSO_R_STACK_ERROR 105 -# define DSO_R_SYM_FAILURE 106 -# define DSO_R_UNLOAD_FAILED 107 -# define DSO_R_UNSUPPORTED 108 +# define DSO_R_CTRL_FAILED 100 +# define DSO_R_DSO_ALREADY_LOADED 110 +# define DSO_R_EMPTY_FILE_STRUCTURE 113 +# define DSO_R_FAILURE 114 +# define DSO_R_FILENAME_TOO_BIG 101 +# define DSO_R_FINISH_FAILED 102 +# define DSO_R_INCORRECT_FILE_SYNTAX 115 +# define DSO_R_LOAD_FAILED 103 +# define DSO_R_NAME_TRANSLATION_FAILED 109 +# define DSO_R_NO_FILENAME 111 +# define DSO_R_NULL_HANDLE 104 +# define DSO_R_SET_FILENAME_FAILED 112 +# define DSO_R_STACK_ERROR 105 +# define DSO_R_SYM_FAILURE 106 +# define DSO_R_UNLOAD_FAILED 107 +# define DSO_R_UNSUPPORTED 108 + +# ifdef __cplusplus +} +# endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/e_os.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/e_os.h new file mode 100644 index 00000000..7fdc3899 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/e_os.h @@ -0,0 +1,432 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_E_OS_H +# define OSSL_E_OS_H + +# include +# include + +# include +# include +# include "internal/numbers.h" /* Ensure the definition of SIZE_MAX */ + +/* + * contains what we can justify to make visible to the + * outside; this file e_os.h is not part of the exported interface. + */ + +# if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) +# define NO_CHMOD +# define NO_SYSLOG +# endif + +# define get_last_sys_error() errno +# define clear_sys_error() errno=0 +# define set_sys_error(e) errno=(e) + +/******************************************************************** + The Microsoft section + ********************************************************************/ +# if defined(OPENSSL_SYS_WIN32) && !defined(WIN32) +# define WIN32 +# endif +# if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +# endif +# if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS) +# define MSDOS +# endif + +# ifdef WIN32 +# undef get_last_sys_error +# undef clear_sys_error +# undef set_sys_error +# define get_last_sys_error() GetLastError() +# define clear_sys_error() SetLastError(0) +# define set_sys_error(e) SetLastError(e) +# if !defined(WINNT) +# define WIN_CONSOLE_BUG +# endif +# else +# endif + +# if (defined(WINDOWS) || defined(MSDOS)) + +# ifdef __DJGPP__ +# include +# include +# define _setmode setmode +# define _O_TEXT O_TEXT +# define _O_BINARY O_BINARY +# undef DEVRANDOM_EGD /* Neither MS-DOS nor FreeDOS provide 'egd' sockets. */ +# undef DEVRANDOM +# define DEVRANDOM "/dev/urandom\x24" +# endif /* __DJGPP__ */ + +# ifndef S_IFDIR +# define S_IFDIR _S_IFDIR +# endif + +# ifndef S_IFMT +# define S_IFMT _S_IFMT +# endif + +# if !defined(WINNT) && !defined(__DJGPP__) +# define NO_SYSLOG +# endif + +# ifdef WINDOWS +# if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT) + /* + * Defining _WIN32_WINNT here in e_os.h implies certain "discipline." + * Most notably we ought to check for availability of each specific + * routine that was introduced after denoted _WIN32_WINNT with + * GetProcAddress(). Normally newer functions are masked with higher + * _WIN32_WINNT in SDK headers. So that if you wish to use them in + * some module, you'd need to override _WIN32_WINNT definition in + * the target module in order to "reach for" prototypes, but replace + * calls to new functions with indirect calls. Alternatively it + * might be possible to achieve the goal by /DELAYLOAD-ing .DLLs + * and check for current OS version instead. + */ +# define _WIN32_WINNT 0x0501 +# endif +# if defined(_WIN32_WINNT) || defined(_WIN32_WCE) + /* + * Just like defining _WIN32_WINNT including winsock2.h implies + * certain "discipline" for maintaining [broad] binary compatibility. + * As long as structures are invariant among Winsock versions, + * it's sufficient to check for specific Winsock2 API availability + * at run-time [DSO_global_lookup is recommended]... + */ +# include +# include + /* + * Clang-based C++Builder 10.3.3 toolchains cannot find C inline + * definitions at link-time. This header defines WspiapiLoad() as an + * __inline function. https://quality.embarcadero.com/browse/RSP-33806 + */ +# if !defined(__BORLANDC__) || !defined(__clang__) +# include +# endif + /* yes, they have to be #included prior to */ +# endif +# include +# include +# include +# include +# if defined(_WIN32_WCE) && !defined(EACCES) +# define EACCES 13 +# endif +# include +# ifdef _WIN64 +# define strlen(s) _strlen31(s) +/* cut strings to 2GB */ +static __inline unsigned int _strlen31(const char *str) +{ + unsigned int len = 0; + while (*str && len < 0x80000000U) + str++, len++; + return len & 0x7FFFFFFF; +} +# endif +# include +# if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin) +# if _MSC_VER>=1300 && _MSC_VER<1600 +# undef stdin +# undef stdout +# undef stderr +FILE *__iob_func(); +# define stdin (&__iob_func()[0]) +# define stdout (&__iob_func()[1]) +# define stderr (&__iob_func()[2]) +# endif +# endif +# endif +# include +# include + +# ifdef OPENSSL_SYS_WINCE +# define OPENSSL_NO_POSIX_IO +# endif + +# define EXIT(n) exit(n) +# define LIST_SEPARATOR_CHAR ';' +# ifndef W_OK +# define W_OK 2 +# endif +# ifndef R_OK +# define R_OK 4 +# endif +# ifdef OPENSSL_SYS_WINCE +# define DEFAULT_HOME "" +# else +# define DEFAULT_HOME "C:" +# endif + +/* Avoid Visual Studio 13 GetVersion deprecated problems */ +# if defined(_MSC_VER) && _MSC_VER>=1800 +# define check_winnt() (1) +# define check_win_minplat(x) (1) +# else +# define check_winnt() (GetVersion() < 0x80000000) +# define check_win_minplat(x) (LOBYTE(LOWORD(GetVersion())) >= (x)) +# endif + +# else /* The non-microsoft world */ + +# if defined(OPENSSL_SYS_VXWORKS) +# include +# else +# include +# endif + +# ifdef OPENSSL_SYS_VMS +# define VMS 1 + /* + * some programs don't include stdlib, so exit() and others give implicit + * function warnings + */ +# include +# if defined(__DECC) +# include +# else +# include +# endif +# define LIST_SEPARATOR_CHAR ',' + /* We don't have any well-defined random devices on VMS, yet... */ +# undef DEVRANDOM + /*- + We need to do this since VMS has the following coding on status codes: + + Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ... + The important thing to know is that odd numbers are considered + good, while even ones are considered errors. + Bits 3-15: actual status number + Bits 16-27: facility number. 0 is considered "unknown" + Bits 28-31: control bits. If bit 28 is set, the shell won't try to + output the message (which, for random codes, just looks ugly) + + So, what we do here is to change 0 to 1 to get the default success status, + and everything else is shifted up to fit into the status number field, and + the status is tagged as an error, which is what is wanted here. + + Finally, we add the VMS C facility code 0x35a000, because there are some + programs, such as Perl, that will reinterpret the code back to something + POSIX. 'man perlvms' explains it further. + + NOTE: the perlvms manual wants to turn all codes 2 to 255 into success + codes (status type = 1). I couldn't disagree more. Fortunately, the + status type doesn't seem to bother Perl. + -- Richard Levitte + */ +# define EXIT(n) exit((n) ? (((n) << 3) | 2 | 0x10000000 | 0x35a000) : 1) + +# define DEFAULT_HOME "SYS$LOGIN:" + +# else + /* !defined VMS */ +# include +# include +# ifdef OPENSSL_SYS_WIN32_CYGWIN +# include +# include +# endif + +# define LIST_SEPARATOR_CHAR ':' +# define EXIT(n) exit(n) +# endif + +# endif + +/***********************************************/ + +# if defined(OPENSSL_SYS_WINDOWS) +# if (_MSC_VER >= 1310) && !defined(_WIN32_WCE) +# define open _open +# define fdopen _fdopen +# define close _close +# ifndef strdup +# define strdup _strdup +# endif +# define unlink _unlink +# define fileno _fileno +# endif +# else +# include +# endif + +/* vxworks */ +# if defined(OPENSSL_SYS_VXWORKS) +# include +# include +# include +# include +# include +# include + +# define TTY_STRUCT int +# define sleep(a) taskDelay((a) * sysClkRateGet()) + +/* + * NOTE: these are implemented by helpers in database app! if the database is + * not linked, we need to implement them elsewhere + */ +struct hostent *gethostbyname(const char *name); +struct hostent *gethostbyaddr(const char *addr, int length, int type); +struct servent *getservbyname(const char *name, const char *proto); + +# endif +/* end vxworks */ + +/* system-specific variants defining ossl_sleep() */ +#if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__) +# include +static ossl_inline void ossl_sleep(unsigned long millis) +{ +# ifdef OPENSSL_SYS_VXWORKS + struct timespec ts; + ts.tv_sec = (long int) (millis / 1000); + ts.tv_nsec = (long int) (millis % 1000) * 1000000ul; + nanosleep(&ts, NULL); +# elif defined(__TANDEM) +# if !defined(_REENTRANT) +# include + /* HPNS does not support usleep for non threaded apps */ + PROCESS_DELAY_(millis * 1000); +# elif defined(_SPT_MODEL_) +# include +# include + usleep(millis * 1000); +# else + usleep(millis * 1000); +# endif +# else + usleep(millis * 1000); +# endif +} +#elif defined(_WIN32) +# include +static ossl_inline void ossl_sleep(unsigned long millis) +{ + Sleep(millis); +} +#else +/* Fallback to a busy wait */ +static ossl_inline void ossl_sleep(unsigned long millis) +{ + struct timeval start, now; + unsigned long elapsedms; + + gettimeofday(&start, NULL); + do { + gettimeofday(&now, NULL); + elapsedms = (((now.tv_sec - start.tv_sec) * 1000000) + + now.tv_usec - start.tv_usec) / 1000; + } while (elapsedms < millis); +} +#endif /* defined OPENSSL_SYS_UNIX */ + +/* ----------------------------- HP NonStop -------------------------------- */ +/* Required to support platform variant without getpid() and pid_t. */ +# if defined(__TANDEM) && defined(_GUARDIAN_TARGET) +# include +# include +# define getservbyname(name,proto) getservbyname((char*)name,proto) +# define gethostbyname(name) gethostbyname((char*)name) +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# ifdef NO_GETPID +inline int nssgetpid(); +# ifndef NSSGETPID_MACRO +# define NSSGETPID_MACRO +# include +# include + inline int nssgetpid() + { + short phandle[10]={0}; + union pseudo_pid { + struct { + short cpu; + short pin; + } cpu_pin ; + int ppid; + } ppid = { 0 }; + PROCESSHANDLE_GETMINE_(phandle); + PROCESSHANDLE_DECOMPOSE_(phandle, &ppid.cpu_pin.cpu, &ppid.cpu_pin.pin); + return ppid.ppid; + } +# define getpid(a) nssgetpid(a) +# endif /* NSSGETPID_MACRO */ +# endif /* NO_GETPID */ +/*# define setsockopt(a,b,c,d,f) setsockopt(a,b,c,(char*)d,f)*/ +/*# define getsockopt(a,b,c,d,f) getsockopt(a,b,c,(char*)d,f)*/ +/*# define connect(a,b,c) connect(a,(struct sockaddr *)b,c)*/ +/*# define bind(a,b,c) bind(a,(struct sockaddr *)b,c)*/ +/*# define sendto(a,b,c,d,e,f) sendto(a,(char*)b,c,d,(struct sockaddr *)e,f)*/ +# if defined(OPENSSL_THREADS) && !defined(_PUT_MODEL_) + /* + * HPNS SPT threads + */ +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# undef close +# define close spt_close +/* +# define get_last_socket_error() errno +# define clear_socket_error() errno=0 +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# define closesocket(s) close(s) +# define readsocket(s,b,n) read((s),(char*)(b),(n)) +# define writesocket(s,b,n) write((s),(char*)(b),(n) +*/ +# define accept(a,b,c) accept(a,(struct sockaddr *)b,c) +# define recvfrom(a,b,c,d,e,f) recvfrom(a,b,(socklen_t)c,d,e,f) +# endif +# endif + +# ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION +# define CRYPTO_memcmp memcmp +# endif + +# ifndef OPENSSL_NO_SECURE_MEMORY + /* unistd.h defines _POSIX_VERSION */ +# if (defined(OPENSSL_SYS_UNIX) \ + && ( (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) \ + || defined(__sun) || defined(__hpux) || defined(__sgi) \ + || defined(__osf__) )) \ + || defined(_WIN32) + /* secure memory is implemented */ +# else +# define OPENSSL_NO_SECURE_MEMORY +# endif +# endif + +/* + * str[n]casecmp_l is defined in POSIX 2008-01. Value is taken accordingly + * https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html + * There are also equivalent functions on Windows. + * There is no locale_t on NONSTOP. + */ +# if defined(OPENSSL_SYS_WINDOWS) +# define locale_t _locale_t +# define freelocale _free_locale +# define strcasecmp_l _stricmp_l +# define strncasecmp_l _strnicmp_l +# define strcasecmp _stricmp +# define strncasecmp _strnicmp +# elif !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200809L \ + || defined(OPENSSL_SYS_TANDEM) +# ifndef OPENSSL_NO_LOCALE +# define OPENSSL_NO_LOCALE +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/endian.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/endian.h new file mode 100644 index 00000000..8b34e03e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/endian.h @@ -0,0 +1,51 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_ENDIAN_H +# define OSSL_INTERNAL_ENDIAN_H +# pragma once + +/* + * IS_LITTLE_ENDIAN and IS_BIG_ENDIAN can be used to detect the endiannes + * at compile time. To use it, DECLARE_IS_ENDIAN must be used to declare + * a variable. + * + * L_ENDIAN and B_ENDIAN can be used at preprocessor time. They can be set + * in the configarion using the lib_cppflags variable. If neither is + * set, it will fall back to code works with either endianness. + */ + +# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) +# define DECLARE_IS_ENDIAN const int ossl_is_little_endian = __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +# define IS_LITTLE_ENDIAN (ossl_is_little_endian) +# define IS_BIG_ENDIAN (!ossl_is_little_endian) +# if defined(L_ENDIAN) && (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) +# error "L_ENDIAN defined on a big endian machine" +# endif +# if defined(B_ENDIAN) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +# error "B_ENDIAN defined on a little endian machine" +# endif +# if !defined(L_ENDIAN) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +# define L_ENDIAN +# endif +# if !defined(B_ENDIAN) && (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) +# define B_ENDIAN +# endif +# else +# define DECLARE_IS_ENDIAN \ + const union { \ + long one; \ + char little; \ + } ossl_is_endian = { 1 } + +# define IS_LITTLE_ENDIAN (ossl_is_endian.little != 0) +# define IS_BIG_ENDIAN (ossl_is_endian.little == 0) +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/err.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/err.h index 88dde705..d8a308f0 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/err.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_ERR_H # define OSSL_INTERNAL_ERR_H +# pragma once void err_free_strings_int(void); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/ffc.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ffc.h new file mode 100644 index 00000000..c4f09087 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ffc.h @@ -0,0 +1,216 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_FFC_H +# define OSSL_INTERNAL_FFC_H +# pragma once + +# include +# include +# include +# include /* Uses Error codes from DH */ +# include +# include +# include "internal/sizes.h" + +/* Default value for gindex when canonical generation of g is not used */ +# define FFC_UNVERIFIABLE_GINDEX -1 + +/* The different types of FFC keys */ +# define FFC_PARAM_TYPE_DSA 0 +# define FFC_PARAM_TYPE_DH 1 + +/* + * The mode used by functions that share code for both generation and + * verification. See ossl_ffc_params_FIPS186_4_gen_verify(). + */ +#define FFC_PARAM_MODE_VERIFY 0 +#define FFC_PARAM_MODE_GENERATE 1 + +/* Return codes for generation and validation of FFC parameters */ +#define FFC_PARAM_RET_STATUS_FAILED 0 +#define FFC_PARAM_RET_STATUS_SUCCESS 1 +/* Returned if validating and g is only partially verifiable */ +#define FFC_PARAM_RET_STATUS_UNVERIFIABLE_G 2 + +/* Validation flags */ +# define FFC_PARAM_FLAG_VALIDATE_PQ 0x01 +# define FFC_PARAM_FLAG_VALIDATE_G 0x02 +# define FFC_PARAM_FLAG_VALIDATE_PQG \ + (FFC_PARAM_FLAG_VALIDATE_PQ | FFC_PARAM_FLAG_VALIDATE_G) +#define FFC_PARAM_FLAG_VALIDATE_LEGACY 0x04 + +/* + * NB: These values must align with the equivalently named macros in + * openssl/dh.h. We cannot use those macros here in case DH has been disabled. + */ +# define FFC_CHECK_P_NOT_PRIME 0x00001 +# define FFC_CHECK_P_NOT_SAFE_PRIME 0x00002 +# define FFC_CHECK_UNKNOWN_GENERATOR 0x00004 +# define FFC_CHECK_NOT_SUITABLE_GENERATOR 0x00008 +# define FFC_CHECK_Q_NOT_PRIME 0x00010 +# define FFC_CHECK_INVALID_Q_VALUE 0x00020 +# define FFC_CHECK_INVALID_J_VALUE 0x00040 + +# define FFC_CHECK_BAD_LN_PAIR 0x00080 +# define FFC_CHECK_INVALID_SEED_SIZE 0x00100 +# define FFC_CHECK_MISSING_SEED_OR_COUNTER 0x00200 +# define FFC_CHECK_INVALID_G 0x00400 +# define FFC_CHECK_INVALID_PQ 0x00800 +# define FFC_CHECK_INVALID_COUNTER 0x01000 +# define FFC_CHECK_P_MISMATCH 0x02000 +# define FFC_CHECK_Q_MISMATCH 0x04000 +# define FFC_CHECK_G_MISMATCH 0x08000 +# define FFC_CHECK_COUNTER_MISMATCH 0x10000 + +/* Validation Return codes */ +# define FFC_ERROR_PUBKEY_TOO_SMALL 0x01 +# define FFC_ERROR_PUBKEY_TOO_LARGE 0x02 +# define FFC_ERROR_PUBKEY_INVALID 0x04 +# define FFC_ERROR_NOT_SUITABLE_GENERATOR 0x08 +# define FFC_ERROR_PRIVKEY_TOO_SMALL 0x10 +# define FFC_ERROR_PRIVKEY_TOO_LARGE 0x20 +# define FFC_ERROR_PASSED_NULL_PARAM 0x40 + +/* + * Finite field cryptography (FFC) domain parameters are used by DH and DSA. + * Refer to FIPS186_4 Appendix A & B. + */ +typedef struct ffc_params_st { + /* Primes */ + BIGNUM *p; + BIGNUM *q; + /* Generator */ + BIGNUM *g; + /* DH X9.42 Optional Subgroup factor j >= 2 where p = j * q + 1 */ + BIGNUM *j; + + /* Required for FIPS186_4 validation of p, q and optionally canonical g */ + unsigned char *seed; + /* If this value is zero the hash size is used as the seed length */ + size_t seedlen; + /* Required for FIPS186_4 validation of p and q */ + int pcounter; + int nid; /* The identity of a named group */ + + /* + * Required for FIPS186_4 generation & validation of canonical g. + * It uses unverifiable g if this value is -1. + */ + int gindex; + int h; /* loop counter for unverifiable g */ + + unsigned int flags; + /* + * The digest to use for generation or validation. If this value is NULL, + * then the digest is chosen using the value of N. + */ + const char *mdname; + const char *mdprops; + /* Default key length for known named groups according to RFC7919 */ + int keylength; +} FFC_PARAMS; + +void ossl_ffc_params_init(FFC_PARAMS *params); +void ossl_ffc_params_cleanup(FFC_PARAMS *params); +void ossl_ffc_params_set0_pqg(FFC_PARAMS *params, BIGNUM *p, BIGNUM *q, + BIGNUM *g); +void ossl_ffc_params_get0_pqg(const FFC_PARAMS *params, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +void ossl_ffc_params_set0_j(FFC_PARAMS *d, BIGNUM *j); +int ossl_ffc_params_set_seed(FFC_PARAMS *params, + const unsigned char *seed, size_t seedlen); +void ossl_ffc_params_set_gindex(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_pcounter(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_h(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_flags(FFC_PARAMS *params, unsigned int flags); +void ossl_ffc_params_enable_flags(FFC_PARAMS *params, unsigned int flags, + int enable); +int ossl_ffc_set_digest(FFC_PARAMS *params, const char *alg, const char *props); + +int ossl_ffc_params_set_validate_params(FFC_PARAMS *params, + const unsigned char *seed, + size_t seedlen, int counter); +void ossl_ffc_params_get_validate_params(const FFC_PARAMS *params, + unsigned char **seed, size_t *seedlen, + int *pcounter); + +int ossl_ffc_params_copy(FFC_PARAMS *dst, const FFC_PARAMS *src); +int ossl_ffc_params_cmp(const FFC_PARAMS *a, const FFC_PARAMS *b, int ignore_q); + +#ifndef FIPS_MODULE +int ossl_ffc_params_print(BIO *bp, const FFC_PARAMS *ffc, int indent); +#endif /* FIPS_MODULE */ + + +int ossl_ffc_params_FIPS186_4_generate(OSSL_LIB_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + int *res, BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_generate(OSSL_LIB_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + int *res, BN_GENCB *cb); + +int ossl_ffc_params_FIPS186_4_gen_verify(OSSL_LIB_CTX *libctx, + FFC_PARAMS *params, int mode, int type, + size_t L, size_t N, int *res, + BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_gen_verify(OSSL_LIB_CTX *libctx, + FFC_PARAMS *params, int mode, int type, + size_t L, size_t N, int *res, + BN_GENCB *cb); + +int ossl_ffc_params_simple_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int paramstype, int *res); +int ossl_ffc_params_full_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int paramstype, int *res); +int ossl_ffc_params_FIPS186_4_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int type, int *res, BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int type, int *res, BN_GENCB *cb); + +int ossl_ffc_generate_private_key(BN_CTX *ctx, const FFC_PARAMS *params, + int N, int s, BIGNUM *priv); + +int ossl_ffc_params_validate_unverifiable_g(BN_CTX *ctx, BN_MONT_CTX *mont, + const BIGNUM *p, const BIGNUM *q, + const BIGNUM *g, BIGNUM *tmp, + int *ret); + +int ossl_ffc_validate_public_key(const FFC_PARAMS *params, + const BIGNUM *pub_key, int *ret); +int ossl_ffc_validate_public_key_partial(const FFC_PARAMS *params, + const BIGNUM *pub_key, int *ret); +int ossl_ffc_validate_private_key(const BIGNUM *upper, const BIGNUM *priv_key, + int *ret); + +int ossl_ffc_params_todata(const FFC_PARAMS *ffc, OSSL_PARAM_BLD *tmpl, + OSSL_PARAM params[]); +int ossl_ffc_params_fromdata(FFC_PARAMS *ffc, const OSSL_PARAM params[]); + +typedef struct dh_named_group_st DH_NAMED_GROUP; +const DH_NAMED_GROUP *ossl_ffc_name_to_dh_named_group(const char *name); +const DH_NAMED_GROUP *ossl_ffc_uid_to_dh_named_group(int uid); +#ifndef OPENSSL_NO_DH +const DH_NAMED_GROUP *ossl_ffc_numbers_to_dh_named_group(const BIGNUM *p, + const BIGNUM *q, + const BIGNUM *g); +#endif +int ossl_ffc_named_group_get_uid(const DH_NAMED_GROUP *group); +const char *ossl_ffc_named_group_get_name(const DH_NAMED_GROUP *); +#ifndef OPENSSL_NO_DH +int ossl_ffc_named_group_get_keylength(const DH_NAMED_GROUP *group); +const BIGNUM *ossl_ffc_named_group_get_q(const DH_NAMED_GROUP *group); +int ossl_ffc_named_group_set(FFC_PARAMS *ffc, const DH_NAMED_GROUP *group); +#endif + +#endif /* OSSL_INTERNAL_FFC_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/ktls.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ktls.h new file mode 100644 index 00000000..95492fd0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ktls.h @@ -0,0 +1,404 @@ +/* + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#if defined(OPENSSL_SYS_LINUX) +# ifndef OPENSSL_NO_KTLS +# include +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) +# define OPENSSL_NO_KTLS +# ifndef PEDANTIC +# warning "KTLS requires Kernel Headers >= 4.13.0" +# warning "Skipping Compilation of KTLS" +# endif +# endif +# endif +#endif + +#ifndef HEADER_INTERNAL_KTLS +# define HEADER_INTERNAL_KTLS +# pragma once + +# ifndef OPENSSL_NO_KTLS + +# if defined(__FreeBSD__) +# include +# include +# include +# include +# include +# include + +# ifndef TCP_RXTLS_ENABLE +# define OPENSSL_NO_KTLS_RX +# endif +# define OPENSSL_KTLS_AES_GCM_128 +# define OPENSSL_KTLS_AES_GCM_256 +# define OPENSSL_KTLS_TLS13 + +typedef struct tls_enable ktls_crypto_info_t; + +/* + * FreeBSD does not require any additional steps to enable KTLS before + * setting keys. + */ +static ossl_inline int ktls_enable(int fd) +{ + return 1; +} + +/* + * The TCP_TXTLS_ENABLE socket option marks the outgoing socket buffer + * as using TLS. If successful, then data sent using this socket will + * be encrypted and encapsulated in TLS records using the tls_en + * provided here. + * + * The TCP_RXTLS_ENABLE socket option marks the incoming socket buffer + * as using TLS. If successful, then data received for this socket will + * be authenticated and decrypted using the tls_en provided here. + */ +static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *tls_en, int is_tx) +{ + if (is_tx) + return setsockopt(fd, IPPROTO_TCP, TCP_TXTLS_ENABLE, + tls_en, sizeof(*tls_en)) ? 0 : 1; +# ifndef OPENSSL_NO_KTLS_RX + return setsockopt(fd, IPPROTO_TCP, TCP_RXTLS_ENABLE, tls_en, + sizeof(*tls_en)) ? 0 : 1; +# else + return 0; +# endif +} + +/* + * Send a TLS record using the tls_en provided in ktls_start and use + * record_type instead of the default SSL3_RT_APPLICATION_DATA. + * When the socket is non-blocking, then this call either returns EAGAIN or + * the entire record is pushed to TCP. It is impossible to send a partial + * record using this control message. + */ +static ossl_inline int ktls_send_ctrl_message(int fd, unsigned char record_type, + const void *data, size_t length) +{ + struct msghdr msg = { 0 }; + int cmsg_len = sizeof(record_type); + struct cmsghdr *cmsg; + char buf[CMSG_SPACE(cmsg_len)]; + struct iovec msg_iov; /* Vector of data to send/receive into */ + + msg.msg_control = buf; + msg.msg_controllen = sizeof(buf); + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_level = IPPROTO_TCP; + cmsg->cmsg_type = TLS_SET_RECORD_TYPE; + cmsg->cmsg_len = CMSG_LEN(cmsg_len); + *((unsigned char *)CMSG_DATA(cmsg)) = record_type; + msg.msg_controllen = cmsg->cmsg_len; + + msg_iov.iov_base = (void *)data; + msg_iov.iov_len = length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + return sendmsg(fd, &msg, 0); +} + +# ifdef OPENSSL_NO_KTLS_RX + +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + return -1; +} + +# else /* !defined(OPENSSL_NO_KTLS_RX) */ + +/* + * Receive a TLS record using the tls_en provided in ktls_start. The + * kernel strips any explicit IV and authentication tag, but provides + * the TLS record header via a control message. If there is an error + * with the TLS record such as an invalid header, invalid padding, or + * authentication failure recvmsg() will fail with an error. + */ +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + struct msghdr msg = { 0 }; + int cmsg_len = sizeof(struct tls_get_record); + struct tls_get_record *tgr; + struct cmsghdr *cmsg; + char buf[CMSG_SPACE(cmsg_len)]; + struct iovec msg_iov; /* Vector of data to send/receive into */ + int ret; + unsigned char *p = data; + const size_t prepend_length = SSL3_RT_HEADER_LENGTH; + + if (length <= prepend_length) { + errno = EINVAL; + return -1; + } + + msg.msg_control = buf; + msg.msg_controllen = sizeof(buf); + + msg_iov.iov_base = p + prepend_length; + msg_iov.iov_len = length - prepend_length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + ret = recvmsg(fd, &msg, 0); + if (ret <= 0) + return ret; + + if ((msg.msg_flags & (MSG_EOR | MSG_CTRUNC)) != MSG_EOR) { + errno = EMSGSIZE; + return -1; + } + + if (msg.msg_controllen == 0) { + errno = EBADMSG; + return -1; + } + + cmsg = CMSG_FIRSTHDR(&msg); + if (cmsg->cmsg_level != IPPROTO_TCP || cmsg->cmsg_type != TLS_GET_RECORD + || cmsg->cmsg_len != CMSG_LEN(cmsg_len)) { + errno = EBADMSG; + return -1; + } + + tgr = (struct tls_get_record *)CMSG_DATA(cmsg); + p[0] = tgr->tls_type; + p[1] = tgr->tls_vmajor; + p[2] = tgr->tls_vminor; + *(uint16_t *)(p + 3) = htons(ret); + + return ret + prepend_length; +} + +# endif /* OPENSSL_NO_KTLS_RX */ + +/* + * KTLS enables the sendfile system call to send data from a file over + * TLS. + */ +static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, + size_t size, int flags) +{ + off_t sbytes = 0; + int ret; + + ret = sendfile(fd, s, off, size, NULL, &sbytes, flags); + if (ret == -1 && sbytes == 0) + return -1; + return sbytes; +} + +# endif /* __FreeBSD__ */ + +# if defined(OPENSSL_SYS_LINUX) + +# include +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0) +# define OPENSSL_NO_KTLS_RX +# ifndef PEDANTIC +# warning "KTLS requires Kernel Headers >= 4.17.0 for receiving" +# warning "Skipping Compilation of KTLS receive data path" +# endif +# endif +# define OPENSSL_KTLS_AES_GCM_128 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) +# define OPENSSL_KTLS_AES_GCM_256 +# define OPENSSL_KTLS_TLS13 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0) +# define OPENSSL_KTLS_AES_CCM_128 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0) +# ifndef OPENSSL_NO_CHACHA +# define OPENSSL_KTLS_CHACHA20_POLY1305 +# endif +# endif +# endif +# endif + +# include +# include +# include +# include +# include +# include + +# ifndef SOL_TLS +# define SOL_TLS 282 +# endif + +# ifndef TCP_ULP +# define TCP_ULP 31 +# endif + +# ifndef TLS_RX +# define TLS_RX 2 +# endif + +struct tls_crypto_info_all { + union { +# ifdef OPENSSL_KTLS_AES_GCM_128 + struct tls12_crypto_info_aes_gcm_128 gcm128; +# endif +# ifdef OPENSSL_KTLS_AES_GCM_256 + struct tls12_crypto_info_aes_gcm_256 gcm256; +# endif +# ifdef OPENSSL_KTLS_AES_CCM_128 + struct tls12_crypto_info_aes_ccm_128 ccm128; +# endif +# ifdef OPENSSL_KTLS_CHACHA20_POLY1305 + struct tls12_crypto_info_chacha20_poly1305 chacha20poly1305; +# endif + }; + size_t tls_crypto_info_len; +}; + +typedef struct tls_crypto_info_all ktls_crypto_info_t; + +/* + * When successful, this socket option doesn't change the behaviour of the + * TCP socket, except changing the TCP setsockopt handler to enable the + * processing of SOL_TLS socket options. All other functionality remains the + * same. + */ +static ossl_inline int ktls_enable(int fd) +{ + return setsockopt(fd, SOL_TCP, TCP_ULP, "tls", sizeof("tls")) ? 0 : 1; +} + +/* + * The TLS_TX socket option changes the send/sendmsg handlers of the TCP socket. + * If successful, then data sent using this socket will be encrypted and + * encapsulated in TLS records using the crypto_info provided here. + * The TLS_RX socket option changes the recv/recvmsg handlers of the TCP socket. + * If successful, then data received using this socket will be decrypted, + * authenticated and decapsulated using the crypto_info provided here. + */ +static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *crypto_info, + int is_tx) +{ + return setsockopt(fd, SOL_TLS, is_tx ? TLS_TX : TLS_RX, + crypto_info, crypto_info->tls_crypto_info_len) ? 0 : 1; +} + +/* + * Send a TLS record using the crypto_info provided in ktls_start and use + * record_type instead of the default SSL3_RT_APPLICATION_DATA. + * When the socket is non-blocking, then this call either returns EAGAIN or + * the entire record is pushed to TCP. It is impossible to send a partial + * record using this control message. + */ +static ossl_inline int ktls_send_ctrl_message(int fd, unsigned char record_type, + const void *data, size_t length) +{ + struct msghdr msg; + int cmsg_len = sizeof(record_type); + struct cmsghdr *cmsg; + union { + struct cmsghdr hdr; + char buf[CMSG_SPACE(sizeof(unsigned char))]; + } cmsgbuf; + struct iovec msg_iov; /* Vector of data to send/receive into */ + + memset(&msg, 0, sizeof(msg)); + msg.msg_control = cmsgbuf.buf; + msg.msg_controllen = sizeof(cmsgbuf.buf); + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_level = SOL_TLS; + cmsg->cmsg_type = TLS_SET_RECORD_TYPE; + cmsg->cmsg_len = CMSG_LEN(cmsg_len); + *((unsigned char *)CMSG_DATA(cmsg)) = record_type; + msg.msg_controllen = cmsg->cmsg_len; + + msg_iov.iov_base = (void *)data; + msg_iov.iov_len = length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + return sendmsg(fd, &msg, 0); +} + +/* + * KTLS enables the sendfile system call to send data from a file over TLS. + * @flags are ignored on Linux. (placeholder for FreeBSD sendfile) + * */ +static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, size_t size, int flags) +{ + return sendfile(s, fd, &off, size); +} + +# ifdef OPENSSL_NO_KTLS_RX + + +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + return -1; +} + +# else /* !defined(OPENSSL_NO_KTLS_RX) */ + +/* + * Receive a TLS record using the crypto_info provided in ktls_start. + * The kernel strips the TLS record header, IV and authentication tag, + * returning only the plaintext data or an error on failure. + * We add the TLS record header here to satisfy routines in rec_layer_s3.c + */ +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + struct msghdr msg; + struct cmsghdr *cmsg; + union { + struct cmsghdr hdr; + char buf[CMSG_SPACE(sizeof(unsigned char))]; + } cmsgbuf; + struct iovec msg_iov; + int ret; + unsigned char *p = data; + const size_t prepend_length = SSL3_RT_HEADER_LENGTH; + + if (length < prepend_length + EVP_GCM_TLS_TAG_LEN) { + errno = EINVAL; + return -1; + } + + memset(&msg, 0, sizeof(msg)); + msg.msg_control = cmsgbuf.buf; + msg.msg_controllen = sizeof(cmsgbuf.buf); + + msg_iov.iov_base = p + prepend_length; + msg_iov.iov_len = length - prepend_length - EVP_GCM_TLS_TAG_LEN; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + ret = recvmsg(fd, &msg, 0); + if (ret < 0) + return ret; + + if (msg.msg_controllen > 0) { + cmsg = CMSG_FIRSTHDR(&msg); + if (cmsg->cmsg_type == TLS_GET_RECORD_TYPE) { + p[0] = *((unsigned char *)CMSG_DATA(cmsg)); + p[1] = TLS1_2_VERSION_MAJOR; + p[2] = TLS1_2_VERSION_MINOR; + /* returned length is limited to msg_iov.iov_len above */ + p[3] = (ret >> 8) & 0xff; + p[4] = ret & 0xff; + ret += prepend_length; + } + } + + return ret; +} + +# endif /* OPENSSL_NO_KTLS_RX */ + +# endif /* OPENSSL_SYS_LINUX */ +# endif /* OPENSSL_NO_KTLS */ +#endif /* HEADER_INTERNAL_KTLS */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/namemap.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/namemap.h new file mode 100644 index 00000000..fd36883f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/namemap.h @@ -0,0 +1,41 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "internal/cryptlib.h" + +typedef struct ossl_namemap_st OSSL_NAMEMAP; + +OSSL_NAMEMAP *ossl_namemap_stored(OSSL_LIB_CTX *libctx); + +OSSL_NAMEMAP *ossl_namemap_new(void); +void ossl_namemap_free(OSSL_NAMEMAP *namemap); +int ossl_namemap_empty(OSSL_NAMEMAP *namemap); + +int ossl_namemap_add_name(OSSL_NAMEMAP *namemap, int number, const char *name); + +/* + * The number<->name relationship is 1<->many + * Therefore, the name->number mapping is a simple function, while the + * number->name mapping is an iterator. + */ +int ossl_namemap_name2num(const OSSL_NAMEMAP *namemap, const char *name); +int ossl_namemap_name2num_n(const OSSL_NAMEMAP *namemap, + const char *name, size_t name_len); +const char *ossl_namemap_num2name(const OSSL_NAMEMAP *namemap, int number, + size_t idx); +int ossl_namemap_doall_names(const OSSL_NAMEMAP *namemap, int number, + void (*fn)(const char *name, void *data), + void *data); + +/* + * A utility that handles several names in a string, divided by a given + * separator. + */ +int ossl_namemap_add_names(OSSL_NAMEMAP *namemap, int number, + const char *names, const char separator); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/nelem.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/nelem.h index 699ef88e..b758513b 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/nelem.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/nelem.h @@ -1,7 +1,7 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_NELEM_H # define OSSL_INTERNAL_NELEM_H +# pragma once # define OSSL_NELEM(x) (sizeof(x)/sizeof((x)[0])) #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/numbers.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/numbers.h index f5ade522..4f4d3306 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/numbers.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/numbers.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,22 +9,23 @@ #ifndef OSSL_INTERNAL_NUMBERS_H # define OSSL_INTERNAL_NUMBERS_H +# pragma once # include -# if (-1 & 3) == 0x03 /* Two's complement */ +# if (-1 & 3) == 0x03 /* Two's complement */ # define __MAXUINT__(T) ((T) -1) # define __MAXINT__(T) ((T) ((((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)) ^ __MAXUINT__(T))) # define __MININT__(T) (-__MAXINT__(T) - 1) -# elif (-1 & 3) == 0x02 /* One's complement */ +# elif (-1 & 3) == 0x02 /* One's complement */ # define __MAXUINT__(T) (((T) -1) + 1) # define __MAXINT__(T) ((T) ((((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)) ^ __MAXUINT__(T))) # define __MININT__(T) (-__MAXINT__(T)) -# elif (-1 & 3) == 0x01 /* Sign/magnitude */ +# elif (-1 & 3) == 0x01 /* Sign/magnitude */ # define __MAXINT__(T) ((T) (((((T) 1) << ((sizeof(T) * CHAR_BIT) - 2)) - 1) | (((T) 1) << ((sizeof(T) * CHAR_BIT) - 2)))) # define __MAXUINT__(T) ((T) (__MAXINT__(T) | (((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)))) @@ -60,9 +61,25 @@ # define UINT64_MAX __MAXUINT__(uint64_t) # endif +# ifndef INT128_MAX +# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16 +typedef __int128_t int128_t; +typedef __uint128_t uint128_t; +# define INT128_MIN __MININT__(int128_t) +# define INT128_MAX __MAXINT__(int128_t) +# define UINT128_MAX __MAXUINT__(uint128_t) +# endif +# endif + # ifndef SIZE_MAX # define SIZE_MAX __MAXUINT__(size_t) # endif +# ifndef OSSL_INTMAX_MAX +# define OSSL_INTMAX_MIN __MININT__(ossl_intmax_t) +# define OSSL_INTMAX_MAX __MAXINT__(ossl_intmax_t) +# define OSSL_UINTMAX_MAX __MAXUINT__(ossl_uintmax_t) +# endif + #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/o_dir.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/o_dir.h index dafc8dd2..add34d14 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/o_dir.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/o_dir.h @@ -1,7 +1,7 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -38,6 +38,7 @@ #ifndef OSSL_INTERNAL_O_DIR_H # define OSSL_INTERNAL_O_DIR_H +# pragma once typedef struct OPENSSL_dir_context_st OPENSSL_DIR_CTX; diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/o_str.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/o_str.h deleted file mode 100644 index 15c12e82..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/o_str.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef OSSL_INTERNAL_O_STR_H -# define OSSL_INTERNAL_O_STR_H - -# include /* to get size_t */ - -int OPENSSL_memcmp(const void *p1, const void *p2, size_t n); - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/packet.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/packet.h new file mode 100644 index 00000000..ed761720 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/packet.h @@ -0,0 +1,937 @@ +/* + * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PACKET_H +# define OSSL_INTERNAL_PACKET_H +# pragma once + +# include +# include +# include +# include +# include + +# include "internal/numbers.h" + +typedef struct { + /* Pointer to where we are currently reading from */ + const unsigned char *curr; + /* Number of bytes remaining */ + size_t remaining; +} PACKET; + +/* Internal unchecked shorthand; don't use outside this file. */ +static ossl_inline void packet_forward(PACKET *pkt, size_t len) +{ + pkt->curr += len; + pkt->remaining -= len; +} + +/* + * Returns the number of bytes remaining to be read in the PACKET + */ +static ossl_inline size_t PACKET_remaining(const PACKET *pkt) +{ + return pkt->remaining; +} + +/* + * Returns a pointer to the first byte after the packet data. + * Useful for integrating with non-PACKET parsing code. + * Specifically, we use PACKET_end() to verify that a d2i_... call + * has consumed the entire packet contents. + */ +static ossl_inline const unsigned char *PACKET_end(const PACKET *pkt) +{ + return pkt->curr + pkt->remaining; +} + +/* + * Returns a pointer to the PACKET's current position. + * For use in non-PACKETized APIs. + */ +static ossl_inline const unsigned char *PACKET_data(const PACKET *pkt) +{ + return pkt->curr; +} + +/* + * Initialise a PACKET with |len| bytes held in |buf|. This does not make a + * copy of the data so |buf| must be present for the whole time that the PACKET + * is being used. + */ +__owur static ossl_inline int PACKET_buf_init(PACKET *pkt, + const unsigned char *buf, + size_t len) +{ + /* Sanity check for negative values. */ + if (len > (size_t)(SIZE_MAX / 2)) + return 0; + + pkt->curr = buf; + pkt->remaining = len; + return 1; +} + +/* Initialize a PACKET to hold zero bytes. */ +static ossl_inline void PACKET_null_init(PACKET *pkt) +{ + pkt->curr = NULL; + pkt->remaining = 0; +} + +/* + * Returns 1 if the packet has length |num| and its contents equal the |num| + * bytes read from |ptr|. Returns 0 otherwise (lengths or contents not equal). + * If lengths are equal, performs the comparison in constant time. + */ +__owur static ossl_inline int PACKET_equal(const PACKET *pkt, const void *ptr, + size_t num) +{ + if (PACKET_remaining(pkt) != num) + return 0; + return CRYPTO_memcmp(pkt->curr, ptr, num) == 0; +} + +/* + * Peek ahead and initialize |subpkt| with the next |len| bytes read from |pkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + */ +__owur static ossl_inline int PACKET_peek_sub_packet(const PACKET *pkt, + PACKET *subpkt, size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + return PACKET_buf_init(subpkt, pkt->curr, len); +} + +/* + * Initialize |subpkt| with the next |len| bytes read from |pkt|. Data is not + * copied: the |subpkt| packet will share its underlying buffer with the + * original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + */ +__owur static ossl_inline int PACKET_get_sub_packet(PACKET *pkt, + PACKET *subpkt, size_t len) +{ + if (!PACKET_peek_sub_packet(pkt, subpkt, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Peek ahead at 2 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_2(const PACKET *pkt, + unsigned int *data) +{ + if (PACKET_remaining(pkt) < 2) + return 0; + + *data = ((unsigned int)(*pkt->curr)) << 8; + *data |= *(pkt->curr + 1); + + return 1; +} + +/* Equivalent of n2s */ +/* Get 2 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_2(PACKET *pkt, unsigned int *data) +{ + if (!PACKET_peek_net_2(pkt, data)) + return 0; + + packet_forward(pkt, 2); + + return 1; +} + +/* Same as PACKET_get_net_2() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_2_len(PACKET *pkt, size_t *data) +{ + unsigned int i; + int ret = PACKET_get_net_2(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 3 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_3(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 3) + return 0; + + *data = ((unsigned long)(*pkt->curr)) << 16; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 8; + *data |= *(pkt->curr + 2); + + return 1; +} + +/* Equivalent of n2l3 */ +/* Get 3 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_3(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_net_3(pkt, data)) + return 0; + + packet_forward(pkt, 3); + + return 1; +} + +/* Same as PACKET_get_net_3() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_3_len(PACKET *pkt, size_t *data) +{ + unsigned long i; + int ret = PACKET_get_net_3(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 4 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_4(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 4) + return 0; + + *data = ((unsigned long)(*pkt->curr)) << 24; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 16; + *data |= ((unsigned long)(*(pkt->curr + 2))) << 8; + *data |= *(pkt->curr + 3); + + return 1; +} + +/* + * Peek ahead at 8 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_8(const PACKET *pkt, + uint64_t *data) +{ + if (PACKET_remaining(pkt) < 8) + return 0; + + *data = ((uint64_t)(*pkt->curr)) << 56; + *data |= ((uint64_t)(*(pkt->curr + 1))) << 48; + *data |= ((uint64_t)(*(pkt->curr + 2))) << 40; + *data |= ((uint64_t)(*(pkt->curr + 3))) << 32; + *data |= ((uint64_t)(*(pkt->curr + 4))) << 24; + *data |= ((uint64_t)(*(pkt->curr + 5))) << 16; + *data |= ((uint64_t)(*(pkt->curr + 6))) << 8; + *data |= *(pkt->curr + 7); + + return 1; +} + +/* Equivalent of n2l */ +/* Get 4 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_4(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_net_4(pkt, data)) + return 0; + + packet_forward(pkt, 4); + + return 1; +} + +/* Same as PACKET_get_net_4() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_4_len(PACKET *pkt, size_t *data) +{ + unsigned long i; + int ret = PACKET_get_net_4(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* Get 8 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_8(PACKET *pkt, uint64_t *data) +{ + if (!PACKET_peek_net_8(pkt, data)) + return 0; + + packet_forward(pkt, 8); + + return 1; +} + +/* Peek ahead at 1 byte from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_peek_1(const PACKET *pkt, + unsigned int *data) +{ + if (!PACKET_remaining(pkt)) + return 0; + + *data = *pkt->curr; + + return 1; +} + +/* Get 1 byte from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_1(PACKET *pkt, unsigned int *data) +{ + if (!PACKET_peek_1(pkt, data)) + return 0; + + packet_forward(pkt, 1); + + return 1; +} + +/* Same as PACKET_get_1() but for a size_t */ +__owur static ossl_inline int PACKET_get_1_len(PACKET *pkt, size_t *data) +{ + unsigned int i; + int ret = PACKET_get_1(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 4 bytes in reverse network order from |pkt| and store the value + * in |*data| + */ +__owur static ossl_inline int PACKET_peek_4(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 4) + return 0; + + *data = *pkt->curr; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 8; + *data |= ((unsigned long)(*(pkt->curr + 2))) << 16; + *data |= ((unsigned long)(*(pkt->curr + 3))) << 24; + + return 1; +} + +/* Equivalent of c2l */ +/* + * Get 4 bytes in reverse network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_get_4(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_4(pkt, data)) + return 0; + + packet_forward(pkt, 4); + + return 1; +} + +/* + * Peek ahead at |len| bytes from the |pkt| and store a pointer to them in + * |*data|. This just points at the underlying buffer that |pkt| is using. The + * caller should not free this data directly (it will be freed when the + * underlying buffer gets freed + */ +__owur static ossl_inline int PACKET_peek_bytes(const PACKET *pkt, + const unsigned char **data, + size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + *data = pkt->curr; + + return 1; +} + +/* + * Read |len| bytes from the |pkt| and store a pointer to them in |*data|. This + * just points at the underlying buffer that |pkt| is using. The caller should + * not free this data directly (it will be freed when the underlying buffer gets + * freed + */ +__owur static ossl_inline int PACKET_get_bytes(PACKET *pkt, + const unsigned char **data, + size_t len) +{ + if (!PACKET_peek_bytes(pkt, data, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* Peek ahead at |len| bytes from |pkt| and copy them to |data| */ +__owur static ossl_inline int PACKET_peek_copy_bytes(const PACKET *pkt, + unsigned char *data, + size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + memcpy(data, pkt->curr, len); + + return 1; +} + +/* + * Read |len| bytes from |pkt| and copy them to |data|. + * The caller is responsible for ensuring that |data| can hold |len| bytes. + */ +__owur static ossl_inline int PACKET_copy_bytes(PACKET *pkt, + unsigned char *data, size_t len) +{ + if (!PACKET_peek_copy_bytes(pkt, data, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Copy packet data to |dest|, and set |len| to the number of copied bytes. + * If the packet has more than |dest_len| bytes, nothing is copied. + * Returns 1 if the packet data fits in |dest_len| bytes, 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing + * done with a given PACKET). + */ +__owur static ossl_inline int PACKET_copy_all(const PACKET *pkt, + unsigned char *dest, + size_t dest_len, size_t *len) +{ + if (PACKET_remaining(pkt) > dest_len) { + *len = 0; + return 0; + } + *len = pkt->remaining; + memcpy(dest, pkt->curr, pkt->remaining); + return 1; +} + +/* + * Copy |pkt| bytes to a newly allocated buffer and store a pointer to the + * result in |*data|, and the length in |len|. + * If |*data| is not NULL, the old data is OPENSSL_free'd. + * If the packet is empty, or malloc fails, |*data| will be set to NULL. + * Returns 1 if the malloc succeeds and 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing + * done with a given PACKET). + */ +__owur static ossl_inline int PACKET_memdup(const PACKET *pkt, + unsigned char **data, size_t *len) +{ + size_t length; + + OPENSSL_free(*data); + *data = NULL; + *len = 0; + + length = PACKET_remaining(pkt); + + if (length == 0) + return 1; + + *data = OPENSSL_memdup(pkt->curr, length); + if (*data == NULL) + return 0; + + *len = length; + return 1; +} + +/* + * Read a C string from |pkt| and copy to a newly allocated, NUL-terminated + * buffer. Store a pointer to the result in |*data|. + * If |*data| is not NULL, the old data is OPENSSL_free'd. + * If the data in |pkt| does not contain a NUL-byte, the entire data is + * copied and NUL-terminated. + * Returns 1 if the malloc succeeds and 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing done + * with a given PACKET). + */ +__owur static ossl_inline int PACKET_strndup(const PACKET *pkt, char **data) +{ + OPENSSL_free(*data); + + /* This will succeed on an empty packet, unless pkt->curr == NULL. */ + *data = OPENSSL_strndup((const char *)pkt->curr, PACKET_remaining(pkt)); + return (*data != NULL); +} + +/* Returns 1 if |pkt| contains at least one 0-byte, 0 otherwise. */ +static ossl_inline int PACKET_contains_zero_byte(const PACKET *pkt) +{ + return memchr(pkt->curr, 0, pkt->remaining) != NULL; +} + +/* Move the current reading position forward |len| bytes */ +__owur static ossl_inline int PACKET_forward(PACKET *pkt, size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a one-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_1(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_1(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Like PACKET_get_length_prefixed_1, but additionally, fails when there are + * leftover bytes in |pkt|. + */ +__owur static ossl_inline int PACKET_as_length_prefixed_1(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_1(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length) || + PACKET_remaining(&tmp) != 0) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a two-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_2(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + + if (!PACKET_get_net_2(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Like PACKET_get_length_prefixed_2, but additionally, fails when there are + * leftover bytes in |pkt|. + */ +__owur static ossl_inline int PACKET_as_length_prefixed_2(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + + if (!PACKET_get_net_2(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length) || + PACKET_remaining(&tmp) != 0) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a three-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_3(PACKET *pkt, + PACKET *subpkt) +{ + unsigned long length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_net_3(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* Writeable packets */ + +typedef struct wpacket_sub WPACKET_SUB; +struct wpacket_sub { + /* The parent WPACKET_SUB if we have one or NULL otherwise */ + WPACKET_SUB *parent; + + /* + * Offset into the buffer where the length of this WPACKET goes. We use an + * offset in case the buffer grows and gets reallocated. + */ + size_t packet_len; + + /* Number of bytes in the packet_len or 0 if we don't write the length */ + size_t lenbytes; + + /* Number of bytes written to the buf prior to this packet starting */ + size_t pwritten; + + /* Flags for this sub-packet */ + unsigned int flags; +}; + +typedef struct wpacket_st WPACKET; +struct wpacket_st { + /* The buffer where we store the output data */ + BUF_MEM *buf; + + /* Fixed sized buffer which can be used as an alternative to buf */ + unsigned char *staticbuf; + + /* + * Offset into the buffer where we are currently writing. We use an offset + * in case the buffer grows and gets reallocated. + */ + size_t curr; + + /* Number of bytes written so far */ + size_t written; + + /* Maximum number of bytes we will allow to be written to this WPACKET */ + size_t maxsize; + + /* Our sub-packets (always at least one if not finished) */ + WPACKET_SUB *subs; + + /* Writing from the end first? */ + unsigned int endfirst : 1; +}; + +/* Flags */ + +/* Default */ +#define WPACKET_FLAGS_NONE 0 + +/* Error on WPACKET_close() if no data written to the WPACKET */ +#define WPACKET_FLAGS_NON_ZERO_LENGTH 1 + +/* + * Abandon all changes on WPACKET_close() if no data written to the WPACKET, + * i.e. this does not write out a zero packet length + */ +#define WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH 2 + + +/* + * Initialise a WPACKET with the buffer in |buf|. The buffer must exist + * for the whole time that the WPACKET is being used. Additionally |lenbytes| of + * data is preallocated at the start of the buffer to store the length of the + * WPACKET once we know it. + */ +int WPACKET_init_len(WPACKET *pkt, BUF_MEM *buf, size_t lenbytes); + +/* + * Same as WPACKET_init_len except there is no preallocation of the WPACKET + * length. + */ +int WPACKET_init(WPACKET *pkt, BUF_MEM *buf); + +/* + * Same as WPACKET_init_len except there is no underlying buffer. No data is + * ever actually written. We just keep track of how much data would have been + * written if a buffer was there. + */ +int WPACKET_init_null(WPACKET *pkt, size_t lenbytes); + +/* + * Same as WPACKET_init_null except we set the WPACKET to assume DER length + * encoding for sub-packets. + */ +int WPACKET_init_null_der(WPACKET *pkt); + +/* + * Same as WPACKET_init_len except we do not use a growable BUF_MEM structure. + * A fixed buffer of memory |buf| of size |len| is used instead. A failure will + * occur if you attempt to write beyond the end of the buffer + */ +int WPACKET_init_static_len(WPACKET *pkt, unsigned char *buf, size_t len, + size_t lenbytes); + +/* + * Same as WPACKET_init_static_len except lenbytes is always 0, and we set the + * WPACKET to write to the end of the buffer moving towards the start and use + * DER length encoding for sub-packets. + */ +int WPACKET_init_der(WPACKET *pkt, unsigned char *buf, size_t len); + +/* + * Set the flags to be applied to the current sub-packet + */ +int WPACKET_set_flags(WPACKET *pkt, unsigned int flags); + +/* + * Closes the most recent sub-packet. It also writes out the length of the + * packet to the required location (normally the start of the WPACKET) if + * appropriate. The top level WPACKET should be closed using WPACKET_finish() + * instead of this function. + */ +int WPACKET_close(WPACKET *pkt); + +/* + * The same as WPACKET_close() but only for the top most WPACKET. Additionally + * frees memory resources for this WPACKET. + */ +int WPACKET_finish(WPACKET *pkt); + +/* + * Iterate through all the sub-packets and write out their lengths as if they + * were being closed. The lengths will be overwritten with the final lengths + * when the sub-packets are eventually closed (which may be different if more + * data is added to the WPACKET). This function fails if a sub-packet is of 0 + * length and WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH is set. + */ +int WPACKET_fill_lengths(WPACKET *pkt); + +/* + * Initialise a new sub-packet. Additionally |lenbytes| of data is preallocated + * at the start of the sub-packet to store its length once we know it. Don't + * call this directly. Use the convenience macros below instead. + */ +int WPACKET_start_sub_packet_len__(WPACKET *pkt, size_t lenbytes); + +/* + * Convenience macros for calling WPACKET_start_sub_packet_len with different + * lengths + */ +#define WPACKET_start_sub_packet_u8(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 1) +#define WPACKET_start_sub_packet_u16(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 2) +#define WPACKET_start_sub_packet_u24(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 3) +#define WPACKET_start_sub_packet_u32(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 4) + +/* + * Same as WPACKET_start_sub_packet_len__() except no bytes are pre-allocated + * for the sub-packet length. + */ +int WPACKET_start_sub_packet(WPACKET *pkt); + +/* + * Allocate bytes in the WPACKET for the output. This reserves the bytes + * and counts them as "written", but doesn't actually do the writing. A pointer + * to the allocated bytes is stored in |*allocbytes|. |allocbytes| may be NULL. + * WARNING: the allocated bytes must be filled in immediately, without further + * WPACKET_* calls. If not then the underlying buffer may be realloc'd and + * change its location. + */ +int WPACKET_allocate_bytes(WPACKET *pkt, size_t len, + unsigned char **allocbytes); + +/* + * The same as WPACKET_allocate_bytes() except additionally a new sub-packet is + * started for the allocated bytes, and then closed immediately afterwards. The + * number of length bytes for the sub-packet is in |lenbytes|. Don't call this + * directly. Use the convenience macros below instead. + */ +int WPACKET_sub_allocate_bytes__(WPACKET *pkt, size_t len, + unsigned char **allocbytes, size_t lenbytes); + +/* + * Convenience macros for calling WPACKET_sub_allocate_bytes with different + * lengths + */ +#define WPACKET_sub_allocate_bytes_u8(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 1) +#define WPACKET_sub_allocate_bytes_u16(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 2) +#define WPACKET_sub_allocate_bytes_u24(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 3) +#define WPACKET_sub_allocate_bytes_u32(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 4) + +/* + * The same as WPACKET_allocate_bytes() except the reserved bytes are not + * actually counted as written. Typically this will be for when we don't know + * how big arbitrary data is going to be up front, but we do know what the + * maximum size will be. If this function is used, then it should be immediately + * followed by a WPACKET_allocate_bytes() call before any other WPACKET + * functions are called (unless the write to the allocated bytes is abandoned). + * + * For example: If we are generating a signature, then the size of that + * signature may not be known in advance. We can use WPACKET_reserve_bytes() to + * handle this: + * + * if (!WPACKET_sub_reserve_bytes_u16(&pkt, EVP_PKEY_get_size(pkey), &sigbytes1) + * || EVP_SignFinal(md_ctx, sigbytes1, &siglen, pkey) <= 0 + * || !WPACKET_sub_allocate_bytes_u16(&pkt, siglen, &sigbytes2) + * || sigbytes1 != sigbytes2) + * goto err; + */ +int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes); + +/* + * The "reserve_bytes" equivalent of WPACKET_sub_allocate_bytes__() + */ +int WPACKET_sub_reserve_bytes__(WPACKET *pkt, size_t len, + unsigned char **allocbytes, size_t lenbytes); + +/* + * Convenience macros for WPACKET_sub_reserve_bytes with different lengths + */ +#define WPACKET_sub_reserve_bytes_u8(pkt, len, bytes) \ + WPACKET_reserve_bytes__((pkt), (len), (bytes), 1) +#define WPACKET_sub_reserve_bytes_u16(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 2) +#define WPACKET_sub_reserve_bytes_u24(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 3) +#define WPACKET_sub_reserve_bytes_u32(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 4) + +/* + * Write the value stored in |val| into the WPACKET. The value will consume + * |bytes| amount of storage. An error will occur if |val| cannot be + * accommodated in |bytes| storage, e.g. attempting to write the value 256 into + * 1 byte will fail. Don't call this directly. Use the convenience macros below + * instead. + */ +int WPACKET_put_bytes__(WPACKET *pkt, uint64_t val, size_t bytes); + +/* + * Convenience macros for calling WPACKET_put_bytes with different + * lengths + */ +#define WPACKET_put_bytes_u8(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 1) +#define WPACKET_put_bytes_u16(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 2) +#define WPACKET_put_bytes_u24(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 3) +#define WPACKET_put_bytes_u32(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 4) +#define WPACKET_put_bytes_u64(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 8) + +/* Set a maximum size that we will not allow the WPACKET to grow beyond */ +int WPACKET_set_max_size(WPACKET *pkt, size_t maxsize); + +/* Copy |len| bytes of data from |*src| into the WPACKET. */ +int WPACKET_memcpy(WPACKET *pkt, const void *src, size_t len); + +/* Set |len| bytes of data to |ch| into the WPACKET. */ +int WPACKET_memset(WPACKET *pkt, int ch, size_t len); + +/* + * Copy |len| bytes of data from |*src| into the WPACKET and prefix with its + * length (consuming |lenbytes| of data for the length). Don't call this + * directly. Use the convenience macros below instead. + */ +int WPACKET_sub_memcpy__(WPACKET *pkt, const void *src, size_t len, + size_t lenbytes); + +/* Convenience macros for calling WPACKET_sub_memcpy with different lengths */ +#define WPACKET_sub_memcpy_u8(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 1) +#define WPACKET_sub_memcpy_u16(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 2) +#define WPACKET_sub_memcpy_u24(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 3) +#define WPACKET_sub_memcpy_u32(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 4) + +/* + * Return the total number of bytes written so far to the underlying buffer + * including any storage allocated for length bytes + */ +int WPACKET_get_total_written(WPACKET *pkt, size_t *written); + +/* + * Returns the length of the current sub-packet. This excludes any bytes + * allocated for the length itself. + */ +int WPACKET_get_length(WPACKET *pkt, size_t *len); + +/* + * Returns a pointer to the current write location, but does not allocate any + * bytes. + */ +unsigned char *WPACKET_get_curr(WPACKET *pkt); + +/* Returns true if the underlying buffer is actually NULL */ +int WPACKET_is_null_buf(WPACKET *pkt); + +/* Release resources in a WPACKET if a failure has occurred. */ +void WPACKET_cleanup(WPACKET *pkt); + +#endif /* OSSL_INTERNAL_PACKET_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/param_build_set.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/param_build_set.h new file mode 100644 index 00000000..126211b7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/param_build_set.h @@ -0,0 +1,46 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PARAM_BUILD_SET_H +# define OSSL_INTERNAL_PARAM_BUILD_SET_H +# pragma once + +# include +# include +# include "internal/cryptlib.h" + +typedef union { + OSSL_UNION_ALIGN; +} OSSL_PARAM_ALIGNED_BLOCK; + +# define OSSL_PARAM_ALIGN_SIZE sizeof(OSSL_PARAM_ALIGNED_BLOCK) + +size_t ossl_param_bytes_to_blocks(size_t bytes); +void ossl_param_set_secure_block(OSSL_PARAM *last, void *secure_buffer, + size_t secure_buffer_sz); + +int ossl_param_build_set_int(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, int num); +int ossl_param_build_set_long(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, long num); +int ossl_param_build_set_utf8_string(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const char *buf); +int ossl_param_build_set_octet_string(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, + const unsigned char *data, + size_t data_len); +int ossl_param_build_set_bn(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const BIGNUM *bn); +int ossl_param_build_set_bn_pad(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const BIGNUM *bn, size_t sz); +int ossl_param_build_set_multi_key_bn(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *names[], + STACK_OF(BIGNUM_const) *stk); + +#endif /* OSSL_INTERNAL_PARAM_BUILD_SET_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/passphrase.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/passphrase.h new file mode 100644 index 00000000..54d997b0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/passphrase.h @@ -0,0 +1,122 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PASSPHRASE_H +# define OSSL_INTERNAL_PASSPHRASE_H +# pragma once + +/* + * This is a passphrase reader bridge with bells and whistles. + * + * On one hand, an API may wish to offer all sorts of passphrase callback + * possibilities to users, or may have to do so for historical reasons. + * On the other hand, that same API may have demands from other interfaces, + * notably from the libcrypto <-> provider interface, which uses + * OSSL_PASSPHRASE_CALLBACK consistently. + * + * The structure and functions below are the fundaments for bridging one + * passphrase callback form to another. + * + * In addition, extra features are included (this may be a growing list): + * + * - password caching. This is to be used by APIs where it's likely + * that the same passphrase may be asked for more than once, but the + * user shouldn't get prompted more than once. For example, this is + * useful for OSSL_DECODER, which may have to use a passphrase while + * trying to find out what input it has. + */ + +/* + * Structure to hold whatever the calling user may specify. This structure + * is intended to be integrated into API specific structures or to be used + * as a local on-stack variable type. Therefore, no functions to allocate + * or freed it on the heap is offered. + */ +struct ossl_passphrase_data_st { + enum { + is_expl_passphrase = 1, /* Explicit passphrase given by user */ + is_pem_password, /* pem_password_cb given by user */ + is_ossl_passphrase, /* OSSL_PASSPHRASE_CALLBACK given by user */ + is_ui_method /* UI_METHOD given by user */ + } type; + union { + struct { + char *passphrase_copy; + size_t passphrase_len; + } expl_passphrase; + + struct { + pem_password_cb *password_cb; + void *password_cbarg; + } pem_password; + + struct { + OSSL_PASSPHRASE_CALLBACK *passphrase_cb; + void *passphrase_cbarg; + } ossl_passphrase; + + struct { + const UI_METHOD *ui_method; + void *ui_method_data; + } ui_method; + } _; + + /*- + * Flags section + */ + + /* Set to indicate that caching should be done */ + unsigned int flag_cache_passphrase:1; + + /*- + * Misc section: caches and other + */ + + char *cached_passphrase; + size_t cached_passphrase_len; +}; + +/* Structure manipulation */ + +void ossl_pw_clear_passphrase_data(struct ossl_passphrase_data_st *data); +void ossl_pw_clear_passphrase_cache(struct ossl_passphrase_data_st *data); + +int ossl_pw_set_passphrase(struct ossl_passphrase_data_st *data, + const unsigned char *passphrase, + size_t passphrase_len); +int ossl_pw_set_pem_password_cb(struct ossl_passphrase_data_st *data, + pem_password_cb *cb, void *cbarg); +int ossl_pw_set_ossl_passphrase_cb(struct ossl_passphrase_data_st *data, + OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg); +int ossl_pw_set_ui_method(struct ossl_passphrase_data_st *data, + const UI_METHOD *ui_method, void *ui_data); + +int ossl_pw_enable_passphrase_caching(struct ossl_passphrase_data_st *data); +int ossl_pw_disable_passphrase_caching(struct ossl_passphrase_data_st *data); + +/* Central function for direct calls */ + +int ossl_pw_get_passphrase(char *pass, size_t pass_size, size_t *pass_len, + const OSSL_PARAM params[], int verify, + struct ossl_passphrase_data_st *data); + +/* Callback functions */ + +/* + * All of these callback expect that the callback argument is a + * struct ossl_passphrase_data_st + */ + +pem_password_cb ossl_pw_pem_password; +pem_password_cb ossl_pw_pvk_password; +/* One callback for encoding (verification prompt) and one for decoding */ +OSSL_PASSPHRASE_CALLBACK ossl_pw_passphrase_callback_enc; +OSSL_PASSPHRASE_CALLBACK ossl_pw_passphrase_callback_dec; + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/property.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/property.h new file mode 100644 index 00000000..d09274d0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/property.h @@ -0,0 +1,99 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROPERTY_H +# define OSSL_INTERNAL_PROPERTY_H +# pragma once + +# include "internal/cryptlib.h" + +typedef struct ossl_method_store_st OSSL_METHOD_STORE; +typedef struct ossl_property_list_st OSSL_PROPERTY_LIST; + +typedef enum { + OSSL_PROPERTY_TYPE_STRING, OSSL_PROPERTY_TYPE_NUMBER, + OSSL_PROPERTY_TYPE_VALUE_UNDEFINED +} OSSL_PROPERTY_TYPE; +typedef struct ossl_property_definition_st OSSL_PROPERTY_DEFINITION; + +/* Initialisation */ +int ossl_property_parse_init(OSSL_LIB_CTX *ctx); + +/* Property definition parser */ +OSSL_PROPERTY_LIST *ossl_parse_property(OSSL_LIB_CTX *ctx, const char *defn); +/* Property query parser */ +OSSL_PROPERTY_LIST *ossl_parse_query(OSSL_LIB_CTX *ctx, const char *s, + int create_values); +/* Property checker of query vs definition */ +int ossl_property_match_count(const OSSL_PROPERTY_LIST *query, + const OSSL_PROPERTY_LIST *defn); +int ossl_property_is_enabled(OSSL_LIB_CTX *ctx, const char *property_name, + const OSSL_PROPERTY_LIST *prop_list); +/* Free a parsed property list */ +void ossl_property_free(OSSL_PROPERTY_LIST *p); + +/* Get a property from a property list */ +const OSSL_PROPERTY_DEFINITION * +ossl_property_find_property(const OSSL_PROPERTY_LIST *list, + OSSL_LIB_CTX *libctx, const char *name); +OSSL_PROPERTY_TYPE ossl_property_get_type(const OSSL_PROPERTY_DEFINITION *prop); +const char *ossl_property_get_string_value(OSSL_LIB_CTX *libctx, + const OSSL_PROPERTY_DEFINITION *prop); +int64_t ossl_property_get_number_value(const OSSL_PROPERTY_DEFINITION *prop); + + +/* Implementation store functions */ +OSSL_METHOD_STORE *ossl_method_store_new(OSSL_LIB_CTX *ctx); +void ossl_method_store_free(OSSL_METHOD_STORE *store); + +int ossl_method_lock_store(OSSL_METHOD_STORE *store); +int ossl_method_unlock_store(OSSL_METHOD_STORE *store); + +int ossl_method_store_add(OSSL_METHOD_STORE *store, const OSSL_PROVIDER *prov, + int nid, const char *properties, void *method, + int (*method_up_ref)(void *), + void (*method_destruct)(void *)); +int ossl_method_store_remove(OSSL_METHOD_STORE *store, int nid, + const void *method); +void ossl_method_store_do_all(OSSL_METHOD_STORE *store, + void (*fn)(int id, void *method, void *fnarg), + void *fnarg); +int ossl_method_store_fetch(OSSL_METHOD_STORE *store, + int nid, const char *prop_query, + const OSSL_PROVIDER **prov, void **method); +int ossl_method_store_remove_all_provided(OSSL_METHOD_STORE *store, + const OSSL_PROVIDER *prov); + +/* Get the global properties associate with the specified library context */ +OSSL_PROPERTY_LIST **ossl_ctx_global_properties(OSSL_LIB_CTX *ctx, + int loadconfig); + +/* property query cache functions */ +int ossl_method_store_cache_get(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov, + int nid, const char *prop_query, void **result); +int ossl_method_store_cache_set(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov, + int nid, const char *prop_query, void *result, + int (*method_up_ref)(void *), + void (*method_destruct)(void *)); + +__owur int ossl_method_store_cache_flush_all(OSSL_METHOD_STORE *store); + +/* Merge two property queries together */ +OSSL_PROPERTY_LIST *ossl_property_merge(const OSSL_PROPERTY_LIST *a, + const OSSL_PROPERTY_LIST *b); + +size_t ossl_property_list_to_string(OSSL_LIB_CTX *ctx, + const OSSL_PROPERTY_LIST *list, char *buf, + size_t bufsize); + +int ossl_global_properties_no_mirrored(OSSL_LIB_CTX *libctx); +void ossl_global_properties_stop_mirroring(OSSL_LIB_CTX *libctx); + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/propertyerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/propertyerr.h new file mode 100644 index 00000000..fbee53f1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/propertyerr.h @@ -0,0 +1,43 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROPERTYERR_H +# define OSSL_INTERNAL_PROPERTYERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PROP_strings(void); + +/* + * PROP reason codes. + */ +# define PROP_R_NAME_TOO_LONG 100 +# define PROP_R_NOT_AN_ASCII_CHARACTER 101 +# define PROP_R_NOT_AN_HEXADECIMAL_DIGIT 102 +# define PROP_R_NOT_AN_IDENTIFIER 103 +# define PROP_R_NOT_AN_OCTAL_DIGIT 104 +# define PROP_R_NOT_A_DECIMAL_DIGIT 105 +# define PROP_R_NO_MATCHING_STRING_DELIMITER 106 +# define PROP_R_NO_VALUE 107 +# define PROP_R_PARSE_FAILED 108 +# define PROP_R_STRING_TOO_LONG 109 +# define PROP_R_TRAILING_CHARACTERS 110 + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/provider.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/provider.h new file mode 100644 index 00000000..18937f84 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/provider.h @@ -0,0 +1,119 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROVIDER_H +# define OSSL_INTERNAL_PROVIDER_H +# pragma once + +# include +# include +# include "internal/dso.h" +# include "internal/symhacks.h" + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * namespaces: + * + * ossl_provider_ Provider Object internal API + * OSSL_PROVIDER Provider Object + */ + +/* Provider Object finder, constructor and destructor */ +OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name, + int noconfig); +OSSL_PROVIDER *ossl_provider_new(OSSL_LIB_CTX *libctx, const char *name, + OSSL_provider_init_fn *init_function, + int noconfig); +int ossl_provider_up_ref(OSSL_PROVIDER *prov); +void ossl_provider_free(OSSL_PROVIDER *prov); + +/* Setters */ +int ossl_provider_set_module_path(OSSL_PROVIDER *prov, const char *module_path); +int ossl_provider_add_parameter(OSSL_PROVIDER *prov, const char *name, + const char *value); + +int ossl_provider_is_child(const OSSL_PROVIDER *prov); +int ossl_provider_set_child(OSSL_PROVIDER *prov, const OSSL_CORE_HANDLE *handle); +const OSSL_CORE_HANDLE *ossl_provider_get_parent(OSSL_PROVIDER *prov); +int ossl_provider_up_ref_parent(OSSL_PROVIDER *prov, int activate); +int ossl_provider_free_parent(OSSL_PROVIDER *prov, int deactivate); +int ossl_provider_default_props_update(OSSL_LIB_CTX *libctx, const char *props); + +/* Disable fallback loading */ +int ossl_provider_disable_fallback_loading(OSSL_LIB_CTX *libctx); + +/* + * Activate the Provider + * If the Provider is a module, the module will be loaded + */ +int ossl_provider_activate(OSSL_PROVIDER *prov, int upcalls, int aschild); +int ossl_provider_deactivate(OSSL_PROVIDER *prov, int removechildren); +int ossl_provider_add_to_store(OSSL_PROVIDER *prov, OSSL_PROVIDER **actualprov, + int retain_fallbacks); + +/* Return pointer to the provider's context */ +void *ossl_provider_ctx(const OSSL_PROVIDER *prov); + +/* Iterate over all loaded providers */ +int ossl_provider_doall_activated(OSSL_LIB_CTX *, + int (*cb)(OSSL_PROVIDER *provider, + void *cbdata), + void *cbdata); + +/* Getters for other library functions */ +const char *ossl_provider_name(const OSSL_PROVIDER *prov); +const DSO *ossl_provider_dso(const OSSL_PROVIDER *prov); +const char *ossl_provider_module_name(const OSSL_PROVIDER *prov); +const char *ossl_provider_module_path(const OSSL_PROVIDER *prov); +void *ossl_provider_prov_ctx(const OSSL_PROVIDER *prov); +const OSSL_DISPATCH *ossl_provider_get0_dispatch(const OSSL_PROVIDER *prov); +OSSL_LIB_CTX *ossl_provider_libctx(const OSSL_PROVIDER *prov); + +/* Thin wrappers around calls to the provider */ +void ossl_provider_teardown(const OSSL_PROVIDER *prov); +const OSSL_PARAM *ossl_provider_gettable_params(const OSSL_PROVIDER *prov); +int ossl_provider_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]); +int ossl_provider_get_capabilities(const OSSL_PROVIDER *prov, + const char *capability, + OSSL_CALLBACK *cb, + void *arg); +int ossl_provider_self_test(const OSSL_PROVIDER *prov); +const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov, + int operation_id, + int *no_cache); +void ossl_provider_unquery_operation(const OSSL_PROVIDER *prov, + int operation_id, + const OSSL_ALGORITHM *algs); + +/* + * Cache of bits to see if we already added methods for an operation in + * the "permanent" method store. + * They should never be called for temporary method stores! + */ +int ossl_provider_set_operation_bit(OSSL_PROVIDER *provider, size_t bitnum); +int ossl_provider_test_operation_bit(OSSL_PROVIDER *provider, size_t bitnum, + int *result); + +/* Configuration */ +void ossl_provider_add_conf_module(void); + +/* Child providers */ +int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx, + const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +void ossl_provider_deinit_child(OSSL_LIB_CTX *ctx); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/refcount.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/refcount.h index 8fb536ea..3392d3b4 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/refcount.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/refcount.h @@ -1,35 +1,34 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #ifndef OSSL_INTERNAL_REFCOUNT_H # define OSSL_INTERNAL_REFCOUNT_H +# pragma once -/* Used to checking reference counts, most while doing perl5 stuff :-) */ -# if defined(OPENSSL_NO_STDIO) -# if defined(REF_PRINT) -# error "REF_PRINT requires stdio" +# include +# include + +# if defined(OPENSSL_THREADS) && !defined(OPENSSL_DEV_NO_ATOMICS) +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ + && !defined(__STDC_NO_ATOMICS__) +# include +# define HAVE_C11_ATOMICS # endif -# endif -# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ - && !defined(__STDC_NO_ATOMICS__) -# include -# define HAVE_C11_ATOMICS -# endif +# if defined(HAVE_C11_ATOMICS) && defined(ATOMIC_INT_LOCK_FREE) \ + && ATOMIC_INT_LOCK_FREE > 0 -# if defined(HAVE_C11_ATOMICS) && defined(ATOMIC_INT_LOCK_FREE) \ - && ATOMIC_INT_LOCK_FREE > 0 - -# define HAVE_ATOMICS 1 +# define HAVE_ATOMICS 1 typedef _Atomic int CRYPTO_REF_COUNT; -static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, void *lock) +static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, + ossl_unused void *lock) { *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1; return 1; @@ -45,7 +44,8 @@ static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, void *lock) * to mutable members doesn't have to be serialized anymore, which would * otherwise imply an acquire fence. Hence conditional acquire fence... */ -static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, void *lock) +static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, + ossl_unused void *lock) { *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1; if (*ret == 0) @@ -53,78 +53,108 @@ static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, void *lock) return 1; } -# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) && __GCC_ATOMIC_INT_LOCK_FREE > 0 +# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) && __GCC_ATOMIC_INT_LOCK_FREE > 0 -# define HAVE_ATOMICS 1 +# define HAVE_ATOMICS 1 typedef int CRYPTO_REF_COUNT; -static __inline__ int CRYPTO_UP_REF(int *val, int *ret, void *lock) +static __inline__ int CRYPTO_UP_REF(int *val, int *ret, ossl_unused void *lock) { *ret = __atomic_fetch_add(val, 1, __ATOMIC_RELAXED) + 1; return 1; } -static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, void *lock) +static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, + ossl_unused void *lock) { *ret = __atomic_fetch_sub(val, 1, __ATOMIC_RELAXED) - 1; if (*ret == 0) __atomic_thread_fence(__ATOMIC_ACQUIRE); return 1; } +# elif defined(__ICL) && defined(_WIN32) +# define HAVE_ATOMICS 1 +typedef volatile int CRYPTO_REF_COUNT; -# elif defined(_MSC_VER) && _MSC_VER>=1200 +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) +{ + *ret = _InterlockedExchangeAdd((void *)val, 1) + 1; + return 1; +} -# define HAVE_ATOMICS 1 +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) +{ + *ret = _InterlockedExchangeAdd((void *)val, -1) - 1; + return 1; +} + +# elif defined(_MSC_VER) && _MSC_VER>=1200 + +# define HAVE_ATOMICS 1 typedef volatile int CRYPTO_REF_COUNT; -# if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) -# include -# if defined(_M_ARM64) && !defined(_ARM_BARRIER_ISH) -# define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH -# endif +# if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) +# include +# if defined(_M_ARM64) && !defined(_ARM_BARRIER_ISH) +# define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH +# endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd_nf(val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd_nf(val, -1) - 1; if (*ret == 0) __dmb(_ARM_BARRIER_ISH); return 1; } -# else -# if !defined(_WIN32_WCE) -# pragma intrinsic(_InterlockedExchangeAdd) # else -# if _WIN32_WCE >= 0x600 - extern long __cdecl _InterlockedExchangeAdd(long volatile*, long); +# if !defined(_WIN32_WCE) +# pragma intrinsic(_InterlockedExchangeAdd) # else - /* under Windows CE we still have old-style Interlocked* functions */ - extern long __cdecl InterlockedExchangeAdd(long volatile*, long); -# define _InterlockedExchangeAdd InterlockedExchangeAdd +# if _WIN32_WCE >= 0x600 + extern long __cdecl _InterlockedExchangeAdd(long volatile*, long); +# else + /* under Windows CE we still have old-style Interlocked* functions */ + extern long __cdecl InterlockedExchangeAdd(long volatile*, long); +# define _InterlockedExchangeAdd InterlockedExchangeAdd +# endif # endif -# endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd(val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd(val, -1) - 1; return 1; } -# endif +# endif -# else +# endif +# endif /* !OPENSSL_DEV_NO_ATOMICS */ + +/* + * All the refcounting implementations above define HAVE_ATOMICS, so if it's + * still undefined here (such as when OPENSSL_DEV_NO_ATOMICS is defined), it + * means we need to implement a fallback. This fallback uses locks. + */ +# ifndef HAVE_ATOMICS typedef int CRYPTO_REF_COUNT; @@ -140,11 +170,9 @@ typedef int CRYPTO_REF_COUNT; # define REF_ASSERT_ISNT(i) # endif -# ifdef REF_PRINT -# define REF_PRINT_COUNT(a, b) \ - fprintf(stderr, "%p:%4d:%s\n", b, b->references, a) -# else -# define REF_PRINT_COUNT(a, b) -# endif +# define REF_PRINT_EX(text, count, object) \ + OSSL_TRACE3(REF_COUNT, "%p:%4d:%s\n", (object), (count), (text)); +# define REF_PRINT_COUNT(text, object) \ + REF_PRINT_EX(text, object->references, (void *)object) #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sha3.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sha3.h new file mode 100644 index 00000000..80ad86e5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sha3.h @@ -0,0 +1,54 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* This header can move into provider when legacy support is removed */ +#ifndef OSSL_INTERNAL_SHA3_H +# define OSSL_INTERNAL_SHA3_H +# pragma once + +# include +# include + +# define KECCAK1600_WIDTH 1600 +# define SHA3_MDSIZE(bitlen) (bitlen / 8) +# define KMAC_MDSIZE(bitlen) 2 * (bitlen / 8) +# define SHA3_BLOCKSIZE(bitlen) (KECCAK1600_WIDTH - bitlen * 2) / 8 + +typedef struct keccak_st KECCAK1600_CTX; + +typedef size_t (sha3_absorb_fn)(void *vctx, const void *inp, size_t len); +typedef int (sha3_final_fn)(unsigned char *md, void *vctx); + +typedef struct prov_sha3_meth_st +{ + sha3_absorb_fn *absorb; + sha3_final_fn *final; +} PROV_SHA3_METHOD; + +struct keccak_st { + uint64_t A[5][5]; + size_t block_size; /* cached ctx->digest->block_size */ + size_t md_size; /* output length, variable in XOF */ + size_t bufsz; /* used bytes in below buffer */ + unsigned char buf[KECCAK1600_WIDTH / 8 - 32]; + unsigned char pad; + PROV_SHA3_METHOD meth; +}; + +void ossl_sha3_reset(KECCAK1600_CTX *ctx); +int ossl_sha3_init(KECCAK1600_CTX *ctx, unsigned char pad, size_t bitlen); +int ossl_keccak_kmac_init(KECCAK1600_CTX *ctx, unsigned char pad, + size_t bitlen); +int ossl_sha3_update(KECCAK1600_CTX *ctx, const void *_inp, size_t len); +int ossl_sha3_final(unsigned char *md, KECCAK1600_CTX *ctx); + +size_t SHA3_absorb(uint64_t A[5][5], const unsigned char *inp, size_t len, + size_t r); + +#endif /* OSSL_INTERNAL_SHA3_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sizes.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sizes.h new file mode 100644 index 00000000..f6496c81 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sizes.h @@ -0,0 +1,22 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_SIZES_H +# define OSSL_INTERNAL_SIZES_H +# pragma once + +/* + * Max sizes used to allocate buffers with a fixed sizes, for example for + * stack allocations, structure fields, ... + */ +# define OSSL_MAX_NAME_SIZE 50 /* Algorithm name */ +# define OSSL_MAX_PROPQUERY_SIZE 256 /* Property query strings */ +# define OSSL_MAX_ALGORITHM_ID_SIZE 256 /* AlgorithmIdentifier DER */ + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm3.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sm3.h similarity index 56% rename from deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm3.h rename to deps/openssl/android/arm64-v8a/usr/local/include/internal/sm3.h index 97e74603..db1d61f0 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm3.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sm3.h @@ -1,15 +1,17 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2017 Ribose Inc. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef OSSL_CRYPTO_SM3_H -# define OSSL_CRYPTO_SM3_H +/* This header can move into provider when legacy support is removed */ +#ifndef OSSL_INTERNAL_SM3_H +# define OSSL_INTERNAL_SM3_H +# pragma once # include @@ -30,10 +32,8 @@ typedef struct SM3state_st { unsigned int num; } SM3_CTX; -int sm3_init(SM3_CTX *c); -int sm3_update(SM3_CTX *c, const void *data, size_t len); -int sm3_final(unsigned char *md, SM3_CTX *c); +int ossl_sm3_init(SM3_CTX *c); +int ossl_sm3_update(SM3_CTX *c, const void *data, size_t len); +int ossl_sm3_final(unsigned char *md, SM3_CTX *c); -void sm3_block_data_order(SM3_CTX *c, const void *p, size_t num); - -#endif +#endif /* OSSL_INTERNAL_SM3_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sockets.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sockets.h index 4fc1aecd..1f5fefcc 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sockets.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sockets.h @@ -1,15 +1,17 @@ /* * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ - #ifndef OSSL_INTERNAL_SOCKETS_H # define OSSL_INTERNAL_SOCKETS_H +# pragma once + +# include # if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) # define NO_SYS_PARAM_H @@ -26,6 +28,8 @@ # elif defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) # if defined(__DJGPP__) +# define WATT32 +# define WATT32_NO_OLDIES # include # include # include @@ -73,7 +77,7 @@ struct servent *PASCAL getservbyname(const char *, const char *); # include # else # include -# ifndef NO_SYS_UN_H +# if !defined(NO_SYS_UN_H) && defined(AF_UNIX) && !defined(OPENSSL_NO_UNIX_SOCK) # include # ifndef UNIX_PATH_MAX # define UNIX_PATH_MAX sizeof(((struct sockaddr_un *)NULL)->sun_path) @@ -121,6 +125,15 @@ struct servent *PASCAL getservbyname(const char *, const char *); # endif # endif +/* + * Some platforms define AF_UNIX, but don't support it + */ +# if !defined(OPENSSL_NO_UNIX_SOCK) +# if !defined(AF_UNIX) || defined(NO_SYS_UN_H) +# define OPENSSL_NO_UNIX_SOCK +# endif +# endif + # define get_last_socket_error() errno # define clear_socket_error() errno=0 @@ -132,8 +145,6 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define readsocket(s,b,n) recv((s),(b),(n),0) # define writesocket(s,b,n) send((s),(b),(n),0) # elif defined(__DJGPP__) -# define WATT32 -# define WATT32_NO_OLDIES # define closesocket(s) close_s(s) # define readsocket(s,b,n) read_s(s,b,n) # define writesocket(s,b,n) send(s,b,n,0) @@ -147,6 +158,17 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define closesocket(s) close(s) # define readsocket(s,b,n) read((s),(b),(n)) # define writesocket(s,b,n) write((s),(char *)(b),(n)) +# elif defined(OPENSSL_SYS_TANDEM) +# if defined(OPENSSL_TANDEM_FLOSS) +# include +# define readsocket(s,b,n) floss_read((s),(b),(n)) +# define writesocket(s,b,n) floss_write((s),(b),(n)) +# else +# define readsocket(s,b,n) read((s),(b),(n)) +# define writesocket(s,b,n) write((s),(b),(n)) +# endif +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# define closesocket(s) close(s) # else # define ioctlsocket(a,b,c) ioctl(a,b,c) # define closesocket(s) close(s) @@ -154,4 +176,11 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define writesocket(s,b,n) write((s),(b),(n)) # endif +/* also in apps/include/apps.h */ +# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINCE) +# define openssl_fdset(a, b) FD_SET((unsigned int)(a), b) +# else +# define openssl_fdset(a, b) FD_SET(a, b) +# endif + #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sslconf.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sslconf.h index 92c8941d..fd7f7e33 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sslconf.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sslconf.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_SSLCONF_H # define OSSL_INTERNAL_SSLCONF_H +# pragma once typedef struct ssl_conf_cmd_st SSL_CONF_CMD; diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/symhacks.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/symhacks.h new file mode 100644 index 00000000..33bae51e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/symhacks.h @@ -0,0 +1,27 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_SYMHACKS_H +# define OSSL_INTERNAL_SYMHACKS_H +# pragma once + +# include + +# if defined(OPENSSL_SYS_VMS) + +/* ossl_provider_gettable_params vs OSSL_PROVIDER_gettable_params */ +# undef ossl_provider_gettable_params +# define ossl_provider_gettable_params ossl_int_prov_gettable_params +/* ossl_provider_get_params vs OSSL_PROVIDER_get_params */ +# undef ossl_provider_get_params +# define ossl_provider_get_params ossl_int_prov_get_params + +# endif + +#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_once.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_once.h index 8f8aa6e1..d6cb2eee 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_once.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_once.h @@ -1,17 +1,28 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_INTERNAL_THREAD_ONCE_H +# define OSSL_INTERNAL_THREAD_ONCE_H +# pragma once + +# include +/* + * Initialisation of global data should never happen via "RUN_ONCE" inside the + * FIPS module. Global data should instead always be associated with a specific + * OSSL_LIB_CTX object. In this way data will get cleaned up correctly when the + * module gets unloaded. + */ +# if !defined(FIPS_MODULE) || defined(ALLOW_RUN_ONCE_IN_FIPS) /* * DEFINE_RUN_ONCE: Define an initialiser function that should be run exactly - * once. It takes no arguments and returns and int result (1 for success or + * once. It takes no arguments and returns an int result (1 for success or * 0 for failure). Typical usage might be: * * DEFINE_RUN_ONCE(myinitfunc) @@ -23,7 +34,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE(init) \ +# define DEFINE_RUN_ONCE(init) \ static int init(void); \ int init##_ossl_ret_ = 0; \ void init##_ossl_(void) \ @@ -36,14 +47,14 @@ * DECLARE_RUN_ONCE: Declare an initialiser function that should be run exactly * once that has been defined in another file via DEFINE_RUN_ONCE(). */ -#define DECLARE_RUN_ONCE(init) \ +# define DECLARE_RUN_ONCE(init) \ extern int init##_ossl_ret_; \ void init##_ossl_(void); /* * DEFINE_RUN_ONCE_STATIC: Define an initialiser function that should be run * exactly once. This function will be declared as static within the file. It - * takes no arguments and returns and int result (1 for success or 0 for + * takes no arguments and returns an int result (1 for success or 0 for * failure). Typical usage might be: * * DEFINE_RUN_ONCE_STATIC(myinitfunc) @@ -55,7 +66,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE_STATIC(init) \ +# define DEFINE_RUN_ONCE_STATIC(init) \ static int init(void); \ static int init##_ossl_ret_ = 0; \ static void init##_ossl_(void) \ @@ -96,7 +107,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE_STATIC_ALT(initalt, init) \ +# define DEFINE_RUN_ONCE_STATIC_ALT(initalt, init) \ static int initalt(void); \ static void initalt##_ossl_(void) \ { \ @@ -115,7 +126,7 @@ * * (*) by convention, since the init function must return 1 on success. */ -#define RUN_ONCE(once, init) \ +# define RUN_ONCE(once, init) \ (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0) /* @@ -133,5 +144,8 @@ * * (*) by convention, since the init function must return 1 on success. */ -#define RUN_ONCE_ALT(once, initalt, init) \ +# define RUN_ONCE_ALT(once, initalt, init) \ (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0) + +# endif /* FIPS_MODULE */ +#endif /* OSSL_INTERNAL_THREAD_ONCE_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/tlsgroups.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/tlsgroups.h new file mode 100644 index 00000000..8a35ced1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/tlsgroups.h @@ -0,0 +1,50 @@ +/* + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_TLSGROUPS_H +# define OSSL_INTERNAL_TLSGROUPS_H +# pragma once + +# define OSSL_TLS_GROUP_ID_sect163k1 0x0001 +# define OSSL_TLS_GROUP_ID_sect163r1 0x0002 +# define OSSL_TLS_GROUP_ID_sect163r2 0x0003 +# define OSSL_TLS_GROUP_ID_sect193r1 0x0004 +# define OSSL_TLS_GROUP_ID_sect193r2 0x0005 +# define OSSL_TLS_GROUP_ID_sect233k1 0x0006 +# define OSSL_TLS_GROUP_ID_sect233r1 0x0007 +# define OSSL_TLS_GROUP_ID_sect239k1 0x0008 +# define OSSL_TLS_GROUP_ID_sect283k1 0x0009 +# define OSSL_TLS_GROUP_ID_sect283r1 0x000A +# define OSSL_TLS_GROUP_ID_sect409k1 0x000B +# define OSSL_TLS_GROUP_ID_sect409r1 0x000C +# define OSSL_TLS_GROUP_ID_sect571k1 0x000D +# define OSSL_TLS_GROUP_ID_sect571r1 0x000E +# define OSSL_TLS_GROUP_ID_secp160k1 0x000F +# define OSSL_TLS_GROUP_ID_secp160r1 0x0010 +# define OSSL_TLS_GROUP_ID_secp160r2 0x0011 +# define OSSL_TLS_GROUP_ID_secp192k1 0x0012 +# define OSSL_TLS_GROUP_ID_secp192r1 0x0013 +# define OSSL_TLS_GROUP_ID_secp224k1 0x0014 +# define OSSL_TLS_GROUP_ID_secp224r1 0x0015 +# define OSSL_TLS_GROUP_ID_secp256k1 0x0016 +# define OSSL_TLS_GROUP_ID_secp256r1 0x0017 +# define OSSL_TLS_GROUP_ID_secp384r1 0x0018 +# define OSSL_TLS_GROUP_ID_secp521r1 0x0019 +# define OSSL_TLS_GROUP_ID_brainpoolP256r1 0x001A +# define OSSL_TLS_GROUP_ID_brainpoolP384r1 0x001B +# define OSSL_TLS_GROUP_ID_brainpoolP512r1 0x001C +# define OSSL_TLS_GROUP_ID_x25519 0x001D +# define OSSL_TLS_GROUP_ID_x448 0x001E +# define OSSL_TLS_GROUP_ID_ffdhe2048 0x0100 +# define OSSL_TLS_GROUP_ID_ffdhe3072 0x0101 +# define OSSL_TLS_GROUP_ID_ffdhe4096 0x0102 +# define OSSL_TLS_GROUP_ID_ffdhe6144 0x0103 +# define OSSL_TLS_GROUP_ID_ffdhe8192 0x0104 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/tsan_assist.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/tsan_assist.h index cc30162e..17205d10 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/tsan_assist.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/tsan_assist.h @@ -1,7 +1,7 @@ /* - * Copyright 2018-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -56,8 +56,7 @@ # define TSAN_QUALIFIER _Atomic # define tsan_load(ptr) atomic_load_explicit((ptr), memory_order_relaxed) # define tsan_store(ptr, val) atomic_store_explicit((ptr), (val), memory_order_relaxed) -# define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed) -# define tsan_decr(ptr) atomic_fetch_add_explicit((ptr), -1, memory_order_relaxed) +# define tsan_add(ptr, n) atomic_fetch_add_explicit((ptr), (n), memory_order_relaxed) # define tsan_ld_acq(ptr) atomic_load_explicit((ptr), memory_order_acquire) # define tsan_st_rel(ptr, val) atomic_store_explicit((ptr), (val), memory_order_release) # endif @@ -69,8 +68,7 @@ # define TSAN_QUALIFIER volatile # define tsan_load(ptr) __atomic_load_n((ptr), __ATOMIC_RELAXED) # define tsan_store(ptr, val) __atomic_store_n((ptr), (val), __ATOMIC_RELAXED) -# define tsan_counter(ptr) __atomic_fetch_add((ptr), 1, __ATOMIC_RELAXED) -# define tsan_decr(ptr) __atomic_fetch_add((ptr), -1, __ATOMIC_RELAXED) +# define tsan_add(ptr, n) __atomic_fetch_add((ptr), (n), __ATOMIC_RELAXED) # define tsan_ld_acq(ptr) __atomic_load_n((ptr), __ATOMIC_ACQUIRE) # define tsan_st_rel(ptr, val) __atomic_store_n((ptr), (val), __ATOMIC_RELEASE) # endif @@ -113,13 +111,10 @@ # pragma intrinsic(_InterlockedExchangeAdd) # ifdef _WIN64 # pragma intrinsic(_InterlockedExchangeAdd64) -# define tsan_counter(ptr) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), 1) \ - : _InterlockedExchangeAdd((ptr), 1)) -# define tsan_decr(ptr) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), -1) \ - : _InterlockedExchangeAdd((ptr), -1)) +# define tsan_add(ptr, n) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), (n)) \ + : _InterlockedExchangeAdd((ptr), (n))) # else -# define tsan_counter(ptr) _InterlockedExchangeAdd((ptr), 1) -# define tsan_decr(ptr) _InterlockedExchangeAdd((ptr), -1) +# define tsan_add(ptr, n) _InterlockedExchangeAdd((ptr), (n)) # endif # if !defined(_ISO_VOLATILE) # define tsan_ld_acq(ptr) (*(ptr)) @@ -130,11 +125,16 @@ #ifndef TSAN_QUALIFIER -# define TSAN_QUALIFIER volatile +# ifdef OPENSSL_THREADS +# define TSAN_QUALIFIER volatile +# define TSAN_REQUIRES_LOCKING +# else /* OPENSSL_THREADS */ +# define TSAN_QUALIFIER +# endif /* OPENSSL_THREADS */ + # define tsan_load(ptr) (*(ptr)) # define tsan_store(ptr, val) (*(ptr) = (val)) -# define tsan_counter(ptr) ((*(ptr))++) -# define tsan_decr(ptr) ((*(ptr))--) +# define tsan_add(ptr, n) (*(ptr) += (n)) /* * Lack of tsan_ld_acq and tsan_ld_rel means that compiler support is not * sophisticated enough to support them. Code that relies on them should be @@ -142,3 +142,7 @@ */ #endif + +#define tsan_counter(ptr) tsan_add((ptr), 1) +#define tsan_decr(ptr) tsan_add((ptr), -1) + diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/unicode.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/unicode.h new file mode 100644 index 00000000..a6de8352 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/unicode.h @@ -0,0 +1,31 @@ +/* + * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_UNICODE_H +# define OSSL_INTERNAL_UNICODE_H +# pragma once + +typedef enum { + SURROGATE_MIN = 0xd800UL, + SURROGATE_MAX = 0xdfffUL, + UNICODE_MAX = 0x10ffffUL, + UNICODE_LIMIT +} UNICODE_CONSTANTS; + +static ossl_unused ossl_inline int is_unicode_surrogate(unsigned long value) +{ + return value >= SURROGATE_MIN && value <= SURROGATE_MAX; +} + +static ossl_unused ossl_inline int is_unicode_valid(unsigned long value) +{ + return value <= UNICODE_MAX && !is_unicode_surrogate(value); +} + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H index ad0a5f56..d251d0a0 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H index 5f5513e8..91ac6b33 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/aes.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/aes.h index 245c552a..d0f9dfc6 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/aes.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/aes.h @@ -1,14 +1,20 @@ /* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_AES_H -# define HEADER_AES_H +#ifndef OPENSSL_AES_H +# define OPENSSL_AES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_AES_H +# endif # include @@ -17,72 +23,85 @@ extern "C" { # endif -# define AES_ENCRYPT 1 -# define AES_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ -# define AES_MAXNR 14 # define AES_BLOCK_SIZE 16 +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define AES_ENCRYPT 1 +# define AES_DECRYPT 0 + +# define AES_MAXNR 14 + + /* This should be a hidden type, but EVP requires that the size be known */ struct aes_key_st { -# ifdef AES_LONG +# ifdef AES_LONG unsigned long rd_key[4 * (AES_MAXNR + 1)]; -# else +# else unsigned int rd_key[4 * (AES_MAXNR + 1)]; -# endif +# endif int rounds; }; typedef struct aes_key_st AES_KEY; -const char *AES_options(void); - +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *AES_options(void); +OSSL_DEPRECATEDIN_3_0 int AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 int AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); - +OSSL_DEPRECATEDIN_3_0 void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); - +OSSL_DEPRECATEDIN_3_0 void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num); + /* NB: the IV is _two_ blocks long */ +OSSL_DEPRECATEDIN_3_0 void AES_ige_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); /* NB: the IV is _four_ blocks long */ +OSSL_DEPRECATEDIN_3_0 void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - const AES_KEY *key2, const unsigned char *ivec, - const int enc); - + size_t length, const AES_KEY *key, const AES_KEY *key2, + const unsigned char *ivec, const int enc); +OSSL_DEPRECATEDIN_3_0 int AES_wrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); + unsigned char *out, const unsigned char *in, + unsigned int inlen); +OSSL_DEPRECATEDIN_3_0 int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); + unsigned char *out, const unsigned char *in, + unsigned int inlen); +# endif # ifdef __cplusplus diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h index 9522eec1..85ae8d58 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h @@ -1,15 +1,29 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/asn1.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1_H -# define HEADER_ASN1_H + +#ifndef OPENSSL_ASN1_H +# define OPENSSL_ASN1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1_H +# endif + +# ifndef OPENSSL_NO_STDIO +# include +# endif # include # include # include @@ -18,10 +32,8 @@ # include # include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif +# include +# include # ifdef OPENSSL_BUILD_SHLIBCRYPTO # undef OPENSSL_EXTERN @@ -115,8 +127,36 @@ extern "C" { # define SMIME_OLDMIME 0x400 # define SMIME_CRLFEOL 0x800 # define SMIME_STREAM 0x1000 - struct X509_algor_st; -DEFINE_STACK_OF(X509_ALGOR) + +/* Stacks for types not otherwise defined in this header */ +SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) +#define sk_X509_ALGOR_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_value(sk, idx) ((X509_ALGOR *)OPENSSL_sk_value(ossl_check_const_X509_ALGOR_sk_type(sk), (idx))) +#define sk_X509_ALGOR_new(cmp) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new(ossl_check_X509_ALGOR_compfunc_type(cmp))) +#define sk_X509_ALGOR_new_null() ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_null()) +#define sk_X509_ALGOR_new_reserve(cmp, n) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_reserve(ossl_check_X509_ALGOR_compfunc_type(cmp), (n))) +#define sk_X509_ALGOR_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ALGOR_sk_type(sk), (n)) +#define sk_X509_ALGOR_free(sk) OPENSSL_sk_free(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_delete(sk, i) ((X509_ALGOR *)OPENSSL_sk_delete(ossl_check_X509_ALGOR_sk_type(sk), (i))) +#define sk_X509_ALGOR_delete_ptr(sk, ptr) ((X509_ALGOR *)OPENSSL_sk_delete_ptr(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr))) +#define sk_X509_ALGOR_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_pop(sk) ((X509_ALGOR *)OPENSSL_sk_pop(ossl_check_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_shift(sk) ((X509_ALGOR *)OPENSSL_sk_shift(ossl_check_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ALGOR_sk_type(sk),ossl_check_X509_ALGOR_freefunc_type(freefunc)) +#define sk_X509_ALGOR_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), (idx)) +#define sk_X509_ALGOR_set(sk, idx, ptr) ((X509_ALGOR *)OPENSSL_sk_set(ossl_check_X509_ALGOR_sk_type(sk), (idx), ossl_check_X509_ALGOR_type(ptr))) +#define sk_X509_ALGOR_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), pnum) +#define sk_X509_ALGOR_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_dup(sk) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_dup(ossl_check_const_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_copyfunc_type(copyfunc), ossl_check_X509_ALGOR_freefunc_type(freefunc))) +#define sk_X509_ALGOR_set_cmp_func(sk, cmp) ((sk_X509_ALGOR_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_compfunc_type(cmp))) + + # define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ /* @@ -183,15 +223,41 @@ typedef struct ASN1_ENCODING_st { (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) # define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) -typedef struct asn1_string_table_st { +struct asn1_string_table_st { int nid; long minsize; long maxsize; unsigned long mask; unsigned long flags; -} ASN1_STRING_TABLE; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING_TABLE, ASN1_STRING_TABLE, ASN1_STRING_TABLE) +#define sk_ASN1_STRING_TABLE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_value(sk, idx) ((ASN1_STRING_TABLE *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), (idx))) +#define sk_ASN1_STRING_TABLE_new(cmp) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp))) +#define sk_ASN1_STRING_TABLE_new_null() ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_STRING_TABLE_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_TABLE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (n)) +#define sk_ASN1_STRING_TABLE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_delete(sk, i) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (i))) +#define sk_ASN1_STRING_TABLE_delete_ptr(sk, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr))) +#define sk_ASN1_STRING_TABLE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_pop(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_shift(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk),ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc)) +#define sk_ASN1_STRING_TABLE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), (idx)) +#define sk_ASN1_STRING_TABLE_set(sk, idx, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_set(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (idx), ossl_check_ASN1_STRING_TABLE_type(ptr))) +#define sk_ASN1_STRING_TABLE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), pnum) +#define sk_ASN1_STRING_TABLE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_dup(sk) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc))) +#define sk_ASN1_STRING_TABLE_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_TABLE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp))) -DEFINE_STACK_OF(ASN1_STRING_TABLE) /* size limits: this stuff is taken straight from RFC2459 */ @@ -214,50 +280,79 @@ typedef struct ASN1_VALUE_st ASN1_VALUE; /* Declare ASN1 functions: the implement macro in in asn1t.h */ -# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ -# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) +# define DECLARE_ASN1_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_FUNCTIONS(type) \ + DECLARE_ASN1_FUNCTIONS_attr(extern, type) -# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) +# define DECLARE_ASN1_ALLOC_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_attr(extern, type) -# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + DECLARE_ASN1_ITEM_attr(attr, itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(extern, type, itname, name) -# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(const type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, name, name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_NDEF_FUNCTION(name) \ - int i2d_##name##_NDEF(name *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + attr type *d2i_##name(type **a, const unsigned char **in, long len); \ + attr int i2d_##name(const type *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(extern, type, name) -# define DECLARE_ASN1_FUNCTIONS_const(name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) +# define DECLARE_ASN1_NDEF_FUNCTION_attr(attr, name) \ + attr int i2d_##name##_NDEF(const name *a, unsigned char **out); +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + DECLARE_ASN1_NDEF_FUNCTION_attr(extern, name) -# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - type *name##_new(void); \ - void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + attr type *name##_new(void); \ + attr void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ - DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) +# define DECLARE_ASN1_DUP_FUNCTION_attr(attr, type) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, type) +# define DECLARE_ASN1_DUP_FUNCTION(type) \ + DECLARE_ASN1_DUP_FUNCTION_attr(extern, type) -# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx); +# define DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, name) \ + attr type *name##_dup(const type *a); +# define DECLARE_ASN1_DUP_FUNCTION_name(type, name) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(extern, type, name) + +# define DECLARE_ASN1_PRINT_FUNCTION_attr(attr, stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, stname) +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_attr(extern, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, fname) \ + attr int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx); +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(extern, stname, fname) # define D2I_OF(type) type *(*)(type **,const unsigned char **,long) -# define I2D_OF(type) int (*)(type *,unsigned char **) -# define I2D_OF_const(type) int (*)(const type *,unsigned char **) +# define I2D_OF(type) int (*)(const type *,unsigned char **) # define CHECKED_D2I_OF(type, d2i) \ ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) @@ -271,10 +366,11 @@ typedef struct ASN1_VALUE_st ASN1_VALUE; ((void**) (1 ? p : (type**)0)) # define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) -# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(const type *,unsigned char **) # define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) -TYPEDEF_D2I2D_OF(void); +typedef void *d2i_of_void(void **, const unsigned char **, long); +typedef int i2d_of_void(const void *, unsigned char **); /*- * The following macros and typedefs allow an ASN1_ITEM @@ -312,23 +408,6 @@ TYPEDEF_D2I2D_OF(void); * */ -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM ASN1_ITEM_EXP; - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) - -# define ASN1_ITEM_rptr(ref) (&(ref##_it)) - -# define DECLARE_ASN1_ITEM(name) \ - OPENSSL_EXTERN const ASN1_ITEM name##_it; - -# else /* * Platforms that can't easily handle shared global variables are declared as @@ -339,17 +418,17 @@ typedef const ASN1_ITEM ASN1_ITEM_EXP; typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); /* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr()) +# define ASN1_ITEM_ptr(iptr) (iptr()) /* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (iptr##_it) +# define ASN1_ITEM_ref(iptr) (iptr##_it) -# define ASN1_ITEM_rptr(ref) (ref##_it()) +# define ASN1_ITEM_rptr(ref) (ref##_it()) -# define DECLARE_ASN1_ITEM(name) \ - const ASN1_ITEM * name##_it(void); - -# endif +# define DECLARE_ASN1_ITEM_attr(attr, name) \ + attr const ASN1_ITEM * name##_it(void); +# define DECLARE_ASN1_ITEM(name) \ + DECLARE_ASN1_ITEM_attr(extern, name) /* Parameters used by ASN1_STRING_print_ex() */ @@ -362,6 +441,11 @@ typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); # define ASN1_STRFLGS_ESC_CTRL 2 # define ASN1_STRFLGS_ESC_MSB 4 +/* Lower 8 bits are reserved as an output type specifier */ +# define ASN1_DTFLGS_TYPE_MASK 0x0FUL +# define ASN1_DTFLGS_RFC822 0x00UL +# define ASN1_DTFLGS_ISO8601 0x01UL + /* * This flag determines how we do escaping: normally RC2253 backslash only, * set this to use backslash and quote. @@ -435,13 +519,8 @@ typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); ASN1_STRFLGS_DUMP_UNKNOWN | \ ASN1_STRFLGS_DUMP_DER) -DEFINE_STACK_OF(ASN1_INTEGER) -DEFINE_STACK_OF(ASN1_GENERALSTRING) - -DEFINE_STACK_OF(ASN1_UTF8STRING) - -typedef struct asn1_type_st { +struct asn1_type_st { int type; union { char *ptr; @@ -470,14 +549,40 @@ typedef struct asn1_type_st { ASN1_STRING *sequence; ASN1_VALUE *asn1_value; } value; -} ASN1_TYPE; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_TYPE, ASN1_TYPE, ASN1_TYPE) +#define sk_ASN1_TYPE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_value(sk, idx) ((ASN1_TYPE *)OPENSSL_sk_value(ossl_check_const_ASN1_TYPE_sk_type(sk), (idx))) +#define sk_ASN1_TYPE_new(cmp) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new(ossl_check_ASN1_TYPE_compfunc_type(cmp))) +#define sk_ASN1_TYPE_new_null() ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_TYPE_new_reserve(cmp, n) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_TYPE_compfunc_type(cmp), (n))) +#define sk_ASN1_TYPE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_TYPE_sk_type(sk), (n)) +#define sk_ASN1_TYPE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_delete(sk, i) ((ASN1_TYPE *)OPENSSL_sk_delete(ossl_check_ASN1_TYPE_sk_type(sk), (i))) +#define sk_ASN1_TYPE_delete_ptr(sk, ptr) ((ASN1_TYPE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr))) +#define sk_ASN1_TYPE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_pop(sk) ((ASN1_TYPE *)OPENSSL_sk_pop(ossl_check_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_shift(sk) ((ASN1_TYPE *)OPENSSL_sk_shift(ossl_check_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_TYPE_sk_type(sk),ossl_check_ASN1_TYPE_freefunc_type(freefunc)) +#define sk_ASN1_TYPE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), (idx)) +#define sk_ASN1_TYPE_set(sk, idx, ptr) ((ASN1_TYPE *)OPENSSL_sk_set(ossl_check_ASN1_TYPE_sk_type(sk), (idx), ossl_check_ASN1_TYPE_type(ptr))) +#define sk_ASN1_TYPE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), pnum) +#define sk_ASN1_TYPE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_dup(sk) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_copyfunc_type(copyfunc), ossl_check_ASN1_TYPE_freefunc_type(freefunc))) +#define sk_ASN1_TYPE_set_cmp_func(sk, cmp) ((sk_ASN1_TYPE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_compfunc_type(cmp))) -DEFINE_STACK_OF(ASN1_TYPE) typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) /* This is used to contain a list of bit names */ typedef struct BIT_STRING_BITNAME_st { @@ -515,7 +620,8 @@ typedef struct BIT_STRING_BITNAME_st { B_ASN1_BMPSTRING|\ B_ASN1_UTF8STRING -DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) +DECLARE_ASN1_ALLOC_FUNCTIONS_name(ASN1_TYPE, ASN1_TYPE) +DECLARE_ASN1_ENCODE_FUNCTIONS(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) int ASN1_TYPE_get(const ASN1_TYPE *a); void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); @@ -525,21 +631,41 @@ int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); -ASN1_OBJECT *ASN1_OBJECT_new(void); -void ASN1_OBJECT_free(ASN1_OBJECT *a); -int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); -ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, - long length); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_OBJECT, ASN1_OBJECT, ASN1_OBJECT) +#define sk_ASN1_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_value(sk, idx) ((ASN1_OBJECT *)OPENSSL_sk_value(ossl_check_const_ASN1_OBJECT_sk_type(sk), (idx))) +#define sk_ASN1_OBJECT_new(cmp) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new(ossl_check_ASN1_OBJECT_compfunc_type(cmp))) +#define sk_ASN1_OBJECT_new_null() ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_null()) +#define sk_ASN1_OBJECT_new_reserve(cmp, n) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_OBJECT_compfunc_type(cmp), (n))) +#define sk_ASN1_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_OBJECT_sk_type(sk), (n)) +#define sk_ASN1_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_delete(sk, i) ((ASN1_OBJECT *)OPENSSL_sk_delete(ossl_check_ASN1_OBJECT_sk_type(sk), (i))) +#define sk_ASN1_OBJECT_delete_ptr(sk, ptr) ((ASN1_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr))) +#define sk_ASN1_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_pop(sk) ((ASN1_OBJECT *)OPENSSL_sk_pop(ossl_check_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_shift(sk) ((ASN1_OBJECT *)OPENSSL_sk_shift(ossl_check_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_OBJECT_sk_type(sk),ossl_check_ASN1_OBJECT_freefunc_type(freefunc)) +#define sk_ASN1_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), (idx)) +#define sk_ASN1_OBJECT_set(sk, idx, ptr) ((ASN1_OBJECT *)OPENSSL_sk_set(ossl_check_ASN1_OBJECT_sk_type(sk), (idx), ossl_check_ASN1_OBJECT_type(ptr))) +#define sk_ASN1_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), pnum) +#define sk_ASN1_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_dup(sk) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_copyfunc_type(copyfunc), ossl_check_ASN1_OBJECT_freefunc_type(freefunc))) +#define sk_ASN1_OBJECT_set_cmp_func(sk, cmp) ((sk_ASN1_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_compfunc_type(cmp))) -DECLARE_ASN1_ITEM(ASN1_OBJECT) -DEFINE_STACK_OF(ASN1_OBJECT) +DECLARE_ASN1_FUNCTIONS(ASN1_OBJECT) ASN1_STRING *ASN1_STRING_new(void); void ASN1_STRING_free(ASN1_STRING *a); void ASN1_STRING_clear_free(ASN1_STRING *a); int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); -ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); +DECLARE_ASN1_DUP_FUNCTION(ASN1_STRING) ASN1_STRING *ASN1_STRING_type_new(int type); int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); /* @@ -549,9 +675,13 @@ int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); int ASN1_STRING_length(const ASN1_STRING *x); -void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# endif int ASN1_STRING_type(const ASN1_STRING *x); -DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 unsigned char *ASN1_STRING_data(ASN1_STRING *x); +# endif const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) @@ -567,10 +697,39 @@ int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, BIT_STRING_BITNAME *tbl); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_INTEGER, ASN1_INTEGER, ASN1_INTEGER) +#define sk_ASN1_INTEGER_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_value(sk, idx) ((ASN1_INTEGER *)OPENSSL_sk_value(ossl_check_const_ASN1_INTEGER_sk_type(sk), (idx))) +#define sk_ASN1_INTEGER_new(cmp) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new(ossl_check_ASN1_INTEGER_compfunc_type(cmp))) +#define sk_ASN1_INTEGER_new_null() ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_null()) +#define sk_ASN1_INTEGER_new_reserve(cmp, n) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_INTEGER_compfunc_type(cmp), (n))) +#define sk_ASN1_INTEGER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_INTEGER_sk_type(sk), (n)) +#define sk_ASN1_INTEGER_free(sk) OPENSSL_sk_free(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_delete(sk, i) ((ASN1_INTEGER *)OPENSSL_sk_delete(ossl_check_ASN1_INTEGER_sk_type(sk), (i))) +#define sk_ASN1_INTEGER_delete_ptr(sk, ptr) ((ASN1_INTEGER *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr))) +#define sk_ASN1_INTEGER_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_pop(sk) ((ASN1_INTEGER *)OPENSSL_sk_pop(ossl_check_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_shift(sk) ((ASN1_INTEGER *)OPENSSL_sk_shift(ossl_check_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_INTEGER_sk_type(sk),ossl_check_ASN1_INTEGER_freefunc_type(freefunc)) +#define sk_ASN1_INTEGER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), (idx)) +#define sk_ASN1_INTEGER_set(sk, idx, ptr) ((ASN1_INTEGER *)OPENSSL_sk_set(ossl_check_ASN1_INTEGER_sk_type(sk), (idx), ossl_check_ASN1_INTEGER_type(ptr))) +#define sk_ASN1_INTEGER_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), pnum) +#define sk_ASN1_INTEGER_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_dup(sk) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_dup(ossl_check_const_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_copyfunc_type(copyfunc), ossl_check_ASN1_INTEGER_freefunc_type(freefunc))) +#define sk_ASN1_INTEGER_set_cmp_func(sk, cmp) ((sk_ASN1_INTEGER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_compfunc_type(cmp))) + + + DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, long length); -ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); +DECLARE_ASN1_DUP_FUNCTION(ASN1_INTEGER) int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) @@ -594,12 +753,40 @@ int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, const ASN1_TIME *to); DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) -ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); +DECLARE_ASN1_DUP_FUNCTION(ASN1_OCTET_STRING) int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, const ASN1_OCTET_STRING *b); int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, int len); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_UTF8STRING, ASN1_UTF8STRING, ASN1_UTF8STRING) +#define sk_ASN1_UTF8STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_value(sk, idx) ((ASN1_UTF8STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), (idx))) +#define sk_ASN1_UTF8STRING_new(cmp) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp))) +#define sk_ASN1_UTF8STRING_new_null() ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_UTF8STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_UTF8STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_UTF8STRING_sk_type(sk), (n)) +#define sk_ASN1_UTF8STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_delete(sk, i) ((ASN1_UTF8STRING *)OPENSSL_sk_delete(ossl_check_ASN1_UTF8STRING_sk_type(sk), (i))) +#define sk_ASN1_UTF8STRING_delete_ptr(sk, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr))) +#define sk_ASN1_UTF8STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_pop(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_pop(ossl_check_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_shift(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_shift(ossl_check_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_UTF8STRING_sk_type(sk),ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc)) +#define sk_ASN1_UTF8STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), (idx)) +#define sk_ASN1_UTF8STRING_set(sk, idx, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_set(ossl_check_ASN1_UTF8STRING_sk_type(sk), (idx), ossl_check_ASN1_UTF8STRING_type(ptr))) +#define sk_ASN1_UTF8STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), pnum) +#define sk_ASN1_UTF8STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_dup(sk) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_copyfunc_type(copyfunc), ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc))) +#define sk_ASN1_UTF8STRING_set_cmp_func(sk, cmp) ((sk_ASN1_UTF8STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) @@ -609,6 +796,34 @@ DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) int UTF8_getc(const unsigned char *str, int len, unsigned long *val); int UTF8_putc(unsigned char *str, int len, unsigned long value); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_GENERALSTRING, ASN1_GENERALSTRING, ASN1_GENERALSTRING) +#define sk_ASN1_GENERALSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_value(sk, idx) ((ASN1_GENERALSTRING *)OPENSSL_sk_value(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), (idx))) +#define sk_ASN1_GENERALSTRING_new(cmp) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp))) +#define sk_ASN1_GENERALSTRING_new_null() ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_GENERALSTRING_new_reserve(cmp, n) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp), (n))) +#define sk_ASN1_GENERALSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (n)) +#define sk_ASN1_GENERALSTRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_delete(sk, i) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (i))) +#define sk_ASN1_GENERALSTRING_delete_ptr(sk, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr))) +#define sk_ASN1_GENERALSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_pop(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_pop(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_shift(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_shift(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk),ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc)) +#define sk_ASN1_GENERALSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), (idx)) +#define sk_ASN1_GENERALSTRING_set(sk, idx, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_set(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (idx), ossl_check_ASN1_GENERALSTRING_type(ptr))) +#define sk_ASN1_GENERALSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), pnum) +#define sk_ASN1_GENERALSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_dup(sk) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_copyfunc_type(copyfunc), ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc))) +#define sk_ASN1_GENERALSTRING_set_cmp_func(sk, cmp) ((sk_ASN1_GENERALSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) @@ -621,6 +836,10 @@ DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) DECLARE_ASN1_FUNCTIONS(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_UTCTIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_GENERALIZEDTIME) + DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); @@ -685,19 +904,23 @@ int ASN1_put_eoc(unsigned char **pp); int ASN1_object_size(int constructed, int length, int tag); /* Used to implement other functions */ -void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, const void *x); # define ASN1_dup_of(type,i2d,d2i,x) \ ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_dup_of_const(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ CHECKED_D2I_OF(type, d2i), \ CHECKED_PTR_OF(const type, x))) -void *ASN1_item_dup(const ASN1_ITEM *it, void *x); +void *ASN1_item_dup(const ASN1_ITEM *it, const void *x); +int ASN1_item_sign_ex(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, const ASN1_OCTET_STRING *id, + EVP_PKEY *pkey, const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); +int ASN1_item_verify_ex(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + const ASN1_OCTET_STRING *id, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); /* ASN1 alloc/free macros for when a type is only used internally */ @@ -714,20 +937,17 @@ void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); in, \ CHECKED_PPTR_OF(type, x))) +void *ASN1_item_d2i_fp_ex(const ASN1_ITEM *it, FILE *in, void *x, + OSSL_LIB_CTX *libctx, const char *propq); void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); -int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, const void *x); # define ASN1_i2d_fp_of(type,i2d,out,x) \ (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ out, \ CHECKED_PTR_OF(const type, x))) -int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, const void *x); int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); # endif @@ -741,23 +961,22 @@ void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); in, \ CHECKED_PPTR_OF(type, x))) -void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); -int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); +void *ASN1_item_d2i_bio_ex(const ASN1_ITEM *it, BIO *in, void *pval, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *pval); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, const void *x); # define ASN1_i2d_bio_of(type,i2d,out,x) \ (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ out, \ CHECKED_PTR_OF(const type, x))) -int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, const void *x); +BIO *ASN1_item_i2d_mem_bio(const ASN1_ITEM *it, const ASN1_VALUE *val); int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); -int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); +int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm); +int ASN1_TIME_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); @@ -804,11 +1023,16 @@ void ASN1_STRING_TABLE_cleanup(void); /* Old API compatible functions */ ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_new_ex(const ASN1_ITEM *it, OSSL_LIB_CTX *libctx, + const char *propq); void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i_ex(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it); -int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); -int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, +int ASN1_item_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); void ASN1_add_oid_module(void); @@ -839,7 +1063,7 @@ int ASN1_str2mask(const char *str, unsigned long *pmask); /* Don't show structure name even at top level */ # define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 -int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, +int ASN1_item_print(BIO *out, const ASN1_VALUE *ifld, int indent, const ASN1_ITEM *it, const ASN1_PCTX *pctx); ASN1_PCTX *ASN1_PCTX_new(void); void ASN1_PCTX_free(ASN1_PCTX *p); @@ -864,22 +1088,43 @@ void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); const BIO_METHOD *BIO_f_asn1(void); +/* cannot constify val because of CMS_stream() */ BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const ASN1_ITEM *it); int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const char *hdr, const ASN1_ITEM *it); +/* cannot constify val because of CMS_dataFinal() */ int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, int ctype_nid, int econt_nid, STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +int SMIME_write_ASN1_ex(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1_ex(BIO *bio, int flags, BIO **bcont, + const ASN1_ITEM *it, ASN1_VALUE **x, + OSSL_LIB_CTX *libctx, const char *propq); int SMIME_crlf_copy(BIO *in, BIO *out, int flags); int SMIME_text(BIO *in, BIO *out); const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); const ASN1_ITEM *ASN1_ITEM_get(size_t i); +/* Legacy compatibility */ +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_const(type) DECLARE_ASN1_FUNCTIONS(type) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name) +# define I2D_OF_const(type) I2D_OF(type) +# define ASN1_dup_of_const(type,i2d,d2i,x) ASN1_dup_of(type,i2d,d2i,x) +# define ASN1_i2d_fp_of_const(type,i2d,out,x) ASN1_i2d_fp_of(type,i2d,out,x) +# define ASN1_i2d_bio_of_const(type,i2d,out,x) ASN1_i2d_bio_of(type,i2d,out,x) + # ifdef __cplusplus } # endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h.in new file mode 100644 index 00000000..d478bc96 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h.in @@ -0,0 +1,964 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ASN1_H +# define OPENSSL_ASN1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1_H +# endif + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include +# include +# include + +# include +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define V_ASN1_UNIVERSAL 0x00 +# define V_ASN1_APPLICATION 0x40 +# define V_ASN1_CONTEXT_SPECIFIC 0x80 +# define V_ASN1_PRIVATE 0xc0 + +# define V_ASN1_CONSTRUCTED 0x20 +# define V_ASN1_PRIMITIVE_TAG 0x1f +# define V_ASN1_PRIMATIVE_TAG /*compat*/ V_ASN1_PRIMITIVE_TAG + +# define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ +# define V_ASN1_OTHER -3/* used in ASN1_TYPE */ +# define V_ASN1_ANY -4/* used in ASN1 template code */ + +# define V_ASN1_UNDEF -1 +/* ASN.1 tag values */ +# define V_ASN1_EOC 0 +# define V_ASN1_BOOLEAN 1 /**/ +# define V_ASN1_INTEGER 2 +# define V_ASN1_BIT_STRING 3 +# define V_ASN1_OCTET_STRING 4 +# define V_ASN1_NULL 5 +# define V_ASN1_OBJECT 6 +# define V_ASN1_OBJECT_DESCRIPTOR 7 +# define V_ASN1_EXTERNAL 8 +# define V_ASN1_REAL 9 +# define V_ASN1_ENUMERATED 10 +# define V_ASN1_UTF8STRING 12 +# define V_ASN1_SEQUENCE 16 +# define V_ASN1_SET 17 +# define V_ASN1_NUMERICSTRING 18 /**/ +# define V_ASN1_PRINTABLESTRING 19 +# define V_ASN1_T61STRING 20 +# define V_ASN1_TELETEXSTRING 20/* alias */ +# define V_ASN1_VIDEOTEXSTRING 21 /**/ +# define V_ASN1_IA5STRING 22 +# define V_ASN1_UTCTIME 23 +# define V_ASN1_GENERALIZEDTIME 24 /**/ +# define V_ASN1_GRAPHICSTRING 25 /**/ +# define V_ASN1_ISO64STRING 26 /**/ +# define V_ASN1_VISIBLESTRING 26/* alias */ +# define V_ASN1_GENERALSTRING 27 /**/ +# define V_ASN1_UNIVERSALSTRING 28 /**/ +# define V_ASN1_BMPSTRING 30 + +/* + * NB the constants below are used internally by ASN1_INTEGER + * and ASN1_ENUMERATED to indicate the sign. They are *not* on + * the wire tag values. + */ + +# define V_ASN1_NEG 0x100 +# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) +# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) + +/* For use with d2i_ASN1_type_bytes() */ +# define B_ASN1_NUMERICSTRING 0x0001 +# define B_ASN1_PRINTABLESTRING 0x0002 +# define B_ASN1_T61STRING 0x0004 +# define B_ASN1_TELETEXSTRING 0x0004 +# define B_ASN1_VIDEOTEXSTRING 0x0008 +# define B_ASN1_IA5STRING 0x0010 +# define B_ASN1_GRAPHICSTRING 0x0020 +# define B_ASN1_ISO64STRING 0x0040 +# define B_ASN1_VISIBLESTRING 0x0040 +# define B_ASN1_GENERALSTRING 0x0080 +# define B_ASN1_UNIVERSALSTRING 0x0100 +# define B_ASN1_OCTET_STRING 0x0200 +# define B_ASN1_BIT_STRING 0x0400 +# define B_ASN1_BMPSTRING 0x0800 +# define B_ASN1_UNKNOWN 0x1000 +# define B_ASN1_UTF8STRING 0x2000 +# define B_ASN1_UTCTIME 0x4000 +# define B_ASN1_GENERALIZEDTIME 0x8000 +# define B_ASN1_SEQUENCE 0x10000 +/* For use with ASN1_mbstring_copy() */ +# define MBSTRING_FLAG 0x1000 +# define MBSTRING_UTF8 (MBSTRING_FLAG) +# define MBSTRING_ASC (MBSTRING_FLAG|1) +# define MBSTRING_BMP (MBSTRING_FLAG|2) +# define MBSTRING_UNIV (MBSTRING_FLAG|4) +# define SMIME_OLDMIME 0x400 +# define SMIME_CRLFEOL 0x800 +# define SMIME_STREAM 0x1000 + +/* Stacks for types not otherwise defined in this header */ +{- + generate_stack_macros("X509_ALGOR"); +-} + + +# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +/* + * This indicates that the ASN1_STRING is not a real value but just a place + * holder for the location where indefinite length constructed data should be + * inserted in the memory buffer + */ +# define ASN1_STRING_FLAG_NDEF 0x010 + +/* + * This flag is used by the CMS code to indicate that a string is not + * complete and is a place holder for content when it had all been accessed. + * The flag will be reset when content has been written to it. + */ + +# define ASN1_STRING_FLAG_CONT 0x020 +/* + * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING + * type. + */ +# define ASN1_STRING_FLAG_MSTRING 0x040 +/* String is embedded and only content should be freed */ +# define ASN1_STRING_FLAG_EMBED 0x080 +/* String should be parsed in RFC 5280's time format */ +# define ASN1_STRING_FLAG_X509_TIME 0x100 +/* This is the base type that holds just about everything :-) */ +struct asn1_string_st { + int length; + int type; + unsigned char *data; + /* + * The value of the following field depends on the type being held. It + * is mostly being used for BIT_STRING so if the input data has a + * non-zero 'unused bits' value, it will be handled correctly + */ + long flags; +}; + +/* + * ASN1_ENCODING structure: this is used to save the received encoding of an + * ASN1 type. This is useful to get round problems with invalid encodings + * which can break signatures. + */ + +typedef struct ASN1_ENCODING_st { + unsigned char *enc; /* DER encoding */ + long len; /* Length of encoding */ + int modified; /* set to 1 if 'enc' is invalid */ +} ASN1_ENCODING; + +/* Used with ASN1 LONG type: if a long is set to this it is omitted */ +# define ASN1_LONG_UNDEF 0x7fffffffL + +# define STABLE_FLAGS_MALLOC 0x01 +/* + * A zero passed to ASN1_STRING_TABLE_new_add for the flags is interpreted + * as "don't change" and STABLE_FLAGS_MALLOC is always set. By setting + * STABLE_FLAGS_MALLOC only we can clear the existing value. Use the alias + * STABLE_FLAGS_CLEAR to reflect this. + */ +# define STABLE_FLAGS_CLEAR STABLE_FLAGS_MALLOC +# define STABLE_NO_MASK 0x02 +# define DIRSTRING_TYPE \ + (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) +# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) + +struct asn1_string_table_st { + int nid; + long minsize; + long maxsize; + unsigned long mask; + unsigned long flags; +}; + +{- + generate_stack_macros("ASN1_STRING_TABLE"); +-} + +/* size limits: this stuff is taken straight from RFC2459 */ + +# define ub_name 32768 +# define ub_common_name 64 +# define ub_locality_name 128 +# define ub_state_name 128 +# define ub_organization_name 64 +# define ub_organization_unit_name 64 +# define ub_title 64 +# define ub_email_address 128 + +/* + * Declarations for template structures: for full definitions see asn1t.h + */ +typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; +typedef struct ASN1_TLC_st ASN1_TLC; +/* This is just an opaque pointer */ +typedef struct ASN1_VALUE_st ASN1_VALUE; + +/* Declare ASN1 functions: the implement macro in in asn1t.h */ + +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ + +# define DECLARE_ASN1_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_FUNCTIONS(type) \ + DECLARE_ASN1_FUNCTIONS_attr(extern, type) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_attr(extern, type) + +# define DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + DECLARE_ASN1_ITEM_attr(attr, itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(extern, type, itname, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, name, name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + attr type *d2i_##name(type **a, const unsigned char **in, long len); \ + attr int i2d_##name(const type *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(extern, type, name) + +# define DECLARE_ASN1_NDEF_FUNCTION_attr(attr, name) \ + attr int i2d_##name##_NDEF(const name *a, unsigned char **out); +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + DECLARE_ASN1_NDEF_FUNCTION_attr(extern, name) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + attr type *name##_new(void); \ + attr void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_DUP_FUNCTION_attr(attr, type) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, type) +# define DECLARE_ASN1_DUP_FUNCTION(type) \ + DECLARE_ASN1_DUP_FUNCTION_attr(extern, type) + +# define DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, name) \ + attr type *name##_dup(const type *a); +# define DECLARE_ASN1_DUP_FUNCTION_name(type, name) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(extern, type, name) + +# define DECLARE_ASN1_PRINT_FUNCTION_attr(attr, stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, stname) +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_attr(extern, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, fname) \ + attr int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx); +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(extern, stname, fname) + +# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) +# define I2D_OF(type) int (*)(const type *,unsigned char **) + +# define CHECKED_D2I_OF(type, d2i) \ + ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) +# define CHECKED_I2D_OF(type, i2d) \ + ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) +# define CHECKED_NEW_OF(type, xnew) \ + ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) +# define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +# define CHECKED_PPTR_OF(type, p) \ + ((void**) (1 ? p : (type**)0)) + +# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(const type *,unsigned char **) +# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) + +typedef void *d2i_of_void(void **, const unsigned char **, long); +typedef int i2d_of_void(const void *, unsigned char **); + +/*- + * The following macros and typedefs allow an ASN1_ITEM + * to be embedded in a structure and referenced. Since + * the ASN1_ITEM pointers need to be globally accessible + * (possibly from shared libraries) they may exist in + * different forms. On platforms that support it the + * ASN1_ITEM structure itself will be globally exported. + * Other platforms will export a function that returns + * an ASN1_ITEM pointer. + * + * To handle both cases transparently the macros below + * should be used instead of hard coding an ASN1_ITEM + * pointer in a structure. + * + * The structure will look like this: + * + * typedef struct SOMETHING_st { + * ... + * ASN1_ITEM_EXP *iptr; + * ... + * } SOMETHING; + * + * It would be initialised as e.g.: + * + * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; + * + * and the actual pointer extracted with: + * + * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); + * + * Finally an ASN1_ITEM pointer can be extracted from an + * appropriate reference with: ASN1_ITEM_rptr(X509). This + * would be used when a function takes an ASN1_ITEM * argument. + * + */ + + +/* + * Platforms that can't easily handle shared global variables are declared as + * functions returning ASN1_ITEM pointers. + */ + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr()) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (iptr##_it) + +# define ASN1_ITEM_rptr(ref) (ref##_it()) + +# define DECLARE_ASN1_ITEM_attr(attr, name) \ + attr const ASN1_ITEM * name##_it(void); +# define DECLARE_ASN1_ITEM(name) \ + DECLARE_ASN1_ITEM_attr(extern, name) + +/* Parameters used by ASN1_STRING_print_ex() */ + +/* + * These determine which characters to escape: RFC2253 special characters, + * control characters and MSB set characters + */ + +# define ASN1_STRFLGS_ESC_2253 1 +# define ASN1_STRFLGS_ESC_CTRL 2 +# define ASN1_STRFLGS_ESC_MSB 4 + +/* Lower 8 bits are reserved as an output type specifier */ +# define ASN1_DTFLGS_TYPE_MASK 0x0FUL +# define ASN1_DTFLGS_RFC822 0x00UL +# define ASN1_DTFLGS_ISO8601 0x01UL + +/* + * This flag determines how we do escaping: normally RC2253 backslash only, + * set this to use backslash and quote. + */ + +# define ASN1_STRFLGS_ESC_QUOTE 8 + +/* These three flags are internal use only. */ + +/* Character is a valid PrintableString character */ +# define CHARTYPE_PRINTABLESTRING 0x10 +/* Character needs escaping if it is the first character */ +# define CHARTYPE_FIRST_ESC_2253 0x20 +/* Character needs escaping if it is the last character */ +# define CHARTYPE_LAST_ESC_2253 0x40 + +/* + * NB the internal flags are safely reused below by flags handled at the top + * level. + */ + +/* + * If this is set we convert all character strings to UTF8 first + */ + +# define ASN1_STRFLGS_UTF8_CONVERT 0x10 + +/* + * If this is set we don't attempt to interpret content: just assume all + * strings are 1 byte per character. This will produce some pretty odd + * looking output! + */ + +# define ASN1_STRFLGS_IGNORE_TYPE 0x20 + +/* If this is set we include the string type in the output */ +# define ASN1_STRFLGS_SHOW_TYPE 0x40 + +/* + * This determines which strings to display and which to 'dump' (hex dump of + * content octets or DER encoding). We can only dump non character strings or + * everything. If we don't dump 'unknown' they are interpreted as character + * strings with 1 octet per character and are subject to the usual escaping + * options. + */ + +# define ASN1_STRFLGS_DUMP_ALL 0x80 +# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 + +/* + * These determine what 'dumping' does, we can dump the content octets or the + * DER encoding: both use the RFC2253 #XXXXX notation. + */ + +# define ASN1_STRFLGS_DUMP_DER 0x200 + +/* + * This flag specifies that RC2254 escaping shall be performed. + */ +#define ASN1_STRFLGS_ESC_2254 0x400 + +/* + * All the string flags consistent with RFC2253, escaping control characters + * isn't essential in RFC2253 but it is advisable anyway. + */ + +# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ + ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + ASN1_STRFLGS_UTF8_CONVERT | \ + ASN1_STRFLGS_DUMP_UNKNOWN | \ + ASN1_STRFLGS_DUMP_DER) + + +struct asn1_type_st { + int type; + union { + char *ptr; + ASN1_BOOLEAN boolean; + ASN1_STRING *asn1_string; + ASN1_OBJECT *object; + ASN1_INTEGER *integer; + ASN1_ENUMERATED *enumerated; + ASN1_BIT_STRING *bit_string; + ASN1_OCTET_STRING *octet_string; + ASN1_PRINTABLESTRING *printablestring; + ASN1_T61STRING *t61string; + ASN1_IA5STRING *ia5string; + ASN1_GENERALSTRING *generalstring; + ASN1_BMPSTRING *bmpstring; + ASN1_UNIVERSALSTRING *universalstring; + ASN1_UTCTIME *utctime; + ASN1_GENERALIZEDTIME *generalizedtime; + ASN1_VISIBLESTRING *visiblestring; + ASN1_UTF8STRING *utf8string; + /* + * set and sequence are left complete and still contain the set or + * sequence bytes + */ + ASN1_STRING *set; + ASN1_STRING *sequence; + ASN1_VALUE *asn1_value; + } value; +}; + +{- + generate_stack_macros("ASN1_TYPE"); +-} + +typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; + +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) + +/* This is used to contain a list of bit names */ +typedef struct BIT_STRING_BITNAME_st { + int bitnum; + const char *lname; + const char *sname; +} BIT_STRING_BITNAME; + +# define B_ASN1_TIME \ + B_ASN1_UTCTIME | \ + B_ASN1_GENERALIZEDTIME + +# define B_ASN1_PRINTABLE \ + B_ASN1_NUMERICSTRING| \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_T61STRING| \ + B_ASN1_IA5STRING| \ + B_ASN1_BIT_STRING| \ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING|\ + B_ASN1_SEQUENCE|\ + B_ASN1_UNKNOWN + +# define B_ASN1_DIRECTORYSTRING \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_TELETEXSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_UTF8STRING + +# define B_ASN1_DISPLAYTEXT \ + B_ASN1_IA5STRING| \ + B_ASN1_VISIBLESTRING| \ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING + +DECLARE_ASN1_ALLOC_FUNCTIONS_name(ASN1_TYPE, ASN1_TYPE) +DECLARE_ASN1_ENCODE_FUNCTIONS(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) + +int ASN1_TYPE_get(const ASN1_TYPE *a); +void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); +int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); +int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); + +ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); +void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); + +{- + generate_stack_macros("ASN1_OBJECT"); +-} + +DECLARE_ASN1_FUNCTIONS(ASN1_OBJECT) + +ASN1_STRING *ASN1_STRING_new(void); +void ASN1_STRING_free(ASN1_STRING *a); +void ASN1_STRING_clear_free(ASN1_STRING *a); +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); +DECLARE_ASN1_DUP_FUNCTION(ASN1_STRING) +ASN1_STRING *ASN1_STRING_type_new(int type); +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); + /* + * Since this is used to store all sorts of things, via macros, for now, + * make its data void * + */ +int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); +int ASN1_STRING_length(const ASN1_STRING *x); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# endif +int ASN1_STRING_type(const ASN1_STRING *x); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 unsigned char *ASN1_STRING_data(ASN1_STRING *x); +# endif +const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); + +DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) +int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); +int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); +int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n); +int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, + const unsigned char *flags, int flags_len); + +int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, + BIT_STRING_BITNAME *tbl, int indent); +int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, + BIT_STRING_BITNAME *tbl); + +{- + generate_stack_macros("ASN1_INTEGER"); +-} + + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, + long length); +DECLARE_ASN1_DUP_FUNCTION(ASN1_INTEGER) +int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); + +DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) + +int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); +ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); +ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); +int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); + +int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, + time_t t); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, + time_t t, int offset_day, + long offset_sec); +int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); + +int ASN1_TIME_diff(int *pday, int *psec, + const ASN1_TIME *from, const ASN1_TIME *to); + +DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) +DECLARE_ASN1_DUP_FUNCTION(ASN1_OCTET_STRING) +int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, + const ASN1_OCTET_STRING *b); +int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, + int len); + +{- + generate_stack_macros("ASN1_UTF8STRING"); +-} + +DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_NULL) +DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) + +int UTF8_getc(const unsigned char *str, int len, unsigned long *val); +int UTF8_putc(unsigned char *str, int len, unsigned long value); + +{- + generate_stack_macros("ASN1_GENERALSTRING"); +-} + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) +DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_TIME) + +DECLARE_ASN1_DUP_FUNCTION(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_UTCTIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_GENERALIZEDTIME) + +DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) + +ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); +ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_TIME_check(const ASN1_TIME *t); +ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t, + ASN1_GENERALIZEDTIME **out); +int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); +int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str); +int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); +int ASN1_TIME_normalize(ASN1_TIME *s); +int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t); +int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b); + +int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); +int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); +int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); +int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); +int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); +int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); +int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); +int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a); + +int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); +ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, + const char *sn, const char *ln); + +int ASN1_INTEGER_get_int64(int64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r); +int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r); + +int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); +long ASN1_INTEGER_get(const ASN1_INTEGER *a); +ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); +BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); + +int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_ENUMERATED *a); +int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r); + + +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); +ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai); +BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn); + +/* General */ +/* given a string, return the correct type, max is the maximum length */ +int ASN1_PRINTABLE_type(const unsigned char *s, int max); + +unsigned long ASN1_tag2bit(int tag); + +/* SPECIALS */ +int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, + int *pclass, long omax); +int ASN1_check_infinite_end(unsigned char **p, long len); +int ASN1_const_check_infinite_end(const unsigned char **p, long len); +void ASN1_put_object(unsigned char **pp, int constructed, int length, + int tag, int xclass); +int ASN1_put_eoc(unsigned char **pp); +int ASN1_object_size(int constructed, int length, int tag); + +/* Used to implement other functions */ +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, const void *x); + +# define ASN1_dup_of(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(const type, x))) + +void *ASN1_item_dup(const ASN1_ITEM *it, const void *x); +int ASN1_item_sign_ex(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, const ASN1_OCTET_STRING *id, + EVP_PKEY *pkey, const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); +int ASN1_item_verify_ex(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + const ASN1_OCTET_STRING *id, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); + +/* ASN1 alloc/free macros for when a type is only used internally */ + +# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) +# define M_ASN1_free_of(x, type) \ + ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) + +# ifndef OPENSSL_NO_STDIO +void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); + +# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_fp_ex(const ASN1_ITEM *it, FILE *in, void *x, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, const void *x); + +# define ASN1_i2d_fp_of(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, const void *x); +int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); +# endif + +int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); + +void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); + +# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_bio_ex(const ASN1_ITEM *it, BIO *in, void *pval, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *pval); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, const void *x); + +# define ASN1_i2d_bio_of(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, const void *x); +BIO *ASN1_item_i2d_mem_bio(const ASN1_ITEM *it, const ASN1_VALUE *val); +int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); +int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); +int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm); +int ASN1_TIME_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); +int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); +int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); +int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); +int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, + unsigned char *buf, int off); +int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); +int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, + int dump); +const char *ASN1_tag2str(int tag); + +/* Used to load and write Netscape format cert */ + +int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); + +int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); +int ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, int max_len); +int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ASN1_TYPE_get_int_octetstring(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); + +ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, + ASN1_OCTET_STRING **oct); + +void ASN1_STRING_set_default_mask(unsigned long mask); +int ASN1_STRING_set_default_mask_asc(const char *p); +unsigned long ASN1_STRING_get_default_mask(void); +int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask); +int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask, + long minsize, long maxsize); + +ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, + const unsigned char *in, int inlen, + int inform, int nid); +ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); +int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); +void ASN1_STRING_TABLE_cleanup(void); + +/* ASN1 template functions */ + +/* Old API compatible functions */ +ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_new_ex(const ASN1_ITEM *it, OSSL_LIB_CTX *libctx, + const char *propq); +void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i_ex(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it); +int ASN1_item_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(const ASN1_VALUE *val, unsigned char **out, + const ASN1_ITEM *it); + +void ASN1_add_oid_module(void); +void ASN1_add_stable_module(void); + +ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); +ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); +int ASN1_str2mask(const char *str, unsigned long *pmask); + +/* ASN1 Print flags */ + +/* Indicate missing OPTIONAL fields */ +# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 +/* Mark start and end of SEQUENCE */ +# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 +/* Mark start and end of SEQUENCE/SET OF */ +# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 +/* Show the ASN1 type of primitives */ +# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 +/* Don't show ASN1 type of ANY */ +# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 +/* Don't show ASN1 type of MSTRINGs */ +# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 +/* Don't show field names in SEQUENCE */ +# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 +/* Show structure names of each SEQUENCE field */ +# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 +/* Don't show structure name even at top level */ +# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 + +int ASN1_item_print(BIO *out, const ASN1_VALUE *ifld, int indent, + const ASN1_ITEM *it, const ASN1_PCTX *pctx); +ASN1_PCTX *ASN1_PCTX_new(void); +void ASN1_PCTX_free(ASN1_PCTX *p); +unsigned long ASN1_PCTX_get_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); + +ASN1_SCTX *ASN1_SCTX_new(int (*scan_cb) (ASN1_SCTX *ctx)); +void ASN1_SCTX_free(ASN1_SCTX *p); +const ASN1_ITEM *ASN1_SCTX_get_item(ASN1_SCTX *p); +const ASN1_TEMPLATE *ASN1_SCTX_get_template(ASN1_SCTX *p); +unsigned long ASN1_SCTX_get_flags(ASN1_SCTX *p); +void ASN1_SCTX_set_app_data(ASN1_SCTX *p, void *data); +void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); + +const BIO_METHOD *BIO_f_asn1(void); + +/* cannot constify val because of CMS_stream() */ +BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); + +int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const ASN1_ITEM *it); +int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const char *hdr, const ASN1_ITEM *it); +/* cannot constify val because of CMS_dataFinal() */ +int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +int SMIME_write_ASN1_ex(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1_ex(BIO *bio, int flags, BIO **bcont, + const ASN1_ITEM *it, ASN1_VALUE **x, + OSSL_LIB_CTX *libctx, const char *propq); +int SMIME_crlf_copy(BIO *in, BIO *out, int flags); +int SMIME_text(BIO *in, BIO *out); + +const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); +const ASN1_ITEM *ASN1_ITEM_get(size_t i); + +/* Legacy compatibility */ +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_const(type) DECLARE_ASN1_FUNCTIONS(type) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name) +# define I2D_OF_const(type) I2D_OF(type) +# define ASN1_dup_of_const(type,i2d,d2i,x) ASN1_dup_of(type,i2d,d2i,x) +# define ASN1_i2d_fp_of_const(type,i2d,out,x) ASN1_i2d_fp_of(type,i2d,out,x) +# define ASN1_i2d_bio_of_const(type,i2d,out,x) ASN1_i2d_bio_of(type,i2d,out,x) + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1_mac.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1_mac.h index 7ac1782a..fdcb9836 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1_mac.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1_mac.h @@ -1,7 +1,7 @@ /* * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1err.h index e1ad1fef..d4276220 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1err.h @@ -1,140 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1ERR_H -# define HEADER_ASN1ERR_H +#ifndef OPENSSL_ASN1ERR_H +# define OPENSSL_ASN1ERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASN1_strings(void); -/* - * ASN1 function codes. - */ -# define ASN1_F_A2D_ASN1_OBJECT 100 -# define ASN1_F_A2I_ASN1_INTEGER 102 -# define ASN1_F_A2I_ASN1_STRING 103 -# define ASN1_F_APPEND_EXP 176 -# define ASN1_F_ASN1_BIO_INIT 113 -# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 -# define ASN1_F_ASN1_CB 177 -# define ASN1_F_ASN1_CHECK_TLEN 104 -# define ASN1_F_ASN1_COLLECT 106 -# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 -# define ASN1_F_ASN1_D2I_FP 109 -# define ASN1_F_ASN1_D2I_READ_BIO 107 -# define ASN1_F_ASN1_DIGEST 184 -# define ASN1_F_ASN1_DO_ADB 110 -# define ASN1_F_ASN1_DO_LOCK 233 -# define ASN1_F_ASN1_DUP 111 -# define ASN1_F_ASN1_ENC_SAVE 115 -# define ASN1_F_ASN1_EX_C2I 204 -# define ASN1_F_ASN1_FIND_END 190 -# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 -# define ASN1_F_ASN1_GENERATE_V3 178 -# define ASN1_F_ASN1_GET_INT64 224 -# define ASN1_F_ASN1_GET_OBJECT 114 -# define ASN1_F_ASN1_GET_UINT64 225 -# define ASN1_F_ASN1_I2D_BIO 116 -# define ASN1_F_ASN1_I2D_FP 117 -# define ASN1_F_ASN1_ITEM_D2I_FP 206 -# define ASN1_F_ASN1_ITEM_DUP 191 -# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 -# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 -# define ASN1_F_ASN1_ITEM_EX_I2D 144 -# define ASN1_F_ASN1_ITEM_FLAGS_I2D 118 -# define ASN1_F_ASN1_ITEM_I2D_BIO 192 -# define ASN1_F_ASN1_ITEM_I2D_FP 193 -# define ASN1_F_ASN1_ITEM_PACK 198 -# define ASN1_F_ASN1_ITEM_SIGN 195 -# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 -# define ASN1_F_ASN1_ITEM_UNPACK 199 -# define ASN1_F_ASN1_ITEM_VERIFY 197 -# define ASN1_F_ASN1_MBSTRING_NCOPY 122 -# define ASN1_F_ASN1_OBJECT_NEW 123 -# define ASN1_F_ASN1_OUTPUT_DATA 214 -# define ASN1_F_ASN1_PCTX_NEW 205 -# define ASN1_F_ASN1_PRIMITIVE_NEW 119 -# define ASN1_F_ASN1_SCTX_NEW 221 -# define ASN1_F_ASN1_SIGN 128 -# define ASN1_F_ASN1_STR2TYPE 179 -# define ASN1_F_ASN1_STRING_GET_INT64 227 -# define ASN1_F_ASN1_STRING_GET_UINT64 230 -# define ASN1_F_ASN1_STRING_SET 186 -# define ASN1_F_ASN1_STRING_TABLE_ADD 129 -# define ASN1_F_ASN1_STRING_TO_BN 228 -# define ASN1_F_ASN1_STRING_TYPE_NEW 130 -# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 -# define ASN1_F_ASN1_TEMPLATE_NEW 133 -# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 -# define ASN1_F_ASN1_TIME_ADJ 217 -# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 -# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 -# define ASN1_F_ASN1_UTCTIME_ADJ 218 -# define ASN1_F_ASN1_VERIFY 137 -# define ASN1_F_B64_READ_ASN1 209 -# define ASN1_F_B64_WRITE_ASN1 210 -# define ASN1_F_BIO_NEW_NDEF 208 -# define ASN1_F_BITSTR_CB 180 -# define ASN1_F_BN_TO_ASN1_STRING 229 -# define ASN1_F_C2I_ASN1_BIT_STRING 189 -# define ASN1_F_C2I_ASN1_INTEGER 194 -# define ASN1_F_C2I_ASN1_OBJECT 196 -# define ASN1_F_C2I_IBUF 226 -# define ASN1_F_C2I_UINT64_INT 101 -# define ASN1_F_COLLECT_DATA 140 -# define ASN1_F_D2I_ASN1_OBJECT 147 -# define ASN1_F_D2I_ASN1_UINTEGER 150 -# define ASN1_F_D2I_AUTOPRIVATEKEY 207 -# define ASN1_F_D2I_PRIVATEKEY 154 -# define ASN1_F_D2I_PUBLICKEY 155 -# define ASN1_F_DO_BUF 142 -# define ASN1_F_DO_CREATE 124 -# define ASN1_F_DO_DUMP 125 -# define ASN1_F_DO_TCREATE 222 -# define ASN1_F_I2A_ASN1_OBJECT 126 -# define ASN1_F_I2D_ASN1_BIO_STREAM 211 -# define ASN1_F_I2D_ASN1_OBJECT 143 -# define ASN1_F_I2D_DSA_PUBKEY 161 -# define ASN1_F_I2D_EC_PUBKEY 181 -# define ASN1_F_I2D_PRIVATEKEY 163 -# define ASN1_F_I2D_PUBLICKEY 164 -# define ASN1_F_I2D_RSA_PUBKEY 165 -# define ASN1_F_LONG_C2I 166 -# define ASN1_F_NDEF_PREFIX 127 -# define ASN1_F_NDEF_SUFFIX 136 -# define ASN1_F_OID_MODULE_INIT 174 -# define ASN1_F_PARSE_TAGGING 182 -# define ASN1_F_PKCS5_PBE2_SET_IV 167 -# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 231 -# define ASN1_F_PKCS5_PBE_SET 202 -# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 -# define ASN1_F_PKCS5_PBKDF2_SET 219 -# define ASN1_F_PKCS5_SCRYPT_SET 232 -# define ASN1_F_SMIME_READ_ASN1 212 -# define ASN1_F_SMIME_TEXT 213 -# define ASN1_F_STABLE_GET 138 -# define ASN1_F_STBL_MODULE_INIT 223 -# define ASN1_F_UINT32_C2I 105 -# define ASN1_F_UINT32_NEW 139 -# define ASN1_F_UINT64_C2I 112 -# define ASN1_F_UINT64_NEW 141 -# define ASN1_F_X509_CRL_ADD0_REVOKED 169 -# define ASN1_F_X509_INFO_NEW 170 -# define ASN1_F_X509_NAME_ENCODE 203 -# define ASN1_F_X509_NAME_EX_D2I 158 -# define ASN1_F_X509_NAME_EX_NEW 171 -# define ASN1_F_X509_PKEY_NEW 173 /* * ASN1 reason codes. @@ -199,6 +81,7 @@ int ERR_load_ASN1_strings(void); # define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 # define ASN1_R_INVALID_UTF8STRING 134 # define ASN1_R_INVALID_VALUE 219 +# define ASN1_R_LENGTH_TOO_LONG 231 # define ASN1_R_LIST_ERROR 188 # define ASN1_R_MIME_NO_CONTENT_TYPE 206 # define ASN1_R_MIME_PARSE_ERROR 207 @@ -239,6 +122,7 @@ int ERR_load_ASN1_strings(void); # define ASN1_R_TYPE_NOT_PRIMITIVE 195 # define ASN1_R_UNEXPECTED_EOC 159 # define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 +# define ASN1_R_UNKNOWN_DIGEST 229 # define ASN1_R_UNKNOWN_FORMAT 160 # define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 # define ASN1_R_UNKNOWN_OBJECT_TYPE 162 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h index a450ba0d..74ba47d0 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h @@ -1,14 +1,25 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/asn1t.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1T_H -# define HEADER_ASN1T_H + + +#ifndef OPENSSL_ASN1T_H +# define OPENSSL_ASN1T_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1T_H +# endif # include # include @@ -25,44 +36,73 @@ extern "C" { #endif -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION +/*- + * These are the possible values for the itype field of the + * ASN1_ITEM structure and determine how it is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application-specific + * data and functions. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 +# define ASN1_ITYPE_SEQUENCE 0x1 +# define ASN1_ITYPE_CHOICE 0x2 +/* unused value 0x3 */ +# define ASN1_ITYPE_EXTERN 0x4 +# define ASN1_ITYPE_MSTRING 0x5 +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 /* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) /* Macros for start and end of ASN1_ITEM definition */ -# define ASN1_ITEM_start(itname) \ - const ASN1_ITEM itname##_it = { - -# define static_ASN1_ITEM_start(itname) \ - static const ASN1_ITEM itname##_it = { - -# define ASN1_ITEM_end(itname) \ - }; - -# else - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ +# define ASN1_ITEM_start(itname) \ const ASN1_ITEM * itname##_it(void) \ { \ static const ASN1_ITEM local_it = { -# define static_ASN1_ITEM_start(itname) \ +# define static_ASN1_ITEM_start(itname) \ static ASN1_ITEM_start(itname) -# define ASN1_ITEM_end(itname) \ +# define ASN1_ITEM_end(itname) \ }; \ return &local_it; \ } -# endif - /* Macros to aid ASN1 template writing */ # define ASN1_ITEM_TEMPLATE(tname) \ @@ -152,19 +192,25 @@ extern "C" { ASN1_SEQUENCE_cb(tname, cb) # define ASN1_SEQUENCE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ ASN1_SEQUENCE(tname) -# define ASN1_BROKEN_SEQUENCE(tname) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ +# define ASN1_SEQUENCE_const_cb(tname, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, NULL, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_cb_const_cb(tname, cb, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, cb, 0, const_cb}; \ ASN1_SEQUENCE(tname) # define ASN1_SEQUENCE_ref(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0, NULL}; \ ASN1_SEQUENCE(tname) # define ASN1_SEQUENCE_enc(tname, enc, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc), NULL}; \ ASN1_SEQUENCE(tname) # define ASN1_NDEF_SEQUENCE_END(tname) \ @@ -190,9 +236,6 @@ extern "C" { #tname \ ASN1_ITEM_end(tname) -# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) -# define static_ASN1_BROKEN_SEQUENCE_END(stname) \ - static_ASN1_SEQUENCE_END_ref(stname, stname) # define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) @@ -261,7 +304,7 @@ extern "C" { static const ASN1_TEMPLATE tname##_ch_tt[] # define ASN1_CHOICE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ ASN1_CHOICE(tname) # define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) @@ -332,13 +375,9 @@ extern "C" { /* Any defined by macros: the field used is in the table itself */ -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# else -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } -# endif +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } + /* Plain simple type */ # define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) /* Embedded simple type */ @@ -418,23 +457,7 @@ extern "C" { # define ASN1_ADB(name) \ static const ASN1_ADB_TABLE name##_adbtbl[] -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ - ;\ - static const ASN1_ADB name##_adb = {\ - flags,\ - offsetof(name, field),\ - adb_cb,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - } - -# else - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ ;\ static const ASN1_ITEM *name##_adb(void) \ { \ @@ -452,8 +475,6 @@ extern "C" { } \ void dummy_function(void) -# endif - # define ADB_ENTRY(val, template) {val, template} # define ASN1_ADB_TEMPLATE(name) \ @@ -584,64 +605,12 @@ struct ASN1_ITEM_st { const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains * the contents */ long tcount; /* Number of templates if SEQUENCE or CHOICE */ - const void *funcs; /* functions that handle this type */ + const void *funcs; /* further data and type-specific functions */ + /* funcs can be ASN1_PRIMITIVE_FUNCS*, ASN1_EXTERN_FUNCS*, or ASN1_AUX* */ long size; /* Structure size (usually) */ const char *sname; /* Structure name */ }; -/*- - * These are values for the itype field and - * determine how the type is interpreted. - * - * For PRIMITIVE types the underlying type - * determines the behaviour if items is NULL. - * - * Otherwise templates must contain a single - * template and the type is treated in the - * same way as the type specified in the template. - * - * For SEQUENCE types the templates field points - * to the members, the size field is the - * structure size. - * - * For CHOICE types the templates field points - * to each possible member (typically a union) - * and the 'size' field is the offset of the - * selector. - * - * The 'funcs' field is used for application - * specific functions. - * - * The EXTERN type uses a new style d2i/i2d. - * The new style should be used where possible - * because it avoids things like the d2i IMPLICIT - * hack. - * - * MSTRING is a multiple string type, it is used - * for a CHOICE of character strings where the - * actual strings all occupy an ASN1_STRING - * structure. In this case the 'utype' field - * has a special meaning, it is used as a mask - * of acceptable types using the B_ASN1 constants. - * - * NDEF_SEQUENCE is the same as SEQUENCE except - * that it will use indefinite length constructed - * encoding if requested. - * - */ - -# define ASN1_ITYPE_PRIMITIVE 0x0 - -# define ASN1_ITYPE_SEQUENCE 0x1 - -# define ASN1_ITYPE_CHOICE 0x2 - -# define ASN1_ITYPE_EXTERN 0x4 - -# define ASN1_ITYPE_MSTRING 0x5 - -# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 - /* * Cache for ASN1 tag and length, so we don't keep re-reading it for things * like CHOICE @@ -661,21 +630,27 @@ typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx); -typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, +typedef int ASN1_ex_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx, OSSL_LIB_CTX *libctx, + const char *propq); +typedef int ASN1_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef int ASN1_ex_new_ex_func(ASN1_VALUE **pval, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); -typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, +typedef int ASN1_ex_print_func(BIO *out, const ASN1_VALUE **pval, int indent, const char *fname, const ASN1_PCTX *pctx); -typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, +typedef int ASN1_primitive_i2c(const ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); -typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, +typedef int ASN1_primitive_print(BIO *out, const ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx); @@ -687,6 +662,8 @@ typedef struct ASN1_EXTERN_FUNCS_st { ASN1_ex_d2i *asn1_ex_d2i; ASN1_ex_i2d *asn1_ex_i2d; ASN1_ex_print_func *asn1_ex_print; + ASN1_ex_new_ex_func *asn1_ex_new_ex; + ASN1_ex_d2i_ex *asn1_ex_d2i_ex; } ASN1_EXTERN_FUNCS; typedef struct ASN1_PRIMITIVE_FUNCS_st { @@ -711,18 +688,25 @@ typedef struct ASN1_PRIMITIVE_FUNCS_st { * error has occurred and the main operation should be abandoned. If major * changes in the default behaviour are required then an external type is * more appropriate. + * For the operations ASN1_OP_I2D_PRE, ASN1_OP_I2D_POST, ASN1_OP_PRINT_PRE, and + * ASN1_OP_PRINT_POST, meanwhile a variant of the callback with const parameter + * 'in' is provided to make clear statically that its input is not modified. If + * and only if this variant is in use the flag ASN1_AFLG_CONST_CB must be set. */ typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, void *exarg); +typedef int ASN1_aux_const_cb(int operation, const ASN1_VALUE **in, + const ASN1_ITEM *it, void *exarg); typedef struct ASN1_AUX_st { void *app_data; int flags; int ref_offset; /* Offset of reference value */ - int ref_lock; /* Lock type to use */ + int ref_lock; /* Offset of lock value */ ASN1_aux_cb *asn1_cb; int enc_offset; /* Offset of ASN1_ENCODING structure */ + ASN1_aux_const_cb *asn1_const_cb; /* for ASN1_OP_I2D_ and ASN1_OP_PRINT_ */ } ASN1_AUX; /* For print related callbacks exarg points to this structure */ @@ -750,6 +734,8 @@ typedef struct ASN1_STREAM_ARG_st { # define ASN1_AFLG_ENCODING 2 /* The Sequence length is invalid */ # define ASN1_AFLG_BROKEN 4 +/* Use the new asn1_const_cb */ +# define ASN1_AFLG_CONST_CB 8 /* operation values for asn1_cb */ @@ -767,6 +753,10 @@ typedef struct ASN1_STREAM_ARG_st { # define ASN1_OP_STREAM_POST 11 # define ASN1_OP_DETACHED_PRE 12 # define ASN1_OP_DETACHED_POST 13 +# define ASN1_OP_DUP_PRE 14 +# define ASN1_OP_DUP_POST 15 +# define ASN1_OP_GET0_LIBCTX 16 +# define ASN1_OP_GET0_PROPQ 17 /* Macro to implement a primitive type */ # define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) @@ -836,15 +826,15 @@ typedef struct ASN1_STREAM_ARG_st { { \ return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ } \ - int i2d_##fname(stname *a, unsigned char **out) \ + int i2d_##fname(const stname *a, unsigned char **out) \ { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ } # define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ - int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ + int i2d_##stname##_NDEF(const stname *a, unsigned char **out) \ { \ - return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + return ASN1_item_ndef_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ } # define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ @@ -854,28 +844,14 @@ typedef struct ASN1_STREAM_ARG_st { return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ ASN1_ITEM_rptr(stname)); \ } \ - static int i2d_##stname(stname *a, unsigned char **out) \ + static int i2d_##stname(const stname *a, unsigned char **out) \ { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, \ ASN1_ITEM_rptr(stname)); \ } -/* - * This includes evil casts to remove const: they will go away when full ASN1 - * constification is done. - */ -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(const stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - # define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ - stname * stname##_dup(stname *x) \ + stname * stname##_dup(const stname *x) \ { \ return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ } @@ -884,20 +860,13 @@ typedef struct ASN1_STREAM_ARG_st { IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) # define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ + int fname##_print_ctx(BIO *out, const stname *x, int indent, \ const ASN1_PCTX *pctx) \ { \ - return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ + return ASN1_item_print(out, (const ASN1_VALUE *)x, indent, \ ASN1_ITEM_rptr(itname), pctx); \ } -# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ - IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) - -# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - /* external definitions for primitive types */ DECLARE_ASN1_ITEM(ASN1_BOOLEAN) @@ -915,7 +884,7 @@ DECLARE_ASN1_ITEM(ZINT64) DECLARE_ASN1_ITEM(UINT64) DECLARE_ASN1_ITEM(ZUINT64) -# if OPENSSL_API_COMPAT < 0x10200000L +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * LONG and ZLONG are strongly discouraged for use as stored data, as the * underlying C type (long) differs in size depending on the architecture. @@ -925,7 +894,34 @@ DECLARE_ASN1_ITEM(LONG) DECLARE_ASN1_ITEM(ZLONG) # endif -DEFINE_STACK_OF(ASN1_VALUE) +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_VALUE, ASN1_VALUE, ASN1_VALUE) +#define sk_ASN1_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_value(sk, idx) ((ASN1_VALUE *)OPENSSL_sk_value(ossl_check_const_ASN1_VALUE_sk_type(sk), (idx))) +#define sk_ASN1_VALUE_new(cmp) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new(ossl_check_ASN1_VALUE_compfunc_type(cmp))) +#define sk_ASN1_VALUE_new_null() ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_VALUE_new_reserve(cmp, n) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_VALUE_compfunc_type(cmp), (n))) +#define sk_ASN1_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_VALUE_sk_type(sk), (n)) +#define sk_ASN1_VALUE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_delete(sk, i) ((ASN1_VALUE *)OPENSSL_sk_delete(ossl_check_ASN1_VALUE_sk_type(sk), (i))) +#define sk_ASN1_VALUE_delete_ptr(sk, ptr) ((ASN1_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr))) +#define sk_ASN1_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_pop(sk) ((ASN1_VALUE *)OPENSSL_sk_pop(ossl_check_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_shift(sk) ((ASN1_VALUE *)OPENSSL_sk_shift(ossl_check_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_VALUE_sk_type(sk),ossl_check_ASN1_VALUE_freefunc_type(freefunc)) +#define sk_ASN1_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), (idx)) +#define sk_ASN1_VALUE_set(sk, idx, ptr) ((ASN1_VALUE *)OPENSSL_sk_set(ossl_check_ASN1_VALUE_sk_type(sk), (idx), ossl_check_ASN1_VALUE_type(ptr))) +#define sk_ASN1_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), pnum) +#define sk_ASN1_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_dup(sk) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_copyfunc_type(copyfunc), ossl_check_ASN1_VALUE_freefunc_type(freefunc))) +#define sk_ASN1_VALUE_set_cmp_func(sk, cmp) ((sk_ASN1_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_compfunc_type(cmp))) + + /* Functions used internally by the ASN1 code */ @@ -936,9 +932,14 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx); -int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, +int ASN1_item_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); +/* Legacy compatibility */ +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) IMPLEMENT_ASN1_FUNCTIONS(name) +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) + #ifdef __cplusplus } #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h.in new file mode 100644 index 00000000..b536fe51 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h.in @@ -0,0 +1,923 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ASN1T_H +# define OPENSSL_ASN1T_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1T_H +# endif + +# include +# include +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +/* ASN1 template defines, structures and functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * These are the possible values for the itype field of the + * ASN1_ITEM structure and determine how it is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application-specific + * data and functions. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 +# define ASN1_ITYPE_SEQUENCE 0x1 +# define ASN1_ITYPE_CHOICE 0x2 +/* unused value 0x3 */ +# define ASN1_ITYPE_EXTERN 0x4 +# define ASN1_ITYPE_MSTRING 0x5 +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + const ASN1_ITEM * itname##_it(void) \ + { \ + static const ASN1_ITEM local_it = { + +# define static_ASN1_ITEM_start(itname) \ + static ASN1_ITEM_start(itname) + +# define ASN1_ITEM_end(itname) \ + }; \ + return &local_it; \ + } + +/* Macros to aid ASN1 template writing */ + +# define ASN1_ITEM_TEMPLATE(tname) \ + static const ASN1_TEMPLATE tname##_item_tt + +# define ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) + +/* This is a ASN1 type which just embeds a template */ + +/*- + * This pair helps declare a SEQUENCE. We can do: + * + * ASN1_SEQUENCE(stname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END(stname) + * + * This will produce an ASN1_ITEM called stname_it + * for a structure called stname. + * + * If you want the same structure but a different + * name then use: + * + * ASN1_SEQUENCE(itname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END_name(stname, itname) + * + * This will create an item called itname_it using + * a structure called stname. + */ + +# define ASN1_SEQUENCE(tname) \ + static const ASN1_TEMPLATE tname##_seq_tt[] + +# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) + +# define static_ASN1_SEQUENCE_END(stname) static_ASN1_SEQUENCE_END_name(stname, stname) + +# define ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE(tname) \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ + ASN1_SEQUENCE_cb(tname, cb) + +# define ASN1_SEQUENCE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_const_cb(tname, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, NULL, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_cb_const_cb(tname, cb, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, cb, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_ref(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0, NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_enc(tname, enc, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc), NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) + + +# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) +# define static_ASN1_SEQUENCE_END_cb(stname, tname) static_ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/*- + * This pair helps declare a CHOICE type. We can do: + * + * ASN1_CHOICE(chname) = { + * ... CHOICE options ... + * ASN1_CHOICE_END(chname) + * + * This will produce an ASN1_ITEM called chname_it + * for a structure called chname. The structure + * definition must look like this: + * typedef struct { + * int type; + * union { + * ASN1_SOMETHING *opt1; + * ASN1_SOMEOTHER *opt2; + * } value; + * } chname; + * + * the name of the selector must be 'type'. + * to use an alternative selector name use the + * ASN1_CHOICE_END_selector() version. + */ + +# define ASN1_CHOICE(tname) \ + static const ASN1_TEMPLATE tname##_ch_tt[] + +# define ASN1_CHOICE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ + ASN1_CHOICE(tname) + +# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) + +# define static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname) + +# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) + +# define static_ASN1_CHOICE_END_name(stname, tname) static_ASN1_CHOICE_END_selector(stname, tname, type) + +# define ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_CHOICE_END_cb(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/* This helps with the template wrapper form of ASN1_ITEM */ + +# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ + (flags), (tag), 0,\ + #name, ASN1_ITEM_ref(type) } + +/* These help with SEQUENCE or CHOICE components */ + +/* used to declare other types */ + +# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ + (flags), (tag), offsetof(stname, field),\ + #field, ASN1_ITEM_ref(type) } + +/* implicit and explicit helper macros */ + +# define ASN1_IMP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | (ex), tag, stname, field, type) + +# define ASN1_EXP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | (ex), tag, stname, field, type) + +/* Any defined by macros: the field used is in the table itself */ + +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } + +/* Plain simple type */ +# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) +/* Embedded simple type */ +# define ASN1_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_EMBED,0, stname, field, type) + +/* OPTIONAL simple type */ +# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) +# define ASN1_OPT_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED, 0, stname, field, type) + +/* IMPLICIT tagged simple type */ +# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) +# define ASN1_IMP_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) + +/* IMPLICIT tagged OPTIONAL simple type */ +# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_IMP_OPT_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* Same as above but EXPLICIT */ + +# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) +# define ASN1_EXP_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) +# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_EXP_OPT_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* SEQUENCE OF type */ +# define ASN1_SEQUENCE_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) + +/* OPTIONAL SEQUENCE OF */ +# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Same as above but for SET OF */ + +# define ASN1_SET_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) + +# define ASN1_SET_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ + +# define ASN1_IMP_SET_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_EXP_SET_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +/* EXPLICIT using indefinite length constructed form */ +# define ASN1_NDEF_EXP(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) + +/* EXPLICIT OPTIONAL using indefinite length constructed form */ +# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) + +/* Macros for the ASN1_ADB structure */ + +# define ASN1_ADB(name) \ + static const ASN1_ADB_TABLE name##_adbtbl[] + +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ + ;\ + static const ASN1_ITEM *name##_adb(void) \ + { \ + static const ASN1_ADB internal_adb = \ + {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + }; \ + return (const ASN1_ITEM *) &internal_adb; \ + } \ + void dummy_function(void) + +# define ADB_ENTRY(val, template) {val, template} + +# define ASN1_ADB_TEMPLATE(name) \ + static const ASN1_TEMPLATE name##_tt + +/* + * This is the ASN1 template structure that defines a wrapper round the + * actual type. It determines the actual position of the field in the value + * structure, various flags such as OPTIONAL and the field name. + */ + +struct ASN1_TEMPLATE_st { + unsigned long flags; /* Various flags */ + long tag; /* tag, not used if no tagging */ + unsigned long offset; /* Offset of this field in structure */ + const char *field_name; /* Field name */ + ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ +}; + +/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ + +# define ASN1_TEMPLATE_item(t) (t->item_ptr) +# define ASN1_TEMPLATE_adb(t) (t->item_ptr) + +typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; +typedef struct ASN1_ADB_st ASN1_ADB; + +struct ASN1_ADB_st { + unsigned long flags; /* Various flags */ + unsigned long offset; /* Offset of selector field */ + int (*adb_cb)(long *psel); /* Application callback */ + const ASN1_ADB_TABLE *tbl; /* Table of possible types */ + long tblcount; /* Number of entries in tbl */ + const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ + const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ +}; + +struct ASN1_ADB_TABLE_st { + long value; /* NID for an object or value for an int */ + const ASN1_TEMPLATE tt; /* item for this value */ +}; + +/* template flags */ + +/* Field is optional */ +# define ASN1_TFLG_OPTIONAL (0x1) + +/* Field is a SET OF */ +# define ASN1_TFLG_SET_OF (0x1 << 1) + +/* Field is a SEQUENCE OF */ +# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) + +/* + * Special case: this refers to a SET OF that will be sorted into DER order + * when encoded *and* the corresponding STACK will be modified to match the + * new order. + */ +# define ASN1_TFLG_SET_ORDER (0x3 << 1) + +/* Mask for SET OF or SEQUENCE OF */ +# define ASN1_TFLG_SK_MASK (0x3 << 1) + +/* + * These flags mean the tag should be taken from the tag field. If EXPLICIT + * then the underlying type is used for the inner tag. + */ + +/* IMPLICIT tagging */ +# define ASN1_TFLG_IMPTAG (0x1 << 3) + +/* EXPLICIT tagging, inner tag from underlying type */ +# define ASN1_TFLG_EXPTAG (0x2 << 3) + +# define ASN1_TFLG_TAG_MASK (0x3 << 3) + +/* context specific IMPLICIT */ +# define ASN1_TFLG_IMPLICIT (ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT) + +/* context specific EXPLICIT */ +# define ASN1_TFLG_EXPLICIT (ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT) + +/* + * If tagging is in force these determine the type of tag to use. Otherwise + * the tag is determined by the underlying type. These values reflect the + * actual octet format. + */ + +/* Universal tag */ +# define ASN1_TFLG_UNIVERSAL (0x0<<6) +/* Application tag */ +# define ASN1_TFLG_APPLICATION (0x1<<6) +/* Context specific tag */ +# define ASN1_TFLG_CONTEXT (0x2<<6) +/* Private tag */ +# define ASN1_TFLG_PRIVATE (0x3<<6) + +# define ASN1_TFLG_TAG_CLASS (0x3<<6) + +/* + * These are for ANY DEFINED BY type. In this case the 'item' field points to + * an ASN1_ADB structure which contains a table of values to decode the + * relevant type + */ + +# define ASN1_TFLG_ADB_MASK (0x3<<8) + +# define ASN1_TFLG_ADB_OID (0x1<<8) + +# define ASN1_TFLG_ADB_INT (0x1<<9) + +/* + * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes + * indefinite length constructed encoding to be used if required. + */ + +# define ASN1_TFLG_NDEF (0x1<<11) + +/* Field is embedded and not a pointer */ +# define ASN1_TFLG_EMBED (0x1 << 12) + +/* This is the actual ASN1 item itself */ + +struct ASN1_ITEM_st { + char itype; /* The item type, primitive, SEQUENCE, CHOICE + * or extern */ + long utype; /* underlying type */ + const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains + * the contents */ + long tcount; /* Number of templates if SEQUENCE or CHOICE */ + const void *funcs; /* further data and type-specific functions */ + /* funcs can be ASN1_PRIMITIVE_FUNCS*, ASN1_EXTERN_FUNCS*, or ASN1_AUX* */ + long size; /* Structure size (usually) */ + const char *sname; /* Structure name */ +}; + +/* + * Cache for ASN1 tag and length, so we don't keep re-reading it for things + * like CHOICE + */ + +struct ASN1_TLC_st { + char valid; /* Values below are valid */ + int ret; /* return value */ + long plen; /* length */ + int ptag; /* class value */ + int pclass; /* class value */ + int hdrlen; /* header length */ +}; + +/* Typedefs for ASN1 function pointers */ +typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +typedef int ASN1_ex_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx, OSSL_LIB_CTX *libctx, + const char *propq); +typedef int ASN1_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); +typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef int ASN1_ex_new_ex_func(ASN1_VALUE **pval, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); + +typedef int ASN1_ex_print_func(BIO *out, const ASN1_VALUE **pval, + int indent, const char *fname, + const ASN1_PCTX *pctx); + +typedef int ASN1_primitive_i2c(const ASN1_VALUE **pval, unsigned char *cont, + int *putype, const ASN1_ITEM *it); +typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, + int len, int utype, char *free_cont, + const ASN1_ITEM *it); +typedef int ASN1_primitive_print(BIO *out, const ASN1_VALUE **pval, + const ASN1_ITEM *it, int indent, + const ASN1_PCTX *pctx); + +typedef struct ASN1_EXTERN_FUNCS_st { + void *app_data; + ASN1_ex_new_func *asn1_ex_new; + ASN1_ex_free_func *asn1_ex_free; + ASN1_ex_free_func *asn1_ex_clear; + ASN1_ex_d2i *asn1_ex_d2i; + ASN1_ex_i2d *asn1_ex_i2d; + ASN1_ex_print_func *asn1_ex_print; + ASN1_ex_new_ex_func *asn1_ex_new_ex; + ASN1_ex_d2i_ex *asn1_ex_d2i_ex; +} ASN1_EXTERN_FUNCS; + +typedef struct ASN1_PRIMITIVE_FUNCS_st { + void *app_data; + unsigned long flags; + ASN1_ex_new_func *prim_new; + ASN1_ex_free_func *prim_free; + ASN1_ex_free_func *prim_clear; + ASN1_primitive_c2i *prim_c2i; + ASN1_primitive_i2c *prim_i2c; + ASN1_primitive_print *prim_print; +} ASN1_PRIMITIVE_FUNCS; + +/* + * This is the ASN1_AUX structure: it handles various miscellaneous + * requirements. For example the use of reference counts and an informational + * callback. The "informational callback" is called at various points during + * the ASN1 encoding and decoding. It can be used to provide minor + * customisation of the structures used. This is most useful where the + * supplied routines *almost* do the right thing but need some extra help at + * a few points. If the callback returns zero then it is assumed a fatal + * error has occurred and the main operation should be abandoned. If major + * changes in the default behaviour are required then an external type is + * more appropriate. + * For the operations ASN1_OP_I2D_PRE, ASN1_OP_I2D_POST, ASN1_OP_PRINT_PRE, and + * ASN1_OP_PRINT_POST, meanwhile a variant of the callback with const parameter + * 'in' is provided to make clear statically that its input is not modified. If + * and only if this variant is in use the flag ASN1_AFLG_CONST_CB must be set. + */ + +typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, + void *exarg); +typedef int ASN1_aux_const_cb(int operation, const ASN1_VALUE **in, + const ASN1_ITEM *it, void *exarg); + +typedef struct ASN1_AUX_st { + void *app_data; + int flags; + int ref_offset; /* Offset of reference value */ + int ref_lock; /* Offset of lock value */ + ASN1_aux_cb *asn1_cb; + int enc_offset; /* Offset of ASN1_ENCODING structure */ + ASN1_aux_const_cb *asn1_const_cb; /* for ASN1_OP_I2D_ and ASN1_OP_PRINT_ */ +} ASN1_AUX; + +/* For print related callbacks exarg points to this structure */ +typedef struct ASN1_PRINT_ARG_st { + BIO *out; + int indent; + const ASN1_PCTX *pctx; +} ASN1_PRINT_ARG; + +/* For streaming related callbacks exarg points to this structure */ +typedef struct ASN1_STREAM_ARG_st { + /* BIO to stream through */ + BIO *out; + /* BIO with filters appended */ + BIO *ndef_bio; + /* Streaming I/O boundary */ + unsigned char **boundary; +} ASN1_STREAM_ARG; + +/* Flags in ASN1_AUX */ + +/* Use a reference count */ +# define ASN1_AFLG_REFCOUNT 1 +/* Save the encoding of structure (useful for signatures) */ +# define ASN1_AFLG_ENCODING 2 +/* The Sequence length is invalid */ +# define ASN1_AFLG_BROKEN 4 +/* Use the new asn1_const_cb */ +# define ASN1_AFLG_CONST_CB 8 + +/* operation values for asn1_cb */ + +# define ASN1_OP_NEW_PRE 0 +# define ASN1_OP_NEW_POST 1 +# define ASN1_OP_FREE_PRE 2 +# define ASN1_OP_FREE_POST 3 +# define ASN1_OP_D2I_PRE 4 +# define ASN1_OP_D2I_POST 5 +# define ASN1_OP_I2D_PRE 6 +# define ASN1_OP_I2D_POST 7 +# define ASN1_OP_PRINT_PRE 8 +# define ASN1_OP_PRINT_POST 9 +# define ASN1_OP_STREAM_PRE 10 +# define ASN1_OP_STREAM_POST 11 +# define ASN1_OP_DETACHED_PRE 12 +# define ASN1_OP_DETACHED_POST 13 +# define ASN1_OP_DUP_PRE 14 +# define ASN1_OP_DUP_POST 15 +# define ASN1_OP_GET0_LIBCTX 16 +# define ASN1_OP_GET0_PROPQ 17 + +/* Macro to implement a primitive type */ +# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) +# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ + ASN1_ITEM_end(itname) + +/* Macro to implement a multi string type */ +# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ + ASN1_ITEM_end(itname) + +# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ + ASN1_ITEM_start(sname) \ + ASN1_ITYPE_EXTERN, \ + tag, \ + NULL, \ + 0, \ + &fptrs, \ + 0, \ + #sname \ + ASN1_ITEM_end(sname) + +/* Macro to implement standard functions in terms of ASN1_ITEM structures */ + +# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) + +# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ + IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) + +# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ + pre stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + pre void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ + stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ + int i2d_##stname##_NDEF(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_ndef_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + } + +# define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ + static stname *d2i_##stname(stname **a, \ + const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ + ASN1_ITEM_rptr(stname)); \ + } \ + static int i2d_##stname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, \ + ASN1_ITEM_rptr(stname)); \ + } + +# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ + stname * stname##_dup(const stname *x) \ + { \ + return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ + } + +# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ + IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ + int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx) \ + { \ + return ASN1_item_print(out, (const ASN1_VALUE *)x, indent, \ + ASN1_ITEM_rptr(itname), pctx); \ + } + +/* external definitions for primitive types */ + +DECLARE_ASN1_ITEM(ASN1_BOOLEAN) +DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_SEQUENCE) +DECLARE_ASN1_ITEM(CBIGNUM) +DECLARE_ASN1_ITEM(BIGNUM) +DECLARE_ASN1_ITEM(INT32) +DECLARE_ASN1_ITEM(ZINT32) +DECLARE_ASN1_ITEM(UINT32) +DECLARE_ASN1_ITEM(ZUINT32) +DECLARE_ASN1_ITEM(INT64) +DECLARE_ASN1_ITEM(ZINT64) +DECLARE_ASN1_ITEM(UINT64) +DECLARE_ASN1_ITEM(ZUINT64) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * LONG and ZLONG are strongly discouraged for use as stored data, as the + * underlying C type (long) differs in size depending on the architecture. + * They are designed with 32-bit longs in mind. + */ +DECLARE_ASN1_ITEM(LONG) +DECLARE_ASN1_ITEM(ZLONG) +# endif + +{- + generate_stack_macros("ASN1_VALUE"); +-} + + +/* Functions used internally by the ASN1 code */ + +int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); +void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); + +int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +int ASN1_item_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); + +/* Legacy compatibility */ +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) IMPLEMENT_ASN1_FUNCTIONS(name) +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h index 7052b890..bc27d5db 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h @@ -1,7 +1,7 @@ /* * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,8 +9,14 @@ #include -#ifndef HEADER_ASYNC_H -# define HEADER_ASYNC_H +#ifndef OPENSSL_ASYNC_H +# define OPENSSL_ASYNC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASYNC_H +# endif #if defined(_WIN32) # if defined(BASETYPES) || defined(_WINDEF_H) @@ -31,12 +37,18 @@ extern "C" { typedef struct async_job_st ASYNC_JOB; typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; +typedef int (*ASYNC_callback_fn)(void *arg); #define ASYNC_ERR 0 #define ASYNC_NO_JOBS 1 #define ASYNC_PAUSE 2 #define ASYNC_FINISH 3 +#define ASYNC_STATUS_UNSUPPORTED 0 +#define ASYNC_STATUS_ERR 1 +#define ASYNC_STATUS_OK 2 +#define ASYNC_STATUS_EAGAIN 3 + int ASYNC_init_thread(size_t max_size, size_t init_size); void ASYNC_cleanup_thread(void); @@ -52,6 +64,14 @@ int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, OSSL_ASYNC_FD *fd, void **custom_data); int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, size_t *numfds); +int ASYNC_WAIT_CTX_get_callback(ASYNC_WAIT_CTX *ctx, + ASYNC_callback_fn *callback, + void **callback_arg); +int ASYNC_WAIT_CTX_set_callback(ASYNC_WAIT_CTX *ctx, + ASYNC_callback_fn callback, + void *callback_arg); +int ASYNC_WAIT_CTX_set_status(ASYNC_WAIT_CTX *ctx, int status); +int ASYNC_WAIT_CTX_get_status(ASYNC_WAIT_CTX *ctx); int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, size_t *numaddfds, OSSL_ASYNC_FD *delfd, size_t *numdelfds); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asyncerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asyncerr.h index 91afbbb2..c093f7be 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asyncerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asyncerr.h @@ -1,35 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASYNCERR_H -# define HEADER_ASYNCERR_H +#ifndef OPENSSL_ASYNCERR_H +# define OPENSSL_ASYNCERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASYNC_strings(void); -/* - * ASYNC function codes. - */ -# define ASYNC_F_ASYNC_CTX_NEW 100 -# define ASYNC_F_ASYNC_INIT_THREAD 101 -# define ASYNC_F_ASYNC_JOB_NEW 102 -# define ASYNC_F_ASYNC_PAUSE_JOB 103 -# define ASYNC_F_ASYNC_START_FUNC 104 -# define ASYNC_F_ASYNC_START_JOB 105 -# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 106 /* * ASYNC reason codes. diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h index ae559a51..e16cf622 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h @@ -1,14 +1,24 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/bio.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BIO_H -# define HEADER_BIO_H + +#ifndef OPENSSL_BIO_H +# define OPENSSL_BIO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BIO_H +# endif # include @@ -19,6 +29,7 @@ # include # include +# include #ifdef __cplusplus extern "C" { @@ -55,6 +66,7 @@ extern "C" { # ifndef OPENSSL_NO_SCTP # define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) # endif +# define BIO_TYPE_CORE_TO_PROV (25|BIO_TYPE_SOURCE_SINK) #define BIO_TYPE_START 128 @@ -97,7 +109,7 @@ extern "C" { # define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ # define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ -# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation timed out */ /* #ifdef IP_MTU_DISCOVER */ # define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ @@ -141,6 +153,34 @@ extern "C" { # define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 +/* + * internal BIO: + * # define BIO_CTRL_SET_KTLS_SEND 72 + * # define BIO_CTRL_SET_KTLS_SEND_CTRL_MSG 74 + * # define BIO_CTRL_CLEAR_KTLS_CTRL_MSG 75 + */ + +# define BIO_CTRL_GET_KTLS_SEND 73 +# define BIO_CTRL_GET_KTLS_RECV 76 + +# define BIO_CTRL_DGRAM_SCTP_WAIT_FOR_DRY 77 +# define BIO_CTRL_DGRAM_SCTP_MSG_WAITING 78 + +/* BIO_f_prefix controls */ +# define BIO_CTRL_SET_PREFIX 79 +# define BIO_CTRL_SET_INDENT 80 +# define BIO_CTRL_GET_INDENT 81 + +# ifndef OPENSSL_NO_KTLS +# define BIO_get_ktls_send(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL) > 0) +# define BIO_get_ktls_recv(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL) > 0) +# else +# define BIO_get_ktls_send(b) (0) +# define BIO_get_ktls_recv(b) (0) +# endif + /* modifiers */ # define BIO_FP_READ 0x02 # define BIO_FP_WRITE 0x04 @@ -152,12 +192,9 @@ extern "C" { # define BIO_FLAGS_IO_SPECIAL 0x04 # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) # define BIO_FLAGS_SHOULD_RETRY 0x08 -# ifndef BIO_FLAGS_UPLINK -/* - * "UPLINK" flag denotes file descriptors provided by application. It - * defaults to 0, as most platforms don't require UPLINK interface. - */ -# define BIO_FLAGS_UPLINK 0 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* This #define was replaced by an internal constant and should not be used. */ +# define BIO_FLAGS_UPLINK 0 # endif # define BIO_FLAGS_BASE64_NO_NL 0x100 @@ -171,6 +208,8 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 +/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ + typedef union bio_addr_st BIO_ADDR; typedef struct bio_addrinfo_st BIO_ADDRINFO; @@ -233,16 +272,23 @@ void BIO_clear_flags(BIO *b, int flags); # define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) # define BIO_cb_post(a) ((a)&BIO_CB_RETURN) +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, long argl, long ret); +OSSL_DEPRECATEDIN_3_0 BIO_callback_fn BIO_get_callback(const BIO *b); +OSSL_DEPRECATEDIN_3_0 void BIO_set_callback(BIO *b, BIO_callback_fn callback); +OSSL_DEPRECATEDIN_3_0 long BIO_debug_callback(BIO *bio, int cmd, + const char *argp, int argi, + long argl, long ret); +# endif + typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, size_t len, int argi, long argl, int ret, size_t *processed); -BIO_callback_fn BIO_get_callback(const BIO *b); -void BIO_set_callback(BIO *b, BIO_callback_fn callback); - BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); +long BIO_debug_callback_ex(BIO *bio, int oper, const char *argp, size_t len, + int argi, long argl, int ret, size_t *processed); char *BIO_get_callback_arg(const BIO *b); void BIO_set_callback_arg(BIO *b, char *arg); @@ -255,12 +301,42 @@ int BIO_method_type(const BIO *b); typedef int BIO_info_cb(BIO *, int, int); typedef BIO_info_cb bio_info_cb; /* backward compatibility */ -DEFINE_STACK_OF(BIO) +SKM_DEFINE_STACK_OF_INTERNAL(BIO, BIO, BIO) +#define sk_BIO_num(sk) OPENSSL_sk_num(ossl_check_const_BIO_sk_type(sk)) +#define sk_BIO_value(sk, idx) ((BIO *)OPENSSL_sk_value(ossl_check_const_BIO_sk_type(sk), (idx))) +#define sk_BIO_new(cmp) ((STACK_OF(BIO) *)OPENSSL_sk_new(ossl_check_BIO_compfunc_type(cmp))) +#define sk_BIO_new_null() ((STACK_OF(BIO) *)OPENSSL_sk_new_null()) +#define sk_BIO_new_reserve(cmp, n) ((STACK_OF(BIO) *)OPENSSL_sk_new_reserve(ossl_check_BIO_compfunc_type(cmp), (n))) +#define sk_BIO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_BIO_sk_type(sk), (n)) +#define sk_BIO_free(sk) OPENSSL_sk_free(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_zero(sk) OPENSSL_sk_zero(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_delete(sk, i) ((BIO *)OPENSSL_sk_delete(ossl_check_BIO_sk_type(sk), (i))) +#define sk_BIO_delete_ptr(sk, ptr) ((BIO *)OPENSSL_sk_delete_ptr(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr))) +#define sk_BIO_push(sk, ptr) OPENSSL_sk_push(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_pop(sk) ((BIO *)OPENSSL_sk_pop(ossl_check_BIO_sk_type(sk))) +#define sk_BIO_shift(sk) ((BIO *)OPENSSL_sk_shift(ossl_check_BIO_sk_type(sk))) +#define sk_BIO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_BIO_sk_type(sk),ossl_check_BIO_freefunc_type(freefunc)) +#define sk_BIO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr), (idx)) +#define sk_BIO_set(sk, idx, ptr) ((BIO *)OPENSSL_sk_set(ossl_check_BIO_sk_type(sk), (idx), ossl_check_BIO_type(ptr))) +#define sk_BIO_find(sk, ptr) OPENSSL_sk_find(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr), pnum) +#define sk_BIO_sort(sk) OPENSSL_sk_sort(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_BIO_sk_type(sk)) +#define sk_BIO_dup(sk) ((STACK_OF(BIO) *)OPENSSL_sk_dup(ossl_check_const_BIO_sk_type(sk))) +#define sk_BIO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(BIO) *)OPENSSL_sk_deep_copy(ossl_check_const_BIO_sk_type(sk), ossl_check_BIO_copyfunc_type(copyfunc), ossl_check_BIO_freefunc_type(freefunc))) +#define sk_BIO_set_cmp_func(sk, cmp) ((sk_BIO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_BIO_sk_type(sk), ossl_check_BIO_compfunc_type(cmp))) + + /* Prefix and suffix callback in ASN1 BIO */ typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, void *parg); +typedef void (*BIO_dgram_sctp_notification_handler_fn) (BIO *b, + void *context, + void *buf); # ifndef OPENSSL_NO_SCTP /* SCTP parameter structs */ struct bio_dgram_sctp_sndinfo { @@ -400,12 +476,11 @@ struct bio_dgram_sctp_prinfo { # define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR # define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) # define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) - -/* BIO_s_accept() and BIO_s_connect() */ -# define BIO_do_connect(b) BIO_do_handshake(b) -# define BIO_do_accept(b) BIO_do_handshake(b) # endif /* OPENSSL_NO_SOCK */ +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) + # define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) /* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ @@ -524,10 +599,15 @@ int BIO_ctrl_reset_read_request(BIO *b); # define BIO_dgram_get_mtu_overhead(b) \ (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) +/* ctrl macros for BIO_f_prefix */ +# define BIO_set_prefix(b,p) BIO_ctrl((b), BIO_CTRL_SET_PREFIX, 0, (void *)(p)) +# define BIO_set_indent(b,i) BIO_ctrl((b), BIO_CTRL_SET_INDENT, (i), NULL) +# define BIO_get_indent(b) BIO_ctrl((b), BIO_CTRL_GET_INDENT, 0, NULL) + #define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) int BIO_set_ex_data(BIO *bio, int idx, void *data); -void *BIO_get_ex_data(BIO *bio, int idx); +void *BIO_get_ex_data(const BIO *bio, int idx); uint64_t BIO_number_read(BIO *bio); uint64_t BIO_number_written(BIO *bio); @@ -543,9 +623,11 @@ int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, const BIO_METHOD *BIO_s_file(void); BIO *BIO_new_file(const char *filename, const char *mode); +BIO *BIO_new_from_core_bio(OSSL_LIB_CTX *libctx, OSSL_CORE_BIO *corebio); # ifndef OPENSSL_NO_STDIO BIO *BIO_new_fp(FILE *stream, int close_flag); # endif +BIO *BIO_new_ex(OSSL_LIB_CTX *libctx, const BIO_METHOD *method); BIO *BIO_new(const BIO_METHOD *type); int BIO_free(BIO *a); void BIO_set_data(BIO *a, void *ptr); @@ -559,6 +641,7 @@ int BIO_up_ref(BIO *a); int BIO_read(BIO *b, void *data, int dlen); int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); int BIO_gets(BIO *bp, char *buf, int size); +int BIO_get_line(BIO *bio, char *buf, int size); int BIO_write(BIO *b, const void *data, int dlen); int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); int BIO_puts(BIO *bp, const char *buf); @@ -583,9 +666,6 @@ int BIO_nread(BIO *bio, char **buf, int num); int BIO_nwrite0(BIO *bio, char **buf); int BIO_nwrite(BIO *bio, char **buf, int num); -long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, - long argl, long ret); - const BIO_METHOD *BIO_s_mem(void); const BIO_METHOD *BIO_s_secmem(void); BIO *BIO_new_mem_buf(const void *buf, int len); @@ -600,8 +680,11 @@ const BIO_METHOD *BIO_s_bio(void); const BIO_METHOD *BIO_s_null(void); const BIO_METHOD *BIO_f_null(void); const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_readbuffer(void); const BIO_METHOD *BIO_f_linebuffer(void); const BIO_METHOD *BIO_f_nbio_test(void); +const BIO_METHOD *BIO_f_prefix(void); +const BIO_METHOD *BIO_s_core(void); # ifndef OPENSSL_NO_DGRAM const BIO_METHOD *BIO_s_datagram(void); int BIO_dgram_non_fatal_error(int error); @@ -611,10 +694,8 @@ const BIO_METHOD *BIO_s_datagram_sctp(void); BIO *BIO_new_dgram_sctp(int fd, int close_flag); int BIO_dgram_is_sctp(BIO *bio); int BIO_dgram_sctp_notification_cb(BIO *b, - void (*handle_notifications) (BIO *bio, - void *context, - void *buf), - void *context); + BIO_dgram_sctp_notification_handler_fn handle_notifications, + void *context); int BIO_dgram_sctp_wait_for_dry(BIO *b); int BIO_dgram_sctp_msg_waiting(BIO *b); # endif @@ -623,21 +704,24 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_socket_wait(int fd, int for_read, time_t max_time); # endif +int BIO_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds); +int BIO_do_connect_retry(BIO *bio, int timeout, int nap_milliseconds); int BIO_fd_should_retry(int i); int BIO_fd_non_fatal_error(int error); int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len); + void *u, const void *s, int len); int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len, int indent); -int BIO_dump(BIO *b, const char *bytes, int len); -int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); + void *u, const void *s, int len, int indent); +int BIO_dump(BIO *b, const void *bytes, int len); +int BIO_dump_indent(BIO *b, const void *bytes, int len, int indent); # ifndef OPENSSL_NO_STDIO -int BIO_dump_fp(FILE *fp, const char *s, int len); -int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); +int BIO_dump_fp(FILE *fp, const void *s, int len); +int BIO_dump_indent_fp(FILE *fp, const void *s, int len, int indent); # endif -int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, +int BIO_hex_string(BIO *out, int indent, int width, const void *data, int datalen); # ifndef OPENSSL_NO_SOCK @@ -678,16 +762,17 @@ int BIO_sock_error(int sock); int BIO_socket_ioctl(int fd, long type, void *arg); int BIO_socket_nbio(int fd, int mode); int BIO_sock_init(void); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define BIO_sock_cleanup() while(0) continue # endif int BIO_set_tcp_ndelay(int sock, int turn_on); - -DEPRECATEDIN_1_1_0(struct hostent *BIO_gethostbyname(const char *name)) -DEPRECATEDIN_1_1_0(int BIO_get_port(const char *str, unsigned short *port_ptr)) -DEPRECATEDIN_1_1_0(int BIO_get_host_ip(const char *str, unsigned char *ip)) -DEPRECATEDIN_1_1_0(int BIO_get_accept_socket(char *host_port, int mode)) -DEPRECATEDIN_1_1_0(int BIO_accept(int sock, char **ip_port)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 struct hostent *BIO_gethostbyname(const char *name); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_port(const char *str, unsigned short *port_ptr); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_host_ip(const char *str, unsigned char *ip); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_accept_socket(char *host_port, int mode); +OSSL_DEPRECATEDIN_1_1_0 int BIO_accept(int sock, char **ip_port); +# endif union BIO_sock_info_u { BIO_ADDR *addr; @@ -734,6 +819,7 @@ void BIO_copy_next_retry(BIO *b); # define ossl_bio__attr__(x) # if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__MINGW32__) && !defined(__MINGW64__) \ && !defined(__APPLE__) /* * Because we support the 'z' modifier, which made its appearance in C99, diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h.in new file mode 100644 index 00000000..c521e41e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h.in @@ -0,0 +1,864 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_BIO_H +# define OPENSSL_BIO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BIO_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* There are the classes of BIOs */ +# define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */ +# define BIO_TYPE_FILTER 0x0200 +# define BIO_TYPE_SOURCE_SINK 0x0400 + +/* These are the 'types' of BIOs */ +# define BIO_TYPE_NONE 0 +# define BIO_TYPE_MEM ( 1|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_FILE ( 2|BIO_TYPE_SOURCE_SINK) + +# define BIO_TYPE_FD ( 4|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_SOCKET ( 5|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_NULL ( 6|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_SSL ( 7|BIO_TYPE_FILTER) +# define BIO_TYPE_MD ( 8|BIO_TYPE_FILTER) +# define BIO_TYPE_BUFFER ( 9|BIO_TYPE_FILTER) +# define BIO_TYPE_CIPHER (10|BIO_TYPE_FILTER) +# define BIO_TYPE_BASE64 (11|BIO_TYPE_FILTER) +# define BIO_TYPE_CONNECT (12|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ACCEPT (13|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) + +# define BIO_TYPE_NBIO_TEST (16|BIO_TYPE_FILTER)/* server proxy BIO */ +# define BIO_TYPE_NULL_FILTER (17|BIO_TYPE_FILTER) +# define BIO_TYPE_BIO (19|BIO_TYPE_SOURCE_SINK)/* half a BIO pair */ +# define BIO_TYPE_LINEBUFFER (20|BIO_TYPE_FILTER) +# define BIO_TYPE_DGRAM (21|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ASN1 (22|BIO_TYPE_FILTER) +# define BIO_TYPE_COMP (23|BIO_TYPE_FILTER) +# ifndef OPENSSL_NO_SCTP +# define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# endif +# define BIO_TYPE_CORE_TO_PROV (25|BIO_TYPE_SOURCE_SINK) + +#define BIO_TYPE_START 128 + +/* + * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. + * BIO_set_fp(in,stdin,BIO_NOCLOSE); + */ +# define BIO_NOCLOSE 0x00 +# define BIO_CLOSE 0x01 + +/* + * These are used in the following macros and are passed to BIO_ctrl() + */ +# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ +# define BIO_CTRL_EOF 2/* opt - are we at the eof */ +# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ +# define BIO_CTRL_SET 4/* man - set the 'IO' type */ +# define BIO_CTRL_GET 5/* man - get the 'IO' type */ +# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ +# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ +# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ +# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ +# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ +# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ +# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ +# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ +# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ +# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ + +# define BIO_CTRL_PEEK 29/* BIO_f_buffer special */ +# define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ + +/* dgram BIO stuff */ +# define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ +# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected + * socket to be passed in */ +# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ +# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ + +# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation timed out */ + +/* #ifdef IP_MTU_DISCOVER */ +# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ +/* #endif */ + +# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ +# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 +# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ +# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. + * want to use this if asking + * the kernel fails */ + +# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was + * exceed in the previous write + * operation */ + +# define BIO_CTRL_DGRAM_GET_PEER 46 +# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ + +# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout + * to adjust socket timeouts */ +# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 + +# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 + +/* Deliberately outside of OPENSSL_NO_SCTP - used in bss_dgram.c */ +# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 +# ifndef OPENSSL_NO_SCTP +/* SCTP stuff */ +# define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 +# define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 +# define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 +# define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 +# define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 +# define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 +# define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 +# define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 +# define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 +# define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 +# endif + +# define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 + +/* + * internal BIO: + * # define BIO_CTRL_SET_KTLS_SEND 72 + * # define BIO_CTRL_SET_KTLS_SEND_CTRL_MSG 74 + * # define BIO_CTRL_CLEAR_KTLS_CTRL_MSG 75 + */ + +# define BIO_CTRL_GET_KTLS_SEND 73 +# define BIO_CTRL_GET_KTLS_RECV 76 + +# define BIO_CTRL_DGRAM_SCTP_WAIT_FOR_DRY 77 +# define BIO_CTRL_DGRAM_SCTP_MSG_WAITING 78 + +/* BIO_f_prefix controls */ +# define BIO_CTRL_SET_PREFIX 79 +# define BIO_CTRL_SET_INDENT 80 +# define BIO_CTRL_GET_INDENT 81 + +# ifndef OPENSSL_NO_KTLS +# define BIO_get_ktls_send(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL) > 0) +# define BIO_get_ktls_recv(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL) > 0) +# else +# define BIO_get_ktls_send(b) (0) +# define BIO_get_ktls_recv(b) (0) +# endif + +/* modifiers */ +# define BIO_FP_READ 0x02 +# define BIO_FP_WRITE 0x04 +# define BIO_FP_APPEND 0x08 +# define BIO_FP_TEXT 0x10 + +# define BIO_FLAGS_READ 0x01 +# define BIO_FLAGS_WRITE 0x02 +# define BIO_FLAGS_IO_SPECIAL 0x04 +# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) +# define BIO_FLAGS_SHOULD_RETRY 0x08 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* This #define was replaced by an internal constant and should not be used. */ +# define BIO_FLAGS_UPLINK 0 +# endif + +# define BIO_FLAGS_BASE64_NO_NL 0x100 + +/* + * This is used with memory BIOs: + * BIO_FLAGS_MEM_RDONLY means we shouldn't free up or change the data in any way; + * BIO_FLAGS_NONCLEAR_RST means we shouldn't clear data on reset. + */ +# define BIO_FLAGS_MEM_RDONLY 0x200 +# define BIO_FLAGS_NONCLEAR_RST 0x400 +# define BIO_FLAGS_IN_EOF 0x800 + +/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ + +typedef union bio_addr_st BIO_ADDR; +typedef struct bio_addrinfo_st BIO_ADDRINFO; + +int BIO_get_new_index(void); +void BIO_set_flags(BIO *b, int flags); +int BIO_test_flags(const BIO *b, int flags); +void BIO_clear_flags(BIO *b, int flags); + +# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) +# define BIO_set_retry_special(b) \ + BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_read(b) \ + BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_write(b) \ + BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) + +/* These are normally used internally in BIOs */ +# define BIO_clear_retry_flags(b) \ + BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_get_retry_flags(b) \ + BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) + +/* These should be used by the application to tell why we should retry */ +# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) +# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) +# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) +# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) +# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) + +/* + * The next three are used in conjunction with the BIO_should_io_special() + * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int + * *reason); will walk the BIO stack and return the 'reason' for the special + * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return + * the code. + */ +/* + * Returned from the SSL bio when the certificate retrieval code had an error + */ +# define BIO_RR_SSL_X509_LOOKUP 0x01 +/* Returned from the connect BIO when a connect would have blocked */ +# define BIO_RR_CONNECT 0x02 +/* Returned from the accept BIO when an accept would have blocked */ +# define BIO_RR_ACCEPT 0x03 + +/* These are passed by the BIO callback */ +# define BIO_CB_FREE 0x01 +# define BIO_CB_READ 0x02 +# define BIO_CB_WRITE 0x03 +# define BIO_CB_PUTS 0x04 +# define BIO_CB_GETS 0x05 +# define BIO_CB_CTRL 0x06 + +/* + * The callback is called before and after the underling operation, The + * BIO_CB_RETURN flag indicates if it is after the call + */ +# define BIO_CB_RETURN 0x80 +# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) +# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) +# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, + long argl, long ret); +OSSL_DEPRECATEDIN_3_0 BIO_callback_fn BIO_get_callback(const BIO *b); +OSSL_DEPRECATEDIN_3_0 void BIO_set_callback(BIO *b, BIO_callback_fn callback); +OSSL_DEPRECATEDIN_3_0 long BIO_debug_callback(BIO *bio, int cmd, + const char *argp, int argi, + long argl, long ret); +# endif + +typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, + size_t len, int argi, + long argl, int ret, size_t *processed); +BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); +void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); +long BIO_debug_callback_ex(BIO *bio, int oper, const char *argp, size_t len, + int argi, long argl, int ret, size_t *processed); + +char *BIO_get_callback_arg(const BIO *b); +void BIO_set_callback_arg(BIO *b, char *arg); + +typedef struct bio_method_st BIO_METHOD; + +const char *BIO_method_name(const BIO *b); +int BIO_method_type(const BIO *b); + +typedef int BIO_info_cb(BIO *, int, int); +typedef BIO_info_cb bio_info_cb; /* backward compatibility */ + +{- + generate_stack_macros("BIO"); +-} + + +/* Prefix and suffix callback in ASN1 BIO */ +typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, + void *parg); + +typedef void (*BIO_dgram_sctp_notification_handler_fn) (BIO *b, + void *context, + void *buf); +# ifndef OPENSSL_NO_SCTP +/* SCTP parameter structs */ +struct bio_dgram_sctp_sndinfo { + uint16_t snd_sid; + uint16_t snd_flags; + uint32_t snd_ppid; + uint32_t snd_context; +}; + +struct bio_dgram_sctp_rcvinfo { + uint16_t rcv_sid; + uint16_t rcv_ssn; + uint16_t rcv_flags; + uint32_t rcv_ppid; + uint32_t rcv_tsn; + uint32_t rcv_cumtsn; + uint32_t rcv_context; +}; + +struct bio_dgram_sctp_prinfo { + uint16_t pr_policy; + uint32_t pr_value; +}; +# endif + +/* + * #define BIO_CONN_get_param_hostname BIO_ctrl + */ + +# define BIO_C_SET_CONNECT 100 +# define BIO_C_DO_STATE_MACHINE 101 +# define BIO_C_SET_NBIO 102 +/* # define BIO_C_SET_PROXY_PARAM 103 */ +# define BIO_C_SET_FD 104 +# define BIO_C_GET_FD 105 +# define BIO_C_SET_FILE_PTR 106 +# define BIO_C_GET_FILE_PTR 107 +# define BIO_C_SET_FILENAME 108 +# define BIO_C_SET_SSL 109 +# define BIO_C_GET_SSL 110 +# define BIO_C_SET_MD 111 +# define BIO_C_GET_MD 112 +# define BIO_C_GET_CIPHER_STATUS 113 +# define BIO_C_SET_BUF_MEM 114 +# define BIO_C_GET_BUF_MEM_PTR 115 +# define BIO_C_GET_BUFF_NUM_LINES 116 +# define BIO_C_SET_BUFF_SIZE 117 +# define BIO_C_SET_ACCEPT 118 +# define BIO_C_SSL_MODE 119 +# define BIO_C_GET_MD_CTX 120 +/* # define BIO_C_GET_PROXY_PARAM 121 */ +# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ +# define BIO_C_GET_CONNECT 123 +# define BIO_C_GET_ACCEPT 124 +# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 +# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 +# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 +# define BIO_C_FILE_SEEK 128 +# define BIO_C_GET_CIPHER_CTX 129 +# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input + * value */ +# define BIO_C_SET_BIND_MODE 131 +# define BIO_C_GET_BIND_MODE 132 +# define BIO_C_FILE_TELL 133 +# define BIO_C_GET_SOCKS 134 +# define BIO_C_SET_SOCKS 135 + +# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ +# define BIO_C_GET_WRITE_BUF_SIZE 137 +# define BIO_C_MAKE_BIO_PAIR 138 +# define BIO_C_DESTROY_BIO_PAIR 139 +# define BIO_C_GET_WRITE_GUARANTEE 140 +# define BIO_C_GET_READ_REQUEST 141 +# define BIO_C_SHUTDOWN_WR 142 +# define BIO_C_NREAD0 143 +# define BIO_C_NREAD 144 +# define BIO_C_NWRITE0 145 +# define BIO_C_NWRITE 146 +# define BIO_C_RESET_READ_REQUEST 147 +# define BIO_C_SET_MD_CTX 148 + +# define BIO_C_SET_PREFIX 149 +# define BIO_C_GET_PREFIX 150 +# define BIO_C_SET_SUFFIX 151 +# define BIO_C_GET_SUFFIX 152 + +# define BIO_C_SET_EX_ARG 153 +# define BIO_C_GET_EX_ARG 154 + +# define BIO_C_SET_CONNECT_MODE 155 + +# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) +# define BIO_get_app_data(s) BIO_get_ex_data(s,0) + +# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +# ifndef OPENSSL_NO_SOCK +/* IP families we support, for BIO_s_connect() and BIO_s_accept() */ +/* Note: the underlying operating system may not support some of them */ +# define BIO_FAMILY_IPV4 4 +# define BIO_FAMILY_IPV6 6 +# define BIO_FAMILY_IPANY 256 + +/* BIO_s_connect() */ +# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0, \ + (char *)(name)) +# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1, \ + (char *)(port)) +# define BIO_set_conn_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2, \ + (char *)(addr)) +# define BIO_set_conn_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f) +# define BIO_get_conn_hostname(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)) +# define BIO_get_conn_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)) +# define BIO_get_conn_address(b) ((const BIO_ADDR *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)) +# define BIO_get_conn_ip_family(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) +# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) + +/* BIO_s_accept() */ +# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \ + (char *)(name)) +# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1, \ + (char *)(port)) +# define BIO_get_accept_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)) +# define BIO_get_accept_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1)) +# define BIO_get_peer_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2)) +# define BIO_get_peer_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3)) +/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ +# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(n)?(void *)"a":NULL) +# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3, \ + (char *)(bio)) +# define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f) +# define BIO_get_accept_ip_family(b) BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL) + +/* Aliases kept for backward compatibility */ +# define BIO_BIND_NORMAL 0 +# define BIO_BIND_REUSEADDR BIO_SOCK_REUSEADDR +# define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR +# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) +# define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) +# endif /* OPENSSL_NO_SOCK */ + +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) + +# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ +# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) +# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)(c)) + +/* BIO_s_file() */ +# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)(fp)) +# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)(fpp)) + +/* BIO_s_fd() and BIO_s_file() */ +# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) +# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) + +/* + * name is cast to lose const, but might be better to route through a + * function so we can do it safely + */ +# ifdef CONST_STRICT +/* + * If you are wondering why this isn't defined, its because CONST_STRICT is + * purely a compile-time kludge to allow const to be checked. + */ +int BIO_read_filename(BIO *b, const char *name); +# else +# define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ,(char *)(name)) +# endif +# define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_WRITE,name) +# define BIO_append_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_APPEND,name) +# define BIO_rw_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) + +/* + * WARNING WARNING, this ups the reference count on the read bio of the SSL + * structure. This is because the ssl read BIO is now pointed to by the + * next_bio field in the bio. So when you free the BIO, make sure you are + * doing a BIO_free_all() to catch the underlying BIO. + */ +# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)(ssl)) +# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)(sslp)) +# define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) +# define BIO_set_ssl_renegotiate_bytes(b,num) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) +# define BIO_get_num_renegotiates(b) \ + BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) +# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) + +/* defined in evp.h */ +/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)(md)) */ + +# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)(pp)) +# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)(bm)) +# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0, \ + (char *)(pp)) +# define BIO_set_mem_eof_return(b,v) \ + BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) + +/* For the BIO_f_buffer() type */ +# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) +# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) +# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) +# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) +# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) + +/* Don't use the next one unless you know what you are doing :-) */ +# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) + +# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) +# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) +# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) +# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) +# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) +# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) +/* ...pending macros have inappropriate return type */ +size_t BIO_ctrl_pending(BIO *b); +size_t BIO_ctrl_wpending(BIO *b); +# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) +# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ + cbp) +# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) + +/* For the BIO_f_buffer() type */ +# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) +# define BIO_buffer_peek(b,s,l) BIO_ctrl(b,BIO_CTRL_PEEK,(l),(s)) + +/* For BIO_s_bio() */ +# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) +# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) +# define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) +# define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) +# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) +/* macros with inappropriate type -- but ...pending macros use int too: */ +# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) +# define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) +size_t BIO_ctrl_get_write_guarantee(BIO *b); +size_t BIO_ctrl_get_read_request(BIO *b); +int BIO_ctrl_reset_read_request(BIO *b); + +/* ctrl macros for dgram */ +# define BIO_ctrl_dgram_connect(b,peer) \ + (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)(peer)) +# define BIO_ctrl_set_connected(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (char *)(peer)) +# define BIO_dgram_recv_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) +# define BIO_dgram_send_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) +# define BIO_dgram_get_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)(peer)) +# define BIO_dgram_set_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)(peer)) +# define BIO_dgram_get_mtu_overhead(b) \ + (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) + +/* ctrl macros for BIO_f_prefix */ +# define BIO_set_prefix(b,p) BIO_ctrl((b), BIO_CTRL_SET_PREFIX, 0, (void *)(p)) +# define BIO_set_indent(b,i) BIO_ctrl((b), BIO_CTRL_SET_INDENT, (i), NULL) +# define BIO_get_indent(b) BIO_ctrl((b), BIO_CTRL_GET_INDENT, 0, NULL) + +#define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) +int BIO_set_ex_data(BIO *bio, int idx, void *data); +void *BIO_get_ex_data(const BIO *bio, int idx); +uint64_t BIO_number_read(BIO *bio); +uint64_t BIO_number_written(BIO *bio); + +/* For BIO_f_asn1() */ +int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, + asn1_ps_func *prefix_free); +int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, + asn1_ps_func **pprefix_free); +int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, + asn1_ps_func *suffix_free); +int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, + asn1_ps_func **psuffix_free); + +const BIO_METHOD *BIO_s_file(void); +BIO *BIO_new_file(const char *filename, const char *mode); +BIO *BIO_new_from_core_bio(OSSL_LIB_CTX *libctx, OSSL_CORE_BIO *corebio); +# ifndef OPENSSL_NO_STDIO +BIO *BIO_new_fp(FILE *stream, int close_flag); +# endif +BIO *BIO_new_ex(OSSL_LIB_CTX *libctx, const BIO_METHOD *method); +BIO *BIO_new(const BIO_METHOD *type); +int BIO_free(BIO *a); +void BIO_set_data(BIO *a, void *ptr); +void *BIO_get_data(BIO *a); +void BIO_set_init(BIO *a, int init); +int BIO_get_init(BIO *a); +void BIO_set_shutdown(BIO *a, int shut); +int BIO_get_shutdown(BIO *a); +void BIO_vfree(BIO *a); +int BIO_up_ref(BIO *a); +int BIO_read(BIO *b, void *data, int dlen); +int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); +int BIO_gets(BIO *bp, char *buf, int size); +int BIO_get_line(BIO *bio, char *buf, int size); +int BIO_write(BIO *b, const void *data, int dlen); +int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); +int BIO_puts(BIO *bp, const char *buf); +int BIO_indent(BIO *b, int indent, int max); +long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); +long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); +void *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); +long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); +BIO *BIO_push(BIO *b, BIO *append); +BIO *BIO_pop(BIO *b); +void BIO_free_all(BIO *a); +BIO *BIO_find_type(BIO *b, int bio_type); +BIO *BIO_next(BIO *b); +void BIO_set_next(BIO *b, BIO *next); +BIO *BIO_get_retry_BIO(BIO *bio, int *reason); +int BIO_get_retry_reason(BIO *bio); +void BIO_set_retry_reason(BIO *bio, int reason); +BIO *BIO_dup_chain(BIO *in); + +int BIO_nread0(BIO *bio, char **buf); +int BIO_nread(BIO *bio, char **buf, int num); +int BIO_nwrite0(BIO *bio, char **buf); +int BIO_nwrite(BIO *bio, char **buf, int num); + +const BIO_METHOD *BIO_s_mem(void); +const BIO_METHOD *BIO_s_secmem(void); +BIO *BIO_new_mem_buf(const void *buf, int len); +# ifndef OPENSSL_NO_SOCK +const BIO_METHOD *BIO_s_socket(void); +const BIO_METHOD *BIO_s_connect(void); +const BIO_METHOD *BIO_s_accept(void); +# endif +const BIO_METHOD *BIO_s_fd(void); +const BIO_METHOD *BIO_s_log(void); +const BIO_METHOD *BIO_s_bio(void); +const BIO_METHOD *BIO_s_null(void); +const BIO_METHOD *BIO_f_null(void); +const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_readbuffer(void); +const BIO_METHOD *BIO_f_linebuffer(void); +const BIO_METHOD *BIO_f_nbio_test(void); +const BIO_METHOD *BIO_f_prefix(void); +const BIO_METHOD *BIO_s_core(void); +# ifndef OPENSSL_NO_DGRAM +const BIO_METHOD *BIO_s_datagram(void); +int BIO_dgram_non_fatal_error(int error); +BIO *BIO_new_dgram(int fd, int close_flag); +# ifndef OPENSSL_NO_SCTP +const BIO_METHOD *BIO_s_datagram_sctp(void); +BIO *BIO_new_dgram_sctp(int fd, int close_flag); +int BIO_dgram_is_sctp(BIO *bio); +int BIO_dgram_sctp_notification_cb(BIO *b, + BIO_dgram_sctp_notification_handler_fn handle_notifications, + void *context); +int BIO_dgram_sctp_wait_for_dry(BIO *b); +int BIO_dgram_sctp_msg_waiting(BIO *b); +# endif +# endif + +# ifndef OPENSSL_NO_SOCK +int BIO_sock_should_retry(int i); +int BIO_sock_non_fatal_error(int error); +int BIO_socket_wait(int fd, int for_read, time_t max_time); +# endif +int BIO_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds); +int BIO_do_connect_retry(BIO *bio, int timeout, int nap_milliseconds); + +int BIO_fd_should_retry(int i); +int BIO_fd_non_fatal_error(int error); +int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const void *s, int len); +int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const void *s, int len, int indent); +int BIO_dump(BIO *b, const void *bytes, int len); +int BIO_dump_indent(BIO *b, const void *bytes, int len, int indent); +# ifndef OPENSSL_NO_STDIO +int BIO_dump_fp(FILE *fp, const void *s, int len); +int BIO_dump_indent_fp(FILE *fp, const void *s, int len, int indent); +# endif +int BIO_hex_string(BIO *out, int indent, int width, const void *data, + int datalen); + +# ifndef OPENSSL_NO_SOCK +BIO_ADDR *BIO_ADDR_new(void); +int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, + const void *where, size_t wherelen, unsigned short port); +void BIO_ADDR_free(BIO_ADDR *); +void BIO_ADDR_clear(BIO_ADDR *ap); +int BIO_ADDR_family(const BIO_ADDR *ap); +int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); +unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); +char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_path_string(const BIO_ADDR *ap); + +const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai); +const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai); +void BIO_ADDRINFO_free(BIO_ADDRINFO *bai); + +enum BIO_hostserv_priorities { + BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV +}; +int BIO_parse_hostserv(const char *hostserv, char **host, char **service, + enum BIO_hostserv_priorities hostserv_prio); +enum BIO_lookup_type { + BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER +}; +int BIO_lookup(const char *host, const char *service, + enum BIO_lookup_type lookup_type, + int family, int socktype, BIO_ADDRINFO **res); +int BIO_lookup_ex(const char *host, const char *service, + int lookup_type, int family, int socktype, int protocol, + BIO_ADDRINFO **res); +int BIO_sock_error(int sock); +int BIO_socket_ioctl(int fd, long type, void *arg); +int BIO_socket_nbio(int fd, int mode); +int BIO_sock_init(void); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define BIO_sock_cleanup() while(0) continue +# endif +int BIO_set_tcp_ndelay(int sock, int turn_on); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 struct hostent *BIO_gethostbyname(const char *name); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_port(const char *str, unsigned short *port_ptr); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_host_ip(const char *str, unsigned char *ip); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_accept_socket(char *host_port, int mode); +OSSL_DEPRECATEDIN_1_1_0 int BIO_accept(int sock, char **ip_port); +# endif + +union BIO_sock_info_u { + BIO_ADDR *addr; +}; +enum BIO_sock_info_type { + BIO_SOCK_INFO_ADDRESS +}; +int BIO_sock_info(int sock, + enum BIO_sock_info_type type, union BIO_sock_info_u *info); + +# define BIO_SOCK_REUSEADDR 0x01 +# define BIO_SOCK_V6_ONLY 0x02 +# define BIO_SOCK_KEEPALIVE 0x04 +# define BIO_SOCK_NONBLOCK 0x08 +# define BIO_SOCK_NODELAY 0x10 + +int BIO_socket(int domain, int socktype, int protocol, int options); +int BIO_connect(int sock, const BIO_ADDR *addr, int options); +int BIO_bind(int sock, const BIO_ADDR *addr, int options); +int BIO_listen(int sock, const BIO_ADDR *addr, int options); +int BIO_accept_ex(int accept_sock, BIO_ADDR *addr, int options); +int BIO_closesocket(int sock); + +BIO *BIO_new_socket(int sock, int close_flag); +BIO *BIO_new_connect(const char *host_port); +BIO *BIO_new_accept(const char *host_port); +# endif /* OPENSSL_NO_SOCK*/ + +BIO *BIO_new_fd(int fd, int close_flag); + +int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, + BIO **bio2, size_t writebuf2); +/* + * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. + * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default + * value. + */ + +void BIO_copy_next_retry(BIO *b); + +/* + * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); + */ + +# define ossl_bio__attr__(x) +# if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__MINGW32__) && !defined(__MINGW64__) \ + && !defined(__APPLE__) + /* + * Because we support the 'z' modifier, which made its appearance in C99, + * we can't use __attribute__ with pre C99 dialects. + */ +# if __STDC_VERSION__ >= 199901L +# undef ossl_bio__attr__ +# define ossl_bio__attr__ __attribute__ +# if __GNUC__*10 + __GNUC_MINOR__ >= 44 +# define ossl_bio__printf__ __gnu_printf__ +# else +# define ossl_bio__printf__ __printf__ +# endif +# endif +# endif +int BIO_printf(BIO *bio, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 3))); +int BIO_vprintf(BIO *bio, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 0))); +int BIO_snprintf(char *buf, size_t n, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 4))); +int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 0))); +# undef ossl_bio__attr__ +# undef ossl_bio__printf__ + + +BIO_METHOD *BIO_meth_new(int type, const char *name); +void BIO_meth_free(BIO_METHOD *biom); +int (*BIO_meth_get_write(const BIO_METHOD *biom)) (BIO *, const char *, int); +int (*BIO_meth_get_write_ex(const BIO_METHOD *biom)) (BIO *, const char *, size_t, + size_t *); +int BIO_meth_set_write(BIO_METHOD *biom, + int (*write) (BIO *, const char *, int)); +int BIO_meth_set_write_ex(BIO_METHOD *biom, + int (*bwrite) (BIO *, const char *, size_t, size_t *)); +int (*BIO_meth_get_read(const BIO_METHOD *biom)) (BIO *, char *, int); +int (*BIO_meth_get_read_ex(const BIO_METHOD *biom)) (BIO *, char *, size_t, size_t *); +int BIO_meth_set_read(BIO_METHOD *biom, + int (*read) (BIO *, char *, int)); +int BIO_meth_set_read_ex(BIO_METHOD *biom, + int (*bread) (BIO *, char *, size_t, size_t *)); +int (*BIO_meth_get_puts(const BIO_METHOD *biom)) (BIO *, const char *); +int BIO_meth_set_puts(BIO_METHOD *biom, + int (*puts) (BIO *, const char *)); +int (*BIO_meth_get_gets(const BIO_METHOD *biom)) (BIO *, char *, int); +int BIO_meth_set_gets(BIO_METHOD *biom, + int (*gets) (BIO *, char *, int)); +long (*BIO_meth_get_ctrl(const BIO_METHOD *biom)) (BIO *, int, long, void *); +int BIO_meth_set_ctrl(BIO_METHOD *biom, + long (*ctrl) (BIO *, int, long, void *)); +int (*BIO_meth_get_create(const BIO_METHOD *bion)) (BIO *); +int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); +int (*BIO_meth_get_destroy(const BIO_METHOD *biom)) (BIO *); +int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); +long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom)) + (BIO *, int, BIO_info_cb *); +int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, + long (*callback_ctrl) (BIO *, int, + BIO_info_cb *)); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h index 46e2c96e..787b30af 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h @@ -1,84 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BIOERR_H -# define HEADER_BIOERR_H +#ifndef OPENSSL_BIOERR_H +# define OPENSSL_BIOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BIO_strings(void); -/* - * BIO function codes. - */ -# define BIO_F_ACPT_STATE 100 -# define BIO_F_ADDRINFO_WRAP 148 -# define BIO_F_ADDR_STRINGS 134 -# define BIO_F_BIO_ACCEPT 101 -# define BIO_F_BIO_ACCEPT_EX 137 -# define BIO_F_BIO_ACCEPT_NEW 152 -# define BIO_F_BIO_ADDR_NEW 144 -# define BIO_F_BIO_BIND 147 -# define BIO_F_BIO_CALLBACK_CTRL 131 -# define BIO_F_BIO_CONNECT 138 -# define BIO_F_BIO_CONNECT_NEW 153 -# define BIO_F_BIO_CTRL 103 -# define BIO_F_BIO_GETS 104 -# define BIO_F_BIO_GET_HOST_IP 106 -# define BIO_F_BIO_GET_NEW_INDEX 102 -# define BIO_F_BIO_GET_PORT 107 -# define BIO_F_BIO_LISTEN 139 -# define BIO_F_BIO_LOOKUP 135 -# define BIO_F_BIO_LOOKUP_EX 143 -# define BIO_F_BIO_MAKE_PAIR 121 -# define BIO_F_BIO_METH_NEW 146 -# define BIO_F_BIO_NEW 108 -# define BIO_F_BIO_NEW_DGRAM_SCTP 145 -# define BIO_F_BIO_NEW_FILE 109 -# define BIO_F_BIO_NEW_MEM_BUF 126 -# define BIO_F_BIO_NREAD 123 -# define BIO_F_BIO_NREAD0 124 -# define BIO_F_BIO_NWRITE 125 -# define BIO_F_BIO_NWRITE0 122 -# define BIO_F_BIO_PARSE_HOSTSERV 136 -# define BIO_F_BIO_PUTS 110 -# define BIO_F_BIO_READ 111 -# define BIO_F_BIO_READ_EX 105 -# define BIO_F_BIO_READ_INTERN 120 -# define BIO_F_BIO_SOCKET 140 -# define BIO_F_BIO_SOCKET_NBIO 142 -# define BIO_F_BIO_SOCK_INFO 141 -# define BIO_F_BIO_SOCK_INIT 112 -# define BIO_F_BIO_WRITE 113 -# define BIO_F_BIO_WRITE_EX 119 -# define BIO_F_BIO_WRITE_INTERN 128 -# define BIO_F_BUFFER_CTRL 114 -# define BIO_F_CONN_CTRL 127 -# define BIO_F_CONN_STATE 115 -# define BIO_F_DGRAM_SCTP_NEW 149 -# define BIO_F_DGRAM_SCTP_READ 132 -# define BIO_F_DGRAM_SCTP_WRITE 133 -# define BIO_F_DOAPR_OUTCH 150 -# define BIO_F_FILE_CTRL 116 -# define BIO_F_FILE_READ 130 -# define BIO_F_LINEBUFFER_CTRL 129 -# define BIO_F_LINEBUFFER_NEW 151 -# define BIO_F_MEM_WRITE 117 -# define BIO_F_NBIOF_NEW 154 -# define BIO_F_SLG_WRITE 155 -# define BIO_F_SSL_NEW 118 /* * BIO reason codes. @@ -89,6 +27,7 @@ int ERR_load_BIO_strings(void); # define BIO_R_BAD_FOPEN_MODE 101 # define BIO_R_BROKEN_PIPE 124 # define BIO_R_CONNECT_ERROR 103 +# define BIO_R_CONNECT_TIMEOUT 147 # define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 # define BIO_R_GETSOCKNAME_ERROR 132 # define BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS 133 @@ -105,7 +44,9 @@ int ERR_load_BIO_strings(void); # define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 # define BIO_R_NO_PORT_DEFINED 113 # define BIO_R_NO_SUCH_FILE 128 -# define BIO_R_NULL_PARAMETER 115 +# define BIO_R_NULL_PARAMETER 115 /* unused */ +# define BIO_R_TRANSFER_ERROR 104 +# define BIO_R_TRANSFER_TIMEOUT 105 # define BIO_R_UNABLE_TO_BIND_SOCKET 117 # define BIO_R_UNABLE_TO_CREATE_SOCKET 118 # define BIO_R_UNABLE_TO_KEEPALIVE 137 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/blowfish.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/blowfish.h index cd3e460e..667d6423 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/blowfish.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/blowfish.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BLOWFISH_H -# define HEADER_BLOWFISH_H +#ifndef OPENSSL_BLOWFISH_H +# define OPENSSL_BLOWFISH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BLOWFISH_H +# endif # include @@ -18,40 +24,51 @@ extern "C" { # endif -# define BF_ENCRYPT 1 -# define BF_DECRYPT 0 +# define BF_BLOCK 8 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define BF_ENCRYPT 1 +# define BF_DECRYPT 0 /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! BF_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define BF_LONG unsigned int +# define BF_LONG unsigned int -# define BF_ROUNDS 16 -# define BF_BLOCK 8 +# define BF_ROUNDS 16 typedef struct bf_key_st { BF_LONG P[BF_ROUNDS + 2]; BF_LONG S[4 * 256]; } BF_KEY; -void BF_set_key(BF_KEY *key, int len, const unsigned char *data); - -void BF_encrypt(BF_LONG *data, const BF_KEY *key); -void BF_decrypt(BF_LONG *data, const BF_KEY *key); - -void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, - const BF_KEY *key, int enc); -void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - const BF_KEY *schedule, unsigned char *ivec, int enc); -void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num); -const char *BF_options(void); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void BF_set_key(BF_KEY *key, int len, + const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void BF_encrypt(BF_LONG *data, const BF_KEY *key); +OSSL_DEPRECATEDIN_3_0 void BF_decrypt(BF_LONG *data, const BF_KEY *key); +OSSL_DEPRECATEDIN_3_0 void BF_ecb_encrypt(const unsigned char *in, + unsigned char *out, const BF_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void BF_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + const BF_KEY *schedule, + unsigned char *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void BF_cfb64_encrypt(const unsigned char *in, + unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void BF_ofb64_encrypt(const unsigned char *in, + unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num); +OSSL_DEPRECATEDIN_3_0 const char *BF_options(void); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h index d8776604..27b127a5 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h @@ -1,22 +1,28 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BN_H -# define HEADER_BN_H +#ifndef OPENSSL_BN_H +# define OPENSSL_BN_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BN_H +# endif # include # ifndef OPENSSL_NO_STDIO # include # endif # include -# include +# include # include # include @@ -61,7 +67,7 @@ extern "C" { # define BN_FLG_CONSTTIME 0x04 # define BN_FLG_SECURE 0x08 -# if OPENSSL_API_COMPAT < 0x00908000L +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 /* deprecated name for the flag */ # define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME # define BN_FLG_FREE 0x8000 /* used for debugging */ @@ -103,8 +109,9 @@ void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), void *BN_GENCB_get_arg(BN_GENCB *cb); -# define BN_prime_checks 0 /* default: select number of iterations based - * on the size of the number */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define BN_prime_checks 0 /* default: select number of iterations based + * on the size of the number */ /* * BN_prime_checks_for_size() returns the number of Miller-Rabin iterations @@ -169,14 +176,15 @@ void *BN_GENCB_get_arg(BN_GENCB *cb); * (b) >= 6 | >= 12 | 34 | 64 bit */ -# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ - (b) >= 1345 ? 4 : \ - (b) >= 476 ? 5 : \ - (b) >= 400 ? 6 : \ - (b) >= 347 ? 7 : \ - (b) >= 308 ? 8 : \ - (b) >= 55 ? 27 : \ - /* b >= 6 */ 34) +# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ + (b) >= 1345 ? 4 : \ + (b) >= 476 ? 5 : \ + (b) >= 400 ? 6 : \ + (b) >= 347 ? 7 : \ + (b) >= 308 ? 8 : \ + (b) >= 55 ? 27 : \ + /* b >= 6 */ 34) +# endif # define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) @@ -190,7 +198,7 @@ int BN_is_odd(const BIGNUM *a); void BN_zero_ex(BIGNUM *a); -# if OPENSSL_API_COMPAT >= 0x00908000L +# if OPENSSL_API_LEVEL > 908 # define BN_zero(a) BN_zero_ex(a) # else # define BN_zero(a) (BN_set_word((a),0)) @@ -198,18 +206,32 @@ void BN_zero_ex(BIGNUM *a); const BIGNUM *BN_value_one(void); char *BN_options(void); +BN_CTX *BN_CTX_new_ex(OSSL_LIB_CTX *ctx); BN_CTX *BN_CTX_new(void); +BN_CTX *BN_CTX_secure_new_ex(OSSL_LIB_CTX *ctx); BN_CTX *BN_CTX_secure_new(void); void BN_CTX_free(BN_CTX *c); void BN_CTX_start(BN_CTX *ctx); BIGNUM *BN_CTX_get(BN_CTX *ctx); void BN_CTX_end(BN_CTX *ctx); +int BN_rand_ex(BIGNUM *rnd, int bits, int top, int bottom, + unsigned int strength, BN_CTX *ctx); int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_priv_rand_ex(BIGNUM *rnd, int bits, int top, int bottom, + unsigned int strength, BN_CTX *ctx); int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_rand_range_ex(BIGNUM *r, const BIGNUM *range, unsigned int strength, + BN_CTX *ctx); int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_priv_rand_range_ex(BIGNUM *r, const BIGNUM *range, + unsigned int strength, BN_CTX *ctx); int BN_priv_rand_range(BIGNUM *rnd, const BIGNUM *range); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); +OSSL_DEPRECATEDIN_3_0 int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); +# endif int BN_num_bits(const BIGNUM *a); int BN_num_bits_word(BN_ULONG l); int BN_security_bits(int L, int N); @@ -223,6 +245,8 @@ int BN_bn2bin(const BIGNUM *a, unsigned char *to); int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_native2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2nativepad(const BIGNUM *a, unsigned char *to, int tolen); BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); int BN_bn2mpi(const BIGNUM *a, unsigned char *to); int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); @@ -292,6 +316,11 @@ int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, BN_CTX *ctx, BN_MONT_CTX *m_ctx); int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_exp_mont_consttime_x2(BIGNUM *rr1, const BIGNUM *a1, const BIGNUM *p1, + const BIGNUM *m1, BN_MONT_CTX *in_mont1, + BIGNUM *rr2, const BIGNUM *a2, const BIGNUM *p2, + const BIGNUM *m2, BN_MONT_CTX *in_mont2, + BN_CTX *ctx); int BN_mask_bits(BIGNUM *a, int n); # ifndef OPENSSL_NO_STDIO @@ -315,6 +344,7 @@ int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns * -2 for * error */ +int BN_are_coprime(BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); BIGNUM *BN_mod_inverse(BIGNUM *ret, const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); BIGNUM *BN_mod_sqrt(BIGNUM *ret, @@ -323,38 +353,51 @@ BIGNUM *BN_mod_sqrt(BIGNUM *ret, void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); /* Deprecated versions */ -DEPRECATEDIN_0_9_8(BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, - const BIGNUM *add, - const BIGNUM *rem, - void (*callback) (int, int, - void *), - void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime_fasttest(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg, - int do_trial_division)) - -/* Newer versions */ -int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, - const BIGNUM *rem, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 +BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, const BIGNUM *rem, + void (*callback) (int, int, void *), + void *cb_arg); +OSSL_DEPRECATEDIN_0_9_8 +int BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg); +OSSL_DEPRECATEDIN_0_9_8 +int BN_is_prime_fasttest(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg, + int do_trial_division); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, int do_trial_division, BN_GENCB *cb); +# endif +/* Newer versions */ +int BN_generate_prime_ex2(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb, + BN_CTX *ctx); +int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, + const BIGNUM *rem, BN_GENCB *cb); +int BN_check_prime(const BIGNUM *p, BN_CTX *ctx, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, const BIGNUM *Xp, const BIGNUM *Xp1, const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb); +# endif BN_MONT_CTX *BN_MONT_CTX_new(void); int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, @@ -398,10 +441,12 @@ BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, BN_CTX *ctx, BN_MONT_CTX *m_ctx), BN_MONT_CTX *m_ctx); - -DEPRECATEDIN_0_9_8(void BN_set_params(int mul, int high, int low, int mont)) -DEPRECATEDIN_0_9_8(int BN_get_params(int which)) /* 0, mul, 1 high, 2 low, 3 - * mont */ +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 +void BN_set_params(int mul, int high, int low, int mont); +OSSL_DEPRECATEDIN_0_9_8 +int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */ +# endif BN_RECP_CTX *BN_RECP_CTX_new(void); void BN_RECP_CTX_free(BN_RECP_CTX *recp); @@ -519,16 +564,16 @@ BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); -# if OPENSSL_API_COMPAT < 0x10100000L -# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 -# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 -# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 -# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 -# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 -# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 -# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 -# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 -# endif +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 +# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 +# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 +# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 +# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 +# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 +# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 +# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 +# endif int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bnerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bnerr.h index 5c83777f..7c3f6ef3 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bnerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bnerr.h @@ -1,78 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BNERR_H -# define HEADER_BNERR_H +#ifndef OPENSSL_BNERR_H +# define OPENSSL_BNERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BN_strings(void); -/* - * BN function codes. - */ -# define BN_F_BNRAND 127 -# define BN_F_BNRAND_RANGE 138 -# define BN_F_BN_BLINDING_CONVERT_EX 100 -# define BN_F_BN_BLINDING_CREATE_PARAM 128 -# define BN_F_BN_BLINDING_INVERT_EX 101 -# define BN_F_BN_BLINDING_NEW 102 -# define BN_F_BN_BLINDING_UPDATE 103 -# define BN_F_BN_BN2DEC 104 -# define BN_F_BN_BN2HEX 105 -# define BN_F_BN_COMPUTE_WNAF 142 -# define BN_F_BN_CTX_GET 116 -# define BN_F_BN_CTX_NEW 106 -# define BN_F_BN_CTX_START 129 -# define BN_F_BN_DIV 107 -# define BN_F_BN_DIV_RECP 130 -# define BN_F_BN_EXP 123 -# define BN_F_BN_EXPAND_INTERNAL 120 -# define BN_F_BN_GENCB_NEW 143 -# define BN_F_BN_GENERATE_DSA_NONCE 140 -# define BN_F_BN_GENERATE_PRIME_EX 141 -# define BN_F_BN_GF2M_MOD 131 -# define BN_F_BN_GF2M_MOD_EXP 132 -# define BN_F_BN_GF2M_MOD_MUL 133 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 -# define BN_F_BN_GF2M_MOD_SQR 136 -# define BN_F_BN_GF2M_MOD_SQRT 137 -# define BN_F_BN_LSHIFT 145 -# define BN_F_BN_MOD_EXP2_MONT 118 -# define BN_F_BN_MOD_EXP_MONT 109 -# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 -# define BN_F_BN_MOD_EXP_MONT_WORD 117 -# define BN_F_BN_MOD_EXP_RECP 125 -# define BN_F_BN_MOD_EXP_SIMPLE 126 -# define BN_F_BN_MOD_INVERSE 110 -# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 -# define BN_F_BN_MOD_LSHIFT_QUICK 119 -# define BN_F_BN_MOD_SQRT 121 -# define BN_F_BN_MONT_CTX_NEW 149 -# define BN_F_BN_MPI2BN 112 -# define BN_F_BN_NEW 113 -# define BN_F_BN_POOL_GET 147 -# define BN_F_BN_RAND 114 -# define BN_F_BN_RAND_RANGE 122 -# define BN_F_BN_RECP_CTX_NEW 150 -# define BN_F_BN_RSHIFT 146 -# define BN_F_BN_SET_WORDS 144 -# define BN_F_BN_STACK_PUSH 148 -# define BN_F_BN_USUB 115 -# define BN_F_OSSL_BN_RSA_DO_UNBLIND 151 /* * BN reason codes. @@ -92,7 +36,9 @@ int ERR_load_BN_strings(void); # define BN_R_NOT_A_SQUARE 111 # define BN_R_NOT_INITIALIZED 107 # define BN_R_NO_INVERSE 108 +# define BN_R_NO_PRIME_CANDIDATE 121 # define BN_R_NO_SOLUTION 116 +# define BN_R_NO_SUITABLE_DIGEST 120 # define BN_R_PRIVATE_KEY_TOO_LARGE 117 # define BN_R_P_IS_NOT_PRIME 112 # define BN_R_TOO_MANY_ITERATIONS 113 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffer.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffer.h index d2765766..5773b986 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffer.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffer.h @@ -1,17 +1,23 @@ /* * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BUFFER_H -# define HEADER_BUFFER_H +#ifndef OPENSSL_BUFFER_H +# define OPENSSL_BUFFER_H +# pragma once -# include -# ifndef HEADER_CRYPTO_H +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BUFFER_H +# endif + +# include +# ifndef OPENSSL_CRYPTO_H # include # endif # include @@ -24,16 +30,14 @@ extern "C" { # include # include -/* - * These names are outdated as of OpenSSL 1.1; a future release - * will move them to be deprecated. - */ -# define BUF_strdup(s) OPENSSL_strdup(s) -# define BUF_strndup(s, size) OPENSSL_strndup(s, size) -# define BUF_memdup(data, size) OPENSSL_memdup(data, size) -# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) -# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) -# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define BUF_strdup(s) OPENSSL_strdup(s) +# define BUF_strndup(s, size) OPENSSL_strndup(s, size) +# define BUF_memdup(data, size) OPENSSL_memdup(data, size) +# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) +# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) +# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) +# endif struct buf_mem_st { size_t length; /* current number of bytes */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffererr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffererr.h index 04f6ff7a..d18b1f8f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffererr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffererr.h @@ -1,31 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BUFERR_H -# define HEADER_BUFERR_H +#ifndef OPENSSL_BUFFERERR_H +# define OPENSSL_BUFFERERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BUF_strings(void); -/* - * BUF function codes. - */ -# define BUF_F_BUF_MEM_GROW 100 -# define BUF_F_BUF_MEM_GROW_CLEAN 105 -# define BUF_F_BUF_MEM_NEW 101 /* * BUF reason codes. diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/camellia.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/camellia.h index 151f3c13..88c2279e 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/camellia.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/camellia.h @@ -1,14 +1,20 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CAMELLIA_H -# define HEADER_CAMELLIA_H +#ifndef OPENSSL_CAMELLIA_H +# define OPENSSL_CAMELLIA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CAMELLIA_H +# endif # include @@ -18,8 +24,12 @@ extern "C" { #endif -# define CAMELLIA_ENCRYPT 1 -# define CAMELLIA_DECRYPT 0 +# define CAMELLIA_BLOCK_SIZE 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define CAMELLIA_ENCRYPT 1 +# define CAMELLIA_DECRYPT 0 /* * Because array size can't be a const in C, the following two are macros. @@ -28,9 +38,8 @@ extern "C" { /* This should be a hidden type, but EVP requires that the size be known */ -# define CAMELLIA_BLOCK_SIZE 16 -# define CAMELLIA_TABLE_BYTE_LEN 272 -# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) +# define CAMELLIA_TABLE_BYTE_LEN 272 +# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match * with WORD */ @@ -44,36 +53,61 @@ struct camellia_key_st { }; typedef struct camellia_key_st CAMELLIA_KEY; -int Camellia_set_key(const unsigned char *userKey, const int bits, - CAMELLIA_KEY *key); - -void Camellia_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); -void Camellia_decrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); - -void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key, const int enc); -void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, const int enc); -void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int Camellia_set_key(const unsigned char *userKey, + const int bits, + CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_encrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_decrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_ecb_encrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb128_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb1_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb8_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_ofb128_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num); +OSSL_DEPRECATEDIN_3_0 void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const CAMELLIA_KEY *key, unsigned char ivec[CAMELLIA_BLOCK_SIZE], unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], unsigned int *num); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cast.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cast.h index 2cc89ae0..0bf217be 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cast.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cast.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CAST_H -# define HEADER_CAST_H +#ifndef OPENSSL_CAST_H +# define OPENSSL_CAST_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CAST_H +# endif # include @@ -17,33 +23,45 @@ extern "C" { # endif -# define CAST_ENCRYPT 1 -# define CAST_DECRYPT 0 - -# define CAST_LONG unsigned int - # define CAST_BLOCK 8 # define CAST_KEY_LENGTH 16 +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define CAST_ENCRYPT 1 +# define CAST_DECRYPT 0 + +# define CAST_LONG unsigned int + typedef struct cast_key_st { CAST_LONG data[32]; int short_key; /* Use reduced rounds for short key */ } CAST_KEY; +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, const CAST_KEY *key, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); +OSSL_DEPRECATEDIN_3_0 void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); +OSSL_DEPRECATEDIN_3_0 void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *ks, unsigned char *iv, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *schedule, unsigned char *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *schedule, unsigned char *ivec, int *num); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmac.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmac.h index 3535a9ab..f5086183 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmac.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmac.h @@ -1,41 +1,52 @@ /* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMAC_H -# define HEADER_CMAC_H +#ifndef OPENSSL_CMAC_H +# define OPENSSL_CMAC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMAC_H +# endif # ifndef OPENSSL_NO_CMAC -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -# include +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* Opaque */ typedef struct CMAC_CTX_st CMAC_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CMAC_CTX *CMAC_CTX_new(void); +OSSL_DEPRECATEDIN_3_0 void CMAC_CTX_cleanup(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void CMAC_CTX_free(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); +OSSL_DEPRECATEDIN_3_0 int CMAC_Init(CMAC_CTX *ctx, + const void *key, size_t keylen, + const EVP_CIPHER *cipher, ENGINE *impl); +OSSL_DEPRECATEDIN_3_0 int CMAC_Update(CMAC_CTX *ctx, + const void *data, size_t dlen); +OSSL_DEPRECATEDIN_3_0 int CMAC_Final(CMAC_CTX *ctx, + unsigned char *out, size_t *poutlen); +OSSL_DEPRECATEDIN_3_0 int CMAC_resume(CMAC_CTX *ctx); +# endif -CMAC_CTX *CMAC_CTX_new(void); -void CMAC_CTX_cleanup(CMAC_CTX *ctx); -void CMAC_CTX_free(CMAC_CTX *ctx); -EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); -int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); - -int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, - const EVP_CIPHER *cipher, ENGINE *impl); -int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); -int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); -int CMAC_resume(CMAC_CTX *ctx); - -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h new file mode 100644 index 00000000..49825570 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h @@ -0,0 +1,597 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/cmp.h.in + * + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +#ifndef OPENSSL_CMP_H +# define OPENSSL_CMP_H + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include +# include +# include + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CMP_PVNO 2 + +/*- + * PKIFailureInfo ::= BIT STRING { + * -- since we can fail in more than one way! + * -- More codes may be added in the future if/when required. + * badAlg (0), + * -- unrecognized or unsupported Algorithm Identifier + * badMessageCheck (1), + * -- integrity check failed (e.g., signature did not verify) + * badRequest (2), + * -- transaction not permitted or supported + * badTime (3), + * -- messageTime was not sufficiently close to the system time, + * -- as defined by local policy + * badCertId (4), + * -- no certificate could be found matching the provided criteria + * badDataFormat (5), + * -- the data submitted has the wrong format + * wrongAuthority (6), + * -- the authority indicated in the request is different from the + * -- one creating the response token + * incorrectData (7), + * -- the requester's data is incorrect (for notary services) + * missingTimeStamp (8), + * -- when the timestamp is missing but should be there + * -- (by policy) + * badPOP (9), + * -- the proof-of-possession failed + * certRevoked (10), + * -- the certificate has already been revoked + * certConfirmed (11), + * -- the certificate has already been confirmed + * wrongIntegrity (12), + * -- invalid integrity, password based instead of signature or + * -- vice versa + * badRecipientNonce (13), + * -- invalid recipient nonce, either missing or wrong value + * timeNotAvailable (14), + * -- the TSA's time source is not available + * unacceptedPolicy (15), + * -- the requested TSA policy is not supported by the TSA. + * unacceptedExtension (16), + * -- the requested extension is not supported by the TSA. + * addInfoNotAvailable (17), + * -- the additional information requested could not be + * -- understood or is not available + * badSenderNonce (18), + * -- invalid sender nonce, either missing or wrong size + * badCertTemplate (19), + * -- invalid cert. template or missing mandatory information + * signerNotTrusted (20), + * -- signer of the message unknown or not trusted + * transactionIdInUse (21), + * -- the transaction identifier is already in use + * unsupportedVersion (22), + * -- the version of the message is not supported + * notAuthorized (23), + * -- the sender was not authorized to make the preceding + * -- request or perform the preceding action + * systemUnavail (24), + * -- the request cannot be handled due to system unavailability + * systemFailure (25), + * -- the request cannot be handled due to system failure + * duplicateCertReq (26) + * -- certificate cannot be issued because a duplicate + * -- certificate already exists + * } + */ +# define OSSL_CMP_PKIFAILUREINFO_badAlg 0 +# define OSSL_CMP_PKIFAILUREINFO_badMessageCheck 1 +# define OSSL_CMP_PKIFAILUREINFO_badRequest 2 +# define OSSL_CMP_PKIFAILUREINFO_badTime 3 +# define OSSL_CMP_PKIFAILUREINFO_badCertId 4 +# define OSSL_CMP_PKIFAILUREINFO_badDataFormat 5 +# define OSSL_CMP_PKIFAILUREINFO_wrongAuthority 6 +# define OSSL_CMP_PKIFAILUREINFO_incorrectData 7 +# define OSSL_CMP_PKIFAILUREINFO_missingTimeStamp 8 +# define OSSL_CMP_PKIFAILUREINFO_badPOP 9 +# define OSSL_CMP_PKIFAILUREINFO_certRevoked 10 +# define OSSL_CMP_PKIFAILUREINFO_certConfirmed 11 +# define OSSL_CMP_PKIFAILUREINFO_wrongIntegrity 12 +# define OSSL_CMP_PKIFAILUREINFO_badRecipientNonce 13 +# define OSSL_CMP_PKIFAILUREINFO_timeNotAvailable 14 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedPolicy 15 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedExtension 16 +# define OSSL_CMP_PKIFAILUREINFO_addInfoNotAvailable 17 +# define OSSL_CMP_PKIFAILUREINFO_badSenderNonce 18 +# define OSSL_CMP_PKIFAILUREINFO_badCertTemplate 19 +# define OSSL_CMP_PKIFAILUREINFO_signerNotTrusted 20 +# define OSSL_CMP_PKIFAILUREINFO_transactionIdInUse 21 +# define OSSL_CMP_PKIFAILUREINFO_unsupportedVersion 22 +# define OSSL_CMP_PKIFAILUREINFO_notAuthorized 23 +# define OSSL_CMP_PKIFAILUREINFO_systemUnavail 24 +# define OSSL_CMP_PKIFAILUREINFO_systemFailure 25 +# define OSSL_CMP_PKIFAILUREINFO_duplicateCertReq 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN \ + ((1 << (OSSL_CMP_PKIFAILUREINFO_MAX + 1)) - 1) +# if OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN > INT_MAX +# error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int +# endif + +typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; + +# define OSSL_CMP_CTX_FAILINFO_badAlg (1 << 0) +# define OSSL_CMP_CTX_FAILINFO_badMessageCheck (1 << 1) +# define OSSL_CMP_CTX_FAILINFO_badRequest (1 << 2) +# define OSSL_CMP_CTX_FAILINFO_badTime (1 << 3) +# define OSSL_CMP_CTX_FAILINFO_badCertId (1 << 4) +# define OSSL_CMP_CTX_FAILINFO_badDataFormat (1 << 5) +# define OSSL_CMP_CTX_FAILINFO_wrongAuthority (1 << 6) +# define OSSL_CMP_CTX_FAILINFO_incorrectData (1 << 7) +# define OSSL_CMP_CTX_FAILINFO_missingTimeStamp (1 << 8) +# define OSSL_CMP_CTX_FAILINFO_badPOP (1 << 9) +# define OSSL_CMP_CTX_FAILINFO_certRevoked (1 << 10) +# define OSSL_CMP_CTX_FAILINFO_certConfirmed (1 << 11) +# define OSSL_CMP_CTX_FAILINFO_wrongIntegrity (1 << 12) +# define OSSL_CMP_CTX_FAILINFO_badRecipientNonce (1 << 13) +# define OSSL_CMP_CTX_FAILINFO_timeNotAvailable (1 << 14) +# define OSSL_CMP_CTX_FAILINFO_unacceptedPolicy (1 << 15) +# define OSSL_CMP_CTX_FAILINFO_unacceptedExtension (1 << 16) +# define OSSL_CMP_CTX_FAILINFO_addInfoNotAvailable (1 << 17) +# define OSSL_CMP_CTX_FAILINFO_badSenderNonce (1 << 18) +# define OSSL_CMP_CTX_FAILINFO_badCertTemplate (1 << 19) +# define OSSL_CMP_CTX_FAILINFO_signerNotTrusted (1 << 20) +# define OSSL_CMP_CTX_FAILINFO_transactionIdInUse (1 << 21) +# define OSSL_CMP_CTX_FAILINFO_unsupportedVersion (1 << 22) +# define OSSL_CMP_CTX_FAILINFO_notAuthorized (1 << 23) +# define OSSL_CMP_CTX_FAILINFO_systemUnavail (1 << 24) +# define OSSL_CMP_CTX_FAILINFO_systemFailure (1 << 25) +# define OSSL_CMP_CTX_FAILINFO_duplicateCertReq (1 << 26) + +/*- + * PKIStatus ::= INTEGER { + * accepted (0), + * -- you got exactly what you asked for + * grantedWithMods (1), + * -- you got something like what you asked for; the + * -- requester is responsible for ascertaining the differences + * rejection (2), + * -- you don't get it, more information elsewhere in the message + * waiting (3), + * -- the request body part has not yet been processed; expect to + * -- hear more later (note: proper handling of this status + * -- response MAY use the polling req/rep PKIMessages specified + * -- in Section 5.3.22; alternatively, polling in the underlying + * -- transport layer MAY have some utility in this regard) + * revocationWarning (4), + * -- this message contains a warning that a revocation is + * -- imminent + * revocationNotification (5), + * -- notification that a revocation has occurred + * keyUpdateWarning (6) + * -- update already done for the oldCertId specified in + * -- CertReqMsg + * } + */ +# define OSSL_CMP_PKISTATUS_request -3 +# define OSSL_CMP_PKISTATUS_trans -2 +# define OSSL_CMP_PKISTATUS_unspecified -1 +# define OSSL_CMP_PKISTATUS_accepted 0 +# define OSSL_CMP_PKISTATUS_grantedWithMods 1 +# define OSSL_CMP_PKISTATUS_rejection 2 +# define OSSL_CMP_PKISTATUS_waiting 3 +# define OSSL_CMP_PKISTATUS_revocationWarning 4 +# define OSSL_CMP_PKISTATUS_revocationNotification 5 +# define OSSL_CMP_PKISTATUS_keyUpdateWarning 6 + +typedef ASN1_INTEGER OSSL_CMP_PKISTATUS; +DECLARE_ASN1_ITEM(OSSL_CMP_PKISTATUS) + +# define OSSL_CMP_CERTORENCCERT_CERTIFICATE 0 +# define OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT 1 + +/* data type declarations */ +typedef struct ossl_cmp_ctx_st OSSL_CMP_CTX; +typedef struct ossl_cmp_pkiheader_st OSSL_CMP_PKIHEADER; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER) +typedef struct ossl_cmp_msg_st OSSL_CMP_MSG; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_MSG) +DECLARE_ASN1_ENCODE_FUNCTIONS(OSSL_CMP_MSG, OSSL_CMP_MSG, OSSL_CMP_MSG) +typedef struct ossl_cmp_certstatus_st OSSL_CMP_CERTSTATUS; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS) +#define sk_OSSL_CMP_CERTSTATUS_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_value(sk, idx) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTSTATUS_new(cmp) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTSTATUS_new_null() ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTSTATUS_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTSTATUS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTSTATUS_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_delete(sk, i) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTSTATUS_delete_ptr(sk, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))) +#define sk_OSSL_CMP_CERTSTATUS_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_pop(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_shift(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk),ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTSTATUS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTSTATUS_set(sk, idx, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))) +#define sk_OSSL_CMP_CERTSTATUS_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), pnum) +#define sk_OSSL_CMP_CERTSTATUS_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_dup(sk) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTSTATUS_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTSTATUS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp))) + +typedef struct ossl_cmp_itav_st OSSL_CMP_ITAV; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_ITAV, OSSL_CMP_ITAV, OSSL_CMP_ITAV) +#define sk_OSSL_CMP_ITAV_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_value(sk, idx) ((OSSL_CMP_ITAV *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), (idx))) +#define sk_OSSL_CMP_ITAV_new(cmp) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp))) +#define sk_OSSL_CMP_ITAV_new_null() ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_ITAV_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_ITAV_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (n)) +#define sk_OSSL_CMP_ITAV_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_delete(sk, i) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (i))) +#define sk_OSSL_CMP_ITAV_delete_ptr(sk, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr))) +#define sk_OSSL_CMP_ITAV_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_pop(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_shift(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk),ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc)) +#define sk_OSSL_CMP_ITAV_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), (idx)) +#define sk_OSSL_CMP_ITAV_set(sk, idx, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_set(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (idx), ossl_check_OSSL_CMP_ITAV_type(ptr))) +#define sk_OSSL_CMP_ITAV_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), pnum) +#define sk_OSSL_CMP_ITAV_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_dup(sk) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc))) +#define sk_OSSL_CMP_ITAV_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_ITAV_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp))) + +typedef struct ossl_cmp_revrepcontent_st OSSL_CMP_REVREPCONTENT; +typedef struct ossl_cmp_pkisi_st OSSL_CMP_PKISI; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKISI) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_PKISI, OSSL_CMP_PKISI, OSSL_CMP_PKISI) +#define sk_OSSL_CMP_PKISI_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_value(sk, idx) ((OSSL_CMP_PKISI *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), (idx))) +#define sk_OSSL_CMP_PKISI_new(cmp) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp))) +#define sk_OSSL_CMP_PKISI_new_null() ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_PKISI_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_PKISI_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (n)) +#define sk_OSSL_CMP_PKISI_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_delete(sk, i) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (i))) +#define sk_OSSL_CMP_PKISI_delete_ptr(sk, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr))) +#define sk_OSSL_CMP_PKISI_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_pop(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_shift(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk),ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc)) +#define sk_OSSL_CMP_PKISI_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), (idx)) +#define sk_OSSL_CMP_PKISI_set(sk, idx, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_set(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (idx), ossl_check_OSSL_CMP_PKISI_type(ptr))) +#define sk_OSSL_CMP_PKISI_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), pnum) +#define sk_OSSL_CMP_PKISI_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_dup(sk) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc))) +#define sk_OSSL_CMP_PKISI_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_PKISI_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp))) + +typedef struct ossl_cmp_certrepmessage_st OSSL_CMP_CERTREPMESSAGE; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE) +#define sk_OSSL_CMP_CERTREPMESSAGE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_value(sk, idx) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTREPMESSAGE_new(cmp) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_null() ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTREPMESSAGE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTREPMESSAGE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_delete(sk, i) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTREPMESSAGE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))) +#define sk_OSSL_CMP_CERTREPMESSAGE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_pop(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_shift(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk),ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTREPMESSAGE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTREPMESSAGE_set(sk, idx, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))) +#define sk_OSSL_CMP_CERTREPMESSAGE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), pnum) +#define sk_OSSL_CMP_CERTREPMESSAGE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_dup(sk) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTREPMESSAGE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTREPMESSAGE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp))) + +typedef struct ossl_cmp_pollrep_st OSSL_CMP_POLLREP; +typedef STACK_OF(OSSL_CMP_POLLREP) OSSL_CMP_POLLREPCONTENT; +typedef struct ossl_cmp_certresponse_st OSSL_CMP_CERTRESPONSE; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE) +#define sk_OSSL_CMP_CERTRESPONSE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_value(sk, idx) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTRESPONSE_new(cmp) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTRESPONSE_new_null() ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTRESPONSE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTRESPONSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTRESPONSE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_delete(sk, i) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTRESPONSE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))) +#define sk_OSSL_CMP_CERTRESPONSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_pop(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_shift(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk),ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTRESPONSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTRESPONSE_set(sk, idx, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))) +#define sk_OSSL_CMP_CERTRESPONSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), pnum) +#define sk_OSSL_CMP_CERTRESPONSE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_dup(sk) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTRESPONSE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTRESPONSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp))) + +typedef STACK_OF(ASN1_UTF8STRING) OSSL_CMP_PKIFREETEXT; + +/* + * function DECLARATIONS + */ + +/* from cmp_asn.c */ +OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value); +void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type, + ASN1_TYPE *value); +ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav); +ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav); +int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **itav_sk_p, + OSSL_CMP_ITAV *itav); +void OSSL_CMP_ITAV_free(OSSL_CMP_ITAV *itav); +void OSSL_CMP_MSG_free(OSSL_CMP_MSG *msg); + +/* from cmp_ctx.c */ +OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx); +/* CMP general options: */ +# define OSSL_CMP_OPT_LOG_VERBOSITY 0 +/* CMP transfer options: */ +# define OSSL_CMP_OPT_KEEP_ALIVE 10 +# define OSSL_CMP_OPT_MSG_TIMEOUT 11 +# define OSSL_CMP_OPT_TOTAL_TIMEOUT 12 +/* CMP request options: */ +# define OSSL_CMP_OPT_VALIDITY_DAYS 20 +# define OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT 21 +# define OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL 22 +# define OSSL_CMP_OPT_POLICIES_CRITICAL 23 +# define OSSL_CMP_OPT_POPO_METHOD 24 +# define OSSL_CMP_OPT_IMPLICIT_CONFIRM 25 +# define OSSL_CMP_OPT_DISABLE_CONFIRM 26 +# define OSSL_CMP_OPT_REVOCATION_REASON 27 +/* CMP protection options: */ +# define OSSL_CMP_OPT_UNPROTECTED_SEND 30 +# define OSSL_CMP_OPT_UNPROTECTED_ERRORS 31 +# define OSSL_CMP_OPT_OWF_ALGNID 32 +# define OSSL_CMP_OPT_MAC_ALGNID 33 +# define OSSL_CMP_OPT_DIGEST_ALGNID 34 +# define OSSL_CMP_OPT_IGNORE_KEYUSAGE 35 +# define OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR 36 +int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val); +int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt); +/* CMP-specific callback for logging and outputting the error queue: */ +int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb); +# define OSSL_CMP_CTX_set_log_verbosity(ctx, level) \ + OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_LOG_VERBOSITY, level) +void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx); +/* message transfer: */ +int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path); +int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address); +int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port); +int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name); +int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names); +int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, OSSL_HTTP_bio_cb_t cb); +int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx); +typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t) (OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); +int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_transfer_cb_t cb); +int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); +/* server authentication: */ +int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store); +X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs); +STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx); +/* client authentication: */ +int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted, + STACK_OF(X509) *candidates); +int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey); +int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx, + const unsigned char *ref, int len); +int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx, + const unsigned char *sec, int len); +/* CMP message header and extra certificates: */ +int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, + STACK_OF(X509) *extraCertsOut); +/* certificate template: */ +int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey); +EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv); +int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx, + const GENERAL_NAME *name); +int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts); +int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo); +int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr); +/* misc body contents: */ +int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +/* certificate confirmation: */ +typedef int (*OSSL_CMP_certConf_cb_t) (OSSL_CMP_CTX *ctx, X509 *cert, + int fail_info, const char **txt); +int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info, + const char **text); +int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb); +int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx); +/* result fetching: */ +int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx); +OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx); +# define OSSL_CMP_PKISI_BUFLEN 1024 +X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *id); +int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *nonce); + +/* from cmp_status.c */ +char *OSSL_CMP_CTX_snprint_PKIStatus(const OSSL_CMP_CTX *ctx, char *buf, + size_t bufsize); +char *OSSL_CMP_snprint_PKIStatusInfo(const OSSL_CMP_PKISI *statusInfo, + char *buf, size_t bufsize); +OSSL_CMP_PKISI * +OSSL_CMP_STATUSINFO_new(int status, int fail_info, const char *text); + +/* from cmp_hdr.c */ +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_transactionID(const + OSSL_CMP_PKIHEADER *hdr); +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_recipNonce(const OSSL_CMP_PKIHEADER *hdr); + +/* from cmp_msg.c */ +OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_recipNonce(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid); +OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg); +OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg); +int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg); + +/* from cmp_vfy.c */ +int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg); +int OSSL_CMP_validate_cert_path(const OSSL_CMP_CTX *ctx, + X509_STORE *trusted_store, X509 *cert); + +/* from cmp_http.c */ +OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); + +/* from cmp_server.c */ +typedef struct ossl_cmp_srv_ctx_st OSSL_CMP_SRV_CTX; +OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_MSG * OSSL_CMP_CTX_server_perform(OSSL_CMP_CTX *client_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_SRV_CTX *OSSL_CMP_SRV_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_SRV_CTX_free(OSSL_CMP_SRV_CTX *srv_ctx); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_cert_request_cb_t) + (OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *req, int certReqId, + const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr, + X509 **certOut, STACK_OF(X509) **chainOut, STACK_OF(X509) **caPubs); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_rr_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +typedef int (*OSSL_CMP_SRV_genm_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const STACK_OF(OSSL_CMP_ITAV) *in, + STACK_OF(OSSL_CMP_ITAV) **out); +typedef void (*OSSL_CMP_SRV_error_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const OSSL_CMP_PKISI *statusInfo, + const ASN1_INTEGER *errorCode, + const OSSL_CMP_PKIFREETEXT *errDetails); +typedef int (*OSSL_CMP_SRV_certConf_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + int certReqId, + const ASN1_OCTET_STRING *certHash, + const OSSL_CMP_PKISI *si); +typedef int (*OSSL_CMP_SRV_pollReq_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, int certReqId, + OSSL_CMP_MSG **certReq, + int64_t *check_after); +int OSSL_CMP_SRV_CTX_init(OSSL_CMP_SRV_CTX *srv_ctx, void *custom_ctx, + OSSL_CMP_SRV_cert_request_cb_t process_cert_request, + OSSL_CMP_SRV_rr_cb_t process_rr, + OSSL_CMP_SRV_genm_cb_t process_genm, + OSSL_CMP_SRV_error_cb_t process_error, + OSSL_CMP_SRV_certConf_cb_t process_certConf, + OSSL_CMP_SRV_pollReq_cb_t process_pollReq); +OSSL_CMP_CTX *OSSL_CMP_SRV_CTX_get0_cmp_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +void *OSSL_CMP_SRV_CTX_get0_custom_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +int OSSL_CMP_SRV_CTX_set_send_unprotected_errors(OSSL_CMP_SRV_CTX *srv_ctx, + int val); +int OSSL_CMP_SRV_CTX_set_accept_unprotected(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_accept_raverified(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(OSSL_CMP_SRV_CTX *srv_ctx, + int val); + +/* from cmp_client.c */ +X509 *OSSL_CMP_exec_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm); +# define OSSL_CMP_IR 0 +# define OSSL_CMP_CR 2 +# define OSSL_CMP_P10CR 4 +# define OSSL_CMP_KUR 7 +# define OSSL_CMP_exec_IR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_IR, NULL) +# define OSSL_CMP_exec_CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_CR, NULL) +# define OSSL_CMP_exec_P10CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_P10CR, NULL) +# define OSSL_CMP_exec_KUR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_KUR, NULL) +int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm, int *checkAfter); +int OSSL_CMP_exec_RR_ses(OSSL_CMP_CTX *ctx); +STACK_OF(OSSL_CMP_ITAV) *OSSL_CMP_exec_GENM_ses(OSSL_CMP_CTX *ctx); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_H) */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h.in new file mode 100644 index 00000000..fb5ae671 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h.in @@ -0,0 +1,478 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CMP_H +# define OPENSSL_CMP_H + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include +# include +# include + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CMP_PVNO 2 + +/*- + * PKIFailureInfo ::= BIT STRING { + * -- since we can fail in more than one way! + * -- More codes may be added in the future if/when required. + * badAlg (0), + * -- unrecognized or unsupported Algorithm Identifier + * badMessageCheck (1), + * -- integrity check failed (e.g., signature did not verify) + * badRequest (2), + * -- transaction not permitted or supported + * badTime (3), + * -- messageTime was not sufficiently close to the system time, + * -- as defined by local policy + * badCertId (4), + * -- no certificate could be found matching the provided criteria + * badDataFormat (5), + * -- the data submitted has the wrong format + * wrongAuthority (6), + * -- the authority indicated in the request is different from the + * -- one creating the response token + * incorrectData (7), + * -- the requester's data is incorrect (for notary services) + * missingTimeStamp (8), + * -- when the timestamp is missing but should be there + * -- (by policy) + * badPOP (9), + * -- the proof-of-possession failed + * certRevoked (10), + * -- the certificate has already been revoked + * certConfirmed (11), + * -- the certificate has already been confirmed + * wrongIntegrity (12), + * -- invalid integrity, password based instead of signature or + * -- vice versa + * badRecipientNonce (13), + * -- invalid recipient nonce, either missing or wrong value + * timeNotAvailable (14), + * -- the TSA's time source is not available + * unacceptedPolicy (15), + * -- the requested TSA policy is not supported by the TSA. + * unacceptedExtension (16), + * -- the requested extension is not supported by the TSA. + * addInfoNotAvailable (17), + * -- the additional information requested could not be + * -- understood or is not available + * badSenderNonce (18), + * -- invalid sender nonce, either missing or wrong size + * badCertTemplate (19), + * -- invalid cert. template or missing mandatory information + * signerNotTrusted (20), + * -- signer of the message unknown or not trusted + * transactionIdInUse (21), + * -- the transaction identifier is already in use + * unsupportedVersion (22), + * -- the version of the message is not supported + * notAuthorized (23), + * -- the sender was not authorized to make the preceding + * -- request or perform the preceding action + * systemUnavail (24), + * -- the request cannot be handled due to system unavailability + * systemFailure (25), + * -- the request cannot be handled due to system failure + * duplicateCertReq (26) + * -- certificate cannot be issued because a duplicate + * -- certificate already exists + * } + */ +# define OSSL_CMP_PKIFAILUREINFO_badAlg 0 +# define OSSL_CMP_PKIFAILUREINFO_badMessageCheck 1 +# define OSSL_CMP_PKIFAILUREINFO_badRequest 2 +# define OSSL_CMP_PKIFAILUREINFO_badTime 3 +# define OSSL_CMP_PKIFAILUREINFO_badCertId 4 +# define OSSL_CMP_PKIFAILUREINFO_badDataFormat 5 +# define OSSL_CMP_PKIFAILUREINFO_wrongAuthority 6 +# define OSSL_CMP_PKIFAILUREINFO_incorrectData 7 +# define OSSL_CMP_PKIFAILUREINFO_missingTimeStamp 8 +# define OSSL_CMP_PKIFAILUREINFO_badPOP 9 +# define OSSL_CMP_PKIFAILUREINFO_certRevoked 10 +# define OSSL_CMP_PKIFAILUREINFO_certConfirmed 11 +# define OSSL_CMP_PKIFAILUREINFO_wrongIntegrity 12 +# define OSSL_CMP_PKIFAILUREINFO_badRecipientNonce 13 +# define OSSL_CMP_PKIFAILUREINFO_timeNotAvailable 14 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedPolicy 15 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedExtension 16 +# define OSSL_CMP_PKIFAILUREINFO_addInfoNotAvailable 17 +# define OSSL_CMP_PKIFAILUREINFO_badSenderNonce 18 +# define OSSL_CMP_PKIFAILUREINFO_badCertTemplate 19 +# define OSSL_CMP_PKIFAILUREINFO_signerNotTrusted 20 +# define OSSL_CMP_PKIFAILUREINFO_transactionIdInUse 21 +# define OSSL_CMP_PKIFAILUREINFO_unsupportedVersion 22 +# define OSSL_CMP_PKIFAILUREINFO_notAuthorized 23 +# define OSSL_CMP_PKIFAILUREINFO_systemUnavail 24 +# define OSSL_CMP_PKIFAILUREINFO_systemFailure 25 +# define OSSL_CMP_PKIFAILUREINFO_duplicateCertReq 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN \ + ((1 << (OSSL_CMP_PKIFAILUREINFO_MAX + 1)) - 1) +# if OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN > INT_MAX +# error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int +# endif + +typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; + +# define OSSL_CMP_CTX_FAILINFO_badAlg (1 << 0) +# define OSSL_CMP_CTX_FAILINFO_badMessageCheck (1 << 1) +# define OSSL_CMP_CTX_FAILINFO_badRequest (1 << 2) +# define OSSL_CMP_CTX_FAILINFO_badTime (1 << 3) +# define OSSL_CMP_CTX_FAILINFO_badCertId (1 << 4) +# define OSSL_CMP_CTX_FAILINFO_badDataFormat (1 << 5) +# define OSSL_CMP_CTX_FAILINFO_wrongAuthority (1 << 6) +# define OSSL_CMP_CTX_FAILINFO_incorrectData (1 << 7) +# define OSSL_CMP_CTX_FAILINFO_missingTimeStamp (1 << 8) +# define OSSL_CMP_CTX_FAILINFO_badPOP (1 << 9) +# define OSSL_CMP_CTX_FAILINFO_certRevoked (1 << 10) +# define OSSL_CMP_CTX_FAILINFO_certConfirmed (1 << 11) +# define OSSL_CMP_CTX_FAILINFO_wrongIntegrity (1 << 12) +# define OSSL_CMP_CTX_FAILINFO_badRecipientNonce (1 << 13) +# define OSSL_CMP_CTX_FAILINFO_timeNotAvailable (1 << 14) +# define OSSL_CMP_CTX_FAILINFO_unacceptedPolicy (1 << 15) +# define OSSL_CMP_CTX_FAILINFO_unacceptedExtension (1 << 16) +# define OSSL_CMP_CTX_FAILINFO_addInfoNotAvailable (1 << 17) +# define OSSL_CMP_CTX_FAILINFO_badSenderNonce (1 << 18) +# define OSSL_CMP_CTX_FAILINFO_badCertTemplate (1 << 19) +# define OSSL_CMP_CTX_FAILINFO_signerNotTrusted (1 << 20) +# define OSSL_CMP_CTX_FAILINFO_transactionIdInUse (1 << 21) +# define OSSL_CMP_CTX_FAILINFO_unsupportedVersion (1 << 22) +# define OSSL_CMP_CTX_FAILINFO_notAuthorized (1 << 23) +# define OSSL_CMP_CTX_FAILINFO_systemUnavail (1 << 24) +# define OSSL_CMP_CTX_FAILINFO_systemFailure (1 << 25) +# define OSSL_CMP_CTX_FAILINFO_duplicateCertReq (1 << 26) + +/*- + * PKIStatus ::= INTEGER { + * accepted (0), + * -- you got exactly what you asked for + * grantedWithMods (1), + * -- you got something like what you asked for; the + * -- requester is responsible for ascertaining the differences + * rejection (2), + * -- you don't get it, more information elsewhere in the message + * waiting (3), + * -- the request body part has not yet been processed; expect to + * -- hear more later (note: proper handling of this status + * -- response MAY use the polling req/rep PKIMessages specified + * -- in Section 5.3.22; alternatively, polling in the underlying + * -- transport layer MAY have some utility in this regard) + * revocationWarning (4), + * -- this message contains a warning that a revocation is + * -- imminent + * revocationNotification (5), + * -- notification that a revocation has occurred + * keyUpdateWarning (6) + * -- update already done for the oldCertId specified in + * -- CertReqMsg + * } + */ +# define OSSL_CMP_PKISTATUS_request -3 +# define OSSL_CMP_PKISTATUS_trans -2 +# define OSSL_CMP_PKISTATUS_unspecified -1 +# define OSSL_CMP_PKISTATUS_accepted 0 +# define OSSL_CMP_PKISTATUS_grantedWithMods 1 +# define OSSL_CMP_PKISTATUS_rejection 2 +# define OSSL_CMP_PKISTATUS_waiting 3 +# define OSSL_CMP_PKISTATUS_revocationWarning 4 +# define OSSL_CMP_PKISTATUS_revocationNotification 5 +# define OSSL_CMP_PKISTATUS_keyUpdateWarning 6 + +typedef ASN1_INTEGER OSSL_CMP_PKISTATUS; +DECLARE_ASN1_ITEM(OSSL_CMP_PKISTATUS) + +# define OSSL_CMP_CERTORENCCERT_CERTIFICATE 0 +# define OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT 1 + +/* data type declarations */ +typedef struct ossl_cmp_ctx_st OSSL_CMP_CTX; +typedef struct ossl_cmp_pkiheader_st OSSL_CMP_PKIHEADER; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER) +typedef struct ossl_cmp_msg_st OSSL_CMP_MSG; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_MSG) +DECLARE_ASN1_ENCODE_FUNCTIONS(OSSL_CMP_MSG, OSSL_CMP_MSG, OSSL_CMP_MSG) +typedef struct ossl_cmp_certstatus_st OSSL_CMP_CERTSTATUS; +{- + generate_stack_macros("OSSL_CMP_CERTSTATUS"); +-} +typedef struct ossl_cmp_itav_st OSSL_CMP_ITAV; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV) +{- + generate_stack_macros("OSSL_CMP_ITAV"); +-} +typedef struct ossl_cmp_revrepcontent_st OSSL_CMP_REVREPCONTENT; +typedef struct ossl_cmp_pkisi_st OSSL_CMP_PKISI; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKISI) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI) +{- + generate_stack_macros("OSSL_CMP_PKISI"); +-} +typedef struct ossl_cmp_certrepmessage_st OSSL_CMP_CERTREPMESSAGE; +{- + generate_stack_macros("OSSL_CMP_CERTREPMESSAGE"); +-} +typedef struct ossl_cmp_pollrep_st OSSL_CMP_POLLREP; +typedef STACK_OF(OSSL_CMP_POLLREP) OSSL_CMP_POLLREPCONTENT; +typedef struct ossl_cmp_certresponse_st OSSL_CMP_CERTRESPONSE; +{- + generate_stack_macros("OSSL_CMP_CERTRESPONSE"); +-} +typedef STACK_OF(ASN1_UTF8STRING) OSSL_CMP_PKIFREETEXT; + +/* + * function DECLARATIONS + */ + +/* from cmp_asn.c */ +OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value); +void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type, + ASN1_TYPE *value); +ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav); +ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav); +int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **itav_sk_p, + OSSL_CMP_ITAV *itav); +void OSSL_CMP_ITAV_free(OSSL_CMP_ITAV *itav); +void OSSL_CMP_MSG_free(OSSL_CMP_MSG *msg); + +/* from cmp_ctx.c */ +OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx); +/* CMP general options: */ +# define OSSL_CMP_OPT_LOG_VERBOSITY 0 +/* CMP transfer options: */ +# define OSSL_CMP_OPT_KEEP_ALIVE 10 +# define OSSL_CMP_OPT_MSG_TIMEOUT 11 +# define OSSL_CMP_OPT_TOTAL_TIMEOUT 12 +/* CMP request options: */ +# define OSSL_CMP_OPT_VALIDITY_DAYS 20 +# define OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT 21 +# define OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL 22 +# define OSSL_CMP_OPT_POLICIES_CRITICAL 23 +# define OSSL_CMP_OPT_POPO_METHOD 24 +# define OSSL_CMP_OPT_IMPLICIT_CONFIRM 25 +# define OSSL_CMP_OPT_DISABLE_CONFIRM 26 +# define OSSL_CMP_OPT_REVOCATION_REASON 27 +/* CMP protection options: */ +# define OSSL_CMP_OPT_UNPROTECTED_SEND 30 +# define OSSL_CMP_OPT_UNPROTECTED_ERRORS 31 +# define OSSL_CMP_OPT_OWF_ALGNID 32 +# define OSSL_CMP_OPT_MAC_ALGNID 33 +# define OSSL_CMP_OPT_DIGEST_ALGNID 34 +# define OSSL_CMP_OPT_IGNORE_KEYUSAGE 35 +# define OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR 36 +int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val); +int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt); +/* CMP-specific callback for logging and outputting the error queue: */ +int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb); +# define OSSL_CMP_CTX_set_log_verbosity(ctx, level) \ + OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_LOG_VERBOSITY, level) +void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx); +/* message transfer: */ +int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path); +int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address); +int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port); +int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name); +int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names); +int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, OSSL_HTTP_bio_cb_t cb); +int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx); +typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t) (OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); +int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_transfer_cb_t cb); +int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); +/* server authentication: */ +int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store); +X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs); +STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx); +/* client authentication: */ +int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted, + STACK_OF(X509) *candidates); +int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey); +int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx, + const unsigned char *ref, int len); +int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx, + const unsigned char *sec, int len); +/* CMP message header and extra certificates: */ +int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, + STACK_OF(X509) *extraCertsOut); +/* certificate template: */ +int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey); +EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv); +int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx, + const GENERAL_NAME *name); +int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts); +int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo); +int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr); +/* misc body contents: */ +int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +/* certificate confirmation: */ +typedef int (*OSSL_CMP_certConf_cb_t) (OSSL_CMP_CTX *ctx, X509 *cert, + int fail_info, const char **txt); +int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info, + const char **text); +int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb); +int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx); +/* result fetching: */ +int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx); +OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx); +# define OSSL_CMP_PKISI_BUFLEN 1024 +X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *id); +int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *nonce); + +/* from cmp_status.c */ +char *OSSL_CMP_CTX_snprint_PKIStatus(const OSSL_CMP_CTX *ctx, char *buf, + size_t bufsize); +char *OSSL_CMP_snprint_PKIStatusInfo(const OSSL_CMP_PKISI *statusInfo, + char *buf, size_t bufsize); +OSSL_CMP_PKISI * +OSSL_CMP_STATUSINFO_new(int status, int fail_info, const char *text); + +/* from cmp_hdr.c */ +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_transactionID(const + OSSL_CMP_PKIHEADER *hdr); +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_recipNonce(const OSSL_CMP_PKIHEADER *hdr); + +/* from cmp_msg.c */ +OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_recipNonce(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid); +OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg); +OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg); +int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg); + +/* from cmp_vfy.c */ +int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg); +int OSSL_CMP_validate_cert_path(const OSSL_CMP_CTX *ctx, + X509_STORE *trusted_store, X509 *cert); + +/* from cmp_http.c */ +OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); + +/* from cmp_server.c */ +typedef struct ossl_cmp_srv_ctx_st OSSL_CMP_SRV_CTX; +OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_MSG * OSSL_CMP_CTX_server_perform(OSSL_CMP_CTX *client_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_SRV_CTX *OSSL_CMP_SRV_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_SRV_CTX_free(OSSL_CMP_SRV_CTX *srv_ctx); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_cert_request_cb_t) + (OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *req, int certReqId, + const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr, + X509 **certOut, STACK_OF(X509) **chainOut, STACK_OF(X509) **caPubs); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_rr_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +typedef int (*OSSL_CMP_SRV_genm_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const STACK_OF(OSSL_CMP_ITAV) *in, + STACK_OF(OSSL_CMP_ITAV) **out); +typedef void (*OSSL_CMP_SRV_error_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const OSSL_CMP_PKISI *statusInfo, + const ASN1_INTEGER *errorCode, + const OSSL_CMP_PKIFREETEXT *errDetails); +typedef int (*OSSL_CMP_SRV_certConf_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + int certReqId, + const ASN1_OCTET_STRING *certHash, + const OSSL_CMP_PKISI *si); +typedef int (*OSSL_CMP_SRV_pollReq_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, int certReqId, + OSSL_CMP_MSG **certReq, + int64_t *check_after); +int OSSL_CMP_SRV_CTX_init(OSSL_CMP_SRV_CTX *srv_ctx, void *custom_ctx, + OSSL_CMP_SRV_cert_request_cb_t process_cert_request, + OSSL_CMP_SRV_rr_cb_t process_rr, + OSSL_CMP_SRV_genm_cb_t process_genm, + OSSL_CMP_SRV_error_cb_t process_error, + OSSL_CMP_SRV_certConf_cb_t process_certConf, + OSSL_CMP_SRV_pollReq_cb_t process_pollReq); +OSSL_CMP_CTX *OSSL_CMP_SRV_CTX_get0_cmp_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +void *OSSL_CMP_SRV_CTX_get0_custom_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +int OSSL_CMP_SRV_CTX_set_send_unprotected_errors(OSSL_CMP_SRV_CTX *srv_ctx, + int val); +int OSSL_CMP_SRV_CTX_set_accept_unprotected(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_accept_raverified(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(OSSL_CMP_SRV_CTX *srv_ctx, + int val); + +/* from cmp_client.c */ +X509 *OSSL_CMP_exec_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm); +# define OSSL_CMP_IR 0 +# define OSSL_CMP_CR 2 +# define OSSL_CMP_P10CR 4 +# define OSSL_CMP_KUR 7 +# define OSSL_CMP_exec_IR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_IR, NULL) +# define OSSL_CMP_exec_CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_CR, NULL) +# define OSSL_CMP_exec_P10CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_P10CR, NULL) +# define OSSL_CMP_exec_KUR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_KUR, NULL) +int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm, int *checkAfter); +int OSSL_CMP_exec_RR_ses(OSSL_CMP_CTX *ctx); +STACK_OF(OSSL_CMP_ITAV) *OSSL_CMP_exec_GENM_ses(OSSL_CMP_CTX *ctx); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_H) */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp_util.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp_util.h new file mode 100644 index 00000000..9a168922 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp_util.h @@ -0,0 +1,56 @@ +/* + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CMP_UTIL_H +# define OPENSSL_CMP_UTIL_H +# pragma once + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int OSSL_CMP_log_open(void); +void OSSL_CMP_log_close(void); +# define OSSL_CMP_LOG_PREFIX "CMP " + +/* + * generalized logging/error callback mirroring the severity levels of syslog.h + */ +typedef int OSSL_CMP_severity; +# define OSSL_CMP_LOG_EMERG 0 +# define OSSL_CMP_LOG_ALERT 1 +# define OSSL_CMP_LOG_CRIT 2 +# define OSSL_CMP_LOG_ERR 3 +# define OSSL_CMP_LOG_WARNING 4 +# define OSSL_CMP_LOG_NOTICE 5 +# define OSSL_CMP_LOG_INFO 6 +# define OSSL_CMP_LOG_DEBUG 7 +# define OSSL_CMP_LOG_TRACE 8 +# define OSSL_CMP_LOG_MAX OSSL_CMP_LOG_TRACE +typedef int (*OSSL_CMP_log_cb_t)(const char *func, const char *file, int line, + OSSL_CMP_severity level, const char *msg); + +int OSSL_CMP_print_to_bio(BIO *bio, const char *component, const char *file, + int line, OSSL_CMP_severity level, const char *msg); +/* use of the logging callback for outputting error queue */ +void OSSL_CMP_print_errors_cb(OSSL_CMP_log_cb_t log_fn); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_UTIL_H) */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmperr.h new file mode 100644 index 00000000..49fd5e39 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmperr.h @@ -0,0 +1,116 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CMPERR_H +# define OPENSSL_CMPERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CMP + + +/* + * CMP reason codes. + */ +# define CMP_R_ALGORITHM_NOT_SUPPORTED 139 +# define CMP_R_BAD_CHECKAFTER_IN_POLLREP 167 +# define CMP_R_BAD_REQUEST_ID 108 +# define CMP_R_CERTHASH_UNMATCHED 156 +# define CMP_R_CERTID_NOT_FOUND 109 +# define CMP_R_CERTIFICATE_NOT_ACCEPTED 169 +# define CMP_R_CERTIFICATE_NOT_FOUND 112 +# define CMP_R_CERTREQMSG_NOT_FOUND 157 +# define CMP_R_CERTRESPONSE_NOT_FOUND 113 +# define CMP_R_CERT_AND_KEY_DO_NOT_MATCH 114 +# define CMP_R_CHECKAFTER_OUT_OF_RANGE 181 +# define CMP_R_ENCOUNTERED_KEYUPDATEWARNING 176 +# define CMP_R_ENCOUNTERED_WAITING 162 +# define CMP_R_ERROR_CALCULATING_PROTECTION 115 +# define CMP_R_ERROR_CREATING_CERTCONF 116 +# define CMP_R_ERROR_CREATING_CERTREP 117 +# define CMP_R_ERROR_CREATING_CERTREQ 163 +# define CMP_R_ERROR_CREATING_ERROR 118 +# define CMP_R_ERROR_CREATING_GENM 119 +# define CMP_R_ERROR_CREATING_GENP 120 +# define CMP_R_ERROR_CREATING_PKICONF 122 +# define CMP_R_ERROR_CREATING_POLLREP 123 +# define CMP_R_ERROR_CREATING_POLLREQ 124 +# define CMP_R_ERROR_CREATING_RP 125 +# define CMP_R_ERROR_CREATING_RR 126 +# define CMP_R_ERROR_PARSING_PKISTATUS 107 +# define CMP_R_ERROR_PROCESSING_MESSAGE 158 +# define CMP_R_ERROR_PROTECTING_MESSAGE 127 +# define CMP_R_ERROR_SETTING_CERTHASH 128 +# define CMP_R_ERROR_UNEXPECTED_CERTCONF 160 +# define CMP_R_ERROR_VALIDATING_PROTECTION 140 +# define CMP_R_ERROR_VALIDATING_SIGNATURE 171 +# define CMP_R_FAILED_BUILDING_OWN_CHAIN 164 +# define CMP_R_FAILED_EXTRACTING_PUBKEY 141 +# define CMP_R_FAILURE_OBTAINING_RANDOM 110 +# define CMP_R_FAIL_INFO_OUT_OF_RANGE 129 +# define CMP_R_INVALID_ARGS 100 +# define CMP_R_INVALID_OPTION 174 +# define CMP_R_MISSING_CERTID 165 +# define CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION 130 +# define CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE 142 +# define CMP_R_MISSING_P10CSR 121 +# define CMP_R_MISSING_PBM_SECRET 166 +# define CMP_R_MISSING_PRIVATE_KEY 131 +# define CMP_R_MISSING_PRIVATE_KEY_FOR_POPO 190 +# define CMP_R_MISSING_PROTECTION 143 +# define CMP_R_MISSING_PUBLIC_KEY 183 +# define CMP_R_MISSING_REFERENCE_CERT 168 +# define CMP_R_MISSING_SECRET 178 +# define CMP_R_MISSING_SENDER_IDENTIFICATION 111 +# define CMP_R_MISSING_TRUST_ANCHOR 179 +# define CMP_R_MISSING_TRUST_STORE 144 +# define CMP_R_MULTIPLE_REQUESTS_NOT_SUPPORTED 161 +# define CMP_R_MULTIPLE_RESPONSES_NOT_SUPPORTED 170 +# define CMP_R_MULTIPLE_SAN_SOURCES 102 +# define CMP_R_NO_STDIO 194 +# define CMP_R_NO_SUITABLE_SENDER_CERT 145 +# define CMP_R_NULL_ARGUMENT 103 +# define CMP_R_PKIBODY_ERROR 146 +# define CMP_R_PKISTATUSINFO_NOT_FOUND 132 +# define CMP_R_POLLING_FAILED 172 +# define CMP_R_POTENTIALLY_INVALID_CERTIFICATE 147 +# define CMP_R_RECEIVED_ERROR 180 +# define CMP_R_RECIPNONCE_UNMATCHED 148 +# define CMP_R_REQUEST_NOT_ACCEPTED 149 +# define CMP_R_REQUEST_REJECTED_BY_SERVER 182 +# define CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED 150 +# define CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG 151 +# define CMP_R_TOTAL_TIMEOUT 184 +# define CMP_R_TRANSACTIONID_UNMATCHED 152 +# define CMP_R_TRANSFER_ERROR 159 +# define CMP_R_UNEXPECTED_PKIBODY 133 +# define CMP_R_UNEXPECTED_PKISTATUS 185 +# define CMP_R_UNEXPECTED_PVNO 153 +# define CMP_R_UNKNOWN_ALGORITHM_ID 134 +# define CMP_R_UNKNOWN_CERT_TYPE 135 +# define CMP_R_UNKNOWN_PKISTATUS 186 +# define CMP_R_UNSUPPORTED_ALGORITHM 136 +# define CMP_R_UNSUPPORTED_KEY_TYPE 137 +# define CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC 154 +# define CMP_R_VALUE_TOO_LARGE 175 +# define CMP_R_VALUE_TOO_SMALL 177 +# define CMP_R_WRONG_ALGORITHM_OID 138 +# define CMP_R_WRONG_CERTID 189 +# define CMP_R_WRONG_CERTID_IN_RP 187 +# define CMP_R_WRONG_PBM_VALUE 155 +# define CMP_R_WRONG_RP_COMPONENT_COUNT 188 +# define CMP_R_WRONG_SERIAL_IN_RP 173 + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h index c7627968..3b453e6a 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h @@ -1,14 +1,25 @@ /* - * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/cms.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMS_H -# define HEADER_CMS_H + + +#ifndef OPENSSL_CMS_H +# define OPENSSL_CMS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMS_H +# endif # include @@ -30,14 +41,118 @@ typedef struct CMS_Receipt_st CMS_Receipt; typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; -DEFINE_STACK_OF(CMS_SignerInfo) -DEFINE_STACK_OF(CMS_RecipientEncryptedKey) -DEFINE_STACK_OF(CMS_RecipientInfo) -DEFINE_STACK_OF(CMS_RevocationInfoChoice) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_SignerInfo, CMS_SignerInfo, CMS_SignerInfo) +#define sk_CMS_SignerInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_value(sk, idx) ((CMS_SignerInfo *)OPENSSL_sk_value(ossl_check_const_CMS_SignerInfo_sk_type(sk), (idx))) +#define sk_CMS_SignerInfo_new(cmp) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new(ossl_check_CMS_SignerInfo_compfunc_type(cmp))) +#define sk_CMS_SignerInfo_new_null() ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_null()) +#define sk_CMS_SignerInfo_new_reserve(cmp, n) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_SignerInfo_compfunc_type(cmp), (n))) +#define sk_CMS_SignerInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_SignerInfo_sk_type(sk), (n)) +#define sk_CMS_SignerInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_delete(sk, i) ((CMS_SignerInfo *)OPENSSL_sk_delete(ossl_check_CMS_SignerInfo_sk_type(sk), (i))) +#define sk_CMS_SignerInfo_delete_ptr(sk, ptr) ((CMS_SignerInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr))) +#define sk_CMS_SignerInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_pop(sk) ((CMS_SignerInfo *)OPENSSL_sk_pop(ossl_check_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_shift(sk) ((CMS_SignerInfo *)OPENSSL_sk_shift(ossl_check_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_SignerInfo_sk_type(sk),ossl_check_CMS_SignerInfo_freefunc_type(freefunc)) +#define sk_CMS_SignerInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), (idx)) +#define sk_CMS_SignerInfo_set(sk, idx, ptr) ((CMS_SignerInfo *)OPENSSL_sk_set(ossl_check_CMS_SignerInfo_sk_type(sk), (idx), ossl_check_CMS_SignerInfo_type(ptr))) +#define sk_CMS_SignerInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), pnum) +#define sk_CMS_SignerInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_dup(sk) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_copyfunc_type(copyfunc), ossl_check_CMS_SignerInfo_freefunc_type(freefunc))) +#define sk_CMS_SignerInfo_set_cmp_func(sk, cmp) ((sk_CMS_SignerInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey) +#define sk_CMS_RecipientEncryptedKey_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_value(sk, idx) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), (idx))) +#define sk_CMS_RecipientEncryptedKey_new(cmp) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp))) +#define sk_CMS_RecipientEncryptedKey_new_null() ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_null()) +#define sk_CMS_RecipientEncryptedKey_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientEncryptedKey_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (n)) +#define sk_CMS_RecipientEncryptedKey_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_delete(sk, i) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (i))) +#define sk_CMS_RecipientEncryptedKey_delete_ptr(sk, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr))) +#define sk_CMS_RecipientEncryptedKey_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_pop(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_pop(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_shift(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_shift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk),ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc)) +#define sk_CMS_RecipientEncryptedKey_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), (idx)) +#define sk_CMS_RecipientEncryptedKey_set(sk, idx, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_set(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (idx), ossl_check_CMS_RecipientEncryptedKey_type(ptr))) +#define sk_CMS_RecipientEncryptedKey_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), pnum) +#define sk_CMS_RecipientEncryptedKey_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_dup(sk) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_copyfunc_type(copyfunc), ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc))) +#define sk_CMS_RecipientEncryptedKey_set_cmp_func(sk, cmp) ((sk_CMS_RecipientEncryptedKey_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientInfo, CMS_RecipientInfo, CMS_RecipientInfo) +#define sk_CMS_RecipientInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_value(sk, idx) ((CMS_RecipientInfo *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientInfo_sk_type(sk), (idx))) +#define sk_CMS_RecipientInfo_new(cmp) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new(ossl_check_CMS_RecipientInfo_compfunc_type(cmp))) +#define sk_CMS_RecipientInfo_new_null() ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_null()) +#define sk_CMS_RecipientInfo_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientInfo_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientInfo_sk_type(sk), (n)) +#define sk_CMS_RecipientInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_delete(sk, i) ((CMS_RecipientInfo *)OPENSSL_sk_delete(ossl_check_CMS_RecipientInfo_sk_type(sk), (i))) +#define sk_CMS_RecipientInfo_delete_ptr(sk, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr))) +#define sk_CMS_RecipientInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_pop(sk) ((CMS_RecipientInfo *)OPENSSL_sk_pop(ossl_check_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_shift(sk) ((CMS_RecipientInfo *)OPENSSL_sk_shift(ossl_check_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientInfo_sk_type(sk),ossl_check_CMS_RecipientInfo_freefunc_type(freefunc)) +#define sk_CMS_RecipientInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), (idx)) +#define sk_CMS_RecipientInfo_set(sk, idx, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_set(ossl_check_CMS_RecipientInfo_sk_type(sk), (idx), ossl_check_CMS_RecipientInfo_type(ptr))) +#define sk_CMS_RecipientInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), pnum) +#define sk_CMS_RecipientInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_dup(sk) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_copyfunc_type(copyfunc), ossl_check_CMS_RecipientInfo_freefunc_type(freefunc))) +#define sk_CMS_RecipientInfo_set_cmp_func(sk, cmp) ((sk_CMS_RecipientInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RevocationInfoChoice, CMS_RevocationInfoChoice, CMS_RevocationInfoChoice) +#define sk_CMS_RevocationInfoChoice_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_value(sk, idx) ((CMS_RevocationInfoChoice *)OPENSSL_sk_value(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), (idx))) +#define sk_CMS_RevocationInfoChoice_new(cmp) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp))) +#define sk_CMS_RevocationInfoChoice_new_null() ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_null()) +#define sk_CMS_RevocationInfoChoice_new_reserve(cmp, n) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp), (n))) +#define sk_CMS_RevocationInfoChoice_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (n)) +#define sk_CMS_RevocationInfoChoice_free(sk) OPENSSL_sk_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_delete(sk, i) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (i))) +#define sk_CMS_RevocationInfoChoice_delete_ptr(sk, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr))) +#define sk_CMS_RevocationInfoChoice_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_pop(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_pop(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_shift(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_shift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk),ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc)) +#define sk_CMS_RevocationInfoChoice_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), (idx)) +#define sk_CMS_RevocationInfoChoice_set(sk, idx, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_set(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (idx), ossl_check_CMS_RevocationInfoChoice_type(ptr))) +#define sk_CMS_RevocationInfoChoice_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), pnum) +#define sk_CMS_RevocationInfoChoice_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_dup(sk) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_dup(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_copyfunc_type(copyfunc), ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc))) +#define sk_CMS_RevocationInfoChoice_set_cmp_func(sk, cmp) ((sk_CMS_RevocationInfoChoice_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) +CMS_ContentInfo *CMS_ContentInfo_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + # define CMS_SIGNERINFO_ISSUER_SERIAL 0 # define CMS_SIGNERINFO_KEYIDENTIFIER 1 @@ -73,6 +188,8 @@ DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) # define CMS_DEBUG_DECRYPT 0x20000 # define CMS_KEY_PARAM 0x40000 # define CMS_ASCIICRLF 0x80000 +# define CMS_CADES 0x100000 +# define CMS_USE_ORIGINATOR_KEYID 0x200000 const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); @@ -83,8 +200,8 @@ ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); int CMS_is_detached(CMS_ContentInfo *cms); int CMS_set_detached(CMS_ContentInfo *cms, int detached); -# ifdef HEADER_PEM_H -DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) +# ifdef OPENSSL_PEM_H +DECLARE_PEM_rw(CMS, CMS_ContentInfo) # endif int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); @@ -95,6 +212,7 @@ int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +CMS_ContentInfo *SMIME_read_CMS_ex(BIO *bio, int flags, BIO **bcont, CMS_ContentInfo **ci); int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, @@ -103,6 +221,10 @@ int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, unsigned int flags); +CMS_ContentInfo *CMS_sign_ex(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, X509 *signcert, EVP_PKEY *pkey, @@ -110,11 +232,16 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); +CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, unsigned int flags); +CMS_ContentInfo *CMS_digest_create_ex(BIO *in, const EVP_MD *md, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, const unsigned char *key, size_t keylen, @@ -123,6 +250,11 @@ int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, const unsigned char *key, size_t keylen, unsigned int flags); +CMS_ContentInfo *CMS_EncryptedData_encrypt_ex(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags, + OSSL_LIB_CTX *ctx, + const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, const unsigned char *key, size_t keylen); @@ -138,11 +270,16 @@ STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); +CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, BIO *dcont, BIO *out, unsigned int flags); int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms, EVP_PKEY *pk, + X509 *cert, X509 *peer); int CMS_decrypt_set1_key(CMS_ContentInfo *cms, unsigned char *key, size_t keylen, const unsigned char *id, size_t idlen); @@ -152,9 +289,19 @@ int CMS_decrypt_set1_password(CMS_ContentInfo *cms, STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo * +CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, + const char *propq); CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo *CMS_EnvelopedData_create_ex(const EVP_CIPHER *cipher, + OSSL_LIB_CTX *ctx, + const char *propq); + CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, X509 *recip, unsigned int flags); +CMS_RecipientInfo *CMS_add1_recipient(CMS_ContentInfo *cms, X509 *recip, + EVP_PKEY *originatorPrivKey, X509 * originator, unsigned int flags); int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, @@ -197,7 +344,7 @@ CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, const EVP_CIPHER *kekciph); int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); -int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(const CMS_ContentInfo *cms, CMS_RecipientInfo *ri); int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags); @@ -261,7 +408,8 @@ int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, const char *attrname, int type, const void *bytes, int len); -void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, const ASN1_OBJECT *oid, +void *CMS_signed_get0_data_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *oid, int lastpos, int type); int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); @@ -285,11 +433,16 @@ void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, int lastpos, int type); int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); -CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, - int allorfirst, - STACK_OF(GENERAL_NAMES) - *receiptList, STACK_OF(GENERAL_NAMES) - *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo, + OSSL_LIB_CTX *ctx); + int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, ASN1_STRING **pcid, @@ -319,6 +472,7 @@ int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, X509 *cert); int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +int CMS_RecipientInfo_kari_set0_pkey_and_peer(CMS_RecipientInfo *ri, EVP_PKEY *pk, X509 *peer); EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri, diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h.in new file mode 100644 index 00000000..da20ddf2 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h.in @@ -0,0 +1,395 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CMS_H +# define OPENSSL_CMS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMS_H +# endif + +# include + +# ifndef OPENSSL_NO_CMS +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct CMS_ContentInfo_st CMS_ContentInfo; +typedef struct CMS_SignerInfo_st CMS_SignerInfo; +typedef struct CMS_CertificateChoices CMS_CertificateChoices; +typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; +typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; +typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; +typedef struct CMS_Receipt_st CMS_Receipt; +typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; +typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; + +{- + generate_stack_macros("CMS_SignerInfo") + .generate_stack_macros("CMS_RecipientEncryptedKey") + .generate_stack_macros("CMS_RecipientInfo") + .generate_stack_macros("CMS_RevocationInfoChoice"); +-} + +DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) +DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) +DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) + +CMS_ContentInfo *CMS_ContentInfo_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +# define CMS_SIGNERINFO_ISSUER_SERIAL 0 +# define CMS_SIGNERINFO_KEYIDENTIFIER 1 + +# define CMS_RECIPINFO_NONE -1 +# define CMS_RECIPINFO_TRANS 0 +# define CMS_RECIPINFO_AGREE 1 +# define CMS_RECIPINFO_KEK 2 +# define CMS_RECIPINFO_PASS 3 +# define CMS_RECIPINFO_OTHER 4 + +/* S/MIME related flags */ + +# define CMS_TEXT 0x1 +# define CMS_NOCERTS 0x2 +# define CMS_NO_CONTENT_VERIFY 0x4 +# define CMS_NO_ATTR_VERIFY 0x8 +# define CMS_NOSIGS \ + (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) +# define CMS_NOINTERN 0x10 +# define CMS_NO_SIGNER_CERT_VERIFY 0x20 +# define CMS_NOVERIFY 0x20 +# define CMS_DETACHED 0x40 +# define CMS_BINARY 0x80 +# define CMS_NOATTR 0x100 +# define CMS_NOSMIMECAP 0x200 +# define CMS_NOOLDMIMETYPE 0x400 +# define CMS_CRLFEOL 0x800 +# define CMS_STREAM 0x1000 +# define CMS_NOCRL 0x2000 +# define CMS_PARTIAL 0x4000 +# define CMS_REUSE_DIGEST 0x8000 +# define CMS_USE_KEYID 0x10000 +# define CMS_DEBUG_DECRYPT 0x20000 +# define CMS_KEY_PARAM 0x40000 +# define CMS_ASCIICRLF 0x80000 +# define CMS_CADES 0x100000 +# define CMS_USE_ORIGINATOR_KEYID 0x200000 + +const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); + +BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); +int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); + +ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); +int CMS_is_detached(CMS_ContentInfo *cms); +int CMS_set_detached(CMS_ContentInfo *cms, int detached); + +# ifdef OPENSSL_PEM_H +DECLARE_PEM_rw(CMS, CMS_ContentInfo) +# endif +int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); +CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); +int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); + +BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); +int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); +int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, + int flags); +CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +CMS_ContentInfo *SMIME_read_CMS_ex(BIO *bio, int flags, BIO **bcont, CMS_ContentInfo **ci); +int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); + +int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, + unsigned int flags); + +CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags); +CMS_ContentInfo *CMS_sign_ex(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); + +CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, + X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, unsigned int flags); + +int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); +CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); +CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); + +int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create_ex(BIO *in, const EVP_MD *md, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); + +int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, + const unsigned char *key, size_t keylen, + BIO *dcont, BIO *out, unsigned int flags); + +CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags); +CMS_ContentInfo *CMS_EncryptedData_encrypt_ex(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags, + OSSL_LIB_CTX *ctx, + const char *propq); + +int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, + const unsigned char *key, size_t keylen); + +int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); + +int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, + STACK_OF(X509) *certs, + X509_STORE *store, unsigned int flags); + +STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); + +CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags); +CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); + +int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, + BIO *dcont, BIO *out, unsigned int flags); + +int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms, EVP_PKEY *pk, + X509 *cert, X509 *peer); +int CMS_decrypt_set1_key(CMS_ContentInfo *cms, + unsigned char *key, size_t keylen, + const unsigned char *id, size_t idlen); +int CMS_decrypt_set1_password(CMS_ContentInfo *cms, + unsigned char *pass, ossl_ssize_t passlen); + +STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); +int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); +EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo * +CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, + const char *propq); +CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo *CMS_EnvelopedData_create_ex(const EVP_CIPHER *cipher, + OSSL_LIB_CTX *ctx, + const char *propq); + +CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, + X509 *recip, unsigned int flags); +CMS_RecipientInfo *CMS_add1_recipient(CMS_ContentInfo *cms, X509 *recip, + EVP_PKEY *originatorPrivKey, X509 * originator, unsigned int flags); +int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); +int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); +int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, + EVP_PKEY **pk, X509 **recip, + X509_ALGOR **palg); +int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, + unsigned char *key, size_t keylen, + unsigned char *id, size_t idlen, + ASN1_GENERALIZEDTIME *date, + ASN1_OBJECT *otherTypeId, + ASN1_TYPE *otherType); + +int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pid, + ASN1_GENERALIZEDTIME **pdate, + ASN1_OBJECT **potherid, + ASN1_TYPE **pothertype); + +int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, + unsigned char *key, size_t keylen); + +int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, + const unsigned char *id, size_t idlen); + +int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, + unsigned char *pass, + ossl_ssize_t passlen); + +CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, + int iter, int wrap_nid, + int pbe_nid, + unsigned char *pass, + ossl_ssize_t passlen, + const EVP_CIPHER *kekciph); + +int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(const CMS_ContentInfo *cms, CMS_RecipientInfo *ri); + +int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); + +int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); +const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); + +CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); +int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); +int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); +STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); + +CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); +int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); +int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); +STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); + +int CMS_SignedData_init(CMS_ContentInfo *cms); +CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, + X509 *signer, EVP_PKEY *pk, const EVP_MD *md, + unsigned int flags); +EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); +EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); +STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); + +void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); +int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); +int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + unsigned int flags); +void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, + X509 **signer, X509_ALGOR **pdig, + X509_ALGOR **psig); +ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); +int CMS_SignerInfo_sign(CMS_SignerInfo *si); +int CMS_SignerInfo_verify(CMS_SignerInfo *si); +int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); + +int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); +int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, + int algnid, int keysize); +int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); + +int CMS_signed_get_attr_count(const CMS_SignerInfo *si); +int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_signed_get0_data_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); +int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo, + OSSL_LIB_CTX *ctx); + +int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); +void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, + ASN1_STRING **pcid, + int *pallorfirst, + STACK_OF(GENERAL_NAMES) **plist, + STACK_OF(GENERAL_NAMES) **prto); +int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pukm); +STACK_OF(CMS_RecipientEncryptedKey) +*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); + +int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, + X509_ALGOR **pubalg, + ASN1_BIT_STRING **pubkey, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); + +int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, + ASN1_OCTET_STRING **keyid, + ASN1_GENERALIZEDTIME **tm, + CMS_OtherKeyAttribute **other, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, + X509 *cert); +int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +int CMS_RecipientInfo_kari_set0_pkey_and_peer(CMS_RecipientInfo *ri, EVP_PKEY *pk, X509 *peer); +EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); +int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, + CMS_RecipientInfo *ri, + CMS_RecipientEncryptedKey *rek); + +int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, + ASN1_OCTET_STRING *ukm, int keylen); + +/* Backward compatibility for spelling errors. */ +# define CMS_R_UNKNOWN_DIGEST_ALGORITM CMS_R_UNKNOWN_DIGEST_ALGORITHM +# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE \ + CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h index d589f592..d48c2a4a 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h @@ -1,115 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMSERR_H -# define HEADER_CMSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_CMSERR_H +# define OPENSSL_CMSERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_CMS -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CMS_strings(void); - -/* - * CMS function codes. - */ -# define CMS_F_CHECK_CONTENT 99 -# define CMS_F_CMS_ADD0_CERT 164 -# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 -# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 -# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 -# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 -# define CMS_F_CMS_ADD1_SIGNER 102 -# define CMS_F_CMS_ADD1_SIGNINGTIME 103 -# define CMS_F_CMS_COMPRESS 104 -# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 -# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 -# define CMS_F_CMS_COPY_CONTENT 107 -# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 -# define CMS_F_CMS_DATA 109 -# define CMS_F_CMS_DATAFINAL 110 -# define CMS_F_CMS_DATAINIT 111 -# define CMS_F_CMS_DECRYPT 112 -# define CMS_F_CMS_DECRYPT_SET1_KEY 113 -# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 -# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 -# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 -# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 -# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 -# define CMS_F_CMS_DIGEST_VERIFY 118 -# define CMS_F_CMS_ENCODE_RECEIPT 161 -# define CMS_F_CMS_ENCRYPT 119 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 179 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 -# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 -# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 -# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 -# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 -# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 -# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 -# define CMS_F_CMS_ENV_ASN1_CTRL 171 -# define CMS_F_CMS_FINAL 127 -# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 -# define CMS_F_CMS_GET0_CONTENT 129 -# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 -# define CMS_F_CMS_GET0_ENVELOPED 131 -# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 -# define CMS_F_CMS_GET0_SIGNED 133 -# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 -# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 -# define CMS_F_CMS_RECEIPT_VERIFY 160 -# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 -# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 -# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 -# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 -# define CMS_F_CMS_SD_ASN1_CTRL 170 -# define CMS_F_CMS_SET1_IAS 176 -# define CMS_F_CMS_SET1_KEYID 177 -# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 -# define CMS_F_CMS_SET_DETACHED 147 -# define CMS_F_CMS_SIGN 148 -# define CMS_F_CMS_SIGNED_DATA_INIT 149 -# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 -# define CMS_F_CMS_SIGNERINFO_SIGN 151 -# define CMS_F_CMS_SIGNERINFO_VERIFY 152 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 -# define CMS_F_CMS_SIGN_RECEIPT 163 -# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 183 -# define CMS_F_CMS_STREAM 155 -# define CMS_F_CMS_UNCOMPRESS 156 -# define CMS_F_CMS_VERIFY 157 -# define CMS_F_KEK_UNWRAP_KEY 180 /* * CMS reason codes. @@ -119,6 +28,8 @@ int ERR_load_CMS_strings(void); # define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 # define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 # define CMS_R_CERTIFICATE_VERIFY_ERROR 100 +# define CMS_R_CIPHER_AEAD_SET_TAG_ERROR 184 +# define CMS_R_CIPHER_GET_TAG 185 # define CMS_R_CIPHER_INITIALISATION_ERROR 101 # define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 # define CMS_R_CMS_DATAFINAL_ERROR 103 @@ -132,14 +43,19 @@ int ERR_load_CMS_strings(void); # define CMS_R_CONTENT_VERIFY_ERROR 109 # define CMS_R_CTRL_ERROR 110 # define CMS_R_CTRL_FAILURE 111 +# define CMS_R_DECODE_ERROR 187 # define CMS_R_DECRYPT_ERROR 112 # define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 # define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 # define CMS_R_ERROR_SETTING_KEY 115 # define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 +# define CMS_R_ESS_SIGNING_CERTID_MISMATCH_ERROR 183 # define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 # define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 # define CMS_R_INVALID_KEY_LENGTH 118 +# define CMS_R_INVALID_LABEL 190 +# define CMS_R_INVALID_OAEP_PARAMETERS 191 +# define CMS_R_KDF_PARAMETER_ERROR 186 # define CMS_R_MD_BIO_INIT_ERROR 119 # define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 # define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 @@ -170,9 +86,11 @@ int ERR_load_CMS_strings(void); # define CMS_R_NO_PUBLIC_KEY 134 # define CMS_R_NO_RECEIPT_REQUEST 168 # define CMS_R_NO_SIGNERS 135 +# define CMS_R_PEER_KEY_ERROR 188 # define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 # define CMS_R_RECEIPT_DECODE_ERROR 169 # define CMS_R_RECIPIENT_ERROR 137 +# define CMS_R_SHARED_INFO_ERROR 189 # define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 # define CMS_R_SIGNFINAL_ERROR 139 # define CMS_R_SMIME_TEXT_ERROR 140 @@ -189,8 +107,10 @@ int ERR_load_CMS_strings(void); # define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 # define CMS_R_UNSUPPORTED_CONTENT_ENCRYPTION_ALGORITHM 194 # define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 +# define CMS_R_UNSUPPORTED_ENCRYPTION_TYPE 192 # define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 # define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 +# define CMS_R_UNSUPPORTED_LABEL_SOURCE 193 # define CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE 155 # define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 # define CMS_R_UNSUPPORTED_TYPE 156 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h index d814d3cf..06ff5810 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h @@ -1,14 +1,20 @@ /* * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_COMP_H -# define HEADER_COMP_H +#ifndef OPENSSL_COMP_H +# define OPENSSL_COMP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_COMP_H +# endif # include @@ -35,11 +41,11 @@ int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, COMP_METHOD *COMP_zlib(void); -#if OPENSSL_API_COMPAT < 0x10100000L -#define COMP_zlib_cleanup() while(0) continue +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define COMP_zlib_cleanup() while(0) continue #endif -# ifdef HEADER_BIO_H +# ifdef OPENSSL_BIO_H # ifdef ZLIB const BIO_METHOD *BIO_f_zlib(void); # endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h index 90231e9a..01dd3e6b 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h @@ -1,37 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_COMPERR_H -# define HEADER_COMPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_COMPERR_H +# define OPENSSL_COMPERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_COMP -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_COMP_strings(void); - -/* - * COMP function codes. - */ -# define COMP_F_BIO_ZLIB_FLUSH 99 -# define COMP_F_BIO_ZLIB_NEW 100 -# define COMP_F_BIO_ZLIB_READ 101 -# define COMP_F_BIO_ZLIB_WRITE 102 -# define COMP_F_COMP_CTX_NEW 103 /* * COMP reason codes. diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h index 7336cd2f..e8fcf315 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h @@ -1,21 +1,35 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/conf.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONF_H -# define HEADER_CONF_H + + +#ifndef OPENSSL_CONF_H +# define OPENSSL_CONF_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_H +# endif # include # include # include # include -# include +# include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -27,33 +41,63 @@ typedef struct { char *value; } CONF_VALUE; -DEFINE_STACK_OF(CONF_VALUE) -DEFINE_LHASH_OF(CONF_VALUE); +SKM_DEFINE_STACK_OF_INTERNAL(CONF_VALUE, CONF_VALUE, CONF_VALUE) +#define sk_CONF_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_value(sk, idx) ((CONF_VALUE *)OPENSSL_sk_value(ossl_check_const_CONF_VALUE_sk_type(sk), (idx))) +#define sk_CONF_VALUE_new(cmp) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new(ossl_check_CONF_VALUE_compfunc_type(cmp))) +#define sk_CONF_VALUE_new_null() ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_null()) +#define sk_CONF_VALUE_new_reserve(cmp, n) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_CONF_VALUE_compfunc_type(cmp), (n))) +#define sk_CONF_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CONF_VALUE_sk_type(sk), (n)) +#define sk_CONF_VALUE_free(sk) OPENSSL_sk_free(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_delete(sk, i) ((CONF_VALUE *)OPENSSL_sk_delete(ossl_check_CONF_VALUE_sk_type(sk), (i))) +#define sk_CONF_VALUE_delete_ptr(sk, ptr) ((CONF_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr))) +#define sk_CONF_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_pop(sk) ((CONF_VALUE *)OPENSSL_sk_pop(ossl_check_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_shift(sk) ((CONF_VALUE *)OPENSSL_sk_shift(ossl_check_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CONF_VALUE_sk_type(sk),ossl_check_CONF_VALUE_freefunc_type(freefunc)) +#define sk_CONF_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), (idx)) +#define sk_CONF_VALUE_set(sk, idx, ptr) ((CONF_VALUE *)OPENSSL_sk_set(ossl_check_CONF_VALUE_sk_type(sk), (idx), ossl_check_CONF_VALUE_type(ptr))) +#define sk_CONF_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), pnum) +#define sk_CONF_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_dup(sk) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_dup(ossl_check_const_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_copyfunc_type(copyfunc), ossl_check_CONF_VALUE_freefunc_type(freefunc))) +#define sk_CONF_VALUE_set_cmp_func(sk, cmp) ((sk_CONF_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_compfunc_type(cmp))) +DEFINE_LHASH_OF_INTERNAL(CONF_VALUE); +#define lh_CONF_VALUE_new(hfn, cmp) ((LHASH_OF(CONF_VALUE) *)OPENSSL_LH_new(ossl_check_CONF_VALUE_lh_hashfunc_type(hfn), ossl_check_CONF_VALUE_lh_compfunc_type(cmp))) +#define lh_CONF_VALUE_free(lh) OPENSSL_LH_free(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_flush(lh) OPENSSL_LH_flush(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_insert(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_insert(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_delete(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_delete(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_retrieve(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_retrieve(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_error(lh) OPENSSL_LH_error(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_num_items(lh) OPENSSL_LH_num_items(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_CONF_VALUE_lh_type(lh), dl) +#define lh_CONF_VALUE_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_doallfunc_type(dfn)) + struct conf_st; struct conf_method_st; typedef struct conf_method_st CONF_METHOD; -struct conf_method_st { - const char *name; - CONF *(*create) (CONF_METHOD *meth); - int (*init) (CONF *conf); - int (*destroy) (CONF *conf); - int (*destroy_data) (CONF *conf); - int (*load_bio) (CONF *conf, BIO *bp, long *eline); - int (*dump) (const CONF *conf, BIO *bp); - int (*is_number) (const CONF *conf, char c); - int (*to_int) (const CONF *conf, char c); - int (*load) (CONF *conf, const char *name, long *eline); -}; +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include +# endif /* Module definitions */ - typedef struct conf_imodule_st CONF_IMODULE; typedef struct conf_module_st CONF_MODULE; -DEFINE_STACK_OF(CONF_MODULE) -DEFINE_STACK_OF(CONF_IMODULE) +STACK_OF(CONF_MODULE); +STACK_OF(CONF_IMODULE); /* DSO module function typedefs */ typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); @@ -87,10 +131,11 @@ void CONF_free(LHASH_OF(CONF_VALUE) *conf); int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); #endif int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void OPENSSL_config(const char *config_name); +#endif -DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) - -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OPENSSL_no_config() \ OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) #endif @@ -100,15 +145,13 @@ DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) * that wasn't the case, the above functions would have been replaced */ -struct conf_st { - CONF_METHOD *meth; - void *meth_data; - LHASH_OF(CONF_VALUE) *data; -}; - +CONF *NCONF_new_ex(OSSL_LIB_CTX *libctx, CONF_METHOD *meth); +OSSL_LIB_CTX *NCONF_get0_libctx(const CONF *conf); CONF *NCONF_new(CONF_METHOD *meth); CONF_METHOD *NCONF_default(void); -CONF_METHOD *NCONF_WIN32(void); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CONF_METHOD *NCONF_WIN32(void); +#endif void NCONF_free(CONF *conf); void NCONF_free_data(CONF *conf); @@ -117,6 +160,7 @@ int NCONF_load(CONF *conf, const char *file, long *eline); int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); # endif int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(OPENSSL_CSTRING) *NCONF_get_section_names(const CONF *conf); STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, const char *section); char *NCONF_get_string(const CONF *conf, const char *group, const char *name); @@ -133,11 +177,13 @@ int NCONF_dump_bio(const CONF *conf, BIO *out); int CONF_modules_load(const CONF *cnf, const char *appname, unsigned long flags); +int CONF_modules_load_file_ex(OSSL_LIB_CTX *libctx, const char *filename, + const char *appname, unsigned long flags); int CONF_modules_load_file(const char *filename, const char *appname, unsigned long flags); void CONF_modules_unload(int all); void CONF_modules_finish(void); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define CONF_modules_free() while(0) continue #endif int CONF_module_add(const char *name, conf_init_func *ifunc, diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h.in new file mode 100644 index 00000000..044b3eb5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h.in @@ -0,0 +1,177 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros generate_lhash_macros); +-} + +#ifndef OPENSSL_CONF_H +# define OPENSSL_CONF_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_H +# endif + +# include +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + char *section; + char *name; + char *value; +} CONF_VALUE; + +{- + generate_stack_macros("CONF_VALUE") + .generate_lhash_macros("CONF_VALUE"); +-} + +struct conf_st; +struct conf_method_st; +typedef struct conf_method_st CONF_METHOD; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include +# endif + +/* Module definitions */ +typedef struct conf_imodule_st CONF_IMODULE; +typedef struct conf_module_st CONF_MODULE; + +STACK_OF(CONF_MODULE); +STACK_OF(CONF_IMODULE); + +/* DSO module function typedefs */ +typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); +typedef void conf_finish_func (CONF_IMODULE *md); + +# define CONF_MFLAGS_IGNORE_ERRORS 0x1 +# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 +# define CONF_MFLAGS_SILENT 0x4 +# define CONF_MFLAGS_NO_DSO 0x8 +# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 +# define CONF_MFLAGS_DEFAULT_SECTION 0x20 + +int CONF_set_default_method(CONF_METHOD *meth); +void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); +LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, + long *eline); +# ifndef OPENSSL_NO_STDIO +LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, + long *eline); +# endif +LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, + long *eline); +STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, + const char *section); +char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +void CONF_free(LHASH_OF(CONF_VALUE) *conf); +#ifndef OPENSSL_NO_STDIO +int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); +#endif +int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void OPENSSL_config(const char *config_name); +#endif + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OPENSSL_no_config() \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) +#endif + +/* + * New conf code. The semantics are different from the functions above. If + * that wasn't the case, the above functions would have been replaced + */ + +CONF *NCONF_new_ex(OSSL_LIB_CTX *libctx, CONF_METHOD *meth); +OSSL_LIB_CTX *NCONF_get0_libctx(const CONF *conf); +CONF *NCONF_new(CONF_METHOD *meth); +CONF_METHOD *NCONF_default(void); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CONF_METHOD *NCONF_WIN32(void); +#endif +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf, const char *file, long *eline); +# ifndef OPENSSL_NO_STDIO +int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); +# endif +int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(OPENSSL_CSTRING) *NCONF_get_section_names(const CONF *conf); +STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, + const char *section); +char *NCONF_get_string(const CONF *conf, const char *group, const char *name); +int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, + long *result); +#ifndef OPENSSL_NO_STDIO +int NCONF_dump_fp(const CONF *conf, FILE *out); +#endif +int NCONF_dump_bio(const CONF *conf, BIO *out); + +#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) + +/* Module functions */ + +int CONF_modules_load(const CONF *cnf, const char *appname, + unsigned long flags); +int CONF_modules_load_file_ex(OSSL_LIB_CTX *libctx, const char *filename, + const char *appname, unsigned long flags); +int CONF_modules_load_file(const char *filename, const char *appname, + unsigned long flags); +void CONF_modules_unload(int all); +void CONF_modules_finish(void); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define CONF_modules_free() while(0) continue +#endif +int CONF_module_add(const char *name, conf_init_func *ifunc, + conf_finish_func *ffunc); + +const char *CONF_imodule_get_name(const CONF_IMODULE *md); +const char *CONF_imodule_get_value(const CONF_IMODULE *md); +void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); +void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); +CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); +unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); +void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); +void *CONF_module_get_usr_data(CONF_MODULE *pmod); +void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); + +char *CONF_get1_default_config_file(void); + +int CONF_parse_list(const char *list, int sep, int nospc, + int (*list_cb) (const char *elem, int len, void *usr), + void *arg); + +void OPENSSL_load_builtin_modules(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf_api.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf_api.h index a0275ad7..ed67d577 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf_api.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf_api.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONF_API_H -# define HEADER_CONF_API_H +#ifndef OPENSSL_CONF_API_H +# define OPENSSL_CONF_API_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_API_H +# endif # include # include diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conferr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conferr.h index 32b92291..496e2e1e 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conferr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conferr.h @@ -1,57 +1,30 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONFERR_H -# define HEADER_CONFERR_H +#ifndef OPENSSL_CONFERR_H +# define OPENSSL_CONFERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CONF_strings(void); -/* - * CONF function codes. - */ -# define CONF_F_CONF_DUMP_FP 104 -# define CONF_F_CONF_LOAD 100 -# define CONF_F_CONF_LOAD_FP 103 -# define CONF_F_CONF_PARSE_LIST 119 -# define CONF_F_DEF_LOAD 120 -# define CONF_F_DEF_LOAD_BIO 121 -# define CONF_F_GET_NEXT_FILE 107 -# define CONF_F_MODULE_ADD 122 -# define CONF_F_MODULE_INIT 115 -# define CONF_F_MODULE_LOAD_DSO 117 -# define CONF_F_MODULE_RUN 118 -# define CONF_F_NCONF_DUMP_BIO 105 -# define CONF_F_NCONF_DUMP_FP 106 -# define CONF_F_NCONF_GET_NUMBER_E 112 -# define CONF_F_NCONF_GET_SECTION 108 -# define CONF_F_NCONF_GET_STRING 109 -# define CONF_F_NCONF_LOAD 113 -# define CONF_F_NCONF_LOAD_BIO 110 -# define CONF_F_NCONF_LOAD_FP 114 -# define CONF_F_NCONF_NEW 111 -# define CONF_F_PROCESS_INCLUDE 116 -# define CONF_F_SSL_MODULE_INIT 123 -# define CONF_F_STR_COPY 101 /* * CONF reason codes. */ # define CONF_R_ERROR_LOADING_DSO 110 +# define CONF_R_INVALID_PRAGMA 122 # define CONF_R_LIST_CANNOT_BE_NULL 115 +# define CONF_R_MANDATORY_BRACES_IN_VARIABLE_EXPANSION 123 # define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 # define CONF_R_MISSING_EQUAL_SIGN 101 # define CONF_R_MISSING_INIT_FUNCTION 112 @@ -63,7 +36,9 @@ int ERR_load_CONF_strings(void); # define CONF_R_NO_SUCH_FILE 114 # define CONF_R_NO_VALUE 108 # define CONF_R_NUMBER_TOO_LARGE 121 +# define CONF_R_OPENSSL_CONF_REFERENCES_MISSING_SECTION 124 # define CONF_R_RECURSIVE_DIRECTORY_INCLUDE 111 +# define CONF_R_RELATIVE_PATH 125 # define CONF_R_SSL_COMMAND_SECTION_EMPTY 117 # define CONF_R_SSL_COMMAND_SECTION_NOT_FOUND 118 # define CONF_R_SSL_SECTION_EMPTY 119 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h new file mode 100644 index 00000000..c10bad63 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h @@ -0,0 +1,137 @@ +/* + * WARNING: do not edit! + * Generated by configdata.pm from Configurations/common0.tmpl, Configurations/unix-Makefile.tmpl + * via Makefile.in + * + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFIGURATION_H +# define OPENSSL_CONFIGURATION_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +# ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +# endif + +/* + * OpenSSL was configured with the following options: + */ + +# define OPENSSL_CONFIGURED_API 30100 +# ifndef OPENSSL_RAND_SEED_OS +# define OPENSSL_RAND_SEED_OS +# endif +# ifndef OPENSSL_NO_ACVP_TESTS +# define OPENSSL_NO_ACVP_TESTS +# endif +# ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +# endif +# ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +# endif +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +# endif +# ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# endif +# ifndef OPENSSL_NO_DEVCRYPTOENG +# define OPENSSL_NO_DEVCRYPTOENG +# endif +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +# endif +# ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +# endif +# ifndef OPENSSL_NO_EXTERNAL_TESTS +# define OPENSSL_NO_EXTERNAL_TESTS +# endif +# ifndef OPENSSL_NO_FIPS_SECURITYCHECKS +# define OPENSSL_NO_FIPS_SECURITYCHECKS +# endif +# ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +# endif +# ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +# endif +# ifndef OPENSSL_NO_KTLS +# define OPENSSL_NO_KTLS +# endif +# ifndef OPENSSL_NO_LOADERENG +# define OPENSSL_NO_LOADERENG +# endif +# ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +# endif +# ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +# endif +# ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +# endif +# ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +# endif +# ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +# endif +# ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +# endif +# ifndef OPENSSL_NO_TESTS +# define OPENSSL_NO_TESTS +# endif +# ifndef OPENSSL_NO_TRACE +# define OPENSSL_NO_TRACE +# endif +# ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +# endif +# ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +# endif +# ifndef OPENSSL_NO_UPLINK +# define OPENSSL_NO_UPLINK +# endif +# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +# endif +# ifndef OPENSSL_NO_DYNAMIC_ENGINE +# define OPENSSL_NO_DYNAMIC_ENGINE +# endif + + +/* Generate 80386 code? */ +# undef I386_ONLY + +/* + * The following are cipher-specific, but are part of the public API. + */ +# if !defined(OPENSSL_SYS_UEFI) +# undef BN_LLONG +/* Only one for the following should be defined */ +# define SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# undef THIRTY_TWO_BIT +# endif + +# define RC4_INT unsigned char + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_CONFIGURATION_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h.in new file mode 100644 index 00000000..b84dc1df --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h.in @@ -0,0 +1,69 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFIGURATION_H +# define OPENSSL_CONFIGURATION_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +# ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +# endif + +/* + * OpenSSL was configured with the following options: + */ + +{- if (@{$config{openssl_sys_defines}}) { + foreach (@{$config{openssl_sys_defines}}) { + $OUT .= "# ifndef $_\n"; + $OUT .= "# define $_ 1\n"; + $OUT .= "# endif\n"; + } + } + foreach (@{$config{openssl_api_defines}}) { + (my $macro, my $value) = $_ =~ /^(.*?)=(.*?)$/; + $OUT .= "# define $macro $value\n"; + } + if (@{$config{openssl_feature_defines}}) { + foreach (@{$config{openssl_feature_defines}}) { + $OUT .= "# ifndef $_\n"; + $OUT .= "# define $_\n"; + $OUT .= "# endif\n"; + } + } + ""; +-} + +/* Generate 80386 code? */ +{- $config{processor} eq "386" ? "# define" : "# undef" -} I386_ONLY + +/* + * The following are cipher-specific, but are part of the public API. + */ +# if !defined(OPENSSL_SYS_UEFI) +{- $config{bn_ll} ? "# define" : "# undef" -} BN_LLONG +/* Only one for the following should be defined */ +{- $config{b64l} ? "# define" : "# undef" -} SIXTY_FOUR_BIT_LONG +{- $config{b64} ? "# define" : "# undef" -} SIXTY_FOUR_BIT +{- $config{b32} ? "# define" : "# undef" -} THIRTY_TWO_BIT +# endif + +# define RC4_INT {- $config{rc4_int} -} + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_CONFIGURATION_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conftypes.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conftypes.h new file mode 100644 index 00000000..17cefaa4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conftypes.h @@ -0,0 +1,44 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFTYPES_H +# define OPENSSL_CONFTYPES_H +# pragma once + +#ifndef OPENSSL_CONF_H +# include +#endif + +/* + * The contents of this file are deprecated and will be made opaque + */ +struct conf_method_st { + const char *name; + CONF *(*create) (CONF_METHOD *meth); + int (*init) (CONF *conf); + int (*destroy) (CONF *conf); + int (*destroy_data) (CONF *conf); + int (*load_bio) (CONF *conf, BIO *bp, long *eline); + int (*dump) (const CONF *conf, BIO *bp); + int (*is_number) (const CONF *conf, char c); + int (*to_int) (const CONF *conf, char c); + int (*load) (CONF *conf, const char *name, long *eline); +}; + +struct conf_st { + CONF_METHOD *meth; + void *meth_data; + LHASH_OF(CONF_VALUE) *data; + int flag_dollarid; + int flag_abspath; + char *includedir; + OSSL_LIB_CTX *libctx; +}; + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core.h new file mode 100644 index 00000000..9683ac70 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core.h @@ -0,0 +1,233 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_H +# define OPENSSL_CORE_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Base types + * ---------- + * + * These are the types that the OpenSSL core and providers have in common + * to communicate data between them. + */ + +/* Opaque handles to be used with core upcall functions from providers */ +typedef struct ossl_core_handle_st OSSL_CORE_HANDLE; +typedef struct openssl_core_ctx_st OPENSSL_CORE_CTX; +typedef struct ossl_core_bio_st OSSL_CORE_BIO; + +/* + * Dispatch table element. function_id numbers and the functions are defined + * in core_dispatch.h, see macros with 'OSSL_CORE_MAKE_FUNC' in their names. + * + * An array of these is always terminated by function_id == 0 + */ +struct ossl_dispatch_st { + int function_id; + void (*function)(void); +}; + +/* + * Other items, essentially an int<->pointer map element. + * + * We make this type distinct from OSSL_DISPATCH to ensure that dispatch + * tables remain tables with function pointers only. + * + * This is used whenever we need to pass things like a table of error reason + * codes <-> reason string maps, ... + * + * Usage determines which field works as key if any, rather than field order. + * + * An array of these is always terminated by id == 0 && ptr == NULL + */ +struct ossl_item_st { + unsigned int id; + void *ptr; +}; + +/* + * Type to tie together algorithm names, property definition string and + * the algorithm implementation in the form of a dispatch table. + * + * An array of these is always terminated by algorithm_names == NULL + */ +struct ossl_algorithm_st { + const char *algorithm_names; /* key */ + const char *property_definition; /* key */ + const OSSL_DISPATCH *implementation; + const char *algorithm_description; +}; + +/* + * Type to pass object data in a uniform way, without exposing the object + * structure. + * + * An array of these is always terminated by key == NULL + */ +struct ossl_param_st { + const char *key; /* the name of the parameter */ + unsigned int data_type; /* declare what kind of content is in buffer */ + void *data; /* value being passed in or out */ + size_t data_size; /* data size */ + size_t return_size; /* returned content size */ +}; + +/* Currently supported OSSL_PARAM data types */ +/* + * OSSL_PARAM_INTEGER and OSSL_PARAM_UNSIGNED_INTEGER + * are arbitrary length and therefore require an arbitrarily sized buffer, + * since they may be used to pass numbers larger than what is natively + * available. + * + * The number must be buffered in native form, i.e. MSB first on B_ENDIAN + * systems and LSB first on L_ENDIAN systems. This means that arbitrary + * native integers can be stored in the buffer, just make sure that the + * buffer size is correct and the buffer itself is properly aligned (for + * example by having the buffer field point at a C integer). + */ +# define OSSL_PARAM_INTEGER 1 +# define OSSL_PARAM_UNSIGNED_INTEGER 2 +/*- + * OSSL_PARAM_REAL + * is a C binary floating point values in native form and alignment. + */ +# define OSSL_PARAM_REAL 3 +/*- + * OSSL_PARAM_UTF8_STRING + * is a printable string. It is expected to be printed as it is. + */ +# define OSSL_PARAM_UTF8_STRING 4 +/*- + * OSSL_PARAM_OCTET_STRING + * is a string of bytes with no further specification. It is expected to be + * printed as a hexdump. + */ +# define OSSL_PARAM_OCTET_STRING 5 +/*- + * OSSL_PARAM_UTF8_PTR + * is a pointer to a printable string. It is expected to be printed as it is. + * + * The difference between this and OSSL_PARAM_UTF8_STRING is that only pointers + * are manipulated for this type. + * + * This is more relevant for parameter requests, where the responding + * function doesn't need to copy the data to the provided buffer, but + * sets the provided buffer to point at the actual data instead. + * + * WARNING! Using these is FRAGILE, as it assumes that the actual + * data and its location are constant. + * + * EXTRA WARNING! If you are not completely sure you most likely want + * to use the OSSL_PARAM_UTF8_STRING type. + */ +# define OSSL_PARAM_UTF8_PTR 6 +/*- + * OSSL_PARAM_OCTET_PTR + * is a pointer to a string of bytes with no further specification. It is + * expected to be printed as a hexdump. + * + * The difference between this and OSSL_PARAM_OCTET_STRING is that only pointers + * are manipulated for this type. + * + * This is more relevant for parameter requests, where the responding + * function doesn't need to copy the data to the provided buffer, but + * sets the provided buffer to point at the actual data instead. + * + * WARNING! Using these is FRAGILE, as it assumes that the actual + * data and its location are constant. + * + * EXTRA WARNING! If you are not completely sure you most likely want + * to use the OSSL_PARAM_OCTET_STRING type. + */ +# define OSSL_PARAM_OCTET_PTR 7 + +/* + * Typedef for the thread stop handling callback. Used both internally and by + * providers. + * + * Providers may register for notifications about threads stopping by + * registering a callback to hear about such events. Providers register the + * callback using the OSSL_FUNC_CORE_THREAD_START function in the |in| dispatch + * table passed to OSSL_provider_init(). The arg passed back to a provider will + * be the provider side context object. + */ +typedef void (*OSSL_thread_stop_handler_fn)(void *arg); + + +/*- + * Provider entry point + * -------------------- + * + * This function is expected to be present in any dynamically loadable + * provider module. By definition, if this function doesn't exist in a + * module, that module is not an OpenSSL provider module. + */ +/*- + * |handle| pointer to opaque type OSSL_CORE_HANDLE. This can be used + * together with some functions passed via |in| to query data. + * |in| is the array of functions that the Core passes to the provider. + * |out| will be the array of base functions that the provider passes + * back to the Core. + * |provctx| a provider side context object, optionally created if the + * provider needs it. This value is passed to other provider + * functions, notably other context constructors. + */ +typedef int (OSSL_provider_init_fn)(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in, + const OSSL_DISPATCH **out, + void **provctx); +# ifdef __VMS +# pragma names save +# pragma names uppercase,truncated +# endif +OPENSSL_EXPORT OSSL_provider_init_fn OSSL_provider_init; +# ifdef __VMS +# pragma names restore +# endif + +/* + * Generic callback function signature. + * + * The expectation is that any provider function that wants to offer + * a callback / hook can do so by taking an argument with this type, + * as well as a pointer to caller-specific data. When calling the + * callback, the provider function can populate an OSSL_PARAM array + * with data of its choice and pass that in the callback call, along + * with the caller data argument. + * + * libcrypto may use the OSSL_PARAM array to create arguments for an + * application callback it knows about. + */ +typedef int (OSSL_CALLBACK)(const OSSL_PARAM params[], void *arg); +typedef int (OSSL_INOUT_CALLBACK)(const OSSL_PARAM in_params[], + OSSL_PARAM out_params[], void *arg); +/* + * Passphrase callback function signature + * + * This is similar to the generic callback function above, but adds a + * result parameter. + */ +typedef int (OSSL_PASSPHRASE_CALLBACK)(char *pass, size_t pass_size, + size_t *pass_len, + const OSSL_PARAM params[], void *arg); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_dispatch.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_dispatch.h new file mode 100644 index 00000000..11e3c861 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_dispatch.h @@ -0,0 +1,943 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_NUMBERS_H +# define OPENSSL_CORE_NUMBERS_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Identities + * ---------- + * + * All series start with 1, to allow 0 to be an array terminator. + * For any FUNC identity, we also provide a function signature typedef + * and a static inline function to extract a function pointer from a + * OSSL_DISPATCH element in a type safe manner. + * + * Names: + * for any function base name 'foo' (uppercase form 'FOO'), we will have + * the following: + * - a macro for the identity with the name OSSL_FUNC_'FOO' or derivatives + * thereof (to be specified further down) + * - a function signature typedef with the name OSSL_FUNC_'foo'_fn + * - a function pointer extractor function with the name OSSL_FUNC_'foo' + */ + +/* + * Helper macro to create the function signature typedef and the extractor + * |type| is the return-type of the function, |name| is the name of the + * function to fetch, and |args| is a parenthesized list of parameters + * for the function (that is, it is |name|'s function signature). + * Note: This is considered a "reserved" internal macro. Applications should + * not use this or assume its existence. + */ +#define OSSL_CORE_MAKE_FUNC(type,name,args) \ + typedef type (OSSL_FUNC_##name##_fn)args; \ + static ossl_unused ossl_inline \ + OSSL_FUNC_##name##_fn *OSSL_FUNC_##name(const OSSL_DISPATCH *opf) \ + { \ + return (OSSL_FUNC_##name##_fn *)opf->function; \ + } + +/* + * Core function identities, for the two OSSL_DISPATCH tables being passed + * in the OSSL_provider_init call. + * + * 0 serves as a marker for the end of the OSSL_DISPATCH array, and must + * therefore NEVER be used as a function identity. + */ +/* Functions provided by the Core to the provider, reserved numbers 1-1023 */ +# define OSSL_FUNC_CORE_GETTABLE_PARAMS 1 +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + core_gettable_params,(const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_GET_PARAMS 2 +OSSL_CORE_MAKE_FUNC(int,core_get_params,(const OSSL_CORE_HANDLE *prov, + OSSL_PARAM params[])) +# define OSSL_FUNC_CORE_THREAD_START 3 +OSSL_CORE_MAKE_FUNC(int,core_thread_start,(const OSSL_CORE_HANDLE *prov, + OSSL_thread_stop_handler_fn handfn, + void *arg)) +# define OSSL_FUNC_CORE_GET_LIBCTX 4 +OSSL_CORE_MAKE_FUNC(OPENSSL_CORE_CTX *,core_get_libctx, + (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_NEW_ERROR 5 +OSSL_CORE_MAKE_FUNC(void,core_new_error,(const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_SET_ERROR_DEBUG 6 +OSSL_CORE_MAKE_FUNC(void,core_set_error_debug, + (const OSSL_CORE_HANDLE *prov, + const char *file, int line, const char *func)) +# define OSSL_FUNC_CORE_VSET_ERROR 7 +OSSL_CORE_MAKE_FUNC(void,core_vset_error, + (const OSSL_CORE_HANDLE *prov, + uint32_t reason, const char *fmt, va_list args)) +# define OSSL_FUNC_CORE_SET_ERROR_MARK 8 +OSSL_CORE_MAKE_FUNC(int, core_set_error_mark, (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK 9 +OSSL_CORE_MAKE_FUNC(int, core_clear_last_error_mark, + (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_POP_ERROR_TO_MARK 10 +OSSL_CORE_MAKE_FUNC(int, core_pop_error_to_mark, (const OSSL_CORE_HANDLE *prov)) + + +/* Functions to access the OBJ database */ + +#define OSSL_FUNC_CORE_OBJ_ADD_SIGID 11 +#define OSSL_FUNC_CORE_OBJ_CREATE 12 + +OSSL_CORE_MAKE_FUNC(int, core_obj_add_sigid, + (const OSSL_CORE_HANDLE *prov, const char *sign_name, + const char *digest_name, const char *pkey_name)) +OSSL_CORE_MAKE_FUNC(int, core_obj_create, + (const OSSL_CORE_HANDLE *prov, const char *oid, + const char *sn, const char *ln)) + +/* Memory allocation, freeing, clearing. */ +#define OSSL_FUNC_CRYPTO_MALLOC 20 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_malloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_ZALLOC 21 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_zalloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_FREE 22 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_free, (void *ptr, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_CLEAR_FREE 23 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_clear_free, (void *ptr, size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_REALLOC 24 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_realloc, (void *addr, size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_CLEAR_REALLOC 25 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_clear_realloc, (void *addr, size_t old_num, size_t num, + const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_MALLOC 26 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_secure_malloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_ZALLOC 27 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_secure_zalloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_FREE 28 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_secure_free, (void *ptr, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_CLEAR_FREE 29 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_secure_clear_free, (void *ptr, size_t num, const char *file, + int line)) +#define OSSL_FUNC_CRYPTO_SECURE_ALLOCATED 30 +OSSL_CORE_MAKE_FUNC(int, + CRYPTO_secure_allocated, (const void *ptr)) +#define OSSL_FUNC_OPENSSL_CLEANSE 31 +OSSL_CORE_MAKE_FUNC(void, + OPENSSL_cleanse, (void *ptr, size_t len)) + +/* Bio functions provided by the core */ +#define OSSL_FUNC_BIO_NEW_FILE 40 +#define OSSL_FUNC_BIO_NEW_MEMBUF 41 +#define OSSL_FUNC_BIO_READ_EX 42 +#define OSSL_FUNC_BIO_WRITE_EX 43 +#define OSSL_FUNC_BIO_UP_REF 44 +#define OSSL_FUNC_BIO_FREE 45 +#define OSSL_FUNC_BIO_VPRINTF 46 +#define OSSL_FUNC_BIO_VSNPRINTF 47 +#define OSSL_FUNC_BIO_PUTS 48 +#define OSSL_FUNC_BIO_GETS 49 +#define OSSL_FUNC_BIO_CTRL 50 + + +OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_file, (const char *filename, + const char *mode)) +OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_membuf, (const void *buf, int len)) +OSSL_CORE_MAKE_FUNC(int, BIO_read_ex, (OSSL_CORE_BIO *bio, void *data, + size_t data_len, size_t *bytes_read)) +OSSL_CORE_MAKE_FUNC(int, BIO_write_ex, (OSSL_CORE_BIO *bio, const void *data, + size_t data_len, size_t *written)) +OSSL_CORE_MAKE_FUNC(int, BIO_gets, (OSSL_CORE_BIO *bio, char *buf, int size)) +OSSL_CORE_MAKE_FUNC(int, BIO_puts, (OSSL_CORE_BIO *bio, const char *str)) +OSSL_CORE_MAKE_FUNC(int, BIO_up_ref, (OSSL_CORE_BIO *bio)) +OSSL_CORE_MAKE_FUNC(int, BIO_free, (OSSL_CORE_BIO *bio)) +OSSL_CORE_MAKE_FUNC(int, BIO_vprintf, (OSSL_CORE_BIO *bio, const char *format, + va_list args)) +OSSL_CORE_MAKE_FUNC(int, BIO_vsnprintf, + (char *buf, size_t n, const char *fmt, va_list args)) +OSSL_CORE_MAKE_FUNC(int, BIO_ctrl, (OSSL_CORE_BIO *bio, + int cmd, long num, void *ptr)) + +#define OSSL_FUNC_SELF_TEST_CB 100 +OSSL_CORE_MAKE_FUNC(void, self_test_cb, (OPENSSL_CORE_CTX *ctx, OSSL_CALLBACK **cb, + void **cbarg)) + +/* Functions to get seed material from the operating system */ +#define OSSL_FUNC_GET_ENTROPY 101 +#define OSSL_FUNC_CLEANUP_ENTROPY 102 +#define OSSL_FUNC_GET_NONCE 103 +#define OSSL_FUNC_CLEANUP_NONCE 104 +OSSL_CORE_MAKE_FUNC(size_t, get_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, int entropy, + size_t min_len, size_t max_len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) +OSSL_CORE_MAKE_FUNC(size_t, get_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, size_t min_len, + size_t max_len, const void *salt, + size_t salt_len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) + +/* Functions to access the core's providers */ +#define OSSL_FUNC_PROVIDER_REGISTER_CHILD_CB 105 +#define OSSL_FUNC_PROVIDER_DEREGISTER_CHILD_CB 106 +#define OSSL_FUNC_PROVIDER_NAME 107 +#define OSSL_FUNC_PROVIDER_GET0_PROVIDER_CTX 108 +#define OSSL_FUNC_PROVIDER_GET0_DISPATCH 109 +#define OSSL_FUNC_PROVIDER_UP_REF 110 +#define OSSL_FUNC_PROVIDER_FREE 111 + +OSSL_CORE_MAKE_FUNC(int, provider_register_child_cb, + (const OSSL_CORE_HANDLE *handle, + int (*create_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata), + int (*remove_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata), + int (*global_props_cb)(const char *props, void *cbdata), + void *cbdata)) +OSSL_CORE_MAKE_FUNC(void, provider_deregister_child_cb, + (const OSSL_CORE_HANDLE *handle)) +OSSL_CORE_MAKE_FUNC(const char *, provider_name, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(void *, provider_get0_provider_ctx, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(const OSSL_DISPATCH *, provider_get0_dispatch, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(int, provider_up_ref, + (const OSSL_CORE_HANDLE *prov, int activate)) +OSSL_CORE_MAKE_FUNC(int, provider_free, + (const OSSL_CORE_HANDLE *prov, int deactivate)) + +/* Functions provided by the provider to the Core, reserved numbers 1024-1535 */ +# define OSSL_FUNC_PROVIDER_TEARDOWN 1024 +OSSL_CORE_MAKE_FUNC(void,provider_teardown,(void *provctx)) +# define OSSL_FUNC_PROVIDER_GETTABLE_PARAMS 1025 +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + provider_gettable_params,(void *provctx)) +# define OSSL_FUNC_PROVIDER_GET_PARAMS 1026 +OSSL_CORE_MAKE_FUNC(int,provider_get_params,(void *provctx, + OSSL_PARAM params[])) +# define OSSL_FUNC_PROVIDER_QUERY_OPERATION 1027 +OSSL_CORE_MAKE_FUNC(const OSSL_ALGORITHM *,provider_query_operation, + (void *provctx, int operation_id, int *no_store)) +# define OSSL_FUNC_PROVIDER_UNQUERY_OPERATION 1028 +OSSL_CORE_MAKE_FUNC(void, provider_unquery_operation, + (void *provctx, int operation_id, const OSSL_ALGORITHM *)) +# define OSSL_FUNC_PROVIDER_GET_REASON_STRINGS 1029 +OSSL_CORE_MAKE_FUNC(const OSSL_ITEM *,provider_get_reason_strings, + (void *provctx)) +# define OSSL_FUNC_PROVIDER_GET_CAPABILITIES 1030 +OSSL_CORE_MAKE_FUNC(int, provider_get_capabilities, (void *provctx, + const char *capability, OSSL_CALLBACK *cb, void *arg)) +# define OSSL_FUNC_PROVIDER_SELF_TEST 1031 +OSSL_CORE_MAKE_FUNC(int, provider_self_test, (void *provctx)) + +/* Operations */ + +# define OSSL_OP_DIGEST 1 +# define OSSL_OP_CIPHER 2 /* Symmetric Ciphers */ +# define OSSL_OP_MAC 3 +# define OSSL_OP_KDF 4 +# define OSSL_OP_RAND 5 +# define OSSL_OP_KEYMGMT 10 +# define OSSL_OP_KEYEXCH 11 +# define OSSL_OP_SIGNATURE 12 +# define OSSL_OP_ASYM_CIPHER 13 +# define OSSL_OP_KEM 14 +/* New section for non-EVP operations */ +# define OSSL_OP_ENCODER 20 +# define OSSL_OP_DECODER 21 +# define OSSL_OP_STORE 22 +/* Highest known operation number */ +# define OSSL_OP__HIGHEST 22 + +/* Digests */ + +# define OSSL_FUNC_DIGEST_NEWCTX 1 +# define OSSL_FUNC_DIGEST_INIT 2 +# define OSSL_FUNC_DIGEST_UPDATE 3 +# define OSSL_FUNC_DIGEST_FINAL 4 +# define OSSL_FUNC_DIGEST_DIGEST 5 +# define OSSL_FUNC_DIGEST_FREECTX 6 +# define OSSL_FUNC_DIGEST_DUPCTX 7 +# define OSSL_FUNC_DIGEST_GET_PARAMS 8 +# define OSSL_FUNC_DIGEST_SET_CTX_PARAMS 9 +# define OSSL_FUNC_DIGEST_GET_CTX_PARAMS 10 +# define OSSL_FUNC_DIGEST_GETTABLE_PARAMS 11 +# define OSSL_FUNC_DIGEST_SETTABLE_CTX_PARAMS 12 +# define OSSL_FUNC_DIGEST_GETTABLE_CTX_PARAMS 13 + +OSSL_CORE_MAKE_FUNC(void *, digest_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, digest_init, (void *dctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_update, + (void *dctx, const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, digest_final, + (void *dctx, + unsigned char *out, size_t *outl, size_t outsz)) +OSSL_CORE_MAKE_FUNC(int, digest_digest, + (void *provctx, const unsigned char *in, size_t inl, + unsigned char *out, size_t *outl, size_t outsz)) + +OSSL_CORE_MAKE_FUNC(void, digest_freectx, (void *dctx)) +OSSL_CORE_MAKE_FUNC(void *, digest_dupctx, (void *dctx)) + +OSSL_CORE_MAKE_FUNC(int, digest_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_set_ctx_params, + (void *vctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_get_ctx_params, + (void *vctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_settable_ctx_params, + (void *dctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_ctx_params, + (void *dctx, void *provctx)) + +/* Symmetric Ciphers */ + +# define OSSL_FUNC_CIPHER_NEWCTX 1 +# define OSSL_FUNC_CIPHER_ENCRYPT_INIT 2 +# define OSSL_FUNC_CIPHER_DECRYPT_INIT 3 +# define OSSL_FUNC_CIPHER_UPDATE 4 +# define OSSL_FUNC_CIPHER_FINAL 5 +# define OSSL_FUNC_CIPHER_CIPHER 6 +# define OSSL_FUNC_CIPHER_FREECTX 7 +# define OSSL_FUNC_CIPHER_DUPCTX 8 +# define OSSL_FUNC_CIPHER_GET_PARAMS 9 +# define OSSL_FUNC_CIPHER_GET_CTX_PARAMS 10 +# define OSSL_FUNC_CIPHER_SET_CTX_PARAMS 11 +# define OSSL_FUNC_CIPHER_GETTABLE_PARAMS 12 +# define OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS 13 +# define OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS 14 + +OSSL_CORE_MAKE_FUNC(void *, cipher_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, cipher_encrypt_init, (void *cctx, + const unsigned char *key, + size_t keylen, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_decrypt_init, (void *cctx, + const unsigned char *key, + size_t keylen, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_update, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize, + const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, cipher_final, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize)) +OSSL_CORE_MAKE_FUNC(int, cipher_cipher, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize, + const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(void, cipher_freectx, (void *cctx)) +OSSL_CORE_MAKE_FUNC(void *, cipher_dupctx, (void *cctx)) +OSSL_CORE_MAKE_FUNC(int, cipher_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_get_ctx_params, (void *cctx, + OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_set_ctx_params, (void *cctx, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_settable_ctx_params, + (void *cctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_ctx_params, + (void *cctx, void *provctx)) + +/* MACs */ + +# define OSSL_FUNC_MAC_NEWCTX 1 +# define OSSL_FUNC_MAC_DUPCTX 2 +# define OSSL_FUNC_MAC_FREECTX 3 +# define OSSL_FUNC_MAC_INIT 4 +# define OSSL_FUNC_MAC_UPDATE 5 +# define OSSL_FUNC_MAC_FINAL 6 +# define OSSL_FUNC_MAC_GET_PARAMS 7 +# define OSSL_FUNC_MAC_GET_CTX_PARAMS 8 +# define OSSL_FUNC_MAC_SET_CTX_PARAMS 9 +# define OSSL_FUNC_MAC_GETTABLE_PARAMS 10 +# define OSSL_FUNC_MAC_GETTABLE_CTX_PARAMS 11 +# define OSSL_FUNC_MAC_SETTABLE_CTX_PARAMS 12 + +OSSL_CORE_MAKE_FUNC(void *, mac_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, mac_dupctx, (void *src)) +OSSL_CORE_MAKE_FUNC(void, mac_freectx, (void *mctx)) +OSSL_CORE_MAKE_FUNC(int, mac_init, (void *mctx, const unsigned char *key, + size_t keylen, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_update, + (void *mctx, const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, mac_final, + (void *mctx, + unsigned char *out, size_t *outl, size_t outsize)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_ctx_params, + (void *mctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_settable_ctx_params, + (void *mctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, mac_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_get_ctx_params, + (void *mctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_set_ctx_params, + (void *mctx, const OSSL_PARAM params[])) + +/* KDFs and PRFs */ + +# define OSSL_FUNC_KDF_NEWCTX 1 +# define OSSL_FUNC_KDF_DUPCTX 2 +# define OSSL_FUNC_KDF_FREECTX 3 +# define OSSL_FUNC_KDF_RESET 4 +# define OSSL_FUNC_KDF_DERIVE 5 +# define OSSL_FUNC_KDF_GETTABLE_PARAMS 6 +# define OSSL_FUNC_KDF_GETTABLE_CTX_PARAMS 7 +# define OSSL_FUNC_KDF_SETTABLE_CTX_PARAMS 8 +# define OSSL_FUNC_KDF_GET_PARAMS 9 +# define OSSL_FUNC_KDF_GET_CTX_PARAMS 10 +# define OSSL_FUNC_KDF_SET_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, kdf_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, kdf_dupctx, (void *src)) +OSSL_CORE_MAKE_FUNC(void, kdf_freectx, (void *kctx)) +OSSL_CORE_MAKE_FUNC(void, kdf_reset, (void *kctx)) +OSSL_CORE_MAKE_FUNC(int, kdf_derive, (void *kctx, unsigned char *key, + size_t keylen, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_ctx_params, + (void *kctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_settable_ctx_params, + (void *kctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kdf_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kdf_get_ctx_params, + (void *kctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kdf_set_ctx_params, + (void *kctx, const OSSL_PARAM params[])) + +/* RAND */ + +# define OSSL_FUNC_RAND_NEWCTX 1 +# define OSSL_FUNC_RAND_FREECTX 2 +# define OSSL_FUNC_RAND_INSTANTIATE 3 +# define OSSL_FUNC_RAND_UNINSTANTIATE 4 +# define OSSL_FUNC_RAND_GENERATE 5 +# define OSSL_FUNC_RAND_RESEED 6 +# define OSSL_FUNC_RAND_NONCE 7 +# define OSSL_FUNC_RAND_ENABLE_LOCKING 8 +# define OSSL_FUNC_RAND_LOCK 9 +# define OSSL_FUNC_RAND_UNLOCK 10 +# define OSSL_FUNC_RAND_GETTABLE_PARAMS 11 +# define OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS 12 +# define OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS 13 +# define OSSL_FUNC_RAND_GET_PARAMS 14 +# define OSSL_FUNC_RAND_GET_CTX_PARAMS 15 +# define OSSL_FUNC_RAND_SET_CTX_PARAMS 16 +# define OSSL_FUNC_RAND_VERIFY_ZEROIZATION 17 +# define OSSL_FUNC_RAND_GET_SEED 18 +# define OSSL_FUNC_RAND_CLEAR_SEED 19 + +OSSL_CORE_MAKE_FUNC(void *,rand_newctx, + (void *provctx, void *parent, + const OSSL_DISPATCH *parent_calls)) +OSSL_CORE_MAKE_FUNC(void,rand_freectx, (void *vctx)) +OSSL_CORE_MAKE_FUNC(int,rand_instantiate, + (void *vdrbg, unsigned int strength, + int prediction_resistance, + const unsigned char *pstr, size_t pstr_len, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_uninstantiate, (void *vdrbg)) +OSSL_CORE_MAKE_FUNC(int,rand_generate, + (void *vctx, unsigned char *out, size_t outlen, + unsigned int strength, int prediction_resistance, + const unsigned char *addin, size_t addin_len)) +OSSL_CORE_MAKE_FUNC(int,rand_reseed, + (void *vctx, int prediction_resistance, + const unsigned char *ent, size_t ent_len, + const unsigned char *addin, size_t addin_len)) +OSSL_CORE_MAKE_FUNC(size_t,rand_nonce, + (void *vctx, unsigned char *out, unsigned int strength, + size_t min_noncelen, size_t max_noncelen)) +OSSL_CORE_MAKE_FUNC(int,rand_enable_locking, (void *vctx)) +OSSL_CORE_MAKE_FUNC(int,rand_lock, (void *vctx)) +OSSL_CORE_MAKE_FUNC(void,rand_unlock, (void *vctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_ctx_params, + (void *vctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_settable_ctx_params, + (void *vctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int,rand_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_get_ctx_params, + (void *vctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_set_ctx_params, + (void *vctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(void,rand_set_callbacks, + (void *vctx, OSSL_INOUT_CALLBACK *get_entropy, + OSSL_CALLBACK *cleanup_entropy, + OSSL_INOUT_CALLBACK *get_nonce, + OSSL_CALLBACK *cleanup_nonce, void *arg)) +OSSL_CORE_MAKE_FUNC(int,rand_verify_zeroization, + (void *vctx)) +OSSL_CORE_MAKE_FUNC(size_t,rand_get_seed, + (void *vctx, unsigned char **buffer, + int entropy, size_t min_len, size_t max_len, + int prediction_resistance, + const unsigned char *adin, size_t adin_len)) +OSSL_CORE_MAKE_FUNC(void,rand_clear_seed, + (void *vctx, unsigned char *buffer, size_t b_len)) + +/*- + * Key management + * + * The Key Management takes care of provider side key objects, and includes + * all current functionality to create them, destroy them, set parameters + * and key material, etc, essentially everything that manipulates the keys + * themselves and their parameters. + * + * The key objects are commonly referred to as |keydata|, and it MUST be able + * to contain parameters if the key has any, the public key and the private + * key. All parts are optional, but their presence determines what can be + * done with the key object in terms of encryption, signature, and so on. + * The assumption from libcrypto is that the key object contains any of the + * following data combinations: + * + * - parameters only + * - public key only + * - public key + private key + * - parameters + public key + * - parameters + public key + private key + * + * What "parameters", "public key" and "private key" means in detail is left + * to the implementation. In the case of DH and DSA, they would typically + * include domain parameters, while for certain variants of RSA, they would + * typically include PSS or OAEP parameters. + * + * Key objects are created with OSSL_FUNC_keymgmt_new() and destroyed with + * OSSL_FUNC_keymgmt_free(). Key objects can have data filled in with + * OSSL_FUNC_keymgmt_import(). + * + * Three functions are made available to check what selection of data is + * present in a key object: OSSL_FUNC_keymgmt_has_parameters(), + * OSSL_FUNC_keymgmt_has_public_key(), and OSSL_FUNC_keymgmt_has_private_key(), + */ + +/* Key data subset selection - individual bits */ +# define OSSL_KEYMGMT_SELECT_PRIVATE_KEY 0x01 +# define OSSL_KEYMGMT_SELECT_PUBLIC_KEY 0x02 +# define OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS 0x04 +# define OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS 0x80 + +/* Key data subset selection - combinations */ +# define OSSL_KEYMGMT_SELECT_ALL_PARAMETERS \ + ( OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS \ + | OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS) +# define OSSL_KEYMGMT_SELECT_KEYPAIR \ + ( OSSL_KEYMGMT_SELECT_PRIVATE_KEY | OSSL_KEYMGMT_SELECT_PUBLIC_KEY ) +# define OSSL_KEYMGMT_SELECT_ALL \ + ( OSSL_KEYMGMT_SELECT_KEYPAIR | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS ) + +# define OSSL_KEYMGMT_VALIDATE_FULL_CHECK 0 +# define OSSL_KEYMGMT_VALIDATE_QUICK_CHECK 1 + +/* Basic key object creation */ +# define OSSL_FUNC_KEYMGMT_NEW 1 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_new, (void *provctx)) + +/* Generation, a more complex constructor */ +# define OSSL_FUNC_KEYMGMT_GEN_INIT 2 +# define OSSL_FUNC_KEYMGMT_GEN_SET_TEMPLATE 3 +# define OSSL_FUNC_KEYMGMT_GEN_SET_PARAMS 4 +# define OSSL_FUNC_KEYMGMT_GEN_SETTABLE_PARAMS 5 +# define OSSL_FUNC_KEYMGMT_GEN 6 +# define OSSL_FUNC_KEYMGMT_GEN_CLEANUP 7 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen_init, + (void *provctx, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_template, + (void *genctx, void *templ)) +OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_params, + (void *genctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + keymgmt_gen_settable_params, + (void *genctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen, + (void *genctx, OSSL_CALLBACK *cb, void *cbarg)) +OSSL_CORE_MAKE_FUNC(void, keymgmt_gen_cleanup, (void *genctx)) + +/* Key loading by object reference */ +# define OSSL_FUNC_KEYMGMT_LOAD 8 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_load, + (const void *reference, size_t reference_sz)) + +/* Basic key object destruction */ +# define OSSL_FUNC_KEYMGMT_FREE 10 +OSSL_CORE_MAKE_FUNC(void, keymgmt_free, (void *keydata)) + +/* Key object information, with discovery */ +#define OSSL_FUNC_KEYMGMT_GET_PARAMS 11 +#define OSSL_FUNC_KEYMGMT_GETTABLE_PARAMS 12 +OSSL_CORE_MAKE_FUNC(int, keymgmt_get_params, + (void *keydata, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_gettable_params, + (void *provctx)) + +#define OSSL_FUNC_KEYMGMT_SET_PARAMS 13 +#define OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS 14 +OSSL_CORE_MAKE_FUNC(int, keymgmt_set_params, + (void *keydata, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_settable_params, + (void *provctx)) + +/* Key checks - discovery of supported operations */ +# define OSSL_FUNC_KEYMGMT_QUERY_OPERATION_NAME 20 +OSSL_CORE_MAKE_FUNC(const char *, keymgmt_query_operation_name, + (int operation_id)) + +/* Key checks - key data content checks */ +# define OSSL_FUNC_KEYMGMT_HAS 21 +OSSL_CORE_MAKE_FUNC(int, keymgmt_has, (const void *keydata, int selection)) + +/* Key checks - validation */ +# define OSSL_FUNC_KEYMGMT_VALIDATE 22 +OSSL_CORE_MAKE_FUNC(int, keymgmt_validate, (const void *keydata, int selection, + int checktype)) + +/* Key checks - matching */ +# define OSSL_FUNC_KEYMGMT_MATCH 23 +OSSL_CORE_MAKE_FUNC(int, keymgmt_match, + (const void *keydata1, const void *keydata2, + int selection)) + +/* Import and export functions, with discovery */ +# define OSSL_FUNC_KEYMGMT_IMPORT 40 +# define OSSL_FUNC_KEYMGMT_IMPORT_TYPES 41 +# define OSSL_FUNC_KEYMGMT_EXPORT 42 +# define OSSL_FUNC_KEYMGMT_EXPORT_TYPES 43 +OSSL_CORE_MAKE_FUNC(int, keymgmt_import, + (void *keydata, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_import_types, + (int selection)) +OSSL_CORE_MAKE_FUNC(int, keymgmt_export, + (void *keydata, int selection, + OSSL_CALLBACK *param_cb, void *cbarg)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types, + (int selection)) + +/* Dup function, constructor */ +# define OSSL_FUNC_KEYMGMT_DUP 44 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_dup, + (const void *keydata_from, int selection)) + +/* Key Exchange */ + +# define OSSL_FUNC_KEYEXCH_NEWCTX 1 +# define OSSL_FUNC_KEYEXCH_INIT 2 +# define OSSL_FUNC_KEYEXCH_DERIVE 3 +# define OSSL_FUNC_KEYEXCH_SET_PEER 4 +# define OSSL_FUNC_KEYEXCH_FREECTX 5 +# define OSSL_FUNC_KEYEXCH_DUPCTX 6 +# define OSSL_FUNC_KEYEXCH_SET_CTX_PARAMS 7 +# define OSSL_FUNC_KEYEXCH_SETTABLE_CTX_PARAMS 8 +# define OSSL_FUNC_KEYEXCH_GET_CTX_PARAMS 9 +# define OSSL_FUNC_KEYEXCH_GETTABLE_CTX_PARAMS 10 + +OSSL_CORE_MAKE_FUNC(void *, keyexch_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, keyexch_derive, (void *ctx, unsigned char *secret, + size_t *secretlen, size_t outlen)) +OSSL_CORE_MAKE_FUNC(int, keyexch_set_peer, (void *ctx, void *provkey)) +OSSL_CORE_MAKE_FUNC(void, keyexch_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, keyexch_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_set_ctx_params, (void *ctx, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_settable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_get_ctx_params, (void *ctx, + OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_gettable_ctx_params, + (void *ctx, void *provctx)) + +/* Signature */ + +# define OSSL_FUNC_SIGNATURE_NEWCTX 1 +# define OSSL_FUNC_SIGNATURE_SIGN_INIT 2 +# define OSSL_FUNC_SIGNATURE_SIGN 3 +# define OSSL_FUNC_SIGNATURE_VERIFY_INIT 4 +# define OSSL_FUNC_SIGNATURE_VERIFY 5 +# define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER_INIT 6 +# define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER 7 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_INIT 8 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_UPDATE 9 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_FINAL 10 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN 11 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_INIT 12 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_UPDATE 13 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_FINAL 14 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY 15 +# define OSSL_FUNC_SIGNATURE_FREECTX 16 +# define OSSL_FUNC_SIGNATURE_DUPCTX 17 +# define OSSL_FUNC_SIGNATURE_GET_CTX_PARAMS 18 +# define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_PARAMS 19 +# define OSSL_FUNC_SIGNATURE_SET_CTX_PARAMS 20 +# define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_PARAMS 21 +# define OSSL_FUNC_SIGNATURE_GET_CTX_MD_PARAMS 22 +# define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_MD_PARAMS 23 +# define OSSL_FUNC_SIGNATURE_SET_CTX_MD_PARAMS 24 +# define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_MD_PARAMS 25 + +OSSL_CORE_MAKE_FUNC(void *, signature_newctx, (void *provctx, + const char *propq)) +OSSL_CORE_MAKE_FUNC(int, signature_sign_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_sign, (void *ctx, unsigned char *sig, + size_t *siglen, size_t sigsize, + const unsigned char *tbs, + size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_verify_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_verify, (void *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_verify_recover_init, + (void *ctx, void *provkey, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_verify_recover, + (void *ctx, unsigned char *rout, size_t *routlen, + size_t routsize, const unsigned char *sig, size_t siglen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_init, + (void *ctx, const char *mdname, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_update, + (void *ctx, const unsigned char *data, size_t datalen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_final, + (void *ctx, unsigned char *sig, size_t *siglen, + size_t sigsize)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign, + (void *ctx, unsigned char *sigret, size_t *siglen, + size_t sigsize, const unsigned char *tbs, size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_init, + (void *ctx, const char *mdname, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_update, + (void *ctx, const unsigned char *data, size_t datalen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_final, + (void *ctx, const unsigned char *sig, size_t siglen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify, + (void *ctx, const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen)) +OSSL_CORE_MAKE_FUNC(void, signature_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, signature_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_md_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_md_params, + (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_md_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_md_params, + (void *ctx)) + + +/* Asymmetric Ciphers */ + +# define OSSL_FUNC_ASYM_CIPHER_NEWCTX 1 +# define OSSL_FUNC_ASYM_CIPHER_ENCRYPT_INIT 2 +# define OSSL_FUNC_ASYM_CIPHER_ENCRYPT 3 +# define OSSL_FUNC_ASYM_CIPHER_DECRYPT_INIT 4 +# define OSSL_FUNC_ASYM_CIPHER_DECRYPT 5 +# define OSSL_FUNC_ASYM_CIPHER_FREECTX 6 +# define OSSL_FUNC_ASYM_CIPHER_DUPCTX 7 +# define OSSL_FUNC_ASYM_CIPHER_GET_CTX_PARAMS 8 +# define OSSL_FUNC_ASYM_CIPHER_GETTABLE_CTX_PARAMS 9 +# define OSSL_FUNC_ASYM_CIPHER_SET_CTX_PARAMS 10 +# define OSSL_FUNC_ASYM_CIPHER_SETTABLE_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, asym_cipher_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt, (void *ctx, unsigned char *out, + size_t *outlen, + size_t outsize, + const unsigned char *in, + size_t inlen)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt, (void *ctx, unsigned char *out, + size_t *outlen, + size_t outsize, + const unsigned char *in, + size_t inlen)) +OSSL_CORE_MAKE_FUNC(void, asym_cipher_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, asym_cipher_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_get_ctx_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_settable_ctx_params, + (void *ctx, void *provctx)) + +/* Asymmetric Key encapsulation */ +# define OSSL_FUNC_KEM_NEWCTX 1 +# define OSSL_FUNC_KEM_ENCAPSULATE_INIT 2 +# define OSSL_FUNC_KEM_ENCAPSULATE 3 +# define OSSL_FUNC_KEM_DECAPSULATE_INIT 4 +# define OSSL_FUNC_KEM_DECAPSULATE 5 +# define OSSL_FUNC_KEM_FREECTX 6 +# define OSSL_FUNC_KEM_DUPCTX 7 +# define OSSL_FUNC_KEM_GET_CTX_PARAMS 8 +# define OSSL_FUNC_KEM_GETTABLE_CTX_PARAMS 9 +# define OSSL_FUNC_KEM_SET_CTX_PARAMS 10 +# define OSSL_FUNC_KEM_SETTABLE_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, kem_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kem_encapsulate_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_encapsulate, (void *ctx, + unsigned char *out, size_t *outlen, + unsigned char *secret, + size_t *secretlen)) +OSSL_CORE_MAKE_FUNC(int, kem_decapsulate_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_decapsulate, (void *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)) +OSSL_CORE_MAKE_FUNC(void, kem_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, kem_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, kem_get_ctx_params, (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kem_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_settable_ctx_params, + (void *ctx, void *provctx)) + +/* Encoders and decoders */ +# define OSSL_FUNC_ENCODER_NEWCTX 1 +# define OSSL_FUNC_ENCODER_FREECTX 2 +# define OSSL_FUNC_ENCODER_GET_PARAMS 3 +# define OSSL_FUNC_ENCODER_GETTABLE_PARAMS 4 +# define OSSL_FUNC_ENCODER_SET_CTX_PARAMS 5 +# define OSSL_FUNC_ENCODER_SETTABLE_CTX_PARAMS 6 +# define OSSL_FUNC_ENCODER_DOES_SELECTION 10 +# define OSSL_FUNC_ENCODER_ENCODE 11 +# define OSSL_FUNC_ENCODER_IMPORT_OBJECT 20 +# define OSSL_FUNC_ENCODER_FREE_OBJECT 21 +OSSL_CORE_MAKE_FUNC(void *, encoder_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void, encoder_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, encoder_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, encoder_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_settable_ctx_params, + (void *provctx)) + +OSSL_CORE_MAKE_FUNC(int, encoder_does_selection, + (void *provctx, int selection)) +OSSL_CORE_MAKE_FUNC(int, encoder_encode, + (void *ctx, OSSL_CORE_BIO *out, + const void *obj_raw, const OSSL_PARAM obj_abstract[], + int selection, + OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg)) + +OSSL_CORE_MAKE_FUNC(void *, encoder_import_object, + (void *ctx, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(void, encoder_free_object, (void *obj)) + +# define OSSL_FUNC_DECODER_NEWCTX 1 +# define OSSL_FUNC_DECODER_FREECTX 2 +# define OSSL_FUNC_DECODER_GET_PARAMS 3 +# define OSSL_FUNC_DECODER_GETTABLE_PARAMS 4 +# define OSSL_FUNC_DECODER_SET_CTX_PARAMS 5 +# define OSSL_FUNC_DECODER_SETTABLE_CTX_PARAMS 6 +# define OSSL_FUNC_DECODER_DOES_SELECTION 10 +# define OSSL_FUNC_DECODER_DECODE 11 +# define OSSL_FUNC_DECODER_EXPORT_OBJECT 20 +OSSL_CORE_MAKE_FUNC(void *, decoder_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void, decoder_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, decoder_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, decoder_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_settable_ctx_params, + (void *provctx)) + +OSSL_CORE_MAKE_FUNC(int, decoder_does_selection, + (void *provctx, int selection)) +OSSL_CORE_MAKE_FUNC(int, decoder_decode, + (void *ctx, OSSL_CORE_BIO *in, int selection, + OSSL_CALLBACK *data_cb, void *data_cbarg, + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) +OSSL_CORE_MAKE_FUNC(int, decoder_export_object, + (void *ctx, const void *objref, size_t objref_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg)) + +/*- + * Store + * + * Objects are scanned by using the 'open', 'load', 'eof' and 'close' + * functions, which implement an OSSL_STORE loader. + * + * store_load() works in a way that's very similar to the decoders, in + * that they pass an abstract object through a callback, either as a DER + * octet string or as an object reference, which libcrypto will have to + * deal with. + */ + +#define OSSL_FUNC_STORE_OPEN 1 +#define OSSL_FUNC_STORE_ATTACH 2 +#define OSSL_FUNC_STORE_SETTABLE_CTX_PARAMS 3 +#define OSSL_FUNC_STORE_SET_CTX_PARAMS 4 +#define OSSL_FUNC_STORE_LOAD 5 +#define OSSL_FUNC_STORE_EOF 6 +#define OSSL_FUNC_STORE_CLOSE 7 +#define OSSL_FUNC_STORE_EXPORT_OBJECT 8 +OSSL_CORE_MAKE_FUNC(void *, store_open, (void *provctx, const char *uri)) +OSSL_CORE_MAKE_FUNC(void *, store_attach, (void *provctx, OSSL_CORE_BIO *in)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, store_settable_ctx_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, store_set_ctx_params, + (void *loaderctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, store_load, + (void *loaderctx, + OSSL_CALLBACK *object_cb, void *object_cbarg, + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) +OSSL_CORE_MAKE_FUNC(int, store_eof, (void *loaderctx)) +OSSL_CORE_MAKE_FUNC(int, store_close, (void *loaderctx)) +OSSL_CORE_MAKE_FUNC(int, store_export_object, + (void *loaderctx, const void *objref, size_t objref_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg)) + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h new file mode 100644 index 00000000..5e3c132f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h @@ -0,0 +1,560 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_NAMES_H +# define OPENSSL_CORE_NAMES_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* Well known parameter names that core passes to providers */ +#define OSSL_PROV_PARAM_CORE_VERSION "openssl-version" /* utf8_ptr */ +#define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name" /* utf8_ptr */ +#define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename" /* utf8_ptr */ + +/* Well known parameter names that Providers can define */ +#define OSSL_PROV_PARAM_NAME "name" /* utf8_ptr */ +#define OSSL_PROV_PARAM_VERSION "version" /* utf8_ptr */ +#define OSSL_PROV_PARAM_BUILDINFO "buildinfo" /* utf8_ptr */ +#define OSSL_PROV_PARAM_STATUS "status" /* uint */ +#define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks" /* uint */ +#define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" /* uint */ +#define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" /* uint */ + +/* Self test callback parameters */ +#define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase" /* utf8_string */ +#define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type" /* utf8_string */ +#define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc" /* utf8_string */ + +/*- + * Provider-native object abstractions + * + * These are used when a provider wants to pass object data or an object + * reference back to libcrypto. This is only useful for provider functions + * that take a callback to which an OSSL_PARAM array with these parameters + * can be passed. + * + * This set of parameter names is explained in detail in provider-object(7) + * (doc/man7/provider-object.pod) + */ +#define OSSL_OBJECT_PARAM_TYPE "type" /* INTEGER */ +#define OSSL_OBJECT_PARAM_DATA_TYPE "data-type" /* UTF8_STRING */ +#define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure" /* UTF8_STRING */ +#define OSSL_OBJECT_PARAM_REFERENCE "reference" /* OCTET_STRING */ +#define OSSL_OBJECT_PARAM_DATA "data" /* OCTET_STRING or UTF8_STRING */ +#define OSSL_OBJECT_PARAM_DESC "desc" /* UTF8_STRING */ + +/* + * Algorithm parameters + * If "engine" or "properties" are specified, they should always be paired + * with the algorithm type. + * Note these are common names that are shared by many types (such as kdf, mac, + * and pkey) e.g: see OSSL_MAC_PARAM_DIGEST below. + */ +#define OSSL_ALG_PARAM_DIGEST "digest" /* utf8_string */ +#define OSSL_ALG_PARAM_CIPHER "cipher" /* utf8_string */ +#define OSSL_ALG_PARAM_ENGINE "engine" /* utf8_string */ +#define OSSL_ALG_PARAM_MAC "mac" /* utf8_string */ +#define OSSL_ALG_PARAM_PROPERTIES "properties"/* utf8_string */ + +/* cipher parameters */ +#define OSSL_CIPHER_PARAM_PADDING "padding" /* uint */ +#define OSSL_CIPHER_PARAM_USE_BITS "use-bits" /* uint */ +#define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version" /* uint */ +#define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac" /* octet_ptr */ +#define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size" /* size_t */ +#define OSSL_CIPHER_PARAM_MODE "mode" /* uint */ +#define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD "aead" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_CTS "cts" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_KEYLEN "keylen" /* size_t */ +#define OSSL_CIPHER_PARAM_IVLEN "ivlen" /* size_t */ +#define OSSL_CIPHER_PARAM_IV "iv" /* octet_string OR octet_ptr */ +#define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv" /* octet_string OR octet_ptr */ +#define OSSL_CIPHER_PARAM_NUM "num" /* uint */ +#define OSSL_CIPHER_PARAM_ROUNDS "rounds" /* uint */ +#define OSSL_CIPHER_PARAM_AEAD_TAG "tag" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN +#define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" /* octet_string */ +#define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" /* octet_string */ +#define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" /* size_t */ +#define OSSL_CIPHER_PARAM_SPEED "speed" /* uint */ +#define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" /* utf8_string */ +/* For passing the AlgorithmIdentifier parameter in DER form */ +#define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS "alg_id_param" /* octet_string */ + +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT \ + "tls1multi_maxsndfrag" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE \ + "tls1multi_maxbufsz" /* size_t */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE \ + "tls1multi_interleave" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD \ + "tls1multi_aad" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN \ + "tls1multi_aadpacklen" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC \ + "tls1multi_enc" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN \ + "tls1multi_encin" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN \ + "tls1multi_enclen" /* size_t */ + +/* OSSL_CIPHER_PARAM_CTS_MODE Values */ +#define OSSL_CIPHER_CTS_MODE_CS1 "CS1" +#define OSSL_CIPHER_CTS_MODE_CS2 "CS2" +#define OSSL_CIPHER_CTS_MODE_CS3 "CS3" + +/* digest parameters */ +#define OSSL_DIGEST_PARAM_XOFLEN "xoflen" /* size_t */ +#define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" /* octet string */ +#define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" /* uint */ +#define OSSL_DIGEST_PARAM_MICALG "micalg" /* utf8 string */ +#define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" /* size_t */ +#define OSSL_DIGEST_PARAM_SIZE "size" /* size_t */ +#define OSSL_DIGEST_PARAM_XOF "xof" /* int, 0 or 1 */ +#define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" /* int, 0 or 1 */ + +/* Known DIGEST names (not a complete list) */ +#define OSSL_DIGEST_NAME_MD5 "MD5" +#define OSSL_DIGEST_NAME_MD5_SHA1 "MD5-SHA1" +#define OSSL_DIGEST_NAME_SHA1 "SHA1" +#define OSSL_DIGEST_NAME_SHA2_224 "SHA2-224" +#define OSSL_DIGEST_NAME_SHA2_256 "SHA2-256" +#define OSSL_DIGEST_NAME_SHA2_384 "SHA2-384" +#define OSSL_DIGEST_NAME_SHA2_512 "SHA2-512" +#define OSSL_DIGEST_NAME_SHA2_512_224 "SHA2-512/224" +#define OSSL_DIGEST_NAME_SHA2_512_256 "SHA2-512/256" +#define OSSL_DIGEST_NAME_MD2 "MD2" +#define OSSL_DIGEST_NAME_MD4 "MD4" +#define OSSL_DIGEST_NAME_MDC2 "MDC2" +#define OSSL_DIGEST_NAME_RIPEMD160 "RIPEMD160" +#define OSSL_DIGEST_NAME_SHA3_224 "SHA3-224" +#define OSSL_DIGEST_NAME_SHA3_256 "SHA3-256" +#define OSSL_DIGEST_NAME_SHA3_384 "SHA3-384" +#define OSSL_DIGEST_NAME_SHA3_512 "SHA3-512" +#define OSSL_DIGEST_NAME_KECCAK_KMAC128 "KECCAK-KMAC-128" +#define OSSL_DIGEST_NAME_KECCAK_KMAC256 "KECCAK-KMAC-256" +#define OSSL_DIGEST_NAME_SM3 "SM3" + +/* MAC parameters */ +#define OSSL_MAC_PARAM_KEY "key" /* octet string */ +#define OSSL_MAC_PARAM_IV "iv" /* octet string */ +#define OSSL_MAC_PARAM_CUSTOM "custom" /* utf8 string */ +#define OSSL_MAC_PARAM_SALT "salt" /* octet string */ +#define OSSL_MAC_PARAM_XOF "xof" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_C_ROUNDS "c-rounds" /* unsigned int */ +#define OSSL_MAC_PARAM_D_ROUNDS "d-rounds" /* unsigned int */ + +/* + * If "engine" or "properties" are specified, they should always be paired + * with "cipher" or "digest". + */ +#define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ +#define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ +#define OSSL_MAC_PARAM_SIZE "size" /* size_t */ +#define OSSL_MAC_PARAM_BLOCK_SIZE "block-size" /* size_t */ +#define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size" /* size_t */ + +/* Known MAC names */ +#define OSSL_MAC_NAME_BLAKE2BMAC "BLAKE2BMAC" +#define OSSL_MAC_NAME_BLAKE2SMAC "BLAKE2SMAC" +#define OSSL_MAC_NAME_CMAC "CMAC" +#define OSSL_MAC_NAME_GMAC "GMAC" +#define OSSL_MAC_NAME_HMAC "HMAC" +#define OSSL_MAC_NAME_KMAC128 "KMAC128" +#define OSSL_MAC_NAME_KMAC256 "KMAC256" +#define OSSL_MAC_NAME_POLY1305 "POLY1305" +#define OSSL_MAC_NAME_SIPHASH "SIPHASH" + +/* KDF / PRF parameters */ +#define OSSL_KDF_PARAM_SECRET "secret" /* octet string */ +#define OSSL_KDF_PARAM_KEY "key" /* octet string */ +#define OSSL_KDF_PARAM_SALT "salt" /* octet string */ +#define OSSL_KDF_PARAM_PASSWORD "pass" /* octet string */ +#define OSSL_KDF_PARAM_PREFIX "prefix" /* octet string */ +#define OSSL_KDF_PARAM_LABEL "label" /* octet string */ +#define OSSL_KDF_PARAM_DATA "data" /* octet string */ +#define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ +#define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC /* utf8 string */ +#define OSSL_KDF_PARAM_MAC_SIZE "maclen" /* size_t */ +#define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ +#define OSSL_KDF_PARAM_ITER "iter" /* unsigned int */ +#define OSSL_KDF_PARAM_MODE "mode" /* utf8 string or int */ +#define OSSL_KDF_PARAM_PKCS5 "pkcs5" /* int */ +#define OSSL_KDF_PARAM_UKM "ukm" /* octet string */ +#define OSSL_KDF_PARAM_CEK_ALG "cekalg" /* utf8 string */ +#define OSSL_KDF_PARAM_SCRYPT_N "n" /* uint64_t */ +#define OSSL_KDF_PARAM_SCRYPT_R "r" /* uint32_t */ +#define OSSL_KDF_PARAM_SCRYPT_P "p" /* uint32_t */ +#define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes" /* uint64_t */ +#define OSSL_KDF_PARAM_INFO "info" /* octet string */ +#define OSSL_KDF_PARAM_SEED "seed" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_TYPE "type" /* int */ +#define OSSL_KDF_PARAM_SIZE "size" /* size_t */ +#define OSSL_KDF_PARAM_CONSTANT "constant" /* octet string */ +#define OSSL_KDF_PARAM_PKCS12_ID "id" /* int */ +#define OSSL_KDF_PARAM_KBKDF_USE_L "use-l" /* int */ +#define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator" /* int */ +#define OSSL_KDF_PARAM_KBKDF_R "r" /* int */ +#define OSSL_KDF_PARAM_X942_ACVPINFO "acvp-info" +#define OSSL_KDF_PARAM_X942_PARTYUINFO "partyu-info" +#define OSSL_KDF_PARAM_X942_PARTYVINFO "partyv-info" +#define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo" +#define OSSL_KDF_PARAM_X942_SUPP_PRIVINFO "supp-privinfo" +#define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits" + +/* Known KDF names */ +#define OSSL_KDF_NAME_HKDF "HKDF" +#define OSSL_KDF_NAME_TLS1_3_KDF "TLS13-KDF" +#define OSSL_KDF_NAME_PBKDF1 "PBKDF1" +#define OSSL_KDF_NAME_PBKDF2 "PBKDF2" +#define OSSL_KDF_NAME_SCRYPT "SCRYPT" +#define OSSL_KDF_NAME_SSHKDF "SSHKDF" +#define OSSL_KDF_NAME_SSKDF "SSKDF" +#define OSSL_KDF_NAME_TLS1_PRF "TLS1-PRF" +#define OSSL_KDF_NAME_X942KDF_ASN1 "X942KDF-ASN1" +#define OSSL_KDF_NAME_X942KDF_CONCAT "X942KDF-CONCAT" +#define OSSL_KDF_NAME_X963KDF "X963KDF" +#define OSSL_KDF_NAME_KBKDF "KBKDF" +#define OSSL_KDF_NAME_KRB5KDF "KRB5KDF" + +/* Known RAND names */ +#define OSSL_RAND_PARAM_STATE "state" +#define OSSL_RAND_PARAM_STRENGTH "strength" +#define OSSL_RAND_PARAM_MAX_REQUEST "max_request" +#define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy" +#define OSSL_RAND_PARAM_TEST_NONCE "test_nonce" + +/* RAND/DRBG names */ +#define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests" +#define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval" +#define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen" +#define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen" +#define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen" +#define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen" +#define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen" +#define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen" +#define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter" +#define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time" +#define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +#define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +#define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC +#define OSSL_DRBG_PARAM_USE_DF "use_derivation_function" + +/* DRBG call back parameters */ +#define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required" +#define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance" +#define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length" +#define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length" +#define OSSL_DRBG_PARAM_RANDOM_DATA "random_data" +#define OSSL_DRBG_PARAM_SIZE "size" + +/* PKEY parameters */ +/* Common PKEY parameters */ +#define OSSL_PKEY_PARAM_BITS "bits" /* integer */ +#define OSSL_PKEY_PARAM_MAX_SIZE "max-size" /* integer */ +#define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" /* integer */ +#define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE /* utf8 string */ +#define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +#define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" /* utf8 string */ +#define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" /* utf8 string */ +#define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" +#define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size" +#define OSSL_PKEY_PARAM_MASKGENFUNC "mgf" +#define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest" +#define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties" +#define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" +#define OSSL_PKEY_PARAM_GROUP_NAME "group" +#define OSSL_PKEY_PARAM_DIST_ID "distid" +#define OSSL_PKEY_PARAM_PUB_KEY "pub" +#define OSSL_PKEY_PARAM_PRIV_KEY "priv" + +/* Diffie-Hellman/DSA Parameters */ +#define OSSL_PKEY_PARAM_FFC_P "p" +#define OSSL_PKEY_PARAM_FFC_G "g" +#define OSSL_PKEY_PARAM_FFC_Q "q" +#define OSSL_PKEY_PARAM_FFC_GINDEX "gindex" +#define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter" +#define OSSL_PKEY_PARAM_FFC_SEED "seed" +#define OSSL_PKEY_PARAM_FFC_COFACTOR "j" +#define OSSL_PKEY_PARAM_FFC_H "hindex" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy" + +/* Diffie-Hellman params */ +#define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" +#define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len" + +/* Elliptic Curve Domain Parameters */ +#define OSSL_PKEY_PARAM_EC_PUB_X "qx" +#define OSSL_PKEY_PARAM_EC_PUB_Y "qy" + +/* Elliptic Curve Explicit Domain Parameters */ +#define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" +#define OSSL_PKEY_PARAM_EC_P "p" +#define OSSL_PKEY_PARAM_EC_A "a" +#define OSSL_PKEY_PARAM_EC_B "b" +#define OSSL_PKEY_PARAM_EC_GENERATOR "generator" +#define OSSL_PKEY_PARAM_EC_ORDER "order" +#define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" +#define OSSL_PKEY_PARAM_EC_SEED "seed" +#define OSSL_PKEY_PARAM_EC_CHAR2_M "m" +#define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type" +#define OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS "tp" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K1 "k1" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K2 "k2" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K3 "k3" +#define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" + +/* Elliptic Curve Key Parameters */ +#define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" +#define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH \ + OSSL_PKEY_PARAM_USE_COFACTOR_FLAG + +/* RSA Keys */ +/* + * n, e, d are the usual public and private key components + * + * rsa-num is the number of factors, including p and q + * rsa-factor is used for each factor: p, q, r_i (i = 3, ...) + * rsa-exponent is used for each exponent: dP, dQ, d_i (i = 3, ...) + * rsa-coefficient is used for each coefficient: qInv, t_i (i = 3, ...) + * + * The number of rsa-factor items must be equal to the number of rsa-exponent + * items, and the number of rsa-coefficients must be one less. + * (the base i for the coefficients is 2, not 1, at least as implied by + * RFC 8017) + */ +#define OSSL_PKEY_PARAM_RSA_N "n" +#define OSSL_PKEY_PARAM_RSA_E "e" +#define OSSL_PKEY_PARAM_RSA_D "d" +#define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor" +#define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" +#define OSSL_PKEY_PARAM_RSA_FACTOR1 OSSL_PKEY_PARAM_RSA_FACTOR"1" +#define OSSL_PKEY_PARAM_RSA_FACTOR2 OSSL_PKEY_PARAM_RSA_FACTOR"2" +#define OSSL_PKEY_PARAM_RSA_FACTOR3 OSSL_PKEY_PARAM_RSA_FACTOR"3" +#define OSSL_PKEY_PARAM_RSA_FACTOR4 OSSL_PKEY_PARAM_RSA_FACTOR"4" +#define OSSL_PKEY_PARAM_RSA_FACTOR5 OSSL_PKEY_PARAM_RSA_FACTOR"5" +#define OSSL_PKEY_PARAM_RSA_FACTOR6 OSSL_PKEY_PARAM_RSA_FACTOR"6" +#define OSSL_PKEY_PARAM_RSA_FACTOR7 OSSL_PKEY_PARAM_RSA_FACTOR"7" +#define OSSL_PKEY_PARAM_RSA_FACTOR8 OSSL_PKEY_PARAM_RSA_FACTOR"8" +#define OSSL_PKEY_PARAM_RSA_FACTOR9 OSSL_PKEY_PARAM_RSA_FACTOR"9" +#define OSSL_PKEY_PARAM_RSA_FACTOR10 OSSL_PKEY_PARAM_RSA_FACTOR"10" +#define OSSL_PKEY_PARAM_RSA_EXPONENT1 OSSL_PKEY_PARAM_RSA_EXPONENT"1" +#define OSSL_PKEY_PARAM_RSA_EXPONENT2 OSSL_PKEY_PARAM_RSA_EXPONENT"2" +#define OSSL_PKEY_PARAM_RSA_EXPONENT3 OSSL_PKEY_PARAM_RSA_EXPONENT"3" +#define OSSL_PKEY_PARAM_RSA_EXPONENT4 OSSL_PKEY_PARAM_RSA_EXPONENT"4" +#define OSSL_PKEY_PARAM_RSA_EXPONENT5 OSSL_PKEY_PARAM_RSA_EXPONENT"5" +#define OSSL_PKEY_PARAM_RSA_EXPONENT6 OSSL_PKEY_PARAM_RSA_EXPONENT"6" +#define OSSL_PKEY_PARAM_RSA_EXPONENT7 OSSL_PKEY_PARAM_RSA_EXPONENT"7" +#define OSSL_PKEY_PARAM_RSA_EXPONENT8 OSSL_PKEY_PARAM_RSA_EXPONENT"8" +#define OSSL_PKEY_PARAM_RSA_EXPONENT9 OSSL_PKEY_PARAM_RSA_EXPONENT"9" +#define OSSL_PKEY_PARAM_RSA_EXPONENT10 OSSL_PKEY_PARAM_RSA_EXPONENT"10" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 OSSL_PKEY_PARAM_RSA_COEFFICIENT"1" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 OSSL_PKEY_PARAM_RSA_COEFFICIENT"2" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 OSSL_PKEY_PARAM_RSA_COEFFICIENT"3" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 OSSL_PKEY_PARAM_RSA_COEFFICIENT"4" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 OSSL_PKEY_PARAM_RSA_COEFFICIENT"5" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 OSSL_PKEY_PARAM_RSA_COEFFICIENT"6" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 OSSL_PKEY_PARAM_RSA_COEFFICIENT"7" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 OSSL_PKEY_PARAM_RSA_COEFFICIENT"8" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 OSSL_PKEY_PARAM_RSA_COEFFICIENT"9" + +/* RSA padding modes */ +#define OSSL_PKEY_RSA_PAD_MODE_NONE "none" +#define OSSL_PKEY_RSA_PAD_MODE_PKCSV15 "pkcs1" +#define OSSL_PKEY_RSA_PAD_MODE_OAEP "oaep" +#define OSSL_PKEY_RSA_PAD_MODE_X931 "x931" +#define OSSL_PKEY_RSA_PAD_MODE_PSS "pss" + +/* RSA pss padding salt length */ +#define OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST "digest" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_MAX "max" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO "auto" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX "auto-digestmax" + +/* Key generation parameters */ +#define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS +#define OSSL_PKEY_PARAM_RSA_PRIMES "primes" +#define OSSL_PKEY_PARAM_RSA_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_PKEY_PARAM_RSA_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_PKEY_PARAM_RSA_MASKGENFUNC OSSL_PKEY_PARAM_MASKGENFUNC +#define OSSL_PKEY_PARAM_RSA_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen" + +/* Key generation parameters */ +#define OSSL_PKEY_PARAM_FFC_TYPE "type" +#define OSSL_PKEY_PARAM_FFC_PBITS "pbits" +#define OSSL_PKEY_PARAM_FFC_QBITS "qbits" +#define OSSL_PKEY_PARAM_FFC_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_PKEY_PARAM_FFC_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES + +#define OSSL_PKEY_PARAM_EC_ENCODING "encoding" /* utf8_string */ +#define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format" +#define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" +#define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public" + +/* OSSL_PKEY_PARAM_EC_ENCODING values */ +#define OSSL_PKEY_EC_ENCODING_EXPLICIT "explicit" +#define OSSL_PKEY_EC_ENCODING_GROUP "named_curve" + +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_UNCOMPRESSED "uncompressed" +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_COMPRESSED "compressed" +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_HYBRID "hybrid" + +#define OSSL_PKEY_EC_GROUP_CHECK_DEFAULT "default" +#define OSSL_PKEY_EC_GROUP_CHECK_NAMED "named" +#define OSSL_PKEY_EC_GROUP_CHECK_NAMED_NIST "named-nist" + +/* Key Exchange parameters */ +#define OSSL_EXCHANGE_PARAM_PAD "pad" /* uint */ +#define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode" /* int */ +#define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen" /* size_t */ +/* The following parameter is an octet_string on set and an octet_ptr on get */ +#define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm" + +/* Signature parameters */ +#define OSSL_SIGNATURE_PARAM_ALGORITHM_ID "algorithm-id" +#define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE +#define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" +#define OSSL_SIGNATURE_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES \ + OSSL_PKEY_PARAM_MGF1_PROPERTIES +#define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE + +/* Asym cipher parameters */ +#define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE +#define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE +#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST \ + OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS \ + OSSL_PKEY_PARAM_MGF1_PROPERTIES +#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS "digest-props" +/* The following parameter is an octet_string on set and an octet_ptr on get */ +#define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label" +#define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version" +#define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version" + +/* + * Encoder / decoder parameters + */ +#define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +#define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +/* Currently PVK only, but reusable for others as needed */ +#define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level" +#define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters" /* integer */ + +#define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES + +/* Passphrase callback parameters */ +#define OSSL_PASSPHRASE_PARAM_INFO "info" + +/* Keygen callback parameters, from provider to libcrypto */ +#define OSSL_GEN_PARAM_POTENTIAL "potential" /* integer */ +#define OSSL_GEN_PARAM_ITERATION "iteration" /* integer */ + +/* ACVP Test parameters : These should not be used normally */ +#define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1" +#define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2" +#define OSSL_PKEY_PARAM_RSA_TEST_XP "xp" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq" +#define OSSL_PKEY_PARAM_RSA_TEST_P1 "p1" +#define OSSL_PKEY_PARAM_RSA_TEST_P2 "p2" +#define OSSL_PKEY_PARAM_RSA_TEST_Q1 "q1" +#define OSSL_PKEY_PARAM_RSA_TEST_Q2 "q2" +#define OSSL_SIGNATURE_PARAM_KAT "kat" + +/* KEM parameters */ +#define OSSL_KEM_PARAM_OPERATION "operation" + +/* OSSL_KEM_PARAM_OPERATION values */ +#define OSSL_KEM_PARAM_OPERATION_RSASVE "RSASVE" + +/* Capabilities */ + +/* TLS-GROUP Capability */ +#define OSSL_CAPABILITY_TLS_GROUP_NAME "tls-group-name" +#define OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL "tls-group-name-internal" +#define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id" +#define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg" +#define OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS "tls-group-sec-bits" +#define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem" +#define OSSL_CAPABILITY_TLS_GROUP_MIN_TLS "tls-min-tls" +#define OSSL_CAPABILITY_TLS_GROUP_MAX_TLS "tls-max-tls" +#define OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS "tls-min-dtls" +#define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls" + +/*- + * storemgmt parameters + */ + +/* + * Used by storemgmt_ctx_set_params(): + * + * - OSSL_STORE_PARAM_EXPECT is an INTEGER, and the value is any of the + * OSSL_STORE_INFO numbers. This is used to set the expected type of + * object loaded. + * + * - OSSL_STORE_PARAM_SUBJECT, OSSL_STORE_PARAM_ISSUER, + * OSSL_STORE_PARAM_SERIAL, OSSL_STORE_PARAM_FINGERPRINT, + * OSSL_STORE_PARAM_DIGEST, OSSL_STORE_PARAM_ALIAS + * are used as search criteria. + * (OSSL_STORE_PARAM_DIGEST is used with OSSL_STORE_PARAM_FINGERPRINT) + */ +#define OSSL_STORE_PARAM_EXPECT "expect" /* INTEGER */ +#define OSSL_STORE_PARAM_SUBJECT "subject" /* DER blob => OCTET_STRING */ +#define OSSL_STORE_PARAM_ISSUER "name" /* DER blob => OCTET_STRING */ +#define OSSL_STORE_PARAM_SERIAL "serial" /* INTEGER */ +#define OSSL_STORE_PARAM_DIGEST "digest" /* UTF8_STRING */ +#define OSSL_STORE_PARAM_FINGERPRINT "fingerprint" /* OCTET_STRING */ +#define OSSL_STORE_PARAM_ALIAS "alias" /* UTF8_STRING */ + +/* You may want to pass properties for the provider implementation to use */ +#define OSSL_STORE_PARAM_PROPERTIES "properties" /* utf8_string */ +/* OSSL_DECODER input type if a decoder is used by the store */ +#define OSSL_STORE_PARAM_INPUT_TYPE "input-type" /* UTF8_STRING */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_object.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_object.h new file mode 100644 index 00000000..62ccf39d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_object.h @@ -0,0 +1,41 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_OBJECT_H +# define OPENSSL_CORE_OBJECT_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Known object types + * + * These numbers are used as values for the OSSL_PARAM parameter + * OSSL_OBJECT_PARAM_TYPE. + * + * For most of these types, there's a corresponding libcrypto object type. + * The corresponding type is indicated with a comment after the number. + */ +# define OSSL_OBJECT_UNKNOWN 0 +# define OSSL_OBJECT_NAME 1 /* char * */ +# define OSSL_OBJECT_PKEY 2 /* EVP_PKEY * */ +# define OSSL_OBJECT_CERT 3 /* X509 * */ +# define OSSL_OBJECT_CRL 4 /* X509_CRL * */ + +/* + * The rest of the associated OSSL_PARAM elements is described in core_names.h + */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h new file mode 100644 index 00000000..71b747ed --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h @@ -0,0 +1,227 @@ +/*- + * WARNING: do not edit! + * Generated by Makefile from include/openssl/crmf.h.in + * + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * CRMF (RFC 4211) implementation by M. Peylo, M. Viljanen, and D. von Oheimb. + */ + + + +#ifndef OPENSSL_CRMF_H +# define OPENSSL_CRMF_H + +# include + +# ifndef OPENSSL_NO_CRMF +# include +# include +# include +# include /* for GENERAL_NAME etc. */ + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CRMF_POPOPRIVKEY_THISMESSAGE 0 +# define OSSL_CRMF_POPOPRIVKEY_SUBSEQUENTMESSAGE 1 +# define OSSL_CRMF_POPOPRIVKEY_DHMAC 2 +# define OSSL_CRMF_POPOPRIVKEY_AGREEMAC 3 +# define OSSL_CRMF_POPOPRIVKEY_ENCRYPTEDKEY 4 + +# define OSSL_CRMF_SUBSEQUENTMESSAGE_ENCRCERT 0 +# define OSSL_CRMF_SUBSEQUENTMESSAGE_CHALLENGERESP 1 + +typedef struct ossl_crmf_encryptedvalue_st OSSL_CRMF_ENCRYPTEDVALUE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDVALUE) +typedef struct ossl_crmf_msg_st OSSL_CRMF_MSG; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSG) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_MSG, OSSL_CRMF_MSG, OSSL_CRMF_MSG) +#define sk_OSSL_CRMF_MSG_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_value(sk, idx) ((OSSL_CRMF_MSG *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), (idx))) +#define sk_OSSL_CRMF_MSG_new(cmp) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp))) +#define sk_OSSL_CRMF_MSG_new_null() ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CRMF_MSG_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_MSG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (n)) +#define sk_OSSL_CRMF_MSG_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_delete(sk, i) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (i))) +#define sk_OSSL_CRMF_MSG_delete_ptr(sk, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr))) +#define sk_OSSL_CRMF_MSG_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_pop(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_shift(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk),ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_MSG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), (idx)) +#define sk_OSSL_CRMF_MSG_set(sk, idx, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (idx), ossl_check_OSSL_CRMF_MSG_type(ptr))) +#define sk_OSSL_CRMF_MSG_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), pnum) +#define sk_OSSL_CRMF_MSG_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_dup(sk) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc))) +#define sk_OSSL_CRMF_MSG_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_MSG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp))) + +typedef struct ossl_crmf_attributetypeandvalue_st OSSL_CRMF_ATTRIBUTETYPEANDVALUE; +typedef struct ossl_crmf_pbmparameter_st OSSL_CRMF_PBMPARAMETER; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PBMPARAMETER) +typedef struct ossl_crmf_poposigningkey_st OSSL_CRMF_POPOSIGNINGKEY; +typedef struct ossl_crmf_certrequest_st OSSL_CRMF_CERTREQUEST; +typedef struct ossl_crmf_certid_st OSSL_CRMF_CERTID; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTID) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_CERTID, OSSL_CRMF_CERTID, OSSL_CRMF_CERTID) +#define sk_OSSL_CRMF_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_value(sk, idx) ((OSSL_CRMF_CERTID *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), (idx))) +#define sk_OSSL_CRMF_CERTID_new(cmp) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp))) +#define sk_OSSL_CRMF_CERTID_new_null() ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CRMF_CERTID_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (n)) +#define sk_OSSL_CRMF_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_delete(sk, i) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (i))) +#define sk_OSSL_CRMF_CERTID_delete_ptr(sk, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr))) +#define sk_OSSL_CRMF_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_pop(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_shift(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk),ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), (idx)) +#define sk_OSSL_CRMF_CERTID_set(sk, idx, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (idx), ossl_check_OSSL_CRMF_CERTID_type(ptr))) +#define sk_OSSL_CRMF_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), pnum) +#define sk_OSSL_CRMF_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_dup(sk) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc))) +#define sk_OSSL_CRMF_CERTID_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp))) + + +typedef struct ossl_crmf_pkipublicationinfo_st OSSL_CRMF_PKIPUBLICATIONINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PKIPUBLICATIONINFO) +typedef struct ossl_crmf_singlepubinfo_st OSSL_CRMF_SINGLEPUBINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_SINGLEPUBINFO) +typedef struct ossl_crmf_certtemplate_st OSSL_CRMF_CERTTEMPLATE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTTEMPLATE) +typedef STACK_OF(OSSL_CRMF_MSG) OSSL_CRMF_MSGS; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSGS) + +typedef struct ossl_crmf_optionalvalidity_st OSSL_CRMF_OPTIONALVALIDITY; + +/* crmf_pbm.c */ +OSSL_CRMF_PBMPARAMETER *OSSL_CRMF_pbmp_new(OSSL_LIB_CTX *libctx, size_t slen, + int owfnid, size_t itercnt, + int macnid); +int OSSL_CRMF_pbm_new(OSSL_LIB_CTX *libctx, const char *propq, + const OSSL_CRMF_PBMPARAMETER *pbmp, + const unsigned char *msg, size_t msglen, + const unsigned char *sec, size_t seclen, + unsigned char **mac, size_t *maclen); + +/* crmf_lib.c */ +int OSSL_CRMF_MSG_set1_regCtrl_regToken(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *tok); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_regToken(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_authenticator(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *auth); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_authenticator(const OSSL_CRMF_MSG *msg); +int +OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + OSSL_CRMF_SINGLEPUBINFO *spi); +# define OSSL_CRMF_PUB_METHOD_DONTCARE 0 +# define OSSL_CRMF_PUB_METHOD_X500 1 +# define OSSL_CRMF_PUB_METHOD_WEB 2 +# define OSSL_CRMF_PUB_METHOD_LDAP 3 +int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi, + int method, GENERAL_NAME *nm); +# define OSSL_CRMF_PUB_ACTION_DONTPUBLISH 0 +# define OSSL_CRMF_PUB_ACTION_PLEASEPUBLISH 1 +int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + int action); +int OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_PKIPUBLICATIONINFO *pi); +OSSL_CRMF_PKIPUBLICATIONINFO +*OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey(OSSL_CRMF_MSG *msg, + const X509_PUBKEY *pubkey); +X509_PUBKEY +*OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_oldCertID(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTID *cid); +OSSL_CRMF_CERTID +*OSSL_CRMF_MSG_get0_regCtrl_oldCertID(const OSSL_CRMF_MSG *msg); +OSSL_CRMF_CERTID *OSSL_CRMF_CERTID_gen(const X509_NAME *issuer, + const ASN1_INTEGER *serial); + +int OSSL_CRMF_MSG_set1_regInfo_utf8Pairs(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *utf8pairs); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regInfo_utf8Pairs(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regInfo_certReq(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTREQUEST *cr); +OSSL_CRMF_CERTREQUEST +*OSSL_CRMF_MSG_get0_regInfo_certReq(const OSSL_CRMF_MSG *msg); + +int OSSL_CRMF_MSG_set0_validity(OSSL_CRMF_MSG *crm, + ASN1_TIME *notBefore, ASN1_TIME *notAfter); +int OSSL_CRMF_MSG_set_certReqId(OSSL_CRMF_MSG *crm, int rid); +int OSSL_CRMF_MSG_get_certReqId(const OSSL_CRMF_MSG *crm); +int OSSL_CRMF_MSG_set0_extensions(OSSL_CRMF_MSG *crm, X509_EXTENSIONS *exts); + +int OSSL_CRMF_MSG_push0_extension(OSSL_CRMF_MSG *crm, X509_EXTENSION *ext); +# define OSSL_CRMF_POPO_NONE -1 +# define OSSL_CRMF_POPO_RAVERIFIED 0 +# define OSSL_CRMF_POPO_SIGNATURE 1 +# define OSSL_CRMF_POPO_KEYENC 2 +# define OSSL_CRMF_POPO_KEYAGREE 3 +int OSSL_CRMF_MSG_create_popo(int meth, OSSL_CRMF_MSG *crm, + EVP_PKEY *pkey, const EVP_MD *digest, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, + int rid, int acceptRAVerified, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); +const ASN1_INTEGER +*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_subject(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_issuer(const OSSL_CRMF_CERTTEMPLATE *tmpl); +X509_EXTENSIONS +*OSSL_CRMF_CERTTEMPLATE_get0_extensions(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTID_get0_issuer(const OSSL_CRMF_CERTID *cid); +const ASN1_INTEGER +*OSSL_CRMF_CERTID_get0_serialNumber(const OSSL_CRMF_CERTID *cid); +int OSSL_CRMF_CERTTEMPLATE_fill(OSSL_CRMF_CERTTEMPLATE *tmpl, + EVP_PKEY *pubkey, + const X509_NAME *subject, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +X509 +*OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(const OSSL_CRMF_ENCRYPTEDVALUE *ecert, + OSSL_LIB_CTX *libctx, const char *propq, + EVP_PKEY *pkey); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CRMF) */ +#endif /* !defined(OPENSSL_CRMF_H) */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h.in new file mode 100644 index 00000000..4d37ea6d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h.in @@ -0,0 +1,180 @@ +/*- + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * CRMF (RFC 4211) implementation by M. Peylo, M. Viljanen, and D. von Oheimb. + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CRMF_H +# define OPENSSL_CRMF_H + +# include + +# ifndef OPENSSL_NO_CRMF +# include +# include +# include +# include /* for GENERAL_NAME etc. */ + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CRMF_POPOPRIVKEY_THISMESSAGE 0 +# define OSSL_CRMF_POPOPRIVKEY_SUBSEQUENTMESSAGE 1 +# define OSSL_CRMF_POPOPRIVKEY_DHMAC 2 +# define OSSL_CRMF_POPOPRIVKEY_AGREEMAC 3 +# define OSSL_CRMF_POPOPRIVKEY_ENCRYPTEDKEY 4 + +# define OSSL_CRMF_SUBSEQUENTMESSAGE_ENCRCERT 0 +# define OSSL_CRMF_SUBSEQUENTMESSAGE_CHALLENGERESP 1 + +typedef struct ossl_crmf_encryptedvalue_st OSSL_CRMF_ENCRYPTEDVALUE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDVALUE) +typedef struct ossl_crmf_msg_st OSSL_CRMF_MSG; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSG) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG) +{- + generate_stack_macros("OSSL_CRMF_MSG"); +-} +typedef struct ossl_crmf_attributetypeandvalue_st OSSL_CRMF_ATTRIBUTETYPEANDVALUE; +typedef struct ossl_crmf_pbmparameter_st OSSL_CRMF_PBMPARAMETER; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PBMPARAMETER) +typedef struct ossl_crmf_poposigningkey_st OSSL_CRMF_POPOSIGNINGKEY; +typedef struct ossl_crmf_certrequest_st OSSL_CRMF_CERTREQUEST; +typedef struct ossl_crmf_certid_st OSSL_CRMF_CERTID; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTID) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID) +{- + generate_stack_macros("OSSL_CRMF_CERTID"); +-} + +typedef struct ossl_crmf_pkipublicationinfo_st OSSL_CRMF_PKIPUBLICATIONINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PKIPUBLICATIONINFO) +typedef struct ossl_crmf_singlepubinfo_st OSSL_CRMF_SINGLEPUBINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_SINGLEPUBINFO) +typedef struct ossl_crmf_certtemplate_st OSSL_CRMF_CERTTEMPLATE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTTEMPLATE) +typedef STACK_OF(OSSL_CRMF_MSG) OSSL_CRMF_MSGS; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSGS) + +typedef struct ossl_crmf_optionalvalidity_st OSSL_CRMF_OPTIONALVALIDITY; + +/* crmf_pbm.c */ +OSSL_CRMF_PBMPARAMETER *OSSL_CRMF_pbmp_new(OSSL_LIB_CTX *libctx, size_t slen, + int owfnid, size_t itercnt, + int macnid); +int OSSL_CRMF_pbm_new(OSSL_LIB_CTX *libctx, const char *propq, + const OSSL_CRMF_PBMPARAMETER *pbmp, + const unsigned char *msg, size_t msglen, + const unsigned char *sec, size_t seclen, + unsigned char **mac, size_t *maclen); + +/* crmf_lib.c */ +int OSSL_CRMF_MSG_set1_regCtrl_regToken(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *tok); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_regToken(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_authenticator(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *auth); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_authenticator(const OSSL_CRMF_MSG *msg); +int +OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + OSSL_CRMF_SINGLEPUBINFO *spi); +# define OSSL_CRMF_PUB_METHOD_DONTCARE 0 +# define OSSL_CRMF_PUB_METHOD_X500 1 +# define OSSL_CRMF_PUB_METHOD_WEB 2 +# define OSSL_CRMF_PUB_METHOD_LDAP 3 +int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi, + int method, GENERAL_NAME *nm); +# define OSSL_CRMF_PUB_ACTION_DONTPUBLISH 0 +# define OSSL_CRMF_PUB_ACTION_PLEASEPUBLISH 1 +int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + int action); +int OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_PKIPUBLICATIONINFO *pi); +OSSL_CRMF_PKIPUBLICATIONINFO +*OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey(OSSL_CRMF_MSG *msg, + const X509_PUBKEY *pubkey); +X509_PUBKEY +*OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_oldCertID(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTID *cid); +OSSL_CRMF_CERTID +*OSSL_CRMF_MSG_get0_regCtrl_oldCertID(const OSSL_CRMF_MSG *msg); +OSSL_CRMF_CERTID *OSSL_CRMF_CERTID_gen(const X509_NAME *issuer, + const ASN1_INTEGER *serial); + +int OSSL_CRMF_MSG_set1_regInfo_utf8Pairs(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *utf8pairs); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regInfo_utf8Pairs(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regInfo_certReq(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTREQUEST *cr); +OSSL_CRMF_CERTREQUEST +*OSSL_CRMF_MSG_get0_regInfo_certReq(const OSSL_CRMF_MSG *msg); + +int OSSL_CRMF_MSG_set0_validity(OSSL_CRMF_MSG *crm, + ASN1_TIME *notBefore, ASN1_TIME *notAfter); +int OSSL_CRMF_MSG_set_certReqId(OSSL_CRMF_MSG *crm, int rid); +int OSSL_CRMF_MSG_get_certReqId(const OSSL_CRMF_MSG *crm); +int OSSL_CRMF_MSG_set0_extensions(OSSL_CRMF_MSG *crm, X509_EXTENSIONS *exts); + +int OSSL_CRMF_MSG_push0_extension(OSSL_CRMF_MSG *crm, X509_EXTENSION *ext); +# define OSSL_CRMF_POPO_NONE -1 +# define OSSL_CRMF_POPO_RAVERIFIED 0 +# define OSSL_CRMF_POPO_SIGNATURE 1 +# define OSSL_CRMF_POPO_KEYENC 2 +# define OSSL_CRMF_POPO_KEYAGREE 3 +int OSSL_CRMF_MSG_create_popo(int meth, OSSL_CRMF_MSG *crm, + EVP_PKEY *pkey, const EVP_MD *digest, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, + int rid, int acceptRAVerified, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); +const ASN1_INTEGER +*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_subject(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_issuer(const OSSL_CRMF_CERTTEMPLATE *tmpl); +X509_EXTENSIONS +*OSSL_CRMF_CERTTEMPLATE_get0_extensions(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTID_get0_issuer(const OSSL_CRMF_CERTID *cid); +const ASN1_INTEGER +*OSSL_CRMF_CERTID_get0_serialNumber(const OSSL_CRMF_CERTID *cid); +int OSSL_CRMF_CERTTEMPLATE_fill(OSSL_CRMF_CERTTEMPLATE *tmpl, + EVP_PKEY *pubkey, + const X509_NAME *subject, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +X509 +*OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(const OSSL_CRMF_ENCRYPTEDVALUE *ecert, + OSSL_LIB_CTX *libctx, const char *propq, + EVP_PKEY *pkey); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CRMF) */ +#endif /* !defined(OPENSSL_CRMF_H) */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmferr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmferr.h new file mode 100644 index 00000000..b242b922 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmferr.h @@ -0,0 +1,50 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CRMFERR_H +# define OPENSSL_CRMFERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CRMF + + +/* + * CRMF reason codes. + */ +# define CRMF_R_BAD_PBM_ITERATIONCOUNT 100 +# define CRMF_R_CRMFERROR 102 +# define CRMF_R_ERROR 103 +# define CRMF_R_ERROR_DECODING_CERTIFICATE 104 +# define CRMF_R_ERROR_DECRYPTING_CERTIFICATE 105 +# define CRMF_R_ERROR_DECRYPTING_SYMMETRIC_KEY 106 +# define CRMF_R_FAILURE_OBTAINING_RANDOM 107 +# define CRMF_R_ITERATIONCOUNT_BELOW_100 108 +# define CRMF_R_MALFORMED_IV 101 +# define CRMF_R_NULL_ARGUMENT 109 +# define CRMF_R_POPOSKINPUT_NOT_SUPPORTED 113 +# define CRMF_R_POPO_INCONSISTENT_PUBLIC_KEY 117 +# define CRMF_R_POPO_MISSING 121 +# define CRMF_R_POPO_MISSING_PUBLIC_KEY 118 +# define CRMF_R_POPO_MISSING_SUBJECT 119 +# define CRMF_R_POPO_RAVERIFIED_NOT_ACCEPTED 120 +# define CRMF_R_SETTING_MAC_ALGOR_FAILURE 110 +# define CRMF_R_SETTING_OWF_ALGOR_FAILURE 111 +# define CRMF_R_UNSUPPORTED_ALGORITHM 112 +# define CRMF_R_UNSUPPORTED_CIPHER 114 +# define CRMF_R_UNSUPPORTED_METHOD_FOR_CREATING_POPO 115 +# define CRMF_R_UNSUPPORTED_POPO_METHOD 116 + +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h index 7d0b5262..ab01aae8 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h @@ -1,15 +1,26 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/crypto.h.in + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CRYPTO_H -# define HEADER_CRYPTO_H + + +#ifndef OPENSSL_CRYPTO_H +# define OPENSSL_CRYPTO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CRYPTO_H +# endif # include # include @@ -22,9 +33,10 @@ # include # include -# include +# include # include # include +# include # ifdef CHARSET_EBCDIC # include @@ -36,7 +48,7 @@ */ # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif @@ -44,7 +56,7 @@ extern "C" { #endif -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSLeay OpenSSL_version_num # define SSLeay_version OpenSSL_version # define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER @@ -62,58 +74,24 @@ typedef struct { int dummy; } CRYPTO_dynlock; -# endif /* OPENSSL_API_COMPAT */ +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ typedef void CRYPTO_RWLOCK; CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); -int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); -int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); - -/* - * The following can be used to detect memory leaks in the library. If - * used, it turns on malloc checking - */ -# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ -# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ - -struct crypto_ex_data_st { - STACK_OF(void) *sk; -}; -DEFINE_STACK_OF(void) - -/* - * Per class, we have a STACK of function pointers. - */ -# define CRYPTO_EX_INDEX_SSL 0 -# define CRYPTO_EX_INDEX_SSL_CTX 1 -# define CRYPTO_EX_INDEX_SSL_SESSION 2 -# define CRYPTO_EX_INDEX_X509 3 -# define CRYPTO_EX_INDEX_X509_STORE 4 -# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 -# define CRYPTO_EX_INDEX_DH 6 -# define CRYPTO_EX_INDEX_DSA 7 -# define CRYPTO_EX_INDEX_EC_KEY 8 -# define CRYPTO_EX_INDEX_RSA 9 -# define CRYPTO_EX_INDEX_ENGINE 10 -# define CRYPTO_EX_INDEX_UI 11 -# define CRYPTO_EX_INDEX_BIO 12 -# define CRYPTO_EX_INDEX_APP 13 -# define CRYPTO_EX_INDEX_UI_METHOD 14 -# define CRYPTO_EX_INDEX_DRBG 15 -# define CRYPTO_EX_INDEX__COUNT 16 +int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); /* No longer needed, so this is a no-op */ #define OPENSSL_malloc_init() while(0) continue -int CRYPTO_mem_ctrl(int mode); - # define OPENSSL_malloc(num) \ CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) # define OPENSSL_zalloc(num) \ @@ -146,32 +124,127 @@ int CRYPTO_mem_ctrl(int mode); size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); size_t OPENSSL_strnlen(const char *str, size_t maxlen); -char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); -unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); +int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength, + const unsigned char *buf, size_t buflen, + const char sep); +char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen); +int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, size_t *buflen, + const char *str, const char sep); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *buflen); int OPENSSL_hexchar2int(unsigned char c); +int OPENSSL_strcasecmp(const char *s1, const char *s2); +int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n); # define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) +/* + * These functions return the values of OPENSSL_VERSION_MAJOR, + * OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, OPENSSL_VERSION_PRE_RELEASE + * and OPENSSL_VERSION_BUILD_METADATA, respectively. + */ +unsigned int OPENSSL_version_major(void); +unsigned int OPENSSL_version_minor(void); +unsigned int OPENSSL_version_patch(void); +const char *OPENSSL_version_pre_release(void); +const char *OPENSSL_version_build_metadata(void); + unsigned long OpenSSL_version_num(void); const char *OpenSSL_version(int type); -# define OPENSSL_VERSION 0 -# define OPENSSL_CFLAGS 1 -# define OPENSSL_BUILT_ON 2 -# define OPENSSL_PLATFORM 3 -# define OPENSSL_DIR 4 -# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION_STRING 6 +# define OPENSSL_FULL_VERSION_STRING 7 +# define OPENSSL_MODULES_DIR 8 +# define OPENSSL_CPU_INFO 9 + +const char *OPENSSL_info(int type); +/* + * The series starts at 1001 to avoid confusion with the OpenSSL_version + * types. + */ +# define OPENSSL_INFO_CONFIG_DIR 1001 +# define OPENSSL_INFO_ENGINES_DIR 1002 +# define OPENSSL_INFO_MODULES_DIR 1003 +# define OPENSSL_INFO_DSO_EXTENSION 1004 +# define OPENSSL_INFO_DIR_FILENAME_SEPARATOR 1005 +# define OPENSSL_INFO_LIST_SEPARATOR 1006 +# define OPENSSL_INFO_SEED_SOURCE 1007 +# define OPENSSL_INFO_CPU_SETTINGS 1008 int OPENSSL_issetugid(void); +struct crypto_ex_data_st { + OSSL_LIB_CTX *ctx; + STACK_OF(void) *sk; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(void, void, void) +#define sk_void_num(sk) OPENSSL_sk_num(ossl_check_const_void_sk_type(sk)) +#define sk_void_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_void_sk_type(sk), (idx))) +#define sk_void_new(cmp) ((STACK_OF(void) *)OPENSSL_sk_new(ossl_check_void_compfunc_type(cmp))) +#define sk_void_new_null() ((STACK_OF(void) *)OPENSSL_sk_new_null()) +#define sk_void_new_reserve(cmp, n) ((STACK_OF(void) *)OPENSSL_sk_new_reserve(ossl_check_void_compfunc_type(cmp), (n))) +#define sk_void_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_void_sk_type(sk), (n)) +#define sk_void_free(sk) OPENSSL_sk_free(ossl_check_void_sk_type(sk)) +#define sk_void_zero(sk) OPENSSL_sk_zero(ossl_check_void_sk_type(sk)) +#define sk_void_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_void_sk_type(sk), (i))) +#define sk_void_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr))) +#define sk_void_push(sk, ptr) OPENSSL_sk_push(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_void_sk_type(sk))) +#define sk_void_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_void_sk_type(sk))) +#define sk_void_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_void_sk_type(sk),ossl_check_void_freefunc_type(freefunc)) +#define sk_void_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), (idx)) +#define sk_void_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_void_sk_type(sk), (idx), ossl_check_void_type(ptr))) +#define sk_void_find(sk, ptr) OPENSSL_sk_find(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), pnum) +#define sk_void_sort(sk) OPENSSL_sk_sort(ossl_check_void_sk_type(sk)) +#define sk_void_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_void_sk_type(sk)) +#define sk_void_dup(sk) ((STACK_OF(void) *)OPENSSL_sk_dup(ossl_check_const_void_sk_type(sk))) +#define sk_void_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(void) *)OPENSSL_sk_deep_copy(ossl_check_const_void_sk_type(sk), ossl_check_void_copyfunc_type(copyfunc), ossl_check_void_freefunc_type(freefunc))) +#define sk_void_set_cmp_func(sk, cmp) ((sk_void_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_void_sk_type(sk), ossl_check_void_compfunc_type(cmp))) + + + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX_UI_METHOD 14 +# define CRYPTO_EX_INDEX_RAND_DRBG 15 +# define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG +# define CRYPTO_EX_INDEX_OSSL_LIB_CTX 16 +# define CRYPTO_EX_INDEX_EVP_PKEY 17 +# define CRYPTO_EX_INDEX__COUNT 18 + typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, - void *from_d, int idx, long argl, void *argp); + void **from_d, int idx, long argl, void *argp); __owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, - CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); /* No longer use an index. */ int CRYPTO_free_ex_index(int class_index, int idx); @@ -185,6 +258,10 @@ int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +/* Allocate a single item in the CRYPTO_EX_DATA variable */ +int CRYPTO_alloc_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad, + int idx); + /* * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular * index (relative to the class type involved) @@ -192,7 +269,7 @@ void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * This function cleans up all "ex_data" state. It mustn't be called under * potential race-conditions. @@ -239,11 +316,11 @@ typedef struct crypto_threadid_st { # define CRYPTO_THREADID_cpy(dest, src) # define CRYPTO_THREADID_hash(id) (0UL) -# if OPENSSL_API_COMPAT < 0x10000000L +# ifndef OPENSSL_NO_DEPRECATED_1_0_0 # define CRYPTO_set_id_callback(func) # define CRYPTO_get_id_callback() (NULL) # define CRYPTO_thread_id() (0UL) -# endif /* OPENSSL_API_COMPAT < 0x10000000L */ +# endif /* OPENSSL_NO_DEPRECATED_1_0_0 */ # define CRYPTO_set_dynlock_create_callback(dyn_create_function) # define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) @@ -251,33 +328,34 @@ typedef struct crypto_threadid_st { # define CRYPTO_get_dynlock_create_callback() (NULL) # define CRYPTO_get_dynlock_lock_callback() (NULL) # define CRYPTO_get_dynlock_destroy_callback() (NULL) -# endif /* OPENSSL_API_COMPAT < 0x10100000L */ +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ -int CRYPTO_set_mem_functions( - void *(*m) (size_t, const char *, int), - void *(*r) (void *, size_t, const char *, int), - void (*f) (void *, const char *, int)); -int CRYPTO_set_mem_debug(int flag); -void CRYPTO_get_mem_functions( - void *(**m) (size_t, const char *, int), - void *(**r) (void *, size_t, const char *, int), - void (**f) (void *, const char *, int)); +typedef void *(*CRYPTO_malloc_fn)(size_t num, const char *file, int line); +typedef void *(*CRYPTO_realloc_fn)(void *addr, size_t num, const char *file, + int line); +typedef void (*CRYPTO_free_fn)(void *addr, const char *file, int line); +int CRYPTO_set_mem_functions(CRYPTO_malloc_fn malloc_fn, + CRYPTO_realloc_fn realloc_fn, + CRYPTO_free_fn free_fn); +void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn, + CRYPTO_realloc_fn *realloc_fn, + CRYPTO_free_fn *free_fn); -void *CRYPTO_malloc(size_t num, const char *file, int line); -void *CRYPTO_zalloc(size_t num, const char *file, int line); -void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); -char *CRYPTO_strdup(const char *str, const char *file, int line); -char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strdup(const char *str, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); void CRYPTO_free(void *ptr, const char *file, int line); void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, const char *file, int line); -int CRYPTO_secure_malloc_init(size_t sz, int minsize); +int CRYPTO_secure_malloc_init(size_t sz, size_t minsize); int CRYPTO_secure_malloc_done(void); -void *CRYPTO_secure_malloc(size_t num, const char *file, int line); -void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); void CRYPTO_secure_free(void *ptr, const char *file, int line); void CRYPTO_secure_clear_free(void *ptr, size_t num, const char *file, int line); @@ -289,38 +367,53 @@ size_t CRYPTO_secure_used(void); void OPENSSL_cleanse(void *ptr, size_t len); # ifndef OPENSSL_NO_CRYPTO_MDEBUG -# define OPENSSL_mem_debug_push(info) \ - CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_mem_debug_pop() \ - CRYPTO_mem_debug_pop() -int CRYPTO_mem_debug_push(const char *info, const char *file, int line); -int CRYPTO_mem_debug_pop(void); -void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); - -/*- - * Debugging functions (enabled by CRYPTO_set_mem_debug(1)) - * The flag argument has the following significance: - * 0: called before the actual memory allocation has taken place - * 1: called after the actual memory allocation has taken place +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking */ -void CRYPTO_mem_debug_malloc(void *addr, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_free(void *addr, int flag, - const char *file, int line); +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ -int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u), - void *u); -# ifndef OPENSSL_NO_STDIO -int CRYPTO_mem_leaks_fp(FILE *); +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() # endif -int CRYPTO_mem_leaks(BIO *bio); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_set_mem_debug(int flag); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_ctrl(int mode); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_push(const char *info, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_pop(void); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_malloc(void *addr, size_t num, + int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, + size_t num, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 +int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), + void *u); +# endif +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks_fp(FILE *); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks(BIO *bio); # endif +# endif /* OPENSSL_NO_CRYPTO_MDEBUG */ /* die if we have to */ ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) # endif # define OPENSSL_assert(e) \ @@ -328,14 +421,13 @@ ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line int OPENSSL_isservice(void); -int FIPS_mode(void); -int FIPS_mode_set(int r); - void OPENSSL_init(void); # ifdef OPENSSL_SYS_UNIX -void OPENSSL_fork_prepare(void); -void OPENSSL_fork_parent(void); -void OPENSSL_fork_child(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_prepare(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_parent(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_child(void); +# endif # endif struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); @@ -369,11 +461,17 @@ int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); # define OPENSSL_INIT_ENGINE_CAPI 0x00002000L # define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L # define OPENSSL_INIT_ENGINE_AFALG 0x00008000L -/* OPENSSL_INIT_ZLIB 0x00010000L */ +/* FREE: 0x00010000L */ # define OPENSSL_INIT_ATFORK 0x00020000L /* OPENSSL_INIT_BASE_ONLY 0x00040000L */ # define OPENSSL_INIT_NO_ATEXIT 0x00080000L -/* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */ +/* OPENSSL_INIT flag range 0x03f00000 reserved for OPENSSL_init_ssl() */ +/* FREE: 0x04000000L */ +/* FREE: 0x08000000L */ +/* FREE: 0x10000000L */ +/* FREE: 0x20000000L */ +/* FREE: 0x40000000L */ +/* FREE: 0x80000000L */ /* Max OPENSSL_INIT flag value is 0x80000000 */ /* openssl and dasync not counted as builtin */ @@ -382,12 +480,12 @@ int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ OPENSSL_INIT_ENGINE_PADLOCK) - /* Library initialisation functions */ void OPENSSL_cleanup(void); int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); int OPENSSL_atexit(void (*handler)(void)); void OPENSSL_thread_stop(void); +void OPENSSL_thread_stop_ex(OSSL_LIB_CTX *ctx); /* Low-level control of initialization */ OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); @@ -412,7 +510,13 @@ typedef LONG CRYPTO_ONCE; # define CRYPTO_ONCE_STATIC_INIT 0 # endif # else -# include +# if defined(__TANDEM) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# else +# include +# endif typedef pthread_once_t CRYPTO_ONCE; typedef pthread_key_t CRYPTO_THREAD_LOCAL; typedef pthread_t CRYPTO_THREAD_ID; @@ -438,6 +542,15 @@ int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); +OSSL_LIB_CTX *OSSL_LIB_CTX_new(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_from_dispatch(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_child(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file); +void OSSL_LIB_CTX_free(OSSL_LIB_CTX *); +OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx); # ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h.in new file mode 100644 index 00000000..fb0c7cbb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h.in @@ -0,0 +1,535 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CRYPTO_H +# define OPENSSL_CRYPTO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CRYPTO_H +# endif + +# include +# include + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif + +# include +# include +# include +# include +# include +# include + +# ifdef CHARSET_EBCDIC +# include +# endif + +/* + * Resolve problems on some operating systems with symbol names that clash + * one way or another + */ +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSLeay OpenSSL_version_num +# define SSLeay_version OpenSSL_version +# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER +# define SSLEAY_VERSION OPENSSL_VERSION +# define SSLEAY_CFLAGS OPENSSL_CFLAGS +# define SSLEAY_BUILT_ON OPENSSL_BUILT_ON +# define SSLEAY_PLATFORM OPENSSL_PLATFORM +# define SSLEAY_DIR OPENSSL_DIR + +/* + * Old type for allocating dynamic locks. No longer used. Use the new thread + * API instead. + */ +typedef struct { + int dummy; +} CRYPTO_dynlock; + +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ + +typedef void CRYPTO_RWLOCK; + +CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); +__owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); +void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); + +int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); + +/* No longer needed, so this is a no-op */ +#define OPENSSL_malloc_init() while(0) continue + +# define OPENSSL_malloc(num) \ + CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_zalloc(num) \ + CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_realloc(addr, num) \ + CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_realloc(addr, old_num, num) \ + CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_free(addr, num) \ + CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_free(addr) \ + CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_memdup(str, s) \ + CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strdup(str) \ + CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strndup(str, n) \ + CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_malloc(num) \ + CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_zalloc(num) \ + CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_free(addr) \ + CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_clear_free(addr, num) \ + CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_actual_size(ptr) \ + CRYPTO_secure_actual_size(ptr) + +size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); +size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); +size_t OPENSSL_strnlen(const char *str, size_t maxlen); +int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength, + const unsigned char *buf, size_t buflen, + const char sep); +char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen); +int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, size_t *buflen, + const char *str, const char sep); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *buflen); +int OPENSSL_hexchar2int(unsigned char c); +int OPENSSL_strcasecmp(const char *s1, const char *s2); +int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n); + +# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) + +/* + * These functions return the values of OPENSSL_VERSION_MAJOR, + * OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, OPENSSL_VERSION_PRE_RELEASE + * and OPENSSL_VERSION_BUILD_METADATA, respectively. + */ +unsigned int OPENSSL_version_major(void); +unsigned int OPENSSL_version_minor(void); +unsigned int OPENSSL_version_patch(void); +const char *OPENSSL_version_pre_release(void); +const char *OPENSSL_version_build_metadata(void); + +unsigned long OpenSSL_version_num(void); +const char *OpenSSL_version(int type); +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION_STRING 6 +# define OPENSSL_FULL_VERSION_STRING 7 +# define OPENSSL_MODULES_DIR 8 +# define OPENSSL_CPU_INFO 9 + +const char *OPENSSL_info(int type); +/* + * The series starts at 1001 to avoid confusion with the OpenSSL_version + * types. + */ +# define OPENSSL_INFO_CONFIG_DIR 1001 +# define OPENSSL_INFO_ENGINES_DIR 1002 +# define OPENSSL_INFO_MODULES_DIR 1003 +# define OPENSSL_INFO_DSO_EXTENSION 1004 +# define OPENSSL_INFO_DIR_FILENAME_SEPARATOR 1005 +# define OPENSSL_INFO_LIST_SEPARATOR 1006 +# define OPENSSL_INFO_SEED_SOURCE 1007 +# define OPENSSL_INFO_CPU_SETTINGS 1008 + +int OPENSSL_issetugid(void); + +struct crypto_ex_data_st { + OSSL_LIB_CTX *ctx; + STACK_OF(void) *sk; +}; + +{- + generate_stack_macros("void"); +-} + + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX_UI_METHOD 14 +# define CRYPTO_EX_INDEX_RAND_DRBG 15 +# define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG +# define CRYPTO_EX_INDEX_OSSL_LIB_CTX 16 +# define CRYPTO_EX_INDEX_EVP_PKEY 17 +# define CRYPTO_EX_INDEX__COUNT 18 + +typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, + void **from_d, int idx, long argl, void *argp); +__owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +/* No longer use an index. */ +int CRYPTO_free_ex_index(int class_index, int idx); + +/* + * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a + * given class (invokes whatever per-class callbacks are applicable) + */ +int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, + const CRYPTO_EX_DATA *from); + +void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); + +/* Allocate a single item in the CRYPTO_EX_DATA variable */ +int CRYPTO_alloc_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad, + int idx); + +/* + * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular + * index (relative to the class type involved) + */ +int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); +void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * This function cleans up all "ex_data" state. It mustn't be called under + * potential race-conditions. + */ +# define CRYPTO_cleanup_all_ex_data() while(0) continue + +/* + * The old locking functions have been removed completely without compatibility + * macros. This is because the old functions either could not properly report + * errors, or the returned error values were not clearly documented. + * Replacing the locking functions with no-ops would cause race condition + * issues in the affected applications. It is far better for them to fail at + * compile time. + * On the other hand, the locking callbacks are no longer used. Consequently, + * the callback management functions can be safely replaced with no-op macros. + */ +# define CRYPTO_num_locks() (1) +# define CRYPTO_set_locking_callback(func) +# define CRYPTO_get_locking_callback() (NULL) +# define CRYPTO_set_add_lock_callback(func) +# define CRYPTO_get_add_lock_callback() (NULL) + +/* + * These defines where used in combination with the old locking callbacks, + * they are not called anymore, but old code that's not called might still + * use them. + */ +# define CRYPTO_LOCK 1 +# define CRYPTO_UNLOCK 2 +# define CRYPTO_READ 4 +# define CRYPTO_WRITE 8 + +/* This structure is no longer used */ +typedef struct crypto_threadid_st { + int dummy; +} CRYPTO_THREADID; +/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ +# define CRYPTO_THREADID_set_numeric(id, val) +# define CRYPTO_THREADID_set_pointer(id, ptr) +# define CRYPTO_THREADID_set_callback(threadid_func) (0) +# define CRYPTO_THREADID_get_callback() (NULL) +# define CRYPTO_THREADID_current(id) +# define CRYPTO_THREADID_cmp(a, b) (-1) +# define CRYPTO_THREADID_cpy(dest, src) +# define CRYPTO_THREADID_hash(id) (0UL) + +# ifndef OPENSSL_NO_DEPRECATED_1_0_0 +# define CRYPTO_set_id_callback(func) +# define CRYPTO_get_id_callback() (NULL) +# define CRYPTO_thread_id() (0UL) +# endif /* OPENSSL_NO_DEPRECATED_1_0_0 */ + +# define CRYPTO_set_dynlock_create_callback(dyn_create_function) +# define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) +# define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function) +# define CRYPTO_get_dynlock_create_callback() (NULL) +# define CRYPTO_get_dynlock_lock_callback() (NULL) +# define CRYPTO_get_dynlock_destroy_callback() (NULL) +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ + +typedef void *(*CRYPTO_malloc_fn)(size_t num, const char *file, int line); +typedef void *(*CRYPTO_realloc_fn)(void *addr, size_t num, const char *file, + int line); +typedef void (*CRYPTO_free_fn)(void *addr, const char *file, int line); +int CRYPTO_set_mem_functions(CRYPTO_malloc_fn malloc_fn, + CRYPTO_realloc_fn realloc_fn, + CRYPTO_free_fn free_fn); +void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn, + CRYPTO_realloc_fn *realloc_fn, + CRYPTO_free_fn *free_fn); + +OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strdup(const char *str, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +void CRYPTO_free(void *ptr, const char *file, int line); +void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); +void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); +void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, + const char *file, int line); + +int CRYPTO_secure_malloc_init(size_t sz, size_t minsize); +int CRYPTO_secure_malloc_done(void); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +void CRYPTO_secure_free(void *ptr, const char *file, int line); +void CRYPTO_secure_clear_free(void *ptr, size_t num, + const char *file, int line); +int CRYPTO_secure_allocated(const void *ptr); +int CRYPTO_secure_malloc_initialized(void); +size_t CRYPTO_secure_actual_size(void *ptr); +size_t CRYPTO_secure_used(void); + +void OPENSSL_cleanse(void *ptr, size_t len); + +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking + */ +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ + +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_set_mem_debug(int flag); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_ctrl(int mode); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_push(const char *info, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_pop(void); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_malloc(void *addr, size_t num, + int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, + size_t num, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 +int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), + void *u); +# endif +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks_fp(FILE *); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks(BIO *bio); +# endif +# endif /* OPENSSL_NO_CRYPTO_MDEBUG */ + +/* die if we have to */ +ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) +# endif +# define OPENSSL_assert(e) \ + (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1)) + +int OPENSSL_isservice(void); + +void OPENSSL_init(void); +# ifdef OPENSSL_SYS_UNIX +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_prepare(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_parent(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_child(void); +# endif +# endif + +struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); +int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec); +int OPENSSL_gmtime_diff(int *pday, int *psec, + const struct tm *from, const struct tm *to); + +/* + * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. + * It takes an amount of time dependent on |len|, but independent of the + * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements + * into a defined order as the return value when a != b is undefined, other + * than to be non-zero. + */ +int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); + +/* Standard initialisation options */ +# define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L +# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L +# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L +# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L +# define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L +# define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L +# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L +# define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L +# define OPENSSL_INIT_ASYNC 0x00000100L +# define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L +# define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L +# define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L +# define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L +# define OPENSSL_INIT_ENGINE_CAPI 0x00002000L +# define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L +# define OPENSSL_INIT_ENGINE_AFALG 0x00008000L +/* FREE: 0x00010000L */ +# define OPENSSL_INIT_ATFORK 0x00020000L +/* OPENSSL_INIT_BASE_ONLY 0x00040000L */ +# define OPENSSL_INIT_NO_ATEXIT 0x00080000L +/* OPENSSL_INIT flag range 0x03f00000 reserved for OPENSSL_init_ssl() */ +/* FREE: 0x04000000L */ +/* FREE: 0x08000000L */ +/* FREE: 0x10000000L */ +/* FREE: 0x20000000L */ +/* FREE: 0x40000000L */ +/* FREE: 0x80000000L */ +/* Max OPENSSL_INIT flag value is 0x80000000 */ + +/* openssl and dasync not counted as builtin */ +# define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ + (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ + | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ + OPENSSL_INIT_ENGINE_PADLOCK) + +/* Library initialisation functions */ +void OPENSSL_cleanup(void); +int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +int OPENSSL_atexit(void (*handler)(void)); +void OPENSSL_thread_stop(void); +void OPENSSL_thread_stop_ex(OSSL_LIB_CTX *ctx); + +/* Low-level control of initialization */ +OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); +# ifndef OPENSSL_NO_STDIO +int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings, + const char *config_filename); +void OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *settings, + unsigned long flags); +int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, + const char *config_appname); +# endif +void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings); + +# if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) +# if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include in order to use this */ +typedef DWORD CRYPTO_THREAD_LOCAL; +typedef DWORD CRYPTO_THREAD_ID; + +typedef LONG CRYPTO_ONCE; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif +# else +# if defined(__TANDEM) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# else +# include +# endif +typedef pthread_once_t CRYPTO_ONCE; +typedef pthread_key_t CRYPTO_THREAD_LOCAL; +typedef pthread_t CRYPTO_THREAD_ID; + +# define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT +# endif +# endif + +# if !defined(CRYPTO_ONCE_STATIC_INIT) +typedef unsigned int CRYPTO_ONCE; +typedef unsigned int CRYPTO_THREAD_LOCAL; +typedef unsigned int CRYPTO_THREAD_ID; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif + +int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); + +int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)); +void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key); +int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val); +int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); + +CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); +int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); + +OSSL_LIB_CTX *OSSL_LIB_CTX_new(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_from_dispatch(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_child(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file); +void OSSL_LIB_CTX_free(OSSL_LIB_CTX *); +OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr.h index 3db5a4ee..e84b12df 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr.h @@ -1,57 +1,55 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CRYPTOERR_H -# define HEADER_CRYPTOERR_H +#ifndef OPENSSL_CRYPTOERR_H +# define OPENSSL_CRYPTOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CRYPTO_strings(void); -/* - * CRYPTO function codes. - */ -# define CRYPTO_F_CMAC_CTX_NEW 120 -# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 -# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 -# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 -# define CRYPTO_F_CRYPTO_MEMDUP 115 -# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 -# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 121 -# define CRYPTO_F_CRYPTO_OCB128_INIT 122 -# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 -# define CRYPTO_F_FIPS_MODE_SET 109 -# define CRYPTO_F_GET_AND_LOCK 113 -# define CRYPTO_F_OPENSSL_ATEXIT 114 -# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 -# define CRYPTO_F_OPENSSL_FOPEN 119 -# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 -# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 -# define CRYPTO_F_OPENSSL_LH_NEW 126 -# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 127 -# define CRYPTO_F_OPENSSL_SK_DUP 128 -# define CRYPTO_F_PKEY_HMAC_INIT 123 -# define CRYPTO_F_PKEY_POLY1305_INIT 124 -# define CRYPTO_F_PKEY_SIPHASH_INIT 125 -# define CRYPTO_F_SK_RESERVE 129 /* * CRYPTO reason codes. */ -# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 +# define CRYPTO_R_BAD_ALGORITHM_NAME 117 +# define CRYPTO_R_CONFLICTING_NAMES 118 +# define CRYPTO_R_HEX_STRING_TOO_SHORT 121 # define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 +# define CRYPTO_R_INSUFFICIENT_DATA_SPACE 106 +# define CRYPTO_R_INSUFFICIENT_PARAM_SIZE 107 +# define CRYPTO_R_INSUFFICIENT_SECURE_DATA_SPACE 108 +# define CRYPTO_R_INTEGER_OVERFLOW 127 +# define CRYPTO_R_INVALID_NEGATIVE_VALUE 122 +# define CRYPTO_R_INVALID_NULL_ARGUMENT 109 +# define CRYPTO_R_INVALID_OSSL_PARAM_TYPE 110 +# define CRYPTO_R_NO_PARAMS_TO_MERGE 131 +# define CRYPTO_R_NO_SPACE_FOR_TERMINATING_NULL 128 # define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 +# define CRYPTO_R_PARAM_CANNOT_BE_REPRESENTED_EXACTLY 123 +# define CRYPTO_R_PARAM_NOT_INTEGER_TYPE 124 +# define CRYPTO_R_PARAM_OF_INCOMPATIBLE_TYPE 129 +# define CRYPTO_R_PARAM_UNSIGNED_INTEGER_NEGATIVE_VALUE_UNSUPPORTED 125 +# define CRYPTO_R_PARAM_UNSUPPORTED_FLOATING_POINT_FORMAT 130 +# define CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION 126 +# define CRYPTO_R_PROVIDER_ALREADY_EXISTS 104 +# define CRYPTO_R_PROVIDER_SECTION_ERROR 105 +# define CRYPTO_R_RANDOM_SECTION_ERROR 119 +# define CRYPTO_R_SECURE_MALLOC_FAILURE 111 +# define CRYPTO_R_STRING_TOO_LONG 112 +# define CRYPTO_R_TOO_MANY_BYTES 113 +# define CRYPTO_R_TOO_MANY_RECORDS 114 +# define CRYPTO_R_TOO_SMALL_BUFFER 116 +# define CRYPTO_R_UNKNOWN_NAME_IN_RANDOM_SECTION 120 +# define CRYPTO_R_ZERO_LENGTH_NUMBER 115 #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr_legacy.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr_legacy.h new file mode 100644 index 00000000..ccab33a5 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr_legacy.h @@ -0,0 +1,1466 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file preserves symbols from pre-3.0 OpenSSL. + * It should never be included directly, as it's already included + * by the public {lib}err.h headers, and since it will go away some + * time in the future. + */ + +#ifndef OPENSSL_CRYPTOERR_LEGACY_H +# define OPENSSL_CRYPTOERR_LEGACY_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ERR_load_ASN1_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_ASYNC_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BIO_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BN_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BUF_strings(void); +# ifndef OPENSSL_NO_CMS +OSSL_DEPRECATEDIN_3_0 int ERR_load_CMS_strings(void); +# endif +# ifndef OPENSSL_NO_COMP +OSSL_DEPRECATEDIN_3_0 int ERR_load_COMP_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_CONF_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_CRYPTO_strings(void); +# ifndef OPENSSL_NO_CT +OSSL_DEPRECATEDIN_3_0 int ERR_load_CT_strings(void); +# endif +# ifndef OPENSSL_NO_DH +OSSL_DEPRECATEDIN_3_0 int ERR_load_DH_strings(void); +# endif +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 int ERR_load_DSA_strings(void); +# endif +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 int ERR_load_EC_strings(void); +# endif +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int ERR_load_ENGINE_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_ERR_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_EVP_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_KDF_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_OBJ_strings(void); +# ifndef OPENSSL_NO_OCSP +OSSL_DEPRECATEDIN_3_0 int ERR_load_OCSP_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_PEM_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS12_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS7_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_RAND_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_RSA_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_OSSL_STORE_strings(void); +# ifndef OPENSSL_NO_TS +OSSL_DEPRECATEDIN_3_0 int ERR_load_TS_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_UI_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_X509_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_X509V3_strings(void); + +/* Collected _F_ macros from OpenSSL 1.1.1 */ + +/* + * ASN1 function codes. + */ +# define ASN1_F_A2D_ASN1_OBJECT 0 +# define ASN1_F_A2I_ASN1_INTEGER 0 +# define ASN1_F_A2I_ASN1_STRING 0 +# define ASN1_F_APPEND_EXP 0 +# define ASN1_F_ASN1_BIO_INIT 0 +# define ASN1_F_ASN1_BIT_STRING_SET_BIT 0 +# define ASN1_F_ASN1_CB 0 +# define ASN1_F_ASN1_CHECK_TLEN 0 +# define ASN1_F_ASN1_COLLECT 0 +# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 0 +# define ASN1_F_ASN1_D2I_FP 0 +# define ASN1_F_ASN1_D2I_READ_BIO 0 +# define ASN1_F_ASN1_DIGEST 0 +# define ASN1_F_ASN1_DO_ADB 0 +# define ASN1_F_ASN1_DO_LOCK 0 +# define ASN1_F_ASN1_DUP 0 +# define ASN1_F_ASN1_ENC_SAVE 0 +# define ASN1_F_ASN1_EX_C2I 0 +# define ASN1_F_ASN1_FIND_END 0 +# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 0 +# define ASN1_F_ASN1_GENERATE_V3 0 +# define ASN1_F_ASN1_GET_INT64 0 +# define ASN1_F_ASN1_GET_OBJECT 0 +# define ASN1_F_ASN1_GET_UINT64 0 +# define ASN1_F_ASN1_I2D_BIO 0 +# define ASN1_F_ASN1_I2D_FP 0 +# define ASN1_F_ASN1_ITEM_D2I_FP 0 +# define ASN1_F_ASN1_ITEM_DUP 0 +# define ASN1_F_ASN1_ITEM_EMBED_D2I 0 +# define ASN1_F_ASN1_ITEM_EMBED_NEW 0 +# define ASN1_F_ASN1_ITEM_FLAGS_I2D 0 +# define ASN1_F_ASN1_ITEM_I2D_BIO 0 +# define ASN1_F_ASN1_ITEM_I2D_FP 0 +# define ASN1_F_ASN1_ITEM_PACK 0 +# define ASN1_F_ASN1_ITEM_SIGN 0 +# define ASN1_F_ASN1_ITEM_SIGN_CTX 0 +# define ASN1_F_ASN1_ITEM_UNPACK 0 +# define ASN1_F_ASN1_ITEM_VERIFY 0 +# define ASN1_F_ASN1_MBSTRING_NCOPY 0 +# define ASN1_F_ASN1_OBJECT_NEW 0 +# define ASN1_F_ASN1_OUTPUT_DATA 0 +# define ASN1_F_ASN1_PCTX_NEW 0 +# define ASN1_F_ASN1_PRIMITIVE_NEW 0 +# define ASN1_F_ASN1_SCTX_NEW 0 +# define ASN1_F_ASN1_SIGN 0 +# define ASN1_F_ASN1_STR2TYPE 0 +# define ASN1_F_ASN1_STRING_GET_INT64 0 +# define ASN1_F_ASN1_STRING_GET_UINT64 0 +# define ASN1_F_ASN1_STRING_SET 0 +# define ASN1_F_ASN1_STRING_TABLE_ADD 0 +# define ASN1_F_ASN1_STRING_TO_BN 0 +# define ASN1_F_ASN1_STRING_TYPE_NEW 0 +# define ASN1_F_ASN1_TEMPLATE_EX_D2I 0 +# define ASN1_F_ASN1_TEMPLATE_NEW 0 +# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 0 +# define ASN1_F_ASN1_TIME_ADJ 0 +# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 0 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 0 +# define ASN1_F_ASN1_UTCTIME_ADJ 0 +# define ASN1_F_ASN1_VERIFY 0 +# define ASN1_F_B64_READ_ASN1 0 +# define ASN1_F_B64_WRITE_ASN1 0 +# define ASN1_F_BIO_NEW_NDEF 0 +# define ASN1_F_BITSTR_CB 0 +# define ASN1_F_BN_TO_ASN1_STRING 0 +# define ASN1_F_C2I_ASN1_BIT_STRING 0 +# define ASN1_F_C2I_ASN1_INTEGER 0 +# define ASN1_F_C2I_ASN1_OBJECT 0 +# define ASN1_F_C2I_IBUF 0 +# define ASN1_F_C2I_UINT64_INT 0 +# define ASN1_F_COLLECT_DATA 0 +# define ASN1_F_D2I_ASN1_OBJECT 0 +# define ASN1_F_D2I_ASN1_UINTEGER 0 +# define ASN1_F_D2I_AUTOPRIVATEKEY 0 +# define ASN1_F_D2I_PRIVATEKEY 0 +# define ASN1_F_D2I_PUBLICKEY 0 +# define ASN1_F_DO_BUF 0 +# define ASN1_F_DO_CREATE 0 +# define ASN1_F_DO_DUMP 0 +# define ASN1_F_DO_TCREATE 0 +# define ASN1_F_I2A_ASN1_OBJECT 0 +# define ASN1_F_I2D_ASN1_BIO_STREAM 0 +# define ASN1_F_I2D_ASN1_OBJECT 0 +# define ASN1_F_I2D_DSA_PUBKEY 0 +# define ASN1_F_I2D_EC_PUBKEY 0 +# define ASN1_F_I2D_PRIVATEKEY 0 +# define ASN1_F_I2D_PUBLICKEY 0 +# define ASN1_F_I2D_RSA_PUBKEY 0 +# define ASN1_F_LONG_C2I 0 +# define ASN1_F_NDEF_PREFIX 0 +# define ASN1_F_NDEF_SUFFIX 0 +# define ASN1_F_OID_MODULE_INIT 0 +# define ASN1_F_PARSE_TAGGING 0 +# define ASN1_F_PKCS5_PBE2_SET_IV 0 +# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 0 +# define ASN1_F_PKCS5_PBE_SET 0 +# define ASN1_F_PKCS5_PBE_SET0_ALGOR 0 +# define ASN1_F_PKCS5_PBKDF2_SET 0 +# define ASN1_F_PKCS5_SCRYPT_SET 0 +# define ASN1_F_SMIME_READ_ASN1 0 +# define ASN1_F_SMIME_TEXT 0 +# define ASN1_F_STABLE_GET 0 +# define ASN1_F_STBL_MODULE_INIT 0 +# define ASN1_F_UINT32_C2I 0 +# define ASN1_F_UINT32_NEW 0 +# define ASN1_F_UINT64_C2I 0 +# define ASN1_F_UINT64_NEW 0 +# define ASN1_F_X509_CRL_ADD0_REVOKED 0 +# define ASN1_F_X509_INFO_NEW 0 +# define ASN1_F_X509_NAME_ENCODE 0 +# define ASN1_F_X509_NAME_EX_D2I 0 +# define ASN1_F_X509_NAME_EX_NEW 0 +# define ASN1_F_X509_PKEY_NEW 0 + +/* + * ASYNC function codes. + */ +# define ASYNC_F_ASYNC_CTX_NEW 0 +# define ASYNC_F_ASYNC_INIT_THREAD 0 +# define ASYNC_F_ASYNC_JOB_NEW 0 +# define ASYNC_F_ASYNC_PAUSE_JOB 0 +# define ASYNC_F_ASYNC_START_FUNC 0 +# define ASYNC_F_ASYNC_START_JOB 0 +# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 0 + +/* + * BIO function codes. + */ +# define BIO_F_ACPT_STATE 0 +# define BIO_F_ADDRINFO_WRAP 0 +# define BIO_F_ADDR_STRINGS 0 +# define BIO_F_BIO_ACCEPT 0 +# define BIO_F_BIO_ACCEPT_EX 0 +# define BIO_F_BIO_ACCEPT_NEW 0 +# define BIO_F_BIO_ADDR_NEW 0 +# define BIO_F_BIO_BIND 0 +# define BIO_F_BIO_CALLBACK_CTRL 0 +# define BIO_F_BIO_CONNECT 0 +# define BIO_F_BIO_CONNECT_NEW 0 +# define BIO_F_BIO_CTRL 0 +# define BIO_F_BIO_GETS 0 +# define BIO_F_BIO_GET_HOST_IP 0 +# define BIO_F_BIO_GET_NEW_INDEX 0 +# define BIO_F_BIO_GET_PORT 0 +# define BIO_F_BIO_LISTEN 0 +# define BIO_F_BIO_LOOKUP 0 +# define BIO_F_BIO_LOOKUP_EX 0 +# define BIO_F_BIO_MAKE_PAIR 0 +# define BIO_F_BIO_METH_NEW 0 +# define BIO_F_BIO_NEW 0 +# define BIO_F_BIO_NEW_DGRAM_SCTP 0 +# define BIO_F_BIO_NEW_FILE 0 +# define BIO_F_BIO_NEW_MEM_BUF 0 +# define BIO_F_BIO_NREAD 0 +# define BIO_F_BIO_NREAD0 0 +# define BIO_F_BIO_NWRITE 0 +# define BIO_F_BIO_NWRITE0 0 +# define BIO_F_BIO_PARSE_HOSTSERV 0 +# define BIO_F_BIO_PUTS 0 +# define BIO_F_BIO_READ 0 +# define BIO_F_BIO_READ_EX 0 +# define BIO_F_BIO_READ_INTERN 0 +# define BIO_F_BIO_SOCKET 0 +# define BIO_F_BIO_SOCKET_NBIO 0 +# define BIO_F_BIO_SOCK_INFO 0 +# define BIO_F_BIO_SOCK_INIT 0 +# define BIO_F_BIO_WRITE 0 +# define BIO_F_BIO_WRITE_EX 0 +# define BIO_F_BIO_WRITE_INTERN 0 +# define BIO_F_BUFFER_CTRL 0 +# define BIO_F_CONN_CTRL 0 +# define BIO_F_CONN_STATE 0 +# define BIO_F_DGRAM_SCTP_NEW 0 +# define BIO_F_DGRAM_SCTP_READ 0 +# define BIO_F_DGRAM_SCTP_WRITE 0 +# define BIO_F_DOAPR_OUTCH 0 +# define BIO_F_FILE_CTRL 0 +# define BIO_F_FILE_READ 0 +# define BIO_F_LINEBUFFER_CTRL 0 +# define BIO_F_LINEBUFFER_NEW 0 +# define BIO_F_MEM_WRITE 0 +# define BIO_F_NBIOF_NEW 0 +# define BIO_F_SLG_WRITE 0 +# define BIO_F_SSL_NEW 0 + +/* + * BN function codes. + */ +# define BN_F_BNRAND 0 +# define BN_F_BNRAND_RANGE 0 +# define BN_F_BN_BLINDING_CONVERT_EX 0 +# define BN_F_BN_BLINDING_CREATE_PARAM 0 +# define BN_F_BN_BLINDING_INVERT_EX 0 +# define BN_F_BN_BLINDING_NEW 0 +# define BN_F_BN_BLINDING_UPDATE 0 +# define BN_F_BN_BN2DEC 0 +# define BN_F_BN_BN2HEX 0 +# define BN_F_BN_COMPUTE_WNAF 0 +# define BN_F_BN_CTX_GET 0 +# define BN_F_BN_CTX_NEW 0 +# define BN_F_BN_CTX_START 0 +# define BN_F_BN_DIV 0 +# define BN_F_BN_DIV_RECP 0 +# define BN_F_BN_EXP 0 +# define BN_F_BN_EXPAND_INTERNAL 0 +# define BN_F_BN_GENCB_NEW 0 +# define BN_F_BN_GENERATE_DSA_NONCE 0 +# define BN_F_BN_GENERATE_PRIME_EX 0 +# define BN_F_BN_GF2M_MOD 0 +# define BN_F_BN_GF2M_MOD_EXP 0 +# define BN_F_BN_GF2M_MOD_MUL 0 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 0 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 0 +# define BN_F_BN_GF2M_MOD_SQR 0 +# define BN_F_BN_GF2M_MOD_SQRT 0 +# define BN_F_BN_LSHIFT 0 +# define BN_F_BN_MOD_EXP2_MONT 0 +# define BN_F_BN_MOD_EXP_MONT 0 +# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 0 +# define BN_F_BN_MOD_EXP_MONT_WORD 0 +# define BN_F_BN_MOD_EXP_RECP 0 +# define BN_F_BN_MOD_EXP_SIMPLE 0 +# define BN_F_BN_MOD_INVERSE 0 +# define BN_F_BN_MOD_INVERSE_NO_BRANCH 0 +# define BN_F_BN_MOD_LSHIFT_QUICK 0 +# define BN_F_BN_MOD_SQRT 0 +# define BN_F_BN_MONT_CTX_NEW 0 +# define BN_F_BN_MPI2BN 0 +# define BN_F_BN_NEW 0 +# define BN_F_BN_POOL_GET 0 +# define BN_F_BN_RAND 0 +# define BN_F_BN_RAND_RANGE 0 +# define BN_F_BN_RECP_CTX_NEW 0 +# define BN_F_BN_RSHIFT 0 +# define BN_F_BN_SET_WORDS 0 +# define BN_F_BN_STACK_PUSH 0 +# define BN_F_BN_USUB 0 + +/* + * BUF function codes. + */ +# define BUF_F_BUF_MEM_GROW 0 +# define BUF_F_BUF_MEM_GROW_CLEAN 0 +# define BUF_F_BUF_MEM_NEW 0 + +# ifndef OPENSSL_NO_CMS +/* + * CMS function codes. + */ +# define CMS_F_CHECK_CONTENT 0 +# define CMS_F_CMS_ADD0_CERT 0 +# define CMS_F_CMS_ADD0_RECIPIENT_KEY 0 +# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 0 +# define CMS_F_CMS_ADD1_RECEIPTREQUEST 0 +# define CMS_F_CMS_ADD1_RECIPIENT_CERT 0 +# define CMS_F_CMS_ADD1_SIGNER 0 +# define CMS_F_CMS_ADD1_SIGNINGTIME 0 +# define CMS_F_CMS_COMPRESS 0 +# define CMS_F_CMS_COMPRESSEDDATA_CREATE 0 +# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 0 +# define CMS_F_CMS_COPY_CONTENT 0 +# define CMS_F_CMS_COPY_MESSAGEDIGEST 0 +# define CMS_F_CMS_DATA 0 +# define CMS_F_CMS_DATAFINAL 0 +# define CMS_F_CMS_DATAINIT 0 +# define CMS_F_CMS_DECRYPT 0 +# define CMS_F_CMS_DECRYPT_SET1_KEY 0 +# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 0 +# define CMS_F_CMS_DECRYPT_SET1_PKEY 0 +# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 0 +# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 0 +# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 0 +# define CMS_F_CMS_DIGEST_VERIFY 0 +# define CMS_F_CMS_ENCODE_RECEIPT 0 +# define CMS_F_CMS_ENCRYPT 0 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 0 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 0 +# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 0 +# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 0 +# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 0 +# define CMS_F_CMS_ENVELOPEDDATA_CREATE 0 +# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 0 +# define CMS_F_CMS_ENVELOPED_DATA_INIT 0 +# define CMS_F_CMS_ENV_ASN1_CTRL 0 +# define CMS_F_CMS_FINAL 0 +# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 0 +# define CMS_F_CMS_GET0_CONTENT 0 +# define CMS_F_CMS_GET0_ECONTENT_TYPE 0 +# define CMS_F_CMS_GET0_ENVELOPED 0 +# define CMS_F_CMS_GET0_REVOCATION_CHOICES 0 +# define CMS_F_CMS_GET0_SIGNED 0 +# define CMS_F_CMS_MSGSIGDIGEST_ADD1 0 +# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 0 +# define CMS_F_CMS_RECEIPT_VERIFY 0 +# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 0 +# define CMS_F_CMS_SD_ASN1_CTRL 0 +# define CMS_F_CMS_SET1_IAS 0 +# define CMS_F_CMS_SET1_KEYID 0 +# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 0 +# define CMS_F_CMS_SET_DETACHED 0 +# define CMS_F_CMS_SIGN 0 +# define CMS_F_CMS_SIGNED_DATA_INIT 0 +# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 0 +# define CMS_F_CMS_SIGNERINFO_SIGN 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 0 +# define CMS_F_CMS_SIGN_RECEIPT 0 +# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 0 +# define CMS_F_CMS_STREAM 0 +# define CMS_F_CMS_UNCOMPRESS 0 +# define CMS_F_CMS_VERIFY 0 +# define CMS_F_KEK_UNWRAP_KEY 0 +# endif + +# ifndef OPENSSL_NO_COMP +/* + * COMP function codes. + */ +# define COMP_F_BIO_ZLIB_FLUSH 0 +# define COMP_F_BIO_ZLIB_NEW 0 +# define COMP_F_BIO_ZLIB_READ 0 +# define COMP_F_BIO_ZLIB_WRITE 0 +# define COMP_F_COMP_CTX_NEW 0 +# endif + +/* + * CONF function codes. + */ +# define CONF_F_CONF_DUMP_FP 0 +# define CONF_F_CONF_LOAD 0 +# define CONF_F_CONF_LOAD_FP 0 +# define CONF_F_CONF_PARSE_LIST 0 +# define CONF_F_DEF_LOAD 0 +# define CONF_F_DEF_LOAD_BIO 0 +# define CONF_F_GET_NEXT_FILE 0 +# define CONF_F_MODULE_ADD 0 +# define CONF_F_MODULE_INIT 0 +# define CONF_F_MODULE_LOAD_DSO 0 +# define CONF_F_MODULE_RUN 0 +# define CONF_F_NCONF_DUMP_BIO 0 +# define CONF_F_NCONF_DUMP_FP 0 +# define CONF_F_NCONF_GET_NUMBER_E 0 +# define CONF_F_NCONF_GET_SECTION 0 +# define CONF_F_NCONF_GET_STRING 0 +# define CONF_F_NCONF_LOAD 0 +# define CONF_F_NCONF_LOAD_BIO 0 +# define CONF_F_NCONF_LOAD_FP 0 +# define CONF_F_NCONF_NEW 0 +# define CONF_F_PROCESS_INCLUDE 0 +# define CONF_F_SSL_MODULE_INIT 0 +# define CONF_F_STR_COPY 0 + +/* + * CRYPTO function codes. + */ +# define CRYPTO_F_CMAC_CTX_NEW 0 +# define CRYPTO_F_CRYPTO_DUP_EX_DATA 0 +# define CRYPTO_F_CRYPTO_FREE_EX_DATA 0 +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 0 +# define CRYPTO_F_CRYPTO_MEMDUP 0 +# define CRYPTO_F_CRYPTO_NEW_EX_DATA 0 +# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 0 +# define CRYPTO_F_CRYPTO_OCB128_INIT 0 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 0 +# define CRYPTO_F_GET_AND_LOCK 0 +# define CRYPTO_F_OPENSSL_ATEXIT 0 +# define CRYPTO_F_OPENSSL_BUF2HEXSTR 0 +# define CRYPTO_F_OPENSSL_FOPEN 0 +# define CRYPTO_F_OPENSSL_HEXSTR2BUF 0 +# define CRYPTO_F_OPENSSL_INIT_CRYPTO 0 +# define CRYPTO_F_OPENSSL_LH_NEW 0 +# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 0 +# define CRYPTO_F_OPENSSL_SK_DUP 0 +# define CRYPTO_F_PKEY_HMAC_INIT 0 +# define CRYPTO_F_PKEY_POLY1305_INIT 0 +# define CRYPTO_F_PKEY_SIPHASH_INIT 0 +# define CRYPTO_F_SK_RESERVE 0 + +# ifndef OPENSSL_NO_CT +/* + * CT function codes. + */ +# define CT_F_CTLOG_NEW 0 +# define CT_F_CTLOG_NEW_FROM_BASE64 0 +# define CT_F_CTLOG_NEW_FROM_CONF 0 +# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 0 +# define CT_F_CTLOG_STORE_LOAD_FILE 0 +# define CT_F_CTLOG_STORE_LOAD_LOG 0 +# define CT_F_CTLOG_STORE_NEW 0 +# define CT_F_CT_BASE64_DECODE 0 +# define CT_F_CT_POLICY_EVAL_CTX_NEW 0 +# define CT_F_CT_V1_LOG_ID_FROM_PKEY 0 +# define CT_F_I2O_SCT 0 +# define CT_F_I2O_SCT_LIST 0 +# define CT_F_I2O_SCT_SIGNATURE 0 +# define CT_F_O2I_SCT 0 +# define CT_F_O2I_SCT_LIST 0 +# define CT_F_O2I_SCT_SIGNATURE 0 +# define CT_F_SCT_CTX_NEW 0 +# define CT_F_SCT_CTX_VERIFY 0 +# define CT_F_SCT_NEW 0 +# define CT_F_SCT_NEW_FROM_BASE64 0 +# define CT_F_SCT_SET0_LOG_ID 0 +# define CT_F_SCT_SET1_EXTENSIONS 0 +# define CT_F_SCT_SET1_LOG_ID 0 +# define CT_F_SCT_SET1_SIGNATURE 0 +# define CT_F_SCT_SET_LOG_ENTRY_TYPE 0 +# define CT_F_SCT_SET_SIGNATURE_NID 0 +# define CT_F_SCT_SET_VERSION 0 +# endif + +# ifndef OPENSSL_NO_DH +/* + * DH function codes. + */ +# define DH_F_COMPUTE_KEY 0 +# define DH_F_DHPARAMS_PRINT_FP 0 +# define DH_F_DH_BUILTIN_GENPARAMS 0 +# define DH_F_DH_CHECK_EX 0 +# define DH_F_DH_CHECK_PARAMS_EX 0 +# define DH_F_DH_CHECK_PUB_KEY_EX 0 +# define DH_F_DH_CMS_DECRYPT 0 +# define DH_F_DH_CMS_SET_PEERKEY 0 +# define DH_F_DH_CMS_SET_SHARED_INFO 0 +# define DH_F_DH_METH_DUP 0 +# define DH_F_DH_METH_NEW 0 +# define DH_F_DH_METH_SET1_NAME 0 +# define DH_F_DH_NEW_BY_NID 0 +# define DH_F_DH_NEW_METHOD 0 +# define DH_F_DH_PARAM_DECODE 0 +# define DH_F_DH_PKEY_PUBLIC_CHECK 0 +# define DH_F_DH_PRIV_DECODE 0 +# define DH_F_DH_PRIV_ENCODE 0 +# define DH_F_DH_PUB_DECODE 0 +# define DH_F_DH_PUB_ENCODE 0 +# define DH_F_DO_DH_PRINT 0 +# define DH_F_GENERATE_KEY 0 +# define DH_F_PKEY_DH_CTRL_STR 0 +# define DH_F_PKEY_DH_DERIVE 0 +# define DH_F_PKEY_DH_INIT 0 +# define DH_F_PKEY_DH_KEYGEN 0 +# endif + +# ifndef OPENSSL_NO_DSA +/* + * DSA function codes. + */ +# define DSA_F_DSAPARAMS_PRINT 0 +# define DSA_F_DSAPARAMS_PRINT_FP 0 +# define DSA_F_DSA_BUILTIN_PARAMGEN 0 +# define DSA_F_DSA_BUILTIN_PARAMGEN2 0 +# define DSA_F_DSA_DO_SIGN 0 +# define DSA_F_DSA_DO_VERIFY 0 +# define DSA_F_DSA_METH_DUP 0 +# define DSA_F_DSA_METH_NEW 0 +# define DSA_F_DSA_METH_SET1_NAME 0 +# define DSA_F_DSA_NEW_METHOD 0 +# define DSA_F_DSA_PARAM_DECODE 0 +# define DSA_F_DSA_PRINT_FP 0 +# define DSA_F_DSA_PRIV_DECODE 0 +# define DSA_F_DSA_PRIV_ENCODE 0 +# define DSA_F_DSA_PUB_DECODE 0 +# define DSA_F_DSA_PUB_ENCODE 0 +# define DSA_F_DSA_SIGN 0 +# define DSA_F_DSA_SIGN_SETUP 0 +# define DSA_F_DSA_SIG_NEW 0 +# define DSA_F_OLD_DSA_PRIV_DECODE 0 +# define DSA_F_PKEY_DSA_CTRL 0 +# define DSA_F_PKEY_DSA_CTRL_STR 0 +# define DSA_F_PKEY_DSA_KEYGEN 0 +# endif + +# ifndef OPENSSL_NO_EC +/* + * EC function codes. + */ +# define EC_F_BN_TO_FELEM 0 +# define EC_F_D2I_ECPARAMETERS 0 +# define EC_F_D2I_ECPKPARAMETERS 0 +# define EC_F_D2I_ECPRIVATEKEY 0 +# define EC_F_DO_EC_KEY_PRINT 0 +# define EC_F_ECDH_CMS_DECRYPT 0 +# define EC_F_ECDH_CMS_SET_SHARED_INFO 0 +# define EC_F_ECDH_COMPUTE_KEY 0 +# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 0 +# define EC_F_ECDSA_DO_SIGN_EX 0 +# define EC_F_ECDSA_DO_VERIFY 0 +# define EC_F_ECDSA_SIGN_EX 0 +# define EC_F_ECDSA_SIGN_SETUP 0 +# define EC_F_ECDSA_SIG_NEW 0 +# define EC_F_ECDSA_VERIFY 0 +# define EC_F_ECD_ITEM_VERIFY 0 +# define EC_F_ECKEY_PARAM2TYPE 0 +# define EC_F_ECKEY_PARAM_DECODE 0 +# define EC_F_ECKEY_PRIV_DECODE 0 +# define EC_F_ECKEY_PRIV_ENCODE 0 +# define EC_F_ECKEY_PUB_DECODE 0 +# define EC_F_ECKEY_PUB_ENCODE 0 +# define EC_F_ECKEY_TYPE2PARAM 0 +# define EC_F_ECPARAMETERS_PRINT 0 +# define EC_F_ECPARAMETERS_PRINT_FP 0 +# define EC_F_ECPKPARAMETERS_PRINT 0 +# define EC_F_ECPKPARAMETERS_PRINT_FP 0 +# define EC_F_ECP_NISTZ256_GET_AFFINE 0 +# define EC_F_ECP_NISTZ256_INV_MOD_ORD 0 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 0 +# define EC_F_ECP_NISTZ256_POINTS_MUL 0 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 0 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 0 +# define EC_F_ECX_KEY_OP 0 +# define EC_F_ECX_PRIV_ENCODE 0 +# define EC_F_ECX_PUB_ENCODE 0 +# define EC_F_EC_ASN1_GROUP2CURVE 0 +# define EC_F_EC_ASN1_GROUP2FIELDID 0 +# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 0 +# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 0 +# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 0 +# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 0 +# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 0 +# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 0 +# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 0 +# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 0 +# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_GFP_MONT_FIELD_DECODE 0 +# define EC_F_EC_GFP_MONT_FIELD_ENCODE 0 +# define EC_F_EC_GFP_MONT_FIELD_INV 0 +# define EC_F_EC_GFP_MONT_FIELD_MUL 0 +# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 0 +# define EC_F_EC_GFP_MONT_FIELD_SQR 0 +# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP224_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP256_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP521_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NIST_FIELD_MUL 0 +# define EC_F_EC_GFP_NIST_FIELD_SQR 0 +# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_FIELD_INV 0 +# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 0 +# define EC_F_EC_GFP_SIMPLE_OCT2POINT 0 +# define EC_F_EC_GFP_SIMPLE_POINT2OCT 0 +# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 0 +# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_GROUP_CHECK 0 +# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GROUP_COPY 0 +# define EC_F_EC_GROUP_GET_CURVE 0 +# define EC_F_EC_GROUP_GET_CURVE_GF2M 0 +# define EC_F_EC_GROUP_GET_CURVE_GFP 0 +# define EC_F_EC_GROUP_GET_DEGREE 0 +# define EC_F_EC_GROUP_GET_ECPARAMETERS 0 +# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 0 +# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 0 +# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 0 +# define EC_F_EC_GROUP_NEW 0 +# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 0 +# define EC_F_EC_GROUP_NEW_FROM_DATA 0 +# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 0 +# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 0 +# define EC_F_EC_GROUP_SET_CURVE 0 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 0 +# define EC_F_EC_GROUP_SET_CURVE_GFP 0 +# define EC_F_EC_GROUP_SET_GENERATOR 0 +# define EC_F_EC_GROUP_SET_SEED 0 +# define EC_F_EC_KEY_CHECK_KEY 0 +# define EC_F_EC_KEY_COPY 0 +# define EC_F_EC_KEY_GENERATE_KEY 0 +# define EC_F_EC_KEY_NEW 0 +# define EC_F_EC_KEY_NEW_METHOD 0 +# define EC_F_EC_KEY_OCT2PRIV 0 +# define EC_F_EC_KEY_PRINT 0 +# define EC_F_EC_KEY_PRINT_FP 0 +# define EC_F_EC_KEY_PRIV2BUF 0 +# define EC_F_EC_KEY_PRIV2OCT 0 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 0 +# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 0 +# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 0 +# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 0 +# define EC_F_EC_PKEY_CHECK 0 +# define EC_F_EC_PKEY_PARAM_CHECK 0 +# define EC_F_EC_POINTS_MAKE_AFFINE 0 +# define EC_F_EC_POINTS_MUL 0 +# define EC_F_EC_POINT_ADD 0 +# define EC_F_EC_POINT_BN2POINT 0 +# define EC_F_EC_POINT_CMP 0 +# define EC_F_EC_POINT_COPY 0 +# define EC_F_EC_POINT_DBL 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_INVERT 0 +# define EC_F_EC_POINT_IS_AT_INFINITY 0 +# define EC_F_EC_POINT_IS_ON_CURVE 0 +# define EC_F_EC_POINT_MAKE_AFFINE 0 +# define EC_F_EC_POINT_NEW 0 +# define EC_F_EC_POINT_OCT2POINT 0 +# define EC_F_EC_POINT_POINT2BUF 0 +# define EC_F_EC_POINT_POINT2OCT 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_TO_INFINITY 0 +# define EC_F_EC_PRE_COMP_NEW 0 +# define EC_F_EC_SCALAR_MUL_LADDER 0 +# define EC_F_EC_WNAF_MUL 0 +# define EC_F_EC_WNAF_PRECOMPUTE_MULT 0 +# define EC_F_I2D_ECPARAMETERS 0 +# define EC_F_I2D_ECPKPARAMETERS 0 +# define EC_F_I2D_ECPRIVATEKEY 0 +# define EC_F_I2O_ECPUBLICKEY 0 +# define EC_F_NISTP224_PRE_COMP_NEW 0 +# define EC_F_NISTP256_PRE_COMP_NEW 0 +# define EC_F_NISTP521_PRE_COMP_NEW 0 +# define EC_F_O2I_ECPUBLICKEY 0 +# define EC_F_OLD_EC_PRIV_DECODE 0 +# define EC_F_OSSL_ECDH_COMPUTE_KEY 0 +# define EC_F_OSSL_ECDSA_SIGN_SIG 0 +# define EC_F_OSSL_ECDSA_VERIFY_SIG 0 +# define EC_F_PKEY_ECD_CTRL 0 +# define EC_F_PKEY_ECD_DIGESTSIGN 0 +# define EC_F_PKEY_ECD_DIGESTSIGN25519 0 +# define EC_F_PKEY_ECD_DIGESTSIGN448 0 +# define EC_F_PKEY_ECX_DERIVE 0 +# define EC_F_PKEY_EC_CTRL 0 +# define EC_F_PKEY_EC_CTRL_STR 0 +# define EC_F_PKEY_EC_DERIVE 0 +# define EC_F_PKEY_EC_INIT 0 +# define EC_F_PKEY_EC_KDF_DERIVE 0 +# define EC_F_PKEY_EC_KEYGEN 0 +# define EC_F_PKEY_EC_PARAMGEN 0 +# define EC_F_PKEY_EC_SIGN 0 +# define EC_F_VALIDATE_ECX_DERIVE 0 +# endif + +# ifndef OPENSSL_NO_ENGINE +/* + * ENGINE function codes. + */ +# define ENGINE_F_DIGEST_UPDATE 0 +# define ENGINE_F_DYNAMIC_CTRL 0 +# define ENGINE_F_DYNAMIC_GET_DATA_CTX 0 +# define ENGINE_F_DYNAMIC_LOAD 0 +# define ENGINE_F_DYNAMIC_SET_DATA_CTX 0 +# define ENGINE_F_ENGINE_ADD 0 +# define ENGINE_F_ENGINE_BY_ID 0 +# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 0 +# define ENGINE_F_ENGINE_CTRL 0 +# define ENGINE_F_ENGINE_CTRL_CMD 0 +# define ENGINE_F_ENGINE_CTRL_CMD_STRING 0 +# define ENGINE_F_ENGINE_FINISH 0 +# define ENGINE_F_ENGINE_GET_CIPHER 0 +# define ENGINE_F_ENGINE_GET_DIGEST 0 +# define ENGINE_F_ENGINE_GET_FIRST 0 +# define ENGINE_F_ENGINE_GET_LAST 0 +# define ENGINE_F_ENGINE_GET_NEXT 0 +# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 0 +# define ENGINE_F_ENGINE_GET_PKEY_METH 0 +# define ENGINE_F_ENGINE_GET_PREV 0 +# define ENGINE_F_ENGINE_INIT 0 +# define ENGINE_F_ENGINE_LIST_ADD 0 +# define ENGINE_F_ENGINE_LIST_REMOVE 0 +# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 0 +# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 0 +# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 0 +# define ENGINE_F_ENGINE_NEW 0 +# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 0 +# define ENGINE_F_ENGINE_REMOVE 0 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 0 +# define ENGINE_F_ENGINE_SET_ID 0 +# define ENGINE_F_ENGINE_SET_NAME 0 +# define ENGINE_F_ENGINE_TABLE_REGISTER 0 +# define ENGINE_F_ENGINE_UNLOCKED_FINISH 0 +# define ENGINE_F_ENGINE_UP_REF 0 +# define ENGINE_F_INT_CLEANUP_ITEM 0 +# define ENGINE_F_INT_CTRL_HELPER 0 +# define ENGINE_F_INT_ENGINE_CONFIGURE 0 +# define ENGINE_F_INT_ENGINE_MODULE_INIT 0 +# define ENGINE_F_OSSL_HMAC_INIT 0 +# endif + +/* + * EVP function codes. + */ +# define EVP_F_AESNI_INIT_KEY 0 +# define EVP_F_AESNI_XTS_INIT_KEY 0 +# define EVP_F_AES_GCM_CTRL 0 +# define EVP_F_AES_INIT_KEY 0 +# define EVP_F_AES_OCB_CIPHER 0 +# define EVP_F_AES_T4_INIT_KEY 0 +# define EVP_F_AES_T4_XTS_INIT_KEY 0 +# define EVP_F_AES_WRAP_CIPHER 0 +# define EVP_F_AES_XTS_INIT_KEY 0 +# define EVP_F_ALG_MODULE_INIT 0 +# define EVP_F_ARIA_CCM_INIT_KEY 0 +# define EVP_F_ARIA_GCM_CTRL 0 +# define EVP_F_ARIA_GCM_INIT_KEY 0 +# define EVP_F_ARIA_INIT_KEY 0 +# define EVP_F_B64_NEW 0 +# define EVP_F_CAMELLIA_INIT_KEY 0 +# define EVP_F_CHACHA20_POLY1305_CTRL 0 +# define EVP_F_CMLL_T4_INIT_KEY 0 +# define EVP_F_DES_EDE3_WRAP_CIPHER 0 +# define EVP_F_DO_SIGVER_INIT 0 +# define EVP_F_ENC_NEW 0 +# define EVP_F_EVP_CIPHERINIT_EX 0 +# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 0 +# define EVP_F_EVP_CIPHER_CTX_COPY 0 +# define EVP_F_EVP_CIPHER_CTX_CTRL 0 +# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 0 +# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 0 +# define EVP_F_EVP_DECRYPTFINAL_EX 0 +# define EVP_F_EVP_DECRYPTUPDATE 0 +# define EVP_F_EVP_DIGESTFINALXOF 0 +# define EVP_F_EVP_DIGESTINIT_EX 0 +# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 0 +# define EVP_F_EVP_ENCRYPTFINAL_EX 0 +# define EVP_F_EVP_ENCRYPTUPDATE 0 +# define EVP_F_EVP_MD_CTX_COPY_EX 0 +# define EVP_F_EVP_MD_SIZE 0 +# define EVP_F_EVP_OPENINIT 0 +# define EVP_F_EVP_PBE_ALG_ADD 0 +# define EVP_F_EVP_PBE_ALG_ADD_TYPE 0 +# define EVP_F_EVP_PBE_CIPHERINIT 0 +# define EVP_F_EVP_PBE_SCRYPT 0 +# define EVP_F_EVP_PKCS82PKEY 0 +# define EVP_F_EVP_PKEY2PKCS8 0 +# define EVP_F_EVP_PKEY_ASN1_ADD0 0 +# define EVP_F_EVP_PKEY_CHECK 0 +# define EVP_F_EVP_PKEY_COPY_PARAMETERS 0 +# define EVP_F_EVP_PKEY_CTX_CTRL 0 +# define EVP_F_EVP_PKEY_CTX_CTRL_STR 0 +# define EVP_F_EVP_PKEY_CTX_DUP 0 +# define EVP_F_EVP_PKEY_CTX_MD 0 +# define EVP_F_EVP_PKEY_DECRYPT 0 +# define EVP_F_EVP_PKEY_DECRYPT_INIT 0 +# define EVP_F_EVP_PKEY_DECRYPT_OLD 0 +# define EVP_F_EVP_PKEY_DERIVE 0 +# define EVP_F_EVP_PKEY_DERIVE_INIT 0 +# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 0 +# define EVP_F_EVP_PKEY_ENCRYPT 0 +# define EVP_F_EVP_PKEY_ENCRYPT_INIT 0 +# define EVP_F_EVP_PKEY_ENCRYPT_OLD 0 +# define EVP_F_EVP_PKEY_GET0_DH 0 +# define EVP_F_EVP_PKEY_GET0_DSA 0 +# define EVP_F_EVP_PKEY_GET0_EC_KEY 0 +# define EVP_F_EVP_PKEY_GET0_HMAC 0 +# define EVP_F_EVP_PKEY_GET0_POLY1305 0 +# define EVP_F_EVP_PKEY_GET0_RSA 0 +# define EVP_F_EVP_PKEY_GET0_SIPHASH 0 +# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 0 +# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 0 +# define EVP_F_EVP_PKEY_KEYGEN 0 +# define EVP_F_EVP_PKEY_KEYGEN_INIT 0 +# define EVP_F_EVP_PKEY_METH_ADD0 0 +# define EVP_F_EVP_PKEY_METH_NEW 0 +# define EVP_F_EVP_PKEY_NEW 0 +# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 0 +# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 0 +# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 0 +# define EVP_F_EVP_PKEY_PARAMGEN 0 +# define EVP_F_EVP_PKEY_PARAMGEN_INIT 0 +# define EVP_F_EVP_PKEY_PARAM_CHECK 0 +# define EVP_F_EVP_PKEY_PUBLIC_CHECK 0 +# define EVP_F_EVP_PKEY_SET1_ENGINE 0 +# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 0 +# define EVP_F_EVP_PKEY_SIGN 0 +# define EVP_F_EVP_PKEY_SIGN_INIT 0 +# define EVP_F_EVP_PKEY_VERIFY 0 +# define EVP_F_EVP_PKEY_VERIFY_INIT 0 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER 0 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 0 +# define EVP_F_EVP_SIGNFINAL 0 +# define EVP_F_EVP_VERIFYFINAL 0 +# define EVP_F_INT_CTX_NEW 0 +# define EVP_F_OK_NEW 0 +# define EVP_F_PKCS5_PBE_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 0 +# define EVP_F_PKEY_SET_TYPE 0 +# define EVP_F_RC2_MAGIC_TO_METH 0 +# define EVP_F_RC5_CTRL 0 +# define EVP_F_R_32_12_16_INIT_KEY 0 +# define EVP_F_S390X_AES_GCM_CTRL 0 +# define EVP_F_UPDATE 0 + +/* + * KDF function codes. + */ +# define KDF_F_PKEY_HKDF_CTRL_STR 0 +# define KDF_F_PKEY_HKDF_DERIVE 0 +# define KDF_F_PKEY_HKDF_INIT 0 +# define KDF_F_PKEY_SCRYPT_CTRL_STR 0 +# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 0 +# define KDF_F_PKEY_SCRYPT_DERIVE 0 +# define KDF_F_PKEY_SCRYPT_INIT 0 +# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 0 +# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 0 +# define KDF_F_PKEY_TLS1_PRF_DERIVE 0 +# define KDF_F_PKEY_TLS1_PRF_INIT 0 +# define KDF_F_TLS1_PRF_ALG 0 + +/* + * KDF reason codes. + */ +# define KDF_R_INVALID_DIGEST 0 +# define KDF_R_MISSING_ITERATION_COUNT 0 +# define KDF_R_MISSING_KEY 0 +# define KDF_R_MISSING_MESSAGE_DIGEST 0 +# define KDF_R_MISSING_PARAMETER 0 +# define KDF_R_MISSING_PASS 0 +# define KDF_R_MISSING_SALT 0 +# define KDF_R_MISSING_SECRET 0 +# define KDF_R_MISSING_SEED 0 +# define KDF_R_UNKNOWN_PARAMETER_TYPE 0 +# define KDF_R_VALUE_ERROR 0 +# define KDF_R_VALUE_MISSING 0 + +/* + * OBJ function codes. + */ +# define OBJ_F_OBJ_ADD_OBJECT 0 +# define OBJ_F_OBJ_ADD_SIGID 0 +# define OBJ_F_OBJ_CREATE 0 +# define OBJ_F_OBJ_DUP 0 +# define OBJ_F_OBJ_NAME_NEW_INDEX 0 +# define OBJ_F_OBJ_NID2LN 0 +# define OBJ_F_OBJ_NID2OBJ 0 +# define OBJ_F_OBJ_NID2SN 0 +# define OBJ_F_OBJ_TXT2OBJ 0 + +# ifndef OPENSSL_NO_OCSP +/* + * OCSP function codes. + */ +# define OCSP_F_D2I_OCSP_NONCE 0 +# define OCSP_F_OCSP_BASIC_ADD1_STATUS 0 +# define OCSP_F_OCSP_BASIC_SIGN 0 +# define OCSP_F_OCSP_BASIC_SIGN_CTX 0 +# define OCSP_F_OCSP_BASIC_VERIFY 0 +# define OCSP_F_OCSP_CERT_ID_NEW 0 +# define OCSP_F_OCSP_CHECK_DELEGATED 0 +# define OCSP_F_OCSP_CHECK_IDS 0 +# define OCSP_F_OCSP_CHECK_ISSUER 0 +# define OCSP_F_OCSP_CHECK_VALIDITY 0 +# define OCSP_F_OCSP_MATCH_ISSUERID 0 +# define OCSP_F_OCSP_PARSE_URL 0 +# define OCSP_F_OCSP_REQUEST_SIGN 0 +# define OCSP_F_OCSP_REQUEST_VERIFY 0 +# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 0 +# define OCSP_F_PARSE_HTTP_LINE1 0 +# endif + +/* + * PEM function codes. + */ +# define PEM_F_B2I_DSS 0 +# define PEM_F_B2I_PVK_BIO 0 +# define PEM_F_B2I_RSA 0 +# define PEM_F_CHECK_BITLEN_DSA 0 +# define PEM_F_CHECK_BITLEN_RSA 0 +# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 0 +# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 0 +# define PEM_F_DO_B2I 0 +# define PEM_F_DO_B2I_BIO 0 +# define PEM_F_DO_BLOB_HEADER 0 +# define PEM_F_DO_I2B 0 +# define PEM_F_DO_PK8PKEY 0 +# define PEM_F_DO_PK8PKEY_FP 0 +# define PEM_F_DO_PVK_BODY 0 +# define PEM_F_DO_PVK_HEADER 0 +# define PEM_F_GET_HEADER_AND_DATA 0 +# define PEM_F_GET_NAME 0 +# define PEM_F_I2B_PVK 0 +# define PEM_F_I2B_PVK_BIO 0 +# define PEM_F_LOAD_IV 0 +# define PEM_F_PEM_ASN1_READ 0 +# define PEM_F_PEM_ASN1_READ_BIO 0 +# define PEM_F_PEM_ASN1_WRITE 0 +# define PEM_F_PEM_ASN1_WRITE_BIO 0 +# define PEM_F_PEM_DEF_CALLBACK 0 +# define PEM_F_PEM_DO_HEADER 0 +# define PEM_F_PEM_GET_EVP_CIPHER_INFO 0 +# define PEM_F_PEM_READ 0 +# define PEM_F_PEM_READ_BIO 0 +# define PEM_F_PEM_READ_BIO_DHPARAMS 0 +# define PEM_F_PEM_READ_BIO_EX 0 +# define PEM_F_PEM_READ_BIO_PARAMETERS 0 +# define PEM_F_PEM_READ_BIO_PRIVATEKEY 0 +# define PEM_F_PEM_READ_DHPARAMS 0 +# define PEM_F_PEM_READ_PRIVATEKEY 0 +# define PEM_F_PEM_SIGNFINAL 0 +# define PEM_F_PEM_WRITE 0 +# define PEM_F_PEM_WRITE_BIO 0 +# define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL 0 +# define PEM_F_PEM_WRITE_PRIVATEKEY 0 +# define PEM_F_PEM_X509_INFO_READ 0 +# define PEM_F_PEM_X509_INFO_READ_BIO 0 +# define PEM_F_PEM_X509_INFO_WRITE_BIO 0 + +/* + * PKCS12 function codes. + */ +# define PKCS12_F_OPENSSL_ASC2UNI 0 +# define PKCS12_F_OPENSSL_UNI2ASC 0 +# define PKCS12_F_OPENSSL_UNI2UTF8 0 +# define PKCS12_F_OPENSSL_UTF82UNI 0 +# define PKCS12_F_PKCS12_CREATE 0 +# define PKCS12_F_PKCS12_GEN_MAC 0 +# define PKCS12_F_PKCS12_INIT 0 +# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 0 +# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 0 +# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 0 +# define PKCS12_F_PKCS12_KEY_GEN_ASC 0 +# define PKCS12_F_PKCS12_KEY_GEN_UNI 0 +# define PKCS12_F_PKCS12_KEY_GEN_UTF8 0 +# define PKCS12_F_PKCS12_NEWPASS 0 +# define PKCS12_F_PKCS12_PACK_P7DATA 0 +# define PKCS12_F_PKCS12_PACK_P7ENCDATA 0 +# define PKCS12_F_PKCS12_PARSE 0 +# define PKCS12_F_PKCS12_PBE_CRYPT 0 +# define PKCS12_F_PKCS12_PBE_KEYIVGEN 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 0 +# define PKCS12_F_PKCS12_SETUP_MAC 0 +# define PKCS12_F_PKCS12_SET_MAC 0 +# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 0 +# define PKCS12_F_PKCS12_UNPACK_P7DATA 0 +# define PKCS12_F_PKCS12_VERIFY_MAC 0 +# define PKCS12_F_PKCS8_ENCRYPT 0 +# define PKCS12_F_PKCS8_SET0_PBE 0 + +/* + * PKCS7 function codes. + */ +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 0 +# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 0 +# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 0 +# define PKCS7_F_PKCS7_ADD_CERTIFICATE 0 +# define PKCS7_F_PKCS7_ADD_CRL 0 +# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 0 +# define PKCS7_F_PKCS7_ADD_SIGNATURE 0 +# define PKCS7_F_PKCS7_ADD_SIGNER 0 +# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 0 +# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 0 +# define PKCS7_F_PKCS7_CTRL 0 +# define PKCS7_F_PKCS7_DATADECODE 0 +# define PKCS7_F_PKCS7_DATAFINAL 0 +# define PKCS7_F_PKCS7_DATAINIT 0 +# define PKCS7_F_PKCS7_DATAVERIFY 0 +# define PKCS7_F_PKCS7_DECRYPT 0 +# define PKCS7_F_PKCS7_DECRYPT_RINFO 0 +# define PKCS7_F_PKCS7_ENCODE_RINFO 0 +# define PKCS7_F_PKCS7_ENCRYPT 0 +# define PKCS7_F_PKCS7_FINAL 0 +# define PKCS7_F_PKCS7_FIND_DIGEST 0 +# define PKCS7_F_PKCS7_GET0_SIGNERS 0 +# define PKCS7_F_PKCS7_RECIP_INFO_SET 0 +# define PKCS7_F_PKCS7_SET_CIPHER 0 +# define PKCS7_F_PKCS7_SET_CONTENT 0 +# define PKCS7_F_PKCS7_SET_DIGEST 0 +# define PKCS7_F_PKCS7_SET_TYPE 0 +# define PKCS7_F_PKCS7_SIGN 0 +# define PKCS7_F_PKCS7_SIGNATUREVERIFY 0 +# define PKCS7_F_PKCS7_SIGNER_INFO_SET 0 +# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 0 +# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 0 +# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 0 +# define PKCS7_F_PKCS7_VERIFY 0 + +/* + * RAND function codes. + */ +# define RAND_F_DATA_COLLECT_METHOD 0 +# define RAND_F_DRBG_BYTES 0 +# define RAND_F_DRBG_GET_ENTROPY 0 +# define RAND_F_DRBG_SETUP 0 +# define RAND_F_GET_ENTROPY 0 +# define RAND_F_RAND_BYTES 0 +# define RAND_F_RAND_DRBG_ENABLE_LOCKING 0 +# define RAND_F_RAND_DRBG_GENERATE 0 +# define RAND_F_RAND_DRBG_GET_ENTROPY 0 +# define RAND_F_RAND_DRBG_GET_NONCE 0 +# define RAND_F_RAND_DRBG_INSTANTIATE 0 +# define RAND_F_RAND_DRBG_NEW 0 +# define RAND_F_RAND_DRBG_RESEED 0 +# define RAND_F_RAND_DRBG_RESTART 0 +# define RAND_F_RAND_DRBG_SET 0 +# define RAND_F_RAND_DRBG_SET_DEFAULTS 0 +# define RAND_F_RAND_DRBG_UNINSTANTIATE 0 +# define RAND_F_RAND_LOAD_FILE 0 +# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 0 +# define RAND_F_RAND_POOL_ADD 0 +# define RAND_F_RAND_POOL_ADD_BEGIN 0 +# define RAND_F_RAND_POOL_ADD_END 0 +# define RAND_F_RAND_POOL_ATTACH 0 +# define RAND_F_RAND_POOL_BYTES_NEEDED 0 +# define RAND_F_RAND_POOL_GROW 0 +# define RAND_F_RAND_POOL_NEW 0 +# define RAND_F_RAND_PSEUDO_BYTES 0 +# define RAND_F_RAND_WRITE_FILE 0 + +/* + * RSA function codes. + */ +# define RSA_F_CHECK_PADDING_MD 0 +# define RSA_F_ENCODE_PKCS1 0 +# define RSA_F_INT_RSA_VERIFY 0 +# define RSA_F_OLD_RSA_PRIV_DECODE 0 +# define RSA_F_PKEY_PSS_INIT 0 +# define RSA_F_PKEY_RSA_CTRL 0 +# define RSA_F_PKEY_RSA_CTRL_STR 0 +# define RSA_F_PKEY_RSA_SIGN 0 +# define RSA_F_PKEY_RSA_VERIFY 0 +# define RSA_F_PKEY_RSA_VERIFYRECOVER 0 +# define RSA_F_RSA_ALGOR_TO_MD 0 +# define RSA_F_RSA_BUILTIN_KEYGEN 0 +# define RSA_F_RSA_CHECK_KEY 0 +# define RSA_F_RSA_CHECK_KEY_EX 0 +# define RSA_F_RSA_CMS_DECRYPT 0 +# define RSA_F_RSA_CMS_VERIFY 0 +# define RSA_F_RSA_ITEM_VERIFY 0 +# define RSA_F_RSA_METH_DUP 0 +# define RSA_F_RSA_METH_NEW 0 +# define RSA_F_RSA_METH_SET1_NAME 0 +# define RSA_F_RSA_MGF1_TO_MD 0 +# define RSA_F_RSA_MULTIP_INFO_NEW 0 +# define RSA_F_RSA_NEW_METHOD 0 +# define RSA_F_RSA_NULL 0 +# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 0 +# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 0 +# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 0 +# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 0 +# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 0 +# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 0 +# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 0 +# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 0 +# define RSA_F_RSA_PADDING_ADD_NONE 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 0 +# define RSA_F_RSA_PADDING_ADD_SSLV23 0 +# define RSA_F_RSA_PADDING_ADD_X931 0 +# define RSA_F_RSA_PADDING_CHECK_NONE 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 0 +# define RSA_F_RSA_PADDING_CHECK_SSLV23 0 +# define RSA_F_RSA_PADDING_CHECK_X931 0 +# define RSA_F_RSA_PARAM_DECODE 0 +# define RSA_F_RSA_PRINT 0 +# define RSA_F_RSA_PRINT_FP 0 +# define RSA_F_RSA_PRIV_DECODE 0 +# define RSA_F_RSA_PRIV_ENCODE 0 +# define RSA_F_RSA_PSS_GET_PARAM 0 +# define RSA_F_RSA_PSS_TO_CTX 0 +# define RSA_F_RSA_PUB_DECODE 0 +# define RSA_F_RSA_SETUP_BLINDING 0 +# define RSA_F_RSA_SIGN 0 +# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 0 +# define RSA_F_RSA_VERIFY 0 +# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 0 +# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 0 +# define RSA_F_SETUP_TBUF 0 + +/* + * OSSL_STORE function codes. + */ +# define OSSL_STORE_F_FILE_CTRL 0 +# define OSSL_STORE_F_FILE_FIND 0 +# define OSSL_STORE_F_FILE_GET_PASS 0 +# define OSSL_STORE_F_FILE_LOAD 0 +# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 0 +# define OSSL_STORE_F_FILE_NAME_TO_URI 0 +# define OSSL_STORE_F_FILE_OPEN 0 +# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 0 +# define OSSL_STORE_F_OSSL_STORE_EXPECT 0 +# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 0 +# define OSSL_STORE_F_OSSL_STORE_FIND 0 +# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 0 +# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 0 +# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 0 +# define OSSL_STORE_F_OSSL_STORE_OPEN 0 +# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 0 +# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 0 +# define OSSL_STORE_F_TRY_DECODE_PARAMS 0 +# define OSSL_STORE_F_TRY_DECODE_PKCS12 0 +# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 0 + +# ifndef OPENSSL_NO_TS +/* + * TS function codes. + */ +# define TS_F_DEF_SERIAL_CB 0 +# define TS_F_DEF_TIME_CB 0 +# define TS_F_ESS_ADD_SIGNING_CERT 0 +# define TS_F_ESS_ADD_SIGNING_CERT_V2 0 +# define TS_F_ESS_CERT_ID_NEW_INIT 0 +# define TS_F_ESS_CERT_ID_V2_NEW_INIT 0 +# define TS_F_ESS_SIGNING_CERT_NEW_INIT 0 +# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 0 +# define TS_F_INT_TS_RESP_VERIFY_TOKEN 0 +# define TS_F_PKCS7_TO_TS_TST_INFO 0 +# define TS_F_TS_ACCURACY_SET_MICROS 0 +# define TS_F_TS_ACCURACY_SET_MILLIS 0 +# define TS_F_TS_ACCURACY_SET_SECONDS 0 +# define TS_F_TS_CHECK_IMPRINTS 0 +# define TS_F_TS_CHECK_NONCES 0 +# define TS_F_TS_CHECK_POLICY 0 +# define TS_F_TS_CHECK_SIGNING_CERTS 0 +# define TS_F_TS_CHECK_STATUS_INFO 0 +# define TS_F_TS_COMPUTE_IMPRINT 0 +# define TS_F_TS_CONF_INVALID 0 +# define TS_F_TS_CONF_LOAD_CERT 0 +# define TS_F_TS_CONF_LOAD_CERTS 0 +# define TS_F_TS_CONF_LOAD_KEY 0 +# define TS_F_TS_CONF_LOOKUP_FAIL 0 +# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 0 +# define TS_F_TS_GET_STATUS_TEXT 0 +# define TS_F_TS_MSG_IMPRINT_SET_ALGO 0 +# define TS_F_TS_REQ_SET_MSG_IMPRINT 0 +# define TS_F_TS_REQ_SET_NONCE 0 +# define TS_F_TS_REQ_SET_POLICY_ID 0 +# define TS_F_TS_RESP_CREATE_RESPONSE 0 +# define TS_F_TS_RESP_CREATE_TST_INFO 0 +# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 0 +# define TS_F_TS_RESP_CTX_ADD_MD 0 +# define TS_F_TS_RESP_CTX_ADD_POLICY 0 +# define TS_F_TS_RESP_CTX_NEW 0 +# define TS_F_TS_RESP_CTX_SET_ACCURACY 0 +# define TS_F_TS_RESP_CTX_SET_CERTS 0 +# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 0 +# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 0 +# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 0 +# define TS_F_TS_RESP_GET_POLICY 0 +# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 0 +# define TS_F_TS_RESP_SET_STATUS_INFO 0 +# define TS_F_TS_RESP_SET_TST_INFO 0 +# define TS_F_TS_RESP_SIGN 0 +# define TS_F_TS_RESP_VERIFY_SIGNATURE 0 +# define TS_F_TS_TST_INFO_SET_ACCURACY 0 +# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 0 +# define TS_F_TS_TST_INFO_SET_NONCE 0 +# define TS_F_TS_TST_INFO_SET_POLICY_ID 0 +# define TS_F_TS_TST_INFO_SET_SERIAL 0 +# define TS_F_TS_TST_INFO_SET_TIME 0 +# define TS_F_TS_TST_INFO_SET_TSA 0 +# define TS_F_TS_VERIFY 0 +# define TS_F_TS_VERIFY_CERT 0 +# define TS_F_TS_VERIFY_CTX_NEW 0 +# endif + +/* + * UI function codes. + */ +# define UI_F_CLOSE_CONSOLE 0 +# define UI_F_ECHO_CONSOLE 0 +# define UI_F_GENERAL_ALLOCATE_BOOLEAN 0 +# define UI_F_GENERAL_ALLOCATE_PROMPT 0 +# define UI_F_NOECHO_CONSOLE 0 +# define UI_F_OPEN_CONSOLE 0 +# define UI_F_UI_CONSTRUCT_PROMPT 0 +# define UI_F_UI_CREATE_METHOD 0 +# define UI_F_UI_CTRL 0 +# define UI_F_UI_DUP_ERROR_STRING 0 +# define UI_F_UI_DUP_INFO_STRING 0 +# define UI_F_UI_DUP_INPUT_BOOLEAN 0 +# define UI_F_UI_DUP_INPUT_STRING 0 +# define UI_F_UI_DUP_USER_DATA 0 +# define UI_F_UI_DUP_VERIFY_STRING 0 +# define UI_F_UI_GET0_RESULT 0 +# define UI_F_UI_GET_RESULT_LENGTH 0 +# define UI_F_UI_NEW_METHOD 0 +# define UI_F_UI_PROCESS 0 +# define UI_F_UI_SET_RESULT 0 +# define UI_F_UI_SET_RESULT_EX 0 + +/* + * X509 function codes. + */ +# define X509_F_ADD_CERT_DIR 0 +# define X509_F_BUILD_CHAIN 0 +# define X509_F_BY_FILE_CTRL 0 +# define X509_F_CHECK_NAME_CONSTRAINTS 0 +# define X509_F_CHECK_POLICY 0 +# define X509_F_DANE_I2D 0 +# define X509_F_DIR_CTRL 0 +# define X509_F_GET_CERT_BY_SUBJECT 0 +# define X509_F_I2D_X509_AUX 0 +# define X509_F_LOOKUP_CERTS_SK 0 +# define X509_F_NETSCAPE_SPKI_B64_DECODE 0 +# define X509_F_NETSCAPE_SPKI_B64_ENCODE 0 +# define X509_F_NEW_DIR 0 +# define X509_F_X509AT_ADD1_ATTR 0 +# define X509_F_X509V3_ADD_EXT 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 0 +# define X509_F_X509_ATTRIBUTE_GET0_DATA 0 +# define X509_F_X509_ATTRIBUTE_SET1_DATA 0 +# define X509_F_X509_CHECK_PRIVATE_KEY 0 +# define X509_F_X509_CRL_DIFF 0 +# define X509_F_X509_CRL_METHOD_NEW 0 +# define X509_F_X509_CRL_PRINT_FP 0 +# define X509_F_X509_EXTENSION_CREATE_BY_NID 0 +# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 0 +# define X509_F_X509_GET_PUBKEY_PARAMETERS 0 +# define X509_F_X509_LOAD_CERT_CRL_FILE 0 +# define X509_F_X509_LOAD_CERT_FILE 0 +# define X509_F_X509_LOAD_CRL_FILE 0 +# define X509_F_X509_LOOKUP_METH_NEW 0 +# define X509_F_X509_LOOKUP_NEW 0 +# define X509_F_X509_NAME_ADD_ENTRY 0 +# define X509_F_X509_NAME_CANON 0 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 0 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 0 +# define X509_F_X509_NAME_ENTRY_SET_OBJECT 0 +# define X509_F_X509_NAME_ONELINE 0 +# define X509_F_X509_NAME_PRINT 0 +# define X509_F_X509_OBJECT_NEW 0 +# define X509_F_X509_PRINT_EX_FP 0 +# define X509_F_X509_PUBKEY_DECODE 0 +# define X509_F_X509_PUBKEY_GET 0 +# define X509_F_X509_PUBKEY_GET0 0 +# define X509_F_X509_PUBKEY_SET 0 +# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 0 +# define X509_F_X509_REQ_PRINT_EX 0 +# define X509_F_X509_REQ_PRINT_FP 0 +# define X509_F_X509_REQ_TO_X509 0 +# define X509_F_X509_STORE_ADD_CERT 0 +# define X509_F_X509_STORE_ADD_CRL 0 +# define X509_F_X509_STORE_ADD_LOOKUP 0 +# define X509_F_X509_STORE_CTX_GET1_ISSUER 0 +# define X509_F_X509_STORE_CTX_INIT 0 +# define X509_F_X509_STORE_CTX_NEW 0 +# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 0 +# define X509_F_X509_STORE_NEW 0 +# define X509_F_X509_TO_X509_REQ 0 +# define X509_F_X509_TRUST_ADD 0 +# define X509_F_X509_TRUST_SET 0 +# define X509_F_X509_VERIFY_CERT 0 +# define X509_F_X509_VERIFY_PARAM_NEW 0 + +/* + * X509V3 function codes. + */ +# define X509V3_F_A2I_GENERAL_NAME 0 +# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 0 +# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 0 +# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 0 +# define X509V3_F_BIGNUM_TO_STRING 0 +# define X509V3_F_COPY_EMAIL 0 +# define X509V3_F_COPY_ISSUER 0 +# define X509V3_F_DO_DIRNAME 0 +# define X509V3_F_DO_EXT_I2D 0 +# define X509V3_F_DO_EXT_NCONF 0 +# define X509V3_F_GNAMES_FROM_SECTNAME 0 +# define X509V3_F_I2S_ASN1_ENUMERATED 0 +# define X509V3_F_I2S_ASN1_IA5STRING 0 +# define X509V3_F_I2S_ASN1_INTEGER 0 +# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 0 +# define X509V3_F_LEVEL_ADD_NODE 0 +# define X509V3_F_NOTICE_SECTION 0 +# define X509V3_F_NREF_NOS 0 +# define X509V3_F_POLICY_CACHE_CREATE 0 +# define X509V3_F_POLICY_CACHE_NEW 0 +# define X509V3_F_POLICY_DATA_NEW 0 +# define X509V3_F_POLICY_SECTION 0 +# define X509V3_F_PROCESS_PCI_VALUE 0 +# define X509V3_F_R2I_CERTPOL 0 +# define X509V3_F_R2I_PCI 0 +# define X509V3_F_S2I_ASN1_IA5STRING 0 +# define X509V3_F_S2I_ASN1_INTEGER 0 +# define X509V3_F_S2I_ASN1_OCTET_STRING 0 +# define X509V3_F_S2I_SKEY_ID 0 +# define X509V3_F_SET_DIST_POINT_NAME 0 +# define X509V3_F_SXNET_ADD_ID_ASC 0 +# define X509V3_F_SXNET_ADD_ID_INTEGER 0 +# define X509V3_F_SXNET_ADD_ID_ULONG 0 +# define X509V3_F_SXNET_GET_ID_ASC 0 +# define X509V3_F_SXNET_GET_ID_ULONG 0 +# define X509V3_F_TREE_INIT 0 +# define X509V3_F_V2I_ASIDENTIFIERS 0 +# define X509V3_F_V2I_ASN1_BIT_STRING 0 +# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 0 +# define X509V3_F_V2I_AUTHORITY_KEYID 0 +# define X509V3_F_V2I_BASIC_CONSTRAINTS 0 +# define X509V3_F_V2I_CRLD 0 +# define X509V3_F_V2I_EXTENDED_KEY_USAGE 0 +# define X509V3_F_V2I_GENERAL_NAMES 0 +# define X509V3_F_V2I_GENERAL_NAME_EX 0 +# define X509V3_F_V2I_IDP 0 +# define X509V3_F_V2I_IPADDRBLOCKS 0 +# define X509V3_F_V2I_ISSUER_ALT 0 +# define X509V3_F_V2I_NAME_CONSTRAINTS 0 +# define X509V3_F_V2I_POLICY_CONSTRAINTS 0 +# define X509V3_F_V2I_POLICY_MAPPINGS 0 +# define X509V3_F_V2I_SUBJECT_ALT 0 +# define X509V3_F_V2I_TLS_FEATURE 0 +# define X509V3_F_V3_GENERIC_EXTENSION 0 +# define X509V3_F_X509V3_ADD1_I2D 0 +# define X509V3_F_X509V3_ADD_VALUE 0 +# define X509V3_F_X509V3_EXT_ADD 0 +# define X509V3_F_X509V3_EXT_ADD_ALIAS 0 +# define X509V3_F_X509V3_EXT_I2D 0 +# define X509V3_F_X509V3_EXT_NCONF 0 +# define X509V3_F_X509V3_GET_SECTION 0 +# define X509V3_F_X509V3_GET_STRING 0 +# define X509V3_F_X509V3_GET_VALUE_BOOL 0 +# define X509V3_F_X509V3_PARSE_LIST 0 +# define X509V3_F_X509_PURPOSE_ADD 0 +# define X509V3_F_X509_PURPOSE_SET 0 + +/* + * Compatibility defines. + */ +# define EVP_R_OPERATON_NOT_INITIALIZED EVP_R_OPERATION_NOT_INITIALIZED + +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h index ebdba34d..b6dd8c35 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h @@ -1,19 +1,30 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ct.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CT_H -# define HEADER_CT_H + + +#ifndef OPENSSL_CT_H +# define OPENSSL_CT_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CT_H +# endif # include # ifndef OPENSSL_NO_CT -# include +# include # include # include # include @@ -28,6 +39,61 @@ extern "C" { /* All hashes are SHA256 in v1 of Certificate Transparency */ # define CT_V1_HASHLEN SHA256_DIGEST_LENGTH +SKM_DEFINE_STACK_OF_INTERNAL(SCT, SCT, SCT) +#define sk_SCT_num(sk) OPENSSL_sk_num(ossl_check_const_SCT_sk_type(sk)) +#define sk_SCT_value(sk, idx) ((SCT *)OPENSSL_sk_value(ossl_check_const_SCT_sk_type(sk), (idx))) +#define sk_SCT_new(cmp) ((STACK_OF(SCT) *)OPENSSL_sk_new(ossl_check_SCT_compfunc_type(cmp))) +#define sk_SCT_new_null() ((STACK_OF(SCT) *)OPENSSL_sk_new_null()) +#define sk_SCT_new_reserve(cmp, n) ((STACK_OF(SCT) *)OPENSSL_sk_new_reserve(ossl_check_SCT_compfunc_type(cmp), (n))) +#define sk_SCT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SCT_sk_type(sk), (n)) +#define sk_SCT_free(sk) OPENSSL_sk_free(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_zero(sk) OPENSSL_sk_zero(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_delete(sk, i) ((SCT *)OPENSSL_sk_delete(ossl_check_SCT_sk_type(sk), (i))) +#define sk_SCT_delete_ptr(sk, ptr) ((SCT *)OPENSSL_sk_delete_ptr(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr))) +#define sk_SCT_push(sk, ptr) OPENSSL_sk_push(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_pop(sk) ((SCT *)OPENSSL_sk_pop(ossl_check_SCT_sk_type(sk))) +#define sk_SCT_shift(sk) ((SCT *)OPENSSL_sk_shift(ossl_check_SCT_sk_type(sk))) +#define sk_SCT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SCT_sk_type(sk),ossl_check_SCT_freefunc_type(freefunc)) +#define sk_SCT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), (idx)) +#define sk_SCT_set(sk, idx, ptr) ((SCT *)OPENSSL_sk_set(ossl_check_SCT_sk_type(sk), (idx), ossl_check_SCT_type(ptr))) +#define sk_SCT_find(sk, ptr) OPENSSL_sk_find(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), pnum) +#define sk_SCT_sort(sk) OPENSSL_sk_sort(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SCT_sk_type(sk)) +#define sk_SCT_dup(sk) ((STACK_OF(SCT) *)OPENSSL_sk_dup(ossl_check_const_SCT_sk_type(sk))) +#define sk_SCT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SCT) *)OPENSSL_sk_deep_copy(ossl_check_const_SCT_sk_type(sk), ossl_check_SCT_copyfunc_type(copyfunc), ossl_check_SCT_freefunc_type(freefunc))) +#define sk_SCT_set_cmp_func(sk, cmp) ((sk_SCT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SCT_sk_type(sk), ossl_check_SCT_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CTLOG, CTLOG, CTLOG) +#define sk_CTLOG_num(sk) OPENSSL_sk_num(ossl_check_const_CTLOG_sk_type(sk)) +#define sk_CTLOG_value(sk, idx) ((CTLOG *)OPENSSL_sk_value(ossl_check_const_CTLOG_sk_type(sk), (idx))) +#define sk_CTLOG_new(cmp) ((STACK_OF(CTLOG) *)OPENSSL_sk_new(ossl_check_CTLOG_compfunc_type(cmp))) +#define sk_CTLOG_new_null() ((STACK_OF(CTLOG) *)OPENSSL_sk_new_null()) +#define sk_CTLOG_new_reserve(cmp, n) ((STACK_OF(CTLOG) *)OPENSSL_sk_new_reserve(ossl_check_CTLOG_compfunc_type(cmp), (n))) +#define sk_CTLOG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CTLOG_sk_type(sk), (n)) +#define sk_CTLOG_free(sk) OPENSSL_sk_free(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_zero(sk) OPENSSL_sk_zero(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_delete(sk, i) ((CTLOG *)OPENSSL_sk_delete(ossl_check_CTLOG_sk_type(sk), (i))) +#define sk_CTLOG_delete_ptr(sk, ptr) ((CTLOG *)OPENSSL_sk_delete_ptr(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr))) +#define sk_CTLOG_push(sk, ptr) OPENSSL_sk_push(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_pop(sk) ((CTLOG *)OPENSSL_sk_pop(ossl_check_CTLOG_sk_type(sk))) +#define sk_CTLOG_shift(sk) ((CTLOG *)OPENSSL_sk_shift(ossl_check_CTLOG_sk_type(sk))) +#define sk_CTLOG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CTLOG_sk_type(sk),ossl_check_CTLOG_freefunc_type(freefunc)) +#define sk_CTLOG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), (idx)) +#define sk_CTLOG_set(sk, idx, ptr) ((CTLOG *)OPENSSL_sk_set(ossl_check_CTLOG_sk_type(sk), (idx), ossl_check_CTLOG_type(ptr))) +#define sk_CTLOG_find(sk, ptr) OPENSSL_sk_find(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), pnum) +#define sk_CTLOG_sort(sk) OPENSSL_sk_sort(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CTLOG_sk_type(sk)) +#define sk_CTLOG_dup(sk) ((STACK_OF(CTLOG) *)OPENSSL_sk_dup(ossl_check_const_CTLOG_sk_type(sk))) +#define sk_CTLOG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CTLOG) *)OPENSSL_sk_deep_copy(ossl_check_const_CTLOG_sk_type(sk), ossl_check_CTLOG_copyfunc_type(copyfunc), ossl_check_CTLOG_freefunc_type(freefunc))) +#define sk_CTLOG_set_cmp_func(sk, cmp) ((sk_CTLOG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_compfunc_type(cmp))) + + + typedef enum { CT_LOG_ENTRY_TYPE_NOT_SET = -1, CT_LOG_ENTRY_TYPE_X509 = 0, @@ -55,18 +121,23 @@ typedef enum { SCT_VALIDATION_STATUS_UNKNOWN_VERSION } sct_validation_status_t; -DEFINE_STACK_OF(SCT) -DEFINE_STACK_OF(CTLOG) - /****************************************** * CT policy evaluation context functions * ******************************************/ /* - * Creates a new, empty policy evaluation context. + * Creates a new, empty policy evaluation context associated with the given + * library context and property query string. * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished * with the CT_POLICY_EVAL_CTX. */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new_ex(OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CT_POLICY_EVAL_CTX_new_ex() but the default library + * context and property query string is used. + */ CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); /* Deletes a policy evaluation context and anything it owns. */ @@ -317,7 +388,7 @@ __owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, /********************************* - * SCT parsing and serialisation * + * SCT parsing and serialization * *********************************/ /* @@ -403,19 +474,39 @@ SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); ********************/ /* - * Creates a new CT log instance with the given |public_key| and |name|. + * Creates a new CT log instance with the given |public_key| and |name| and + * associates it with the give library context |libctx| and property query + * string |propq|. * Takes ownership of |public_key| but copies |name|. * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. * Should be deleted by the caller using CTLOG_free when no longer needed. */ +CTLOG *CTLOG_new_ex(EVP_PKEY *public_key, const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_ex except that the default library context and + * property query string are used. + */ CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); /* * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER - * in |pkey_base64|. The |name| is a string to help users identify this log. + * in |pkey_base64| and associated with the given library context |libctx| and + * property query string |propq|. The |name| is a string to help users identify + * this log. * Returns 1 on success, 0 on failure. * Should be deleted by the caller using CTLOG_free when no longer needed. */ +int CTLOG_new_from_base64_ex(CTLOG **ct_log, const char *pkey_base64, + const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_from_base64_ex() except that the default + * library context and property query string are used. + * Returns 1 on success, 0 on failure. + */ int CTLOG_new_from_base64(CTLOG ** ct_log, const char *pkey_base64, const char *name); @@ -437,7 +528,15 @@ EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); **************************/ /* - * Creates a new CT log store. + * Creates a new CT log store and associates it with the given libctx and + * property query string. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +/* + * Same as CTLOG_STORE_new_ex except that the default libctx and + * property query string are used. * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. */ CTLOG_STORE *CTLOG_STORE_new(void); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h.in new file mode 100644 index 00000000..16086b33 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h.in @@ -0,0 +1,525 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CT_H +# define OPENSSL_CT_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CT_H +# endif + +# include + +# ifndef OPENSSL_NO_CT +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + + +/* Minimum RSA key size, from RFC6962 */ +# define SCT_MIN_RSA_BITS 2048 + +/* All hashes are SHA256 in v1 of Certificate Transparency */ +# define CT_V1_HASHLEN SHA256_DIGEST_LENGTH + +{- + generate_stack_macros("SCT") + .generate_stack_macros("CTLOG"); +-} + + +typedef enum { + CT_LOG_ENTRY_TYPE_NOT_SET = -1, + CT_LOG_ENTRY_TYPE_X509 = 0, + CT_LOG_ENTRY_TYPE_PRECERT = 1 +} ct_log_entry_type_t; + +typedef enum { + SCT_VERSION_NOT_SET = -1, + SCT_VERSION_V1 = 0 +} sct_version_t; + +typedef enum { + SCT_SOURCE_UNKNOWN, + SCT_SOURCE_TLS_EXTENSION, + SCT_SOURCE_X509V3_EXTENSION, + SCT_SOURCE_OCSP_STAPLED_RESPONSE +} sct_source_t; + +typedef enum { + SCT_VALIDATION_STATUS_NOT_SET, + SCT_VALIDATION_STATUS_UNKNOWN_LOG, + SCT_VALIDATION_STATUS_VALID, + SCT_VALIDATION_STATUS_INVALID, + SCT_VALIDATION_STATUS_UNVERIFIED, + SCT_VALIDATION_STATUS_UNKNOWN_VERSION +} sct_validation_status_t; + +/****************************************** + * CT policy evaluation context functions * + ******************************************/ + +/* + * Creates a new, empty policy evaluation context associated with the given + * library context and property query string. + * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished + * with the CT_POLICY_EVAL_CTX. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new_ex(OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CT_POLICY_EVAL_CTX_new_ex() but the default library + * context and property query string is used. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); + +/* Deletes a policy evaluation context and anything it owns. */ +void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx); + +/* Gets the peer certificate that the SCTs are for */ +X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the certificate associated with the received SCTs. + * Increments the reference count of cert. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert); + +/* Gets the issuer of the aforementioned certificate */ +X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the issuer of the certificate associated with the received SCTs. + * Increments the reference count of issuer. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer); + +/* Gets the CT logs that are trusted sources of SCTs */ +const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx); + +/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */ +void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx, + CTLOG_STORE *log_store); + +/* + * Gets the time, in milliseconds since the Unix epoch, that will be used as the + * current time when checking whether an SCT was issued in the future. + * Such SCTs will fail validation, as required by RFC6962. + */ +uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the time to evaluate SCTs against, in milliseconds since the Unix epoch. + * If an SCT's timestamp is after this time, it will be interpreted as having + * been issued in the future. RFC6962 states that "TLS clients MUST reject SCTs + * whose timestamp is in the future", so an SCT will not validate in this case. + */ +void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms); + +/***************** + * SCT functions * + *****************/ + +/* + * Creates a new, blank SCT. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new(void); + +/* + * Creates a new SCT from some base64-encoded strings. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new_from_base64(unsigned char version, + const char *logid_base64, + ct_log_entry_type_t entry_type, + uint64_t timestamp, + const char *extensions_base64, + const char *signature_base64); + +/* + * Frees the SCT and the underlying data structures. + */ +void SCT_free(SCT *sct); + +/* + * Free a stack of SCTs, and the underlying SCTs themselves. + * Intended to be compatible with X509V3_EXT_FREE. + */ +void SCT_LIST_free(STACK_OF(SCT) *a); + +/* + * Returns the version of the SCT. + */ +sct_version_t SCT_get_version(const SCT *sct); + +/* + * Set the version of an SCT. + * Returns 1 on success, 0 if the version is unrecognized. + */ +__owur int SCT_set_version(SCT *sct, sct_version_t version); + +/* + * Returns the log entry type of the SCT. + */ +ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct); + +/* + * Set the log entry type of an SCT. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type); + +/* + * Gets the ID of the log that an SCT came from. + * Ownership of the log ID remains with the SCT. + * Returns the length of the log ID. + */ +size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id); + +/* + * Set the log ID of an SCT to point directly to the *log_id specified. + * The SCT takes ownership of the specified pointer. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len); + +/* + * Set the log ID of an SCT. + * This makes a copy of the log_id. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_log_id(SCT *sct, const unsigned char *log_id, + size_t log_id_len); + +/* + * Returns the timestamp for the SCT (epoch time in milliseconds). + */ +uint64_t SCT_get_timestamp(const SCT *sct); + +/* + * Set the timestamp of an SCT (epoch time in milliseconds). + */ +void SCT_set_timestamp(SCT *sct, uint64_t timestamp); + +/* + * Return the NID for the signature used by the SCT. + * For CT v1, this will be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256 (or NID_undef if incorrect/unset). + */ +int SCT_get_signature_nid(const SCT *sct); + +/* + * Set the signature type of an SCT + * For CT v1, this should be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_signature_nid(SCT *sct, int nid); + +/* + * Set *ext to point to the extension data for the SCT. ext must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext); + +/* + * Set the extensions of an SCT to point directly to the *ext specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len); + +/* + * Set the extensions of an SCT. + * This takes a copy of the ext. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_extensions(SCT *sct, const unsigned char *ext, + size_t ext_len); + +/* + * Set *sig to point to the signature for the SCT. sig must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_signature(const SCT *sct, unsigned char **sig); + +/* + * Set the signature of an SCT to point directly to the *sig specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len); + +/* + * Set the signature of an SCT to be a copy of the *sig specified. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_signature(SCT *sct, const unsigned char *sig, + size_t sig_len); + +/* + * The origin of this SCT, e.g. TLS extension, OCSP response, etc. + */ +sct_source_t SCT_get_source(const SCT *sct); + +/* + * Set the origin of this SCT, e.g. TLS extension, OCSP response, etc. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_source(SCT *sct, sct_source_t source); + +/* + * Returns a text string describing the validation status of |sct|. + */ +const char *SCT_validation_status_string(const SCT *sct); + +/* + * Pretty-prints an |sct| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * If |logs| is not NULL, it will be used to lookup the CT log that the SCT came + * from, so that the log name can be printed. + */ +void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs); + +/* + * Pretty-prints an |sct_list| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * SCTs will be delimited by |separator|. + * If |logs| is not NULL, it will be used to lookup the CT log that each SCT + * came from, so that the log names can be printed. + */ +void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent, + const char *separator, const CTLOG_STORE *logs); + +/* + * Gets the last result of validating this SCT. + * If it has not been validated yet, returns SCT_VALIDATION_STATUS_NOT_SET. + */ +sct_validation_status_t SCT_get_validation_status(const SCT *sct); + +/* + * Validates the given SCT with the provided context. + * Sets the "validation_status" field of the SCT. + * Returns 1 if the SCT is valid and the signature verifies. + * Returns 0 if the SCT is invalid or could not be verified. + * Returns -1 if an error occurs. + */ +__owur int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx); + +/* + * Validates the given list of SCTs with the provided context. + * Sets the "validation_status" field of each SCT. + * Returns 1 if there are no invalid SCTs and all signatures verify. + * Returns 0 if at least one SCT is invalid or could not be verified. + * Returns a negative integer if an error occurs. + */ +__owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, + CT_POLICY_EVAL_CTX *ctx); + + +/********************************* + * SCT parsing and serialization * + *********************************/ + +/* + * Serialize (to TLS format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just return the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Convert TLS format SCT list to a stack of SCTs. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + size_t len); + +/* + * Serialize (to DER format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just returns the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Parses an SCT list in DER format and returns it. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + long len); + +/* + * Serialize (to TLS format) an |sct| and write it to |out|. + * If |out| is null, no SCT will be output but the length will still be returned. + * If |out| points to a null pointer, a string will be allocated to hold the + * TLS-format SCT. It is the responsibility of the caller to free it. + * If |out| points to an allocated string, the TLS-format SCT will be written + * to it. + * The length of the SCT in TLS format will be returned. + */ +__owur int i2o_SCT(const SCT *sct, unsigned char **out); + +/* + * Parses an SCT in TLS format and returns it. + * If |psct| is not null, it will end up pointing to the parsed SCT. If it + * already points to a non-null pointer, the pointer will be free'd. + * |in| should be a pointer to a string containing the TLS-format SCT. + * |in| will be advanced to the end of the SCT if parsing succeeds. + * |len| should be the length of the SCT in |in|. + * Returns NULL if an error occurs. + * If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len' + * fields will be populated (with |in| and |len| respectively). + */ +SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); + +/******************** + * CT log functions * + ********************/ + +/* + * Creates a new CT log instance with the given |public_key| and |name| and + * associates it with the give library context |libctx| and property query + * string |propq|. + * Takes ownership of |public_key| but copies |name|. + * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +CTLOG *CTLOG_new_ex(EVP_PKEY *public_key, const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_ex except that the default library context and + * property query string are used. + */ +CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); + +/* + * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER + * in |pkey_base64| and associated with the given library context |libctx| and + * property query string |propq|. The |name| is a string to help users identify + * this log. + * Returns 1 on success, 0 on failure. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +int CTLOG_new_from_base64_ex(CTLOG **ct_log, const char *pkey_base64, + const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_from_base64_ex() except that the default + * library context and property query string are used. + * Returns 1 on success, 0 on failure. + */ +int CTLOG_new_from_base64(CTLOG ** ct_log, + const char *pkey_base64, const char *name); + +/* + * Deletes a CT log instance and its fields. + */ +void CTLOG_free(CTLOG *log); + +/* Gets the name of the CT log */ +const char *CTLOG_get0_name(const CTLOG *log); +/* Gets the ID of the CT log */ +void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id, + size_t *log_id_len); +/* Gets the public key of the CT log */ +EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); + +/************************** + * CT log store functions * + **************************/ + +/* + * Creates a new CT log store and associates it with the given libctx and + * property query string. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +/* + * Same as CTLOG_STORE_new_ex except that the default libctx and + * property query string are used. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new(void); + +/* + * Deletes a CT log store and all of the CT log instances held within. + */ +void CTLOG_STORE_free(CTLOG_STORE *store); + +/* + * Finds a CT log in the store based on its log ID. + * Returns the CT log, or NULL if no match is found. + */ +const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store, + const uint8_t *log_id, + size_t log_id_len); + +/* + * Loads a CT log list into a |store| from a |file|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); + +/* + * Loads the default CT log list into a |store|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cterr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cterr.h index feb7bc56..935d32d8 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cterr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cterr.h @@ -1,59 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CTERR_H -# define HEADER_CTERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_CTERR_H +# define OPENSSL_CTERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_CT -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CT_strings(void); - -/* - * CT function codes. - */ -# define CT_F_CTLOG_NEW 117 -# define CT_F_CTLOG_NEW_FROM_BASE64 118 -# define CT_F_CTLOG_NEW_FROM_CONF 119 -# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 -# define CT_F_CTLOG_STORE_LOAD_FILE 123 -# define CT_F_CTLOG_STORE_LOAD_LOG 130 -# define CT_F_CTLOG_STORE_NEW 131 -# define CT_F_CT_BASE64_DECODE 124 -# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 -# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 -# define CT_F_I2O_SCT 107 -# define CT_F_I2O_SCT_LIST 108 -# define CT_F_I2O_SCT_SIGNATURE 109 -# define CT_F_O2I_SCT 110 -# define CT_F_O2I_SCT_LIST 111 -# define CT_F_O2I_SCT_SIGNATURE 112 -# define CT_F_SCT_CTX_NEW 126 -# define CT_F_SCT_CTX_VERIFY 128 -# define CT_F_SCT_NEW 100 -# define CT_F_SCT_NEW_FROM_BASE64 127 -# define CT_F_SCT_SET0_LOG_ID 101 -# define CT_F_SCT_SET1_EXTENSIONS 114 -# define CT_F_SCT_SET1_LOG_ID 115 -# define CT_F_SCT_SET1_SIGNATURE 116 -# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 -# define CT_F_SCT_SET_SIGNATURE_NID 103 -# define CT_F_SCT_SET_VERSION 104 /* * CT reason codes. diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/decoder.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/decoder.h new file mode 100644 index 00000000..d4ee2cf4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/decoder.h @@ -0,0 +1,133 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_DECODER_H +# define OPENSSL_DECODER_H +# pragma once + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_DECODER *OSSL_DECODER_fetch(OSSL_LIB_CTX *libctx, const char *name, + const char *properties); +int OSSL_DECODER_up_ref(OSSL_DECODER *encoder); +void OSSL_DECODER_free(OSSL_DECODER *encoder); + +const OSSL_PROVIDER *OSSL_DECODER_get0_provider(const OSSL_DECODER *encoder); +const char *OSSL_DECODER_get0_properties(const OSSL_DECODER *encoder); +const char *OSSL_DECODER_get0_name(const OSSL_DECODER *decoder); +const char *OSSL_DECODER_get0_description(const OSSL_DECODER *decoder); +int OSSL_DECODER_is_a(const OSSL_DECODER *encoder, const char *name); + +void OSSL_DECODER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_DECODER *encoder, void *arg), + void *arg); +int OSSL_DECODER_names_do_all(const OSSL_DECODER *encoder, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *OSSL_DECODER_gettable_params(OSSL_DECODER *decoder); +int OSSL_DECODER_get_params(OSSL_DECODER *decoder, OSSL_PARAM params[]); + +const OSSL_PARAM *OSSL_DECODER_settable_ctx_params(OSSL_DECODER *encoder); +OSSL_DECODER_CTX *OSSL_DECODER_CTX_new(void); +int OSSL_DECODER_CTX_set_params(OSSL_DECODER_CTX *ctx, + const OSSL_PARAM params[]); +void OSSL_DECODER_CTX_free(OSSL_DECODER_CTX *ctx); + +/* Utilities that help set specific parameters */ +int OSSL_DECODER_CTX_set_passphrase(OSSL_DECODER_CTX *ctx, + const unsigned char *kstr, size_t klen); +int OSSL_DECODER_CTX_set_pem_password_cb(OSSL_DECODER_CTX *ctx, + pem_password_cb *cb, void *cbarg); +int OSSL_DECODER_CTX_set_passphrase_cb(OSSL_DECODER_CTX *ctx, + OSSL_PASSPHRASE_CALLBACK *cb, + void *cbarg); +int OSSL_DECODER_CTX_set_passphrase_ui(OSSL_DECODER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); + +/* + * Utilities to read the object to decode, with the result sent to cb. + * These will discover all provided methods + */ + +int OSSL_DECODER_CTX_set_selection(OSSL_DECODER_CTX *ctx, int selection); +int OSSL_DECODER_CTX_set_input_type(OSSL_DECODER_CTX *ctx, + const char *input_type); +int OSSL_DECODER_CTX_set_input_structure(OSSL_DECODER_CTX *ctx, + const char *input_structure); +int OSSL_DECODER_CTX_add_decoder(OSSL_DECODER_CTX *ctx, OSSL_DECODER *decoder); +int OSSL_DECODER_CTX_add_extra(OSSL_DECODER_CTX *ctx, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_DECODER_CTX_get_num_decoders(OSSL_DECODER_CTX *ctx); + +typedef struct ossl_decoder_instance_st OSSL_DECODER_INSTANCE; +OSSL_DECODER * +OSSL_DECODER_INSTANCE_get_decoder(OSSL_DECODER_INSTANCE *decoder_inst); +void * +OSSL_DECODER_INSTANCE_get_decoder_ctx(OSSL_DECODER_INSTANCE *decoder_inst); +const char * +OSSL_DECODER_INSTANCE_get_input_type(OSSL_DECODER_INSTANCE *decoder_inst); +const char * +OSSL_DECODER_INSTANCE_get_input_structure(OSSL_DECODER_INSTANCE *decoder_inst, + int *was_set); + +typedef int OSSL_DECODER_CONSTRUCT(OSSL_DECODER_INSTANCE *decoder_inst, + const OSSL_PARAM *params, + void *construct_data); +typedef void OSSL_DECODER_CLEANUP(void *construct_data); + +int OSSL_DECODER_CTX_set_construct(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_CONSTRUCT *construct); +int OSSL_DECODER_CTX_set_construct_data(OSSL_DECODER_CTX *ctx, + void *construct_data); +int OSSL_DECODER_CTX_set_cleanup(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_CLEANUP *cleanup); +OSSL_DECODER_CONSTRUCT *OSSL_DECODER_CTX_get_construct(OSSL_DECODER_CTX *ctx); +void *OSSL_DECODER_CTX_get_construct_data(OSSL_DECODER_CTX *ctx); +OSSL_DECODER_CLEANUP *OSSL_DECODER_CTX_get_cleanup(OSSL_DECODER_CTX *ctx); + +int OSSL_DECODER_export(OSSL_DECODER_INSTANCE *decoder_inst, + void *reference, size_t reference_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg); + +int OSSL_DECODER_from_bio(OSSL_DECODER_CTX *ctx, BIO *in); +#ifndef OPENSSL_NO_STDIO +int OSSL_DECODER_from_fp(OSSL_DECODER_CTX *ctx, FILE *in); +#endif +int OSSL_DECODER_from_data(OSSL_DECODER_CTX *ctx, const unsigned char **pdata, + size_t *pdata_len); + +/* + * Create the OSSL_DECODER_CTX with an associated type. This will perform + * an implicit OSSL_DECODER_fetch(), suitable for the object of that type. + */ +OSSL_DECODER_CTX * +OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey, + const char *input_type, + const char *input_struct, + const char *keytype, int selection, + OSSL_LIB_CTX *libctx, const char *propquery); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/decodererr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/decodererr.h new file mode 100644 index 00000000..4212a38b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/decodererr.h @@ -0,0 +1,28 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_DECODERERR_H +# define OPENSSL_DECODERERR_H +# pragma once + +# include +# include +# include + + + +/* + * OSSL_DECODER reason codes. + */ +# define OSSL_DECODER_R_COULD_NOT_DECODE_OBJECT 101 +# define OSSL_DECODER_R_DECODER_NOT_FOUND 102 +# define OSSL_DECODER_R_MISSING_GET_PARAMS 100 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/des.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/des.h index be4abbdf..09798a61 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/des.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/des.h @@ -1,29 +1,36 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DES_H -# define HEADER_DES_H +#ifndef OPENSSL_DES_H +# define OPENSSL_DES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DES_H +# endif # include # ifndef OPENSSL_NO_DES -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif -# include +# endif +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int DES_LONG; -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif typedef unsigned char DES_cblock[8]; typedef /* const */ unsigned char const_DES_cblock[8]; @@ -42,53 +49,62 @@ typedef struct DES_ks { } ks[16]; } DES_key_schedule; -# define DES_KEY_SZ (sizeof(DES_cblock)) -# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) +# define DES_KEY_SZ (sizeof(DES_cblock)) +# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) -# define DES_ENCRYPT 1 -# define DES_DECRYPT 0 +# define DES_ENCRYPT 1 +# define DES_DECRYPT 0 -# define DES_CBC_MODE 0 -# define DES_PCBC_MODE 1 +# define DES_CBC_MODE 0 +# define DES_PCBC_MODE 1 -# define DES_ecb2_encrypt(i,o,k1,k2,e) \ +# define DES_ecb2_encrypt(i,o,k1,k2,e) \ DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) -# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ +# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) -# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ +# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) -# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ +# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) -OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ -# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) - -const char *DES_options(void); +# define DES_fixup_key_parity DES_set_odd_parity +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *DES_options(void); +OSSL_DEPRECATEDIN_3_0 void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, int enc); +OSSL_DEPRECATEDIN_3_0 DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, long length, DES_key_schedule *schedule, const_DES_cblock *ivec); +# endif /* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, const_DES_cblock *inw, - const_DES_cblock *outw, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + const_DES_cblock *inw, const_DES_cblock *outw, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks, int enc); +# endif /* * This is the DES encryption function that gets called by just about every @@ -100,7 +116,10 @@ void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, * long's and ks is the DES_key_schedule to use. enc, is non zero specifies * encryption, zero if decryption. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); +# endif /* * This functions is the same as DES_encrypt1() except that the DES initial @@ -110,65 +129,83 @@ void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() * DES_encrypt1() DES_encrypt1() except faster :-). */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); - -void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 +void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 +void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, DES_cblock *ivec, int enc); + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int *num); +OSSL_DEPRECATEDIN_3_0 char *DES_fcrypt(const char *buf, const char *salt, char *ret); +OSSL_DEPRECATEDIN_3_0 char *DES_crypt(const char *buf, const char *salt); +OSSL_DEPRECATEDIN_3_0 void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec); + long length, DES_key_schedule *schedule, DES_cblock *ivec); +OSSL_DEPRECATEDIN_3_0 void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], long length, int out_count, DES_cblock *seed); -int DES_random_key(DES_cblock *ret); -void DES_set_odd_parity(DES_cblock *key); -int DES_check_key_parity(const_DES_cblock *key); -int DES_is_weak_key(const_DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_random_key(DES_cblock *ret); +OSSL_DEPRECATEDIN_3_0 void DES_set_odd_parity(DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_check_key_parity(const_DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_is_weak_key(const_DES_cblock *key); +# endif /* * DES_set_key (= set_key = DES_key_sched = key_sched) calls - * DES_set_key_checked if global variable DES_check_key is set, - * DES_set_key_unchecked otherwise. + * DES_set_key_checked */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); -void DES_string_to_key(const char *str, DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 void DES_string_to_key(const char *str, DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); +OSSL_DEPRECATEDIN_3_0 void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec, int *num); +# endif -# define DES_fixup_key_parity DES_set_odd_parity - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h index 6c6ff363..8bc17448 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h @@ -1,316 +1,62 @@ /* * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DH_H -# define HEADER_DH_H +#ifndef OPENSSL_DH_H +# define OPENSSL_DH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DH_H +# endif # include - -# ifndef OPENSSL_NO_DH -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include +# include # ifdef __cplusplus extern "C" { # endif -# ifndef OPENSSL_DH_MAX_MODULUS_BITS -# define OPENSSL_DH_MAX_MODULUS_BITS 10000 -# endif -# ifndef OPENSSL_DH_CHECK_MAX_MODULUS_BITS -# define OPENSSL_DH_CHECK_MAX_MODULUS_BITS 32768 -# endif +#include -# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 +/* DH parameter generation types used by EVP_PKEY_CTX_set_dh_paramgen_type() */ +# define DH_PARAMGEN_TYPE_GENERATOR 0 /* Use a safe prime generator */ +# define DH_PARAMGEN_TYPE_FIPS_186_2 1 /* Use FIPS186-2 standard */ +# define DH_PARAMGEN_TYPE_FIPS_186_4 2 /* Use FIPS186-4 standard */ +# define DH_PARAMGEN_TYPE_GROUP 3 /* Use a named safe prime group */ -# define DH_FLAG_CACHE_MONT_P 0x01 +int EVP_PKEY_CTX_set_dh_paramgen_type(EVP_PKEY_CTX *ctx, int typ); +int EVP_PKEY_CTX_set_dh_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); +int EVP_PKEY_CTX_set_dh_paramgen_seed(EVP_PKEY_CTX *ctx, + const unsigned char *seed, + size_t seedlen); +int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int pbits); +int EVP_PKEY_CTX_set_dh_paramgen_subprime_len(EVP_PKEY_CTX *ctx, int qlen); +int EVP_PKEY_CTX_set_dh_paramgen_generator(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid); +int EVP_PKEY_CTX_set_dh_rfc5114(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dhx_rfc5114(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad); -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * Does nothing. Previously this switched off constant time behaviour. - */ -# define DH_FLAG_NO_EXP_CONSTTIME 0x00 -# endif - -/* - * If this flag is set the DH method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define DH_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DH_FLAG_NON_FIPS_ALLOW 0x0400 - -/* Already defined in ossl_typ.h */ -/* typedef struct dh_st DH; */ -/* typedef struct dh_method DH_METHOD; */ - -DECLARE_ASN1_ITEM(DHparams) - -# define DH_GENERATOR_2 2 -/* #define DH_GENERATOR_3 3 */ -# define DH_GENERATOR_5 5 - -/* DH_check error codes */ -# define DH_CHECK_P_NOT_PRIME 0x01 -# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 -# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 -# define DH_NOT_SUITABLE_GENERATOR 0x08 -# define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 -# define DH_CHECK_INVALID_J_VALUE 0x40 - -/* DH_check_pub_key error codes */ -# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 -# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 -# define DH_CHECK_PUBKEY_INVALID 0x04 - -/* - * primes p where (p-1)/2 is prime too are called "safe"; we define this for - * backward compatibility: - */ -# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME - -# define d2i_DHparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) -# define d2i_DHparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) -# define i2d_DHparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) - -# define d2i_DHxparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHxparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHxparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) -# define d2i_DHxparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) -# define i2d_DHxparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH, i2d_DHxparams, bp, x) - -DH *DHparams_dup(DH *); - -const DH_METHOD *DH_OpenSSL(void); - -void DH_set_default_method(const DH_METHOD *meth); -const DH_METHOD *DH_get_default_method(void); -int DH_set_method(DH *dh, const DH_METHOD *meth); -DH *DH_new_method(ENGINE *engine); - -DH *DH_new(void); -void DH_free(DH *dh); -int DH_up_ref(DH *dh); -int DH_bits(const DH *dh); -int DH_size(const DH *dh); -int DH_security_bits(const DH *dh); -#define DH_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) -int DH_set_ex_data(DH *d, int idx, void *arg); -void *DH_get_ex_data(DH *d, int idx); - -/* Deprecated version */ -DEPRECATEDIN_0_9_8(DH *DH_generate_parameters(int prime_len, int generator, - void (*callback) (int, int, - void *), - void *cb_arg)) - -/* New version */ -int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, - BN_GENCB *cb); - -int DH_check_params_ex(const DH *dh); -int DH_check_ex(const DH *dh); -int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); -int DH_check_params(const DH *dh, int *ret); -int DH_check(const DH *dh, int *codes); -int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); -int DH_generate_key(DH *dh); -int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); -DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); -int i2d_DHparams(const DH *a, unsigned char **pp); -DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); -int i2d_DHxparams(const DH *a, unsigned char **pp); -# ifndef OPENSSL_NO_STDIO -int DHparams_print_fp(FILE *fp, const DH *x); -# endif -int DHparams_print(BIO *bp, const DH *x); - -/* RFC 5114 parameters */ -DH *DH_get_1024_160(void); -DH *DH_get_2048_224(void); -DH *DH_get_2048_256(void); - -/* Named parameters, currently RFC7919 */ -DH *DH_new_by_nid(int nid); -int DH_get_nid(const DH *dh); - -# ifndef OPENSSL_NO_CMS -/* RFC2631 KDF */ -int DH_KDF_X9_42(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - ASN1_OBJECT *key_oid, - const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); -# endif - -void DH_get0_pqg(const DH *dh, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DH_get0_key(const DH *dh, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DH_get0_p(const DH *dh); -const BIGNUM *DH_get0_q(const DH *dh); -const BIGNUM *DH_get0_g(const DH *dh); -const BIGNUM *DH_get0_priv_key(const DH *dh); -const BIGNUM *DH_get0_pub_key(const DH *dh); -void DH_clear_flags(DH *dh, int flags); -int DH_test_flags(const DH *dh, int flags); -void DH_set_flags(DH *dh, int flags); -ENGINE *DH_get0_engine(DH *d); -long DH_get_length(const DH *dh); -int DH_set_length(DH *dh, long length); - -DH_METHOD *DH_meth_new(const char *name, int flags); -void DH_meth_free(DH_METHOD *dhm); -DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); -const char *DH_meth_get0_name(const DH_METHOD *dhm); -int DH_meth_set1_name(DH_METHOD *dhm, const char *name); -int DH_meth_get_flags(const DH_METHOD *dhm); -int DH_meth_set_flags(DH_METHOD *dhm, int flags); -void *DH_meth_get0_app_data(const DH_METHOD *dhm); -int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); -int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *)); -int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) - (unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_meth_set_compute_key(DH_METHOD *dhm, - int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh)); -int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) - (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *, BN_MONT_CTX *); -int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, - int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); -int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); -int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); -int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) - (DH *, int, int, BN_GENCB *); -int DH_meth_set_generate_params(DH_METHOD *dhm, - int (*generate_params) (DH *, int, int, BN_GENCB *)); - - -# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, \ - EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_DH_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_dh_pad(ctx, pad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_PAD, pad, NULL) - -# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)(oid)) - -# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)(poid)) - -# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)(plen)) - -# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)(p)) +int EVP_PKEY_CTX_set_dh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +int EVP_PKEY_CTX_get_dh_kdf_type(EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_set0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT *oid); +int EVP_PKEY_CTX_get0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT **oid); +int EVP_PKEY_CTX_set_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_get_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_set_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +int EVP_PKEY_CTX_get_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); +int EVP_PKEY_CTX_set0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_get0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); +#endif # define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) @@ -331,13 +77,259 @@ int DH_meth_set_generate_params(DH_METHOD *dhm, /* KDF types */ # define EVP_PKEY_DH_KDF_NONE 1 -# ifndef OPENSSL_NO_CMS # define EVP_PKEY_DH_KDF_X9_42 2 + +# ifndef OPENSSL_NO_STDIO +# include # endif - - -# ifdef __cplusplus -} +# ifndef OPENSSL_NO_DH +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include # endif +# include + +# ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +# endif + +# ifndef OPENSSL_DH_CHECK_MAX_MODULUS_BITS +# define OPENSSL_DH_CHECK_MAX_MODULUS_BITS 32768 +# endif + +# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 + +# define DH_FLAG_CACHE_MONT_P 0x01 + +# define DH_FLAG_TYPE_MASK 0xF000 +# define DH_FLAG_TYPE_DH 0x0000 +# define DH_FLAG_TYPE_DHX 0x1000 + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DH_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * If this flag is set the DH method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define DH_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DH_FLAG_NON_FIPS_ALLOW 0x0400 +# endif + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +DECLARE_ASN1_ITEM(DHparams) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DH_GENERATOR_2 2 +# define DH_GENERATOR_3 3 +# define DH_GENERATOR_5 5 + +/* DH_check error codes */ +/* + * NB: These values must align with the equivalently named macros in + * internal/ffc.h. + */ +# define DH_CHECK_P_NOT_PRIME 0x01 +# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 +# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 +# define DH_NOT_SUITABLE_GENERATOR 0x08 +# define DH_CHECK_Q_NOT_PRIME 0x10 +# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_J_VALUE 0x40 +# define DH_MODULUS_TOO_SMALL 0x80 +# define DH_MODULUS_TOO_LARGE 0x100 + +/* DH_check_pub_key error codes */ +# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 +# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 +# define DH_CHECK_PUBKEY_INVALID 0x04 + +/* + * primes p where (p-1)/2 is prime too are called "safe"; we define this for + * backward compatibility: + */ +# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME + +# define d2i_DHparams_fp(fp, x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) +# define d2i_DHparams_bio(bp, x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) +# define i2d_DHparams_bio(bp, x) \ + ASN1_i2d_bio_of(DH, i2d_DHparams, bp, x) + +# define d2i_DHxparams_fp(fp,x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHxparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHxparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) +# define d2i_DHxparams_bio(bp, x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) +# define i2d_DHxparams_bio(bp, x) \ + ASN1_i2d_bio_of(DH, i2d_DHxparams, bp, x) + +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, DH, DHparams) + +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *DH_OpenSSL(void); + +OSSL_DEPRECATEDIN_3_0 void DH_set_default_method(const DH_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *DH_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 int DH_set_method(DH *dh, const DH_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 DH *DH_new_method(ENGINE *engine); + +OSSL_DEPRECATEDIN_3_0 DH *DH_new(void); +OSSL_DEPRECATEDIN_3_0 void DH_free(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_up_ref(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_bits(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_size(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_security_bits(const DH *dh); + +# define DH_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) + +OSSL_DEPRECATEDIN_3_0 int DH_set_ex_data(DH *d, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *DH_get_ex_data(const DH *d, int idx); + +OSSL_DEPRECATEDIN_3_0 int DH_generate_parameters_ex(DH *dh, int prime_len, + int generator, + BN_GENCB *cb); + +OSSL_DEPRECATEDIN_3_0 int DH_check_params_ex(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_check_ex(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); +OSSL_DEPRECATEDIN_3_0 int DH_check_params(const DH *dh, int *ret); +OSSL_DEPRECATEDIN_3_0 int DH_check(const DH *dh, int *codes); +OSSL_DEPRECATEDIN_3_0 int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, + int *codes); +OSSL_DEPRECATEDIN_3_0 int DH_generate_key(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_compute_key(unsigned char *key, + const BIGNUM *pub_key, DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_compute_key_padded(unsigned char *key, + const BIGNUM *pub_key, DH *dh); + +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, DH, DHparams) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, DH, DHxparams) + +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int DHparams_print_fp(FILE *fp, const DH *x); +# endif +OSSL_DEPRECATEDIN_3_0 int DHparams_print(BIO *bp, const DH *x); + +/* RFC 5114 parameters */ +OSSL_DEPRECATEDIN_3_0 DH *DH_get_1024_160(void); +OSSL_DEPRECATEDIN_3_0 DH *DH_get_2048_224(void); +OSSL_DEPRECATEDIN_3_0 DH *DH_get_2048_256(void); + +/* Named parameters, currently RFC7919 and RFC3526 */ +OSSL_DEPRECATEDIN_3_0 DH *DH_new_by_nid(int nid); +OSSL_DEPRECATEDIN_3_0 int DH_get_nid(const DH *dh); + +/* RFC2631 KDF */ +OSSL_DEPRECATEDIN_3_0 int DH_KDF_X9_42(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + ASN1_OBJECT *key_oid, + const unsigned char *ukm, + size_t ukmlen, const EVP_MD *md); + +OSSL_DEPRECATEDIN_3_0 void DH_get0_pqg(const DH *dh, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +OSSL_DEPRECATEDIN_3_0 int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 void DH_get0_key(const DH *dh, const BIGNUM **pub_key, + const BIGNUM **priv_key); +OSSL_DEPRECATEDIN_3_0 int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_p(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_q(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_g(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_priv_key(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_pub_key(const DH *dh); +OSSL_DEPRECATEDIN_3_0 void DH_clear_flags(DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 int DH_test_flags(const DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 void DH_set_flags(DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 ENGINE *DH_get0_engine(DH *d); +OSSL_DEPRECATEDIN_3_0 long DH_get_length(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_set_length(DH *dh, long length); + +OSSL_DEPRECATEDIN_3_0 DH_METHOD *DH_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void DH_meth_free(DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 const char *DH_meth_get0_name(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set1_name(DH_METHOD *dhm, const char *name); +OSSL_DEPRECATEDIN_3_0 int DH_meth_get_flags(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_flags(DH_METHOD *dhm, int flags); +OSSL_DEPRECATEDIN_3_0 void *DH_meth_get0_app_data(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_generate_key(DH_METHOD *dhm, + int (*generate_key) (DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) + (unsigned char *key, + const BIGNUM *pub_key, + DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_compute_key(DH_METHOD *dhm, + int (*compute_key) + (unsigned char *key, + const BIGNUM *pub_key, + DH *dh)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) + (const DH *, BIGNUM *, + const BIGNUM *, + const BIGNUM *, + const BIGNUM *, BN_CTX *, + BN_MONT_CTX *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, + int (*bn_mod_exp) + (const DH *, BIGNUM *, + const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, + BN_MONT_CTX *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) + (DH *, int, int, + BN_GENCB *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_generate_params(DH_METHOD *dhm, + int (*generate_params) + (DH *, int, int, + BN_GENCB *)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 DH *DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, + void *), + void *cb_arg); +# endif + +# endif +# ifdef __cplusplus +} # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h index 528c8198..5d2a762a 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h @@ -1,63 +1,29 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DHERR_H -# define HEADER_DHERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_DHERR_H +# define OPENSSL_DHERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_DH -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DH_strings(void); - -/* - * DH function codes. - */ -# define DH_F_COMPUTE_KEY 102 -# define DH_F_DHPARAMS_PRINT_FP 101 -# define DH_F_DH_BUILTIN_GENPARAMS 106 -# define DH_F_DH_CHECK 126 -# define DH_F_DH_CHECK_EX 121 -# define DH_F_DH_CHECK_PARAMS_EX 122 -# define DH_F_DH_CHECK_PUB_KEY_EX 123 -# define DH_F_DH_CMS_DECRYPT 114 -# define DH_F_DH_CMS_SET_PEERKEY 115 -# define DH_F_DH_CMS_SET_SHARED_INFO 116 -# define DH_F_DH_METH_DUP 117 -# define DH_F_DH_METH_NEW 118 -# define DH_F_DH_METH_SET1_NAME 119 -# define DH_F_DH_NEW_BY_NID 104 -# define DH_F_DH_NEW_METHOD 105 -# define DH_F_DH_PARAM_DECODE 107 -# define DH_F_DH_PKEY_PUBLIC_CHECK 124 -# define DH_F_DH_PRIV_DECODE 110 -# define DH_F_DH_PRIV_ENCODE 111 -# define DH_F_DH_PUB_DECODE 108 -# define DH_F_DH_PUB_ENCODE 109 -# define DH_F_DO_DH_PRINT 100 -# define DH_F_GENERATE_KEY 103 -# define DH_F_PKEY_DH_CTRL_STR 120 -# define DH_F_PKEY_DH_DERIVE 112 -# define DH_F_PKEY_DH_INIT 125 -# define DH_F_PKEY_DH_KEYGEN 113 /* * DH reason codes. */ +# define DH_R_BAD_FFC_PARAMETERS 127 # define DH_R_BAD_GENERATOR 101 # define DH_R_BN_DECODE_ERROR 109 # define DH_R_BN_ERROR 106 @@ -73,10 +39,12 @@ int ERR_load_DH_strings(void); # define DH_R_INVALID_PARAMETER_NAME 110 # define DH_R_INVALID_PARAMETER_NID 114 # define DH_R_INVALID_PUBKEY 102 +# define DH_R_INVALID_SECRET 128 # define DH_R_KDF_PARAMETER_ERROR 112 # define DH_R_KEYS_NOT_SET 108 # define DH_R_MISSING_PUBKEY 125 # define DH_R_MODULUS_TOO_LARGE 103 +# define DH_R_MODULUS_TOO_SMALL 126 # define DH_R_NOT_SUITABLE_GENERATOR 120 # define DH_R_NO_PARAMETERS_SET 107 # define DH_R_NO_PRIVATE_VALUE 100 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h index 6d8a18a4..160404cc 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h @@ -1,44 +1,85 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DSA_H -# define HEADER_DSA_H +#ifndef OPENSSL_DSA_H +# define OPENSSL_DSA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DSA_H +# endif # include +# include + +# include # ifndef OPENSSL_NO_DSA +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif +# endif + # ifdef __cplusplus extern "C" { # endif -# include -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include -# ifndef OPENSSL_DSA_MAX_MODULUS_BITS -# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 -# endif +int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits); +int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx, int qbits); +int EVP_PKEY_CTX_set_dsa_paramgen_md_props(EVP_PKEY_CTX *ctx, + const char *md_name, + const char *md_properties); +int EVP_PKEY_CTX_set_dsa_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); +int EVP_PKEY_CTX_set_dsa_paramgen_type(EVP_PKEY_CTX *ctx, const char *name); +int EVP_PKEY_CTX_set_dsa_paramgen_seed(EVP_PKEY_CTX *ctx, + const unsigned char *seed, + size_t seedlen); +int EVP_PKEY_CTX_set_dsa_paramgen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 +# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) -# define DSA_FLAG_CACHE_MONT_P 0x01 -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DSA +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 + +typedef struct DSA_SIG_st DSA_SIG; +DSA_SIG *DSA_SIG_new(void); +void DSA_SIG_free(DSA_SIG *a); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(DSA_SIG, DSA_SIG) +void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); +int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); + + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * Does nothing. Previously this switched off constant time behaviour. */ -# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 -# endif +# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DSA_FLAG_CACHE_MONT_P 0x01 /* * If this flag is set the DSA method is FIPS compliant and can be used in @@ -47,7 +88,7 @@ extern "C" { * result is compliant. */ -# define DSA_FLAG_FIPS_METHOD 0x0400 +# define DSA_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are @@ -55,190 +96,185 @@ extern "C" { * usage is compliant. */ -# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 -# define DSA_FLAG_FIPS_CHECKED 0x0800 +# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 +# define DSA_FLAG_FIPS_CHECKED 0x0800 /* Already defined in ossl_typ.h */ /* typedef struct dsa_st DSA; */ /* typedef struct dsa_method DSA_METHOD; */ -typedef struct DSA_SIG_st DSA_SIG; +# define d2i_DSAparams_fp(fp, x) \ + (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ + (char *(*)())d2i_DSAparams, (fp), \ + (unsigned char **)(x)) +# define i2d_DSAparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DSAparams, (fp), (unsigned char *)(x)) +# define d2i_DSAparams_bio(bp, x) \ + ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSAparams, bp, x) +# define i2d_DSAparams_bio(bp, x) \ + ASN1_i2d_bio_of(DSA, i2d_DSAparams, bp, x) -# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ - (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) -# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ - (unsigned char *)(x)) -# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) -# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, DSA, DSAparams) +OSSL_DEPRECATEDIN_3_0 DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, + DSA *dsa); +OSSL_DEPRECATEDIN_3_0 int DSA_do_verify(const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); -DSA *DSAparams_dup(DSA *x); -DSA_SIG *DSA_SIG_new(void); -void DSA_SIG_free(DSA_SIG *a); -int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); -DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); -void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); -int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_OpenSSL(void); -DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); -int DSA_do_verify(const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); +OSSL_DEPRECATEDIN_3_0 void DSA_set_default_method(const DSA_METHOD *); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 int DSA_set_method(DSA *dsa, const DSA_METHOD *); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_get_method(DSA *d); -const DSA_METHOD *DSA_OpenSSL(void); - -void DSA_set_default_method(const DSA_METHOD *); -const DSA_METHOD *DSA_get_default_method(void); -int DSA_set_method(DSA *dsa, const DSA_METHOD *); -const DSA_METHOD *DSA_get_method(DSA *d); - -DSA *DSA_new(void); -DSA *DSA_new_method(ENGINE *engine); -void DSA_free(DSA *r); +OSSL_DEPRECATEDIN_3_0 DSA *DSA_new(void); +OSSL_DEPRECATEDIN_3_0 DSA *DSA_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 void DSA_free(DSA *r); /* "up" the DSA object's reference count */ -int DSA_up_ref(DSA *r); -int DSA_size(const DSA *); -int DSA_bits(const DSA *d); -int DSA_security_bits(const DSA *d); +OSSL_DEPRECATEDIN_3_0 int DSA_up_ref(DSA *r); +OSSL_DEPRECATEDIN_3_0 int DSA_size(const DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_bits(const DSA *d); +OSSL_DEPRECATEDIN_3_0 int DSA_security_bits(const DSA *d); /* next 4 return -1 on error */ -DEPRECATEDIN_1_2_0(int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)) -int DSA_sign(int type, const unsigned char *dgst, int dlen, - unsigned char *sig, unsigned int *siglen, DSA *dsa); -int DSA_verify(int type, const unsigned char *dgst, int dgst_len, - const unsigned char *sigbuf, int siglen, DSA *dsa); -#define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) -int DSA_set_ex_data(DSA *d, int idx, void *arg); -void *DSA_get_ex_data(DSA *d, int idx); +OSSL_DEPRECATEDIN_3_0 int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp); +OSSL_DEPRECATEDIN_3_0 int DSA_sign(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, DSA *dsa); +OSSL_DEPRECATEDIN_3_0 int DSA_verify(int type, const unsigned char *dgst, + int dgst_len, const unsigned char *sigbuf, + int siglen, DSA *dsa); -DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); +# define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) +OSSL_DEPRECATEDIN_3_0 int DSA_set_ex_data(DSA *d, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *DSA_get_ex_data(const DSA *d, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAPrivateKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAparams) +# endif + +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 /* Deprecated version */ -DEPRECATEDIN_0_9_8(DSA *DSA_generate_parameters(int bits, - unsigned char *seed, - int seed_len, - int *counter_ret, - unsigned long *h_ret, void - (*callback) (int, int, - void *), - void *cb_arg)) +OSSL_DEPRECATEDIN_0_9_8 +DSA *DSA_generate_parameters(int bits, unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, + void (*callback) (int, int, void *), + void *cb_arg); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* New version */ -int DSA_generate_parameters_ex(DSA *dsa, int bits, - const unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int DSA_generate_parameters_ex(DSA *dsa, int bits, + const unsigned char *seed, + int seed_len, + int *counter_ret, + unsigned long *h_ret, + BN_GENCB *cb); -int DSA_generate_key(DSA *a); -int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); -int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); -int i2d_DSAparams(const DSA *a, unsigned char **pp); +OSSL_DEPRECATEDIN_3_0 int DSA_generate_key(DSA *a); -int DSAparams_print(BIO *bp, const DSA *x); -int DSA_print(BIO *bp, const DSA *x, int off); -# ifndef OPENSSL_NO_STDIO -int DSAparams_print_fp(FILE *fp, const DSA *x); -int DSA_print_fp(FILE *bp, const DSA *x, int off); -# endif +OSSL_DEPRECATEDIN_3_0 int DSAparams_print(BIO *bp, const DSA *x); +OSSL_DEPRECATEDIN_3_0 int DSA_print(BIO *bp, const DSA *x, int off); +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int DSAparams_print_fp(FILE *fp, const DSA *x); +OSSL_DEPRECATEDIN_3_0 int DSA_print_fp(FILE *bp, const DSA *x, int off); +# endif -# define DSS_prime_checks 64 +# define DSS_prime_checks 64 /* * Primality test according to FIPS PUB 186-4, Appendix C.3. Since we only * have one value here we set the number of checks to 64 which is the 128 bit * security level that is the highest level and valid for creating a 3072 bit * DSA key. */ -# define DSA_is_prime(n, callback, cb_arg) \ - BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) +# define DSA_is_prime(n, callback, cb_arg) \ + BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) -# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DH /* * Convert DSA structure (key or just parameters) into DH structure (be * careful to avoid small subgroup attacks when using this!) */ -DH *DSA_dup_DH(const DSA *r); -# endif +OSSL_DEPRECATEDIN_3_0 DH *DSA_dup_DH(const DSA *r); +# endif -# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_q_bits(ctx, qbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, qbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_MD, 0, (void *)(md)) +OSSL_DEPRECATEDIN_3_0 void DSA_get0_pqg(const DSA *d, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +OSSL_DEPRECATEDIN_3_0 int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 void DSA_get0_key(const DSA *d, const BIGNUM **pub_key, + const BIGNUM **priv_key); +OSSL_DEPRECATEDIN_3_0 int DSA_set0_key(DSA *d, BIGNUM *pub_key, + BIGNUM *priv_key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_p(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_q(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_g(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_pub_key(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_priv_key(const DSA *d); +OSSL_DEPRECATEDIN_3_0 void DSA_clear_flags(DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 int DSA_test_flags(const DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 void DSA_set_flags(DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 ENGINE *DSA_get0_engine(DSA *d); -# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) - -void DSA_get0_pqg(const DSA *d, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DSA_get0_key(const DSA *d, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DSA_get0_p(const DSA *d); -const BIGNUM *DSA_get0_q(const DSA *d); -const BIGNUM *DSA_get0_g(const DSA *d); -const BIGNUM *DSA_get0_pub_key(const DSA *d); -const BIGNUM *DSA_get0_priv_key(const DSA *d); -void DSA_clear_flags(DSA *d, int flags); -int DSA_test_flags(const DSA *d, int flags); -void DSA_set_flags(DSA *d, int flags); -ENGINE *DSA_get0_engine(DSA *d); - -DSA_METHOD *DSA_meth_new(const char *name, int flags); -void DSA_meth_free(DSA_METHOD *dsam); -DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); -const char *DSA_meth_get0_name(const DSA_METHOD *dsam); -int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); -int DSA_meth_get_flags(const DSA_METHOD *dsam); -int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); -void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); -int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); -DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 DSA_METHOD *DSA_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void DSA_meth_free(DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 const char *DSA_meth_get0_name(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set1_name(DSA_METHOD *dsam, + const char *name); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_get_flags(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); +OSSL_DEPRECATEDIN_3_0 void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set0_app_data(DSA_METHOD *dsam, + void *app_data); +OSSL_DEPRECATEDIN_3_0 DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) (const unsigned char *, int, DSA *); -int DSA_meth_set_sign(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign(DSA_METHOD *dsam, DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); -int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); -int DSA_meth_set_sign_setup(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign_setup(DSA_METHOD *dsam, int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); -int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) (const unsigned char *, int, DSA_SIG *, DSA *); -int DSA_meth_set_verify(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_verify(DSA_METHOD *dsam, int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); -int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_mod_exp(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_mod_exp(DSA_METHOD *dsam, int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); -int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); -int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); -int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_init(DSA_METHOD *dsam, + int (*init)(DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_finish(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_finish(DSA_METHOD *dsam, + int (*finish)(DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) (DSA *, int, const unsigned char *, int, int *, unsigned long *, BN_GENCB *); -int DSA_meth_set_paramgen(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_paramgen(DSA_METHOD *dsam, int (*paramgen) (DSA *, int, const unsigned char *, int, int *, unsigned long *, BN_GENCB *)); -int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_keygen(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_keygen(DSA_METHOD *dsam, + int (*keygen) (DSA *)); - -# ifdef __cplusplus -} # endif # endif +# ifdef __cplusplus +} +# endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsaerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsaerr.h index 495a1ac8..26ada57d 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsaerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsaerr.h @@ -1,59 +1,29 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DSAERR_H -# define HEADER_DSAERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_DSAERR_H +# define OPENSSL_DSAERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_DSA -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DSA_strings(void); - -/* - * DSA function codes. - */ -# define DSA_F_DSAPARAMS_PRINT 100 -# define DSA_F_DSAPARAMS_PRINT_FP 101 -# define DSA_F_DSA_BUILTIN_PARAMGEN 125 -# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 -# define DSA_F_DSA_DO_SIGN 112 -# define DSA_F_DSA_DO_VERIFY 113 -# define DSA_F_DSA_METH_DUP 127 -# define DSA_F_DSA_METH_NEW 128 -# define DSA_F_DSA_METH_SET1_NAME 129 -# define DSA_F_DSA_NEW_METHOD 103 -# define DSA_F_DSA_PARAM_DECODE 119 -# define DSA_F_DSA_PRINT_FP 105 -# define DSA_F_DSA_PRIV_DECODE 115 -# define DSA_F_DSA_PRIV_ENCODE 116 -# define DSA_F_DSA_PUB_DECODE 117 -# define DSA_F_DSA_PUB_ENCODE 118 -# define DSA_F_DSA_SIGN 106 -# define DSA_F_DSA_SIGN_SETUP 107 -# define DSA_F_DSA_SIG_NEW 102 -# define DSA_F_OLD_DSA_PRIV_DECODE 122 -# define DSA_F_PKEY_DSA_CTRL 120 -# define DSA_F_PKEY_DSA_CTRL_STR 104 -# define DSA_F_PKEY_DSA_KEYGEN 121 /* * DSA reason codes. */ +# define DSA_R_BAD_FFC_PARAMETERS 114 # define DSA_R_BAD_Q_VALUE 102 # define DSA_R_BN_DECODE_ERROR 108 # define DSA_R_BN_ERROR 109 @@ -65,8 +35,10 @@ int ERR_load_DSA_strings(void); # define DSA_R_MODULUS_TOO_LARGE 103 # define DSA_R_NO_PARAMETERS_SET 107 # define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_P_NOT_PRIME 115 # define DSA_R_Q_NOT_PRIME 113 # define DSA_R_SEED_LEN_SMALL 110 +# define DSA_R_TOO_MANY_RETRIES 116 # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dtls1.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dtls1.h index d55ca9c3..5dc6b541 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dtls1.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dtls1.h @@ -1,36 +1,42 @@ /* - * Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DTLS1_H -# define HEADER_DTLS1_H +#ifndef OPENSSL_DTLS1_H +# define OPENSSL_DTLS1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DTLS1_H +# endif + +# include #ifdef __cplusplus extern "C" { #endif -# define DTLS1_VERSION 0xFEFF -# define DTLS1_2_VERSION 0xFEFD -# define DTLS_MIN_VERSION DTLS1_VERSION -# define DTLS_MAX_VERSION DTLS1_2_VERSION -# define DTLS1_VERSION_MAJOR 0xFE +#include -# define DTLS1_BAD_VER 0x0100 +/* DTLS*_VERSION constants are defined in prov_ssl.h */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DTLS_MIN_VERSION DTLS1_VERSION +# define DTLS_MAX_VERSION DTLS1_2_VERSION +# endif +# define DTLS1_VERSION_MAJOR 0xFE /* Special value for method supporting multiple versions */ # define DTLS_ANY_VERSION 0x1FFFF /* lengths of messages */ -/* - * Actually the max cookie length in DTLS is 255. But we can't change this now - * due to compatibility concerns. - */ -# define DTLS1_COOKIE_LENGTH 256 + +# define DTLS1_COOKIE_LENGTH 255 # define DTLS1_RT_HEADER_LENGTH 13 @@ -43,10 +49,6 @@ extern "C" { # define DTLS1_AL_HEADER_LENGTH 2 -/* Timeout multipliers */ -# define DTLS1_TMO_READ_COUNT 2 -# define DTLS1_TMO_WRITE_COUNT 2 - # define DTLS1_TMO_ALERT_COUNT 12 #ifdef __cplusplus diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h index 5c88e519..32e142a9 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_E_OS2_H -# define HEADER_E_OS2_H +#ifndef OPENSSL_E_OS2_H +# define OPENSSL_E_OS2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_E_OS2_H +# endif # include @@ -96,11 +102,11 @@ extern "C" { # endif /* ------------------------------- OpenVMS -------------------------------- */ -# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYS_VMS) +# if defined(__VMS) || defined(VMS) # if !defined(OPENSSL_SYS_VMS) # undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_VMS # endif -# define OPENSSL_SYS_VMS # if defined(__DECC) # define OPENSSL_SYS_VMS_DECC # elif defined(__DECCXX) @@ -132,19 +138,25 @@ extern "C" { # endif # endif +/* ---------------------------- HP NonStop -------------------------------- */ +# ifdef __TANDEM +# ifdef _STRING +# include +# endif +# define OPENSSL_USE_BUILD_DATE +# if defined(OPENSSL_THREADS) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# elif defined(OPENSSL_THREADS) && defined(_PUT_MODEL_) +# include +# endif +# endif + /** * That's it for OS-specific stuff *****************************************************************************/ -/* Specials for I/O an exit */ -# ifdef OPENSSL_SYS_MSDOS -# define OPENSSL_UNISTD_IO -# define OPENSSL_DECLARE_EXIT extern void exit(int); -# else -# define OPENSSL_UNISTD_IO OPENSSL_UNISTD -# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ -# endif - /*- * OPENSSL_EXTERN is normally used to declare a symbol with possible extra * attributes to handle its presence in a shared library. @@ -172,29 +184,6 @@ extern "C" { # define OPENSSL_EXTERN extern # endif -/*- - * Macros to allow global variables to be reached through function calls when - * required (if a shared library version requires it, for example. - * The way it's done allows definitions like this: - * - * // in foobar.c - * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) - * // in foobar.h - * OPENSSL_DECLARE_GLOBAL(int,foobar); - * #define foobar OPENSSL_GLOBAL_REF(foobar) - */ -# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ - type *_shadow_##name(void) \ - { static type _hide_##name=value; return &_hide_##name; } -# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) -# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) -# else -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) type _shadow_##name=value; -# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name -# define OPENSSL_GLOBAL_REF(name) _shadow_##name -# endif - # ifdef _WIN32 # ifdef _WIN64 # define ossl_ssize_t __int64 @@ -221,13 +210,15 @@ extern "C" { # endif # endif -# ifdef DEBUG_UNUSED +# if defined(UNUSEDRESULT_DEBUG) # define __owur __attribute__((__warn_unused_result__)) # else # define __owur # endif /* Standard integer types */ +# define OPENSSL_NO_INTTYPES_H +# define OPENSSL_NO_STDINT_H # if defined(OPENSSL_SYS_UEFI) typedef INT8 int8_t; typedef UINT8 uint8_t; @@ -241,6 +232,9 @@ typedef UINT64 uint64_t; defined(__osf__) || defined(__sgi) || defined(__hpux) || \ defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) # include +# undef OPENSSL_NO_INTTYPES_H +/* Because the specs say that inttypes.h includes stdint.h if present */ +# undef OPENSSL_NO_STDINT_H # elif defined(_MSC_VER) && _MSC_VER<1600 /* * minimally required typdefs for systems not supporting inttypes.h or @@ -254,8 +248,21 @@ typedef int int32_t; typedef unsigned int uint32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; +# elif defined(OPENSSL_SYS_TANDEM) +# include +# include # else # include +# undef OPENSSL_NO_STDINT_H +# endif +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ + defined(INTMAX_MAX) && defined(UINTMAX_MAX) +typedef intmax_t ossl_intmax_t; +typedef uintmax_t ossl_uintmax_t; +# else +/* Fall back to the largest we know we require and can handle */ +typedef int64_t ossl_intmax_t; +typedef uint64_t ossl_uintmax_t; # endif /* ossl_inline: portable inline definition usable in public headers */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ebcdic.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ebcdic.h index aa012855..e0ae1aa8 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ebcdic.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ebcdic.h @@ -1,14 +1,20 @@ /* * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EBCDIC_H -# define HEADER_EBCDIC_H +#ifndef OPENSSL_EBCDIC_H +# define OPENSSL_EBCDIC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_EBCDIC_H +# endif # include diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h index 24baf53c..be9fb2f0 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h @@ -1,33 +1,78 @@ /* - * Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EC_H -# define HEADER_EC_H +#ifndef OPENSSL_EC_H +# define OPENSSL_EC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_EC_H +# endif # include +# include + +# include -# ifndef OPENSSL_NO_EC -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include # ifdef __cplusplus extern "C" { # endif -# ifndef OPENSSL_ECC_MAX_FIELD_BITS -# define OPENSSL_ECC_MAX_FIELD_BITS 661 +/* Values for EVP_PKEY_CTX_set_ec_param_enc() */ +# define OPENSSL_EC_EXPLICIT_CURVE 0x000 +# define OPENSSL_EC_NAMED_CURVE 0x001 + +int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid); +int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, int param_enc); +int EVP_PKEY_CTX_set_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx, int cofactor_mode); +int EVP_PKEY_CTX_get_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_set_ecdh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +int EVP_PKEY_CTX_get_ecdh_kdf_type(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_set_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_get_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); + +int EVP_PKEY_CTX_set_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +int EVP_PKEY_CTX_get_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); + +int EVP_PKEY_CTX_set0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, + int len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_get0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); # endif +# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) + +/* KDF types */ +# define EVP_PKEY_ECDH_KDF_NONE 1 +# define EVP_PKEY_ECDH_KDF_X9_63 2 +/* + * The old name for EVP_PKEY_ECDH_KDF_X9_63 + * The ECDH KDF specification has been mistakenly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility + */ +# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 + /** Enum for the point conversion form as defined in X9.62 (ECDSA) * for the encoding of a elliptic curve point (x,y) */ typedef enum { @@ -41,7 +86,27 @@ typedef enum { POINT_CONVERSION_HYBRID = 6 } point_conversion_form_t; +const char *OSSL_EC_curve_nid2name(int nid); + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# ifndef OPENSSL_NO_EC +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include + +# ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef struct ec_method_st EC_METHOD; +# endif typedef struct ec_group_st EC_GROUP; typedef struct ec_point_st EC_POINT; typedef struct ecpk_parameters_st ECPKPARAMETERS; @@ -51,40 +116,41 @@ typedef struct ec_parameters_st ECPARAMETERS; /* EC_METHODs for curves over GF(p) */ /********************************************************************/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Returns the basic GFp ec methods which provides the basis for the * optimized methods. * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_simple_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_simple_method(void); /** Returns GFp methods using montgomery multiplication. * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_mont_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_mont_method(void); /** Returns GFp methods using optimized methods for NIST recommended curves * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nist_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nist_method(void); -# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 /** Returns 64-bit optimized methods for nistp224 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp224_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp224_method(void); /** Returns 64-bit optimized methods for nistp256 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp256_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp256_method(void); /** Returns 64-bit optimized methods for nistp521 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp521_method(void); -# endif +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp521_method(void); +# endif /* OPENSSL_NO_EC_NISTP_64_GCC_128 */ -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /********************************************************************/ /* EC_METHOD for curves over GF(2^m) */ /********************************************************************/ @@ -92,30 +158,44 @@ const EC_METHOD *EC_GFp_nistp521_method(void); /** Returns the basic GF2m ec method * \return EC_METHOD object */ -const EC_METHOD *EC_GF2m_simple_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GF2m_simple_method(void); -# endif +# endif /********************************************************************/ /* EC_GROUP functions */ /********************************************************************/ -/** Creates a new EC_GROUP object - * \param meth EC_METHOD to use +/** + * Creates a new EC_GROUP object + * \param meth EC_METHOD to use * \return newly created EC_GROUP object or NULL in case of an error. */ -EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); + +/** Clears and frees a EC_GROUP object + * \param group EC_GROUP object to be cleared and freed. + */ +OSSL_DEPRECATEDIN_3_0 void EC_GROUP_clear_free(EC_GROUP *group); + +/** Returns the EC_METHOD of the EC_GROUP object. + * \param group EC_GROUP object + * \return EC_METHOD used in this EC_GROUP object. + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); + +/** Returns the field type of the EC_METHOD. + * \param meth EC_METHOD object + * \return NID of the underlying field type OID. + */ +OSSL_DEPRECATEDIN_3_0 int EC_METHOD_get_field_type(const EC_METHOD *meth); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Frees a EC_GROUP object * \param group EC_GROUP object to be freed. */ void EC_GROUP_free(EC_GROUP *group); -/** Clears and frees a EC_GROUP object - * \param group EC_GROUP object to be cleared and freed. - */ -void EC_GROUP_clear_free(EC_GROUP *group); - /** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. * \param dst destination EC_GROUP object * \param src source EC_GROUP object @@ -123,25 +203,13 @@ void EC_GROUP_clear_free(EC_GROUP *group); */ int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); -/** Creates a new EC_GROUP object and copies the copies the content +/** Creates a new EC_GROUP object and copies the content * form src to the newly created EC_KEY object * \param src source EC_GROUP object * \return newly created EC_GROUP object or NULL in case of an error. */ EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); -/** Returns the EC_METHOD of the EC_GROUP object. - * \param group EC_GROUP object - * \return EC_METHOD used in this EC_GROUP object. - */ -const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); - -/** Returns the field type of the EC_METHOD. - * \param meth EC_METHOD object - * \return NID of the underlying field type OID. - */ -int EC_METHOD_get_field_type(const EC_METHOD *meth); - /** Sets the generator and its order/cofactor of a EC_GROUP object. * \param group EC_GROUP object * \param generator EC_POINT object with the generator. @@ -212,6 +280,18 @@ void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); */ int EC_GROUP_get_curve_name(const EC_GROUP *group); +/** Gets the field of an EC_GROUP + * \param group EC_GROUP object + * \return the group field + */ +const BIGNUM *EC_GROUP_get0_field(const EC_GROUP *group); + +/** Returns the field type of the EC_GROUP. + * \param group EC_GROUP object + * \return NID of the underlying field type OID. + */ +int EC_GROUP_get_field_type(const EC_GROUP *group); + void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); int EC_GROUP_get_asn1_flag(const EC_GROUP *group); @@ -223,7 +303,7 @@ unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); size_t EC_GROUP_get_seed_len(const EC_GROUP *); size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); -/** Sets the parameters of a ec curve defined by y^2 = x^3 + a*x + b (for GFp) +/** Sets the parameters of an ec curve defined by y^2 = x^3 + a*x + b (for GFp) * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -249,6 +329,7 @@ int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the parameters of an ec curve. Synonym for EC_GROUP_set_curve * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -258,9 +339,11 @@ int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, - const BIGNUM *a, const BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_set_curve_GFp(EC_GROUP *group, + const BIGNUM *p, + const BIGNUM *a, + const BIGNUM *b, + BN_CTX *ctx); /** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve * \param group EC_GROUP object @@ -271,11 +354,12 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, - BIGNUM *a, BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_get_curve_GFp(const EC_GROUP *group, + BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /** Sets the parameter of an ec curve. Synonym for EC_GROUP_set_curve * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -285,9 +369,11 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, - const BIGNUM *a, const BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_set_curve_GF2m(EC_GROUP *group, + const BIGNUM *p, + const BIGNUM *a, + const BIGNUM *b, + BN_CTX *ctx); /** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve * \param group EC_GROUP object @@ -298,10 +384,13 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, - BIGNUM *a, BIGNUM *b, - BN_CTX *ctx)) -# endif +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, + BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); +# endif /* OPENSSL_NO_EC2M */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + /** Returns the number of bits needed to represent a field element * \param group EC_GROUP object * \return number of bits needed to represent a field element @@ -345,7 +434,7 @@ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); */ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /** Creates a new EC_GROUP object with the specified parameters defined * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) * \param p BIGNUM with the polynomial defining the underlying field @@ -356,10 +445,38 @@ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, */ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -# endif +# endif -/** Creates a EC_GROUP object with a curve specified by a NID - * \param nid NID of the OID of the curve name +/** + * Creates a EC_GROUP object with a curve specified by parameters. + * The parameters may be explicit or a named curve, + * \param params A list of parameters describing the group. + * \param libctx The associated library context or NULL for the default + * context + * \param propq A property query string + * \return newly created EC_GROUP object with specified parameters or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[], + OSSL_LIB_CTX *libctx, const char *propq); + +/** + * Creates a EC_GROUP object with a curve specified by a NID + * \param libctx The associated library context or NULL for the default + * context + * \param propq A property query string + * \param nid NID of the OID of the curve name + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_by_curve_name_ex(OSSL_LIB_CTX *libctx, const char *propq, + int nid); + +/** + * Creates a EC_GROUP object with a curve specified by a NID. Same as + * EC_GROUP_new_by_curve_name_ex but the libctx and propq are always + * NULL. + * \param nid NID of the OID of the curve name * \return newly created EC_GROUP object with specified curve or NULL * if an error occurred */ @@ -416,6 +533,8 @@ size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); const char *EC_curve_nid2nist(int nid); int EC_curve_nist2nid(const char *name); +int EC_GROUP_check_named_curve(const EC_GROUP *group, int nist_only, + BN_CTX *ctx); /********************************************************************/ /* EC_POINT functions */ @@ -452,12 +571,6 @@ int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); */ EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); -/** Returns the EC_METHOD used in EC_POINT object - * \param point EC_POINT object - * \return the EC_METHOD used - */ -const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); - /** Sets a point to infinity (neutral element) * \param group underlying EC_GROUP object * \param point EC_POINT to set to infinity @@ -465,6 +578,13 @@ const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); */ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** Returns the EC_METHOD used in EC_POINT object + * \param point EC_POINT object + * \return the EC_METHOD used + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); + /** Sets the jacobian projective coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object * \param p EC_POINT object @@ -474,10 +594,10 @@ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - const BIGNUM *y, const BIGNUM *z, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_Jprojective_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, + BN_CTX *ctx); /** Gets the jacobian projective coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object @@ -488,10 +608,10 @@ int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BIGNUM *z, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_Jprojective_coordinates_GFp + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Sets the affine coordinates of an EC_POINT * \param group underlying EC_GROUP object @@ -516,6 +636,7 @@ int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p, int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_set_affine_coordinates * \param group underlying EC_GROUP object @@ -525,11 +646,9 @@ int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - const BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_affine_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); /** Gets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_get_affine_coordinates @@ -540,11 +659,10 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, - BIGNUM *x, - BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_affine_coordinates_GFp + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Sets the x9.62 compressed coordinates of a EC_POINT * \param group underlying EC_GROUP object @@ -558,6 +676,7 @@ int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, const BIGNUM *x, int y_bit, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of * EC_POINT_set_compressed_coordinates * \param group underlying EC_GROUP object @@ -567,12 +686,10 @@ int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - int y_bit, - BN_CTX *ctx)) -# ifndef OPENSSL_NO_EC2M +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_compressed_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); +# ifndef OPENSSL_NO_EC2M /** Sets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_set_affine_coordinates * \param group underlying EC_GROUP object @@ -582,11 +699,9 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *g * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - const BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_affine_coordinates_GF2m + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); /** Gets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_get_affine_coordinates @@ -597,11 +712,9 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *grou * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, - const EC_POINT *p, - BIGNUM *x, - BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_affine_coordinates_GF2m + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); /** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of * EC_POINT_set_compressed_coordinates @@ -612,12 +725,12 @@ DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *grou * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - int y_bit, - BN_CTX *ctx)) -# endif +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_compressed_coordinates_GF2m + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + /** Encodes a EC_POINT object to a octet string * \param group underlying EC_GROUP object * \param p EC_POINT object @@ -656,10 +769,16 @@ size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point, unsigned char **pbuf, BN_CTX *ctx); /* other interfaces to point2oct/oct2point: */ -BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BIGNUM *, BN_CTX *); -EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, - EC_POINT *, BN_CTX *); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 BIGNUM *EC_POINT_point2bn(const EC_GROUP *, + const EC_POINT *, + point_conversion_form_t form, + BIGNUM *, BN_CTX *); +OSSL_DEPRECATEDIN_3_0 EC_POINT *EC_POINT_bn2point(const EC_GROUP *, + const BIGNUM *, + EC_POINT *, BN_CTX *); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, point_conversion_form_t form, BN_CTX *); EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, @@ -724,9 +843,11 @@ int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); -int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); -int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, - EC_POINT *points[], BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EC_POINT_make_affine(const EC_GROUP *group, + EC_POINT *point, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, + EC_POINT *points[], BN_CTX *ctx); /** Computes r = generator * n + sum_{i=0}^{num-1} p[i] * m[i] * \param group underlying EC_GROUP object @@ -738,9 +859,11 @@ int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - size_t num, const EC_POINT *p[], const BIGNUM *m[], - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, + const BIGNUM *n, size_t num, + const EC_POINT *p[], const BIGNUM *m[], + BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Computes r = generator * n + q * m * \param group underlying EC_GROUP object @@ -754,18 +877,20 @@ int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Stores multiples of generator for faster point multiplication * \param group EC_GROUP object * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); /** Reports whether a precomputation has been done * \param group EC_GROUP object * \return 1 if a pre-computation has been done and 0 otherwise */ -int EC_GROUP_have_precompute_mult(const EC_GROUP *group); +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_have_precompute_mult(const EC_GROUP *group); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /********************************************************************/ /* ASN1 stuff */ @@ -781,101 +906,135 @@ DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) * represent the field elements */ int EC_GROUP_get_basis_type(const EC_GROUP *); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, unsigned int *k2, unsigned int *k3); -# endif - -# define OPENSSL_EC_EXPLICIT_CURVE 0x000 -# define OPENSSL_EC_NAMED_CURVE 0x001 +# endif EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); -# define d2i_ECPKParameters_bio(bp,x) \ +# define d2i_ECPKParameters_bio(bp,x) \ ASN1_d2i_bio_of(EC_GROUP, NULL, d2i_ECPKParameters, bp, x) -# define i2d_ECPKParameters_bio(bp,x) \ - ASN1_i2d_bio_of_const(EC_GROUP, i2d_ECPKParameters, bp, x) -# define d2i_ECPKParameters_fp(fp,x) \ +# define i2d_ECPKParameters_bio(bp,x) \ + ASN1_i2d_bio_of(EC_GROUP, i2d_ECPKParameters, bp, x) +# define d2i_ECPKParameters_fp(fp,x) \ (EC_GROUP *)ASN1_d2i_fp(NULL, (d2i_of_void *)d2i_ECPKParameters, (fp), \ (void **)(x)) -# define i2d_ECPKParameters_fp(fp,x) \ +# define i2d_ECPKParameters_fp(fp,x) \ ASN1_i2d_fp((i2d_of_void *)i2d_ECPKParameters, (fp), (void *)(x)) -int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); -# ifndef OPENSSL_NO_STDIO -int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); -# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ECPKParameters_print(BIO *bp, const EC_GROUP *x, + int off); +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, + int off); +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /********************************************************************/ /* EC_KEY functions */ /********************************************************************/ /* some values for the encoding_flag */ -# define EC_PKEY_NO_PARAMETERS 0x001 -# define EC_PKEY_NO_PUBKEY 0x002 +# define EC_PKEY_NO_PARAMETERS 0x001 +# define EC_PKEY_NO_PUBKEY 0x002 /* some values for the flags field */ -# define EC_FLAG_NON_FIPS_ALLOW 0x1 -# define EC_FLAG_FIPS_CHECKED 0x2 -# define EC_FLAG_COFACTOR_ECDH 0x1000 +# define EC_FLAG_SM2_RANGE 0x0004 +# define EC_FLAG_COFACTOR_ECDH 0x1000 +# define EC_FLAG_CHECK_NAMED_GROUP 0x2000 +# define EC_FLAG_CHECK_NAMED_GROUP_NIST 0x4000 +# define EC_FLAG_CHECK_NAMED_GROUP_MASK \ + (EC_FLAG_CHECK_NAMED_GROUP | EC_FLAG_CHECK_NAMED_GROUP_NIST) -/** Creates a new EC_KEY object. +/* Deprecated flags - it was using 0x01..0x02 */ +# define EC_FLAG_NON_FIPS_ALLOW 0x0000 +# define EC_FLAG_FIPS_CHECKED 0x0000 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** + * Creates a new EC_KEY object. + * \param ctx The library context for to use for this EC_KEY. May be NULL in + * which case the default library context is used. * \return EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_new(void); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_ex(OSSL_LIB_CTX *ctx, const char *propq); -int EC_KEY_get_flags(const EC_KEY *key); +/** + * Creates a new EC_KEY object. Same as calling EC_KEY_new_ex with a + * NULL library context + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new(void); -void EC_KEY_set_flags(EC_KEY *key, int flags); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_get_flags(const EC_KEY *key); -void EC_KEY_clear_flags(EC_KEY *key, int flags); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_flags(EC_KEY *key, int flags); -int EC_KEY_decoded_from_explicit_params(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_clear_flags(EC_KEY *key, int flags); -/** Creates a new EC_KEY object using a named curve as underlying +OSSL_DEPRECATEDIN_3_0 int EC_KEY_decoded_from_explicit_params(const EC_KEY *key); + +/** + * Creates a new EC_KEY object using a named curve as underlying * EC_GROUP object. + * \param ctx The library context for to use for this EC_KEY. May be NULL in + * which case the default library context is used. + * \param propq Any property query string + * \param nid NID of the named curve. + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_by_curve_name_ex(OSSL_LIB_CTX *ctx, + const char *propq, + int nid); + +/** + * Creates a new EC_KEY object using a named curve as underlying + * EC_GROUP object. Same as calling EC_KEY_new_by_curve_name_ex with a NULL + * library context and property query string. * \param nid NID of the named curve. * \return EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_new_by_curve_name(int nid); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_by_curve_name(int nid); /** Frees a EC_KEY object. * \param key EC_KEY object to be freed. */ -void EC_KEY_free(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_free(EC_KEY *key); /** Copies a EC_KEY object. * \param dst destination EC_KEY object * \param src src EC_KEY object * \return dst or NULL if an error occurred. */ -EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); /** Creates a new EC_KEY object and copies the content from src to it. * \param src the source EC_KEY object * \return newly created EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_dup(const EC_KEY *src); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_dup(const EC_KEY *src); /** Increases the internal reference count of a EC_KEY object. * \param key EC_KEY object * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_up_ref(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_up_ref(EC_KEY *key); /** Returns the ENGINE object of a EC_KEY object * \param eckey EC_KEY object * \return the ENGINE object (possibly NULL). */ -ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); /** Returns the EC_GROUP object of a EC_KEY object * \param key EC_KEY object * \return the EC_GROUP object (possibly NULL). */ -const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); /** Sets the EC_GROUP of a EC_KEY object. * \param key EC_KEY object @@ -883,13 +1042,13 @@ const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); * object will use an own copy of the EC_GROUP). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); /** Returns the private key of a EC_KEY object. * \param key EC_KEY object * \return a BIGNUM with the private key (possibly NULL). */ -const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); /** Sets the private key of a EC_KEY object. * \param key EC_KEY object @@ -897,13 +1056,13 @@ const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); * will use an own copy of the BIGNUM). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); /** Returns the public key of a EC_KEY object. * \param key the EC_KEY object * \return a EC_POINT object with the public key (possibly NULL) */ -const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); /** Sets the public key of a EC_KEY object. * \param key EC_KEY object @@ -911,20 +1070,24 @@ const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); * will use an own copy of the EC_POINT object). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); -unsigned EC_KEY_get_enc_flags(const EC_KEY *key); -void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); -point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); -void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); +OSSL_DEPRECATEDIN_3_0 unsigned EC_KEY_get_enc_flags(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); +OSSL_DEPRECATEDIN_3_0 point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_conv_form(EC_KEY *eckey, + point_conversion_form_t cform); +# endif /*OPENSSL_NO_DEPRECATED_3_0 */ -#define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ +# define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) -int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); -void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); /* wrapper functions for the underlying EC_GROUP object */ -void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); /** Creates a table of pre-computed multiples of the generator to * accelerate further EC_KEY operations. @@ -932,25 +1095,25 @@ void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); /** Creates a new ec private (and optional a new public) key. * \param key EC_KEY object * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_generate_key(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_generate_key(EC_KEY *key); /** Verifies that a private and/or public key is valid. * \param key the EC_KEY object * \return 1 on success and 0 otherwise. */ -int EC_KEY_check_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_check_key(const EC_KEY *key); /** Indicates if an EC_KEY can be used for signing. * \param eckey the EC_KEY object * \return 1 if can can sign and 0 otherwise. */ -int EC_KEY_can_sign(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_can_sign(const EC_KEY *eckey); /** Sets a public key from affine coordinates performing * necessary NIST PKV tests. @@ -959,8 +1122,9 @@ int EC_KEY_can_sign(const EC_KEY *eckey); * \param y public key y coordinate * \return 1 on success and 0 otherwise. */ -int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, - BIGNUM *y); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, + BIGNUM *x, + BIGNUM *y); /** Encodes an EC_KEY public key to an allocated octet string * \param key key to encode @@ -969,8 +1133,9 @@ int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, * \param ctx BN_CTX object (optional) * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, - unsigned char **pbuf, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_key2buf(const EC_KEY *key, + point_conversion_form_t form, + unsigned char **pbuf, BN_CTX *ctx); /** Decodes a EC_KEY public key from a octet string * \param key key to decode @@ -980,8 +1145,8 @@ size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, * \return 1 on success and 0 if an error occurred */ -int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, + size_t len, BN_CTX *ctx); /** Decodes an EC_KEY private key from an octet string * \param key key to decode @@ -990,7 +1155,8 @@ int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, * \return 1 on success and 0 if an error occurred */ -int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, + size_t len); /** Encodes a EC_KEY private key to an octet string * \param key key to encode @@ -1000,14 +1166,16 @@ int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_priv2oct(const EC_KEY *key, unsigned char *buf, size_t len); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_priv2oct(const EC_KEY *key, + unsigned char *buf, size_t len); /** Encodes an EC_KEY private key to an allocated octet string * \param eckey key to encode * \param pbuf returns pointer to allocated buffer * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_priv2buf(const EC_KEY *eckey, + unsigned char **pbuf); /********************************************************************/ /* de- and encoding functions for SEC1 ECPrivateKey */ @@ -1019,7 +1187,9 @@ size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); * \param len length of the DER encoded private key * \return the decoded private key or NULL if an error occurred. */ -EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey(EC_KEY **key, + const unsigned char **in, + long len); /** Encodes a private key object and stores the result in a buffer. * \param key the EC_KEY object to encode @@ -1027,7 +1197,8 @@ EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); * of bytes needed). * \return 1 on success and 0 if an error occurred. */ -int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey(const EC_KEY *key, + unsigned char **out); /********************************************************************/ /* de- and encoding functions for EC parameters */ @@ -1040,7 +1211,9 @@ int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); * \return a EC_KEY object with the decoded parameters or NULL if an error * occurred. */ -EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECParameters(EC_KEY **key, + const unsigned char **in, + long len); /** Encodes ec parameter and stores the result in a buffer. * \param key the EC_KEY object with ec parameters to encode @@ -1048,36 +1221,38 @@ EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); * of bytes needed). * \return 1 on success and 0 if an error occurred. */ -int i2d_ECParameters(EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2d_ECParameters(const EC_KEY *key, + unsigned char **out); /********************************************************************/ /* de- and encoding functions for EC public key */ /* (octet string, not DER -- hence 'o2i' and 'i2o') */ /********************************************************************/ -/** Decodes a ec public key from a octet string. +/** Decodes an ec public key from a octet string. * \param key a pointer to a EC_KEY object which should be used * \param in memory buffer with the encoded public key * \param len length of the encoded public key * \return EC_KEY object with decoded public key or NULL if an error * occurred. */ -EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *o2i_ECPublicKey(EC_KEY **key, + const unsigned char **in, long len); -/** Encodes a ec public key in an octet string. +/** Encodes an ec public key in an octet string. * \param key the EC_KEY object with the public key * \param out the buffer for the result (if NULL the function returns number * of bytes needed). * \return 1 on success and 0 if an error occurred */ -int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); /** Prints out the ec parameters on human readable form. * \param bp BIO object to which the information is printed * \param key EC_KEY object * \return 1 on success and 0 if an error occurred */ -int ECParameters_print(BIO *bp, const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int ECParameters_print(BIO *bp, const EC_KEY *key); /** Prints out the contents of a EC_KEY object * \param bp BIO object to which the information is printed @@ -1085,15 +1260,15 @@ int ECParameters_print(BIO *bp, const EC_KEY *key); * \param off line offset * \return 1 on success and 0 if an error occurred */ -int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); -# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_STDIO /** Prints out the ec parameters on human readable form. * \param fp file descriptor to which the information is printed * \param key EC_KEY object * \return 1 on success and 0 if an error occurred */ -int ECParameters_print_fp(FILE *fp, const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int ECParameters_print_fp(FILE *fp, const EC_KEY *key); /** Prints out the contents of a EC_KEY object * \param fp file descriptor to which the information is printed @@ -1101,31 +1276,33 @@ int ECParameters_print_fp(FILE *fp, const EC_KEY *key); * \param off line offset * \return 1 on success and 0 if an error occurred */ -int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); +# endif /* OPENSSL_NO_STDIO */ -# endif - -const EC_KEY_METHOD *EC_KEY_OpenSSL(void); -const EC_KEY_METHOD *EC_KEY_get_default_method(void); -void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); -const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); -int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); -EC_KEY *EC_KEY_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_method(ENGINE *engine); /** The old name for ecdh_KDF_X9_63 * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, * it is actually specified in ANSI X9.63. * This identifier is retained for backwards compatibility */ -int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const unsigned char *sinfo, + size_t sinfolen, const EVP_MD *md); -int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, - const EC_KEY *ecdh, - void *(*KDF) (const void *in, size_t inlen, - void *out, size_t *outlen)); +OSSL_DEPRECATEDIN_3_0 int ECDH_compute_key(void *out, size_t outlen, + const EC_POINT *pub_key, + const EC_KEY *ecdh, + void *(*KDF)(const void *in, + size_t inlen, void *out, + size_t *outlen)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ typedef struct ECDSA_SIG_st ECDSA_SIG; @@ -1139,23 +1316,22 @@ ECDSA_SIG *ECDSA_SIG_new(void); */ void ECDSA_SIG_free(ECDSA_SIG *sig); -/** DER encode content of ECDSA_SIG object (note: this function modifies *pp +/** i2d_ECDSA_SIG encodes content of ECDSA_SIG (note: this function modifies *pp * (*pp += length of the DER encoded signature)). * \param sig pointer to the ECDSA_SIG object * \param pp pointer to a unsigned char pointer for the output or NULL * \return the length of the DER encoded ECDSA_SIG object or a negative value * on error */ -int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ECDSA_SIG, ECDSA_SIG) -/** Decodes a DER encoded ECDSA signature (note: this function changes *pp +/** d2i_ECDSA_SIG decodes an ECDSA signature (note: this function modifies *pp * (*pp += len)). * \param sig pointer to ECDSA_SIG pointer (may be NULL) * \param pp memory buffer with the DER encoded signature * \param len length of the buffer * \return pointer to the decoded ECDSA_SIG structure (or NULL) */ -ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); /** Accessor for r and s fields of ECDSA_SIG * \param sig pointer to ECDSA_SIG structure @@ -1176,11 +1352,12 @@ const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig); /** Setter for r and s fields of ECDSA_SIG * \param sig pointer to ECDSA_SIG structure - * \param r pointer to BIGNUM for r (may be NULL) - * \param s pointer to BIGNUM for s (may be NULL) + * \param r pointer to BIGNUM for r + * \param s pointer to BIGNUM for s */ int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Computes the ECDSA signature of the given hash value using * the supplied private key and returns the created signature. * \param dgst pointer to the hash value @@ -1188,8 +1365,8 @@ int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); * \param eckey EC_KEY object containing a private EC key * \return pointer to a ECDSA_SIG structure or NULL if an error occurred */ -ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, - EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, + int dgst_len, EC_KEY *eckey); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1201,9 +1378,9 @@ ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, * \param eckey EC_KEY object containing a private EC key * \return pointer to a ECDSA_SIG structure or NULL if an error occurred */ -ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, - const BIGNUM *kinv, const BIGNUM *rp, - EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, + int dgstlen, const BIGNUM *kinv, + const BIGNUM *rp, EC_KEY *eckey); /** Verifies that the supplied signature is a valid ECDSA * signature of the supplied hash value using the supplied public key. @@ -1214,8 +1391,8 @@ ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, * \return 1 if the signature is valid, 0 if the signature is invalid * and -1 on error */ -int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, + const ECDSA_SIG *sig, EC_KEY *eckey); /** Precompute parts of the signing operation * \param eckey EC_KEY object containing a private EC key @@ -1224,7 +1401,8 @@ int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, * \param rp BIGNUM pointer for x coordinate of k * generator * \return 1 on success and 0 otherwise */ -int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, + BIGNUM **kinv, BIGNUM **rp); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1236,8 +1414,9 @@ int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); * \param eckey EC_KEY object containing a private EC key * \return 1 on success and 0 otherwise */ -int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign(int type, const unsigned char *dgst, + int dgstlen, unsigned char *sig, + unsigned int *siglen, EC_KEY *eckey); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1252,9 +1431,10 @@ int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, * \param eckey EC_KEY object containing a private EC key * \return 1 on success and 0 otherwise */ -int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign_ex(int type, const unsigned char *dgst, + int dgstlen, unsigned char *sig, + unsigned int *siglen, const BIGNUM *kinv, + const BIGNUM *rp, EC_KEY *eckey); /** Verifies that the given signature is valid ECDSA signature * of the supplied hash value using the specified public key. @@ -1267,218 +1447,126 @@ int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, * \return 1 if the signature is valid, 0 if the signature is invalid * and -1 on error */ -int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_verify(int type, const unsigned char *dgst, + int dgstlen, const unsigned char *sig, + int siglen, EC_KEY *eckey); /** Returns the maximum length of the DER encoded signature * \param eckey EC_KEY object * \return numbers of bytes required for the DER encoded signature */ -int ECDSA_size(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_size(const EC_KEY *eckey); /********************************************************************/ /* EC_KEY_METHOD constructors, destructors, writers and accessors */ /********************************************************************/ -EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); -void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); -void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, - int (*init)(EC_KEY *key), - void (*finish)(EC_KEY *key), - int (*copy)(EC_KEY *dest, const EC_KEY *src), - int (*set_group)(EC_KEY *key, const EC_GROUP *grp), - int (*set_private)(EC_KEY *key, - const BIGNUM *priv_key), - int (*set_public)(EC_KEY *key, - const EC_POINT *pub_key)); +OSSL_DEPRECATEDIN_3_0 EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_init + (EC_KEY_METHOD *meth, + int (*init)(EC_KEY *key), + void (*finish)(EC_KEY *key), + int (*copy)(EC_KEY *dest, const EC_KEY *src), + int (*set_group)(EC_KEY *key, const EC_GROUP *grp), + int (*set_private)(EC_KEY *key, const BIGNUM *priv_key), + int (*set_public)(EC_KEY *key, const EC_POINT *pub_key)); -void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, - int (*keygen)(EC_KEY *key)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, + int (*keygen)(EC_KEY *key)); -void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, - int (*ckey)(unsigned char **psec, - size_t *pseclen, - const EC_POINT *pub_key, - const EC_KEY *ecdh)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_compute_key + (EC_KEY_METHOD *meth, + int (*ckey)(unsigned char **psec, size_t *pseclen, + const EC_POINT *pub_key, const EC_KEY *ecdh)); -void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, - int (*sign)(int type, const unsigned char *dgst, - int dlen, unsigned char *sig, - unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *r, - EC_KEY *eckey), - int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, - BIGNUM **kinvp, BIGNUM **rp), - ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, - int dgst_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_sign + (EC_KEY_METHOD *meth, + int (*sign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); -void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth, - int (*verify)(int type, const unsigned - char *dgst, int dgst_len, - const unsigned char *sigbuf, - int sig_len, EC_KEY *eckey), - int (*verify_sig)(const unsigned char *dgst, +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_verify + (EC_KEY_METHOD *meth, + int (*verify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (*verify_sig)(const unsigned char *dgst, + int dgst_len, const ECDSA_SIG *sig, + EC_KEY *eckey)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_init + (const EC_KEY_METHOD *meth, + int (**pinit)(EC_KEY *key), + void (**pfinish)(EC_KEY *key), + int (**pcopy)(EC_KEY *dest, const EC_KEY *src), + int (**pset_group)(EC_KEY *key, const EC_GROUP *grp), + int (**pset_private)(EC_KEY *key, const BIGNUM *priv_key), + int (**pset_public)(EC_KEY *key, const EC_POINT *pub_key)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_keygen + (const EC_KEY_METHOD *meth, int (**pkeygen)(EC_KEY *key)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_compute_key + (const EC_KEY_METHOD *meth, + int (**pck)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_sign + (const EC_KEY_METHOD *meth, + int (**psign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, + const BIGNUM *in_kinv, + const BIGNUM *in_r, EC_KEY *eckey)); -void EC_KEY_METHOD_get_init(const EC_KEY_METHOD *meth, - int (**pinit)(EC_KEY *key), - void (**pfinish)(EC_KEY *key), - int (**pcopy)(EC_KEY *dest, const EC_KEY *src), - int (**pset_group)(EC_KEY *key, - const EC_GROUP *grp), - int (**pset_private)(EC_KEY *key, - const BIGNUM *priv_key), - int (**pset_public)(EC_KEY *key, - const EC_POINT *pub_key)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_verify + (const EC_KEY_METHOD *meth, + int (**pverify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (**pverify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ -void EC_KEY_METHOD_get_keygen(const EC_KEY_METHOD *meth, - int (**pkeygen)(EC_KEY *key)); +# define EVP_EC_gen(curve) \ + EVP_PKEY_Q_keygen(NULL, NULL, "EC", (char *)(strstr(curve, ""))) + /* strstr is used to enable type checking for the variadic string arg */ +# define ECParameters_dup(x) ASN1_dup_of(EC_KEY, i2d_ECParameters, \ + d2i_ECParameters, x) -void EC_KEY_METHOD_get_compute_key(const EC_KEY_METHOD *meth, - int (**pck)(unsigned char **psec, - size_t *pseclen, - const EC_POINT *pub_key, - const EC_KEY *ecdh)); - -void EC_KEY_METHOD_get_sign(const EC_KEY_METHOD *meth, - int (**psign)(int type, const unsigned char *dgst, - int dlen, unsigned char *sig, - unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *r, - EC_KEY *eckey), - int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, - BIGNUM **kinvp, BIGNUM **rp), - ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, - int dgst_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); - -void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth, - int (**pverify)(int type, const unsigned - char *dgst, int dgst_len, - const unsigned char *sigbuf, - int sig_len, EC_KEY *eckey), - int (**pverify_sig)(const unsigned char *dgst, - int dgst_len, - const ECDSA_SIG *sig, - EC_KEY *eckey)); - -# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) - -# ifndef __cplusplus -# if defined(__SUNPRO_C) -# if __SUNPRO_C >= 0x520 -# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# ifndef __cplusplus +# if defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif # endif # endif + # endif - -# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) - -# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) - -# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, \ - (void *)(plen)) - -# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)(p)) - -/* SM2 will skip the operation check so no need to pass operation here */ -# define EVP_PKEY_CTX_set1_id(ctx, id, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_SET1_ID, (int)id_len, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id(ctx, id) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID, 0, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id_len(ctx, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID_LEN, 0, (void*)(id_len)) - -# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_SET1_ID (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET1_ID (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_GET1_ID_LEN (EVP_PKEY_ALG_CTRL + 13) -/* KDF types */ -# define EVP_PKEY_ECDH_KDF_NONE 1 -# define EVP_PKEY_ECDH_KDF_X9_63 2 -/** The old name for EVP_PKEY_ECDH_KDF_X9_63 - * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, - * it is actually specified in ANSI X9.63. - * This identifier is retained for backwards compatibility - */ -# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 - - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdh.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdh.h index 681f3d5e..56bd4cc2 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdh.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdh.h @@ -1,7 +1,7 @@ /* * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdsa.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdsa.h index 681f3d5e..56bd4cc2 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdsa.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdsa.h @@ -1,7 +1,7 @@ /* * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecerr.h index 51738113..f15f91f6 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecerr.h @@ -1,206 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ECERR_H -# define HEADER_ECERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_ECERR_H +# define OPENSSL_ECERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_EC -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EC_strings(void); - -/* - * EC function codes. - */ -# define EC_F_BN_TO_FELEM 224 -# define EC_F_D2I_ECPARAMETERS 144 -# define EC_F_D2I_ECPKPARAMETERS 145 -# define EC_F_D2I_ECPRIVATEKEY 146 -# define EC_F_DO_EC_KEY_PRINT 221 -# define EC_F_ECDH_CMS_DECRYPT 238 -# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 -# define EC_F_ECDH_COMPUTE_KEY 246 -# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 -# define EC_F_ECDSA_DO_SIGN_EX 251 -# define EC_F_ECDSA_DO_VERIFY 252 -# define EC_F_ECDSA_SIGN_EX 254 -# define EC_F_ECDSA_SIGN_SETUP 248 -# define EC_F_ECDSA_SIG_NEW 265 -# define EC_F_ECDSA_VERIFY 253 -# define EC_F_ECD_ITEM_VERIFY 270 -# define EC_F_ECKEY_PARAM2TYPE 223 -# define EC_F_ECKEY_PARAM_DECODE 212 -# define EC_F_ECKEY_PRIV_DECODE 213 -# define EC_F_ECKEY_PRIV_ENCODE 214 -# define EC_F_ECKEY_PUB_DECODE 215 -# define EC_F_ECKEY_PUB_ENCODE 216 -# define EC_F_ECKEY_TYPE2PARAM 220 -# define EC_F_ECPARAMETERS_PRINT 147 -# define EC_F_ECPARAMETERS_PRINT_FP 148 -# define EC_F_ECPKPARAMETERS_PRINT 149 -# define EC_F_ECPKPARAMETERS_PRINT_FP 150 -# define EC_F_ECP_NISTZ256_GET_AFFINE 240 -# define EC_F_ECP_NISTZ256_INV_MOD_ORD 275 -# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 -# define EC_F_ECP_NISTZ256_POINTS_MUL 241 -# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 -# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 -# define EC_F_ECX_KEY_OP 266 -# define EC_F_ECX_PRIV_ENCODE 267 -# define EC_F_ECX_PUB_ENCODE 268 -# define EC_F_EC_ASN1_GROUP2CURVE 153 -# define EC_F_EC_ASN1_GROUP2FIELDID 154 -# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 -# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 296 -# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 -# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 -# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 285 -# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 288 -# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 -# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 -# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 289 -# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 -# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 -# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 -# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 -# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 -# define EC_F_EC_GFP_MONT_FIELD_INV 297 -# define EC_F_EC_GFP_MONT_FIELD_MUL 131 -# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 -# define EC_F_EC_GFP_MONT_FIELD_SQR 132 -# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 -# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 -# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 -# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 -# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 -# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 -# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 -# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 -# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 -# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 -# define EC_F_EC_GFP_NIST_FIELD_MUL 200 -# define EC_F_EC_GFP_NIST_FIELD_SQR 201 -# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 -# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 287 -# define EC_F_EC_GFP_SIMPLE_FIELD_INV 298 -# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 -# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 -# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 -# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 -# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 -# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 -# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 -# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 -# define EC_F_EC_GROUP_CHECK 170 -# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 -# define EC_F_EC_GROUP_COPY 106 -# define EC_F_EC_GROUP_GET_CURVE 291 -# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 -# define EC_F_EC_GROUP_GET_CURVE_GFP 130 -# define EC_F_EC_GROUP_GET_DEGREE 173 -# define EC_F_EC_GROUP_GET_ECPARAMETERS 261 -# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 -# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 -# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 -# define EC_F_EC_GROUP_NEW 108 -# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 -# define EC_F_EC_GROUP_NEW_FROM_DATA 175 -# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 263 -# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 -# define EC_F_EC_GROUP_SET_CURVE 292 -# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 -# define EC_F_EC_GROUP_SET_CURVE_GFP 109 -# define EC_F_EC_GROUP_SET_GENERATOR 111 -# define EC_F_EC_GROUP_SET_SEED 286 -# define EC_F_EC_KEY_CHECK_KEY 177 -# define EC_F_EC_KEY_COPY 178 -# define EC_F_EC_KEY_GENERATE_KEY 179 -# define EC_F_EC_KEY_NEW 182 -# define EC_F_EC_KEY_NEW_METHOD 245 -# define EC_F_EC_KEY_OCT2PRIV 255 -# define EC_F_EC_KEY_PRINT 180 -# define EC_F_EC_KEY_PRINT_FP 181 -# define EC_F_EC_KEY_PRIV2BUF 279 -# define EC_F_EC_KEY_PRIV2OCT 256 -# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 -# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 -# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 -# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 -# define EC_F_EC_PKEY_CHECK 273 -# define EC_F_EC_PKEY_PARAM_CHECK 274 -# define EC_F_EC_POINTS_MAKE_AFFINE 136 -# define EC_F_EC_POINTS_MUL 290 -# define EC_F_EC_POINT_ADD 112 -# define EC_F_EC_POINT_BN2POINT 280 -# define EC_F_EC_POINT_CMP 113 -# define EC_F_EC_POINT_COPY 114 -# define EC_F_EC_POINT_DBL 115 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 293 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 -# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 -# define EC_F_EC_POINT_INVERT 210 -# define EC_F_EC_POINT_IS_AT_INFINITY 118 -# define EC_F_EC_POINT_IS_ON_CURVE 119 -# define EC_F_EC_POINT_MAKE_AFFINE 120 -# define EC_F_EC_POINT_NEW 121 -# define EC_F_EC_POINT_OCT2POINT 122 -# define EC_F_EC_POINT_POINT2BUF 281 -# define EC_F_EC_POINT_POINT2OCT 123 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 294 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 295 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 -# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 -# define EC_F_EC_POINT_SET_TO_INFINITY 127 -# define EC_F_EC_PRE_COMP_NEW 196 -# define EC_F_EC_SCALAR_MUL_LADDER 284 -# define EC_F_EC_WNAF_MUL 187 -# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 -# define EC_F_I2D_ECPARAMETERS 190 -# define EC_F_I2D_ECPKPARAMETERS 191 -# define EC_F_I2D_ECPRIVATEKEY 192 -# define EC_F_I2O_ECPUBLICKEY 151 -# define EC_F_NISTP224_PRE_COMP_NEW 227 -# define EC_F_NISTP256_PRE_COMP_NEW 236 -# define EC_F_NISTP521_PRE_COMP_NEW 237 -# define EC_F_O2I_ECPUBLICKEY 152 -# define EC_F_OLD_EC_PRIV_DECODE 222 -# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 -# define EC_F_OSSL_ECDSA_SIGN_SIG 249 -# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 -# define EC_F_PKEY_ECD_CTRL 271 -# define EC_F_PKEY_ECD_DIGESTSIGN 272 -# define EC_F_PKEY_ECD_DIGESTSIGN25519 276 -# define EC_F_PKEY_ECD_DIGESTSIGN448 277 -# define EC_F_PKEY_ECX_DERIVE 269 -# define EC_F_PKEY_EC_CTRL 197 -# define EC_F_PKEY_EC_CTRL_STR 198 -# define EC_F_PKEY_EC_DERIVE 217 -# define EC_F_PKEY_EC_INIT 282 -# define EC_F_PKEY_EC_KDF_DERIVE 283 -# define EC_F_PKEY_EC_KEYGEN 199 -# define EC_F_PKEY_EC_PARAMGEN 219 -# define EC_F_PKEY_EC_SIGN 218 -# define EC_F_VALIDATE_ECX_DERIVE 278 /* * EC reason codes. @@ -212,17 +30,22 @@ int ERR_load_EC_strings(void); # define EC_R_CANNOT_INVERT 165 # define EC_R_COORDINATES_OUT_OF_RANGE 146 # define EC_R_CURVE_DOES_NOT_SUPPORT_ECDH 160 +# define EC_R_CURVE_DOES_NOT_SUPPORT_ECDSA 170 # define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 -# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 # define EC_R_DECODE_ERROR 142 # define EC_R_DISCRIMINANT_IS_ZERO 118 # define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 +# define EC_R_EXPLICIT_PARAMS_NOT_SUPPORTED 127 +# define EC_R_FAILED_MAKING_PUBLIC_KEY 166 # define EC_R_FIELD_TOO_LARGE 143 # define EC_R_GF2M_NOT_SUPPORTED 147 # define EC_R_GROUP2PKPARAMETERS_FAILURE 120 # define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 # define EC_R_INCOMPATIBLE_OBJECTS 101 +# define EC_R_INVALID_A 168 # define EC_R_INVALID_ARGUMENT 112 +# define EC_R_INVALID_B 169 +# define EC_R_INVALID_COFACTOR 171 # define EC_R_INVALID_COMPRESSED_POINT 110 # define EC_R_INVALID_COMPRESSION_BIT 109 # define EC_R_INVALID_CURVE 141 @@ -231,12 +54,17 @@ int ERR_load_EC_strings(void); # define EC_R_INVALID_ENCODING 102 # define EC_R_INVALID_FIELD 103 # define EC_R_INVALID_FORM 104 +# define EC_R_INVALID_GENERATOR 173 # define EC_R_INVALID_GROUP_ORDER 122 # define EC_R_INVALID_KEY 116 +# define EC_R_INVALID_LENGTH 117 +# define EC_R_INVALID_NAMED_GROUP_CONVERSION 174 # define EC_R_INVALID_OUTPUT_LENGTH 161 +# define EC_R_INVALID_P 172 # define EC_R_INVALID_PEER_KEY 133 # define EC_R_INVALID_PENTANOMIAL_BASIS 132 # define EC_R_INVALID_PRIVATE_KEY 123 +# define EC_R_INVALID_SEED 175 # define EC_R_INVALID_TRINOMIAL_BASIS 137 # define EC_R_KDF_PARAMETER_ERROR 148 # define EC_R_KEYS_NOT_SET 140 @@ -255,7 +83,6 @@ int ERR_load_EC_strings(void); # define EC_R_OPERATION_NOT_SUPPORTED 152 # define EC_R_PASSED_NULL_PARAMETER 134 # define EC_R_PEER_KEY_ERROR 149 -# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 # define EC_R_POINT_ARITHMETIC_FAILURE 155 # define EC_R_POINT_AT_INFINITY 106 # define EC_R_POINT_COORDINATES_BLIND_FAILURE 163 @@ -263,6 +90,7 @@ int ERR_load_EC_strings(void); # define EC_R_RANDOM_NUMBER_GENERATION_FAILED 158 # define EC_R_SHARED_INFO_ERROR 150 # define EC_R_SLOT_FULL 108 +# define EC_R_TOO_MANY_RETRIES 176 # define EC_R_UNDEFINED_GENERATOR 113 # define EC_R_UNDEFINED_ORDER 128 # define EC_R_UNKNOWN_COFACTOR 164 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/encoder.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/encoder.h new file mode 100644 index 00000000..c37a6f16 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/encoder.h @@ -0,0 +1,124 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ENCODER_H +# define OPENSSL_ENCODER_H +# pragma once + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_ENCODER *OSSL_ENCODER_fetch(OSSL_LIB_CTX *libctx, const char *name, + const char *properties); +int OSSL_ENCODER_up_ref(OSSL_ENCODER *encoder); +void OSSL_ENCODER_free(OSSL_ENCODER *encoder); + +const OSSL_PROVIDER *OSSL_ENCODER_get0_provider(const OSSL_ENCODER *encoder); +const char *OSSL_ENCODER_get0_properties(const OSSL_ENCODER *encoder); +const char *OSSL_ENCODER_get0_name(const OSSL_ENCODER *kdf); +const char *OSSL_ENCODER_get0_description(const OSSL_ENCODER *kdf); +int OSSL_ENCODER_is_a(const OSSL_ENCODER *encoder, const char *name); + +void OSSL_ENCODER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_ENCODER *encoder, void *arg), + void *arg); +int OSSL_ENCODER_names_do_all(const OSSL_ENCODER *encoder, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *OSSL_ENCODER_gettable_params(OSSL_ENCODER *encoder); +int OSSL_ENCODER_get_params(OSSL_ENCODER *encoder, OSSL_PARAM params[]); + +const OSSL_PARAM *OSSL_ENCODER_settable_ctx_params(OSSL_ENCODER *encoder); +OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new(void); +int OSSL_ENCODER_CTX_set_params(OSSL_ENCODER_CTX *ctx, + const OSSL_PARAM params[]); +void OSSL_ENCODER_CTX_free(OSSL_ENCODER_CTX *ctx); + +/* Utilities that help set specific parameters */ +int OSSL_ENCODER_CTX_set_passphrase(OSSL_ENCODER_CTX *ctx, + const unsigned char *kstr, size_t klen); +int OSSL_ENCODER_CTX_set_pem_password_cb(OSSL_ENCODER_CTX *ctx, + pem_password_cb *cb, void *cbarg); +int OSSL_ENCODER_CTX_set_passphrase_cb(OSSL_ENCODER_CTX *ctx, + OSSL_PASSPHRASE_CALLBACK *cb, + void *cbarg); +int OSSL_ENCODER_CTX_set_passphrase_ui(OSSL_ENCODER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); +int OSSL_ENCODER_CTX_set_cipher(OSSL_ENCODER_CTX *ctx, + const char *cipher_name, + const char *propquery); +int OSSL_ENCODER_CTX_set_selection(OSSL_ENCODER_CTX *ctx, int selection); +int OSSL_ENCODER_CTX_set_output_type(OSSL_ENCODER_CTX *ctx, + const char *output_type); +int OSSL_ENCODER_CTX_set_output_structure(OSSL_ENCODER_CTX *ctx, + const char *output_structure); + +/* Utilities to add encoders */ +int OSSL_ENCODER_CTX_add_encoder(OSSL_ENCODER_CTX *ctx, OSSL_ENCODER *encoder); +int OSSL_ENCODER_CTX_add_extra(OSSL_ENCODER_CTX *ctx, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_ENCODER_CTX_get_num_encoders(OSSL_ENCODER_CTX *ctx); + +typedef struct ossl_encoder_instance_st OSSL_ENCODER_INSTANCE; +OSSL_ENCODER * +OSSL_ENCODER_INSTANCE_get_encoder(OSSL_ENCODER_INSTANCE *encoder_inst); +void * +OSSL_ENCODER_INSTANCE_get_encoder_ctx(OSSL_ENCODER_INSTANCE *encoder_inst); +const char * +OSSL_ENCODER_INSTANCE_get_output_type(OSSL_ENCODER_INSTANCE *encoder_inst); +const char * +OSSL_ENCODER_INSTANCE_get_output_structure(OSSL_ENCODER_INSTANCE *encoder_inst); + +typedef const void *OSSL_ENCODER_CONSTRUCT(OSSL_ENCODER_INSTANCE *encoder_inst, + void *construct_data); +typedef void OSSL_ENCODER_CLEANUP(void *construct_data); + +int OSSL_ENCODER_CTX_set_construct(OSSL_ENCODER_CTX *ctx, + OSSL_ENCODER_CONSTRUCT *construct); +int OSSL_ENCODER_CTX_set_construct_data(OSSL_ENCODER_CTX *ctx, + void *construct_data); +int OSSL_ENCODER_CTX_set_cleanup(OSSL_ENCODER_CTX *ctx, + OSSL_ENCODER_CLEANUP *cleanup); + +/* Utilities to output the object to encode */ +int OSSL_ENCODER_to_bio(OSSL_ENCODER_CTX *ctx, BIO *out); +#ifndef OPENSSL_NO_STDIO +int OSSL_ENCODER_to_fp(OSSL_ENCODER_CTX *ctx, FILE *fp); +#endif +int OSSL_ENCODER_to_data(OSSL_ENCODER_CTX *ctx, unsigned char **pdata, + size_t *pdata_len); + +/* + * Create the OSSL_ENCODER_CTX with an associated type. This will perform + * an implicit OSSL_ENCODER_fetch(), suitable for the object of that type. + * This is more useful than calling OSSL_ENCODER_CTX_new(). + */ +OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new_for_pkey(const EVP_PKEY *pkey, + int selection, + const char *output_type, + const char *output_struct, + const char *propquery); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/encodererr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/encodererr.h new file mode 100644 index 00000000..5e318b14 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/encodererr.h @@ -0,0 +1,28 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ENCODERERR_H +# define OPENSSL_ENCODERERR_H +# pragma once + +# include +# include +# include + + + +/* + * OSSL_ENCODER reason codes. + */ +# define OSSL_ENCODER_R_ENCODER_NOT_FOUND 101 +# define OSSL_ENCODER_R_INCORRECT_PROPERTY_QUERY 100 +# define OSSL_ENCODER_R_MISSING_GET_PARAMS 102 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engine.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engine.h index d707eaeb..2fbc82c3 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engine.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engine.h @@ -2,52 +2,58 @@ * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENGINE_H -# define HEADER_ENGINE_H +#ifndef OPENSSL_ENGINE_H +# define OPENSSL_ENGINE_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ENGINE_H +# endif # include # ifndef OPENSSL_NO_ENGINE -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# include -# include -# include -# include -# include -# include -# include -# endif -# include -# include -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# include +# include +# include +# include +# include +# endif +# include +# include +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif /* * These flags are used to control combinations of algorithm (methods) by * bitwise "OR"ing. */ -# define ENGINE_METHOD_RSA (unsigned int)0x0001 -# define ENGINE_METHOD_DSA (unsigned int)0x0002 -# define ENGINE_METHOD_DH (unsigned int)0x0004 -# define ENGINE_METHOD_RAND (unsigned int)0x0008 -# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 -# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 -# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 -# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 -# define ENGINE_METHOD_EC (unsigned int)0x0800 +# define ENGINE_METHOD_RSA (unsigned int)0x0001 +# define ENGINE_METHOD_DSA (unsigned int)0x0002 +# define ENGINE_METHOD_DH (unsigned int)0x0004 +# define ENGINE_METHOD_RAND (unsigned int)0x0008 +# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 +# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 +# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 +# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 +# define ENGINE_METHOD_EC (unsigned int)0x0800 /* Obvious all-or-nothing cases. */ -# define ENGINE_METHOD_ALL (unsigned int)0xFFFF -# define ENGINE_METHOD_NONE (unsigned int)0x0000 +# define ENGINE_METHOD_ALL (unsigned int)0xFFFF +# define ENGINE_METHOD_NONE (unsigned int)0x0000 /* * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used @@ -55,7 +61,7 @@ extern "C" { * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to * initialise registered ENGINEs if they are not already initialised. */ -# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 +# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 /* ENGINE flags that can be set by ENGINE_set_flags(). */ /* Not used */ @@ -67,7 +73,7 @@ extern "C" { * these control commands on behalf of the ENGINE using their "cmd_defns" * data. */ -# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 +# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 /* * This flag is for ENGINEs who return new duplicate structures when found @@ -79,7 +85,7 @@ extern "C" { * ENGINE_by_id() just increments the existing ENGINE's structural reference * count. */ -# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 +# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 /* * This flag if for an ENGINE that does not want its methods registered as @@ -87,7 +93,7 @@ extern "C" { * usable as default methods. */ -# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 +# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 /* * ENGINEs can support their own command types, and these flags are used in @@ -102,23 +108,23 @@ extern "C" { */ /* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 +# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 /* * accepts string input (cast from 'void*' to 'const char *', 4th parameter * to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 +# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 /* * Indicates that the control command takes *no* input. Ie. the control * command is unparameterised. */ -# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 +# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 /* * Indicates that the control command is internal. This control command won't * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() * function. */ -# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 +# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 /* * NB: These 3 control commands are deprecated and should not be used. @@ -137,21 +143,21 @@ extern "C" { * sense to some engines. In such a case, they do nothing but return the * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. */ -# define ENGINE_CTRL_SET_LOGSTREAM 1 -# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 -# define ENGINE_CTRL_HUP 3/* Close and reinitialise +# define ENGINE_CTRL_SET_LOGSTREAM 1 +# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 +# define ENGINE_CTRL_HUP 3/* Close and reinitialise * any handles/connections * etc. */ -# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ -# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used +# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ +# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used * when calling the password * callback and the user * interface */ -# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, +# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, * given a string that * represents a file name * or so */ -# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given +# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given * section in the already * loaded configuration */ @@ -175,22 +181,22 @@ extern "C" { * worth checking this first if the caller is trying to "discover" the * engine's capabilities and doesn't want errors generated unnecessarily. */ -# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 +# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 /* * Returns a positive command number for the first command supported by the * engine. Returns zero if no ctrl commands are supported. */ -# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 +# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 /* * The 'long' argument specifies a command implemented by the engine, and the * return value is the next command supported, or zero if there are no more. */ -# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 +# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 /* * The 'void*' argument is a command name (cast from 'const char *'), and the * return value is the command that corresponds to it. */ -# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 +# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 /* * The next two allow a command to be converted into its corresponding string * form. In each case, the 'long' argument supplies the command. In the @@ -199,23 +205,23 @@ extern "C" { * string buffer large enough, and it will be populated with the name of the * command (WITH a trailing EOL). */ -# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 -# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 +# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 +# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 /* The next two are similar but give a "short description" of a command. */ -# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 -# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 +# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 +# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 /* * With this command, the return value is the OR'd combination of * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given * engine-specific ctrl command expects. */ -# define ENGINE_CTRL_GET_CMD_FLAGS 18 +# define ENGINE_CTRL_GET_CMD_FLAGS 18 /* * ENGINE implementations should start the numbering of their own control * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). */ -# define ENGINE_CMD_BASE 200 +# define ENGINE_CMD_BASE 200 /* * NB: These 2 nCipher "chil" control commands are deprecated, and their @@ -226,17 +232,17 @@ extern "C" { */ /* Flags specific to the nCipher "chil" engine */ -# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 - /* - * Depending on the value of the (long)i argument, this sets or - * unsets the SimpleForkCheck flag in the CHIL API to enable or - * disable checking and workarounds for applications that fork(). - */ -# define ENGINE_CTRL_CHIL_NO_LOCKING 101 - /* - * This prevents the initialisation function from providing mutex - * callbacks to the nCipher library. - */ +# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 + /* + * Depending on the value of the (long)i argument, this sets or + * unsets the SimpleForkCheck flag in the CHIL API to enable or + * disable checking and workarounds for applications that fork(). + */ +# define ENGINE_CTRL_CHIL_NO_LOCKING 101 + /* + * This prevents the initialisation function from providing mutex + * callbacks to the nCipher library. + */ /* * If an ENGINE supports its own specific control commands and wishes the @@ -308,44 +314,58 @@ typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, */ /* Get the first/last "ENGINE" type available. */ -ENGINE *ENGINE_get_first(void); -ENGINE *ENGINE_get_last(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_first(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_last(void); +# endif /* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ -ENGINE *ENGINE_get_next(ENGINE *e); -ENGINE *ENGINE_get_prev(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_next(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_prev(ENGINE *e); +# endif /* Add another "ENGINE" type into the array. */ -int ENGINE_add(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_add(ENGINE *e); +# endif /* Remove an existing "ENGINE" type from the array. */ -int ENGINE_remove(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_remove(ENGINE *e); +# endif /* Retrieve an engine from the list by its unique "id" value. */ -ENGINE *ENGINE_by_id(const char *id); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_by_id(const char *id); +# endif -#if OPENSSL_API_COMPAT < 0x10100000L -# define ENGINE_load_openssl() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) -# define ENGINE_load_dynamic() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) -# ifndef OPENSSL_NO_STATIC_ENGINE -# define ENGINE_load_padlock() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) -# define ENGINE_load_capi() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) -# define ENGINE_load_afalg() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) -# endif -# define ENGINE_load_cryptodev() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) -# define ENGINE_load_rdrand() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) -#endif -void ENGINE_load_builtin_engines(void); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define ENGINE_load_openssl() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) +# define ENGINE_load_dynamic() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) +# ifndef OPENSSL_NO_STATIC_ENGINE +# define ENGINE_load_padlock() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) +# define ENGINE_load_capi() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) +# define ENGINE_load_afalg() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) +# endif +# define ENGINE_load_cryptodev() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) +# define ENGINE_load_rdrand() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ENGINE_load_builtin_engines(void); +# endif /* * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation * "registry" handling. */ -unsigned int ENGINE_get_table_flags(void); -void ENGINE_set_table_flags(unsigned int flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned int ENGINE_get_table_flags(void); +OSSL_DEPRECATEDIN_3_0 void ENGINE_set_table_flags(unsigned int flags); +# endif /*- Manage registration of ENGINEs per "table". For each type, there are 3 * functions; @@ -354,42 +374,35 @@ void ENGINE_set_table_flags(unsigned int flags); * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list * Cleanup is automatically registered from each table when required. */ - -int ENGINE_register_RSA(ENGINE *e); -void ENGINE_unregister_RSA(ENGINE *e); -void ENGINE_register_all_RSA(void); - -int ENGINE_register_DSA(ENGINE *e); -void ENGINE_unregister_DSA(ENGINE *e); -void ENGINE_register_all_DSA(void); - -int ENGINE_register_EC(ENGINE *e); -void ENGINE_unregister_EC(ENGINE *e); -void ENGINE_register_all_EC(void); - -int ENGINE_register_DH(ENGINE *e); -void ENGINE_unregister_DH(ENGINE *e); -void ENGINE_register_all_DH(void); - -int ENGINE_register_RAND(ENGINE *e); -void ENGINE_unregister_RAND(ENGINE *e); -void ENGINE_register_all_RAND(void); - -int ENGINE_register_ciphers(ENGINE *e); -void ENGINE_unregister_ciphers(ENGINE *e); -void ENGINE_register_all_ciphers(void); - -int ENGINE_register_digests(ENGINE *e); -void ENGINE_unregister_digests(ENGINE *e); -void ENGINE_register_all_digests(void); - -int ENGINE_register_pkey_meths(ENGINE *e); -void ENGINE_unregister_pkey_meths(ENGINE *e); -void ENGINE_register_all_pkey_meths(void); - -int ENGINE_register_pkey_asn1_meths(ENGINE *e); -void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); -void ENGINE_register_all_pkey_asn1_meths(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_RSA(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_DSA(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_EC(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_DH(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_RAND(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_ciphers(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_digests(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_pkey_meths(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_pkey_asn1_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_pkey_asn1_meths(void); +# endif /* * These functions register all support from the above categories. Note, use @@ -397,8 +410,10 @@ void ENGINE_register_all_pkey_asn1_meths(void); * may not need. If you only need a subset of functionality, consider using * more selective initialisation. */ -int ENGINE_register_complete(ENGINE *e); -int ENGINE_register_all_complete(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_complete(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_all_complete(void); +# endif /* * Send parameterised control commands to the engine. The possibilities to @@ -410,7 +425,10 @@ int ENGINE_register_all_complete(void); * commands that require an operational ENGINE, and only use functional * references in such situations. */ -int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, + void (*f) (void)); +# endif /* * This function tests if an ENGINE-specific command is usable as a @@ -418,7 +436,9 @@ int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). */ -int ENGINE_cmd_is_executable(ENGINE *e, int cmd); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_cmd_is_executable(ENGINE *e, int cmd); +# endif /* * This function works like ENGINE_ctrl() with the exception of taking a @@ -426,8 +446,11 @@ int ENGINE_cmd_is_executable(ENGINE *e, int cmd); * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation * on how to use the cmd_name and cmd_optional. */ -int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, - long i, void *p, void (*f) (void), int cmd_optional); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, + long i, void *p, void (*f) (void), + int cmd_optional); +# endif /* * This function passes a command-name and argument to an ENGINE. The @@ -451,8 +474,11 @@ int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, * applications can work consistently with the same configuration for the * same ENGINE-enabled devices, across applications. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, int cmd_optional); +# endif /* * These functions are useful for manufacturing new ENGINE structures. They @@ -462,45 +488,59 @@ int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, * These are also here so that the ENGINE structure doesn't have to be * exposed and break binary compatibility! */ -ENGINE *ENGINE_new(void); -int ENGINE_free(ENGINE *e); -int ENGINE_up_ref(ENGINE *e); -int ENGINE_set_id(ENGINE *e, const char *id); -int ENGINE_set_name(ENGINE *e, const char *name); -int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); -int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); -int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); -int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); -int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); -int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_new(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_free(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_up_ref(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_id(ENGINE *e, const char *id); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_name(ENGINE *e, const char *name); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_destroy_function(ENGINE *e,ENGINE_GEN_INT_FUNC_PTR destroy_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); -int ENGINE_set_load_privkey_function(ENGINE *e, - ENGINE_LOAD_KEY_PTR loadpriv_f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_load_privkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpriv_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, - ENGINE_SSL_CLIENT_CERT_PTR - loadssl_f); + ENGINE_SSL_CLIENT_CERT_PTR loadssl_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); -int ENGINE_set_flags(ENGINE *e, int flags); -int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_flags(ENGINE *e, int flags); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_cmd_defns(ENGINE *e, + const ENGINE_CMD_DEFN *defns); +# endif /* These functions allow control over any per-structure ENGINE data. */ -#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ +# define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) -int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); -void *ENGINE_get_ex_data(const ENGINE *e, int idx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *ENGINE_get_ex_data(const ENGINE *e, int idx); +# endif -#if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * This function previously cleaned up anything that needs it. Auto-deinit will * now take care of it so it is no longer required to call this function. */ -# define ENGINE_cleanup() while(0) continue -#endif +# define ENGINE_cleanup() while(0) continue +# endif /* * These return values from within the ENGINE structure. These can be useful @@ -508,37 +548,55 @@ void *ENGINE_get_ex_data(const ENGINE *e, int idx); * which you obtained. Using the result for functional purposes if you only * obtained a structural reference may be problematic! */ -const char *ENGINE_get_id(const ENGINE *e); -const char *ENGINE_get_name(const ENGINE *e); -const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); -const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); -const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); -const DH_METHOD *ENGINE_get_DH(const ENGINE *e); -const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ENGINE_get_id(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const char *ENGINE_get_name(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); -ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE - *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, const char *str, int len); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, - const char *str, - int len); + const char *str, int len); +OSSL_DEPRECATEDIN_3_0 const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); -int ENGINE_get_flags(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_get_flags(const ENGINE *e); +# endif /* * FUNCTIONAL functions. These functions deal with ENGINE structures that @@ -554,31 +612,40 @@ int ENGINE_get_flags(const ENGINE *e); */ /* - * Initialise a engine type for use (or up its reference count if it's + * Initialise an engine type for use (or up its reference count if it's * already in use). This will fail if the engine is not currently operational * and cannot initialise. */ -int ENGINE_init(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_init(ENGINE *e); +# endif /* - * Free a functional reference to a engine type. This does not require a + * Free a functional reference to an engine type. This does not require a * corresponding call to ENGINE_free as it also releases a structural * reference. */ -int ENGINE_finish(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_finish(ENGINE *e); +# endif /* * The following functions handle keys that are stored in some secondary * location, handled by the engine. The storage may be on a card or * whatever. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data); +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data); -int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, - STACK_OF(X509_NAME) *ca_dn, X509 **pcert, - EVP_PKEY **ppkey, STACK_OF(X509) **pother, +OSSL_DEPRECATEDIN_3_0 +int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, STACK_OF(X509_NAME) *ca_dn, + X509 **pcert, EVP_PKEY **ppkey, + STACK_OF(X509) **pother, UI_METHOD *ui_method, void *callback_data); +# endif /* * This returns a pointer for the current ENGINE structure that is (by @@ -586,20 +653,26 @@ int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, * incremented reference, so it should be free'd (ENGINE_finish) before it is * discarded. */ -ENGINE *ENGINE_get_default_RSA(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RSA(void); +# endif /* Same for the other "methods" */ -ENGINE *ENGINE_get_default_DSA(void); -ENGINE *ENGINE_get_default_EC(void); -ENGINE *ENGINE_get_default_DH(void); -ENGINE *ENGINE_get_default_RAND(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_DSA(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_EC(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_DH(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RAND(void); +# endif /* * These functions can be used to get a functional reference to perform * ciphering or digesting corresponding to "nid". */ -ENGINE *ENGINE_get_cipher_engine(int nid); -ENGINE *ENGINE_get_digest_engine(int nid); -ENGINE *ENGINE_get_pkey_meth_engine(int nid); -ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_cipher_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_digest_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_pkey_meth_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); +# endif /* * This sets a new default ENGINE structure for performing RSA operations. If @@ -607,17 +680,22 @@ ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); * its reference count up'd so the caller should still free their own * reference 'e'. */ -int ENGINE_set_default_RSA(ENGINE *e); -int ENGINE_set_default_string(ENGINE *e, const char *def_list); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_string(ENGINE *e, + const char *def_list); +# endif /* Same for the other "methods" */ -int ENGINE_set_default_DSA(ENGINE *e); -int ENGINE_set_default_EC(ENGINE *e); -int ENGINE_set_default_DH(ENGINE *e); -int ENGINE_set_default_RAND(ENGINE *e); -int ENGINE_set_default_ciphers(ENGINE *e); -int ENGINE_set_default_digests(ENGINE *e); -int ENGINE_set_default_pkey_meths(ENGINE *e); -int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); +# endif /* * The combination "set" - the flags are bitwise "OR"d from the @@ -626,9 +704,10 @@ int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); * application requires only specific functionality, consider using more * selective functions. */ -int ENGINE_set_default(ENGINE *e, unsigned int flags); - -void ENGINE_add_conf_module(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default(ENGINE *e, unsigned int flags); +OSSL_DEPRECATEDIN_3_0 void ENGINE_add_conf_module(void); +# endif /* Deprecated functions ... */ /* int ENGINE_clear_defaults(void); */ @@ -638,12 +717,12 @@ void ENGINE_add_conf_module(void); /**************************/ /* Binary/behaviour compatibility levels */ -# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 +# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 /* * Binary versions older than this are too old for us (whether we're a loader * or a loadee) */ -# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 +# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 /* * When compiling an ENGINE entirely as an external shared library, loadable @@ -687,7 +766,7 @@ typedef struct st_dynamic_fns { * IMPLEMENT_DYNAMIC_CHECK_FN(). */ typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); -# define IMPLEMENT_DYNAMIC_CHECK_FN() \ +# define IMPLEMENT_DYNAMIC_CHECK_FN() \ OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ if (v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ @@ -713,7 +792,7 @@ typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); */ typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, const dynamic_fns *fns); -# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ +# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ OPENSSL_EXPORT \ int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ OPENSSL_EXPORT \ @@ -740,13 +819,15 @@ typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, */ void *ENGINE_get_static_state(void); -# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) -DEPRECATEDIN_1_1_0(void ENGINE_setup_bsd_cryptodev(void)) -# endif +# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ENGINE_setup_bsd_cryptodev(void); +# endif +# endif # ifdef __cplusplus } # endif -# endif -#endif +# endif /* OPENSSL_NO_ENGINE */ +#endif /* OPENSSL_ENGINE_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engineerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engineerr.h index 05e84bd2..d439b682 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engineerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engineerr.h @@ -1,72 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENGINEERR_H -# define HEADER_ENGINEERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_ENGINEERR_H +# define OPENSSL_ENGINEERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_ENGINE -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ENGINE_strings(void); - -/* - * ENGINE function codes. - */ -# define ENGINE_F_DIGEST_UPDATE 198 -# define ENGINE_F_DYNAMIC_CTRL 180 -# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 -# define ENGINE_F_DYNAMIC_LOAD 182 -# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 -# define ENGINE_F_ENGINE_ADD 105 -# define ENGINE_F_ENGINE_BY_ID 106 -# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 -# define ENGINE_F_ENGINE_CTRL 142 -# define ENGINE_F_ENGINE_CTRL_CMD 178 -# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 -# define ENGINE_F_ENGINE_FINISH 107 -# define ENGINE_F_ENGINE_GET_CIPHER 185 -# define ENGINE_F_ENGINE_GET_DIGEST 186 -# define ENGINE_F_ENGINE_GET_FIRST 195 -# define ENGINE_F_ENGINE_GET_LAST 196 -# define ENGINE_F_ENGINE_GET_NEXT 115 -# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 -# define ENGINE_F_ENGINE_GET_PKEY_METH 192 -# define ENGINE_F_ENGINE_GET_PREV 116 -# define ENGINE_F_ENGINE_INIT 119 -# define ENGINE_F_ENGINE_LIST_ADD 120 -# define ENGINE_F_ENGINE_LIST_REMOVE 121 -# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 -# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 -# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 -# define ENGINE_F_ENGINE_NEW 122 -# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 197 -# define ENGINE_F_ENGINE_REMOVE 123 -# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 -# define ENGINE_F_ENGINE_SET_ID 129 -# define ENGINE_F_ENGINE_SET_NAME 130 -# define ENGINE_F_ENGINE_TABLE_REGISTER 184 -# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 -# define ENGINE_F_ENGINE_UP_REF 190 -# define ENGINE_F_INT_CLEANUP_ITEM 199 -# define ENGINE_F_INT_CTRL_HELPER 172 -# define ENGINE_F_INT_ENGINE_CONFIGURE 188 -# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 -# define ENGINE_F_OSSL_HMAC_INIT 200 /* * ENGINE reason codes. diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h index b49f8812..2abf2483 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h @@ -1,14 +1,22 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ERR_H -# define HEADER_ERR_H + + +#ifndef OPENSSL_ERR_H +# define OPENSSL_ERR_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ERR_H +# endif # include @@ -17,38 +25,47 @@ # include # endif -# include +# include # include # include +# include #ifdef __cplusplus extern "C" { #endif -# ifndef OPENSSL_NO_ERR -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) -# else -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_FILENAMES +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,fn,ln) +# else +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,NULL,0) +# endif # endif +# include # include # define ERR_TXT_MALLOCED 0x01 # define ERR_TXT_STRING 0x02 -# define ERR_FLAG_MARK 0x01 -# define ERR_FLAG_CLEAR 0x02 +# if !defined(OPENSSL_NO_DEPRECATED_3_0) || defined(OSSL_FORCE_ERR_STATE) +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 -# define ERR_NUM_ERRORS 16 -typedef struct err_state_st { +# define ERR_NUM_ERRORS 16 +struct err_state_st { int err_flags[ERR_NUM_ERRORS]; + int err_marks[ERR_NUM_ERRORS]; unsigned long err_buffer[ERR_NUM_ERRORS]; char *err_data[ERR_NUM_ERRORS]; + size_t err_data_size[ERR_NUM_ERRORS]; int err_data_flags[ERR_NUM_ERRORS]; - const char *err_file[ERR_NUM_ERRORS]; + char *err_file[ERR_NUM_ERRORS]; int err_line[ERR_NUM_ERRORS]; + char *err_func[ERR_NUM_ERRORS]; int top, bottom; -} ERR_STATE; +}; +# endif /* library */ # define ERR_LIB_NONE 1 @@ -95,171 +112,384 @@ typedef struct err_state_st { # define ERR_LIB_ASYNC 51 # define ERR_LIB_KDF 52 # define ERR_LIB_SM2 53 +# define ERR_LIB_ESS 54 +# define ERR_LIB_PROP 55 +# define ERR_LIB_CRMF 56 +# define ERR_LIB_PROV 57 +# define ERR_LIB_CMP 58 +# define ERR_LIB_OSSL_ENCODER 59 +# define ERR_LIB_OSSL_DECODER 60 +# define ERR_LIB_HTTP 61 # define ERR_LIB_USER 128 -# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OSSL_STOREerr(f,r) ERR_PUT_error(ERR_LIB_OSSL_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SM2err(f,r) ERR_PUT_error(ERR_LIB_SM2,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define ASN1err(f, r) ERR_raise_data(ERR_LIB_ASN1, (r), NULL) +# define ASYNCerr(f, r) ERR_raise_data(ERR_LIB_ASYNC, (r), NULL) +# define BIOerr(f, r) ERR_raise_data(ERR_LIB_BIO, (r), NULL) +# define BNerr(f, r) ERR_raise_data(ERR_LIB_BN, (r), NULL) +# define BUFerr(f, r) ERR_raise_data(ERR_LIB_BUF, (r), NULL) +# define CMPerr(f, r) ERR_raise_data(ERR_LIB_CMP, (r), NULL) +# define CMSerr(f, r) ERR_raise_data(ERR_LIB_CMS, (r), NULL) +# define COMPerr(f, r) ERR_raise_data(ERR_LIB_COMP, (r), NULL) +# define CONFerr(f, r) ERR_raise_data(ERR_LIB_CONF, (r), NULL) +# define CRMFerr(f, r) ERR_raise_data(ERR_LIB_CRMF, (r), NULL) +# define CRYPTOerr(f, r) ERR_raise_data(ERR_LIB_CRYPTO, (r), NULL) +# define CTerr(f, r) ERR_raise_data(ERR_LIB_CT, (r), NULL) +# define DHerr(f, r) ERR_raise_data(ERR_LIB_DH, (r), NULL) +# define DSAerr(f, r) ERR_raise_data(ERR_LIB_DSA, (r), NULL) +# define DSOerr(f, r) ERR_raise_data(ERR_LIB_DSO, (r), NULL) +# define ECDHerr(f, r) ERR_raise_data(ERR_LIB_ECDH, (r), NULL) +# define ECDSAerr(f, r) ERR_raise_data(ERR_LIB_ECDSA, (r), NULL) +# define ECerr(f, r) ERR_raise_data(ERR_LIB_EC, (r), NULL) +# define ENGINEerr(f, r) ERR_raise_data(ERR_LIB_ENGINE, (r), NULL) +# define ESSerr(f, r) ERR_raise_data(ERR_LIB_ESS, (r), NULL) +# define EVPerr(f, r) ERR_raise_data(ERR_LIB_EVP, (r), NULL) +# define FIPSerr(f, r) ERR_raise_data(ERR_LIB_FIPS, (r), NULL) +# define HMACerr(f, r) ERR_raise_data(ERR_LIB_HMAC, (r), NULL) +# define HTTPerr(f, r) ERR_raise_data(ERR_LIB_HTTP, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define OBJerr(f, r) ERR_raise_data(ERR_LIB_OBJ, (r), NULL) +# define OCSPerr(f, r) ERR_raise_data(ERR_LIB_OCSP, (r), NULL) +# define OSSL_STOREerr(f, r) ERR_raise_data(ERR_LIB_OSSL_STORE, (r), NULL) +# define PEMerr(f, r) ERR_raise_data(ERR_LIB_PEM, (r), NULL) +# define PKCS12err(f, r) ERR_raise_data(ERR_LIB_PKCS12, (r), NULL) +# define PKCS7err(f, r) ERR_raise_data(ERR_LIB_PKCS7, (r), NULL) +# define PROPerr(f, r) ERR_raise_data(ERR_LIB_PROP, (r), NULL) +# define PROVerr(f, r) ERR_raise_data(ERR_LIB_PROV, (r), NULL) +# define RANDerr(f, r) ERR_raise_data(ERR_LIB_RAND, (r), NULL) +# define RSAerr(f, r) ERR_raise_data(ERR_LIB_RSA, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define SM2err(f, r) ERR_raise_data(ERR_LIB_SM2, (r), NULL) +# define SSLerr(f, r) ERR_raise_data(ERR_LIB_SSL, (r), NULL) +# define SYSerr(f, r) ERR_raise_data(ERR_LIB_SYS, (r), NULL) +# define TSerr(f, r) ERR_raise_data(ERR_LIB_TS, (r), NULL) +# define UIerr(f, r) ERR_raise_data(ERR_LIB_UI, (r), NULL) +# define X509V3err(f, r) ERR_raise_data(ERR_LIB_X509V3, (r), NULL) +# define X509err(f, r) ERR_raise_data(ERR_LIB_X509, (r), NULL) +# endif -# define ERR_PACK(l,f,r) ( \ - (((unsigned int)(l) & 0x0FF) << 24L) | \ - (((unsigned int)(f) & 0xFFF) << 12L) | \ - (((unsigned int)(r) & 0xFFF) ) ) -# define ERR_GET_LIB(l) (int)(((l) >> 24L) & 0x0FFL) -# define ERR_GET_FUNC(l) (int)(((l) >> 12L) & 0xFFFL) -# define ERR_GET_REASON(l) (int)( (l) & 0xFFFL) -# define ERR_FATAL_ERROR(l) (int)( (l) & ERR_R_FATAL) +/*- + * The error code packs differently depending on if it records a system + * error or an OpenSSL error. + * + * A system error packs like this (we follow POSIX and only allow positive + * numbers that fit in an |int|): + * + * +-+-------------------------------------------------------------+ + * |1| system error number | + * +-+-------------------------------------------------------------+ + * + * An OpenSSL error packs like this: + * + * <---------------------------- 32 bits --------------------------> + * <--- 8 bits ---><------------------ 23 bits -----------------> + * +-+---------------+---------------------------------------------+ + * |0| library | reason | + * +-+---------------+---------------------------------------------+ + * + * A few of the reason bits are reserved as flags with special meaning: + * + * <5 bits-<>--------- 19 bits -----------------> + * +-------+-+-----------------------------------+ + * | rflags| | reason | + * +-------+-+-----------------------------------+ + * ^ + * | + * ERR_RFLAG_FATAL = ERR_R_FATAL + * + * The reason flags are part of the overall reason code for practical + * reasons, as they provide an easy way to place different types of + * reason codes in different numeric ranges. + * + * The currently known reason flags are: + * + * ERR_RFLAG_FATAL Flags that the reason code is considered fatal. + * For backward compatibility reasons, this flag + * is also the code for ERR_R_FATAL (that reason + * code served the dual purpose of flag and reason + * code in one in pre-3.0 OpenSSL). + * ERR_RFLAG_COMMON Flags that the reason code is common to all + * libraries. All ERR_R_ macros must use this flag, + * and no other _R_ macro is allowed to use it. + */ -/* OS functions */ -# define SYS_F_FOPEN 1 -# define SYS_F_CONNECT 2 -# define SYS_F_GETSERVBYNAME 3 -# define SYS_F_SOCKET 4 -# define SYS_F_IOCTLSOCKET 5 -# define SYS_F_BIND 6 -# define SYS_F_LISTEN 7 -# define SYS_F_ACCEPT 8 -# define SYS_F_WSASTARTUP 9/* Winsock stuff */ -# define SYS_F_OPENDIR 10 -# define SYS_F_FREAD 11 -# define SYS_F_GETADDRINFO 12 -# define SYS_F_GETNAMEINFO 13 -# define SYS_F_SETSOCKOPT 14 -# define SYS_F_GETSOCKOPT 15 -# define SYS_F_GETSOCKNAME 16 -# define SYS_F_GETHOSTBYNAME 17 -# define SYS_F_FFLUSH 18 -# define SYS_F_OPEN 19 -# define SYS_F_CLOSE 20 -# define SYS_F_IOCTL 21 -# define SYS_F_STAT 22 -# define SYS_F_FCNTL 23 -# define SYS_F_FSTAT 24 - -/* reasons */ -# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ -# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ -# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ -# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ -# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ -# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ -# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ -# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ -# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ -# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ -# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ -# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ -# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ -# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ -# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ -# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ -# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ -# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ -# define ERR_R_OSSL_STORE_LIB ERR_LIB_OSSL_STORE/* 44 */ - -# define ERR_R_NESTED_ASN1_ERROR 58 -# define ERR_R_MISSING_ASN1_EOS 63 - -/* fatal error */ -# define ERR_R_FATAL 64 -# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) -# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) -# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) -# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) -# define ERR_R_DISABLED (5|ERR_R_FATAL) -# define ERR_R_INIT_FAIL (6|ERR_R_FATAL) -# define ERR_R_PASSED_INVALID_ARGUMENT (7) -# define ERR_R_OPERATION_FAIL (8|ERR_R_FATAL) +/* Macros to help decode recorded system errors */ +# define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1) +# define ERR_SYSTEM_MASK ((unsigned int)INT_MAX) /* - * 99 is the maximum possible ERR_R_... code, higher values are reserved for - * the individual libraries + * Macros to help decode recorded OpenSSL errors + * As expressed above, RFLAGS and REASON overlap by one bit to allow + * ERR_R_FATAL to use ERR_RFLAG_FATAL as its reason code. */ +# define ERR_LIB_OFFSET 23L +# define ERR_LIB_MASK 0xFF +# define ERR_RFLAGS_OFFSET 18L +# define ERR_RFLAGS_MASK 0x1F +# define ERR_REASON_MASK 0X7FFFFF + +/* + * Reason flags are defined pre-shifted to easily combine with the reason + * number. + */ +# define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET) +# define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET) + +# define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0) + +static ossl_unused ossl_inline int ERR_GET_LIB(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return ERR_LIB_SYS; + return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK; +} + +static ossl_unused ossl_inline int ERR_GET_RFLAGS(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return 0; + return errcode & (ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET); +} + +static ossl_unused ossl_inline int ERR_GET_REASON(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return errcode & ERR_SYSTEM_MASK; + return errcode & ERR_REASON_MASK; +} + +static ossl_unused ossl_inline int ERR_FATAL_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_FATAL) != 0; +} + +static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_COMMON) != 0; +} + +/* + * ERR_PACK is a helper macro to properly pack OpenSSL error codes and may + * only be used for that purpose. System errors are packed internally. + * ERR_PACK takes reason flags and reason code combined in |reason|. + * ERR_PACK ignores |func|, that parameter is just legacy from pre-3.0 OpenSSL. + */ +# define ERR_PACK(lib,func,reason) \ + ( (((unsigned long)(lib) & ERR_LIB_MASK ) << ERR_LIB_OFFSET) | \ + (((unsigned long)(reason) & ERR_REASON_MASK)) ) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SYS_F_FOPEN 0 +# define SYS_F_CONNECT 0 +# define SYS_F_GETSERVBYNAME 0 +# define SYS_F_SOCKET 0 +# define SYS_F_IOCTLSOCKET 0 +# define SYS_F_BIND 0 +# define SYS_F_LISTEN 0 +# define SYS_F_ACCEPT 0 +# define SYS_F_WSASTARTUP 0 +# define SYS_F_OPENDIR 0 +# define SYS_F_FREAD 0 +# define SYS_F_GETADDRINFO 0 +# define SYS_F_GETNAMEINFO 0 +# define SYS_F_SETSOCKOPT 0 +# define SYS_F_GETSOCKOPT 0 +# define SYS_F_GETSOCKNAME 0 +# define SYS_F_GETHOSTBYNAME 0 +# define SYS_F_FFLUSH 0 +# define SYS_F_OPEN 0 +# define SYS_F_CLOSE 0 +# define SYS_F_IOCTL 0 +# define SYS_F_STAT 0 +# define SYS_F_FCNTL 0 +# define SYS_F_FSTAT 0 +# define SYS_F_SENDFILE 0 +# endif + +/* + * All ERR_R_ codes must be combined with ERR_RFLAG_COMMON. + */ + +/* "we came from here" global reason codes, range 1..255 */ +# define ERR_R_SYS_LIB (ERR_LIB_SYS/* 2 */ | ERR_RFLAG_COMMON) +# define ERR_R_BN_LIB (ERR_LIB_BN/* 3 */ | ERR_RFLAG_COMMON) +# define ERR_R_RSA_LIB (ERR_LIB_RSA/* 4 */ | ERR_RFLAG_COMMON) +# define ERR_R_DH_LIB (ERR_LIB_DH/* 5 */ | ERR_RFLAG_COMMON) +# define ERR_R_EVP_LIB (ERR_LIB_EVP/* 6 */ | ERR_RFLAG_COMMON) +# define ERR_R_BUF_LIB (ERR_LIB_BUF/* 7 */ | ERR_RFLAG_COMMON) +# define ERR_R_OBJ_LIB (ERR_LIB_OBJ/* 8 */ | ERR_RFLAG_COMMON) +# define ERR_R_PEM_LIB (ERR_LIB_PEM/* 9 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSA_LIB (ERR_LIB_DSA/* 10 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509_LIB (ERR_LIB_X509/* 11 */ | ERR_RFLAG_COMMON) +# define ERR_R_ASN1_LIB (ERR_LIB_ASN1/* 13 */ | ERR_RFLAG_COMMON) +# define ERR_R_CONF_LIB (ERR_LIB_CONF/* 14 */ | ERR_RFLAG_COMMON) +# define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO/* 15 */ | ERR_RFLAG_COMMON) +# define ERR_R_EC_LIB (ERR_LIB_EC/* 16 */ | ERR_RFLAG_COMMON) +# define ERR_R_SSL_LIB (ERR_LIB_SSL/* 20 */ | ERR_RFLAG_COMMON) +# define ERR_R_BIO_LIB (ERR_LIB_BIO/* 32 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS7_LIB (ERR_LIB_PKCS7/* 33 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509V3_LIB (ERR_LIB_X509V3/* 34 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS12_LIB (ERR_LIB_PKCS12/* 35 */ | ERR_RFLAG_COMMON) +# define ERR_R_RAND_LIB (ERR_LIB_RAND/* 36 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSO_LIB (ERR_LIB_DSO/* 37 */ | ERR_RFLAG_COMMON) +# define ERR_R_ENGINE_LIB (ERR_LIB_ENGINE/* 38 */ | ERR_RFLAG_COMMON) +# define ERR_R_UI_LIB (ERR_LIB_UI/* 40 */ | ERR_RFLAG_COMMON) +# define ERR_R_ECDSA_LIB (ERR_LIB_ECDSA/* 42 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_STORE_LIB (ERR_LIB_OSSL_STORE/* 44 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMS_LIB (ERR_LIB_CMS/* 46 */ | ERR_RFLAG_COMMON) +# define ERR_R_TS_LIB (ERR_LIB_TS/* 47 */ | ERR_RFLAG_COMMON) +# define ERR_R_CT_LIB (ERR_LIB_CT/* 50 */ | ERR_RFLAG_COMMON) +# define ERR_R_PROV_LIB (ERR_LIB_PROV/* 57 */ | ERR_RFLAG_COMMON) +# define ERR_R_ESS_LIB (ERR_LIB_ESS/* 54 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMP_LIB (ERR_LIB_CMP/* 58 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_ENCODER_LIB (ERR_LIB_OSSL_ENCODER/* 59 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_DECODER_LIB (ERR_LIB_OSSL_DECODER/* 60 */ | ERR_RFLAG_COMMON) + +/* Other common error codes, range 256..2^ERR_RFLAGS_OFFSET-1 */ +# define ERR_R_FATAL (ERR_RFLAG_FATAL|ERR_RFLAG_COMMON) +# define ERR_R_MALLOC_FAILURE (256|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (257|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (258|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (259|ERR_R_FATAL) +# define ERR_R_DISABLED (260|ERR_R_FATAL) +# define ERR_R_INIT_FAIL (261|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (262|ERR_RFLAG_COMMON) +# define ERR_R_OPERATION_FAIL (263|ERR_R_FATAL) +# define ERR_R_INVALID_PROVIDER_FUNCTIONS (264|ERR_R_FATAL) +# define ERR_R_INTERRUPTED_OR_CANCELLED (265|ERR_RFLAG_COMMON) +# define ERR_R_NESTED_ASN1_ERROR (266|ERR_RFLAG_COMMON) +# define ERR_R_MISSING_ASN1_EOS (267|ERR_RFLAG_COMMON) +# define ERR_R_UNSUPPORTED (268|ERR_RFLAG_COMMON) +# define ERR_R_FETCH_FAILED (269|ERR_RFLAG_COMMON) +# define ERR_R_INVALID_PROPERTY_DEFINITION (270|ERR_RFLAG_COMMON) +# define ERR_R_UNABLE_TO_GET_READ_LOCK (271|ERR_R_FATAL) +# define ERR_R_UNABLE_TO_GET_WRITE_LOCK (272|ERR_R_FATAL) typedef struct ERR_string_data_st { unsigned long error; const char *string; } ERR_STRING_DATA; -DEFINE_LHASH_OF(ERR_STRING_DATA); +DEFINE_LHASH_OF_INTERNAL(ERR_STRING_DATA); +#define lh_ERR_STRING_DATA_new(hfn, cmp) ((LHASH_OF(ERR_STRING_DATA) *)OPENSSL_LH_new(ossl_check_ERR_STRING_DATA_lh_hashfunc_type(hfn), ossl_check_ERR_STRING_DATA_lh_compfunc_type(cmp))) +#define lh_ERR_STRING_DATA_free(lh) OPENSSL_LH_free(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_flush(lh) OPENSSL_LH_flush(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_insert(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_insert(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_delete(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_delete(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_retrieve(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_retrieve(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_error(lh) OPENSSL_LH_error(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_num_items(lh) OPENSSL_LH_num_items(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh), dl) +#define lh_ERR_STRING_DATA_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_doallfunc_type(dfn)) + + +/* 12 lines and some on an 80 column terminal */ +#define ERR_MAX_DATA_SIZE 1024 + +/* Building blocks */ +void ERR_new(void); +void ERR_set_debug(const char *file, int line, const char *func); +void ERR_set_error(int lib, int reason, const char *fmt, ...); +void ERR_vset_error(int lib, int reason, const char *fmt, va_list args); + +/* Main error raising functions */ +# define ERR_raise(lib, reason) ERR_raise_data((lib),(reason),NULL) +# define ERR_raise_data \ + (ERR_new(), \ + ERR_set_debug(OPENSSL_FILE,OPENSSL_LINE,OPENSSL_FUNC), \ + ERR_set_error) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* Backward compatibility */ +# define ERR_put_error(lib, func, reason, file, line) \ + (ERR_new(), \ + ERR_set_debug((file), (line), OPENSSL_FUNC), \ + ERR_set_error((lib), (reason), NULL)) +# endif -void ERR_put_error(int lib, int func, int reason, const char *file, int line); void ERR_set_error_data(char *data, int flags); unsigned long ERR_get_error(void); +unsigned long ERR_get_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_get_error_line(const char **file, int *line); +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_get_error_line_data(const char **file, int *line, const char **data, int *flags); +#endif unsigned long ERR_peek_error(void); unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_func(const char **func); +unsigned long ERR_peek_error_data(const char **data, int *flags); +unsigned long ERR_peek_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_peek_error_line_data(const char **file, int *line, const char **data, int *flags); +# endif unsigned long ERR_peek_last_error(void); unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_func(const char **func); +unsigned long ERR_peek_last_error_data(const char **data, int *flags); +unsigned long ERR_peek_last_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_peek_last_error_line_data(const char **file, int *line, const char **data, int *flags); +# endif + void ERR_clear_error(void); + char *ERR_error_string(unsigned long e, char *buf); void ERR_error_string_n(unsigned long e, char *buf, size_t len); const char *ERR_lib_error_string(unsigned long e); -const char *ERR_func_error_string(unsigned long e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ERR_func_error_string(unsigned long e); +# endif const char *ERR_reason_error_string(unsigned long e); + void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), void *u); # ifndef OPENSSL_NO_STDIO void ERR_print_errors_fp(FILE *fp); # endif void ERR_print_errors(BIO *bp); + void ERR_add_error_data(int num, ...); void ERR_add_error_vdata(int num, va_list args); +void ERR_add_error_txt(const char *sepr, const char *txt); +void ERR_add_error_mem_bio(const char *sep, BIO *bio); + int ERR_load_strings(int lib, ERR_STRING_DATA *str); int ERR_load_strings_const(const ERR_STRING_DATA *str); int ERR_unload_strings(int lib, ERR_STRING_DATA *str); -int ERR_load_ERR_strings(void); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define ERR_load_crypto_strings() \ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) # define ERR_free_strings() while(0) continue #endif - -DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) -DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid)) -ERR_STATE *ERR_get_state(void); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ERR_remove_thread_state(void *); +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_0_0 +OSSL_DEPRECATEDIN_1_0_0 void ERR_remove_state(unsigned long pid); +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ERR_STATE *ERR_get_state(void); +#endif int ERR_get_next_error_library(void); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h.in new file mode 100644 index 00000000..11dc2163 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h.in @@ -0,0 +1,493 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_lhash_macros); +-} + +#ifndef OPENSSL_ERR_H +# define OPENSSL_ERR_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ERR_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# include +# endif + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_FILENAMES +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,fn,ln) +# else +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,NULL,0) +# endif +# endif + +# include +# include + +# define ERR_TXT_MALLOCED 0x01 +# define ERR_TXT_STRING 0x02 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) || defined(OSSL_FORCE_ERR_STATE) +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 + +# define ERR_NUM_ERRORS 16 +struct err_state_st { + int err_flags[ERR_NUM_ERRORS]; + int err_marks[ERR_NUM_ERRORS]; + unsigned long err_buffer[ERR_NUM_ERRORS]; + char *err_data[ERR_NUM_ERRORS]; + size_t err_data_size[ERR_NUM_ERRORS]; + int err_data_flags[ERR_NUM_ERRORS]; + char *err_file[ERR_NUM_ERRORS]; + int err_line[ERR_NUM_ERRORS]; + char *err_func[ERR_NUM_ERRORS]; + int top, bottom; +}; +# endif + +/* library */ +# define ERR_LIB_NONE 1 +# define ERR_LIB_SYS 2 +# define ERR_LIB_BN 3 +# define ERR_LIB_RSA 4 +# define ERR_LIB_DH 5 +# define ERR_LIB_EVP 6 +# define ERR_LIB_BUF 7 +# define ERR_LIB_OBJ 8 +# define ERR_LIB_PEM 9 +# define ERR_LIB_DSA 10 +# define ERR_LIB_X509 11 +/* #define ERR_LIB_METH 12 */ +# define ERR_LIB_ASN1 13 +# define ERR_LIB_CONF 14 +# define ERR_LIB_CRYPTO 15 +# define ERR_LIB_EC 16 +# define ERR_LIB_SSL 20 +/* #define ERR_LIB_SSL23 21 */ +/* #define ERR_LIB_SSL2 22 */ +/* #define ERR_LIB_SSL3 23 */ +/* #define ERR_LIB_RSAREF 30 */ +/* #define ERR_LIB_PROXY 31 */ +# define ERR_LIB_BIO 32 +# define ERR_LIB_PKCS7 33 +# define ERR_LIB_X509V3 34 +# define ERR_LIB_PKCS12 35 +# define ERR_LIB_RAND 36 +# define ERR_LIB_DSO 37 +# define ERR_LIB_ENGINE 38 +# define ERR_LIB_OCSP 39 +# define ERR_LIB_UI 40 +# define ERR_LIB_COMP 41 +# define ERR_LIB_ECDSA 42 +# define ERR_LIB_ECDH 43 +# define ERR_LIB_OSSL_STORE 44 +# define ERR_LIB_FIPS 45 +# define ERR_LIB_CMS 46 +# define ERR_LIB_TS 47 +# define ERR_LIB_HMAC 48 +/* # define ERR_LIB_JPAKE 49 */ +# define ERR_LIB_CT 50 +# define ERR_LIB_ASYNC 51 +# define ERR_LIB_KDF 52 +# define ERR_LIB_SM2 53 +# define ERR_LIB_ESS 54 +# define ERR_LIB_PROP 55 +# define ERR_LIB_CRMF 56 +# define ERR_LIB_PROV 57 +# define ERR_LIB_CMP 58 +# define ERR_LIB_OSSL_ENCODER 59 +# define ERR_LIB_OSSL_DECODER 60 +# define ERR_LIB_HTTP 61 + +# define ERR_LIB_USER 128 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define ASN1err(f, r) ERR_raise_data(ERR_LIB_ASN1, (r), NULL) +# define ASYNCerr(f, r) ERR_raise_data(ERR_LIB_ASYNC, (r), NULL) +# define BIOerr(f, r) ERR_raise_data(ERR_LIB_BIO, (r), NULL) +# define BNerr(f, r) ERR_raise_data(ERR_LIB_BN, (r), NULL) +# define BUFerr(f, r) ERR_raise_data(ERR_LIB_BUF, (r), NULL) +# define CMPerr(f, r) ERR_raise_data(ERR_LIB_CMP, (r), NULL) +# define CMSerr(f, r) ERR_raise_data(ERR_LIB_CMS, (r), NULL) +# define COMPerr(f, r) ERR_raise_data(ERR_LIB_COMP, (r), NULL) +# define CONFerr(f, r) ERR_raise_data(ERR_LIB_CONF, (r), NULL) +# define CRMFerr(f, r) ERR_raise_data(ERR_LIB_CRMF, (r), NULL) +# define CRYPTOerr(f, r) ERR_raise_data(ERR_LIB_CRYPTO, (r), NULL) +# define CTerr(f, r) ERR_raise_data(ERR_LIB_CT, (r), NULL) +# define DHerr(f, r) ERR_raise_data(ERR_LIB_DH, (r), NULL) +# define DSAerr(f, r) ERR_raise_data(ERR_LIB_DSA, (r), NULL) +# define DSOerr(f, r) ERR_raise_data(ERR_LIB_DSO, (r), NULL) +# define ECDHerr(f, r) ERR_raise_data(ERR_LIB_ECDH, (r), NULL) +# define ECDSAerr(f, r) ERR_raise_data(ERR_LIB_ECDSA, (r), NULL) +# define ECerr(f, r) ERR_raise_data(ERR_LIB_EC, (r), NULL) +# define ENGINEerr(f, r) ERR_raise_data(ERR_LIB_ENGINE, (r), NULL) +# define ESSerr(f, r) ERR_raise_data(ERR_LIB_ESS, (r), NULL) +# define EVPerr(f, r) ERR_raise_data(ERR_LIB_EVP, (r), NULL) +# define FIPSerr(f, r) ERR_raise_data(ERR_LIB_FIPS, (r), NULL) +# define HMACerr(f, r) ERR_raise_data(ERR_LIB_HMAC, (r), NULL) +# define HTTPerr(f, r) ERR_raise_data(ERR_LIB_HTTP, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define OBJerr(f, r) ERR_raise_data(ERR_LIB_OBJ, (r), NULL) +# define OCSPerr(f, r) ERR_raise_data(ERR_LIB_OCSP, (r), NULL) +# define OSSL_STOREerr(f, r) ERR_raise_data(ERR_LIB_OSSL_STORE, (r), NULL) +# define PEMerr(f, r) ERR_raise_data(ERR_LIB_PEM, (r), NULL) +# define PKCS12err(f, r) ERR_raise_data(ERR_LIB_PKCS12, (r), NULL) +# define PKCS7err(f, r) ERR_raise_data(ERR_LIB_PKCS7, (r), NULL) +# define PROPerr(f, r) ERR_raise_data(ERR_LIB_PROP, (r), NULL) +# define PROVerr(f, r) ERR_raise_data(ERR_LIB_PROV, (r), NULL) +# define RANDerr(f, r) ERR_raise_data(ERR_LIB_RAND, (r), NULL) +# define RSAerr(f, r) ERR_raise_data(ERR_LIB_RSA, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define SM2err(f, r) ERR_raise_data(ERR_LIB_SM2, (r), NULL) +# define SSLerr(f, r) ERR_raise_data(ERR_LIB_SSL, (r), NULL) +# define SYSerr(f, r) ERR_raise_data(ERR_LIB_SYS, (r), NULL) +# define TSerr(f, r) ERR_raise_data(ERR_LIB_TS, (r), NULL) +# define UIerr(f, r) ERR_raise_data(ERR_LIB_UI, (r), NULL) +# define X509V3err(f, r) ERR_raise_data(ERR_LIB_X509V3, (r), NULL) +# define X509err(f, r) ERR_raise_data(ERR_LIB_X509, (r), NULL) +# endif + +/*- + * The error code packs differently depending on if it records a system + * error or an OpenSSL error. + * + * A system error packs like this (we follow POSIX and only allow positive + * numbers that fit in an |int|): + * + * +-+-------------------------------------------------------------+ + * |1| system error number | + * +-+-------------------------------------------------------------+ + * + * An OpenSSL error packs like this: + * + * <---------------------------- 32 bits --------------------------> + * <--- 8 bits ---><------------------ 23 bits -----------------> + * +-+---------------+---------------------------------------------+ + * |0| library | reason | + * +-+---------------+---------------------------------------------+ + * + * A few of the reason bits are reserved as flags with special meaning: + * + * <5 bits-<>--------- 19 bits -----------------> + * +-------+-+-----------------------------------+ + * | rflags| | reason | + * +-------+-+-----------------------------------+ + * ^ + * | + * ERR_RFLAG_FATAL = ERR_R_FATAL + * + * The reason flags are part of the overall reason code for practical + * reasons, as they provide an easy way to place different types of + * reason codes in different numeric ranges. + * + * The currently known reason flags are: + * + * ERR_RFLAG_FATAL Flags that the reason code is considered fatal. + * For backward compatibility reasons, this flag + * is also the code for ERR_R_FATAL (that reason + * code served the dual purpose of flag and reason + * code in one in pre-3.0 OpenSSL). + * ERR_RFLAG_COMMON Flags that the reason code is common to all + * libraries. All ERR_R_ macros must use this flag, + * and no other _R_ macro is allowed to use it. + */ + +/* Macros to help decode recorded system errors */ +# define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1) +# define ERR_SYSTEM_MASK ((unsigned int)INT_MAX) + +/* + * Macros to help decode recorded OpenSSL errors + * As expressed above, RFLAGS and REASON overlap by one bit to allow + * ERR_R_FATAL to use ERR_RFLAG_FATAL as its reason code. + */ +# define ERR_LIB_OFFSET 23L +# define ERR_LIB_MASK 0xFF +# define ERR_RFLAGS_OFFSET 18L +# define ERR_RFLAGS_MASK 0x1F +# define ERR_REASON_MASK 0X7FFFFF + +/* + * Reason flags are defined pre-shifted to easily combine with the reason + * number. + */ +# define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET) +# define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET) + +# define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0) + +static ossl_unused ossl_inline int ERR_GET_LIB(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return ERR_LIB_SYS; + return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK; +} + +static ossl_unused ossl_inline int ERR_GET_RFLAGS(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return 0; + return errcode & (ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET); +} + +static ossl_unused ossl_inline int ERR_GET_REASON(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return errcode & ERR_SYSTEM_MASK; + return errcode & ERR_REASON_MASK; +} + +static ossl_unused ossl_inline int ERR_FATAL_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_FATAL) != 0; +} + +static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_COMMON) != 0; +} + +/* + * ERR_PACK is a helper macro to properly pack OpenSSL error codes and may + * only be used for that purpose. System errors are packed internally. + * ERR_PACK takes reason flags and reason code combined in |reason|. + * ERR_PACK ignores |func|, that parameter is just legacy from pre-3.0 OpenSSL. + */ +# define ERR_PACK(lib,func,reason) \ + ( (((unsigned long)(lib) & ERR_LIB_MASK ) << ERR_LIB_OFFSET) | \ + (((unsigned long)(reason) & ERR_REASON_MASK)) ) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SYS_F_FOPEN 0 +# define SYS_F_CONNECT 0 +# define SYS_F_GETSERVBYNAME 0 +# define SYS_F_SOCKET 0 +# define SYS_F_IOCTLSOCKET 0 +# define SYS_F_BIND 0 +# define SYS_F_LISTEN 0 +# define SYS_F_ACCEPT 0 +# define SYS_F_WSASTARTUP 0 +# define SYS_F_OPENDIR 0 +# define SYS_F_FREAD 0 +# define SYS_F_GETADDRINFO 0 +# define SYS_F_GETNAMEINFO 0 +# define SYS_F_SETSOCKOPT 0 +# define SYS_F_GETSOCKOPT 0 +# define SYS_F_GETSOCKNAME 0 +# define SYS_F_GETHOSTBYNAME 0 +# define SYS_F_FFLUSH 0 +# define SYS_F_OPEN 0 +# define SYS_F_CLOSE 0 +# define SYS_F_IOCTL 0 +# define SYS_F_STAT 0 +# define SYS_F_FCNTL 0 +# define SYS_F_FSTAT 0 +# define SYS_F_SENDFILE 0 +# endif + +/* + * All ERR_R_ codes must be combined with ERR_RFLAG_COMMON. + */ + +/* "we came from here" global reason codes, range 1..255 */ +# define ERR_R_SYS_LIB (ERR_LIB_SYS/* 2 */ | ERR_RFLAG_COMMON) +# define ERR_R_BN_LIB (ERR_LIB_BN/* 3 */ | ERR_RFLAG_COMMON) +# define ERR_R_RSA_LIB (ERR_LIB_RSA/* 4 */ | ERR_RFLAG_COMMON) +# define ERR_R_DH_LIB (ERR_LIB_DH/* 5 */ | ERR_RFLAG_COMMON) +# define ERR_R_EVP_LIB (ERR_LIB_EVP/* 6 */ | ERR_RFLAG_COMMON) +# define ERR_R_BUF_LIB (ERR_LIB_BUF/* 7 */ | ERR_RFLAG_COMMON) +# define ERR_R_OBJ_LIB (ERR_LIB_OBJ/* 8 */ | ERR_RFLAG_COMMON) +# define ERR_R_PEM_LIB (ERR_LIB_PEM/* 9 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSA_LIB (ERR_LIB_DSA/* 10 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509_LIB (ERR_LIB_X509/* 11 */ | ERR_RFLAG_COMMON) +# define ERR_R_ASN1_LIB (ERR_LIB_ASN1/* 13 */ | ERR_RFLAG_COMMON) +# define ERR_R_CONF_LIB (ERR_LIB_CONF/* 14 */ | ERR_RFLAG_COMMON) +# define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO/* 15 */ | ERR_RFLAG_COMMON) +# define ERR_R_EC_LIB (ERR_LIB_EC/* 16 */ | ERR_RFLAG_COMMON) +# define ERR_R_SSL_LIB (ERR_LIB_SSL/* 20 */ | ERR_RFLAG_COMMON) +# define ERR_R_BIO_LIB (ERR_LIB_BIO/* 32 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS7_LIB (ERR_LIB_PKCS7/* 33 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509V3_LIB (ERR_LIB_X509V3/* 34 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS12_LIB (ERR_LIB_PKCS12/* 35 */ | ERR_RFLAG_COMMON) +# define ERR_R_RAND_LIB (ERR_LIB_RAND/* 36 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSO_LIB (ERR_LIB_DSO/* 37 */ | ERR_RFLAG_COMMON) +# define ERR_R_ENGINE_LIB (ERR_LIB_ENGINE/* 38 */ | ERR_RFLAG_COMMON) +# define ERR_R_UI_LIB (ERR_LIB_UI/* 40 */ | ERR_RFLAG_COMMON) +# define ERR_R_ECDSA_LIB (ERR_LIB_ECDSA/* 42 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_STORE_LIB (ERR_LIB_OSSL_STORE/* 44 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMS_LIB (ERR_LIB_CMS/* 46 */ | ERR_RFLAG_COMMON) +# define ERR_R_TS_LIB (ERR_LIB_TS/* 47 */ | ERR_RFLAG_COMMON) +# define ERR_R_CT_LIB (ERR_LIB_CT/* 50 */ | ERR_RFLAG_COMMON) +# define ERR_R_PROV_LIB (ERR_LIB_PROV/* 57 */ | ERR_RFLAG_COMMON) +# define ERR_R_ESS_LIB (ERR_LIB_ESS/* 54 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMP_LIB (ERR_LIB_CMP/* 58 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_ENCODER_LIB (ERR_LIB_OSSL_ENCODER/* 59 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_DECODER_LIB (ERR_LIB_OSSL_DECODER/* 60 */ | ERR_RFLAG_COMMON) + +/* Other common error codes, range 256..2^ERR_RFLAGS_OFFSET-1 */ +# define ERR_R_FATAL (ERR_RFLAG_FATAL|ERR_RFLAG_COMMON) +# define ERR_R_MALLOC_FAILURE (256|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (257|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (258|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (259|ERR_R_FATAL) +# define ERR_R_DISABLED (260|ERR_R_FATAL) +# define ERR_R_INIT_FAIL (261|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (262|ERR_RFLAG_COMMON) +# define ERR_R_OPERATION_FAIL (263|ERR_R_FATAL) +# define ERR_R_INVALID_PROVIDER_FUNCTIONS (264|ERR_R_FATAL) +# define ERR_R_INTERRUPTED_OR_CANCELLED (265|ERR_RFLAG_COMMON) +# define ERR_R_NESTED_ASN1_ERROR (266|ERR_RFLAG_COMMON) +# define ERR_R_MISSING_ASN1_EOS (267|ERR_RFLAG_COMMON) +# define ERR_R_UNSUPPORTED (268|ERR_RFLAG_COMMON) +# define ERR_R_FETCH_FAILED (269|ERR_RFLAG_COMMON) +# define ERR_R_INVALID_PROPERTY_DEFINITION (270|ERR_RFLAG_COMMON) +# define ERR_R_UNABLE_TO_GET_READ_LOCK (271|ERR_R_FATAL) +# define ERR_R_UNABLE_TO_GET_WRITE_LOCK (272|ERR_R_FATAL) + +typedef struct ERR_string_data_st { + unsigned long error; + const char *string; +} ERR_STRING_DATA; + +{- + generate_lhash_macros("ERR_STRING_DATA"); +-} + +/* 12 lines and some on an 80 column terminal */ +#define ERR_MAX_DATA_SIZE 1024 + +/* Building blocks */ +void ERR_new(void); +void ERR_set_debug(const char *file, int line, const char *func); +void ERR_set_error(int lib, int reason, const char *fmt, ...); +void ERR_vset_error(int lib, int reason, const char *fmt, va_list args); + +/* Main error raising functions */ +# define ERR_raise(lib, reason) ERR_raise_data((lib),(reason),NULL) +# define ERR_raise_data \ + (ERR_new(), \ + ERR_set_debug(OPENSSL_FILE,OPENSSL_LINE,OPENSSL_FUNC), \ + ERR_set_error) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* Backward compatibility */ +# define ERR_put_error(lib, func, reason, file, line) \ + (ERR_new(), \ + ERR_set_debug((file), (line), OPENSSL_FUNC), \ + ERR_set_error((lib), (reason), NULL)) +# endif + +void ERR_set_error_data(char *data, int flags); + +unsigned long ERR_get_error(void); +unsigned long ERR_get_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_get_error_line(const char **file, int *line); +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_get_error_line_data(const char **file, int *line, + const char **data, int *flags); +#endif +unsigned long ERR_peek_error(void); +unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_func(const char **func); +unsigned long ERR_peek_error_data(const char **data, int *flags); +unsigned long ERR_peek_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_peek_error_line_data(const char **file, int *line, + const char **data, int *flags); +# endif +unsigned long ERR_peek_last_error(void); +unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_func(const char **func); +unsigned long ERR_peek_last_error_data(const char **data, int *flags); +unsigned long ERR_peek_last_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_peek_last_error_line_data(const char **file, int *line, + const char **data, int *flags); +# endif + +void ERR_clear_error(void); + +char *ERR_error_string(unsigned long e, char *buf); +void ERR_error_string_n(unsigned long e, char *buf, size_t len); +const char *ERR_lib_error_string(unsigned long e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ERR_func_error_string(unsigned long e); +# endif +const char *ERR_reason_error_string(unsigned long e); + +void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), + void *u); +# ifndef OPENSSL_NO_STDIO +void ERR_print_errors_fp(FILE *fp); +# endif +void ERR_print_errors(BIO *bp); + +void ERR_add_error_data(int num, ...); +void ERR_add_error_vdata(int num, va_list args); +void ERR_add_error_txt(const char *sepr, const char *txt); +void ERR_add_error_mem_bio(const char *sep, BIO *bio); + +int ERR_load_strings(int lib, ERR_STRING_DATA *str); +int ERR_load_strings_const(const ERR_STRING_DATA *str); +int ERR_unload_strings(int lib, ERR_STRING_DATA *str); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define ERR_load_crypto_strings() \ + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# define ERR_free_strings() while(0) continue +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ERR_remove_thread_state(void *); +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_0_0 +OSSL_DEPRECATEDIN_1_0_0 void ERR_remove_state(unsigned long pid); +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ERR_STATE *ERR_get_state(void); +#endif + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); +int ERR_clear_last_mark(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h new file mode 100644 index 00000000..4055bebb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h @@ -0,0 +1,128 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ess.h.in + * + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +#ifndef OPENSSL_ESS_H +# define OPENSSL_ESS_H +# pragma once + +# include + +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + + +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID, ESS_CERT_ID, ESS_CERT_ID) +#define sk_ESS_CERT_ID_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_value(sk, idx) ((ESS_CERT_ID *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_sk_type(sk), (idx))) +#define sk_ESS_CERT_ID_new(cmp) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_compfunc_type(cmp))) +#define sk_ESS_CERT_ID_new_null() ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_null()) +#define sk_ESS_CERT_ID_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_sk_type(sk), (n)) +#define sk_ESS_CERT_ID_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_delete(sk, i) ((ESS_CERT_ID *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_sk_type(sk), (i))) +#define sk_ESS_CERT_ID_delete_ptr(sk, ptr) ((ESS_CERT_ID *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr))) +#define sk_ESS_CERT_ID_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_pop(sk) ((ESS_CERT_ID *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_shift(sk) ((ESS_CERT_ID *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_sk_type(sk),ossl_check_ESS_CERT_ID_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), (idx)) +#define sk_ESS_CERT_ID_set(sk, idx, ptr) ((ESS_CERT_ID *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_type(ptr))) +#define sk_ESS_CERT_ID_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), pnum) +#define sk_ESS_CERT_ID_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_dup(sk) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_freefunc_type(freefunc))) +#define sk_ESS_CERT_ID_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_compfunc_type(cmp))) + + + +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; + +SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID_V2, ESS_CERT_ID_V2, ESS_CERT_ID_V2) +#define sk_ESS_CERT_ID_V2_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_value(sk, idx) ((ESS_CERT_ID_V2 *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), (idx))) +#define sk_ESS_CERT_ID_V2_new(cmp) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp))) +#define sk_ESS_CERT_ID_V2_new_null() ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_null()) +#define sk_ESS_CERT_ID_V2_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_V2_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (n)) +#define sk_ESS_CERT_ID_V2_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_delete(sk, i) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (i))) +#define sk_ESS_CERT_ID_V2_delete_ptr(sk, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr))) +#define sk_ESS_CERT_ID_V2_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_pop(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_shift(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk),ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_V2_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), (idx)) +#define sk_ESS_CERT_ID_V2_set(sk, idx, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_V2_type(ptr))) +#define sk_ESS_CERT_ID_V2_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), pnum) +#define sk_ESS_CERT_ID_V2_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_dup(sk) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc))) +#define sk_ESS_CERT_ID_V2_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_V2_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp))) + + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_ISSUER_SERIAL) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_ISSUER_SERIAL, ESS_ISSUER_SERIAL) +DECLARE_ASN1_DUP_FUNCTION(ESS_ISSUER_SERIAL) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID, ESS_CERT_ID) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID_V2) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID_V2, ESS_CERT_ID_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2) + +ESS_SIGNING_CERT *OSSL_ESS_signing_cert_new_init(const X509 *signcert, + const STACK_OF(X509) *certs, + int set_issuer_serial); +ESS_SIGNING_CERT_V2 *OSSL_ESS_signing_cert_v2_new_init(const EVP_MD *hash_alg, + const X509 *signcert, + const + STACK_OF(X509) *certs, + int set_issuer_serial); +int OSSL_ESS_check_signing_certs(const ESS_SIGNING_CERT *ss, + const ESS_SIGNING_CERT_V2 *ssv2, + const STACK_OF(X509) *chain, + int require_signing_cert); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h.in new file mode 100644 index 00000000..d1a685b9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h.in @@ -0,0 +1,81 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ESS_H +# define OPENSSL_ESS_H +# pragma once + +# include + +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + + +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +{- + generate_stack_macros("ESS_CERT_ID"); +-} + + +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; + +{- + generate_stack_macros("ESS_CERT_ID_V2"); +-} + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_ISSUER_SERIAL) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_ISSUER_SERIAL, ESS_ISSUER_SERIAL) +DECLARE_ASN1_DUP_FUNCTION(ESS_ISSUER_SERIAL) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID, ESS_CERT_ID) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID_V2) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID_V2, ESS_CERT_ID_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2) + +ESS_SIGNING_CERT *OSSL_ESS_signing_cert_new_init(const X509 *signcert, + const STACK_OF(X509) *certs, + int set_issuer_serial); +ESS_SIGNING_CERT_V2 *OSSL_ESS_signing_cert_v2_new_init(const EVP_MD *hash_alg, + const X509 *signcert, + const + STACK_OF(X509) *certs, + int set_issuer_serial); +int OSSL_ESS_check_signing_certs(const ESS_SIGNING_CERT *ss, + const ESS_SIGNING_CERT_V2 *ssv2, + const STACK_OF(X509) *chain, + int require_signing_cert); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/esserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/esserr.h new file mode 100644 index 00000000..165ce7c4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/esserr.h @@ -0,0 +1,32 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ESSERR_H +# define OPENSSL_ESSERR_H +# pragma once + +# include +# include +# include + +/* + * ESS reason codes. + */ +# define ESS_R_EMPTY_ESS_CERT_ID_LIST 107 +# define ESS_R_ESS_CERT_DIGEST_ERROR 103 +# define ESS_R_ESS_CERT_ID_NOT_FOUND 104 +# define ESS_R_ESS_CERT_ID_WRONG_ORDER 105 +# define ESS_R_ESS_DIGEST_ALG_UNKNOWN 106 +# define ESS_R_ESS_SIGNING_CERTIFICATE_ERROR 102 +# define ESS_R_ESS_SIGNING_CERT_ADD_ERROR 100 +# define ESS_R_ESS_SIGNING_CERT_V2_ADD_ERROR 101 +# define ESS_R_MISSING_SIGNING_CERTIFICATE_ATTRIBUTE 108 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h index a411f3f2..86f4e22c 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h @@ -1,20 +1,35 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENVELOPE_H -# define HEADER_ENVELOPE_H +#ifndef OPENSSL_EVP_H +# define OPENSSL_EVP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ENVELOPE_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif # include -# include +# include +# include +# include # include # include # include +# include # define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ # define EVP_MAX_KEY_LENGTH 64 @@ -27,16 +42,18 @@ # include -# define EVP_PK_RSA 0x0001 -# define EVP_PK_DSA 0x0002 -# define EVP_PK_DH 0x0004 -# define EVP_PK_EC 0x0008 -# define EVP_PKT_SIGN 0x0010 -# define EVP_PKT_ENC 0x0020 -# define EVP_PKT_EXCH 0x0040 -# define EVP_PKS_RSA 0x0100 -# define EVP_PKS_DSA 0x0200 -# define EVP_PKS_EC 0x0400 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define EVP_PK_RSA 0x0001 +# define EVP_PK_DSA 0x0002 +# define EVP_PK_DH 0x0004 +# define EVP_PK_EC 0x0008 +# define EVP_PKT_SIGN 0x0010 +# define EVP_PKT_ENC 0x0020 +# define EVP_PKT_EXCH 0x0040 +# define EVP_PKS_RSA 0x0100 +# define EVP_PKS_DSA 0x0200 +# define EVP_PKS_EC 0x0400 +# endif # define EVP_PKEY_NONE NID_undef # define EVP_PKEY_RSA NID_rsaEncryption @@ -62,53 +79,81 @@ # define EVP_PKEY_ED25519 NID_ED25519 # define EVP_PKEY_X448 NID_X448 # define EVP_PKEY_ED448 NID_ED448 +/* Special indicator that the object is uniquely provider side */ +# define EVP_PKEY_KEYMGMT -1 + +/* Easy to use macros for EVP_PKEY related selections */ +# define EVP_PKEY_KEY_PARAMETERS \ + ( OSSL_KEYMGMT_SELECT_ALL_PARAMETERS ) +# define EVP_PKEY_PUBLIC_KEY \ + ( EVP_PKEY_KEY_PARAMETERS | OSSL_KEYMGMT_SELECT_PUBLIC_KEY ) +# define EVP_PKEY_KEYPAIR \ + ( EVP_PKEY_PUBLIC_KEY | OSSL_KEYMGMT_SELECT_PRIVATE_KEY ) #ifdef __cplusplus extern "C" { #endif +int EVP_set_default_properties(OSSL_LIB_CTX *libctx, const char *propq); +int EVP_default_properties_is_fips_enabled(OSSL_LIB_CTX *libctx); +int EVP_default_properties_enable_fips(OSSL_LIB_CTX *libctx, int enable); + # define EVP_PKEY_MO_SIGN 0x0001 # define EVP_PKEY_MO_VERIFY 0x0002 # define EVP_PKEY_MO_ENCRYPT 0x0004 # define EVP_PKEY_MO_DECRYPT 0x0008 # ifndef EVP_MD -EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); -EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); -void EVP_MD_meth_free(EVP_MD *md); - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); +OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 void EVP_MD_meth_free(EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, const void *data, size_t count)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, unsigned char *md)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, const EVP_MD_CTX *from)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, int p1, void *p2)); - -int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); -int EVP_MD_meth_get_result_size(const EVP_MD *md); -int EVP_MD_meth_get_app_datasize(const EVP_MD *md); -unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_result_size(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_app_datasize(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, - const void *data, - size_t count); + const void *data, size_t count); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, unsigned char *md); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, const EVP_MD_CTX *from); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); - +# endif /* digest can only handle a single block */ # define EVP_MD_FLAG_ONESHOT 0x0001 @@ -139,6 +184,7 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, # define EVP_MD_CTRL_DIGALGID 0x1 # define EVP_MD_CTRL_MICALG 0x2 # define EVP_MD_CTRL_XOF_LEN 0x3 +# define EVP_MD_CTRL_TLSTREE 0x4 /* Minimum Algorithm specific ctrl value */ @@ -159,8 +205,8 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, * don't accidentally reuse the values for other purposes. */ -# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS - * digest in FIPS mode */ +/* This flag has no effect from openssl-3.0 onwards */ +# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008 /* * The following PAD options are also currently ignored in 1.0.0, digest @@ -181,52 +227,68 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, */ # define EVP_MD_CTX_FLAG_FINALISE 0x0200 /* NOTE: 0x0400 is reserved for internal usage */ - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); +OSSL_DEPRECATEDIN_3_0 void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); - +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher, int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher, int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, int (*cleanup) (EVP_CIPHER_CTX *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr)); - -int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - const unsigned char *key, - const unsigned char *iv, - int enc); -int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - unsigned char *out, - const unsigned char *in, - size_t inl); -int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); -int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - int type, int arg, - void *ptr); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, int type, + int arg, void *ptr); +# endif /* Values for cipher flags */ @@ -243,6 +305,7 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CIPH_XTS_MODE 0x10001 # define EVP_CIPH_WRAP_MODE 0x10002 # define EVP_CIPH_OCB_MODE 0x10003 +# define EVP_CIPH_SIV_MODE 0x10004 # define EVP_CIPH_MODE 0xF0007 /* Set if variable length cipher */ # define EVP_CIPH_VARIABLE_LENGTH 0x8 @@ -262,22 +325,32 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CIPH_CUSTOM_COPY 0x400 /* Don't use standard iv length function */ # define EVP_CIPH_CUSTOM_IV_LENGTH 0x800 -/* Allow use default ASN1 get/set iv */ -# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 +/* Legacy and no longer relevant: Allow use default ASN1 get/set iv */ +# define EVP_CIPH_FLAG_DEFAULT_ASN1 0 +/* Free: 0x1000 */ /* Buffer length in bits not bytes: CFB1 mode only */ # define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 -/* Note if suitable for use in FIPS mode */ -# define EVP_CIPH_FLAG_FIPS 0x4000 -/* Allow non FIPS cipher in FIPS mode */ -# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 +/* Deprecated FIPS flag: was 0x4000 */ +# define EVP_CIPH_FLAG_FIPS 0 +/* Deprecated FIPS flag: was 0x8000 */ +# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0 + /* * Cipher handles any and all padding logic as well as finalisation. */ +# define EVP_CIPH_FLAG_CTS 0x4000 # define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 # define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 # define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 /* Cipher can handle pipeline operations */ # define EVP_CIPH_FLAG_PIPELINE 0X800000 +/* For provider implementations that handle ASN1 get/set param themselves */ +# define EVP_CIPH_FLAG_CUSTOM_ASN1 0x1000000 +/* For ciphers generating unprotected CMS attributes */ +# define EVP_CIPH_FLAG_CIPHER_WITH_MAC 0x2000000 +/* For supplementary wrap cipher support */ +# define EVP_CIPH_FLAG_GET_WRAP_CIPHER 0x4000000 +# define EVP_CIPH_FLAG_INVERSE_CIPHER 0x8000000 /* * Cipher context flag to indicate we can handle wrap mode: if allowed in @@ -350,8 +423,17 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23 /* Set the input buffer lengths to use for a pipelined operation */ # define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24 - +/* Get the IV length used by the cipher */ # define EVP_CTRL_GET_IVLEN 0x25 +/* 0x26 is unused */ +/* Tell the cipher it's doing a speed test (SIV disallows multiple ops) */ +# define EVP_CTRL_SET_SPEED 0x27 +/* Get the unprotectedAttrs from cipher ctx */ +# define EVP_CTRL_PROCESS_UNPROTECTED 0x28 +/* Get the supplementary wrap cipher */ +#define EVP_CTRL_GET_WRAP_CIPHER 0x29 +/* TLSTREE key diversification */ +#define EVP_CTRL_TLSTREE 0x2A /* Padding modes */ #define EVP_PADDING_PKCS7 1 @@ -405,33 +487,39 @@ typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); -# ifndef OPENSSL_NO_RSA +typedef int (EVP_PBE_KEYGEN_EX) (EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *cipher, const EVP_MD *md, + int en_de, OSSL_LIB_CTX *libctx, const char *propq); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 # define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ - (char *)(rsa)) + (rsa)) # endif # ifndef OPENSSL_NO_DSA # define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ - (char *)(dsa)) + (dsa)) # endif -# ifndef OPENSSL_NO_DH -# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ - (char *)(dh)) +# if !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_DEPRECATED_3_0) +# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,(dh)) # endif -# ifndef OPENSSL_NO_EC -# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ - (char *)(eckey)) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +# define EVP_PKEY_assign_EC_KEY(pkey,eckey) \ + EVP_PKEY_assign((pkey), EVP_PKEY_EC, (eckey)) +# endif # endif # ifndef OPENSSL_NO_SIPHASH -# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),EVP_PKEY_SIPHASH,\ - (char *)(shkey)) +# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),\ + EVP_PKEY_SIPHASH,(shkey)) # endif # ifndef OPENSSL_NO_POLY1305 -# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),EVP_PKEY_POLY1305,\ - (char *)(polykey)) +# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),\ + EVP_PKEY_POLY1305,(polykey)) # endif /* Add some extra combinations */ @@ -440,58 +528,126 @@ typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, # define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) # define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) -int EVP_MD_type(const EVP_MD *md); -# define EVP_MD_nid(e) EVP_MD_type(e) -# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) -int EVP_MD_pkey_type(const EVP_MD *md); -int EVP_MD_size(const EVP_MD *md); -int EVP_MD_block_size(const EVP_MD *md); -unsigned long EVP_MD_flags(const EVP_MD *md); +int EVP_MD_get_type(const EVP_MD *md); +# define EVP_MD_type EVP_MD_get_type +# define EVP_MD_nid EVP_MD_get_type +const char *EVP_MD_get0_name(const EVP_MD *md); +# define EVP_MD_name EVP_MD_get0_name +const char *EVP_MD_get0_description(const EVP_MD *md); +int EVP_MD_is_a(const EVP_MD *md, const char *name); +int EVP_MD_names_do_all(const EVP_MD *md, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PROVIDER *EVP_MD_get0_provider(const EVP_MD *md); +int EVP_MD_get_pkey_type(const EVP_MD *md); +# define EVP_MD_pkey_type EVP_MD_get_pkey_type +int EVP_MD_get_size(const EVP_MD *md); +# define EVP_MD_size EVP_MD_get_size +int EVP_MD_get_block_size(const EVP_MD *md); +# define EVP_MD_block_size EVP_MD_get_block_size +unsigned long EVP_MD_get_flags(const EVP_MD *md); +# define EVP_MD_flags EVP_MD_get_flags +const EVP_MD *EVP_MD_CTX_get0_md(const EVP_MD_CTX *ctx); +EVP_MD *EVP_MD_CTX_get1_md(EVP_MD_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, const void *data, size_t count); +OSSL_DEPRECATEDIN_3_0 void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count)); -# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) -EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); +# endif +# define EVP_MD_CTX_get0_name(e) EVP_MD_get0_name(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_get_size(e) EVP_MD_get_size(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_size EVP_MD_CTX_get_size +# define EVP_MD_CTX_get_block_size(e) EVP_MD_get_block_size(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_block_size EVP_MD_CTX_get_block_size +# define EVP_MD_CTX_get_type(e) EVP_MD_get_type(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_type EVP_MD_CTX_get_type +EVP_PKEY_CTX *EVP_MD_CTX_get_pkey_ctx(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_pkey_ctx EVP_MD_CTX_get_pkey_ctx void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); -void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); +void *EVP_MD_CTX_get0_md_data(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_md_data EVP_MD_CTX_get0_md_data -int EVP_CIPHER_nid(const EVP_CIPHER *cipher); -# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) -int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); +int EVP_CIPHER_get_nid(const EVP_CIPHER *cipher); +# define EVP_CIPHER_nid EVP_CIPHER_get_nid +const char *EVP_CIPHER_get0_name(const EVP_CIPHER *cipher); +# define EVP_CIPHER_name EVP_CIPHER_get0_name +const char *EVP_CIPHER_get0_description(const EVP_CIPHER *cipher); +int EVP_CIPHER_is_a(const EVP_CIPHER *cipher, const char *name); +int EVP_CIPHER_names_do_all(const EVP_CIPHER *cipher, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PROVIDER *EVP_CIPHER_get0_provider(const EVP_CIPHER *cipher); +int EVP_CIPHER_get_block_size(const EVP_CIPHER *cipher); +# define EVP_CIPHER_block_size EVP_CIPHER_get_block_size +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher); -int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); -int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); -unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); -# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) +# endif +int EVP_CIPHER_get_key_length(const EVP_CIPHER *cipher); +# define EVP_CIPHER_key_length EVP_CIPHER_get_key_length +int EVP_CIPHER_get_iv_length(const EVP_CIPHER *cipher); +# define EVP_CIPHER_iv_length EVP_CIPHER_get_iv_length +unsigned long EVP_CIPHER_get_flags(const EVP_CIPHER *cipher); +# define EVP_CIPHER_flags EVP_CIPHER_get_flags +int EVP_CIPHER_get_mode(const EVP_CIPHER *cipher); +# define EVP_CIPHER_mode EVP_CIPHER_get_mode +int EVP_CIPHER_get_type(const EVP_CIPHER *cipher); +# define EVP_CIPHER_type EVP_CIPHER_get_type +EVP_CIPHER *EVP_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_CIPHER_up_ref(EVP_CIPHER *cipher); +void EVP_CIPHER_free(EVP_CIPHER *cipher); +const EVP_CIPHER *EVP_CIPHER_CTX_get0_cipher(const EVP_CIPHER_CTX *ctx); +EVP_CIPHER *EVP_CIPHER_CTX_get1_cipher(EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_is_encrypting(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_encrypting EVP_CIPHER_CTX_is_encrypting +int EVP_CIPHER_CTX_get_nid(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_nid EVP_CIPHER_CTX_get_nid +int EVP_CIPHER_CTX_get_block_size(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_block_size EVP_CIPHER_CTX_get_block_size +int EVP_CIPHER_CTX_get_key_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_key_length EVP_CIPHER_CTX_get_key_length +int EVP_CIPHER_CTX_get_iv_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_iv_length EVP_CIPHER_CTX_get_iv_length +int EVP_CIPHER_CTX_get_tag_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_tag_length EVP_CIPHER_CTX_get_tag_length +# ifndef OPENSSL_NO_DEPRECATED_3_0 const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); -unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +# endif +int EVP_CIPHER_CTX_get_updated_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len); +int EVP_CIPHER_CTX_get_original_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_num(const EVP_CIPHER_CTX *ctx); -void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +# endif +int EVP_CIPHER_CTX_get_num(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_num EVP_CIPHER_CTX_get_num +int EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +EVP_CIPHER_CTX *EVP_CIPHER_CTX_dup(const EVP_CIPHER_CTX *in); int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx); void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); -# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) -# if OPENSSL_API_COMPAT < 0x10100000L -# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c)) +# define EVP_CIPHER_CTX_get0_name(c) EVP_CIPHER_get0_name(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_get_type(c) EVP_CIPHER_get_type(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_type EVP_CIPHER_CTX_get_type +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_get_flags(EVP_CIPHER_CTX_get0_cipher(c)) # endif -# define EVP_CIPHER_CTX_mode(c) EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)) +# define EVP_CIPHER_CTX_get_mode(c) EVP_CIPHER_get_mode(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_mode EVP_CIPHER_CTX_get_mode # define EVP_ENCODE_LENGTH(l) ((((l)+2)/3*4)+((l)/48+1)*2+80) # define EVP_DECODE_LENGTH(l) (((l)+3)/4*3+80) @@ -504,22 +660,17 @@ void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); # define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) # define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) -# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # ifdef CONST_STRICT void BIO_set_md(BIO *, const EVP_MD *md); # else -# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)(md)) +# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(void *)(md)) # endif -# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)(mdp)) -# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0, \ - (char *)(mdcp)) -# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0, \ - (char *)(mdcp)) +# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(mdp)) +# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(mdcp)) +# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(mdcp)) # define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) -# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0, \ - (char *)(c_pp)) +# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(c_pp)) /*__owur*/ int EVP_Cipher(EVP_CIPHER_CTX *c, unsigned char *out, @@ -534,6 +685,14 @@ void BIO_set_md(BIO *, const EVP_MD *md); # define EVP_delete_digest_alias(alias) \ OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); +int EVP_MD_get_params(const EVP_MD *digest, OSSL_PARAM params[]); +int EVP_MD_CTX_set_params(EVP_MD_CTX *ctx, const OSSL_PARAM params[]); +int EVP_MD_CTX_get_params(EVP_MD_CTX *ctx, OSSL_PARAM params[]); +const OSSL_PARAM *EVP_MD_gettable_params(const EVP_MD *digest); +const OSSL_PARAM *EVP_MD_settable_ctx_params(const EVP_MD *md); +const OSSL_PARAM *EVP_MD_gettable_ctx_params(const EVP_MD *md); +const OSSL_PARAM *EVP_MD_CTX_settable_params(EVP_MD_CTX *ctx); +const OSSL_PARAM *EVP_MD_CTX_gettable_params(EVP_MD_CTX *ctx); int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); EVP_MD_CTX *EVP_MD_CTX_new(void); int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); @@ -541,10 +700,13 @@ void EVP_MD_CTX_free(EVP_MD_CTX *ctx); # define EVP_MD_CTX_create() EVP_MD_CTX_new() # define EVP_MD_CTX_init(ctx) EVP_MD_CTX_reset((ctx)) # define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx)) +__owur EVP_MD_CTX *EVP_MD_CTX_dup(const EVP_MD_CTX *in); __owur int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); +__owur int EVP_DigestInit_ex2(EVP_MD_CTX *ctx, const EVP_MD *type, + const OSSL_PARAM params[]); __owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); __owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, @@ -554,6 +716,9 @@ __owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, __owur int EVP_Digest(const void *data, size_t count, unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl); +__owur int EVP_Q_digest(OSSL_LIB_CTX *libctx, const char *name, + const char *propq, const void *data, size_t datalen, + unsigned char *md, size_t *mdlen); __owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); __owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); @@ -562,6 +727,12 @@ __owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, __owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t len); +__owur EVP_MD *EVP_MD_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); + +int EVP_MD_up_ref(EVP_MD *md); +void EVP_MD_free(EVP_MD *md); + int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, const char *prompt, int verify); @@ -583,6 +754,10 @@ __owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); +__owur int EVP_EncryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, + const unsigned char *iv, + const OSSL_PARAM params[]); /*__owur*/ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); /*__owur*/ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, @@ -596,6 +771,10 @@ __owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); +__owur int EVP_DecryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, + const unsigned char *iv, + const OSSL_PARAM params[]); /*__owur*/ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); __owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, @@ -610,6 +789,9 @@ __owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc); +__owur int EVP_CipherInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv, + int enc, const OSSL_PARAM params[]); __owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); __owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, @@ -619,6 +801,9 @@ __owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, __owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, EVP_PKEY *pkey); +__owur int EVP_SignFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, + EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, + const char *propq); __owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen, const unsigned char *tbs, @@ -626,24 +811,36 @@ __owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, __owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, unsigned int siglen, EVP_PKEY *pkey); +__owur int EVP_VerifyFinal_ex(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); __owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, size_t siglen, const unsigned char *tbs, size_t tbslen); +int EVP_DigestSignInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const char *mdname, OSSL_LIB_CTX *libctx, + const char *props, EVP_PKEY *pkey, + const OSSL_PARAM params[]); /*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen); +int EVP_DigestVerifyInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const char *mdname, OSSL_LIB_CTX *libctx, + const char *props, EVP_PKEY *pkey, + const OSSL_PARAM params[]); __owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, size_t siglen); -# ifndef OPENSSL_NO_RSA __owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *ek, int ekl, const unsigned char *iv, EVP_PKEY *priv); @@ -653,11 +850,10 @@ __owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek, int *ekl, unsigned char *iv, EVP_PKEY **pubk, int npubk); __owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); -# endif EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); -int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); +int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, const EVP_ENCODE_CTX *sctx); int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, @@ -672,7 +868,7 @@ int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c) # define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c) # endif @@ -683,6 +879,14 @@ int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); +int EVP_CIPHER_get_params(EVP_CIPHER *cipher, OSSL_PARAM params[]); +int EVP_CIPHER_CTX_set_params(EVP_CIPHER_CTX *ctx, const OSSL_PARAM params[]); +int EVP_CIPHER_CTX_get_params(EVP_CIPHER_CTX *ctx, OSSL_PARAM params[]); +const OSSL_PARAM *EVP_CIPHER_gettable_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_settable_ctx_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_gettable_ctx_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_CTX_settable_params(EVP_CIPHER_CTX *ctx); +const OSSL_PARAM *EVP_CIPHER_CTX_gettable_params(EVP_CIPHER_CTX *ctx); const BIO_METHOD *BIO_f_md(void); const BIO_METHOD *BIO_f_base64(void); @@ -719,6 +923,7 @@ const EVP_MD *EVP_sha3_384(void); const EVP_MD *EVP_sha3_512(void); const EVP_MD *EVP_shake128(void); const EVP_MD *EVP_shake256(void); + # ifndef OPENSSL_NO_MDC2 const EVP_MD *EVP_mdc2(void); # endif @@ -939,7 +1144,7 @@ const EVP_CIPHER *EVP_sm4_ofb(void); const EVP_CIPHER *EVP_sm4_ctr(void); # endif -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OPENSSL_add_all_algorithms_conf() \ OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ | OPENSSL_INIT_ADD_ALL_DIGESTS \ @@ -974,6 +1179,9 @@ void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, void EVP_CIPHER_do_all_sorted(void (*fn) (const EVP_CIPHER *ciph, const char *from, const char *to, void *x), void *arg); +void EVP_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_CIPHER *cipher, void *arg), + void *arg); void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, const char *from, const char *to, void *x), @@ -981,81 +1189,237 @@ void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, void EVP_MD_do_all_sorted(void (*fn) (const EVP_MD *ciph, const char *from, const char *to, void *x), void *arg); +void EVP_MD_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_MD *md, void *arg), + void *arg); -int EVP_PKEY_decrypt_old(unsigned char *dec_key, - const unsigned char *enc_key, int enc_key_len, - EVP_PKEY *private_key); -int EVP_PKEY_encrypt_old(unsigned char *enc_key, - const unsigned char *key, int key_len, - EVP_PKEY *pub_key); +/* MAC stuff */ + +EVP_MAC *EVP_MAC_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); +int EVP_MAC_up_ref(EVP_MAC *mac); +void EVP_MAC_free(EVP_MAC *mac); +const char *EVP_MAC_get0_name(const EVP_MAC *mac); +const char *EVP_MAC_get0_description(const EVP_MAC *mac); +int EVP_MAC_is_a(const EVP_MAC *mac, const char *name); +const OSSL_PROVIDER *EVP_MAC_get0_provider(const EVP_MAC *mac); +int EVP_MAC_get_params(EVP_MAC *mac, OSSL_PARAM params[]); + +EVP_MAC_CTX *EVP_MAC_CTX_new(EVP_MAC *mac); +void EVP_MAC_CTX_free(EVP_MAC_CTX *ctx); +EVP_MAC_CTX *EVP_MAC_CTX_dup(const EVP_MAC_CTX *src); +EVP_MAC *EVP_MAC_CTX_get0_mac(EVP_MAC_CTX *ctx); +int EVP_MAC_CTX_get_params(EVP_MAC_CTX *ctx, OSSL_PARAM params[]); +int EVP_MAC_CTX_set_params(EVP_MAC_CTX *ctx, const OSSL_PARAM params[]); + +size_t EVP_MAC_CTX_get_mac_size(EVP_MAC_CTX *ctx); +size_t EVP_MAC_CTX_get_block_size(EVP_MAC_CTX *ctx); +unsigned char *EVP_Q_mac(OSSL_LIB_CTX *libctx, const char *name, const char *propq, + const char *subalg, const OSSL_PARAM *params, + const void *key, size_t keylen, + const unsigned char *data, size_t datalen, + unsigned char *out, size_t outsize, size_t *outlen); +int EVP_MAC_init(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen, + const OSSL_PARAM params[]); +int EVP_MAC_update(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen); +int EVP_MAC_final(EVP_MAC_CTX *ctx, + unsigned char *out, size_t *outl, size_t outsize); +int EVP_MAC_finalXOF(EVP_MAC_CTX *ctx, unsigned char *out, size_t outsize); +const OSSL_PARAM *EVP_MAC_gettable_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_gettable_ctx_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_settable_ctx_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_CTX_gettable_params(EVP_MAC_CTX *ctx); +const OSSL_PARAM *EVP_MAC_CTX_settable_params(EVP_MAC_CTX *ctx); + +void EVP_MAC_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_MAC *mac, void *arg), + void *arg); +int EVP_MAC_names_do_all(const EVP_MAC *mac, + void (*fn)(const char *name, void *data), + void *data); + +/* RAND stuff */ +EVP_RAND *EVP_RAND_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); +int EVP_RAND_up_ref(EVP_RAND *rand); +void EVP_RAND_free(EVP_RAND *rand); +const char *EVP_RAND_get0_name(const EVP_RAND *rand); +const char *EVP_RAND_get0_description(const EVP_RAND *md); +int EVP_RAND_is_a(const EVP_RAND *rand, const char *name); +const OSSL_PROVIDER *EVP_RAND_get0_provider(const EVP_RAND *rand); +int EVP_RAND_get_params(EVP_RAND *rand, OSSL_PARAM params[]); + +EVP_RAND_CTX *EVP_RAND_CTX_new(EVP_RAND *rand, EVP_RAND_CTX *parent); +int EVP_RAND_CTX_up_ref(EVP_RAND_CTX *ctx); +void EVP_RAND_CTX_free(EVP_RAND_CTX *ctx); +EVP_RAND *EVP_RAND_CTX_get0_rand(EVP_RAND_CTX *ctx); +int EVP_RAND_CTX_get_params(EVP_RAND_CTX *ctx, OSSL_PARAM params[]); +int EVP_RAND_CTX_set_params(EVP_RAND_CTX *ctx, const OSSL_PARAM params[]); +const OSSL_PARAM *EVP_RAND_gettable_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_gettable_ctx_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_settable_ctx_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_CTX_gettable_params(EVP_RAND_CTX *ctx); +const OSSL_PARAM *EVP_RAND_CTX_settable_params(EVP_RAND_CTX *ctx); + +void EVP_RAND_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_RAND *rand, void *arg), + void *arg); +int EVP_RAND_names_do_all(const EVP_RAND *rand, + void (*fn)(const char *name, void *data), + void *data); + +__owur int EVP_RAND_instantiate(EVP_RAND_CTX *ctx, unsigned int strength, + int prediction_resistance, + const unsigned char *pstr, size_t pstr_len, + const OSSL_PARAM params[]); +int EVP_RAND_uninstantiate(EVP_RAND_CTX *ctx); +__owur int EVP_RAND_generate(EVP_RAND_CTX *ctx, unsigned char *out, + size_t outlen, unsigned int strength, + int prediction_resistance, + const unsigned char *addin, size_t addin_len); +int EVP_RAND_reseed(EVP_RAND_CTX *ctx, int prediction_resistance, + const unsigned char *ent, size_t ent_len, + const unsigned char *addin, size_t addin_len); +__owur int EVP_RAND_nonce(EVP_RAND_CTX *ctx, unsigned char *out, size_t outlen); +__owur int EVP_RAND_enable_locking(EVP_RAND_CTX *ctx); + +int EVP_RAND_verify_zeroization(EVP_RAND_CTX *ctx); +unsigned int EVP_RAND_get_strength(EVP_RAND_CTX *ctx); +int EVP_RAND_get_state(EVP_RAND_CTX *ctx); + +# define EVP_RAND_STATE_UNINITIALISED 0 +# define EVP_RAND_STATE_READY 1 +# define EVP_RAND_STATE_ERROR 2 + +/* PKEY stuff */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_decrypt_old(unsigned char *dec_key, + const unsigned char *enc_key, + int enc_key_len, + EVP_PKEY *private_key); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_encrypt_old(unsigned char *enc_key, + const unsigned char *key, + int key_len, EVP_PKEY *pub_key); +# endif +int EVP_PKEY_is_a(const EVP_PKEY *pkey, const char *name); +int EVP_PKEY_type_names_do_all(const EVP_PKEY *pkey, + void (*fn)(const char *name, void *data), + void *data); int EVP_PKEY_type(int type); -int EVP_PKEY_id(const EVP_PKEY *pkey); -int EVP_PKEY_base_id(const EVP_PKEY *pkey); -int EVP_PKEY_bits(const EVP_PKEY *pkey); -int EVP_PKEY_security_bits(const EVP_PKEY *pkey); -int EVP_PKEY_size(const EVP_PKEY *pkey); +int EVP_PKEY_get_id(const EVP_PKEY *pkey); +# define EVP_PKEY_id EVP_PKEY_get_id +int EVP_PKEY_get_base_id(const EVP_PKEY *pkey); +# define EVP_PKEY_base_id EVP_PKEY_get_base_id +int EVP_PKEY_get_bits(const EVP_PKEY *pkey); +# define EVP_PKEY_bits EVP_PKEY_get_bits +int EVP_PKEY_get_security_bits(const EVP_PKEY *pkey); +# define EVP_PKEY_security_bits EVP_PKEY_get_security_bits +int EVP_PKEY_get_size(const EVP_PKEY *pkey); +# define EVP_PKEY_size EVP_PKEY_get_size +int EVP_PKEY_can_sign(const EVP_PKEY *pkey); int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); -int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type); -# ifndef OPENSSL_NO_ENGINE +int EVP_PKEY_set_type_by_keymgmt(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); -# endif +# endif +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); +OSSL_DEPRECATEDIN_3_0 void *EVP_PKEY_get0(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); -# ifndef OPENSSL_NO_POLY1305 +# ifndef OPENSSL_NO_POLY1305 +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); -# endif -# ifndef OPENSSL_NO_SIPHASH +# endif +# ifndef OPENSSL_NO_SIPHASH +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); -# endif +# endif -# ifndef OPENSSL_NO_RSA struct rsa_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); -struct rsa_st *EVP_PKEY_get0_RSA(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct rsa_st *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DSA + +# ifndef OPENSSL_NO_DSA struct dsa_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); -struct dsa_st *EVP_PKEY_get0_DSA(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct dsa_st *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DH +# endif + +# ifndef OPENSSL_NO_DH struct dh_st; -int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); -struct dh_st *EVP_PKEY_get0_DH(EVP_PKEY *pkey); -struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); +OSSL_DEPRECATEDIN_3_0 const struct dh_st *EVP_PKEY_get0_DH(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); +# endif + +# ifndef OPENSSL_NO_EC struct ec_key_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); -struct ec_key_st *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct ec_key_st *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); -# endif +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ EVP_PKEY *EVP_PKEY_new(void); int EVP_PKEY_up_ref(EVP_PKEY *pkey); +EVP_PKEY *EVP_PKEY_dup(EVP_PKEY *pkey); void EVP_PKEY_free(EVP_PKEY *pkey); +const char *EVP_PKEY_get0_description(const EVP_PKEY *pkey); +const OSSL_PROVIDER *EVP_PKEY_get0_provider(const EVP_PKEY *key); EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, long length); -int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); +int i2d_PublicKey(const EVP_PKEY *a, unsigned char **pp); + +EVP_PKEY *d2i_PrivateKey_ex(int type, EVP_PKEY **a, const unsigned char **pp, + long length, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length); +EVP_PKEY *d2i_AutoPrivateKey_ex(EVP_PKEY **a, const unsigned char **pp, + long length, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, long length); -int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); +int i2d_PrivateKey(const EVP_PKEY *a, unsigned char **pp); + +int i2d_KeyParams(const EVP_PKEY *a, unsigned char **pp); +EVP_PKEY *d2i_KeyParams(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_KeyParams_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_KeyParams_bio(int type, EVP_PKEY **a, BIO *in); int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); -int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); +int EVP_PKEY_parameters_eq(const EVP_PKEY *a, const EVP_PKEY *b); +int EVP_PKEY_eq(const EVP_PKEY *a, const EVP_PKEY *b); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); +# endif int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); @@ -1063,14 +1427,43 @@ int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); +# ifndef OPENSSL_NO_STDIO +int EVP_PKEY_print_public_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_private_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_params_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +# endif int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); +int EVP_PKEY_get_default_digest_name(EVP_PKEY *pkey, + char *mdname, size_t mdname_sz); +int EVP_PKEY_digestsign_supports_digest(EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, + const char *name, const char *propq); -int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, - const unsigned char *pt, size_t ptlen); -size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *pkey, unsigned char **ppt); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * For backwards compatibility. Use EVP_PKEY_set1_encoded_public_key in + * preference + */ +# define EVP_PKEY_set1_tls_encodedpoint(pkey, pt, ptlen) \ + EVP_PKEY_set1_encoded_public_key((pkey), (pt), (ptlen)) +# endif -int EVP_CIPHER_type(const EVP_CIPHER *ctx); +int EVP_PKEY_set1_encoded_public_key(EVP_PKEY *pkey, + const unsigned char *pub, size_t publen); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * For backwards compatibility. Use EVP_PKEY_get1_encoded_public_key in + * preference + */ +# define EVP_PKEY_get1_tls_encodedpoint(pkey, ppt) \ + EVP_PKEY_get1_encoded_public_key((pkey), (ppt)) +# endif + +size_t EVP_PKEY_get1_encoded_public_key(EVP_PKEY *pkey, unsigned char **ppub); /* calls methods */ int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); @@ -1084,6 +1477,10 @@ int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); +int PKCS5_PBE_keyivgen_ex(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de, OSSL_LIB_CTX *libctx, + const char *propq); int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, const unsigned char *salt, int saltlen, int iter, int keylen, unsigned char *out); @@ -1093,16 +1490,29 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); +int PKCS5_v2_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); #ifndef OPENSSL_NO_SCRYPT int EVP_PBE_scrypt(const char *pass, size_t passlen, const unsigned char *salt, size_t saltlen, uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, unsigned char *key, size_t keylen); +int EVP_PBE_scrypt_ex(const char *pass, size_t passlen, + const unsigned char *salt, size_t saltlen, + uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, + unsigned char *key, size_t keylen, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *c, const EVP_MD *md, int en_de); +int PKCS5_v2_scrypt_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *c, const EVP_MD *md, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); #endif void PKCS5_PBE_add(void); @@ -1110,6 +1520,10 @@ void PKCS5_PBE_add(void); int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); +int EVP_PBE_CipherInit_ex(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, + ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); + /* PBE type */ /* Can appear as the outermost AlgorithmIdentifier */ @@ -1125,6 +1539,8 @@ int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, EVP_PBE_KEYGEN *keygen); int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, EVP_PBE_KEYGEN **pkeygen); +int EVP_PBE_find_ex(int type, int pbe_nid, int *pcnid, int *pmnid, + EVP_PBE_KEYGEN **pkeygen, EVP_PBE_KEYGEN_EX **pkeygen_ex); void EVP_PBE_cleanup(void); int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); @@ -1141,6 +1557,7 @@ int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); # define ASN1_PKEY_CTRL_SET1_TLS_ENCPT 0x9 # define ASN1_PKEY_CTRL_GET1_TLS_ENCPT 0xa +# define ASN1_PKEY_CTRL_CMS_IS_RI_TYPE_SUPPORTED 0xb int EVP_PKEY_asn1_get_count(void); const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); @@ -1163,7 +1580,7 @@ void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, int (*pub_decode) (EVP_PKEY *pk, - X509_PUBKEY *pub), + const X509_PUBKEY *pub), int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk), int (*pub_cmp) (const EVP_PKEY *a, @@ -1207,13 +1624,13 @@ void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, - void *asn, - X509_ALGOR *a, - ASN1_BIT_STRING *sig, + const void *data, + const X509_ALGOR *a, + const ASN1_BIT_STRING *sig, EVP_PKEY *pkey), int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, - void *asn, + const void *data, X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig)); @@ -1254,17 +1671,31 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, int (*pkey_security_bits) (const EVP_PKEY *pk)); +int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); + +int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, const void *id, int len); +int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id); +int EVP_PKEY_CTX_get1_id_len(EVP_PKEY_CTX *ctx, size_t *id_len); + +int EVP_PKEY_CTX_set_kem_op(EVP_PKEY_CTX *ctx, const char *op); + +const char *EVP_PKEY_get0_type_name(const EVP_PKEY *key); + # define EVP_PKEY_OP_UNDEFINED 0 # define EVP_PKEY_OP_PARAMGEN (1<<1) # define EVP_PKEY_OP_KEYGEN (1<<2) -# define EVP_PKEY_OP_SIGN (1<<3) -# define EVP_PKEY_OP_VERIFY (1<<4) -# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) -# define EVP_PKEY_OP_SIGNCTX (1<<6) -# define EVP_PKEY_OP_VERIFYCTX (1<<7) -# define EVP_PKEY_OP_ENCRYPT (1<<8) -# define EVP_PKEY_OP_DECRYPT (1<<9) -# define EVP_PKEY_OP_DERIVE (1<<10) +# define EVP_PKEY_OP_FROMDATA (1<<3) +# define EVP_PKEY_OP_SIGN (1<<4) +# define EVP_PKEY_OP_VERIFY (1<<5) +# define EVP_PKEY_OP_VERIFYRECOVER (1<<6) +# define EVP_PKEY_OP_SIGNCTX (1<<7) +# define EVP_PKEY_OP_VERIFYCTX (1<<8) +# define EVP_PKEY_OP_ENCRYPT (1<<9) +# define EVP_PKEY_OP_DECRYPT (1<<10) +# define EVP_PKEY_OP_DERIVE (1<<11) +# define EVP_PKEY_OP_ENCAPSULATE (1<<12) +# define EVP_PKEY_OP_DECAPSULATE (1<<13) # define EVP_PKEY_OP_TYPE_SIG \ (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ @@ -1277,44 +1708,32 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, (EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT | EVP_PKEY_OP_DERIVE) # define EVP_PKEY_OP_TYPE_GEN \ - (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) + (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) -# define EVP_PKEY_CTX_set_signature_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_MD, 0, (void *)(md)) -# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_GET_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_mac_key(ctx, key, len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)(key)) +int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, const unsigned char *key, + int keylen); # define EVP_PKEY_CTRL_MD 1 # define EVP_PKEY_CTRL_PEER_KEY 2 - -# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 -# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 - -# define EVP_PKEY_CTRL_PKCS7_SIGN 5 - # define EVP_PKEY_CTRL_SET_MAC_KEY 6 - # define EVP_PKEY_CTRL_DIGESTINIT 7 - /* Used by GOST key encryption in TLS */ # define EVP_PKEY_CTRL_SET_IV 8 - -# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 -# define EVP_PKEY_CTRL_CMS_DECRYPT 10 -# define EVP_PKEY_CTRL_CMS_SIGN 11 - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 +# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 +# define EVP_PKEY_CTRL_PKCS7_SIGN 5 +# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 +# define EVP_PKEY_CTRL_CMS_DECRYPT 10 +# define EVP_PKEY_CTRL_CMS_SIGN 11 +# endif # define EVP_PKEY_CTRL_CIPHER 12 - # define EVP_PKEY_CTRL_GET_MD 13 - # define EVP_PKEY_CTRL_SET_DIGEST_SIZE 14 +# define EVP_PKEY_CTRL_SET1_ID 15 +# define EVP_PKEY_CTRL_GET1_ID 16 +# define EVP_PKEY_CTRL_GET1_ID_LEN 17 # define EVP_PKEY_ALG_CTRL 0x1000 @@ -1323,23 +1742,53 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, * Method handles all operations: don't assume any digest related defaults. */ # define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); +OSSL_DEPRECATEDIN_3_0 EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, + const EVP_PKEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, + const EVP_PKEY_METHOD *src); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 size_t EVP_PKEY_meth_get_count(void); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); +# endif -const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); -EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); -void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, - const EVP_PKEY_METHOD *meth); -void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); -void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); -size_t EVP_PKEY_meth_get_count(void); -const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); +EVP_KEYMGMT *EVP_KEYMGMT_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_KEYMGMT_up_ref(EVP_KEYMGMT *keymgmt); +void EVP_KEYMGMT_free(EVP_KEYMGMT *keymgmt); +const OSSL_PROVIDER *EVP_KEYMGMT_get0_provider(const EVP_KEYMGMT *keymgmt); +const char *EVP_KEYMGMT_get0_name(const EVP_KEYMGMT *keymgmt); +const char *EVP_KEYMGMT_get0_description(const EVP_KEYMGMT *keymgmt); +int EVP_KEYMGMT_is_a(const EVP_KEYMGMT *keymgmt, const char *name); +void EVP_KEYMGMT_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEYMGMT *keymgmt, void *arg), + void *arg); +int EVP_KEYMGMT_names_do_all(const EVP_KEYMGMT *keymgmt, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_KEYMGMT_gettable_params(const EVP_KEYMGMT *keymgmt); +const OSSL_PARAM *EVP_KEYMGMT_settable_params(const EVP_KEYMGMT *keymgmt); +const OSSL_PARAM *EVP_KEYMGMT_gen_settable_params(const EVP_KEYMGMT *keymgmt); EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_from_name(OSSL_LIB_CTX *libctx, + const char *name, + const char *propquery); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_from_pkey(OSSL_LIB_CTX *libctx, + EVP_PKEY *pkey, const char *propquery); +EVP_PKEY_CTX *EVP_PKEY_CTX_dup(const EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_is_a(EVP_PKEY_CTX *ctx, const char *keytype); +int EVP_PKEY_CTX_get_params(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); +const OSSL_PARAM *EVP_PKEY_CTX_gettable_params(const EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_set_params(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params); +const OSSL_PARAM *EVP_PKEY_CTX_settable_params(const EVP_PKEY_CTX *ctx); int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, int cmd, int p1, void *p2); int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, @@ -1357,9 +1806,16 @@ void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key, int keylen); +EVP_PKEY *EVP_PKEY_new_raw_private_key_ex(OSSL_LIB_CTX *libctx, + const char *keytype, + const char *propq, + const unsigned char *priv, size_t len); EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e, const unsigned char *priv, size_t len); +EVP_PKEY *EVP_PKEY_new_raw_public_key_ex(OSSL_LIB_CTX *libctx, + const char *keytype, const char *propq, + const unsigned char *pub, size_t len); EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e, const unsigned char *pub, size_t len); @@ -1368,11 +1824,14 @@ int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, size_t *len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv, size_t len, const EVP_CIPHER *cipher); +# endif void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); +void *EVP_PKEY_CTX_get_data(const EVP_PKEY_CTX *ctx); EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); @@ -1380,285 +1839,333 @@ EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); +void EVP_SIGNATURE_free(EVP_SIGNATURE *signature); +int EVP_SIGNATURE_up_ref(EVP_SIGNATURE *signature); +OSSL_PROVIDER *EVP_SIGNATURE_get0_provider(const EVP_SIGNATURE *signature); +EVP_SIGNATURE *EVP_SIGNATURE_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_SIGNATURE_is_a(const EVP_SIGNATURE *signature, const char *name); +const char *EVP_SIGNATURE_get0_name(const EVP_SIGNATURE *signature); +const char *EVP_SIGNATURE_get0_description(const EVP_SIGNATURE *signature); +void EVP_SIGNATURE_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_SIGNATURE *signature, + void *data), + void *data); +int EVP_SIGNATURE_names_do_all(const EVP_SIGNATURE *signature, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_SIGNATURE_gettable_ctx_params(const EVP_SIGNATURE *sig); +const OSSL_PARAM *EVP_SIGNATURE_settable_ctx_params(const EVP_SIGNATURE *sig); + +void EVP_ASYM_CIPHER_free(EVP_ASYM_CIPHER *cipher); +int EVP_ASYM_CIPHER_up_ref(EVP_ASYM_CIPHER *cipher); +OSSL_PROVIDER *EVP_ASYM_CIPHER_get0_provider(const EVP_ASYM_CIPHER *cipher); +EVP_ASYM_CIPHER *EVP_ASYM_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_ASYM_CIPHER_is_a(const EVP_ASYM_CIPHER *cipher, const char *name); +const char *EVP_ASYM_CIPHER_get0_name(const EVP_ASYM_CIPHER *cipher); +const char *EVP_ASYM_CIPHER_get0_description(const EVP_ASYM_CIPHER *cipher); +void EVP_ASYM_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_ASYM_CIPHER *cipher, + void *arg), + void *arg); +int EVP_ASYM_CIPHER_names_do_all(const EVP_ASYM_CIPHER *cipher, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_ASYM_CIPHER_gettable_ctx_params(const EVP_ASYM_CIPHER *ciph); +const OSSL_PARAM *EVP_ASYM_CIPHER_settable_ctx_params(const EVP_ASYM_CIPHER *ciph); + +void EVP_KEM_free(EVP_KEM *wrap); +int EVP_KEM_up_ref(EVP_KEM *wrap); +OSSL_PROVIDER *EVP_KEM_get0_provider(const EVP_KEM *wrap); +EVP_KEM *EVP_KEM_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_KEM_is_a(const EVP_KEM *wrap, const char *name); +const char *EVP_KEM_get0_name(const EVP_KEM *wrap); +const char *EVP_KEM_get0_description(const EVP_KEM *wrap); +void EVP_KEM_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEM *wrap, void *arg), void *arg); +int EVP_KEM_names_do_all(const EVP_KEM *wrap, + void (*fn)(const char *name, void *data), void *data); +const OSSL_PARAM *EVP_KEM_gettable_ctx_params(const EVP_KEM *kem); +const OSSL_PARAM *EVP_KEM_settable_ctx_params(const EVP_KEM *kem); + int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_sign_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, const unsigned char *tbs, size_t tbslen); int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs, size_t tbslen); int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_recover_init_ex(EVP_PKEY_CTX *ctx, + const OSSL_PARAM params[]); int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, unsigned char *rout, size_t *routlen, const unsigned char *sig, size_t siglen); int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_encrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen); int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_decrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen); int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_derive_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_derive_set_peer_ex(EVP_PKEY_CTX *ctx, EVP_PKEY *peer, + int validate_peer); int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); +int EVP_PKEY_encapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_encapsulate(EVP_PKEY_CTX *ctx, + unsigned char *wrappedkey, size_t *wrappedkeylen, + unsigned char *genkey, size_t *genkeylen); +int EVP_PKEY_decapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_decapsulate(EVP_PKEY_CTX *ctx, + unsigned char *unwrapped, size_t *unwrappedlen, + const unsigned char *wrapped, size_t wrappedlen); + typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); +int EVP_PKEY_fromdata_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_fromdata(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey, int selection, + OSSL_PARAM param[]); +const OSSL_PARAM *EVP_PKEY_fromdata_settable(EVP_PKEY_CTX *ctx, int selection); + +int EVP_PKEY_todata(const EVP_PKEY *pkey, int selection, OSSL_PARAM **params); +int EVP_PKEY_export(const EVP_PKEY *pkey, int selection, + OSSL_CALLBACK *export_cb, void *export_cbarg); + +const OSSL_PARAM *EVP_PKEY_gettable_params(const EVP_PKEY *pkey); +int EVP_PKEY_get_params(const EVP_PKEY *pkey, OSSL_PARAM params[]); +int EVP_PKEY_get_int_param(const EVP_PKEY *pkey, const char *key_name, + int *out); +int EVP_PKEY_get_size_t_param(const EVP_PKEY *pkey, const char *key_name, + size_t *out); +int EVP_PKEY_get_bn_param(const EVP_PKEY *pkey, const char *key_name, + BIGNUM **bn); +int EVP_PKEY_get_utf8_string_param(const EVP_PKEY *pkey, const char *key_name, + char *str, size_t max_buf_sz, size_t *out_sz); +int EVP_PKEY_get_octet_string_param(const EVP_PKEY *pkey, const char *key_name, + unsigned char *buf, size_t max_buf_sz, + size_t *out_sz); + +const OSSL_PARAM *EVP_PKEY_settable_params(const EVP_PKEY *pkey); +int EVP_PKEY_set_params(EVP_PKEY *pkey, OSSL_PARAM params[]); +int EVP_PKEY_set_int_param(EVP_PKEY *pkey, const char *key_name, int in); +int EVP_PKEY_set_size_t_param(EVP_PKEY *pkey, const char *key_name, size_t in); +int EVP_PKEY_set_bn_param(EVP_PKEY *pkey, const char *key_name, + const BIGNUM *bn); +int EVP_PKEY_set_utf8_string_param(EVP_PKEY *pkey, const char *key_name, + const char *str); +int EVP_PKEY_set_octet_string_param(EVP_PKEY *pkey, const char *key_name, + const unsigned char *buf, size_t bsize); + +int EVP_PKEY_get_ec_point_conv_form(const EVP_PKEY *pkey); +int EVP_PKEY_get_field_type(const EVP_PKEY *pkey); + +EVP_PKEY *EVP_PKEY_Q_keygen(OSSL_LIB_CTX *libctx, const char *propq, + const char *type, ...); int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_generate(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_check(EVP_PKEY_CTX *ctx); int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_public_check_quick(EVP_PKEY_CTX *ctx); int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_param_check_quick(EVP_PKEY_CTX *ctx); +int EVP_PKEY_private_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_pairwise_check(EVP_PKEY_CTX *ctx); + +# define EVP_PKEY_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EVP_PKEY, l, p, newf, dupf, freef) +int EVP_PKEY_set_ex_data(EVP_PKEY *key, int idx, void *arg); +void *EVP_PKEY_get_ex_data(const EVP_PKEY *key, int idx); void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); - -void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, - int (*init) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, - int (*copy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, - void (*cleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, - int (*paramgen_init) (EVP_PKEY_CTX *ctx), - int (*paramgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, - int (*keygen_init) (EVP_PKEY_CTX *ctx), - int (*keygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, - int (*sign_init) (EVP_PKEY_CTX *ctx), - int (*sign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, - int (*verify_init) (EVP_PKEY_CTX *ctx), - int (*verify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, - int (*verify_recover_init) (EVP_PKEY_CTX - *ctx), - int (*verify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, - int (*signctx_init) (EVP_PKEY_CTX *ctx, +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, + int (*init) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_copy + (EVP_PKEY_METHOD *pmeth, int (*copy) (EVP_PKEY_CTX *dst, + const EVP_PKEY_CTX *src)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_cleanup + (EVP_PKEY_METHOD *pmeth, void (*cleanup) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_paramgen + (EVP_PKEY_METHOD *pmeth, int (*paramgen_init) (EVP_PKEY_CTX *ctx), + int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_keygen + (EVP_PKEY_METHOD *pmeth, int (*keygen_init) (EVP_PKEY_CTX *ctx), + int (*keygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_sign + (EVP_PKEY_METHOD *pmeth, int (*sign_init) (EVP_PKEY_CTX *ctx), + int (*sign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verify + (EVP_PKEY_METHOD *pmeth, int (*verify_init) (EVP_PKEY_CTX *ctx), + int (*verify) (EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verify_recover + (EVP_PKEY_METHOD *pmeth, int (*verify_recover_init) (EVP_PKEY_CTX *ctx), + int (*verify_recover) (EVP_PKEY_CTX *ctx, unsigned char *sig, + size_t *siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_signctx + (EVP_PKEY_METHOD *pmeth, int (*signctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*signctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verifyctx + (EVP_PKEY_METHOD *pmeth, int (*verifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), - int (*signctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, - int (*verifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*verifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, + int (*verifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_encrypt + (EVP_PKEY_METHOD *pmeth, int (*encrypt_init) (EVP_PKEY_CTX *ctx), + int (*encryptfn) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_decrypt + (EVP_PKEY_METHOD *pmeth, int (*decrypt_init) (EVP_PKEY_CTX *ctx), + int (*decrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_derive + (EVP_PKEY_METHOD *pmeth, int (*derive_init) (EVP_PKEY_CTX *ctx), + int (*derive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_ctrl + (EVP_PKEY_METHOD *pmeth, int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (*ctrl_str) (EVP_PKEY_CTX *ctx, const char *type, const char *value)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestsign + (EVP_PKEY_METHOD *pmeth, + int (*digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestverify + (EVP_PKEY_METHOD *pmeth, + int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_public_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_param_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digest_custom + (EVP_PKEY_METHOD *pmeth, int (*digest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_init + (const EVP_PKEY_METHOD *pmeth, int (**pinit) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_copy + (const EVP_PKEY_METHOD *pmeth, int (**pcopy) (EVP_PKEY_CTX *dst, + const EVP_PKEY_CTX *src)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_cleanup + (const EVP_PKEY_METHOD *pmeth, void (**pcleanup) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_paramgen + (const EVP_PKEY_METHOD *pmeth, int (**pparamgen_init) (EVP_PKEY_CTX *ctx), + int (**pparamgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_keygen + (const EVP_PKEY_METHOD *pmeth, int (**pkeygen_init) (EVP_PKEY_CTX *ctx), + int (**pkeygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_sign + (const EVP_PKEY_METHOD *pmeth, int (**psign_init) (EVP_PKEY_CTX *ctx), + int (**psign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify + (const EVP_PKEY_METHOD *pmeth, int (**pverify_init) (EVP_PKEY_CTX *ctx), + int (**pverify) (EVP_PKEY_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify_recover + (const EVP_PKEY_METHOD *pmeth, + int (**pverify_recover_init) (EVP_PKEY_CTX *ctx), + int (**pverify_recover) (EVP_PKEY_CTX *ctx, unsigned char *sig, + size_t *siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_signctx + (const EVP_PKEY_METHOD *pmeth, + int (**psignctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), + int (**psignctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verifyctx + (const EVP_PKEY_METHOD *pmeth, + int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), + int (**pverifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, + int siglen, EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_encrypt + (const EVP_PKEY_METHOD *pmeth, int (**pencrypt_init) (EVP_PKEY_CTX *ctx), + int (**pencryptfn) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_decrypt + (const EVP_PKEY_METHOD *pmeth, int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), + int (**pdecrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_derive + (const EVP_PKEY_METHOD *pmeth, int (**pderive_init) (EVP_PKEY_CTX *ctx), + int (**pderive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_ctrl + (const EVP_PKEY_METHOD *pmeth, + int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, void *p2), + int (**pctrl_str) (EVP_PKEY_CTX *ctx, const char *type, + const char *value)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestsign + (const EVP_PKEY_METHOD *pmeth, + int (**digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestverify + (const EVP_PKEY_METHOD *pmeth, + int (**digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_public_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_param_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digest_custom + (const EVP_PKEY_METHOD *pmeth, + int (**pdigest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)); +# endif -void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, - int (*encrypt_init) (EVP_PKEY_CTX *ctx), - int (*encryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); +void EVP_KEYEXCH_free(EVP_KEYEXCH *exchange); +int EVP_KEYEXCH_up_ref(EVP_KEYEXCH *exchange); +EVP_KEYEXCH *EVP_KEYEXCH_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +OSSL_PROVIDER *EVP_KEYEXCH_get0_provider(const EVP_KEYEXCH *exchange); +int EVP_KEYEXCH_is_a(const EVP_KEYEXCH *keyexch, const char *name); +const char *EVP_KEYEXCH_get0_name(const EVP_KEYEXCH *keyexch); +const char *EVP_KEYEXCH_get0_description(const EVP_KEYEXCH *keyexch); +void EVP_KEYEXCH_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEYEXCH *keyexch, void *data), + void *data); +int EVP_KEYEXCH_names_do_all(const EVP_KEYEXCH *keyexch, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_KEYEXCH_gettable_ctx_params(const EVP_KEYEXCH *keyexch); +const OSSL_PARAM *EVP_KEYEXCH_settable_ctx_params(const EVP_KEYEXCH *keyexch); -void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, - int (*decrypt_init) (EVP_PKEY_CTX *ctx), - int (*decrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, - int (*derive_init) (EVP_PKEY_CTX *ctx), - int (*derive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, - int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (*ctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_PKEY_meth_set_digestsign(EVP_PKEY_METHOD *pmeth, - int (*digestsign) (EVP_MD_CTX *ctx, - unsigned char *sig, - size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_digestverify(EVP_PKEY_METHOD *pmeth, - int (*digestverify) (EVP_MD_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth, - int (*digest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth, - int (**pinit) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth, - int (**pcopy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth, - void (**pcleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_get_paramgen(const EVP_PKEY_METHOD *pmeth, - int (**pparamgen_init) (EVP_PKEY_CTX *ctx), - int (**pparamgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_keygen(const EVP_PKEY_METHOD *pmeth, - int (**pkeygen_init) (EVP_PKEY_CTX *ctx), - int (**pkeygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_sign(const EVP_PKEY_METHOD *pmeth, - int (**psign_init) (EVP_PKEY_CTX *ctx), - int (**psign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_verify(const EVP_PKEY_METHOD *pmeth, - int (**pverify_init) (EVP_PKEY_CTX *ctx), - int (**pverify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_verify_recover(const EVP_PKEY_METHOD *pmeth, - int (**pverify_recover_init) (EVP_PKEY_CTX - *ctx), - int (**pverify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_signctx(const EVP_PKEY_METHOD *pmeth, - int (**psignctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (**psignctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_verifyctx(const EVP_PKEY_METHOD *pmeth, - int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (**pverifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_encrypt(const EVP_PKEY_METHOD *pmeth, - int (**pencrypt_init) (EVP_PKEY_CTX *ctx), - int (**pencryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_get_decrypt(const EVP_PKEY_METHOD *pmeth, - int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), - int (**pdecrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_get_derive(const EVP_PKEY_METHOD *pmeth, - int (**pderive_init) (EVP_PKEY_CTX *ctx), - int (**pderive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth, - int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (**pctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_PKEY_meth_get_digestsign(EVP_PKEY_METHOD *pmeth, - int (**digestsign) (EVP_MD_CTX *ctx, - unsigned char *sig, - size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_digestverify(EVP_PKEY_METHOD *pmeth, - int (**digestverify) (EVP_MD_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth, - int (**pdigest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); void EVP_add_alg_module(void); +int EVP_PKEY_CTX_set_group_name(EVP_PKEY_CTX *ctx, const char *name); +int EVP_PKEY_CTX_get_group_name(EVP_PKEY_CTX *ctx, char *name, size_t namelen); +int EVP_PKEY_get_group_name(const EVP_PKEY *pkey, char *name, size_t name_sz, + size_t *gname_len); + +OSSL_LIB_CTX *EVP_PKEY_CTX_get0_libctx(EVP_PKEY_CTX *ctx); +const char *EVP_PKEY_CTX_get0_propq(const EVP_PKEY_CTX *ctx); +const OSSL_PROVIDER *EVP_PKEY_CTX_get0_provider(const EVP_PKEY_CTX *ctx); # ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h index b4ea90ae..a5053f6c 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h @@ -2,190 +2,117 @@ * Generated by util/mkerr.pl DO NOT EDIT * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EVPERR_H -# define HEADER_EVPERR_H +#ifndef OPENSSL_EVPERR_H +# define OPENSSL_EVPERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EVP_strings(void); -/* - * EVP function codes. - */ -# define EVP_F_AESNI_INIT_KEY 165 -# define EVP_F_AESNI_XTS_INIT_KEY 207 -# define EVP_F_AES_GCM_CTRL 196 -# define EVP_F_AES_INIT_KEY 133 -# define EVP_F_AES_OCB_CIPHER 169 -# define EVP_F_AES_T4_INIT_KEY 178 -# define EVP_F_AES_T4_XTS_INIT_KEY 208 -# define EVP_F_AES_WRAP_CIPHER 170 -# define EVP_F_AES_XTS_INIT_KEY 209 -# define EVP_F_ALG_MODULE_INIT 177 -# define EVP_F_ARIA_CCM_INIT_KEY 175 -# define EVP_F_ARIA_GCM_CTRL 197 -# define EVP_F_ARIA_GCM_INIT_KEY 176 -# define EVP_F_ARIA_INIT_KEY 185 -# define EVP_F_B64_NEW 198 -# define EVP_F_CAMELLIA_INIT_KEY 159 -# define EVP_F_CHACHA20_POLY1305_CTRL 182 -# define EVP_F_CMLL_T4_INIT_KEY 179 -# define EVP_F_DES_EDE3_WRAP_CIPHER 171 -# define EVP_F_DO_SIGVER_INIT 161 -# define EVP_F_ENC_NEW 199 -# define EVP_F_EVP_CIPHERINIT_EX 123 -# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 204 -# define EVP_F_EVP_CIPHER_CTX_COPY 163 -# define EVP_F_EVP_CIPHER_CTX_CTRL 124 -# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 -# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 205 -# define EVP_F_EVP_DECRYPTFINAL_EX 101 -# define EVP_F_EVP_DECRYPTUPDATE 166 -# define EVP_F_EVP_DIGESTFINALXOF 174 -# define EVP_F_EVP_DIGESTINIT_EX 128 -# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 219 -# define EVP_F_EVP_ENCRYPTFINAL_EX 127 -# define EVP_F_EVP_ENCRYPTUPDATE 167 -# define EVP_F_EVP_MD_CTX_COPY_EX 110 -# define EVP_F_EVP_MD_SIZE 162 -# define EVP_F_EVP_OPENINIT 102 -# define EVP_F_EVP_PBE_ALG_ADD 115 -# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 -# define EVP_F_EVP_PBE_CIPHERINIT 116 -# define EVP_F_EVP_PBE_SCRYPT 181 -# define EVP_F_EVP_PKCS82PKEY 111 -# define EVP_F_EVP_PKEY2PKCS8 113 -# define EVP_F_EVP_PKEY_ASN1_ADD0 188 -# define EVP_F_EVP_PKEY_CHECK 186 -# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 -# define EVP_F_EVP_PKEY_CTX_CTRL 137 -# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 -# define EVP_F_EVP_PKEY_CTX_DUP 156 -# define EVP_F_EVP_PKEY_CTX_MD 168 -# define EVP_F_EVP_PKEY_DECRYPT 104 -# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 -# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 -# define EVP_F_EVP_PKEY_DERIVE 153 -# define EVP_F_EVP_PKEY_DERIVE_INIT 154 -# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 -# define EVP_F_EVP_PKEY_ENCRYPT 105 -# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 -# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 -# define EVP_F_EVP_PKEY_GET0_DH 119 -# define EVP_F_EVP_PKEY_GET0_DSA 120 -# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 -# define EVP_F_EVP_PKEY_GET0_HMAC 183 -# define EVP_F_EVP_PKEY_GET0_POLY1305 184 -# define EVP_F_EVP_PKEY_GET0_RSA 121 -# define EVP_F_EVP_PKEY_GET0_SIPHASH 172 -# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 202 -# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 203 -# define EVP_F_EVP_PKEY_KEYGEN 146 -# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 -# define EVP_F_EVP_PKEY_METH_ADD0 194 -# define EVP_F_EVP_PKEY_METH_NEW 195 -# define EVP_F_EVP_PKEY_NEW 106 -# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 193 -# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 191 -# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 192 -# define EVP_F_EVP_PKEY_PARAMGEN 148 -# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 -# define EVP_F_EVP_PKEY_PARAM_CHECK 189 -# define EVP_F_EVP_PKEY_PUBLIC_CHECK 190 -# define EVP_F_EVP_PKEY_SET1_ENGINE 187 -# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 206 -# define EVP_F_EVP_PKEY_SIGN 140 -# define EVP_F_EVP_PKEY_SIGN_INIT 141 -# define EVP_F_EVP_PKEY_VERIFY 142 -# define EVP_F_EVP_PKEY_VERIFY_INIT 143 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 -# define EVP_F_EVP_SIGNFINAL 107 -# define EVP_F_EVP_VERIFYFINAL 108 -# define EVP_F_INT_CTX_NEW 157 -# define EVP_F_OK_NEW 200 -# define EVP_F_PKCS5_PBE_KEYIVGEN 117 -# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 -# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 -# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 180 -# define EVP_F_PKEY_SET_TYPE 158 -# define EVP_F_RC2_MAGIC_TO_METH 109 -# define EVP_F_RC5_CTRL 125 -# define EVP_F_R_32_12_16_INIT_KEY 242 -# define EVP_F_S390X_AES_GCM_CTRL 201 -# define EVP_F_UPDATE 173 /* * EVP reason codes. */ # define EVP_R_AES_KEY_SETUP_FAILED 143 # define EVP_R_ARIA_KEY_SETUP_FAILED 176 +# define EVP_R_BAD_ALGORITHM_NAME 200 # define EVP_R_BAD_DECRYPT 100 # define EVP_R_BAD_KEY_LENGTH 195 # define EVP_R_BUFFER_TOO_SMALL 155 +# define EVP_R_CACHE_CONSTANTS_FAILED 225 # define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 +# define EVP_R_CANNOT_GET_PARAMETERS 197 +# define EVP_R_CANNOT_SET_PARAMETERS 198 +# define EVP_R_CIPHER_NOT_GCM_MODE 184 # define EVP_R_CIPHER_PARAMETER_ERROR 122 # define EVP_R_COMMAND_NOT_SUPPORTED 147 +# define EVP_R_CONFLICTING_ALGORITHM_NAME 201 # define EVP_R_COPY_ERROR 173 # define EVP_R_CTRL_NOT_IMPLEMENTED 132 # define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 # define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 # define EVP_R_DECODE_ERROR 114 +# define EVP_R_DEFAULT_QUERY_PARSE_ERROR 210 # define EVP_R_DIFFERENT_KEY_TYPES 101 # define EVP_R_DIFFERENT_PARAMETERS 153 # define EVP_R_ERROR_LOADING_SECTION 165 -# define EVP_R_ERROR_SETTING_FIPS_MODE 166 # define EVP_R_EXPECTING_AN_HMAC_KEY 174 # define EVP_R_EXPECTING_AN_RSA_KEY 127 # define EVP_R_EXPECTING_A_DH_KEY 128 # define EVP_R_EXPECTING_A_DSA_KEY 129 +# define EVP_R_EXPECTING_A_ECX_KEY 219 # define EVP_R_EXPECTING_A_EC_KEY 142 # define EVP_R_EXPECTING_A_POLY1305_KEY 164 # define EVP_R_EXPECTING_A_SIPHASH_KEY 175 -# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 +# define EVP_R_FINAL_ERROR 188 +# define EVP_R_GENERATE_ERROR 214 # define EVP_R_GET_RAW_KEY_FAILED 182 # define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 +# define EVP_R_INACCESSIBLE_DOMAIN_PARAMETERS 204 +# define EVP_R_INACCESSIBLE_KEY 203 # define EVP_R_INITIALIZATION_ERROR 134 # define EVP_R_INPUT_NOT_INITIALIZED 111 +# define EVP_R_INVALID_CUSTOM_LENGTH 185 # define EVP_R_INVALID_DIGEST 152 -# define EVP_R_INVALID_FIPS_MODE 168 # define EVP_R_INVALID_IV_LENGTH 194 # define EVP_R_INVALID_KEY 163 # define EVP_R_INVALID_KEY_LENGTH 130 +# define EVP_R_INVALID_LENGTH 221 +# define EVP_R_INVALID_NULL_ALGORITHM 218 # define EVP_R_INVALID_OPERATION 148 -# define EVP_R_KEYGEN_FAILURE 120 +# define EVP_R_INVALID_PROVIDER_FUNCTIONS 193 +# define EVP_R_INVALID_SALT_LENGTH 186 +# define EVP_R_INVALID_SECRET_LENGTH 223 +# define EVP_R_INVALID_SEED_LENGTH 220 +# define EVP_R_INVALID_VALUE 222 +# define EVP_R_KEYMGMT_EXPORT_FAILURE 205 # define EVP_R_KEY_SETUP_FAILED 180 +# define EVP_R_LOCKING_NOT_SUPPORTED 213 # define EVP_R_MEMORY_LIMIT_EXCEEDED 172 # define EVP_R_MESSAGE_DIGEST_IS_NULL 159 # define EVP_R_METHOD_NOT_SUPPORTED 144 # define EVP_R_MISSING_PARAMETERS 103 +# define EVP_R_NOT_ABLE_TO_COPY_CTX 190 # define EVP_R_NOT_XOF_OR_INVALID_LENGTH 178 # define EVP_R_NO_CIPHER_SET 131 # define EVP_R_NO_DEFAULT_DIGEST 158 # define EVP_R_NO_DIGEST_SET 139 +# define EVP_R_NO_IMPORT_FUNCTION 206 +# define EVP_R_NO_KEYMGMT_AVAILABLE 199 +# define EVP_R_NO_KEYMGMT_PRESENT 196 # define EVP_R_NO_KEY_SET 154 # define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_NULL_MAC_PKEY_CTX 208 # define EVP_R_ONLY_ONESHOT_SUPPORTED 177 +# define EVP_R_OPERATION_NOT_INITIALIZED 151 # define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 -# define EVP_R_OPERATON_NOT_INITIALIZED 151 -# define EVP_R_OUTPUT_WOULD_OVERFLOW 184 +# define EVP_R_OUTPUT_WOULD_OVERFLOW 202 +# define EVP_R_PARAMETER_TOO_LARGE 187 # define EVP_R_PARTIALLY_OVERLAPPING 162 # define EVP_R_PBKDF2_ERROR 181 # define EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 179 # define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 # define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 # define EVP_R_PUBLIC_KEY_NOT_RSA 106 +# define EVP_R_SETTING_XOF_FAILED 227 +# define EVP_R_SET_DEFAULT_PROPERTY_FAILURE 209 +# define EVP_R_TOO_MANY_RECORDS 183 +# define EVP_R_UNABLE_TO_ENABLE_LOCKING 212 +# define EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE 215 +# define EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH 216 +# define EVP_R_UNABLE_TO_LOCK_CONTEXT 211 +# define EVP_R_UNABLE_TO_SET_CALLBACKS 217 # define EVP_R_UNKNOWN_CIPHER 160 # define EVP_R_UNKNOWN_DIGEST 161 +# define EVP_R_UNKNOWN_KEY_TYPE 207 # define EVP_R_UNKNOWN_OPTION 169 # define EVP_R_UNKNOWN_PBE_ALGORITHM 121 # define EVP_R_UNSUPPORTED_ALGORITHM 156 @@ -193,12 +120,15 @@ int ERR_load_EVP_strings(void); # define EVP_R_UNSUPPORTED_KEYLENGTH 123 # define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 # define EVP_R_UNSUPPORTED_KEY_SIZE 108 +# define EVP_R_UNSUPPORTED_KEY_TYPE 224 # define EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS 135 # define EVP_R_UNSUPPORTED_PRF 125 # define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 # define EVP_R_UNSUPPORTED_SALT_TYPE 126 +# define EVP_R_UPDATE_ERROR 189 # define EVP_R_WRAP_MODE_NOT_ALLOWED 170 # define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 -# define EVP_R_XTS_DUPLICATED_KEYS 183 +# define EVP_R_XTS_DATA_UNIT_IS_TOO_LARGE 191 +# define EVP_R_XTS_DUPLICATED_KEYS 192 #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fips_names.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fips_names.h new file mode 100644 index 00000000..5c77f6d6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fips_names.h @@ -0,0 +1,77 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPS_NAMES_H +# define OPENSSL_FIPS_NAMES_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Parameter names that the FIPS Provider defines + */ + +/* + * The calculated MAC of the module file (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_MODULE_MAC "module-mac" +/* + * A version number for the fips install process (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_VERSION "install-version" +/* + * The calculated MAC of the install status indicator (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_MAC "install-mac" +/* + * The install status indicator (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_STATUS "install-status" + +/* + * A boolean that determines if the FIPS conditional test errors result in + * the module entering an error state. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_CONDITIONAL_ERRORS "conditional-errors" + +/* + * A boolean that determines if the runtime FIPS security checks are performed. + * This is enabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_SECURITY_CHECKS "security-checks" + +/* + * A boolean that determines if the runtime FIPS check for TLS1_PRF EMS is performed. + * This is disabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" + +/* + * A boolean that determines if truncated digests can be used with Hash and HMAC + * DRBGs. FIPS 140-3 IG D.R disallows such use for efficiency rather than + * security reasons. + * This is disabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_FIPS_NAMES_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h new file mode 100644 index 00000000..42ba014b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h @@ -0,0 +1,36 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/fipskey.h.in + * + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPSKEY_H +# define OPENSSL_FIPSKEY_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * The FIPS validation HMAC key, usable as an array initializer. + */ +#define FIPS_KEY_ELEMENTS \ + 0xf4, 0x55, 0x66, 0x50, 0xac, 0x31, 0xd3, 0x54, 0x61, 0x61, 0x0b, 0xac, 0x4e, 0xd8, 0x1b, 0x1a, 0x18, 0x1b, 0x2d, 0x8a, 0x43, 0xea, 0x28, 0x54, 0xcb, 0xae, 0x22, 0xca, 0x74, 0x56, 0x08, 0x13 + +/* + * The FIPS validation key, as a string. + */ +#define FIPS_KEY_STRING "f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h.in new file mode 100644 index 00000000..56b947e8 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h.in @@ -0,0 +1,35 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPSKEY_H +# define OPENSSL_FIPSKEY_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * The FIPS validation HMAC key, usable as an array initializer. + */ +#define FIPS_KEY_ELEMENTS \ + {- join(', ', map { "0x$_" } unpack("(A2)*", $config{FIPSKEY})) -} + +/* + * The FIPS validation key, as a string. + */ +#define FIPS_KEY_STRING "{- $config{FIPSKEY} -}" + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hmac.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hmac.h index 458efc1d..f9e1bff3 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hmac.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hmac.h @@ -1,51 +1,62 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_HMAC_H -# define HEADER_HMAC_H +#ifndef OPENSSL_HMAC_H +# define OPENSSL_HMAC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_HMAC_H +# endif # include # include -# if OPENSSL_API_COMPAT < 0x10200000L -# define HMAC_MAX_MD_CBLOCK 128 /* Deprecated */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HMAC_MAX_MD_CBLOCK 200 /* Deprecated */ # endif -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -size_t HMAC_size(const HMAC_CTX *e); -HMAC_CTX *HMAC_CTX_new(void); -int HMAC_CTX_reset(HMAC_CTX *ctx); -void HMAC_CTX_free(HMAC_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 size_t HMAC_size(const HMAC_CTX *e); +OSSL_DEPRECATEDIN_3_0 HMAC_CTX *HMAC_CTX_new(void); +OSSL_DEPRECATEDIN_3_0 int HMAC_CTX_reset(HMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void HMAC_CTX_free(HMAC_CTX *ctx); +# endif +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur int HMAC_Init(HMAC_CTX *ctx, + const void *key, int len, + const EVP_MD *md); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +OSSL_DEPRECATEDIN_3_0 int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, + unsigned int *len); +OSSL_DEPRECATEDIN_3_0 __owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); +OSSL_DEPRECATEDIN_3_0 void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); +# endif -DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md)) - -/*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md, ENGINE *impl); -/*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, - size_t len); -/*__owur*/ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, - unsigned int *len); unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, - const unsigned char *d, size_t n, unsigned char *md, - unsigned int *md_len); -__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); + const unsigned char *data, size_t data_len, + unsigned char *md, unsigned int *md_len); -void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); -const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); - -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/http.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/http.h new file mode 100644 index 00000000..f7ab2142 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/http.h @@ -0,0 +1,109 @@ +/* + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Siemens AG 2018-2020 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_HTTP_H +# define OPENSSL_HTTP_H +# pragma once + +# include + +# include +# include +# include + + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_HTTP_NAME "http" +# define OSSL_HTTPS_NAME "https" +# define OSSL_HTTP_PREFIX OSSL_HTTP_NAME"://" +# define OSSL_HTTPS_PREFIX OSSL_HTTPS_NAME"://" +# define OSSL_HTTP_PORT "80" +# define OSSL_HTTPS_PORT "443" +# define OPENSSL_NO_PROXY "NO_PROXY" +# define OPENSSL_HTTP_PROXY "HTTP_PROXY" +# define OPENSSL_HTTPS_PROXY "HTTPS_PROXY" + +#define OSSL_HTTP_DEFAULT_MAX_LINE_LEN (4 * 1024) +#define OSSL_HTTP_DEFAULT_MAX_RESP_LEN (100 * 1024) + +/* Low-level HTTP API */ +OSSL_HTTP_REQ_CTX *OSSL_HTTP_REQ_CTX_new(BIO *wbio, BIO *rbio, int buf_size); +void OSSL_HTTP_REQ_CTX_free(OSSL_HTTP_REQ_CTX *rctx); +int OSSL_HTTP_REQ_CTX_set_request_line(OSSL_HTTP_REQ_CTX *rctx, int method_POST, + const char *server, const char *port, + const char *path); +int OSSL_HTTP_REQ_CTX_add1_header(OSSL_HTTP_REQ_CTX *rctx, + const char *name, const char *value); +int OSSL_HTTP_REQ_CTX_set_expected(OSSL_HTTP_REQ_CTX *rctx, + const char *content_type, int asn1, + int timeout, int keep_alive); +int OSSL_HTTP_REQ_CTX_set1_req(OSSL_HTTP_REQ_CTX *rctx, const char *content_type, + const ASN1_ITEM *it, const ASN1_VALUE *req); +int OSSL_HTTP_REQ_CTX_nbio(OSSL_HTTP_REQ_CTX *rctx); +int OSSL_HTTP_REQ_CTX_nbio_d2i(OSSL_HTTP_REQ_CTX *rctx, + ASN1_VALUE **pval, const ASN1_ITEM *it); +BIO *OSSL_HTTP_REQ_CTX_exchange(OSSL_HTTP_REQ_CTX *rctx); +BIO *OSSL_HTTP_REQ_CTX_get0_mem_bio(const OSSL_HTTP_REQ_CTX *rctx); +size_t OSSL_HTTP_REQ_CTX_get_resp_len(const OSSL_HTTP_REQ_CTX *rctx); +void OSSL_HTTP_REQ_CTX_set_max_response_length(OSSL_HTTP_REQ_CTX *rctx, + unsigned long len); +int OSSL_HTTP_is_alive(const OSSL_HTTP_REQ_CTX *rctx); + +/* High-level HTTP API */ +typedef BIO *(*OSSL_HTTP_bio_cb_t)(BIO *bio, void *arg, int connect, int detail); +OSSL_HTTP_REQ_CTX *OSSL_HTTP_open(const char *server, const char *port, + const char *proxy, const char *no_proxy, + int use_ssl, BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, int overall_timeout); +int OSSL_HTTP_proxy_connect(BIO *bio, const char *server, const char *port, + const char *proxyuser, const char *proxypass, + int timeout, BIO *bio_err, const char *prog); +int OSSL_HTTP_set1_request(OSSL_HTTP_REQ_CTX *rctx, const char *path, + const STACK_OF(CONF_VALUE) *headers, + const char *content_type, BIO *req, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout, int keep_alive); +BIO *OSSL_HTTP_exchange(OSSL_HTTP_REQ_CTX *rctx, char **redirection_url); +BIO *OSSL_HTTP_get(const char *url, const char *proxy, const char *no_proxy, + BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, const STACK_OF(CONF_VALUE) *headers, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout); +BIO *OSSL_HTTP_transfer(OSSL_HTTP_REQ_CTX **prctx, + const char *server, const char *port, + const char *path, int use_ssl, + const char *proxy, const char *no_proxy, + BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, const STACK_OF(CONF_VALUE) *headers, + const char *content_type, BIO *req, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout, int keep_alive); +int OSSL_HTTP_close(OSSL_HTTP_REQ_CTX *rctx, int ok); + +/* Auxiliary functions */ +int OSSL_parse_url(const char *url, char **pscheme, char **puser, char **phost, + char **pport, int *pport_num, + char **ppath, char **pquery, char **pfrag); +int OSSL_HTTP_parse_url(const char *url, int *pssl, char **puser, char **phost, + char **pport, int *pport_num, + char **ppath, char **pquery, char **pfrag); +const char *OSSL_HTTP_adapt_proxy(const char *proxy, const char *no_proxy, + const char *server, int use_ssl); + +# ifdef __cplusplus +} +# endif +#endif /* !defined(OPENSSL_HTTP_H) */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/httperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/httperr.h new file mode 100644 index 00000000..ee089592 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/httperr.h @@ -0,0 +1,55 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_HTTPERR_H +# define OPENSSL_HTTPERR_H +# pragma once + +# include +# include +# include + + + +/* + * HTTP reason codes. + */ +# define HTTP_R_ASN1_LEN_EXCEEDS_MAX_RESP_LEN 108 +# define HTTP_R_CONNECT_FAILURE 100 +# define HTTP_R_ERROR_PARSING_ASN1_LENGTH 109 +# define HTTP_R_ERROR_PARSING_CONTENT_LENGTH 119 +# define HTTP_R_ERROR_PARSING_URL 101 +# define HTTP_R_ERROR_RECEIVING 103 +# define HTTP_R_ERROR_SENDING 102 +# define HTTP_R_FAILED_READING_DATA 128 +# define HTTP_R_HEADER_PARSE_ERROR 126 +# define HTTP_R_INCONSISTENT_CONTENT_LENGTH 120 +# define HTTP_R_INVALID_PORT_NUMBER 123 +# define HTTP_R_INVALID_URL_PATH 125 +# define HTTP_R_INVALID_URL_SCHEME 124 +# define HTTP_R_MAX_RESP_LEN_EXCEEDED 117 +# define HTTP_R_MISSING_ASN1_ENCODING 110 +# define HTTP_R_MISSING_CONTENT_TYPE 121 +# define HTTP_R_MISSING_REDIRECT_LOCATION 111 +# define HTTP_R_RECEIVED_ERROR 105 +# define HTTP_R_RECEIVED_WRONG_HTTP_VERSION 106 +# define HTTP_R_REDIRECTION_FROM_HTTPS_TO_HTTP 112 +# define HTTP_R_REDIRECTION_NOT_ENABLED 116 +# define HTTP_R_RESPONSE_LINE_TOO_LONG 113 +# define HTTP_R_RESPONSE_PARSE_ERROR 104 +# define HTTP_R_RETRY_TIMEOUT 129 +# define HTTP_R_SERVER_CANCELED_CONNECTION 127 +# define HTTP_R_SOCK_NOT_SUPPORTED 122 +# define HTTP_R_STATUS_CODE_UNSUPPORTED 114 +# define HTTP_R_TLS_NOT_ENABLED 107 +# define HTTP_R_TOO_MANY_REDIRECTIONS 115 +# define HTTP_R_UNEXPECTED_CONTENT_TYPE 118 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/idea.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/idea.h index 4334f3ea..1f9bb3b3 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/idea.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/idea.h @@ -1,64 +1,82 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_IDEA_H -# define HEADER_IDEA_H +#ifndef OPENSSL_IDEA_H +# define OPENSSL_IDEA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_IDEA_H +# endif # include # ifndef OPENSSL_NO_IDEA -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define IDEA_BLOCK 8 +# define IDEA_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int IDEA_INT; -# define IDEA_ENCRYPT 1 -# define IDEA_DECRYPT 0 - -# define IDEA_BLOCK 8 -# define IDEA_KEY_LENGTH 16 +# define IDEA_ENCRYPT 1 +# define IDEA_DECRYPT 0 typedef struct idea_key_st { IDEA_INT data[9][6]; } IDEA_KEY_SCHEDULE; +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *IDEA_options(void); +OSSL_DEPRECATEDIN_3_0 void IDEA_ecb_encrypt(const unsigned char *in, + unsigned char *out, + IDEA_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void IDEA_set_encrypt_key(const unsigned char *key, + IDEA_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, + IDEA_KEY_SCHEDULE *dk); +OSSL_DEPRECATEDIN_3_0 void IDEA_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int enc); +OSSL_DEPRECATEDIN_3_0 void IDEA_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void IDEA_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int *num); +OSSL_DEPRECATEDIN_3_0 void IDEA_encrypt(unsigned long *in, + IDEA_KEY_SCHEDULE *ks); +#endif -const char *IDEA_options(void); -void IDEA_ecb_encrypt(const unsigned char *in, unsigned char *out, - IDEA_KEY_SCHEDULE *ks); -void IDEA_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); -void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); -void IDEA_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int enc); -void IDEA_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num, int enc); -void IDEA_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num); -void IDEA_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define idea_options IDEA_options +# define idea_ecb_encrypt IDEA_ecb_encrypt +# define idea_set_encrypt_key IDEA_set_encrypt_key +# define idea_set_decrypt_key IDEA_set_decrypt_key +# define idea_cbc_encrypt IDEA_cbc_encrypt +# define idea_cfb64_encrypt IDEA_cfb64_encrypt +# define idea_ofb64_encrypt IDEA_ofb64_encrypt +# define idea_encrypt IDEA_encrypt +# endif -# if OPENSSL_API_COMPAT < 0x10100000L -# define idea_options IDEA_options -# define idea_ecb_encrypt IDEA_ecb_encrypt -# define idea_set_encrypt_key IDEA_set_encrypt_key -# define idea_set_decrypt_key IDEA_set_decrypt_key -# define idea_cbc_encrypt IDEA_cbc_encrypt -# define idea_cfb64_encrypt IDEA_cfb64_encrypt -# define idea_ofb64_encrypt IDEA_ofb64_encrypt -# define idea_encrypt IDEA_encrypt -# endif - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdf.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdf.h index 5abd4c37..0983230a 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdf.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdf.h @@ -1,19 +1,76 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_KDF_H -# define HEADER_KDF_H +#ifndef OPENSSL_KDF_H +# define OPENSSL_KDF_H +# pragma once -# include -#ifdef __cplusplus +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_KDF_H +# endif + +# include +# include +# include +# include + +# ifdef __cplusplus extern "C" { -#endif +# endif + +int EVP_KDF_up_ref(EVP_KDF *kdf); +void EVP_KDF_free(EVP_KDF *kdf); +EVP_KDF *EVP_KDF_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); + +EVP_KDF_CTX *EVP_KDF_CTX_new(EVP_KDF *kdf); +void EVP_KDF_CTX_free(EVP_KDF_CTX *ctx); +EVP_KDF_CTX *EVP_KDF_CTX_dup(const EVP_KDF_CTX *src); +const char *EVP_KDF_get0_description(const EVP_KDF *kdf); +int EVP_KDF_is_a(const EVP_KDF *kdf, const char *name); +const char *EVP_KDF_get0_name(const EVP_KDF *kdf); +const OSSL_PROVIDER *EVP_KDF_get0_provider(const EVP_KDF *kdf); +const EVP_KDF *EVP_KDF_CTX_kdf(EVP_KDF_CTX *ctx); + +void EVP_KDF_CTX_reset(EVP_KDF_CTX *ctx); +size_t EVP_KDF_CTX_get_kdf_size(EVP_KDF_CTX *ctx); +int EVP_KDF_derive(EVP_KDF_CTX *ctx, unsigned char *key, size_t keylen, + const OSSL_PARAM params[]); +int EVP_KDF_get_params(EVP_KDF *kdf, OSSL_PARAM params[]); +int EVP_KDF_CTX_get_params(EVP_KDF_CTX *ctx, OSSL_PARAM params[]); +int EVP_KDF_CTX_set_params(EVP_KDF_CTX *ctx, const OSSL_PARAM params[]); +const OSSL_PARAM *EVP_KDF_gettable_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_gettable_ctx_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_settable_ctx_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_CTX_gettable_params(EVP_KDF_CTX *ctx); +const OSSL_PARAM *EVP_KDF_CTX_settable_params(EVP_KDF_CTX *ctx); + +void EVP_KDF_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KDF *kdf, void *arg), + void *arg); +int EVP_KDF_names_do_all(const EVP_KDF *kdf, + void (*fn)(const char *name, void *data), + void *data); + +# define EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND 0 +# define EVP_KDF_HKDF_MODE_EXTRACT_ONLY 1 +# define EVP_KDF_HKDF_MODE_EXPAND_ONLY 2 + +#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_CLI_TO_SRV 65 +#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_SRV_TO_CLI 66 +#define EVP_KDF_SSHKDF_TYPE_ENCRYPTION_KEY_CLI_TO_SRV 67 +#define EVP_KDF_SSHKDF_TYPE_ENCRYPTION_KEY_SRV_TO_CLI 68 +#define EVP_KDF_SSHKDF_TYPE_INTEGRITY_KEY_CLI_TO_SRV 69 +#define EVP_KDF_SSHKDF_TYPE_INTEGRITY_KEY_SRV_TO_CLI 70 + +/**** The legacy PKEY-based KDF API follows. ****/ # define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) # define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) @@ -30,68 +87,52 @@ extern "C" { # define EVP_PKEY_CTRL_SCRYPT_P (EVP_PKEY_ALG_CTRL + 12) # define EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES (EVP_PKEY_ALG_CTRL + 13) -# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND 0 -# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 1 -# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY 2 +# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND \ + EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND +# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY \ + EVP_KDF_HKDF_MODE_EXTRACT_ONLY +# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY \ + EVP_KDF_HKDF_MODE_EXPAND_ONLY -# define EVP_PKEY_CTX_set_tls1_prf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_MD, 0, (void *)(md)) +int EVP_PKEY_CTX_set_tls1_prf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, sec, seclen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)(sec)) +int EVP_PKEY_CTX_set1_tls1_prf_secret(EVP_PKEY_CTX *pctx, + const unsigned char *sec, int seclen); -# define EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed, seedlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)(seed)) +int EVP_PKEY_CTX_add1_tls1_prf_seed(EVP_PKEY_CTX *pctx, + const unsigned char *seed, int seedlen); -# define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MD, 0, (void *)(md)) +int EVP_PKEY_CTX_set_hkdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)(salt)) +int EVP_PKEY_CTX_set1_hkdf_salt(EVP_PKEY_CTX *ctx, + const unsigned char *salt, int saltlen); -# define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)(key)) +int EVP_PKEY_CTX_set1_hkdf_key(EVP_PKEY_CTX *ctx, + const unsigned char *key, int keylen); -# define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)(info)) +int EVP_PKEY_CTX_add1_hkdf_info(EVP_PKEY_CTX *ctx, + const unsigned char *info, int infolen); -# define EVP_PKEY_CTX_hkdf_mode(pctx, mode) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MODE, mode, NULL) +int EVP_PKEY_CTX_set_hkdf_mode(EVP_PKEY_CTX *ctx, int mode); +# define EVP_PKEY_CTX_hkdf_mode EVP_PKEY_CTX_set_hkdf_mode -# define EVP_PKEY_CTX_set1_pbe_pass(pctx, pass, passlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_PASS, passlen, (void *)(pass)) +int EVP_PKEY_CTX_set1_pbe_pass(EVP_PKEY_CTX *ctx, const char *pass, + int passlen); -# define EVP_PKEY_CTX_set1_scrypt_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_SALT, saltlen, (void *)(salt)) +int EVP_PKEY_CTX_set1_scrypt_salt(EVP_PKEY_CTX *ctx, + const unsigned char *salt, int saltlen); -# define EVP_PKEY_CTX_set_scrypt_N(pctx, n) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_N, n) +int EVP_PKEY_CTX_set_scrypt_N(EVP_PKEY_CTX *ctx, uint64_t n); -# define EVP_PKEY_CTX_set_scrypt_r(pctx, r) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_R, r) +int EVP_PKEY_CTX_set_scrypt_r(EVP_PKEY_CTX *ctx, uint64_t r); -# define EVP_PKEY_CTX_set_scrypt_p(pctx, p) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_P, p) +int EVP_PKEY_CTX_set_scrypt_p(EVP_PKEY_CTX *ctx, uint64_t p); -# define EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx, maxmem_bytes) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES, maxmem_bytes) +int EVP_PKEY_CTX_set_scrypt_maxmem_bytes(EVP_PKEY_CTX *ctx, + uint64_t maxmem_bytes); -# ifdef __cplusplus +# ifdef __cplusplus } # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdferr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdferr.h index 3f51bd02..963d766d 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdferr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdferr.h @@ -1,55 +1,16 @@ /* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_KDFERR_H -# define HEADER_KDFERR_H +#ifndef OPENSSL_KDFERR_H +# define OPENSSL_KDFERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +#include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_KDF_strings(void); - -/* - * KDF function codes. - */ -# define KDF_F_PKEY_HKDF_CTRL_STR 103 -# define KDF_F_PKEY_HKDF_DERIVE 102 -# define KDF_F_PKEY_HKDF_INIT 108 -# define KDF_F_PKEY_SCRYPT_CTRL_STR 104 -# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 105 -# define KDF_F_PKEY_SCRYPT_DERIVE 109 -# define KDF_F_PKEY_SCRYPT_INIT 106 -# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 107 -# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 -# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 -# define KDF_F_PKEY_TLS1_PRF_INIT 110 -# define KDF_F_TLS1_PRF_ALG 111 - -/* - * KDF reason codes. - */ -# define KDF_R_INVALID_DIGEST 100 -# define KDF_R_MISSING_ITERATION_COUNT 109 -# define KDF_R_MISSING_KEY 104 -# define KDF_R_MISSING_MESSAGE_DIGEST 105 -# define KDF_R_MISSING_PARAMETER 101 -# define KDF_R_MISSING_PASS 110 -# define KDF_R_MISSING_SALT 111 -# define KDF_R_MISSING_SECRET 107 -# define KDF_R_MISSING_SEED 106 -# define KDF_R_UNKNOWN_PARAMETER_TYPE 103 -# define KDF_R_VALUE_ERROR 108 -# define KDF_R_VALUE_MISSING 102 - -#endif +#endif /* !defined(OPENSSL_KDFERR_H) */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h index 2e42d727..f4155df1 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h @@ -1,21 +1,32 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ + + /* * Header for dynamic hash table routines Author - Eric Young */ -#ifndef HEADER_LHASH_H -# define HEADER_LHASH_H +#ifndef OPENSSL_LHASH_H +# define OPENSSL_LHASH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_LHASH_H +# endif # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -72,6 +83,7 @@ typedef struct lhash_st OPENSSL_LHASH; int OPENSSL_LH_error(OPENSSL_LHASH *lh); OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void OPENSSL_LH_flush(OPENSSL_LHASH *lh); void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); @@ -83,15 +95,19 @@ unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); # ifndef OPENSSL_NO_STDIO -void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); # endif -void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define _LHASH OPENSSL_LHASH # define LHASH_NODE OPENSSL_LH_NODE # define lh_error OPENSSL_LH_error @@ -118,63 +134,145 @@ void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); # define LHASH_OF(type) struct lhash_st_##type -# define DEFINE_LHASH_OF(type) \ - LHASH_OF(type) { union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; }; \ - static ossl_unused ossl_inline LHASH_OF(type) *lh_##type##_new(unsigned long (*hfn)(const type *), \ - int (*cfn)(const type *, const type *)) \ +/* Helper macro for internal use */ +# define DEFINE_LHASH_OF_INTERNAL(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + typedef int (*lh_##type##_compfunc)(const type *a, const type *b); \ + typedef unsigned long (*lh_##type##_hashfunc)(const type *a); \ + typedef void (*lh_##type##_doallfunc)(type *a); \ + static ossl_unused ossl_inline type *\ + ossl_check_##type##_lh_plain_type(type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const type * \ + ossl_check_const_##type##_lh_plain_type(const type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_LHASH * \ + ossl_check_const_##type##_lh_type(const LHASH_OF(type) *lh) \ + { \ + return (const OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LHASH * \ + ossl_check_##type##_lh_type(LHASH_OF(type) *lh) \ + { \ + return (OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_COMPFUNC \ + ossl_check_##type##_lh_compfunc_type(lh_##type##_compfunc cmp) \ + { \ + return (OPENSSL_LH_COMPFUNC)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_HASHFUNC \ + ossl_check_##type##_lh_hashfunc_type(lh_##type##_hashfunc hfn) \ + { \ + return (OPENSSL_LH_HASHFUNC)hfn; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_DOALL_FUNC \ + ossl_check_##type##_lh_doallfunc_type(lh_##type##_doallfunc dfn) \ + { \ + return (OPENSSL_LH_DOALL_FUNC)dfn; \ + } \ + LHASH_OF(type) + +# ifndef OPENSSL_NO_DEPRECATED_3_1 +# define DEFINE_LHASH_OF_DEPRECATED(type) \ + static ossl_unused ossl_inline void \ + lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } +# else +# define DEFINE_LHASH_OF_DEPRECATED(type) +# endif + +# define DEFINE_LHASH_OF_EX(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + static ossl_unused ossl_inline LHASH_OF(type) * \ + lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ { \ return (LHASH_OF(type) *) \ OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ } \ - static ossl_unused ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline void \ + lh_##type##_free(LHASH_OF(type) *lh) \ { \ OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline type *lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + static ossl_unused ossl_inline void \ + lh_##type##_flush(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_flush((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ { \ return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline type *lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + static ossl_unused ossl_inline type * \ + lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ { \ return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline type *lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + static ossl_unused ossl_inline type * \ + lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ { \ return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline int lh_##type##_error(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline int \ + lh_##type##_error(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline unsigned long lh_##type##_num_items(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_num_items(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline void lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline void lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline void lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline unsigned long lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_get_down_load(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline void lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + static ossl_unused ossl_inline void \ + lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ { \ OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ } \ - static ossl_unused ossl_inline void lh_##type##_doall(LHASH_OF(type) *lh, \ - void (*doall)(type *)) \ + static ossl_unused ossl_inline void \ + lh_##type##_doall(LHASH_OF(type) *lh, void (*doall)(type *)) \ { \ OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_arg(LHASH_OF(type) *lh, \ + void (*doallarg)(type *, void *), void *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)doallarg, arg); \ + } \ + LHASH_OF(type) + +# define DEFINE_LHASH_OF(type) \ + DEFINE_LHASH_OF_EX(type); \ + DEFINE_LHASH_OF_DEPRECATED(type) \ LHASH_OF(type) #define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ @@ -189,50 +287,42 @@ void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); void (*fn)(cbargtype *, argtype *), \ argtype *arg) \ { \ - OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ } \ LHASH_OF(type) -DEFINE_LHASH_OF(OPENSSL_STRING); -# ifdef _MSC_VER -/* - * push and pop this warning: - * warning C4090: 'function': different 'const' qualifiers - */ -# pragma warning (push) -# pragma warning (disable: 4090) -# endif +DEFINE_LHASH_OF_INTERNAL(OPENSSL_STRING); +#define lh_OPENSSL_STRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_STRING) *)OPENSSL_LH_new(ossl_check_OPENSSL_STRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_STRING_lh_compfunc_type(cmp))) +#define lh_OPENSSL_STRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_insert(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_delete(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_retrieve(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_STRING_lh_type(lh), dl) +#define lh_OPENSSL_STRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_doallfunc_type(dfn)) +DEFINE_LHASH_OF_INTERNAL(OPENSSL_CSTRING); +#define lh_OPENSSL_CSTRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_CSTRING) *)OPENSSL_LH_new(ossl_check_OPENSSL_CSTRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_CSTRING_lh_compfunc_type(cmp))) +#define lh_OPENSSL_CSTRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_insert(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_delete(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_retrieve(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh), dl) +#define lh_OPENSSL_CSTRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_doallfunc_type(dfn)) -DEFINE_LHASH_OF(OPENSSL_CSTRING); - -# ifdef _MSC_VER -# pragma warning (pop) -# endif - -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_LH_new -# pragma weak OPENSSL_LH_free -# pragma weak OPENSSL_LH_insert -# pragma weak OPENSSL_LH_delete -# pragma weak OPENSSL_LH_retrieve -# pragma weak OPENSSL_LH_error -# pragma weak OPENSSL_LH_num_items -# pragma weak OPENSSL_LH_node_stats_bio -# pragma weak OPENSSL_LH_node_usage_stats_bio -# pragma weak OPENSSL_LH_stats_bio -# pragma weak OPENSSL_LH_get_down_load -# pragma weak OPENSSL_LH_set_down_load -# pragma weak OPENSSL_LH_doall -# pragma weak OPENSSL_LH_doall_arg -# endif /* __SUNPRO_C */ #ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h.in new file mode 100644 index 00000000..dc344a54 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h.in @@ -0,0 +1,306 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_lhash_macros); +-} + +/* + * Header for dynamic hash table routines Author - Eric Young + */ + +#ifndef OPENSSL_LHASH_H +# define OPENSSL_LHASH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_LHASH_H +# endif + +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st OPENSSL_LH_NODE; +typedef int (*OPENSSL_LH_COMPFUNC) (const void *, const void *); +typedef unsigned long (*OPENSSL_LH_HASHFUNC) (const void *); +typedef void (*OPENSSL_LH_DOALL_FUNC) (void *); +typedef void (*OPENSSL_LH_DOALL_FUNCARG) (void *, void *); +typedef struct lhash_st OPENSSL_LHASH; + +/* + * Macros for declaring and implementing type-safe wrappers for LHASH + * callbacks. This way, callbacks can be provided to LHASH structures without + * function pointer casting and the macro-defined callbacks provide + * per-variable casting before deferring to the underlying type-specific + * callbacks. NB: It is possible to place a "static" in front of both the + * DECLARE and IMPLEMENT macros if the functions are strictly internal. + */ + +/* First: "hash" functions */ +# define DECLARE_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *); +# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *arg) { \ + const o_type *a = arg; \ + return name##_hash(a); } +# define LHASH_HASH_FN(name) name##_LHASH_HASH + +/* Second: "compare" functions */ +# define DECLARE_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *, const void *); +# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ + const o_type *a = arg1; \ + const o_type *b = arg2; \ + return name##_cmp(a,b); } +# define LHASH_COMP_FN(name) name##_LHASH_COMP + +/* Fourth: "doall_arg" functions */ +# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *, void *); +# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ + o_type *a = arg1; \ + a_type *b = arg2; \ + name##_doall_arg(a, b); } +# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG + + +# define LH_LOAD_MULT 256 + +int OPENSSL_LH_error(OPENSSL_LHASH *lh); +OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); +void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void OPENSSL_LH_flush(OPENSSL_LHASH *lh); +void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); +void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); +void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); +void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func); +void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg); +unsigned long OPENSSL_LH_strhash(const char *c); +unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh); +unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); +void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); + +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define _LHASH OPENSSL_LHASH +# define LHASH_NODE OPENSSL_LH_NODE +# define lh_error OPENSSL_LH_error +# define lh_new OPENSSL_LH_new +# define lh_free OPENSSL_LH_free +# define lh_insert OPENSSL_LH_insert +# define lh_delete OPENSSL_LH_delete +# define lh_retrieve OPENSSL_LH_retrieve +# define lh_doall OPENSSL_LH_doall +# define lh_doall_arg OPENSSL_LH_doall_arg +# define lh_strhash OPENSSL_LH_strhash +# define lh_num_items OPENSSL_LH_num_items +# ifndef OPENSSL_NO_STDIO +# define lh_stats OPENSSL_LH_stats +# define lh_node_stats OPENSSL_LH_node_stats +# define lh_node_usage_stats OPENSSL_LH_node_usage_stats +# endif +# define lh_stats_bio OPENSSL_LH_stats_bio +# define lh_node_stats_bio OPENSSL_LH_node_stats_bio +# define lh_node_usage_stats_bio OPENSSL_LH_node_usage_stats_bio +# endif + +/* Type checking... */ + +# define LHASH_OF(type) struct lhash_st_##type + +/* Helper macro for internal use */ +# define DEFINE_LHASH_OF_INTERNAL(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + typedef int (*lh_##type##_compfunc)(const type *a, const type *b); \ + typedef unsigned long (*lh_##type##_hashfunc)(const type *a); \ + typedef void (*lh_##type##_doallfunc)(type *a); \ + static ossl_unused ossl_inline type *\ + ossl_check_##type##_lh_plain_type(type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const type * \ + ossl_check_const_##type##_lh_plain_type(const type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_LHASH * \ + ossl_check_const_##type##_lh_type(const LHASH_OF(type) *lh) \ + { \ + return (const OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LHASH * \ + ossl_check_##type##_lh_type(LHASH_OF(type) *lh) \ + { \ + return (OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_COMPFUNC \ + ossl_check_##type##_lh_compfunc_type(lh_##type##_compfunc cmp) \ + { \ + return (OPENSSL_LH_COMPFUNC)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_HASHFUNC \ + ossl_check_##type##_lh_hashfunc_type(lh_##type##_hashfunc hfn) \ + { \ + return (OPENSSL_LH_HASHFUNC)hfn; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_DOALL_FUNC \ + ossl_check_##type##_lh_doallfunc_type(lh_##type##_doallfunc dfn) \ + { \ + return (OPENSSL_LH_DOALL_FUNC)dfn; \ + } \ + LHASH_OF(type) + +# ifndef OPENSSL_NO_DEPRECATED_3_1 +# define DEFINE_LHASH_OF_DEPRECATED(type) \ + static ossl_unused ossl_inline void \ + lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } +# else +# define DEFINE_LHASH_OF_DEPRECATED(type) +# endif + +# define DEFINE_LHASH_OF_EX(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + static ossl_unused ossl_inline LHASH_OF(type) * \ + lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ + { \ + return (LHASH_OF(type) *) \ + OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_free(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_flush(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_flush((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + { \ + return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline int \ + lh_##type##_error(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_num_items(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + { \ + OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall(LHASH_OF(type) *lh, void (*doall)(type *)) \ + { \ + OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_arg(LHASH_OF(type) *lh, \ + void (*doallarg)(type *, void *), void *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)doallarg, arg); \ + } \ + LHASH_OF(type) + +# define DEFINE_LHASH_OF(type) \ + DEFINE_LHASH_OF_EX(type); \ + DEFINE_LHASH_OF_DEPRECATED(type) \ + LHASH_OF(type) + +#define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ + int_implement_lhash_doall(type, argtype, const type) + +#define IMPLEMENT_LHASH_DOALL_ARG(type, argtype) \ + int_implement_lhash_doall(type, argtype, type) + +#define int_implement_lhash_doall(type, argtype, cbargtype) \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ + void (*fn)(cbargtype *, argtype *), \ + argtype *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + } \ + LHASH_OF(type) + +{- + generate_lhash_macros("OPENSSL_STRING") + .generate_lhash_macros("OPENSSL_CSTRING"); +-} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/macros.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/macros.h new file mode 100644 index 00000000..a614cd66 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/macros.h @@ -0,0 +1,325 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_MACROS_H +# define OPENSSL_MACROS_H +# pragma once + +#include +#include + + +/* Helper macros for CPP string composition */ +# define OPENSSL_MSTR_HELPER(x) #x +# define OPENSSL_MSTR(x) OPENSSL_MSTR_HELPER(x) + +/* + * Sometimes OPENSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +# define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Generic deprecation macro + * + * If OPENSSL_SUPPRESS_DEPRECATED is defined, then OSSL_DEPRECATED and + * OSSL_DEPRECATED_FOR become no-ops + */ +# ifndef OSSL_DEPRECATED +# undef OSSL_DEPRECATED_FOR +# ifndef OPENSSL_SUPPRESS_DEPRECATED +# if defined(_MSC_VER) + /* + * MSVC supports __declspec(deprecated) since MSVC 2003 (13.10), + * and __declspec(deprecated(message)) since MSVC 2005 (14.00) + */ +# if _MSC_VER >= 1400 +# define OSSL_DEPRECATED(since) \ + __declspec(deprecated("Since OpenSSL " # since)) +# define OSSL_DEPRECATED_FOR(since, message) \ + __declspec(deprecated("Since OpenSSL " # since ";" message)) +# elif _MSC_VER >= 1310 +# define OSSL_DEPRECATED(since) __declspec(deprecated) +# define OSSL_DEPRECATED_FOR(since, message) __declspec(deprecated) +# endif +# elif defined(__GNUC__) + /* + * According to GCC documentation, deprecations with message appeared in + * GCC 4.5.0 + */ +# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# define OSSL_DEPRECATED(since) \ + __attribute__((deprecated("Since OpenSSL " # since))) +# define OSSL_DEPRECATED_FOR(since, message) \ + __attribute__((deprecated("Since OpenSSL " # since ";" message))) +# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define OSSL_DEPRECATED(since) __attribute__((deprecated)) +# define OSSL_DEPRECATED_FOR(since, message) __attribute__((deprecated)) +# endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# define OSSL_DEPRECATED(since) __attribute__ ((deprecated)) +# define OSSL_DEPRECATED_FOR(since, message) __attribute__ ((deprecated)) +# endif +# endif +# endif +# endif + +/* + * Still not defined? Then define no-op macros. This means these macros + * are unsuitable for use in a typedef. + */ +# ifndef OSSL_DEPRECATED +# define OSSL_DEPRECATED(since) extern +# define OSSL_DEPRECATED_FOR(since, message) extern +# endif + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . If this is + * undefined, the value of the macro OPENSSL_CONFIGURED_API (defined in + * ) is the default. + * + * For any version number up until version 1.1.x, is expected to be + * the calculated version number 0xMNNFFPPSL. + * For version numbers 3.0 and on, is expected to be a computation + * of the major and minor numbers in decimal using this formula: + * + * MAJOR * 10000 + MINOR * 100 + * + * So version 3.0 becomes 30000, version 3.2 becomes 30200, etc. + */ + +/* + * We use the OPENSSL_API_COMPAT value to define API level macros. These + * macros are used to enable or disable features at that API version boundary. + */ + +# ifdef OPENSSL_API_LEVEL +# error "OPENSSL_API_LEVEL must not be defined by application" +# endif + +/* + * We figure out what API level was intended by simple numeric comparison. + * The lowest old style number we recognise is 0x00908000L, so we take some + * safety margin and assume that anything below 0x00900000L is a new style + * number. This allows new versions up to and including v943.71.83. + */ +# ifdef OPENSSL_API_COMPAT +# if OPENSSL_API_COMPAT < 0x900000L +# define OPENSSL_API_LEVEL (OPENSSL_API_COMPAT) +# else +# define OPENSSL_API_LEVEL \ + (((OPENSSL_API_COMPAT >> 28) & 0xF) * 10000 \ + + ((OPENSSL_API_COMPAT >> 20) & 0xFF) * 100 \ + + ((OPENSSL_API_COMPAT >> 12) & 0xFF)) +# endif +# endif + +/* + * If OPENSSL_API_COMPAT wasn't given, we use default numbers to set + * the API compatibility level. + */ +# ifndef OPENSSL_API_LEVEL +# if OPENSSL_CONFIGURED_API > 0 +# define OPENSSL_API_LEVEL (OPENSSL_CONFIGURED_API) +# else +# define OPENSSL_API_LEVEL \ + (OPENSSL_VERSION_MAJOR * 10000 + OPENSSL_VERSION_MINOR * 100) +# endif +# endif + +# if OPENSSL_API_LEVEL > OPENSSL_CONFIGURED_API +# error "The requested API level higher than the configured API compatibility level" +# endif + +/* + * Check of sane values. + */ +/* Can't go higher than the current version. */ +# if OPENSSL_API_LEVEL > (OPENSSL_VERSION_MAJOR * 10000 + OPENSSL_VERSION_MINOR * 100) +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif +/* OpenSSL will have no version 2.y.z */ +# if OPENSSL_API_LEVEL < 30000 && OPENSSL_API_LEVEL >= 20000 +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif +/* Below 0.9.8 is unacceptably low */ +# if OPENSSL_API_LEVEL < 908 +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif + +/* + * Define macros for deprecation and simulated removal purposes. + * + * The macros OSSL_DEPRECATED_{major}_{minor} are always defined for + * all OpenSSL versions we care for. They can be used as attributes + * in function declarations where appropriate. + * + * The macros OPENSSL_NO_DEPRECATED_{major}_{minor} are defined for + * all OpenSSL versions up to or equal to the version given with + * OPENSSL_API_COMPAT. They are used as guards around anything that's + * deprecated up to that version, as an effect of the developer option + * 'no-deprecated'. + */ + +# undef OPENSSL_NO_DEPRECATED_3_0 +# undef OPENSSL_NO_DEPRECATED_1_1_1 +# undef OPENSSL_NO_DEPRECATED_1_1_0 +# undef OPENSSL_NO_DEPRECATED_1_0_2 +# undef OPENSSL_NO_DEPRECATED_1_0_1 +# undef OPENSSL_NO_DEPRECATED_1_0_0 +# undef OPENSSL_NO_DEPRECATED_0_9_8 + +# if OPENSSL_API_LEVEL >= 30100 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_1 OSSL_DEPRECATED(3.1) +# define OSSL_DEPRECATEDIN_3_1_FOR(msg) OSSL_DEPRECATED_FOR(3.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_1 +# endif +# else +# define OSSL_DEPRECATEDIN_3_1 +# define OSSL_DEPRECATEDIN_3_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 30000 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_0 OSSL_DEPRECATED(3.0) +# define OSSL_DEPRECATEDIN_3_0_FOR(msg) OSSL_DEPRECATED_FOR(3.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_0 +# endif +# else +# define OSSL_DEPRECATEDIN_3_0 +# define OSSL_DEPRECATEDIN_3_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10101 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_1_1 OSSL_DEPRECATED(1.1.1) +# define OSSL_DEPRECATEDIN_1_1_1_FOR(msg) OSSL_DEPRECATED_FOR(1.1.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_1_1 +# endif +# else +# define OSSL_DEPRECATEDIN_1_1_1 +# define OSSL_DEPRECATEDIN_1_1_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10100 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_1_0 OSSL_DEPRECATED(1.1.0) +# define OSSL_DEPRECATEDIN_1_1_0_FOR(msg) OSSL_DEPRECATED_FOR(1.1.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_1_0 +# endif +# else +# define OSSL_DEPRECATEDIN_1_1_0 +# define OSSL_DEPRECATEDIN_1_1_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10002 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_2 OSSL_DEPRECATED(1.0.2) +# define OSSL_DEPRECATEDIN_1_0_2_FOR(msg) OSSL_DEPRECATED_FOR(1.0.2, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_2 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_2 +# define OSSL_DEPRECATEDIN_1_0_2_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10001 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_1 OSSL_DEPRECATED(1.0.1) +# define OSSL_DEPRECATEDIN_1_0_1_FOR(msg) OSSL_DEPRECATED_FOR(1.0.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_1 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_1 +# define OSSL_DEPRECATEDIN_1_0_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10000 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_0 OSSL_DEPRECATED(1.0.0) +# define OSSL_DEPRECATEDIN_1_0_0_FOR(msg) OSSL_DEPRECATED_FOR(1.0.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_0 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_0 +# define OSSL_DEPRECATEDIN_1_0_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 908 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_0_9_8 OSSL_DEPRECATED(0.9.8) +# define OSSL_DEPRECATEDIN_0_9_8_FOR(msg) OSSL_DEPRECATED_FOR(0.9.8, msg) +# else +# define OPENSSL_NO_DEPRECATED_0_9_8 +# endif +# else +# define OSSL_DEPRECATEDIN_0_9_8 +# define OSSL_DEPRECATEDIN_0_9_8_FOR(msg) +# endif + +/* + * Make our own variants of __FILE__ and __LINE__, depending on configuration + */ + +# ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +# endif + +/* + * __func__ was standardized in C99, so for any compiler that claims + * to implement that language level or newer, we assume we can safely + * use that symbol. + * + * GNU C also provides __FUNCTION__ since version 2, which predates + * C99. We can, however, only use this if __STDC_VERSION__ exists, + * as it's otherwise not allowed according to ISO C standards (C90). + * (compiling with GNU C's -pedantic tells us so) + * + * If none of the above applies, we check if the compiler is MSVC, + * and use __FUNCTION__ if that's the case. + */ +# ifndef OPENSSL_FUNC +# if defined(__STDC_VERSION__) +# if __STDC_VERSION__ >= 199901L +# define OPENSSL_FUNC __func__ +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define OPENSSL_FUNC __FUNCTION__ +# endif +# elif defined(_MSC_VER) +# define OPENSSL_FUNC __FUNCTION__ +# endif +/* + * If all these possibilities are exhausted, we give up and use a + * static string. + */ +# ifndef OPENSSL_FUNC +# define OPENSSL_FUNC "(unknown function)" +# endif +# endif + +# ifndef OSSL_CRYPTO_ALLOC +# if defined(__GNUC__) +# define OSSL_CRYPTO_ALLOC __attribute__((__malloc__)) +# elif defined(_MSC_VER) +# define OSSL_CRYPTO_ALLOC __declspec(restrict) +# else +# define OSSL_CRYPTO_ALLOC +# endif +# endif + +#endif /* OPENSSL_MACROS_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md2.h index 7faf8e3d..5d4cb77e 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md2.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md2.h @@ -1,27 +1,36 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD2_H -# define HEADER_MD2_H +#ifndef OPENSSL_MD2_H +# define OPENSSL_MD2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD2_H +# endif # include # ifndef OPENSSL_NO_MD2 -# include -# ifdef __cplusplus +# include +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define MD2_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) typedef unsigned char MD2_INT; -# define MD2_DIGEST_LENGTH 16 -# define MD2_BLOCK 16 +# define MD2_BLOCK 16 typedef struct MD2state_st { unsigned int num; @@ -29,16 +38,19 @@ typedef struct MD2state_st { MD2_INT cksm[MD2_BLOCK]; MD2_INT state[MD2_BLOCK]; } MD2_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *MD2_options(void); +OSSL_DEPRECATEDIN_3_0 int MD2_Init(MD2_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD2_Update(MD2_CTX *c, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int MD2_Final(unsigned char *md, MD2_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD2(const unsigned char *d, size_t n, + unsigned char *md); +# endif -const char *MD2_options(void); -int MD2_Init(MD2_CTX *c); -int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len); -int MD2_Final(unsigned char *md, MD2_CTX *c); -unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } +# endif # endif -# endif - #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md4.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md4.h index 940e29db..6c150a6c 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md4.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md4.h @@ -1,34 +1,43 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD4_H -# define HEADER_MD4_H +#ifndef OPENSSL_MD4_H +# define OPENSSL_MD4_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD4_H +# endif # include # ifndef OPENSSL_NO_MD4 -# include -# include -# ifdef __cplusplus +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define MD4_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! MD4_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define MD4_LONG unsigned int +# define MD4_LONG unsigned int -# define MD4_CBLOCK 64 -# define MD4_LBLOCK (MD4_CBLOCK/4) -# define MD4_DIGEST_LENGTH 16 +# define MD4_CBLOCK 64 +# define MD4_LBLOCK (MD4_CBLOCK/4) typedef struct MD4state_st { MD4_LONG A, B, C, D; @@ -36,16 +45,19 @@ typedef struct MD4state_st { MD4_LONG data[MD4_LBLOCK]; unsigned int num; } MD4_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MD4_Init(MD4_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD4_Update(MD4_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int MD4_Final(unsigned char *md, MD4_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD4(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void MD4_Transform(MD4_CTX *c, const unsigned char *b); +# endif -int MD4_Init(MD4_CTX *c); -int MD4_Update(MD4_CTX *c, const void *data, size_t len); -int MD4_Final(unsigned char *md, MD4_CTX *c); -unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); -void MD4_Transform(MD4_CTX *c, const unsigned char *b); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md5.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md5.h index 2deb7721..77a57734 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md5.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md5.h @@ -1,34 +1,42 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD5_H -# define HEADER_MD5_H +#ifndef OPENSSL_MD5_H +# define OPENSSL_MD5_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD5_H +# endif # include # ifndef OPENSSL_NO_MD5 -# include -# include -# ifdef __cplusplus +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif +# define MD5_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) /* * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! MD5_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define MD5_LONG unsigned int +# define MD5_LONG unsigned int -# define MD5_CBLOCK 64 -# define MD5_LBLOCK (MD5_CBLOCK/4) -# define MD5_DIGEST_LENGTH 16 +# define MD5_CBLOCK 64 +# define MD5_LBLOCK (MD5_CBLOCK/4) typedef struct MD5state_st { MD5_LONG A, B, C, D; @@ -36,15 +44,19 @@ typedef struct MD5state_st { MD5_LONG data[MD5_LBLOCK]; unsigned int num; } MD5_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MD5_Init(MD5_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD5_Update(MD5_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int MD5_Final(unsigned char *md, MD5_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD5(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void MD5_Transform(MD5_CTX *c, const unsigned char *b); +# endif -int MD5_Init(MD5_CTX *c); -int MD5_Update(MD5_CTX *c, const void *data, size_t len); -int MD5_Final(unsigned char *md, MD5_CTX *c); -unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); -void MD5_Transform(MD5_CTX *c, const unsigned char *b); -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/mdc2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/mdc2.h index aabd2bfa..5a7ee289 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/mdc2.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/mdc2.h @@ -1,42 +1,55 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MDC2_H -# define HEADER_MDC2_H +#ifndef OPENSSL_MDC2_H +# define OPENSSL_MDC2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MDC2_H +# endif # include -#ifndef OPENSSL_NO_MDC2 -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_MDC2 +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif -# define MDC2_BLOCK 8 -# define MDC2_DIGEST_LENGTH 16 +# define MDC2_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +# define MDC2_BLOCK 8 typedef struct mdc2_ctx_st { unsigned int num; unsigned char data[MDC2_BLOCK]; DES_cblock h, hh; - int pad_type; /* either 1 or 2, default 1 */ + unsigned int pad_type; /* either 1 or 2, default 1 */ } MDC2_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MDC2_Init(MDC2_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MDC2_Update(MDC2_CTX *c, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int MDC2_Final(unsigned char *md, MDC2_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MDC2(const unsigned char *d, size_t n, + unsigned char *md); +# endif -int MDC2_Init(MDC2_CTX *c); -int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); -int MDC2_Final(unsigned char *md, MDC2_CTX *c); -unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/modes.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/modes.h index d544f98d..e1907991 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/modes.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/modes.h @@ -1,16 +1,23 @@ /* * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MODES_H -# define HEADER_MODES_H +#ifndef OPENSSL_MODES_H +# define OPENSSL_MODES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MODES_H +# endif # include +# include # ifdef __cplusplus extern "C" { @@ -22,6 +29,10 @@ typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], int enc); +typedef void (*ecb128_f) (const unsigned char *in, unsigned char *out, + size_t len, const void *key, + int enc); + typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, size_t blocks, const void *key, const unsigned char ivec[16]); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h index 53516a06..0e860276 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h @@ -2,13 +2,17 @@ * WARNING: do not edit! * Generated by crypto/objects/objects.pl * - * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OPENSSL_OBJ_MAC_H +# define OPENSSL_OBJ_MAC_H +# pragma once + #define SN_undef "UNDEF" #define LN_undef "undefined" #define NID_undef 0 @@ -44,6 +48,11 @@ #define NID_identified_organization 676 #define OBJ_identified_organization OBJ_iso,3L +#define SN_gmac "GMAC" +#define LN_gmac "gmac" +#define NID_gmac 1195 +#define OBJ_gmac OBJ_iso,0L,9797L,3L,4L + #define SN_hmac_md5 "HMAC-MD5" #define LN_hmac_md5 "hmac-md5" #define NID_hmac_md5 780 @@ -845,6 +854,14 @@ #define NID_id_smime_ct_authEnvelopedData 1059 #define OBJ_id_smime_ct_authEnvelopedData OBJ_id_smime_ct,23L +#define SN_id_ct_routeOriginAuthz "id-ct-routeOriginAuthz" +#define NID_id_ct_routeOriginAuthz 1234 +#define OBJ_id_ct_routeOriginAuthz OBJ_id_smime_ct,24L + +#define SN_id_ct_rpkiManifest "id-ct-rpkiManifest" +#define NID_id_ct_rpkiManifest 1235 +#define OBJ_id_ct_rpkiManifest OBJ_id_smime_ct,26L + #define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" #define NID_id_ct_asciiTextWithCRLF 787 #define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L @@ -853,6 +870,22 @@ #define NID_id_ct_xml 1060 #define OBJ_id_ct_xml OBJ_id_smime_ct,28L +#define SN_id_ct_rpkiGhostbusters "id-ct-rpkiGhostbusters" +#define NID_id_ct_rpkiGhostbusters 1236 +#define OBJ_id_ct_rpkiGhostbusters OBJ_id_smime_ct,35L + +#define SN_id_ct_resourceTaggedAttest "id-ct-resourceTaggedAttest" +#define NID_id_ct_resourceTaggedAttest 1237 +#define OBJ_id_ct_resourceTaggedAttest OBJ_id_smime_ct,36L + +#define SN_id_ct_geofeedCSVwithCRLF "id-ct-geofeedCSVwithCRLF" +#define NID_id_ct_geofeedCSVwithCRLF 1246 +#define OBJ_id_ct_geofeedCSVwithCRLF OBJ_id_smime_ct,47L + +#define SN_id_ct_signedChecklist "id-ct-signedChecklist" +#define NID_id_ct_signedChecklist 1247 +#define OBJ_id_ct_signedChecklist OBJ_id_smime_ct,48L + #define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" #define NID_id_smime_aa_receiptRequest 212 #define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L @@ -1179,6 +1212,11 @@ #define NID_sm3WithRSAEncryption 1144 #define OBJ_sm3WithRSAEncryption OBJ_sm_scheme,504L +#define SN_SM2_with_SM3 "SM2-SM3" +#define LN_SM2_with_SM3 "SM2-with-SM3" +#define NID_SM2_with_SM3 1204 +#define OBJ_SM2_with_SM3 OBJ_sm_scheme,501L + #define LN_hmacWithSHA224 "hmacWithSHA224" #define NID_hmacWithSHA224 798 #define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L @@ -1385,6 +1423,10 @@ #define NID_id_qcs 267 #define OBJ_id_qcs OBJ_id_pkix,11L +#define SN_id_cp "id-cp" +#define NID_id_cp 1238 +#define OBJ_id_cp OBJ_id_pkix,14L + #define SN_id_cct "id-cct" #define NID_id_cct 268 #define OBJ_id_cct OBJ_id_pkix,12L @@ -1518,6 +1560,14 @@ #define NID_tlsfeature 1020 #define OBJ_tlsfeature OBJ_id_pe,24L +#define SN_sbgp_ipAddrBlockv2 "sbgp-ipAddrBlockv2" +#define NID_sbgp_ipAddrBlockv2 1239 +#define OBJ_sbgp_ipAddrBlockv2 OBJ_id_pe,28L + +#define SN_sbgp_autonomousSysNumv2 "sbgp-autonomousSysNumv2" +#define NID_sbgp_autonomousSysNumv2 1240 +#define OBJ_sbgp_autonomousSysNumv2 OBJ_id_pe,29L + #define SN_id_qt_cps "id-qt-cps" #define LN_id_qt_cps "Policy Qualifier CPS" #define NID_id_qt_cps 164 @@ -1637,6 +1687,26 @@ #define NID_cmcRA 1132 #define OBJ_cmcRA OBJ_id_kp,28L +#define SN_cmcArchive "cmcArchive" +#define LN_cmcArchive "CMC Archive Server" +#define NID_cmcArchive 1219 +#define OBJ_cmcArchive OBJ_id_kp,29L + +#define SN_id_kp_bgpsec_router "id-kp-bgpsec-router" +#define LN_id_kp_bgpsec_router "BGPsec Router" +#define NID_id_kp_bgpsec_router 1220 +#define OBJ_id_kp_bgpsec_router OBJ_id_kp,30L + +#define SN_id_kp_BrandIndicatorforMessageIdentification "id-kp-BrandIndicatorforMessageIdentification" +#define LN_id_kp_BrandIndicatorforMessageIdentification "Brand Indicator for Message Identification" +#define NID_id_kp_BrandIndicatorforMessageIdentification 1221 +#define OBJ_id_kp_BrandIndicatorforMessageIdentification OBJ_id_kp,31L + +#define SN_cmKGA "cmKGA" +#define LN_cmKGA "Certificate Management Key Generation Authority" +#define NID_cmKGA 1222 +#define OBJ_cmKGA OBJ_id_kp,32L + #define SN_id_it_caProtEncCert "id-it-caProtEncCert" #define NID_id_it_caProtEncCert 298 #define OBJ_id_it_caProtEncCert OBJ_id_it,1L @@ -1701,6 +1771,18 @@ #define NID_id_it_suppLangTags 784 #define OBJ_id_it_suppLangTags OBJ_id_it,16L +#define SN_id_it_caCerts "id-it-caCerts" +#define NID_id_it_caCerts 1223 +#define OBJ_id_it_caCerts OBJ_id_it,17L + +#define SN_id_it_rootCaKeyUpdate "id-it-rootCaKeyUpdate" +#define NID_id_it_rootCaKeyUpdate 1224 +#define OBJ_id_it_rootCaKeyUpdate OBJ_id_it,18L + +#define SN_id_it_certReqTemplate "id-it-certReqTemplate" +#define NID_id_it_certReqTemplate 1225 +#define OBJ_id_it_certReqTemplate OBJ_id_it,19L + #define SN_id_regCtrl "id-regCtrl" #define NID_id_regCtrl 313 #define OBJ_id_regCtrl OBJ_id_pkip,1L @@ -1846,6 +1928,26 @@ #define NID_id_on_permanentIdentifier 858 #define OBJ_id_on_permanentIdentifier OBJ_id_on,3L +#define SN_XmppAddr "id-on-xmppAddr" +#define LN_XmppAddr "XmppAddr" +#define NID_XmppAddr 1209 +#define OBJ_XmppAddr OBJ_id_on,5L + +#define SN_SRVName "id-on-dnsSRV" +#define LN_SRVName "SRVName" +#define NID_SRVName 1210 +#define OBJ_SRVName OBJ_id_on,7L + +#define SN_NAIRealm "id-on-NAIRealm" +#define LN_NAIRealm "NAIRealm" +#define NID_NAIRealm 1211 +#define OBJ_NAIRealm OBJ_id_on,8L + +#define SN_id_on_SmtpUTF8Mailbox "id-on-SmtpUTF8Mailbox" +#define LN_id_on_SmtpUTF8Mailbox "Smtp UTF8 Mailbox" +#define NID_id_on_SmtpUTF8Mailbox 1208 +#define OBJ_id_on_SmtpUTF8Mailbox OBJ_id_on,9L + #define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" #define NID_id_pda_dateOfBirth 348 #define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L @@ -1894,6 +1996,14 @@ #define NID_id_qcs_pkixQCSyntax_v1 359 #define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L +#define SN_ipAddr_asNumber "ipAddr-asNumber" +#define NID_ipAddr_asNumber 1241 +#define OBJ_ipAddr_asNumber OBJ_id_cp,2L + +#define SN_ipAddr_asNumberv2 "ipAddr-asNumberv2" +#define NID_ipAddr_asNumberv2 1242 +#define OBJ_ipAddr_asNumberv2 OBJ_id_cp,3L + #define SN_id_cct_crs "id-cct-crs" #define NID_id_cct_crs 360 #define OBJ_id_cct_crs OBJ_id_cct,1L @@ -1946,6 +2056,21 @@ #define NID_caRepository 785 #define OBJ_caRepository OBJ_id_ad,5L +#define SN_rpkiManifest "rpkiManifest" +#define LN_rpkiManifest "RPKI Manifest" +#define NID_rpkiManifest 1243 +#define OBJ_rpkiManifest OBJ_id_ad,10L + +#define SN_signedObject "signedObject" +#define LN_signedObject "Signed Object" +#define NID_signedObject 1244 +#define OBJ_signedObject OBJ_id_ad,11L + +#define SN_rpkiNotify "rpkiNotify" +#define LN_rpkiNotify "RPKI Notify" +#define NID_rpkiNotify 1245 +#define OBJ_rpkiNotify OBJ_id_ad,13L + #define OBJ_id_pkix_OCSP OBJ_ad_OCSP #define SN_id_pkix_OCSP_basic "basicOCSPResponse" @@ -2113,15 +2238,25 @@ #define NID_ripemd160WithRSA 119 #define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L +#define SN_blake2bmac "BLAKE2BMAC" +#define LN_blake2bmac "blake2bmac" +#define NID_blake2bmac 1201 +#define OBJ_blake2bmac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L + +#define SN_blake2smac "BLAKE2SMAC" +#define LN_blake2smac "blake2smac" +#define NID_blake2smac 1202 +#define OBJ_blake2smac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L + #define SN_blake2b512 "BLAKE2b512" #define LN_blake2b512 "blake2b512" #define NID_blake2b512 1056 -#define OBJ_blake2b512 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L,16L +#define OBJ_blake2b512 OBJ_blake2bmac,16L #define SN_blake2s256 "BLAKE2s256" #define LN_blake2s256 "blake2s256" #define NID_blake2s256 1057 -#define OBJ_blake2s256 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L,8L +#define OBJ_blake2s256 OBJ_blake2smac,8L #define SN_sxnet "SXNetID" #define LN_sxnet "Strong Extranet ID" @@ -2971,6 +3106,16 @@ #define NID_hmac_sha3_512 1105 #define OBJ_hmac_sha3_512 OBJ_nist_hashalgs,16L +#define SN_kmac128 "KMAC128" +#define LN_kmac128 "kmac128" +#define NID_kmac128 1196 +#define OBJ_kmac128 OBJ_nist_hashalgs,19L + +#define SN_kmac256 "KMAC256" +#define LN_kmac256 "kmac256" +#define NID_kmac256 1197 +#define OBJ_kmac256 OBJ_nist_hashalgs,20L + #define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L #define SN_dsa_with_SHA224 "dsa_with_SHA224" @@ -4230,25 +4375,25 @@ #define NID_id_tc26_cipher_gostr3412_2015_magma 1173 #define OBJ_id_tc26_cipher_gostr3412_2015_magma OBJ_id_tc26_cipher,1L -#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm "id-tc26-cipher-gostr3412-2015-magma-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm 1174 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L +#define SN_magma_ctr_acpkm "magma-ctr-acpkm" +#define NID_magma_ctr_acpkm 1174 +#define OBJ_magma_ctr_acpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L -#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac 1175 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L +#define SN_magma_ctr_acpkm_omac "magma-ctr-acpkm-omac" +#define NID_magma_ctr_acpkm_omac 1175 +#define OBJ_magma_ctr_acpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L #define SN_id_tc26_cipher_gostr3412_2015_kuznyechik "id-tc26-cipher-gostr3412-2015-kuznyechik" #define NID_id_tc26_cipher_gostr3412_2015_kuznyechik 1176 #define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik OBJ_id_tc26_cipher,2L -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm 1177 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L +#define SN_kuznyechik_ctr_acpkm "kuznyechik-ctr-acpkm" +#define NID_kuznyechik_ctr_acpkm 1177 +#define OBJ_kuznyechik_ctr_acpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac 1178 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L +#define SN_kuznyechik_ctr_acpkm_omac "kuznyechik-ctr-acpkm-omac" +#define NID_kuznyechik_ctr_acpkm_omac 1178 +#define OBJ_kuznyechik_ctr_acpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L #define SN_id_tc26_agreement "id-tc26-agreement" #define NID_id_tc26_agreement 991 @@ -4270,17 +4415,17 @@ #define NID_id_tc26_wrap_gostr3412_2015_magma 1180 #define OBJ_id_tc26_wrap_gostr3412_2015_magma OBJ_id_tc26_wrap,1L -#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 "id-tc26-wrap-gostr3412-2015-magma-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 1181 -#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L +#define SN_magma_kexp15 "magma-kexp15" +#define NID_magma_kexp15 1181 +#define OBJ_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L #define SN_id_tc26_wrap_gostr3412_2015_kuznyechik "id-tc26-wrap-gostr3412-2015-kuznyechik" #define NID_id_tc26_wrap_gostr3412_2015_kuznyechik 1182 #define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik OBJ_id_tc26_wrap,2L -#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 "id-tc26-wrap-gostr3412-2015-kuznyechik-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 1183 -#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L +#define SN_kuznyechik_kexp15 "kuznyechik-kexp15" +#define NID_kuznyechik_kexp15 1183 +#define OBJ_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L #define SN_id_tc26_constants "id-tc26-constants" #define NID_id_tc26_constants 994 @@ -4370,6 +4515,11 @@ #define NID_SNILS 1006 #define OBJ_SNILS OBJ_member_body,643L,100L,3L +#define SN_OGRNIP "OGRNIP" +#define LN_OGRNIP "OGRNIP" +#define NID_OGRNIP 1226 +#define OBJ_OGRNIP OBJ_member_body,643L,100L,5L + #define SN_subjectSignTool "subjectSignTool" #define LN_subjectSignTool "Signing Tool of Subject" #define NID_subjectSignTool 1007 @@ -4380,23 +4530,58 @@ #define NID_issuerSignTool 1008 #define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L -#define SN_grasshopper_ecb "grasshopper-ecb" -#define NID_grasshopper_ecb 1012 +#define SN_classSignTool "classSignTool" +#define LN_classSignTool "Class of Signing Tool" +#define NID_classSignTool 1227 +#define OBJ_classSignTool OBJ_member_body,643L,100L,113L -#define SN_grasshopper_ctr "grasshopper-ctr" -#define NID_grasshopper_ctr 1013 +#define SN_classSignToolKC1 "classSignToolKC1" +#define LN_classSignToolKC1 "Class of Signing Tool KC1" +#define NID_classSignToolKC1 1228 +#define OBJ_classSignToolKC1 OBJ_member_body,643L,100L,113L,1L -#define SN_grasshopper_ofb "grasshopper-ofb" -#define NID_grasshopper_ofb 1014 +#define SN_classSignToolKC2 "classSignToolKC2" +#define LN_classSignToolKC2 "Class of Signing Tool KC2" +#define NID_classSignToolKC2 1229 +#define OBJ_classSignToolKC2 OBJ_member_body,643L,100L,113L,2L -#define SN_grasshopper_cbc "grasshopper-cbc" -#define NID_grasshopper_cbc 1015 +#define SN_classSignToolKC3 "classSignToolKC3" +#define LN_classSignToolKC3 "Class of Signing Tool KC3" +#define NID_classSignToolKC3 1230 +#define OBJ_classSignToolKC3 OBJ_member_body,643L,100L,113L,3L -#define SN_grasshopper_cfb "grasshopper-cfb" -#define NID_grasshopper_cfb 1016 +#define SN_classSignToolKB1 "classSignToolKB1" +#define LN_classSignToolKB1 "Class of Signing Tool KB1" +#define NID_classSignToolKB1 1231 +#define OBJ_classSignToolKB1 OBJ_member_body,643L,100L,113L,4L -#define SN_grasshopper_mac "grasshopper-mac" -#define NID_grasshopper_mac 1017 +#define SN_classSignToolKB2 "classSignToolKB2" +#define LN_classSignToolKB2 "Class of Signing Tool KB2" +#define NID_classSignToolKB2 1232 +#define OBJ_classSignToolKB2 OBJ_member_body,643L,100L,113L,5L + +#define SN_classSignToolKA1 "classSignToolKA1" +#define LN_classSignToolKA1 "Class of Signing Tool KA1" +#define NID_classSignToolKA1 1233 +#define OBJ_classSignToolKA1 OBJ_member_body,643L,100L,113L,6L + +#define SN_kuznyechik_ecb "kuznyechik-ecb" +#define NID_kuznyechik_ecb 1012 + +#define SN_kuznyechik_ctr "kuznyechik-ctr" +#define NID_kuznyechik_ctr 1013 + +#define SN_kuznyechik_ofb "kuznyechik-ofb" +#define NID_kuznyechik_ofb 1014 + +#define SN_kuznyechik_cbc "kuznyechik-cbc" +#define NID_kuznyechik_cbc 1015 + +#define SN_kuznyechik_cfb "kuznyechik-cfb" +#define NID_kuznyechik_cfb 1016 + +#define SN_kuznyechik_mac "kuznyechik-mac" +#define NID_kuznyechik_mac 1017 #define SN_magma_ecb "magma-ecb" #define NID_magma_ecb 1187 @@ -4970,6 +5155,22 @@ #define LN_hkdf "hkdf" #define NID_hkdf 1036 +#define SN_sshkdf "SSHKDF" +#define LN_sshkdf "sshkdf" +#define NID_sshkdf 1203 + +#define SN_sskdf "SSKDF" +#define LN_sskdf "sskdf" +#define NID_sskdf 1205 + +#define SN_x942kdf "X942KDF" +#define LN_x942kdf "x942kdf" +#define NID_x942kdf 1207 + +#define SN_x963kdf "X963KDF" +#define LN_x963kdf "x963kdf" +#define NID_x963kdf 1206 + #define SN_id_pkinit "id-pkinit" #define NID_id_pkinit 1031 #define OBJ_id_pkinit 1L,3L,6L,1L,5L,2L,3L @@ -5036,6 +5237,10 @@ #define LN_kx_gost "kx-gost" #define NID_kx_gost 1045 +#define SN_kx_gost18 "KxGOST18" +#define LN_kx_gost18 "kx-gost18" +#define NID_kx_gost18 1218 + #define SN_kx_any "KxANY" #define LN_kx_any "kx-any" #define NID_kx_any 1063 @@ -5099,6 +5304,24 @@ #define SN_ffdhe8192 "ffdhe8192" #define NID_ffdhe8192 1130 +#define SN_modp_1536 "modp_1536" +#define NID_modp_1536 1212 + +#define SN_modp_2048 "modp_2048" +#define NID_modp_2048 1213 + +#define SN_modp_3072 "modp_3072" +#define NID_modp_3072 1214 + +#define SN_modp_4096 "modp_4096" +#define NID_modp_4096 1215 + +#define SN_modp_6144 "modp_6144" +#define NID_modp_6144 1216 + +#define SN_modp_8192 "modp_8192" +#define NID_modp_8192 1217 + #define SN_ISO_UA "ISO-UA" #define NID_ISO_UA 1150 #define OBJ_ISO_UA OBJ_member_body,804L @@ -5196,3 +5419,63 @@ #define LN_uacurve9 "DSTU curve 9" #define NID_uacurve9 1169 #define OBJ_uacurve9 OBJ_dstu4145le,2L,9L + +#define SN_aes_128_siv "AES-128-SIV" +#define LN_aes_128_siv "aes-128-siv" +#define NID_aes_128_siv 1198 + +#define SN_aes_192_siv "AES-192-SIV" +#define LN_aes_192_siv "aes-192-siv" +#define NID_aes_192_siv 1199 + +#define SN_aes_256_siv "AES-256-SIV" +#define LN_aes_256_siv "aes-256-siv" +#define NID_aes_256_siv 1200 + +#endif /* OPENSSL_OBJ_MAC_H */ + +#ifndef OPENSSL_NO_DEPRECATED_3_0 + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm SN_magma_ctr_acpkm +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm NID_magma_ctr_acpkm +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_magma_ctr_acpkm + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac SN_magma_ctr_acpkm_omac +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac NID_magma_ctr_acpkm_omac +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_magma_ctr_acpkm_omac + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm SN_kuznyechik_ctr_acpkm +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm NID_kuznyechik_ctr_acpkm +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_kuznyechik_ctr_acpkm + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac SN_kuznyechik_ctr_acpkm_omac +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac NID_kuznyechik_ctr_acpkm_omac +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_kuznyechik_ctr_acpkm_omac + +#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 SN_magma_kexp15 +#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 NID_magma_kexp15 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_magma_kexp15 + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 SN_kuznyechik_kexp15 +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 NID_kuznyechik_kexp15 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_kuznyechik_kexp15 + +#define SN_grasshopper_ecb SN_kuznyechik_ecb +#define NID_grasshopper_ecb NID_kuznyechik_ecb + +#define SN_grasshopper_ctr SN_kuznyechik_ctr +#define NID_grasshopper_ctr NID_kuznyechik_ctr + +#define SN_grasshopper_ofb SN_kuznyechik_ofb +#define NID_grasshopper_ofb NID_kuznyechik_ofb + +#define SN_grasshopper_cbc SN_kuznyechik_cbc +#define NID_grasshopper_cbc NID_kuznyechik_cbc + +#define SN_grasshopper_cfb SN_kuznyechik_cfb +#define NID_grasshopper_cfb NID_kuznyechik_cfb + +#define SN_grasshopper_mac SN_kuznyechik_mac +#define NID_grasshopper_mac NID_kuznyechik_mac + +#endif /* OPENSSL_NO_DEPRECATED_3_0 */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objects.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objects.h index 5e8b5762..9ea91c27 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objects.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objects.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OBJECTS_H -# define HEADER_OBJECTS_H +#ifndef OPENSSL_OBJECTS_H +# define OPENSSL_OBJECTS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OBJECTS_H +# endif # include # include @@ -20,7 +26,9 @@ # define OBJ_NAME_TYPE_CIPHER_METH 0x02 # define OBJ_NAME_TYPE_PKEY_METH 0x03 # define OBJ_NAME_TYPE_COMP_METH 0x04 -# define OBJ_NAME_TYPE_NUM 0x05 +# define OBJ_NAME_TYPE_MAC_METH 0x05 +# define OBJ_NAME_TYPE_KDF_METH 0x06 +# define OBJ_NAME_TYPE_NUM 0x07 # define OBJ_NAME_ALIAS 0x8000 @@ -55,7 +63,7 @@ void OBJ_NAME_do_all_sorted(int type, void (*fn) (const OBJ_NAME *, void *arg), void *arg); -ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); +DECLARE_ASN1_DUP_FUNCTION_name(ASN1_OBJECT, OBJ) ASN1_OBJECT *OBJ_nid2obj(int n); const char *OBJ_nid2ln(int n); const char *OBJ_nid2sn(int n); @@ -155,7 +163,7 @@ const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, int OBJ_new_nid(int num); int OBJ_add_object(const ASN1_OBJECT *obj); int OBJ_create(const char *oid, const char *sn, const char *ln); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OBJ_cleanup() while(0) continue #endif int OBJ_create_objects(BIO *in); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objectserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objectserr.h index 02e166f1..585217f6 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objectserr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objectserr.h @@ -1,42 +1,28 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OBJERR_H -# define HEADER_OBJERR_H +#ifndef OPENSSL_OBJECTSERR_H +# define OPENSSL_OBJECTSERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OBJ_strings(void); -/* - * OBJ function codes. - */ -# define OBJ_F_OBJ_ADD_OBJECT 105 -# define OBJ_F_OBJ_ADD_SIGID 107 -# define OBJ_F_OBJ_CREATE 100 -# define OBJ_F_OBJ_DUP 101 -# define OBJ_F_OBJ_NAME_NEW_INDEX 106 -# define OBJ_F_OBJ_NID2LN 102 -# define OBJ_F_OBJ_NID2OBJ 103 -# define OBJ_F_OBJ_NID2SN 104 -# define OBJ_F_OBJ_TXT2OBJ 108 /* * OBJ reason codes. */ # define OBJ_R_OID_EXISTS 102 # define OBJ_R_UNKNOWN_NID 101 +# define OBJ_R_UNKNOWN_OBJECT_NAME 103 #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h index 4d759a49..142b1831 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h @@ -1,16 +1,29 @@ /* - * Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ocsp.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OCSP_H -# define HEADER_OCSP_H -#include + +#ifndef OPENSSL_OCSP_H +# define OPENSSL_OCSP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OCSP_H +# endif + +# include +# include +# include /* * These definitions are outside the OPENSSL_NO_OCSP guard because although for @@ -26,30 +39,34 @@ * superseded (4), * cessationOfOperation (5), * certificateHold (6), - * removeFromCRL (8) } + * -- value 7 is not used + * removeFromCRL (8), + * privilegeWithdrawn (9), + * aACompromise (10) } */ -# define OCSP_REVOKED_STATUS_NOSTATUS -1 -# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 -# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 -# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 -# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 -# define OCSP_REVOKED_STATUS_SUPERSEDED 4 -# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 -# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 -# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9 +# define OCSP_REVOKED_STATUS_AACOMPROMISE 10 # ifndef OPENSSL_NO_OCSP -# include # include # include # include # include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif /* Various flags and values */ @@ -67,19 +84,68 @@ extern "C" { # define OCSP_TRUSTOTHER 0x200 # define OCSP_RESPID_KEY 0x400 # define OCSP_NOTIME 0x800 +# define OCSP_PARTIAL_CHAIN 0x1000 typedef struct ocsp_cert_id_st OCSP_CERTID; - -DEFINE_STACK_OF(OCSP_CERTID) - typedef struct ocsp_one_request_st OCSP_ONEREQ; - -DEFINE_STACK_OF(OCSP_ONEREQ) - typedef struct ocsp_req_info_st OCSP_REQINFO; typedef struct ocsp_signature_st OCSP_SIGNATURE; typedef struct ocsp_request_st OCSP_REQUEST; +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_CERTID, OCSP_CERTID, OCSP_CERTID) +#define sk_OCSP_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_value(sk, idx) ((OCSP_CERTID *)OPENSSL_sk_value(ossl_check_const_OCSP_CERTID_sk_type(sk), (idx))) +#define sk_OCSP_CERTID_new(cmp) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new(ossl_check_OCSP_CERTID_compfunc_type(cmp))) +#define sk_OCSP_CERTID_new_null() ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_null()) +#define sk_OCSP_CERTID_new_reserve(cmp, n) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_CERTID_compfunc_type(cmp), (n))) +#define sk_OCSP_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_CERTID_sk_type(sk), (n)) +#define sk_OCSP_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_delete(sk, i) ((OCSP_CERTID *)OPENSSL_sk_delete(ossl_check_OCSP_CERTID_sk_type(sk), (i))) +#define sk_OCSP_CERTID_delete_ptr(sk, ptr) ((OCSP_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr))) +#define sk_OCSP_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_pop(sk) ((OCSP_CERTID *)OPENSSL_sk_pop(ossl_check_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_shift(sk) ((OCSP_CERTID *)OPENSSL_sk_shift(ossl_check_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_CERTID_sk_type(sk),ossl_check_OCSP_CERTID_freefunc_type(freefunc)) +#define sk_OCSP_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), (idx)) +#define sk_OCSP_CERTID_set(sk, idx, ptr) ((OCSP_CERTID *)OPENSSL_sk_set(ossl_check_OCSP_CERTID_sk_type(sk), (idx), ossl_check_OCSP_CERTID_type(ptr))) +#define sk_OCSP_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), pnum) +#define sk_OCSP_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_dup(sk) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_copyfunc_type(copyfunc), ossl_check_OCSP_CERTID_freefunc_type(freefunc))) +#define sk_OCSP_CERTID_set_cmp_func(sk, cmp) ((sk_OCSP_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_ONEREQ, OCSP_ONEREQ, OCSP_ONEREQ) +#define sk_OCSP_ONEREQ_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_value(sk, idx) ((OCSP_ONEREQ *)OPENSSL_sk_value(ossl_check_const_OCSP_ONEREQ_sk_type(sk), (idx))) +#define sk_OCSP_ONEREQ_new(cmp) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new(ossl_check_OCSP_ONEREQ_compfunc_type(cmp))) +#define sk_OCSP_ONEREQ_new_null() ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_null()) +#define sk_OCSP_ONEREQ_new_reserve(cmp, n) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_ONEREQ_compfunc_type(cmp), (n))) +#define sk_OCSP_ONEREQ_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_ONEREQ_sk_type(sk), (n)) +#define sk_OCSP_ONEREQ_free(sk) OPENSSL_sk_free(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_delete(sk, i) ((OCSP_ONEREQ *)OPENSSL_sk_delete(ossl_check_OCSP_ONEREQ_sk_type(sk), (i))) +#define sk_OCSP_ONEREQ_delete_ptr(sk, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr))) +#define sk_OCSP_ONEREQ_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_pop(sk) ((OCSP_ONEREQ *)OPENSSL_sk_pop(ossl_check_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_shift(sk) ((OCSP_ONEREQ *)OPENSSL_sk_shift(ossl_check_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_ONEREQ_sk_type(sk),ossl_check_OCSP_ONEREQ_freefunc_type(freefunc)) +#define sk_OCSP_ONEREQ_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), (idx)) +#define sk_OCSP_ONEREQ_set(sk, idx, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_set(ossl_check_OCSP_ONEREQ_sk_type(sk), (idx), ossl_check_OCSP_ONEREQ_type(ptr))) +#define sk_OCSP_ONEREQ_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), pnum) +#define sk_OCSP_ONEREQ_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_dup(sk) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_dup(ossl_check_const_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_copyfunc_type(copyfunc), ossl_check_OCSP_ONEREQ_freefunc_type(freefunc))) +#define sk_OCSP_ONEREQ_set_cmp_func(sk, cmp) ((sk_OCSP_ONEREQ_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_compfunc_type(cmp))) + + # define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 # define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 # define OCSP_RESPONSE_STATUS_INTERNALERROR 2 @@ -92,7 +158,33 @@ typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; # define V_OCSP_RESPID_NAME 0 # define V_OCSP_RESPID_KEY 1 -DEFINE_STACK_OF(OCSP_RESPID) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_RESPID, OCSP_RESPID, OCSP_RESPID) +#define sk_OCSP_RESPID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_value(sk, idx) ((OCSP_RESPID *)OPENSSL_sk_value(ossl_check_const_OCSP_RESPID_sk_type(sk), (idx))) +#define sk_OCSP_RESPID_new(cmp) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new(ossl_check_OCSP_RESPID_compfunc_type(cmp))) +#define sk_OCSP_RESPID_new_null() ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_null()) +#define sk_OCSP_RESPID_new_reserve(cmp, n) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_RESPID_compfunc_type(cmp), (n))) +#define sk_OCSP_RESPID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_RESPID_sk_type(sk), (n)) +#define sk_OCSP_RESPID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_delete(sk, i) ((OCSP_RESPID *)OPENSSL_sk_delete(ossl_check_OCSP_RESPID_sk_type(sk), (i))) +#define sk_OCSP_RESPID_delete_ptr(sk, ptr) ((OCSP_RESPID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr))) +#define sk_OCSP_RESPID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_pop(sk) ((OCSP_RESPID *)OPENSSL_sk_pop(ossl_check_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_shift(sk) ((OCSP_RESPID *)OPENSSL_sk_shift(ossl_check_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_RESPID_sk_type(sk),ossl_check_OCSP_RESPID_freefunc_type(freefunc)) +#define sk_OCSP_RESPID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), (idx)) +#define sk_OCSP_RESPID_set(sk, idx, ptr) ((OCSP_RESPID *)OPENSSL_sk_set(ossl_check_OCSP_RESPID_sk_type(sk), (idx), ossl_check_OCSP_RESPID_type(ptr))) +#define sk_OCSP_RESPID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), pnum) +#define sk_OCSP_RESPID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_dup(sk) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_copyfunc_type(copyfunc), ossl_check_OCSP_RESPID_freefunc_type(freefunc))) +#define sk_OCSP_RESPID_set_cmp_func(sk, cmp) ((sk_OCSP_RESPID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_compfunc_type(cmp))) + typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; @@ -103,7 +195,33 @@ typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; typedef struct ocsp_single_response_st OCSP_SINGLERESP; -DEFINE_STACK_OF(OCSP_SINGLERESP) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_SINGLERESP, OCSP_SINGLERESP, OCSP_SINGLERESP) +#define sk_OCSP_SINGLERESP_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_value(sk, idx) ((OCSP_SINGLERESP *)OPENSSL_sk_value(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), (idx))) +#define sk_OCSP_SINGLERESP_new(cmp) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp))) +#define sk_OCSP_SINGLERESP_new_null() ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_null()) +#define sk_OCSP_SINGLERESP_new_reserve(cmp, n) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp), (n))) +#define sk_OCSP_SINGLERESP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_SINGLERESP_sk_type(sk), (n)) +#define sk_OCSP_SINGLERESP_free(sk) OPENSSL_sk_free(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_delete(sk, i) ((OCSP_SINGLERESP *)OPENSSL_sk_delete(ossl_check_OCSP_SINGLERESP_sk_type(sk), (i))) +#define sk_OCSP_SINGLERESP_delete_ptr(sk, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr))) +#define sk_OCSP_SINGLERESP_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_pop(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_pop(ossl_check_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_shift(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_shift(ossl_check_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_SINGLERESP_sk_type(sk),ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc)) +#define sk_OCSP_SINGLERESP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), (idx)) +#define sk_OCSP_SINGLERESP_set(sk, idx, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_set(ossl_check_OCSP_SINGLERESP_sk_type(sk), (idx), ossl_check_OCSP_SINGLERESP_type(ptr))) +#define sk_OCSP_SINGLERESP_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), pnum) +#define sk_OCSP_SINGLERESP_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_dup(sk) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_dup(ossl_check_const_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_copyfunc_type(copyfunc), ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc))) +#define sk_OCSP_SINGLERESP_set_cmp_func(sk, cmp) ((sk_OCSP_SINGLERESP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_compfunc_type(cmp))) + typedef struct ocsp_response_data_st OCSP_RESPDATA; @@ -143,28 +261,37 @@ typedef struct ocsp_service_locator_st OCSP_SERVICELOC; ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) # define OCSP_CERTSTATUS_dup(cs)\ - (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ - (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) + (OCSP_CERTSTATUS*)ASN1_dup((i2d_of_void *)i2d_OCSP_CERTSTATUS,\ + (d2i_of_void *)d2i_OCSP_CERTSTATUS,(char *)(cs)) -OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); +DECLARE_ASN1_DUP_FUNCTION(OCSP_CERTID) +OSSL_HTTP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, + const OCSP_REQUEST *req, int buf_size); OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); -OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, - int maxline); -int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); -int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); -OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); -void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); -void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); -int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, - ASN1_VALUE *val); -int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, - const ASN1_ITEM *it); -BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); -int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); -int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); -int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, - const char *name, const char *value); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef OSSL_HTTP_REQ_CTX OCSP_REQ_CTX; +# define OCSP_REQ_CTX_new(io, buf_size) \ + OSSL_HTTP_REQ_CTX_new(io, io, buf_size) +# define OCSP_REQ_CTX_free OSSL_HTTP_REQ_CTX_free +# define OCSP_REQ_CTX_http(rctx, op, path) \ + (OSSL_HTTP_REQ_CTX_set_expected(rctx, NULL, 1 /* asn1 */, 0, 0) && \ + OSSL_HTTP_REQ_CTX_set_request_line(rctx, strcmp(op, "POST") == 0, \ + NULL, NULL, path)) +# define OCSP_REQ_CTX_add1_header OSSL_HTTP_REQ_CTX_add1_header +# define OCSP_REQ_CTX_i2d(r, it, req) \ + OSSL_HTTP_REQ_CTX_set1_req(r, "application/ocsp-request", it, req) +# define OCSP_REQ_CTX_set1_req(r, req) \ + OCSP_REQ_CTX_i2d(r, ASN1_ITEM_rptr(OCSP_REQUEST), (ASN1_VALUE *)(req)) +# define OCSP_REQ_CTX_nbio OSSL_HTTP_REQ_CTX_nbio +# define OCSP_REQ_CTX_nbio_d2i OSSL_HTTP_REQ_CTX_nbio_d2i +# define OCSP_sendreq_nbio(p, r) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(r, (ASN1_VALUE **)(p), \ + ASN1_ITEM_rptr(OCSP_RESPONSE)) +# define OCSP_REQ_CTX_get0_mem_bio OSSL_HTTP_REQ_CTX_get0_mem_bio +# define OCSP_set_max_response_length OSSL_HTTP_REQ_CTX_set_max_response_length +# endif OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, const X509 *issuer); @@ -181,7 +308,7 @@ int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); -int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); +int OCSP_request_set1_name(OCSP_REQUEST *req, const X509_NAME *nm); int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); int OCSP_request_sign(OCSP_REQUEST *req, @@ -226,8 +353,8 @@ int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, X509_STORE *store, unsigned long flags); -int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, - int *pssl); +# define OCSP_parse_url(url, host, port, path, ssl) \ + OSSL_HTTP_parse_url(url, ssl, NULL, host, port, NULL, path, NULL, NULL) int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); @@ -254,7 +381,11 @@ int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, X509 *signer, EVP_MD_CTX *ctx, STACK_OF(X509) *certs, unsigned long flags); int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key_ex(OCSP_RESPID *respid, X509 *cert, + OSSL_LIB_CTX *libctx, const char *propq); int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match_ex(OCSP_RESPID *respid, X509 *cert, OSSL_LIB_CTX *libctx, + const char *propq); int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); @@ -263,7 +394,7 @@ X509_EXTENSION *OCSP_accept_responses_new(char **oids); X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); -X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, const char **urls); +X509_EXTENSION *OCSP_url_svcloc_new(const X509_NAME *issuer, const char **urls); int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); @@ -348,5 +479,5 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, # ifdef __cplusplus } # endif -# endif +# endif /* !defined(OPENSSL_NO_OCSP) */ #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h.in new file mode 100644 index 00000000..e2cc2716 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h.in @@ -0,0 +1,387 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_OCSP_H +# define OPENSSL_OCSP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OCSP_H +# endif + +# include +# include +# include + +/* + * These definitions are outside the OPENSSL_NO_OCSP guard because although for + * historical reasons they have OCSP_* names, they can actually be used + * independently of OCSP. E.g. see RFC5280 + */ +/*- + * CRLReason ::= ENUMERATED { + * unspecified (0), + * keyCompromise (1), + * cACompromise (2), + * affiliationChanged (3), + * superseded (4), + * cessationOfOperation (5), + * certificateHold (6), + * -- value 7 is not used + * removeFromCRL (8), + * privilegeWithdrawn (9), + * aACompromise (10) } + */ +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9 +# define OCSP_REVOKED_STATUS_AACOMPROMISE 10 + + +# ifndef OPENSSL_NO_OCSP + +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Various flags and values */ + +# define OCSP_DEFAULT_NONCE_LENGTH 16 + +# define OCSP_NOCERTS 0x1 +# define OCSP_NOINTERN 0x2 +# define OCSP_NOSIGS 0x4 +# define OCSP_NOCHAIN 0x8 +# define OCSP_NOVERIFY 0x10 +# define OCSP_NOEXPLICIT 0x20 +# define OCSP_NOCASIGN 0x40 +# define OCSP_NODELEGATED 0x80 +# define OCSP_NOCHECKS 0x100 +# define OCSP_TRUSTOTHER 0x200 +# define OCSP_RESPID_KEY 0x400 +# define OCSP_NOTIME 0x800 +# define OCSP_PARTIAL_CHAIN 0x1000 + +typedef struct ocsp_cert_id_st OCSP_CERTID; +typedef struct ocsp_one_request_st OCSP_ONEREQ; +typedef struct ocsp_req_info_st OCSP_REQINFO; +typedef struct ocsp_signature_st OCSP_SIGNATURE; +typedef struct ocsp_request_st OCSP_REQUEST; + +{- + generate_stack_macros("OCSP_CERTID") + .generate_stack_macros("OCSP_ONEREQ"); +-} + +# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 +# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 +# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 +# define OCSP_RESPONSE_STATUS_TRYLATER 3 +# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 +# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 + +typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; + +# define V_OCSP_RESPID_NAME 0 +# define V_OCSP_RESPID_KEY 1 + +{- + generate_stack_macros("OCSP_RESPID"); +-} + +typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; + +# define V_OCSP_CERTSTATUS_GOOD 0 +# define V_OCSP_CERTSTATUS_REVOKED 1 +# define V_OCSP_CERTSTATUS_UNKNOWN 2 + +typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; +typedef struct ocsp_single_response_st OCSP_SINGLERESP; + +{- + generate_stack_macros("OCSP_SINGLERESP"); +-} + +typedef struct ocsp_response_data_st OCSP_RESPDATA; + +typedef struct ocsp_basic_response_st OCSP_BASICRESP; + +typedef struct ocsp_crl_id_st OCSP_CRLID; +typedef struct ocsp_service_locator_st OCSP_SERVICELOC; + +# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" +# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" + +# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) + +# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) + +# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ + (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST, \ + bp,(char **)(x),cb,NULL) + +# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb) (OCSP_RESPONSE *)PEM_ASN1_read_bio(\ + (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE, \ + bp,(char **)(x),cb,NULL) + +# define PEM_write_bio_OCSP_REQUEST(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define PEM_write_bio_OCSP_RESPONSE(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) + +# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) + +# define ASN1_BIT_STRING_digest(data,type,md,len) \ + ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) + +# define OCSP_CERTSTATUS_dup(cs)\ + (OCSP_CERTSTATUS*)ASN1_dup((i2d_of_void *)i2d_OCSP_CERTSTATUS,\ + (d2i_of_void *)d2i_OCSP_CERTSTATUS,(char *)(cs)) + +DECLARE_ASN1_DUP_FUNCTION(OCSP_CERTID) + +OSSL_HTTP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, + const OCSP_REQUEST *req, int buf_size); +OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef OSSL_HTTP_REQ_CTX OCSP_REQ_CTX; +# define OCSP_REQ_CTX_new(io, buf_size) \ + OSSL_HTTP_REQ_CTX_new(io, io, buf_size) +# define OCSP_REQ_CTX_free OSSL_HTTP_REQ_CTX_free +# define OCSP_REQ_CTX_http(rctx, op, path) \ + (OSSL_HTTP_REQ_CTX_set_expected(rctx, NULL, 1 /* asn1 */, 0, 0) && \ + OSSL_HTTP_REQ_CTX_set_request_line(rctx, strcmp(op, "POST") == 0, \ + NULL, NULL, path)) +# define OCSP_REQ_CTX_add1_header OSSL_HTTP_REQ_CTX_add1_header +# define OCSP_REQ_CTX_i2d(r, it, req) \ + OSSL_HTTP_REQ_CTX_set1_req(r, "application/ocsp-request", it, req) +# define OCSP_REQ_CTX_set1_req(r, req) \ + OCSP_REQ_CTX_i2d(r, ASN1_ITEM_rptr(OCSP_REQUEST), (ASN1_VALUE *)(req)) +# define OCSP_REQ_CTX_nbio OSSL_HTTP_REQ_CTX_nbio +# define OCSP_REQ_CTX_nbio_d2i OSSL_HTTP_REQ_CTX_nbio_d2i +# define OCSP_sendreq_nbio(p, r) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(r, (ASN1_VALUE **)(p), \ + ASN1_ITEM_rptr(OCSP_RESPONSE)) +# define OCSP_REQ_CTX_get0_mem_bio OSSL_HTTP_REQ_CTX_get0_mem_bio +# define OCSP_set_max_response_length OSSL_HTTP_REQ_CTX_set_max_response_length +# endif + +OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, + const X509 *issuer); + +OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, + const X509_NAME *issuerName, + const ASN1_BIT_STRING *issuerKey, + const ASN1_INTEGER *serialNumber); + +OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); + +int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); +int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); +int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); +int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); + +int OCSP_request_set1_name(OCSP_REQUEST *req, const X509_NAME *nm); +int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); + +int OCSP_request_sign(OCSP_REQUEST *req, + X509 *signer, + EVP_PKEY *key, + const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); + +int OCSP_response_status(OCSP_RESPONSE *resp); +OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); + +const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); +const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs); +const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer, + STACK_OF(X509) *extra_certs); + +int OCSP_resp_count(OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); +const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(const OCSP_BASICRESP* bs); +const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, + const ASN1_OCTET_STRING **pid, + const X509_NAME **pname); +int OCSP_resp_get1_id(const OCSP_BASICRESP *bs, + ASN1_OCTET_STRING **pid, + X509_NAME **pname); + +int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); +int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, + int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, + ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); + +int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, + X509_STORE *store, unsigned long flags); + +# define OCSP_parse_url(url, host, port, path, ssl) \ + OSSL_HTTP_parse_url(url, ssl, NULL, host, port, NULL, path, NULL, NULL) + +int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); +int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); + +int OCSP_request_onereq_count(OCSP_REQUEST *req); +OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); +OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); +int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, + ASN1_OCTET_STRING **pikeyHash, + ASN1_INTEGER **pserial, OCSP_CERTID *cid); +int OCSP_request_is_signed(OCSP_REQUEST *req); +OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, + OCSP_CERTID *cid, + int status, int reason, + ASN1_TIME *revtime, + ASN1_TIME *thisupd, + ASN1_TIME *nextupd); +int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); +int OCSP_basic_sign(OCSP_BASICRESP *brsp, + X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, + X509 *signer, EVP_MD_CTX *ctx, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key_ex(OCSP_RESPID *respid, X509 *cert, + OSSL_LIB_CTX *libctx, const char *propq); +int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match_ex(OCSP_RESPID *respid, X509 *cert, OSSL_LIB_CTX *libctx, + const char *propq); +int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); + +X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); + +X509_EXTENSION *OCSP_accept_responses_new(char **oids); + +X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); + +X509_EXTENSION *OCSP_url_svcloc_new(const X509_NAME *issuer, const char **urls); + +int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); +int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); +int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); +X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); +X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); +void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, + int *idx); +int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); + +int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); +int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); +int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, const ASN1_OBJECT *obj, int lastpos); +int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); +X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); +X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); +void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); +int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); + +int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); +int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); +int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); +X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); +void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, + int *idx); +int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); + +int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); +int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); +int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); +X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); +void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, + int *idx); +int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); +const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x); + +DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) +DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) +DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) +DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) +DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) +DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) +DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) + +const char *OCSP_response_status_str(long s); +const char *OCSP_cert_status_str(long s); +const char *OCSP_crl_reason_str(long s); + +int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); +int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); + +int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, + X509_STORE *st, unsigned long flags); + + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_OCSP) */ +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsperr.h index 8dd9e01a..46a0523c 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsperr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsperr.h @@ -1,57 +1,34 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OCSPERR_H -# define HEADER_OCSPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_OCSPERR_H +# define OPENSSL_OCSPERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_OCSP -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OCSP_strings(void); - -/* - * OCSP function codes. - */ -# define OCSP_F_D2I_OCSP_NONCE 102 -# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 -# define OCSP_F_OCSP_BASIC_SIGN 104 -# define OCSP_F_OCSP_BASIC_SIGN_CTX 119 -# define OCSP_F_OCSP_BASIC_VERIFY 105 -# define OCSP_F_OCSP_CERT_ID_NEW 101 -# define OCSP_F_OCSP_CHECK_DELEGATED 106 -# define OCSP_F_OCSP_CHECK_IDS 107 -# define OCSP_F_OCSP_CHECK_ISSUER 108 -# define OCSP_F_OCSP_CHECK_VALIDITY 115 -# define OCSP_F_OCSP_MATCH_ISSUERID 109 -# define OCSP_F_OCSP_PARSE_URL 114 -# define OCSP_F_OCSP_REQUEST_SIGN 110 -# define OCSP_F_OCSP_REQUEST_VERIFY 116 -# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 -# define OCSP_F_PARSE_HTTP_LINE1 118 /* * OCSP reason codes. */ # define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 # define OCSP_R_DIGEST_ERR 102 +# define OCSP_R_DIGEST_NAME_ERR 106 +# define OCSP_R_DIGEST_SIZE_ERR 107 # define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 # define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 -# define OCSP_R_ERROR_PARSING_URL 121 # define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 # define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 # define OCSP_R_NOT_BASIC_RESPONSE 104 @@ -63,8 +40,6 @@ int ERR_load_OCSP_strings(void); # define OCSP_R_REQUEST_NOT_SIGNED 128 # define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 # define OCSP_R_ROOT_CA_NOT_TRUSTED 112 -# define OCSP_R_SERVER_RESPONSE_ERROR 114 -# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 # define OCSP_R_SIGNATURE_FAILURE 117 # define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 # define OCSP_R_STATUS_EXPIRED 125 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h index 588a6544..1e83371f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h @@ -1,200 +1,17 @@ /* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/opensslconf.h.in + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OPENSSL_OPENSSLCONF_H +# define OPENSSL_OPENSSLCONF_H +# pragma once -#ifdef __cplusplus -extern "C" { -#endif +# include +# include -#ifdef OPENSSL_ALGORITHM_DEFINES -# error OPENSSL_ALGORITHM_DEFINES no longer supported -#endif - -/* - * OpenSSL was configured with the following options: - */ - -#ifndef OPENSSL_NO_MD2 -# define OPENSSL_NO_MD2 -#endif -#ifndef OPENSSL_NO_RC5 -# define OPENSSL_NO_RC5 -#endif -#ifndef OPENSSL_RAND_SEED_OS -# define OPENSSL_RAND_SEED_OS -#endif -#ifndef OPENSSL_NO_AFALGENG -# define OPENSSL_NO_AFALGENG -#endif -#ifndef OPENSSL_NO_ASAN -# define OPENSSL_NO_ASAN -#endif -#ifndef OPENSSL_NO_CRYPTO_MDEBUG -# define OPENSSL_NO_CRYPTO_MDEBUG -#endif -#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -#endif -#ifndef OPENSSL_NO_DEVCRYPTOENG -# define OPENSSL_NO_DEVCRYPTOENG -#endif -#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -# define OPENSSL_NO_EC_NISTP_64_GCC_128 -#endif -#ifndef OPENSSL_NO_EGD -# define OPENSSL_NO_EGD -#endif -#ifndef OPENSSL_NO_EXTERNAL_TESTS -# define OPENSSL_NO_EXTERNAL_TESTS -#endif -#ifndef OPENSSL_NO_FUZZ_AFL -# define OPENSSL_NO_FUZZ_AFL -#endif -#ifndef OPENSSL_NO_FUZZ_LIBFUZZER -# define OPENSSL_NO_FUZZ_LIBFUZZER -#endif -#ifndef OPENSSL_NO_HEARTBEATS -# define OPENSSL_NO_HEARTBEATS -#endif -#ifndef OPENSSL_NO_MSAN -# define OPENSSL_NO_MSAN -#endif -#ifndef OPENSSL_NO_SCTP -# define OPENSSL_NO_SCTP -#endif -#ifndef OPENSSL_NO_SSL_TRACE -# define OPENSSL_NO_SSL_TRACE -#endif -#ifndef OPENSSL_NO_SSL3 -# define OPENSSL_NO_SSL3 -#endif -#ifndef OPENSSL_NO_SSL3_METHOD -# define OPENSSL_NO_SSL3_METHOD -#endif -#ifndef OPENSSL_NO_TESTS -# define OPENSSL_NO_TESTS -#endif -#ifndef OPENSSL_NO_UBSAN -# define OPENSSL_NO_UBSAN -#endif -#ifndef OPENSSL_NO_UNIT_TEST -# define OPENSSL_NO_UNIT_TEST -#endif -#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS -# define OPENSSL_NO_WEAK_SSL_CIPHERS -#endif -#ifndef OPENSSL_NO_DYNAMIC_ENGINE -# define OPENSSL_NO_DYNAMIC_ENGINE -#endif - - -/* - * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers - * don't like that. This will hopefully silence them. - */ -#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; - -/* - * Applications should use -DOPENSSL_API_COMPAT= to suppress the - * declarations of functions deprecated in or before . Otherwise, they - * still won't see them if the library has been built to disable deprecated - * functions. - */ -#ifndef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# elif defined(__SUNPRO_C) -# if (__SUNPRO_C >= 0x5130) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# endif -#endif - -#ifndef OPENSSL_FILE -# ifdef OPENSSL_NO_FILENAMES -# define OPENSSL_FILE "" -# define OPENSSL_LINE 0 -# else -# define OPENSSL_FILE __FILE__ -# define OPENSSL_LINE __LINE__ -# endif -#endif - -#ifndef OPENSSL_MIN_API -# define OPENSSL_MIN_API 0 -#endif - -#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API -# undef OPENSSL_API_COMPAT -# define OPENSSL_API_COMPAT OPENSSL_MIN_API -#endif - -/* - * Do not deprecate things to be deprecated in version 1.2.0 before the - * OpenSSL version number matches. - */ -#if OPENSSL_VERSION_NUMBER < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) f; -#elif OPENSSL_API_COMPAT < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_2_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10100000L -# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_1_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10000000L -# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_0_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x00908000L -# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_0_9_8(f) -#endif - -/* Generate 80386 code? */ -#undef I386_ONLY - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD - -#undef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* - * The following are cipher-specific, but are part of the public API. - */ -#if !defined(OPENSSL_SYS_UEFI) -# undef BN_LLONG -/* Only one for the following should be defined */ -# define SIXTY_FOUR_BIT_LONG -# undef SIXTY_FOUR_BIT -# undef THIRTY_TWO_BIT -#endif - -#define RC4_INT unsigned char - -#ifdef __cplusplus -} -#endif +#endif /* OPENSSL_OPENSSLCONF_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h.in deleted file mode 100644 index 06270922..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h.in +++ /dev/null @@ -1,160 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef OPENSSL_ALGORITHM_DEFINES -# error OPENSSL_ALGORITHM_DEFINES no longer supported -#endif - -/* - * OpenSSL was configured with the following options: - */ - -{- if (@{$config{openssl_sys_defines}}) { - foreach (@{$config{openssl_sys_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_ 1\n"; - $OUT .= "#endif\n"; - } - } - foreach (@{$config{openssl_api_defines}}) { - (my $macro, my $value) = $_ =~ /^(.*?)=(.*?)$/; - $OUT .= "#define $macro $value\n"; - } - if (@{$config{openssl_algorithm_defines}}) { - foreach (@{$config{openssl_algorithm_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - if (@{$config{openssl_thread_defines}}) { - foreach (@{$config{openssl_thread_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - if (@{$config{openssl_other_defines}}) { - foreach (@{$config{openssl_other_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - ""; --} - -/* - * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers - * don't like that. This will hopefully silence them. - */ -#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; - -/* - * Applications should use -DOPENSSL_API_COMPAT= to suppress the - * declarations of functions deprecated in or before . Otherwise, they - * still won't see them if the library has been built to disable deprecated - * functions. - */ -#ifndef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# elif defined(__SUNPRO_C) -# if (__SUNPRO_C >= 0x5130) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# endif -#endif - -#ifndef OPENSSL_FILE -# ifdef OPENSSL_NO_FILENAMES -# define OPENSSL_FILE "" -# define OPENSSL_LINE 0 -# else -# define OPENSSL_FILE __FILE__ -# define OPENSSL_LINE __LINE__ -# endif -#endif - -#ifndef OPENSSL_MIN_API -# define OPENSSL_MIN_API 0 -#endif - -#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API -# undef OPENSSL_API_COMPAT -# define OPENSSL_API_COMPAT OPENSSL_MIN_API -#endif - -/* - * Do not deprecate things to be deprecated in version 1.2.0 before the - * OpenSSL version number matches. - */ -#if OPENSSL_VERSION_NUMBER < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) f; -#elif OPENSSL_API_COMPAT < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_2_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10100000L -# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_1_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10000000L -# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_0_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x00908000L -# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_0_9_8(f) -#endif - -/* Generate 80386 code? */ -{- $config{processor} eq "386" ? "#define" : "#undef" -} I386_ONLY - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD {- $target{unistd} -} - -{- $config{export_var_as_fn} ? "#define" : "#undef" -} OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* - * The following are cipher-specific, but are part of the public API. - */ -#if !defined(OPENSSL_SYS_UEFI) -{- $config{bn_ll} ? "# define" : "# undef" -} BN_LLONG -/* Only one for the following should be defined */ -{- $config{b64l} ? "# define" : "# undef" -} SIXTY_FOUR_BIT_LONG -{- $config{b64} ? "# define" : "# undef" -} SIXTY_FOUR_BIT -{- $config{b32} ? "# define" : "# undef" -} THIRTY_TWO_BIT -#endif - -#define RC4_INT {- $config{rc4_int} -} - -#ifdef __cplusplus -} -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h index 5667d471..6b7364f4 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h @@ -1,101 +1,114 @@ /* - * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslv.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OPENSSLV_H -# define HEADER_OPENSSLV_H +#ifndef OPENSSL_OPENSSLV_H +# define OPENSSL_OPENSSLV_H +# pragma once -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -/*- - * Numeric release version identifier: - * MNNFFPPS: major minor fix patch status - * The status nibble has one of the values 0 for development, 1 to e for betas - * 1 to 14, and f for release. The patch level is exactly that. - * For example: - * 0.9.3-dev 0x00903000 - * 0.9.3-beta1 0x00903001 - * 0.9.3-beta2-dev 0x00903002 - * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) - * 0.9.3 0x0090300f - * 0.9.3a 0x0090301f - * 0.9.4 0x0090400f - * 1.2.3z 0x102031af - * - * For continuity reasons (because 0.9.5 is already out, and is coded - * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level - * part is slightly different, by setting the highest bit. This means - * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start - * with 0x0090600S... - * - * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) - * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for - * major minor fix final patch/beta) +/* + * SECTION 1: VERSION DATA. These will change for each release */ -# define OPENSSL_VERSION_NUMBER 0x1010117fL -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1w 11 Sep 2023" -/*- - * The macros below are to be used for shared library (.so, .dll, ...) - * versioning. That kind of versioning works a bit differently between - * operating systems. The most usual scheme is to set a major and a minor - * number, and have the runtime loader check that the major number is equal - * to what it was at application link time, while the minor number has to - * be greater or equal to what it was at application link time. With this - * scheme, the version number is usually part of the file name, like this: +/* + * Base version macros * - * libcrypto.so.0.9 - * - * Some unixen also make a softlink with the major version number only: - * - * libcrypto.so.0 - * - * On Tru64 and IRIX 6.x it works a little bit differently. There, the - * shared library version is stored in the file, and is actually a series - * of versions, separated by colons. The rightmost version present in the - * library when linking an application is stored in the application to be - * matched at run time. When the application is run, a check is done to - * see if the library version stored in the application matches any of the - * versions in the version string of the library itself. - * This version string can be constructed in any way, depending on what - * kind of matching is desired. However, to implement the same scheme as - * the one used in the other unixen, all compatible versions, from lowest - * to highest, should be part of the string. Consecutive builds would - * give the following versions strings: - * - * 3.0 - * 3.0:3.1 - * 3.0:3.1:3.2 - * 4.0 - * 4.0:4.1 - * - * Notice how version 4 is completely incompatible with version, and - * therefore give the breach you can see. - * - * There may be other schemes as well that I haven't yet discovered. - * - * So, here's the way it works here: first of all, the library version - * number doesn't need at all to match the overall OpenSSL version. - * However, it's nice and more understandable if it actually does. - * The current library version is stored in the macro SHLIB_VERSION_NUMBER, - * which is just a piece of text in the format "M.m.e" (Major, minor, edit). - * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, - * we need to keep a history of version numbers, which is done in the - * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and - * should only keep the versions that are binary compatible with the current. + * These macros express version number MAJOR.MINOR.PATCH exactly */ -# define SHLIB_VERSION_HISTORY "" -# define SHLIB_VERSION_NUMBER "1.1" +# define OPENSSL_VERSION_MAJOR 3 +# define OPENSSL_VERSION_MINOR 1 +# define OPENSSL_VERSION_PATCH 3 +/* + * Additional version information + * + * These are also part of the new version scheme, but aren't part + * of the version number itself. + */ -#ifdef __cplusplus +/* Could be: #define OPENSSL_VERSION_PRE_RELEASE "-alpha.1" */ +# define OPENSSL_VERSION_PRE_RELEASE "" +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+fips" */ +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+vendor.1" */ +# define OPENSSL_VERSION_BUILD_METADATA "" + +/* + * Note: The OpenSSL Project will never define OPENSSL_VERSION_BUILD_METADATA + * to be anything but the empty string. Its use is entirely reserved for + * others + */ + +/* + * Shared library version + * + * This is strictly to express ABI version, which may or may not + * be related to the API version expressed with the macros above. + * This is defined in free form. + */ +# define OPENSSL_SHLIB_VERSION 3 + +/* + * SECTION 2: USEFUL MACROS + */ + +/* For checking general API compatibility when preprocessing */ +# define OPENSSL_VERSION_PREREQ(maj,min) \ + ((OPENSSL_VERSION_MAJOR << 16) + OPENSSL_VERSION_MINOR >= ((maj) << 16) + (min)) + +/* + * Macros to get the version in easily digested string form, both the short + * "MAJOR.MINOR.PATCH" variant (where MAJOR, MINOR and PATCH are replaced + * with the values from the corresponding OPENSSL_VERSION_ macros) and the + * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and + * OPENSSL_VERSION_BUILD_METADATA_STR appended. + */ +# define OPENSSL_VERSION_STR "3.1.3" +# define OPENSSL_FULL_VERSION_STR "3.1.3" + +/* + * SECTION 3: ADDITIONAL METADATA + * + * These strings are defined separately to allow them to be parsable. + */ +# define OPENSSL_RELEASE_DATE "19 Sep 2023" + +/* + * SECTION 4: BACKWARD COMPATIBILITY + */ + +# define OPENSSL_VERSION_TEXT "OpenSSL 3.1.3 19 Sep 2023" + +/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ +# ifdef OPENSSL_VERSION_PRE_RELEASE +# define _OPENSSL_VERSION_PRE_RELEASE 0x0L +# else +# define _OPENSSL_VERSION_PRE_RELEASE 0xfL +# endif +# define OPENSSL_VERSION_NUMBER \ + ( (OPENSSL_VERSION_MAJOR<<28) \ + |(OPENSSL_VERSION_MINOR<<20) \ + |(OPENSSL_VERSION_PATCH<<4) \ + |_OPENSSL_VERSION_PRE_RELEASE ) + +# ifdef __cplusplus } -#endif -#endif /* HEADER_OPENSSLV_H */ +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OPENSSLV_H +# endif + +#endif /* OPENSSL_OPENSSLV_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h.in new file mode 100644 index 00000000..3f47a2ac --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h.in @@ -0,0 +1,113 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_OPENSSLV_H +# define OPENSSL_OPENSSLV_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * SECTION 1: VERSION DATA. These will change for each release + */ + +/* + * Base version macros + * + * These macros express version number MAJOR.MINOR.PATCH exactly + */ +# define OPENSSL_VERSION_MAJOR {- $config{major} -} +# define OPENSSL_VERSION_MINOR {- $config{minor} -} +# define OPENSSL_VERSION_PATCH {- $config{patch} -} + +/* + * Additional version information + * + * These are also part of the new version scheme, but aren't part + * of the version number itself. + */ + +/* Could be: #define OPENSSL_VERSION_PRE_RELEASE "-alpha.1" */ +# define OPENSSL_VERSION_PRE_RELEASE "{- $config{prerelease} -}" +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+fips" */ +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+vendor.1" */ +# define OPENSSL_VERSION_BUILD_METADATA "{- $config{build_metadata} -}" + +/* + * Note: The OpenSSL Project will never define OPENSSL_VERSION_BUILD_METADATA + * to be anything but the empty string. Its use is entirely reserved for + * others + */ + +/* + * Shared library version + * + * This is strictly to express ABI version, which may or may not + * be related to the API version expressed with the macros above. + * This is defined in free form. + */ +# define OPENSSL_SHLIB_VERSION {- $config{shlib_version} -} + +/* + * SECTION 2: USEFUL MACROS + */ + +/* For checking general API compatibility when preprocessing */ +# define OPENSSL_VERSION_PREREQ(maj,min) \ + ((OPENSSL_VERSION_MAJOR << 16) + OPENSSL_VERSION_MINOR >= ((maj) << 16) + (min)) + +/* + * Macros to get the version in easily digested string form, both the short + * "MAJOR.MINOR.PATCH" variant (where MAJOR, MINOR and PATCH are replaced + * with the values from the corresponding OPENSSL_VERSION_ macros) and the + * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and + * OPENSSL_VERSION_BUILD_METADATA_STR appended. + */ +# define OPENSSL_VERSION_STR "{- $config{version} -}" +# define OPENSSL_FULL_VERSION_STR "{- $config{full_version} -}" + +/* + * SECTION 3: ADDITIONAL METADATA + * + * These strings are defined separately to allow them to be parsable. + */ +# define OPENSSL_RELEASE_DATE "{- $config{release_date} -}" + +/* + * SECTION 4: BACKWARD COMPATIBILITY + */ + +# define OPENSSL_VERSION_TEXT "OpenSSL {- "$config{full_version} $config{release_date}" -}" + +/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ +# ifdef OPENSSL_VERSION_PRE_RELEASE +# define _OPENSSL_VERSION_PRE_RELEASE 0x0L +# else +# define _OPENSSL_VERSION_PRE_RELEASE 0xfL +# endif +# define OPENSSL_VERSION_NUMBER \ + ( (OPENSSL_VERSION_MAJOR<<28) \ + |(OPENSSL_VERSION_MINOR<<20) \ + |(OPENSSL_VERSION_PATCH<<4) \ + |_OPENSSL_VERSION_PRE_RELEASE ) + +# ifdef __cplusplus +} +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OPENSSLV_H +# endif + +#endif /* OPENSSL_OPENSSLV_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ossl_typ.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ossl_typ.h index e0edfaaf..82a58988 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ossl_typ.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ossl_typ.h @@ -1,197 +1,16 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OPENSSL_TYPES_H -# define HEADER_OPENSSL_TYPES_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# ifdef NO_ASN1_TYPEDEFS -# define ASN1_INTEGER ASN1_STRING -# define ASN1_ENUMERATED ASN1_STRING -# define ASN1_BIT_STRING ASN1_STRING -# define ASN1_OCTET_STRING ASN1_STRING -# define ASN1_PRINTABLESTRING ASN1_STRING -# define ASN1_T61STRING ASN1_STRING -# define ASN1_IA5STRING ASN1_STRING -# define ASN1_UTCTIME ASN1_STRING -# define ASN1_GENERALIZEDTIME ASN1_STRING -# define ASN1_TIME ASN1_STRING -# define ASN1_GENERALSTRING ASN1_STRING -# define ASN1_UNIVERSALSTRING ASN1_STRING -# define ASN1_BMPSTRING ASN1_STRING -# define ASN1_VISIBLESTRING ASN1_STRING -# define ASN1_UTF8STRING ASN1_STRING -# define ASN1_BOOLEAN int -# define ASN1_NULL int -# else -typedef struct asn1_string_st ASN1_INTEGER; -typedef struct asn1_string_st ASN1_ENUMERATED; -typedef struct asn1_string_st ASN1_BIT_STRING; -typedef struct asn1_string_st ASN1_OCTET_STRING; -typedef struct asn1_string_st ASN1_PRINTABLESTRING; -typedef struct asn1_string_st ASN1_T61STRING; -typedef struct asn1_string_st ASN1_IA5STRING; -typedef struct asn1_string_st ASN1_GENERALSTRING; -typedef struct asn1_string_st ASN1_UNIVERSALSTRING; -typedef struct asn1_string_st ASN1_BMPSTRING; -typedef struct asn1_string_st ASN1_UTCTIME; -typedef struct asn1_string_st ASN1_TIME; -typedef struct asn1_string_st ASN1_GENERALIZEDTIME; -typedef struct asn1_string_st ASN1_VISIBLESTRING; -typedef struct asn1_string_st ASN1_UTF8STRING; -typedef struct asn1_string_st ASN1_STRING; -typedef int ASN1_BOOLEAN; -typedef int ASN1_NULL; -# endif - -typedef struct asn1_object_st ASN1_OBJECT; - -typedef struct ASN1_ITEM_st ASN1_ITEM; -typedef struct asn1_pctx_st ASN1_PCTX; -typedef struct asn1_sctx_st ASN1_SCTX; - -# ifdef _WIN32 -# undef X509_NAME -# undef X509_EXTENSIONS -# undef PKCS7_ISSUER_AND_SERIAL -# undef PKCS7_SIGNER_INFO -# undef OCSP_REQUEST -# undef OCSP_RESPONSE -# endif - -# ifdef BIGNUM -# undef BIGNUM -# endif -struct dane_st; -typedef struct bio_st BIO; -typedef struct bignum_st BIGNUM; -typedef struct bignum_ctx BN_CTX; -typedef struct bn_blinding_st BN_BLINDING; -typedef struct bn_mont_ctx_st BN_MONT_CTX; -typedef struct bn_recp_ctx_st BN_RECP_CTX; -typedef struct bn_gencb_st BN_GENCB; - -typedef struct buf_mem_st BUF_MEM; - -typedef struct evp_cipher_st EVP_CIPHER; -typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; -typedef struct evp_md_st EVP_MD; -typedef struct evp_md_ctx_st EVP_MD_CTX; -typedef struct evp_pkey_st EVP_PKEY; - -typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; - -typedef struct evp_pkey_method_st EVP_PKEY_METHOD; -typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; - -typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; - -typedef struct hmac_ctx_st HMAC_CTX; - -typedef struct dh_st DH; -typedef struct dh_method DH_METHOD; - -typedef struct dsa_st DSA; -typedef struct dsa_method DSA_METHOD; - -typedef struct rsa_st RSA; -typedef struct rsa_meth_st RSA_METHOD; -typedef struct rsa_pss_params_st RSA_PSS_PARAMS; - -typedef struct ec_key_st EC_KEY; -typedef struct ec_key_method_st EC_KEY_METHOD; - -typedef struct rand_meth_st RAND_METHOD; -typedef struct rand_drbg_st RAND_DRBG; - -typedef struct ssl_dane_st SSL_DANE; -typedef struct x509_st X509; -typedef struct X509_algor_st X509_ALGOR; -typedef struct X509_crl_st X509_CRL; -typedef struct x509_crl_method_st X509_CRL_METHOD; -typedef struct x509_revoked_st X509_REVOKED; -typedef struct X509_name_st X509_NAME; -typedef struct X509_pubkey_st X509_PUBKEY; -typedef struct x509_store_st X509_STORE; -typedef struct x509_store_ctx_st X509_STORE_CTX; - -typedef struct x509_object_st X509_OBJECT; -typedef struct x509_lookup_st X509_LOOKUP; -typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; -typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; - -typedef struct x509_sig_info_st X509_SIG_INFO; - -typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; - -typedef struct v3_ext_ctx X509V3_CTX; -typedef struct conf_st CONF; -typedef struct ossl_init_settings_st OPENSSL_INIT_SETTINGS; - -typedef struct ui_st UI; -typedef struct ui_method_st UI_METHOD; - -typedef struct engine_st ENGINE; -typedef struct ssl_st SSL; -typedef struct ssl_ctx_st SSL_CTX; - -typedef struct comp_ctx_st COMP_CTX; -typedef struct comp_method_st COMP_METHOD; - -typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; -typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; -typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; -typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; - -typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; -typedef struct DIST_POINT_st DIST_POINT; -typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; -typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; - -typedef struct crypto_ex_data_st CRYPTO_EX_DATA; - -typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; -typedef struct ocsp_response_st OCSP_RESPONSE; -typedef struct ocsp_responder_id_st OCSP_RESPID; - -typedef struct sct_st SCT; -typedef struct sct_ctx_st SCT_CTX; -typedef struct ctlog_st CTLOG; -typedef struct ctlog_store_st CTLOG_STORE; -typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; - -typedef struct ossl_store_info_st OSSL_STORE_INFO; -typedef struct ossl_store_search_st OSSL_STORE_SEARCH; - -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ - defined(INTMAX_MAX) && defined(UINTMAX_MAX) -typedef intmax_t ossl_intmax_t; -typedef uintmax_t ossl_uintmax_t; -#else /* - * Not long long, because the C-library can only be expected to provide - * strtoll(), strtoull() at the same time as intmax_t and strtoimax(), - * strtoumax(). Since we use these for parsing arguments, we need the - * conversion functions, not just the sizes. + * The original was renamed to + * + * This header file only exists for compatibility reasons with older + * applications which #include . */ -typedef long ossl_intmax_t; -typedef unsigned long ossl_uintmax_t; -#endif - -#ifdef __cplusplus -} -#endif -#endif /* def HEADER_OPENSSL_TYPES_H */ +# include diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/param_build.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/param_build.h new file mode 100644 index 00000000..f29fdb29 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/param_build.h @@ -0,0 +1,63 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PARAM_BUILD_H +# define OPENSSL_PARAM_BUILD_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_PARAM_BLD *OSSL_PARAM_BLD_new(void); +OSSL_PARAM *OSSL_PARAM_BLD_to_param(OSSL_PARAM_BLD *bld); +void OSSL_PARAM_BLD_free(OSSL_PARAM_BLD *bld); + +int OSSL_PARAM_BLD_push_int(OSSL_PARAM_BLD *bld, const char *key, int val); +int OSSL_PARAM_BLD_push_uint(OSSL_PARAM_BLD *bld, const char *key, + unsigned int val); +int OSSL_PARAM_BLD_push_long(OSSL_PARAM_BLD *bld, const char *key, + long int val); +int OSSL_PARAM_BLD_push_ulong(OSSL_PARAM_BLD *bld, const char *key, + unsigned long int val); +int OSSL_PARAM_BLD_push_int32(OSSL_PARAM_BLD *bld, const char *key, + int32_t val); +int OSSL_PARAM_BLD_push_uint32(OSSL_PARAM_BLD *bld, const char *key, + uint32_t val); +int OSSL_PARAM_BLD_push_int64(OSSL_PARAM_BLD *bld, const char *key, + int64_t val); +int OSSL_PARAM_BLD_push_uint64(OSSL_PARAM_BLD *bld, const char *key, + uint64_t val); +int OSSL_PARAM_BLD_push_size_t(OSSL_PARAM_BLD *bld, const char *key, + size_t val); +int OSSL_PARAM_BLD_push_time_t(OSSL_PARAM_BLD *bld, const char *key, + time_t val); +int OSSL_PARAM_BLD_push_double(OSSL_PARAM_BLD *bld, const char *key, + double val); +int OSSL_PARAM_BLD_push_BN(OSSL_PARAM_BLD *bld, const char *key, + const BIGNUM *bn); +int OSSL_PARAM_BLD_push_BN_pad(OSSL_PARAM_BLD *bld, const char *key, + const BIGNUM *bn, size_t sz); +int OSSL_PARAM_BLD_push_utf8_string(OSSL_PARAM_BLD *bld, const char *key, + const char *buf, size_t bsize); +int OSSL_PARAM_BLD_push_utf8_ptr(OSSL_PARAM_BLD *bld, const char *key, + char *buf, size_t bsize); +int OSSL_PARAM_BLD_push_octet_string(OSSL_PARAM_BLD *bld, const char *key, + const void *buf, size_t bsize); +int OSSL_PARAM_BLD_push_octet_ptr(OSSL_PARAM_BLD *bld, const char *key, + void *buf, size_t bsize); + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_PARAM_BUILD_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/params.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/params.h new file mode 100644 index 00000000..d75eab07 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/params.h @@ -0,0 +1,160 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PARAMS_H +# define OPENSSL_PARAMS_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_PARAM_UNMODIFIED ((size_t)-1) + +# define OSSL_PARAM_END \ + { NULL, 0, NULL, 0, 0 } + +# define OSSL_PARAM_DEFN(key, type, addr, sz) \ + { (key), (type), (addr), (sz), OSSL_PARAM_UNMODIFIED } + +/* Basic parameter types without return sizes */ +# define OSSL_PARAM_int(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int)) +# define OSSL_PARAM_uint(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(unsigned int)) +# define OSSL_PARAM_long(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(long int)) +# define OSSL_PARAM_ulong(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(unsigned long int)) +# define OSSL_PARAM_int32(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int32_t)) +# define OSSL_PARAM_uint32(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(uint32_t)) +# define OSSL_PARAM_int64(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int64_t)) +# define OSSL_PARAM_uint64(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(uint64_t)) +# define OSSL_PARAM_size_t(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), sizeof(size_t)) +# define OSSL_PARAM_time_t(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(time_t)) +# define OSSL_PARAM_double(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_REAL, (addr), sizeof(double)) + +# define OSSL_PARAM_BN(key, bn, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (bn), (sz)) +# define OSSL_PARAM_utf8_string(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UTF8_STRING, (addr), sz) +# define OSSL_PARAM_octet_string(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_OCTET_STRING, (addr), sz) + +# define OSSL_PARAM_utf8_ptr(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UTF8_PTR, (addr), sz) +# define OSSL_PARAM_octet_ptr(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_OCTET_PTR, (addr), sz) + +/* Search an OSSL_PARAM array for a matching name */ +OSSL_PARAM *OSSL_PARAM_locate(OSSL_PARAM *p, const char *key); +const OSSL_PARAM *OSSL_PARAM_locate_const(const OSSL_PARAM *p, const char *key); + +/* Basic parameter type run-time construction */ +OSSL_PARAM OSSL_PARAM_construct_int(const char *key, int *buf); +OSSL_PARAM OSSL_PARAM_construct_uint(const char *key, unsigned int *buf); +OSSL_PARAM OSSL_PARAM_construct_long(const char *key, long int *buf); +OSSL_PARAM OSSL_PARAM_construct_ulong(const char *key, unsigned long int *buf); +OSSL_PARAM OSSL_PARAM_construct_int32(const char *key, int32_t *buf); +OSSL_PARAM OSSL_PARAM_construct_uint32(const char *key, uint32_t *buf); +OSSL_PARAM OSSL_PARAM_construct_int64(const char *key, int64_t *buf); +OSSL_PARAM OSSL_PARAM_construct_uint64(const char *key, uint64_t *buf); +OSSL_PARAM OSSL_PARAM_construct_size_t(const char *key, size_t *buf); +OSSL_PARAM OSSL_PARAM_construct_time_t(const char *key, time_t *buf); +OSSL_PARAM OSSL_PARAM_construct_BN(const char *key, unsigned char *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_double(const char *key, double *buf); +OSSL_PARAM OSSL_PARAM_construct_utf8_string(const char *key, char *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_utf8_ptr(const char *key, char **buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_octet_string(const char *key, void *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_end(void); + +int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, + const OSSL_PARAM *paramdefs, + const char *key, const char *value, + size_t value_n, int *found); + +int OSSL_PARAM_get_int(const OSSL_PARAM *p, int *val); +int OSSL_PARAM_get_uint(const OSSL_PARAM *p, unsigned int *val); +int OSSL_PARAM_get_long(const OSSL_PARAM *p, long int *val); +int OSSL_PARAM_get_ulong(const OSSL_PARAM *p, unsigned long int *val); +int OSSL_PARAM_get_int32(const OSSL_PARAM *p, int32_t *val); +int OSSL_PARAM_get_uint32(const OSSL_PARAM *p, uint32_t *val); +int OSSL_PARAM_get_int64(const OSSL_PARAM *p, int64_t *val); +int OSSL_PARAM_get_uint64(const OSSL_PARAM *p, uint64_t *val); +int OSSL_PARAM_get_size_t(const OSSL_PARAM *p, size_t *val); +int OSSL_PARAM_get_time_t(const OSSL_PARAM *p, time_t *val); + +int OSSL_PARAM_set_int(OSSL_PARAM *p, int val); +int OSSL_PARAM_set_uint(OSSL_PARAM *p, unsigned int val); +int OSSL_PARAM_set_long(OSSL_PARAM *p, long int val); +int OSSL_PARAM_set_ulong(OSSL_PARAM *p, unsigned long int val); +int OSSL_PARAM_set_int32(OSSL_PARAM *p, int32_t val); +int OSSL_PARAM_set_uint32(OSSL_PARAM *p, uint32_t val); +int OSSL_PARAM_set_int64(OSSL_PARAM *p, int64_t val); +int OSSL_PARAM_set_uint64(OSSL_PARAM *p, uint64_t val); +int OSSL_PARAM_set_size_t(OSSL_PARAM *p, size_t val); +int OSSL_PARAM_set_time_t(OSSL_PARAM *p, time_t val); + +int OSSL_PARAM_get_double(const OSSL_PARAM *p, double *val); +int OSSL_PARAM_set_double(OSSL_PARAM *p, double val); + +int OSSL_PARAM_get_BN(const OSSL_PARAM *p, BIGNUM **val); +int OSSL_PARAM_set_BN(OSSL_PARAM *p, const BIGNUM *val); + +int OSSL_PARAM_get_utf8_string(const OSSL_PARAM *p, char **val, size_t max_len); +int OSSL_PARAM_set_utf8_string(OSSL_PARAM *p, const char *val); + +int OSSL_PARAM_get_octet_string(const OSSL_PARAM *p, void **val, size_t max_len, + size_t *used_len); +int OSSL_PARAM_set_octet_string(OSSL_PARAM *p, const void *val, size_t len); + +int OSSL_PARAM_get_utf8_ptr(const OSSL_PARAM *p, const char **val); +int OSSL_PARAM_set_utf8_ptr(OSSL_PARAM *p, const char *val); + +int OSSL_PARAM_get_octet_ptr(const OSSL_PARAM *p, const void **val, + size_t *used_len); +int OSSL_PARAM_set_octet_ptr(OSSL_PARAM *p, const void *val, + size_t used_len); + +int OSSL_PARAM_get_utf8_string_ptr(const OSSL_PARAM *p, const char **val); +int OSSL_PARAM_get_octet_string_ptr(const OSSL_PARAM *p, const void **val, + size_t *used_len); + +int OSSL_PARAM_modified(const OSSL_PARAM *p); +void OSSL_PARAM_set_all_unmodified(OSSL_PARAM *p); + +OSSL_PARAM *OSSL_PARAM_dup(const OSSL_PARAM *p); +OSSL_PARAM *OSSL_PARAM_merge(const OSSL_PARAM *p1, const OSSL_PARAM *p2); +void OSSL_PARAM_free(OSSL_PARAM *p); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h index 2ef5b5d0..000d9c89 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEM_H -# define HEADER_PEM_H +#ifndef OPENSSL_PEM_H +# define OPENSSL_PEM_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PEM_H +# endif # include # include @@ -16,6 +22,9 @@ # include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -60,98 +69,130 @@ extern "C" { * IMPLEMENT_PEM_rw_cb(...) */ +# define PEM_read_cb_fnsig(name, type, INTYPE, readname) \ + type *PEM_##readname##_##name(INTYPE *out, type **x, \ + pem_password_cb *cb, void *u) +# define PEM_read_cb_ex_fnsig(name, type, INTYPE, readname) \ + type *PEM_##readname##_##name##_ex(INTYPE *out, type **x, \ + pem_password_cb *cb, void *u, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) + +# define PEM_write_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name(OUTTYPE *out, const type *x) +# define PEM_write_cb_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name(OUTTYPE *out, const type *x, \ + const EVP_CIPHER *enc, \ + const unsigned char *kstr, int klen, \ + pem_password_cb *cb, void *u) +# define PEM_write_ex_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name##_ex(OUTTYPE *out, const type *x, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) +# define PEM_write_cb_ex_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name##_ex(OUTTYPE *out, const type *x, \ + const EVP_CIPHER *enc, \ + const unsigned char *kstr, int klen, \ + pem_password_cb *cb, void *u, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) + # ifdef OPENSSL_NO_STDIO # define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ # define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# endif # define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# endif # else -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ -type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ -} +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ + type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str, fp, \ + (void **)x, cb, u); \ + } -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ -} +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ + PEM_write_fnsig(name, type, FILE, write) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1, str, out, \ + x, NULL, NULL, 0, NULL, NULL); \ + } -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, const type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp(name, type, str, asn1) +# endif -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ + PEM_write_cb_fnsig(name, type, FILE, write) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1, str, out, \ + x, enc, kstr, klen, cb, u); \ + } +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) +# endif # endif -# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ -type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ -} +# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ + type *PEM_read_bio_##name(BIO *bp, type **x, \ + pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str, bp, \ + (void **)x, cb, u); \ + } -# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ -} +# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ + PEM_write_fnsig(name, type, BIO, write_bio) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1, str, out, \ + x, NULL,NULL,0,NULL,NULL); \ + } -# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, const type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio(name, type, str, asn1) +# endif -# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ - } +# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ + PEM_write_cb_fnsig(name, type, BIO, write_bio) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1, str, out, \ + x, enc, kstr, klen, cb, u); \ + } -# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ - } +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_write(name, type, str, asn1) \ IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ IMPLEMENT_PEM_write_fp(name, type, str, asn1) -# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) -# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ @@ -161,9 +202,11 @@ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_write(name, type, str, asn1) -# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_write_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ IMPLEMENT_PEM_read(name, type, str, asn1) \ @@ -171,64 +214,160 @@ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ /* These are the same except they are for the declarations */ +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ # if defined(OPENSSL_NO_STDIO) -# define DECLARE_PEM_read_fp(name, type) /**/ -# define DECLARE_PEM_write_fp(name, type) /**/ -# define DECLARE_PEM_write_fp_const(name, type) /**/ -# define DECLARE_PEM_write_cb_fp(name, type) /**/ +# define DECLARE_PEM_read_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_read_fp_ex_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_fp_ex_attr(attr, name, type) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const_attr(attr, name, type) /**/ +# endif +# define DECLARE_PEM_write_cb_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) /**/ + # else -# define DECLARE_PEM_read_fp(name, type) \ - type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); +# define DECLARE_PEM_read_fp_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, FILE, read); +# define DECLARE_PEM_read_fp_ex_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, FILE, read); \ + attr PEM_read_cb_ex_fnsig(name, type, FILE, read); -# define DECLARE_PEM_write_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x); - -# define DECLARE_PEM_write_fp_const(name, type) \ - int PEM_write_##name(FILE *fp, const type *x); - -# define DECLARE_PEM_write_cb_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); +# define DECLARE_PEM_write_fp_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); +# define DECLARE_PEM_write_fp_ex_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); \ + attr PEM_write_ex_fnsig(name, type, FILE, write); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); +# endif +# define DECLARE_PEM_write_cb_fp_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, FILE, write); +# define DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, FILE, write); \ + attr PEM_write_cb_ex_fnsig(name, type, FILE, write); # endif -# define DECLARE_PEM_read_bio(name, type) \ - type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); +# define DECLARE_PEM_read_fp(name, type) \ + DECLARE_PEM_read_fp_attr(extern, name, type) +# define DECLARE_PEM_write_fp(name, type) \ + DECLARE_PEM_write_fp_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const(name, type) \ + DECLARE_PEM_write_fp_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_fp(name, type) \ + DECLARE_PEM_write_cb_fp_attr(extern, name, type) -# define DECLARE_PEM_write_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x); +# define DECLARE_PEM_read_bio_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, BIO, read_bio); +# define DECLARE_PEM_read_bio_ex_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, BIO, read_bio); \ + attr PEM_read_cb_ex_fnsig(name, type, BIO, read_bio); +# define DECLARE_PEM_read_bio(name, type) \ + DECLARE_PEM_read_bio_attr(extern, name, type) +# define DECLARE_PEM_read_bio_ex(name, type) \ + DECLARE_PEM_read_bio_ex_attr(extern, name, type) -# define DECLARE_PEM_write_bio_const(name, type) \ - int PEM_write_bio_##name(BIO *bp, const type *x); +# define DECLARE_PEM_write_bio_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio_ex_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); \ + attr PEM_write_ex_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio(name, type) \ + DECLARE_PEM_write_bio_attr(extern, name, type) +# define DECLARE_PEM_write_bio_ex(name, type) \ + DECLARE_PEM_write_bio_ex_attr(extern, name, type) -# define DECLARE_PEM_write_cb_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_bio_const_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio_const(name, type) \ + DECLARE_PEM_write_bio_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_bio_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_cb_bio_ex_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, BIO, write_bio); \ + attr PEM_write_cb_ex_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_cb_bio(name, type) \ + DECLARE_PEM_write_cb_bio_attr(extern, name, type) +# define DECLARE_PEM_write_cb_ex_bio(name, type) \ + DECLARE_PEM_write_cb_bio_ex_attr(extern, name, type) + +# define DECLARE_PEM_write_attr(attr, name, type) \ + DECLARE_PEM_write_bio_attr(attr, name, type) \ + DECLARE_PEM_write_fp_attr(attr, name, type) +# define DECLARE_PEM_write_ex_attr(attr, name, type) \ + DECLARE_PEM_write_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_write_fp_ex_attr(attr, name, type) # define DECLARE_PEM_write(name, type) \ - DECLARE_PEM_write_bio(name, type) \ - DECLARE_PEM_write_fp(name, type) -# define DECLARE_PEM_write_const(name, type) \ - DECLARE_PEM_write_bio_const(name, type) \ - DECLARE_PEM_write_fp_const(name, type) -# define DECLARE_PEM_write_cb(name, type) \ - DECLARE_PEM_write_cb_bio(name, type) \ - DECLARE_PEM_write_cb_fp(name, type) -# define DECLARE_PEM_read(name, type) \ - DECLARE_PEM_read_bio(name, type) \ - DECLARE_PEM_read_fp(name, type) + DECLARE_PEM_write_attr(extern, name, type) +# define DECLARE_PEM_write_ex(name, type) \ + DECLARE_PEM_write_ex_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_const_attr(attr, name, type) \ + DECLARE_PEM_write_bio_const_attr(attr, name, type) \ + DECLARE_PEM_write_fp_const_attr(attr, name, type) +# define DECLARE_PEM_write_const(name, type) \ + DECLARE_PEM_write_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_attr(attr, name, type) \ + DECLARE_PEM_write_cb_bio_attr(attr, name, type) \ + DECLARE_PEM_write_cb_fp_attr(attr, name, type) +# define DECLARE_PEM_write_cb_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) +# define DECLARE_PEM_write_cb(name, type) \ + DECLARE_PEM_write_cb_attr(extern, name, type) +# define DECLARE_PEM_write_cb_ex(name, type) \ + DECLARE_PEM_write_cb_ex_attr(extern, name, type) +# define DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_read_bio_attr(attr, name, type) \ + DECLARE_PEM_read_fp_attr(attr, name, type) +# define DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_read_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_read_fp_ex_attr(attr, name, type) +# define DECLARE_PEM_read(name, type) \ + DECLARE_PEM_read_attr(extern, name, type) +# define DECLARE_PEM_read_ex(name, type) \ + DECLARE_PEM_read_ex_attr(extern, name, type) +# define DECLARE_PEM_rw_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_attr(attr, name, type) +# define DECLARE_PEM_rw_ex_attr(attr, name, type) \ + DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_write_ex_attr(attr, name, type) # define DECLARE_PEM_rw(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write(name, type) -# define DECLARE_PEM_rw_const(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_const(name, type) + DECLARE_PEM_rw_attr(extern, name, type) +# define DECLARE_PEM_rw_ex(name, type) \ + DECLARE_PEM_rw_ex_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_rw_const_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_const_attr(attr, name, type) +# define DECLARE_PEM_rw_const(name, type) \ + DECLARE_PEM_rw_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_rw_cb_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_cb_attr(attr, name, type) +# define DECLARE_PEM_rw_cb_ex_attr(attr, name, type) \ + DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_ex_attr(attr, name, type) # define DECLARE_PEM_rw_cb(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_cb(name, type) -typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + DECLARE_PEM_rw_cb_attr(extern, name, type) +# define DECLARE_PEM_rw_cb_ex(name, type) \ + DECLARE_PEM_rw_cb_ex_attr(extern, name, type) int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, @@ -251,14 +390,20 @@ int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, void *u); void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, pem_password_cb *cb, void *u); -int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, - const EVP_CIPHER *enc, unsigned char *kstr, int klen, +int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, + const void *x, const EVP_CIPHER *enc, + const unsigned char *kstr, int klen, pem_password_cb *cb, void *u); STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); -int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, - unsigned char *kstr, int klen, +STACK_OF(X509_INFO) +*PEM_X509_INFO_read_bio_ex(BIO *bp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u, OSSL_LIB_CTX *libctx, + const char *propq); + +int PEM_X509_INFO_write_bio(BIO *bp, const X509_INFO *xi, EVP_CIPHER *enc, + const unsigned char *kstr, int klen, pem_password_cb *cd, void *u); #ifndef OPENSSL_NO_STDIO @@ -269,21 +414,25 @@ int PEM_write(FILE *fp, const char *name, const char *hdr, void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, pem_password_cb *cb, void *u); int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, - void *x, const EVP_CIPHER *enc, unsigned char *kstr, - int klen, pem_password_cb *callback, void *u); + const void *x, const EVP_CIPHER *enc, + const unsigned char *kstr, int klen, + pem_password_cb *callback, void *u); STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); +STACK_OF(X509_INFO) +*PEM_X509_INFO_read_ex(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, + void *u, OSSL_LIB_CTX *libctx, const char *propq); #endif int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); -int PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); +int PEM_SignUpdate(EVP_MD_CTX *ctx, const unsigned char *d, unsigned int cnt); int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, unsigned int *siglen, EVP_PKEY *pkey); /* The default pem_password_cb that's used internally */ int PEM_def_callback(char *buf, int num, int rwflag, void *userdata); void PEM_proc_type(char *buf, int type); -void PEM_dek_info(char *buf, const char *type, int len, char *str); +void PEM_dek_info(char *buf, const char *type, int len, const char *str); # include @@ -292,85 +441,99 @@ DECLARE_PEM_rw(X509_AUX, X509) DECLARE_PEM_rw(X509_REQ, X509_REQ) DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) DECLARE_PEM_rw(X509_CRL, X509_CRL) +DECLARE_PEM_rw(X509_PUBKEY, X509_PUBKEY) DECLARE_PEM_rw(PKCS7, PKCS7) DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) DECLARE_PEM_rw(PKCS8, X509_SIG) DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) -# ifndef OPENSSL_NO_RSA -DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) -DECLARE_PEM_rw_const(RSAPublicKey, RSA) -DECLARE_PEM_rw(RSA_PUBKEY, RSA) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, RSAPrivateKey, RSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, RSAPublicKey, RSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, RSA_PUBKEY, RSA) # endif -# ifndef OPENSSL_NO_DSA -DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) -DECLARE_PEM_rw(DSA_PUBKEY, DSA) -DECLARE_PEM_rw_const(DSAparams, DSA) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, DSAPrivateKey, DSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DSA_PUBKEY, DSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DSAparams, DSA) +# endif # endif -# ifndef OPENSSL_NO_EC -DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) -DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) -DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) -# endif -# ifndef OPENSSL_NO_DH -DECLARE_PEM_rw_const(DHparams, DH) -DECLARE_PEM_write_const(DHxparams, DH) -# endif -DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) -DECLARE_PEM_rw(PUBKEY, EVP_PKEY) -int PEM_write_bio_PrivateKey_traditional(BIO *bp, EVP_PKEY *x, +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, ECPKParameters, EC_GROUP) +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, ECPrivateKey, EC_KEY) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, EC_PUBKEY, EC_KEY) +# endif +# endif + +# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DHparams, DH) +DECLARE_PEM_write_attr(OSSL_DEPRECATEDIN_3_0, DHxparams, DH) +# endif +# endif +DECLARE_PEM_rw_cb_ex(PrivateKey, EVP_PKEY) +DECLARE_PEM_rw_ex(PUBKEY, EVP_PKEY) + +int PEM_write_bio_PrivateKey_traditional(BIO *bp, const EVP_PKEY *x, const EVP_CIPHER *enc, - unsigned char *kstr, int klen, + const unsigned char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, +/* Why do these take a signed char *kstr? */ +int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, - char *, int, pem_password_cb *, void *); -int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, +int PEM_write_bio_PKCS8PrivateKey(BIO *, const EVP_PKEY *, const EVP_CIPHER *, + const char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_bio(BIO *bp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u); # ifndef OPENSSL_NO_STDIO -int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_fp(FILE *fp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int PEM_write_PKCS8PrivateKey_nid(FILE *fp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, pem_password_cb *cd, - void *u); +int PEM_write_PKCS8PrivateKey(FILE *fp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, + pem_password_cb *cd, void *u); # endif +EVP_PKEY *PEM_read_bio_Parameters_ex(BIO *bp, EVP_PKEY **x, + OSSL_LIB_CTX *libctx, const char *propq); EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); -int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); +int PEM_write_bio_Parameters(BIO *bp, const EVP_PKEY *x); -# ifndef OPENSSL_NO_DSA EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); EVP_PKEY *b2i_PrivateKey_bio(BIO *in); EVP_PKEY *b2i_PublicKey_bio(BIO *in); -int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); -int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); -# ifndef OPENSSL_NO_RC4 +int i2b_PrivateKey_bio(BIO *out, const EVP_PKEY *pk); +int i2b_PublicKey_bio(BIO *out, const EVP_PKEY *pk); EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); -int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, +EVP_PKEY *b2i_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +int i2b_PVK_bio(BIO *out, const EVP_PKEY *pk, int enclevel, pem_password_cb *cb, void *u); -# endif -# endif +int i2b_PVK_bio_ex(BIO *out, const EVP_PKEY *pk, int enclevel, + pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); # ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem2.h index 038fe790..a8a5325b 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem2.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem2.h @@ -1,13 +1,19 @@ /* * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEM2_H -# define HEADER_PEM2_H +#ifndef OPENSSL_PEM2_H +# define OPENSSL_PEM2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PEM2_H +# endif # include #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pemerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pemerr.h index 4f7e3574..18f6d9ef 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pemerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pemerr.h @@ -1,71 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEMERR_H -# define HEADER_PEMERR_H +#ifndef OPENSSL_PEMERR_H +# define OPENSSL_PEMERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PEM_strings(void); -/* - * PEM function codes. - */ -# define PEM_F_B2I_DSS 127 -# define PEM_F_B2I_PVK_BIO 128 -# define PEM_F_B2I_RSA 129 -# define PEM_F_CHECK_BITLEN_DSA 130 -# define PEM_F_CHECK_BITLEN_RSA 131 -# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 -# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 -# define PEM_F_DO_B2I 132 -# define PEM_F_DO_B2I_BIO 133 -# define PEM_F_DO_BLOB_HEADER 134 -# define PEM_F_DO_I2B 146 -# define PEM_F_DO_PK8PKEY 126 -# define PEM_F_DO_PK8PKEY_FP 125 -# define PEM_F_DO_PVK_BODY 135 -# define PEM_F_DO_PVK_HEADER 136 -# define PEM_F_GET_HEADER_AND_DATA 143 -# define PEM_F_GET_NAME 144 -# define PEM_F_I2B_PVK 137 -# define PEM_F_I2B_PVK_BIO 138 -# define PEM_F_LOAD_IV 101 -# define PEM_F_PEM_ASN1_READ 102 -# define PEM_F_PEM_ASN1_READ_BIO 103 -# define PEM_F_PEM_ASN1_WRITE 104 -# define PEM_F_PEM_ASN1_WRITE_BIO 105 -# define PEM_F_PEM_DEF_CALLBACK 100 -# define PEM_F_PEM_DO_HEADER 106 -# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 -# define PEM_F_PEM_READ 108 -# define PEM_F_PEM_READ_BIO 109 -# define PEM_F_PEM_READ_BIO_DHPARAMS 141 -# define PEM_F_PEM_READ_BIO_EX 145 -# define PEM_F_PEM_READ_BIO_PARAMETERS 140 -# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 -# define PEM_F_PEM_READ_DHPARAMS 142 -# define PEM_F_PEM_READ_PRIVATEKEY 124 -# define PEM_F_PEM_SIGNFINAL 112 -# define PEM_F_PEM_WRITE 113 -# define PEM_F_PEM_WRITE_BIO 114 -# define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL 147 -# define PEM_F_PEM_WRITE_PRIVATEKEY 139 -# define PEM_F_PEM_X509_INFO_READ 115 -# define PEM_F_PEM_X509_INFO_READ_BIO 116 -# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 /* * PEM reason codes. @@ -80,8 +31,10 @@ int ERR_load_PEM_strings(void); # define PEM_R_BIO_WRITE_FAILURE 118 # define PEM_R_CIPHER_IS_NULL 127 # define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 +# define PEM_R_EXPECTING_DSS_KEY_BLOB 131 # define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 # define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_EXPECTING_RSA_KEY_BLOB 132 # define PEM_R_HEADER_TOO_LONG 128 # define PEM_R_INCONSISTENT_HEADER 121 # define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h index 3f43dad6..9e20fc1a 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h @@ -1,18 +1,33 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/pkcs12.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS12_H -# define HEADER_PKCS12_H + + +#ifndef OPENSSL_PKCS12_H +# define OPENSSL_PKCS12_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS12_H +# endif # include +# include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -46,7 +61,33 @@ typedef struct PKCS12_st PKCS12; typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; -DEFINE_STACK_OF(PKCS12_SAFEBAG) +SKM_DEFINE_STACK_OF_INTERNAL(PKCS12_SAFEBAG, PKCS12_SAFEBAG, PKCS12_SAFEBAG) +#define sk_PKCS12_SAFEBAG_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_value(sk, idx) ((PKCS12_SAFEBAG *)OPENSSL_sk_value(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), (idx))) +#define sk_PKCS12_SAFEBAG_new(cmp) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp))) +#define sk_PKCS12_SAFEBAG_new_null() ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_null()) +#define sk_PKCS12_SAFEBAG_new_reserve(cmp, n) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_reserve(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp), (n))) +#define sk_PKCS12_SAFEBAG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (n)) +#define sk_PKCS12_SAFEBAG_free(sk) OPENSSL_sk_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_delete(sk, i) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (i))) +#define sk_PKCS12_SAFEBAG_delete_ptr(sk, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete_ptr(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr))) +#define sk_PKCS12_SAFEBAG_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_pop(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_pop(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_shift(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_shift(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk),ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc)) +#define sk_PKCS12_SAFEBAG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), (idx)) +#define sk_PKCS12_SAFEBAG_set(sk, idx, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_set(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (idx), ossl_check_PKCS12_SAFEBAG_type(ptr))) +#define sk_PKCS12_SAFEBAG_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), pnum) +#define sk_PKCS12_SAFEBAG_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_dup(sk) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_dup(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_copyfunc_type(copyfunc), ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc))) +#define sk_PKCS12_SAFEBAG_set_cmp_func(sk, cmp) ((sk_PKCS12_SAFEBAG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp))) + typedef struct pkcs12_bag_st PKCS12_BAGS; @@ -55,7 +96,7 @@ typedef struct pkcs12_bag_st PKCS12_BAGS; /* Compatibility macros */ -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define M_PKCS12_bag_type PKCS12_bag_type # define M_PKCS12_cert_bag_type PKCS12_cert_bag_type @@ -71,8 +112,10 @@ typedef struct pkcs12_bag_st PKCS12_BAGS; # define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt #endif - -DEPRECATEDIN_1_1_0(ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, int attr_nid)) +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +#endif ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); int PKCS12_mac_present(const PKCS12 *p12); @@ -87,6 +130,8 @@ const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); +const ASN1_TYPE *PKCS12_SAFEBAG_get0_bag_obj(const PKCS12_SAFEBAG *bag); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_bag_type(const PKCS12_SAFEBAG *bag); X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); @@ -97,6 +142,7 @@ const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_secret(int type, int vtype, const unsigned char *value, int len); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, @@ -105,23 +151,50 @@ PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8inf); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt_ex(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *ctx, + const char *propq); PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, int nid1, int nid2); PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt_ex(const X509_SIG *p8, const char *pass, + int passlen, OSSL_LIB_CTX *ctx, + const char *propq); PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey_ex(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen, + OSSL_LIB_CTX *ctx, + const char *propq); X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +X509_SIG *PKCS8_encrypt_ex(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8, + OSSL_LIB_CTX *ctx, const char *propq); X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +X509_SIG *PKCS8_set0_pbe_ex(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe, + OSSL_LIB_CTX *ctx, const char *propq); PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, STACK_OF(PKCS12_SAFEBAG) *bags); +PKCS7 *PKCS12_pack_p7encdata_ex(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags, + OSSL_LIB_CTX *ctx, const char *propq); + STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, int passlen); @@ -138,6 +211,10 @@ int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, int namelen); int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, const unsigned char *name, int namelen); +int PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type, + const unsigned char *bytes, int len); +int PKCS12_add1_attr_by_txt(PKCS12_SAFEBAG *bag, const char *attrname, int type, + const unsigned char *bytes, int len); int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid); @@ -149,26 +226,62 @@ unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, const unsigned char *in, int inlen, unsigned char **data, int *datalen, int en_de); +unsigned char *PKCS12_pbe_crypt_ex(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de, OSSL_LIB_CTX *libctx, + const char *propq); void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, const char *pass, int passlen, const ASN1_OCTET_STRING *oct, int zbuf); +void *PKCS12_item_decrypt_d2i_ex(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf, + OSSL_LIB_CTX *libctx, + const char *propq); ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, const ASN1_ITEM *it, const char *pass, int passlen, void *obj, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt_ex(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf, + OSSL_LIB_CTX *ctx, + const char *propq); PKCS12 *PKCS12_init(int mode); +PKCS12 *PKCS12_init_ex(int mode, OSSL_LIB_CTX *ctx, const char *propq); + int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_asc_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni_ex(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_utf8_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); + int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md_type, int en_de); +int PKCS12_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, unsigned char *mac, unsigned int *maclen); int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); @@ -198,18 +311,35 @@ int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, int mac_iter, int keytype); +PKCS12 *PKCS12_create_ex(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype, + OSSL_LIB_CTX *ctx, const char *propq); PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, EVP_PKEY *key, int key_usage, int iter, int key_nid, const char *pass); +PKCS12_SAFEBAG *PKCS12_add_key_ex(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_secret(STACK_OF(PKCS12_SAFEBAG) **pbags, + int nid_type, const unsigned char *value, int len); int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, int safe_nid, int iter, const char *pass); -PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +int PKCS12_add_safe_ex(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); -int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +PKCS12 *PKCS12_add_safes_ex(STACK_OF(PKCS7) *safes, int p7_nid, + OSSL_LIB_CTX *ctx, const char *propq); + +int i2d_PKCS12_bio(BIO *bp, const PKCS12 *p12); # ifndef OPENSSL_NO_STDIO -int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); +int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12); # endif PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); # ifndef OPENSSL_NO_STDIO diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h.in new file mode 100644 index 00000000..cf956b41 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h.in @@ -0,0 +1,330 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_PKCS12_H +# define OPENSSL_PKCS12_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS12_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define PKCS12_KEY_ID 1 +# define PKCS12_IV_ID 2 +# define PKCS12_MAC_ID 3 + +/* Default iteration count */ +# ifndef PKCS12_DEFAULT_ITER +# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER +# endif + +# define PKCS12_MAC_KEY_LENGTH 20 + +# define PKCS12_SALT_LEN 8 + +/* It's not clear if these are actually needed... */ +# define PKCS12_key_gen PKCS12_key_gen_utf8 +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_utf8 + +/* MS key usage constants */ + +# define KEY_EX 0x10 +# define KEY_SIG 0x80 + +typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA; + +typedef struct PKCS12_st PKCS12; + +typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; + +{- + generate_stack_macros("PKCS12_SAFEBAG"); +-} + +typedef struct pkcs12_bag_st PKCS12_BAGS; + +# define PKCS12_ERROR 0 +# define PKCS12_OK 1 + +/* Compatibility macros */ + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 + +# define M_PKCS12_bag_type PKCS12_bag_type +# define M_PKCS12_cert_bag_type PKCS12_cert_bag_type +# define M_PKCS12_crl_bag_type PKCS12_cert_bag_type + +# define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert +# define PKCS12_certbag2scrl PKCS12_SAFEBAG_get1_crl +# define PKCS12_bag_type PKCS12_SAFEBAG_get_nid +# define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid +# define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert +# define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl +# define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf +# define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt + +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +#endif + +ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); +int PKCS12_mac_present(const PKCS12 *p12); +void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, + const X509_ALGOR **pmacalg, + const ASN1_OCTET_STRING **psalt, + const ASN1_INTEGER **piter, + const PKCS12 *p12); + +const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); +const ASN1_TYPE *PKCS12_SAFEBAG_get0_bag_obj(const PKCS12_SAFEBAG *bag); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_bag_type(const PKCS12_SAFEBAG *bag); + +X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); +X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); +const STACK_OF(PKCS12_SAFEBAG) * +PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); +const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); +const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); + +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_secret(int type, int vtype, const unsigned char *value, int len); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt_ex(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *ctx, + const char *propq); + +PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, + int nid1, int nid2); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, + int passlen); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt_ex(const X509_SIG *p8, const char *pass, + int passlen, OSSL_LIB_CTX *ctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey_ex(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen, + OSSL_LIB_CTX *ctx, + const char *propq); +X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +X509_SIG *PKCS8_encrypt_ex(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8, + OSSL_LIB_CTX *ctx, const char *propq); +X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +X509_SIG *PKCS8_set0_pbe_ex(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe, + OSSL_LIB_CTX *ctx, const char *propq); +PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); +PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags); +PKCS7 *PKCS12_pack_p7encdata_ex(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags, + OSSL_LIB_CTX *ctx, const char *propq); + +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, + int passlen); + +int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); +STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12); + +int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, + int namelen); +int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_utf8(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, + const unsigned char *name, int namelen); +int PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type, + const unsigned char *bytes, int len); +int PKCS12_add1_attr_by_txt(PKCS12_SAFEBAG *bag, const char *attrname, int type, + const unsigned char *bytes, int len); +int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); +ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, + int attr_nid); +char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); +const STACK_OF(X509_ATTRIBUTE) * +PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag); +unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de); +unsigned char *PKCS12_pbe_crypt_ex(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de, OSSL_LIB_CTX *libctx, + const char *propq); +void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf); +void *PKCS12_item_decrypt_d2i_ex(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf, + OSSL_LIB_CTX *libctx, + const char *propq); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt_ex(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf, + OSSL_LIB_CTX *ctx, + const char *propq); +PKCS12 *PKCS12_init(int mode); +PKCS12 *PKCS12_init_ex(int mode, OSSL_LIB_CTX *ctx, const char *propq); + +int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_asc_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); +int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni_ex(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); +int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_utf8_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); + +int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de); +int PKCS12_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); +int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *mac, unsigned int *maclen); +int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); +int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + const EVP_MD *md_type); +int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, + int saltlen, const EVP_MD *md_type); +unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2asc(const unsigned char *uni, int unilen); +unsigned char *OPENSSL_utf82uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2utf8(const unsigned char *uni, int unilen); + +DECLARE_ASN1_FUNCTIONS(PKCS12) +DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) +DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) +DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) + +DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) +DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) + +void PKCS12_PBE_add(void); +int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, + STACK_OF(X509) **ca); +PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype); +PKCS12 *PKCS12_create_ex(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); +PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass); +PKCS12_SAFEBAG *PKCS12_add_key_ex(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_secret(STACK_OF(PKCS12_SAFEBAG) **pbags, + int nid_type, const unsigned char *value, int len); +int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass); +int PKCS12_add_safe_ex(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +PKCS12 *PKCS12_add_safes_ex(STACK_OF(PKCS7) *safes, int p7_nid, + OSSL_LIB_CTX *ctx, const char *propq); + +int i2d_PKCS12_bio(BIO *bp, const PKCS12 *p12); +# ifndef OPENSSL_NO_STDIO +int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12); +# endif +PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); +# ifndef OPENSSL_NO_STDIO +PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); +# endif +int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h index eff5eb26..933c8329 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h @@ -1,57 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS12ERR_H -# define HEADER_PKCS12ERR_H +#ifndef OPENSSL_PKCS12ERR_H +# define OPENSSL_PKCS12ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS12_strings(void); -/* - * PKCS12 function codes. - */ -# define PKCS12_F_OPENSSL_ASC2UNI 121 -# define PKCS12_F_OPENSSL_UNI2ASC 124 -# define PKCS12_F_OPENSSL_UNI2UTF8 127 -# define PKCS12_F_OPENSSL_UTF82UNI 129 -# define PKCS12_F_PKCS12_CREATE 105 -# define PKCS12_F_PKCS12_GEN_MAC 107 -# define PKCS12_F_PKCS12_INIT 109 -# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 -# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 -# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 -# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 -# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 -# define PKCS12_F_PKCS12_KEY_GEN_UTF8 116 -# define PKCS12_F_PKCS12_NEWPASS 128 -# define PKCS12_F_PKCS12_PACK_P7DATA 114 -# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 -# define PKCS12_F_PKCS12_PARSE 118 -# define PKCS12_F_PKCS12_PBE_CRYPT 119 -# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 112 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 -# define PKCS12_F_PKCS12_SETUP_MAC 122 -# define PKCS12_F_PKCS12_SET_MAC 123 -# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 -# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 -# define PKCS12_F_PKCS12_VERIFY_MAC 126 -# define PKCS12_F_PKCS8_ENCRYPT 125 -# define PKCS12_F_PKCS8_SET0_PBE 132 /* * PKCS12 reason codes. @@ -64,6 +29,7 @@ int ERR_load_PKCS12_strings(void); # define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 # define PKCS12_R_INVALID_NULL_ARGUMENT 104 # define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 +# define PKCS12_R_INVALID_TYPE 112 # define PKCS12_R_IV_GEN_ERROR 106 # define PKCS12_R_KEY_GEN_ERROR 107 # define PKCS12_R_MAC_ABSENT 108 @@ -72,9 +38,7 @@ int ERR_load_PKCS12_strings(void); # define PKCS12_R_MAC_STRING_SET_ERROR 111 # define PKCS12_R_MAC_VERIFY_FAILURE 113 # define PKCS12_R_PARSE_ERROR 114 -# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 # define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 -# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 # define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 # define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h index 9b66e002..543c80cb 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h @@ -1,27 +1,42 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/pkcs7.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS7_H -# define HEADER_PKCS7_H + + +#ifndef OPENSSL_PKCS7_H +# define OPENSSL_PKCS7_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS7_H +# endif # include # include # include # include -# include +# include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { #endif + /*- Encryption_ID DES-CBC Digest_ID MD5 @@ -29,6 +44,11 @@ Digest_Encryption_ID rsaEncryption Key_Encryption_ID rsaEncryption */ +typedef struct PKCS7_CTX_st { + OSSL_LIB_CTX *libctx; + char *propq; +} PKCS7_CTX; + typedef struct pkcs7_issuer_and_serial_st { X509_NAME *issuer; ASN1_INTEGER *serial; @@ -44,9 +64,35 @@ typedef struct pkcs7_signer_info_st { STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ /* The private key to sign with */ EVP_PKEY *pkey; + const PKCS7_CTX *ctx; } PKCS7_SIGNER_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO) +#define sk_PKCS7_SIGNER_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_value(sk, idx) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), (idx))) +#define sk_PKCS7_SIGNER_INFO_new(cmp) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp))) +#define sk_PKCS7_SIGNER_INFO_new_null() ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_SIGNER_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_SIGNER_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (n)) +#define sk_PKCS7_SIGNER_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_delete(sk, i) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (i))) +#define sk_PKCS7_SIGNER_INFO_delete_ptr(sk, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr))) +#define sk_PKCS7_SIGNER_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_pop(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_shift(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk),ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_SIGNER_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), (idx)) +#define sk_PKCS7_SIGNER_INFO_set(sk, idx, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (idx), ossl_check_PKCS7_SIGNER_INFO_type(ptr))) +#define sk_PKCS7_SIGNER_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), pnum) +#define sk_PKCS7_SIGNER_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_dup(sk) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc))) +#define sk_PKCS7_SIGNER_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_SIGNER_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp))) -DEFINE_STACK_OF(PKCS7_SIGNER_INFO) typedef struct pkcs7_recip_info_st { ASN1_INTEGER *version; /* version 0 */ @@ -54,9 +100,36 @@ typedef struct pkcs7_recip_info_st { X509_ALGOR *key_enc_algor; ASN1_OCTET_STRING *enc_key; X509 *cert; /* get the pub-key from this */ + const PKCS7_CTX *ctx; } PKCS7_RECIP_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO, PKCS7_RECIP_INFO) +#define sk_PKCS7_RECIP_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_value(sk, idx) ((PKCS7_RECIP_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), (idx))) +#define sk_PKCS7_RECIP_INFO_new(cmp) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp))) +#define sk_PKCS7_RECIP_INFO_new_null() ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_RECIP_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_RECIP_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (n)) +#define sk_PKCS7_RECIP_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_delete(sk, i) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (i))) +#define sk_PKCS7_RECIP_INFO_delete_ptr(sk, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr))) +#define sk_PKCS7_RECIP_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_pop(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_shift(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk),ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_RECIP_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), (idx)) +#define sk_PKCS7_RECIP_INFO_set(sk, idx, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (idx), ossl_check_PKCS7_RECIP_INFO_type(ptr))) +#define sk_PKCS7_RECIP_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), pnum) +#define sk_PKCS7_RECIP_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_dup(sk) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc))) +#define sk_PKCS7_RECIP_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_RECIP_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp))) + -DEFINE_STACK_OF(PKCS7_RECIP_INFO) typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ @@ -76,6 +149,7 @@ typedef struct pkcs7_enc_content_st { X509_ALGOR *algorithm; ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ const EVP_CIPHER *cipher; + const PKCS7_CTX *ctx; } PKCS7_ENC_CONTENT; typedef struct pkcs7_enveloped_st { @@ -141,9 +215,36 @@ typedef struct pkcs7_st { /* Anything else */ ASN1_TYPE *other; } d; + PKCS7_CTX ctx; } PKCS7; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7, PKCS7, PKCS7) +#define sk_PKCS7_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_sk_type(sk)) +#define sk_PKCS7_value(sk, idx) ((PKCS7 *)OPENSSL_sk_value(ossl_check_const_PKCS7_sk_type(sk), (idx))) +#define sk_PKCS7_new(cmp) ((STACK_OF(PKCS7) *)OPENSSL_sk_new(ossl_check_PKCS7_compfunc_type(cmp))) +#define sk_PKCS7_new_null() ((STACK_OF(PKCS7) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_new_reserve(cmp, n) ((STACK_OF(PKCS7) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_compfunc_type(cmp), (n))) +#define sk_PKCS7_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_sk_type(sk), (n)) +#define sk_PKCS7_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_delete(sk, i) ((PKCS7 *)OPENSSL_sk_delete(ossl_check_PKCS7_sk_type(sk), (i))) +#define sk_PKCS7_delete_ptr(sk, ptr) ((PKCS7 *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr))) +#define sk_PKCS7_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_pop(sk) ((PKCS7 *)OPENSSL_sk_pop(ossl_check_PKCS7_sk_type(sk))) +#define sk_PKCS7_shift(sk) ((PKCS7 *)OPENSSL_sk_shift(ossl_check_PKCS7_sk_type(sk))) +#define sk_PKCS7_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_sk_type(sk),ossl_check_PKCS7_freefunc_type(freefunc)) +#define sk_PKCS7_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), (idx)) +#define sk_PKCS7_set(sk, idx, ptr) ((PKCS7 *)OPENSSL_sk_set(ossl_check_PKCS7_sk_type(sk), (idx), ossl_check_PKCS7_type(ptr))) +#define sk_PKCS7_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), pnum) +#define sk_PKCS7_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_sk_type(sk)) +#define sk_PKCS7_dup(sk) ((STACK_OF(PKCS7) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_sk_type(sk))) +#define sk_PKCS7_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_sk_type(sk), ossl_check_PKCS7_copyfunc_type(copyfunc), ossl_check_PKCS7_freefunc_type(freefunc))) +#define sk_PKCS7_set_cmp_func(sk, cmp) ((sk_PKCS7_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_compfunc_type(cmp))) + -DEFINE_STACK_OF(PKCS7) # define PKCS7_OP_SET_DETACHED_SIGNATURE 1 # define PKCS7_OP_GET_DETACHED_SIGNATURE 2 @@ -208,11 +309,11 @@ int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, unsigned int *len); # ifndef OPENSSL_NO_STDIO PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); -int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); +int i2d_PKCS7_fp(FILE *fp, const PKCS7 *p7); # endif -PKCS7 *PKCS7_dup(PKCS7 *p7); +DECLARE_ASN1_DUP_FUNCTION(PKCS7) PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); -int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); +int i2d_PKCS7_bio(BIO *bp, const PKCS7 *p7); int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); @@ -225,6 +326,7 @@ DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) DECLARE_ASN1_FUNCTIONS(PKCS7) +PKCS7 *PKCS7_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) @@ -234,6 +336,7 @@ DECLARE_ASN1_PRINT_FUNCTION(PKCS7) long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); +int PKCS7_type_is_other(PKCS7 *p7); int PKCS7_set_type(PKCS7 *p7, int type); int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); @@ -269,13 +372,14 @@ int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7); ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, void *data); int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, void *value); -ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); -ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_attribute(const PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(const PKCS7_SIGNER_INFO *si, int nid); int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, @@ -283,6 +387,9 @@ int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, int flags); +PKCS7 *PKCS7_sign_ex(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags, OSSL_LIB_CTX *libctx, + const char *propq); PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, X509 *signcert, EVP_PKEY *pkey, @@ -295,6 +402,9 @@ STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags); PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, int flags); +PKCS7 *PKCS7_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, int flags, + OSSL_LIB_CTX *libctx, const char *propq); int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags); @@ -309,6 +419,7 @@ int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, const unsigned char *md, int mdlen); int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7_ex(BIO *bio, BIO **bcont, PKCS7 **p7); PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h.in new file mode 100644 index 00000000..0a0c415b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h.in @@ -0,0 +1,359 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_PKCS7_H +# define OPENSSL_PKCS7_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS7_H +# endif + +# include +# include +# include + +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/*- +Encryption_ID DES-CBC +Digest_ID MD5 +Digest_Encryption_ID rsaEncryption +Key_Encryption_ID rsaEncryption +*/ + +typedef struct PKCS7_CTX_st { + OSSL_LIB_CTX *libctx; + char *propq; +} PKCS7_CTX; + +typedef struct pkcs7_issuer_and_serial_st { + X509_NAME *issuer; + ASN1_INTEGER *serial; +} PKCS7_ISSUER_AND_SERIAL; + +typedef struct pkcs7_signer_info_st { + ASN1_INTEGER *version; /* version 1 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *digest_alg; + STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ + X509_ALGOR *digest_enc_alg; + ASN1_OCTET_STRING *enc_digest; + STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ + /* The private key to sign with */ + EVP_PKEY *pkey; + const PKCS7_CTX *ctx; +} PKCS7_SIGNER_INFO; +{- + generate_stack_macros("PKCS7_SIGNER_INFO"); +-} + +typedef struct pkcs7_recip_info_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *key_enc_algor; + ASN1_OCTET_STRING *enc_key; + X509 *cert; /* get the pub-key from this */ + const PKCS7_CTX *ctx; +} PKCS7_RECIP_INFO; +{- + generate_stack_macros("PKCS7_RECIP_INFO"); +-} + + +typedef struct pkcs7_signed_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + struct pkcs7_st *contents; +} PKCS7_SIGNED; +/* + * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about + * merging the two + */ + +typedef struct pkcs7_enc_content_st { + ASN1_OBJECT *content_type; + X509_ALGOR *algorithm; + ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ + const EVP_CIPHER *cipher; + const PKCS7_CTX *ctx; +} PKCS7_ENC_CONTENT; + +typedef struct pkcs7_enveloped_st { + ASN1_INTEGER *version; /* version 0 */ + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENVELOPE; + +typedef struct pkcs7_signedandenveloped_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + PKCS7_ENC_CONTENT *enc_data; + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; +} PKCS7_SIGN_ENVELOPE; + +typedef struct pkcs7_digest_st { + ASN1_INTEGER *version; /* version 0 */ + X509_ALGOR *md; /* md used */ + struct pkcs7_st *contents; + ASN1_OCTET_STRING *digest; +} PKCS7_DIGEST; + +typedef struct pkcs7_encrypted_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENCRYPT; + +typedef struct pkcs7_st { + /* + * The following is non NULL if it contains ASN1 encoding of this + * structure + */ + unsigned char *asn1; + long length; +# define PKCS7_S_HEADER 0 +# define PKCS7_S_BODY 1 +# define PKCS7_S_TAIL 2 + int state; /* used during processing */ + int detached; + ASN1_OBJECT *type; + /* content as defined by the type */ + /* + * all encryption/message digests are applied to the 'contents', leaving + * out the 'type' field. + */ + union { + char *ptr; + /* NID_pkcs7_data */ + ASN1_OCTET_STRING *data; + /* NID_pkcs7_signed */ + PKCS7_SIGNED *sign; + /* NID_pkcs7_enveloped */ + PKCS7_ENVELOPE *enveloped; + /* NID_pkcs7_signedAndEnveloped */ + PKCS7_SIGN_ENVELOPE *signed_and_enveloped; + /* NID_pkcs7_digest */ + PKCS7_DIGEST *digest; + /* NID_pkcs7_encrypted */ + PKCS7_ENCRYPT *encrypted; + /* Anything else */ + ASN1_TYPE *other; + } d; + PKCS7_CTX ctx; +} PKCS7; +{- + generate_stack_macros("PKCS7"); +-} + + +# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 +# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 + +# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) +# define PKCS7_get_attributes(si) ((si)->unauth_attr) + +# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) +# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) +# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) +# define PKCS7_type_is_signedAndEnveloped(a) \ + (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) +# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) +# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) + +# define PKCS7_set_detached(p,v) \ + PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) +# define PKCS7_get_detached(p) \ + PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) + +# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) + +/* S/MIME related flags */ + +# define PKCS7_TEXT 0x1 +# define PKCS7_NOCERTS 0x2 +# define PKCS7_NOSIGS 0x4 +# define PKCS7_NOCHAIN 0x8 +# define PKCS7_NOINTERN 0x10 +# define PKCS7_NOVERIFY 0x20 +# define PKCS7_DETACHED 0x40 +# define PKCS7_BINARY 0x80 +# define PKCS7_NOATTR 0x100 +# define PKCS7_NOSMIMECAP 0x200 +# define PKCS7_NOOLDMIMETYPE 0x400 +# define PKCS7_CRLFEOL 0x800 +# define PKCS7_STREAM 0x1000 +# define PKCS7_NOCRL 0x2000 +# define PKCS7_PARTIAL 0x4000 +# define PKCS7_REUSE_DIGEST 0x8000 +# define PKCS7_NO_DUAL_CONTENT 0x10000 + +/* Flags: for compatibility with older code */ + +# define SMIME_TEXT PKCS7_TEXT +# define SMIME_NOCERTS PKCS7_NOCERTS +# define SMIME_NOSIGS PKCS7_NOSIGS +# define SMIME_NOCHAIN PKCS7_NOCHAIN +# define SMIME_NOINTERN PKCS7_NOINTERN +# define SMIME_NOVERIFY PKCS7_NOVERIFY +# define SMIME_DETACHED PKCS7_DETACHED +# define SMIME_BINARY PKCS7_BINARY +# define SMIME_NOATTR PKCS7_NOATTR + +/* CRLF ASCII canonicalisation */ +# define SMIME_ASCIICRLF 0x80000 + +DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) + +int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, + const EVP_MD *type, unsigned char *md, + unsigned int *len); +# ifndef OPENSSL_NO_STDIO +PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); +int i2d_PKCS7_fp(FILE *fp, const PKCS7 *p7); +# endif +DECLARE_ASN1_DUP_FUNCTION(PKCS7) +PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); +int i2d_PKCS7_bio(BIO *bp, const PKCS7 *p7); +int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); +int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); + +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) +DECLARE_ASN1_FUNCTIONS(PKCS7) +PKCS7 *PKCS7_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) +DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) + +DECLARE_ASN1_NDEF_FUNCTION(PKCS7) +DECLARE_ASN1_PRINT_FUNCTION(PKCS7) + +long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); + +int PKCS7_type_is_other(PKCS7 *p7); +int PKCS7_set_type(PKCS7 *p7, int type); +int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); +int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); +int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, + const EVP_MD *dgst); +int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); +int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); +int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); +int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_content_new(PKCS7 *p7, int nid); +int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, + BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, + X509 *x509); + +BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); +int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); +BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); + +PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, + EVP_PKEY *pkey, const EVP_MD *dgst); +X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); +STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); + +PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); +void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, + X509_ALGOR **pdig, X509_ALGOR **psig); +void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); +int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); +int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); +int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); +int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); + +PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7); +ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, + void *data); +int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, + void *value); +ASN1_TYPE *PKCS7_get_attribute(const PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(const PKCS7_SIGNER_INFO *si, int nid); +int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); + +PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags); +PKCS7 *PKCS7_sign_ex(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags, OSSL_LIB_CTX *libctx, + const char *propq); + +PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, + X509 *signcert, EVP_PKEY *pkey, + const EVP_MD *md, int flags); + +int PKCS7_final(PKCS7 *p7, BIO *data, int flags); +int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, + BIO *indata, BIO *out, int flags); +STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, + int flags); +PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, + int flags); +PKCS7 *PKCS7_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, int flags, + OSSL_LIB_CTX *libctx, const char *propq); +int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, + int flags); + +int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, + STACK_OF(X509_ALGOR) *cap); +STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); +int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); + +int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); +int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); +int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, + const unsigned char *md, int mdlen); + +int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7_ex(BIO *bio, BIO **bcont, PKCS7 **p7); +PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); + +BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7err.h index 02e0299a..ceb1a501 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7err.h @@ -1,62 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS7ERR_H -# define HEADER_PKCS7ERR_H +#ifndef OPENSSL_PKCS7ERR_H +# define OPENSSL_PKCS7ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS7_strings(void); -/* - * PKCS7 function codes. - */ -# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 -# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 -# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 -# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 -# define PKCS7_F_PKCS7_ADD_CRL 101 -# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 -# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 -# define PKCS7_F_PKCS7_ADD_SIGNER 103 -# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 -# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 -# define PKCS7_F_PKCS7_CTRL 104 -# define PKCS7_F_PKCS7_DATADECODE 112 -# define PKCS7_F_PKCS7_DATAFINAL 128 -# define PKCS7_F_PKCS7_DATAINIT 105 -# define PKCS7_F_PKCS7_DATAVERIFY 107 -# define PKCS7_F_PKCS7_DECRYPT 114 -# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 -# define PKCS7_F_PKCS7_ENCODE_RINFO 132 -# define PKCS7_F_PKCS7_ENCRYPT 115 -# define PKCS7_F_PKCS7_FINAL 134 -# define PKCS7_F_PKCS7_FIND_DIGEST 127 -# define PKCS7_F_PKCS7_GET0_SIGNERS 124 -# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 -# define PKCS7_F_PKCS7_SET_CIPHER 108 -# define PKCS7_F_PKCS7_SET_CONTENT 109 -# define PKCS7_F_PKCS7_SET_DIGEST 126 -# define PKCS7_F_PKCS7_SET_TYPE 110 -# define PKCS7_F_PKCS7_SIGN 116 -# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 -# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 -# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 -# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 -# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 -# define PKCS7_F_PKCS7_VERIFY 117 /* * PKCS7 reason codes. diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/prov_ssl.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/prov_ssl.h new file mode 100644 index 00000000..d3e0896c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/prov_ssl.h @@ -0,0 +1,34 @@ +/* + * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROV_SSL_H +# define OPENSSL_PROV_SSL_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* SSL/TLS related defines useful to providers */ + +# define SSL_MAX_MASTER_KEY_LENGTH 48 + +# define SSL3_VERSION 0x0300 +# define TLS1_VERSION 0x0301 +# define TLS1_1_VERSION 0x0302 +# define TLS1_2_VERSION 0x0303 +# define TLS1_3_VERSION 0x0304 +# define DTLS1_VERSION 0xFEFF +# define DTLS1_2_VERSION 0xFEFD +# define DTLS1_BAD_VER 0x0100 + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_PROV_SSL_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/proverr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/proverr.h new file mode 100644 index 00000000..5d5c16d9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/proverr.h @@ -0,0 +1,149 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROVERR_H +# define OPENSSL_PROVERR_H +# pragma once + +# include +# include +# include + + + +/* + * PROV reason codes. + */ +# define PROV_R_ADDITIONAL_INPUT_TOO_LONG 184 +# define PROV_R_ALGORITHM_MISMATCH 173 +# define PROV_R_ALREADY_INSTANTIATED 185 +# define PROV_R_BAD_DECRYPT 100 +# define PROV_R_BAD_ENCODING 141 +# define PROV_R_BAD_LENGTH 142 +# define PROV_R_BAD_TLS_CLIENT_VERSION 161 +# define PROV_R_BN_ERROR 160 +# define PROV_R_CIPHER_OPERATION_FAILED 102 +# define PROV_R_DERIVATION_FUNCTION_INIT_FAILED 205 +# define PROV_R_DIGEST_NOT_ALLOWED 174 +# define PROV_R_EMS_NOT_ENABLED 233 +# define PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK 186 +# define PROV_R_ERROR_INSTANTIATING_DRBG 188 +# define PROV_R_ERROR_RETRIEVING_ENTROPY 189 +# define PROV_R_ERROR_RETRIEVING_NONCE 190 +# define PROV_R_FAILED_DURING_DERIVATION 164 +# define PROV_R_FAILED_TO_CREATE_LOCK 180 +# define PROV_R_FAILED_TO_DECRYPT 162 +# define PROV_R_FAILED_TO_GENERATE_KEY 121 +# define PROV_R_FAILED_TO_GET_PARAMETER 103 +# define PROV_R_FAILED_TO_SET_PARAMETER 104 +# define PROV_R_FAILED_TO_SIGN 175 +# define PROV_R_FIPS_MODULE_CONDITIONAL_ERROR 227 +# define PROV_R_FIPS_MODULE_ENTERING_ERROR_STATE 224 +# define PROV_R_FIPS_MODULE_IN_ERROR_STATE 225 +# define PROV_R_GENERATE_ERROR 191 +# define PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 165 +# define PROV_R_INDICATOR_INTEGRITY_FAILURE 210 +# define PROV_R_INSUFFICIENT_DRBG_STRENGTH 181 +# define PROV_R_INVALID_AAD 108 +# define PROV_R_INVALID_CONFIG_DATA 211 +# define PROV_R_INVALID_CONSTANT_LENGTH 157 +# define PROV_R_INVALID_CURVE 176 +# define PROV_R_INVALID_CUSTOM_LENGTH 111 +# define PROV_R_INVALID_DATA 115 +# define PROV_R_INVALID_DIGEST 122 +# define PROV_R_INVALID_DIGEST_LENGTH 166 +# define PROV_R_INVALID_DIGEST_SIZE 218 +# define PROV_R_INVALID_INPUT_LENGTH 230 +# define PROV_R_INVALID_ITERATION_COUNT 123 +# define PROV_R_INVALID_IV_LENGTH 109 +# define PROV_R_INVALID_KEY 158 +# define PROV_R_INVALID_KEY_LENGTH 105 +# define PROV_R_INVALID_MAC 151 +# define PROV_R_INVALID_MGF1_MD 167 +# define PROV_R_INVALID_MODE 125 +# define PROV_R_INVALID_OUTPUT_LENGTH 217 +# define PROV_R_INVALID_PADDING_MODE 168 +# define PROV_R_INVALID_PUBINFO 198 +# define PROV_R_INVALID_SALT_LENGTH 112 +# define PROV_R_INVALID_SEED_LENGTH 154 +# define PROV_R_INVALID_SIGNATURE_SIZE 179 +# define PROV_R_INVALID_STATE 212 +# define PROV_R_INVALID_TAG 110 +# define PROV_R_INVALID_TAG_LENGTH 118 +# define PROV_R_INVALID_UKM_LENGTH 200 +# define PROV_R_INVALID_X931_DIGEST 170 +# define PROV_R_IN_ERROR_STATE 192 +# define PROV_R_KEY_SETUP_FAILED 101 +# define PROV_R_KEY_SIZE_TOO_SMALL 171 +# define PROV_R_LENGTH_TOO_LARGE 202 +# define PROV_R_MISMATCHING_DOMAIN_PARAMETERS 203 +# define PROV_R_MISSING_CEK_ALG 144 +# define PROV_R_MISSING_CIPHER 155 +# define PROV_R_MISSING_CONFIG_DATA 213 +# define PROV_R_MISSING_CONSTANT 156 +# define PROV_R_MISSING_KEY 128 +# define PROV_R_MISSING_MAC 150 +# define PROV_R_MISSING_MESSAGE_DIGEST 129 +# define PROV_R_MISSING_OID 209 +# define PROV_R_MISSING_PASS 130 +# define PROV_R_MISSING_SALT 131 +# define PROV_R_MISSING_SECRET 132 +# define PROV_R_MISSING_SEED 140 +# define PROV_R_MISSING_SESSION_ID 133 +# define PROV_R_MISSING_TYPE 134 +# define PROV_R_MISSING_XCGHASH 135 +# define PROV_R_MODULE_INTEGRITY_FAILURE 214 +# define PROV_R_NOT_A_PRIVATE_KEY 221 +# define PROV_R_NOT_A_PUBLIC_KEY 220 +# define PROV_R_NOT_INSTANTIATED 193 +# define PROV_R_NOT_PARAMETERS 226 +# define PROV_R_NOT_SUPPORTED 136 +# define PROV_R_NOT_XOF_OR_INVALID_LENGTH 113 +# define PROV_R_NO_KEY_SET 114 +# define PROV_R_NO_PARAMETERS_SET 177 +# define PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 178 +# define PROV_R_OUTPUT_BUFFER_TOO_SMALL 106 +# define PROV_R_PARENT_CANNOT_GENERATE_RANDOM_NUMBERS 228 +# define PROV_R_PARENT_CANNOT_SUPPLY_ENTROPY_SEED 187 +# define PROV_R_PARENT_LOCKING_NOT_ENABLED 182 +# define PROV_R_PARENT_STRENGTH_TOO_WEAK 194 +# define PROV_R_PATH_MUST_BE_ABSOLUTE 219 +# define PROV_R_PERSONALISATION_STRING_TOO_LONG 195 +# define PROV_R_PSS_SALTLEN_TOO_SMALL 172 +# define PROV_R_REQUEST_TOO_LARGE_FOR_DRBG 196 +# define PROV_R_REQUIRE_CTR_MODE_CIPHER 206 +# define PROV_R_RESEED_ERROR 197 +# define PROV_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 222 +# define PROV_R_SEED_SOURCES_MUST_NOT_HAVE_A_PARENT 229 +# define PROV_R_SELF_TEST_KAT_FAILURE 215 +# define PROV_R_SELF_TEST_POST_FAILURE 216 +# define PROV_R_TAG_NOT_NEEDED 120 +# define PROV_R_TAG_NOT_SET 119 +# define PROV_R_TOO_MANY_RECORDS 126 +# define PROV_R_UNABLE_TO_FIND_CIPHERS 207 +# define PROV_R_UNABLE_TO_GET_PARENT_STRENGTH 199 +# define PROV_R_UNABLE_TO_GET_PASSPHRASE 159 +# define PROV_R_UNABLE_TO_INITIALISE_CIPHERS 208 +# define PROV_R_UNABLE_TO_LOAD_SHA256 147 +# define PROV_R_UNABLE_TO_LOCK_PARENT 201 +# define PROV_R_UNABLE_TO_RESEED 204 +# define PROV_R_UNSUPPORTED_CEK_ALG 145 +# define PROV_R_UNSUPPORTED_KEY_SIZE 153 +# define PROV_R_UNSUPPORTED_MAC_TYPE 137 +# define PROV_R_UNSUPPORTED_NUMBER_OF_ROUNDS 152 +# define PROV_R_URI_AUTHORITY_UNSUPPORTED 223 +# define PROV_R_VALUE_ERROR 138 +# define PROV_R_WRONG_FINAL_BLOCK_LENGTH 107 +# define PROV_R_WRONG_OUTPUT_BUFFER_SIZE 139 +# define PROV_R_XOF_DIGESTS_NOT_ALLOWED 183 +# define PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE 148 +# define PROV_R_XTS_DUPLICATED_KEYS 149 + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/provider.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/provider.h new file mode 100644 index 00000000..dc86ff58 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/provider.h @@ -0,0 +1,60 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROVIDER_H +# define OPENSSL_PROVIDER_H +# pragma once + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Set the default provider search path */ +int OSSL_PROVIDER_set_default_search_path(OSSL_LIB_CTX *, const char *path); + +/* Load and unload a provider */ +OSSL_PROVIDER *OSSL_PROVIDER_load(OSSL_LIB_CTX *, const char *name); +OSSL_PROVIDER *OSSL_PROVIDER_try_load(OSSL_LIB_CTX *, const char *name, + int retain_fallbacks); +int OSSL_PROVIDER_unload(OSSL_PROVIDER *prov); +int OSSL_PROVIDER_available(OSSL_LIB_CTX *, const char *name); +int OSSL_PROVIDER_do_all(OSSL_LIB_CTX *ctx, + int (*cb)(OSSL_PROVIDER *provider, void *cbdata), + void *cbdata); + +const OSSL_PARAM *OSSL_PROVIDER_gettable_params(const OSSL_PROVIDER *prov); +int OSSL_PROVIDER_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]); +int OSSL_PROVIDER_self_test(const OSSL_PROVIDER *prov); +int OSSL_PROVIDER_get_capabilities(const OSSL_PROVIDER *prov, + const char *capability, + OSSL_CALLBACK *cb, + void *arg); + +const OSSL_ALGORITHM *OSSL_PROVIDER_query_operation(const OSSL_PROVIDER *prov, + int operation_id, + int *no_cache); +void OSSL_PROVIDER_unquery_operation(const OSSL_PROVIDER *prov, + int operation_id, const OSSL_ALGORITHM *algs); +void *OSSL_PROVIDER_get0_provider_ctx(const OSSL_PROVIDER *prov); +const OSSL_DISPATCH *OSSL_PROVIDER_get0_dispatch(const OSSL_PROVIDER *prov); + +/* Add a built in providers */ +int OSSL_PROVIDER_add_builtin(OSSL_LIB_CTX *, const char *name, + OSSL_provider_init_fn *init_fn); + +/* Information */ +const char *OSSL_PROVIDER_get0_name(const OSSL_PROVIDER *prov); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h index 38a2a271..90e0f0a0 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h @@ -1,24 +1,42 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RAND_H -# define HEADER_RAND_H +#ifndef OPENSSL_RAND_H +# define OPENSSL_RAND_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RAND_H +# endif # include -# include +# include # include # include +# include #ifdef __cplusplus extern "C" { #endif +/* + * Default security strength (in the sense of [NIST SP 800-90Ar1]) + * + * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that + * of the cipher by collecting less entropy. The current DRBG implementation + * does not take RAND_DRBG_STRENGTH into account and sets the strength of the + * DRBG to that of the cipher. + */ +# define RAND_DRBG_STRENGTH 256 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 struct rand_meth_st { int (*seed) (const void *buf, int num); int (*bytes) (unsigned char *buf, int num); @@ -28,26 +46,55 @@ struct rand_meth_st { int (*status) (void); }; -int RAND_set_rand_method(const RAND_METHOD *meth); -const RAND_METHOD *RAND_get_rand_method(void); -# ifndef OPENSSL_NO_ENGINE -int RAND_set_rand_engine(ENGINE *engine); -# endif +OSSL_DEPRECATEDIN_3_0 int RAND_set_rand_method(const RAND_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const RAND_METHOD *RAND_get_rand_method(void); +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int RAND_set_rand_engine(ENGINE *engine); +# endif -RAND_METHOD *RAND_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 RAND_METHOD *RAND_OpenSSL(void); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define RAND_cleanup() while(0) continue # endif int RAND_bytes(unsigned char *buf, int num); int RAND_priv_bytes(unsigned char *buf, int num); -DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) + +/* + * Equivalent of RAND_priv_bytes() but additionally taking an OSSL_LIB_CTX and + * a strength. + */ +int RAND_priv_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num, + unsigned int strength); + +/* + * Equivalent of RAND_bytes() but additionally taking an OSSL_LIB_CTX and + * a strength. + */ +int RAND_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num, + unsigned int strength); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 int RAND_pseudo_bytes(unsigned char *buf, int num); +# endif + +EVP_RAND_CTX *RAND_get0_primary(OSSL_LIB_CTX *ctx); +EVP_RAND_CTX *RAND_get0_public(OSSL_LIB_CTX *ctx); +EVP_RAND_CTX *RAND_get0_private(OSSL_LIB_CTX *ctx); +int RAND_set0_public(OSSL_LIB_CTX *ctx, EVP_RAND_CTX *rand); +int RAND_set0_private(OSSL_LIB_CTX *ctx, EVP_RAND_CTX *rand); + +int RAND_set_DRBG_type(OSSL_LIB_CTX *ctx, const char *drbg, const char *propq, + const char *cipher, const char *digest); +int RAND_set_seed_source_type(OSSL_LIB_CTX *ctx, const char *seed, + const char *propq); void RAND_seed(const void *buf, int num); void RAND_keep_random_devices_open(int keep); # if defined(__ANDROID__) && defined(__NDK_FPABI__) -__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ +__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ # endif void RAND_add(const void *buf, int num, double randomness); int RAND_load_file(const char *file, long max_bytes); @@ -65,11 +112,12 @@ int RAND_poll(void); # if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) /* application has to include in order to use these */ -DEPRECATEDIN_1_1_0(void RAND_screen(void)) -DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void RAND_screen(void); +OSSL_DEPRECATEDIN_1_1_0 int RAND_event(UINT, WPARAM, LPARAM); +# endif # endif - #ifdef __cplusplus } #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand_drbg.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand_drbg.h deleted file mode 100644 index 45b731b7..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand_drbg.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DRBG_RAND_H -# define HEADER_DRBG_RAND_H - -# include -# include -# include - -/* - * RAND_DRBG flags - * - * Note: if new flags are added, the constant `rand_drbg_used_flags` - * in drbg_lib.c needs to be updated accordingly. - */ - -/* In CTR mode, disable derivation function ctr_df */ -# define RAND_DRBG_FLAG_CTR_NO_DF 0x1 - - -# if OPENSSL_API_COMPAT < 0x10200000L -/* This #define was replaced by an internal constant and should not be used. */ -# define RAND_DRBG_USED_FLAGS (RAND_DRBG_FLAG_CTR_NO_DF) -# endif - -/* - * Default security strength (in the sense of [NIST SP 800-90Ar1]) - * - * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that - * of the cipher by collecting less entropy. The current DRBG implementation - * does not take RAND_DRBG_STRENGTH into account and sets the strength of the - * DRBG to that of the cipher. - * - * RAND_DRBG_STRENGTH is currently only used for the legacy RAND - * implementation. - * - * Currently supported ciphers are: NID_aes_128_ctr, NID_aes_192_ctr and - * NID_aes_256_ctr - */ -# define RAND_DRBG_STRENGTH 256 -/* Default drbg type */ -# define RAND_DRBG_TYPE NID_aes_256_ctr -/* Default drbg flags */ -# define RAND_DRBG_FLAGS 0 - - -# ifdef __cplusplus -extern "C" { -# endif - -/* - * Object lifetime functions. - */ -RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent); -RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent); -int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags); -int RAND_DRBG_set_defaults(int type, unsigned int flags); -int RAND_DRBG_instantiate(RAND_DRBG *drbg, - const unsigned char *pers, size_t perslen); -int RAND_DRBG_uninstantiate(RAND_DRBG *drbg); -void RAND_DRBG_free(RAND_DRBG *drbg); - -/* - * Object "use" functions. - */ -int RAND_DRBG_reseed(RAND_DRBG *drbg, - const unsigned char *adin, size_t adinlen, - int prediction_resistance); -int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen, - int prediction_resistance, - const unsigned char *adin, size_t adinlen); -int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen); - -int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval); -int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval); - -int RAND_DRBG_set_reseed_defaults( - unsigned int master_reseed_interval, - unsigned int slave_reseed_interval, - time_t master_reseed_time_interval, - time_t slave_reseed_time_interval - ); - -RAND_DRBG *RAND_DRBG_get0_master(void); -RAND_DRBG *RAND_DRBG_get0_public(void); -RAND_DRBG *RAND_DRBG_get0_private(void); - -/* - * EXDATA - */ -# define RAND_DRBG_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG, l, p, newf, dupf, freef) -int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *arg); -void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx); - -/* - * Callback function typedefs - */ -typedef size_t (*RAND_DRBG_get_entropy_fn)(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, - size_t max_len, - int prediction_resistance); -typedef void (*RAND_DRBG_cleanup_entropy_fn)(RAND_DRBG *ctx, - unsigned char *out, size_t outlen); -typedef size_t (*RAND_DRBG_get_nonce_fn)(RAND_DRBG *drbg, unsigned char **pout, - int entropy, size_t min_len, - size_t max_len); -typedef void (*RAND_DRBG_cleanup_nonce_fn)(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); - -int RAND_DRBG_set_callbacks(RAND_DRBG *drbg, - RAND_DRBG_get_entropy_fn get_entropy, - RAND_DRBG_cleanup_entropy_fn cleanup_entropy, - RAND_DRBG_get_nonce_fn get_nonce, - RAND_DRBG_cleanup_nonce_fn cleanup_nonce); - - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/randerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/randerr.h index 79d57905..b5e08e43 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/randerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/randerr.h @@ -1,54 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RANDERR_H -# define HEADER_RANDERR_H +#ifndef OPENSSL_RANDERR_H +# define OPENSSL_RANDERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RAND_strings(void); -/* - * RAND function codes. - */ -# define RAND_F_DATA_COLLECT_METHOD 127 -# define RAND_F_DRBG_BYTES 101 -# define RAND_F_DRBG_GET_ENTROPY 105 -# define RAND_F_DRBG_SETUP 117 -# define RAND_F_GET_ENTROPY 106 -# define RAND_F_RAND_BYTES 100 -# define RAND_F_RAND_DRBG_ENABLE_LOCKING 119 -# define RAND_F_RAND_DRBG_GENERATE 107 -# define RAND_F_RAND_DRBG_GET_ENTROPY 120 -# define RAND_F_RAND_DRBG_GET_NONCE 123 -# define RAND_F_RAND_DRBG_INSTANTIATE 108 -# define RAND_F_RAND_DRBG_NEW 109 -# define RAND_F_RAND_DRBG_RESEED 110 -# define RAND_F_RAND_DRBG_RESTART 102 -# define RAND_F_RAND_DRBG_SET 104 -# define RAND_F_RAND_DRBG_SET_DEFAULTS 121 -# define RAND_F_RAND_DRBG_UNINSTANTIATE 118 -# define RAND_F_RAND_LOAD_FILE 111 -# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 122 -# define RAND_F_RAND_POOL_ADD 103 -# define RAND_F_RAND_POOL_ADD_BEGIN 113 -# define RAND_F_RAND_POOL_ADD_END 114 -# define RAND_F_RAND_POOL_ATTACH 124 -# define RAND_F_RAND_POOL_BYTES_NEEDED 115 -# define RAND_F_RAND_POOL_GROW 125 -# define RAND_F_RAND_POOL_NEW 116 -# define RAND_F_RAND_PSEUDO_BYTES 126 -# define RAND_F_RAND_WRITE_FILE 112 /* * RAND reason codes. @@ -71,6 +39,7 @@ int ERR_load_RAND_strings(void); # define RAND_R_FUNC_NOT_IMPLEMENTED 101 # define RAND_R_FWRITE_ERROR 123 # define RAND_R_GENERATE_ERROR 112 +# define RAND_R_INSUFFICIENT_DRBG_STRENGTH 139 # define RAND_R_INTERNAL_ERROR 113 # define RAND_R_IN_ERROR_STATE 114 # define RAND_R_NOT_A_REGULAR_FILE 122 @@ -88,6 +57,11 @@ int ERR_load_RAND_strings(void); # define RAND_R_SELFTEST_FAILURE 119 # define RAND_R_TOO_LITTLE_NONCE_REQUESTED 135 # define RAND_R_TOO_MUCH_NONCE_REQUESTED 136 +# define RAND_R_UNABLE_TO_CREATE_DRBG 143 +# define RAND_R_UNABLE_TO_FETCH_DRBG 144 +# define RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER 141 +# define RAND_R_UNABLE_TO_GET_PARENT_STRENGTH 138 +# define RAND_R_UNABLE_TO_LOCK_PARENT 140 # define RAND_R_UNSUPPORTED_DRBG_FLAGS 132 # define RAND_R_UNSUPPORTED_DRBG_TYPE 120 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc2.h index 585f9e4c..ff633fd8 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc2.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc2.h @@ -1,51 +1,68 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC2_H -# define HEADER_RC2_H +#ifndef OPENSSL_RC2_H +# define OPENSSL_RC2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC2_H +# endif # include # ifndef OPENSSL_NO_RC2 -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif +# define RC2_BLOCK 8 +# define RC2_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int RC2_INT; -# define RC2_ENCRYPT 1 -# define RC2_DECRYPT 0 - -# define RC2_BLOCK 8 -# define RC2_KEY_LENGTH 16 +# define RC2_ENCRYPT 1 +# define RC2_DECRYPT 0 typedef struct rc2_key_st { RC2_INT data[64]; } RC2_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void RC2_set_key(RC2_KEY *key, int len, + const unsigned char *data, int bits); +OSSL_DEPRECATEDIN_3_0 void RC2_ecb_encrypt(const unsigned char *in, + unsigned char *out, RC2_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_encrypt(unsigned long *data, RC2_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC2_decrypt(unsigned long *data, RC2_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC2_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *ks, unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *schedule, + unsigned char *ivec, + int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *schedule, + unsigned char *ivec, + int *num); +# endif -void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); -void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC2_KEY *key, int enc); -void RC2_encrypt(unsigned long *data, RC2_KEY *key); -void RC2_decrypt(unsigned long *data, RC2_KEY *key); -void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - RC2_KEY *ks, unsigned char *iv, int enc); -void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num, int enc); -void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc4.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc4.h index 86803b37..600b2885 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc4.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc4.h @@ -1,36 +1,47 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC4_H -# define HEADER_RC4_H +#ifndef OPENSSL_RC4_H +# define OPENSSL_RC4_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC4_H +# endif # include # ifndef OPENSSL_NO_RC4 -# include -#ifdef __cplusplus +# include +# ifdef __cplusplus extern "C" { -#endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef struct rc4_key_st { RC4_INT x, y; RC4_INT data[256]; } RC4_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *RC4_options(void); +OSSL_DEPRECATEDIN_3_0 void RC4_set_key(RC4_KEY *key, int len, + const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void RC4(RC4_KEY *key, size_t len, + const unsigned char *indata, + unsigned char *outdata); +# endif -const char *RC4_options(void); -void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, - unsigned char *outdata); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc5.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc5.h index 793f88e4..de833523 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc5.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc5.h @@ -1,63 +1,79 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC5_H -# define HEADER_RC5_H +#ifndef OPENSSL_RC5_H +# define OPENSSL_RC5_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC5_H +# endif # include # ifndef OPENSSL_NO_RC5 -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif -# define RC5_ENCRYPT 1 -# define RC5_DECRYPT 0 +# define RC5_32_BLOCK 8 +# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ -# define RC5_32_INT unsigned int +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define RC5_ENCRYPT 1 +# define RC5_DECRYPT 0 -# define RC5_32_BLOCK 8 -# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ +# define RC5_32_INT unsigned int /* * This are the only values supported. Tweak the code if you want more The * most supported modes will be RC5-32/12/16 RC5-32/16/8 */ -# define RC5_8_ROUNDS 8 -# define RC5_12_ROUNDS 12 -# define RC5_16_ROUNDS 16 +# define RC5_8_ROUNDS 8 +# define RC5_12_ROUNDS 12 +# define RC5_16_ROUNDS 16 typedef struct rc5_key_st { /* Number of rounds */ int rounds; RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)]; } RC5_32_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RC5_32_set_key(RC5_32_KEY *key, int len, + const unsigned char *data, + int rounds); +OSSL_DEPRECATEDIN_3_0 void RC5_32_ecb_encrypt(const unsigned char *in, + unsigned char *out, + RC5_32_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC5_32_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *ks, unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *schedule, + unsigned char *ivec, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *schedule, + unsigned char *ivec, int *num); +# endif -void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, - int rounds); -void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC5_32_KEY *key, int enc); -void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *ks, unsigned char *iv, - int enc); -void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ripemd.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ripemd.h index c42026aa..900ee317 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ripemd.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ripemd.h @@ -1,29 +1,38 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RIPEMD_H -# define HEADER_RIPEMD_H +#ifndef OPENSSL_RIPEMD_H +# define OPENSSL_RIPEMD_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RIPEMD_H +# endif # include -#ifndef OPENSSL_NO_RMD160 -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_RMD160 +# include +# include + +# define RIPEMD160_DIGEST_LENGTH 20 + +# ifdef __cplusplus extern "C" { -# endif +# endif +# if !defined(OPENSSL_NO_DEPRECATED_3_0) -# define RIPEMD160_LONG unsigned int +# define RIPEMD160_LONG unsigned int -# define RIPEMD160_CBLOCK 64 -# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) -# define RIPEMD160_DIGEST_LENGTH 20 +# define RIPEMD160_CBLOCK 64 +# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) typedef struct RIPEMD160state_st { RIPEMD160_LONG A, B, C, D, E; @@ -31,17 +40,20 @@ typedef struct RIPEMD160state_st { RIPEMD160_LONG data[RIPEMD160_LBLOCK]; unsigned int num; } RIPEMD160_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Init(RIPEMD160_CTX *c); +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *RIPEMD160(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void RIPEMD160_Transform(RIPEMD160_CTX *c, + const unsigned char *b); +# endif -int RIPEMD160_Init(RIPEMD160_CTX *c); -int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); -int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); -unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); -void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); - -# ifdef __cplusplus +# ifdef __cplusplus } +# endif # endif -# endif - - #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h index 5e76365c..d0c95992 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h @@ -1,70 +1,78 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RSA_H -# define HEADER_RSA_H +#ifndef OPENSSL_RSA_H +# define OPENSSL_RSA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RSA_H +# endif # include -# ifndef OPENSSL_NO_RSA # include # include # include -# include -# if OPENSSL_API_COMPAT < 0x10100000L +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif # include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + # ifdef __cplusplus extern "C" { # endif -/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ - # ifndef OPENSSL_RSA_MAX_MODULUS_BITS # define OPENSSL_RSA_MAX_MODULUS_BITS 16384 # endif -# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024 - -# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS -# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 -# endif -# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS - -/* exponent limit enforced for "large" modulus only */ -# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 -# endif - # define RSA_3 0x3L # define RSA_F4 0x10001L +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ + +# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 2048 + +# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS +# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 +# endif + +/* exponent limit enforced for "large" modulus only */ +# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS +# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 +# endif /* based on RFC 8017 appendix A.1.2 */ -# define RSA_ASN1_VERSION_DEFAULT 0 -# define RSA_ASN1_VERSION_MULTI 1 +# define RSA_ASN1_VERSION_DEFAULT 0 +# define RSA_ASN1_VERSION_MULTI 1 -# define RSA_DEFAULT_PRIME_NUM 2 +# define RSA_DEFAULT_PRIME_NUM 2 -# define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private - * match */ - -# define RSA_FLAG_CACHE_PUBLIC 0x0002 -# define RSA_FLAG_CACHE_PRIVATE 0x0004 -# define RSA_FLAG_BLINDING 0x0008 -# define RSA_FLAG_THREAD_SAFE 0x0010 +# define RSA_METHOD_FLAG_NO_CHECK 0x0001 +# define RSA_FLAG_CACHE_PUBLIC 0x0002 +# define RSA_FLAG_CACHE_PRIVATE 0x0004 +# define RSA_FLAG_BLINDING 0x0008 +# define RSA_FLAG_THREAD_SAFE 0x0010 /* * This flag means the private key operations will be handled by rsa_mod_exp * and that they do not depend on the private key components being present: * for example a key stored in external hardware. Without this flag * bn_mod_exp gets called when private key components are absent. */ -# define RSA_FLAG_EXT_PKEY 0x0020 +# define RSA_FLAG_EXT_PKEY 0x0020 /* * new with 0.9.6j and 0.9.7b; the built-in @@ -72,14 +80,14 @@ extern "C" { * default (ignoring RSA_FLAG_BLINDING), * but other engines might not need it */ -# define RSA_FLAG_NO_BLINDING 0x0080 -# if OPENSSL_API_COMPAT < 0x10100000L +# define RSA_FLAG_NO_BLINDING 0x0080 +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /* * Does nothing. Previously this switched off constant time behaviour. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define RSA_FLAG_NO_CONSTTIME 0x0000 # endif -# if OPENSSL_API_COMPAT < 0x00908000L /* deprecated name for the flag*/ /* * new with 0.9.7h; the built-in RSA @@ -89,79 +97,78 @@ extern "C" { * faster variable sliding window method to * be used for all exponents. */ +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 # define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME # endif -# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_RSA_PADDING, pad, NULL) +/*- + * New with 3.0: use part of the flags to denote exact type of RSA key, + * some of which are limited to specific signature and encryption schemes. + * These different types share the same RSA structure, but indicate the + * use of certain fields in that structure. + * Currently known are: + * RSA - this is the "normal" unlimited RSA structure (typenum 0) + * RSASSA-PSS - indicates that the PSS parameters are used. + * RSAES-OAEP - no specific field used for the moment, but OAEP padding + * is expected. (currently unused) + * + * 4 bits allow for 16 types + */ +# define RSA_FLAG_TYPE_MASK 0xF000 +# define RSA_FLAG_TYPE_RSA 0x0000 +# define RSA_FLAG_TYPE_RSASSAPSS 0x1000 +# define RSA_FLAG_TYPE_RSAESOAEP 0x2000 -# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) +int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad_mode); +int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad_mode); + +int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int saltlen); +int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *saltlen); + +int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int bits); +int EVP_PKEY_CTX_set1_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); +int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes); +int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *ctx, int saltlen); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); +# endif -# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) /* Salt length matches digest */ # define RSA_PSS_SALTLEN_DIGEST -1 /* Verify only: auto detect salt length */ # define RSA_PSS_SALTLEN_AUTO -2 /* Set salt length to maximum possible */ # define RSA_PSS_SALTLEN_MAX -3 +/* Auto-detect on verify, set salt length to min(maximum possible, digest + * length) on sign */ +# define RSA_PSS_SALTLEN_AUTO_DIGEST_MAX -4 /* Old compatible max salt length for sign only */ # define RSA_PSS_SALTLEN_MAX_SIGN -2 -# define EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) +int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); +int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_get_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, char *name, + size_t namelen); +int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md_name(EVP_PKEY_CTX *ctx, + const char *mdname); -# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, plen) +int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_pss_keygen_md_name(EVP_PKEY_CTX *ctx, + const char *mdname, + const char *mdprops); -# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) - -# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) - -# define EVP_PKEY_CTX_set_rsa_keygen_primes(ctx, primes) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES, primes, NULL) - -# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)(l)) - -# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)(l)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, \ - EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_MD, \ - 0, (void *)(md)) +int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); +int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_get_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, char *name, + size_t namelen); +int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, void *label, int llen); +int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) @@ -182,104 +189,135 @@ extern "C" { # define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) -# define RSA_PKCS1_PADDING 1 -# define RSA_SSLV23_PADDING 2 -# define RSA_NO_PADDING 3 -# define RSA_PKCS1_OAEP_PADDING 4 -# define RSA_X931_PADDING 5 -/* EVP_PKEY_ only */ -# define RSA_PKCS1_PSS_PADDING 6 +# define RSA_PKCS1_PADDING 1 +# define RSA_NO_PADDING 3 +# define RSA_PKCS1_OAEP_PADDING 4 +# define RSA_X931_PADDING 5 -# define RSA_PKCS1_PADDING_SIZE 11 +/* EVP_PKEY_ only */ +# define RSA_PKCS1_PSS_PADDING 6 +# define RSA_PKCS1_WITH_TLS_PADDING 7 + +# define RSA_PKCS1_PADDING_SIZE 11 # define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) # define RSA_get_app_data(s) RSA_get_ex_data(s,0) -RSA *RSA_new(void); -RSA *RSA_new_method(ENGINE *engine); -int RSA_bits(const RSA *rsa); -int RSA_size(const RSA *rsa); -int RSA_security_bits(const RSA *rsa); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *RSA_new(void); +OSSL_DEPRECATEDIN_3_0 RSA *RSA_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 int RSA_bits(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_size(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_security_bits(const RSA *rsa); -int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); -int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); -int RSA_set0_crt_params(RSA *r,BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); -int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], - BIGNUM *coeffs[], int pnum); -void RSA_get0_key(const RSA *r, - const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); -void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); -int RSA_get_multi_prime_extra_count(const RSA *r); -int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]); -void RSA_get0_crt_params(const RSA *r, - const BIGNUM **dmp1, const BIGNUM **dmq1, - const BIGNUM **iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_crt_params(RSA *r, + BIGNUM *dmp1, BIGNUM *dmq1, + BIGNUM *iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_multi_prime_params(RSA *r, + BIGNUM *primes[], + BIGNUM *exps[], + BIGNUM *coeffs[], + int pnum); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_key(const RSA *r, + const BIGNUM **n, const BIGNUM **e, + const BIGNUM **d); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_factors(const RSA *r, + const BIGNUM **p, const BIGNUM **q); +OSSL_DEPRECATEDIN_3_0 int RSA_get_multi_prime_extra_count(const RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_get0_multi_prime_factors(const RSA *r, + const BIGNUM *primes[]); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_crt_params(const RSA *r, + const BIGNUM **dmp1, + const BIGNUM **dmq1, + const BIGNUM **iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], const BIGNUM *coeffs[]); -const BIGNUM *RSA_get0_n(const RSA *d); -const BIGNUM *RSA_get0_e(const RSA *d); -const BIGNUM *RSA_get0_d(const RSA *d); -const BIGNUM *RSA_get0_p(const RSA *d); -const BIGNUM *RSA_get0_q(const RSA *d); -const BIGNUM *RSA_get0_dmp1(const RSA *r); -const BIGNUM *RSA_get0_dmq1(const RSA *r); -const BIGNUM *RSA_get0_iqmp(const RSA *r); -const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); -void RSA_clear_flags(RSA *r, int flags); -int RSA_test_flags(const RSA *r, int flags); -void RSA_set_flags(RSA *r, int flags); -int RSA_get_version(RSA *r); -ENGINE *RSA_get0_engine(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_n(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_e(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_d(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_p(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_q(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmp1(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmq1(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_iqmp(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); +OSSL_DEPRECATEDIN_3_0 void RSA_clear_flags(RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 int RSA_test_flags(const RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 void RSA_set_flags(RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 int RSA_get_version(RSA *r); +OSSL_DEPRECATEDIN_3_0 ENGINE *RSA_get0_engine(const RSA *r); +# endif /* !OPENSSL_NO_DEPRECATED_3_0 */ + +# define EVP_RSA_gen(bits) \ + EVP_PKEY_Q_keygen(NULL, NULL, "RSA", (size_t)(0 + (bits))) /* Deprecated version */ -DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void - (*callback) (int, int, void *), - void *cb_arg)) +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 RSA *RSA_generate_key(int bits, unsigned long e, void + (*callback) (int, int, void *), + void *cb_arg); +# endif /* New version */ -int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, + BN_GENCB *cb); /* Multi-prime version */ -int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, - BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_generate_multi_prime_key(RSA *rsa, int bits, + int primes, BIGNUM *e, + BN_GENCB *cb); -int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, - BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2, - const BIGNUM *Xp, const BIGNUM *Xq1, const BIGNUM *Xq2, - const BIGNUM *Xq, const BIGNUM *e, BN_GENCB *cb); -int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, - BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, + BIGNUM *q1, BIGNUM *q2, + const BIGNUM *Xp1, const BIGNUM *Xp2, + const BIGNUM *Xp, const BIGNUM *Xq1, + const BIGNUM *Xq2, const BIGNUM *Xq, + const BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_X931_generate_key_ex(RSA *rsa, int bits, + const BIGNUM *e, + BN_GENCB *cb); -int RSA_check_key(const RSA *); -int RSA_check_key_ex(const RSA *, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_check_key(const RSA *); +OSSL_DEPRECATEDIN_3_0 int RSA_check_key_ex(const RSA *, BN_GENCB *cb); /* next 4 return -1 on error */ -int RSA_public_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_public_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -void RSA_free(RSA *r); +OSSL_DEPRECATEDIN_3_0 +int RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r); /* "up" the RSA object's reference count */ -int RSA_up_ref(RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_up_ref(RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_flags(const RSA *r); -int RSA_flags(const RSA *r); - -void RSA_set_default_method(const RSA_METHOD *meth); -const RSA_METHOD *RSA_get_default_method(void); -const RSA_METHOD *RSA_null_method(void); -const RSA_METHOD *RSA_get_method(const RSA *rsa); -int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void RSA_set_default_method(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_null_method(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_method(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); /* these are the actual RSA functions */ -const RSA_METHOD *RSA_PKCS1_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_PKCS1_OpenSSL(void); + +DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, + RSA, RSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, + RSA, RSAPrivateKey) +# endif /* !OPENSSL_NO_DEPRECATED_3_0 */ int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2); -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) - struct rsa_pss_params_st { X509_ALGOR *hashAlgorithm; X509_ALGOR *maskGenAlgorithm; @@ -290,6 +328,7 @@ struct rsa_pss_params_st { }; DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) +DECLARE_ASN1_DUP_FUNCTION(RSA_PSS_PARAMS) typedef struct rsa_oaep_params_st { X509_ALGOR *hashFunc; @@ -301,101 +340,119 @@ typedef struct rsa_oaep_params_st { DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) -# ifndef OPENSSL_NO_STDIO -int RSA_print_fp(FILE *fp, const RSA *r, int offset); -# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int RSA_print_fp(FILE *fp, const RSA *r, int offset); +# endif -int RSA_print(BIO *bp, const RSA *r, int offset); +OSSL_DEPRECATEDIN_3_0 int RSA_print(BIO *bp, const RSA *r, int offset); /* * The following 2 functions sign and verify a X509_SIG ASN1 object inside * PKCS#1 padded RSA encryption */ -int RSA_sign(int type, const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify(int type, const unsigned char *m, unsigned int m_length, - const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_sign(int type, const unsigned char *m, + unsigned int m_length, unsigned char *sigret, + unsigned int *siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_verify(int type, const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, RSA *rsa); /* * The following 2 function sign and verify a ASN1_OCTET_STRING object inside * PKCS#1 padded RSA encryption */ +OSSL_DEPRECATEDIN_3_0 int RSA_sign_ASN1_OCTET_STRING(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, - unsigned int m_length, unsigned char *sigbuf, - unsigned int siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int RSA_verify_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigbuf, unsigned int siglen, + RSA *rsa); -int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); -void RSA_blinding_off(RSA *rsa); -BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void RSA_blinding_off(RSA *rsa); +OSSL_DEPRECATEDIN_3_0 BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); -int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, - long seedlen, const EVP_MD *dgst); +OSSL_DEPRECATEDIN_3_0 int PKCS1_MGF1(unsigned char *mask, long len, + const unsigned char *seed, long seedlen, + const EVP_MD *dgst); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *f, int fl, const unsigned char *p, int pl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len, const unsigned char *p, int pl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, const unsigned char *from, int flen, const unsigned char *param, int plen, const EVP_MD *md, const EVP_MD *mgf1md); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, const unsigned char *from, int flen, - int num, const unsigned char *param, - int plen, const EVP_MD *md, - const EVP_MD *mgf1md); -int RSA_padding_add_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_none(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_X931(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_X931_hash_id(int nid); + int num, + const unsigned char *param, int plen, + const EVP_MD *md, const EVP_MD *mgf1md); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_none(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_none(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_X931_hash_id(int nid); +OSSL_DEPRECATEDIN_3_0 int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, const EVP_MD *Hash, const unsigned char *EM, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, const unsigned char *mHash, const EVP_MD *Hash, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, const EVP_MD *Hash, const EVP_MD *mgf1Hash, const unsigned char *EM, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, const unsigned char *mHash, const EVP_MD *Hash, const EVP_MD *mgf1Hash, int sLen); -#define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ +# define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) -int RSA_set_ex_data(RSA *r, int idx, void *arg); -void *RSA_get_ex_data(const RSA *r, int idx); +OSSL_DEPRECATEDIN_3_0 int RSA_set_ex_data(RSA *r, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *RSA_get_ex_data(const RSA *r, int idx); -RSA *RSAPublicKey_dup(RSA *rsa); -RSA *RSAPrivateKey_dup(RSA *rsa); +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPublicKey) +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPrivateKey) /* * If this flag is set the RSA method is FIPS compliant and can be used in @@ -404,7 +461,7 @@ RSA *RSAPrivateKey_dup(RSA *rsa); * result is compliant. */ -# define RSA_FLAG_FIPS_METHOD 0x0400 +# define RSA_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are @@ -412,58 +469,80 @@ RSA *RSAPrivateKey_dup(RSA *rsa); * usage is compliant. */ -# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 +# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 /* * Application has decided PRNG is good enough to generate a key: don't * check. */ -# define RSA_FLAG_CHECKED 0x0800 +# define RSA_FLAG_CHECKED 0x0800 -RSA_METHOD *RSA_meth_new(const char *name, int flags); -void RSA_meth_free(RSA_METHOD *meth); -RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); -const char *RSA_meth_get0_name(const RSA_METHOD *meth); -int RSA_meth_set1_name(RSA_METHOD *meth, const char *name); -int RSA_meth_get_flags(const RSA_METHOD *meth); -int RSA_meth_set_flags(RSA_METHOD *meth, int flags); -void *RSA_meth_get0_app_data(const RSA_METHOD *meth); -int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data); -int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void RSA_meth_free(RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const char *RSA_meth_get0_name(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set1_name(RSA_METHOD *meth, + const char *name); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_get_flags(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_flags(RSA_METHOD *meth, int flags); +OSSL_DEPRECATEDIN_3_0 void *RSA_meth_get0_app_data(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set0_app_data(RSA_METHOD *meth, + void *app_data); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_pub_enc(RSA_METHOD *rsa, int (*pub_enc) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_pub_dec(RSA_METHOD *rsa, int (*pub_dec) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_priv_enc(RSA_METHOD *rsa, int (*priv_enc) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_priv_dec(RSA_METHOD *rsa, int (*priv_dec) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) (BIGNUM *r0, + const BIGNUM *i, + RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_mod_exp(RSA_METHOD *rsa, int (*mod_exp) (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx)); -int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, @@ -471,43 +550,61 @@ int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)); +OSSL_DEPRECATEDIN_3_0 int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); +OSSL_DEPRECATEDIN_3_0 int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); -int (*RSA_meth_get_sign(const RSA_METHOD *meth)) - (int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_sign(const RSA_METHOD *meth)) (int type, + const unsigned char *m, + unsigned int m_length, + unsigned char *sigret, + unsigned int *siglen, + const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_sign(RSA_METHOD *rsa, int (*sign) (int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, const RSA *rsa)); -int (*RSA_meth_get_verify(const RSA_METHOD *meth)) - (int dtype, const unsigned char *m, - unsigned int m_length, const unsigned char *sigbuf, - unsigned int siglen, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_verify(const RSA_METHOD *meth)) (int dtype, + const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, + const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_verify(RSA_METHOD *rsa, int (*verify) (int dtype, const unsigned char *m, unsigned int m_length, const unsigned char *sigbuf, unsigned int siglen, const RSA *rsa)); -int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) (RSA *rsa, int bits, + BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_keygen(RSA_METHOD *rsa, int (*keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb)); -int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) (RSA *rsa, + int bits, + int primes, + BIGNUM *e, + BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, int (*keygen) (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb)); +#endif /* !OPENSSL_NO_DEPRECATED_3_0 */ -# ifdef __cplusplus +# ifdef __cplusplus } -# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsaerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsaerr.h index 59b15e13..c58463c7 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsaerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsaerr.h @@ -1,91 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RSAERR_H -# define HEADER_RSAERR_H +#ifndef OPENSSL_RSAERR_H +# define OPENSSL_RSAERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RSA_strings(void); -/* - * RSA function codes. - */ -# define RSA_F_CHECK_PADDING_MD 140 -# define RSA_F_ENCODE_PKCS1 146 -# define RSA_F_INT_RSA_VERIFY 145 -# define RSA_F_OLD_RSA_PRIV_DECODE 147 -# define RSA_F_PKEY_PSS_INIT 165 -# define RSA_F_PKEY_RSA_CTRL 143 -# define RSA_F_PKEY_RSA_CTRL_STR 144 -# define RSA_F_PKEY_RSA_SIGN 142 -# define RSA_F_PKEY_RSA_VERIFY 149 -# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 -# define RSA_F_RSA_ALGOR_TO_MD 156 -# define RSA_F_RSA_BUILTIN_KEYGEN 129 -# define RSA_F_RSA_CHECK_KEY 123 -# define RSA_F_RSA_CHECK_KEY_EX 160 -# define RSA_F_RSA_CMS_DECRYPT 159 -# define RSA_F_RSA_CMS_VERIFY 158 -# define RSA_F_RSA_ITEM_VERIFY 148 -# define RSA_F_RSA_METH_DUP 161 -# define RSA_F_RSA_METH_NEW 162 -# define RSA_F_RSA_METH_SET1_NAME 163 -# define RSA_F_RSA_MGF1_TO_MD 157 -# define RSA_F_RSA_MULTIP_INFO_NEW 166 -# define RSA_F_RSA_NEW_METHOD 106 -# define RSA_F_RSA_NULL 124 -# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 -# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 -# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 -# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 -# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 101 -# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 -# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 -# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 -# define RSA_F_RSA_PADDING_ADD_NONE 107 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 154 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 -# define RSA_F_RSA_PADDING_ADD_SSLV23 110 -# define RSA_F_RSA_PADDING_ADD_X931 127 -# define RSA_F_RSA_PADDING_CHECK_NONE 111 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 153 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 -# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 -# define RSA_F_RSA_PADDING_CHECK_X931 128 -# define RSA_F_RSA_PARAM_DECODE 164 -# define RSA_F_RSA_PRINT 115 -# define RSA_F_RSA_PRINT_FP 116 -# define RSA_F_RSA_PRIV_DECODE 150 -# define RSA_F_RSA_PRIV_ENCODE 138 -# define RSA_F_RSA_PSS_GET_PARAM 151 -# define RSA_F_RSA_PSS_TO_CTX 155 -# define RSA_F_RSA_PUB_DECODE 139 -# define RSA_F_RSA_SETUP_BLINDING 136 -# define RSA_F_RSA_SIGN 117 -# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 -# define RSA_F_RSA_VERIFY 119 -# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 -# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 126 -# define RSA_F_SETUP_TBUF 167 /* * RSA reason codes. @@ -114,24 +45,30 @@ int ERR_load_RSA_strings(void); # define RSA_R_INVALID_DIGEST 157 # define RSA_R_INVALID_DIGEST_LENGTH 143 # define RSA_R_INVALID_HEADER 137 +# define RSA_R_INVALID_KEYPAIR 171 +# define RSA_R_INVALID_KEY_LENGTH 173 # define RSA_R_INVALID_LABEL 160 +# define RSA_R_INVALID_LENGTH 181 # define RSA_R_INVALID_MESSAGE_LENGTH 131 # define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_MODULUS 174 # define RSA_R_INVALID_MULTI_PRIME_KEY 167 # define RSA_R_INVALID_OAEP_PARAMETERS 161 # define RSA_R_INVALID_PADDING 138 # define RSA_R_INVALID_PADDING_MODE 141 # define RSA_R_INVALID_PSS_PARAMETERS 149 # define RSA_R_INVALID_PSS_SALTLEN 146 +# define RSA_R_INVALID_REQUEST 175 # define RSA_R_INVALID_SALT_LENGTH 150 +# define RSA_R_INVALID_STRENGTH 176 # define RSA_R_INVALID_TRAILER 139 # define RSA_R_INVALID_X931_DIGEST 142 # define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 # define RSA_R_KEY_PRIME_NUM_INVALID 165 # define RSA_R_KEY_SIZE_TOO_SMALL 120 # define RSA_R_LAST_OCTET_INVALID 134 -# define RSA_R_MISSING_PRIVATE_KEY 179 # define RSA_R_MGF1_DIGEST_NOT_ALLOWED 152 +# define RSA_R_MISSING_PRIVATE_KEY 179 # define RSA_R_MODULUS_TOO_LARGE 105 # define RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R 168 # define RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D 169 @@ -143,10 +80,13 @@ int ERR_load_RSA_strings(void); # define RSA_R_OAEP_DECODING_ERROR 121 # define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 # define RSA_R_PADDING_CHECK_FAILED 114 +# define RSA_R_PAIRWISE_TEST_FAILURE 177 # define RSA_R_PKCS_DECODING_ERROR 159 # define RSA_R_PSS_SALTLEN_TOO_SMALL 164 +# define RSA_R_PUB_EXPONENT_OUT_OF_RANGE 178 # define RSA_R_P_NOT_PRIME 128 # define RSA_R_Q_NOT_PRIME 129 +# define RSA_R_RANDOMNESS_SOURCE_STRENGTH_INSUFFICIENT 180 # define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 # define RSA_R_SLEN_CHECK_FAILED 136 # define RSA_R_SLEN_RECOVERY_FAILED 135 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h index 38b55789..0499700b 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h @@ -1,14 +1,25 @@ /* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/safestack.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SAFESTACK_H -# define HEADER_SAFESTACK_H + + +#ifndef OPENSSL_SAFESTACK_H +# define OPENSSL_SAFESTACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SAFESTACK_H +# endif # include # include @@ -19,6 +30,37 @@ extern "C" { # define STACK_OF(type) struct stack_st_##type +/* Helper macro for internal use */ +# define SKM_DEFINE_STACK_OF_INTERNAL(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ + { \ + return (const OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ + { \ + return (OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ + { \ + return (OPENSSL_sk_compfunc)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ + { \ + return (OPENSSL_sk_copyfunc)cpy; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ + { \ + return (OPENSSL_sk_freefunc)fr; \ + } + # define SKM_DEFINE_STACK_OF(t1, t2, t3) \ STACK_OF(t1); \ typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ @@ -101,6 +143,10 @@ extern "C" { { \ return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ } \ + static ossl_unused ossl_inline int sk_##t1##_find_all(STACK_OF(t1) *sk, t2 *ptr, int *pnum) \ + { \ + return OPENSSL_sk_find_all((OPENSSL_STACK *)sk, (const void *)ptr, pnum); \ + } \ static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ { \ OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ @@ -126,11 +172,11 @@ extern "C" { return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ } -# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) # define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) # define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ SKM_DEFINE_STACK_OF(t1, const t2, t2) -# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) /*- * Strings are special: normally an lhash entry will point to a single @@ -156,50 +202,94 @@ typedef const char *OPENSSL_CSTRING; * chars. So, we have to implement STRING specially for STACK_OF. This is * dealt with in the autogenerated macros below. */ -DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char) -DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_STRING, char, char) +#define sk_OPENSSL_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_value(sk, idx) ((char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_STRING_sk_type(sk), (idx))) +#define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_STRING_compfunc_type(cmp))) +#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_STRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_STRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_STRING_sk_type(sk), (n)) +#define sk_OPENSSL_STRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_delete(sk, i) ((char *)OPENSSL_sk_delete(ossl_check_OPENSSL_STRING_sk_type(sk), (i))) +#define sk_OPENSSL_STRING_delete_ptr(sk, ptr) ((char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr))) +#define sk_OPENSSL_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_pop(sk) ((char *)OPENSSL_sk_pop(ossl_check_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_shift(sk) ((char *)OPENSSL_sk_shift(ossl_check_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_STRING_sk_type(sk),ossl_check_OPENSSL_STRING_freefunc_type(freefunc)) +#define sk_OPENSSL_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), (idx)) +#define sk_OPENSSL_STRING_set(sk, idx, ptr) ((char *)OPENSSL_sk_set(ossl_check_OPENSSL_STRING_sk_type(sk), (idx), ossl_check_OPENSSL_STRING_type(ptr))) +#define sk_OPENSSL_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), pnum) +#define sk_OPENSSL_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_dup(sk) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_STRING_freefunc_type(freefunc))) +#define sk_OPENSSL_STRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_CSTRING, const char, char) +#define sk_OPENSSL_CSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_value(sk, idx) ((const char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), (idx))) +#define sk_OPENSSL_CSTRING_new(cmp) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp))) +#define sk_OPENSSL_CSTRING_new_null() ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_CSTRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_CSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_CSTRING_sk_type(sk), (n)) +#define sk_OPENSSL_CSTRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_delete(sk, i) ((const char *)OPENSSL_sk_delete(ossl_check_OPENSSL_CSTRING_sk_type(sk), (i))) +#define sk_OPENSSL_CSTRING_delete_ptr(sk, ptr) ((const char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr))) +#define sk_OPENSSL_CSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_pop(sk) ((const char *)OPENSSL_sk_pop(ossl_check_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_shift(sk) ((const char *)OPENSSL_sk_shift(ossl_check_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_CSTRING_sk_type(sk),ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc)) +#define sk_OPENSSL_CSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), (idx)) +#define sk_OPENSSL_CSTRING_set(sk, idx, ptr) ((const char *)OPENSSL_sk_set(ossl_check_OPENSSL_CSTRING_sk_type(sk), (idx), ossl_check_OPENSSL_CSTRING_type(ptr))) +#define sk_OPENSSL_CSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), pnum) +#define sk_OPENSSL_CSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_dup(sk) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc))) +#define sk_OPENSSL_CSTRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_CSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_compfunc_type(cmp))) + +#if !defined(OPENSSL_NO_DEPRECATED_3_0) /* - * Similarly, we sometimes use a block of characters, NOT nul-terminated. + * This is not used by OpenSSL. A block of bytes, NOT nul-terminated. * These should also be distinguished from "normal" stacks. */ typedef void *OPENSSL_BLOCK; -DEFINE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_BLOCK, void, void) +#define sk_OPENSSL_BLOCK_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), (idx))) +#define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp))) +#define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_BLOCK_new_reserve(cmp, n) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp), (n))) +#define sk_OPENSSL_BLOCK_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_BLOCK_sk_type(sk), (n)) +#define sk_OPENSSL_BLOCK_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_OPENSSL_BLOCK_sk_type(sk), (i))) +#define sk_OPENSSL_BLOCK_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr))) +#define sk_OPENSSL_BLOCK_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_BLOCK_sk_type(sk),ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc)) +#define sk_OPENSSL_BLOCK_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), (idx)) +#define sk_OPENSSL_BLOCK_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_OPENSSL_BLOCK_sk_type(sk), (idx), ossl_check_OPENSSL_BLOCK_type(ptr))) +#define sk_OPENSSL_BLOCK_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), pnum) +#define sk_OPENSSL_BLOCK_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_dup(sk) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_copyfunc_type(copyfunc), ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc))) +#define sk_OPENSSL_BLOCK_set_cmp_func(sk, cmp) ((sk_OPENSSL_BLOCK_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_compfunc_type(cmp))) -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_sk_num -# pragma weak OPENSSL_sk_value -# pragma weak OPENSSL_sk_new -# pragma weak OPENSSL_sk_new_null -# pragma weak OPENSSL_sk_new_reserve -# pragma weak OPENSSL_sk_reserve -# pragma weak OPENSSL_sk_free -# pragma weak OPENSSL_sk_zero -# pragma weak OPENSSL_sk_delete -# pragma weak OPENSSL_sk_delete_ptr -# pragma weak OPENSSL_sk_push -# pragma weak OPENSSL_sk_unshift -# pragma weak OPENSSL_sk_pop -# pragma weak OPENSSL_sk_shift -# pragma weak OPENSSL_sk_pop_free -# pragma weak OPENSSL_sk_insert -# pragma weak OPENSSL_sk_set -# pragma weak OPENSSL_sk_find -# pragma weak OPENSSL_sk_find_ex -# pragma weak OPENSSL_sk_sort -# pragma weak OPENSSL_sk_is_sorted -# pragma weak OPENSSL_sk_dup -# pragma weak OPENSSL_sk_deep_copy -# pragma weak OPENSSL_sk_set_cmp_func -# endif /* __SUNPRO_C */ +#endif # ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h.in new file mode 100644 index 00000000..6b366079 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h.in @@ -0,0 +1,227 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_string_macros + generate_stack_const_string_macros + generate_stack_block_macros); +-} + +#ifndef OPENSSL_SAFESTACK_H +# define OPENSSL_SAFESTACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SAFESTACK_H +# endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define STACK_OF(type) struct stack_st_##type + +/* Helper macro for internal use */ +# define SKM_DEFINE_STACK_OF_INTERNAL(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ + { \ + return (const OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ + { \ + return (OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ + { \ + return (OPENSSL_sk_compfunc)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ + { \ + return (OPENSSL_sk_copyfunc)cpy; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ + { \ + return (OPENSSL_sk_freefunc)fr; \ + } + +# define SKM_DEFINE_STACK_OF(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ + { \ + return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_reserve(sk_##t1##_compfunc compare, int n) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \ + { \ + return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_free((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ + { \ + return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \ + (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ + { \ + OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ + { \ + return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find_all(STACK_OF(t1) *sk, t2 *ptr, int *pnum) \ + { \ + return OPENSSL_sk_find_all((OPENSSL_STACK *)sk, (const void *)ptr, pnum); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) * sk_##t1##_dup(const STACK_OF(t1) *sk) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \ + sk_##t1##_copyfunc copyfunc, \ + sk_##t1##_freefunc freefunc) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, \ + (OPENSSL_sk_copyfunc)copyfunc, \ + (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \ + { \ + return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ + } + +# define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) +# define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ + SKM_DEFINE_STACK_OF(t1, const t2, t2) + +/*- + * Strings are special: normally an lhash entry will point to a single + * (somewhat) mutable object. In the case of strings: + * + * a) Instead of a single char, there is an array of chars, NUL-terminated. + * b) The string may have be immutable. + * + * So, they need their own declarations. Especially important for + * type-checking tools, such as Deputy. + * + * In practice, however, it appears to be hard to have a const + * string. For now, I'm settling for dealing with the fact it is a + * string at all. + */ +typedef char *OPENSSL_STRING; +typedef const char *OPENSSL_CSTRING; + +/*- + * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but + * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned + * above, instead of a single char each entry is a NUL-terminated array of + * chars. So, we have to implement STRING specially for STACK_OF. This is + * dealt with in the autogenerated macros below. + */ +{- + generate_stack_string_macros() + .generate_stack_const_string_macros(); +-} + +#if !defined(OPENSSL_NO_DEPRECATED_3_0) +/* + * This is not used by OpenSSL. A block of bytes, NOT nul-terminated. + * These should also be distinguished from "normal" stacks. + */ +typedef void *OPENSSL_BLOCK; +{- + generate_stack_block_macros(); +-} +#endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/seed.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/seed.h index de10b085..edb218ae 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/seed.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/seed.h @@ -1,7 +1,7 @@ /* - * Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -32,65 +32,82 @@ * SUCH DAMAGE. */ -#ifndef HEADER_SEED_H -# define HEADER_SEED_H +#ifndef OPENSSL_SEED_H +# define OPENSSL_SEED_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SEED_H +# endif # include # ifndef OPENSSL_NO_SEED -# include -# include +# include +# include +# include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif - -/* look whether we need 'long' to get 32 bits */ -# ifdef AES_LONG -# ifndef SEED_LONG -# define SEED_LONG 1 # endif -# endif -# include +# define SEED_BLOCK_SIZE 16 +# define SEED_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* look whether we need 'long' to get 32 bits */ +# ifdef AES_LONG +# ifndef SEED_LONG +# define SEED_LONG 1 +# endif +# endif -# define SEED_BLOCK_SIZE 16 -# define SEED_KEY_LENGTH 16 typedef struct seed_key_st { -# ifdef SEED_LONG +# ifdef SEED_LONG unsigned long data[32]; -# else +# else unsigned int data[32]; -# endif +# endif } SEED_KEY_SCHEDULE; - +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], SEED_KEY_SCHEDULE *ks); - +OSSL_DEPRECATEDIN_3_0 void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks); - -void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, +OSSL_DEPRECATEDIN_3_0 +void SEED_ecb_encrypt(const unsigned char *in, + unsigned char *out, const SEED_KEY_SCHEDULE *ks, int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int enc); + unsigned char ivec[SEED_BLOCK_SIZE], + int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num, - int enc); + unsigned char ivec[SEED_BLOCK_SIZE], + int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num); + unsigned char ivec[SEED_BLOCK_SIZE], + int *num); +# endif -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/self_test.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/self_test.h new file mode 100644 index 00000000..337a3190 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/self_test.h @@ -0,0 +1,94 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_SELF_TEST_H +# define OPENSSL_SELF_TEST_H +# pragma once + +# include /* OSSL_CALLBACK */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* The test event phases */ +# define OSSL_SELF_TEST_PHASE_NONE "None" +# define OSSL_SELF_TEST_PHASE_START "Start" +# define OSSL_SELF_TEST_PHASE_CORRUPT "Corrupt" +# define OSSL_SELF_TEST_PHASE_PASS "Pass" +# define OSSL_SELF_TEST_PHASE_FAIL "Fail" + +/* Test event categories */ +# define OSSL_SELF_TEST_TYPE_NONE "None" +# define OSSL_SELF_TEST_TYPE_MODULE_INTEGRITY "Module_Integrity" +# define OSSL_SELF_TEST_TYPE_INSTALL_INTEGRITY "Install_Integrity" +# define OSSL_SELF_TEST_TYPE_CRNG "Continuous_RNG_Test" +# define OSSL_SELF_TEST_TYPE_PCT "Conditional_PCT" +# define OSSL_SELF_TEST_TYPE_PCT_KAT "Conditional_KAT" +# define OSSL_SELF_TEST_TYPE_KAT_INTEGRITY "KAT_Integrity" +# define OSSL_SELF_TEST_TYPE_KAT_CIPHER "KAT_Cipher" +# define OSSL_SELF_TEST_TYPE_KAT_ASYM_CIPHER "KAT_AsymmetricCipher" +# define OSSL_SELF_TEST_TYPE_KAT_DIGEST "KAT_Digest" +# define OSSL_SELF_TEST_TYPE_KAT_SIGNATURE "KAT_Signature" +# define OSSL_SELF_TEST_TYPE_PCT_SIGNATURE "PCT_Signature" +# define OSSL_SELF_TEST_TYPE_KAT_KDF "KAT_KDF" +# define OSSL_SELF_TEST_TYPE_KAT_KA "KAT_KA" +# define OSSL_SELF_TEST_TYPE_DRBG "DRBG" + +/* Test event sub categories */ +# define OSSL_SELF_TEST_DESC_NONE "None" +# define OSSL_SELF_TEST_DESC_INTEGRITY_HMAC "HMAC" +# define OSSL_SELF_TEST_DESC_PCT_RSA_PKCS1 "RSA" +# define OSSL_SELF_TEST_DESC_PCT_ECDSA "ECDSA" +# define OSSL_SELF_TEST_DESC_PCT_DSA "DSA" +# define OSSL_SELF_TEST_DESC_CIPHER_AES_GCM "AES_GCM" +# define OSSL_SELF_TEST_DESC_CIPHER_AES_ECB "AES_ECB_Decrypt" +# define OSSL_SELF_TEST_DESC_CIPHER_TDES "TDES" +# define OSSL_SELF_TEST_DESC_ASYM_RSA_ENC "RSA_Encrypt" +# define OSSL_SELF_TEST_DESC_ASYM_RSA_DEC "RSA_Decrypt" +# define OSSL_SELF_TEST_DESC_MD_SHA1 "SHA1" +# define OSSL_SELF_TEST_DESC_MD_SHA2 "SHA2" +# define OSSL_SELF_TEST_DESC_MD_SHA3 "SHA3" +# define OSSL_SELF_TEST_DESC_SIGN_DSA "DSA" +# define OSSL_SELF_TEST_DESC_SIGN_RSA "RSA" +# define OSSL_SELF_TEST_DESC_SIGN_ECDSA "ECDSA" +# define OSSL_SELF_TEST_DESC_DRBG_CTR "CTR" +# define OSSL_SELF_TEST_DESC_DRBG_HASH "HASH" +# define OSSL_SELF_TEST_DESC_DRBG_HMAC "HMAC" +# define OSSL_SELF_TEST_DESC_KA_DH "DH" +# define OSSL_SELF_TEST_DESC_KA_ECDH "ECDH" +# define OSSL_SELF_TEST_DESC_KDF_HKDF "HKDF" +# define OSSL_SELF_TEST_DESC_KDF_SSKDF "SSKDF" +# define OSSL_SELF_TEST_DESC_KDF_X963KDF "X963KDF" +# define OSSL_SELF_TEST_DESC_KDF_X942KDF "X942KDF" +# define OSSL_SELF_TEST_DESC_KDF_PBKDF2 "PBKDF2" +# define OSSL_SELF_TEST_DESC_KDF_SSHKDF "SSHKDF" +# define OSSL_SELF_TEST_DESC_KDF_TLS12_PRF "TLS12_PRF" +# define OSSL_SELF_TEST_DESC_KDF_KBKDF "KBKDF" +# define OSSL_SELF_TEST_DESC_KDF_TLS13_EXTRACT "TLS13_KDF_EXTRACT" +# define OSSL_SELF_TEST_DESC_KDF_TLS13_EXPAND "TLS13_KDF_EXPAND" +# define OSSL_SELF_TEST_DESC_RNG "RNG" + +void OSSL_SELF_TEST_set_callback(OSSL_LIB_CTX *libctx, OSSL_CALLBACK *cb, + void *cbarg); +void OSSL_SELF_TEST_get_callback(OSSL_LIB_CTX *libctx, OSSL_CALLBACK **cb, + void **cbarg); + +OSSL_SELF_TEST *OSSL_SELF_TEST_new(OSSL_CALLBACK *cb, void *cbarg); +void OSSL_SELF_TEST_free(OSSL_SELF_TEST *st); + +void OSSL_SELF_TEST_onbegin(OSSL_SELF_TEST *st, const char *type, + const char *desc); +int OSSL_SELF_TEST_oncorrupt_byte(OSSL_SELF_TEST *st, unsigned char *bytes); +void OSSL_SELF_TEST_onend(OSSL_SELF_TEST *st, int ret); + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_SELF_TEST_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h index 6a1eb0de..6e65a040 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h @@ -1,35 +1,43 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SHA_H -# define HEADER_SHA_H +#ifndef OPENSSL_SHA_H +# define OPENSSL_SHA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SHA_H +# endif # include # include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif +# define SHA_DIGEST_LENGTH 20 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! SHA_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define SHA_LONG unsigned int +# define SHA_LONG unsigned int -# define SHA_LBLOCK 16 -# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ -# define SHA_LAST_BLOCK (SHA_CBLOCK-8) -# define SHA_DIGEST_LENGTH 20 +# define SHA_LBLOCK 16 +# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA_LAST_BLOCK (SHA_CBLOCK-8) typedef struct SHAstate_st { SHA_LONG h0, h1, h2, h3, h4; @@ -38,13 +46,16 @@ typedef struct SHAstate_st { unsigned int num; } SHA_CTX; -int SHA1_Init(SHA_CTX *c); -int SHA1_Update(SHA_CTX *c, const void *data, size_t len); -int SHA1_Final(unsigned char *md, SHA_CTX *c); -unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); -void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 int SHA1_Init(SHA_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA1_Update(SHA_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA1_Final(unsigned char *md, SHA_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +# endif -# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a +unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a * contiguous array of 32 bit wide * big-endian values. */ @@ -55,21 +66,27 @@ typedef struct SHA256state_st { unsigned int num, md_len; } SHA256_CTX; -int SHA224_Init(SHA256_CTX *c); -int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA224_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA224_Init(SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA224_Update(SHA256_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA224_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA256_Init(SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA256_Update(SHA256_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA256_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA256_Transform(SHA256_CTX *c, + const unsigned char *data); +# endif + unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); -int SHA256_Init(SHA256_CTX *c); -int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA256_Final(unsigned char *md, SHA256_CTX *c); unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); -void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); # define SHA224_DIGEST_LENGTH 28 # define SHA256_DIGEST_LENGTH 32 # define SHA384_DIGEST_LENGTH 48 # define SHA512_DIGEST_LENGTH 64 +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 * being exactly 64-bit wide. See Implementation Notes in sha512.c @@ -80,17 +97,14 @@ void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); * contiguous array of 64 bit * wide big-endian values. */ -# define SHA512_CBLOCK (SHA_LBLOCK*8) -# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) -# define SHA_LONG64 unsigned __int64 -# define U64(C) C##UI64 -# elif defined(__arch64__) -# define SHA_LONG64 unsigned long -# define U64(C) C##UL -# else -# define SHA_LONG64 unsigned long long -# define U64(C) C##ULL -# endif +# define SHA512_CBLOCK (SHA_LBLOCK*8) +# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +# define SHA_LONG64 unsigned __int64 +# elif defined(__arch64__) +# define SHA_LONG64 unsigned long +# else +# define SHA_LONG64 unsigned long long +# endif typedef struct SHA512state_st { SHA_LONG64 h[8]; @@ -102,18 +116,23 @@ typedef struct SHA512state_st { unsigned int num, md_len; } SHA512_CTX; -int SHA384_Init(SHA512_CTX *c); -int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA384_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA384_Init(SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA384_Update(SHA512_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA384_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA512_Init(SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA512_Update(SHA512_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA512_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA512_Transform(SHA512_CTX *c, + const unsigned char *data); +# endif + unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); -int SHA512_Init(SHA512_CTX *c); -int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA512_Final(unsigned char *md, SHA512_CTX *c); unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); -void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h index aaf13558..a48766c6 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h @@ -1,8 +1,11 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/srp.h.in + * + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2004, EdelKey Project. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,8 +14,16 @@ * for the EdelKey project. */ -#ifndef HEADER_SRP_H -# define HEADER_SRP_H + + +#ifndef OPENSSL_SRP_H +# define OPENSSL_SRP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SRP_H +# endif #include @@ -27,13 +38,40 @@ extern "C" { # endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 + typedef struct SRP_gN_cache_st { char *b64_bn; BIGNUM *bn; } SRP_gN_cache; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN_cache, SRP_gN_cache, SRP_gN_cache) +#define sk_SRP_gN_cache_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_value(sk, idx) ((SRP_gN_cache *)OPENSSL_sk_value(ossl_check_const_SRP_gN_cache_sk_type(sk), (idx))) +#define sk_SRP_gN_cache_new(cmp) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new(ossl_check_SRP_gN_cache_compfunc_type(cmp))) +#define sk_SRP_gN_cache_new_null() ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_null()) +#define sk_SRP_gN_cache_new_reserve(cmp, n) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_cache_compfunc_type(cmp), (n))) +#define sk_SRP_gN_cache_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_cache_sk_type(sk), (n)) +#define sk_SRP_gN_cache_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_delete(sk, i) ((SRP_gN_cache *)OPENSSL_sk_delete(ossl_check_SRP_gN_cache_sk_type(sk), (i))) +#define sk_SRP_gN_cache_delete_ptr(sk, ptr) ((SRP_gN_cache *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr))) +#define sk_SRP_gN_cache_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_pop(sk) ((SRP_gN_cache *)OPENSSL_sk_pop(ossl_check_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_shift(sk) ((SRP_gN_cache *)OPENSSL_sk_shift(ossl_check_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_cache_sk_type(sk),ossl_check_SRP_gN_cache_freefunc_type(freefunc)) +#define sk_SRP_gN_cache_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), (idx)) +#define sk_SRP_gN_cache_set(sk, idx, ptr) ((SRP_gN_cache *)OPENSSL_sk_set(ossl_check_SRP_gN_cache_sk_type(sk), (idx), ossl_check_SRP_gN_cache_type(ptr))) +#define sk_SRP_gN_cache_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), pnum) +#define sk_SRP_gN_cache_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_dup(sk) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_copyfunc_type(copyfunc), ossl_check_SRP_gN_cache_freefunc_type(freefunc))) +#define sk_SRP_gN_cache_set_cmp_func(sk, cmp) ((sk_SRP_gN_cache_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_compfunc_type(cmp))) -DEFINE_STACK_OF(SRP_gN_cache) typedef struct SRP_user_pwd_st { /* Owned by us. */ @@ -46,10 +84,47 @@ typedef struct SRP_user_pwd_st { /* Owned by us. */ char *info; } SRP_user_pwd; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_user_pwd, SRP_user_pwd, SRP_user_pwd) +#define sk_SRP_user_pwd_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_value(sk, idx) ((SRP_user_pwd *)OPENSSL_sk_value(ossl_check_const_SRP_user_pwd_sk_type(sk), (idx))) +#define sk_SRP_user_pwd_new(cmp) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new(ossl_check_SRP_user_pwd_compfunc_type(cmp))) +#define sk_SRP_user_pwd_new_null() ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_null()) +#define sk_SRP_user_pwd_new_reserve(cmp, n) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_reserve(ossl_check_SRP_user_pwd_compfunc_type(cmp), (n))) +#define sk_SRP_user_pwd_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_user_pwd_sk_type(sk), (n)) +#define sk_SRP_user_pwd_free(sk) OPENSSL_sk_free(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_delete(sk, i) ((SRP_user_pwd *)OPENSSL_sk_delete(ossl_check_SRP_user_pwd_sk_type(sk), (i))) +#define sk_SRP_user_pwd_delete_ptr(sk, ptr) ((SRP_user_pwd *)OPENSSL_sk_delete_ptr(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr))) +#define sk_SRP_user_pwd_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_pop(sk) ((SRP_user_pwd *)OPENSSL_sk_pop(ossl_check_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_shift(sk) ((SRP_user_pwd *)OPENSSL_sk_shift(ossl_check_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_user_pwd_sk_type(sk),ossl_check_SRP_user_pwd_freefunc_type(freefunc)) +#define sk_SRP_user_pwd_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), (idx)) +#define sk_SRP_user_pwd_set(sk, idx, ptr) ((SRP_user_pwd *)OPENSSL_sk_set(ossl_check_SRP_user_pwd_sk_type(sk), (idx), ossl_check_SRP_user_pwd_type(ptr))) +#define sk_SRP_user_pwd_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), pnum) +#define sk_SRP_user_pwd_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_dup(sk) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_dup(ossl_check_const_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_copyfunc_type(copyfunc), ossl_check_SRP_user_pwd_freefunc_type(freefunc))) +#define sk_SRP_user_pwd_set_cmp_func(sk, cmp) ((sk_SRP_user_pwd_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_compfunc_type(cmp))) + +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_user_pwd_new(void); +OSSL_DEPRECATEDIN_3_0 void SRP_user_pwd_free(SRP_user_pwd *user_pwd); -DEFINE_STACK_OF(SRP_user_pwd) +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_set_gN(SRP_user_pwd *user_pwd, const BIGNUM *g, + const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set1_ids(SRP_user_pwd *user_pwd, const char *id, + const char *info); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set0_sv(SRP_user_pwd *user_pwd, BIGNUM *s, BIGNUM *v); typedef struct SRP_VBASE_st { STACK_OF(SRP_user_pwd) *users_pwd; @@ -68,64 +143,139 @@ typedef struct SRP_gN_st { const BIGNUM *g; const BIGNUM *N; } SRP_gN; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN, SRP_gN, SRP_gN) +#define sk_SRP_gN_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_value(sk, idx) ((SRP_gN *)OPENSSL_sk_value(ossl_check_const_SRP_gN_sk_type(sk), (idx))) +#define sk_SRP_gN_new(cmp) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new(ossl_check_SRP_gN_compfunc_type(cmp))) +#define sk_SRP_gN_new_null() ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_null()) +#define sk_SRP_gN_new_reserve(cmp, n) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_compfunc_type(cmp), (n))) +#define sk_SRP_gN_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_sk_type(sk), (n)) +#define sk_SRP_gN_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_delete(sk, i) ((SRP_gN *)OPENSSL_sk_delete(ossl_check_SRP_gN_sk_type(sk), (i))) +#define sk_SRP_gN_delete_ptr(sk, ptr) ((SRP_gN *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr))) +#define sk_SRP_gN_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_pop(sk) ((SRP_gN *)OPENSSL_sk_pop(ossl_check_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_shift(sk) ((SRP_gN *)OPENSSL_sk_shift(ossl_check_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_sk_type(sk),ossl_check_SRP_gN_freefunc_type(freefunc)) +#define sk_SRP_gN_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), (idx)) +#define sk_SRP_gN_set(sk, idx, ptr) ((SRP_gN *)OPENSSL_sk_set(ossl_check_SRP_gN_sk_type(sk), (idx), ossl_check_SRP_gN_type(ptr))) +#define sk_SRP_gN_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), pnum) +#define sk_SRP_gN_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_dup(sk) ((STACK_OF(SRP_gN) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_sk_type(sk), ossl_check_SRP_gN_copyfunc_type(copyfunc), ossl_check_SRP_gN_freefunc_type(freefunc))) +#define sk_SRP_gN_set_cmp_func(sk, cmp) ((sk_SRP_gN_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_compfunc_type(cmp))) -DEFINE_STACK_OF(SRP_gN) + +OSSL_DEPRECATEDIN_3_0 SRP_VBASE *SRP_VBASE_new(char *seed_key); +OSSL_DEPRECATEDIN_3_0 void SRP_VBASE_free(SRP_VBASE *vb); +OSSL_DEPRECATEDIN_3_0 int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); -/* This method ignores the configured seed and fails for an unknown user. */ -DEPRECATEDIN_1_1_0(SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)) +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_add0_user(SRP_VBASE *vb, SRP_user_pwd *user_pwd); + /* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +OSSL_DEPRECATEDIN_3_0 SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier_ex(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 char *SRP_create_verifier(const char *user, const char *pass, char **salt, char **verifier, const char *N, const char *g); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN_ex(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g, OSSL_LIB_CTX *libctx, + const char *propq); +OSSL_DEPRECATEDIN_3_0 int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, const BIGNUM *N, const BIGNUM *g); -# define SRP_NO_ERROR 0 -# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 -# define SRP_ERR_VBASE_BN_LIB 2 -# define SRP_ERR_OPEN_FILE 3 -# define SRP_ERR_MEMORY 4 +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 -# define DB_srptype 0 -# define DB_srpverifier 1 -# define DB_srpsalt 2 -# define DB_srpid 3 -# define DB_srpgN 4 -# define DB_srpinfo 5 -# undef DB_NUMBER -# define DB_NUMBER 6 +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 -# define DB_SRP_INDEX 'I' -# define DB_SRP_VALID 'V' -# define DB_SRP_REVOKED 'R' -# define DB_SRP_MODIF 'v' +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' /* see srp.c */ +OSSL_DEPRECATEDIN_3_0 char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 SRP_gN *SRP_get_default_gN(const char *id); /* server side .... */ +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, const BIGNUM *b, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B_ex(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v, OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, const BIGNUM *v); + +OSSL_DEPRECATEDIN_3_0 int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u_ex(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); /* client side .... */ + +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x_ex(const BIGNUM *s, const char *user, const char *pass, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key_ex(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +OSSL_DEPRECATEDIN_3_0 int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); -# define SRP_MINIMAL_N 1024 +# define SRP_MINIMAL_N 1024 + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/* This method ignores the configured seed and fails for an unknown user. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 +SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h.in new file mode 100644 index 00000000..dfbe845b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h.in @@ -0,0 +1,214 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2004, EdelKey Project. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * Originally written by Christophe Renou and Peter Sylvester, + * for the EdelKey project. + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_SRP_H +# define OPENSSL_SRP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SRP_H +# endif + +#include + +#ifndef OPENSSL_NO_SRP +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +typedef struct SRP_gN_cache_st { + char *b64_bn; + BIGNUM *bn; +} SRP_gN_cache; +{- + generate_stack_macros("SRP_gN_cache"); +-} + + +typedef struct SRP_user_pwd_st { + /* Owned by us. */ + char *id; + BIGNUM *s; + BIGNUM *v; + /* Not owned by us. */ + const BIGNUM *g; + const BIGNUM *N; + /* Owned by us. */ + char *info; +} SRP_user_pwd; +{- + generate_stack_macros("SRP_user_pwd"); +-} + +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_user_pwd_new(void); +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_free(SRP_user_pwd *user_pwd); + +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_set_gN(SRP_user_pwd *user_pwd, const BIGNUM *g, + const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set1_ids(SRP_user_pwd *user_pwd, const char *id, + const char *info); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set0_sv(SRP_user_pwd *user_pwd, BIGNUM *s, BIGNUM *v); + +typedef struct SRP_VBASE_st { + STACK_OF(SRP_user_pwd) *users_pwd; + STACK_OF(SRP_gN_cache) *gN_cache; +/* to simulate a user */ + char *seed_key; + const BIGNUM *default_g; + const BIGNUM *default_N; +} SRP_VBASE; + +/* + * Internal structure storing N and g pair + */ +typedef struct SRP_gN_st { + char *id; + const BIGNUM *g; + const BIGNUM *N; +} SRP_gN; +{- + generate_stack_macros("SRP_gN"); +-} + + +OSSL_DEPRECATEDIN_3_0 +SRP_VBASE *SRP_VBASE_new(char *seed_key); +OSSL_DEPRECATEDIN_3_0 +void SRP_VBASE_free(SRP_VBASE *vb); +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); + +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_add0_user(SRP_VBASE *vb, SRP_user_pwd *user_pwd); + +/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); + +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier_ex(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN_ex(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g, OSSL_LIB_CTX *libctx, + const char *propq); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g); + +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 + +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 + +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' + +/* see srp.c */ +OSSL_DEPRECATEDIN_3_0 +char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +SRP_gN *SRP_get_default_gN(const char *id); + +/* server side .... */ +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, + const BIGNUM *b, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B_ex(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v, OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v); + +OSSL_DEPRECATEDIN_3_0 +int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u_ex(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); + +/* client side .... */ + +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x_ex(const BIGNUM *s, const char *user, const char *pass, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key_ex(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +OSSL_DEPRECATEDIN_3_0 +int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); + +# define SRP_MINIMAL_N 1024 + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/* This method ignores the configured seed and fails for an unknown user. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 +SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h index 0b57c235..d64606e5 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h @@ -1,7 +1,7 @@ /* * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -13,8 +13,14 @@ * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. */ -#ifndef HEADER_D1_SRTP_H -# define HEADER_D1_SRTP_H +#ifndef OPENSSL_SRTP_H +# define OPENSSL_SRTP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_D1_SRTP_H +# endif # include diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h index 9af0c899..942f20e6 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h @@ -1,22 +1,33 @@ /* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ssl.h.in + * * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL_H -# define HEADER_SSL_H + + +#ifndef OPENSSL_SSL_H +# define OPENSSL_SSL_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL_H +# endif # include # include # include # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # include # include @@ -30,6 +41,10 @@ # include # include # include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -47,7 +62,7 @@ extern "C" { # define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) # define SSL_MAX_KEY_ARG_LENGTH 8 -# define SSL_MAX_MASTER_KEY_LENGTH 48 +/* SSL_MAX_MASTER_KEY_LENGTH is defined in prov_ssl.h */ /* The maximum number of encrypt/decrypt pipelines we can support */ # define SSL_MAX_PIPELINES 32 @@ -81,6 +96,7 @@ extern "C" { # define SSL_TXT_kECDHEPSK "kECDHEPSK" # define SSL_TXT_kDHEPSK "kDHEPSK" # define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kGOST18 "kGOST18" # define SSL_TXT_kSRP "kSRP" # define SSL_TXT_aRSA "aRSA" @@ -130,6 +146,8 @@ extern "C" { # define SSL_TXT_ARIA_GCM "ARIAGCM" # define SSL_TXT_ARIA128 "ARIA128" # define SSL_TXT_ARIA256 "ARIA256" +# define SSL_TXT_GOST2012_GOST8912_GOST8912 "GOST2012-GOST8912-GOST8912" +# define SSL_TXT_CBC "CBC" # define SSL_TXT_MD5 "MD5" # define SSL_TXT_SHA1 "SHA1" @@ -169,17 +187,20 @@ extern "C" { * The following cipher list is used by default. It also is substituted when * an application-defined cipher list string starts with 'DEFAULT'. * This applies to ciphersuites for TLSv1.2 and below. + * DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list() + * Update both macro and function simultaneously + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* + * This is the default set of TLSv1.3 ciphersuites + * DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites() + * Update both macro and function simultaneously */ -# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" -/* This is the default set of TLSv1.3 ciphersuites */ -# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) # define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ "TLS_CHACHA20_POLY1305_SHA256:" \ "TLS_AES_128_GCM_SHA256" -# else -# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ - "TLS_AES_128_GCM_SHA256" -#endif +# endif /* * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always * starts with a reasonable order, and all we have to do for DEFAULT is @@ -223,8 +244,34 @@ typedef struct srtp_protection_profile_st { const char *name; unsigned long id; } SRTP_PROTECTION_PROFILE; +SKM_DEFINE_STACK_OF_INTERNAL(SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE) +#define sk_SRTP_PROTECTION_PROFILE_num(sk) OPENSSL_sk_num(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_value(sk, idx) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_value(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx))) +#define sk_SRTP_PROTECTION_PROFILE_new(cmp) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp))) +#define sk_SRTP_PROTECTION_PROFILE_new_null() ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_null()) +#define sk_SRTP_PROTECTION_PROFILE_new_reserve(cmp, n) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_reserve(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp), (n))) +#define sk_SRTP_PROTECTION_PROFILE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (n)) +#define sk_SRTP_PROTECTION_PROFILE_free(sk) OPENSSL_sk_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_zero(sk) OPENSSL_sk_zero(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_delete(sk, i) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (i))) +#define sk_SRTP_PROTECTION_PROFILE_delete_ptr(sk, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete_ptr(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))) +#define sk_SRTP_PROTECTION_PROFILE_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_pop(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_pop(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_shift(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_shift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk),ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc)) +#define sk_SRTP_PROTECTION_PROFILE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), (idx)) +#define sk_SRTP_PROTECTION_PROFILE_set(sk, idx, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_set(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))) +#define sk_SRTP_PROTECTION_PROFILE_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), pnum) +#define sk_SRTP_PROTECTION_PROFILE_sort(sk) OPENSSL_sk_sort(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_dup(sk) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_dup(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_deep_copy(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_copyfunc_type(copyfunc), ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc))) +#define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(sk, cmp) ((sk_SRTP_PROTECTION_PROFILE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp))) + -DEFINE_STACK_OF(SRTP_PROTECTION_PROFILE) typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, int len, void *arg); @@ -293,161 +340,134 @@ typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, /* Typedef for verification callback */ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); -/* - * Some values are reserved until OpenSSL 1.2.0 because they were previously - * included in SSL_OP_ALL in a 1.1.x release. - * - * Reserved value (until OpenSSL 1.2.0) 0x00000001U - * Reserved value (until OpenSSL 1.2.0) 0x00000002U - */ -/* Allow initial connection to servers that don't support RI */ -# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U +/* Typedef for SSL async callback */ +typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); -/* Reserved value (until OpenSSL 1.2.0) 0x00000008U */ -# define SSL_OP_TLSEXT_PADDING 0x00000010U -/* Reserved value (until OpenSSL 1.2.0) 0x00000020U */ -# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U -/* - * Reserved value (until OpenSSL 1.2.0) 0x00000080U - * Reserved value (until OpenSSL 1.2.0) 0x00000100U - * Reserved value (until OpenSSL 1.2.0) 0x00000200U - */ - -/* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ -# define SSL_OP_ALLOW_NO_DHE_KEX 0x00000400U +#define SSL_OP_BIT(n) ((uint64_t)1 << (uint64_t)n) /* - * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in - * OpenSSL 0.9.6d. Usually (depending on the application protocol) the - * workaround is not needed. Unfortunately some broken SSL/TLS - * implementations cannot handle it at all, which is why we include it in - * SSL_OP_ALL. Added in 0.9.6e + * SSL/TLS connection options. */ -# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800U - -/* DTLS options */ -# define SSL_OP_NO_QUERY_MTU 0x00001000U -/* Turn on Cookie Exchange (on relevant for servers) */ -# define SSL_OP_COOKIE_EXCHANGE 0x00002000U -/* Don't use RFC4507 ticket extension */ -# define SSL_OP_NO_TICKET 0x00004000U + /* Disable Extended master secret */ +# define SSL_OP_NO_EXTENDED_MASTER_SECRET SSL_OP_BIT(0) + /* Cleanse plaintext copies of data delivered to the application */ +# define SSL_OP_CLEANSE_PLAINTEXT SSL_OP_BIT(1) + /* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT SSL_OP_BIT(2) + /* Enable support for Kernel TLS */ +# define SSL_OP_ENABLE_KTLS SSL_OP_BIT(3) +# define SSL_OP_TLSEXT_PADDING SSL_OP_BIT(4) +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG SSL_OP_BIT(6) +# define SSL_OP_IGNORE_UNEXPECTED_EOF SSL_OP_BIT(7) +# define SSL_OP_ALLOW_CLIENT_RENEGOTIATION SSL_OP_BIT(8) +# define SSL_OP_DISABLE_TLSEXT_CA_NAMES SSL_OP_BIT(9) + /* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX SSL_OP_BIT(10) + /* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added + * in OpenSSL 0.9.6d. Usually (depending on the application protocol) + * the workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it + * in SSL_OP_ALL. Added in 0.9.6e + */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS SSL_OP_BIT(11) + /* DTLS options */ +# define SSL_OP_NO_QUERY_MTU SSL_OP_BIT(12) + /* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE SSL_OP_BIT(13) + /* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET SSL_OP_BIT(14) # ifndef OPENSSL_NO_DTLS1_METHOD -/* Use Cisco's "speshul" version of DTLS_BAD_VER - * (only with deprecated DTLSv1_client_method()) */ -# define SSL_OP_CISCO_ANYCONNECT 0x00008000U + /* + * Use Cisco's version identifier of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) + */ +# define SSL_OP_CISCO_ANYCONNECT SSL_OP_BIT(15) # endif - -/* As server, disallow session resumption on renegotiation */ -# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000U -/* Don't use compression even if supported */ -# define SSL_OP_NO_COMPRESSION 0x00020000U -/* Permit unsafe legacy renegotiation */ -# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U -/* Disable encrypt-then-mac */ -# define SSL_OP_NO_ENCRYPT_THEN_MAC 0x00080000U + /* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_BIT(16) + /* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION SSL_OP_BIT(17) + /* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_BIT(18) + /* Disable encrypt-then-mac */ +# define SSL_OP_NO_ENCRYPT_THEN_MAC SSL_OP_BIT(19) + /* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future + * version of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT SSL_OP_BIT(20) + /* + * Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE + */ +# define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21) + /* + * Set on servers to choose the cipher according to server's preferences. + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_BIT(22) + /* + * If set, a server will allow a client to issue a SSLv3.0 version + * number as latest version supported in the premaster secret, even when + * TLSv1.0 (version 3.1) was announced in the client hello. Normally + * this is forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG SSL_OP_BIT(23) + /* + * Switches off automatic TLSv1.3 anti-replay protection for early data. + * This is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY SSL_OP_BIT(24) +# define SSL_OP_NO_SSLv3 SSL_OP_BIT(25) +# define SSL_OP_NO_TLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_TLSv1_2 SSL_OP_BIT(27) +# define SSL_OP_NO_TLSv1_1 SSL_OP_BIT(28) +# define SSL_OP_NO_TLSv1_3 SSL_OP_BIT(29) +# define SSL_OP_NO_DTLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_DTLSv1_2 SSL_OP_BIT(27) + /* Disallow all renegotiation */ +# define SSL_OP_NO_RENEGOTIATION SSL_OP_BIT(30) + /* + * Make server add server-hello extension from early version of + * cryptopro draft, when GOST ciphersuite is negotiated. Required for + * interoperability with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG SSL_OP_BIT(31) /* - * Enable TLSv1.3 Compatibility mode. This is on by default. A future version - * of OpenSSL may have this disabled by default. + * Option "collections." */ -# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT 0x00100000U +# define SSL_OP_NO_SSL_MASK \ + ( SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 \ + | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 ) +# define SSL_OP_NO_DTLS_MASK \ + ( SSL_OP_NO_DTLSv1 | SSL_OP_NO_DTLSv1_2 ) -/* Prioritize Chacha20Poly1305 when client does. - * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE */ -# define SSL_OP_PRIORITIZE_CHACHA 0x00200000U +/* Various bug workarounds that should be rather harmless. */ +# define SSL_OP_ALL \ + ( SSL_OP_CRYPTOPRO_TLSEXT_BUG | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS \ + | SSL_OP_TLSEXT_PADDING | SSL_OP_SAFARI_ECDHE_ECDSA_BUG ) /* - * Set on servers to choose the cipher according to the server's preferences + * OBSOLETE OPTIONS retained for compatibility */ -# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000U -/* - * If set, a server will allow a client to issue a SSLv3.0 version number as - * latest version supported in the premaster secret, even when TLSv1.0 - * (version 3.1) was announced in the client hello. Normally this is - * forbidden to prevent version rollback attacks. - */ -# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000U -/* - * Switches off automatic TLSv1.3 anti-replay protection for early data. This - * is a server-side option only (no effect on the client). - */ -# define SSL_OP_NO_ANTI_REPLAY 0x01000000U - -# define SSL_OP_NO_SSLv3 0x02000000U -# define SSL_OP_NO_TLSv1 0x04000000U -# define SSL_OP_NO_TLSv1_2 0x08000000U -# define SSL_OP_NO_TLSv1_1 0x10000000U -# define SSL_OP_NO_TLSv1_3 0x20000000U - -# define SSL_OP_NO_DTLSv1 0x04000000U -# define SSL_OP_NO_DTLSv1_2 0x08000000U - -# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\ - SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2|SSL_OP_NO_TLSv1_3) -# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2) - -/* Disallow all renegotiation */ -# define SSL_OP_NO_RENEGOTIATION 0x40000000U - -/* - * Make server add server-hello extension from early version of cryptopro - * draft, when GOST ciphersuite is negotiated. Required for interoperability - * with CryptoPro CSP 3.x - */ -# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000U - -/* - * SSL_OP_ALL: various bug workarounds that should be rather harmless. - * This used to be 0x000FFFFFL before 0.9.7. - * This used to be 0x80000BFFU before 1.1.1. - */ -# define SSL_OP_ALL (SSL_OP_CRYPTOPRO_TLSEXT_BUG|\ - SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS|\ - SSL_OP_LEGACY_SERVER_CONNECT|\ - SSL_OP_TLSEXT_PADDING|\ - SSL_OP_SAFARI_ECDHE_ECDSA_BUG) - -/* OBSOLETE OPTIONS: retained for compatibility */ - -/* Removed from OpenSSL 1.1.0. Was 0x00000001L */ -/* Related to removed SSLv2. */ # define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000002L */ -/* Related to removed SSLv2. */ # define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 -/* Removed from OpenSSL 0.9.8q and 1.0.0c. Was 0x00000008L */ -/* Dead forever, see CVE-2010-4180 */ # define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 -/* Removed from OpenSSL 1.0.1h and 1.0.2. Was 0x00000010L */ -/* Refers to ancient SSLREF and SSLv2. */ # define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000020 */ # define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 -/* Removed from OpenSSL 0.9.7h and 0.9.8b. Was 0x00000040L */ # define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000080 */ -/* Ancient SSLeay version. */ # define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000100L */ # define SSL_OP_TLS_D5_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000200L */ # define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00080000L */ # define SSL_OP_SINGLE_ECDH_USE 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00100000L */ # define SSL_OP_SINGLE_DH_USE 0x0 -/* Removed from OpenSSL 1.0.1k and 1.0.2. Was 0x00200000L */ # define SSL_OP_EPHEMERAL_RSA 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x01000000L */ # define SSL_OP_NO_SSLv2 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x08000000L */ # define SSL_OP_PKCS1_CHECK_1 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x10000000L */ # define SSL_OP_PKCS1_CHECK_2 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x20000000L */ # define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x40000000L */ # define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 /* @@ -571,6 +591,7 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); # define SSL_CONF_TYPE_FILE 0x2 # define SSL_CONF_TYPE_DIR 0x3 # define SSL_CONF_TYPE_NONE 0x4 +# define SSL_CONF_TYPE_STORE 0x5 /* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ # define SSL_COOKIE_LENGTH 4096 @@ -580,12 +601,12 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); * cannot be used to clear bits. */ -unsigned long SSL_CTX_get_options(const SSL_CTX *ctx); -unsigned long SSL_get_options(const SSL *s); -unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_clear_options(SSL *s, unsigned long op); -unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_set_options(SSL *s, unsigned long op); +uint64_t SSL_CTX_get_options(const SSL_CTX *ctx); +uint64_t SSL_get_options(const SSL *s); +uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_clear_options(SSL *s, uint64_t op); +uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_set_options(SSL *s, uint64_t op); # define SSL_CTX_set_mode(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) @@ -609,11 +630,6 @@ unsigned long SSL_set_options(SSL *s, unsigned long op); # define SSL_get_secure_renegotiation_support(ssl) \ SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_heartbeat(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT,0,NULL) -# endif - # define SSL_CTX_set_cert_flags(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) # define SSL_set_cert_flags(s,op) \ @@ -638,19 +654,20 @@ void SSL_set_msg_callback(SSL *ssl, SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) # ifndef OPENSSL_NO_SRP - /* see tls_srp.c */ -__owur int SSL_SRP_CTX_init(SSL *s); -__owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); -int SSL_SRP_CTX_free(SSL *ctx); -int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); -__owur int SSL_srp_server_param_with_username(SSL *s, int *ad); -__owur int SRP_Calc_A_param(SSL *s); - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_SRP_CTX_init(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_SRP_CTX_free(SSL *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_srp_server_param_with_username(SSL *s, + int *ad); +OSSL_DEPRECATEDIN_3_0 __owur int SRP_Calc_A_param(SSL *s); +# endif # endif /* 100k max cert list */ -# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 +# define SSL_MAX_CERT_LIST_DEFAULT (1024*100) # define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) @@ -679,6 +696,7 @@ typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, # define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 # define SSL_SESS_CACHE_NO_INTERNAL \ (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) +# define SSL_SESS_CACHE_UPDATE_TIME 0x0400 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); # define SSL_CTX_sess_number(ctx) \ @@ -818,8 +836,8 @@ void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, * the maximum length of the buffer given to callbacks containing the * resulting identity/psk */ -# define PSK_MAX_IDENTITY_LEN 128 -# define PSK_MAX_PSK_LEN 256 +# define PSK_MAX_IDENTITY_LEN 256 +# define PSK_MAX_PSK_LEN 512 typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, const char *hint, char *identity, @@ -896,18 +914,22 @@ __owur int SSL_extension_supported(unsigned int ext_type); # define SSL_ASYNC_PAUSED 5 # define SSL_ASYNC_NO_JOBS 6 # define SSL_CLIENT_HELLO_CB 7 +# define SSL_RETRY_VERIFY 8 /* These will only be used when doing non-blocking IO */ # define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) # define SSL_want_read(s) (SSL_want(s) == SSL_READING) # define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) # define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) +# define SSL_want_retry_verify(s) (SSL_want(s) == SSL_RETRY_VERIFY) # define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) # define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) # define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) # define SSL_MAC_FLAG_READ_MAC_STREAM 1 # define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 +# define SSL_MAC_FLAG_READ_MAC_TLSTREE 4 +# define SSL_MAC_FLAG_WRITE_MAC_TLSTREE 8 /* * A callback for logging out TLS key material. This callback should log out @@ -955,8 +977,59 @@ extern "C" { * These need to be after the above set of includes due to a compiler bug * in VisualStudio 2015 */ -DEFINE_STACK_OF_CONST(SSL_CIPHER) -DEFINE_STACK_OF(SSL_COMP) +SKM_DEFINE_STACK_OF_INTERNAL(SSL_CIPHER, const SSL_CIPHER, SSL_CIPHER) +#define sk_SSL_CIPHER_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_value(sk, idx) ((const SSL_CIPHER *)OPENSSL_sk_value(ossl_check_const_SSL_CIPHER_sk_type(sk), (idx))) +#define sk_SSL_CIPHER_new(cmp) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new(ossl_check_SSL_CIPHER_compfunc_type(cmp))) +#define sk_SSL_CIPHER_new_null() ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_null()) +#define sk_SSL_CIPHER_new_reserve(cmp, n) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_reserve(ossl_check_SSL_CIPHER_compfunc_type(cmp), (n))) +#define sk_SSL_CIPHER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_CIPHER_sk_type(sk), (n)) +#define sk_SSL_CIPHER_free(sk) OPENSSL_sk_free(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_delete(sk, i) ((const SSL_CIPHER *)OPENSSL_sk_delete(ossl_check_SSL_CIPHER_sk_type(sk), (i))) +#define sk_SSL_CIPHER_delete_ptr(sk, ptr) ((const SSL_CIPHER *)OPENSSL_sk_delete_ptr(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))) +#define sk_SSL_CIPHER_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_pop(sk) ((const SSL_CIPHER *)OPENSSL_sk_pop(ossl_check_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_shift(sk) ((const SSL_CIPHER *)OPENSSL_sk_shift(ossl_check_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_CIPHER_sk_type(sk),ossl_check_SSL_CIPHER_freefunc_type(freefunc)) +#define sk_SSL_CIPHER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), (idx)) +#define sk_SSL_CIPHER_set(sk, idx, ptr) ((const SSL_CIPHER *)OPENSSL_sk_set(ossl_check_SSL_CIPHER_sk_type(sk), (idx), ossl_check_SSL_CIPHER_type(ptr))) +#define sk_SSL_CIPHER_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), pnum) +#define sk_SSL_CIPHER_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_dup(sk) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_dup(ossl_check_const_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_copyfunc_type(copyfunc), ossl_check_SSL_CIPHER_freefunc_type(freefunc))) +#define sk_SSL_CIPHER_set_cmp_func(sk, cmp) ((sk_SSL_CIPHER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(SSL_COMP, SSL_COMP, SSL_COMP) +#define sk_SSL_COMP_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_value(sk, idx) ((SSL_COMP *)OPENSSL_sk_value(ossl_check_const_SSL_COMP_sk_type(sk), (idx))) +#define sk_SSL_COMP_new(cmp) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new(ossl_check_SSL_COMP_compfunc_type(cmp))) +#define sk_SSL_COMP_new_null() ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_null()) +#define sk_SSL_COMP_new_reserve(cmp, n) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_reserve(ossl_check_SSL_COMP_compfunc_type(cmp), (n))) +#define sk_SSL_COMP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_COMP_sk_type(sk), (n)) +#define sk_SSL_COMP_free(sk) OPENSSL_sk_free(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_delete(sk, i) ((SSL_COMP *)OPENSSL_sk_delete(ossl_check_SSL_COMP_sk_type(sk), (i))) +#define sk_SSL_COMP_delete_ptr(sk, ptr) ((SSL_COMP *)OPENSSL_sk_delete_ptr(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))) +#define sk_SSL_COMP_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_pop(sk) ((SSL_COMP *)OPENSSL_sk_pop(ossl_check_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_shift(sk) ((SSL_COMP *)OPENSSL_sk_shift(ossl_check_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_COMP_sk_type(sk),ossl_check_SSL_COMP_freefunc_type(freefunc)) +#define sk_SSL_COMP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), (idx)) +#define sk_SSL_COMP_set(sk, idx, ptr) ((SSL_COMP *)OPENSSL_sk_set(ossl_check_SSL_COMP_sk_type(sk), (idx), ossl_check_SSL_COMP_type(ptr))) +#define sk_SSL_COMP_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), pnum) +#define sk_SSL_COMP_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_dup(sk) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_dup(ossl_check_const_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_copyfunc_type(copyfunc), ossl_check_SSL_COMP_freefunc_type(freefunc))) +#define sk_SSL_COMP_set_cmp_func(sk, cmp) ((sk_SSL_COMP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_compfunc_type(cmp))) + /* compatibility */ # define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) @@ -967,7 +1040,9 @@ DEFINE_STACK_OF(SSL_COMP) # define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) # define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ (char *)(arg))) -DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void SSL_set_debug(SSL *s, int debug); +# endif /* TLSv1.3 KeyUpdate message types */ /* -1 used so that this is an invalid value for the on-the-wire protocol */ @@ -1102,7 +1177,7 @@ size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); # define SSL_VERIFY_CLIENT_ONCE 0x04 # define SSL_VERIFY_POST_HANDSHAKE 0x08 -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OpenSSL_add_ssl_algorithms() SSL_library_init() # define SSLeay_add_ssl_algorithms() SSL_library_init() # endif @@ -1190,9 +1265,14 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_ERROR_WANT_ASYNC 9 # define SSL_ERROR_WANT_ASYNC_JOB 10 # define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 -# define SSL_CTRL_SET_TMP_DH 3 -# define SSL_CTRL_SET_TMP_ECDH 4 -# define SSL_CTRL_SET_TMP_DH_CB 6 +# define SSL_ERROR_WANT_RETRY_VERIFY 12 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# endif + # define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 # define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 # define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 @@ -1246,7 +1326,9 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 # define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# endif # define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 # define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 # define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 @@ -1254,11 +1336,6 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 # define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 # define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT 85 -# define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING 86 -# define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS 87 -# endif # define DTLS_CTRL_GET_TIMEOUT 73 # define DTLS_CTRL_HANDLE_TIMEOUT 74 # define SSL_CTRL_GET_RI_SUPPORT 76 @@ -1305,6 +1382,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_GET_MAX_PROTO_VERSION 131 # define SSL_CTRL_GET_SIGNATURE_NID 132 # define SSL_CTRL_GET_TMP_KEY 133 +# define SSL_CTRL_GET_NEGOTIATED_GROUP 134 +# define SSL_CTRL_SET_RETRY_VERIFY 136 # define SSL_CTRL_GET_VERIFY_CERT_STORE 137 # define SSL_CTRL_GET_CHAIN_CERT_STORE 138 # define SSL_CERT_SET_FIRST 1 @@ -1320,18 +1399,24 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) # define SSL_total_renegotiations(ssl) \ SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) -# define SSL_CTX_set_tmp_dh(ctx,dh) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_dh(ctx,dh) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif # define SSL_CTX_set_dh_auto(ctx, onoff) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) # define SSL_set_dh_auto(s, onoff) \ SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) -# define SSL_set_tmp_dh(ssl,dh) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_set_tmp_dh(ssl,dh) \ SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_set_tmp_ecdh(ssl,ecdh) \ +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif # define SSL_CTX_add_extra_chain_cert(ctx,x509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) # define SSL_CTX_get_extra_chain_certs(ctx,px509) \ @@ -1400,6 +1485,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) #define SSL_get0_chain_cert_store(s,st) \ SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) + # define SSL_get1_groups(s, glist) \ SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) # define SSL_CTX_set1_groups(ctx, glist, glistlen) \ @@ -1412,6 +1498,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) # define SSL_get_shared_group(s, n) \ SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) +# define SSL_get_negotiated_group(s) \ + SSL_ctrl(s,SSL_CTRL_GET_NEGOTIATED_GROUP,0,NULL) # define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) # define SSL_CTX_set1_sigalgs_list(ctx, s) \ @@ -1464,12 +1552,17 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_group_to_name(SSL *s, int id); + /* Backwards compatibility, original 1.1.0 names */ # define SSL_CTRL_GET_SERVER_TMP_KEY \ SSL_CTRL_GET_PEER_TMP_KEY # define SSL_get_server_tmp_key(s, pk) \ SSL_get_peer_tmp_key(s, pk) +int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey); +int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey); + /* * The following symbol names are old and obsolete. They are kept * for compatibility reasons only and should not be used anymore. @@ -1487,7 +1580,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_shared_curve SSL_get_shared_group -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* Provide some compatibility macros for removed functionality. */ # define SSL_CTX_need_tmp_RSA(ctx) 0 # define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 @@ -1511,6 +1604,8 @@ void BIO_ssl_shutdown(BIO *ssl_bio); __owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); __owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +__owur SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq, + const SSL_METHOD *meth); int SSL_CTX_up_ref(SSL_CTX *ctx); void SSL_CTX_free(SSL_CTX *); __owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); @@ -1565,10 +1660,11 @@ __owur SSL_verify_cb SSL_get_verify_callback(const SSL *s); void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); void SSL_set_verify_depth(SSL *s, int depth); void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); -# ifndef OPENSSL_NO_RSA -__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); -__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, - long len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, + const unsigned char *d, long len); # endif __owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); __owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, @@ -1591,14 +1687,16 @@ __owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, size_t serverinfo_length); __owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); -#ifndef OPENSSL_NO_RSA +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); #endif __owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); __owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); -#ifndef OPENSSL_NO_RSA +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); #endif @@ -1610,12 +1708,17 @@ __owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, __owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); __owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); __owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur STACK_OF(X509_NAME) +*SSL_load_client_CA_file_ex(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); __owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *file); int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *dir); +int SSL_add_store_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *uri); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_load_error_strings() \ OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) @@ -1659,7 +1762,7 @@ __owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, __owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); __owur SSL_SESSION *SSL_SESSION_new(void); -__owur SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src); +__owur SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src); const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len); const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, @@ -1672,7 +1775,7 @@ int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); int SSL_SESSION_up_ref(SSL_SESSION *ses); void SSL_SESSION_free(SSL_SESSION *ses); -__owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); +__owur int i2d_SSL_SESSION(const SSL_SESSION *in, unsigned char **pp); __owur int SSL_set_session(SSL *to, SSL_SESSION *session); int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); @@ -1684,8 +1787,13 @@ __owur int SSL_has_matching_session_id(const SSL *s, SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length); -# ifdef HEADER_X509_H -__owur X509 *SSL_get_peer_certificate(const SSL *s); +# ifdef OPENSSL_X509_H +__owur X509 *SSL_get0_peer_certificate(const SSL *s); +__owur X509 *SSL_get1_peer_certificate(const SSL *s); +/* Deprecated in 3.0.0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_get_peer_certificate SSL_get1_peer_certificate +# endif # endif __owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); @@ -1700,8 +1808,10 @@ void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, void *arg); void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg); -# ifndef OPENSSL_NO_RSA +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len); # endif @@ -1751,10 +1861,10 @@ __owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, uint8_t mtype, uint8_t ord); __owur int SSL_dane_enable(SSL *s, const char *basedomain); __owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, - uint8_t mtype, unsigned const char *data, size_t dlen); + uint8_t mtype, const unsigned char *data, size_t dlen); __owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); __owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, - uint8_t *mtype, unsigned const char **data, + uint8_t *mtype, const unsigned char **data, size_t *dlen); /* * Bridge opacity barrier between libcrypt and libssl, also needed to support @@ -1776,27 +1886,34 @@ __owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); __owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); # ifndef OPENSSL_NO_SRP -int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); -int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); -int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, char *(*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, int (*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, int (*cb) (SSL *, int *, void *)); -int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); +OSSL_DEPRECATEDIN_3_0 int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, BIGNUM *sa, BIGNUM *v, char *info); +OSSL_DEPRECATEDIN_3_0 int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, const char *grp); -__owur BIGNUM *SSL_get_srp_g(SSL *s); -__owur BIGNUM *SSL_get_srp_N(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_g(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_N(SSL *s); -__owur char *SSL_get_srp_username(SSL *s); -__owur char *SSL_get_srp_userinfo(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_username(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_userinfo(SSL *s); +# endif # endif /* @@ -1832,6 +1949,12 @@ __owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); __owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds, OSSL_ASYNC_FD *delfd, size_t *numdelfds); +__owur int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback); +__owur int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg); +__owur int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback); +__owur int SSL_set_async_callback_arg(SSL *s, void *arg); +__owur int SSL_get_async_status(SSL *s, int *status); + # endif __owur int SSL_accept(SSL *ssl); __owur int SSL_stateless(SSL *s); @@ -1847,6 +1970,8 @@ __owur int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes); __owur int SSL_peek(SSL *ssl, void *buf, int num); __owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +__owur ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, + int flags); __owur int SSL_write(SSL *ssl, const void *buf, int num); __owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); __owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, @@ -1866,12 +1991,17 @@ __owur int SSL_get_error(const SSL *s, int ret_code); __owur const char *SSL_get_version(const SSL *s); /* This sets the 'default' SSL version that SSL_new() will create */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); +# endif # ifndef OPENSSL_NO_SSL3_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_client_method(void); +# endif # endif #define SSLv23_method TLS_method @@ -1884,34 +2014,44 @@ __owur const SSL_METHOD *TLS_server_method(void); __owur const SSL_METHOD *TLS_client_method(void); # ifndef OPENSSL_NO_TLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_TLS1_1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_TLS1_2_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_client_method(void); +# endif # endif # ifndef OPENSSL_NO_DTLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_DTLS1_2_METHOD /* DTLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_client_method(void); +# endif # endif __owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ @@ -1931,6 +2071,7 @@ int SSL_get_key_update_type(const SSL *s); int SSL_renegotiate(SSL *s); int SSL_renegotiate_abbreviated(SSL *s); __owur int SSL_renegotiate_pending(const SSL *s); +int SSL_new_session_ticket(SSL *s); int SSL_shutdown(SSL *s); __owur int SSL_verify_client_post_handshake(SSL *s); void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); @@ -1964,7 +2105,7 @@ void SSL_set_accept_state(SSL *s); __owur long SSL_get_default_timeout(const SSL *s); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_library_init() OPENSSL_init_ssl(0, NULL) # endif @@ -1993,8 +2134,13 @@ __owur int SSL_client_version(const SSL *s); __owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); __owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); __owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); -__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, - const char *CApath); +__owur int SSL_CTX_set_default_verify_store(SSL_CTX *ctx); +__owur int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile); +__owur int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath); +__owur int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore); +__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, + const char *CAfile, + const char *CApath); # define SSL_get0_session SSL_get_session/* just peek at pointer */ __owur SSL_SESSION *SSL_get_session(const SSL *ssl); __owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ @@ -2071,18 +2217,24 @@ __owur int SSL_get_ex_data_X509_STORE_CTX_idx(void); SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) # define SSL_set_max_pipelines(ssl,m) \ SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_retry_verify(ssl) \ + (SSL_ctrl(ssl,SSL_CTRL_SET_RETRY_VERIFY,0,NULL) > 0) void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); void SSL_set_default_read_buffer_len(SSL *s, size_t len); # ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* NB: the |keylength| is only applicable when is_export is true */ +OSSL_DEPRECATEDIN_3_0 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*dh) (SSL *ssl, int is_export, int keylength)); +OSSL_DEPRECATEDIN_3_0 void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export, int keylength)); +# endif # endif __owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); @@ -2093,7 +2245,7 @@ __owur int SSL_COMP_get_id(const SSL_COMP *comp); STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); __owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) *meths); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_COMP_free_compression_methods() while(0) continue # endif __owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); @@ -2133,7 +2285,7 @@ void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); -void SSL_set_record_padding_callback(SSL *ssl, +int SSL_set_record_padding_callback(SSL *ssl, size_t (*cb) (SSL *ssl, int type, size_t len, void *arg)); void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); @@ -2145,7 +2297,7 @@ size_t SSL_get_num_tickets(const SSL *s); int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_cache_hit(s) SSL_session_reused(s) # endif @@ -2427,8 +2579,6 @@ int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); -extern const char SSL_version_str[]; - typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); @@ -2442,6 +2592,10 @@ void SSL_set_allow_early_data_cb(SSL *s, SSL_allow_early_data_cb_fn cb, void *arg); +/* store the default cipher strings inside the library */ +const char *OSSL_default_cipher_list(void); +const char *OSSL_default_ciphersuites(void); + # ifdef __cplusplus } # endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h.in new file mode 100644 index 00000000..f03f52fb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h.in @@ -0,0 +1,2530 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros generate_const_stack_macros); +-} + +#ifndef OPENSSL_SSL_H +# define OPENSSL_SSL_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# endif +# include +# include +# include +# include + +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* OpenSSL version number for ASN.1 encoding of the session information */ +/*- + * Version 0 - initial version + * Version 1 - added the optional peer certificate + */ +# define SSL_SESSION_ASN1_VERSION 0x0001 + +# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 +# define SSL_MAX_SID_CTX_LENGTH 32 + +# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) +# define SSL_MAX_KEY_ARG_LENGTH 8 +/* SSL_MAX_MASTER_KEY_LENGTH is defined in prov_ssl.h */ + +/* The maximum number of encrypt/decrypt pipelines we can support */ +# define SSL_MAX_PIPELINES 32 + +/* text strings for the ciphers */ + +/* These are used to specify which ciphers to use and not to use */ + +# define SSL_TXT_LOW "LOW" +# define SSL_TXT_MEDIUM "MEDIUM" +# define SSL_TXT_HIGH "HIGH" +# define SSL_TXT_FIPS "FIPS" + +# define SSL_TXT_aNULL "aNULL" +# define SSL_TXT_eNULL "eNULL" +# define SSL_TXT_NULL "NULL" + +# define SSL_TXT_kRSA "kRSA" +# define SSL_TXT_kDHr "kDHr"/* this cipher class has been removed */ +# define SSL_TXT_kDHd "kDHd"/* this cipher class has been removed */ +# define SSL_TXT_kDH "kDH"/* this cipher class has been removed */ +# define SSL_TXT_kEDH "kEDH"/* alias for kDHE */ +# define SSL_TXT_kDHE "kDHE" +# define SSL_TXT_kECDHr "kECDHr"/* this cipher class has been removed */ +# define SSL_TXT_kECDHe "kECDHe"/* this cipher class has been removed */ +# define SSL_TXT_kECDH "kECDH"/* this cipher class has been removed */ +# define SSL_TXT_kEECDH "kEECDH"/* alias for kECDHE */ +# define SSL_TXT_kECDHE "kECDHE" +# define SSL_TXT_kPSK "kPSK" +# define SSL_TXT_kRSAPSK "kRSAPSK" +# define SSL_TXT_kECDHEPSK "kECDHEPSK" +# define SSL_TXT_kDHEPSK "kDHEPSK" +# define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kGOST18 "kGOST18" +# define SSL_TXT_kSRP "kSRP" + +# define SSL_TXT_aRSA "aRSA" +# define SSL_TXT_aDSS "aDSS" +# define SSL_TXT_aDH "aDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDH "aECDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDSA "aECDSA" +# define SSL_TXT_aPSK "aPSK" +# define SSL_TXT_aGOST94 "aGOST94" +# define SSL_TXT_aGOST01 "aGOST01" +# define SSL_TXT_aGOST12 "aGOST12" +# define SSL_TXT_aGOST "aGOST" +# define SSL_TXT_aSRP "aSRP" + +# define SSL_TXT_DSS "DSS" +# define SSL_TXT_DH "DH" +# define SSL_TXT_DHE "DHE"/* same as "kDHE:-ADH" */ +# define SSL_TXT_EDH "EDH"/* alias for DHE */ +# define SSL_TXT_ADH "ADH" +# define SSL_TXT_RSA "RSA" +# define SSL_TXT_ECDH "ECDH" +# define SSL_TXT_EECDH "EECDH"/* alias for ECDHE" */ +# define SSL_TXT_ECDHE "ECDHE"/* same as "kECDHE:-AECDH" */ +# define SSL_TXT_AECDH "AECDH" +# define SSL_TXT_ECDSA "ECDSA" +# define SSL_TXT_PSK "PSK" +# define SSL_TXT_SRP "SRP" + +# define SSL_TXT_DES "DES" +# define SSL_TXT_3DES "3DES" +# define SSL_TXT_RC4 "RC4" +# define SSL_TXT_RC2 "RC2" +# define SSL_TXT_IDEA "IDEA" +# define SSL_TXT_SEED "SEED" +# define SSL_TXT_AES128 "AES128" +# define SSL_TXT_AES256 "AES256" +# define SSL_TXT_AES "AES" +# define SSL_TXT_AES_GCM "AESGCM" +# define SSL_TXT_AES_CCM "AESCCM" +# define SSL_TXT_AES_CCM_8 "AESCCM8" +# define SSL_TXT_CAMELLIA128 "CAMELLIA128" +# define SSL_TXT_CAMELLIA256 "CAMELLIA256" +# define SSL_TXT_CAMELLIA "CAMELLIA" +# define SSL_TXT_CHACHA20 "CHACHA20" +# define SSL_TXT_GOST "GOST89" +# define SSL_TXT_ARIA "ARIA" +# define SSL_TXT_ARIA_GCM "ARIAGCM" +# define SSL_TXT_ARIA128 "ARIA128" +# define SSL_TXT_ARIA256 "ARIA256" +# define SSL_TXT_GOST2012_GOST8912_GOST8912 "GOST2012-GOST8912-GOST8912" +# define SSL_TXT_CBC "CBC" + +# define SSL_TXT_MD5 "MD5" +# define SSL_TXT_SHA1 "SHA1" +# define SSL_TXT_SHA "SHA"/* same as "SHA1" */ +# define SSL_TXT_GOST94 "GOST94" +# define SSL_TXT_GOST89MAC "GOST89MAC" +# define SSL_TXT_GOST12 "GOST12" +# define SSL_TXT_GOST89MAC12 "GOST89MAC12" +# define SSL_TXT_SHA256 "SHA256" +# define SSL_TXT_SHA384 "SHA384" + +# define SSL_TXT_SSLV3 "SSLv3" +# define SSL_TXT_TLSV1 "TLSv1" +# define SSL_TXT_TLSV1_1 "TLSv1.1" +# define SSL_TXT_TLSV1_2 "TLSv1.2" + +# define SSL_TXT_ALL "ALL" + +/*- + * COMPLEMENTOF* definitions. These identifiers are used to (de-select) + * ciphers normally not being used. + * Example: "RC4" will activate all ciphers using RC4 including ciphers + * without authentication, which would normally disabled by DEFAULT (due + * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" + * will make sure that it is also disabled in the specific selection. + * COMPLEMENTOF* identifiers are portable between version, as adjustments + * to the default cipher setup will also be included here. + * + * COMPLEMENTOFDEFAULT does not experience the same special treatment that + * DEFAULT gets, as only selection is being done and no sorting as needed + * for DEFAULT. + */ +# define SSL_TXT_CMPALL "COMPLEMENTOFALL" +# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" + +/* + * The following cipher list is used by default. It also is substituted when + * an application-defined cipher list string starts with 'DEFAULT'. + * This applies to ciphersuites for TLSv1.2 and below. + * DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list() + * Update both macro and function simultaneously + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* + * This is the default set of TLSv1.3 ciphersuites + * DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites() + * Update both macro and function simultaneously + */ +# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ + "TLS_CHACHA20_POLY1305_SHA256:" \ + "TLS_AES_128_GCM_SHA256" +# endif +/* + * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always + * starts with a reasonable order, and all we have to do for DEFAULT is + * throwing out anonymous and unencrypted ciphersuites! (The latter are not + * actually enabled by ALL, but "ALL:RSA" would enable some of them.) + */ + +/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ +# define SSL_SENT_SHUTDOWN 1 +# define SSL_RECEIVED_SHUTDOWN 2 + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 +# define SSL_FILETYPE_PEM X509_FILETYPE_PEM + +/* + * This is needed to stop compilers complaining about the 'struct ssl_st *' + * function parameters used to prototype callbacks in SSL_CTX. + */ +typedef struct ssl_st *ssl_crock_st; +typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; +typedef struct ssl_method_st SSL_METHOD; +typedef struct ssl_cipher_st SSL_CIPHER; +typedef struct ssl_session_st SSL_SESSION; +typedef struct tls_sigalgs_st TLS_SIGALGS; +typedef struct ssl_conf_ctx_st SSL_CONF_CTX; +typedef struct ssl_comp_st SSL_COMP; + +STACK_OF(SSL_CIPHER); +STACK_OF(SSL_COMP); + +/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ +typedef struct srtp_protection_profile_st { + const char *name; + unsigned long id; +} SRTP_PROTECTION_PROFILE; +{- + generate_stack_macros("SRTP_PROTECTION_PROFILE"); +-} + + +typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, + int len, void *arg); +typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, + STACK_OF(SSL_CIPHER) *peer_ciphers, + const SSL_CIPHER **cipher, void *arg); + +/* Extension context codes */ +/* This extension is only allowed in TLS */ +#define SSL_EXT_TLS_ONLY 0x0001 +/* This extension is only allowed in DTLS */ +#define SSL_EXT_DTLS_ONLY 0x0002 +/* Some extensions may be allowed in DTLS but we don't implement them for it */ +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x0004 +/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ +#define SSL_EXT_SSL3_ALLOWED 0x0008 +/* Extension is only defined for TLS1.2 and below */ +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +/* Extension is only defined for TLS1.3 and above */ +#define SSL_EXT_TLS1_3_ONLY 0x0020 +/* Ignore this extension during parsing if we are resuming */ +#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 +#define SSL_EXT_CLIENT_HELLO 0x0080 +/* Really means TLS1.2 or below */ +#define SSL_EXT_TLS1_2_SERVER_HELLO 0x0100 +#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 +#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 +#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 +#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 +#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 +#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 + +/* Typedefs for handling custom extensions */ + +typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type, + const unsigned char **out, size_t *outlen, + int *al, void *add_arg); + +typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type, + const unsigned char *out, void *add_arg); + +typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type, + const unsigned char *in, size_t inlen, + int *al, void *parse_arg); + + +typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char **out, + size_t *outlen, X509 *x, + size_t chainidx, + int *al, void *add_arg); + +typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *out, + void *add_arg); + +typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *in, + size_t inlen, X509 *x, + size_t chainidx, + int *al, void *parse_arg); + +/* Typedef for verification callback */ +typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); + +/* Typedef for SSL async callback */ +typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); + +#define SSL_OP_BIT(n) ((uint64_t)1 << (uint64_t)n) + +/* + * SSL/TLS connection options. + */ + /* Disable Extended master secret */ +# define SSL_OP_NO_EXTENDED_MASTER_SECRET SSL_OP_BIT(0) + /* Cleanse plaintext copies of data delivered to the application */ +# define SSL_OP_CLEANSE_PLAINTEXT SSL_OP_BIT(1) + /* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT SSL_OP_BIT(2) + /* Enable support for Kernel TLS */ +# define SSL_OP_ENABLE_KTLS SSL_OP_BIT(3) +# define SSL_OP_TLSEXT_PADDING SSL_OP_BIT(4) +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG SSL_OP_BIT(6) +# define SSL_OP_IGNORE_UNEXPECTED_EOF SSL_OP_BIT(7) +# define SSL_OP_ALLOW_CLIENT_RENEGOTIATION SSL_OP_BIT(8) +# define SSL_OP_DISABLE_TLSEXT_CA_NAMES SSL_OP_BIT(9) + /* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX SSL_OP_BIT(10) + /* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added + * in OpenSSL 0.9.6d. Usually (depending on the application protocol) + * the workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it + * in SSL_OP_ALL. Added in 0.9.6e + */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS SSL_OP_BIT(11) + /* DTLS options */ +# define SSL_OP_NO_QUERY_MTU SSL_OP_BIT(12) + /* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE SSL_OP_BIT(13) + /* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET SSL_OP_BIT(14) +# ifndef OPENSSL_NO_DTLS1_METHOD + /* + * Use Cisco's version identifier of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) + */ +# define SSL_OP_CISCO_ANYCONNECT SSL_OP_BIT(15) +# endif + /* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_BIT(16) + /* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION SSL_OP_BIT(17) + /* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_BIT(18) + /* Disable encrypt-then-mac */ +# define SSL_OP_NO_ENCRYPT_THEN_MAC SSL_OP_BIT(19) + /* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future + * version of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT SSL_OP_BIT(20) + /* + * Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE + */ +# define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21) + /* + * Set on servers to choose the cipher according to server's preferences. + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_BIT(22) + /* + * If set, a server will allow a client to issue a SSLv3.0 version + * number as latest version supported in the premaster secret, even when + * TLSv1.0 (version 3.1) was announced in the client hello. Normally + * this is forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG SSL_OP_BIT(23) + /* + * Switches off automatic TLSv1.3 anti-replay protection for early data. + * This is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY SSL_OP_BIT(24) +# define SSL_OP_NO_SSLv3 SSL_OP_BIT(25) +# define SSL_OP_NO_TLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_TLSv1_2 SSL_OP_BIT(27) +# define SSL_OP_NO_TLSv1_1 SSL_OP_BIT(28) +# define SSL_OP_NO_TLSv1_3 SSL_OP_BIT(29) +# define SSL_OP_NO_DTLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_DTLSv1_2 SSL_OP_BIT(27) + /* Disallow all renegotiation */ +# define SSL_OP_NO_RENEGOTIATION SSL_OP_BIT(30) + /* + * Make server add server-hello extension from early version of + * cryptopro draft, when GOST ciphersuite is negotiated. Required for + * interoperability with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG SSL_OP_BIT(31) + +/* + * Option "collections." + */ +# define SSL_OP_NO_SSL_MASK \ + ( SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 \ + | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 ) +# define SSL_OP_NO_DTLS_MASK \ + ( SSL_OP_NO_DTLSv1 | SSL_OP_NO_DTLSv1_2 ) + +/* Various bug workarounds that should be rather harmless. */ +# define SSL_OP_ALL \ + ( SSL_OP_CRYPTOPRO_TLSEXT_BUG | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS \ + | SSL_OP_TLSEXT_PADDING | SSL_OP_SAFARI_ECDHE_ECDSA_BUG ) + +/* + * OBSOLETE OPTIONS retained for compatibility + */ + +# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 +# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 +# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 +# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 +# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 +# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 +# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 +# define SSL_OP_TLS_D5_BUG 0x0 +# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 +# define SSL_OP_SINGLE_ECDH_USE 0x0 +# define SSL_OP_SINGLE_DH_USE 0x0 +# define SSL_OP_EPHEMERAL_RSA 0x0 +# define SSL_OP_NO_SSLv2 0x0 +# define SSL_OP_PKCS1_CHECK_1 0x0 +# define SSL_OP_PKCS1_CHECK_2 0x0 +# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 +# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 + +/* + * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success + * when just a single record has been written): + */ +# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001U +/* + * Make it possible to retry SSL_write() with changed buffer location (buffer + * contents must stay the same!); this is not the default to avoid the + * misconception that non-blocking SSL_write() behaves like non-blocking + * write(): + */ +# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U +/* + * Never bother the application with retries if the transport is blocking: + */ +# define SSL_MODE_AUTO_RETRY 0x00000004U +/* Don't attempt to automatically build certificate chain */ +# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U +/* + * Save RAM by releasing read and write buffers when they're empty. (SSL3 and + * TLS only.) Released buffers are freed. + */ +# define SSL_MODE_RELEASE_BUFFERS 0x00000010U +/* + * Send the current time in the Random fields of the ClientHello and + * ServerHello records for compatibility with hypothetical implementations + * that require it. + */ +# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U +# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U +/* + * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications + * that reconnect with a downgraded protocol version; see + * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your + * application attempts a normal handshake. Only use this in explicit + * fallback retries, following the guidance in + * draft-ietf-tls-downgrade-scsv-00. + */ +# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U +/* + * Support Asynchronous operation + */ +# define SSL_MODE_ASYNC 0x00000100U + +/* + * When using DTLS/SCTP, include the terminating zero in the label + * used for computing the endpoint-pair shared secret. Required for + * interoperability with implementations having this bug like these + * older version of OpenSSL: + * - OpenSSL 1.0.0 series + * - OpenSSL 1.0.1 series + * - OpenSSL 1.0.2 series + * - OpenSSL 1.1.0 series + * - OpenSSL 1.1.1 and 1.1.1a + */ +# define SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG 0x00000400U + +/* Cert related flags */ +/* + * Many implementations ignore some aspects of the TLS standards such as + * enforcing certificate chain algorithms. When this is set we enforce them. + */ +# define SSL_CERT_FLAG_TLS_STRICT 0x00000001U + +/* Suite B modes, takes same values as certificate verify flags */ +# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 + +/* Perform all sorts of protocol violations for testing purposes */ +# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 + +/* Flags for building certificate chains */ +/* Treat any existing certificates as untrusted CAs */ +# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 +/* Don't include root CA in chain */ +# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 +/* Just check certificates already there */ +# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 +/* Ignore verification errors */ +# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 +/* Clear verification errors from queue */ +# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 + +/* Flags returned by SSL_check_chain */ +/* Certificate can be used with this session */ +# define CERT_PKEY_VALID 0x1 +/* Certificate can also be used for signing */ +# define CERT_PKEY_SIGN 0x2 +/* EE certificate signing algorithm OK */ +# define CERT_PKEY_EE_SIGNATURE 0x10 +/* CA signature algorithms OK */ +# define CERT_PKEY_CA_SIGNATURE 0x20 +/* EE certificate parameters OK */ +# define CERT_PKEY_EE_PARAM 0x40 +/* CA certificate parameters OK */ +# define CERT_PKEY_CA_PARAM 0x80 +/* Signing explicitly allowed as opposed to SHA1 fallback */ +# define CERT_PKEY_EXPLICIT_SIGN 0x100 +/* Client CA issuer names match (always set for server cert) */ +# define CERT_PKEY_ISSUER_NAME 0x200 +/* Cert type matches client types (always set for server cert) */ +# define CERT_PKEY_CERT_TYPE 0x400 +/* Cert chain suitable to Suite B */ +# define CERT_PKEY_SUITEB 0x800 + +# define SSL_CONF_FLAG_CMDLINE 0x1 +# define SSL_CONF_FLAG_FILE 0x2 +# define SSL_CONF_FLAG_CLIENT 0x4 +# define SSL_CONF_FLAG_SERVER 0x8 +# define SSL_CONF_FLAG_SHOW_ERRORS 0x10 +# define SSL_CONF_FLAG_CERTIFICATE 0x20 +# define SSL_CONF_FLAG_REQUIRE_PRIVATE 0x40 +/* Configuration value types */ +# define SSL_CONF_TYPE_UNKNOWN 0x0 +# define SSL_CONF_TYPE_STRING 0x1 +# define SSL_CONF_TYPE_FILE 0x2 +# define SSL_CONF_TYPE_DIR 0x3 +# define SSL_CONF_TYPE_NONE 0x4 +# define SSL_CONF_TYPE_STORE 0x5 + +/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ +# define SSL_COOKIE_LENGTH 4096 + +/* + * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they + * cannot be used to clear bits. + */ + +uint64_t SSL_CTX_get_options(const SSL_CTX *ctx); +uint64_t SSL_get_options(const SSL *s); +uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_clear_options(SSL *s, uint64_t op); +uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_set_options(SSL *s, uint64_t op); + +# define SSL_CTX_set_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) +# define SSL_CTX_clear_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_CTX_get_mode(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) +# define SSL_clear_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_set_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) +# define SSL_get_mode(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) +# define SSL_set_mtu(ssl, mtu) \ + SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) +# define DTLS_set_link_mtu(ssl, mtu) \ + SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) +# define DTLS_get_link_min_mtu(ssl) \ + SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) + +# define SSL_get_secure_renegotiation_support(ssl) \ + SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) + +# define SSL_CTX_set_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_set_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_CTX_clear_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) +# define SSL_clear_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) + +void SSL_CTX_set_msg_callback(SSL_CTX *ctx, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +void SSL_set_msg_callback(SSL *ssl, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) +# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) + +# define SSL_get_extms_support(s) \ + SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) + +# ifndef OPENSSL_NO_SRP +/* see tls_srp.c */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_SRP_CTX_init(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_SRP_CTX_free(SSL *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_srp_server_param_with_username(SSL *s, + int *ad); +OSSL_DEPRECATEDIN_3_0 __owur int SRP_Calc_A_param(SSL *s); +# endif +# endif + +/* 100k max cert list */ +# define SSL_MAX_CERT_LIST_DEFAULT (1024*100) + +# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) + +/* + * This callback type is used inside SSL_CTX, SSL, and in the functions that + * set them. It is used to override the generation of SSL/TLS session IDs in + * a server. Return value should be zero on an error, non-zero to proceed. + * Also, callbacks should themselves check if the id they generate is unique + * otherwise the SSL handshake will fail with an error - callbacks can do + * this using the 'ssl' value they're passed by; + * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in + * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32 + * bytes. The callback can alter this length to be less if desired. It is + * also an error for the callback to set the size to zero. + */ +typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, + unsigned int *id_len); + +# define SSL_SESS_CACHE_OFF 0x0000 +# define SSL_SESS_CACHE_CLIENT 0x0001 +# define SSL_SESS_CACHE_SERVER 0x0002 +# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) +# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 +/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ +# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 +# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 +# define SSL_SESS_CACHE_NO_INTERNAL \ + (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) +# define SSL_SESS_CACHE_UPDATE_TIME 0x0400 + +LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); +# define SSL_CTX_sess_number(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) +# define SSL_CTX_sess_connect(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) +# define SSL_CTX_sess_connect_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) +# define SSL_CTX_sess_connect_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) +# define SSL_CTX_sess_accept_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) +# define SSL_CTX_sess_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) +# define SSL_CTX_sess_cb_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) +# define SSL_CTX_sess_misses(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) +# define SSL_CTX_sess_timeouts(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) +# define SSL_CTX_sess_cache_full(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) + +void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, + int (*new_session_cb) (struct ssl_st *ssl, + SSL_SESSION *sess)); +int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + SSL_SESSION *sess); +void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, + void (*remove_session_cb) (struct ssl_ctx_st + *ctx, + SSL_SESSION *sess)); +void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, + SSL_SESSION *sess); +void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, + SSL_SESSION *(*get_session_cb) (struct ssl_st + *ssl, + const unsigned char + *data, int len, + int *copy)); +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + const unsigned char *data, + int len, int *copy); +void SSL_CTX_set_info_callback(SSL_CTX *ctx, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, + int val); +void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, + int (*client_cert_cb) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey)); +int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey); +# ifndef OPENSSL_NO_ENGINE +__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); +# endif +void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, + int (*app_gen_cookie_cb) (SSL *ssl, + unsigned char + *cookie, + unsigned int + *cookie_len)); +void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, + int (*app_verify_cookie_cb) (SSL *ssl, + const unsigned + char *cookie, + unsigned int + cookie_len)); + +void SSL_CTX_set_stateless_cookie_generate_cb( + SSL_CTX *ctx, + int (*gen_stateless_cookie_cb) (SSL *ssl, + unsigned char *cookie, + size_t *cookie_len)); +void SSL_CTX_set_stateless_cookie_verify_cb( + SSL_CTX *ctx, + int (*verify_stateless_cookie_cb) (SSL *ssl, + const unsigned char *cookie, + size_t cookie_len)); +# ifndef OPENSSL_NO_NEXTPROTONEG + +typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned int *outlen, + void *arg); +void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, + SSL_CTX_npn_advertised_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb + +typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s, + unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, + SSL_CTX_npn_select_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb + +void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, + unsigned *len); +# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated +# endif + +__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, + const unsigned char *in, unsigned int inlen, + const unsigned char *client, + unsigned int client_len); + +# define OPENSSL_NPN_UNSUPPORTED 0 +# define OPENSSL_NPN_NEGOTIATED 1 +# define OPENSSL_NPN_NO_OVERLAP 2 + +__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, + unsigned int protos_len); +__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, + unsigned int protos_len); +typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, + SSL_CTX_alpn_select_cb_func cb, + void *arg); +void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, + unsigned int *len); + +# ifndef OPENSSL_NO_PSK +/* + * the maximum length of the buffer given to callbacks containing the + * resulting identity/psk + */ +# define PSK_MAX_IDENTITY_LEN 256 +# define PSK_MAX_PSK_LEN 512 +typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, + const char *hint, + char *identity, + unsigned int max_identity_len, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb); +void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb); + +typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl, + const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb); +void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb); + +__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); +__owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); +const char *SSL_get_psk_identity_hint(const SSL *s); +const char *SSL_get_psk_identity(const SSL *s); +# endif + +typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl, + const unsigned char *identity, + size_t identity_len, + SSL_SESSION **sess); +typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md, + const unsigned char **id, + size_t *idlen, + SSL_SESSION **sess); + +void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb); +void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx, + SSL_psk_find_session_cb_func cb); +void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb); +void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx, + SSL_psk_use_session_cb_func cb); + +/* Register callbacks to handle custom TLS Extensions for client or server. */ + +__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, + unsigned int ext_type); + +__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type, + unsigned int context, + SSL_custom_ext_add_cb_ex add_cb, + SSL_custom_ext_free_cb_ex free_cb, + void *add_arg, + SSL_custom_ext_parse_cb_ex parse_cb, + void *parse_arg); + +__owur int SSL_extension_supported(unsigned int ext_type); + +# define SSL_NOTHING 1 +# define SSL_WRITING 2 +# define SSL_READING 3 +# define SSL_X509_LOOKUP 4 +# define SSL_ASYNC_PAUSED 5 +# define SSL_ASYNC_NO_JOBS 6 +# define SSL_CLIENT_HELLO_CB 7 +# define SSL_RETRY_VERIFY 8 + +/* These will only be used when doing non-blocking IO */ +# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) +# define SSL_want_read(s) (SSL_want(s) == SSL_READING) +# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) +# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) +# define SSL_want_retry_verify(s) (SSL_want(s) == SSL_RETRY_VERIFY) +# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) +# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) +# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) + +# define SSL_MAC_FLAG_READ_MAC_STREAM 1 +# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 +# define SSL_MAC_FLAG_READ_MAC_TLSTREE 4 +# define SSL_MAC_FLAG_WRITE_MAC_TLSTREE 8 + +/* + * A callback for logging out TLS key material. This callback should log out + * |line| followed by a newline. + */ +typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line); + +/* + * SSL_CTX_set_keylog_callback configures a callback to log key material. This + * is intended for debugging use with tools like Wireshark. The cb function + * should log line followed by a newline. + */ +void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb); + +/* + * SSL_CTX_get_keylog_callback returns the callback configured by + * SSL_CTX_set_keylog_callback. + */ +SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx); + +int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data); +uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx); +int SSL_set_max_early_data(SSL *s, uint32_t max_early_data); +uint32_t SSL_get_max_early_data(const SSL *s); +int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data); +uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx); +int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data); +uint32_t SSL_get_recv_max_early_data(const SSL *s); + +#ifdef __cplusplus +} +#endif + +# include +# include +# include /* This is mostly sslv3 with a few tweaks */ +# include /* Datagram TLS */ +# include /* Support for the use_srtp extension */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These need to be after the above set of includes due to a compiler bug + * in VisualStudio 2015 + */ +{- + generate_const_stack_macros("SSL_CIPHER") + .generate_stack_macros("SSL_COMP"); +-} + +/* compatibility */ +# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) +# define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) +# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0, \ + (char *)(a))) +# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) +# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) +# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ + (char *)(arg))) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void SSL_set_debug(SSL *s, int debug); +# endif + +/* TLSv1.3 KeyUpdate message types */ +/* -1 used so that this is an invalid value for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NONE -1 +/* Values as defined for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NOT_REQUESTED 0 +#define SSL_KEY_UPDATE_REQUESTED 1 + +/* + * The valid handshake states (one for each type message sent and one for each + * type of message received). There are also two "special" states: + * TLS = TLS or DTLS state + * DTLS = DTLS specific state + * CR/SR = Client Read/Server Read + * CW/SW = Client Write/Server Write + * + * The "special" states are: + * TLS_ST_BEFORE = No handshake has been initiated yet + * TLS_ST_OK = A handshake has been successfully completed + */ +typedef enum { + TLS_ST_BEFORE, + TLS_ST_OK, + DTLS_ST_CR_HELLO_VERIFY_REQUEST, + TLS_ST_CR_SRVR_HELLO, + TLS_ST_CR_CERT, + TLS_ST_CR_CERT_STATUS, + TLS_ST_CR_KEY_EXCH, + TLS_ST_CR_CERT_REQ, + TLS_ST_CR_SRVR_DONE, + TLS_ST_CR_SESSION_TICKET, + TLS_ST_CR_CHANGE, + TLS_ST_CR_FINISHED, + TLS_ST_CW_CLNT_HELLO, + TLS_ST_CW_CERT, + TLS_ST_CW_KEY_EXCH, + TLS_ST_CW_CERT_VRFY, + TLS_ST_CW_CHANGE, + TLS_ST_CW_NEXT_PROTO, + TLS_ST_CW_FINISHED, + TLS_ST_SW_HELLO_REQ, + TLS_ST_SR_CLNT_HELLO, + DTLS_ST_SW_HELLO_VERIFY_REQUEST, + TLS_ST_SW_SRVR_HELLO, + TLS_ST_SW_CERT, + TLS_ST_SW_KEY_EXCH, + TLS_ST_SW_CERT_REQ, + TLS_ST_SW_SRVR_DONE, + TLS_ST_SR_CERT, + TLS_ST_SR_KEY_EXCH, + TLS_ST_SR_CERT_VRFY, + TLS_ST_SR_NEXT_PROTO, + TLS_ST_SR_CHANGE, + TLS_ST_SR_FINISHED, + TLS_ST_SW_SESSION_TICKET, + TLS_ST_SW_CERT_STATUS, + TLS_ST_SW_CHANGE, + TLS_ST_SW_FINISHED, + TLS_ST_SW_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_CERT_VRFY, + TLS_ST_SW_CERT_VRFY, + TLS_ST_CR_HELLO_REQ, + TLS_ST_SW_KEY_UPDATE, + TLS_ST_CW_KEY_UPDATE, + TLS_ST_SR_KEY_UPDATE, + TLS_ST_CR_KEY_UPDATE, + TLS_ST_EARLY_DATA, + TLS_ST_PENDING_EARLY_DATA_END, + TLS_ST_CW_END_OF_EARLY_DATA, + TLS_ST_SR_END_OF_EARLY_DATA +} OSSL_HANDSHAKE_STATE; + +/* + * Most of the following state values are no longer used and are defined to be + * the closest equivalent value in the current state machine code. Not all + * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT + * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP, + * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT. + */ + +# define SSL_ST_CONNECT 0x1000 +# define SSL_ST_ACCEPT 0x2000 + +# define SSL_ST_MASK 0x0FFF + +# define SSL_CB_LOOP 0x01 +# define SSL_CB_EXIT 0x02 +# define SSL_CB_READ 0x04 +# define SSL_CB_WRITE 0x08 +# define SSL_CB_ALERT 0x4000/* used in callback */ +# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) +# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) +# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) +# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) +# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) +# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) +# define SSL_CB_HANDSHAKE_START 0x10 +# define SSL_CB_HANDSHAKE_DONE 0x20 + +/* Is the SSL_connection established? */ +# define SSL_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a)) +# define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a)) +int SSL_in_init(const SSL *s); +int SSL_in_before(const SSL *s); +int SSL_is_init_finished(const SSL *s); + +/* + * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you + * should not need these + */ +# define SSL_ST_READ_HEADER 0xF0 +# define SSL_ST_READ_BODY 0xF1 +# define SSL_ST_READ_DONE 0xF2 + +/*- + * Obtain latest Finished message + * -- that we sent (SSL_get_finished) + * -- that we expected from peer (SSL_get_peer_finished). + * Returns length (0 == no Finished so far), copies up to 'count' bytes. + */ +size_t SSL_get_finished(const SSL *s, void *buf, size_t count); +size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); + +/* + * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are + * 'ored' with SSL_VERIFY_PEER if they are desired + */ +# define SSL_VERIFY_NONE 0x00 +# define SSL_VERIFY_PEER 0x01 +# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 +# define SSL_VERIFY_CLIENT_ONCE 0x04 +# define SSL_VERIFY_POST_HANDSHAKE 0x08 + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OpenSSL_add_ssl_algorithms() SSL_library_init() +# define SSLeay_add_ssl_algorithms() SSL_library_init() +# endif + +/* More backward compatibility */ +# define SSL_get_cipher(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_cipher_bits(s,np) \ + SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) +# define SSL_get_cipher_version(s) \ + SSL_CIPHER_get_version(SSL_get_current_cipher(s)) +# define SSL_get_cipher_name(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_time(a) SSL_SESSION_get_time(a) +# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) +# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) +# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) + +# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) +# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) + +DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) +# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value + * from SSL_AD_... */ +/* These alert types are for SSLv3 and TLSv1 */ +# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY +/* fatal */ +# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE +/* fatal */ +# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC +# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED +# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW +/* fatal */ +# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE +/* fatal */ +# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE +/* Not for TLS */ +# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE +# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE +# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE +# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED +# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED +# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN +/* fatal */ +# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER +/* fatal */ +# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA +/* fatal */ +# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED +/* fatal */ +# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR +# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR +/* fatal */ +# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION +/* fatal */ +# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION +/* fatal */ +# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY +/* fatal */ +# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR +# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED +# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION +# define SSL_AD_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION +# define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED +# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION +# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE +# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME +# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE +# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE +/* fatal */ +# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY +/* fatal */ +# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK +# define SSL_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL +# define SSL_ERROR_NONE 0 +# define SSL_ERROR_SSL 1 +# define SSL_ERROR_WANT_READ 2 +# define SSL_ERROR_WANT_WRITE 3 +# define SSL_ERROR_WANT_X509_LOOKUP 4 +# define SSL_ERROR_SYSCALL 5/* look at error stack/return + * value/errno */ +# define SSL_ERROR_ZERO_RETURN 6 +# define SSL_ERROR_WANT_CONNECT 7 +# define SSL_ERROR_WANT_ACCEPT 8 +# define SSL_ERROR_WANT_ASYNC 9 +# define SSL_ERROR_WANT_ASYNC_JOB 10 +# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 +# define SSL_ERROR_WANT_RETRY_VERIFY 12 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# endif + +# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 +# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 +# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 +# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 +# define SSL_CTRL_GET_FLAGS 13 +# define SSL_CTRL_EXTRA_CHAIN_CERT 14 +# define SSL_CTRL_SET_MSG_CALLBACK 15 +# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 +/* only applies to datagram connections */ +# define SSL_CTRL_SET_MTU 17 +/* Stats */ +# define SSL_CTRL_SESS_NUMBER 20 +# define SSL_CTRL_SESS_CONNECT 21 +# define SSL_CTRL_SESS_CONNECT_GOOD 22 +# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 +# define SSL_CTRL_SESS_ACCEPT 24 +# define SSL_CTRL_SESS_ACCEPT_GOOD 25 +# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 +# define SSL_CTRL_SESS_HIT 27 +# define SSL_CTRL_SESS_CB_HIT 28 +# define SSL_CTRL_SESS_MISSES 29 +# define SSL_CTRL_SESS_TIMEOUTS 30 +# define SSL_CTRL_SESS_CACHE_FULL 31 +# define SSL_CTRL_MODE 33 +# define SSL_CTRL_GET_READ_AHEAD 40 +# define SSL_CTRL_SET_READ_AHEAD 41 +# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 +# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 +# define SSL_CTRL_SET_SESS_CACHE_MODE 44 +# define SSL_CTRL_GET_SESS_CACHE_MODE 45 +# define SSL_CTRL_GET_MAX_CERT_LIST 50 +# define SSL_CTRL_SET_MAX_CERT_LIST 51 +# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 +/* see tls1.h for macros based on these */ +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 +# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 +# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 +# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 +# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 */ +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# endif +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 +# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 +# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 +# define SSL_CTRL_SET_SRP_ARG 78 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 +# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 +# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 +# define DTLS_CTRL_GET_TIMEOUT 73 +# define DTLS_CTRL_HANDLE_TIMEOUT 74 +# define SSL_CTRL_GET_RI_SUPPORT 76 +# define SSL_CTRL_CLEAR_MODE 78 +# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB 79 +# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 +# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 +# define SSL_CTRL_CHAIN 88 +# define SSL_CTRL_CHAIN_CERT 89 +# define SSL_CTRL_GET_GROUPS 90 +# define SSL_CTRL_SET_GROUPS 91 +# define SSL_CTRL_SET_GROUPS_LIST 92 +# define SSL_CTRL_GET_SHARED_GROUP 93 +# define SSL_CTRL_SET_SIGALGS 97 +# define SSL_CTRL_SET_SIGALGS_LIST 98 +# define SSL_CTRL_CERT_FLAGS 99 +# define SSL_CTRL_CLEAR_CERT_FLAGS 100 +# define SSL_CTRL_SET_CLIENT_SIGALGS 101 +# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 +# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 +# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 +# define SSL_CTRL_BUILD_CERT_CHAIN 105 +# define SSL_CTRL_SET_VERIFY_CERT_STORE 106 +# define SSL_CTRL_SET_CHAIN_CERT_STORE 107 +# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 +# define SSL_CTRL_GET_PEER_TMP_KEY 109 +# define SSL_CTRL_GET_RAW_CIPHERLIST 110 +# define SSL_CTRL_GET_EC_POINT_FORMATS 111 +# define SSL_CTRL_GET_CHAIN_CERTS 115 +# define SSL_CTRL_SELECT_CURRENT_CERT 116 +# define SSL_CTRL_SET_CURRENT_CERT 117 +# define SSL_CTRL_SET_DH_AUTO 118 +# define DTLS_CTRL_SET_LINK_MTU 120 +# define DTLS_CTRL_GET_LINK_MIN_MTU 121 +# define SSL_CTRL_GET_EXTMS_SUPPORT 122 +# define SSL_CTRL_SET_MIN_PROTO_VERSION 123 +# define SSL_CTRL_SET_MAX_PROTO_VERSION 124 +# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT 125 +# define SSL_CTRL_SET_MAX_PIPELINES 126 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE 127 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB 128 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG 129 +# define SSL_CTRL_GET_MIN_PROTO_VERSION 130 +# define SSL_CTRL_GET_MAX_PROTO_VERSION 131 +# define SSL_CTRL_GET_SIGNATURE_NID 132 +# define SSL_CTRL_GET_TMP_KEY 133 +# define SSL_CTRL_GET_NEGOTIATED_GROUP 134 +# define SSL_CTRL_SET_RETRY_VERIFY 136 +# define SSL_CTRL_GET_VERIFY_CERT_STORE 137 +# define SSL_CTRL_GET_CHAIN_CERT_STORE 138 +# define SSL_CERT_SET_FIRST 1 +# define SSL_CERT_SET_NEXT 2 +# define SSL_CERT_SET_SERVER 3 +# define DTLSv1_get_timeout(ssl, arg) \ + SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg)) +# define DTLSv1_handle_timeout(ssl) \ + SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) +# define SSL_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_clear_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_total_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_dh(ctx,dh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# endif +# define SSL_CTX_set_dh_auto(ctx, onoff) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# define SSL_set_dh_auto(s, onoff) \ + SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_set_tmp_dh(ssl,dh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif +# define SSL_CTX_add_extra_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_get_extra_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) +# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) +# define SSL_CTX_clear_extra_chain_certs(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) +# define SSL_CTX_set0_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_CTX_set1_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_CTX_add0_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_add1_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_CTX_get0_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_CTX_clear_chain_certs(ctx) \ + SSL_CTX_set0_chain(ctx,NULL) +# define SSL_CTX_build_cert_chain(ctx, flags) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_CTX_select_current_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_CTX_set_current_cert(ctx, op) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_CTX_set0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +# define SSL_CTX_get0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +# define SSL_CTX_get0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set0_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_set1_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_add0_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_add1_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_get0_chain_certs(s,px509) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_clear_chain_certs(s) \ + SSL_set0_chain(s,NULL) +# define SSL_build_cert_chain(s, flags) \ + SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_select_current_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_set_current_cert(s,op) \ + SSL_ctrl(s,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_set0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_set1_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +#define SSL_get0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_set0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set1_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +#define SSL_get0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) + +# define SSL_get1_groups(s, glist) \ + SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) +# define SSL_CTX_set1_groups(ctx, glist, glistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(int *)(glist)) +# define SSL_CTX_set1_groups_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s)) +# define SSL_set1_groups(s, glist, glistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) +# define SSL_set1_groups_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) +# define SSL_get_shared_group(s, n) \ + SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) +# define SSL_get_negotiated_group(s) \ + SSL_ctrl(s,SSL_CTRL_GET_NEGOTIATED_GROUP,0,NULL) +# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(str)) +# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_client_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_client_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(str)) +# define SSL_get0_certificate_types(s, clist) \ + SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)(clist)) +# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen, \ + (char *)(clist)) +# define SSL_set1_client_certificate_types(s, clist, clistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)(clist)) +# define SSL_get_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NID,0,pn) +# define SSL_get_peer_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) +# define SSL_get_peer_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_TMP_KEY,0,pk) +# define SSL_get_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_TMP_KEY,0,pk) +# define SSL_get0_raw_cipherlist(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,plst) +# define SSL_get0_ec_point_formats(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst) +# define SSL_CTX_set_min_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_CTX_set_max_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_CTX_get_min_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_CTX_get_max_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +# define SSL_set_min_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_set_max_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_get_min_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_get_max_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) + +const char *SSL_group_to_name(SSL *s, int id); + +/* Backwards compatibility, original 1.1.0 names */ +# define SSL_CTRL_GET_SERVER_TMP_KEY \ + SSL_CTRL_GET_PEER_TMP_KEY +# define SSL_get_server_tmp_key(s, pk) \ + SSL_get_peer_tmp_key(s, pk) + +int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey); +int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey); + +/* + * The following symbol names are old and obsolete. They are kept + * for compatibility reasons only and should not be used anymore. + */ +# define SSL_CTRL_GET_CURVES SSL_CTRL_GET_GROUPS +# define SSL_CTRL_SET_CURVES SSL_CTRL_SET_GROUPS +# define SSL_CTRL_SET_CURVES_LIST SSL_CTRL_SET_GROUPS_LIST +# define SSL_CTRL_GET_SHARED_CURVE SSL_CTRL_GET_SHARED_GROUP + +# define SSL_get1_curves SSL_get1_groups +# define SSL_CTX_set1_curves SSL_CTX_set1_groups +# define SSL_CTX_set1_curves_list SSL_CTX_set1_groups_list +# define SSL_set1_curves SSL_set1_groups +# define SSL_set1_curves_list SSL_set1_groups_list +# define SSL_get_shared_curve SSL_get_shared_group + + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* Provide some compatibility macros for removed functionality. */ +# define SSL_CTX_need_tmp_RSA(ctx) 0 +# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 +# define SSL_need_tmp_RSA(ssl) 0 +# define SSL_set_tmp_rsa(ssl,rsa) 1 +# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +/* + * We "pretend" to call the callback to avoid warnings about unused static + * functions. + */ +# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) +# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) +# endif +__owur const BIO_METHOD *BIO_f_ssl(void); +__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client); +__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from); +void BIO_ssl_shutdown(BIO *ssl_bio); + +__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); +__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +__owur SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq, + const SSL_METHOD *meth); +int SSL_CTX_up_ref(SSL_CTX *ctx); +void SSL_CTX_free(SSL_CTX *); +__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); +__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx); +__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); +void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); +void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *); +__owur int SSL_want(const SSL *s); +__owur int SSL_clear(SSL *s); + +void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); + +__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +__owur const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s); +__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); +__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +__owur const char *OPENSSL_cipher_name(const char *rfc_name); +__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); +__owur uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); +__owur const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c); +__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c); + +__owur int SSL_get_fd(const SSL *s); +__owur int SSL_get_rfd(const SSL *s); +__owur int SSL_get_wfd(const SSL *s); +__owur const char *SSL_get_cipher_list(const SSL *s, int n); +__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size); +__owur int SSL_get_read_ahead(const SSL *s); +__owur int SSL_pending(const SSL *s); +__owur int SSL_has_pending(const SSL *s); +# ifndef OPENSSL_NO_SOCK +__owur int SSL_set_fd(SSL *s, int fd); +__owur int SSL_set_rfd(SSL *s, int fd); +__owur int SSL_set_wfd(SSL *s, int fd); +# endif +void SSL_set0_rbio(SSL *s, BIO *rbio); +void SSL_set0_wbio(SSL *s, BIO *wbio); +void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); +__owur BIO *SSL_get_rbio(const SSL *s); +__owur BIO *SSL_get_wbio(const SSL *s); +__owur int SSL_set_cipher_list(SSL *s, const char *str); +__owur int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str); +__owur int SSL_set_ciphersuites(SSL *s, const char *str); +void SSL_set_read_ahead(SSL *s, int yes); +__owur int SSL_get_verify_mode(const SSL *s); +__owur int SSL_get_verify_depth(const SSL *s); +__owur SSL_verify_cb SSL_get_verify_callback(const SSL *s); +void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); +void SSL_set_verify_depth(SSL *s, int depth); +void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, + const unsigned char *d, long len); +# endif +__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, + long len); +__owur int SSL_use_certificate(SSL *ssl, X509 *x); +__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); +__owur int SSL_use_cert_and_key(SSL *ssl, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + + +/* serverinfo file format versions */ +# define SSL_SERVERINFOV1 1 +# define SSL_SERVERINFOV2 2 + +/* Set serverinfo data for the current active cert. */ +__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, + const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +#endif + +__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +#endif +__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, + int type); +/* PEM type */ +__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); +__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); +__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur STACK_OF(X509_NAME) +*SSL_load_client_CA_file_ex(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *file); +int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *dir); +int SSL_add_store_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *uri); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_load_error_strings() \ + OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# endif + +__owur const char *SSL_state_string(const SSL *s); +__owur const char *SSL_rstate_string(const SSL *s); +__owur const char *SSL_state_string_long(const SSL *s); +__owur const char *SSL_rstate_string_long(const SSL *s); +__owur long SSL_SESSION_get_time(const SSL_SESSION *s); +__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); +__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s); +__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); +__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); +__owur int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); + +__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); +__owur int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname); +void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s, + const unsigned char **alpn, + size_t *len); +__owur int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, + const unsigned char *alpn, + size_t len); +__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); +__owur int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher); +__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s); +__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s); +void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick, + size_t *len); +__owur uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s); +__owur int SSL_SESSION_set_max_early_data(SSL_SESSION *s, + uint32_t max_early_data); +__owur int SSL_copy_session_id(SSL *to, const SSL *from); +__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); +__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, + unsigned int sid_len); +__owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); + +__owur SSL_SESSION *SSL_SESSION_new(void); +__owur SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src); +const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, + unsigned int *len); +const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, + unsigned int *len); +__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); +# ifndef OPENSSL_NO_STDIO +int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); +# endif +int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); +int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); +int SSL_SESSION_up_ref(SSL_SESSION *ses); +void SSL_SESSION_free(SSL_SESSION *ses); +__owur int i2d_SSL_SESSION(const SSL_SESSION *in, unsigned char **pp); +__owur int SSL_set_session(SSL *to, SSL_SESSION *session); +int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); +int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); +__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb); +__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb); +__owur int SSL_has_matching_session_id(const SSL *s, + const unsigned char *id, + unsigned int id_len); +SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, + long length); + +# ifdef OPENSSL_X509_H +__owur X509 *SSL_get0_peer_certificate(const SSL *s); +__owur X509 *SSL_get1_peer_certificate(const SSL *s); +/* Deprecated in 3.0.0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_get_peer_certificate SSL_get1_peer_certificate +# endif +# endif + +__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); + +__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +__owur SSL_verify_cb SSL_CTX_get_verify_callback(const SSL_CTX *ctx); +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb callback); +void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); +void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, + int (*cb) (X509_STORE_CTX *, void *), + void *arg); +void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), + void *arg); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, + long len); +# endif +__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, + const unsigned char *d, long len); +__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +__owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, + const unsigned char *d); +__owur int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + +void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); +void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); +pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx); +void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx); +void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb); +void SSL_set_default_passwd_cb_userdata(SSL *s, void *u); +pem_password_cb *SSL_get_default_passwd_cb(SSL *s); +void *SSL_get_default_passwd_cb_userdata(SSL *s); + +__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx); +__owur int SSL_check_private_key(const SSL *ctx); + +__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +SSL *SSL_new(SSL_CTX *ctx); +int SSL_up_ref(SSL *s); +int SSL_is_dtls(const SSL *s); +__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +__owur int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose); +__owur int SSL_set_purpose(SSL *ssl, int purpose); +__owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust); +__owur int SSL_set_trust(SSL *ssl, int trust); + +__owur int SSL_set1_host(SSL *s, const char *hostname); +__owur int SSL_add1_host(SSL *s, const char *hostname); +__owur const char *SSL_get0_peername(SSL *s); +void SSL_set_hostflags(SSL *s, unsigned int flags); + +__owur int SSL_CTX_dane_enable(SSL_CTX *ctx); +__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, + uint8_t mtype, uint8_t ord); +__owur int SSL_dane_enable(SSL *s, const char *basedomain); +__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, + uint8_t mtype, const unsigned char *data, size_t dlen); +__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); +__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, + uint8_t *mtype, const unsigned char **data, + size_t *dlen); +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +SSL_DANE *SSL_get0_dane(SSL *ssl); +/* + * DANE flags + */ +unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags); +unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags); + +__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); +__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); + +__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); +__owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); + +# ifndef OPENSSL_NO_SRP +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, + char *(*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, + int (*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, + int (*cb) (SSL *, int *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); + +OSSL_DEPRECATEDIN_3_0 +int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, + BIGNUM *sa, BIGNUM *v, char *info); +OSSL_DEPRECATEDIN_3_0 +int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, + const char *grp); + +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_g(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_N(SSL *s); + +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_username(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_userinfo(SSL *s); +# endif +# endif + +/* + * ClientHello callback and helpers. + */ + +# define SSL_CLIENT_HELLO_SUCCESS 1 +# define SSL_CLIENT_HELLO_ERROR 0 +# define SSL_CLIENT_HELLO_RETRY (-1) + +typedef int (*SSL_client_hello_cb_fn) (SSL *s, int *al, void *arg); +void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb, + void *arg); +int SSL_client_hello_isv2(SSL *s); +unsigned int SSL_client_hello_get0_legacy_version(SSL *s); +size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_compression_methods(SSL *s, + const unsigned char **out); +int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen); +int SSL_client_hello_get0_ext(SSL *s, unsigned int type, + const unsigned char **out, size_t *outlen); + +void SSL_certs_clear(SSL *s); +void SSL_free(SSL *ssl); +# ifdef OSSL_ASYNC_FD +/* + * Windows application developer has to include windows.h to use these. + */ +__owur int SSL_waiting_for_async(SSL *s); +__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); +__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +__owur int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback); +__owur int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg); +__owur int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback); +__owur int SSL_set_async_callback_arg(SSL *s, void *arg); +__owur int SSL_get_async_status(SSL *s, int *status); + +# endif +__owur int SSL_accept(SSL *ssl); +__owur int SSL_stateless(SSL *s); +__owur int SSL_connect(SSL *ssl); +__owur int SSL_read(SSL *ssl, void *buf, int num); +__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); + +# define SSL_READ_EARLY_DATA_ERROR 0 +# define SSL_READ_EARLY_DATA_SUCCESS 1 +# define SSL_READ_EARLY_DATA_FINISH 2 + +__owur int SSL_read_early_data(SSL *s, void *buf, size_t num, + size_t *readbytes); +__owur int SSL_peek(SSL *ssl, void *buf, int num); +__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +__owur ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, + int flags); +__owur int SSL_write(SSL *ssl, const void *buf, int num); +__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); +__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, + size_t *written); +long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); +long SSL_callback_ctrl(SSL *, int, void (*)(void)); +long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); +long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); + +# define SSL_EARLY_DATA_NOT_SENT 0 +# define SSL_EARLY_DATA_REJECTED 1 +# define SSL_EARLY_DATA_ACCEPTED 2 + +__owur int SSL_get_early_data_status(const SSL *s); + +__owur int SSL_get_error(const SSL *s, int ret_code); +__owur const char *SSL_get_version(const SSL *s); + +/* This sets the 'default' SSL version that SSL_new() will create */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); +# endif + +# ifndef OPENSSL_NO_SSL3_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_client_method(void); +# endif +# endif + +#define SSLv23_method TLS_method +#define SSLv23_server_method TLS_server_method +#define SSLv23_client_method TLS_client_method + +/* Negotiate highest available SSL/TLS version */ +__owur const SSL_METHOD *TLS_method(void); +__owur const SSL_METHOD *TLS_server_method(void); +__owur const SSL_METHOD *TLS_client_method(void); + +# ifndef OPENSSL_NO_TLS1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_TLS1_1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_TLS1_2_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_DTLS1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_DTLS1_2_METHOD +/* DTLSv1.2 */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_client_method(void); +# endif +# endif + +__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ + +__owur size_t DTLS_get_data_mtu(const SSL *s); + +__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); +__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s); + +__owur int SSL_do_handshake(SSL *s); +int SSL_key_update(SSL *s, int updatetype); +int SSL_get_key_update_type(const SSL *s); +int SSL_renegotiate(SSL *s); +int SSL_renegotiate_abbreviated(SSL *s); +__owur int SSL_renegotiate_pending(const SSL *s); +int SSL_new_session_ticket(SSL *s); +int SSL_shutdown(SSL *s); +__owur int SSL_verify_client_post_handshake(SSL *s); +void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); +void SSL_set_post_handshake_auth(SSL *s, int val); + +__owur const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx); +__owur const SSL_METHOD *SSL_get_ssl_method(const SSL *s); +__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +__owur const char *SSL_alert_type_string_long(int value); +__owur const char *SSL_alert_type_string(int value); +__owur const char *SSL_alert_desc_string_long(int value); +__owur const char *SSL_alert_desc_string(int value); + +void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s); +__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx); +__owur int SSL_add1_to_CA_list(SSL *ssl, const X509 *x); +__owur int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x); +__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s); + +void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); +__owur int SSL_add_client_CA(SSL *ssl, X509 *x); +__owur int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); + +void SSL_set_connect_state(SSL *s); +void SSL_set_accept_state(SSL *s); + +__owur long SSL_get_default_timeout(const SSL *s); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_library_init() OPENSSL_init_ssl(0, NULL) +# endif + +__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); +__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk); + +__owur SSL *SSL_dup(SSL *ssl); + +__owur X509 *SSL_get_certificate(const SSL *ssl); +/* + * EVP_PKEY + */ +struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); + +__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); +__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); + +void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); +__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +void SSL_set_quiet_shutdown(SSL *ssl, int mode); +__owur int SSL_get_quiet_shutdown(const SSL *ssl); +void SSL_set_shutdown(SSL *ssl, int mode); +__owur int SSL_get_shutdown(const SSL *ssl); +__owur int SSL_version(const SSL *ssl); +__owur int SSL_client_version(const SSL *s); +__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_store(SSL_CTX *ctx); +__owur int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile); +__owur int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath); +__owur int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore); +__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, + const char *CAfile, + const char *CApath); +# define SSL_get0_session SSL_get_session/* just peek at pointer */ +__owur SSL_SESSION *SSL_get_session(const SSL *ssl); +__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ +__owur SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); +SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); +void SSL_set_info_callback(SSL *ssl, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, + int val); +__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); + +void SSL_set_verify_result(SSL *ssl, long v); +__owur long SSL_get_verify_result(const SSL *ssl); +__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s); + +__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *sess, + unsigned char *out, size_t outlen); +__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess, + const unsigned char *in, size_t len); +uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *sess); + +#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) +__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data); +void *SSL_get_ex_data(const SSL *ssl, int idx); +#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef) +__owur int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); +void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); +#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef) +__owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); +void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); + +__owur int SSL_get_ex_data_X509_STORE_CTX_idx(void); + +# define SSL_CTX_sess_set_cache_size(ctx,t) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) +# define SSL_CTX_sess_get_cache_size(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) +# define SSL_CTX_set_session_cache_mode(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) +# define SSL_CTX_get_session_cache_mode(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) + +# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) +# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) +# define SSL_CTX_get_read_ahead(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) +# define SSL_CTX_set_read_ahead(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) +# define SSL_CTX_get_max_cert_list(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_CTX_set_max_cert_list(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) +# define SSL_get_max_cert_list(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_set_max_cert_list(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) + +# define SSL_CTX_set_max_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_set_max_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_split_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_set_split_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_max_pipelines(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_max_pipelines(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_retry_verify(ssl) \ + (SSL_ctrl(ssl,SSL_CTRL_SET_RETRY_VERIFY,0,NULL) > 0) + +void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); +void SSL_set_default_read_buffer_len(SSL *s, size_t len); + +# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* NB: the |keylength| is only applicable when is_export is true */ +OSSL_DEPRECATEDIN_3_0 +void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +OSSL_DEPRECATEDIN_3_0 +void SSL_set_tmp_dh_callback(SSL *ssl, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +# endif +# endif + +__owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); +__owur const COMP_METHOD *SSL_get_current_expansion(const SSL *s); +__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp); +__owur const char *SSL_COMP_get0_name(const SSL_COMP *comp); +__owur int SSL_COMP_get_id(const SSL_COMP *comp); +STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) + *meths); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_COMP_free_compression_methods() while(0) continue +# endif +__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); + +const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); +int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); +int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); +int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len, + int isv2format, STACK_OF(SSL_CIPHER) **sk, + STACK_OF(SSL_CIPHER) **scsvs); + +/* TLS extensions functions */ +__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); + +__owur int SSL_set_session_ticket_ext_cb(SSL *s, + tls_session_ticket_ext_cb_fn cb, + void *arg); + +/* Pre-shared secret session resumption functions */ +__owur int SSL_set_session_secret_cb(SSL *s, + tls_session_secret_cb_fn session_secret_cb, + void *arg); + +void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, + int (*cb) (SSL *ssl, + int + is_forward_secure)); + +void SSL_set_not_resumable_session_callback(SSL *ssl, + int (*cb) (SSL *ssl, + int is_forward_secure)); + +void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); +void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); +int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); + +int SSL_set_record_padding_callback(SSL *ssl, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); +void *SSL_get_record_padding_callback_arg(const SSL *ssl); +int SSL_set_block_padding(SSL *ssl, size_t block_size); + +int SSL_set_num_tickets(SSL *s, size_t num_tickets); +size_t SSL_get_num_tickets(const SSL *s); +int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); +size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_cache_hit(s) SSL_session_reused(s) +# endif + +__owur int SSL_session_reused(const SSL *s); +__owur int SSL_is_server(const SSL *s); + +__owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void); +int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); +void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); +unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); +__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, + unsigned int flags); +__owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); + +void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); +void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); + +__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); +__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); +__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); + +void SSL_add_ssl_module(void); +int SSL_config(SSL *s, const char *name); +int SSL_CTX_config(SSL_CTX *ctx, const char *name); + +# ifndef OPENSSL_NO_SSL_TRACE +void SSL_trace(int write_p, int version, int content_type, + const void *buf, size_t len, SSL *ssl, void *arg); +# endif + +# ifndef OPENSSL_NO_SOCK +int DTLSv1_listen(SSL *s, BIO_ADDR *client); +# endif + +# ifndef OPENSSL_NO_CT + +/* + * A callback for verifying that the received SCTs are sufficient. + * Expected to return 1 if they are sufficient, otherwise 0. + * May return a negative integer if an error occurs. + * A connection should be aborted if the SCTs are deemed insufficient. + */ +typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, + const STACK_OF(SCT) *scts, void *arg); + +/* + * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate + * the received SCTs. + * If the callback returns a non-positive result, the connection is terminated. + * Call this function before beginning a handshake. + * If a NULL |callback| is provided, SCT validation is disabled. + * |arg| is arbitrary userdata that will be passed to the callback whenever it + * is invoked. Ownership of |arg| remains with the caller. + * + * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response + * will be requested. + */ +int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback, + void *arg); +int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, + ssl_ct_validation_cb callback, + void *arg); +#define SSL_disable_ct(s) \ + ((void) SSL_set_validation_callback((s), NULL, NULL)) +#define SSL_CTX_disable_ct(ctx) \ + ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL)) + +/* + * The validation type enumerates the available behaviours of the built-in SSL + * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct(). + * The underlying callback is a static function in libssl. + */ +enum { + SSL_CT_VALIDATION_PERMISSIVE = 0, + SSL_CT_VALIDATION_STRICT +}; + +/* + * Enable CT by setting up a callback that implements one of the built-in + * validation variants. The SSL_CT_VALIDATION_PERMISSIVE variant always + * continues the handshake, the application can make appropriate decisions at + * handshake completion. The SSL_CT_VALIDATION_STRICT variant requires at + * least one valid SCT, or else handshake termination will be requested. The + * handshake may continue anyway if SSL_VERIFY_NONE is in effect. + */ +int SSL_enable_ct(SSL *s, int validation_mode); +int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode); + +/* + * Report whether a non-NULL callback is enabled. + */ +int SSL_ct_is_enabled(const SSL *s); +int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx); + +/* Gets the SCTs received from a connection */ +const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s); + +/* + * Loads the CT log list from the default location. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx); + +/* + * Loads the CT log list from the specified file path. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path); + +/* + * Sets the CT log list used by all SSL connections created from this SSL_CTX. + * Ownership of the CTLOG_STORE is transferred to the SSL_CTX. + */ +void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs); + +/* + * Gets the CT log list used by all SSL connections created from this SSL_CTX. + * This will be NULL unless one of the following functions has been called: + * - SSL_CTX_set_default_ctlog_list_file + * - SSL_CTX_set_ctlog_list_file + * - SSL_CTX_set_ctlog_store + */ +const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx); + +# endif /* OPENSSL_NO_CT */ + +/* What the "other" parameter contains in security callback */ +/* Mask for type */ +# define SSL_SECOP_OTHER_TYPE 0xffff0000 +# define SSL_SECOP_OTHER_NONE 0 +# define SSL_SECOP_OTHER_CIPHER (1 << 16) +# define SSL_SECOP_OTHER_CURVE (2 << 16) +# define SSL_SECOP_OTHER_DH (3 << 16) +# define SSL_SECOP_OTHER_PKEY (4 << 16) +# define SSL_SECOP_OTHER_SIGALG (5 << 16) +# define SSL_SECOP_OTHER_CERT (6 << 16) + +/* Indicated operation refers to peer key or certificate */ +# define SSL_SECOP_PEER 0x1000 + +/* Values for "op" parameter in security callback */ + +/* Called to filter ciphers */ +/* Ciphers client supports */ +# define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER) +/* Cipher shared by client/server */ +# define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER) +/* Sanity check of cipher server selects */ +# define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER) +/* Curves supported by client */ +# define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE) +/* Curves shared by client/server */ +# define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE) +/* Sanity check of curve server selects */ +# define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE) +/* Temporary DH key */ +# define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_PKEY) +/* SSL/TLS version */ +# define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE) +/* Session tickets */ +# define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE) +/* Supported signature algorithms sent to peer */ +# define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG) +/* Shared signature algorithm */ +# define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG) +/* Sanity check signature algorithm allowed */ +# define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG) +/* Used to get mask of supported public key signature algorithms */ +# define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG) +/* Use to see if compression is allowed */ +# define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE) +/* EE key in certificate */ +# define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT) +/* CA key in certificate */ +# define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT) +/* CA digest algorithm in certificate */ +# define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT) +/* Peer EE key in certificate */ +# define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER) +/* Peer CA key in certificate */ +# define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER) +/* Peer CA digest algorithm in certificate */ +# define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER) + +void SSL_set_security_level(SSL *s, int level); +__owur int SSL_get_security_level(const SSL *s); +void SSL_set_security_callback(SSL *s, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, + const SSL_CTX *ctx, int op, + int bits, int nid, void *other, + void *ex); +void SSL_set0_security_ex_data(SSL *s, void *ex); +__owur void *SSL_get0_security_ex_data(const SSL *s); + +void SSL_CTX_set_security_level(SSL_CTX *ctx, int level); +__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx); +void SSL_CTX_set_security_callback(SSL_CTX *ctx, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s, + const SSL_CTX *ctx, + int op, int bits, + int nid, + void *other, + void *ex); +void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex); +__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx); + +/* OPENSSL_INIT flag 0x010000 reserved for internal use */ +# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L +# define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L + +# define OPENSSL_INIT_SSL_DEFAULT \ + (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS) + +int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); + +# ifndef OPENSSL_NO_UNIT_TEST +__owur const struct openssl_ssl_test_functions *SSL_test_functions(void); +# endif + +__owur int SSL_free_buffers(SSL *ssl); +__owur int SSL_alloc_buffers(SSL *ssl); + +/* Status codes passed to the decrypt session ticket callback. Some of these + * are for internal use only and are never passed to the callback. */ +typedef int SSL_TICKET_STATUS; + +/* Support for ticket appdata */ +/* fatal error, malloc failure */ +# define SSL_TICKET_FATAL_ERR_MALLOC 0 +/* fatal error, either from parsing or decrypting the ticket */ +# define SSL_TICKET_FATAL_ERR_OTHER 1 +/* No ticket present */ +# define SSL_TICKET_NONE 2 +/* Empty ticket present */ +# define SSL_TICKET_EMPTY 3 +/* the ticket couldn't be decrypted */ +# define SSL_TICKET_NO_DECRYPT 4 +/* a ticket was successfully decrypted */ +# define SSL_TICKET_SUCCESS 5 +/* same as above but the ticket needs to be renewed */ +# define SSL_TICKET_SUCCESS_RENEW 6 + +/* Return codes for the decrypt session ticket callback */ +typedef int SSL_TICKET_RETURN; + +/* An error occurred */ +#define SSL_TICKET_RETURN_ABORT 0 +/* Do not use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE 1 +/* Do not use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE_RENEW 2 +/* Use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE 3 +/* Use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE_RENEW 4 + +typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg); +typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss, + const unsigned char *keyname, + size_t keyname_length, + SSL_TICKET_STATUS status, + void *arg); +int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, + SSL_CTX_generate_session_ticket_fn gen_cb, + SSL_CTX_decrypt_session_ticket_fn dec_cb, + void *arg); +int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); +int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); + +typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); + +void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); + + +typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg); +void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx, + SSL_allow_early_data_cb_fn cb, + void *arg); +void SSL_set_allow_early_data_cb(SSL *s, + SSL_allow_early_data_cb_fn cb, + void *arg); + +/* store the default cipher strings inside the library */ +const char *OSSL_default_cipher_list(void); +const char *OSSL_default_ciphersuites(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl2.h index 5321bd27..428ead05 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl2.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl2.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL2_H -# define HEADER_SSL2_H +#ifndef OPENSSL_SSL2_H +# define OPENSSL_SSL2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL2_H +# endif #ifdef __cplusplus extern "C" { diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h index 07effba2..49bd51f2 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h @@ -1,15 +1,21 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL3_H -# define HEADER_SSL3_H +#ifndef OPENSSL_SSL3_H +# define OPENSSL_SSL3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL3_H +# endif # include # include @@ -206,7 +212,7 @@ extern "C" { # define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" # define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" -# define SSL3_VERSION 0x0300 +/* SSL3_VERSION is defined in prov_ssl.h */ # define SSL3_VERSION_MAJOR 0x03 # define SSL3_VERSION_MINOR 0x00 @@ -214,7 +220,6 @@ extern "C" { # define SSL3_RT_ALERT 21 # define SSL3_RT_HANDSHAKE 22 # define SSL3_RT_APPLICATION_DATA 23 -# define DTLS1_RT_HEARTBEAT 24 /* Pseudo content types to indicate additional parameters */ # define TLS1_RT_CRYPTO 0x1000 @@ -265,7 +270,7 @@ extern "C" { * SSL3_CT_NUMBER is used to size arrays and it must be large enough to * contain all of the cert types defined for *either* SSLv3 and TLSv1. */ -# define SSL3_CT_NUMBER 10 +# define SSL3_CT_NUMBER 12 # if defined(TLS_CT_NUMBER) # if TLS_CT_NUMBER != SSL3_CT_NUMBER diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h index 701d61c6..f1882558 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h @@ -1,456 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSLERR_H -# define HEADER_SSLERR_H +#ifndef OPENSSL_SSLERR_H +# define OPENSSL_SSLERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_SSL_strings(void); -/* - * SSL function codes. - */ -# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 438 -# define SSL_F_ADD_KEY_SHARE 512 -# define SSL_F_BYTES_TO_CIPHER_LIST 519 -# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 -# define SSL_F_CIPHERSUITE_CB 622 -# define SSL_F_CONSTRUCT_CA_NAMES 552 -# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 553 -# define SSL_F_CONSTRUCT_STATEFUL_TICKET 636 -# define SSL_F_CONSTRUCT_STATELESS_TICKET 637 -# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 539 -# define SSL_F_CREATE_TICKET_PREQUEL 638 -# define SSL_F_CT_MOVE_SCTS 345 -# define SSL_F_CT_STRICT 349 -# define SSL_F_CUSTOM_EXT_ADD 554 -# define SSL_F_CUSTOM_EXT_PARSE 555 -# define SSL_F_D2I_SSL_SESSION 103 -# define SSL_F_DANE_CTX_ENABLE 347 -# define SSL_F_DANE_MTYPE_SET 393 -# define SSL_F_DANE_TLSA_ADD 394 -# define SSL_F_DERIVE_SECRET_KEY_AND_IV 514 -# define SSL_F_DO_DTLS1_WRITE 245 -# define SSL_F_DO_SSL3_WRITE 104 -# define SSL_F_DTLS1_BUFFER_RECORD 247 -# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 -# define SSL_F_DTLS1_HEARTBEAT 305 -# define SSL_F_DTLS1_HM_FRAGMENT_NEW 623 -# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 -# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 -# define SSL_F_DTLS1_PROCESS_RECORD 257 -# define SSL_F_DTLS1_READ_BYTES 258 -# define SSL_F_DTLS1_READ_FAILED 339 -# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 -# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 -# define SSL_F_DTLS1_WRITE_BYTES 545 -# define SSL_F_DTLSV1_LISTEN 350 -# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 -# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 -# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 -# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 -# define SSL_F_DTLS_RECORD_LAYER_NEW 635 -# define SSL_F_DTLS_WAIT_FOR_DRY 592 -# define SSL_F_EARLY_DATA_COUNT_OK 532 -# define SSL_F_FINAL_EARLY_DATA 556 -# define SSL_F_FINAL_EC_PT_FORMATS 485 -# define SSL_F_FINAL_EMS 486 -# define SSL_F_FINAL_KEY_SHARE 503 -# define SSL_F_FINAL_MAXFRAGMENTLEN 557 -# define SSL_F_FINAL_PSK 639 -# define SSL_F_FINAL_RENEGOTIATE 483 -# define SSL_F_FINAL_SERVER_NAME 558 -# define SSL_F_FINAL_SIG_ALGS 497 -# define SSL_F_GET_CERT_VERIFY_TBS_DATA 588 -# define SSL_F_NSS_KEYLOG_INT 500 -# define SSL_F_OPENSSL_INIT_SSL 342 -# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 436 -# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 598 -# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 430 -# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 593 -# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 594 -# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 -# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 599 -# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 437 -# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 600 -# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 431 -# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 601 -# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 602 -# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 640 -# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 603 -# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 -# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 604 -# define SSL_F_PARSE_CA_NAMES 541 -# define SSL_F_PITEM_NEW 624 -# define SSL_F_PQUEUE_NEW 625 -# define SSL_F_PROCESS_KEY_SHARE_EXT 439 -# define SSL_F_READ_STATE_MACHINE 352 -# define SSL_F_SET_CLIENT_CIPHERSUITE 540 -# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 595 -# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 589 -# define SSL_F_SRP_VERIFY_SERVER_PARAM 596 -# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 -# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 -# define SSL_F_SSL3_CTRL 213 -# define SSL_F_SSL3_CTX_CTRL 133 -# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 -# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 -# define SSL_F_SSL3_ENC 608 -# define SSL_F_SSL3_FINAL_FINISH_MAC 285 -# define SSL_F_SSL3_FINISH_MAC 587 -# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 -# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 -# define SSL_F_SSL3_GET_RECORD 143 -# define SSL_F_SSL3_INIT_FINISHED_MAC 397 -# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 -# define SSL_F_SSL3_READ_BYTES 148 -# define SSL_F_SSL3_READ_N 149 -# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 -# define SSL_F_SSL3_SETUP_READ_BUFFER 156 -# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 -# define SSL_F_SSL3_WRITE_BYTES 158 -# define SSL_F_SSL3_WRITE_PENDING 159 -# define SSL_F_SSL_ADD_CERT_CHAIN 316 -# define SSL_F_SSL_ADD_CERT_TO_BUF 319 -# define SSL_F_SSL_ADD_CERT_TO_WPACKET 493 -# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 -# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 -# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 -# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 -# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 -# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 -# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 -# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 -# define SSL_F_SSL_BAD_METHOD 160 -# define SSL_F_SSL_BUILD_CERT_CHAIN 332 -# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 -# define SSL_F_SSL_CACHE_CIPHERLIST 520 -# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 346 -# define SSL_F_SSL_CERT_DUP 221 -# define SSL_F_SSL_CERT_NEW 162 -# define SSL_F_SSL_CERT_SET0_CHAIN 340 -# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 -# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 -# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 606 -# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 -# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 607 -# define SSL_F_SSL_CIPHER_DESCRIPTION 626 -# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 425 -# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 -# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 -# define SSL_F_SSL_CLEAR 164 -# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 627 -# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 -# define SSL_F_SSL_CONF_CMD 334 -# define SSL_F_SSL_CREATE_CIPHER_LIST 166 -# define SSL_F_SSL_CTRL 232 -# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 -# define SSL_F_SSL_CTX_ENABLE_CT 398 -# define SSL_F_SSL_CTX_MAKE_PROFILES 309 -# define SSL_F_SSL_CTX_NEW 169 -# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 -# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 -# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 -# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 396 -# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 -# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 -# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 551 -# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 -# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 -# define SSL_F_SSL_CTX_USE_SERVERINFO 336 -# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 543 -# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 -# define SSL_F_SSL_DANE_DUP 403 -# define SSL_F_SSL_DANE_ENABLE 395 -# define SSL_F_SSL_DERIVE 590 -# define SSL_F_SSL_DO_CONFIG 391 -# define SSL_F_SSL_DO_HANDSHAKE 180 -# define SSL_F_SSL_DUP_CA_LIST 408 -# define SSL_F_SSL_ENABLE_CT 402 -# define SSL_F_SSL_GENERATE_PKEY_GROUP 559 -# define SSL_F_SSL_GENERATE_SESSION_ID 547 -# define SSL_F_SSL_GET_NEW_SESSION 181 -# define SSL_F_SSL_GET_PREV_SESSION 217 -# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 -# define SSL_F_SSL_GET_SIGN_PKEY 183 -# define SSL_F_SSL_HANDSHAKE_HASH 560 -# define SSL_F_SSL_INIT_WBIO_BUFFER 184 -# define SSL_F_SSL_KEY_UPDATE 515 -# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 -# define SSL_F_SSL_LOG_MASTER_SECRET 498 -# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 499 -# define SSL_F_SSL_MODULE_INIT 392 -# define SSL_F_SSL_NEW 186 -# define SSL_F_SSL_NEXT_PROTO_VALIDATE 565 -# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 -# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 -# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 -# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 -# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 -# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 -# define SSL_F_SSL_PEEK 270 -# define SSL_F_SSL_PEEK_EX 432 -# define SSL_F_SSL_PEEK_INTERNAL 522 -# define SSL_F_SSL_READ 223 -# define SSL_F_SSL_READ_EARLY_DATA 529 -# define SSL_F_SSL_READ_EX 434 -# define SSL_F_SSL_READ_INTERNAL 523 -# define SSL_F_SSL_RENEGOTIATE 516 -# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 546 -# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 -# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 -# define SSL_F_SSL_SESSION_DUP 348 -# define SSL_F_SSL_SESSION_NEW 189 -# define SSL_F_SSL_SESSION_PRINT_FP 190 -# define SSL_F_SSL_SESSION_SET1_ID 423 -# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 -# define SSL_F_SSL_SET_ALPN_PROTOS 344 -# define SSL_F_SSL_SET_CERT 191 -# define SSL_F_SSL_SET_CERT_AND_KEY 621 -# define SSL_F_SSL_SET_CIPHER_LIST 271 -# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 -# define SSL_F_SSL_SET_FD 192 -# define SSL_F_SSL_SET_PKEY 193 -# define SSL_F_SSL_SET_RFD 194 -# define SSL_F_SSL_SET_SESSION 195 -# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 -# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 -# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 550 -# define SSL_F_SSL_SET_WFD 196 -# define SSL_F_SSL_SHUTDOWN 224 -# define SSL_F_SSL_SRP_CTX_INIT 313 -# define SSL_F_SSL_START_ASYNC_JOB 389 -# define SSL_F_SSL_UNDEFINED_FUNCTION 197 -# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 -# define SSL_F_SSL_USE_CERTIFICATE 198 -# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 -# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 -# define SSL_F_SSL_USE_PRIVATEKEY 201 -# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 -# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 -# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 -# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 -# define SSL_F_SSL_VALIDATE_CT 400 -# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 -# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 616 -# define SSL_F_SSL_WRITE 208 -# define SSL_F_SSL_WRITE_EARLY_DATA 526 -# define SSL_F_SSL_WRITE_EARLY_FINISH 527 -# define SSL_F_SSL_WRITE_EX 433 -# define SSL_F_SSL_WRITE_INTERNAL 524 -# define SSL_F_STATE_MACHINE 353 -# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 -# define SSL_F_TLS12_COPY_SIGALGS 533 -# define SSL_F_TLS13_CHANGE_CIPHER_STATE 440 -# define SSL_F_TLS13_ENC 609 -# define SSL_F_TLS13_FINAL_FINISH_MAC 605 -# define SSL_F_TLS13_GENERATE_SECRET 591 -# define SSL_F_TLS13_HKDF_EXPAND 561 -# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 617 -# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 618 -# define SSL_F_TLS13_SETUP_KEY_BLOCK 441 -# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 -# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 -# define SSL_F_TLS1_ENC 401 -# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 -# define SSL_F_TLS1_GET_CURVELIST 338 -# define SSL_F_TLS1_PRF 284 -# define SSL_F_TLS1_SAVE_U16 628 -# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 -# define SSL_F_TLS1_SET_GROUPS 629 -# define SSL_F_TLS1_SET_RAW_SIGALGS 630 -# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 -# define SSL_F_TLS1_SET_SHARED_SIGALGS 631 -# define SSL_F_TLS1_SET_SIGALGS 632 -# define SSL_F_TLS_CHOOSE_SIGALG 513 -# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 -# define SSL_F_TLS_COLLECT_EXTENSIONS 435 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 542 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 429 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 494 -# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 496 -# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 427 -# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 -# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 -# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 -# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 -# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 -# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 -# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 484 -# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 487 -# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 488 -# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 489 -# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 466 -# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 355 -# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 535 -# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 530 -# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 467 -# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 468 -# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 469 -# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 356 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 357 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 470 -# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 549 -# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 471 -# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 472 -# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 619 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 501 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 509 -# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 473 -# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 474 -# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 475 -# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 476 -# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 477 -# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 478 -# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 479 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 480 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 481 -# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 482 -# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 358 -# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 443 -# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 536 -# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 447 -# define SSL_F_TLS_CONSTRUCT_FINISHED 359 -# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 -# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 510 -# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 517 -# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 -# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 426 -# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 490 -# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 491 -# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 492 -# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 451 -# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 374 -# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 613 -# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 452 -# define SSL_F_TLS_CONSTRUCT_STOC_DONE 375 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 531 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 525 -# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 453 -# define SSL_F_TLS_CONSTRUCT_STOC_EMS 454 -# define SSL_F_TLS_CONSTRUCT_STOC_ETM 455 -# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 376 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 377 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 456 -# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 548 -# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 457 -# define SSL_F_TLS_CONSTRUCT_STOC_PSK 504 -# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 458 -# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 459 -# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 460 -# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 461 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 544 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 611 -# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 462 -# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 521 -# define SSL_F_TLS_FINISH_HANDSHAKE 597 -# define SSL_F_TLS_GET_MESSAGE_BODY 351 -# define SSL_F_TLS_GET_MESSAGE_HEADER 387 -# define SSL_F_TLS_HANDLE_ALPN 562 -# define SSL_F_TLS_HANDLE_STATUS_REQUEST 563 -# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 566 -# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 449 -# define SSL_F_TLS_PARSE_CTOS_ALPN 567 -# define SSL_F_TLS_PARSE_CTOS_COOKIE 614 -# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 568 -# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 569 -# define SSL_F_TLS_PARSE_CTOS_EMS 570 -# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 463 -# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 571 -# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 620 -# define SSL_F_TLS_PARSE_CTOS_PSK 505 -# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 572 -# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 464 -# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 573 -# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 574 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 575 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 615 -# define SSL_F_TLS_PARSE_CTOS_SRP 576 -# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 577 -# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 578 -# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 465 -# define SSL_F_TLS_PARSE_STOC_ALPN 579 -# define SSL_F_TLS_PARSE_STOC_COOKIE 534 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 538 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 528 -# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 580 -# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 445 -# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 581 -# define SSL_F_TLS_PARSE_STOC_NPN 582 -# define SSL_F_TLS_PARSE_STOC_PSK 502 -# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 448 -# define SSL_F_TLS_PARSE_STOC_SCT 564 -# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 583 -# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 584 -# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 585 -# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 612 -# define SSL_F_TLS_PARSE_STOC_USE_SRTP 446 -# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 -# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 -# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 -# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 610 -# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 -# define SSL_F_TLS_PROCESS_CERT_STATUS 362 -# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 495 -# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 -# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 -# define SSL_F_TLS_PROCESS_CKE_DHE 411 -# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 -# define SSL_F_TLS_PROCESS_CKE_GOST 413 -# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 -# define SSL_F_TLS_PROCESS_CKE_RSA 415 -# define SSL_F_TLS_PROCESS_CKE_SRP 416 -# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 -# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 -# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 -# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 444 -# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 537 -# define SSL_F_TLS_PROCESS_FINISHED 364 -# define SSL_F_TLS_PROCESS_HELLO_REQ 507 -# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 511 -# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 442 -# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 -# define SSL_F_TLS_PROCESS_KEY_UPDATE 518 -# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 -# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 -# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 -# define SSL_F_TLS_PROCESS_SERVER_DONE 368 -# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 -# define SSL_F_TLS_PROCESS_SKE_DHE 419 -# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 -# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 -# define SSL_F_TLS_PROCESS_SKE_SRP 422 -# define SSL_F_TLS_PSK_DO_BINDER 506 -# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 450 -# define SSL_F_TLS_SETUP_HANDSHAKE 508 -# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 -# define SSL_F_WPACKET_INTERN_INIT_LEN 633 -# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 634 -# define SSL_F_WRITE_STATE_MACHINE 586 /* * SSL reason codes. @@ -458,7 +24,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY 291 # define SSL_R_APP_DATA_IN_HANDSHAKE 100 # define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 -# define SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE 143 # define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 # define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 # define SSL_R_BAD_CIPHER 186 @@ -500,6 +65,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_BN_LIB 130 # define SSL_R_CALLBACK_FAILED 234 # define SSL_R_CANNOT_CHANGE_CIPHER 109 +# define SSL_R_CANNOT_GET_GROUP_NAME 299 # define SSL_R_CA_DN_LENGTH_MISMATCH 131 # define SSL_R_CA_KEY_TOO_SMALL 397 # define SSL_R_CA_MD_TOO_WEAK 398 @@ -509,7 +75,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_CERT_LENGTH_MISMATCH 135 # define SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED 218 # define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 -# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 # define SSL_R_CLIENTHELLO_TLSEXT 226 # define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 # define SSL_R_COMPRESSION_DISABLED 343 @@ -520,6 +85,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 # define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 # define SSL_R_COOKIE_MISMATCH 308 +# define SSL_R_COPY_PARAMETERS_FAILED 296 # define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 # define SSL_R_DANE_ALREADY_ENABLED 172 # define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 @@ -584,6 +150,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_INVALID_SRP_USERNAME 357 # define SSL_R_INVALID_STATUS_RESPONSE 328 # define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 +# define SSL_R_LEGACY_SIGALG_DISALLOWED_OR_UNSUPPORTED 333 # define SSL_R_LENGTH_MISMATCH 159 # define SSL_R_LENGTH_TOO_LONG 404 # define SSL_R_LENGTH_TOO_SHORT 160 @@ -629,13 +196,15 @@ int ERR_load_SSL_strings(void); # define SSL_R_NO_SHARED_GROUPS 410 # define SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS 376 # define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_SUITABLE_DIGEST_ALGORITHM 297 +# define SSL_R_NO_SUITABLE_GROUPS 295 # define SSL_R_NO_SUITABLE_KEY_SHARE 101 # define SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM 118 # define SSL_R_NO_VALID_SCTS 216 # define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 # define SSL_R_NULL_SSL_CTX 195 # define SSL_R_NULL_SSL_METHOD_PASSED 196 -# define SSL_R_OCSP_CALLBACK_FAILURE 294 +# define SSL_R_OCSP_CALLBACK_FAILURE 305 # define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 # define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 # define SSL_R_OVERFLOW_ERROR 237 @@ -724,8 +293,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 # define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 # define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 -# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 -# define SSL_R_TLS_HEARTBEAT_PENDING 366 # define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 # define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 # define SSL_R_TOO_MANY_KEY_UPDATES 132 @@ -737,6 +304,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 # define SSL_R_UNEXPECTED_CCS_MESSAGE 262 # define SSL_R_UNEXPECTED_END_OF_EARLY_DATA 178 +# define SSL_R_UNEXPECTED_EOF_WHILE_READING 294 # define SSL_R_UNEXPECTED_MESSAGE 244 # define SSL_R_UNEXPECTED_RECORD 245 # define SSL_R_UNINITIALIZED 276 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr_legacy.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr_legacy.h new file mode 100644 index 00000000..ccf6d3b3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr_legacy.h @@ -0,0 +1,468 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file preserves symbols from pre-3.0 OpenSSL. + * It should never be included directly, as it's already included + * by the public sslerr.h headers, and since it will go away some + * time in the future. + */ + +#ifndef OPENSSL_SSLERR_LEGACY_H +# define OPENSSL_SSLERR_LEGACY_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ERR_load_SSL_strings(void); + +/* Collected _F_ macros from OpenSSL 1.1.1 */ + +/* + * SSL function codes. + */ +# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 0 +# define SSL_F_ADD_KEY_SHARE 0 +# define SSL_F_BYTES_TO_CIPHER_LIST 0 +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 0 +# define SSL_F_CIPHERSUITE_CB 0 +# define SSL_F_CONSTRUCT_CA_NAMES 0 +# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 0 +# define SSL_F_CONSTRUCT_STATEFUL_TICKET 0 +# define SSL_F_CONSTRUCT_STATELESS_TICKET 0 +# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 0 +# define SSL_F_CREATE_TICKET_PREQUEL 0 +# define SSL_F_CT_MOVE_SCTS 0 +# define SSL_F_CT_STRICT 0 +# define SSL_F_CUSTOM_EXT_ADD 0 +# define SSL_F_CUSTOM_EXT_PARSE 0 +# define SSL_F_D2I_SSL_SESSION 0 +# define SSL_F_DANE_CTX_ENABLE 0 +# define SSL_F_DANE_MTYPE_SET 0 +# define SSL_F_DANE_TLSA_ADD 0 +# define SSL_F_DERIVE_SECRET_KEY_AND_IV 0 +# define SSL_F_DO_DTLS1_WRITE 0 +# define SSL_F_DO_SSL3_WRITE 0 +# define SSL_F_DTLS1_BUFFER_RECORD 0 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 0 +# define SSL_F_DTLS1_HEARTBEAT 0 +# define SSL_F_DTLS1_HM_FRAGMENT_NEW 0 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 0 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 0 +# define SSL_F_DTLS1_PROCESS_RECORD 0 +# define SSL_F_DTLS1_READ_BYTES 0 +# define SSL_F_DTLS1_READ_FAILED 0 +# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 0 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 0 +# define SSL_F_DTLS1_WRITE_BYTES 0 +# define SSL_F_DTLSV1_LISTEN 0 +# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 0 +# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 0 +# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 0 +# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 0 +# define SSL_F_DTLS_RECORD_LAYER_NEW 0 +# define SSL_F_DTLS_WAIT_FOR_DRY 0 +# define SSL_F_EARLY_DATA_COUNT_OK 0 +# define SSL_F_FINAL_EARLY_DATA 0 +# define SSL_F_FINAL_EC_PT_FORMATS 0 +# define SSL_F_FINAL_EMS 0 +# define SSL_F_FINAL_KEY_SHARE 0 +# define SSL_F_FINAL_MAXFRAGMENTLEN 0 +# define SSL_F_FINAL_RENEGOTIATE 0 +# define SSL_F_FINAL_SERVER_NAME 0 +# define SSL_F_FINAL_SIG_ALGS 0 +# define SSL_F_GET_CERT_VERIFY_TBS_DATA 0 +# define SSL_F_NSS_KEYLOG_INT 0 +# define SSL_F_OPENSSL_INIT_SSL 0 +# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 0 +# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 0 +# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 0 +# define SSL_F_PARSE_CA_NAMES 0 +# define SSL_F_PITEM_NEW 0 +# define SSL_F_PQUEUE_NEW 0 +# define SSL_F_PROCESS_KEY_SHARE_EXT 0 +# define SSL_F_READ_STATE_MACHINE 0 +# define SSL_F_SET_CLIENT_CIPHERSUITE 0 +# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 0 +# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 0 +# define SSL_F_SRP_VERIFY_SERVER_PARAM 0 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 0 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 0 +# define SSL_F_SSL3_CTRL 0 +# define SSL_F_SSL3_CTX_CTRL 0 +# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 0 +# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 0 +# define SSL_F_SSL3_ENC 0 +# define SSL_F_SSL3_FINAL_FINISH_MAC 0 +# define SSL_F_SSL3_FINISH_MAC 0 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 0 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 0 +# define SSL_F_SSL3_GET_RECORD 0 +# define SSL_F_SSL3_INIT_FINISHED_MAC 0 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 0 +# define SSL_F_SSL3_READ_BYTES 0 +# define SSL_F_SSL3_READ_N 0 +# define SSL_F_SSL3_SETUP_KEY_BLOCK 0 +# define SSL_F_SSL3_SETUP_READ_BUFFER 0 +# define SSL_F_SSL3_SETUP_WRITE_BUFFER 0 +# define SSL_F_SSL3_WRITE_BYTES 0 +# define SSL_F_SSL3_WRITE_PENDING 0 +# define SSL_F_SSL_ADD_CERT_CHAIN 0 +# define SSL_F_SSL_ADD_CERT_TO_BUF 0 +# define SSL_F_SSL_ADD_CERT_TO_WPACKET 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 0 +# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 0 +# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_BAD_METHOD 0 +# define SSL_F_SSL_BUILD_CERT_CHAIN 0 +# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 0 +# define SSL_F_SSL_CACHE_CIPHERLIST 0 +# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 0 +# define SSL_F_SSL_CERT_DUP 0 +# define SSL_F_SSL_CERT_NEW 0 +# define SSL_F_SSL_CERT_SET0_CHAIN 0 +# define SSL_F_SSL_CHECK_PRIVATE_KEY 0 +# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 0 +# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 0 +# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 0 +# define SSL_F_SSL_CIPHER_DESCRIPTION 0 +# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 0 +# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 0 +# define SSL_F_SSL_CIPHER_STRENGTH_SORT 0 +# define SSL_F_SSL_CLEAR 0 +# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 0 +# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 0 +# define SSL_F_SSL_CONF_CMD 0 +# define SSL_F_SSL_CREATE_CIPHER_LIST 0 +# define SSL_F_SSL_CTRL 0 +# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 0 +# define SSL_F_SSL_CTX_ENABLE_CT 0 +# define SSL_F_SSL_CTX_MAKE_PROFILES 0 +# define SSL_F_SSL_CTX_NEW 0 +# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 0 +# define SSL_F_SSL_CTX_SET_CIPHER_LIST 0 +# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 0 +# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 0 +# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 0 +# define SSL_F_SSL_CTX_SET_SSL_VERSION 0 +# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 0 +# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 0 +# define SSL_F_SSL_DANE_DUP 0 +# define SSL_F_SSL_DANE_ENABLE 0 +# define SSL_F_SSL_DERIVE 0 +# define SSL_F_SSL_DO_CONFIG 0 +# define SSL_F_SSL_DO_HANDSHAKE 0 +# define SSL_F_SSL_DUP_CA_LIST 0 +# define SSL_F_SSL_ENABLE_CT 0 +# define SSL_F_SSL_GENERATE_PKEY_GROUP 0 +# define SSL_F_SSL_GENERATE_SESSION_ID 0 +# define SSL_F_SSL_GET_NEW_SESSION 0 +# define SSL_F_SSL_GET_PREV_SESSION 0 +# define SSL_F_SSL_GET_SERVER_CERT_INDEX 0 +# define SSL_F_SSL_GET_SIGN_PKEY 0 +# define SSL_F_SSL_HANDSHAKE_HASH 0 +# define SSL_F_SSL_INIT_WBIO_BUFFER 0 +# define SSL_F_SSL_KEY_UPDATE 0 +# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 0 +# define SSL_F_SSL_LOG_MASTER_SECRET 0 +# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_SSL_MODULE_INIT 0 +# define SSL_F_SSL_NEW 0 +# define SSL_F_SSL_NEXT_PROTO_VALIDATE 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_PEEK 0 +# define SSL_F_SSL_PEEK_EX 0 +# define SSL_F_SSL_PEEK_INTERNAL 0 +# define SSL_F_SSL_READ 0 +# define SSL_F_SSL_READ_EARLY_DATA 0 +# define SSL_F_SSL_READ_EX 0 +# define SSL_F_SSL_READ_INTERNAL 0 +# define SSL_F_SSL_RENEGOTIATE 0 +# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 0 +# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_SESSION_DUP 0 +# define SSL_F_SSL_SESSION_NEW 0 +# define SSL_F_SSL_SESSION_PRINT_FP 0 +# define SSL_F_SSL_SESSION_SET1_ID 0 +# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 0 +# define SSL_F_SSL_SET_ALPN_PROTOS 0 +# define SSL_F_SSL_SET_CERT 0 +# define SSL_F_SSL_SET_CERT_AND_KEY 0 +# define SSL_F_SSL_SET_CIPHER_LIST 0 +# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 0 +# define SSL_F_SSL_SET_FD 0 +# define SSL_F_SSL_SET_PKEY 0 +# define SSL_F_SSL_SET_RFD 0 +# define SSL_F_SSL_SET_SESSION 0 +# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 0 +# define SSL_F_SSL_SET_SESSION_TICKET_EXT 0 +# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 0 +# define SSL_F_SSL_SET_WFD 0 +# define SSL_F_SSL_SHUTDOWN 0 +# define SSL_F_SSL_SRP_CTX_INIT 0 +# define SSL_F_SSL_START_ASYNC_JOB 0 +# define SSL_F_SSL_UNDEFINED_FUNCTION 0 +# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 0 +# define SSL_F_SSL_USE_CERTIFICATE 0 +# define SSL_F_SSL_USE_CERTIFICATE_ASN1 0 +# define SSL_F_SSL_USE_CERTIFICATE_FILE 0 +# define SSL_F_SSL_USE_PRIVATEKEY 0 +# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 0 +# define SSL_F_SSL_USE_PRIVATEKEY_FILE 0 +# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 0 +# define SSL_F_SSL_VALIDATE_CT 0 +# define SSL_F_SSL_VERIFY_CERT_CHAIN 0 +# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 0 +# define SSL_F_SSL_WRITE 0 +# define SSL_F_SSL_WRITE_EARLY_DATA 0 +# define SSL_F_SSL_WRITE_EARLY_FINISH 0 +# define SSL_F_SSL_WRITE_EX 0 +# define SSL_F_SSL_WRITE_INTERNAL 0 +# define SSL_F_STATE_MACHINE 0 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 0 +# define SSL_F_TLS12_COPY_SIGALGS 0 +# define SSL_F_TLS13_CHANGE_CIPHER_STATE 0 +# define SSL_F_TLS13_ENC 0 +# define SSL_F_TLS13_FINAL_FINISH_MAC 0 +# define SSL_F_TLS13_GENERATE_SECRET 0 +# define SSL_F_TLS13_HKDF_EXPAND 0 +# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 0 +# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 0 +# define SSL_F_TLS13_SETUP_KEY_BLOCK 0 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 0 +# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 0 +# define SSL_F_TLS1_ENC 0 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 0 +# define SSL_F_TLS1_GET_CURVELIST 0 +# define SSL_F_TLS1_PRF 0 +# define SSL_F_TLS1_SAVE_U16 0 +# define SSL_F_TLS1_SETUP_KEY_BLOCK 0 +# define SSL_F_TLS1_SET_GROUPS 0 +# define SSL_F_TLS1_SET_RAW_SIGALGS 0 +# define SSL_F_TLS1_SET_SERVER_SIGALGS 0 +# define SSL_F_TLS1_SET_SHARED_SIGALGS 0 +# define SSL_F_TLS1_SET_SIGALGS 0 +# define SSL_F_TLS_CHOOSE_SIGALG 0 +# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 0 +# define SSL_F_TLS_COLLECT_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 0 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 0 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 0 +# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 0 +# define SSL_F_TLS_CONSTRUCT_CKE_DHE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_GOST 0 +# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_RSA 0 +# define SSL_F_TLS_CONSTRUCT_CKE_SRP 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_FINISHED 0 +# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 0 +# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 0 +# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 0 +# define SSL_F_TLS_CONSTRUCT_STOC_DONE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EMS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_ETM 0 +# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 0 +# define SSL_F_TLS_CONSTRUCT_STOC_PSK 0 +# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 0 +# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_FINISH_HANDSHAKE 0 +# define SSL_F_TLS_GET_MESSAGE_BODY 0 +# define SSL_F_TLS_GET_MESSAGE_HEADER 0 +# define SSL_F_TLS_HANDLE_ALPN 0 +# define SSL_F_TLS_HANDLE_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 0 +# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 0 +# define SSL_F_TLS_PARSE_CTOS_ALPN 0 +# define SSL_F_TLS_PARSE_CTOS_COOKIE 0 +# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 0 +# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 0 +# define SSL_F_TLS_PARSE_CTOS_EMS 0 +# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 0 +# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 0 +# define SSL_F_TLS_PARSE_CTOS_PSK 0 +# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 0 +# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 0 +# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 0 +# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 0 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 0 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 0 +# define SSL_F_TLS_PARSE_CTOS_SRP 0 +# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 0 +# define SSL_F_TLS_PARSE_STOC_ALPN 0 +# define SSL_F_TLS_PARSE_STOC_COOKIE 0 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 0 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 0 +# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 0 +# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 0 +# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_PARSE_STOC_NPN 0 +# define SSL_F_TLS_PARSE_STOC_PSK 0 +# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 0 +# define SSL_F_TLS_PARSE_STOC_SCT 0 +# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 0 +# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 0 +# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_PARSE_STOC_USE_SRTP 0 +# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 0 +# define SSL_F_TLS_PROCESS_CERT_STATUS 0 +# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 0 +# define SSL_F_TLS_PROCESS_CERT_VERIFY 0 +# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 0 +# define SSL_F_TLS_PROCESS_CKE_DHE 0 +# define SSL_F_TLS_PROCESS_CKE_ECDHE 0 +# define SSL_F_TLS_PROCESS_CKE_GOST 0 +# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_PROCESS_CKE_RSA 0 +# define SSL_F_TLS_PROCESS_CKE_SRP 0 +# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 0 +# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 0 +# define SSL_F_TLS_PROCESS_FINISHED 0 +# define SSL_F_TLS_PROCESS_HELLO_REQ 0 +# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 0 +# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 0 +# define SSL_F_TLS_PROCESS_KEY_UPDATE 0 +# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 0 +# define SSL_F_TLS_PROCESS_NEXT_PROTO 0 +# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_SERVER_DONE 0 +# define SSL_F_TLS_PROCESS_SERVER_HELLO 0 +# define SSL_F_TLS_PROCESS_SKE_DHE 0 +# define SSL_F_TLS_PROCESS_SKE_ECDHE 0 +# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_PROCESS_SKE_SRP 0 +# define SSL_F_TLS_PSK_DO_BINDER 0 +# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 0 +# define SSL_F_TLS_SETUP_HANDSHAKE 0 +# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 0 +# define SSL_F_WPACKET_INTERN_INIT_LEN 0 +# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 0 +# define SSL_F_WRITE_STATE_MACHINE 0 +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/stack.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/stack.h index cfc07505..f0c5c547 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/stack.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/stack.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_STACK_H -# define HEADER_STACK_H +#ifndef OPENSSL_STACK_H +# define OPENSSL_STACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_STACK_H +# endif #ifdef __cplusplus extern "C" { @@ -39,6 +45,7 @@ void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc); void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p); int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data); int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_find_all(OPENSSL_STACK *st, const void *data, int *pnum); int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data); int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data); void *OPENSSL_sk_shift(OPENSSL_STACK *st); @@ -50,7 +57,7 @@ OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *st); void OPENSSL_sk_sort(OPENSSL_STACK *st); int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define _STACK OPENSSL_STACK # define sk_num OPENSSL_sk_num # define sk_value OPENSSL_sk_value diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h index a40a7339..3c1445e0 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h @@ -1,17 +1,23 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OSSL_STORE_H -# define HEADER_OSSL_STORE_H +#ifndef OPENSSL_STORE_H +# define OPENSSL_STORE_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OSSL_STORE_H +# endif # include -# include +# include # include # include @@ -46,10 +52,16 @@ typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, * Returns a context reference which represents the channel to communicate * through. */ -OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, - void *ui_data, - OSSL_STORE_post_process_info_fn post_process, - void *post_process_data); +OSSL_STORE_CTX * +OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, void *ui_data, + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); +OSSL_STORE_CTX * +OSSL_STORE_open_ex(const char *uri, OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data, + const OSSL_PARAM params[], + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); /* * Control / fine tune the OSSL_STORE channel. |cmd| determines what is to be @@ -57,8 +69,14 @@ OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, * determine which loader is used), except for common commands (see below). * Each command takes different arguments. */ -int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); -int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, + ... /* args */); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, + va_list args); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * Common ctrl commands that different loaders may choose to support. @@ -68,6 +86,8 @@ int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); /* Where custom commands start */ # define OSSL_STORE_C_CUSTOM_START 100 +# endif + /* * Read one data item (a key, a cert, a CRL) that is supported by the OSSL_STORE * functionality, given a context. @@ -96,6 +116,25 @@ int OSSL_STORE_error(OSSL_STORE_CTX *ctx); */ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); +/* + * Attach to a BIO. This works like OSSL_STORE_open() except it takes a + * BIO instead of a uri, along with a scheme to use when reading. + * The given UI method will be used any time the loader needs extra input, + * for example when a password or pin is needed, and will be passed the + * same user data every time it's needed in this context. + * + * Returns a context reference which represents the channel to communicate + * through. + * + * Note that this function is considered unsafe, all depending on what the + * BIO actually reads. + */ +OSSL_STORE_CTX *OSSL_STORE_attach(BIO *bio, const char *scheme, + OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data, + const OSSL_PARAM params[], + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); /*- * Extracting OpenSSL types from and creating new OSSL_STORE_INFOs @@ -109,9 +148,10 @@ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); */ # define OSSL_STORE_INFO_NAME 1 /* char * */ # define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ -# define OSSL_STORE_INFO_PKEY 3 /* EVP_PKEY * */ -# define OSSL_STORE_INFO_CERT 4 /* X509 * */ -# define OSSL_STORE_INFO_CRL 5 /* X509_CRL * */ +# define OSSL_STORE_INFO_PUBKEY 3 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_PKEY 4 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_CERT 5 /* X509 * */ +# define OSSL_STORE_INFO_CRL 6 /* X509_CRL * */ /* * Functions to generate OSSL_STORE_INFOs, one function for each type we @@ -120,9 +160,11 @@ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); * In all cases, ownership of the object is transferred to the OSSL_STORE_INFO * and will therefore be freed when the OSSL_STORE_INFO is freed. */ +OSSL_STORE_INFO *OSSL_STORE_INFO_new(int type, void *data); OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PUBKEY(EVP_PKEY *pubkey); OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); @@ -131,12 +173,15 @@ OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); * Functions to try to extract data from a OSSL_STORE_INFO. */ int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info); +void *OSSL_STORE_INFO_get0_data(int type, const OSSL_STORE_INFO *info); const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info); char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info); const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info); char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PUBKEY(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PUBKEY(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info); X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info); @@ -185,7 +230,7 @@ void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search); /* Search term accessors */ int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion); -X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion); +X509_NAME *OSSL_STORE_SEARCH_get0_name(const OSSL_STORE_SEARCH *criterion); const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH *criterion); const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH @@ -198,9 +243,35 @@ const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); * to the loading channel. This MUST happen before the first OSSL_STORE_load(). */ int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type); -int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); +int OSSL_STORE_find(OSSL_STORE_CTX *ctx, const OSSL_STORE_SEARCH *search); +/*- + * Function to fetch a loader and extract data from it + * --------------------------------------------------- + */ + +typedef struct ossl_store_loader_st OSSL_STORE_LOADER; + +OSSL_STORE_LOADER *OSSL_STORE_LOADER_fetch(OSSL_LIB_CTX *libctx, + const char *scheme, + const char *properties); +int OSSL_STORE_LOADER_up_ref(OSSL_STORE_LOADER *loader); +void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); +const OSSL_PROVIDER *OSSL_STORE_LOADER_get0_provider(const OSSL_STORE_LOADER * + loader); +const char *OSSL_STORE_LOADER_get0_properties(const OSSL_STORE_LOADER *loader); +const char *OSSL_STORE_LOADER_get0_description(const OSSL_STORE_LOADER *loader); +int OSSL_STORE_LOADER_is_a(const OSSL_STORE_LOADER *loader, + const char *scheme); +void OSSL_STORE_LOADER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_STORE_LOADER *loader, + void *arg), + void *arg); +int OSSL_STORE_LOADER_names_do_all(const OSSL_STORE_LOADER *loader, + void (*fn)(const char *name, void *data), + void *data); + /*- * Function to register a loader for the given URI scheme. * ------------------------------------------------------- @@ -209,56 +280,88 @@ int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); * scheme. */ -typedef struct ossl_store_loader_st OSSL_STORE_LOADER; -OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); -const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); -const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +# ifndef OPENSSL_NO_DEPRECATED_3_0 + /* struct ossl_store_loader_ctx_st is defined differently by each loader */ typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; -typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const OSSL_STORE_LOADER - *loader, - const char *uri, - const UI_METHOD *ui_method, - void *ui_data); +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn) + (const OSSL_STORE_LOADER *loader, const char *uri, + const UI_METHOD *ui_method, void *ui_data); +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_ex_fn) + (const OSSL_STORE_LOADER *loader, + const char *uri, OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data); + +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_attach_fn) + (const OSSL_STORE_LOADER *loader, BIO *bio, + OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data); +typedef int (*OSSL_STORE_ctrl_fn) + (OSSL_STORE_LOADER_CTX *ctx, int cmd, va_list args); +typedef int (*OSSL_STORE_expect_fn) + (OSSL_STORE_LOADER_CTX *ctx, int expected); +typedef int (*OSSL_STORE_find_fn) + (OSSL_STORE_LOADER_CTX *ctx, const OSSL_STORE_SEARCH *criteria); +typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn) + (OSSL_STORE_LOADER_CTX *ctx, const UI_METHOD *ui_method, void *ui_data); +typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); + +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, OSSL_STORE_open_fn open_function); -typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd, - va_list args); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_open_ex(OSSL_STORE_LOADER *loader, + OSSL_STORE_open_ex_fn open_ex_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_attach(OSSL_STORE_LOADER *loader, + OSSL_STORE_attach_fn attach_function); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, OSSL_STORE_ctrl_fn ctrl_function); -typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, OSSL_STORE_expect_fn expect_function); -typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx, - OSSL_STORE_SEARCH *criteria); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, OSSL_STORE_find_fn find_function); -typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx, - const UI_METHOD *ui_method, - void *ui_data); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, OSSL_STORE_load_fn load_function); -typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, OSSL_STORE_eof_fn eof_function); -typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, OSSL_STORE_error_fn error_function); -typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, OSSL_STORE_close_fn close_function); -void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); - +OSSL_DEPRECATEDIN_3_0 +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 +const char * OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); +# endif /*- * Functions to list STORE loaders * ------------------------------- */ -int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER - *loader, void *do_arg), +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_do_all_loaders(void (*do_function)(const OSSL_STORE_LOADER *loader, + void *do_arg), void *do_arg); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/storeerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/storeerr.h index 190eab07..00529c88 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/storeerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/storeerr.h @@ -1,66 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OSSL_STOREERR_H -# define HEADER_OSSL_STOREERR_H +#ifndef OPENSSL_STOREERR_H +# define OPENSSL_STOREERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OSSL_STORE_strings(void); -/* - * OSSL_STORE function codes. - */ -# define OSSL_STORE_F_FILE_CTRL 129 -# define OSSL_STORE_F_FILE_FIND 138 -# define OSSL_STORE_F_FILE_GET_PASS 118 -# define OSSL_STORE_F_FILE_LOAD 119 -# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 124 -# define OSSL_STORE_F_FILE_NAME_TO_URI 126 -# define OSSL_STORE_F_FILE_OPEN 120 -# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 127 -# define OSSL_STORE_F_OSSL_STORE_EXPECT 130 -# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 128 -# define OSSL_STORE_F_OSSL_STORE_FIND 131 -# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 100 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 101 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 102 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 103 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 135 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 104 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 105 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 106 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 107 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 123 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 109 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 110 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 111 -# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 134 -# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 112 -# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 113 -# define OSSL_STORE_F_OSSL_STORE_OPEN 114 -# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 115 -# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 117 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 132 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 133 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 136 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 137 -# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 116 -# define OSSL_STORE_F_TRY_DECODE_PARAMS 121 -# define OSSL_STORE_F_TRY_DECODE_PKCS12 122 -# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 125 /* * OSSL_STORE reason codes. @@ -75,9 +31,11 @@ int ERR_load_OSSL_STORE_strings(void); # define OSSL_STORE_R_LOADING_STARTED 117 # define OSSL_STORE_R_NOT_A_CERTIFICATE 100 # define OSSL_STORE_R_NOT_A_CRL 101 -# define OSSL_STORE_R_NOT_A_KEY 102 # define OSSL_STORE_R_NOT_A_NAME 103 +# define OSSL_STORE_R_NOT_A_PRIVATE_KEY 102 +# define OSSL_STORE_R_NOT_A_PUBLIC_KEY 122 # define OSSL_STORE_R_NOT_PARAMETERS 104 +# define OSSL_STORE_R_NO_LOADERS_FOUND 123 # define OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR 114 # define OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE 108 # define OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 119 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/symhacks.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/symhacks.h index 156ea6e4..816f8f99 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/symhacks.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/symhacks.h @@ -1,14 +1,20 @@ /* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SYMHACKS_H -# define HEADER_SYMHACKS_H +#ifndef OPENSSL_SYMHACKS_H +# define OPENSSL_SYMHACKS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SYMHACKS_H +# endif # include @@ -28,10 +34,6 @@ # undef i2d_ECPKPARAMETERS # define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS -/* This one clashes with CMS_data_create */ -# undef cms_Data_create -# define cms_Data_create priv_cms_Data_create - # endif #endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h index 76d9fda4..793155e1 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h @@ -1,19 +1,26 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TLS1_H -# define HEADER_TLS1_H +#ifndef OPENSSL_TLS1_H +# define OPENSSL_TLS1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TLS1_H +# endif # include # include +# include #ifdef __cplusplus extern "C" { @@ -24,11 +31,10 @@ extern "C" { # define OPENSSL_TLS_SECURITY_LEVEL 1 # endif -# define TLS1_VERSION 0x0301 -# define TLS1_1_VERSION 0x0302 -# define TLS1_2_VERSION 0x0303 -# define TLS1_3_VERSION 0x0304 -# define TLS_MAX_VERSION TLS1_3_VERSION +/* TLS*_VERSION constants are defined in prov_ssl.h */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TLS_MAX_VERSION TLS1_3_VERSION +# endif /* Special value for method supporting multiple versions */ # define TLS_ANY_VERSION 0x10000 @@ -107,9 +113,6 @@ extern "C" { /* ExtensionType value from RFC5764 */ # define TLSEXT_TYPE_use_srtp 14 -/* ExtensionType value from RFC5620 */ -# define TLSEXT_TYPE_heartbeat 15 - /* ExtensionType value from RFC7301 */ # define TLSEXT_TYPE_application_layer_protocol_negotiation 16 @@ -322,38 +325,14 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define SSL_CTX_get_tlsext_status_type(ssl) \ SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) -# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,\ (void (*)(void))cb) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_DTLSEXT_HB_ENABLED 0x01 -# define SSL_DTLSEXT_HB_DONT_SEND_REQUESTS 0x02 -# define SSL_DTLSEXT_HB_DONT_RECV_REQUESTS 0x04 -# define SSL_get_dtlsext_heartbeat_pending(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) -# define SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT \ - SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT -# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING \ - SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING -# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS \ - SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS -# define SSL_TLSEXT_HB_ENABLED \ - SSL_DTLSEXT_HB_ENABLED -# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS \ - SSL_DTLSEXT_HB_DONT_SEND_REQUESTS -# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS \ - SSL_DTLSEXT_HB_DONT_RECV_REQUESTS -# define SSL_get_tlsext_heartbeat_pending(ssl) \ - SSL_get_dtlsext_heartbeat_pending(ssl) -# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ - SSL_set_dtlsext_heartbeat_no_requests(ssl,arg) -# endif # endif +int SSL_CTX_set_tlsext_ticket_key_evp_cb + (SSL_CTX *ctx, int (*fp)(SSL *, unsigned char *, unsigned char *, + EVP_CIPHER_CTX *, EVP_MAC_CTX *, int)); /* PSK ciphersuites from 4279 */ # define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A @@ -1135,14 +1114,21 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define TLS_CT_RSA_FIXED_ECDH 65 # define TLS_CT_ECDSA_FIXED_ECDH 66 # define TLS_CT_GOST01_SIGN 22 -# define TLS_CT_GOST12_SIGN 238 -# define TLS_CT_GOST12_512_SIGN 239 +# define TLS_CT_GOST12_IANA_SIGN 67 +# define TLS_CT_GOST12_IANA_512_SIGN 68 +# define TLS_CT_GOST12_LEGACY_SIGN 238 +# define TLS_CT_GOST12_LEGACY_512_SIGN 239 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TLS_CT_GOST12_SIGN TLS_CT_GOST12_LEGACY_SIGN +# define TLS_CT_GOST12_512_SIGN TLS_CT_GOST12_LEGACY_512_SIGN +# endif /* * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see * comment there) */ -# define TLS_CT_NUMBER 10 +# define TLS_CT_NUMBER 12 # if defined(SSL3_CT_NUMBER) # if TLS_CT_NUMBER != SSL3_CT_NUMBER @@ -1152,78 +1138,35 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define TLS1_FINISH_MAC_LENGTH 12 -# define TLS_MD_MAX_CONST_SIZE 22 -# define TLS_MD_CLIENT_FINISH_CONST "client finished" -# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 -# define TLS_MD_SERVER_FINISH_CONST "server finished" -# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 -# define TLS_MD_KEY_EXPANSION_CONST "key expansion" -# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 -# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" -# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" -# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_IV_BLOCK_CONST "IV block" -# define TLS_MD_IV_BLOCK_CONST_SIZE 8 -# define TLS_MD_MASTER_SECRET_CONST "master secret" -# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "extended master secret" -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 +# define TLS_MD_MAX_CONST_SIZE 22 -# ifdef CHARSET_EBCDIC -# undef TLS_MD_CLIENT_FINISH_CONST -/* - * client finished - */ -# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_FINISH_CONST -/* - * server finished - */ -# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_KEY_EXPANSION_CONST -/* - * key expansion - */ -# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" - -# undef TLS_MD_CLIENT_WRITE_KEY_CONST -/* - * client write key - */ -# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_IV_BLOCK_CONST -/* - * IV block - */ -# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" - -# undef TLS_MD_MASTER_SECRET_CONST -/* - * master secret - */ -# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# undef TLS_MD_EXTENDED_MASTER_SECRET_CONST -/* - * extended master secret - */ -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# endif +/* ASCII: "client finished", in hex for EBCDIC compatibility */ +# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" +# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 +/* ASCII: "server finished", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" +# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 +/* ASCII: "server write key", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "key expansion", in hex for EBCDIC compatibility */ +# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" +# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 +/* ASCII: "client write key", in hex for EBCDIC compatibility */ +# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "server write key", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "IV block", in hex for EBCDIC compatibility */ +# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" +# define TLS_MD_IV_BLOCK_CONST_SIZE 8 +/* ASCII: "master secret", in hex for EBCDIC compatibility */ +# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 +/* ASCII: "extended master secret", in hex for EBCDIC compatibility */ +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 /* TLS Session Ticket extension struct */ struct tls_session_ticket_ext_st { diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/trace.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/trace.h new file mode 100644 index 00000000..97e13857 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/trace.h @@ -0,0 +1,312 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_TRACE_H +# define OPENSSL_TRACE_H +# pragma once + +# include + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * TRACE CATEGORIES + */ + +/* + * The trace messages of the OpenSSL libraries are organized into different + * categories. For every trace category, the application can register a separate + * tracer callback. When a callback is registered, a so called trace channel is + * created for this category. This channel consists essentially of an internal + * BIO which sends all trace output it receives to the registered application + * callback. + * + * The ALL category can be used as a fallback category to register a single + * channel which receives the output from all categories. However, if the + * application intends to print the trace channel name in the line prefix, + * it is better to register channels for all categories separately. + * (This is how the openssl application does it.) + */ +# define OSSL_TRACE_CATEGORY_ALL 0 /* The fallback */ +# define OSSL_TRACE_CATEGORY_TRACE 1 +# define OSSL_TRACE_CATEGORY_INIT 2 +# define OSSL_TRACE_CATEGORY_TLS 3 +# define OSSL_TRACE_CATEGORY_TLS_CIPHER 4 +# define OSSL_TRACE_CATEGORY_CONF 5 +# define OSSL_TRACE_CATEGORY_ENGINE_TABLE 6 +# define OSSL_TRACE_CATEGORY_ENGINE_REF_COUNT 7 +# define OSSL_TRACE_CATEGORY_PKCS5V2 8 +# define OSSL_TRACE_CATEGORY_PKCS12_KEYGEN 9 +# define OSSL_TRACE_CATEGORY_PKCS12_DECRYPT 10 +# define OSSL_TRACE_CATEGORY_X509V3_POLICY 11 +# define OSSL_TRACE_CATEGORY_BN_CTX 12 +# define OSSL_TRACE_CATEGORY_CMP 13 +# define OSSL_TRACE_CATEGORY_STORE 14 +# define OSSL_TRACE_CATEGORY_DECODER 15 +# define OSSL_TRACE_CATEGORY_ENCODER 16 +# define OSSL_TRACE_CATEGORY_REF_COUNT 17 +# define OSSL_TRACE_CATEGORY_HTTP 18 +/* Count of available categories. */ +# define OSSL_TRACE_CATEGORY_NUM 19 +/* KEEP THIS LIST IN SYNC with trace_categories[] in crypto/trace.c */ + +/* Returns the trace category number for the given |name| */ +int OSSL_trace_get_category_num(const char *name); + +/* Returns the trace category name for the given |num| */ +const char *OSSL_trace_get_category_name(int num); + +/* + * TRACE CONSUMERS + */ + +/* + * Enables tracing for the given |category| by providing a BIO sink + * as |channel|. If a null pointer is passed as |channel|, an existing + * trace channel is removed and tracing for the category is disabled. + * + * Returns 1 on success and 0 on failure + */ +int OSSL_trace_set_channel(int category, BIO* channel); + +/* + * Attach a prefix and a suffix to the given |category|, to be printed at the + * beginning and at the end of each trace output group, i.e. when + * OSSL_trace_begin() and OSSL_trace_end() are called. + * If a null pointer is passed as argument, the existing prefix or suffix is + * removed. + * + * They return 1 on success and 0 on failure + */ +int OSSL_trace_set_prefix(int category, const char *prefix); +int OSSL_trace_set_suffix(int category, const char *suffix); + +/* + * OSSL_trace_cb is the type tracing callback provided by the application. + * It MUST return the number of bytes written, or 0 on error (in other words, + * it can never write zero bytes). + * + * The |buffer| will always contain text, which may consist of several lines. + * The |data| argument points to whatever data was provided by the application + * when registering the tracer function. + * + * The |category| number is given, as well as a |cmd| number, described below. + */ +typedef size_t (*OSSL_trace_cb)(const char *buffer, size_t count, + int category, int cmd, void *data); +/* + * Possible |cmd| numbers. + */ +# define OSSL_TRACE_CTRL_BEGIN 0 +# define OSSL_TRACE_CTRL_WRITE 1 +# define OSSL_TRACE_CTRL_END 2 + +/* + * Enables tracing for the given |category| by creating an internal + * trace channel which sends the output to the given |callback|. + * If a null pointer is passed as callback, an existing trace channel + * is removed and tracing for the category is disabled. + * + * NOTE: OSSL_trace_set_channel() and OSSL_trace_set_callback() are mutually + * exclusive. + * + * Returns 1 on success and 0 on failure + */ +int OSSL_trace_set_callback(int category, OSSL_trace_cb callback, void *data); + +/* + * TRACE PRODUCERS + */ + +/* + * Returns 1 if tracing for the specified category is enabled, otherwise 0 + */ +int OSSL_trace_enabled(int category); + +/* + * Wrap a group of tracing output calls. OSSL_trace_begin() locks tracing and + * returns the trace channel associated with the given category, or NULL if no + * channel is associated with the category. OSSL_trace_end() unlocks tracing. + * + * Usage: + * + * BIO *out; + * if ((out = OSSL_trace_begin(category)) != NULL) { + * ... + * BIO_fprintf(out, ...); + * ... + * OSSL_trace_end(category, out); + * } + * + * See also the convenience macros OSSL_TRACE_BEGIN and OSSL_TRACE_END below. + */ +BIO *OSSL_trace_begin(int category); +void OSSL_trace_end(int category, BIO *channel); + +/* + * OSSL_TRACE* Convenience Macros + */ + +/* + * When the tracing feature is disabled, these macros are defined to + * produce dead code, which a good compiler should eliminate. + */ + +/* + * OSSL_TRACE_BEGIN, OSSL_TRACE_END - Define a Trace Group + * + * These two macros can be used to create a block which is executed only + * if the corresponding trace category is enabled. Inside this block, a + * local variable named |trc_out| is defined, which points to the channel + * associated with the given trace category. + * + * Usage: (using 'TLS' as an example category) + * + * OSSL_TRACE_BEGIN(TLS) { + * + * BIO_fprintf(trc_out, ... ); + * + * } OSSL_TRACE_END(TLS); + * + * + * This expands to the following code + * + * do { + * BIO *trc_out = OSSL_trace_begin(OSSL_TRACE_CATEGORY_TLS); + * if (trc_out != NULL) { + * ... + * BIO_fprintf(trc_out, ...); + * } + * OSSL_trace_end(OSSL_TRACE_CATEGORY_TLS, trc_out); + * } while (0); + * + * The use of the inner '{...}' group and the trailing ';' is enforced + * by the definition of the macros in order to make the code look as much + * like C code as possible. + * + * Before returning from inside the trace block, it is necessary to + * call OSSL_TRACE_CANCEL(category). + */ + +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACE_BEGIN(category) \ + do { \ + BIO *trc_out = OSSL_trace_begin(OSSL_TRACE_CATEGORY_##category); \ + \ + if (trc_out != NULL) + +# define OSSL_TRACE_END(category) \ + OSSL_trace_end(OSSL_TRACE_CATEGORY_##category, trc_out); \ + } while (0) + +# define OSSL_TRACE_CANCEL(category) \ + OSSL_trace_end(OSSL_TRACE_CATEGORY_##category, trc_out) \ + +# else + +# define OSSL_TRACE_BEGIN(category) \ + do { \ + BIO *trc_out = NULL; \ + if (0) + +# define OSSL_TRACE_END(category) \ + } while(0) + +# define OSSL_TRACE_CANCEL(category) \ + ((void)0) + +# endif + +/* + * OSSL_TRACE_ENABLED() - Check whether tracing is enabled for |category| + * + * Usage: + * + * if (OSSL_TRACE_ENABLED(TLS)) { + * ... + * } + */ +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACE_ENABLED(category) \ + OSSL_trace_enabled(OSSL_TRACE_CATEGORY_##category) + +# else + +# define OSSL_TRACE_ENABLED(category) (0) + +# endif + +/* + * OSSL_TRACE*() - OneShot Trace Macros + * + * These macros are intended to produce a simple printf-style trace output. + * Unfortunately, C90 macros don't support variable arguments, so the + * "vararg" OSSL_TRACEV() macro has a rather weird usage pattern: + * + * OSSL_TRACEV(category, (trc_out, "format string", ...args...)); + * + * Where 'channel' is the literal symbol of this name, not a variable. + * For that reason, it is currently not intended to be used directly, + * but only as helper macro for the other oneshot trace macros + * OSSL_TRACE(), OSSL_TRACE1(), OSSL_TRACE2(), ... + * + * Usage: + * + * OSSL_TRACE(INIT, "Hello world!\n"); + * OSSL_TRACE1(TLS, "The answer is %d\n", 42); + * OSSL_TRACE2(TLS, "The ultimate question to answer %d is '%s'\n", + * 42, "What do you get when you multiply six by nine?"); + */ + +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACEV(category, args) \ + OSSL_TRACE_BEGIN(category) \ + BIO_printf args; \ + OSSL_TRACE_END(category) + +# else + +# define OSSL_TRACEV(category, args) ((void)0) + +# endif + +# define OSSL_TRACE(category, text) \ + OSSL_TRACEV(category, (trc_out, "%s", text)) + +# define OSSL_TRACE1(category, format, arg1) \ + OSSL_TRACEV(category, (trc_out, format, arg1)) +# define OSSL_TRACE2(category, format, arg1, arg2) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2)) +# define OSSL_TRACE3(category, format, arg1, arg2, arg3) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3)) +# define OSSL_TRACE4(category, format, arg1, arg2, arg3, arg4) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4)) +# define OSSL_TRACE5(category, format, arg1, arg2, arg3, arg4, arg5) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5)) +# define OSSL_TRACE6(category, format, arg1, arg2, arg3, arg4, arg5, arg6) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6)) +# define OSSL_TRACE7(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7)) +# define OSSL_TRACE8(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)) +# define OSSL_TRACE9(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)) + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h index 3b58aa52..8ff67332 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h @@ -1,14 +1,20 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TS_H -# define HEADER_TS_H +#ifndef OPENSSL_TS_H +# define OPENSSL_TS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TS_H +# endif # include @@ -23,13 +29,16 @@ # include # include # include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif # ifdef __cplusplus extern "C" { # endif -# include -# include - typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; typedef struct TS_req_st TS_REQ; typedef struct TS_accuracy_st TS_ACCURACY; @@ -55,126 +64,61 @@ typedef struct TS_tst_info_st TS_TST_INFO; typedef struct TS_status_info_st TS_STATUS_INFO; -typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; -typedef struct ESS_cert_id ESS_CERT_ID; -typedef struct ESS_signing_cert ESS_SIGNING_CERT; - -DEFINE_STACK_OF(ESS_CERT_ID) - -typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; -typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; - -DEFINE_STACK_OF(ESS_CERT_ID_V2) typedef struct TS_resp_st TS_RESP; -TS_REQ *TS_REQ_new(void); -void TS_REQ_free(TS_REQ *a); -int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); -TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); - -TS_REQ *TS_REQ_dup(TS_REQ *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_REQ) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_REQ, TS_REQ) +DECLARE_ASN1_DUP_FUNCTION(TS_REQ) #ifndef OPENSSL_NO_STDIO TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); -int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); +int i2d_TS_REQ_fp(FILE *fp, const TS_REQ *a); #endif TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); -int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); +int i2d_TS_REQ_bio(BIO *fp, const TS_REQ *a); -TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); -void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); -int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, - const unsigned char **pp, long length); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_MSG_IMPRINT) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_MSG_IMPRINT, TS_MSG_IMPRINT) +DECLARE_ASN1_DUP_FUNCTION(TS_MSG_IMPRINT) #ifndef OPENSSL_NO_STDIO TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT_fp(FILE *fp, const TS_MSG_IMPRINT *a); #endif TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT_bio(BIO *bio, const TS_MSG_IMPRINT *a); -TS_RESP *TS_RESP_new(void); -void TS_RESP_free(TS_RESP *a); -int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); -TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); -TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); -TS_RESP *TS_RESP_dup(TS_RESP *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_RESP) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_RESP, TS_RESP) +DECLARE_ASN1_DUP_FUNCTION(TS_RESP) #ifndef OPENSSL_NO_STDIO TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); -int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); +int i2d_TS_RESP_fp(FILE *fp, const TS_RESP *a); #endif TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); -int i2d_TS_RESP_bio(BIO *bio, TS_RESP *a); +int i2d_TS_RESP_bio(BIO *bio, const TS_RESP *a); -TS_STATUS_INFO *TS_STATUS_INFO_new(void); -void TS_STATUS_INFO_free(TS_STATUS_INFO *a); -int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); -TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, - const unsigned char **pp, long length); -TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_STATUS_INFO) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_STATUS_INFO, TS_STATUS_INFO) +DECLARE_ASN1_DUP_FUNCTION(TS_STATUS_INFO) -TS_TST_INFO *TS_TST_INFO_new(void); -void TS_TST_INFO_free(TS_TST_INFO *a); -int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); -TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, - long length); -TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_TST_INFO) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_TST_INFO, TS_TST_INFO) +DECLARE_ASN1_DUP_FUNCTION(TS_TST_INFO) +TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); #ifndef OPENSSL_NO_STDIO TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); -int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); +int i2d_TS_TST_INFO_fp(FILE *fp, const TS_TST_INFO *a); #endif TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO **a); -int i2d_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO *a); +int i2d_TS_TST_INFO_bio(BIO *bio, const TS_TST_INFO *a); -TS_ACCURACY *TS_ACCURACY_new(void); -void TS_ACCURACY_free(TS_ACCURACY *a); -int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); -TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, - long length); -TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); - -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); -void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); -int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); -ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, - const unsigned char **pp, - long length); -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); - -ESS_CERT_ID *ESS_CERT_ID_new(void); -void ESS_CERT_ID_free(ESS_CERT_ID *a); -int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); -ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, - long length); -ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); - -ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); -void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); -int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); -ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, - const unsigned char **pp, long length); -ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); - -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_new(void); -void ESS_CERT_ID_V2_free(ESS_CERT_ID_V2 *a); -int i2d_ESS_CERT_ID_V2(const ESS_CERT_ID_V2 *a, unsigned char **pp); -ESS_CERT_ID_V2 *d2i_ESS_CERT_ID_V2(ESS_CERT_ID_V2 **a, - const unsigned char **pp, long length); -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_dup(ESS_CERT_ID_V2 *a); - -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_new(void); -void ESS_SIGNING_CERT_V2_free(ESS_SIGNING_CERT_V2 *a); -int i2d_ESS_SIGNING_CERT_V2(const ESS_SIGNING_CERT_V2 *a, unsigned char **pp); -ESS_SIGNING_CERT_V2 *d2i_ESS_SIGNING_CERT_V2(ESS_SIGNING_CERT_V2 **a, - const unsigned char **pp, - long length); -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_dup(ESS_SIGNING_CERT_V2 *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_ACCURACY) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_ACCURACY, TS_ACCURACY) +DECLARE_ASN1_DUP_FUNCTION(TS_ACCURACY) int TS_REQ_set_version(TS_REQ *a, long version); long TS_REQ_get_version(const TS_REQ *a); @@ -322,10 +266,9 @@ typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, typedef struct TS_resp_ctx TS_RESP_CTX; -DEFINE_STACK_OF_CONST(EVP_MD) - /* Creates a response context that can be used for generating responses. */ TS_RESP_CTX *TS_RESP_CTX_new(void); +TS_RESP_CTX *TS_RESP_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); void TS_RESP_CTX_free(TS_RESP_CTX *ctx); /* This parameter must be set. */ @@ -479,7 +422,10 @@ BIO *TS_VERIFY_CTX_set_data(TS_VERIFY_CTX *ctx, BIO *b); unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, unsigned char *hexstr, long len); X509_STORE *TS_VERIFY_CTX_set_store(TS_VERIFY_CTX *ctx, X509_STORE *s); -STACK_OF(X509) *TS_VERIFY_CTS_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TS_VERIFY_CTS_set_certs(ctx, cert) TS_VERIFY_CTX_set_certs(ctx,cert) +# endif +STACK_OF(X509) *TS_VERIFY_CTX_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); /*- * If ctx is NULL, it allocates and returns a new object, otherwise @@ -543,7 +489,7 @@ int TS_CONF_set_def_policy(CONF *conf, const char *section, int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, +int TS_CONF_set_clock_precision_digits(const CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tserr.h index 07f23339..e1b943e4 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tserr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tserr.h @@ -1,89 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TSERR_H -# define HEADER_TSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_TSERR_H +# define OPENSSL_TSERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_TS -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_TS_strings(void); - -/* - * TS function codes. - */ -# define TS_F_DEF_SERIAL_CB 110 -# define TS_F_DEF_TIME_CB 111 -# define TS_F_ESS_ADD_SIGNING_CERT 112 -# define TS_F_ESS_ADD_SIGNING_CERT_V2 147 -# define TS_F_ESS_CERT_ID_NEW_INIT 113 -# define TS_F_ESS_CERT_ID_V2_NEW_INIT 156 -# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 -# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 157 -# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 -# define TS_F_PKCS7_TO_TS_TST_INFO 148 -# define TS_F_TS_ACCURACY_SET_MICROS 115 -# define TS_F_TS_ACCURACY_SET_MILLIS 116 -# define TS_F_TS_ACCURACY_SET_SECONDS 117 -# define TS_F_TS_CHECK_IMPRINTS 100 -# define TS_F_TS_CHECK_NONCES 101 -# define TS_F_TS_CHECK_POLICY 102 -# define TS_F_TS_CHECK_SIGNING_CERTS 103 -# define TS_F_TS_CHECK_STATUS_INFO 104 -# define TS_F_TS_COMPUTE_IMPRINT 145 -# define TS_F_TS_CONF_INVALID 151 -# define TS_F_TS_CONF_LOAD_CERT 153 -# define TS_F_TS_CONF_LOAD_CERTS 154 -# define TS_F_TS_CONF_LOAD_KEY 155 -# define TS_F_TS_CONF_LOOKUP_FAIL 152 -# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 -# define TS_F_TS_GET_STATUS_TEXT 105 -# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 -# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 -# define TS_F_TS_REQ_SET_NONCE 120 -# define TS_F_TS_REQ_SET_POLICY_ID 121 -# define TS_F_TS_RESP_CREATE_RESPONSE 122 -# define TS_F_TS_RESP_CREATE_TST_INFO 123 -# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 -# define TS_F_TS_RESP_CTX_ADD_MD 125 -# define TS_F_TS_RESP_CTX_ADD_POLICY 126 -# define TS_F_TS_RESP_CTX_NEW 127 -# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 -# define TS_F_TS_RESP_CTX_SET_CERTS 129 -# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 -# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 -# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 -# define TS_F_TS_RESP_GET_POLICY 133 -# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 -# define TS_F_TS_RESP_SET_STATUS_INFO 135 -# define TS_F_TS_RESP_SET_TST_INFO 150 -# define TS_F_TS_RESP_SIGN 136 -# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 -# define TS_F_TS_TST_INFO_SET_ACCURACY 137 -# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 -# define TS_F_TS_TST_INFO_SET_NONCE 139 -# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 -# define TS_F_TS_TST_INFO_SET_SERIAL 141 -# define TS_F_TS_TST_INFO_SET_TIME 142 -# define TS_F_TS_TST_INFO_SET_TSA 143 -# define TS_F_TS_VERIFY 108 -# define TS_F_TS_VERIFY_CERT 109 -# define TS_F_TS_VERIFY_CTX_NEW 144 /* * TS reason codes. diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/txt_db.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/txt_db.h index ec981a43..af169a30 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/txt_db.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/txt_db.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TXT_DB_H -# define HEADER_TXT_DB_H +#ifndef OPENSSL_TXT_DB_H +# define OPENSSL_TXT_DB_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TXT_DB_H +# endif # include # include diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/types.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/types.h new file mode 100644 index 00000000..5f9d8c23 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/types.h @@ -0,0 +1,239 @@ +/* + * Copyright 2001-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Unfortunate workaround to avoid symbol conflict with wincrypt.h + * See https://github.com/openssl/openssl/issues/9981 + */ +#ifdef _WIN32 +# define WINCRYPT_USE_SYMBOL_PREFIX +# undef X509_NAME +# undef X509_EXTENSIONS +# undef PKCS7_SIGNER_INFO +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +#endif + +#ifndef OPENSSL_TYPES_H +# define OPENSSL_TYPES_H + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# include +# include +# include + +typedef struct ossl_provider_st OSSL_PROVIDER; /* Provider Object */ + +# ifdef NO_ASN1_TYPEDEFS +# define ASN1_INTEGER ASN1_STRING +# define ASN1_ENUMERATED ASN1_STRING +# define ASN1_BIT_STRING ASN1_STRING +# define ASN1_OCTET_STRING ASN1_STRING +# define ASN1_PRINTABLESTRING ASN1_STRING +# define ASN1_T61STRING ASN1_STRING +# define ASN1_IA5STRING ASN1_STRING +# define ASN1_UTCTIME ASN1_STRING +# define ASN1_GENERALIZEDTIME ASN1_STRING +# define ASN1_TIME ASN1_STRING +# define ASN1_GENERALSTRING ASN1_STRING +# define ASN1_UNIVERSALSTRING ASN1_STRING +# define ASN1_BMPSTRING ASN1_STRING +# define ASN1_VISIBLESTRING ASN1_STRING +# define ASN1_UTF8STRING ASN1_STRING +# define ASN1_BOOLEAN int +# define ASN1_NULL int +# else +typedef struct asn1_string_st ASN1_INTEGER; +typedef struct asn1_string_st ASN1_ENUMERATED; +typedef struct asn1_string_st ASN1_BIT_STRING; +typedef struct asn1_string_st ASN1_OCTET_STRING; +typedef struct asn1_string_st ASN1_PRINTABLESTRING; +typedef struct asn1_string_st ASN1_T61STRING; +typedef struct asn1_string_st ASN1_IA5STRING; +typedef struct asn1_string_st ASN1_GENERALSTRING; +typedef struct asn1_string_st ASN1_UNIVERSALSTRING; +typedef struct asn1_string_st ASN1_BMPSTRING; +typedef struct asn1_string_st ASN1_UTCTIME; +typedef struct asn1_string_st ASN1_TIME; +typedef struct asn1_string_st ASN1_GENERALIZEDTIME; +typedef struct asn1_string_st ASN1_VISIBLESTRING; +typedef struct asn1_string_st ASN1_UTF8STRING; +typedef struct asn1_string_st ASN1_STRING; +typedef int ASN1_BOOLEAN; +typedef int ASN1_NULL; +# endif + +typedef struct asn1_type_st ASN1_TYPE; +typedef struct asn1_object_st ASN1_OBJECT; +typedef struct asn1_string_table_st ASN1_STRING_TABLE; + +typedef struct ASN1_ITEM_st ASN1_ITEM; +typedef struct asn1_pctx_st ASN1_PCTX; +typedef struct asn1_sctx_st ASN1_SCTX; + +# ifdef BIGNUM +# undef BIGNUM +# endif + +typedef struct bio_st BIO; +typedef struct bignum_st BIGNUM; +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; + +typedef struct buf_mem_st BUF_MEM; + +STACK_OF(BIGNUM); +STACK_OF(BIGNUM_const); + +typedef struct err_state_st ERR_STATE; + +typedef struct evp_cipher_st EVP_CIPHER; +typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; +typedef struct evp_md_st EVP_MD; +typedef struct evp_md_ctx_st EVP_MD_CTX; +typedef struct evp_mac_st EVP_MAC; +typedef struct evp_mac_ctx_st EVP_MAC_CTX; +typedef struct evp_pkey_st EVP_PKEY; + +typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; + +typedef struct evp_pkey_method_st EVP_PKEY_METHOD; +typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; + +typedef struct evp_keymgmt_st EVP_KEYMGMT; + +typedef struct evp_kdf_st EVP_KDF; +typedef struct evp_kdf_ctx_st EVP_KDF_CTX; + +typedef struct evp_rand_st EVP_RAND; +typedef struct evp_rand_ctx_st EVP_RAND_CTX; + +typedef struct evp_keyexch_st EVP_KEYEXCH; + +typedef struct evp_signature_st EVP_SIGNATURE; + +typedef struct evp_asym_cipher_st EVP_ASYM_CIPHER; + +typedef struct evp_kem_st EVP_KEM; + +typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; + +typedef struct hmac_ctx_st HMAC_CTX; + +typedef struct dh_st DH; +typedef struct dh_method DH_METHOD; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct dsa_st DSA; +typedef struct dsa_method DSA_METHOD; +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; +# endif +typedef struct rsa_pss_params_st RSA_PSS_PARAMS; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; +# endif + +typedef struct rand_meth_st RAND_METHOD; +typedef struct rand_drbg_st RAND_DRBG; + +typedef struct ssl_dane_st SSL_DANE; +typedef struct x509_st X509; +typedef struct X509_algor_st X509_ALGOR; +typedef struct X509_crl_st X509_CRL; +typedef struct x509_crl_method_st X509_CRL_METHOD; +typedef struct x509_revoked_st X509_REVOKED; +typedef struct X509_name_st X509_NAME; +typedef struct X509_pubkey_st X509_PUBKEY; +typedef struct x509_store_st X509_STORE; +typedef struct x509_store_ctx_st X509_STORE_CTX; + +typedef struct x509_object_st X509_OBJECT; +typedef struct x509_lookup_st X509_LOOKUP; +typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; +typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; + +typedef struct x509_sig_info_st X509_SIG_INFO; + +typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; + +typedef struct v3_ext_ctx X509V3_CTX; +typedef struct conf_st CONF; +typedef struct ossl_init_settings_st OPENSSL_INIT_SETTINGS; + +typedef struct ui_st UI; +typedef struct ui_method_st UI_METHOD; + +typedef struct engine_st ENGINE; +typedef struct ssl_st SSL; +typedef struct ssl_ctx_st SSL_CTX; + +typedef struct comp_ctx_st COMP_CTX; +typedef struct comp_method_st COMP_METHOD; + +typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; +typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; +typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; +typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; + +typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; +typedef struct DIST_POINT_st DIST_POINT; +typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; +typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; + +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; + +typedef struct ossl_http_req_ctx_st OSSL_HTTP_REQ_CTX; +typedef struct ocsp_response_st OCSP_RESPONSE; +typedef struct ocsp_responder_id_st OCSP_RESPID; + +typedef struct sct_st SCT; +typedef struct sct_ctx_st SCT_CTX; +typedef struct ctlog_st CTLOG; +typedef struct ctlog_store_st CTLOG_STORE; +typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; + +typedef struct ossl_store_info_st OSSL_STORE_INFO; +typedef struct ossl_store_search_st OSSL_STORE_SEARCH; + +typedef struct ossl_lib_ctx_st OSSL_LIB_CTX; + +typedef struct ossl_dispatch_st OSSL_DISPATCH; +typedef struct ossl_item_st OSSL_ITEM; +typedef struct ossl_algorithm_st OSSL_ALGORITHM; +typedef struct ossl_param_st OSSL_PARAM; +typedef struct ossl_param_bld_st OSSL_PARAM_BLD; + +typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + +typedef struct ossl_encoder_st OSSL_ENCODER; +typedef struct ossl_encoder_ctx_st OSSL_ENCODER_CTX; +typedef struct ossl_decoder_st OSSL_DECODER; +typedef struct ossl_decoder_ctx_st OSSL_DECODER_CTX; + +typedef struct ossl_self_test_st OSSL_SELF_TEST; + +#ifdef __cplusplus +} +#endif + +#endif /* OPENSSL_TYPES_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h index 7c721ec8..e64ec3b3 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h @@ -1,27 +1,38 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ui.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_UI_H -# define HEADER_UI_H + + +#ifndef OPENSSL_UI_H +# define OPENSSL_UI_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_UI_H +# endif # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif # include # include -# include +# include # include /* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ -# if OPENSSL_API_COMPAT < 0x10200000L +# ifndef OPENSSL_NO_DEPRECATED_3_0 # ifdef OPENSSL_NO_UI_CONSOLE # define OPENSSL_NO_UI # endif @@ -132,25 +143,26 @@ int UI_dup_error_string(UI *ui, const char *text); # define UI_INPUT_FLAG_USER_BASE 16 /*- - * The following function helps construct a prompt. object_desc is a - * textual short description of the object, for example "pass phrase", - * and object_name is the name of the object (might be a card name or - * a file name. + * The following function helps construct a prompt. + * phrase_desc is a textual short description of the phrase to enter, + * for example "pass phrase", and + * object_name is the name of the object + * (which might be a card name or a file name) or NULL. * The returned string shall always be allocated on the heap with * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). * * If the ui_method doesn't contain a pointer to a user-defined prompt * constructor, a default string is built, looking like this: * - * "Enter {object_desc} for {object_name}:" + * "Enter {phrase_desc} for {object_name}:" * - * So, if object_desc has the value "pass phrase" and object_name has + * So, if phrase_desc has the value "pass phrase" and object_name has * the value "foo.key", the resulting string is: * * "Enter pass phrase for foo.key:" */ char *UI_construct_prompt(UI *ui_method, - const char *object_desc, const char *object_name); + const char *phrase_desc, const char *object_name); /* * The following function is used to store a pointer to user-specific data. @@ -208,7 +220,7 @@ int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); # define UI_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) int UI_set_ex_data(UI *r, int idx, void *arg); -void *UI_get_ex_data(UI *r, int idx); +void *UI_get_ex_data(const UI *r, int idx); /* Use specific methods instead of the built-in one */ void UI_set_default_method(const UI_METHOD *meth); @@ -277,7 +289,34 @@ const UI_METHOD *UI_null(void); * about a string or a prompt, including test data for a verification prompt. */ typedef struct ui_string_st UI_STRING; -DEFINE_STACK_OF(UI_STRING) + +SKM_DEFINE_STACK_OF_INTERNAL(UI_STRING, UI_STRING, UI_STRING) +#define sk_UI_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_value(sk, idx) ((UI_STRING *)OPENSSL_sk_value(ossl_check_const_UI_STRING_sk_type(sk), (idx))) +#define sk_UI_STRING_new(cmp) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new(ossl_check_UI_STRING_compfunc_type(cmp))) +#define sk_UI_STRING_new_null() ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_null()) +#define sk_UI_STRING_new_reserve(cmp, n) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_reserve(ossl_check_UI_STRING_compfunc_type(cmp), (n))) +#define sk_UI_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_UI_STRING_sk_type(sk), (n)) +#define sk_UI_STRING_free(sk) OPENSSL_sk_free(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_delete(sk, i) ((UI_STRING *)OPENSSL_sk_delete(ossl_check_UI_STRING_sk_type(sk), (i))) +#define sk_UI_STRING_delete_ptr(sk, ptr) ((UI_STRING *)OPENSSL_sk_delete_ptr(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr))) +#define sk_UI_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_pop(sk) ((UI_STRING *)OPENSSL_sk_pop(ossl_check_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_shift(sk) ((UI_STRING *)OPENSSL_sk_shift(ossl_check_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_UI_STRING_sk_type(sk),ossl_check_UI_STRING_freefunc_type(freefunc)) +#define sk_UI_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), (idx)) +#define sk_UI_STRING_set(sk, idx, ptr) ((UI_STRING *)OPENSSL_sk_set(ossl_check_UI_STRING_sk_type(sk), (idx), ossl_check_UI_STRING_type(ptr))) +#define sk_UI_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), pnum) +#define sk_UI_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_dup(sk) ((STACK_OF(UI_STRING) *)OPENSSL_sk_dup(ossl_check_const_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(UI_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_UI_STRING_sk_type(sk), ossl_check_UI_STRING_copyfunc_type(copyfunc), ossl_check_UI_STRING_freefunc_type(freefunc))) +#define sk_UI_STRING_set_cmp_func(sk, cmp) ((sk_UI_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_compfunc_type(cmp))) + /* * The different types of strings that are currently supported. This is only @@ -308,7 +347,7 @@ int UI_method_set_data_duplicator(UI_METHOD *method, int UI_method_set_prompt_constructor(UI_METHOD *method, char *(*prompt_constructor) (UI *ui, const char - *object_desc, + *phrase_desc, const char *object_name)); int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h.in new file mode 100644 index 00000000..eb9a580f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h.in @@ -0,0 +1,384 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_UI_H +# define OPENSSL_UI_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_UI_H +# endif + +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include +# include +# include +# include + +/* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifdef OPENSSL_NO_UI_CONSOLE +# define OPENSSL_NO_UI +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * All the following functions return -1 or NULL on error and in some cases + * (UI_process()) -2 if interrupted or in some other way cancelled. When + * everything is fine, they return 0, a positive value or a non-NULL pointer, + * all depending on their purpose. + */ + +/* Creators and destructor. */ +UI *UI_new(void); +UI *UI_new_method(const UI_METHOD *method); +void UI_free(UI *ui); + +/*- + The following functions are used to add strings to be printed and prompt + strings to prompt for data. The names are UI_{add,dup}__string + and UI_{add,dup}_input_boolean. + + UI_{add,dup}__string have the following meanings: + add add a text or prompt string. The pointers given to these + functions are used verbatim, no copying is done. + dup make a copy of the text or prompt string, then add the copy + to the collection of strings in the user interface. + + The function is a name for the functionality that the given + string shall be used for. It can be one of: + input use the string as data prompt. + verify use the string as verification prompt. This + is used to verify a previous input. + info use the string for informational output. + error use the string for error output. + Honestly, there's currently no difference between info and error for the + moment. + + UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", + and are typically used when one wants to prompt for a yes/no response. + + All of the functions in this group take a UI and a prompt string. + The string input and verify addition functions also take a flag argument, + a buffer for the result to end up with, a minimum input size and a maximum + input size (the result buffer MUST be large enough to be able to contain + the maximum number of characters). Additionally, the verify addition + functions takes another buffer to compare the result against. + The boolean input functions take an action description string (which should + be safe to ignore if the expected user action is obvious, for example with + a dialog box with an OK button and a Cancel button), a string of acceptable + characters to mean OK and to mean Cancel. The two last strings are checked + to make sure they don't have common characters. Additionally, the same + flag argument as for the string input is taken, as well as a result buffer. + The result buffer is required to be at least one byte long. Depending on + the answer, the first character from the OK or the Cancel character strings + will be stored in the first byte of the result buffer. No NUL will be + added, so the result is *not* a string. + + On success, the all return an index of the added information. That index + is useful when retrieving results with UI_get0_result(). */ +int UI_add_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_dup_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_add_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_dup_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_add_info_string(UI *ui, const char *text); +int UI_dup_info_string(UI *ui, const char *text); +int UI_add_error_string(UI *ui, const char *text); +int UI_dup_error_string(UI *ui, const char *text); + +/* These are the possible flags. They can be or'ed together. */ +/* Use to have echoing of input */ +# define UI_INPUT_FLAG_ECHO 0x01 +/* + * Use a default password. Where that password is found is completely up to + * the application, it might for example be in the user data set with + * UI_add_user_data(). It is not recommended to have more than one input in + * each UI being marked with this flag, or the application might get + * confused. + */ +# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 + +/*- + * The user of these routines may want to define flags of their own. The core + * UI won't look at those, but will pass them on to the method routines. They + * must use higher bits so they don't get confused with the UI bits above. + * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good + * example of use is this: + * + * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) + * +*/ +# define UI_INPUT_FLAG_USER_BASE 16 + +/*- + * The following function helps construct a prompt. + * phrase_desc is a textual short description of the phrase to enter, + * for example "pass phrase", and + * object_name is the name of the object + * (which might be a card name or a file name) or NULL. + * The returned string shall always be allocated on the heap with + * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). + * + * If the ui_method doesn't contain a pointer to a user-defined prompt + * constructor, a default string is built, looking like this: + * + * "Enter {phrase_desc} for {object_name}:" + * + * So, if phrase_desc has the value "pass phrase" and object_name has + * the value "foo.key", the resulting string is: + * + * "Enter pass phrase for foo.key:" +*/ +char *UI_construct_prompt(UI *ui_method, + const char *phrase_desc, const char *object_name); + +/* + * The following function is used to store a pointer to user-specific data. + * Any previous such pointer will be returned and replaced. + * + * For callback purposes, this function makes a lot more sense than using + * ex_data, since the latter requires that different parts of OpenSSL or + * applications share the same ex_data index. + * + * Note that the UI_OpenSSL() method completely ignores the user data. Other + * methods may not, however. + */ +void *UI_add_user_data(UI *ui, void *user_data); +/* + * Alternatively, this function is used to duplicate the user data. + * This uses the duplicator method function. The destroy function will + * be used to free the user data in this case. + */ +int UI_dup_user_data(UI *ui, void *user_data); +/* We need a user data retrieving function as well. */ +void *UI_get0_user_data(UI *ui); + +/* Return the result associated with a prompt given with the index i. */ +const char *UI_get0_result(UI *ui, int i); +int UI_get_result_length(UI *ui, int i); + +/* When all strings have been added, process the whole thing. */ +int UI_process(UI *ui); + +/* + * Give a user interface parameterised control commands. This can be used to + * send down an integer, a data pointer or a function pointer, as well as be + * used to get information from a UI. + */ +int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); + +/* The commands */ +/* + * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the + * OpenSSL error stack before printing any info or added error messages and + * before any prompting. + */ +# define UI_CTRL_PRINT_ERRORS 1 +/* + * Check if a UI_process() is possible to do again with the same instance of + * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 + * if not. + */ +# define UI_CTRL_IS_REDOABLE 2 + +/* Some methods may use extra data */ +# define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) +# define UI_get_app_data(s) UI_get_ex_data(s,0) + +# define UI_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) +int UI_set_ex_data(UI *r, int idx, void *arg); +void *UI_get_ex_data(const UI *r, int idx); + +/* Use specific methods instead of the built-in one */ +void UI_set_default_method(const UI_METHOD *meth); +const UI_METHOD *UI_get_default_method(void); +const UI_METHOD *UI_get_method(UI *ui); +const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); + +# ifndef OPENSSL_NO_UI_CONSOLE + +/* The method with all the built-in thingies */ +UI_METHOD *UI_OpenSSL(void); + +# endif + +/* + * NULL method. Literally does nothing, but may serve as a placeholder + * to avoid internal default. + */ +const UI_METHOD *UI_null(void); + +/* ---------- For method writers ---------- */ +/*- + A method contains a number of functions that implement the low level + of the User Interface. The functions are: + + an opener This function starts a session, maybe by opening + a channel to a tty, or by opening a window. + a writer This function is called to write a given string, + maybe to the tty, maybe as a field label in a + window. + a flusher This function is called to flush everything that + has been output so far. It can be used to actually + display a dialog box after it has been built. + a reader This function is called to read a given prompt, + maybe from the tty, maybe from a field in a + window. Note that it's called with all string + structures, not only the prompt ones, so it must + check such things itself. + a closer This function closes the session, maybe by closing + the channel to the tty, or closing the window. + + All these functions are expected to return: + + 0 on error. + 1 on success. + -1 on out-of-band events, for example if some prompting has + been canceled (by pressing Ctrl-C, for example). This is + only checked when returned by the flusher or the reader. + + The way this is used, the opener is first called, then the writer for all + strings, then the flusher, then the reader for all strings and finally the + closer. Note that if you want to prompt from a terminal or other command + line interface, the best is to have the reader also write the prompts + instead of having the writer do it. If you want to prompt from a dialog + box, the writer can be used to build up the contents of the box, and the + flusher to actually display the box and run the event loop until all data + has been given, after which the reader only grabs the given data and puts + them back into the UI strings. + + All method functions take a UI as argument. Additionally, the writer and + the reader take a UI_STRING. +*/ + +/* + * The UI_STRING type is the data structure that contains all the needed info + * about a string or a prompt, including test data for a verification prompt. + */ +typedef struct ui_string_st UI_STRING; + +{- + generate_stack_macros("UI_STRING"); +-} + +/* + * The different types of strings that are currently supported. This is only + * needed by method authors. + */ +enum UI_string_types { + UIT_NONE = 0, + UIT_PROMPT, /* Prompt for a string */ + UIT_VERIFY, /* Prompt for a string and verify */ + UIT_BOOLEAN, /* Prompt for a yes/no response */ + UIT_INFO, /* Send info to the user */ + UIT_ERROR /* Send an error message to the user */ +}; + +/* Create and manipulate methods */ +UI_METHOD *UI_create_method(const char *name); +void UI_destroy_method(UI_METHOD *ui_method); +int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); +int UI_method_set_writer(UI_METHOD *method, + int (*writer) (UI *ui, UI_STRING *uis)); +int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); +int UI_method_set_reader(UI_METHOD *method, + int (*reader) (UI *ui, UI_STRING *uis)); +int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); +int UI_method_set_data_duplicator(UI_METHOD *method, + void *(*duplicator) (UI *ui, void *ui_data), + void (*destructor)(UI *ui, void *ui_data)); +int UI_method_set_prompt_constructor(UI_METHOD *method, + char *(*prompt_constructor) (UI *ui, + const char + *phrase_desc, + const char + *object_name)); +int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); +int (*UI_method_get_opener(const UI_METHOD *method)) (UI *); +int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *); +int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_closer(const UI_METHOD *method)) (UI *); +char *(*UI_method_get_prompt_constructor(const UI_METHOD *method)) + (UI *, const char *, const char *); +void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *); +void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *); +const void *UI_method_get_ex_data(const UI_METHOD *method, int idx); + +/* + * The following functions are helpers for method writers to access relevant + * data from a UI_STRING. + */ + +/* Return type of the UI_STRING */ +enum UI_string_types UI_get_string_type(UI_STRING *uis); +/* Return input flags of the UI_STRING */ +int UI_get_input_flags(UI_STRING *uis); +/* Return the actual string to output (the prompt, info or error) */ +const char *UI_get0_output_string(UI_STRING *uis); +/* + * Return the optional action string to output (the boolean prompt + * instruction) + */ +const char *UI_get0_action_string(UI_STRING *uis); +/* Return the result of a prompt */ +const char *UI_get0_result_string(UI_STRING *uis); +int UI_get_result_string_length(UI_STRING *uis); +/* + * Return the string to test the result against. Only useful with verifies. + */ +const char *UI_get0_test_string(UI_STRING *uis); +/* Return the required minimum size of the result */ +int UI_get_result_minsize(UI_STRING *uis); +/* Return the required maximum size of the result */ +int UI_get_result_maxsize(UI_STRING *uis); +/* Set the result of a UI_STRING. */ +int UI_set_result(UI *ui, UI_STRING *uis, const char *result); +int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len); + +/* A couple of popular utility functions */ +int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, + int verify); +int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, + int verify); +UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/uierr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/uierr.h index bd68864d..473b04ed 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/uierr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/uierr.h @@ -1,49 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_UIERR_H -# define HEADER_UIERR_H +#ifndef OPENSSL_UIERR_H +# define OPENSSL_UIERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_UI_strings(void); -/* - * UI function codes. - */ -# define UI_F_CLOSE_CONSOLE 115 -# define UI_F_ECHO_CONSOLE 116 -# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 -# define UI_F_GENERAL_ALLOCATE_PROMPT 109 -# define UI_F_NOECHO_CONSOLE 117 -# define UI_F_OPEN_CONSOLE 114 -# define UI_F_UI_CONSTRUCT_PROMPT 121 -# define UI_F_UI_CREATE_METHOD 112 -# define UI_F_UI_CTRL 111 -# define UI_F_UI_DUP_ERROR_STRING 101 -# define UI_F_UI_DUP_INFO_STRING 102 -# define UI_F_UI_DUP_INPUT_BOOLEAN 110 -# define UI_F_UI_DUP_INPUT_STRING 103 -# define UI_F_UI_DUP_USER_DATA 118 -# define UI_F_UI_DUP_VERIFY_STRING 106 -# define UI_F_UI_GET0_RESULT 107 -# define UI_F_UI_GET_RESULT_LENGTH 119 -# define UI_F_UI_NEW_METHOD 104 -# define UI_F_UI_PROCESS 113 -# define UI_F_UI_SET_RESULT 105 -# define UI_F_UI_SET_RESULT_EX 120 /* * UI reason codes. diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/whrlpool.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/whrlpool.h index 20ea3503..05ba4632 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/whrlpool.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/whrlpool.h @@ -1,27 +1,36 @@ /* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_WHRLPOOL_H -# define HEADER_WHRLPOOL_H +#ifndef OPENSSL_WHRLPOOL_H +# define OPENSSL_WHRLPOOL_H +# pragma once -#include - -# ifndef OPENSSL_NO_WHIRLPOOL -# include -# include -# ifdef __cplusplus -extern "C" { +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_WHRLPOOL_H # endif -# define WHIRLPOOL_DIGEST_LENGTH (512/8) -# define WHIRLPOOL_BBLOCK 512 -# define WHIRLPOOL_COUNTER (256/8) +# include + +# ifndef OPENSSL_NO_WHIRLPOOL +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define WHIRLPOOL_DIGEST_LENGTH (512/8) + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +# define WHIRLPOOL_BBLOCK 512 +# define WHIRLPOOL_COUNTER (256/8) typedef struct { union { @@ -33,16 +42,21 @@ typedef struct { unsigned int bitoff; size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; } WHIRLPOOL_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, + const void *inp, size_t bytes); +OSSL_DEPRECATEDIN_3_0 void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, + const void *inp, size_t bits); +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *WHIRLPOOL(const void *inp, size_t bytes, + unsigned char *md); +# endif -int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); -int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); -void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); -int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); -unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h index 3ff86ec7..483cb9d5 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h @@ -1,18 +1,29 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509.h.in + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509_H -# define HEADER_X509_H + + +#ifndef OPENSSL_X509_H +# define OPENSSL_X509_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_H +# endif # include -# include +# include # include # include # include @@ -21,7 +32,7 @@ # include # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # include # include @@ -29,11 +40,120 @@ # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { #endif +/* Needed stacks for types defined in other headers */ +SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME) +#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx))) +#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp))) +#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null()) +#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n))) +#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n)) +#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i))) +#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))) +#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc)) +#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx)) +#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr))) +#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum) +#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc))) +#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509) +#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk)) +#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx))) +#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp))) +#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null()) +#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n))) +#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n)) +#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk)) +#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk)) +#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i))) +#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))) +#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk))) +#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk))) +#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc)) +#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx)) +#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr))) +#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum) +#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk)) +#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk)) +#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk))) +#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc))) +#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED) +#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx))) +#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp))) +#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null()) +#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n))) +#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n)) +#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i))) +#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))) +#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc)) +#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx)) +#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr))) +#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum) +#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc))) +#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL) +#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx))) +#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp))) +#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null()) +#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n))) +#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n)) +#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i))) +#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))) +#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc)) +#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx)) +#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr))) +#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum) +#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc))) +#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp))) + /* Flags for X509_get_signature_info() */ /* Signature info is valid */ @@ -72,78 +192,98 @@ typedef struct X509_sig_st X509_SIG; typedef struct X509_name_entry_st X509_NAME_ENTRY; -DEFINE_STACK_OF(X509_NAME_ENTRY) +SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY) +#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx))) +#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp))) +#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null()) +#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n))) +#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n)) +#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i))) +#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))) +#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)) +#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx)) +#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr))) +#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum) +#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))) +#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp))) -DEFINE_STACK_OF(X509_NAME) # define X509_EX_V_NETSCAPE_HACK 0x8000 # define X509_EX_V_INIT 0x0001 typedef struct X509_extension_st X509_EXTENSION; +SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION) +#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx))) +#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp))) +#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null()) +#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n))) +#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n)) +#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i))) +#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))) +#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc)) +#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx)) +#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr))) +#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum) +#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc))) +#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp))) typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; - -DEFINE_STACK_OF(X509_EXTENSION) - typedef struct x509_attributes_st X509_ATTRIBUTE; - -DEFINE_STACK_OF(X509_ATTRIBUTE) +SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE) +#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx))) +#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp))) +#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null()) +#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n))) +#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n)) +#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i))) +#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))) +#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)) +#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx)) +#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr))) +#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum) +#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))) +#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp))) typedef struct X509_req_info_st X509_REQ_INFO; - typedef struct X509_req_st X509_REQ; - typedef struct x509_cert_aux_st X509_CERT_AUX; - typedef struct x509_cinf_st X509_CINF; -DEFINE_STACK_OF(X509) - -/* This is used for a table of trust checking functions */ - -typedef struct x509_trust_st { - int trust; - int flags; - int (*check_trust) (struct x509_trust_st *, X509 *, int); - char *name; - int arg1; - void *arg2; -} X509_TRUST; - -DEFINE_STACK_OF(X509_TRUST) - -/* standard trust ids */ - -# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ - -# define X509_TRUST_COMPAT 1 -# define X509_TRUST_SSL_CLIENT 2 -# define X509_TRUST_SSL_SERVER 3 -# define X509_TRUST_EMAIL 4 -# define X509_TRUST_OBJECT_SIGN 5 -# define X509_TRUST_OCSP_SIGN 6 -# define X509_TRUST_OCSP_REQUEST 7 -# define X509_TRUST_TSA 8 - -/* Keep these up to date! */ -# define X509_TRUST_MIN 1 -# define X509_TRUST_MAX 8 - -/* trust_flags values */ -# define X509_TRUST_DYNAMIC (1U << 0) -# define X509_TRUST_DYNAMIC_NAME (1U << 1) -/* No compat trust if self-signed, preempts "DO_SS" */ -# define X509_TRUST_NO_SS_COMPAT (1U << 2) -/* Compat trust if no explicit accepted trust EKUs */ -# define X509_TRUST_DO_SS_COMPAT (1U << 3) -/* Accept "anyEKU" as a wildcard trust OID */ -# define X509_TRUST_OK_ANY_EKU (1U << 4) - -/* check_trust return codes */ - -# define X509_TRUST_TRUSTED 1 -# define X509_TRUST_REJECTED 2 -# define X509_TRUST_UNTRUSTED 3 - /* Flags for X509_print_ex() */ # define X509_FLAG_COMPAT 0 @@ -160,6 +300,7 @@ DEFINE_STACK_OF(X509_TRUST) # define X509_FLAG_NO_AUX (1L << 10) # define X509_FLAG_NO_ATTRIBUTES (1L << 11) # define X509_FLAG_NO_IDS (1L << 12) +# define X509_FLAG_EXTENSIONS_ONLY_KID (1L << 13) /* Flags specific to X509_NAME_print_ex() */ @@ -221,12 +362,8 @@ DEFINE_STACK_OF(X509_TRUST) XN_FLAG_FN_LN | \ XN_FLAG_FN_ALIGN) -DEFINE_STACK_OF(X509_REVOKED) - typedef struct X509_crl_info_st X509_CRL_INFO; -DEFINE_STACK_OF(X509_CRL) - typedef struct private_key_st { int version; /* The PKCS#8 data types */ @@ -250,8 +387,33 @@ typedef struct X509_info_st { int enc_len; char *enc_data; } X509_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO) +#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx))) +#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp))) +#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null()) +#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n))) +#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n)) +#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i))) +#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))) +#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc)) +#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx)) +#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr))) +#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum) +#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc))) +#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp))) -DEFINE_STACK_OF(X509_INFO) /* * The next 2 structures and their 8 routines are used to manipulate Netscape's @@ -336,7 +498,9 @@ X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), int (*crl_free) (X509_CRL *crl), int (*crl_lookup) (X509_CRL *crl, X509_REVOKED **ret, - ASN1_INTEGER *ser, + const + ASN1_INTEGER *serial, + const X509_NAME *issuer), int (*crl_verify) (X509_CRL *crl, EVP_PKEY *pk)); @@ -348,7 +512,10 @@ void *X509_CRL_get_meth_data(X509_CRL *crl); const char *X509_verify_cert_error_string(long n); int X509_verify(X509 *a, EVP_PKEY *r); +int X509_self_signed(X509 *cert, int verify_signature); +int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx, + const char *propq); int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); @@ -366,22 +533,18 @@ int X509_signature_print(BIO *bp, const X509_ALGOR *alg, int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); -# endif int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); -# endif int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len); +ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert, + EVP_MD **md_used, int *md_is_fallback); int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, @@ -389,89 +552,118 @@ int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, unsigned char *md, unsigned int *len); +X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include /* OSSL_HTTP_REQ_CTX_nbio_d2i */ +# define X509_http_nbio(rctx, pcert) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509)) +# define X509_CRL_http_nbio(rctx, pcrl) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL)) +# endif + # ifndef OPENSSL_NO_STDIO X509 *d2i_X509_fp(FILE *fp, X509 **x509); -int i2d_X509_fp(FILE *fp, X509 *x509); +int i2d_X509_fp(FILE *fp, const X509 *x509); X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); -int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); +int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl); X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); -int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); -int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); +int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa); # endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); -int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); -DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); -int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); -int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); -int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa); +# endif # endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); -int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); +int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk); PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); -int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); -int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); +int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey); EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); # endif X509 *d2i_X509_bio(BIO *bp, X509 **x509); -int i2d_X509_bio(BIO *bp, X509 *x509); +int i2d_X509_bio(BIO *bp, const X509 *x509); X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); -int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); +int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl); X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); -int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); -int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); +int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa); # endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); -int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); -DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); -int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); -int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); -int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa); +# endif # endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); -int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); +int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk); PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); -int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); -int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); +int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey); EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); -X509 *X509_dup(X509 *x509); -X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); -X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); -X509_CRL *X509_CRL_dup(X509_CRL *crl); -X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); -X509_REQ *X509_REQ_dup(X509_REQ *req); -X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); +DECLARE_ASN1_DUP_FUNCTION(X509) +DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR) +DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) +DECLARE_ASN1_DUP_FUNCTION(X509_CRL) +DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION) +DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY) +DECLARE_ASN1_DUP_FUNCTION(X509_REQ) +DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED) int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval); void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, @@ -480,11 +672,13 @@ void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); -X509_NAME *X509_NAME_dup(X509_NAME *xn); -X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); +DECLARE_ASN1_DUP_FUNCTION(X509_NAME) +DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) int X509_cmp_time(const ASN1_TIME *s, time_t *t); int X509_cmp_current_time(const ASN1_TIME *s); +int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm, + const ASN1_TIME *start, const ASN1_TIME *end); ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, int offset_day, long offset_sec, time_t *t); @@ -506,24 +700,27 @@ DECLARE_ASN1_FUNCTIONS(X509_VAL) DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) +X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq); int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); -EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key); -EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key); int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); long X509_get_pathlen(X509 *x); -int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); -EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); -# ifndef OPENSSL_NO_RSA -int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); -RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY) +EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY) # endif -# ifndef OPENSSL_NO_DSA -int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); -DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY) +# endif # endif -# ifndef OPENSSL_NO_EC -int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); -EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY) +# endif # endif DECLARE_ASN1_FUNCTIONS(X509_SIG) @@ -534,6 +731,7 @@ void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) DECLARE_ASN1_FUNCTIONS(X509_REQ) +X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); @@ -545,19 +743,18 @@ DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) DECLARE_ASN1_FUNCTIONS(X509_NAME) -int X509_NAME_set(X509_NAME **xn, X509_NAME *name); +int X509_NAME_set(X509_NAME **xn, const X509_NAME *name); DECLARE_ASN1_FUNCTIONS(X509_CINF) - DECLARE_ASN1_FUNCTIONS(X509) +X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) #define X509_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) int X509_set_ex_data(X509 *r, int idx, void *arg); -void *X509_get_ex_data(X509 *r, int idx); -int i2d_X509_AUX(X509 *a, unsigned char **pp); -X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); +void *X509_get_ex_data(const X509 *r, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX) int i2d_re_X509_tbs(X509 *x, unsigned char **pp); @@ -573,29 +770,24 @@ void X509_get0_signature(const ASN1_BIT_STRING **psig, const X509_ALGOR **palg, const X509 *x); int X509_get_signature_nid(const X509 *x); -int X509_trusted(const X509 *x); +void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x); +void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x); + int X509_alias_set1(X509 *x, const unsigned char *name, int len); int X509_keyid_set1(X509 *x, const unsigned char *id, int len); unsigned char *X509_alias_get0(X509 *x, int *len); unsigned char *X509_keyid_get0(X509 *x, int *len); -int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, - int); -int X509_TRUST_set(int *t, int trust); -int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); -int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); -void X509_trust_clear(X509 *x); -void X509_reject_clear(X509 *x); - -STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); -STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); DECLARE_ASN1_FUNCTIONS(X509_REVOKED) DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) DECLARE_ASN1_FUNCTIONS(X509_CRL) +X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq); int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); int X509_CRL_get0_by_serial(X509_CRL *crl, - X509_REVOKED **ret, ASN1_INTEGER *serial); + X509_REVOKED **ret, const ASN1_INTEGER *serial); int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); X509_PKEY *X509_PKEY_new(void); @@ -609,37 +801,45 @@ X509_INFO *X509_INFO_new(void); void X509_INFO_free(X509_INFO *a); char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); - +OSSL_DEPRECATEDIN_3_0 int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, unsigned char *md, unsigned int *len); - -int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - char *data, EVP_PKEY *pkey, const EVP_MD *type); - +OSSL_DEPRECATEDIN_3_0 +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey, + const EVP_MD *type); +#endif int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, unsigned char *md, unsigned int *len); - -int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); - -int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, - EVP_PKEY *pkey, const EVP_MD *type); +int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey); +int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_MD_CTX *ctx); +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey, const EVP_MD *md); int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - void *asn, EVP_MD_CTX *ctx); + const void *data, EVP_MD_CTX *ctx); + +#define X509_VERSION_1 0 +#define X509_VERSION_2 1 +#define X509_VERSION_3 2 long X509_get_version(const X509 *x); int X509_set_version(X509 *x, long version); int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); ASN1_INTEGER *X509_get_serialNumber(X509 *x); const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); -int X509_set_issuer_name(X509 *x, X509_NAME *name); +int X509_set_issuer_name(X509 *x, const X509_NAME *name); X509_NAME *X509_get_issuer_name(const X509 *a); -int X509_set_subject_name(X509 *x, X509_NAME *name); +int X509_set_subject_name(X509 *x, const X509_NAME *name); X509_NAME *X509_get_subject_name(const X509 *a); const ASN1_TIME * X509_get0_notBefore(const X509 *x); ASN1_TIME *X509_getm_notBefore(const X509 *x); @@ -651,7 +851,7 @@ int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); int X509_up_ref(X509 *x); int X509_get_signature_type(const X509 *x); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_get_notBefore X509_getm_notBefore # define X509_get_notAfter X509_getm_notAfter # define X509_set_notBefore X509_set1_notBefore @@ -672,12 +872,13 @@ const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); EVP_PKEY *X509_get0_pubkey(const X509 *x); EVP_PKEY *X509_get_pubkey(X509 *x); ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); -int X509_certificate_type(const X509 *x, const EVP_PKEY *pubkey); + +#define X509_REQ_VERSION_1 0 long X509_REQ_get_version(const X509_REQ *req); int X509_REQ_set_version(X509_REQ *x, long version); X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); -int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); +int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name); void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, const X509_ALGOR **palg); void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig); @@ -692,9 +893,9 @@ int X509_REQ_extension_nid(int nid); int *X509_REQ_get_extension_nids(void); void X509_REQ_set_extension_nids(int *nids); STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); -int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, - int nid); -int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); +int X509_REQ_add_extensions_nid(X509_REQ *req, + const STACK_OF(X509_EXTENSION) *exts, int nid); +int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext); int X509_REQ_get_attr_count(const X509_REQ *req); int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, @@ -712,14 +913,17 @@ int X509_REQ_add1_attr_by_txt(X509_REQ *req, const char *attrname, int type, const unsigned char *bytes, int len); +#define X509_CRL_VERSION_1 0 +#define X509_CRL_VERSION_2 1 + int X509_CRL_set_version(X509_CRL *x, long version); -int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); +int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name); int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); int X509_CRL_sort(X509_CRL *crl); int X509_CRL_up_ref(X509_CRL *crl); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate # define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate #endif @@ -727,8 +931,10 @@ int X509_CRL_up_ref(X509_CRL *crl); long X509_CRL_get_version(const X509_CRL *crl); const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)) -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)) +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl); +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl); +#endif X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); @@ -770,10 +976,24 @@ unsigned long X509_issuer_name_hash_old(X509 *a); unsigned long X509_subject_name_hash_old(X509 *x); # endif +# define X509_ADD_FLAG_DEFAULT 0 +# define X509_ADD_FLAG_UP_REF 0x1 +# define X509_ADD_FLAG_PREPEND 0x2 +# define X509_ADD_FLAG_NO_DUP 0x4 +# define X509_ADD_FLAG_NO_SS 0x8 +int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags); +int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags); + int X509_cmp(const X509 *a, const X509 *b); int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); -unsigned long X509_NAME_hash(X509_NAME *x); -unsigned long X509_NAME_hash_old(X509_NAME *x); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL) +OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x, + const EVP_PKEY *pubkey); +#endif +unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx, + const char *propq, int *ok); +unsigned long X509_NAME_hash_old(const X509_NAME *x); int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); @@ -802,16 +1022,17 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, int X509_REQ_print(BIO *bp, X509_REQ *req); int X509_NAME_entry_count(const X509_NAME *name); -int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); -int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, +int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid, + char *buf, int len); +int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, char *buf, int len); /* * NOTE: you should be passing -1, not 0 as lastpos. The functions that use * lastpos, search after that position on. */ -int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); -int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, +int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, int lastpos); X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); @@ -845,7 +1066,7 @@ ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); -int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder, +int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder, size_t *pderlen); int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); @@ -972,12 +1193,10 @@ int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, const char *attrname, int type, const unsigned char *bytes, int len); -int X509_verify_cert(X509_STORE_CTX *ctx); - /* lookup a cert from a X509 STACK */ -X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, - ASN1_INTEGER *serial); -X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name, + const ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name); DECLARE_ASN1_FUNCTIONS(PBEPARAM) DECLARE_ASN1_FUNCTIONS(PBE2PARAM) @@ -988,14 +1207,25 @@ DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, const unsigned char *salt, int saltlen); +int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); X509_ALGOR *PKCS5_pbe_set(int alg, int iter, const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, unsigned char *salt, int saltlen); X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, unsigned char *salt, int saltlen, unsigned char *aiv, int prf_nid); +X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid, + OSSL_LIB_CTX *libctx); #ifndef OPENSSL_NO_SCRYPT X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, @@ -1006,13 +1236,18 @@ X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, int prf_nid, int keylen); +X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen, + OSSL_LIB_CTX *libctx); /* PKCS#8 utilities */ DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); -PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); +EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey); int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, int version, int ptype, void *pval, @@ -1023,26 +1258,20 @@ int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, const STACK_OF(X509_ATTRIBUTE) * PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr); int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, const unsigned char *bytes, int len); +int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj, + int type, const unsigned char *bytes, int len); + int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, int ptype, void *pval, unsigned char *penc, int penclen); int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, const unsigned char **pk, int *ppklen, - X509_ALGOR **pa, X509_PUBKEY *pub); - -int X509_check_trust(X509 *x, int id, int flags); -int X509_TRUST_get_count(void); -X509_TRUST *X509_TRUST_get0(int idx); -int X509_TRUST_get_by_id(int id); -int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), - const char *name, int arg1, void *arg2); -void X509_TRUST_cleanup(void); -int X509_TRUST_get_flags(const X509_TRUST *xp); -char *X509_TRUST_get0_name(const X509_TRUST *xp); -int X509_TRUST_get_trust(const X509_TRUST *xp); + X509_ALGOR **pa, const X509_PUBKEY *pub); +int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b); # ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h.in new file mode 100644 index 00000000..d4df2adc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h.in @@ -0,0 +1,1085 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509_H +# define OPENSSL_X509_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_H +# endif + +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# endif + +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Needed stacks for types defined in other headers */ +{- + generate_stack_macros("X509_NAME") + .generate_stack_macros("X509") + .generate_stack_macros("X509_REVOKED") + .generate_stack_macros("X509_CRL"); +-} + +/* Flags for X509_get_signature_info() */ +/* Signature info is valid */ +# define X509_SIG_INFO_VALID 0x1 +/* Signature is suitable for TLS use */ +# define X509_SIG_INFO_TLS 0x2 + +# define X509_FILETYPE_PEM 1 +# define X509_FILETYPE_ASN1 2 +# define X509_FILETYPE_DEFAULT 3 + +# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 +# define X509v3_KU_NON_REPUDIATION 0x0040 +# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 +# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 +# define X509v3_KU_KEY_AGREEMENT 0x0008 +# define X509v3_KU_KEY_CERT_SIGN 0x0004 +# define X509v3_KU_CRL_SIGN 0x0002 +# define X509v3_KU_ENCIPHER_ONLY 0x0001 +# define X509v3_KU_DECIPHER_ONLY 0x8000 +# define X509v3_KU_UNDEF 0xffff + +struct X509_algor_st { + ASN1_OBJECT *algorithm; + ASN1_TYPE *parameter; +} /* X509_ALGOR */ ; + +typedef STACK_OF(X509_ALGOR) X509_ALGORS; + +typedef struct X509_val_st { + ASN1_TIME *notBefore; + ASN1_TIME *notAfter; +} X509_VAL; + +typedef struct X509_sig_st X509_SIG; + +typedef struct X509_name_entry_st X509_NAME_ENTRY; + +{- + generate_stack_macros("X509_NAME_ENTRY"); +-} + +# define X509_EX_V_NETSCAPE_HACK 0x8000 +# define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st X509_EXTENSION; +{- + generate_stack_macros("X509_EXTENSION"); +-} +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; +typedef struct x509_attributes_st X509_ATTRIBUTE; +{- + generate_stack_macros("X509_ATTRIBUTE"); +-} +typedef struct X509_req_info_st X509_REQ_INFO; +typedef struct X509_req_st X509_REQ; +typedef struct x509_cert_aux_st X509_CERT_AUX; +typedef struct x509_cinf_st X509_CINF; + +/* Flags for X509_print_ex() */ + +# define X509_FLAG_COMPAT 0 +# define X509_FLAG_NO_HEADER 1L +# define X509_FLAG_NO_VERSION (1L << 1) +# define X509_FLAG_NO_SERIAL (1L << 2) +# define X509_FLAG_NO_SIGNAME (1L << 3) +# define X509_FLAG_NO_ISSUER (1L << 4) +# define X509_FLAG_NO_VALIDITY (1L << 5) +# define X509_FLAG_NO_SUBJECT (1L << 6) +# define X509_FLAG_NO_PUBKEY (1L << 7) +# define X509_FLAG_NO_EXTENSIONS (1L << 8) +# define X509_FLAG_NO_SIGDUMP (1L << 9) +# define X509_FLAG_NO_AUX (1L << 10) +# define X509_FLAG_NO_ATTRIBUTES (1L << 11) +# define X509_FLAG_NO_IDS (1L << 12) +# define X509_FLAG_EXTENSIONS_ONLY_KID (1L << 13) + +/* Flags specific to X509_NAME_print_ex() */ + +/* The field separator information */ + +# define XN_FLAG_SEP_MASK (0xf << 16) + +# define XN_FLAG_COMPAT 0/* Traditional; use old X509_NAME_print */ +# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ +# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ +# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ +# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ + +# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ + +/* How the field name is shown */ + +# define XN_FLAG_FN_MASK (0x3 << 21) + +# define XN_FLAG_FN_SN 0/* Object short name */ +# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ +# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ +# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ + +# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ + +/* + * This determines if we dump fields we don't recognise: RFC2253 requires + * this. + */ + +# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) + +# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 + * characters */ + +/* Complete set of RFC2253 flags */ + +# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ + XN_FLAG_SEP_COMMA_PLUS | \ + XN_FLAG_DN_REV | \ + XN_FLAG_FN_SN | \ + XN_FLAG_DUMP_UNKNOWN_FIELDS) + +/* readable oneline form */ + +# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ + ASN1_STRFLGS_ESC_QUOTE | \ + XN_FLAG_SEP_CPLUS_SPC | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_SN) + +/* readable multiline form */ + +# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + XN_FLAG_SEP_MULTILINE | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_LN | \ + XN_FLAG_FN_ALIGN) + +typedef struct X509_crl_info_st X509_CRL_INFO; + +typedef struct private_key_st { + int version; + /* The PKCS#8 data types */ + X509_ALGOR *enc_algor; + ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ + /* When decrypted, the following will not be NULL */ + EVP_PKEY *dec_pkey; + /* used to encrypt and decrypt */ + int key_length; + char *key_data; + int key_free; /* true if we should auto free key_data */ + /* expanded version of 'enc_algor' */ + EVP_CIPHER_INFO cipher; +} X509_PKEY; + +typedef struct X509_info_st { + X509 *x509; + X509_CRL *crl; + X509_PKEY *x_pkey; + EVP_CIPHER_INFO enc_cipher; + int enc_len; + char *enc_data; +} X509_INFO; +{- + generate_stack_macros("X509_INFO"); +-} + +/* + * The next 2 structures and their 8 routines are used to manipulate Netscape's + * spki structures - useful if you are writing a CA web page + */ +typedef struct Netscape_spkac_st { + X509_PUBKEY *pubkey; + ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ +} NETSCAPE_SPKAC; + +typedef struct Netscape_spki_st { + NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ + X509_ALGOR sig_algor; + ASN1_BIT_STRING *signature; +} NETSCAPE_SPKI; + +/* Netscape certificate sequence structure */ +typedef struct Netscape_certificate_sequence { + ASN1_OBJECT *type; + STACK_OF(X509) *certs; +} NETSCAPE_CERT_SEQUENCE; + +/*- Unused (and iv length is wrong) +typedef struct CBCParameter_st + { + unsigned char iv[8]; + } CBC_PARAM; +*/ + +/* Password based encryption structure */ + +typedef struct PBEPARAM_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *iter; +} PBEPARAM; + +/* Password based encryption V2 structures */ + +typedef struct PBE2PARAM_st { + X509_ALGOR *keyfunc; + X509_ALGOR *encryption; +} PBE2PARAM; + +typedef struct PBKDF2PARAM_st { +/* Usually OCTET STRING but could be anything */ + ASN1_TYPE *salt; + ASN1_INTEGER *iter; + ASN1_INTEGER *keylength; + X509_ALGOR *prf; +} PBKDF2PARAM; + +#ifndef OPENSSL_NO_SCRYPT +typedef struct SCRYPT_PARAMS_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *costParameter; + ASN1_INTEGER *blockSize; + ASN1_INTEGER *parallelizationParameter; + ASN1_INTEGER *keyLength; +} SCRYPT_PARAMS; +#endif + +#ifdef __cplusplus +} +#endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define X509_EXT_PACK_UNKNOWN 1 +# define X509_EXT_PACK_STRING 2 + +# define X509_extract_key(x) X509_get_pubkey(x)/*****/ +# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) +# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) + +void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); +X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), + int (*crl_free) (X509_CRL *crl), + int (*crl_lookup) (X509_CRL *crl, + X509_REVOKED **ret, + const + ASN1_INTEGER *serial, + const + X509_NAME *issuer), + int (*crl_verify) (X509_CRL *crl, + EVP_PKEY *pk)); +void X509_CRL_METHOD_free(X509_CRL_METHOD *m); + +void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); +void *X509_CRL_get_meth_data(X509_CRL *crl); + +const char *X509_verify_cert_error_string(long n); + +int X509_verify(X509 *a, EVP_PKEY *r); +int X509_self_signed(X509 *cert, int verify_signature); + +int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); +int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); +int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); + +NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); +char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); +EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); +int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); + +int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); + +int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); +int X509_signature_print(BIO *bp, const X509_ALGOR *alg, + const ASN1_STRING *sig); + +int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); +int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); +int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); +int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); + +int X509_pubkey_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert, + EVP_MD **md_used, int *md_is_fallback); +int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); + +X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include /* OSSL_HTTP_REQ_CTX_nbio_d2i */ +# define X509_http_nbio(rctx, pcert) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509)) +# define X509_CRL_http_nbio(rctx, pcrl) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL)) +# endif + +# ifndef OPENSSL_NO_STDIO +X509 *d2i_X509_fp(FILE *fp, X509 **x509); +int i2d_X509_fp(FILE *fp, const X509 *x509); +X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); +int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl); +X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); +int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); +int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); +int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); +# endif + +X509 *d2i_X509_bio(BIO *bp, X509 **x509); +int i2d_X509_bio(BIO *bp, const X509 *x509); +X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); +int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl); +X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); +int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa); +# endif +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); +int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); +int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); + +DECLARE_ASN1_DUP_FUNCTION(X509) +DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR) +DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) +DECLARE_ASN1_DUP_FUNCTION(X509_CRL) +DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION) +DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY) +DECLARE_ASN1_DUP_FUNCTION(X509_REQ) +DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED) +int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, + void *pval); +void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, + const void **ppval, const X509_ALGOR *algor); +void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); +int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); +int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); + +DECLARE_ASN1_DUP_FUNCTION(X509_NAME) +DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) + +int X509_cmp_time(const ASN1_TIME *s, time_t *t); +int X509_cmp_current_time(const ASN1_TIME *s); +int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm, + const ASN1_TIME *start, const ASN1_TIME *end); +ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); +ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, + int offset_day, long offset_sec, time_t *t); +ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); + +const char *X509_get_default_cert_area(void); +const char *X509_get_default_cert_dir(void); +const char *X509_get_default_cert_file(void); +const char *X509_get_default_cert_dir_env(void); +const char *X509_get_default_cert_file_env(void); +const char *X509_get_default_private_dir(void); + +X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); + +DECLARE_ASN1_FUNCTIONS(X509_ALGOR) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) +DECLARE_ASN1_FUNCTIONS(X509_VAL) + +DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) + +X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); +EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); +long X509_get_pathlen(X509 *x); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY) +EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY) +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY) +# endif +# endif + +DECLARE_ASN1_FUNCTIONS(X509_SIG) +void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg, + const ASN1_OCTET_STRING **pdigest); +void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, + ASN1_OCTET_STRING **pdigest); + +DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) +DECLARE_ASN1_FUNCTIONS(X509_REQ) +X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) +X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); + +DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) + +DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) + +DECLARE_ASN1_FUNCTIONS(X509_NAME) + +int X509_NAME_set(X509_NAME **xn, const X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(X509_CINF) +DECLARE_ASN1_FUNCTIONS(X509) +X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) + +#define X509_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) +int X509_set_ex_data(X509 *r, int idx, void *arg); +void *X509_get_ex_data(const X509 *r, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX) + +int i2d_re_X509_tbs(X509 *x, unsigned char **pp); + +int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, + int *secbits, uint32_t *flags); +void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, + int secbits, uint32_t flags); + +int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, + uint32_t *flags); + +void X509_get0_signature(const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg, const X509 *x); +int X509_get_signature_nid(const X509 *x); + +void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x); +void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x); + +int X509_alias_set1(X509 *x, const unsigned char *name, int len); +int X509_keyid_set1(X509 *x, const unsigned char *id, int len); +unsigned char *X509_alias_get0(X509 *x, int *len); +unsigned char *X509_keyid_get0(X509 *x, int *len); + +DECLARE_ASN1_FUNCTIONS(X509_REVOKED) +DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) +DECLARE_ASN1_FUNCTIONS(X509_CRL) +X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +int X509_CRL_get0_by_serial(X509_CRL *crl, + X509_REVOKED **ret, const ASN1_INTEGER *serial); +int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); + +X509_PKEY *X509_PKEY_new(void); +void X509_PKEY_free(X509_PKEY *a); + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) + +X509_INFO *X509_INFO_new(void); +void X509_INFO_free(X509_INFO *a); +char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, + unsigned char *md, unsigned int *len); +OSSL_DEPRECATEDIN_3_0 +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey, + const EVP_MD *type); +#endif +int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, + unsigned char *md, unsigned int *len); +int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey); +int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_MD_CTX *ctx); +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey, const EVP_MD *md); +int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, EVP_MD_CTX *ctx); + +#define X509_VERSION_1 0 +#define X509_VERSION_2 1 +#define X509_VERSION_3 2 + +long X509_get_version(const X509 *x); +int X509_set_version(X509 *x, long version); +int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +ASN1_INTEGER *X509_get_serialNumber(X509 *x); +const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); +int X509_set_issuer_name(X509 *x, const X509_NAME *name); +X509_NAME *X509_get_issuer_name(const X509 *a); +int X509_set_subject_name(X509 *x, const X509_NAME *name); +X509_NAME *X509_get_subject_name(const X509 *a); +const ASN1_TIME * X509_get0_notBefore(const X509 *x); +ASN1_TIME *X509_getm_notBefore(const X509 *x); +int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); +const ASN1_TIME *X509_get0_notAfter(const X509 *x); +ASN1_TIME *X509_getm_notAfter(const X509 *x); +int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +int X509_up_ref(X509 *x); +int X509_get_signature_type(const X509 *x); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_get_notBefore X509_getm_notBefore +# define X509_get_notAfter X509_getm_notAfter +# define X509_set_notBefore X509_set1_notBefore +# define X509_set_notAfter X509_set1_notAfter +#endif + + +/* + * This one is only used so that a binary form can output, as in + * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf) + */ +X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); +const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); +void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid, + const ASN1_BIT_STRING **psuid); +const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); + +EVP_PKEY *X509_get0_pubkey(const X509 *x); +EVP_PKEY *X509_get_pubkey(X509 *x); +ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); + +#define X509_REQ_VERSION_1 0 + +long X509_REQ_get_version(const X509_REQ *req); +int X509_REQ_set_version(X509_REQ *x, long version); +X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); +int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name); +void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig); +int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg); +int X509_REQ_get_signature_nid(const X509_REQ *req); +int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); +int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req); +int X509_REQ_extension_nid(int nid); +int *X509_REQ_get_extension_nids(void); +void X509_REQ_set_extension_nids(int *nids); +STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); +int X509_REQ_add_extensions_nid(X509_REQ *req, + const STACK_OF(X509_EXTENSION) *exts, int nid); +int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext); +int X509_REQ_get_attr_count(const X509_REQ *req); +int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); +int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); +X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); +int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); +int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_NID(X509_REQ *req, + int nid, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_txt(X509_REQ *req, + const char *attrname, int type, + const unsigned char *bytes, int len); + +#define X509_CRL_VERSION_1 0 +#define X509_CRL_VERSION_2 1 + +int X509_CRL_set_version(X509_CRL *x, long version); +int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name); +int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_sort(X509_CRL *crl); +int X509_CRL_up_ref(X509_CRL *crl); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate +# define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate +#endif + +long X509_CRL_get_version(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl); +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl); +#endif +X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); +const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); +STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); +void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_CRL_get_signature_nid(const X509_CRL *crl); +int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp); + +const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x); +int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x); +int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); +const STACK_OF(X509_EXTENSION) * +X509_REVOKED_get0_extensions(const X509_REVOKED *r); + +X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, + EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); + +int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); + +int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey); +int X509_chain_check_suiteb(int *perror_depth, + X509 *x, STACK_OF(X509) *chain, + unsigned long flags); +int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); +STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); + +int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_and_serial_hash(X509 *a); + +int X509_issuer_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_name_hash(X509 *a); + +int X509_subject_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_subject_name_hash(X509 *x); + +# ifndef OPENSSL_NO_MD5 +unsigned long X509_issuer_name_hash_old(X509 *a); +unsigned long X509_subject_name_hash_old(X509 *x); +# endif + +# define X509_ADD_FLAG_DEFAULT 0 +# define X509_ADD_FLAG_UP_REF 0x1 +# define X509_ADD_FLAG_PREPEND 0x2 +# define X509_ADD_FLAG_NO_DUP 0x4 +# define X509_ADD_FLAG_NO_SS 0x8 +int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags); +int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags); + +int X509_cmp(const X509 *a, const X509 *b); +int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL) +OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x, + const EVP_PKEY *pubkey); +#endif +unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx, + const char *propq, int *ok); +unsigned long X509_NAME_hash_old(const X509_NAME *x); + +int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); +int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); +int X509_aux_print(BIO *out, X509 *x, int indent); +# ifndef OPENSSL_NO_STDIO +int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print_fp(FILE *bp, X509 *x); +int X509_CRL_print_fp(FILE *bp, X509_CRL *x); +int X509_REQ_print_fp(FILE *bp, X509_REQ *req); +int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, + unsigned long flags); +# endif + +int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); +int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, + unsigned long flags); +int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print(BIO *bp, X509 *x); +int X509_ocspid_print(BIO *bp, X509 *x); +int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag); +int X509_CRL_print(BIO *bp, X509_CRL *x); +int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, + unsigned long cflag); +int X509_REQ_print(BIO *bp, X509_REQ *req); + +int X509_NAME_entry_count(const X509_NAME *name); +int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid, + char *buf, int len); +int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, + char *buf, int len); + +/* + * NOTE: you should be passing -1, not 0 as lastpos. The functions that use + * lastpos, search after that position on. + */ +int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, + int lastpos); +X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); +X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); +int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, + int loc, int set); +int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len, int loc, + int set); +int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, + const char *field, int type, + const unsigned char *bytes, + int len); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, + int type, + const unsigned char *bytes, + int len); +int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, + int len); +int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj); +int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, + const unsigned char *bytes, int len); +ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); +ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); +int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); + +int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder, + size_t *pderlen); + +int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); +int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, + int nid, int lastpos); +int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, + const ASN1_OBJECT *obj, int lastpos); +int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, + int crit, int lastpos); +X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); +X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); +STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, + X509_EXTENSION *ex, int loc); + +int X509_get_ext_count(const X509 *x); +int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); +int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); +int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); +X509_EXTENSION *X509_get_ext(const X509 *x, int loc); +X509_EXTENSION *X509_delete_ext(X509 *x, int loc); +int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); +void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx); +int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_CRL_get_ext_count(const X509_CRL *x); +int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); +int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); +X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc); +X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); +int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); +void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx); +int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_REVOKED_get_ext_count(const X509_REVOKED *x); +int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos); +int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, + int lastpos); +X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc); +X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); +int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); +void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit, + int *idx); +int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, + unsigned long flags); + +X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, + int nid, int crit, + ASN1_OCTET_STRING *data); +X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, + const ASN1_OBJECT *obj, int crit, + ASN1_OCTET_STRING *data); +int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj); +int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); +int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); +ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); +ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); +int X509_EXTENSION_get_critical(const X509_EXTENSION *ex); + +int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); +int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, + int lastpos); +int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); +X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, + X509_ATTRIBUTE *attr); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) + **x, const ASN1_OBJECT *obj, + int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) + **x, int nid, int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) + **x, const char *attrname, + int type, + const unsigned char *bytes, + int len); +void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x, + const ASN1_OBJECT *obj, int lastpos, int type); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, + const ASN1_OBJECT *obj, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, + const char *atrname, int type, + const unsigned char *bytes, + int len); +int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); +int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, + const void *data, int len); +void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, + void *data); +int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr); +ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); +ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); + +int EVP_PKEY_get_attr_count(const EVP_PKEY *key); +int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); +int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); +X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); +int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); +int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, + int nid, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, + const char *attrname, int type, + const unsigned char *bytes, int len); + +/* lookup a cert from a X509 STACK */ +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name, + const ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(PBEPARAM) +DECLARE_ASN1_FUNCTIONS(PBE2PARAM) +DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) +#ifndef OPENSSL_NO_SCRYPT +DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) +#endif + +int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen); +int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + +X509_ALGOR *PKCS5_pbe_set(int alg, int iter, + const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + +X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid); +X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid, + OSSL_LIB_CTX *libctx); + +#ifndef OPENSSL_NO_SCRYPT +X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, + const unsigned char *salt, int saltlen, + unsigned char *aiv, uint64_t N, uint64_t r, + uint64_t p); +#endif + +X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen); +X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen, + OSSL_LIB_CTX *libctx); + +/* PKCS#8 utilities */ + +DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) + +EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); +EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey); + +int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, + int version, int ptype, void *pval, + unsigned char *penc, int penclen); +int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8); + +const STACK_OF(X509_ATTRIBUTE) * +PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr); +int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, + const unsigned char *bytes, int len); +int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj, + int type, const unsigned char *bytes, int len); + + +int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, + int ptype, void *pval, + unsigned char *penc, int penclen); +int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, const X509_PUBKEY *pub); +int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h index 25c79f1b..29b0e147 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h @@ -1,19 +1,30 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509_vfy.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509_VFY_H -# define HEADER_X509_VFY_H + + +#ifndef OPENSSL_X509_VFY_H +# define OPENSSL_X509_VFY_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_VFY_H +# endif /* * Protect against recursion, x509.h and x509_vfy.h each include the other. */ -# ifndef HEADER_X509_H +# ifndef OPENSSL_X509_H # include # endif @@ -49,18 +60,190 @@ typedef enum { X509_LU_X509, X509_LU_CRL } X509_LOOKUP_TYPE; -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 #define X509_LU_RETRY -1 #define X509_LU_FAIL 0 #endif -DEFINE_STACK_OF(X509_LOOKUP) -DEFINE_STACK_OF(X509_OBJECT) -DEFINE_STACK_OF(X509_VERIFY_PARAM) +SKM_DEFINE_STACK_OF_INTERNAL(X509_LOOKUP, X509_LOOKUP, X509_LOOKUP) +#define sk_X509_LOOKUP_num(sk) OPENSSL_sk_num(ossl_check_const_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_value(sk, idx) ((X509_LOOKUP *)OPENSSL_sk_value(ossl_check_const_X509_LOOKUP_sk_type(sk), (idx))) +#define sk_X509_LOOKUP_new(cmp) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new(ossl_check_X509_LOOKUP_compfunc_type(cmp))) +#define sk_X509_LOOKUP_new_null() ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_null()) +#define sk_X509_LOOKUP_new_reserve(cmp, n) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_reserve(ossl_check_X509_LOOKUP_compfunc_type(cmp), (n))) +#define sk_X509_LOOKUP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_LOOKUP_sk_type(sk), (n)) +#define sk_X509_LOOKUP_free(sk) OPENSSL_sk_free(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_zero(sk) OPENSSL_sk_zero(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_delete(sk, i) ((X509_LOOKUP *)OPENSSL_sk_delete(ossl_check_X509_LOOKUP_sk_type(sk), (i))) +#define sk_X509_LOOKUP_delete_ptr(sk, ptr) ((X509_LOOKUP *)OPENSSL_sk_delete_ptr(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr))) +#define sk_X509_LOOKUP_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_pop(sk) ((X509_LOOKUP *)OPENSSL_sk_pop(ossl_check_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_shift(sk) ((X509_LOOKUP *)OPENSSL_sk_shift(ossl_check_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_LOOKUP_sk_type(sk),ossl_check_X509_LOOKUP_freefunc_type(freefunc)) +#define sk_X509_LOOKUP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), (idx)) +#define sk_X509_LOOKUP_set(sk, idx, ptr) ((X509_LOOKUP *)OPENSSL_sk_set(ossl_check_X509_LOOKUP_sk_type(sk), (idx), ossl_check_X509_LOOKUP_type(ptr))) +#define sk_X509_LOOKUP_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), pnum) +#define sk_X509_LOOKUP_sort(sk) OPENSSL_sk_sort(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_dup(sk) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_dup(ossl_check_const_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_copyfunc_type(copyfunc), ossl_check_X509_LOOKUP_freefunc_type(freefunc))) +#define sk_X509_LOOKUP_set_cmp_func(sk, cmp) ((sk_X509_LOOKUP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_OBJECT, X509_OBJECT, X509_OBJECT) +#define sk_X509_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_value(sk, idx) ((X509_OBJECT *)OPENSSL_sk_value(ossl_check_const_X509_OBJECT_sk_type(sk), (idx))) +#define sk_X509_OBJECT_new(cmp) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new(ossl_check_X509_OBJECT_compfunc_type(cmp))) +#define sk_X509_OBJECT_new_null() ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_null()) +#define sk_X509_OBJECT_new_reserve(cmp, n) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_X509_OBJECT_compfunc_type(cmp), (n))) +#define sk_X509_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_OBJECT_sk_type(sk), (n)) +#define sk_X509_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_delete(sk, i) ((X509_OBJECT *)OPENSSL_sk_delete(ossl_check_X509_OBJECT_sk_type(sk), (i))) +#define sk_X509_OBJECT_delete_ptr(sk, ptr) ((X509_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr))) +#define sk_X509_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_pop(sk) ((X509_OBJECT *)OPENSSL_sk_pop(ossl_check_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_shift(sk) ((X509_OBJECT *)OPENSSL_sk_shift(ossl_check_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_OBJECT_sk_type(sk),ossl_check_X509_OBJECT_freefunc_type(freefunc)) +#define sk_X509_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), (idx)) +#define sk_X509_OBJECT_set(sk, idx, ptr) ((X509_OBJECT *)OPENSSL_sk_set(ossl_check_X509_OBJECT_sk_type(sk), (idx), ossl_check_X509_OBJECT_type(ptr))) +#define sk_X509_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), pnum) +#define sk_X509_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_dup(sk) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_copyfunc_type(copyfunc), ossl_check_X509_OBJECT_freefunc_type(freefunc))) +#define sk_X509_OBJECT_set_cmp_func(sk, cmp) ((sk_X509_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_VERIFY_PARAM, X509_VERIFY_PARAM, X509_VERIFY_PARAM) +#define sk_X509_VERIFY_PARAM_num(sk) OPENSSL_sk_num(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_value(sk, idx) ((X509_VERIFY_PARAM *)OPENSSL_sk_value(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), (idx))) +#define sk_X509_VERIFY_PARAM_new(cmp) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) +#define sk_X509_VERIFY_PARAM_new_null() ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_null()) +#define sk_X509_VERIFY_PARAM_new_reserve(cmp, n) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_reserve(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp), (n))) +#define sk_X509_VERIFY_PARAM_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (n)) +#define sk_X509_VERIFY_PARAM_free(sk) OPENSSL_sk_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_zero(sk) OPENSSL_sk_zero(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_delete(sk, i) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (i))) +#define sk_X509_VERIFY_PARAM_delete_ptr(sk, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete_ptr(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr))) +#define sk_X509_VERIFY_PARAM_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_pop(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_pop(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_shift(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_shift(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk),ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc)) +#define sk_X509_VERIFY_PARAM_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), (idx)) +#define sk_X509_VERIFY_PARAM_set(sk, idx, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_set(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (idx), ossl_check_X509_VERIFY_PARAM_type(ptr))) +#define sk_X509_VERIFY_PARAM_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), pnum) +#define sk_X509_VERIFY_PARAM_sort(sk) OPENSSL_sk_sort(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_dup(sk) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_dup(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_copyfunc_type(copyfunc), ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc))) +#define sk_X509_VERIFY_PARAM_set_cmp_func(sk, cmp) ((sk_X509_VERIFY_PARAM_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) + + +/* This is used for a table of trust checking functions */ +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; +SKM_DEFINE_STACK_OF_INTERNAL(X509_TRUST, X509_TRUST, X509_TRUST) +#define sk_X509_TRUST_num(sk) OPENSSL_sk_num(ossl_check_const_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_value(sk, idx) ((X509_TRUST *)OPENSSL_sk_value(ossl_check_const_X509_TRUST_sk_type(sk), (idx))) +#define sk_X509_TRUST_new(cmp) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new(ossl_check_X509_TRUST_compfunc_type(cmp))) +#define sk_X509_TRUST_new_null() ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_null()) +#define sk_X509_TRUST_new_reserve(cmp, n) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_reserve(ossl_check_X509_TRUST_compfunc_type(cmp), (n))) +#define sk_X509_TRUST_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_TRUST_sk_type(sk), (n)) +#define sk_X509_TRUST_free(sk) OPENSSL_sk_free(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_zero(sk) OPENSSL_sk_zero(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_delete(sk, i) ((X509_TRUST *)OPENSSL_sk_delete(ossl_check_X509_TRUST_sk_type(sk), (i))) +#define sk_X509_TRUST_delete_ptr(sk, ptr) ((X509_TRUST *)OPENSSL_sk_delete_ptr(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr))) +#define sk_X509_TRUST_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_pop(sk) ((X509_TRUST *)OPENSSL_sk_pop(ossl_check_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_shift(sk) ((X509_TRUST *)OPENSSL_sk_shift(ossl_check_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_TRUST_sk_type(sk),ossl_check_X509_TRUST_freefunc_type(freefunc)) +#define sk_X509_TRUST_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), (idx)) +#define sk_X509_TRUST_set(sk, idx, ptr) ((X509_TRUST *)OPENSSL_sk_set(ossl_check_X509_TRUST_sk_type(sk), (idx), ossl_check_X509_TRUST_type(ptr))) +#define sk_X509_TRUST_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), pnum) +#define sk_X509_TRUST_sort(sk) OPENSSL_sk_sort(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_dup(sk) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_dup(ossl_check_const_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_copyfunc_type(copyfunc), ossl_check_X509_TRUST_freefunc_type(freefunc))) +#define sk_X509_TRUST_set_cmp_func(sk, cmp) ((sk_X509_TRUST_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_compfunc_type(cmp))) + + +/* standard trust ids */ +# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard rejection OID and as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* check_trust return codes */ +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +int X509_TRUST_set(int *t, int trust); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const X509_TRUST *xp); + +int X509_trusted(const X509 *x); +int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); + +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_check_trust(X509 *x, int id, int flags); + +int X509_verify_cert(X509_STORE_CTX *ctx); +int X509_STORE_CTX_verify(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs, + X509_STORE *store, int with_self_signed, + OSSL_LIB_CTX *libctx, const char *propq); int X509_STORE_set_depth(X509_STORE *store, int depth); typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); @@ -73,13 +256,14 @@ typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); -typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); -typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); +typedef STACK_OF(X509) + *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef STACK_OF(X509_CRL) + *(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx, + const X509_NAME *nm); typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); - void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_STORE_CTX_set_app_data(ctx,data) \ @@ -89,6 +273,8 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_L_FILE_LOAD 1 # define X509_L_ADD_DIR 2 +# define X509_L_ADD_STORE 3 +# define X509_L_LOAD_STORE 4 # define X509_LOOKUP_load_file(x,name,type) \ X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) @@ -96,102 +282,138 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_LOOKUP_add_dir(x,name,type) \ X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) -# define X509_V_OK 0 -# define X509_V_ERR_UNSPECIFIED 1 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 -# define X509_V_ERR_UNABLE_TO_GET_CRL 3 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 -# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 -# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 -# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 -# define X509_V_ERR_CERT_NOT_YET_VALID 9 -# define X509_V_ERR_CERT_HAS_EXPIRED 10 -# define X509_V_ERR_CRL_NOT_YET_VALID 11 -# define X509_V_ERR_CRL_HAS_EXPIRED 12 -# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 -# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 -# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 -# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 -# define X509_V_ERR_OUT_OF_MEM 17 -# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 -# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 -# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 -# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 -# define X509_V_ERR_CERT_REVOKED 23 -# define X509_V_ERR_INVALID_CA 24 -# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 -# define X509_V_ERR_INVALID_PURPOSE 26 -# define X509_V_ERR_CERT_UNTRUSTED 27 -# define X509_V_ERR_CERT_REJECTED 28 -/* These are 'informational' when looking for issuer cert */ -# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 -# define X509_V_ERR_AKID_SKID_MISMATCH 30 -# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 -# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 -# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 -# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 -# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 -# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 -# define X509_V_ERR_INVALID_NON_CA 37 -# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 -# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 -# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 -# define X509_V_ERR_INVALID_EXTENSION 41 -# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 -# define X509_V_ERR_NO_EXPLICIT_POLICY 43 -# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 -# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 -# define X509_V_ERR_UNNESTED_RESOURCE 46 -# define X509_V_ERR_PERMITTED_VIOLATION 47 -# define X509_V_ERR_EXCLUDED_VIOLATION 48 -# define X509_V_ERR_SUBTREE_MINMAX 49 -/* The application is not happy */ -# define X509_V_ERR_APPLICATION_VERIFICATION 50 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 -# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 -# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 -/* Another issuer check debug option */ -# define X509_V_ERR_PATH_LOOP 55 -/* Suite B mode algorithm violation */ -# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 -# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 -# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 -# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 -# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 -# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 -/* Host, email and IP check errors */ -# define X509_V_ERR_HOSTNAME_MISMATCH 62 -# define X509_V_ERR_EMAIL_MISMATCH 63 -# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 -/* DANE TLSA errors */ -# define X509_V_ERR_DANE_NO_MATCH 65 -/* security level errors */ -# define X509_V_ERR_EE_KEY_TOO_SMALL 66 -# define X509_V_ERR_CA_KEY_TOO_SMALL 67 -# define X509_V_ERR_CA_MD_TOO_WEAK 68 -/* Caller error */ -# define X509_V_ERR_INVALID_CALL 69 -/* Issuer lookup error */ -# define X509_V_ERR_STORE_LOOKUP 70 -/* Certificate transparency */ -# define X509_V_ERR_NO_VALID_SCTS 71 +# define X509_LOOKUP_add_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_STORE,(name),0,NULL) -# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 +# define X509_LOOKUP_load_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_LOAD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_file_ex(x, name, type, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_FILE_LOAD, (name), (long)(type), NULL,\ + (libctx), (propq)) + +# define X509_LOOKUP_load_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_LOAD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_LOOKUP_add_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 + +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 /* OCSP status errors */ -# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ -# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ -# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ -# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 76 -# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 77 -# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 78 -# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 79 +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ + +# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 76 +# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 77 + +/* Errors in case a check in X509_V_FLAG_X509_STRICT mode fails */ +# define X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY 78 +# define X509_V_ERR_INVALID_CA 79 +# define X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA 80 +# define X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN 81 +# define X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA 82 +# define X509_V_ERR_ISSUER_NAME_EMPTY 83 +# define X509_V_ERR_SUBJECT_NAME_EMPTY 84 +# define X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER 85 +# define X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER 86 +# define X509_V_ERR_EMPTY_SUBJECT_ALT_NAME 87 +# define X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL 88 +# define X509_V_ERR_CA_BCONS_NOT_CRITICAL 89 +# define X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL 90 +# define X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL 91 +# define X509_V_ERR_CA_CERT_MISSING_KEY_USAGE 92 +# define X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3 93 +# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94 /* Certificate verify flags */ - -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ # endif /* Use check time instead of current time */ @@ -254,10 +476,10 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); | X509_V_FLAG_INHIBIT_MAP) int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, X509_OBJECT *x); int X509_OBJECT_up_ref_count(X509_OBJECT *a); @@ -266,102 +488,106 @@ void X509_OBJECT_free(X509_OBJECT *a); X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); -X509_CRL *X509_OBJECT_get0_X509_CRL(X509_OBJECT *a); +X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); void X509_STORE_free(X509_STORE *v); int X509_STORE_lock(X509_STORE *ctx); int X509_STORE_unlock(X509_STORE *ctx); int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); - -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); -STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); +STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, + const X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st, + const X509_NAME *nm); int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); +int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); +X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); #define X509_STORE_set_verify_func(ctx, func) \ X509_STORE_set_verify((ctx),(func)) void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_fn verify); -X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(const X509_STORE *ctx); void X509_STORE_set_verify_cb(X509_STORE *ctx, X509_STORE_CTX_verify_cb verify_cb); # define X509_STORE_set_verify_cb_func(ctx,func) \ X509_STORE_set_verify_cb((ctx),(func)) -X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE *ctx); +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(const X509_STORE *ctx); void X509_STORE_set_get_issuer(X509_STORE *ctx, X509_STORE_CTX_get_issuer_fn get_issuer); -X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *ctx); void X509_STORE_set_check_issued(X509_STORE *ctx, X509_STORE_CTX_check_issued_fn check_issued); -X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *ctx); void X509_STORE_set_check_revocation(X509_STORE *ctx, X509_STORE_CTX_check_revocation_fn check_revocation); -X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE *ctx); +X509_STORE_CTX_check_revocation_fn + X509_STORE_get_check_revocation(const X509_STORE *ctx); void X509_STORE_set_get_crl(X509_STORE *ctx, X509_STORE_CTX_get_crl_fn get_crl); -X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *ctx); void X509_STORE_set_check_crl(X509_STORE *ctx, X509_STORE_CTX_check_crl_fn check_crl); -X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *ctx); void X509_STORE_set_cert_crl(X509_STORE *ctx, X509_STORE_CTX_cert_crl_fn cert_crl); -X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *ctx); void X509_STORE_set_check_policy(X509_STORE *ctx, X509_STORE_CTX_check_policy_fn check_policy); -X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *ctx); void X509_STORE_set_lookup_certs(X509_STORE *ctx, X509_STORE_CTX_lookup_certs_fn lookup_certs); -X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *ctx); void X509_STORE_set_lookup_crls(X509_STORE *ctx, X509_STORE_CTX_lookup_crls_fn lookup_crls); #define X509_STORE_set_lookup_crls_cb(ctx, func) \ X509_STORE_set_lookup_crls((ctx), (func)) -X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(const X509_STORE *ctx); void X509_STORE_set_cleanup(X509_STORE *ctx, X509_STORE_CTX_cleanup_fn cleanup); -X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *ctx); #define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(X509_STORE *ctx, int idx); +void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); X509_STORE_CTX *X509_STORE_CTX_new(void); int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); void X509_STORE_CTX_free(X509_STORE_CTX *ctx); -int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, - X509 *x509, STACK_OF(X509) *chain); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store, + X509 *target, STACK_OF(X509) *untrusted); void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); -X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); -X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); -STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx); +X509_STORE *X509_STORE_CTX_get0_store(const X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_cb verify); -X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); -X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); -X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(const X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain # define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted # define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack @@ -377,17 +603,28 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); X509_LOOKUP_METHOD *X509_LOOKUP_file(void); +X509_LOOKUP_METHOD *X509_LOOKUP_store(void); typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret); +typedef int (*X509_LOOKUP_ctrl_ex_fn)( + X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret, + OSSL_LIB_CTX *libctx, const char *propq); + typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, + const X509_NAME *name, X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_subject_ex_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, + const char *propq); typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, - ASN1_INTEGER *serial, + const X509_NAME *name, + const ASN1_INTEGER *serial, X509_OBJECT *ret); typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, @@ -451,26 +688,37 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); -int X509_STORE_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); +int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret); +int X509_LOOKUP_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, + char **ret, OSSL_LIB_CTX *libctx, const char *propq); int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); void X509_LOOKUP_free(X509_LOOKUP *ctx); int X509_LOOKUP_init(X509_LOOKUP *ctx); int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); + const X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_subject_ex(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, const char *propq); int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, ASN1_INTEGER *serial, + const X509_NAME *name, + const ASN1_INTEGER *serial, X509_OBJECT *ret); int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, const unsigned char *bytes, int len, @@ -482,28 +730,42 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); +int X509_STORE_load_file(X509_STORE *ctx, const char *file); +int X509_STORE_load_path(X509_STORE *ctx, const char *path); +int X509_STORE_load_store(X509_STORE *ctx, const char *store); int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, const char *dir); + const char *file, + const char *dir); int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file_ex(X509_STORE *ctx, const char *file, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_store_ex(X509_STORE *ctx, const char *store, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_locations_ex(X509_STORE *ctx, const char *file, + const char *dir, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, + const char *propq); + #define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); -void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); -int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); +void *X509_STORE_CTX_get_ex_data(const X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); -int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); -X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); -X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); -X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); +X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target); void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); -void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, @@ -512,11 +774,11 @@ void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, time_t t); -X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_num_untrusted(X509_STORE_CTX *ctx); +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx); -X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); @@ -540,7 +802,7 @@ int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, unsigned long flags); int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, unsigned long flags); -unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); +unsigned long X509_VERIFY_PARAM_get_flags(const X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); @@ -556,6 +818,7 @@ int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, uint32_t flags); uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); +char *X509_VERIFY_PARAM_get0_host(X509_VERIFY_PARAM *param, int idx); int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen); int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, @@ -563,10 +826,12 @@ int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned int flags); unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); -char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_peername(const X509_VERIFY_PARAM *param); void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_email(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, const char *email, size_t emaillen); +char *X509_VERIFY_PARAM_get1_ip_asc(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, const unsigned char *ip, size_t iplen); int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, @@ -605,26 +870,23 @@ int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, int i); -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const - X509_POLICY_TREE - *tree); +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree); -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const - X509_POLICY_TREE - *tree); +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree); int X509_policy_level_node_count(X509_POLICY_LEVEL *level); -X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, +X509_POLICY_NODE *X509_policy_level_get0_node(const X509_POLICY_LEVEL *level, int i); const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); -STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const - X509_POLICY_NODE - *node); -const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE - *node); +STACK_OF(POLICYQUALINFO) + *X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node); +const X509_POLICY_NODE + *X509_policy_node_get0_parent(const X509_POLICY_NODE *node); #ifdef __cplusplus } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h.in new file mode 100644 index 00000000..80f18bd7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h.in @@ -0,0 +1,797 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509_VFY_H +# define OPENSSL_X509_VFY_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_VFY_H +# endif + +/* + * Protect against recursion, x509.h and x509_vfy.h each include the other. + */ +# ifndef OPENSSL_X509_H +# include +# endif + +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- +SSL_CTX -> X509_STORE + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + +SSL -> X509_STORE_CTX + ->X509_STORE + +The X509_STORE holds the tables etc for verification stuff. +A X509_STORE_CTX is used while validating a single certificate. +The X509_STORE has X509_LOOKUPs for looking up certs. +The X509_STORE then calls a function to actually verify the +certificate chain. +*/ + +typedef enum { + X509_LU_NONE = 0, + X509_LU_X509, X509_LU_CRL +} X509_LOOKUP_TYPE; + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +#define X509_LU_RETRY -1 +#define X509_LU_FAIL 0 +#endif + +{- + generate_stack_macros("X509_LOOKUP") + .generate_stack_macros("X509_OBJECT") + .generate_stack_macros("X509_VERIFY_PARAM"); +-} + +/* This is used for a table of trust checking functions */ +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; +{- + generate_stack_macros("X509_TRUST"); +-} + +/* standard trust ids */ +# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard rejection OID and as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* check_trust return codes */ +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +int X509_TRUST_set(int *t, int trust); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const X509_TRUST *xp); + +int X509_trusted(const X509 *x); +int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); + +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_check_trust(X509 *x, int id, int flags); + +int X509_verify_cert(X509_STORE_CTX *ctx); +int X509_STORE_CTX_verify(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs, + X509_STORE *store, int with_self_signed, + OSSL_LIB_CTX *libctx, const char *propq); + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, + X509_STORE_CTX *ctx, X509 *x); +typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, + X509 *x, X509 *issuer); +typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL **crl, X509 *x); +typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); +typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL *crl, X509 *x); +typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); +typedef STACK_OF(X509) + *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef STACK_OF(X509_CRL) + *(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); + +void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); + +# define X509_STORE_CTX_set_app_data(ctx,data) \ + X509_STORE_CTX_set_ex_data(ctx,0,data) +# define X509_STORE_CTX_get_app_data(ctx) \ + X509_STORE_CTX_get_ex_data(ctx,0) + +# define X509_L_FILE_LOAD 1 +# define X509_L_ADD_DIR 2 +# define X509_L_ADD_STORE 3 +# define X509_L_LOAD_STORE 4 + +# define X509_LOOKUP_load_file(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_dir(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_LOAD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_file_ex(x, name, type, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_FILE_LOAD, (name), (long)(type), NULL,\ + (libctx), (propq)) + +# define X509_LOOKUP_load_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_LOAD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_LOOKUP_add_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 + +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 +/* OCSP status errors */ +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ + +# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 76 +# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 77 + +/* Errors in case a check in X509_V_FLAG_X509_STRICT mode fails */ +# define X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY 78 +# define X509_V_ERR_INVALID_CA 79 +# define X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA 80 +# define X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN 81 +# define X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA 82 +# define X509_V_ERR_ISSUER_NAME_EMPTY 83 +# define X509_V_ERR_SUBJECT_NAME_EMPTY 84 +# define X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER 85 +# define X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER 86 +# define X509_V_ERR_EMPTY_SUBJECT_ALT_NAME 87 +# define X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL 88 +# define X509_V_ERR_CA_BCONS_NOT_CRITICAL 89 +# define X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL 90 +# define X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL 91 +# define X509_V_ERR_CA_CERT_MISSING_KEY_USAGE 92 +# define X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3 93 +# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94 + +/* Certificate verify flags */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ +# endif +/* Use check time instead of current time */ +# define X509_V_FLAG_USE_CHECK_TIME 0x2 +/* Lookup CRLs */ +# define X509_V_FLAG_CRL_CHECK 0x4 +/* Lookup CRLs for whole chain */ +# define X509_V_FLAG_CRL_CHECK_ALL 0x8 +/* Ignore unhandled critical extensions */ +# define X509_V_FLAG_IGNORE_CRITICAL 0x10 +/* Disable workarounds for broken certificates */ +# define X509_V_FLAG_X509_STRICT 0x20 +/* Enable proxy certificate validation */ +# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 +/* Enable policy checking */ +# define X509_V_FLAG_POLICY_CHECK 0x80 +/* Policy variable require-explicit-policy */ +# define X509_V_FLAG_EXPLICIT_POLICY 0x100 +/* Policy variable inhibit-any-policy */ +# define X509_V_FLAG_INHIBIT_ANY 0x200 +/* Policy variable inhibit-policy-mapping */ +# define X509_V_FLAG_INHIBIT_MAP 0x400 +/* Notify callback that policy is OK */ +# define X509_V_FLAG_NOTIFY_POLICY 0x800 +/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ +# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 +/* Delta CRL support */ +# define X509_V_FLAG_USE_DELTAS 0x2000 +/* Check self-signed CA signature */ +# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 +/* Use trusted store first */ +# define X509_V_FLAG_TRUSTED_FIRST 0x8000 +/* Suite B 128 bit only mode: not normally used */ +# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define X509_V_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define X509_V_FLAG_SUITEB_128_LOS 0x30000 +/* Allow partial chains if at least one certificate is in trusted store */ +# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 +/* + * If the initial chain is not trusted, do not attempt to build an alternative + * chain. Alternate chain checking was introduced in 1.1.0. Setting this flag + * will force the behaviour to match that of previous versions. + */ +# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 +/* Do not check certificate/CRL validity against current time */ +# define X509_V_FLAG_NO_CHECK_TIME 0x200000 + +# define X509_VP_FLAG_DEFAULT 0x1 +# define X509_VP_FLAG_OVERWRITE 0x2 +# define X509_VP_FLAG_RESET_FLAGS 0x4 +# define X509_VP_FLAG_LOCKED 0x8 +# define X509_VP_FLAG_ONCE 0x10 + +/* Internal use: mask of policy related options */ +# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ + | X509_V_FLAG_EXPLICIT_POLICY \ + | X509_V_FLAG_INHIBIT_ANY \ + | X509_V_FLAG_INHIBIT_MAP) + +int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, + const X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, + X509_LOOKUP_TYPE type, + const X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, + X509_OBJECT *x); +int X509_OBJECT_up_ref_count(X509_OBJECT *a); +X509_OBJECT *X509_OBJECT_new(void); +void X509_OBJECT_free(X509_OBJECT *a); +X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); +X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); +int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); +X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); +int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *v); +int X509_STORE_lock(X509_STORE *ctx); +int X509_STORE_unlock(X509_STORE *ctx); +int X509_STORE_up_ref(X509_STORE *v); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); +STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, + const X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st, + const X509_NAME *nm); +int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); +int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); +int X509_STORE_set_trust(X509_STORE *ctx, int trust); +int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); +X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); + +void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); +#define X509_STORE_set_verify_func(ctx, func) \ + X509_STORE_set_verify((ctx),(func)) +void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_fn verify); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(const X509_STORE *ctx); +void X509_STORE_set_verify_cb(X509_STORE *ctx, + X509_STORE_CTX_verify_cb verify_cb); +# define X509_STORE_set_verify_cb_func(ctx,func) \ + X509_STORE_set_verify_cb((ctx),(func)) +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(const X509_STORE *ctx); +void X509_STORE_set_get_issuer(X509_STORE *ctx, + X509_STORE_CTX_get_issuer_fn get_issuer); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *ctx); +void X509_STORE_set_check_issued(X509_STORE *ctx, + X509_STORE_CTX_check_issued_fn check_issued); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *ctx); +void X509_STORE_set_check_revocation(X509_STORE *ctx, + X509_STORE_CTX_check_revocation_fn check_revocation); +X509_STORE_CTX_check_revocation_fn + X509_STORE_get_check_revocation(const X509_STORE *ctx); +void X509_STORE_set_get_crl(X509_STORE *ctx, + X509_STORE_CTX_get_crl_fn get_crl); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *ctx); +void X509_STORE_set_check_crl(X509_STORE *ctx, + X509_STORE_CTX_check_crl_fn check_crl); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *ctx); +void X509_STORE_set_cert_crl(X509_STORE *ctx, + X509_STORE_CTX_cert_crl_fn cert_crl); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *ctx); +void X509_STORE_set_check_policy(X509_STORE *ctx, + X509_STORE_CTX_check_policy_fn check_policy); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *ctx); +void X509_STORE_set_lookup_certs(X509_STORE *ctx, + X509_STORE_CTX_lookup_certs_fn lookup_certs); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *ctx); +void X509_STORE_set_lookup_crls(X509_STORE *ctx, + X509_STORE_CTX_lookup_crls_fn lookup_crls); +#define X509_STORE_set_lookup_crls_cb(ctx, func) \ + X509_STORE_set_lookup_crls((ctx), (func)) +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(const X509_STORE *ctx); +void X509_STORE_set_cleanup(X509_STORE *ctx, + X509_STORE_CTX_cleanup_fn cleanup); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *ctx); + +#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) +int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); +void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); + +X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +X509_STORE_CTX *X509_STORE_CTX_new(void); + +int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + +void X509_STORE_CTX_free(X509_STORE_CTX *ctx); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store, + X509 *target, STACK_OF(X509) *untrusted); +void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); + +X509_STORE *X509_STORE_CTX_get0_store(const X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_cb verify); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(const X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain +# define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted +# define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack +# define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject +# define X509_STORE_get1_certs X509_STORE_CTX_get1_certs +# define X509_STORE_get1_crls X509_STORE_CTX_get1_crls +/* the following macro is misspelled; use X509_STORE_get1_certs instead */ +# define X509_STORE_get1_cert X509_STORE_CTX_get1_certs +/* the following macro is misspelled; use X509_STORE_get1_crls instead */ +# define X509_STORE_get1_crl X509_STORE_CTX_get1_crls +#endif + +X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); +X509_LOOKUP_METHOD *X509_LOOKUP_file(void); +X509_LOOKUP_METHOD *X509_LOOKUP_store(void); + +typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +typedef int (*X509_LOOKUP_ctrl_ex_fn)( + X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret, + OSSL_LIB_CTX *libctx, const char *propq); + +typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_subject_ex_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, + const char *propq); +typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + const ASN1_INTEGER *serial, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const unsigned char* bytes, + int len, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const char *str, + int len, + X509_OBJECT *ret); + +X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name); +void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method, + int (*new_item) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method, + void (*free_fn) (X509_LOOKUP *ctx)); +void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method, + int (*init) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method, + int (*shutdown) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method, + X509_LOOKUP_ctrl_fn ctrl_fn); +X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_subject_fn fn); +X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_issuer_serial(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_issuer_serial_fn fn); +X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_fingerprint_fn fn); +X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_alias_fn fn); +X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( + const X509_LOOKUP_METHOD *method); + + +int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); +int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); + +int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); +X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +int X509_LOOKUP_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, + char **ret, OSSL_LIB_CTX *libctx, const char *propq); + +int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); + +X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); +void X509_LOOKUP_free(X509_LOOKUP *ctx); +int X509_LOOKUP_init(X509_LOOKUP *ctx); +int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_subject_ex(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, + const ASN1_INTEGER *serial, + X509_OBJECT *ret); +int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const unsigned char *bytes, int len, + X509_OBJECT *ret); +int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const char *str, int len, X509_OBJECT *ret); +int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data); +void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); +X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +int X509_STORE_load_file(X509_STORE *ctx, const char *file); +int X509_STORE_load_path(X509_STORE *ctx, const char *path); +int X509_STORE_load_store(X509_STORE *ctx, const char *store); +int X509_STORE_load_locations(X509_STORE *ctx, + const char *file, + const char *dir); +int X509_STORE_set_default_paths(X509_STORE *ctx); + +int X509_STORE_load_file_ex(X509_STORE *ctx, const char *file, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_store_ex(X509_STORE *ctx, const char *store, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_locations_ex(X509_STORE *ctx, const char *file, + const char *dir, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, + const char *propq); + +#define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) +int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); +void *X509_STORE_CTX_get_ex_data(const X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); +int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); +X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); +X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target); +void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); +int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); +int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); +int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, + int purpose, int trust); +void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); +void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, + time_t t); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx); + +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); +int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); + +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane); +#define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0) + +/* X509_VERIFY_PARAM functions */ + +X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); +void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); +int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +unsigned long X509_VERIFY_PARAM_get_flags(const X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); +int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); +void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); +void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, int auth_level); +time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param); +void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); +int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, + ASN1_OBJECT *policy); +int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, + STACK_OF(ASN1_OBJECT) *policies); + +int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, + uint32_t flags); +uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); + +char *X509_VERIFY_PARAM_get0_host(X509_VERIFY_PARAM *param, int idx); +int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, + unsigned int flags); +unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); +char *X509_VERIFY_PARAM_get0_peername(const X509_VERIFY_PARAM *param); +void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_email(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, + const char *email, size_t emaillen); +char *X509_VERIFY_PARAM_get1_ip_asc(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, + const unsigned char *ip, size_t iplen); +int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, + const char *ipasc); + +int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); +const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); + +int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_count(void); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); +void X509_VERIFY_PARAM_table_cleanup(void); + +/* Non positive return values are errors */ +#define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */ +#define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */ +#define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */ + +/* + * Positive return values form a bit mask, all but the first are internal to + * the library and don't appear in results from X509_policy_check(). + */ +#define X509_PCY_TREE_VALID 1 /* The policy tree is valid */ +#define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */ +#define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */ + +int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, + STACK_OF(X509) *certs, + STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); + +void X509_policy_tree_free(X509_POLICY_TREE *tree); + +int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); +X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, + int i); + +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree); + +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree); + +int X509_policy_level_node_count(X509_POLICY_LEVEL *level); + +X509_POLICY_NODE *X509_policy_level_get0_node(const X509_POLICY_LEVEL *level, + int i); + +const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); + +STACK_OF(POLICYQUALINFO) + *X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node); +const X509_POLICY_NODE + *X509_policy_node_get0_parent(const X509_POLICY_NODE *node); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h index cd08673f..34ead4b8 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h @@ -1,88 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509ERR_H -# define HEADER_X509ERR_H +#ifndef OPENSSL_X509ERR_H +# define OPENSSL_X509ERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509_strings(void); -/* - * X509 function codes. - */ -# define X509_F_ADD_CERT_DIR 100 -# define X509_F_BUILD_CHAIN 106 -# define X509_F_BY_FILE_CTRL 101 -# define X509_F_CHECK_NAME_CONSTRAINTS 149 -# define X509_F_CHECK_POLICY 145 -# define X509_F_DANE_I2D 107 -# define X509_F_DIR_CTRL 102 -# define X509_F_GET_CERT_BY_SUBJECT 103 -# define X509_F_I2D_X509_AUX 151 -# define X509_F_LOOKUP_CERTS_SK 152 -# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 -# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 -# define X509_F_NEW_DIR 153 -# define X509_F_X509AT_ADD1_ATTR 135 -# define X509_F_X509V3_ADD_EXT 104 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 -# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 -# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 -# define X509_F_X509_CHECK_PRIVATE_KEY 128 -# define X509_F_X509_CRL_DIFF 105 -# define X509_F_X509_CRL_METHOD_NEW 154 -# define X509_F_X509_CRL_PRINT_FP 147 -# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 -# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 -# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 -# define X509_F_X509_LOAD_CERT_CRL_FILE 132 -# define X509_F_X509_LOAD_CERT_FILE 111 -# define X509_F_X509_LOAD_CRL_FILE 112 -# define X509_F_X509_LOOKUP_METH_NEW 160 -# define X509_F_X509_LOOKUP_NEW 155 -# define X509_F_X509_NAME_ADD_ENTRY 113 -# define X509_F_X509_NAME_CANON 156 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 -# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 -# define X509_F_X509_NAME_ONELINE 116 -# define X509_F_X509_NAME_PRINT 117 -# define X509_F_X509_OBJECT_NEW 150 -# define X509_F_X509_PRINT_EX_FP 118 -# define X509_F_X509_PUBKEY_DECODE 148 -# define X509_F_X509_PUBKEY_GET 161 -# define X509_F_X509_PUBKEY_GET0 119 -# define X509_F_X509_PUBKEY_SET 120 -# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 -# define X509_F_X509_REQ_PRINT_EX 121 -# define X509_F_X509_REQ_PRINT_FP 122 -# define X509_F_X509_REQ_TO_X509 123 -# define X509_F_X509_STORE_ADD_CERT 124 -# define X509_F_X509_STORE_ADD_CRL 125 -# define X509_F_X509_STORE_ADD_LOOKUP 157 -# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 -# define X509_F_X509_STORE_CTX_INIT 143 -# define X509_F_X509_STORE_CTX_NEW 142 -# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 -# define X509_F_X509_STORE_NEW 158 -# define X509_F_X509_TO_X509_REQ 126 -# define X509_F_X509_TRUST_ADD 133 -# define X509_F_X509_TRUST_SET 141 -# define X509_F_X509_VERIFY_CERT 127 -# define X509_F_X509_VERIFY_PARAM_NEW 159 /* * X509 reason codes. @@ -92,12 +26,17 @@ int ERR_load_X509_strings(void); # define X509_R_BAD_X509_FILETYPE 100 # define X509_R_BASE64_DECODE_ERROR 118 # define X509_R_CANT_CHECK_DH_KEY 114 +# define X509_R_CERTIFICATE_VERIFICATION_FAILED 139 # define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 # define X509_R_CRL_ALREADY_DELTA 127 # define X509_R_CRL_VERIFY_FAILURE 131 +# define X509_R_DUPLICATE_ATTRIBUTE 140 +# define X509_R_ERROR_GETTING_MD_BY_NID 141 +# define X509_R_ERROR_USING_SIGINF_SET 142 # define X509_R_IDP_MISMATCH 128 # define X509_R_INVALID_ATTRIBUTES 138 # define X509_R_INVALID_DIRECTORY 113 +# define X509_R_INVALID_DISTPOINT 143 # define X509_R_INVALID_FIELD_NAME 119 # define X509_R_INVALID_TRUST 123 # define X509_R_ISSUER_MISMATCH 129 @@ -121,6 +60,7 @@ int ERR_load_X509_strings(void); # define X509_R_UNKNOWN_KEY_TYPE 117 # define X509_R_UNKNOWN_NID 109 # define X509_R_UNKNOWN_PURPOSE_ID 121 +# define X509_R_UNKNOWN_SIGID_ALGS 144 # define X509_R_UNKNOWN_TRUST_ID 120 # define X509_R_UNSUPPORTED_ALGORITHM 111 # define X509_R_WRONG_LOOKUP_TYPE 112 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h index 3a4f04c1..75016354 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h @@ -1,19 +1,33 @@ /* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509v3.h.in + * * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509V3_H -# define HEADER_X509V3_H + + +#ifndef OPENSSL_X509V3_H +# define OPENSSL_X509V3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509V3_H +# endif # include # include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -28,7 +42,7 @@ struct v3_ext_ctx; typedef void *(*X509V3_EXT_NEW)(void); typedef void (*X509V3_EXT_FREE) (void *); typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); -typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); +typedef int (*X509V3_EXT_I2D) (const void *, unsigned char **); typedef STACK_OF(CONF_VALUE) * (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, STACK_OF(CONF_VALUE) *extlist); @@ -75,9 +89,12 @@ typedef struct X509V3_CONF_METHOD_st { void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); } X509V3_CONF_METHOD; -/* Context specific info */ +/* Context specific info for producing X509 v3 extensions*/ struct v3_ext_ctx { -# define CTX_TEST 0x1 +# define X509V3_CTX_TEST 0x1 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define CTX_TEST X509V3_CTX_TEST +# endif # define X509V3_CTX_REPLACE 0x2 int flags; X509 *issuer_cert; @@ -86,12 +103,39 @@ struct v3_ext_ctx { X509_CRL *crl; X509V3_CONF_METHOD *db_meth; void *db; + EVP_PKEY *issuer_pkey; /* Maybe more here */ }; typedef struct v3_ext_method X509V3_EXT_METHOD; -DEFINE_STACK_OF(X509V3_EXT_METHOD) +SKM_DEFINE_STACK_OF_INTERNAL(X509V3_EXT_METHOD, X509V3_EXT_METHOD, X509V3_EXT_METHOD) +#define sk_X509V3_EXT_METHOD_num(sk) OPENSSL_sk_num(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_value(sk, idx) ((X509V3_EXT_METHOD *)OPENSSL_sk_value(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), (idx))) +#define sk_X509V3_EXT_METHOD_new(cmp) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp))) +#define sk_X509V3_EXT_METHOD_new_null() ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_null()) +#define sk_X509V3_EXT_METHOD_new_reserve(cmp, n) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_reserve(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp), (n))) +#define sk_X509V3_EXT_METHOD_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (n)) +#define sk_X509V3_EXT_METHOD_free(sk) OPENSSL_sk_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_zero(sk) OPENSSL_sk_zero(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_delete(sk, i) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (i))) +#define sk_X509V3_EXT_METHOD_delete_ptr(sk, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete_ptr(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))) +#define sk_X509V3_EXT_METHOD_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_pop(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_pop(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_shift(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_shift(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk),ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc)) +#define sk_X509V3_EXT_METHOD_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), (idx)) +#define sk_X509V3_EXT_METHOD_set(sk, idx, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_set(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (idx), ossl_check_X509V3_EXT_METHOD_type(ptr))) +#define sk_X509V3_EXT_METHOD_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), pnum) +#define sk_X509V3_EXT_METHOD_sort(sk) OPENSSL_sk_sort(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_dup(sk) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_dup(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_deep_copy(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_copyfunc_type(copyfunc), ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc))) +#define sk_X509V3_EXT_METHOD_set_cmp_func(sk, cmp) ((sk_X509V3_EXT_METHOD_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp))) + /* ext_flags values */ # define X509V3_EXT_DYNAMIC 0x1 @@ -157,17 +201,92 @@ typedef struct ACCESS_DESCRIPTION_st { GENERAL_NAME *location; } ACCESS_DESCRIPTION; +SKM_DEFINE_STACK_OF_INTERNAL(ACCESS_DESCRIPTION, ACCESS_DESCRIPTION, ACCESS_DESCRIPTION) +#define sk_ACCESS_DESCRIPTION_num(sk) OPENSSL_sk_num(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_value(sk, idx) ((ACCESS_DESCRIPTION *)OPENSSL_sk_value(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), (idx))) +#define sk_ACCESS_DESCRIPTION_new(cmp) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp))) +#define sk_ACCESS_DESCRIPTION_new_null() ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_null()) +#define sk_ACCESS_DESCRIPTION_new_reserve(cmp, n) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_reserve(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp), (n))) +#define sk_ACCESS_DESCRIPTION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (n)) +#define sk_ACCESS_DESCRIPTION_free(sk) OPENSSL_sk_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_zero(sk) OPENSSL_sk_zero(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_delete(sk, i) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (i))) +#define sk_ACCESS_DESCRIPTION_delete_ptr(sk, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete_ptr(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))) +#define sk_ACCESS_DESCRIPTION_push(sk, ptr) OPENSSL_sk_push(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_pop(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_pop(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_shift(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_shift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk),ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc)) +#define sk_ACCESS_DESCRIPTION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), (idx)) +#define sk_ACCESS_DESCRIPTION_set(sk, idx, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_set(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (idx), ossl_check_ACCESS_DESCRIPTION_type(ptr))) +#define sk_ACCESS_DESCRIPTION_find(sk, ptr) OPENSSL_sk_find(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), pnum) +#define sk_ACCESS_DESCRIPTION_sort(sk) OPENSSL_sk_sort(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_dup(sk) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_dup(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_deep_copy(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_copyfunc_type(copyfunc), ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc))) +#define sk_ACCESS_DESCRIPTION_set_cmp_func(sk, cmp) ((sk_ACCESS_DESCRIPTION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAME, GENERAL_NAME, GENERAL_NAME) +#define sk_GENERAL_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_value(sk, idx) ((GENERAL_NAME *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAME_sk_type(sk), (idx))) +#define sk_GENERAL_NAME_new(cmp) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new(ossl_check_GENERAL_NAME_compfunc_type(cmp))) +#define sk_GENERAL_NAME_new_null() ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_NAME_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAME_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAME_sk_type(sk), (n)) +#define sk_GENERAL_NAME_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_delete(sk, i) ((GENERAL_NAME *)OPENSSL_sk_delete(ossl_check_GENERAL_NAME_sk_type(sk), (i))) +#define sk_GENERAL_NAME_delete_ptr(sk, ptr) ((GENERAL_NAME *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))) +#define sk_GENERAL_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_pop(sk) ((GENERAL_NAME *)OPENSSL_sk_pop(ossl_check_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_shift(sk) ((GENERAL_NAME *)OPENSSL_sk_shift(ossl_check_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAME_sk_type(sk),ossl_check_GENERAL_NAME_freefunc_type(freefunc)) +#define sk_GENERAL_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), (idx)) +#define sk_GENERAL_NAME_set(sk, idx, ptr) ((GENERAL_NAME *)OPENSSL_sk_set(ossl_check_GENERAL_NAME_sk_type(sk), (idx), ossl_check_GENERAL_NAME_type(ptr))) +#define sk_GENERAL_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), pnum) +#define sk_GENERAL_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_dup(sk) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_copyfunc_type(copyfunc), ossl_check_GENERAL_NAME_freefunc_type(freefunc))) +#define sk_GENERAL_NAME_set_cmp_func(sk, cmp) ((sk_GENERAL_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_compfunc_type(cmp))) + + typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; - typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; - typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; - -DEFINE_STACK_OF(GENERAL_NAME) typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; -DEFINE_STACK_OF(GENERAL_NAMES) -DEFINE_STACK_OF(ACCESS_DESCRIPTION) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAMES, GENERAL_NAMES, GENERAL_NAMES) +#define sk_GENERAL_NAMES_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_value(sk, idx) ((GENERAL_NAMES *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAMES_sk_type(sk), (idx))) +#define sk_GENERAL_NAMES_new(cmp) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new(ossl_check_GENERAL_NAMES_compfunc_type(cmp))) +#define sk_GENERAL_NAMES_new_null() ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_NAMES_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAMES_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAMES_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAMES_sk_type(sk), (n)) +#define sk_GENERAL_NAMES_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_delete(sk, i) ((GENERAL_NAMES *)OPENSSL_sk_delete(ossl_check_GENERAL_NAMES_sk_type(sk), (i))) +#define sk_GENERAL_NAMES_delete_ptr(sk, ptr) ((GENERAL_NAMES *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))) +#define sk_GENERAL_NAMES_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_pop(sk) ((GENERAL_NAMES *)OPENSSL_sk_pop(ossl_check_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_shift(sk) ((GENERAL_NAMES *)OPENSSL_sk_shift(ossl_check_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAMES_sk_type(sk),ossl_check_GENERAL_NAMES_freefunc_type(freefunc)) +#define sk_GENERAL_NAMES_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), (idx)) +#define sk_GENERAL_NAMES_set(sk, idx, ptr) ((GENERAL_NAMES *)OPENSSL_sk_set(ossl_check_GENERAL_NAMES_sk_type(sk), (idx), ossl_check_GENERAL_NAMES_type(ptr))) +#define sk_GENERAL_NAMES_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), pnum) +#define sk_GENERAL_NAMES_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_dup(sk) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_copyfunc_type(copyfunc), ossl_check_GENERAL_NAMES_freefunc_type(freefunc))) +#define sk_GENERAL_NAMES_set_cmp_func(sk, cmp) ((sk_GENERAL_NAMES_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_compfunc_type(cmp))) + typedef struct DIST_POINT_NAME_st { int type; @@ -200,9 +319,35 @@ struct DIST_POINT_st { int dp_reasons; }; -typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; +SKM_DEFINE_STACK_OF_INTERNAL(DIST_POINT, DIST_POINT, DIST_POINT) +#define sk_DIST_POINT_num(sk) OPENSSL_sk_num(ossl_check_const_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_value(sk, idx) ((DIST_POINT *)OPENSSL_sk_value(ossl_check_const_DIST_POINT_sk_type(sk), (idx))) +#define sk_DIST_POINT_new(cmp) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new(ossl_check_DIST_POINT_compfunc_type(cmp))) +#define sk_DIST_POINT_new_null() ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_null()) +#define sk_DIST_POINT_new_reserve(cmp, n) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_reserve(ossl_check_DIST_POINT_compfunc_type(cmp), (n))) +#define sk_DIST_POINT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_DIST_POINT_sk_type(sk), (n)) +#define sk_DIST_POINT_free(sk) OPENSSL_sk_free(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_zero(sk) OPENSSL_sk_zero(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_delete(sk, i) ((DIST_POINT *)OPENSSL_sk_delete(ossl_check_DIST_POINT_sk_type(sk), (i))) +#define sk_DIST_POINT_delete_ptr(sk, ptr) ((DIST_POINT *)OPENSSL_sk_delete_ptr(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))) +#define sk_DIST_POINT_push(sk, ptr) OPENSSL_sk_push(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_pop(sk) ((DIST_POINT *)OPENSSL_sk_pop(ossl_check_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_shift(sk) ((DIST_POINT *)OPENSSL_sk_shift(ossl_check_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_DIST_POINT_sk_type(sk),ossl_check_DIST_POINT_freefunc_type(freefunc)) +#define sk_DIST_POINT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), (idx)) +#define sk_DIST_POINT_set(sk, idx, ptr) ((DIST_POINT *)OPENSSL_sk_set(ossl_check_DIST_POINT_sk_type(sk), (idx), ossl_check_DIST_POINT_type(ptr))) +#define sk_DIST_POINT_find(sk, ptr) OPENSSL_sk_find(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), pnum) +#define sk_DIST_POINT_sort(sk) OPENSSL_sk_sort(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_dup(sk) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_dup(ossl_check_const_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_deep_copy(ossl_check_const_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_copyfunc_type(copyfunc), ossl_check_DIST_POINT_freefunc_type(freefunc))) +#define sk_DIST_POINT_set_cmp_func(sk, cmp) ((sk_DIST_POINT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_compfunc_type(cmp))) -DEFINE_STACK_OF(DIST_POINT) + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; struct AUTHORITY_KEYID_st { ASN1_OCTET_STRING *keyid; @@ -217,13 +362,47 @@ typedef struct SXNET_ID_st { ASN1_OCTET_STRING *user; } SXNETID; -DEFINE_STACK_OF(SXNETID) +SKM_DEFINE_STACK_OF_INTERNAL(SXNETID, SXNETID, SXNETID) +#define sk_SXNETID_num(sk) OPENSSL_sk_num(ossl_check_const_SXNETID_sk_type(sk)) +#define sk_SXNETID_value(sk, idx) ((SXNETID *)OPENSSL_sk_value(ossl_check_const_SXNETID_sk_type(sk), (idx))) +#define sk_SXNETID_new(cmp) ((STACK_OF(SXNETID) *)OPENSSL_sk_new(ossl_check_SXNETID_compfunc_type(cmp))) +#define sk_SXNETID_new_null() ((STACK_OF(SXNETID) *)OPENSSL_sk_new_null()) +#define sk_SXNETID_new_reserve(cmp, n) ((STACK_OF(SXNETID) *)OPENSSL_sk_new_reserve(ossl_check_SXNETID_compfunc_type(cmp), (n))) +#define sk_SXNETID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SXNETID_sk_type(sk), (n)) +#define sk_SXNETID_free(sk) OPENSSL_sk_free(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_zero(sk) OPENSSL_sk_zero(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_delete(sk, i) ((SXNETID *)OPENSSL_sk_delete(ossl_check_SXNETID_sk_type(sk), (i))) +#define sk_SXNETID_delete_ptr(sk, ptr) ((SXNETID *)OPENSSL_sk_delete_ptr(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))) +#define sk_SXNETID_push(sk, ptr) OPENSSL_sk_push(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_pop(sk) ((SXNETID *)OPENSSL_sk_pop(ossl_check_SXNETID_sk_type(sk))) +#define sk_SXNETID_shift(sk) ((SXNETID *)OPENSSL_sk_shift(ossl_check_SXNETID_sk_type(sk))) +#define sk_SXNETID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SXNETID_sk_type(sk),ossl_check_SXNETID_freefunc_type(freefunc)) +#define sk_SXNETID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), (idx)) +#define sk_SXNETID_set(sk, idx, ptr) ((SXNETID *)OPENSSL_sk_set(ossl_check_SXNETID_sk_type(sk), (idx), ossl_check_SXNETID_type(ptr))) +#define sk_SXNETID_find(sk, ptr) OPENSSL_sk_find(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), pnum) +#define sk_SXNETID_sort(sk) OPENSSL_sk_sort(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SXNETID_sk_type(sk)) +#define sk_SXNETID_dup(sk) ((STACK_OF(SXNETID) *)OPENSSL_sk_dup(ossl_check_const_SXNETID_sk_type(sk))) +#define sk_SXNETID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SXNETID) *)OPENSSL_sk_deep_copy(ossl_check_const_SXNETID_sk_type(sk), ossl_check_SXNETID_copyfunc_type(copyfunc), ossl_check_SXNETID_freefunc_type(freefunc))) +#define sk_SXNETID_set_cmp_func(sk, cmp) ((sk_SXNETID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_compfunc_type(cmp))) + + typedef struct SXNET_st { ASN1_INTEGER *version; STACK_OF(SXNETID) *ids; } SXNET; +typedef struct ISSUER_SIGN_TOOL_st { + ASN1_UTF8STRING *signTool; + ASN1_UTF8STRING *cATool; + ASN1_UTF8STRING *signToolCert; + ASN1_UTF8STRING *cAToolCert; +} ISSUER_SIGN_TOOL; + typedef struct NOTICEREF_st { ASN1_STRING *organization; STACK_OF(ASN1_INTEGER) *noticenos; @@ -243,23 +422,102 @@ typedef struct POLICYQUALINFO_st { } d; } POLICYQUALINFO; -DEFINE_STACK_OF(POLICYQUALINFO) +SKM_DEFINE_STACK_OF_INTERNAL(POLICYQUALINFO, POLICYQUALINFO, POLICYQUALINFO) +#define sk_POLICYQUALINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_value(sk, idx) ((POLICYQUALINFO *)OPENSSL_sk_value(ossl_check_const_POLICYQUALINFO_sk_type(sk), (idx))) +#define sk_POLICYQUALINFO_new(cmp) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new(ossl_check_POLICYQUALINFO_compfunc_type(cmp))) +#define sk_POLICYQUALINFO_new_null() ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_null()) +#define sk_POLICYQUALINFO_new_reserve(cmp, n) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYQUALINFO_compfunc_type(cmp), (n))) +#define sk_POLICYQUALINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYQUALINFO_sk_type(sk), (n)) +#define sk_POLICYQUALINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_delete(sk, i) ((POLICYQUALINFO *)OPENSSL_sk_delete(ossl_check_POLICYQUALINFO_sk_type(sk), (i))) +#define sk_POLICYQUALINFO_delete_ptr(sk, ptr) ((POLICYQUALINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))) +#define sk_POLICYQUALINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_pop(sk) ((POLICYQUALINFO *)OPENSSL_sk_pop(ossl_check_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_shift(sk) ((POLICYQUALINFO *)OPENSSL_sk_shift(ossl_check_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYQUALINFO_sk_type(sk),ossl_check_POLICYQUALINFO_freefunc_type(freefunc)) +#define sk_POLICYQUALINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), (idx)) +#define sk_POLICYQUALINFO_set(sk, idx, ptr) ((POLICYQUALINFO *)OPENSSL_sk_set(ossl_check_POLICYQUALINFO_sk_type(sk), (idx), ossl_check_POLICYQUALINFO_type(ptr))) +#define sk_POLICYQUALINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), pnum) +#define sk_POLICYQUALINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_dup(sk) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_copyfunc_type(copyfunc), ossl_check_POLICYQUALINFO_freefunc_type(freefunc))) +#define sk_POLICYQUALINFO_set_cmp_func(sk, cmp) ((sk_POLICYQUALINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_compfunc_type(cmp))) + + typedef struct POLICYINFO_st { ASN1_OBJECT *policyid; STACK_OF(POLICYQUALINFO) *qualifiers; } POLICYINFO; -typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; +SKM_DEFINE_STACK_OF_INTERNAL(POLICYINFO, POLICYINFO, POLICYINFO) +#define sk_POLICYINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_value(sk, idx) ((POLICYINFO *)OPENSSL_sk_value(ossl_check_const_POLICYINFO_sk_type(sk), (idx))) +#define sk_POLICYINFO_new(cmp) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new(ossl_check_POLICYINFO_compfunc_type(cmp))) +#define sk_POLICYINFO_new_null() ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_null()) +#define sk_POLICYINFO_new_reserve(cmp, n) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYINFO_compfunc_type(cmp), (n))) +#define sk_POLICYINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYINFO_sk_type(sk), (n)) +#define sk_POLICYINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_delete(sk, i) ((POLICYINFO *)OPENSSL_sk_delete(ossl_check_POLICYINFO_sk_type(sk), (i))) +#define sk_POLICYINFO_delete_ptr(sk, ptr) ((POLICYINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))) +#define sk_POLICYINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_pop(sk) ((POLICYINFO *)OPENSSL_sk_pop(ossl_check_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_shift(sk) ((POLICYINFO *)OPENSSL_sk_shift(ossl_check_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYINFO_sk_type(sk),ossl_check_POLICYINFO_freefunc_type(freefunc)) +#define sk_POLICYINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), (idx)) +#define sk_POLICYINFO_set(sk, idx, ptr) ((POLICYINFO *)OPENSSL_sk_set(ossl_check_POLICYINFO_sk_type(sk), (idx), ossl_check_POLICYINFO_type(ptr))) +#define sk_POLICYINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), pnum) +#define sk_POLICYINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_dup(sk) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_copyfunc_type(copyfunc), ossl_check_POLICYINFO_freefunc_type(freefunc))) +#define sk_POLICYINFO_set_cmp_func(sk, cmp) ((sk_POLICYINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_compfunc_type(cmp))) -DEFINE_STACK_OF(POLICYINFO) + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; typedef struct POLICY_MAPPING_st { ASN1_OBJECT *issuerDomainPolicy; ASN1_OBJECT *subjectDomainPolicy; } POLICY_MAPPING; -DEFINE_STACK_OF(POLICY_MAPPING) +SKM_DEFINE_STACK_OF_INTERNAL(POLICY_MAPPING, POLICY_MAPPING, POLICY_MAPPING) +#define sk_POLICY_MAPPING_num(sk) OPENSSL_sk_num(ossl_check_const_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_value(sk, idx) ((POLICY_MAPPING *)OPENSSL_sk_value(ossl_check_const_POLICY_MAPPING_sk_type(sk), (idx))) +#define sk_POLICY_MAPPING_new(cmp) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new(ossl_check_POLICY_MAPPING_compfunc_type(cmp))) +#define sk_POLICY_MAPPING_new_null() ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_null()) +#define sk_POLICY_MAPPING_new_reserve(cmp, n) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_reserve(ossl_check_POLICY_MAPPING_compfunc_type(cmp), (n))) +#define sk_POLICY_MAPPING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICY_MAPPING_sk_type(sk), (n)) +#define sk_POLICY_MAPPING_free(sk) OPENSSL_sk_free(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_zero(sk) OPENSSL_sk_zero(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_delete(sk, i) ((POLICY_MAPPING *)OPENSSL_sk_delete(ossl_check_POLICY_MAPPING_sk_type(sk), (i))) +#define sk_POLICY_MAPPING_delete_ptr(sk, ptr) ((POLICY_MAPPING *)OPENSSL_sk_delete_ptr(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))) +#define sk_POLICY_MAPPING_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_pop(sk) ((POLICY_MAPPING *)OPENSSL_sk_pop(ossl_check_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_shift(sk) ((POLICY_MAPPING *)OPENSSL_sk_shift(ossl_check_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICY_MAPPING_sk_type(sk),ossl_check_POLICY_MAPPING_freefunc_type(freefunc)) +#define sk_POLICY_MAPPING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), (idx)) +#define sk_POLICY_MAPPING_set(sk, idx, ptr) ((POLICY_MAPPING *)OPENSSL_sk_set(ossl_check_POLICY_MAPPING_sk_type(sk), (idx), ossl_check_POLICY_MAPPING_type(ptr))) +#define sk_POLICY_MAPPING_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), pnum) +#define sk_POLICY_MAPPING_sort(sk) OPENSSL_sk_sort(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_dup(sk) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_dup(ossl_check_const_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_copyfunc_type(copyfunc), ossl_check_POLICY_MAPPING_freefunc_type(freefunc))) +#define sk_POLICY_MAPPING_set_cmp_func(sk, cmp) ((sk_POLICY_MAPPING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_compfunc_type(cmp))) + typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; @@ -269,7 +527,33 @@ typedef struct GENERAL_SUBTREE_st { ASN1_INTEGER *maximum; } GENERAL_SUBTREE; -DEFINE_STACK_OF(GENERAL_SUBTREE) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_SUBTREE, GENERAL_SUBTREE, GENERAL_SUBTREE) +#define sk_GENERAL_SUBTREE_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_value(sk, idx) ((GENERAL_SUBTREE *)OPENSSL_sk_value(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), (idx))) +#define sk_GENERAL_SUBTREE_new(cmp) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp))) +#define sk_GENERAL_SUBTREE_new_null() ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_SUBTREE_new_reserve(cmp, n) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp), (n))) +#define sk_GENERAL_SUBTREE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_SUBTREE_sk_type(sk), (n)) +#define sk_GENERAL_SUBTREE_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_delete(sk, i) ((GENERAL_SUBTREE *)OPENSSL_sk_delete(ossl_check_GENERAL_SUBTREE_sk_type(sk), (i))) +#define sk_GENERAL_SUBTREE_delete_ptr(sk, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))) +#define sk_GENERAL_SUBTREE_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_pop(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_pop(ossl_check_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_shift(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_shift(ossl_check_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_SUBTREE_sk_type(sk),ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc)) +#define sk_GENERAL_SUBTREE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), (idx)) +#define sk_GENERAL_SUBTREE_set(sk, idx, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_set(ossl_check_GENERAL_SUBTREE_sk_type(sk), (idx), ossl_check_GENERAL_SUBTREE_type(ptr))) +#define sk_GENERAL_SUBTREE_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), pnum) +#define sk_GENERAL_SUBTREE_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_dup(sk) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_copyfunc_type(copyfunc), ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc))) +#define sk_GENERAL_SUBTREE_set_cmp_func(sk, cmp) ((sk_GENERAL_SUBTREE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_compfunc_type(cmp))) + struct NAME_CONSTRAINTS_st { STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; @@ -325,7 +609,7 @@ struct ISSUING_DIST_POINT_st { ",name:", (val)->name, ",value:", (val)->value) # define X509V3_set_ctx_test(ctx) \ - X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, X509V3_CTX_TEST) # define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; # define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ @@ -343,6 +627,13 @@ struct ISSUING_DIST_POINT_st { 0,0,0,0, \ NULL} +#define EXT_UTF8STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_UTF8STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_UTF8STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_UTF8STRING, \ + 0,0,0,0, \ + NULL} + # define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} /* X509_PURPOSE stuff */ @@ -353,8 +644,7 @@ struct ISSUING_DIST_POINT_st { # define EXFLAG_NSCERT 0x8 # define EXFLAG_CA 0x10 -/* Really self issued not necessarily self signed */ -# define EXFLAG_SI 0x20 +# define EXFLAG_SI 0x20 /* self-issued, maybe not self-signed */ # define EXFLAG_V1 0x40 # define EXFLAG_INVALID 0x80 /* EXFLAG_SET is set to indicate that some values have been precomputed */ @@ -366,6 +656,10 @@ struct ISSUING_DIST_POINT_st { # define EXFLAG_FRESHEST 0x1000 # define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ +# define EXFLAG_BCONS_CRITICAL 0x10000 +# define EXFLAG_AKID_CRITICAL 0x20000 +# define EXFLAG_SKID_CRITICAL 0x40000 +# define EXFLAG_SAN_CRITICAL 0x80000 # define EXFLAG_NO_FINGERPRINT 0x100000 # define KU_DIGITAL_SIGNATURE 0x0080 @@ -391,7 +685,7 @@ struct ISSUING_DIST_POINT_st { # define XKU_SSL_CLIENT 0x2 # define XKU_SMIME 0x4 # define XKU_CODE_SIGN 0x8 -# define XKU_SGC 0x10 +# define XKU_SGC 0x10 /* Netscape or MS Server-Gated Crypto */ # define XKU_OCSP_SIGN 0x20 # define XKU_TIMESTAMP 0x40 # define XKU_DVCS 0x80 @@ -410,6 +704,35 @@ typedef struct x509_purpose_st { void *usr_data; } X509_PURPOSE; +SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE) +#define sk_X509_PURPOSE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_value(sk, idx) ((X509_PURPOSE *)OPENSSL_sk_value(ossl_check_const_X509_PURPOSE_sk_type(sk), (idx))) +#define sk_X509_PURPOSE_new(cmp) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new(ossl_check_X509_PURPOSE_compfunc_type(cmp))) +#define sk_X509_PURPOSE_new_null() ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_null()) +#define sk_X509_PURPOSE_new_reserve(cmp, n) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_reserve(ossl_check_X509_PURPOSE_compfunc_type(cmp), (n))) +#define sk_X509_PURPOSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_PURPOSE_sk_type(sk), (n)) +#define sk_X509_PURPOSE_free(sk) OPENSSL_sk_free(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_delete(sk, i) ((X509_PURPOSE *)OPENSSL_sk_delete(ossl_check_X509_PURPOSE_sk_type(sk), (i))) +#define sk_X509_PURPOSE_delete_ptr(sk, ptr) ((X509_PURPOSE *)OPENSSL_sk_delete_ptr(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))) +#define sk_X509_PURPOSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_pop(sk) ((X509_PURPOSE *)OPENSSL_sk_pop(ossl_check_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_shift(sk) ((X509_PURPOSE *)OPENSSL_sk_shift(ossl_check_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_PURPOSE_sk_type(sk),ossl_check_X509_PURPOSE_freefunc_type(freefunc)) +#define sk_X509_PURPOSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), (idx)) +#define sk_X509_PURPOSE_set(sk, idx, ptr) ((X509_PURPOSE *)OPENSSL_sk_set(ossl_check_X509_PURPOSE_sk_type(sk), (idx), ossl_check_X509_PURPOSE_type(ptr))) +#define sk_X509_PURPOSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), pnum) +#define sk_X509_PURPOSE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_dup(sk) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_dup(ossl_check_const_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_copyfunc_type(copyfunc), ossl_check_X509_PURPOSE_freefunc_type(freefunc))) +#define sk_X509_PURPOSE_set_cmp_func(sk, cmp) ((sk_X509_PURPOSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_compfunc_type(cmp))) + + + # define X509_PURPOSE_SSL_CLIENT 1 # define X509_PURPOSE_SSL_SERVER 2 # define X509_PURPOSE_NS_SSL_SERVER 3 @@ -446,13 +769,13 @@ typedef struct x509_purpose_st { # define X509V3_ADD_DELETE 5L # define X509V3_ADD_SILENT 0x10 -DEFINE_STACK_OF(X509_PURPOSE) - DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) DECLARE_ASN1_FUNCTIONS(SXNET) DECLARE_ASN1_FUNCTIONS(SXNETID) +DECLARE_ASN1_FUNCTIONS(ISSUER_SIGN_TOOL) + int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, int userlen); @@ -468,7 +791,7 @@ DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) -GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); +DECLARE_ASN1_DUP_FUNCTION(GENERAL_NAME) int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, @@ -480,6 +803,9 @@ STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *str); +char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, ASN1_UTF8STRING *utf8); +ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen, @@ -525,7 +851,7 @@ DECLARE_ASN1_FUNCTIONS(DIST_POINT) DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) -int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, const X509_NAME *iname); int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); @@ -551,13 +877,14 @@ GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, X509V3_CTX *ctx, int gen_type, const char *value, int is_nc); -# ifdef HEADER_CONF_H +# ifdef OPENSSL_CONF_H GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf); GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc); + void X509V3_conf_free(CONF_VALUE *val); X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, @@ -599,6 +926,8 @@ void X509V3_string_free(X509V3_CTX *ctx, char *str); void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, X509_REQ *req, X509_CRL *crl, int flags); +/* For API backward compatibility, this is separate from X509V3_set_ctx(): */ +int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey); int X509V3_add_value(const char *name, const char *value, STACK_OF(CONF_VALUE) **extlist); @@ -630,7 +959,7 @@ X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, int crit, unsigned long flags); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* The new declarations are in crypto.h, but the old ones were here. */ # define hex_to_string OPENSSL_buf2hexstr # define string_to_hex OPENSSL_hexstr2buf @@ -652,7 +981,7 @@ int X509_check_purpose(X509 *x, int id, int ca); int X509_supported_extension(X509_EXTENSION *ex); int X509_PURPOSE_set(int *p, int purpose); int X509_check_issued(X509 *issuer, X509 *subject); -int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); +int X509_check_akid(const X509 *issuer, const AUTHORITY_KEYID *akid); void X509_set_proxy_flag(X509 *x); void X509_set_proxy_pathlen(X509 *x, long l); long X509_get_proxy_pathlen(X509 *x); @@ -719,7 +1048,34 @@ int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, unsigned long chtype); void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); -DEFINE_STACK_OF(X509_POLICY_NODE) +SKM_DEFINE_STACK_OF_INTERNAL(X509_POLICY_NODE, X509_POLICY_NODE, X509_POLICY_NODE) +#define sk_X509_POLICY_NODE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_value(sk, idx) ((X509_POLICY_NODE *)OPENSSL_sk_value(ossl_check_const_X509_POLICY_NODE_sk_type(sk), (idx))) +#define sk_X509_POLICY_NODE_new(cmp) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new(ossl_check_X509_POLICY_NODE_compfunc_type(cmp))) +#define sk_X509_POLICY_NODE_new_null() ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_null()) +#define sk_X509_POLICY_NODE_new_reserve(cmp, n) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_reserve(ossl_check_X509_POLICY_NODE_compfunc_type(cmp), (n))) +#define sk_X509_POLICY_NODE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_POLICY_NODE_sk_type(sk), (n)) +#define sk_X509_POLICY_NODE_free(sk) OPENSSL_sk_free(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_delete(sk, i) ((X509_POLICY_NODE *)OPENSSL_sk_delete(ossl_check_X509_POLICY_NODE_sk_type(sk), (i))) +#define sk_X509_POLICY_NODE_delete_ptr(sk, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_delete_ptr(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))) +#define sk_X509_POLICY_NODE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_pop(sk) ((X509_POLICY_NODE *)OPENSSL_sk_pop(ossl_check_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_shift(sk) ((X509_POLICY_NODE *)OPENSSL_sk_shift(ossl_check_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_POLICY_NODE_sk_type(sk),ossl_check_X509_POLICY_NODE_freefunc_type(freefunc)) +#define sk_X509_POLICY_NODE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), (idx)) +#define sk_X509_POLICY_NODE_set(sk, idx, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_set(ossl_check_X509_POLICY_NODE_sk_type(sk), (idx), ossl_check_X509_POLICY_NODE_type(ptr))) +#define sk_X509_POLICY_NODE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), pnum) +#define sk_X509_POLICY_NODE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_dup(sk) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_dup(ossl_check_const_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_copyfunc_type(copyfunc), ossl_check_X509_POLICY_NODE_freefunc_type(freefunc))) +#define sk_X509_POLICY_NODE_set_cmp_func(sk, cmp) ((sk_X509_POLICY_NODE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_compfunc_type(cmp))) + + #ifndef OPENSSL_NO_RFC3779 typedef struct ASRange_st { @@ -737,8 +1093,35 @@ typedef struct ASIdOrRange_st { } u; } ASIdOrRange; +SKM_DEFINE_STACK_OF_INTERNAL(ASIdOrRange, ASIdOrRange, ASIdOrRange) +#define sk_ASIdOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_value(sk, idx) ((ASIdOrRange *)OPENSSL_sk_value(ossl_check_const_ASIdOrRange_sk_type(sk), (idx))) +#define sk_ASIdOrRange_new(cmp) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new(ossl_check_ASIdOrRange_compfunc_type(cmp))) +#define sk_ASIdOrRange_new_null() ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_null()) +#define sk_ASIdOrRange_new_reserve(cmp, n) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_reserve(ossl_check_ASIdOrRange_compfunc_type(cmp), (n))) +#define sk_ASIdOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASIdOrRange_sk_type(sk), (n)) +#define sk_ASIdOrRange_free(sk) OPENSSL_sk_free(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_delete(sk, i) ((ASIdOrRange *)OPENSSL_sk_delete(ossl_check_ASIdOrRange_sk_type(sk), (i))) +#define sk_ASIdOrRange_delete_ptr(sk, ptr) ((ASIdOrRange *)OPENSSL_sk_delete_ptr(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))) +#define sk_ASIdOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_pop(sk) ((ASIdOrRange *)OPENSSL_sk_pop(ossl_check_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_shift(sk) ((ASIdOrRange *)OPENSSL_sk_shift(ossl_check_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASIdOrRange_sk_type(sk),ossl_check_ASIdOrRange_freefunc_type(freefunc)) +#define sk_ASIdOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), (idx)) +#define sk_ASIdOrRange_set(sk, idx, ptr) ((ASIdOrRange *)OPENSSL_sk_set(ossl_check_ASIdOrRange_sk_type(sk), (idx), ossl_check_ASIdOrRange_type(ptr))) +#define sk_ASIdOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), pnum) +#define sk_ASIdOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_dup(sk) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_dup(ossl_check_const_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_copyfunc_type(copyfunc), ossl_check_ASIdOrRange_freefunc_type(freefunc))) +#define sk_ASIdOrRange_set_cmp_func(sk, cmp) ((sk_ASIdOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_compfunc_type(cmp))) + + typedef STACK_OF(ASIdOrRange) ASIdOrRanges; -DEFINE_STACK_OF(ASIdOrRange) # define ASIdentifierChoice_inherit 0 # define ASIdentifierChoice_asIdsOrRanges 1 @@ -775,8 +1158,35 @@ typedef struct IPAddressOrRange_st { } u; } IPAddressOrRange; +SKM_DEFINE_STACK_OF_INTERNAL(IPAddressOrRange, IPAddressOrRange, IPAddressOrRange) +#define sk_IPAddressOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_value(sk, idx) ((IPAddressOrRange *)OPENSSL_sk_value(ossl_check_const_IPAddressOrRange_sk_type(sk), (idx))) +#define sk_IPAddressOrRange_new(cmp) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new(ossl_check_IPAddressOrRange_compfunc_type(cmp))) +#define sk_IPAddressOrRange_new_null() ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_null()) +#define sk_IPAddressOrRange_new_reserve(cmp, n) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressOrRange_compfunc_type(cmp), (n))) +#define sk_IPAddressOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressOrRange_sk_type(sk), (n)) +#define sk_IPAddressOrRange_free(sk) OPENSSL_sk_free(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_delete(sk, i) ((IPAddressOrRange *)OPENSSL_sk_delete(ossl_check_IPAddressOrRange_sk_type(sk), (i))) +#define sk_IPAddressOrRange_delete_ptr(sk, ptr) ((IPAddressOrRange *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))) +#define sk_IPAddressOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_pop(sk) ((IPAddressOrRange *)OPENSSL_sk_pop(ossl_check_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_shift(sk) ((IPAddressOrRange *)OPENSSL_sk_shift(ossl_check_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressOrRange_sk_type(sk),ossl_check_IPAddressOrRange_freefunc_type(freefunc)) +#define sk_IPAddressOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), (idx)) +#define sk_IPAddressOrRange_set(sk, idx, ptr) ((IPAddressOrRange *)OPENSSL_sk_set(ossl_check_IPAddressOrRange_sk_type(sk), (idx), ossl_check_IPAddressOrRange_type(ptr))) +#define sk_IPAddressOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), pnum) +#define sk_IPAddressOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_dup(sk) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_dup(ossl_check_const_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_copyfunc_type(copyfunc), ossl_check_IPAddressOrRange_freefunc_type(freefunc))) +#define sk_IPAddressOrRange_set_cmp_func(sk, cmp) ((sk_IPAddressOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_compfunc_type(cmp))) + + typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; -DEFINE_STACK_OF(IPAddressOrRange) # define IPAddressChoice_inherit 0 # define IPAddressChoice_addressesOrRanges 1 @@ -794,8 +1204,36 @@ typedef struct IPAddressFamily_st { IPAddressChoice *ipAddressChoice; } IPAddressFamily; +SKM_DEFINE_STACK_OF_INTERNAL(IPAddressFamily, IPAddressFamily, IPAddressFamily) +#define sk_IPAddressFamily_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_value(sk, idx) ((IPAddressFamily *)OPENSSL_sk_value(ossl_check_const_IPAddressFamily_sk_type(sk), (idx))) +#define sk_IPAddressFamily_new(cmp) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new(ossl_check_IPAddressFamily_compfunc_type(cmp))) +#define sk_IPAddressFamily_new_null() ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_null()) +#define sk_IPAddressFamily_new_reserve(cmp, n) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressFamily_compfunc_type(cmp), (n))) +#define sk_IPAddressFamily_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressFamily_sk_type(sk), (n)) +#define sk_IPAddressFamily_free(sk) OPENSSL_sk_free(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_delete(sk, i) ((IPAddressFamily *)OPENSSL_sk_delete(ossl_check_IPAddressFamily_sk_type(sk), (i))) +#define sk_IPAddressFamily_delete_ptr(sk, ptr) ((IPAddressFamily *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))) +#define sk_IPAddressFamily_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_pop(sk) ((IPAddressFamily *)OPENSSL_sk_pop(ossl_check_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_shift(sk) ((IPAddressFamily *)OPENSSL_sk_shift(ossl_check_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressFamily_sk_type(sk),ossl_check_IPAddressFamily_freefunc_type(freefunc)) +#define sk_IPAddressFamily_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), (idx)) +#define sk_IPAddressFamily_set(sk, idx, ptr) ((IPAddressFamily *)OPENSSL_sk_set(ossl_check_IPAddressFamily_sk_type(sk), (idx), ossl_check_IPAddressFamily_type(ptr))) +#define sk_IPAddressFamily_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), pnum) +#define sk_IPAddressFamily_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_dup(sk) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_dup(ossl_check_const_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_copyfunc_type(copyfunc), ossl_check_IPAddressFamily_freefunc_type(freefunc))) +#define sk_IPAddressFamily_set_cmp_func(sk, cmp) ((sk_IPAddressFamily_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_compfunc_type(cmp))) + + + typedef STACK_OF(IPAddressFamily) IPAddrBlocks; -DEFINE_STACK_OF(IPAddressFamily) DECLARE_ASN1_FUNCTIONS(IPAddressRange) DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) @@ -867,7 +1305,33 @@ int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, #endif /* OPENSSL_NO_RFC3779 */ -DEFINE_STACK_OF(ASN1_STRING) +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING, ASN1_STRING, ASN1_STRING) +#define sk_ASN1_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_value(sk, idx) ((ASN1_STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_sk_type(sk), (idx))) +#define sk_ASN1_STRING_new(cmp) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_compfunc_type(cmp))) +#define sk_ASN1_STRING_new_null() ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_sk_type(sk), (n)) +#define sk_ASN1_STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_delete(sk, i) ((ASN1_STRING *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_sk_type(sk), (i))) +#define sk_ASN1_STRING_delete_ptr(sk, ptr) ((ASN1_STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))) +#define sk_ASN1_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_pop(sk) ((ASN1_STRING *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_shift(sk) ((ASN1_STRING *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_sk_type(sk),ossl_check_ASN1_STRING_freefunc_type(freefunc)) +#define sk_ASN1_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), (idx)) +#define sk_ASN1_STRING_set(sk, idx, ptr) ((ASN1_STRING *)OPENSSL_sk_set(ossl_check_ASN1_STRING_sk_type(sk), (idx), ossl_check_ASN1_STRING_type(ptr))) +#define sk_ASN1_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), pnum) +#define sk_ASN1_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_dup(sk) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_freefunc_type(freefunc))) +#define sk_ASN1_STRING_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_compfunc_type(cmp))) + /* * Admission Syntax @@ -880,8 +1344,59 @@ DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) DECLARE_ASN1_FUNCTIONS(ADMISSIONS) DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) -DEFINE_STACK_OF(ADMISSIONS) -DEFINE_STACK_OF(PROFESSION_INFO) +SKM_DEFINE_STACK_OF_INTERNAL(PROFESSION_INFO, PROFESSION_INFO, PROFESSION_INFO) +#define sk_PROFESSION_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_value(sk, idx) ((PROFESSION_INFO *)OPENSSL_sk_value(ossl_check_const_PROFESSION_INFO_sk_type(sk), (idx))) +#define sk_PROFESSION_INFO_new(cmp) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new(ossl_check_PROFESSION_INFO_compfunc_type(cmp))) +#define sk_PROFESSION_INFO_new_null() ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_null()) +#define sk_PROFESSION_INFO_new_reserve(cmp, n) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PROFESSION_INFO_compfunc_type(cmp), (n))) +#define sk_PROFESSION_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PROFESSION_INFO_sk_type(sk), (n)) +#define sk_PROFESSION_INFO_free(sk) OPENSSL_sk_free(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_delete(sk, i) ((PROFESSION_INFO *)OPENSSL_sk_delete(ossl_check_PROFESSION_INFO_sk_type(sk), (i))) +#define sk_PROFESSION_INFO_delete_ptr(sk, ptr) ((PROFESSION_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))) +#define sk_PROFESSION_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_pop(sk) ((PROFESSION_INFO *)OPENSSL_sk_pop(ossl_check_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_shift(sk) ((PROFESSION_INFO *)OPENSSL_sk_shift(ossl_check_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PROFESSION_INFO_sk_type(sk),ossl_check_PROFESSION_INFO_freefunc_type(freefunc)) +#define sk_PROFESSION_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), (idx)) +#define sk_PROFESSION_INFO_set(sk, idx, ptr) ((PROFESSION_INFO *)OPENSSL_sk_set(ossl_check_PROFESSION_INFO_sk_type(sk), (idx), ossl_check_PROFESSION_INFO_type(ptr))) +#define sk_PROFESSION_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), pnum) +#define sk_PROFESSION_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_dup(sk) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_dup(ossl_check_const_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_copyfunc_type(copyfunc), ossl_check_PROFESSION_INFO_freefunc_type(freefunc))) +#define sk_PROFESSION_INFO_set_cmp_func(sk, cmp) ((sk_PROFESSION_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(ADMISSIONS, ADMISSIONS, ADMISSIONS) +#define sk_ADMISSIONS_num(sk) OPENSSL_sk_num(ossl_check_const_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_value(sk, idx) ((ADMISSIONS *)OPENSSL_sk_value(ossl_check_const_ADMISSIONS_sk_type(sk), (idx))) +#define sk_ADMISSIONS_new(cmp) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new(ossl_check_ADMISSIONS_compfunc_type(cmp))) +#define sk_ADMISSIONS_new_null() ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_null()) +#define sk_ADMISSIONS_new_reserve(cmp, n) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_reserve(ossl_check_ADMISSIONS_compfunc_type(cmp), (n))) +#define sk_ADMISSIONS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ADMISSIONS_sk_type(sk), (n)) +#define sk_ADMISSIONS_free(sk) OPENSSL_sk_free(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_zero(sk) OPENSSL_sk_zero(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_delete(sk, i) ((ADMISSIONS *)OPENSSL_sk_delete(ossl_check_ADMISSIONS_sk_type(sk), (i))) +#define sk_ADMISSIONS_delete_ptr(sk, ptr) ((ADMISSIONS *)OPENSSL_sk_delete_ptr(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))) +#define sk_ADMISSIONS_push(sk, ptr) OPENSSL_sk_push(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_pop(sk) ((ADMISSIONS *)OPENSSL_sk_pop(ossl_check_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_shift(sk) ((ADMISSIONS *)OPENSSL_sk_shift(ossl_check_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ADMISSIONS_sk_type(sk),ossl_check_ADMISSIONS_freefunc_type(freefunc)) +#define sk_ADMISSIONS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), (idx)) +#define sk_ADMISSIONS_set(sk, idx, ptr) ((ADMISSIONS *)OPENSSL_sk_set(ossl_check_ADMISSIONS_sk_type(sk), (idx), ossl_check_ADMISSIONS_type(ptr))) +#define sk_ADMISSIONS_find(sk, ptr) OPENSSL_sk_find(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), pnum) +#define sk_ADMISSIONS_sort(sk) OPENSSL_sk_sort(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_dup(sk) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_dup(ossl_check_const_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_deep_copy(ossl_check_const_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_copyfunc_type(copyfunc), ossl_check_ADMISSIONS_freefunc_type(freefunc))) +#define sk_ADMISSIONS_set_cmp_func(sk, cmp) ((sk_ADMISSIONS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_compfunc_type(cmp))) + typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h.in new file mode 100644 index 00000000..e33c9d30 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h.in @@ -0,0 +1,1020 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509V3_H +# define OPENSSL_X509V3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509V3_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward reference */ +struct v3_ext_method; +struct v3_ext_ctx; + +/* Useful typedefs */ + +typedef void *(*X509V3_EXT_NEW)(void); +typedef void (*X509V3_EXT_FREE) (void *); +typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); +typedef int (*X509V3_EXT_I2D) (const void *, unsigned char **); +typedef STACK_OF(CONF_VALUE) * + (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, + STACK_OF(CONF_VALUE) *extlist); +typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, + STACK_OF(CONF_VALUE) *values); +typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, + void *ext); +typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); +typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, + BIO *out, int indent); +typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); + +/* V3 extension structure */ + +struct v3_ext_method { + int ext_nid; + int ext_flags; +/* If this is set the following four fields are ignored */ + ASN1_ITEM_EXP *it; +/* Old style ASN1 calls */ + X509V3_EXT_NEW ext_new; + X509V3_EXT_FREE ext_free; + X509V3_EXT_D2I d2i; + X509V3_EXT_I2D i2d; +/* The following pair is used for string extensions */ + X509V3_EXT_I2S i2s; + X509V3_EXT_S2I s2i; +/* The following pair is used for multi-valued extensions */ + X509V3_EXT_I2V i2v; + X509V3_EXT_V2I v2i; +/* The following are used for raw extensions */ + X509V3_EXT_I2R i2r; + X509V3_EXT_R2I r2i; + void *usr_data; /* Any extension specific data */ +}; + +typedef struct X509V3_CONF_METHOD_st { + char *(*get_string) (void *db, const char *section, const char *value); + STACK_OF(CONF_VALUE) *(*get_section) (void *db, const char *section); + void (*free_string) (void *db, char *string); + void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); +} X509V3_CONF_METHOD; + +/* Context specific info for producing X509 v3 extensions*/ +struct v3_ext_ctx { +# define X509V3_CTX_TEST 0x1 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define CTX_TEST X509V3_CTX_TEST +# endif +# define X509V3_CTX_REPLACE 0x2 + int flags; + X509 *issuer_cert; + X509 *subject_cert; + X509_REQ *subject_req; + X509_CRL *crl; + X509V3_CONF_METHOD *db_meth; + void *db; + EVP_PKEY *issuer_pkey; +/* Maybe more here */ +}; + +typedef struct v3_ext_method X509V3_EXT_METHOD; + +{- + generate_stack_macros("X509V3_EXT_METHOD"); +-} + +/* ext_flags values */ +# define X509V3_EXT_DYNAMIC 0x1 +# define X509V3_EXT_CTX_DEP 0x2 +# define X509V3_EXT_MULTILINE 0x4 + +typedef BIT_STRING_BITNAME ENUMERATED_NAMES; + +typedef struct BASIC_CONSTRAINTS_st { + int ca; + ASN1_INTEGER *pathlen; +} BASIC_CONSTRAINTS; + +typedef struct PKEY_USAGE_PERIOD_st { + ASN1_GENERALIZEDTIME *notBefore; + ASN1_GENERALIZEDTIME *notAfter; +} PKEY_USAGE_PERIOD; + +typedef struct otherName_st { + ASN1_OBJECT *type_id; + ASN1_TYPE *value; +} OTHERNAME; + +typedef struct EDIPartyName_st { + ASN1_STRING *nameAssigner; + ASN1_STRING *partyName; +} EDIPARTYNAME; + +typedef struct GENERAL_NAME_st { +# define GEN_OTHERNAME 0 +# define GEN_EMAIL 1 +# define GEN_DNS 2 +# define GEN_X400 3 +# define GEN_DIRNAME 4 +# define GEN_EDIPARTY 5 +# define GEN_URI 6 +# define GEN_IPADD 7 +# define GEN_RID 8 + int type; + union { + char *ptr; + OTHERNAME *otherName; /* otherName */ + ASN1_IA5STRING *rfc822Name; + ASN1_IA5STRING *dNSName; + ASN1_STRING *x400Address; + X509_NAME *directoryName; + EDIPARTYNAME *ediPartyName; + ASN1_IA5STRING *uniformResourceIdentifier; + ASN1_OCTET_STRING *iPAddress; + ASN1_OBJECT *registeredID; + /* Old names */ + ASN1_OCTET_STRING *ip; /* iPAddress */ + X509_NAME *dirn; /* dirn */ + ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, + * uniformResourceIdentifier */ + ASN1_OBJECT *rid; /* registeredID */ + ASN1_TYPE *other; /* x400Address */ + } d; +} GENERAL_NAME; + +typedef struct ACCESS_DESCRIPTION_st { + ASN1_OBJECT *method; + GENERAL_NAME *location; +} ACCESS_DESCRIPTION; + +{- + generate_stack_macros("ACCESS_DESCRIPTION") + .generate_stack_macros("GENERAL_NAME"); +-} + +typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; +typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; +typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; +typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; + +{- + generate_stack_macros("GENERAL_NAMES"); +-} + +typedef struct DIST_POINT_NAME_st { + int type; + union { + GENERAL_NAMES *fullname; + STACK_OF(X509_NAME_ENTRY) *relativename; + } name; +/* If relativename then this contains the full distribution point name */ + X509_NAME *dpname; +} DIST_POINT_NAME; +/* All existing reasons */ +# define CRLDP_ALL_REASONS 0x807f + +# define CRL_REASON_NONE -1 +# define CRL_REASON_UNSPECIFIED 0 +# define CRL_REASON_KEY_COMPROMISE 1 +# define CRL_REASON_CA_COMPROMISE 2 +# define CRL_REASON_AFFILIATION_CHANGED 3 +# define CRL_REASON_SUPERSEDED 4 +# define CRL_REASON_CESSATION_OF_OPERATION 5 +# define CRL_REASON_CERTIFICATE_HOLD 6 +# define CRL_REASON_REMOVE_FROM_CRL 8 +# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 +# define CRL_REASON_AA_COMPROMISE 10 + +struct DIST_POINT_st { + DIST_POINT_NAME *distpoint; + ASN1_BIT_STRING *reasons; + GENERAL_NAMES *CRLissuer; + int dp_reasons; +}; + +{- + generate_stack_macros("DIST_POINT"); +-} + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; + +struct AUTHORITY_KEYID_st { + ASN1_OCTET_STRING *keyid; + GENERAL_NAMES *issuer; + ASN1_INTEGER *serial; +}; + +/* Strong extranet structures */ + +typedef struct SXNET_ID_st { + ASN1_INTEGER *zone; + ASN1_OCTET_STRING *user; +} SXNETID; + +{- + generate_stack_macros("SXNETID"); +-} + + +typedef struct SXNET_st { + ASN1_INTEGER *version; + STACK_OF(SXNETID) *ids; +} SXNET; + +typedef struct ISSUER_SIGN_TOOL_st { + ASN1_UTF8STRING *signTool; + ASN1_UTF8STRING *cATool; + ASN1_UTF8STRING *signToolCert; + ASN1_UTF8STRING *cAToolCert; +} ISSUER_SIGN_TOOL; + +typedef struct NOTICEREF_st { + ASN1_STRING *organization; + STACK_OF(ASN1_INTEGER) *noticenos; +} NOTICEREF; + +typedef struct USERNOTICE_st { + NOTICEREF *noticeref; + ASN1_STRING *exptext; +} USERNOTICE; + +typedef struct POLICYQUALINFO_st { + ASN1_OBJECT *pqualid; + union { + ASN1_IA5STRING *cpsuri; + USERNOTICE *usernotice; + ASN1_TYPE *other; + } d; +} POLICYQUALINFO; + +{- + generate_stack_macros("POLICYQUALINFO"); +-} + + +typedef struct POLICYINFO_st { + ASN1_OBJECT *policyid; + STACK_OF(POLICYQUALINFO) *qualifiers; +} POLICYINFO; + +{- + generate_stack_macros("POLICYINFO"); +-} + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; + +typedef struct POLICY_MAPPING_st { + ASN1_OBJECT *issuerDomainPolicy; + ASN1_OBJECT *subjectDomainPolicy; +} POLICY_MAPPING; + +{- + generate_stack_macros("POLICY_MAPPING"); +-} + +typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; + +typedef struct GENERAL_SUBTREE_st { + GENERAL_NAME *base; + ASN1_INTEGER *minimum; + ASN1_INTEGER *maximum; +} GENERAL_SUBTREE; + +{- + generate_stack_macros("GENERAL_SUBTREE"); +-} + +struct NAME_CONSTRAINTS_st { + STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; + STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; +}; + +typedef struct POLICY_CONSTRAINTS_st { + ASN1_INTEGER *requireExplicitPolicy; + ASN1_INTEGER *inhibitPolicyMapping; +} POLICY_CONSTRAINTS; + +/* Proxy certificate structures, see RFC 3820 */ +typedef struct PROXY_POLICY_st { + ASN1_OBJECT *policyLanguage; + ASN1_OCTET_STRING *policy; +} PROXY_POLICY; + +typedef struct PROXY_CERT_INFO_EXTENSION_st { + ASN1_INTEGER *pcPathLengthConstraint; + PROXY_POLICY *proxyPolicy; +} PROXY_CERT_INFO_EXTENSION; + +DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) +DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) + +struct ISSUING_DIST_POINT_st { + DIST_POINT_NAME *distpoint; + int onlyuser; + int onlyCA; + ASN1_BIT_STRING *onlysomereasons; + int indirectCRL; + int onlyattr; +}; + +/* Values in idp_flags field */ +/* IDP present */ +# define IDP_PRESENT 0x1 +/* IDP values inconsistent */ +# define IDP_INVALID 0x2 +/* onlyuser true */ +# define IDP_ONLYUSER 0x4 +/* onlyCA true */ +# define IDP_ONLYCA 0x8 +/* onlyattr true */ +# define IDP_ONLYATTR 0x10 +/* indirectCRL true */ +# define IDP_INDIRECT 0x20 +/* onlysomereasons present */ +# define IDP_REASONS 0x40 + +# define X509V3_conf_err(val) ERR_add_error_data(6, \ + "section:", (val)->section, \ + ",name:", (val)->name, ",value:", (val)->value) + +# define X509V3_set_ctx_test(ctx) \ + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, X509V3_CTX_TEST) +# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; + +# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ + 0,0,0,0, \ + 0,0, \ + (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ + (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ + NULL, NULL, \ + table} + +# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ + 0,0,0,0, \ + NULL} + +#define EXT_UTF8STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_UTF8STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_UTF8STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_UTF8STRING, \ + 0,0,0,0, \ + NULL} + +# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + +/* X509_PURPOSE stuff */ + +# define EXFLAG_BCONS 0x1 +# define EXFLAG_KUSAGE 0x2 +# define EXFLAG_XKUSAGE 0x4 +# define EXFLAG_NSCERT 0x8 + +# define EXFLAG_CA 0x10 +# define EXFLAG_SI 0x20 /* self-issued, maybe not self-signed */ +# define EXFLAG_V1 0x40 +# define EXFLAG_INVALID 0x80 +/* EXFLAG_SET is set to indicate that some values have been precomputed */ +# define EXFLAG_SET 0x100 +# define EXFLAG_CRITICAL 0x200 +# define EXFLAG_PROXY 0x400 + +# define EXFLAG_INVALID_POLICY 0x800 +# define EXFLAG_FRESHEST 0x1000 +# define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ + +# define EXFLAG_BCONS_CRITICAL 0x10000 +# define EXFLAG_AKID_CRITICAL 0x20000 +# define EXFLAG_SKID_CRITICAL 0x40000 +# define EXFLAG_SAN_CRITICAL 0x80000 +# define EXFLAG_NO_FINGERPRINT 0x100000 + +# define KU_DIGITAL_SIGNATURE 0x0080 +# define KU_NON_REPUDIATION 0x0040 +# define KU_KEY_ENCIPHERMENT 0x0020 +# define KU_DATA_ENCIPHERMENT 0x0010 +# define KU_KEY_AGREEMENT 0x0008 +# define KU_KEY_CERT_SIGN 0x0004 +# define KU_CRL_SIGN 0x0002 +# define KU_ENCIPHER_ONLY 0x0001 +# define KU_DECIPHER_ONLY 0x8000 + +# define NS_SSL_CLIENT 0x80 +# define NS_SSL_SERVER 0x40 +# define NS_SMIME 0x20 +# define NS_OBJSIGN 0x10 +# define NS_SSL_CA 0x04 +# define NS_SMIME_CA 0x02 +# define NS_OBJSIGN_CA 0x01 +# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) + +# define XKU_SSL_SERVER 0x1 +# define XKU_SSL_CLIENT 0x2 +# define XKU_SMIME 0x4 +# define XKU_CODE_SIGN 0x8 +# define XKU_SGC 0x10 /* Netscape or MS Server-Gated Crypto */ +# define XKU_OCSP_SIGN 0x20 +# define XKU_TIMESTAMP 0x40 +# define XKU_DVCS 0x80 +# define XKU_ANYEKU 0x100 + +# define X509_PURPOSE_DYNAMIC 0x1 +# define X509_PURPOSE_DYNAMIC_NAME 0x2 + +typedef struct x509_purpose_st { + int purpose; + int trust; /* Default trust ID */ + int flags; + int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); + char *name; + char *sname; + void *usr_data; +} X509_PURPOSE; + +{- + generate_stack_macros("X509_PURPOSE"); +-} + + +# define X509_PURPOSE_SSL_CLIENT 1 +# define X509_PURPOSE_SSL_SERVER 2 +# define X509_PURPOSE_NS_SSL_SERVER 3 +# define X509_PURPOSE_SMIME_SIGN 4 +# define X509_PURPOSE_SMIME_ENCRYPT 5 +# define X509_PURPOSE_CRL_SIGN 6 +# define X509_PURPOSE_ANY 7 +# define X509_PURPOSE_OCSP_HELPER 8 +# define X509_PURPOSE_TIMESTAMP_SIGN 9 + +# define X509_PURPOSE_MIN 1 +# define X509_PURPOSE_MAX 9 + +/* Flags for X509V3_EXT_print() */ + +# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) +/* Return error for unknown extensions */ +# define X509V3_EXT_DEFAULT 0 +/* Print error for unknown extensions */ +# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) +/* ASN1 parse unknown extensions */ +# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) +/* BIO_dump unknown extensions */ +# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) + +/* Flags for X509V3_add1_i2d */ + +# define X509V3_ADD_OP_MASK 0xfL +# define X509V3_ADD_DEFAULT 0L +# define X509V3_ADD_APPEND 1L +# define X509V3_ADD_REPLACE 2L +# define X509V3_ADD_REPLACE_EXISTING 3L +# define X509V3_ADD_KEEP_EXISTING 4L +# define X509V3_ADD_DELETE 5L +# define X509V3_ADD_SILENT 0x10 + +DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) + +DECLARE_ASN1_FUNCTIONS(SXNET) +DECLARE_ASN1_FUNCTIONS(SXNETID) + +DECLARE_ASN1_FUNCTIONS(ISSUER_SIGN_TOOL) + +int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); +int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, + int userlen); +int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user, + int userlen); + +ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const char *zone); +ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); +ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); + +DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) + +DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) +DECLARE_ASN1_DUP_FUNCTION(GENERAL_NAME) +int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); + +ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, + STACK_OF(CONF_VALUE) *nval); +STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + ASN1_BIT_STRING *bits, + STACK_OF(CONF_VALUE) *extlist); +char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); +ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); +char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, ASN1_UTF8STRING *utf8); +ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, + GENERAL_NAME *gen, + STACK_OF(CONF_VALUE) *ret); +int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, + GENERAL_NAMES *gen, + STACK_OF(CONF_VALUE) *extlist); +GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); + +DECLARE_ASN1_FUNCTIONS(OTHERNAME) +DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) +int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); +void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); +void *GENERAL_NAME_get0_value(const GENERAL_NAME *a, int *ptype); +int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, + ASN1_OBJECT *oid, ASN1_TYPE *value); +int GENERAL_NAME_get0_otherName(const GENERAL_NAME *gen, + ASN1_OBJECT **poid, ASN1_TYPE **pvalue); + +char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + const ASN1_OCTET_STRING *ia5); +ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) +int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE) + +DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) +DECLARE_ASN1_FUNCTIONS(POLICYINFO) +DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) +DECLARE_ASN1_FUNCTIONS(USERNOTICE) +DECLARE_ASN1_FUNCTIONS(NOTICEREF) + +DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) +DECLARE_ASN1_FUNCTIONS(DIST_POINT) +DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) +DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) + +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, const X509_NAME *iname); + +int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); +int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); + +DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) +DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) + +DECLARE_ASN1_ITEM(POLICY_MAPPING) +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) +DECLARE_ASN1_ITEM(POLICY_MAPPINGS) + +DECLARE_ASN1_ITEM(GENERAL_SUBTREE) +DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) + +DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) +DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) + +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) +DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) + +GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, int gen_type, + const char *value, int is_nc); + +# ifdef OPENSSL_CONF_H +GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf); +GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf, + int is_nc); + +void X509V3_conf_free(CONF_VALUE *val); + +X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, + const char *value); +int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, + STACK_OF(X509_EXTENSION) **sk); +int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509 *cert); +int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_REQ *req); +int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_CRL *crl); + +X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, + X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *name, const char *value); +int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509 *cert); +int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_REQ *req); +int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_CRL *crl); + +int X509V3_add_value_bool_nf(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool); +int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint); +void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); +void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); +# endif + +char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section); +STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section); +void X509V3_string_free(X509V3_CTX *ctx, char *str); +void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); +void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, + X509_REQ *req, X509_CRL *crl, int flags); +/* For API backward compatibility, this is separate from X509V3_set_ctx(): */ +int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey); + +int X509V3_add_value(const char *name, const char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_uchar(const char *name, const unsigned char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_bool(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint, + STACK_OF(CONF_VALUE) **extlist); +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, + const ASN1_ENUMERATED *aint); +int X509V3_EXT_add(X509V3_EXT_METHOD *ext); +int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); +int X509V3_EXT_add_alias(int nid_to, int nid_from); +void X509V3_EXT_cleanup(void); + +const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); +const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); +int X509V3_add_standard_extensions(void); +STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); +void *X509V3_EXT_d2i(X509_EXTENSION *ext); +void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, + int *idx); + +X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); +int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, + int crit, unsigned long flags); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* The new declarations are in crypto.h, but the old ones were here. */ +# define hex_to_string OPENSSL_buf2hexstr +# define string_to_hex OPENSSL_hexstr2buf +#endif + +void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, + int ml); +int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, + int indent); +#ifndef OPENSSL_NO_STDIO +int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); +#endif +int X509V3_extensions_print(BIO *out, const char *title, + const STACK_OF(X509_EXTENSION) *exts, + unsigned long flag, int indent); + +int X509_check_ca(X509 *x); +int X509_check_purpose(X509 *x, int id, int ca); +int X509_supported_extension(X509_EXTENSION *ex); +int X509_PURPOSE_set(int *p, int purpose); +int X509_check_issued(X509 *issuer, X509 *subject); +int X509_check_akid(const X509 *issuer, const AUTHORITY_KEYID *akid); +void X509_set_proxy_flag(X509 *x); +void X509_set_proxy_pathlen(X509 *x, long l); +long X509_get_proxy_pathlen(X509 *x); + +uint32_t X509_get_extension_flags(X509 *x); +uint32_t X509_get_key_usage(X509 *x); +uint32_t X509_get_extended_key_usage(X509 *x); +const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); +const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x); +const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x); +const ASN1_INTEGER *X509_get0_authority_serial(X509 *x); + +int X509_PURPOSE_get_count(void); +X509_PURPOSE *X509_PURPOSE_get0(int idx); +int X509_PURPOSE_get_by_sname(const char *sname); +int X509_PURPOSE_get_by_id(int id); +int X509_PURPOSE_add(int id, int trust, int flags, + int (*ck) (const X509_PURPOSE *, const X509 *, int), + const char *name, const char *sname, void *arg); +char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp); +char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); +int X509_PURPOSE_get_trust(const X509_PURPOSE *xp); +void X509_PURPOSE_cleanup(void); +int X509_PURPOSE_get_id(const X509_PURPOSE *); + +STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); +STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); +void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); +STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); +/* Flags for X509_check_* functions */ + +/* + * Always check subject name for host match even if subject alt names present + */ +# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 +/* Disable wildcard matching for dnsName fields and common name. */ +# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 +/* Wildcards must not match a partial label. */ +# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 +/* Allow (non-partial) wildcards to match multiple labels. */ +# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 +/* Constraint verifier subdomain patterns to match a single labels. */ +# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 +/* Never check the subject CN */ +# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20 +/* + * Match reference identifiers starting with "." to any sub-domain. + * This is a non-public flag, turned on implicitly when the subject + * reference identity is a DNS name. + */ +# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 + +int X509_check_host(X509 *x, const char *chk, size_t chklen, + unsigned int flags, char **peername); +int X509_check_email(X509 *x, const char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); + +ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); +ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); +int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, + unsigned long chtype); + +void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); +{- + generate_stack_macros("X509_POLICY_NODE"); +-} + + +#ifndef OPENSSL_NO_RFC3779 +typedef struct ASRange_st { + ASN1_INTEGER *min, *max; +} ASRange; + +# define ASIdOrRange_id 0 +# define ASIdOrRange_range 1 + +typedef struct ASIdOrRange_st { + int type; + union { + ASN1_INTEGER *id; + ASRange *range; + } u; +} ASIdOrRange; + +{- + generate_stack_macros("ASIdOrRange"); +-} + +typedef STACK_OF(ASIdOrRange) ASIdOrRanges; + +# define ASIdentifierChoice_inherit 0 +# define ASIdentifierChoice_asIdsOrRanges 1 + +typedef struct ASIdentifierChoice_st { + int type; + union { + ASN1_NULL *inherit; + ASIdOrRanges *asIdsOrRanges; + } u; +} ASIdentifierChoice; + +typedef struct ASIdentifiers_st { + ASIdentifierChoice *asnum, *rdi; +} ASIdentifiers; + +DECLARE_ASN1_FUNCTIONS(ASRange) +DECLARE_ASN1_FUNCTIONS(ASIdOrRange) +DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) +DECLARE_ASN1_FUNCTIONS(ASIdentifiers) + +typedef struct IPAddressRange_st { + ASN1_BIT_STRING *min, *max; +} IPAddressRange; + +# define IPAddressOrRange_addressPrefix 0 +# define IPAddressOrRange_addressRange 1 + +typedef struct IPAddressOrRange_st { + int type; + union { + ASN1_BIT_STRING *addressPrefix; + IPAddressRange *addressRange; + } u; +} IPAddressOrRange; + +{- + generate_stack_macros("IPAddressOrRange"); +-} + +typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; + +# define IPAddressChoice_inherit 0 +# define IPAddressChoice_addressesOrRanges 1 + +typedef struct IPAddressChoice_st { + int type; + union { + ASN1_NULL *inherit; + IPAddressOrRanges *addressesOrRanges; + } u; +} IPAddressChoice; + +typedef struct IPAddressFamily_st { + ASN1_OCTET_STRING *addressFamily; + IPAddressChoice *ipAddressChoice; +} IPAddressFamily; + +{- + generate_stack_macros("IPAddressFamily"); +-} + + +typedef STACK_OF(IPAddressFamily) IPAddrBlocks; + +DECLARE_ASN1_FUNCTIONS(IPAddressRange) +DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) +DECLARE_ASN1_FUNCTIONS(IPAddressChoice) +DECLARE_ASN1_FUNCTIONS(IPAddressFamily) + +/* + * API tag for elements of the ASIdentifer SEQUENCE. + */ +# define V3_ASID_ASNUM 0 +# define V3_ASID_RDI 1 + +/* + * AFI values, assigned by IANA. It'd be nice to make the AFI + * handling code totally generic, but there are too many little things + * that would need to be defined for other address families for it to + * be worth the trouble. + */ +# define IANA_AFI_IPV4 1 +# define IANA_AFI_IPV6 2 + +/* + * Utilities to construct and extract values from RFC3779 extensions, + * since some of the encodings (particularly for IP address prefixes + * and ranges) are a bit tedious to work with directly. + */ +int X509v3_asid_add_inherit(ASIdentifiers *asid, int which); +int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, + ASN1_INTEGER *min, ASN1_INTEGER *max); +int X509v3_addr_add_inherit(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi); +int X509v3_addr_add_prefix(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *a, const int prefixlen); +int X509v3_addr_add_range(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *min, unsigned char *max); +unsigned X509v3_addr_get_afi(const IPAddressFamily *f); +int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, + unsigned char *min, unsigned char *max, + const int length); + +/* + * Canonical forms. + */ +int X509v3_asid_is_canonical(ASIdentifiers *asid); +int X509v3_addr_is_canonical(IPAddrBlocks *addr); +int X509v3_asid_canonize(ASIdentifiers *asid); +int X509v3_addr_canonize(IPAddrBlocks *addr); + +/* + * Tests for inheritance and containment. + */ +int X509v3_asid_inherits(ASIdentifiers *asid); +int X509v3_addr_inherits(IPAddrBlocks *addr); +int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); +int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); + +/* + * Check whether RFC 3779 extensions nest properly in chains. + */ +int X509v3_asid_validate_path(X509_STORE_CTX *); +int X509v3_addr_validate_path(X509_STORE_CTX *); +int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, + ASIdentifiers *ext, + int allow_inheritance); +int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, + IPAddrBlocks *ext, int allow_inheritance); + +#endif /* OPENSSL_NO_RFC3779 */ + +{- + generate_stack_macros("ASN1_STRING"); +-} + +/* + * Admission Syntax + */ +typedef struct NamingAuthority_st NAMING_AUTHORITY; +typedef struct ProfessionInfo_st PROFESSION_INFO; +typedef struct Admissions_st ADMISSIONS; +typedef struct AdmissionSyntax_st ADMISSION_SYNTAX; +DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) +DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) +DECLARE_ASN1_FUNCTIONS(ADMISSIONS) +DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) +{- + generate_stack_macros("PROFESSION_INFO") + .generate_stack_macros("ADMISSIONS"); +-} +typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; + +const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( + const NAMING_AUTHORITY *n); +const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL( + const NAMING_AUTHORITY *n); +const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText( + const NAMING_AUTHORITY *n); +void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n, + ASN1_OBJECT* namingAuthorityId); +void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n, + ASN1_IA5STRING* namingAuthorityUrl); +void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n, + ASN1_STRING* namingAuthorityText); + +const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_admissionAuthority( + ADMISSION_SYNTAX *as, GENERAL_NAME *aa); +const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_contentsOfAdmissions( + ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a); +const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa); +const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na); +const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a); +void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi); +const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_addProfessionInfo( + PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos); +const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_namingAuthority( + PROFESSION_INFO *pi, NAMING_AUTHORITY *na); +const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionItems( + PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as); +const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionOIDs( + PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po); +const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_registrationNumber( + PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h index 3b9f7139..1ae3a562 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h @@ -2,95 +2,21 @@ * Generated by util/mkerr.pl DO NOT EDIT * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509V3ERR_H -# define HEADER_X509V3ERR_H +#ifndef OPENSSL_X509V3ERR_H +# define OPENSSL_X509V3ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509V3_strings(void); -/* - * X509V3 function codes. - */ -# define X509V3_F_A2I_GENERAL_NAME 164 -# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 -# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 -# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 -# define X509V3_F_BIGNUM_TO_STRING 167 -# define X509V3_F_COPY_EMAIL 122 -# define X509V3_F_COPY_ISSUER 123 -# define X509V3_F_DO_DIRNAME 144 -# define X509V3_F_DO_EXT_I2D 135 -# define X509V3_F_DO_EXT_NCONF 151 -# define X509V3_F_GNAMES_FROM_SECTNAME 156 -# define X509V3_F_I2S_ASN1_ENUMERATED 121 -# define X509V3_F_I2S_ASN1_IA5STRING 149 -# define X509V3_F_I2S_ASN1_INTEGER 120 -# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 -# define X509V3_F_I2V_AUTHORITY_KEYID 173 -# define X509V3_F_LEVEL_ADD_NODE 168 -# define X509V3_F_NOTICE_SECTION 132 -# define X509V3_F_NREF_NOS 133 -# define X509V3_F_POLICY_CACHE_CREATE 169 -# define X509V3_F_POLICY_CACHE_NEW 170 -# define X509V3_F_POLICY_DATA_NEW 171 -# define X509V3_F_POLICY_SECTION 131 -# define X509V3_F_PROCESS_PCI_VALUE 150 -# define X509V3_F_R2I_CERTPOL 130 -# define X509V3_F_R2I_PCI 155 -# define X509V3_F_S2I_ASN1_IA5STRING 100 -# define X509V3_F_S2I_ASN1_INTEGER 108 -# define X509V3_F_S2I_ASN1_OCTET_STRING 112 -# define X509V3_F_S2I_SKEY_ID 115 -# define X509V3_F_SET_DIST_POINT_NAME 158 -# define X509V3_F_SXNET_ADD_ID_ASC 125 -# define X509V3_F_SXNET_ADD_ID_INTEGER 126 -# define X509V3_F_SXNET_ADD_ID_ULONG 127 -# define X509V3_F_SXNET_GET_ID_ASC 128 -# define X509V3_F_SXNET_GET_ID_ULONG 129 -# define X509V3_F_TREE_INIT 172 -# define X509V3_F_V2I_ASIDENTIFIERS 163 -# define X509V3_F_V2I_ASN1_BIT_STRING 101 -# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 -# define X509V3_F_V2I_AUTHORITY_KEYID 119 -# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 -# define X509V3_F_V2I_CRLD 134 -# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 -# define X509V3_F_V2I_GENERAL_NAMES 118 -# define X509V3_F_V2I_GENERAL_NAME_EX 117 -# define X509V3_F_V2I_IDP 157 -# define X509V3_F_V2I_IPADDRBLOCKS 159 -# define X509V3_F_V2I_ISSUER_ALT 153 -# define X509V3_F_V2I_NAME_CONSTRAINTS 147 -# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 -# define X509V3_F_V2I_POLICY_MAPPINGS 145 -# define X509V3_F_V2I_SUBJECT_ALT 154 -# define X509V3_F_V2I_TLS_FEATURE 165 -# define X509V3_F_V3_GENERIC_EXTENSION 116 -# define X509V3_F_X509V3_ADD1_I2D 140 -# define X509V3_F_X509V3_ADD_LEN_VALUE 174 -# define X509V3_F_X509V3_ADD_VALUE 105 -# define X509V3_F_X509V3_EXT_ADD 104 -# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 -# define X509V3_F_X509V3_EXT_I2D 136 -# define X509V3_F_X509V3_EXT_NCONF 152 -# define X509V3_F_X509V3_GET_SECTION 142 -# define X509V3_F_X509V3_GET_STRING 143 -# define X509V3_F_X509V3_GET_VALUE_BOOL 110 -# define X509V3_F_X509V3_PARSE_LIST 109 -# define X509V3_F_X509_PURPOSE_ADD 137 -# define X509V3_F_X509_PURPOSE_SET 141 /* * X509V3 reason codes. @@ -102,6 +28,7 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_DIRNAME_ERROR 149 # define X509V3_R_DISTPOINT_ALREADY_SET 160 # define X509V3_R_DUPLICATE_ZONE_ID 133 +# define X509V3_R_EMPTY_KEY_USAGE 169 # define X509V3_R_ERROR_CONVERTING_ZONE 131 # define X509V3_R_ERROR_CREATING_EXTENSION 144 # define X509V3_R_ERROR_IN_EXTENSION 128 @@ -116,13 +43,14 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_INVALID_ASNUMBER 162 # define X509V3_R_INVALID_ASRANGE 163 # define X509V3_R_INVALID_BOOLEAN_STRING 104 +# define X509V3_R_INVALID_CERTIFICATE 158 +# define X509V3_R_INVALID_EMPTY_NAME 108 # define X509V3_R_INVALID_EXTENSION_STRING 105 # define X509V3_R_INVALID_INHERITANCE 165 # define X509V3_R_INVALID_IPADDRESS 166 # define X509V3_R_INVALID_MULTIPLE_RDNS 161 # define X509V3_R_INVALID_NAME 106 # define X509V3_R_INVALID_NULL_ARGUMENT 107 -# define X509V3_R_INVALID_NULL_NAME 108 # define X509V3_R_INVALID_NULL_VALUE 109 # define X509V3_R_INVALID_NUMBER 140 # define X509V3_R_INVALID_NUMBERS 141 @@ -137,6 +65,7 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_ISSUER_DECODE_ERROR 126 # define X509V3_R_MISSING_VALUE 124 # define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 +# define X509V3_R_NEGATIVE_PATHLEN 168 # define X509V3_R_NO_CONFIG_DATABASE 136 # define X509V3_R_NO_ISSUER_CERTIFICATE 121 # define X509V3_R_NO_ISSUER_DETAILS 127 diff --git a/deps/openssl/android/arm64-v8a/usr/local/lib/libcrypto.a b/deps/openssl/android/arm64-v8a/usr/local/lib/libcrypto.a index 9f909358f9306f3d09a142b7454b9b1989e02e78..98ed61b1d9de2209dea4d0f4745cd13ce42478a6 100644 GIT binary patch literal 11155436 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
b0^*%n7;rbPIkpV=ts4%!svnSb3q)|;@*uWX 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�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 z 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%0DU@d~6>$96?W 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 }BM$;Bnvkn}N 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

}U(QA0H0U#gE9gW7qNTvU3lX8Xd={YV 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%0Al^j`hXoo-y>& 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

`xP^?$(N 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

Ld|? zges7POy$6ms-bLrE~YK*s%bh5XQ{aG!t zr*0^+k$1 zSNcZ6X5T<-=^HzJA$=qLVYNh>{o|*x>ODZ;2%X2#H}I#KAHIcGv*(ake^hvbY zC+s2j`qM-Q(nz1gy1%bawoH5S&#g~X{B29+Zs`+mP)6jN0_oe<$G`d;--np}%)V2v z$jHEej35KPICL%FYnbuKh_{oB@a;*Imv4Z0MteKS2QqqiMXsj(`K!ORk|&k4 z>QztuxzFVlgyVeMfBWX&*dywdG<|+`%uJI-8i_l&R3Fb?PBU)(y)XVk@)rc+*z0M+ z1;!lCOOl?wpBG@20T}y0P1r$O#(zm#sp~ZOUxokE;eW{|{G!5h!Y{4t%@lq)h&~G7*H(+|*>Q_zW0j?_i= z3Kkw#WP0U^?Uo+qo_Nt^7vc~LGTATh@*IElX7Oj{RYi3!-gSZ^%pUPR}fLf^iKzCDG$6~E(@*4-C(uB1$Sj-jNPkNzEp?tKZp zJKxl|ap3Z&$s)a^i9_!WL+>6y=MF>H@@>L}G^+w>PNQ>QLf5Y95LXb0D?o<^af;0r zoMH=uFtOPJJB?ng3*?vY2v4brE2Yk-)vl&*BsNa`Rle=>HmFIaZEJi%gSJY*RzVXr z*|cdZNh5R>das0rjW2|FX8eFnYkVQ}TQ==0?lEY*PHDfR_53T1(7d7at>Fht-yD9Z zbmws46_K48@Z&W2@vgxA8o~qk(a6>)#v&s<$l8Umh?V0k#Rsu!8e%qDDVvp!oYVm?eC}9()Ji zCf)~w@5LYtd@u8U2l%$~d>wqR^JH9L-4=KXzBhyK;M)^?2j4#4uLj@SK^XY{!uxFS zz0dPw@O`W}gX5){=(`B?+-US#B;No>pvRiE$QpPZdAaDPd(nwrbYV8SPh`Q3u3JHT zwrb=1H@^-NpIyea(df=vbmo=lNYO*J=tMXA=BH}3nb!2tv9njwhjr*sNpmYYQ}orX zYRt+DzB;z^D*8qA)_~AGWivzfGJXyE>ycjhUTg?-7GK>RT2rg(fsr@q>^&FQgR z{olU3;{U)sS9t6@U#Fy!@r`TPH94nR@`udT=*J;LZ!lvrQuTTO7zEu)mm)i}SZqXMAe&?|xZp z`GLDJ1V?Z#`RV{(nPT?uzg8~ngEtX=&%Zj_da1qUa&a2B7JMhyZ6;hw`S#znCcNWn zu0MW|3GcX?>xcI?;WC5$?Z2)jJg`vEA*#THe|J@JstFHl4Cs*l9uwYimD(SfXTk%A z7w{)^3e_>ukd zd+5JQXTkK(@1g%Lo&9(&*3(}@|9|Zg-xB!Kf0xdF_;=~-hkuuU{P6GcxgY*rKEDFG zikx=-djLONZSXrhWh>6zF(wLy&`Kn|Lm^E2tlACj4T% zdJ~qv7x{I(M`EZ6Rg@cvkL#cZg8cKpO*|L-H>fjzNxnFSRKdSs`XCKtk4{JF?j1-d zdtCYkGx6*fc$Ymc9pQrmaJgroBc4$K`U#$3UP&6euFxT{ENDVR56EBV z`rq#do9EDXtpCCQymS4R1>l{_T^@jUuK%h4ymS43_dR%mbnA@g`1jyR_#Qg+>j3ZA zUjqX0&ixg%jh)*oVfpLa-r!n&XZXzlQzYv#0qhaLKGcuqW)2c{-j9 z{C80M&j;>&$nW26$lN)>eP^BamtC?RfdhRzH2jju{M8L?JiBBH*`wy~iVGXmE}8C9 zTh`d2_N{GdY(e7?-hb#M-XJOHu3z}~u?5fN1xavA+rRH1-Y?+afJk@bVx@OLXoBBh z1S3iQt-tFC3GBbSm#yLl@(1m7u+X4g2!@~Mr87+8x(AfXR0;4WxIq<% zs{cIT@)z_!{h{xcwVH@amA^1h{-{7kDPO$!&gH*H;g>4EEnx41en$Y!cgjj7;!^pS z2Pzfxd%rLLmhUM)CD5V4G2r**fAo9uPYN_Ns3*TK|8nwQihkPy^eYc!6#9wR*qMIc zx0h>qU`W%^zZX=U%aUeZihj%;nt#Fa{GspWm%N>EO4=C#;}zsH3Cidwh%X5L1lXm@ zw+G4(`oSbK|2miT0npAcNw_#r{_g}ie-f0@LFe-CCH_+7FAEGMf_}B&kiX7liT%4& z{;dJmythPl`0JcszP*+t0d~KT^8J7d@3;W*zXa0(9ZdXT=(N)*O`0s z{QrLN9M_@TUu!1%$Io${`f#8Tl<(pv|F48={@&S!=S!mwe90OfIUkq%raxz|Umx?_ zj8N|H4P(Du2z&1|F@H}4*ZMyr4ST-^o>`&1{1<-Q8E)cos}>L~^&Xz^!qYbs5-IN%P;)-m9X#G{I4^ zpqq%t6RuyA9vtct_8tWA3w-gza!<6Bl}MfacT6`dlk&80mFEH`cdkpGhQ49u{psyI zCEO=dUDMDv)O=r;$$3-24+X+~HY#h@9aawn!|Qnu-YvdvqjF$9=>CYUVVwclj zmw4*Zt75=q)~xbk|9$4J#U1J5zngqrNk>?BlU53_&h436%>CHZ=UenEB3+=4O=TGm zHr_PC`P!L0$8#IUI*tz-;cR@Ni>Gmsy2g6?wuLQ2MmS%r8tZ6C174=ImunLo%>^Tz z$4W*x+e$|`Uq3U>@#)+V&dQB>j?Gnhj{KYKIXy1xp4LeJFS)^gA-1O0lQ8;)>QbKFgl3l!aC08^<~RKzP?>3#&F)jdOhY2xZ4la5O%m zv|E8UFHqV&8*?4Ls$56K&asX?q%(HrI*#?Ur+o>|M%~r^k~ZGagYb*-;~hVu+|iUb z=`wrTK>NJ4N3R>QlN)gzoKlD9N>VL{xy zwVP6`X>XCA{e0{h?N-rn*}SSPJM$dP`ARz*NDu7pWlj5p_T38Z)8^ggp%vNVMl5{3 z?*vDRC8lC?+62d^<&!}R{nX!(ZxmQ_$xg;Q7R# zTBNk^C;r9E@x+gJoE$mAd0JQ6BcaPY;y)yJJvKlaUY{Dk(+r;PV6n^EOW0~d09i2Pg9 z#yK)*&!GpD_6?ci9NS6vE7I+hbPK3U&Io5S;VqeYjx6ds5BLG{aqeiv%6mrCpK`P3 zi>Ld#B>mBnNc{`qqOVQT=c+fa@#Nj+J~6pqZPP@heWn^+(>jql-af*)DTlhLTk@;q8%(VrtcV(!R#>$N>;pH1(6eq?>) z?Mi#E-r76XYh&~)@4C5uO-ZOenfwE16PFW+yTzifDe0~s%uBCt92tb!^wlNN`mmX| z)UPN}^~Re5@Eb$**ejy-6(x#(b}r{fUaz!2Qxd0JuZYtdhXm66LehtM?8V*n*23<3 z{?{YxSESqYQ8(H2X9&xh`d*$h<`FLHuCMNA(;JapspqKqHvL`d+4zR$8B3jRBYv;T zrhhphy?)P)qn=M(FER>W1~D@YdtHP*sCot z_mw^Mrmx0$PTe%pOta#0MQ@7t$Nm1nIQ?9K(teJ$`lj1mX8P4P#ORNwTlC*Q7^h6Y7(|#o^^*R$q)#KvUT6uANsG~Mg$ARqOwwE8UDSm*bW~HI|L?dm zPH%z7nzSAj*;lH1OE0Cp?QNWzqLu5v5lT z4Ap<-Q1p}3_Y3MRxSFm=(z`i<1?qTG;-TlsKpk(rUg8J`>a|$np-HeVO#>}@lNRo2 z3bY{-`r2+#_0~yo`h@;*`pKWDdc!Y5^{)r0`fWF<`n!`t9}U#&x3lB)W_+VU^1qc3r$3#b>Pz}r z^jn=4{hp90cr!{rh(4S(+@gzKYZ~NlzoJ_7h|8n&MKhxH=$|F&jV1oRs2Ob0-Gig_ zhXx4Vq>2XyN9s0oXyZhGe1j6D*Eyo}Axe_I#F3=8_e;`uyCU_91>+o>OUF5Es?B}; zHuS_IzRf5b=a`Ayk3p|hqvK-GYmJ$%_8*~t@8u^pL}PDg<0G6K`&_}=p=wOc-tvOA zk?5-#YDA6L`Nju0cU-x7O+oH0?rolewGsEB$40u^Kc!zI)Cl(sRjFy1PI)DyUBG#@ zdAGW4q>stVb~l!ChWYaaYi$bWu1-V8!fcKlWNAr@%1T)TPA$zMe3cT8OFwo=c%s%OCKJeMH#n( zuRV9AdwNlfZiR2cd#ZfPVs-CM!Ish1LyEA#w+=*8&W>6dBx>|vpLw<((5^C3kK?-{B`{n)D8$@4BU z@wQ9VKUt{hyHl+CuEH3-QH!e>W|6k7aqm*1IbZkYHOq1zb=xf=?q$?9BX^m58SNxo zbLv^8{S^K3Ci}@+N%stO?KWYx`AkQD4s&?mG;INucDZd?gN)5nUDd$s5Sj__^n!d1aj7itkN^H&D z*zN0n7OFpltuDmw3yu55DZ2BX7~L^V)qgTm(^KbL^{AS zChdOHuIcYjRrF!h-A?;cxqBgl_I*4rM*rY$Ro^uO{G^N1;%d56FR9Cy6P7|xKYfqo zKJA`D8&>7{+tO-@tx3##)Gf3rP?Kxe%UAO#G&%C5tGx}Ka~9eEJ+%H4bzK%0qyKK2 zqCa&{sLqCFU7xS%t48$H4=9Olp+Q!l{ljScF6x&BZBASrs((5)M*re&MSqfdE}R*o zx6fAf<3lz5^vyl>W7PG&YkKPUCaLg|rgxwCr29+qK6sC!7r;wnh__F8g!(7eyvloO z-YWMh>Y73Su;;QSigJfd@aKURH5U4@QcbLRk~FKn$t$y45^E-s_IJ=XQA@0OpE@`L z{rKx7Mc<`#uX!IF1p#{ec5b`;}`>tw^Q}(e5%iyoDnvC2>+o0|A7$ilH-_lC zaj`jD{-`)(Dd*(4RoI$z>XfQ))a8hxOBHq&s9{OS?w1}9Nl;-)H;*5X}o-gD%y59QDxO%6u zc>MacigU{@#ku)Uiqmseah9J`oEG*p%iM{~L#WJo$h^TinbQco2lq+K_}`qT(2@o+ zN3-Tq=fwxlh(Dhx-(G6$KMi3YYAE|r!`PP^&fadTC*JCEc8zj5BOL58bh(_dcetF% zQ(aEG-Q|oK<#Hyy=yLXa+2xEtJsrR zk%TWXD!yoKQ>@bdd&ZUt&$*nQ_<3s+XHXVt?6bK$L+w`4E!Xv6EMu!{>_uz4&vQ9* zWDGowBq}gjps7PpYITOk6kUU?zoR_^$ zTerEKmVPehaw+#s?&e_3IX$I&nzqN~9ME${Rop(8(_jwZGV<6Lx}5)u_T4Y>g)Zkv z(pna~oL2+u_BQSP3+iIZjKjCuznsoOrdM@Ge|<35G1x(hrl;jZ>&xlg&B*n=wx|D4|{HL0eS za!=yR+(`YG;O{u`FPiWbVj0U`h5w*Z&ScuuJSC(4i8&+dw+xTdy@O-)iUCQwr=P0l zPrbSR$r~BR<8!#Lvg<1cs``p6@BtV{E}WQNUm6pq-v*ux+EjB@EdG5Ae!g9Q@8_z% zGbV|2ar#!$eaM)y5}z${kX?`HAFC(c8KY~lD*i{3-n}4Bue>@|zlXMD%(w;lAK}i7 ziqW$M#Of38uwHvsk^`_P`pEq;J61h~3yg z{L>RN+!?tA+~s4b$;kVSI}6z76IPl&g!m12VLRT%mWu7Ui#rZp#YQ|aD^}0Q_1hl} zoA3(u=1JgIe9wZsiSFm`5W5;$6AG?Xd49jmO897^t6l8e6Qo~>FaLaQdi}!*vHA-9 z^+&I^>raf0!OvIqo5}YI_Cx%jEH$L&O=!C;E>?fIt6hKenizcref;Zjs_tgoIQ!la z^=ER@J^7^7G_B@6>X9F)+q;x=j5&tfv9bD?p>}-%eHVUNtR50)*F(F;=+W1xdRS7D zZe<+gCf~jv$Lcv_ux$aGwqQ&wa9hpG#NBL9(nqGKdIsZ}`djV#!{_qKo}exFU7e)g z+dWRd+a9A&PqFKFSyjE1`oC;RsQD%NHc@WvwQ>5JT~vK{&lr72WRm_X>bgqpR`W;l zAItrXyDRCdC^r@QzXEK5rCW_v?OO8+@cap-?lSsd7wIIf61ep1bJQmzx6Hi&*aY%b z@LZD4--BR z6^CtJ?LLfsVkyhnifz_H6sLymoQrMN0=7AWv|1GKfPId&D$f1brtQ%36!vL9_KAC$ zoI_+hfL-E@1LrB?H;_;4^eODq4r`Kb?+qLqW$&jr$L6kfw_>YfQv9}hf52A94EEdV zn4yaEstJ#~?bzzr0sitTp}{Ha^?vMiC3ZU2p*T%jO<7{6w*>5TtP9&`+G%`9?DV79 z=`8X_k5ZhEVyg>y&k{OfqYI!_)L6wi1{y@>D$Xou5H(40&IV^H=~iN=XQRJT>5r(X zz_HZ@*yqSQ6z4$FSV@x&4F*C3t7*IacKNg0Mqvj>Vh?Y@E{?!H-puzInVyJwetR8p z|3!PP+3{Vj#<#ecwhvdF(PI>6)ZL0RayGuh4AL#c<`*hXY_0ii$KPF3*%^LdpyG1M zdP(5Bzk%7&N|&snkQ}cT@2H56cMJ@1IWNHa0!ssC?EuRJmIExR11uld0$}zIuu@=U zz!EyZHUg^x*1ZF4C$M^8DIH*kft>-?y8}#Py(K=uF|c0;SYKdiz_520>YNEI2N?G6 z0xTcc0$|v@3$RjPWx%j~7hoHKRRME!fb9fU4-ETvA>CnMXMnjnz_hN^ud8Dq_Ul5r zzQEFejp_i)1eODAOb1v#um!-zc7T-vD+89>0k#oX6|hMiU^{`;1G}RG>@cu1z@~P9 zY2Bz_H^;!cJHYw^O9M8e11u9*4zSrBVEMpU>l!$(1FRHS8L<01z%~M_0=BRNY$vdK zV1*Z96=#5DY6rZByE(FF&UDOBtu|X9C2n?fN*Ajdl|5=^szdHqy6GF`^o+|w;t%rO zpy$j4hkS=O9RKw*zIz?0Z2R*UJXSTbDf0@9T0miW!bKeP6jNMf~AItn2yXWsR>p;iN#gE8(OI@&5GP2>aL3 zp8ZNW{ftdnGbLP!+sOB*GrG9ir&(N;9{gpw7oc2AYU`samCJ!I0lpsiYy8Sfd$jdl zQaZfPlBL7TiCa%xxz@9-&k{?e>93Qja5bC66KXquajn+GCyO!k~DZi@P(YUDoUSxM}ipx0<-Mfr5Zvwx!(B)i!E@^FARDVx*mvbt*HMZx1s(I)V z88^(byNo%LT+ZqJT+Urr$K=f9Uc$SG-_?E2+FuQIIipj4Sv3_Mvngd(RcP;Z<1IZ4 zsvcLuDhh_XocE(=7NA!Svlg-avYA!4s-bSp66$VEDX5xmSv)@3wQl?}VE2AKxxUZc zx4QTC3)frkx!JueA-qd}CE2YUFRZWad0*8kH6;7U*Hh{j_q@Mq{$+Ej{y?4)N~oLj zVr)m$WcRUzur5=3&aN7E?=9{$B|Q5P(wsazKeHu zt!00nsjU&+H3;2BJ#DFKSazkVW%F%rcBCaHyFpithRoiK1V zh-t{Qnt2a_qv4Tc@~Gb&THUqsXo32TiEn2t@m4?Xo&DDwB^F25(;OkV@1-O*+@51$cW&Gpti*4%Lfj08qH$bQVzrG8N`gZ8=f1GBQ z(t>LpU1S(LEA22eusj71pbSJ&3xv&hJKGU!;Sr?q#n=7G@2)7 z8ZFn|o_gx`OylI8na0<*|19;hf=uJfxtT`m$U9QM%Fi^;PR}&jCjLCNeL<#i=7CJ3 z(XALV-fJpV4CcMEn-?iY%L2uirP{N-YD{)x|1PP^wS?@wmc;Di1&VRW#?M(>aQ9{JMnH=Dyuzd%tYqf4qgbt(I=Kp;~v_Xf?vdekxGi4(E&6j&I3Ml{%ihscY(~k=;^RKeHXb9emVnwiacRI(%RG>-s9!T=3Zf^fu{h zwj*@SnE<`N=*wP&ogB0@~U2!jV@s8Y;MCNS(S%g!=Kx_ZcZP58C%y~)$m9p zFy))C`m<(#h`Z^)A>+40jQ333fjo`$VS_Ex6U;05T#}!>%98!VgY=SkWy$K{;u9-N z_6+xjmk)3F(k%C?hA&AEEnSx>FU#Ird6#{<+ibG;R>r^yl-h40Q%M`x9~(hBce*E-W~zkg*F$O2maY|Nc$ae4S=nP6csI{{LZ?O+W!BG{HOpZO z?bRhJw1jzV<;PdDN5UGRtQm9pzT~XSYm$4ZA-L1bdGYhAinAhAai%lB&_sU0GY}tr zkm~xc!94liBtg!@l00&Tl`D~RrrNdBGtl8z&Ya=6^8ER$Pp~iaD$=%UQ5C~xwmJ@2 zl&go%Y;^SgQC)JJVz=FNBX?_a7Sgbp0~|Na9OB?S-2}e%&hB-iGHeicM-K&liZik1 z&z$Etz>x$cGlx3tVU&4JJDpEC@JPZeV1MnZoG$MDYG<(I)73XtR&hZ-XzdEIz zrhX@F{_^v=>p25#z*C*lj#j>tR(pi{TS@zyPH7+gF5Zm~pU*uQM%p!<($4%Y-ppm^ zbC+;V*?>norJes>yoZ;b&+QXJ+7+GBzVlr=lrDk3oKZF4;ZA9P`rWjB7eilk!3>pg zIJ6ZSoAiCe8pU?I4NBqF^+Tg!CM{&}I&OsKM@Lfcvs%QRpWvcIYWa_htVV=%% z#fM%0qvfidb;rg<=|)pYy3w4IZnR8HH;$L4Gd52*PTrnwwBDI+oN}idr&p&N4f*ND z!RhJ7p|W)2NI|-B_{ntR=-hPUQ$5`{_H4RwWp{DyGD(&arR{PNj2KW-sa-9;Y{+wpX3J-u z;T}tvjdh~zdP}&Cy+PRx;UUIBTZpj^TabbMlW!irOtZ8fj9+p?L*kMf+RkW3^Ou^@ z@|9+sJg*t8T8MEZHpDm@A7Y$I3^5vegcwb|LX6{mLyQysLyS{{LX6WxLX5-Lg&3b+ zA7UK4DZ~icmB!ax?RUkxDreHJhDW+qHWsMu0|ISqmiYvHiGw^dnZL|n{<5h=ZEq}7 z+nG15JVRW2z@PXPb-geTflW9Y@JSxnpsZQQ{H}{RP5<{4{<%~a^O^p+SHJym9TvM6 z%~@)JxmhXKoR0|3EBNO}g5P5dH|I!GkQ@0%!;kZ7aQeS9I44L z4u6?p9NnK`eEL;}aqN7Cai%`QXn&7%;gc%QmZi7<{9oaT`b+afnkGDvl-=+GJmG~W z?h1i!Jt~ARjHQ+}XG`IWo8XJ-PpA85qWj{*{yyE0LHCwWWAR-P7wG=f((pBB z`)chCtD(Cay4OSZ_n`Yn(EYE_{V;TIh3;pd`lOA7(p~)9j(jfq=Av%-KZ4#>KS1wC!i^^NTe9dZd5O{C_&#O&gyR{`dL3f4FgQP&oQL<^tV~rBQ3n z?u71th3+3g_xNz5IWgR5=@D+6>=kab_6;|V3<)=mriB}4t_wFBuManxZVES!XNDUm zMur=wvcrwjw}l&rCx#oJ-X3loyEFVBOe0&5uFz7HHlI&A)`^UqSQp;fB=ZYsOh7|NfwEzo=tA&-C+m!${7!{eMx< z{HwI@?8jcPq0_C#!2&BjwH19HZ_@k__N!sY(i_g^L+?S*JIBf#l+|dt-OBuv)o9JP z8b{_@jiU>!%r#k!#zj{AcPoCo6~Enzzi!1}x8k2$@y)IH=2nx(Wu2~x`H=zaFOa!_ z7T(YEEymZqn71emtDLbtq^*&;g66Lj;~Lfl`OavKleIw^D>dv~J=}GA_3)|b>@7(D z_3-l}Rbyp|Ypsp(Q;VWpGms~pdCfE7%7JIYm0^7t-zQm=gp|y->ptghk^zj>8#?<) znbL>}Uz^<>hwY}2zE zdljhfi5r-6GI@}-OypQ-V4eB3qgSXhKlw7(+CiM*{jb)2)cN%Kh=j%Co8fy)YQ(qd z-3V>YrZ}$sp)x-2K%d|oQfHmhgx}tb-`;}XejLC31b+L;WBBa&?WgeDPvf^Y;I|*d zZ$Gpfe;vR5D1Q49{Ps`r+mGS5pTTcG7x3E~wd8E;Wok|`br+dU9_Q2f-pCx!xtS+q z-+%V;;CRjwW8>W6?4g12T)Lvz_<}!sLtqT|mJ(uHri5khGX3?Q**9wOwgr}??1R%a z<4}QSG_2N)3>gE_7Y)dEV-DlDiJEczcE)daYR0L2jq#>te7Zn0&OM;9mdqHhL^Dp5 zGRAvEV=Y-T4wq@hkta3dn64RTp4I%i9Uk-Zng6@^bjCXk@JMj(@E~^d^Xpyh88SAa zY?B8zW*SW|F!#HNx!;mZ9f%295g!1-1Ir- zrkkNvb3XNiRwtRGZVPkaO|{t7MVyF<|a^kHam3|i0!hg+aU zD|DbAb}QCws~Tpz*AkM=eo$MQ7LlE*CfO!yQQ7TVG^70{S9{ijy>bfp)$wcPr!4H1 z(}&+GHQ6>rjn1xs-|mCIY!;jCZ8a|YD){ZRYRSG$iRCCsEqf~b))$(sS5(`vjqu3} z@PHTER8h}Ysqbsl?+xm?le+B|TEHv&g$B^#J?QokH25oYI}8nuLAMrY&`LV=Up)Gt zgf*__56yx3lr;(H$K;tW|I4y^ zMPO|Gfhns!|68)!4!``jW!0RoxG1ZQ8~rjVvia|lOOeTe$fn4o8`%_@+>C6BOvWOc zB9pz5O_9lTWK(4FZum@O@-1XjWbzEMDRL?D*sdX$;j#{NQRdDdbIlXsuiN1>8+DIG zMv=MJeE2OMxl2S=r^9ar@Ldn&uNQJU7k#$?9_@=9_0Ke%$lerwon`kQkwuYXk;hL1 z^4MP!c@+7J&u&Lf{+|3TLk6Gcx4<$3Q3K z@-%XJ5V<^zTpmR(L(ZK~Y``YTem~Q`W490D({x;~mUq$bX1v&VWZ9pVH8s-9yR1Pq zz4240tl^0Mx3G>QXNWYu5$%-t&nDjD;XJ_kXA+-H{%iaB#Pd7D`1Yr}=j(|{eD9OY zy)0qe<={Whe4^XLB#j`5ADj+Y;st*Y#Bo$osmT>Vbp6Hw3~< zm{(kvZ#fVQujf7Zt<$ORIXUpH+JD3@9 zppW9JjH7(+XQ*hd9R@6@BcNb(x=_q^;L3bG&q>r(+y@ z_0sKpPxQ8HYtGFs=OoV4AC@w;DxLj)Bj&lb-ojqL={=`b<*<*>A@ETyXJ&%S`4;c@ z^qf?c!@j=$DU+(w*~d4ZXC`|B7o04tPfNMKDxH0O3k5dD<-CP`gJ~(VtJ2wPI6Y-- zRVI51GZwm>2YA2tza~{&k#cuc>bV8=>%X2;Kd_o_1izkNpWi*V-t+RJs)HXFSH->Y zVAU-tcT~y!da}=xbL3fX>cu#-7k7R5@89EYCf1^QReZs35B|D*>vs7b*V;aU57-Vx zs~8HbxxdA8m^G?TSuc@&@Z2|7aWGN!9AaPJG0i%#Tua#+AE9(P#@QL=JCy_BGp9Qm z;oTP>`H4s7Oc!a^>PFVAj`gcg{*%f(N8_GiU5jp{&@t&?t^rCaq5Ew=hfHL`j*<#<9CubrbRHQf}O zyG2RhdzQrNCbi*jn@f}19^+dhFZ+{iT69gl7FS)&_vh7o!#qr})_7lYdY-U^yS-|6 zcZ{mKkJXg?*9`V>y0j4YcCANEmKyF}SY*|&(NbzwkZ+Jv~i}2mY?kH>^HqVS;{pQ6hH|CV8FQ33x}*d-^k45^$UT^P&X(6X1Oc zYxJz5zv!*h@2O&|&YfGngGEXDG)46uF8V-ERW;vX>V_@z9;Hs)z34ki9qzG&de2Zk zYc9Ssl)Zp*zoJ}S>*4#FGC$T*ysebSonF2n(B(9^&vCzEAMSdTyB1T`p1yOGlW&GU z0I!6*>(86v_rWV+MPFc%^xJ5Igu7Ayp5T4g#JdH&@0fVIns`4idPl!T?dofyoO~t1 z+eA5QlnBB};Fa(P`d-3EC`b6_Zc7OFYbh1$v>t6|C~F-&^C@j?r0?#9emxbdd!06= zt&Fy{6hSA|=1Z-8tBn5h_K>*J$!*@c?PdG9FR?(ed0T7umR-S}D$^~o-W1|JLw@3! z2@lA{(819hZNeD@H)i#Tkj_g>=PA+EQoxc^`Y^K~tZ z)(eO$P`i4&7S`%BiA#k(zafuWXwm0Ww?0Z&@1x|ia35uc677rT8@yMF?DR)h?<+-b z>wM4U`5 zoFgE3^9t)sysvPsf#7|msLsUuIbp&3Ibp$@$C(9!H?O45#3#7l0VZ{>1NII$?Uoqd z=He**F(tyfbK7ZFSiucq8Mh zlKOJ`Gqv{ZvYL{flpo<9UD!iE3hb7>uC>>wHt${~)IE)`2i>u^$2Qg#PwA)cRG6NZY8pY zec0{_EwL@Kt)zav*1c^z=X9LpUa8I8ZPZ*;tXq4v&c6VJ$DbZv7<(Mr3tlAZcd!gZn}3&ZtmI45GG zMe}~novhB1xAb?3yGHBkODgFGea8*OS511H1~ldw21BI=46bp65Q-kBk4J|D`xV@1`XA>T36wJrD1v(w_dc zW88~*dg^wT?W4_d-_%KPPJnOQ$X`I*Jow`Y`n8Jp&-u1Fk>BsQpX$M4z5%Vxa*qYx z%&(?yuiUljE`WC``ITCFcvqqODoJx2@sV1xZ?+O;-ltV4I<9tK*~`VT`r+beJ?qL8 zUF!3E@qYaY=+RbOtCtcUBQT}AZxA>lkl7W~FA|xpP$GTzpra?i2dU8Y9`rPN&i7U^ zXKWDuOYu(qa&%Ufn&5jG*iX<`55q$*1AoGj?E5Y9@VwH^`&(q;2}?I$H|inbZf5!2 zd=s#D5}tsqllW`tzuy&w>)o_&UI%^nbkS~o5;S-SJnve#6Bs<)4eU#%EfP+q{t}*2 z7;A>76z(^}PuIOw_95|4;JYPg3E+*@+o&IBQh;~A{w4L}91Gu86Hj;VE8zJY-h2SL z;2U4>1IPv6Ap0hwuOvJXePxE>-S-J+eY2px!V>B0M!CN!iZ|^?R_*&`uUKdsb$GI< zUTEk3f;LrP!)DPY(nG)9`dgMzUsviP`n40RP@V6Kz3&vhW!j0Z==(nc--=9r3C)%j zzNv3T7MH;z4&X_gGxsGjl2lR+ED0YcPXDmbs!zsmnSu{60e>J18~+hyZl^9E7aq_L zV83=1?$N8^sW4;=Kgeqo@6lhuPlzemqgzX?$ktoXfii0UQuaRblnR|kqj#%m$1V6r za_{JNrHAj=``#G}X5ZotjmkB8tQHS;g`CX?!*rr{-W2s*85%dyB$!kN0ZNUU+g2;aP+$Ui-0UPEjrI(Y&X5 zW)b%oac<&Tu21khMx2{C?`uPO|AhCRybtrZNp~yZF@%r5*2OcXXurNmv$u^Yiq(&E zuF)85+pXBSf#h$V$lbf(Xl6}yAbFbI@+99NyJsNzn&(P5R+lp^2a>Ouv(*NYH-dVc z>>uli0Y?P+n_dg^L`eSr5y18Xivlm9{kXpiFc{Dmo+@`o98f5>I@TA9 z4L`my$}^x)(+|_9`RMI4^j(!2@B1nC@b~b3lQ-1Uc&E}{t3`W%j%^x=ZOXttt|)w8 zU(VTNkMX{Ww9Al>X6DbC2gBFq+kAYnmLgz9oO^@3G9T;9*#AMXSalVm*V?d;fK-ak$Kp%ZunyJ;6v^p^bIYJ6JNqRwD^F|T7qwAjmXQpWt^Sb z*1%rOP)me+g&OIt##e7a=B_CW)33l+Y6{4BBs@B{_6~RR5bk;;Z!2>RsmQRkI1>J_ z=?Z*52YV-Dx4urR9#LEkyhgu^w8P;2#~8znLi4wo-N#qE=%_LXorM-v_ZlTQGW?PgwB-kvV9+yg)k-(Vs0rQzH4(eOy`ehi;0Zk6)xL@F ziMevGUbOGTMpwIekLU~j@Tu!=@t9%Ojm-E(f%wuuINQ~}9iOQVzLar5D|X?;?XGsk z67Az0+BOMSYUA2C`Q3MdwGT6X=V*_FD@(@*;&aUSGuW#WkB}zQ)gFVbnT9Sd0I!+H zP5r?ycuzbKz*9mwf_LW_kC|pcApER9zET@&;{6P~m8H3Dt#`WGIrq<3fW7<;KB2#E zd2QaR`5qJRYR<2uKjL;`>sNGif zKx&d+QT33=i*HXTPX2;D+Lib{vyfq#D_Db_@)muluPaK{zhrJ}3ciW4;5yG-^rf>nS)YR* zZB>)J!-_xDUnuGdzsLDDkmnD~NjwGrGr!`kQ^S0>6ej8Ouw{G)>%FD$1O2r$hvzwT z@$=~7D*UId={1DxntWPOP1Rm~t zT1)oM=dN}9Snn}tv7d3lFiX5o_$yY6^$unH;$%F-nwT$xF~(`q)DtJ^>KLCh&hici z7J;19F^0AhC*z0p)Pu38ZxeN@gdc{IMr3KP7UgS{IS}rFy^?;30X~5KFR0yKCSj4I7I>d^X>@Fy zevcMPJr0;Uwts+LjM+?j$-GdxV)gY4(8$AhbO%1}`^+nR!W_d6%>w>f`Yc+PF?j^@ zd2)YrI_(Q1JQZ4{LN_V1x1xC26V2FnTiFi$CZT2OWs&+V@Q%=O89vfS*z;ZZPU4p@ zp?xxkaHC0^Fz>Hv^Db=0N7$Yb=+}4?-oyJ5HfWQU(zc2Do~_IQ8HM%w^M&zd+UwD$ zspwW2b3IHs58?~I2L5pRDVcssA#FTqQ`H{cb(Gy(Q=o-K{|GJosTrjb6j~ z$)7OSv>RLSC+r1>ZF&Dhc^fG2d2Gf}CDgZj-}W-r!@Rrjtr;Kq;+bQ6Mosa_oZJ;c z*L{1-%9u-3h!?shVH>R23eL0e3GIfEW(M;zlCF(#Hg!#9UNs({!n)t@KMrP$Fpx1q zMb$N)C}b=W8GB*hZuC=6Uq#hVJR;kJk z@a)QSBXd$3b&_`PW}e|K{Ox+?Kz1=lGL5`biQC8+yvx7lbD-H_Az$xMps^n{k+96&Y`~5lB;9Iso#0^4iEo28zRiromP%Os%}B<08?bj`Tcqymyboe; zC4XMq0G0V%=Ga1r%c8DNqr)QL%ihRlIdU%ZG==Dpr_gU%GKML=op#B6;|V@Dale7@ ze~T<6^6bv@9N$h^Nn6giy&PZgUi8@g=$MpL0^eK zJu1LC7ri$I|N1!ezfI=Uqr>(6_|{?gm7<$gsQ7`}9c|*vwo;E%j0ui2K9IY--=+@a z^Tjg07u@#ZkNtCW;IuQpkV}1@V6NhqB`JivdVf{&u{n401$C16FQ})?rMyf1B>XOI zk?;iO^kmLt3iEr6(|s}*aveO<&iLeA#`5iqSs2s%J^+t|Cu1wJ(2;fEJBe+2vhM9N znG2D5h+l%E0DN`SUHrSb=uMeB%SVT@uHgNQGEY-Jb8hfpocANzH(yEcy+<3f&{3iz zRzRy^%&|zni%&QZ{@F@8nGYQtprw!W?+_kQw}y7q(kAw(5RUe~%NRuTwb)xL{G5sp`%CDa1dajllJ$nJdTvQqJ&SSHLG07D zy#KCtlzS<*y%gJCR=iz*S?kvJM6s&>6gkd9j_ZK!C#-^_D`V^d%ySH8o@0G!LR%m7 zv-q%G8CzH4+g&4bn#jvF$S!BC`MOfhD*RTl!&S_$tWx8>Rm`o_Fs=|-8otBc;t%u! zi_M#cFEP^+LApeAoTNj4Nj~u-30KmlRQ$I4uQn8|oM( z{w#eZzJvJ2r@^=N_G>)X;^*|i?-4)Z6u7Ta;=JPDJ<88Yo_!Y92Y5$+xT~3$AH*EQ z*x;NvV^f(csYFgF5>T=2x%x$o$l7CBd6Y z{bjrx&v@GgkBQ!vatG(dpi7z4z+aH_j`N5+NqfuD-7^@c$~=8J^8zy&uUd<@p`+tH z)?!6()H#=$I*g(Y<^6x`5xKvgIm0cK{VF;#0)N$LN%P#t{Na<#U2maYuNA+k`M;mh*O2y)w9$)h9t7T4!ZF}{h4x;#5Kd85b| zN!k|dO9E{RhXzA=Ucob(cG+mxFrNK*rh-GEP3u^{RA|ot-cxxVMfQ+QAM=OaeaM8! z#&Y_nqUu4<^XR!*z-I%`QhTDCQ+V3EZt>;Q=6g6R7=KLkIpYI#A>VBAjO7`^GtM^$ zx(iJF7%wu>dR>lZGh-T|{p0*(j=oOq;gk9K){(iM+3AM=sB0p#WT zSL7np_dNY4G9znrxr~biCbmq*kTTA&(hjk))*B-A(a75)*vMCq*=FWxTbQ%`f_3k~ z^hGLt5k~qg_{z1UYod-@@RvouZeiY5^y?PpYD>+zi&)=&<|Gyu@6eYNTl6FB2ibr> zwiG{i5A!;$@c%~YiO%ueg^rhXiMyC2V|MUvxA)xC&Y-#e0!KXir=z>v9(2<|%e>DQk066~&i{jy*|Q8AI5algdQzZpY?v zBcD$T_=GjsJ}bPqgfy(f`uduEsd@V{$MMI~9*jLTUtjue0&^!j!Er5R4x`Le=1^qL zeGGj$iFt=Ce6kGYYeqBg^dri>3){bwd67EiNSwfjkiQS*r_w%k-`i#EU-F87%6!MfiyNP#y1%M5Ff-XcC8O% z5220Fat8KA^q9~ zb_;OUt4umhGv|IT(s3Sb6*~5T|L6ng2tLyGg*MRMm&w>*0<;nuenEMyl$XVrVIp>T z9CmmT^d1fEW!+WyGf2aH`m%t&bpjtuexaf4Gf-Je2+|OlWL+=TI~N)jK+9IWGps_vDigEyhuag!&Lzq${cBsh6AACFlZ=z z_~Hc`#+iI5G!#A*8b;&83m*y%Mc)e_x}l+r?aTiTAKur257)sLl>t7K@w`Udm8{YB zfe#te`ljLc2@Q7um-&Qg_hFMtcKq2`=2~KDmz8xOyT$4o z1Ipg-@PjXG*lR)S{S3+@VCWh zYhfK2o$qZi=a_9iH})xu_7>nnW~tqLTHSv1s^%3w+=;(hhrf^o4_<|QRYIG)`DLL4 z2hqP3YNWds9V~n~K;)l35&4Y?th<-f2Q!i5Z1iwCw!?+(@Rr)!veD0D8E=haytOX; z#~v5<{HNIS7RG?t*p4jh$R=!mDmX>PEAUaONq+*LBpTVO(BcRu=nhM?Hwt<4GKRg6 z^cDCOHQ=fSS0eVjc}N^%;aYqI?nX)L;;|9u#V_(QUTFny>J6dhn9%~RQ0k{rKP!0~ z@imqQ)@24m$3gJo2jKY-Je!!axe`2srM}!x_Xoxtte3Jj^N#83S1^9ArhQRbl(&KL z?kC{=2)q^eTg~kAx|Vd;5Z{k>UPU{5gKHSLB1jibx)b=ftMCi3{k{{-zqYdWlRzEf zsRRCp_Yh+~8+;cD-`SBr**j24-(@iFW$&r?RwYFG#e0JBVh#N*zDO)`EBtqm`O!M; zehOv2j*n!*n9r0pi`}Y2Pl+#5M?Z?cB5MwF(ZTXAx?S+Cdu_g_HFLb@G~-h7aqwfj zTku0fPrZl_Lmuyoj6o$_hriJZPu1Z&%b0Aa=`&0GW$BnjZb6Fzv0Vd;ny&)?A?Yx z6N$a(&3ZNRLb{#Em%_Ne_Wxn;J)ojmmc8-XGlXG=C?JTUnAt-R#DwX<0E!HVhyk;r zsDL>q%n>lBqhpRla~cfCoG@d!#$y%%(>VrAyZ^u5fY*E9dEfut@2&5BZ++{{T6^_$ z?%iEgT~%GXi{p>X&$#jO;AO(G2lKN4H`Iy5o@@j9a1?8migHJ>hR_q_5NvUHobxq3 zp)bh?FLN1i#B~Tgp)0urxZ-%rWe>itz{wOZ@Yk^C&a4AooAaTOz-PY3eBS`?n8S52 z*4VShfF3%@b9ZqupI4Q?slkYFCDQrac?*-*YUk+7Q?37v^2 z&Z8q>H$#xkhC`3S^&5`Z6A61FWT_lJcUsJ28|2%e>|@mBV-5nn3I@F@kI)6-c-TiI z!d_w(!W9TDCjJdNVrPQ`Y$Oe2AQwdN_X3QchhFQAObg5BfR_c_RLNNYo@hSuxxL2#&~x}8fqY;l z>rWn`y-#S5+vecBM5ckW0b>JjR-OjlCJ{JXTsnWV0ju#C3qPab`?0FNsR8%940Qn< z@_F>fQ}rWjw`KXb^xbR6re^^^HiE8jdFVQHlJ1a&M9?=c@TlJ4TeXn2JRpbF0pIHb zzPB3Yq6yyl9big;-n$4e)d%ty=Y<96!ac$NR)x-z^TL~^l`F0a9p)y`K*%&XB5-Rq zU?vLrfk=n^09h8YAm>?-R)oGw+BsR;j#6%?Dr`x3eeighQIqTqnCqOtNqK;2Uf;fi z=fS!bVaz4>Xg$1~x2wp5Fpq z-=KXv^o@EszIaz2_r*JchU7c}{fk1Mz+;T%6!asI1<(hdb9d;x-eTUKV&2R!UN6jf zJf0M+y(iA*lo4GnYp$D8)hEMw(1&MO%W7EjZ0zG1*vEN4k4~*~{E*{~b>{XLd_R~2 zJmIuwgS~G$m$70o$6O!e&i5eRjxQNnBix5{D}>x`WDoY$&EP3ED$5nWsOXTM0bYxr zZSixhi_itNPZA8d&W{dFSwy}4*Nr|(F$Yv zL4z=tzW9dgX6amdqb{dG+p&jdVE^W{Ck=ZX_m7r_eJ_7Be5Qi$NCV%2yU?HyYFk_r zds21mQB5&V>ELI%FSB%b60C7I;>EmR;y)n_dVWCJS?yi8(6T zZjZCjHpLfko?QfAVHa?|eGzBhMX)cqfORNps7b$owJ3^&Ee6i%FW}6+sG$|o&OxUK ze}3TA(xIO(0&nPvdH2HnbN`5*&^^EMvrPAd?pKBNe}HrKTHuvyfLCsSH7$ZYOMApy zBA$n_UB}ouqHYY@;QQ_|yn7_dwL;x6w53Bkw=w2B7;`SlpF{bJc;~ZtU+`SmFU)ez zVSYKk@wiTF=wZNPPvYn4;JI<83>$DcPXl}R*RWShguW7d5kl~EI4^%P4P^lXT{0ms54>Ilgs|zwIrt^O1;-iA2R=#U=k7?yIX#bay;N(^ zw#U(Ezc(*?LEgt7V_)NX;6aXqr{!^O ztHs;obiNh*OO8Q(tBb8td=Rz8jurLU1n4&rWJ#t*XlS zYnr2i%xVD{b_a0Z7iEJ`j?=|WrSe&A$WnfgtJ=ZdJq-5nBN2{5=nS23Md*kt0p6P9 zzd!!h1Woh>ee8wyIepLoZup+h@p!h3$99=cKhCI4bDm?oDKaln{wF+!O)hv|oWbT4 zmf|s|D}zy%<8cb)zigZj@w2%!;IR&TQfKf@C3x(T$!QzM;}nG==Pb@lIUauop1SaK z*z)}|9&=tI8~I!gYlMg6G1uj1Z66C=?l}YZx2yuLp*P@DbZUd$$26 zUIQ1m0WY>=-d{tO+XmU}^=~%m+aR;O2L0Gpit}7v%LMKef?i|-e{dJ%XFbkpGa=V` zU@W0H$1Q~HstprV*|wf zkY5#PZbfiJbeG;=PR#=bDTsvXa$dR8J_PCiLh0^ zq^Km*5pK)Cacn#2X_@TI`FoCoGVTEfd3-yUm4Le!QGXEH=R8*?;4&L@|1IzqG%Ljv z_^m@8=cNh-=gjSZfi&zp8Q3G&W3S}xsqoG_A+tpw%?CQfI?#1-{%J_ zWIgE8at7c%IRD}UyS{;VAMiIa55?0s|HR{*@8NOI_p|~31{}`02)>8<$jqaha=x z@8L368Q%l_1n8(2c(aRutDpIvbif0r;ji$N$y}W0k!3FMj@;hohs#y3qmh7Uu^=@P;0sf8n4fcA$anA$MhC-)I0F_m%0GV@@Q}ZBd5HTU^!;0uHp3 zap1h6BEqiR9vyPlM1*4zJ_W7(6SVR6He^av$<1gWLD*T;B%KD0mfMJ&(yv}@_UzhPZiO?s$0o-vrgnZD*GI^_n zMmlBMpiP-ZLf$$n^E&pK2LMl8UhNM&_$wOu1^GYATbt&OPv25yTzXdI*mRDoO8}GZ zkf}t-RDYMXPD0i)fvj~JvX7qS+7cK?vIPW=aDE%Q=Y z>&#!sS|=fEnHWs}9a(EVc&65n_qg0w3o=%1$XGwiT^xVh1ukouXST$;mB?D$ChXsr zwYV(}m$eE&Lr!5W|D&?jQ=@WYvGRbpJlD*RsOB4)$X5Ut!P=+a>yJ}%1hx~{)enp6KlkI zqSN3d&VZL_kA0xSe^A!42My&m)Em+6<{$LO;op(9>~r=2F8*59;r7H%lgo8WEo45zJhS!>KEf<# zeyPsnNhu#O9e6wgcpMEpZU;PWU#c@1RjM=jQmQlg20o&4sm{a<{F*Izx1puk1)&Gin0DP9*fHIkfmV%0@_lhGuejkTg&h`1$;z_&ZM%;YyUGJVU0F9 zACU*y z20D=r(1}E1t+{?j2i(4h_q~AkJ%zEKz}R!~j_2`yS8?Wb7H3{JFhBgvnajpprn1F% z+g#VqWei!)l63=+mmuTFamZI(*0KQ)z~w3**t>B(DfZVAS&Qo{N_84#a+WM(K~CfG zNOH# ziR9;^_!bsn$r)Ffj0K&mY^Pb0&cA1XEC>1O738b!SogP(DYGG8!4@KAFznO$_q$y0 z$7L#O*c}pZoAdwt3}!pz#uoT5%V~fKISumEWsC=MLS{af*}$vH=Lo*m25x^nq!b>1 z#$zk!L)t<2n}RcFOXx=g;BmApzc^&p1B{jEPV94RfWLMqb4uQig-mn6hb`d45o=l= zYul0A-{3rI48lGLzrbeeD`*49FKcRy$xOW4d}n`;r+RuGXpT5;a4|319rK0fy<_N7IV90;6(=TB4c+G zhP9OlEi&HO5CM8;|$F)i;?bXlD-E;dTPt9+>Mkx$brv%FRYOuJgozw686>H?mDK}_EL%d*B|p<065NoZjIag*(%hA$$-mbv{?waRzL@m z0a#1M*n;@C<=j;?af0UR?sI{LZ2`d?M^{`JHWjS;QrTAI7`R<3>;>s zqfP#OwKHJf7BD{t?N3MhX|P}K4IOqGY}S|H-4kHPnIi8ECYiXGF^7M5$j^2;jZeWh zGTd&mH@-vRXS2OwdliqpCkykJ2>my7YM?FLrpPqY8~3kp+oFrmH$iR&{3)<+oLig% z_|D=qeLvSjb}r_+dj1VDe8^ixZ6f5h0So*L=@Rt6vW+ERkhkrL zci_09!E+XES_8HRW6sWtHux5!(F?koPc-S-Vf*lY0=ka#W!>3Bv_aS)+@T+{j0{JJvr}BAM z9!BJyugb&rdFN~Luv^}Fk%w`4=e^*Eg@5DmePEtG&czRx3Hj^cuQ|6q55w|u{dw3n zFSi*FJLlyF@-Q|pH-v`?c_M$G@5A!6W2^X`kAUxG_<%ki#ly(F^X+-qG4FgQ9`?vP z-;Ia;@>Jk)#qWdjECyEcI~T|OEeGeFi|1i@-noH1Y?pU#C=a{log2x+K6$Eh1M)67 zl7DV1@;~2;{LhUg|FcOX-+#t}EdG~1HJFm$hvty}Et5Wf>{uRmqB-GCG}DD{Ch*~k zd&c-ZX523`d||++YxhR!fA+wgUGU3_yt2E^;OiBBeXBGg+z-b6E)~>iFBUcI0{=rD z;D4yA_|Uwg_}HeK_|z#zd|suy_`YK&v4ilx=U<}iF5Vdm?o+}+zen~d;i!M3v=SfL zTZ^)P+!M6$qlZQ;Y+@-si?)F;Br}Z19Ai;o92OXZTI6GW*c(0>@NgfxJkJ0Be8(Ec z3!eTyvLpOrcfcG4eEvSZT{`AWzB7#}m6$s<=1i0ReVPLI$l<=Cjdb3<*MCWwFG@aNNc+EzBYYfq{s%VyADxGPrhz<;M_%uL@jtJ(0sD9v z5Ai-yk2_Ywz%M9E?^w-A|29}i|I$y9Ufe?op27sYgK4_EPe8o3X<)nV0*M5@`n++lf#fx4&prZ0A&8X z_%4y_Tt;HOfc+jjsDQr{_aYoTVYHp4n^3_%qMlIkQv6)ao49!zD{sWWDqX#9~M2m6B z8e1RoPmFVlZi8_b#Z~dMYJ)QE$Ug$(XpM2G;^%0>dO1edL4C_`^4G*-%w18YC;59O znM8XfS)v_>XlvB>omehf6GQ$5ah3cm`=e}<_&Yg>sGiQ0~@LgmKe zzMrH?RqX5C4-=Q(4HGw$tNJuGQ{z4g?TSLZ_-s5G8!gp~!xgUT7f4@%aId178uvnI zUyLT>EQO=?J<@I<4d2RZ9hI)?21;JvRoxLG?&;HRCMRvJxB%n(wN~P+%i-d)Tb5$Y z_7UQe!2!n8D9797<%gq<(`1hF_S&szb1~w$heZ2$5*e#n1dG+}Lc|wc$XI)1fYIG6 zKzwGqv$7b60=HJ>~&;C%+l!PoYw$3hwG6 zg{8JgX)X>xJR5Q79JR1(HTwBRiI)&h#1n>Rpqy{5g?>-{S}td;ebo@Yj$4w^%eSp) zjrO;bySnE30An`FK<6o!^+r1Mf7(}7P&SB{jTXI8Za=Bi?@s8&va+u#B5!kmk+*-T zv`&!|8M6>yDQL7_UhTzss5c#X58>xH5$U`xY`(My(SD&l8NIzah>xNJjJ7C4D0>O{ z=LNO4z=r#ER;dRe4R+ny0u32G#E#-6#H-iuCT>A_-X82fwT0&J^^9~6*BBA^K9rPK zlH6Z{V4{U?PmO!$j0u3z8e`#aSx?5A6*`Ia#V(?UZ&&eGmx}ybPWl-KG<-9*%F z7$C2gmuaBU7i0aA*AICuOWO6c2s92?XtY1t?Tx%DCF|~G6=*D0R*>`L@$^7mP-#88 zK%+-gpz%jN;9^0=(t3`8#+rd8d2+pI^$?Rj(xH1hlmlq~>E7idby5f^COK!2}W z@C)+HQLjG6*DBCB80`k2o>oEHf+omQmelk04>WEo%}W-L2fQlih`aDHhi<(Bjh@{C zjlps~6K%nG3_6M!<>_VD|P_G*L# z8ZQD~qL5awJ47t39)R@#egj@QppOEN0ONGj*^K8jxdZmx0ekL%J$Lm3%nzppWiXhA z_$$C{1Zc`D!0TM##3s;CQ*zMOBS-BS;B9@}X|GaNZd(W+=4OEP0?-={gB&)s0|Sj^ zG|F>mpm7k|E(Bfvfp>t%WQ@~uWN9A!rH26)`TFp(DI8xtti-~80Y>du%u`aJ(f?{` z+1`I|=O4>kim-h*YNw$5jMB28CuM#9V_E1IK~J=EPlqkMYl z7=WXHUDjMI1P*GmQFdo(+3|l}mcy9#Hv9<#o(e|?7`^wFjJu98&^Q2di*Nn31%M}Q ze4z0@=G*&lpt13dKqH5xg6$z9{D7;yl`8cs(40;v&*8=o`>p3f_##GLonwKkg|jw>;4=Yd;f zaM5ylABA=j1Uu~(!A$G*l9vN+0scOK&SxUu>s6q!tPH1r1%N-k=XkseG@cY3v^*~Z z^$R%d0}S#uy*>mQX9?zV9&fvV(>}nWT<~A#xt^)c=#RPKc?moZFj)YYmFrpQjGasK~zNQ zKi302VYdFhOtMn%Z; zfV~f}>+uM*&{t>lve3cL7+?(L0`X|;>x>@$I^zcX_X^ZuPf@8kZPtb$y_L?mlc%@W z$vDQ_=5WXR=d|z>`cUEhovDJ>pIo$ego;{gg{!uiqO!KTV5;RjLO~NVF&Qw$_wx+E z!dJmj%lGp^;Lkb&UeB6UXP<2b{rYff{$x8r{e0ut#~R z!wBzR3TM^kl$BR%LwI?>S3cm=eTGi1*Fr9DrmeORb5ROoC1Wzx<^vwx=a!UfDVMV^ z*)suaC1uRD)mG??`G7z7r8;AK-acTCkB8^C$Np1oz0TNyrvrW*fUoYWOWNae6Gk@R zx2@FWh4NbWbLhVmmORo+#_Y3Ghdtg4ZDD=@OYWU?pusw0U)1r)))~zahTw7Ei*zH_ zXo}9*3vnf$V4i*$>Bj(1r+~W`;j<5E3ao`4!T>x&@XW_kP`!m%R3}6nuk=zojYTECkIjtD6tnmoL*kCv}}?c-N31qqSVmT8689z##6yPhJg+~`13kzGEXwuXVIKW|st4MaFVjBM`=B#61`htH z2iVF7Ov?4X!;d04sekkbn9P@HALKK44R>XBuSeO%4BE4{(_;(>~O* z2r|~LSuz&69$+uO322`c{DYyr=|9!ub6CeN$hbg(_XQ2(*{QoGj=0^P+LG=twVgjRU+s|SD|bpj9Nq|Ty->YB=i>P~oEum))e@tupd2Sf6fI> zE&^=fUOBZ6eL15n?%4-jZHT?Sq576Wp&cbSYdxZZO8FWqty~8%R{+|Q0NU%(p68XO z%kai!A<%iyD!DA+Oxp>5+kmSc-GYqsc%PsZC43Uf0lw$+G{BX%SCG7CaCvV5PXjy^ z0>(Y!%KEp_F68NeCBC<7i3gMa6IT_SMAjRQh>2B^g}y^^4eFRFDh5_=;@%1 z_rYgN(2;!Ne)RyS6(Nh5gGY2DOYM2UYbM5#3Yg^kP%?k-N#HGN2N+-51Q_GVLhFNk zJ)R2!#~F>b5ICKpP^q)Z;(*g!eo@ zzTQU2`H15R$FQXsQyP%wye6f_&zcMdeQLog|$h137GrRFD!j>ZBy~v;8y9-p_bT@ zz?a|m@d9+I3g}Xm(50H7jwy7hX6fI9Xra4%fKh}$JnoB-+n8|s5`1fK+!pbsh{M00T;2ik0K}b3Xd8jzPb$~H{D~YRcF7g1rHM0au%`3r955Gn5v8m9*R!-wfN__wkd~BNO zaqgnoNap&JWTH8(aMt4vX3Yyl1wDM=XkviJxT94wR_UTyIVfD5T`NLNZrfU%Fpk85 zIzb$&R*1b_lw!YF6EXWlj|1;c1c+G*GR}nG-$6%A#hx?G#6HWQ!)+Xiaks&kqr|w% zZN(8CqQz|Z>9s{UUp$HUuY-Tm-gs2_FXG`oeMdb|iOX6LxQ!>7fYyn&d0Zs%1H-dm8I-IEn z!f&Nef;&M9;Epo=YjyhkrJpIvnW4Nna7UH?{RA!KxFXxHVJ&-NUAbRPzOFM|!s6#t z*2kw>hsV#=MZ}+kt=Bf3vmV1!A7`$kU{kyq-`J*TTgS_H^dkKZ>`QCGF0={kJ5QB2 zF)YJ30#i|TDDw8h4)yB*Ys1G*=7z2KMzU4~Ys0hh3d5HKJHvAqE5j#z|1ir{!1t&o zhS6Pde|05mLlFAtiFzxLx6#VRVCrOJFvd9=l-7<0QwK-fyJcbc&|WYs#hs`wiI#?n zgRKmX9c>L}6>-iBoA&+P1jAl4=M<;zxc3)l!@;n3Z`9Yu(4aH=i4_dJtpvjq2f<+4 z-^MV*!NQ<$Rv0V>*crBTvNojFurw@ehkKGM*&4`MW9Zw<+Az05hhkC zxZ@@lcS_~@k|XY*cTA~;I^FD4W7 z6ajUrqg-zjGx$HVNST2?wwYL`oI*QWkbbr)zTrUnbCkbeVwsYSGes|jm3|@e-{8M( z--Ri>FZeOhGr~brfErY*4{Rz-A?l1m1XxV1aHk`+4;9p8VdY371-%K2uY%ca*sS^8bu@DossnNFv z{aT_=(1KB9{GbUio>O4|P^k3%G0uGOS|2;MOoz`;eSb5=?fJgl0&z=ye>LK}bs}VT zeSd4n9{X_4h4)Iv_!7$DY^h3s5#L(r6ZW+cIZO;F&-ra@{cG@@uzS`II1&YV-WL3( zLO;j_XFTBTa7UTG=Nc~e33}YgsUK7s>EL&9=Q(^No9gj>0n*L%gQ_9D4*0-opj}#9 zabR6L$U^4&!Mbu{|5{`ms;~zS5Sq?{6f(W~YE!ZJOFsd0N&z~h1f4QTuMJxdZA@Ui zdmGq)GzyYw(OckKEby%b=*x0^^Tf?Vr5&DIo8~7$fZ{sG2D)>FMhRuWqbVCIi1Gv*bM%K?oTPjb5mLjAhMbIGV*s*tl4!M(P1sjR4<{`!W-2MCbL#QL5t^%;5gst}9 z`9t`kmiM}kf59Jq_;1P|&i-%CA8wHOLkIAO4jG)5a{h2Vp5vwbA?Fo0;3>2D>aPtG z=U{(GY^)at>3AD|AzE(!g(k{uA~Zd;_AlAxjOXt8Qea;kHRr$X3JY=_az%aGH7w ze54M0M!#zoV(*)3anu8iIC!e1*lUrM7`MS1`-F`+Xp1f8)edu7PK=fL!yw>-4mc4A zzVM`MM-&|zSl_oUR_kB<&1jM;9DY}W71ul=^t{)Q_J=oTCv?rIZulnQ(WY<~-fSZq z*}MuxEev3z0c3G>-!lfwNns#^X!Naq}fZS-_DU`}P z>`42O)Zu9ct@_&);l$-lY?&^cZGU9T=C+9y!tee;r#B2E?>oPe!Q-7|Sl6HJviK(T z8FZbjO}Em^Hyc@{<*S9bMQSFkX(6@z{FGuU*QMab>)3D3{e>yIDeP$7_Dr=qnbrDo zj)u2cN7J4UrKFg})H(PJeGgwlmDng6`b8q0-kYA^@t|j8a)c$p9yEKxYvEwxDb}w3 zN9H#|VtxnVY1nQ%>DsLmJ~ggP)dTBGAw|ED*US&X#_{*bZIA=2=d_t}ZnmVCJ9^R| zZyE^xosub<+OgT|`cT(-W2F8Qj?mtn&Dj^RJ^eaWEA;&Kk(Mw2MS3%%Ik`1jMP6GE zvw1Ui3)4E}(ZSuzq%RrPEO@9RdyvzF>CE2=A!eb}VbuVs;nq$xu-;wCYKId$>6yUZ zEN#g)r6#ep*#h~AFKA)&s+2sqn_!F%p#{Uesn>E_=KR!!d~ZLdq51;p*a}Ow&!;D| zwsN7#Cq7Fd$C}Xeno&|xLQ}f=HeJ~CL`T;)wx*i(mQ(Kt7ka(w2D@?es?f^29XSMw zLW4_@bZ*)rDPyoR+gY`)lvyj6wf;1MuHIikGbZm68hcitbG4fYhwZQ#0YLsU4f+^@y{P??ovD^g4}!C)i~k?ey=#-$QS*<|^6CfaMA2p%-0c!w|1?8b zIpZobyiij>>smDKb049yeJ|F$%V(i@Mg*PuB~2QkZc7J>hDz6SkF#cdzDYGq&$H28 zRU|6AtiqXt=Zu%9S2Ou ze0nBS>h~Mnf3RIzTIfm3pH`6W#P_3l?XS_&DM#3i!0yt>nGadp(<5p1{d=@At_GbN zR+IW?ZILwlh@wIdv0jI4S%{gM&MaQYR2IX9z?<9I?d+@6X3`e=^vp!sx_<)eTzuR*c)=ad6-RBRG>C1H&DdAM4{kf7;CVl z9~%*BK~KBaVU^ETVAXGSV$F7>vgpSfnSN>(O|E4}J?8w%ZcSJ#M0Nvn&~~+SV(M4s zemGQ2H+FW_CkZJKdJsV$5=sMMfMHsw<6DgHglZUNow%sQhFxHJC zzZ_;gpL~;Qy=zX*wb6_xwCjNKb}jhSxSB6&_ZOoi1K zvznjgve3CEtY0FdPn}Juz9&v|E59X^CcjWj>l!q4>mEAN@)$d_W)o|y%A$y>mK6Al zl2$}iWm!^R;pu%7*0HiAED}4g2Wt<*DV=8IsYKtIpjjBSfX?=wB>~)k_eIzyS*@Q(|h6uCX z9AWpqm7|UK8nZcb4zcLI1F5H3I2Am&#*Eu83QgDCU{>#LQr47I>el}cI=bpBd5o+~ zkD}Jlr2ISdxKb{?thk(w^e|{7}>8=X{7C?tlY z+*yz4+_qd=-0}dG8!JlPOvZk&2q|XDL9$o*O3keou(jcN zbknab4IKGY>i2st(|@xOR<^vyoUFPCbJKdVz58a+7r%y7P;gz^{>vJw{kER4=5P&m z!@a%Ww&xSG@9QG8bMD1L93Rk*=S)4Gt(p!prSbO_>p+#d$VXtZu>j@4dr6kzCKP=Wn?{y^2Vu)!kj|doD;5o#FzFybA^X_F*M@wS{fHSl>&INrvx&BeoByAKvuQ4){X+GrG zZ7^##_Jt5~wgxl$7}?<0j;waw3at07jjZGK%52kOQ#RSGx-j7PLF{<=E((j=Lx0xs zp=}jBSljIHLW5yPnR~-7bZfv4rfFnO4_}7U)!6gW9~F|w^H?`2SGAL7?XagIEpM<( zO?C(-K`vxH|AwS(c!f0$8bik%H&X9S!%6KhidJ2JAgwdM&4zsl7e+Q2PdkoxkZ#!Q zpw^czOE;!8p_gCF3q2eD%8Hl`JJqQj>$Y?TZCf{#3VNrrUq{5yf=$t^hwEupt&R=r zJ!U2|EjmV@KTTwd4_2nS&quNWx9_rzQCnDOg>=ahp*mNazAKo9g7@s-ACAuS_^Wt|FV-}HxQ&V-W`TD~XqTK-wMx3CWd99_%Cym?Ghb}b@0 znnZ=k1+;(lB8on9lpV+lWvw1frUP~AmY(-Tew*Lj%K5V40^^%^>pNtk72Lw@aox#G%Pm|f4hYzJSLoU$xsj2m!RORjv$@O+1owXVvjciR)O~ zd&R=L?XzjYTql;E+>X}GY0VywYQySPoX&pfnZkbkQkxFJ`$4|nGRfU0pS^u%!RBnQ z$n>px33sk*XqM>)A<=k)6rU5B`yVan?%4`dVYL+nwQa*res*FD9hOqv&_&cee2L)v zHIS+tb)o~;&$00@Hwd4yLuo_DyVAs&ooKDbQrZ&lO06nB6^4%4&vY9H3fJdr*xDCq z0-M|!AAmHLI@MFN@2ZXX3ga46PiZfB@2yDvX0MYb9=gh^RUb^Z?mDyUnwwIb=_txS zHG}=Wbs&4yrUPq{(w){E`%N&|_%WL!!>RSG%j~ndqOdpVCH2U%k}__rXSIuxS&wcV z*^$XTD9Pp$ZCSRKp4hBmm)4A7+PRY{Zr2!L)xc?V$J$f+ly-?-A5w{i*ga*PZEFgr z9tf=x^4DLolBi!S<(mUc7`U~T>E*gJOATl zeLVe?o&b$=Q|mux4q>kY@T-^&-! z@24iw_q}_Cg?&d+(TW=E`t4BWP|I0LZr+@JO*NtC_j)tI@j6>_?ghOcZy{0UHS%j* zlL^e4z2Co3qCd7!`LO9U_HQEfI5A9`;k=x!di;WYGL2v#mkgI4b&X;V+I*BU#&=?2 zXXcWtgNh~3Zo#_gyV8AlE~+>2F+H2$MBWyA>0&@VVVYElman-^(*j!4r3#ru&r|5P z?}Ma%pSDtfySt#>{EjuzKb0o@d6=E-x{FOs?ZD=CY9uT^ZOU?s*GLOC%q30MW16aU zWWv_@Y(b40%qM1(l$LRiVq4y%E>|LHZTLB1i}of9VZ_WPC$S?!DlLk>!*0C}6~;}f zPlrcrX6;luc2jwU-54~3PNaDXYhHxVhJdqDm&W~RU*m()=cltNcV@WM`~FMPOE;x9 zAuB21*J7z?_Ib8CeucDjy91T4ZqFu+eMvcAPD|6DrO=!<+t}u$U|Mi~iB$Nem}VUq z1$oqtjSFodg-l&UlO7ZcA(KY2%585+hr;aHv#rOakri|-u%MB2qx>pb-lUu4RjDG& znYf9$nZ2P&!+HyM>nT|8o?E2mM<%iX57Gqv<8Ac(@fm75@(%k}>>%7cbb+cIpDB$G zIm*(rYe)@ayU_32zS10_FRkuef!>S@VBgGMl6eCM)^@};npLv_v&l)KCquTgK6@T9 z?W_0fefDFixLj4r?7fVI71m`V+qy{!X|L$=z$?O2iyWHOG+o-=bw0h%=+6qhCa@O0 zb73O-J2vME^+vTIb2mwPFMVKJ7aV6vL!H=; zv3qHDyQ`FJR+)A3sYF!`)~v$Yl{EL_K%vF(=FGu8QA%EUhIRk_FDY}ELC!RkgF8{creR1tcDy1m0$>P&TTUMfN9a;+kpL)`|SwW<0 z_$OO@p(k@OtIA^iqJW{nQn{s}%&I~tX(Mlv)})qDF=YW;deDi= zZJJIW+8vO_obJyi-swq=MiwwD*PBvs9W~p!a=P?ut<$92)rp<;&SX}-quI5C-&uy2 zR!F`&fo=jeEuXKVzBPtO%Educ@78$sGP41Tozt8?-Kou9+$o|@zfGbOi`voV9bK9I z_3q3r>$B)QG4fLsf9xucGxskXxmF-y?g)0rnj5H67P&)L&kYiyqy~zU-t_Oeo$NZ z+xM=tGyWo5dhP^iA8DBThT&vk9z~n)+@(F`NpfBEjV-$TNZ2#0Cso-vgm!A~vKf}g zB#+j0DRAgmp~-DCHmJL^FeGa*ncMWF8tunZ%Vm!2N~=S3RI^pM@u3=7Jnu>y=GA7m zI#;CFUY)3WWFB>1{g!&%n<(_%@tA5;mg_k#u&t`cr8T z_^6xr-?2tZX3^1+t);o$F0=W8OUbcZEbHOE@svtW~zXwC>~?_Nwy& zI+it*;r2M`Y3KVi$2UyabpIB+df1f37d2$sDpQ1GtcbjCH>Kp5gY0qJA{G_0oXtC8 zD_G4`(WG%cEGl3XW&W8$ud08far2K!*T*fQ9wHMuPLCjy>s83EN^7d^l`T2XyUlu7 zn6W3(W)$0Gs?@wPzJwW`Cv507nVBDOl15ZYW5vnKS?v3_lrw574J$5W@!4mEbrV{$ z?lm?E+XEM|*Y7f<^QTYI)0WAS*T;eEc)c|=)~Yy)!CNi;WVt{EVlM|09lT!!t%}Iq--2eLDwPu z=3k$s<*#E8-FmY-t2Wc}6&vZc)e_;<&`z|p(t7E#Q)P;u{)9Dn-kr_JzQDTfU(I3` ze3SZC?M!QXDQWK=1A9AcG$q`u&o&n@-zu(RgBlbG)|I!g z+LJB|&(2h$Lr)J$eO4FJ$2e)dFKG^RgWc!LR34z^%-M>inBKAXIjEfI>NLn-%Vx-c)X5qirsv(Ho3mEY z%7cGMha9G{8Uwe{+9B`AbkI_v#^yV;#noQe<=u+9dALc%hhI@&!(2Mo?F4(5@}1cX zj%5P^H%f-cBdpc7W70==AC?%SkBHxHR6ctvjnbT8_7h*xptUtwleTqe&%q9KXvr0!Pt6(3 ze8@4Ha%dH6moSCRcyykuiv}}yhd9d0@|FA=gt4#21FW0jA=~r$q3|5Ccc^~@X;|H7ZWM$bt+r7>aO%A zYZv=^_;<-|ULLz+lPtVD*@i0Bh?UA0oS|l~?y-;lHEEvRJhr;I3wgZmAt|xH-l*_a zsC{o6TY1q(vbQ?Q-dAfNrNaE`?Os#KaI7h9nQX#pENsMw z_6J=%beRsWUoZU)^2_W;L+Q(bU+DMBu~J0Z25M4&JK3L8vy_L&Y4Nd@?D}C#NjSTW z)txa^=)Su%W$&9s-FFTpk50GP>~9Hd{LE;{^n;GI^{p-3Q#_`L)s3Joi%NHk~=O66BF zBSIO`ph!|#k&=|G5>hGTKJWAX2_Db$y|3$>&pCI3Ob}ZTmQH81*WulCJ3*)04eh@x z=yuZ_HrO-+lDne#sY(;v&GKi{>!R^tS0C$e@utN?>}at=11>HaPL|sBFsuAW#?|rk z_ro)Gz>|@Dk_SzR%7Nx?RfNnMO^$_1Ommev9eH5_p8!E)pPWh`&g7FwT{RtF)=a4z z)A-@=yOecUkr~{SqMp8cY}SGX`g~(Hjcs$Hd7)>S)u1+dm+8ot${5j%-({%tyi75g zlgQLtn+z1!v&O->w72dW7Pu|O%kcZuFf|nXPB&{vZJ=q6H~AeUV{)`v%d&qQLbiks z$+Kb-Pm97IL6^MIw1w%hY*ebnu%O^2i0pbtqocj)&6z`Nsi8T&h)iSQTa@UM^B_zY z=|By7ac8k1R{b_&y~!gnO|=2tDt(BMo6Eef>A+EbE$rGZ)5#nU?DJ2A^qU&~*18P; z2I-KsNHK|w%fymLN|-cuH2DM>VTZ>MmcJ&Da#PeHWpa^PHZEYF<|dK4 z|J=J7buun&WK}cmzIKm42_fWfb-<>;he*{w!X1UQmFm06^e;J*a*dl<`^aQOG(#YskE64FRRdWNf*?dv_oy7EKk)?r8*0L92=oc zuOBDi@xd}UuB~82Z!$4t_#s~RLK{<^p7B0MSNig4AoEx>1RwIuxXX$0^q}ZD&IE+f z*9CW=qozlf_9UQo1A|LI14WIyPp@sW`LC0^$?CEiE3^wIr(qj$&NUeaDvM}PaVC9_ z7US6+y42<|lG}T2Mf~%8uJW~t9-UCd)&zHYm?Osyj8;a^@fGAU*b7yv_jqjUG}=eY|h3X z&@l*u#>zpMG%k|L#%-k2-&awzO)j0)p2(vP{zXp8bqXITNoCG@{DuE?SnN^7@o|Ru zFus~Q?6Sh-w#htzDsb+o6RTX=NUclb_!CwNKPkausIjD_f(G!h{2Zlg__9{VLaMo4 z3ztS2q(oS8!x!C{tA7F_Cz~+#!#@7a`3>Fju;G0l29UCEB;RFSgD&;E{LM0DI4Dk_ zUy*C*Mv<-HLx>}1=|#FV|1Y^mrNMO6Fq$>%F$@0hCNhPPpi$#!7;2oO@oT10_sKbU zKRp9m>Yp>|vl3XI@dG#Aev{~4M|SJpAFQ3z4zuz*c(eNqO;;R7D@KRW3g6}Q(&!35 zdtx*hIw$eZv$T*-)okjqAN2K~ILk5~N=}njqC4mT-Fp3wt%_KV)7`4LGG!ZiuM(d9 z1|7&Xrb5>{50^LQvXvf{ROZ#q1IiQ;zGybvvb+is!!7XdaxD5^yFh!bDH;wt(Ouhr z&~Tl~qifegxXT5K(Xoi$n!t6=8{l#5NZQ@2PX&5v#L`Cs4h%|{<*?21=+;24#N34c!xKtd{~u19A3|ljCCT_nZl~LPF><{DrT92d9X(lr@GDOiBE$-Ogh0()bBB&_!5RXEJY<~IU+D72-KPE4MGJ8aH>d<;VV@*l4~$_KD)M zZ7kJP-G=|;0gPS~JxJco0{yoM`ub0nu_KYbMa-kKgS?;}zlqgI2)a?#AXX8_Y4+e^ z?lDqu$M$6*>*E=kk?PJfyetL%?GF7h%BS&PJ*b(gpf!CGd2hXduw~0wP~Bg;>{Sk@ zqnFS)wTcCNC=mYN18DfU5}3@)r31#kuom&7ODQ=x93+M#kJB-1XCZ|SR;KqGa#+*I zG_1(DL?VS*IObB%>~1s>->Qg3{}oWU{(I6|eh%3#J>)KY!(P6A6mMvQeRpQCmh9W~ z+RBwJyS4{A28D1{yQ#EE&zb+3bQ6bbKCm6VZ>cbOHP>7)k{SlJvBo#I>G|GwOtrOx zCM}3$vT2TV#W|N*9|@%D$?eRjQQyBOUSklR9gbV;vY3CyD4Mx#JG(qplGa2xvyHF5;_>xp9wX>3>}@n(DwTqSVOofs zse_fd5_mHB6vl*1#HgJj==N>Ep&7^M^Bfs2CqIQQ-Ot4G;!*VE#1pEU_lFV^tyv~r z$C8&L*;P})BVE+P`!+d2P0WJNQ+iAGU4`s-_&!P$_@{!&&(LV1$YyGdqJD=ax@0AR z?yg{7mC%XK9eeooxHgIq&a1H2VvLvWWdjUPAZ7Ssb|JHn96S!dx9<;0RmMTr%MX9H zJ)kQeFVVSzsdPnaHo~kr*-;U5*ciTMal#ywd+8v=#*U>^PpsH{dpqi+cwEdqO8&dU zX-$73S^7Pu;4$;5UVlDsy5ETD8BghApD*-|@8QSTbxKf;r_?1%b5QEmk)%aihYJT^>U9{*xKHWd)h{iwf;p3J^#mSj0_Qnc&zB`0}Ke>upn;h9L;kSKB z{UpX3MQBHO3i8{(fcI8X&Ua5*+GooOCJm!Zn-Y2{aDz)eC@_4SgtWO8_)%nuxH4O4 z`hFml{YB8p64K5YGTbRc(B&VtV869cdiG%`&1vQY7gKT@QH|TOGx+1Y$!H%PjKn;F zH~Xr=k5{_TrpLS4(9-dAuVw_ALt7}Y?FgM0eTL!2_jpJ~F{JlqK(+D{t-ASwQd%$4 zIG1^pmnVu50X-Df;7cX+p2>8*r1nx*jQQn4;~J-t!n#~2D!<~LmY*`d*1U?M)UH@h`Lf~NA@3z+j)sP8J8CAiaPNeRB;K-vE{ZBpj9n1>a(pJ$ zjra*Jq=W`*e`k(@o~q^dfVQ{@`cvr}nroJh9M5Jx{_S2web~)cc057vWKDzyY(nuWC0WfJ+^~(NIg&qVcu*f-`ZWtPN8X^6!M3=bq|RmTWTG%{13T<_3gK$| zQ7h~puR8`YQrwLN?bh7jk~O`lHDVr8%dsK)AzpknAw^XMVa_;Ar`D?S_&;;WCi)-k zN(i9-FaES7b~Tx-9EI2AV)WH94A#>u!T;0bwI{aHnUK3&W^6Xi)SQF|c56s4=OgNq z6fjNKhBcq>BqPToe95KFG|~PFeeTo1*NQYmU{QA# zMK+Oi_VG;&aSb5n!(#-UUXL$R)I&our(eGnsZ*^KHx~Djc3B4Z!pdIKgibdyTw}`Gwr-|by~mmDNP*d|lM^nGet|>oSs8oa!*#OMcD*o=aex zbSS;IH>O!z&v9Fti-I0g?htB>Z%!xq`eU=9H&dQlRESZIXAar>KcmFlbY4EJ9r|9r zT>YyK&D}Sa58mhj_q5++?(>|wg373P{|34^<_7J2GM8jk6LET}FJ-Je#4pPDQbl6~ zO}P?DX1jDKHD465n>Mofra9Cz!xei)s-Y1)n=PJ`PWf*|xP;kBI+-et6+iF8RmvL` ziz;Ac{E;jze&bA;GYsnHkXW}d3Tx7+;nOg-_DDK(m5$KPi*n>MG=~4~yhu9p&XP%~ zKaDtb02S_S`0w{$4DdgRrZbC}a3l-QE(ofz88~lX#x`UOAr%cP!Nb3S1;W0foRv$# z6K3-SOI7kn`@tl5E2d7tUkk8OOLe=NQi7tjK66Pj{(2WEUpCAWK%S@U&&xaSm;usq_J;seA! z52M!}^y9Q9@+>>le(tTU)U=R=J8Ke zsej~Vc7CNN=>$(_iydT;730E>e6y!@Z|vcvZI1PUzu8BR+Za*k&t7SFQ1jOBnn%%oj+k~(g~!_nb8+QZT5)v|opM>u!*)fW z?fEqtTN#0q>l^rItq-sXeM}~9>X@oj%_KrrW7AbnE+HgKLrTxE@OQenYB7|RXW3&^ ziWhd6Hd3wLK^E3K5L?dHV%i^llzd9(;U?i^IHL`x7wghs<4$B|-y=7*@wB+%F?nrW z#MJ7qKH(=vWH<6?CL9txSa2O{B1rd(^LBNEbG^Q$*2y8gQ%!rZR^~ z!u%Y?&-={|hc~0Nvw$6bm`!sRb<(%&$pQcvq{-&16;fiwMC?8t zhugcKVegGR+O(nzuMTWNFF(sui>+a@NsWf=(uXVuf3ajNjO+Gbde3V5aafHyE}ftc zKXy?_xIMkO;mNyHPf@Ev51*Aep0eDVP&4HwO8dUBQ@Y1tyhM~+&)r8-r`32K#?YUU z1#Ia82a;rbv#iYL+6w4@f=~FuULBrx?$QuV(3cCF| zFMT#<>V0BEw(?1@#HjJ>AkvsrPN#>~a>E62wBpl7=Jqg`c;0rF*pme7$V_fEU=QwC zt-;Ez##pt)hj**!(bgYFd3X2@%+@I7T06c{L`pO)x~7n`A|qrx#DO~_c!IVM9s2%* zEY~b1-Blhq^u&qW2c}V7S2_7kRpD1>%%r$r7p8jC8J>5((VEv15RolpGrzr|4f0h? zb<189$xPz$ZBOXJ^uw&}Nhn#$XJP4vTf$5}jvqg~3>{bGF#mZpJssl;)e$dArhXzj zvhO^(j?SPL{{_*<03*87bO#R`tFcw#9_Ecc4cP~qpgK2(UsC=sCzVBb)c)?C#Ordz>HcNNOSM`67Ci@SI9LKhumP354lbW1;3%1ZiJ@ z@}5w%U$}y@4U_rf;pMc|-ilw645v@owG{MiwlF7;=7!@YLwt!9pRllyQg#2bjG;d$ zcKb!FH8}yFx@wl2;3N3RcBJZ}jhelD0G3;6CVyU8Mo1VsLO^Gj&xnl9rnYr5nbi z723`E^zTs7R1vImI*TVaq}Z2*`tX`_f%^@NrlrYAB-_8A%<^GZZ3j?w-!n3 zxzP>vANZa$77kRkXNU=k*&HubB+8?5=%0mvRIe{Y#!p%%Ty>0I*X*OmH3qtLKEj*#+QRKeA4#U zB;6eb|K>sD?f;n>>Dg18?^FzO(xv5lgqdsK7`iaZl;_`Q#_@aFR8y9U#*39)Bc7?n(XVrZHng6uI6$q61@ne_zyVz z{VWw$sBx9wJ1P3F8C^0c#a-7_GBD1jpR1-&=+)O$@bm`zt{4Gnw{&`Y#@=HEBg)QWc-T#qvmNCMNI&o!P6p=;(CWddMW!93k zWr!2EcMV04Q4{*b0;%fo7B1)ZjW*5IWMed9DeJtBz)0m&)n6U1<4 zG7igI{Lxjb!BuKE(7w<=uuI>Gherj*xh#Wh)P2~k^RIBIs08ubf=T;)C^yiaL5I{+ z(Ot0}$=`ZQ)k#fW zclQ)tTg=CVseM>lrOwJrw~@&$Yas-$LG{kfTyDZIe17(Xw@WoqO-(dUxb}hGsYJ17 zuWw?{fhZ7i-{9S}XiTE?Bm zn`M49+x-yI?dMUbr6U=tH9_pM8&VBqDaQOIEfDeo?UU?i-<8*7fB7g)+x?!q?oYy+ zyWm}#>G&`$i7$*&g{cUz@52M+%6{RJ7Mox=p^%S}3dK)Pj@`vuA^J*!)y}z0yH8DL zcB=UZomar`FB*p3N-eBtumtX%(BmJzB*II#nKgV($Fv8P{8vs7JrrNZd^a)rc;YsR z))hkk=qiePYlSQEg-l;)*IBkhg(X==(A#6Haec--ij*494tJ_jTk#!)AAStQyoY3y zp+h%A4g)dsFkyxiueM!F8!x=$ljV!CQFM@SaX=Bi?-4Gu)16JOStFS8kArlH)#6%A zF7=K$&a`KHL$9_EtJShd!}1uK*X84+&rvpdWDb-U3C}xZ8YTA(<8nb0sbg6x4md5M z_J^s={C6xKs{TQ+X%=ovOh<6F1D*ZoL7_!gQ2F`-le||$x2Ko`a`(vn;|*5y(HaJW z@8j{(4NyzCMCZqOVd2koK5E%XnjV#Muf;#S5TVXHDNThvQXAIZ03N=95-6Q^1~y zEd2nHtJ^{5H~1ee_}pN-mIl#!h0kdJ`~@XdK0L~68?rsWlJcHr(jU4IekYGnQoTM; zxt2>!A3yW1_sc0u!kw*;T1fl7Mp4wx4N&da%C81glQZJ@^ruyHUeTBdmp{`LyQ>(h z{vKgt&eQDB7|b}DNl%Sh;pS70TLDd|axbLTPC4pV9|G4Mb1}Lk0_i7HF?N6m3-#TE ze^UQ31MP8iezz3eeW;Cv8Cq~MoR7khJ_r>!$B&~g;q;gc^j>{QZOWxEzSzaK8ma7&%bdARdBic4-o!=By9?b1W02}twRJX$$+f$P*LCT9BOgQQR67%A<$- z;>y#Bbi?)}4UwD3q7?c_M5PNC8l6yT6#dFuAxG!Hq&9ZN4-P&Cw z?eBw&FP2e|i8ucnQ-rGX0TjL<7K-0C(`c0lfx8NW+~vFQzB7?2*-ygTLrrMCE?jn! zJ)C#$8-hWil6>6eJ+!y*1q}_EK|cOpaQOZV?6>#hv3_G|>+;zo+SQIM4Iy*xvjgf= ze)5oyMZ(;h&I8UrN07oo7Ovd@%avEzi=-S{7d{8prU+|h%3oPudNlkqE;(n4>?u9@!(e=tLOu6hk z{hVsfzneWr<;ZKia_dpl*h}&=NgWjb+!yEa63`x=$EqD>Qio0qA0X02V_u~4)RHkm z2Ko)3JZvWDKTm#Lc0Z!l711@J=rF>6EqgovAI;r)f_BvwP=CA;*GL~rGJ?(o6%-=RYXKhV6m z>8zP8hIoNLiIh!4fL1ZZZCguoKCYo`ZNa07^6^l?J2qL%d- zQ~E6z3N#JJ0(UbODA$3@%1c>W%5<6^z7vtN^zgJJfN#`zL7{eY_**$C7>F3Ko${8L zG43{H%@wDc?`vQ(nBl{%J-oHlincxP;Tz@UP!=(XH9YUbfCq7Wo2CefADc-9+g1x& z%r{&})*_F;q1dqC6YVe8;Ll3jN#f5cwz$uSmO6y90N-_FylDYko326D_8h&rFo>4_ z@L-`oZLojVC_27k07Ynw!b;t}^mNB1nmN1#hZKjgUa<@G+WR7P|Ej~xDI1u}njZP;!|M{{t?Hm_MRn&^UCyX_&un* zMAI5xjAV%@()ktwp|*;*de_iTi#WbYbtqje(Wk>zUZnWJjRm{3(SG|>3g7gM%nMv7 zJM;$4wvC~`>7$VQ{w<%OD^5Sp22o?fDjP$g)7C`cuqv-2?7=g;X|=fVq&BHg6~)({ZNkzcmf?-}pC7CVUUMo=@ke%GQ(O ze`0jt#B=(Xag{kewSuO0D-DXtZR7h6u0h4oJ#6QQxs)flgDszDgWbmj z{W7tYEDxV&jyEzWWlb9^3QEFFAyd?PR~?=G5{TNzq1bVntEKp5+|4Bg~;7H9!pR6k@uow?CPatqz(Ure`b-izCeN}6`4X|x(aiA9Y-<`rqS`V z^YrS?K)Ug{oL0=+1v}*&tj+p}I}`iJ`1(d1R7j)sMsL`9vmk+^uVg6}&+yy&4@+{} zi&)_{mgDz4$edfjzjGy~{62>>Q9FgXawM-QaiNfp9?%f`NwI-pQPo=UV)3nH5j*{2NJ*i*_urW=u&PXE&C+wU+Kr!UQtEl5i?RvQG#TK z8LsV=BL^X$xAa2O_^hZl+^-V!*wzJ2=xA82#^&jM%$6$+@5{)Y|XPf&k zQSm|pIy=;e)`_LCf6vy?7^n5{Vfi%dm<}_SxPbn;hit@(WZH0ZBVV+2Hk4&@`M8%O zNV>6{{}ouCtwQEM;+X=%e|kc3-fBGG;LB(0^^#`DPadqKg-sJQXsVeE(&vrj4-8Cc z*wu7q@9$2L&d%f>u@Xg#1G%!eI3gYo;3g|(k;?UKKHFt51y_f%ad#YO*#vXergjUyp)sd(ErIWZ`+b!IXs^*JR0%^g~fn@B`N_(%*pmU}}pf^tNWD^3h*7^Y` z$^y*4qg1?&UD+#-yW8H;-J2unp_3?+TI?mvo_7)B<%RRPCfu-d z4`f}2q2b*;#HoG7e&aouEPVi(om;8F{2W%){Kbw08|D)lO6@0xvxX8mDm^fc?HKx% zTrAG9^F0#O8JWblxwun)&}BYjp{bx>s?aQrHHdr^L7N4h=(e~d8?@pxN_Z%(%X&@Q zL=SPd?TPsJg822<^J(FV9=1@>i^P`f=9{;x4FrsE*wkl><8W?gbVpC zQJy{G5pM6?%aXS@Jly;}ot5d#JavJ$~hZn_)M2# zKi2&s^W~$N^_P`ctFMRr2H{q-U~}9Sx&vGezUOZhhvE4B6J%YPL)+$TCZQ<>bt9|! z?PYt=@WmL4AKuW-hA=+);YhlkK8%T3TBA1Ef^Jqc;@L@c^0oPZz}#kjX5TTmCbn_a z+ELINm548Ub7|D4Dg23KGBxm%EMWRB3Nw0z^7hZPpwf?bXdb3p`BvzW`~#VAU5JH? zk@1-{cytxhxc6^JSIAwR7qsf8sirVde#`20rKqaLTiADn@8OOkKW=pzdv)cJ<|%k% z{|u=1uL6}=>}1D;ov^K82y;{|g!aPSv~_Izf!WLP%zuCjDMU`8=FQ*n=vE0X4XG36JXOkz4MvOfJ?uKGj-8U@S$|OsJ*gQ8 z^#|wSb>%uY_nnWm9y*X%IFn>&dc!>aH&w+LP-VhkysyaTE3BeXFm)%CgfsN`rzHBd zYXU7>_DRS|io;iP20vr8kj%m~Xui!gIxn8eZ4L<8%du|w75f9j?gvns;|tgcSwN+J zWs1Hukj}VukS&wp-!4}mUg)b*>$pSvXSPsYuZHk4I`fl4Ew}pBbF0zCU z?mK|LJBL!U_eflyP(YKi-IMVB z>^ai=Z-=0DKcx4rw=qq@gBLAdN0Se~83fh0bF(u6;9I ztQk&Po8MrVNhW-n4q^X`3(WnlK31H*OZB0S6D;DDEAaz=i z)P*Bst|3_HtBLZwB;-GA=m{_4>%*eRUFiZZNm`58`v1s5`a6CfDaB{4H{@DVK$lj0 zr`pM5xrAjiax0fG?d{#zAhVHJ>RuuHJcX^!cuej;>M8sCcw}u~&%P-bq2FJcTDlLB zwqrUy88)2u>VIS2`?N@BMl_{3bkcx1IZzuOMEPg#A)wcR?6%aQCiJ=RJl$X%zLXA~ zeTUHB9dvqD5nrcZhr=#$kUwn>--#jkVZIh6cG4`hYz+Q19OYZxO;IWMJ(B6^bipWz zZ@MgjcMsxdcdHiUrv4PpH5c4CYRpPf#AwFo)7;_U7kXxM3MU@MBRJ+O%iKDhGHd5^ z)SaNH_nv%l$6)%jV?O#ucGJLVJ}f}~IK5KSVk7J_De-LpwqH_0Sl?z+ykJAqN)&lo zpeba1eqzme1#*-h$K3>7VVS_5?Y{8_DmRxQ^j1IRNR6O(*JF?<*UfCjr77lxD^&?S zc)z?-*)|aeO6#&ipO7i7Fq*}BjSaB)*E+UqdpGHvT*TTpzaa@Nd&HR;k(8eb*Gwru zwr&=!S@N2aQc8KsDg`<{zJg!$&L^==CKUf-JCxp(v2VZU(mRMF_)dYEubF^TnlCU%WW{&nTv}(5_*BCe-mT6&3#KQ}}25n;ddv(As zuV+Rhq)4;flG%K0qBiw8eCNezc)pfrBPFx3dekb)8Md8N=K5evM>&kzeBf+U0-Y6h zcvjPgS=A+U;=*%iHU+b9+X^Xor5xW=I0_lY>TK zTsmC37w#z=AX?_h<|YbxRYQMv^8GwyY!2e8|E(Z7x8HEN-vF&slj+p#o3wwYHXr&X zjH1N$A>UyI)gC{HG~+GwqW2BA%6kA`OyiZg;X?P-D2&=Jyl<~!sj+<}!dHnP-n^Qw zKAZ;U$*F#>pqc{rxkheDfhm#?PWy%|c8VH;#_PG*jQ6ZP01-#3HxTg1;$6;?rFC zCdqhGDBT6Q=hc|uxSbE~*iSQde&*drov=7=5&3nVr9qJv@L3rN>rKJbG(VVzD&Hn! zVedU~{|}ihIZjLK`|BU4I?=lCNN3x&nQTw&GSP z{ZzQz9QBSWv~^-R>E`ao?5{&9A>|Lo?mdOZjOp|^#+v`$UPF&8Z0V`>Ryei~;~GbV zej2tNDj@^t`QgI|8vc&NV+9VWPiSZAJq*W-!N?FVrU^Q6RC8%4uk}?%Q4`n#J#$z+ zvg7;vBxuU6Eo|KDAd-14&PS`w#r=y1QK9sS6sAS-=<-=uHr5syRYURH^%V400|4rlr?P27PbY%&g0p^1_9J zL;A^l`(8F%=$rc`=!n*rTA*bmWF$gr1rJf2O_}o#*QNKvYWH-wNmj6I_cAoRKgun3 zwIRxBEaYRIu(|C6^uHb?XX#&DtaThs$sEiFJnEu%S2g%dZ3D!&Ig@Ah5wxFujRi;4 zsn(~IuPYI}qp|1tyBT|Mv^bhx2p-;mNFoK>Ts&4?MSBMlIme0d&F=#6LjN|x@`YS; zztDNM!;@Y1I?l|qIvm&l+pV3*8zFNSx%=t$e zEo0dHk>5x~?g82=eQ1DfDKBb&1}(w24_0cX{2FzLd>l@v=cn-v-(FM8>uIE_u7=os zn;@qA7P_}5kaJ8oxgFSyV`kbEcm4&Li~poClfJOjeZla#)x`f@_Q8cuN@UPH2#0nZ z;TyXz!bu^5mx*kqWfyemi)0KIeCXk6<(tVg_%mM~e4nh!9k`_IZEC)+NDmGLqEFlf zyPT}3Z^bQoJoY1GLI+>CdB*qN8bg1DGc4`!aHR1ae8E6H@~*l|nYJOM>^heF zJ?f!zcV6(5ne!3+HI;(5Z^Ue`b8KqaC3$R({}(r(MB?r;q5>dRqcayKcha>kMK8}UWB zIH&843|~I`8*1;$(a^s`uw%{^biUkyeNBmMa`toNcN^f4R1WzYJVU5R7+e?cBs~W& zRL+-XgM%!{)c+?=YV4$h@pmazRfe4B$I%m=YD{K(nD#88tX(7u`JsYNc2to+bXSCq z`%q?k<2`1*_`p)TqVZeMGY&o_8f5j7A3K^(-ru_s8dU>xg;6}P{V|D(<_Sry&oog{ zjOgTIG_EM;ivC-$_FXA+kT=8dL3!v((ZQnx6_y?nf_)FqaPOqaLL2)(UM)X@^2WY>x8mT*Ob!F2gx9o<;vMR@`f;-+N{o#9F>IQ1H-gghciq3veayva;^ zkv*LAjabCyUlcgwJi9H{M=#3M_#WT2^yRK4B@gMP$;sL@GjS3f+`1lad1sJwyO6(g zUP#$qZ>c9zoz(AI;koE$EL4u=epg;#QHv9)S8PH*MKMwHOuBG#HnTqTn>OSovXCu> z!gW6mG|48JJ~XMbKYzaARI&!-Mwh^_p^CMv7xwhI4MK)J3x$3Eg!w|yO12-ziufGz z3-HEi2RpQ9#p9=g83NvZ#+mcqDfd(uTemO}8x!J?zg8BtQgpX<6bUuI^k1v0X-3ck3ISld*tuvnO5jsb@OfX4J3p9vy3@lIq2gyh&j> zE%hJ6&t9>n$=53Qn^}`E@XH_m?~b_8_b{3N_ywW2M2z>>^-$e@Kf;{Bf6a&8A03 zPU5_KD`jfhu{qCk5EtXll(!wB(e{J+g)kd<%ojXWdj~q_Jc(yr?4fUORp@W=MQGZL zp{`Fisr63_3=^fX^Oq{jc3NSX=P$OtUYuqcE1~CA9IDkv^T$(!dD2;%wy#pen9XK< z;skLNHdpgs5k&&)^_?pGB*IGQ3~X_ zDeuYI{v5&=N1;N^kV^+^P_VKoPg~y($rEPyTqwMYcBA0oCWrlM&4_Beii&Z=Y5(*C zcvb071vS@k(8roTtA3BwAA4B;!Fy<_cEA_kZe+V|6uOItQpZFc_TBshyn|2ilK78; z?(~}?c8#Ih${X0dTn4A!-NO&FLiir4K+w?3c=&%-VpAGHaxOn)y9=)KTQKd&E|e^d zr55$ms0bNOvh#<~>=D&`UYjyKT;{_ZLq5?2D`nmmGy+mOH>mc&V`{q~!=2+3sD9C6 z9F5KuE^l7V>LdNBY?%|QiLD`nPq8c~?;IqDSU~J$Ah|xi%A^)5()h!BSYq`8*z{M@ zm4JA3r(Na|%T`f~jxFEir$tlO2)yeZUx+%$^3{bq(8^qBkFd}0Z!)03e4)QJGMWbu zUWbIIc5FkYFBwGEF|F@kVJkZhEh%;w=J}Uf$mP@fyZ`tqp&#=}!%CLrbOWlb(d?MU z99l2oiM)r4Xl}AA{Kih98Djoy%sg3i4!Z*<&0ump*TJrBcf)+MHS{uTB<2iUfwe9h zkf)~4tR&SjbeBI3-@5{fgwD?MawRnTx+_=Polk6844j>!DAIHWUsLs!7QKCmMB5O| zXxPv0H2ffgo=kSq>IzByo#%hW@VUj)+fqJhf?X@}Y{igzlO-`);K_t#sMdG@^DQRSG zVWW%k5j=GtD`TK?T+t}+V={^03HM6DIh9AqQII{;;)=^5n7J`Jn+HKc=QB&zc(vn@x*X8HaNRc9b{l5d`ckT~!w$j9+@57jX zT>uW<+{3(-9tu4MulTx*6)5elXHwdtbmO%m1?}BTZ%0(%pXEgEt4HR zH&D=6*Yhe#aoDy`Wsw(~aMVW^^H2`mpf-MOfxuZ#|3!~;dxiY02HBgL;Pwk09-_7Y zCEp&AdciNUP^#eLAGuR*a|G#|+@LLa*I93a2YD^{Oj%MZ=tR629}{pDGi7&TZt)_z zA8LYJ{|@?g?*XqllZ#bz*9(2(jr5?ukJK86qax@LJN8Q!3C)N2#yJn*mpK*+X zACk{de=w3i^4^U4jjzd5p&1RL0;6}i1D-84e6`DZvKg+)=T+^(#acV|%wC?ZmJR1( zmFiR@_-&Q9TJUz1pojMc2tB|@ITQHrPA0+-QF^tCF{7S_Ecd68dxYt!H z%G6y=r@m!S$tR%dOgRP|7>bF*ok{&FqyEu-P>7k#hx=BL<46rYYik5a)adZH!?vKP zz=ek>J|p>m9(;F#k?^FyknN(UN zPNP5BBIW8+`cry@bhCc(0f{EG;XowKU!n}@)B7pF@Fg|O31RP=^{Ky1$or1Cjlm<_ zxMWxaO|%Eefncg zmL3N5=Jys7Kk@m0?7a(k4cGVhy(bBRR3m~Q>bQpzNd%!vkdUg9YTBx*B$AL2NhCqs zqm;OoN(prd)w)zwE0nr4R8>pWovOBRkCwKIireh}S~Gj+tTQ?LtH1Yo{?G4y-{-r@ zTt2h*T6?d3nLRUm=CD><%4q}MPvYgDdP^_<>{)*0T_5fhxSU;ze^$@D^?<+d`~dC6 zpBC_5@9X-UlmD>d#(8>di+J{J;~?$C?e=WrN1yY1J=55SOP^xD{2a?~z44s>AR(Tg z`SA^|&)fmu-3jK;9Q>3Y7#Pel(wFlO@)EU)aToZgWw*6q2RzxH{+HR9^8MIS+Z+0X zo5$gMOw0HOORDp2MK$<+pFBR|g?jAnNAUgHPY?0n8T0wxt?8`jw|7~k)FIlplik=K zb9=Mk@_sz!>S$Arz0UpHX0uPm zCBgU0d+Xh9|H<#P9isPc@;7%G0Ppo}e3j4YJdgP#*WnEYdua`7i*m$!y)| z_59#xv-otst$f21-|;S=<-#|Ao@Qg)OwxL;3}6>eW$Uk0zQyBTsi55no5r7gy1JGZ zHIVP_cwhf>R58rYYOIauHH^QJ7_ZGcT$86PT%uhXvYnj`4AQ5+FpF>3dNZ~%m&ew< z#(&6tm*=l#?Dg!AczNGydgau+tm%%0d}i^xY-Fb}-ucW<{`+q>y>9z_Ud!XAwyxus z%r<2Xzp-K*ANch^JyUn(12)I%V`2yJ^=VaD^><5H$wgNd88e(cUkJaR(*FWqIW$Z= zl0FHZyK=o}?VkMZ=7sv0*&W$}?l339ZzW&36Xq&(na=;tc*r`n`i>RAr#;?mcY}RU z^$T8U-CnkI_*tGddmK;9{#E~UZZaR!_$QwIf)`IsuBp9V_&nQqrv`Vs-U*(sF4iu7 ztg{Qz3Z<0^jS%__X|o3q&A$v^RdKQ7~cUb(_E zGgj!Uhefm2XI->26ZZ4j-(~BSqr-T+if`x}7nkRUHpH;-{1kSwNuXXQ@+2EIA)R&a z-i<#w_c=ag>~?<3J4k=?h95h&Vz&16qAu{ha#!}%#Qx0lkL%i~9fP^6&s%&)_!SoN z^#JW;_&^>x^Rjlh!WH&Q>J{zvYomF^*D7c(gEW@g^DW-`p8|gA(=@Hau4KOV;0?X{ z(XZHoN)5GFmR*4F#m&+~Dm>3S_0MEmI<8|gSDnybTvLyI-#?AlPrJxoS~ODowCFj$ zao&&o%Ar2I#tZO1WAEQsQTvH{#lSi2?*$)diCbs$HB&vbabc6#`B$5250c&4{ylGN zW8k}@8)|fCL1CFZ;S)bzl5~xIc(4LX`T8t7t=HDqUU%CQXKu~V=El6k-paYeV!al!b`QF;*@NBKcS9Djr>d3k*6@tyyZx`R zc3+>@*G1psUAu(woxj0%A%2b5(*C^7=GENGIyBwNZnyB!KMC8+^F}SvHm!P-{g{48 z|9E0=UjLV;cq5nBxy#$PSjFE@GuMw6X+Ed#@U^X0>o?!|frU>lU}3jLuz77F^am}g zu$n1r;h8`mp3*&9-}w4GUjJ}3pV6!WueM{c-jJv9iu1SYLCYGm%4vb{+-f)f?bbT2 z(Vqs&pFKat*FsM9V{8c9&d!+{-{A@2)`^0s=I@Xiz zf94(be$9O>#OGPIWzZh>V8LZRXqON4ONaSyeg9#f4{4$e?{tV&`l|@u-yO;4F3Doy zC*XNm+$e1fcjXb~_p*^yzvdI3tjU)2SDk?i*{OTO^ql#x@TvZr*sdKH`H>p4*^kHJ zJ+>FW&}ZGR$DRt^uT6h1p5-5|sqa{IoO|x<%=9CH?B%F0+0DYg`QnN5wcl2);#XqN zXra?5vfa7AYQgMj?%Q;i7Mk-1`()pCHt51hK54~m?ZPJ=S^l-TS^>;k56^o|tCvun z&8xLqp9SCcdcD>dW?N8>HT_~7@0@Xkzp-XNfBWP)zIkaiUaRX^b}Iiz?$WXoAKK>~ zz4eSZ{%ZVHcoz_U4`rLiH&&bg^YK<{jne1v0C?B&4t$TK+{T~v>**>Fx5h$a>S+ z#QU4I>t|asZ(o>KxZpWaIfm>)ic3!uv^nzs(K($;w`=&hZiY$zdUU-YH$e)gEghw07Pl}d4Z6}!NG zy74-EOZp%?5)`c;J`&CEe)*c7@>?JN!LzrR_t-T4&p+GsA#UT?wYV$VPp?1Z-~3X8 zZ@zPlAHVq47&3mfGKRR}uh1^`uzsRV@-7jxs0WFx8p8g>(|J()s{cE?`jEm1} zB_D^do>~9sqg^ZW7qj;BoUw!WJ2!vUhVSjof4$jVJ9S_kkKNshw;HmM#|?8@!vP{t>HR@w>tGz55m(8uE_5&I_*nv?ut1piMmZ zx6WWICqB@x z*}Af@AG)%qd>gYj(qlAzz+K+rqj2`!=*oQOs348Ml*4=Utjaak1a%@TG=Xisy7xLPNPHN3Iz?f*+JAC+?-mJ&41N_$DU2q?CzV6>| zBy&G}k$su+h!4;9)~CJPn$Lj#`AmZve2V80KIYx^EWKJy?Ze1=e8gX4S@GukEG(r! zKem1}`!#tr|Dn${Ugz=!{pg?!x+6U7P zvBWiNnYOwQd@tb{t$R>5A3XXA{bKp)@U73yJU{*yR;TDEZTTBt@!#gmV4gk`_#cN` z@z|<^cxH+RkI8s}y?(Knm%tb72V5?%_uCKWIQV6!`|zxH&h2s9%z_$&*3O%gf zIJ=w;1-VDNuJIvHR^@wRIs2^TI(`57_gK?_k$n2l3>MpD3tQN#3xDa&%lbb}CbI#5 zF413)o5WV8*5`lx_&1-j{VTY~yqq^%c$Q6FH-)_x^-%k$dp3W+fAS?aw(_4RzNPm(6vw+P7|r8C*6=*uRrK%~m3fW(H?`NtzRkbC zcZ;2<-H``u-J}K7{E{Dp=XouAo`mzHmwxB{D}4LVO#V{C70d&k??*Q1#5`Z!$Ujba znSIyjMLj?K5Dz`SgLODOki9am6}$Y(9oBjNZmn^-rfm3w+HA&x-`J`#^ZC5Y!~E;w z?fmoIv-xu#I-lkJH(%fXPafNK2fwpry8a71gTGU*wSKTwZwFA+BXHWE$-Gyq688S3KUvk(O03_z&-2s2|H;;@@Zqf%CG%lN zcd~0&<8)uR&$F@NOrGKs#$Cd0Nm34dHC#jh9(mbTj4};>nuk!}ZJ1v-&nMOmXFH#sq5a*xBI|#M^Q-F@u$m#&^pFY5c);efywBE0yvd0# z;eEgHEM}1}o1VLyeSfd19vqXyPqfJ4-HuM-58tfGf6Dge`{Dj`azbU8$Ni4hsX{#8 za($rgTN~yq)_}R8gZr@W3NLF1Hl1e8LT~fK+j_G#Ejw%Z4H92kJQ8;gL{3_esxQO4`*NLy&@(XWp zyed2+|C(QJn5R___v4>kSjloX?_odf)iuAvt@+gf_qA>?AFz7vO}0L~FCXJ|l@CaF zW!pMkVduYn6`t9z;#>Yc$3EWivv#4=dLATADieW7IfxaqjI$$Ts3xO+H2aR z-eY;udm8Tx-x>LA=@I@#tw8>Z>oM)}!rlC3c$ctQ)ExfYxG4RNsteiZYQCDS#%bI0A0^jpk_khJVU7+9J7sx-@oTC5QeFv{GcY?MAerIjersi6ujf>gR0fX7vCsy*e zJ#Fm%*9H9G`z^FrZH?H<#om0}!zWp-i;?i1r@5?Zjc>Ij-@gFAjn#^|kDbG^Yi`vK zHLb?o((3Y>jb`&>zh&xef;#gtA0_hqp9Zp5`&QAfHZR9Mm^Dd%1%7Ah&5m95gHN^O z{`++iO)RzCSxl^X|DLoGHMi<~`W_|zW=VzYecm2=k zcU(Vb$q##KhieD$@7w;vkMD29$21IL!DqhXO=eBj|9%eok*jlf^Hzsg@61}7+xahf z`309)hkl>3u^(LK4`2G07p;lWKHavQ|DCj1E7|`Sd#md~O>fkSwe-p0qdVzr-}x`} zadY4|3SMr;FQk6XPF`IEzmrsf|1mR{bzM-O*ZXGZ|(kAzj^&H)_2l%-S5|xJZ0;7K5pZmZ2I5xwbnmD{K536^;c)Q@%_Io(8uIO z!5pIZv}F}*v528n_2k8j@4Ea2+vC28Z+!PC`{T{J?Aob`+Oro1v-a=1Y5P-K^Ok*j zYZ=EX@v{|c@#VAj^W%MY=#g)|#FkCIqTPCH8u!cbWG@Ws!#{s{fcEL3@7Vi27Vy0A z-E2eao!b3l8~E|RM`*9TR-1=*P1Q5=nzNNn>+rUbIvaX4LmM(a7M^nr;`OeUXP*^j z=}-Q6kdI&9ho#NG%Ld#J(B9v&hc|9DSD&}*1MdIMU+^oL*{s>J1Ny6DPBLx8bylwB zeKyadFRKUd1D*eKG+$F;7vFJdDo=qq!~OV;j-F|5+9ne2O*4>)1zO+9z%c7CziPCmYwjn`{%Sg+dtC3dJr zW8OSw5F0&so94RPm!{X5W9* zpO*xj(dIP1!pFlr%jIjI;-^Zgv$P!*`15c5$$MVB#qTfZ&Q4{mVrwdH<~5dkv9m86 z)nbRg$Zyx*%-aXIhxe3^@q0av^118&V9R$c<{R}P`k?w%*qmNh_=s7-{K*a{*xJ+I z@{&WRwO_;XdHW@w>#g8<+t3eZuorV?vJaka&92URmbH(5Mjth(7CcM3t_|FMpRe1V zu9dsrfj^%VtDXLJ8XFP!zLwo7jl~UJz~29=6086HR(7h&Mn1X8Ro-UnuWV5B75wfK zer)HlPqp&Z8RyUD>N8qS=C9Sx)F(DcXAgq@*2hfC=7;XB(LaFu1>b#oi@i0c6Z`AU z-CD{g9DZv09j)=PF}y<4H`(0#QGCvUA6UicL|*y!MmDW@B3q-4(>?dR%Zso5sh#Ye z#vf+p>wo`pj(`91MOI;Z2R7<%XD#yu`1awQ1A1q##(Y?tVm;{R<1o*vg6=Z#X|}b~ zRz1J>0X}{9diMLaOYD<2Gxf+0FYvr?U9`^o8nALtZDSv8TEfOWbC@-Od0HDHU(ngK zMeK|EH}!#!e&sFFAF||$?fJKU@a*w&9p3cMn%bf5gN#=pghq4Fo9jNd(-eunHb+)=zD(koLQo^#oc2X=1ApPhe)C%}B|;x!{!USbn% z%=WWv%&g=3Xm~%a%dQ{w9h+D2{2f!iPyJCA=ER;1l*+J-edc!STMxR?Lj{1LAew}{0)`c>IC7mn|H2>a&zi&7@GU#}m9#+px%D^r z)z2^T$aCIo@32YQB>0YrfAH7Zv5y+@ey;s_$f7w6UhU=0dmmtW_wL&532WJ*u$kKU z)7{zNt_Sq0!I#*`b8qVhOUAJfuZ{eRMXP!1;v-uAC3yB+x0V*RyEEIG^%{RG{W#l| zQk_3pX(($}sIk1_F??soe7<q8UH^QRuVv3EQ+KK9p#|F?c`_M=Gtdl{b`ox@Wmwubr3@O|nx2kGIP2Ez9t zE^0siJ)eK~aXl?bgWoayB%EDp)q$Tb3fF%K3Fq(@A+Pzv3I3h;L>_%IhF9EFpB*Uo z1HTDBGTN|yAuqYSPn%pdi#-^!h*to3>3%Z5*4`nsF|_Q&X-_|=b3vcq1w?*2suKCxm2Ewy?2}tN^rY85W-r%zOB5Nn4#Woj>)%Z2g_sTWoS+ZT;J*`aHE#Z@%Eg&$yeL4_o=i zXnGPe2P&zx@`!FFBPz(;gF#lP#+k`E4b=e;+2>Tit<(^He;ZGP?A1qKJS zY2U&&C^jP@-jd5rC1pm0y;jJ=LQ-ZCvcb!b9drY)|0>o)Q2 z+sC(y8ypl6*fuDned~ar;J~2xb^#%6g9GE+1jPppZkLeI46X%4Po=@T%i8#-v^pO3 zSPNi2f)`bVjTn!*F$-LB-QF#~(0x&*JdedymUzDBwbXlgjb$i@@)1HlvjS`ks4`D` zjC_`m&o2iX|3W`JE;K@MlgG>3K;(=e4f)VuBg&(0fSI19?#nAJ^8keDekf#MdH`d+ zJnGsOxGgWg%-zgC#)Gi)d00FqeKrt@5b_;y-Orcg)>sCI#CEUhurr`a(c{YCp^)#0_8yZ*OkWEZ zSU}hW^I4tCn>C^l9PTG%LvbBdB~rShwEB3PdCnGcjW7*RPNjZBLBn&v|3ml$;=8e% zFi>_3@RJ!3>N!H#yJy(5mEnIFynY!DxAGx0D8m;R`Wu$v83soWIEI%D-q;bsUOR(h zrFINW4Bpfc!d`WQV`(@BH-k5Kgs`{5;Kst?*dzmC<8us)4UQGaF^n;I4MzxjuNfR$ zlVf<+;I$ng?6ojBwg$&g$KZ7xA?!sPynGqn&EVLO97B-7VUDaN)HgV`e8=Ev@G6cF z_P9~*vUju}zHM+XI}ls&Nd^c|sVyN7+8BK3wUibb_87YXL}Rv6{-oIY81!hYVJVj- z9SQL?X0H#Dr-7skv!}=CTY$AP?Aq&_O=yeDYJ>KWWzu9b|?L_0gk&cd%ZRKMqsIiU3>jE&Rf9e8uIq~VD$gMFu1}$XTg=( z_0Z$4%$_etUbf!iaaUHh-kQ8@y*0T#owzT9Yw1~C5_9cJ>IpsKO6r3nx0kykxBJtP z+soaN+soaNm+c4exGSkwj`C&ub5q`49~|XL{UHZjN&6xg?Aq&(Be%CBM{aM|j@;f( zC9kE~$6Au%xTgdtmLmo$??-qCQ^Z)}c?Sc^Q$Ce&>IXb;N_pxB zdHz8?lou-GPY_Q1Q$#rR&r-bJfq?p7G&haqS_R)kcqEbEM)(Va<9Qqd>VL-EG?p=h z%Q}t+(g>&i&sOkx3ZAdvC4@gq(&O%C?qE8pU0($cQ1Fg~Q~kXNr}_sdc(Q_L5l;2z z5Ki^OYxG92=4-8j7Z6VM?<1V*KcV246#TY=dx{~2wVv1rr}ZR&aGIV_1&>tl7zH0s zIBgeE&_83qbapZ~jitQ)!+y9M;RA#`_QRAX5VqZB-zaGD<4pHREwi9F>w3ZARrw4b4RHYnt` zDfm7GKce906#P2j)DN`Zqv>=b?U8a%1*iQXmG@J~2P=4}g42GI>hGtJk5}+C1s|{A zwEv`ba~1OW3cf+Xw<$R7SE=123i)#iew}cKawnYXcO(59<+LBB+*cv*r{M4@SR+{5 zHSM3N{$2|CehMD1;F*L|KV%b5?ao$kn7-;X{i_vxlY;M5@B<2dLcxm^{JMgdD7c%r zM7NfUr-J(`xSxUtD|o1a_fqhF3LdZEX$n4G!E+QmSHbfY93H7VttZW@bLcCFw(3f@S;0~8!yoi>8CKY>@Wo$@FJk5TYs z11{E~wIrQi=0++EyKx0Z{yg4-0lg@T7Dc$k7m zD);~ePgL+M!f8J?m2ldR%~SAv!l|B33cizYs{at-R8LxEd;O>P{W1l|`vc*oh_TEP z9PbZMK9%T+Ao70^PW9hb=r2*|ck{5Plj`>n9Mc&_?0O20>7?A3=%IdSK{!ok7U5KW zwcytK*lPv1-p4*d^w9g*=Lo0wv2PRpJjs{)6LvrJBHUNOTPS!K;XR3-NWudNj~9=! zu$|KTsL6!CK;$FEBTw{C55ltqNB>ZMMDQ}_{c2`p7PwFwVSWt1qyyZ!Q;gvYOCMo32yaUvEWv}l@LzT?=Bu0TIGEd+)u$n6#RtX*7VCq zyw>#h6OSsb=}9Di^jap0D7W6uehWv#_n{&l234{v(20(_ch5P5)nn)AY*; zT~JD!4}-=YCr&xYhqB1h=L?*w?w9Fv4m2qX?(zPgL+M1Sk5M#me*1RUrTrgqNhN?PY_PW z!=jsK=!a0E$0oMX50v`}j`f6&OXb)S`Ex=BSN(`Q9S7zRPUkJ;5>EZInsDl$0tGK5 zociaGf3q4NKouVU7N|ISx2{qW!UDyAR)J72~0 z!~fQNl_O-H3GK(|d==V{sphNPCVHs6d?m&@9`jU&EOH$|_2eixy>6oNQol8ws`~({@n^Ea?sx^K*LO5MOBM3+K1Mk>9zgsf@2eoE z&nxBq1myI7i@Xnjyfx8tPHZEWc{dR3V?f@<+%%THgwy*-y$EkdRS zPth*D&vS&x)Av)Dxb8stj>K*N;q*SXypBV8TA!y9`OZWS^G{Dmj`hz>$jbCj&B#cO zPKXa`(Y+RliJO^!{E9zHVJ;b>;;pyY(;jD%$P z)&j&zjgQTYH4|;d^B>kfAw4z2wC@j=GE)bQ$xHwsWMh+)$ASbBBf}t)F{1S7FvECc zdIBUYjdkn$T4Yq8=-~;&<6uu}z~pD7q^6)6e_X&3=l;t`8j@l+16iSxLlUCXf}-OG z0Zd8FOz`i~`{kAynXz%hN)2^QG8_nA9h{IEmq;TU#UwnHHgZsMQe5=l^wipl^gHalwe|T(sJWW3!lbB^4&*Da=k4iAg$v=+y zXJn>Boq+Y2;l|pManl%U6z?C{o;AwyhXrhg;3h0!vmI{2BHll!tpQ+}kx6 z`9H;%@1x2H*7#i@vXvRKqGQe%{aXuwm``ze zXxnQ442U_i@7o==>o`QVG8Bv%ZrZn*E8`n5IHk>M|ER+M!D6xzJvX9W zt1Y|_Xk{puonjh}!5s*ge-HSx+Rp)olGgg4ChXJi6@XY7TT`4clq(YUeQ*Z?+Q+F^ zR{I}=acA~hEWlXy_l3>9vi8?PWM}y=5%#l0M6{33(yaD}0&`|RG1rVJzkgxwm9>=s z2b|eYOGT}WtrZ{QK>OGvt@a0km^1r%OEETMa{OxUm9=#O4mgXyZG{%r}0BXd?q^(5y4GH z6zdO!|E=~zI+~XJEb`X)@xp)B_%Z)7ep5yIb3}Zb#lAKFcs+;AYJaVWU-+2%6QM|d zVyJ29arqw$woy{{6EeB;M10YWNo>gCj;WooY}k<7r9!aL3I|qBf|YhtlwW{|zt-Xy zS^uT#PH@~>rg$s_69z%7jQ*!N?92G_ytohITTB@7&U7>5%lCzFFTzRuR_%g<+t}~p8SjA>vb$ykJn<&z-EztWCA8mFy$ znCi0b{t(x7CDCr{{&}_By4!uquY1&u&A;pF+Wd~I%le0|+WLQ7+4`xB72I-lTYuZN z-g+2TdV{LmTflF_pRF7#C~~c~9+_M}04}%Txm4-)J+htsBrAAWf!#aTK%0Nx;6Cfm zyH;O+!PVE$m0g7e7rFWv+t8N=?`a!)ugJBQar~mN7xM%QK3@TO4d6cOFT(Ll;uuUn z8*!(?irR6I-aD@Kn#1|t`+$ond)~EwJn;X2E!TuVJSKq@~V!_qXtP z9aAUB6jg+D1fdR$U&l-vFx)>6_9e@AH*W2KKWZC#Fi$egp|190=rgo=$CWk5Je-I0 zyH5zcXXd4Lsa;!n77X7Z8&M4T`4ZOGYObj5u2t;mS5l!J`UK-)9MqS6m$zvw%E;Z8 z^iIWq{J!Mp!jT=1(4Yu^Uq!+kDq^d}y7_hnTp zhOnyjG&Z8cr#ZEo!|{HTx-F>mVA5t@iH&%IU+O;x-|g|X`);yF zcHc^N-#N&wtZJ9jz{k>O*xsbCz<=vuD!(_Tv#Lsumt7CqlX@^N^mX1;ANYR#<9we1 z?cQ0N&ws!R>}4t1KD1@Y9+GxmSCx&3h5A?|`Zrp?XkM-<@)BDo zyYEwqa*wT@-4~|&dly5Uu8Dbc@tI}jv8LfiAJ>|*_5hQ%eK2jV)qkIC_}VPLv5*JM z8~i!=@Vu{Cr($iehBiH!v}sx1uR>hz>H_B!7ihn((2m`pJ(q)aT^`OU71lkP!sa)0 zVFj+gv3+P&KKyvD$}1^Zq+zhOLUxnR4mGojmpq0sI-S7sw3s=v3Sp62~~ zeMmQ)+nQ%UA5aYKt0m}OQJ&rG0^ID&v3>ObA9M#_go97Qz&G8XZ|k}ad^I0zIZfx} zrrCYr5s=ekdm7vGy2r77L*I&hsoEa)rIUnyd3rFeSRA)V9$5 z9n>xKJA7}`s|&OZvme28Wp(IByqnAOJ=1wG_Kkmn{N2i-_d;FkKpUt7X*AmadxZHl zw=sQBDB9V|r?dN>0Uafv`!@7To$HwOQuf0(jRnKEh=QHvO>3Fm_gjdI=XA3U_`-R) zrWi+fm!8k_OL(wsi}hUDu=UbOk_Brdu~_n_g?8A-#_j3*VD(fBMOJs|_WJPn(v>GAN$1fNJa6HiM` zO34fYbxw~04>BbFU;kM`F*#_J+^2|E5?$b+~t zybbAd_HE`9-k*W^V=s1`KpS11uFPg3O#NL`I(CJ zz_ljaE4J5Xqum2rV{m&rGWri-zF^l2POLH*{SfSg3V?GZ=zTOip<+Nz{V~AA1{beM z8zfP|GZj2r!Se}+v2tnHK)Adwf@mM%-eMb9MPeJ%kM|^Hh=6?z$g7&0#&Upy#}nR! z$kVwhc)=h;Hj%eU2D;!s`?6D>%M8 zB|bx79EEX|5hRzsYa}?%&7tyg4!-14K7iP5MC`(S6eD0dZG?vrUZ3y?!DV{np2F;~F7=-i z0@m~tS-6yk>qsM5(}NcZ7?9I)af5xyssDWlr|HLj4}(mnxd(O9!ex3I32sflpM^{L z0Ku*44<($YKZ$xeF!jpgip-lL@DOOB39h{!9z+W~yabf?Lxs$2*csd3@H00njDd(0=C zra!_|W9Xsj?}cV!W^^X|ZEHHiguLWZK2mV2UD?lD?e-J$l1n`U1ef|na#)OoOZh~>(Jn2o zEW&9$r{@cLexc_DdVbkQ^w9Im5e28`5h_p5BjPhUM%Gm45pP9*E62CeZ_+=$mi{(Y z9FXH%t3R#dTPZKkQ&xX=B^codaUP7ssEwHZfVv;|18rf z<%3DTP0#O9gwyN37{X~f<@w8+&O{+ExwI?KYcf4Do$|aUxs;dJ0yrn#T?)fmo=1?= zyHBzoM(%J|ExcQFWS{4HN5LHI=-5n{NIp0TCZ)q9b;&alGGWrU{Xo~=rIXUb`}QT1 z)5QUpbB#06E%SyG9B<>=@4S{yS%+ESV2TMXLtyhUI_&p$Ax_H3;n9PVGBX_09Xl9u zli+ZdxHMm2A==6D#~4L#DDFR(YW@#0kW%Ar_VCnrm?obNDM(MpESEy-enx8YsD$Vd zBV*$YQS^9PLc*}<&b09rEHJu?tlja^MgOW6+(ZlATl%PRLDQE#!L4#5ZVVsAa zZfY1Fn?9^mLFrCfY8n=~v2UGBFRjHV3>rB^6p?+hdbj8vefzu|8I8`3PZ)v|*1>k^ zp={v-mK#teu!FX2Vc++az*sSx`toh)Mqa z+_HezF-2wwHCCbUyHgr_G;a60TkzcYkt>^z&zj*-ZcGF7xo}L7xlU{ldM~CeyXUUK zb7Poek_2@uWP& z_x?BXXs38m%x9Byw{?mB?4FE|>B9K8`)KPhkGEkifss$JSzp?PIRPx;p41!GePP`f)~~?&6K%YZJ;>8#<6}H~ay9OhkR4A7!m_C{qajMSHl7a=1o+-|o`|<|LT@el%_u z%vaDLZ!SjOWWI3D#6K`^1LK5Z-k|(O!o0n`5FekzBX?)@g6h>`Blf@?7qoNUn3HE7 zgX{TVBYnVC>C1*W1T=l;;W_vPp*tU*xj!y{*_c0ve07DqVBWqm>Jp|A{_qwQUM8D! z+p5^-BE)*y=SyMzy4}YyKKkYk)N8wMa2|<^F$Z!F*vYZX(YQTEUaaK=^9R>Y20gdH zzO(sS(3!y82gf;@MZi`=kLfGmIHoto%UnOUuW%RgB%W;Rpr>qK z;Y1$oO=`}z%XrE@0^-&e@e84T#DLAo!fq(;Lz*XxbQeN-<}?r8j&&mubmvqG-45RX z-|pC6%{pT9gn24{W?z8v_IhIPr(B@V!FK!=%;T{^8nCXM7j3!_+aCBC=ZqP?gEV3L z!|fuGPI)X-r0={jPso(Pv|`$&45lFl(oEBey5P^D4ryXOQx_+7$ZUiEsc(|)PczaP z1AT;38_n!(ybH{&gy)Oi3mx)MqqOcji@#FDudhs_W1WU;&4S6`OWEcb$9YH9!Plm5 z;o7wT%Urfcn73rKO?e!BXYG3)H@6Pwvte1{9JYH<#wD;V+jJ4k2{i4S^IEZ87r{K@ zbKnPa&XLLOa^^f@qy2;2QIN}k^2IrBFxE8s0y&2)yMo!TSm%(@`QLYqdLsHBGN0@= z-`mGS!l-0j6|L`_gKb*~Bg!cE?xtW)s-Ci{NV>stHjx}x@ZCiu!hJEh3>?i1$ z0naDs7fheC<7*+W?n$Bda-a_~`-E!X3n(Y>PyQnw9P82r#(w5FHCifxdPX)OGAhP@|qW*7JO$?=|}*e8&UEp5E12 zwwFCmW*f0{tS4dM$8O-yuHaWZ|9vgSd|#}40R89vAue#t6=dAN*X4w-&2u68TlxX| zSC|uw=`qKiaPke7W4bPo4p|=XO%9_x)XvMC zaBXg!7o3%wt$f*XqwoIEGNk7U9EX^FKBgP{wp!p{pVGOog{3~m_k{300@3$iIt^c& z?-yXYL!q3ozS(^%>yhbmvrUGBAH%?(-N4sf!M`~E-f#FD%jqu6t;Khcu+Ko9GVeEl zKN`0a;%N}y1SCg z4ES*?jNQ<0|3JI9+c*981LPg~_l6G~uNNmn`Q3tk4ErmY{{zs*C&Qn4uBx^k`yZpf z0Xth@zI<*2cppROQL?|H*KE#MG3a--Y4go%Ef=T<#ytY>VzB8_$|XZtv~7-$q%7pq zxCS)G={wflgLYN6|0)k{sT}lS_AwP+>raA-xY!RD!@CpcTl85rlsWnpx6L|=eFI*< z%6HOgtiKFCzXE*)ZQnSC!1fLCyi1@D{E@LOX1^@s)?4om$Iig`qjLpzb283<2VZ_= z_|vq3=U$ag)P-q+b6o#$Rs`qW7&wOSR^oLdmPsfuj1xDl%R1DB`7qyogzGub84C5z&{;)s z9QrowA67tLh1cGy`xJX#H_JK}`!~2xp*g(2gyWjB{jsw;v+|AXzJG{*|1R_wwBL7U zcs-5xg0%JZJ)j(+obbNIo8SwqBUo21LO+Fd1j{pDjN#E=Z^B<3$YI{4A29#f;(b&s z57dLls84b1j{d>=f;!3^$1;Xvc&#}Ij$@vRV9aIsROrJxhB~pH8RZCLb>lduOVk5% zjISBxgEBaFH|(Nb&~p)Ft!amGnNi-TLzXv=%Zzw4&GMACQKwDR1cij4#uU=Q?@(D`U(C{sNy;9YxSTWS8%1|e_;QG*TQ(NGsn1QUBLH;bKik7#(UNHZX4DC)NM1yDtKOo_oAGP=|ILiw3?X?tn21AhS^`^cmd1P zJcpR){TN6)j%U79^tD|Ei@p}>xV4_+b;+kj9_1LwT&u=pMQ|OAzQlUh4bq5X3|Yo_ z{*c#uwrZx&S3w<+{SnIHctgrCxYou#3&&CNIya`OJs#>e>aGz_j9s8kgnF7X4)q&k zO2;=?Z{Rw+E0mSIzC^!gJ6uDXHZe^!9=R`)Ak3F7jmkzpT*wa%a+NF8id7et!CFH5Jzp&&R z+vQ3;Zsc2x0Y$rXux-S%mthgq&us7q`b7Ez>nxtb>O-BxdWpWzhc=iEy76AtyU-__ z*(}2p?wuu(z@Yec0U>RJ1LNBS#Rm;;mypoR{$3J&*Aky=;~$1hT=ep&Yg^#9y!G|f*b+X5Rvmo(dQU29rE3T)d))Mn107N5ilsj;BKy%AFKxm2KT7o z2ckUcM#}PBR4LD6ag`;W%e|K2g(%AA2-$fkJHVrEj8*nM@8va?`LITCSkB*cL)j>g zx}j8dd6i|D9vl3f6FQBuEKRe$yity!Pat49U@-D87^V#aGCwDB9R-tq!nDab{&0WJ zNuJFdqpd6v*ILg|N3OJw>HiP;+bQJ!D&q$a!wcwF7z-G|n8WlR%D|K=yL`DK&W*Xr ztw-(wcl`3SDRIHz-K^s5puusbm}4-1j~ebWTS7!71S0X|SObHL2~~u5H8`EcY9918 zcr7AnZk97ReOt%me;DbcvtCVp+Td^nVhL~^523z=GPcg(4a@L6gEub2ryHEUEn2Pea!8}7Le_1XotJ-#{T(R<_?TdD(u$5Yy$ZWa6nds9_-+ONP~ivseIaN0x(kkU#t$p>ysOZ&Ly@n&3jfbi z$bS$0s2@xQ2wi9!7fX=Og195cn7)U-t90 zJVWHeF)wC6U&q5fh8GNZ`*~mbp^f2x`+51HDbC6p`L&N9WPX1%xc&ToNXX+2Rxf5B z57-2+ZlvFS-jsS)fgVpGLsxj=<&3viw2Rji{2v9Mrm$Ncs)#eYx`JalJCnC5ZX?PfoThUs;WRzDgi}4+2&Z~f=|4y0M~H1)6^U(p*R_|}#?>VYmpx9g;P|d9 zmA`J`QvSB!=$~}4jVsyzA%}TMrJ;q`vX*xv1<^jjX}vl@ zIF-LdIF%0}oR)6{;Ynf}S21E6(@Eu}ACOadTF+k;adAcKAw9orAo^vQBBJ$^a_R@l zk0|tNaAaef>oY~d=N=%;$J6kPsp5$dOU zb`tq`qW=itFA;u8!9!h4A=FRhqZB+*!Lt=yezV1@|BynynDA7Re)&xm)I;;@2G>Uz zkkfI9H{offh_Q?!oaT47g6AuE0pWD~AfNeRdg%DUU8Di8FGi8{_=;_mr|qsI;WS^e z-Ju?uemA0@$~PidDVO~}riY$)rV>4r=Mzr-O#6T8XX+p7&jUmc z<@CHjd67b%_HVR5q5T`>w11=d3M2lcey05%^)uct#bEWDpNY%(zaQb$Z?qm#ztM7` ze#j6Bw16g?y4kuMb6xGECcs6Rz)8!Ony zfSk(HdPq5K*NJ9SV;Mp8j38XrL+f}iQpig#+m-y5ogCLmRsDp#Z znocQ$qESRXR&3)cMr@-VTHm%2E@cp%Ae`zcBAn`x<%Rm``DGLAV?a**Ss=L8pW7__ zff=32ahKJfg+g9(DStq4v`hVYj&SPF62fUZ9|~?wCrlDBg5=V!o8U4%BKgeS!lgX* zKlNKMNe|^TUz7(6L)P-`Cph*GX)-aejuG2dc`1XOUU$g;2e~{Kpo(0ghx#o~aOoeh zTl!5-$uh_=b8Ny{7M082P|59+-zhQc4 zxzOtf%4I#V%6Am?#LDHIJu9c(gohF??`xsmE`%2m`L2Y^`&203jc^}vzCa#EcniYA2@fT_JK^#?hZN+LrN782$RM!$)rEfq$hf zE;Vh;<5DkPTtmrHV@5pqPOPz(@1qS%7$bib&V0=cfPA|xKC$!={8-$`%!Fui5Vz&w zAqgo7>G1P$k3F6?a!_(ooFN7Y!SCxvCuHHbYtzz`Mn$K?>qufBKX#jvFxsAYV@G@` z8RT&nR;6G3#n<16^OUd1Imx#16=g8*pf4Wwi9Q+4uqS>*&wTIB5X?--a`@1)#k_nG z4_~)?j8e!)0(|(nw9LdlWEDLkz6uR5Xbn$*mk=MLOZoERW8#^07C&J9?<^3>_}I)? z)b5|2>JNFK?i!wunV1?62OYjnEgefL6IKO>9~%@eYMMV?2)|Sa?=%`8sm5v`KUn>* zvV`AvcJgXwsk0Tw|CMgVTb!l36~}2EhEG|S`I0rf?^%Y?uUn_3CXWe1@R&rJl@%tvn-XND6jkBh#>{jEoze_Bg930-_d4=dB|n zGr8O)_XvKwga{LNaHx4w_!TcWC9&(Y?ELH(siJOw9N}$;|o@ z@5e+jn-P8pJ|ppQjxuGC4v40;TT}2L> z6#))C#si|^;>X@crjJVacjDMk{*^d>_&i03LM6k-o02djHZ#f5lBKf9z8GGLhDf7g zlSd|i8b}-V;r_B(&`Kk#SM0C^(R(~DBg4yxmVVp)UwI5&VE^vBs1??)z?b$cgT)cK zMn{Z>Zjz?bXwq%(Nv#xl@Y8XvT84PUeeY%Bwf zrTK|_^BecZGSFDU0+bkEy$>?KeQ$1K^wxof5@Q)?F2Mt-#z`$BGdpgmP~BbZ`-t^vNVqfm@_NzgWUH-X5Z}sBb(Xlul-Cew zza0Eo?SG)Ke+iX92sM`Wh1FKR!hWF>`xQWq)&4$U&hjsx7oV}4HnyzxzXWP!DCjOO zrq>#=7{mNSRV!ovIY^W<`||$1FCHYpYAX!lTN#RP687bFHrlTYf7bkGDeTMZ%rsO+ zg4I@r!oH8VIS?V@qWve}&uV`h0B8A^_eJIX5}5?6{ZSC#%1|~&*q8Mj?LP^BR{IAO z?RT}fu04RtNU+-a3gTNCif0M?@;(;YuL^%w``9R*{%|vA+SZzH}*gqg{!qE0# z4fI&;_fWLIB4Oxp?Z2y{{q++!dm=>IG5^(_*w0Yd_r%Tu0=)->`_}xYDD3Auv0oG7 zTl0_i{+#(gLfDT-qa;}E<2_C*L-ArK_GwjI~R{O0Wva|f>LAhdhXs$|^R$KTH zLn}k!JW+9qP&ovwfA!$cYQK3!=k{}eV<3H~FcUIxQd=X!kv#G6YT2Ctc z=hxMYA>(8D;knS7{u7XSXa3tJ?0ZYYVr})+4*;wTMMIs~$0427ep5yJJ@ha0-$2oR z`#G_XLmI37tBUfwBy<@)oOo>qWu37_SZh9{%%r~f4;C! z+fRrS`=>#_v+~dL0$~V`tG~w}va|f#!p!)E=E}%Fo>Hv&zo6*9JaDiFL4F^^+$(GA zXGQ;2Bx5MS>&ke}d)9eGth{ z;m?)-4m=+q`Fy*Dm<{_cx92ja{BkL0`W=qqj+(&`P1X?h3!%Nt%IC{q1u{nYPlA7p zJHm`f|3&z7_5T*zPuiLA?WM^Y!jtxtJ&HPVF2?{a@hlM{H@;0@g>jd*6$%jsHF83V z^UGdqk|_Gi^;!T?_&ybIPueX&Xm_y2(Q|J$3!P!Nzm(D!EdpGXD5I6)^VqG$nDzlsDz5652f}T!~P?N7WvXx z6Z@$}PwpRV2)0o^!c)MGVV{=R99mP~u4S9V8l<$&?wJP`?SWp~Xw7h<#b3^zLr2w~ zUk5KzYkz~Ek%_fST|Ty)YJZD|f^BoL{_jbwi`$EGkY2P`8I_fIB(a{cT{FF8FI|_6 z3D&>!oS+tUxOEWgluyAcC9B8VHBV_Toix_@KRT6cF>&v2u@{cy`AR&f#TvuY1C*1n zXBO4%|I$Nsr(j#GH*EGtn@;QO{uKKPPw`g*()+Y4F5hx8_$3nqm2w(BL^y(-Q;urOIHIZd6zh|Aa;Mrg zX^YQ3UjQFX?0NlG+PiH$_Gu{CCVCCdv3?rcocd}(Y~WqT7SVO=tH;jGyeqbO;aB6I zsQl`4@WG?;_*Y*&ui&f3#&>wa|2Jw!mwR?L_ zStm}P3c6$5PDx(x>9e&z!&>T8Pqa2Z%3d5GPUq~tclLTa?PV5)1KVD5`rP$@O0RAw z!#&SRPM>2j$drB1N>0ZuhCTkW*e1r%AB0$er9<1yVyMf+?#$)EhhrBD=I$T4a8v40 z>c>c@0W2qZ3_k4kO?q#*sIpQ%Q>GyJ%^>#O6ItXB5_j8{Za0)SgSJ9#D}y$b!Cn#u zE3$p)QMP}8wZ$vI6Vt9@?Aa>9GX*$L2-a7ky^$^@)kW*; z5g+;#_RT8@4y3?Kmyc*R10#Qw{zRuI0_=fIl}<<61o)f zpD=q0U5fqf#$cWOaK9reV=wlBIt3e2JcYPz7k1AcvTbU7xR1`y;xx|E8tpWGmcR#S z524F2hO*D|9%jVLu8(imN$ae|4(xQu`1=&tuq|jmFGZA)Cfc8mlQ! zfV~rb3_ro6Ewh&##(Vfy?jA&E9;n;{o0vZLbD(`M!D8+w#Gla=uwfS_cx<8>?tqN6qHT4U1$hHe^F72KJk6=1oZ=kF5FM(^69kJ zdvC#wKcaCA(^#YP?_e{b72bm=FPv@bc8m=RZ>2q9Ew4e0DXVj?rC+h<0p3GM@2g6C z>(G8Z*}mmtsXe-%OT!+trxn$!DFfy_c7DKnC*b-j*iB<;l+*UdROc)kZQQom+U{lspw{vAtZYI-4Ovl{R0oG6!{+h>#BcqV{4wfoi#qP#Te!8K^N9b!F1W<0{!`K!o7iL?;czBSIzik z_l}eHJ$y0kv847bL;I$=)mhAUkHQ|dj$_zEF+Lr8sZ6K+qo{rZq|rVbCFfyIioSjr z{S^5i_668G(^E&Ar`bBHL>m__Y?ek|-1k!3**hQpQh@eG^@ed_I_1e=Z-)fh z4sHXtCSt+1Yw%ZcZm@nlu5UrSG}iOE8{-%^u^-6Fi+Vmsd8jR;Z!z}~#7p+op#I@J z+-FS0K3qhDHf!eX4crI8_l-=V`=97Xc42{ExazliQrAA}wWk+8C>zC-h|@X1m_v0<@m}1^ zJysA5ABG(Kb{tvW`Z2b=#y6cYlG>2o1C4m5v4Z6X1?Jr0>k z$fP+>6c6ypod=u~>Tnc$VEqJrv6PEsy7cwu=GW0bBF~aV!HSNiw%c!CmRzzZS>L+0 zy|bmed0n9Q11dBb@8&V=ZO)fBT~2O1;&{df4|EU+C9*vNkWZNfj!e!>5Pdxp?^ zHi2uGMfj)8p*qW1S#Whk&G2A!S#F6bwkO`I;j6Or7l zjP1C;% zp^Vd)ej?V-rU8=QerVv%*VFF(K{iQYqDMi> zNO@}+TTJ%N@(%YZA$ni94aSYyqvLT*QXwrb+eZvunTOMF8@XSPS(5h{+*l+h&kY9W zAHGz|zZ#qir0_n2;|Dw^95Fcm0H@NPGWcZ*vC)SO&Odmm)NX_G4^ayLfWa{XbHYsq zpW>kSKGNV*^YFJB{OUaXe1pFu5C5rg`fKv=ZH69C^qlaI2B)_!a>Gu8i8IGv#s{@*ipm?CVlbBC0{Lw}a?K5O`g{Zfi^HX8gLd3*@?@4Z~CS>mdFWesKQ z6Sl`(JZ!(Yc>ef8>G2?}$6WfbJ?7$JJ?7$JJ?7$JKah)u?JgJ3A4e!XuKIyodesl8 zgm~T?EH=?TVo`(~jjML2Q{&mY0*#VB`Qr#t{NLEiK zT)N|kvQNsR&-Xp;sMv$w<(gnS|(BD9q`EA;<3ZI9(|t0 z6eo)RUwQcK^x&nQ`ud2cz7~7RHQ&Q$tB21n5B@a|{#PD5H+%3C9{j@|{4*Z>QBS!Z zL_J=lR*{kCPfr?r5lUf$;0JLTRbORHM{A`0CCBNsOyOTt_$r0(Q@Grh5T8F&c#oo| zx{%Pz5u$%YK%94ToYr7ljkw%r^*OlActi(Udri|n&Gdo`{eH$t?w@j;PKOo#DTTkN z@COt=L*exbmpfwO|7C?&aojCeHRGbElvnPzh)kyn*B9g!~jlAF-Q!tK#Y-&vQxc zI-AuTCv%+eO$yib`#%)EK+$VFt?*AO`UJ;me6CaYGDTmna9!^ig*Pht9))Xvkh-Si zEs9?IL!ZLGz;QZBy^|fZKRnAcuAK)QJk8f`y-U3u=5(nSq1WweH2yHed|W+WW8BsA zgoBIRlZ=Z#qUR|G7y1Bpp+IuAo|6=={Z^g_5WV)>Dn+mDyo_;I|7ylvJ!>8Mw9yXR zQ#HG>_+-Uj#y*0|6#fv$>6GF)>GKJW(@AVg_y&cG zeF)cbr!kF-FHm@w;xn51(&JjG;`15BXPLscDSVZ}A5{2$g+Hb67dcM#{!xW%JMU8X zXzFpdq8C2I|2~E5`g%m+NshbiPV6jrC)0_2-1aDX3NG{&oR8{D_Zy29uG`%h#(nw| zF1(2}$@Iium&?^(>>~P0xiXyJ)nDkvpQT(vKTpZk<*HJ+E>}w7+Mkyx{0WZJN&D4@ z6yC~lD(~G2m$DPyr|=z${=*92t#Cb#_bZ(4K_tAu5#s-_fH)uFxY%<$Uk~zG>?ZgS zGQb42Nb?j;fEO)eI{|*3yh0Cf*(jg|{eN z_Zy#9_zaFyxwa^Lfx`b>;mZ{M6@{l2zE|Ph3g4=5@gtI}`)#oy;nEf;TQBEz?J52* zxZL|m+i~r@kNF5L^!<#JT-^^GR=Dm5v_0=<8ah=ddR^X?j8nh&D97oP=D2GI&3_Nm z&`J6+qSySBOhdTt9~LuCa`n7j*Y75#p;MaU#7En|k#VuJ_^tS!;LkH%E1$*ALf_%w zLcfu5lB?}6IuNeyzf;lceoyM1=ykvMtfJTB`;fx5-A*a|;~b~cWbmax{MXp1IZk6- z?C|fLCjFt{KVf_Z(~EtCzRbaeexAeshsl_Z7hLFHWZc!~HHB+^@FT1VL@z#1K%v6Lw+WYT+eLqAFS5q7;L=_uGau1Y=#vgE z^rcF!ZeI%&uG?1?<04o1%No+I+*OK?w0$a9tHSlTmY_rgw_loOVbi{Jzoh%Udzgk! z3lu%x#m@%m_sIVGxk0s}mobPS>EDQ6*NfY~i5;YjVxJYvSL)iePdBFvF7#4HlB?@Q zbRb;U%WmdFxadsKeuaOD<8;#foA4z3H98=O{!*?J7S7_L=Sjvzf1y9+;6fijKMHQS zq@5AoU`fnzlA_moPG;QIGwI+WSNdUBPw9sR7kcS$T|Em~w;1HC)_OX4oUfA#U&L`b zl`33(lAtn$FX1?y<|+Ipg;y#3W`$QPTxbYdsqm#7r&F5aRIXb%PN!yt->UEqg)dY1 zMup#|@QlKjE4)YHVtazNDqPA!&<=&ahvRhWQ+SQSpH}$o3g55rT7?fN{0@Z=D*R4` z4=MaEg`ZHk*qk8oXRmMTH~mhkrph_m=7;qO6!YYK#GKTIoJ`(Z}m+7EXsT>IhE3fF!p^9Pcv{qVS=*M2DT1fth|DDwfrwI7!8 zcuKhTL;5{Y%B%e_t#Iv!-3r%!*sE~uhXV@NemJOb?T4oo{z0pnIZoydll0g3Ba0QD zR`e?sUaxSyuCRQ!V|FE2a%Xj2HGP0X>k?xbW1!(qAj*4$lc6Z&ViDsQV>xNNb3%;MFuoHK6{fK~YG?V{F7ko~R+CA&5Je2G7HQko$>`*Bl#Dzh`6 zSy_HY!_^zscxmySm!(uf+>fnP5*xv0af;iqp{u!$KF(^or^9~mWlYamC}EatkFap* z3Q#thof6FI-r{PFEuG!?Y%F&N1tfMgVd3!>B$@36!1Csr6?atEsVxVTlAt$axe$4A zo%saKej4Vau7l25)8;xu-MW^pu9mj7nt&ZO%)yQt0$gs`ppHIk>k0pWgpfjr%&~|+kejS(uFDl_T}6NF z=lB(NVKK!HR;pGF^PmSJYv;hG#1_senHAE|-HE*dbn|1p87(I&!J6BC#TbzfUl7us zDK%Fb-rY3o=H++HM5_n)6$@{vYinsNZ(sc(6K`#5TiY$W59rM~c%gf$i~6p% z*>&_?CUmoFotwn2b>%84cfSC~cBW0DbA@|hnRNJYSo`F1Mu7R~653N|3904iE~MJf z&hL?H>kVefeFIS&HvPaFZ87 z38FCBanOXEv^s_w+Sspz)z(==cHcvnf)e7&jRXTNF(f^3^6 z`?oX($~aVZ<6|K2sBe@iS%}SR9o&&O-gWZUt+jw_QPe-5qQnSbb+q;{a zI!&YOGM!)!fn}A=r?oEQuZPX{06AM7h#usDlocI9Lzms~;QvoMAYfyJk#|6-zID;< z^K6es-J{tz;s2W*5pW-zp!c%#LkHgky*e&84b#$`Pz`{vu{mfEq?~KH93v4v|Hrv+ zo?q@OC7YZ7m&os8M4KtKIpjXD3YSz)6xW1FeEytAzT9uhb7&^dll7QK{{Cxhj>Bv) zl79~VT=`hbAku!de1EV-1oPP~>j~s{F(S>p(`HE9liA-5s^-am)l+{*SpEdgFDF;l zzaqbj5$zz$7dun=$(7vlS9}8L9ji;m?)-DUbYp%=8fv%x72DCp_{CueBMp{EH*x zzwGh9dDK`DQsx*QT=_rn_+KhQ{zR~G%fHDZeX) z^gq2UU+75}3U2xT26Qe)bQ>e&PXR9cL@!zsJ*xldWBD%=GZkD}-v{7gM81{f>-wJx z+?D?gPy3^GNg-v9;lY*lHBb9X%(i)04O9PD19Ihm&?BF|3#B0R_A0-u@Ab%^$MVI_ zRbcQA#ZT~mLxG~~e~9JhJc~tsxBSNdxESeL&GHB60)gbylt{`W@=MUpqvTIwLZK%f z6kJ)CBfpCgU12#L!|{vc)09B?iF}%rMafSx;Ywnnf-CC}09=g7OIiK^=Oy_w@#o54 z@9BRwGT}(=zZAlw^xqqK&}~oIqbr~Cx)>3kxXxxt+mn%Bfw(LGEU+l~M_B%1 z&Mzld*6)$vVnkbgz0INf4^qjMf0@UBCbQ#^-E?qe(eEfOM)a8o`SXCg^8XWsk1Bs7 z%a?T(L@;~d5fARw2GV=Jj-6Ow@e-IQuC;0@q@@Y@1 zsPdZ)$UrZ@vmt7NTh3?4&Wf64$QHg6;|0h_!(@h0^MJD@*@;|`-FYUzU z!h0Pw*++QNp0YLHW`^9!+t<|H$>#W_WC*H<;gINw5P$`xpU@Q`qA%ckp8C8$Q)99 z++w`eyxy=45Ls(0{>)mu(ABJ^sc{{rwTz=^cpn18hv%}nf28*e>d-2 zr9T^|b?^)JoNkX}t>rO$PSu@*btcE|Il1E8J!c*Yw$XaKw8kW@?MiF19<=L+i{9I5 zeb&^uLH|UoH8~M$-eUdzn%|XYYS0%Pc;n)r|FdIL!v}Cq@;dTKtjh_Vx67K6SVwg_ zT_@uK)_o58&wg<1`t;bK_U!w{uCE+#*Y2jZR+Hz^+PIfs{m@IX#wV@MO#4IFwbk*k z0&8zxiZpwjgr2EO?K-5L+w z=GnadWfEub(`(AMDqk^WB)zZ>^eL1_%8v(qSije<8;bT(A@&GBn>-)(_>1xD2hN8* z_Ksgar7)=7b#d^LrZ>8u2flB^8ne&W?WgP1g~8l!pnUgE$<+MXqj%-iR&Ua|9&69y z5lEyRVwdNa?-CE~t}F9t(X=D^?h?L`PddcZddV0LBl8@58}pCIW7nUyYt54X8M`=j z58pAqM)I&$>~vXw9_usj{UQ8X+90h{OZf>ux#DKDhnvtYmY{tsMmt%Ay+p9D1@?>Z z?IluQlBrpbHBhOpp28j=U&3A>QfC9dKU)Fb+4h46eZyGXpuZ1wM`b`4d7$s1y8YwM zOAVKvgE;oxF!6E00d)V?F32+o-_T{=IX*RfdR)-ogLa1X&-#1N&alo}Kb3>p57yo? zaXi?}`X99yTFd)YtRpUM34JiylJ&;~_Af|W8Em`a%%UHPZ3?ia?qK{1V;@=v9c`~) z(ymfzsR`k_=tr@R`my*G*7k*`t{*h(tY4nR(ifh(J_EgT>4J(3%5W6xuuIARFL;9?jCX!*@-8 z@FQB29R0zrnVFiqVb^bBFO@FTnb1(W^tZ86DzmjoETWwkTubRCW^H52f0c8cT@M{J z^-_n9Z`NaN>e-Ng3HU#bw(vWWLwY-OxjuZ!^c3st(jB}iQ*))KJe8)NMk>!`dka}t zvYEEWL2ZwSw&=45o+%msb@?4t`s}(cc+Yr6M|B`|b?}{GJxKp8ZP?1Z%&CLRv)5rA z*fsO1zJK?hw!WW)|KNGs)(7IKb5nQ3$NIRfOX6d%T|VL$16bdg+L>I3`vBN6OWM~U z#yFzOT%h*ixF8tr#ahv{ZZ_JZX(z%b3BFHY-wqo0$R9FAcAS*-0jw?l_$8EX>oao+ z+5+-WANCT;Hy8Vu+*^^Uc^2_|vB$%=xXf-H9Gnr_R{MA#eCX2aGd25=?+M6$2II;< zE{(ChQK*6ZHW++hmV&@ROq z_B7AH^Of}}tUrD@9?VT+-avd%FXS`X{*uz;@Di zku2%=X&v+!*3Xvf6!zbtbTik%THt~YLidkgo`dz|hF$(N4jQF$QA-<{#r?so`sIPMm|i zOyGCp&}Y(|1owCSrARBqIY8PV(yqaI51(6bj>S?3L?5b)L5wE}^v8q|KgvfmVlRwu z{R#L<0KSBktQ@<3@Vub5WYyU9n=il`y82X1`-`1S9+(9ZetY*M9cg8jL^ z$bE!McXXlM!-izJX`2^^JnGRdq#SQR_fzfx1tiEyd>A`Dc`_Kl1hc9v<(3 z%}iau-n|LhFT>84%^LM)FBIPUAPDA488J68zVF(y^7hb{N3s9cpZn?q`{0;zk}rd< zjOj?`AnqFmxt*8n#ymFxzu1TKIGp>&udl?scM$WM!9v~x35(C(dL{N3fUnR!Nh#(h zB|+jBdnZ#{<-Hcn{AD8b`=%dFXRpnEQribHhag(ne@FKE`GiORSWT$E&u2Dx>R}h> z&DQ1lwl49`ZE;lHA7vkpss4-VEQ&T(9qM%udj;GKx;J2}JJBA=K8MGnJq3xo{~r53 zd~a;(KuK)e-RlrPOzkX|xchv>X`h(C9~0UR_Z$@mkuJ8(U|*Vp$Sc7wdvoTt8~ zU=NpW@Wi}!I_d5D2>DzF?S%Tf#5nYm7|Rpr>#!$u#Q^4>m^^O%9p;S>-bMEpcDyFq zr}&!k1hI_i8wV~Ah6BuzFGczg>Me#gS-@#@ok0BX+k)W)_Nk~sTTNiEiv-T&K=(bg z8g#(j7cpth*n5!k=r;Ht9zA34&({-=k|TZhAk(^if%NO7QzOl(xDHCs#Xe4Gzvp8= zl}J5d^DmKJm!`~Kn6kH0Iu<=QI{E?3M?f!Q6^(J^C*%)y&og_^n?A?ZG3Kemz0^PR zyb^u&Fw*)5F<#sIMmu(3uJoH-)Q1>cc-b`Ys5lx=?IHbp(Ra{!0CNkwUzVM((ijPT zrmvQE)qGCy4CBzv@)~YP?IBrjfWH3uv$a=x>TmN0Gc}+0)K`6detl{F=XiMTO51$d zy2F^f4KjWY+mK$rKNIasn;SDV$3ds}U7|T-0`uLHaoD4d`e4j?Gni{0#+*06{EX{* zJI$>!u+J_h;;uWbfL`e;4k!(Eir--l+>80-T^J|jKHWZRwPSIC*^iUPbvutw<9RE|BN?L?vbp2+dY0y)v=Gi z$==FS9>~=EJ^H~u*b4PGocJp0`1D!S5$qhh@khziXDj;3QwI{UlJdUt;6SbM58V!} zFH<`_jCR;}9eA7*Z0ox&82;bj8`U?^9+64ZQDQ=BnC5MV;S-0ylbTQa$2A9u>kp%D zOM#Is@wW|srq4}cPKLAtwja49d+$#D3q6ld!@ulvn&Rn{hkg?|4Bdx<;Q9fSubzE2 zJw6!D5HF-P7bLDH+BE!l0NBCn=pNekFXAI<@CLRwO*V3#VPXt5es~sRvh)+SPq%)G z_A`Be#*YZ!sQh@oA4y-~8&i&EY@P)CsfX@CQ7-}JY?2Q?fW7|gy)upa@+|39$g=xq z%Gi!MZ4Y7mtTEfKO5a5LT;}(aQRUdYIp4=!eaIK0^6q*tQ*#;h6A|`_ZOPPNf*hUp z(R`VBRU(r1sL;YrWUCnLruF-VnFlnX}M482&d;-A;KpzmCLCKSrMI*?#Tf zU%>9@*Q^ZMqfX2D2U9=a-lO*%4WRqQL24L3e)Lm6PxhqWL9yp1?y>AX!DL@5#~?Pu zp#C!voA_`K^!5FQRrzUuy=q&&j{Cwh4?N%J`;95KmCLRC?N?leH|~mIj#OZLEsbZv zG`^aBQ{i*F(CQVbVlgj$4t=HiU z#@*hJRqi2v$1!gaUP;vNJ+NJ~u}AU4Gjz zest#SGim4}SUih9n zk0oCC%hCHF=g~4m@4Wo5tG=JGb4A;h()=t<@`zpqJ7}+PyT3H~liO!Jc+RPBk{`?5 zEe*Y?ueey%zgsrkyO{dz18qIz#?Us4h;iKHx8tatKcYQV>>8iiBYANTSwZn#4VD-9m}}x2 zApS#cdqdD=4?Q=EjWcbKe$SKpf8j;)X-pHGuJJl;aS!T^FlxI`qP~cC?-eQRA$k+a zPkqzkJ+O!Q4ZI$8k_a%L3WDL)6vusR72>wLq525mJESYwk8)H*|O8UCgm4 za;|XUW^mIz*9i~q!lPx+uXMTD^RAP5hy|qlk__L93|O3i);?HLyQJoJeEf@*48qIY zy=L)UGq#$|`L4IAp@TjEw%_KvDR)Pu(JBt+lg;R?I$7uE5B1eD3!_?f!Yo4(YMA%^ zzq<}aOL^`(74~E3+n3svB390?yRN*hddc$I%H=C=TUxm+xO;YRcX@F4oWLe6s)Fqn z!IDdFuU)#RuJ*1KSeD#;INdR;y=`HAS4&sWF{`^nVjbC-`9?Ol2fN?4w6_IoTAErL zmo5&>XVbyz`mUzHESeC=p1UmXrlm`kEe4&TuccjmJ7(bnWqf7bF{`1uzO%0T-gZ&# zj+#4{1oc?HsjI1}F}SC`bwkrE`XIZ}ew@vSsxnK0PyF$#hjh$mIgG$2 z@bPi&EPVEO9LZOVy>F5JD{qlr^pdkr4`2Pb;(YmqzxT`nMr(H;A6Fltdt3@20H1yJ z_rzPIci4LULfE=?a{VRG&s_ndy!Mq(^bj_#K7tFKo9?#vq-2n@n?djq&OUur85_EP_tHchPh!Bj{QkYzFkmFxEj1nVxWEn)V=n4ErcQF@DE{&tCAk!p|4& zEdJspU!eM!jK8OuK22w5Kj>0GFLL^Jd?S;;r!)9{vFHoMNFsixnbzp9_5n{)I(Kk~ z5clnUF6+b^8b_CD$R_K*ZYN$VCtR7*W&7dZ5bSKI^2bNuy-^={>uX zxID!9mr;2l_M#@c4Ka<;HA`dn!X_RG?iiarJV=KbOtTSjy>B|DRdL#4N(2Aoqjn$e zBrY2{&8*9jl^yPtP5SjP%_NeawL!Qid>^M1Ed{dOvy4e!M%arEM)b!St42JukL69e zj~PP=yg!xF-P8}KY2U_k6%#a8vpNG>+&bh1CT9R^uH|5cfGx*v(9PgDO zwB+I6H2B?l_@@lME)Q=qczYhc(BSLy@DhV}<>9CC06NIoy~UF3Hu~S2M?b^h_vPVn zgFldm|Jca=a320OgMTCs?=kr1Jp8cX&yKEAs|}7PW={By!Rcq7+;EG*FUtjSg>PmM z@D{NXP8oghWYGyfFgV^^bHbk)e2Rl&eSU*a&BNbk@T>Fi>ka;nJiOT8*W}^vF#6+( zoD-fkIG!9jVX?vK>+Rfdg~6}Q1#$HsM(*r9{CftUlZW>joPKJ|4fh%xzalxI*5LCU zGzexJ{7>@m3k?3QJp4ZmPJ?4^_=YLhjkzGM-fi&8Jba?T7vkYm%4_|KZTk>$c?~Jf44^J3;c^>{x2FDXyCp>M+RqdcygWBNq6Gm>h(BNiN z&Pmv3_@h&I!b1i(hn$qOfiB9y=;B=lzc>%S+~5=Q@c)G_Af{HwoyQbcVf>F}SHQ-% z?u`G&;9>v2k@3GUe8TZU_&jLvupblr4>95&_G7)w=O18#0=3$(jG4{AV`}#V;jwW5Aw%Hi|3Dz7SA6aEuKFypv4!_DKEr>C3zSD z@tjrSLz1{zaU{H!SUkud2PrL{vs-~s6TU3GP_ek`hZPKZ=|wb3e8PTGr{L2veVL8N z)wq)d5s9mDCl}AZPoea9&T9W*j(EG102ccD$I+b z_TVhY5vJ@4?y{fMW$_jvfc+heyf5B@LUQ>6B+U(9{MV<=RS8t>%!T?%$9QsW&iO*n{K z^ddFh3I4YzS5Xj-%Q6qo82;h?U^VmEkNPT7=Xx|Fhu}-j@mfuZGVRdGuW#|G5zvqx|6?VV@|Reh7=g-|oR1 zJ^uVt5B|IdztQ7YcX{v~@c$ySDxo!ndG3$s5`$lpwND!LP2r43?!z8C6nXlkHV^$Y zkDhZqd@>$;e%t8(POCJI=JyAjTMa%li_32%w|UC-bB~_C_Q;KU+T&k%%Jm)(p9ehp zJPOUD{0eL$alGRjiGR|=f3K&!cYE|d?!mw7(PycrU;Ug%pDR#bQRV$x$Sn%4&eo%} z>peh8rt$i6K_q(3){g}r;4}0+6dHRzEkKDkc=Tjc~XFd3B9)14a zL%$Mw7GW_Q31a8jrvC>s4uU^r=;1^Te!rnd5zch;r|9>;> zH@u%c#1vB@vM31eH_dNvNV^JuMe2Um{PqWIzTscOxx?||R|a2_#m(W4-baf*HyS*=FP1wrT9U8Ge9~fB$?u4F8vaxA_|qL(Q4ro2o8JS0!JLu)Np~DY zL3n>H`potCPc`(6^7AV_^k8oS-l5Lf^AW?W2{f<&6vycVw=#kD(EJ9+^=Y(xB+qE+ zwcLKmtj@$|tGd?uYh3g3>96U1d_>eABiE<@Cxj`^TCT>0gyd@6M?aeKzEwUx{T~tK z9Q`#eB&5H_wf-8{`u~+=R_8y4&oe5&ME@8*KL64BkEUEcd+rqFaMpY@J{tRI`qA+5 z+2^hD@!99C^3nFGV4Jx9FVEenztaA^faz(kRjp5}!uN8VPTdOsy23Xp{FuVGD0~cL zNa*DV$$d^hoCg&CzZL$X!oQ>NR}_9$;e#9}J3Nf|WWGM`;P1ol5EO>&DIoi3`qvy> z=ua|E`kTRtuceHHYklPXCRd*clpjHG;a|wOs}FsoPC;;?mv^OHeP%Gdt52CDSL{>a z;AK`^cAg?~g?@pfkI>6~hO5s?rB96GBtq`D$PRjZX;l0*F7pE7ul;rt(-Zy^)}2m0 z3KyRte7nM>?g-zn@ShUEVL;(u77%B7?~COAnZl1NdhHKGj7zy}sEXB1rQzf8&1<5abS3w^7S`>IvV9J?7O{`&r9qvE6SO^T21Z=Y899>xEV!gak5 zD*QP`|C$G%z!NgEr=AZ?Qut34pHjxfZsHF!7HxD|>9Y<=w>ef=m0&Fz(u6i-QaOPLJGPhrif)w}T6xK8L^1?{jdW?`Pb#^C5+6 zI~-6cD_rY|Z~e3Sf7eFMu|wfnf2^fz zf~)^V#zh~o^CpL0^vpQ)fhk{%0J01Qax7Wdi|8B-zJ^LJ7==&LW^*N+) zZO@k#{#~oGIUe`muPOXlMSs$RV+~LfNS`MaeS&efUM4W^mUpt^qxGEO!7CK5^<3b= z7c2ZUF7PvPHDxa^Ha_B^8S7d-SQ6|URG zDaKv(zdTSDdhxe0{9sGy1utaW^}`h7!bkkS%Hbn;t>TkY?_74`ub&I)=T7?h zo__A6@db*Ho=;XOT-$9KGZV1>9>0c`#D1N`gz4+g~yR5;grG$1;kmNJGu2J&z%U@ z_Lt{QuKnfrBEiL;@;u75f0A_*T3W<6<|lPrrkUefBdhb`$z% z9bD)SG49&)6@_bio=~{f^CaW0o~ImK{^&Cm472EK~TOD|^cGL!$q- z!j~!fzfpLt!gaY;GVYdZm4l0(X~so=vA;ZT6kO=#xuRPx{hUzilX2t<|1AzK{Chn5 zJmTO&FYgh!`s`+U!k<%i>sPq$C-rl`FDd%divFO&<@p=&*Z5@hyh!5}3ja67XMw`C z-Q>BPTaWH@IkAI0my`MuJG;;2guYhE4NwLNjSAQ8NS?n@d9|MM{LR%f!+Zo6xmy@_ z^_1_N1sD3QN*}GKeE00?v(J$$c97?Ru0H)9efB%J=riEa=VgU!`y63hwciw-XQ zUuInFAoNEZT<8ZGr+U=-$a7S;y|~X&h5sp!KJIf=p%0wrPNGl3^V~_Eqmn+lpD9)J z+HUf^)U{g~(+e(gD;#}9&v_0m^edIzA>~)@^H1TEarg-Sh~o2I#YdiJQhEPQ;RA|Z z?@xPD;lql)c&xo3KEG7BJWnJ1_XSF+|}n5g=_l^GVbal&-Vlu{zFXf>Lbtn1Q+^K zOz+y^G~>cw$|cVO1s6VJ&b1CB{Doeg6ACW$g-q|-A*pcP&*5*ZTA@E_M+6JmTQO ze=Fl+2cehepMnehP9;~{r(fZ^9uFyefcqFay{vGp{}IMr{a>NCN?g}*#Ub@eG`dclQ$8sjAQS*6bch08M;N?xpRd8S9W ze(w4s0ywlP`dKb&@Op-+sn%DMGEfpJ%Ep@R#bV#Zy$lN?;=u{VVYBv-ei3We)- zlv231&tk@1J*ymCq`iP%YJNQTWx|Ywbo+}+(=+lh5cI#I7&pA$~9);`n zvQyz&|6ayj{dYUK=+noztN%U+7y5q2UHuO!T>IxM3fFoLGVbbm+`&ce5aX_%(nkp{ z^z!`K)$_mlJX!dU_Ia|-Y9k3jcSG)2UJ6 zx_@qEoa#mM?_k`OyHW8G-ylf**5xBST|Qeqe8kUPKD|uu@)3U~J7|5175}3gr<1gA zmw%FJT>di{C;s}q{do%4e!hTl;;-MYOF8(T@%3UplUz+-<={du{gUffX{IM!w@0aW zx4g}Yztj;yQtz%kw}C{=!r2Ao@$ayXD=k^dUY%FaF?`cc0Qnmsi)XM7;m@*C=6#$7+D za&V#7zsG60D;@qKca?(+pR~hY=o=ke=vx^l`{?;wM&VkYEsVQ%kl*hF7ygehy=#Z9 z4leXNlw7UPfAx1j;lJOJEB1NT!G+%UJK)PoPu+fBQ~0lyU&-%-WS^Z1m){57c70m$ z=~whg^*fQSmuZZP{iR%`4ld=I!MIy5^1GqnLNC9^x%$g{H?IC0m7ZGv1zZ-FPl|Du zkBl$mpZYzSG}9CQI>+g>QQ`W1r>zP<%5ggFR`@Q34=DUM3O}xJ&HpvV-Ev7k=9cTU z;-kmq|LT12`^T*KKCdwDmTS<#g?@-}x88OCqwP6CwQH?sq0`TZJ&PS&f0@Fy|5r0EdWt@^4ld)wO2%FN zS2?)QH!|+(ze(X*{~Zd~^Z%z6uFLhT!u9<8MTP76x#;EA;|ZpB?Qqh;CI2bLT|1n1 zaG@W=b>Z4Ue2j2yhYCfn=VSAjKhf*?ztp2!F1H>hbAG8uDeoD^S2_9%ecHi=Uf-AL zacvXRyXDgLtNm~%(~CYLx7Wc%?rz3i`}aAx&};wEdR8z!>3N#tbP{{I`iMPUxoOTz zeEyE(bjont0P-}UcqUdAPR1I#cum-a`yXKq3>s$=YJ45l&^P>Oi{802C?fg*a zYn47yb~4!nwwqh7LXSPA9>_k2nTAff-_Z5AfN5O*DF>H#FBUWI+Ox{Rg6GL+(QAAL28j+w&zw-|Wy|#`M~reTrV||7nH0`oEL)boGB%g#K^l4=JYC z`fGYu|3yr%_1E-T|7~xg|4knK>)xXN^%45(`f~Lbxmthut(er+_Iy<7U&?XvH|g^U zN-CWEVGZk}>HC<5PSqSIK1AQa^eYvv{W+s>qNnvJDfHNrne*0hoK9MQqTj;wNlHW@ zxnHzVbJX?qxWdagE_!~0`MCTKMezTM;*;|5sZzLI^!YW@YkO+? zW{3VaOy8mKUXIhLkmDrx3krAjm*_Wx*?+fd^7!*MD(98D?PU={mDM^ymE)a zdpS-gndi{EOCMCYl$UVbz7{hL;b}#`QsMOqZ&kSVtBk@M6utB<#J^GDeTu$G;m<03 zjly44_*#V@SGf2FL8lbn!f`suJe>6TkiumiPWaslm*-T3OW7$|?tckir|4JVngZc% zHfoO2FB0CaaOuwo?@)NZ;4^UW3NMS>3&J-kT)t}~{KE=wR`mZv;g2Z%BMRTA z@QlLcJ1^qDS>f`X7vT>od`R(mNa2Yw_JZiQD14g2^>{r`;d&msOyPRInpSv^;vcMQ zTG!BVAMHtx&FJge8@kKy#-{VLI-6SSXLUDi?4H$F-cq+@QFUj_J-kc3N^2=^e3P_x zO53m+8{gAD_9|PuWtmN?ynXrXx|Z&yb#-k`_lhbMRe7Lbb-)<#mgy zkaH23F1@{W>7u&YyH=QtP|0X^$4zy&Ex9e^wfv4{%gj|Cqv|EgYb%$pxNT{rB`~5F zF0HM*y|!lQ@|!~zDTi1jL+@hw{*{H zZEvV=MRSO*3$6T!#G!k?IjOhyMw3lf;b`b>J&uM_DpS*%22#2Fy<{L0U$O9(C5vi9 zdzntlspYIOB~cs3vXSPVOZp~;vDr+^j>?m36-%tzbyj=btfTmdwRB%-wF<2hK>0c4 zS&K+f;B$F$vsg}ll0_x!T4c?7wDIP0_%%6l+lF=I$X!|=P~Kd#;*RP%WUFgx=(xM1 zzO#N^Q+HEmG#UEHx;35c>qbM%EJx2Ul9C6pTdN~ec^LDga^5$~8K$*&b+w{cbqyOj z?`f)QYiYCvH3sP-lZJ-s?rdpmU)O@RzPi4v#YyZyzftcd)5u31$(q*swXiHZv-JJ2 zR9Rgvo3grw_BHhl-R+&BXkxIosjaEAJ_k0r6^@~hD4RMvb!J1=-r3mH878hi+8WV?dwZ1n#?{@c{W+wy3t3xxchjt!m)|iH32z*tgn-R`br6FeZcoTIi9$H_HWG(TmQ^re_xoJ zhQ~EI;Z*>Hjm<%WAmv=kB|nyt%bD=t*{KV{pr(U*Z!Az>@UxJM=F1@$Nn2xzPA5)5%Oz1_Lpa>BgwzbWB?4-{Dv$k}BjjHkA^#|bAhmIuwTgV?J|44-V zt0C8w{~1i2qU6i>0UeUTXq_+XPmw=Le)4vkAzft8H2-)9{)C;B|3;5|SqCId%BkSW zy1^qq(_}Nf$iHin{A=*%%KxTE{?K@vU-m_|SNUcAx<`I>v(2%QI$Z>k|4#h5^4ECe zZz`r-Soddy^4ELhALbulb@^w4pDX{UNB#ioeaL7L9$fp=dS)(0)H^aZPc`dL<-Znx zuKcqe`CBfr`A3rfdyo8~%{KojC4Y8={K>$G1Z;9b6%AGh+u48YReo8CEUNs2RA7Wb zPNd5@_;brY4_K7^S7@+8=o>*k@r;r`&||U(vQG)gpNl_N{(MZzqvUTP!ywe!Q}*b} zqV?BYjEMU_WwQ*}lkxxS5qITZ>5+egWrRCVAvHf7<348l^vGRLW|M#v4 z`OkrWl>F+X&A-u}vPW0ew~*PzhalN%p@He{T7I=$Zc40{2zGc9}}ink@LtnD!B5$@0ow}vizqxKgnN&KUe;cNB-igtWX(; zMFm&>s~-8)J8TYl7oOxV!JjMt(}mIXziO(@&&|+Y;ONS~0Su{#ZvVNF^NT!T;O75p zPy5e|GXMP^{d+inwFu_3D}Mv>yBLwK{H)DT#`zw?`4;?1c_uObb<7i@%729A?`AqV zxw5{B{4PecJuH8KGm`ve_;ckS#!Y>c{7utr#*yZa&m(`7{3`y~K$m}cg#5q6^N%R` zJ)@Mr7x|;)Z;X&nb?KJ>F^~N1qm;kZBfl>~K251z`6oQ~?;WN5UwG_)Btkxo6|Ve$ zh+F&PloOt2`SWtnFu%axL&hlkC-|jeUH^9?lPiBB#uuu8SN;&oKOutnEcpd4ME)rG z^H_e8m?J!dzm@ot{L=pJD75m+iAaSbSKEs%JpM@%voksqwhM|!>7OpOIYzSIPLKUo z?zH)}{oW7A)&IE1emhwHM$0C9l>7qx#ACl6mcNw=$$lTepX3+&mBIK?HTI`{yI!@F>*r3bbC2c{om>7zjm;EUH@yr(v{yh zF53V4Sia~l%1M5?u0#GP|2rH}{+0;&=XvUX9^I@Xl-g7F=*l1KssEKv+AO;KcLS3A z(*8c_X@6;!Ka%}F>S=#H5%SkX$p5y-|8}ta>TJnvMD!PUzsLXfv-~s@K7=#fYe{}7 z{}Uen8yaQ#KjZPgNxfFEw*UGF`Hy@2FFC{JPuo-WDEbSq&EtPny_O=)gjD`6{7HT( z|4fhnWmtYG=a-Y@m+MlG|Mm4+3SIsUfF!@jPka2YkL8c#fA9DB-;oIU_eRLy;qkvg zmcP*!BYPD61$flse~Dd|Vk;Ap{qMt{1y z$uH$EydVf%*_1Oy57rRMuCQm)n}!rO|Fzf8sklBFhO#i4v~hd9uA;)El+T@gokh~) zKeA-mO$D*gBC+6`S^HY4_L!iFH;0rtr-Ip_JoCWc?D_3^!SI=Qux&6F(5FdTrv$;a z-^R^Wo7)FsL4{z0@r(B&>-IFTAjlN`_Po^anFqepHxRG;Q8LKX=O+CuMT>lr&|XZ$kMhQNpH6< zN+t!i9t!!K2=eNK%1$;Q-c+yo_3^Der`uzDe!sS0&#Aijo;U6qgZeqg)DP;Q|9A1R zdr!sBK|K}hrTTiE{fuNM3*ZBgZO)J#OISZZ^C~7=;%_TtQ+K>=A^z&G&d}}j_MjkB zbFeT|Qxmgw6Qy4q{z7>vANj;l_T|AbRNoVgj~G7D%acK#FHKJ!h~k%d zd&uvNcrYD%Y4zU;`g@FDU1EF!GW#j-t0=pxPXO8^Y@71Zx72HJ3mu{H6tSF z4!$F#J2)XzgLOuVrJN-z$F7G@)t0OpyMD?ALG5MGWj@-^`5rr0zBA;t>!M7}DbPtC zw{M{9-=kdAhe&%M><@@sEbPgu^ZI-$uzkN{t0QucI zdNqETsq2A@^Yd&!A2RVbqAtugs{RIx^Z6QGPMpn_<#(`!lj39`T`x7d zCVzEyZj>*?reP7Hg_$AdH>2@?edGE3K z6?gBJB#3hI)udyWFIuPDGb&*JYWS_j$@zIVn?fyD5)t zx48e#+Vfw=2K~p-?ra$@gZ`Ih^&ddms|B_nAe*~w&#OyGrUt(|McVl&beVtl?4?ol zbM*4C4k|Cq)J*sAI5;^|Q{qY6d_|@P^NdK@m2b<`;L&$v+EJuQ-?(cc+P{Zx$`nf% zOX7@vbaSk?^BDSe%4^5LCFsK!qc2~CK7Aqjb{ZGIYsP$M?42%S*pp*}^?UHMpF55c z&&=7g{dDdPY(J;R##r#68AB=mLHn~|-uOv*sejb@&OQ`->C6Mpc=J%O?RW74=w!#3 z=N>9Kbr$m+%0GbiOKtoVd|-;|r|=wR@AdFixBa6ZH{<{7m>1jvJH7$?Nc$yzRPI6e z7M#5Q=%QfTt5fY5BX$hN(wJb|8_DQB2Y&c)Y7b$UC%`}LylN1A|Ml^p;u6eXgg%8f zN&N-M8H@*W2jR~Yhwjtq+>3H0X})t_aFNjULXXX`kD~Vyk2CvVN4EZ^b8K4i);& znFki`K|O7=bGC2qc^!3eaz%le7m)qZ(3$wtoPc=Kyg=lkJtIzIwr%fZLrN1}(RMIT zDc<|rbDzB2=oP;hvKK-I%}<|aU(J;{aAD9-vPgfDKZWN7ls^Mqb~Oa(S`oh}sCedz z)B(}uIr!#Kq4`OBdvBrHK4Lrix4GiGlwQxii@wsdO|endHt;{1OOlMfE6f()+c5@K z^syYQrMCX{OKn+>qMmmZl*|$NF0a(NLH~0X2E&O&>Oje5m^;xt`XcBM$F@$1)G&Dc zrVr_ZuuU(1zMlx4q--h7E1$VAHT+o4eA(IZ86AK_OTe`RM>O}hEj}!#Ip!(P8 zXCBCH4;hr3+STjv*z{mVYIt*bYWTsiDbrt?_IX~=f5(`@>v}Fo4JXhiWj?lKPeIJ4 zr!PRiIv#xv(nxOaxS*m3>$wE9 z(4iT$hoQSkyCfJ+Bfc4FbR8g0=?Ro6@ilAHY#$T5@kasL!-inqb(zakXVRAkXCVJT zeL-y7gZK+#nVROJ;6Ts2QwN&gZQFAOzR(OC^g+kOMX6!DgVF!<_}u9?o)dKLGGin6 zU*MfVyA(hFtr=U;4?6wV+2;d{aWULWq0ht^bN1Z8w0RoeOuI*Wr*>b7dA+pzA<&q1 z5C1)RZff`>Y~c1EnF!xb0uw(z^FZYu$Tt1<(W$mi>^*aKF6pP!s6WGVjqLq8UF-Y) zQnckHu;zl`fSY%uvJG(Ajz*L%g?gc~ZI5WT$(%mSw$Xuz@}@^9ZxB)59+YJ?eb}3p zJ8tJKCs)MxoOuZI2DHCj7Y8pLL;b@3d!Kv0WWUT=`kt@bUsB2aJNkKy$E1bpTiFdVwnR(M{Rk)jP-WTA^B*mBA()h7^^UbEYCE8)q}m5`E4_b$6Ir+aEn@Dglq zeTC+?urKi(fZq?sN%vyh!->x53t;=F7CpJ2>`eI$E&0MI%Tw7LT^`DB%aUIP;5h;P z&zpy&lbp)EcAwM2Z*zkC4pBqreI4EH*ETiaKfc*-xVx#X5g&WXC;w~dYj=F9Xugy* zA1%+M56bJigC_cfx}|MxV85AeoJorx%xv1&fu(V<=7Y%?bZl51nDtsVbT!SC&-Q21 zr~W}pTSM!H#-^DdL5{3Id^uf5-_VN!bZr(Iz&EZ~Tw&wfviWuOt!wf9zNRo~9d|c$ z%?q*`wBeiOM*ICTbX-%vp|v|Om_5$Kx8dEv29#o5M`u%47e0|y(dPSBcj7Zz=)SIL zrum9Gpw&~b>_Af|^0hR~#5yXR0K-``iRi4og8E=}U{@9}JZ73Nw8I4n#3F(DLKl2Y zX=$Am^VxnqPAIgoy^%1pp}7g)#Rrvbjh*c+jmgsMub*8}Hh2DvBt8IdYD~7bB|9r- zUpIT+oQB!gBpX`m+twy|9f0KQ@>ylG<|Rv;ySqEOZn*Z^ddp+h+V=Lftxa9+8#)`B zXmOWoyW87aQP!5WYg=3ISvRwzv;9L&4c*Cx`E%wr&Y$0SeZ!javf0;_&znD|th{1& zdE@nE^RBCy-8i?rv3$+-O-928m2c0AMPvB1IP(*%$qQV^W&hc-~x@os0 z2;moxRN{>We}_VBw8-G>lq%Kkar;h%*l53@=O0E@>X!^2@q-&CarwV22El-#Cnw7d zzc)BN4$BSSGWcb=Ag=ZpoPQuwsrMNCN`=_y-3G@UzZ231pW>iFaEHOC=HY*7a8!a5 zHW}O$Iwxhl!SNK$32O|FC+ALhzrk^*8uh!rf=i!qKj=Odz^x(lv%zO=F z6UsP!wZTLGNizO!gNJ@1^pqUOzo-xo^6S^q=iANV`F68-zTGUIZ#RqQ+s)$ncC&cC z-7KDOH;d={r^WOA)8hI5Y4Lpjw0ORMT0GxBEk2b_c_ALr4-ipY)w|9VH(w`d#Kz<1 ztD#){988p`?{)+3TO;u=fG~>w7jTg%oGcTCCq4AL;et{0uX*@<&x8MqNB@6?%SQ2^ z>9GTOU=)3cho0WSi=w9=OQY~Fd+?-3&;L0ln$PPV{BDn(6CS+S!{;SWy?n)EpTG3j zzu&_@j{YsmK0ovD8TROpd*Mhv7kKanPd$FxQ?9cfJJ190DE$w6@E1M$T#2kzuCj*LmoS1Jo;bevHwFJfB2239nqTeQT27NN6)Dq zJ?VxwiqFd)e?IQPFYuIWgU1dJd-VUJ2d5taqxAef>{g`4_Y~+ToC~`Zsrf+0ph56$ z=u;GgU^Ycb-IIl4GGsyFh(SHi(4%f>6 zvaxeG{}KMjj6K8o(oW9#gu%mkg}G-z+G4{8!Z|$6=f#FToGLr}#h(2Ot+Eb(qy3j)=3dQzh_Vm*DWX5SP7OEo&(>Nl0e$3aUe4fbs1t*>q zTt1B!HhZqj6TaQDf(Q>d=^-CS-%xr?CJ8!Fg@|Pmg97ic1iZvxai~3 zS8!gJUT~6ov*N#!y1gG_ob=K7i;AA)&gbiw6}`p> z8F%%0jd3a0LcTu1XR)W?rxl-%ahy&G=tqJ0FR@W`Oe$RJjuJ{47rEjeWsHkl!S&vO z+Mdf4f9+Q^K2i|=_6k32I=J}BN=L5H%bp6NkI*+NxoIKBndYAq$PQYcjf}hcY;thn zPxrYLM6SIG_n;A6=pSKvlA9J{oO>01lfvnTRtloebiT%m!X^lR!3Pu{U9Lk8ADbJ` zZ5>?ne8J%_^e;NN&>vykE!U94|80Ezn!`u%6Ar!9>q&=R@Y9Tw+!j%i&X`A05W9Vl z=@N{K-2^XW+~rg3@JTZt*)v1<2tLijNA{=|eO5D{1&%&~FZS@MRd}T>qB*W&+~wcs z;oqV7d{pt#drnio)XaKra`*_oMe))0ryo%%h(1EU-NR?M;-mYGeGZ>4*5_%5kKptT z7zMW;4>^23%zW@}i3w7Vg1_kDgWo<)ApSSns5uUK_@D6bKdty^`;UoRree2`v7QOW zMNh#C8F$N@RQN)r=M05cDSQFruG|#kuH0(H=i`dcN`>qGhraEhApGqW`alPlz1A8T z7r8>;?BGJ*%{bXX%iZYk7e1RDT=--h{zAXS!G&J-j3K#cA;!6v=?O1axa=k4;`=@H zM-(n|MPfI|xY$$r!{dyL-2}%wStgKN?QeL8+XUew{UP3CGC}wVUdXu1XAKbC=GdIu45of-TwA2$Y$`OIYS$MhZy9Mj`(%Ah?tm>3)r5Iw}n z^?4eB&m!peAROB#8kB<}k0BT1#RMPn{4FJL(*Bni{JGr0`hkJtdcnOQVZi-|n*u&x z891hYhHzM4Qf@VaKj!nAfnz>(4E~t@0|UqOO$cYoZDH`oeDJLSl82m9GcpnJ{ ztPkd6%izzY0H&OeEFVc?j54#Ju3p2xs3eIde``jip4Cl(5h_`V9H zpG@Fztq23eM{%R{uLX)j+>F3I2%Nm16GPzS{U3b2&XkMqV_^HtM&*a2Beny^#}fR> z^{NBHF&{6Kc4qLw_)HOe;t6~{io-(!fg2Ne27&t%cn*QjAn;2Bj&*=gC4pO^I6S;2 zaB~93_YI&uLkPTypvU(rAk+oW!2sz)xl#JJFM)%1t9e0-zMSqML4b(#rBi_%Hxi0g%Md~L|AR|cYI)~k@faa|xpo=5l` zhjN3$5svw{p*;9J1qNJSjO!A7ytyRw zuL*+>K0hrOd@#-t!N-=t2j7>rXYj$evj{%;Is?|%ozN4n_i=r37QQcsaritE27I3Y z+kuPn-`&GFrYFY%4@?Y>O9(wZ2|NekP%e4@ya3^lKZ%zh9M;Q;;8TiltUu<9@3Ub& zF@A&KL!OU)#kfqF{X`exm_L5*V}NkXALID`668bn6Apt9ejYTI!3X2^2xs!a_nojl zjmQ>m3_ck55Wy!E;gApc+$W9TL*h9EA9CC%Bye(^8Hn_P`a2Tsh0j-r+Y>lBPA(vD zTY^t4fs^Cj2m&X^J-pU{*-3~7$|cW>B?!m%L`mK=2#lwojMeCf+a1%VGH^_vhHxm? z0~3Q|9)Wuj_-z6w*BjLYK8>JnA#e)<$Kwr@Yf9kc_%MvXHvu{rApIn6l>Wu`$9BNa ze{tJkJ764-;gAp6|M7f^`QYcg9!M7EgYf`_Gx=bQdk}IBKpf*(XJ)-{zs2^!<9rN*55^M^&g7Fp;8+%faKD25$#Jz3 z(L?)?xE8@D7{%cM+YQR~B5BbDf+J}k@_bK1G}z9#2y-03`lTQO+&?ira~#0*_z3kO<>Gc>%FRLyF^t%w zJw8Vu^uO(&rx4$N?Vp%_6QPd>io*l$Z?ImZeew_u#7X-|AslX11b>?KY+mT`3ULN30wiBVSxBRZj}DT{U73k2;7;V*C6l+0@oz) zR078~gxPp~4*6>n^tTCm9RmMC;DZTV4y_v@A6){6o*Lr;(0Ll+c@ZE)Hfcp zL@6L2dAmn>T)&&`T#~|EKpX7~ypaM2#J+L-TG0vQ;vSH|B-c0mWG5$kciPLlJ9It{ zssxIpnT2Za03S@7#Q+BLfM zB%AS*tN{kTgG5yX#VMYTNWN!f1n~i&9p47ruNq+{?Ex9L1^j$6nrjd2HW{@PaD+6+2PM2wz|1l$Wv&;3aOn7o7O(y(PPF}5P zmfQ~}$x<{7K17UpBBRqiLI{3;nBM1*MgRjF4P?an(UJc61GysyG80{l68gO4Y@ zLnDw2N7~C{ly3-d_^8MI*3}(;HVV96hk6R5!5_l@or?Z)6MZKNzXBzxK_9`6p+)Ep zvVkhTf&PTIXJ8cCvn%ZlT4)#cqN#DWfj*)C*&DPT!xb}bT*8Mk^MnEC6VwQL0QYB} zIRbe?b)|b9D$MH+u$2XTEAt(V3&2dD$~*?pMqKa70ubRAnQQy-FkjUAJO{}_S^}!m zt{v%<6m}5UHTn7xev|3*3uGb)IJBn8g$Rh?efRqpqIMc!T2K|j%Q6rMTb_0lj0Pb( z4sgP8GEZkZk91)yL_Ju4UvHlPo&$FGP~b%ypOVnl+|dx8W^v$SXz+SBV*-4m=-PoZ9e?vJgqACdM}Zm)3~gYFbf-TQXN=~+i7@I3lOue?z<>vR&SFo% zLIhxC-ML@WLt?&9V4m;acs-tvUl7G!d_ffZ=><{biI*vZ{{=rB^rAz7A6_55c0PIk z>U-D0Zj2L{qM)j<)hIW(DS(x|&EzTEG-UYS_Mr>*k)qh-x(dh9%{vKc3~-NVnZ^UZ zff&R(@epo=!${+#IF6tr3&{Ul`6LECvwRB>%*0@kRJ3?4MdjhO2dpQ)F2L6Tm%wvV zVe)Y~4k$wgrmSNN&)%;@J|M&EK3pclaPG;d;!V_ zrfw%6`d|}Qf4qLj*CAL3ru;`D>|cy72BaW!5TJb6m6-O=6j6VCUwbSpOa!L`vGFpPJV=l`ez~eDd_qQ*1x+D z`R7H*F9e$`!GQ1EaZ~N+M%YR4`(N>mco zzYq9l%3m+y{JSK_E!c$0;{#LvY7ysOfHk*-Dp7xUpNJ`c832UYzXYBvAQW&9ykDmL zWKf=oLE@Bg+#+QEhxeVB@)w9`{}8aD7z`0ee{QP1tauUak6(h!0{JjN`>TO}ru+dS z>i-O$tRP(C9(cdZy7m)M|E%%cBINv|4j`udsp$Lz2Z4~Kz)h+Op#1U}hVNA~b%J?0 z=;aYuZy4Zl5cp@xpD#jwDUy%NLmn{T^4t_f%@HBL63MqkgpiLWQCV=#!oIMYt|73tzsCilSm z#pUqP94L?DJR%T@#vjU%Ac!+*^}+ZKG1Sd@)bXgi79#`K9~0_;^1|#Ffb2((pL(DW zE|2YJ3+5k&2%2>k9Be`O(uI43IvRq1W_jR)!rWAqAGrP{xM^;j`-^>0m{^)waC86N z2Zfd#R|ojZp`#qI7J@z~1ot8Z@4V+`fhLE0kq!WR*1`SqKsSUvaTEB5OR`jOqwFia|1-K6)EDQGhqy0m80G`}^3B_m}$kX`__B)3A zP9LQA=H&Wr0OMpsBYRVC{vLgBPej4JScU1NCeGD~MeIF@^?`dVeggZ2|CwKM;3wDv z`G>0**wYj2{|NT+Q@Q)4bN7g@2Kxu@0{gbsfIU$m{u1pS4eSy55$x57 z_l<__#G!4;-3z!H=#TfHP6B(q3bRcz*o&UVK^w7v&jxH4s2_OVF0^hn()=>#Wkv6m zzDtHrrv~W2&>@r`3-Ke{M@9s#T4z2_PhuZqs4v_Xo9G*KUjnwF_s#s_IvTVu+<*EK zz5g`VzHmRrUSLmp6|m>GO70tESJkFA6PyoiE+=1GC;0%16uLWJR$MBudmC-)Yi?GCU25%lmGB)R7Z-Hw2^Km>h|2>qei zgz2dug8r5WdbkD=#s}UC6NZlxfp-!iH(Lb#5)rr-z+r&T)Nx;jY5W`%z5{_S(;>`T z17RF3q38h_=EHX*NP2vJU>wtPATbC~E?P#=X*c?pi}yxxc<>=`wA`SP1OkWGUN~$* z5y+ohX6+$x@~kN#aMBK?2*>qBN!~RB#&NyM5CN_)roX|!G5vjnGwo1E;G`Xf6F8|S z2jN&Bl;mC8W845`*rFp-PkRQA>75bI)H8&@Nj;MY9Np%iku(BFm)|r}K;Q}}4iBX$ z4&|cdHjUgSaC8| zOjs_~$5wqLLN2LK34xRS>IQ+65ffXi22z~d*xrFbZafJH0!*)Djp1~!il4D*BUpwRF65bxQbr@7hYZ9-#1$fv@*VzhYb@2@J5CJ7HiF9Q(IBn6q#Z)M<104^2p zg#ghH(ZR;u_=&X3YDJy7^>6_MgDHPMkOM`* z^)VUn9t&_COa`PDT?XRr;2&bl?r;$`Y9=Hi0<-)NkcTmXjPepzDIv7ZpfD_th9e$} z094+Mhj1gf{urJN3JVj3pON5tLHoh+8<)rJ2fuw{%7(m45z{P`33U`!Uft57 z4*7=t%RM@CQ)4qa``_=;8SH`@aRY}waKL-uEUIm>81Vfe4*b7K06%b@fIm1%;1^B` z+`Ezn_pVsLU#yspyEqluS)FnQa}n^Z#>xeIQ~-ZoD!IqSfS;?Nm|_){d~g=H0^hWV zTAwMV-Qd~Q=G=w$OUd;i2z?QPbD^+EOkve`aR2G_;{Hv_=w4pV6OQ)j(bRgW1)PoZ z*ix&ifnUNJwxW(QxaU`g{JLqGQ;yAmM;5rB^)QjMk;7J81!>?traBd_U!H1t;DZF@ zb0qnBpqiVif$t0`J9CkA!!F==v`z;2v;e+&;61}?;0v(^`EP5Y>!h5^Q2_VnfRBxr z@|@;Z!2iXb#j~5FdIBFN$fp}D3w4M3c}P>H=N67S&;s=M1^$1oPM!kpGb$*9`-9*< zQZDo-hx4Gln!tZLDCfE|c?vAI8_+W8AkEKJ+kI7z>s-pB zj*~pMu1TH}2KfA~OcL-h#kHTj4&5fm<{T-iu&k5fD(LHu1KJ+9DWu6_1OIo@-20B4 z&Vp?U`=19W3;o@}_JO>)_ushvEeqVEER#{}%(6_xrNJy*q9lxV|r|Ww~{NbSmKdPy_x}!97E|e$f6LkPq*} z!u%xQvy@v_1=XK>KNiXc_v{r&dp=s1JO!*B6?kn3XrTQ`8raWZTflqZuzxj!J_7sS z*3@L$A0$azv^IGPm=_gbey{b(wBJ8SUj*W$45%mgPX$9&Dmc>j;A_~uXniRlzlN<$ zpKp*3)&(Am*zQfRAM*SLvXO0oe;O_wx_^xBhr)B4i*s!c&p((3>&xTt2>u1+t8GuF z?}uW$Lfu{gn~nzhL7mjVeP&n=>Hu|WoID z!2c*)R)a0LPpxH;vQ4Ec)!+rjL+IB`0oY!;=fVx(Iy_Z|L#+qTv(|rLOXr5NW*3LC zI44(2Qw z3Hv<0cb){!8^}YdFV$Vzg6f{6PWvs4)H;&VTVVkkUc&J5pl?KoO95Pkr4Zcf{HES@ zoqBbanyccZ1m*@XchdgL#r7owKTdp~o18B2Je1Ep1;!A_uM~_mTz%woPl7Q7VyXb+ z>MNi71NcmYSQ7AShjsnl3(X;5yn)YXu>N3t2R@X5e{m zuOjiz5C=NhcIK8N^9F-{w~$Rmb_Mfi4mjs+yHbVVdM_2uFP7l>7P$AP&=dHL$8D5- z2(}R(1CXC8`uT}1=w~*dzl{U^&KmT;vEck1a{%;5`uyBQ*AdpA+rA#Ml*vP|rg#C? z6!5tW@Ym+71?K*q62SLaFV0CgcY*UFxCWdbIWnA+ZDLZv$sn#3Jg0aeTPj!$#H)et z$5WlSKGL$lC$RL`4=}o4{An}E0eQ#4`a`Rw&Ex>6+bEXQd(W0O=WNM^z>g~$zkauw zJ_hGLS!Zw_Dlqj0^Ob|b(|;3*U_^Zn4gf2Nl-_iSL_&S zeM(DPVSps(q%G1Fu9^N-UoifFxxV)*mKFA4%e65FJQE~sT;1@$vvGAxn}CfyK)Mdt z?mN4WPCPi8g0`6hj)Kp%Vx#5&Cr!YY)H5>@qO75i z+S9Zh8%YS6k+Eev@uDOf2{Ax>GZ`8h(;U6Pjiji#L=O|z-p1U@x1(j$MHm^cErszl z6QKixuP`zm-+!PLQhQ4wl6fqJsA^;^q(FPVxSa$n#p5fes*!~dmLh0P47lz8FMLhS zg|wECK4mD(titHbxhIr>Y+-bk|0dVSfIA#@#80R#g~&BB=Z-TS@iR8yp6wmdnF_JB z5V^+Sl_NMrcf`*`*l8hb#23;Xgpsu$RfSLq8KK)#2^&ylq{llr0soZa?X2}Ddj^O2 z&PBae-IzBwnVPn%xSovkr0^Kk=-9v*Pp=SPRq*|ss`Z$$PF5hpG1eFOa10NlGkoJ? ze8ZwaiaX?}QKAK!@B~`?Hw8`^H%8Ue3=F7(6Rr@8iJ%lRvJ0maW?vDMLdI<2l*UHw zr)d$CLS{GNl%~QK8xxHL4J2$@p-REU?cc)r4)QN_kbkj*e7qmCC><_$Q2t5>`Byv0 zFY6%xS_k>%9pr=Sp1%g>cK}S{ba?ajFJW5;`P)0l$Im83iQvAQBr2Dpc6Pu&vxEGK z4(xNYgZx_^$U9poSGAV0r@{DKbhk93fKw1a%`tmCiYL<;pGcaXoQgZ#Z6-+LFb&;tJ!`@bIu-8 zT_uo8@!i>UO59TMQ`L&@5rYRv+eTTYPoG^IJhl14m$aOWH~Gs4mS&HX?e;U4LgnUY zy~y+RyiCfaRn&Cd)tx8TNwIWx=lcSZR(Wb(u$TC@QYQDuOxZ8Gj#UlGvyOj^X}M^> z^pUjPZkgkC8wzWDcHG{uY|NpGao4SoYW6}Vzq0tzw1iy}s<-X1Tsd4{ z*{(dPT}p?JjlOL*x2>)15BMhonQp0zoqJwxZsUl`f$76_Kh3_UsPc2lsukOZbkXui z*sD8Z*{$himNW9-%a;zx-the6yv2Y~D>QlR?yh}OEq3)Jb)f6c)1XJ?7Zbylx5H8z zK^anJ+e5Z;+MQ#kThC3qvHe{0;hNc>T6QPh)>eL|>+5zpbmgr1L3=A_yJ|0f``c)L z#ryLd%@gZ`R!kiFDY8>*lKVxwv7-RPh2Z}zH884^{PEpT2N>XcVssSbk)gG%Eiam; z_?I6^YM8x+?yGsbHtb>ToMT|t`2G3B#M9Kq)y<}c>z;iKzOZPSQ!nF-UxrWqgycf8 z#lI9^9Nbo}c;XmEVVhumnc3l@^;R0m!7?xhJ9-?wx&o0VSFL@7Y4RaeYc)% zaXvF|m2X~CX7c^}hc5g6vZf|%IUca~d$iU#pTHFX7gwE>zuvNlQs1XF)i7Ywf@#mL z^$=HgG@p0*w-KRZV_CE2;d|w=1HeZzOdU^dPcKM6re3Wny$37m$W(`GN2n|jAQ(Xv z)|lM;J?;IfgRYw6#r-Bu|ISW1MNN5DV4^*=d!owZhCT*Am3J79y%|ci=C^)*W%zYV zb>y$E&1t%=`|po}?;hb`+P`*Lj?%YXyMnnoLL9zh0!av|I0~eHGKVz(gTQ_|xk0wn zwf?Y1!2+?QqDGT`d+!{1R~@ooyS{#ChKttzC05?Id!Aip!daA?@_4rX4lE2DTQ$D6 z^y(HkE-0qz&l=qC;5V;y6$nBy3Y2^k`ae)mkW_-&Wj(`q;+OOn1}$2<0{8gWzmAAK z&@Itd_C(R1nN*@w=EsGnOhzv%|NZdiE9IZ11!tzcEVp|)HPmx2VOOZ)v%0$jC40ZY)L~s3tG87D~u0 z?IM2c;CCw{7l*M0MUT!^p3>}WIYxbITVauGmoveI=N1~tr=Fa^K7Y^ULiYhCMoAC5 z&+Mmm#@svQ_)qoU_5)tLtr!!VHC@uiXY7OI^rcjy36DD+QOvF`{xVYjxwiGpnK~nI zTd1PC2+|6qfSxV-L_PkKsN~$Ueu>S`PUlU{^4ffJd1pzn?JZA-+|+tJ?Q8N3#im|q zwnLx9Y3#n_J8RGH7TNAnIe&T;+U{HGtejzUd);rj`^5qpfqr%B@Uyr1wpqi@-JQMq zwwaX`K0o1mSFmk%n{Ei&t(-ltAGIRLKYGuic@=rl3?9rR-5$7d%uFF^CVk5>L;d|P zN7lYhTPqR#s%eO_QooF_)?}+5Yz3)x4)V*VUvaTqvr_NQ4xOcCAMbt8`JB7Fe8AaN z66R}*30pLD z!)NVGJGWuOGwr6verL3{DJ0ZCF_b_4rMOha(=`cBqeh|V;0)q7%c zqxp~*ZoRu6wJq2`@52Y>pc|L9qp=M~BOBh{nL=szEq2;+!@rlM(URP(CqAc`omi9% z(fI$GLks1&dE`mYwSBj#Y}lrjbz&*!Q}&an8R^G*ek(3qv3_lXbd8I$rQ?Uhjq??! zl%5%OutyS&^JAii+uPj~LsYqPBzGCOd>wfB+3rA=8BwI?1I&Hzy_-Mn$z4FiW(j4ihyY*94`s_vx&Si&_tWk#~Jxzy4EX$6%z)3l~ zX-?)HKZg$O@XK-8^2O)$w*)V|!Lt1+z4!L8 zFB`4z^U-y)*1cracQtBT9x&R09COGljJNoxNhrU`NUH6&zy4s8rx+4ENYYMA*nogb6eSycyGDxAA<*0Jcw?N+tq)rZFiD+ zdR3E|Lh!XCg?F_KnK~OD(0eJCd8cb?pY9{mCFQ={?S170Sr){xZVZ@*x7--;@WsiQ z!Gm6BboKVx^Cqo}<RI6z<{x)Rmb8lotSxGT7Ml^ zZ;5SsL|GW^Q0DXUJ^oYYZuGx6(zwb3D_(7oJ0`0hD>dN$fyW-6i-PYV3 zylTRywFA~EZLv7eZGd;Qxv|~&XD5O}%bK^YET3b0U`zoicb?a6!?IDMH~rvzkjHk0 z`;Ef!@b$1lk1xetN=pl3=dRt93y$Jn&Ti=z@Ocb3K<{*rY4d?bnv!&vKGOZWtH)4F1?Gaq*s;>xfaBzt0RCelj)oH_#Rj!ASc6_aeJ6WWH8iV* z^|&C}DD(K#s<1{6^#yIKUY{bh0{YzAUpH+`+o3$+qARc~g!7DUG=u4^@kJR!4m z&az#bV(*>HrkA{+GIUr-|NeWu2DwW7(lPLJKGJxd{cyj-?klQV0)3)p@k8Pc9zx6oX(GxRMKzi;6nq#hlSsI zy(%nuNqWB0tB)byxSG)FKn=IfdT(`XpG3m&F>2$c_&VZxsZ!j2cxi{3)UsOfjX{3# zHS#+&ijp%EQ(;+@4G!GE<;VX8sKDxspVQVd{fcR2?$C|3$KIcrIwx&eiEqD71vi`u zehj-ge5B@G54+%AcfQu>j<#tkdHcqD59ezfdqMJ$_r_U`yDY6M(=Ke8{A%>e*4_)Z zudRJQA)(t&#lbg?U4sp0-@JZ;6JUPM@jH|SwZbw>-u^nYzt_$s-%gfaXz?E8xD{vy zucP7jaqyOkT&?;+-sOu+>$!E;#~%>5)gs2C3{nPl*;jkD)hDCQP4y>LclPzYml~2| zl~z^PUsb1eM0%tuOKW?;slnR#(YgeWdpXyQqz|TKBDO^`MAiv0kMvaw&G+C$C)9R*Y}HXGJBS zYF2rXW_+nzhLZdk@5SkotHTm^uclO@%jE6)Olq#d{{AR2L-ox=H~Aa~ALU|OU|nbx z?qf4dhq}CKrwjW{&I;v66 z7#{K+qQ1G$F~6KnwqHV*&E@Ph3*D(PtN#7KZunjcE6_RHSbX~d@M1O81qOIs3+=*? z3$v(e^e^K_pr_+JmRPHNsnh(D?s>VAk2Y3K3Y|T3)2BMI6_VWwW?8hk8L8+cNtivb zxbbB7W2_4h%aY2jzR@+kY47KM)JO6}if-=boXMM=+m>jZNqIT$ZoJM*NqNs970(J~ z4sHs5qFuiJ=g?-i{KxFTty{Jp9J3;Bg^T|Rmxb~3;^*vhrpC;EI{I_|(X<_otu3$0 zq*EGInijM1nbX#0n|or#g^c}jn%n>a}#;`*~?w9Rq73f6nJDuaaI_ zcA)!<`CvX1t)~_rreoe$Wto@C6=sU>%_TF%L4oEDW|9A-l`Y z#7;H)srYsWp^wx5v0g07&nK}e#8`LXYH9V;Zfe7fhpE=z9G%?S-F?Bj)I-#-YcHon;kMx$fdgvE2n<$?+`lJT+F2)ZmLFJLA1$4- zZ@Fg9(K{NK>@VDyuj4ya*}(MK978Gb20iEPPg#BC3|7>d%H30Tc>~?XYnicbJhAB3ccZxaR|=wZB@dKdg5~Y$bW8`{FfKjXOnw064M8oNIs`pZt-Z@xH467hPY0`=R?ONaT}X}dc!sr zHiiJWeMsU#|C`>+WAYCX7Ul89-FMyi^M{5WSE*8^%j`AtZWTBGNVssx zLuu#n++43u1N4p@o65OWFJ?ZD^(s)JbHb$2d8hj2ofFs2F!6}jU%z&b=3662-}-lQ zub#MvjIO^trDtwN_B=Q554M%nTEXZ-jz9VGVy*6rkKTW$%8|V^b;0a=uWHL@*v(vA zT;1RO7VbmPj?jjj^y7P6n;&M*RU08~Z&xvKw3ixq?f)M`5|8dbu`P>I+k2txQ|9}b zcH3fy&9@0&_;9pd!?)-DHlDxIALeP69oV(?Xw)M8kO%Xo=1z7vY&c)u*_}1Z*5h`{ z^JC+KyLkA-dU=fPTQ#8}uHVE0mDU+1Z?>|Z4Vu1eW%ndU7xv+U9&;x-pPsvAKjnGk z*1_O6-v*!Czj)wBxu7{_Cok_mqr8UYmOI%w<@P!Y$H^)$>?U*WD)li-zUXsGEczg%-9s`qXSxfrv856O2$;P7+Z*86!Of0-vu=@0! zQboL}J^oqJ!pY~%Cr@}+HLQHI;lu~4KV%xrb8frR zzl922sk>wR+|s{@)_Et$vGBP8+Yj>8$#VNSRMz;Q zZE!bFak@b28R`7^2Lc|22B_6YuSzH`-c@Mg%@u9iq99$~axFoYdrGsaCgd z$>@<|P8F5DHtzg_WVgJYQb^WnX1HS_zdJU^rToWL90c#*fB zHd2BhwlnV15vj9}lRwI?knNt}*!N3RC;zJi5o60lhufPx;^BwWM;s`7k*1FR}5NZkt)_l zec6jUnV0#7|MO#FP0!v>i`L2QZ?B`n^@hhY5Ad#@8iLGr7Yo%yJSfQ zW;)xv(s}K2T$cT_Q?Io5=`St*g!gHlVcYuN)_KrivF4`v39b`6SKV4U;O!Kf*yhz$ zXRb?}G@aI^=j>kZY~PRi7P)H0i0|7ZZu50)?fpriTX&hZE%M;QXgvP*0yYiItrCRQMjJj3I}fKRk6@ae-%{S@!|djQhhdU-u>9w>wA^VuB9K$jy-A0HtN)T z>1+C&U%nye(BeN@@jH`W zUVC*;uGg3`%e+DrzCHcY%j2=y(2;$=&HFHBf!|71zA(zcVRdn)uhzio;ADCZ#yZ2j zKdPM^hg?~Lb$0MS93QHZM3m)6#aJOMNgEgG^#caTxvcLS_b4%Le_U;C?ZWGkt-YHy zZY`O+;`8S_3|Urw$XGj>JQ@^Q7jma!b9--cNn(0J}V-LjYG z7S~y6)6&htg6`Q@?@xHtV}7TzJ*V=6XP3^(0X@#0&{{ciH}1FKn@P&HwSB+kpI7A0 zIeg7gtju%g{pntB)%3c1nCu+CO15 zlQfsSU)}%C-g#8FsmFVFs$IM7;!3vrch$;*Udd;V>^m*xx!@I0gmtQU=2rE~^F!30 z=(P=*{UGJcgUCcR{T=-NjISH-*=^$u2IY|_RnL7cn3dE{MFh|<=oqo2TqP5n4SNh7 zS1gt4@A7@j=#gtQm&eBUaE;HKGgn;d>!&B*HWc*u`1zQnzCoi=LYLj&R4y*QG$41i zqU(l;v|k(b5@fdA`!gdV?B|>B=Ur-o6BCxPmrkkg=UMs5A@1U+4?h}q1#7H%9eD9- z%%lScB7HKi9`N**P!-gw+r-grHRE;0Z)_-k==Yj8U%-07{-d)mP5;Fn+<#_i_-kq| zND}10Pto-nZNQ3i-S7YFwR)P%_89L$_nqYPCH*vf<`%g)zjb#of9Gqp<<^&qMMuw1 z(7&ZOswr;D(&N@q`s{ZVMRr=vwrqoqqlb8<1FLO!h9&&xVI$dP-f63<+xLsL1P@#^I9A`B|cdGUHS5d<5tD5t-4qB<3#+ZzdcbaW73NC!(Tad z{!`E1x?uE?aStrd^{JYau|aRTY<}2md5M$M#G5l^AGJ=~?IQKf!n{nevh&j;( zdY+?y-?b_>Xq(-V_o2LCwiq?5Y6sAoMg96N?_B+Ar|pIpVTKt|Wr~XIU)H(v(^o3a zU)SGjvl@S1(*$+V6EZ&Vt4PG8B&k1L0}aRTQu^We_SxGc)urZ%?kPk1ICdVZNX4Aj zN{Tm|&fZe?Hkmr}bnBa`du3ABjw$FnckSLM`{LL2&z?J}<$I)G@p+D=NB^mdqB&?8)7iv8Jp*7uSa*T|I0#%cFwkWLYu1Lqk zTbw=)THC)U$Qh+fnYZ04NN#qLMrY^DXMHx54ufOM0~c4FgLz5(h}e*s>!0@;weGm* zlYn%^v125_i$u8J4gpoO2mgaj$Ez0c=b#z8jE7uFBC0Ja3cD~2EEj+OAYVJx*vY10 z2UL4K9_NxU&VQ;)!)BMPaf-+N@2c;uc5(UboT_-h&t>6NNd`{?t`bPZyoSh+r}^W6OqD@lbF*F+PTksd zP1j{J9^1rUp7T&&rpPg)LZ^3X(5tRgOOIanjbu`-b?3;qeXKAjd){gLa1(0_^WBpk zbU8l0SIvd)Lzdj}X&l@1(`K1?5GA+tWvo;3vm39@Po4Km?!uSS3yWOFT|PF!(!S)^ zs`J4EYHL^2Yo1jL7pwU#ALLHWA9>`=vr}FVDvwHRpW?c;C3=zWG>Htaq1J5{V{X

Fn#~}yuqY4&}f4p+m{i_8|dgYEc*)Q*O8#eFq+%wDT zr4MuVH5k_4x;f*qKi^hnp#C1<1WV%C;cpSf%97Q4QR0`b4_jo_?eoP$f@ZB;YB@ta zhibw5^iH=oFANEPSK;X#@Ir3l%Pke_7^HJ3Z6dd^0r9zcK!~#lGjkO|J>-asTTEObFMy@ShjJvr&P-OtSpu z&fU{_&(=2&E=0t4>P0o$O=$RV!CO`;e&+idJ@GTzKj+rxhrRJW)T4*Q*(tU`1IU-c9XYXpXMnx1=NKM}}=T`F!3o(dX2AiM$KGZR+ud9!9Q8NKp3tlHO;@ zz%g-ZQ?6AX;`3{-2Q(zK$3?Nmej9bnD)#RlXRz_knxb_#Z9;2uytW3d@5PyOq`D@< zvedA3+0ygn)ton1wrPDH2mTYZZtQ**)lYo#*exaHiH!>3=LTIX&GJdiJ+WuGQ-Sg2 zkb*C%GWs)Zoy^@IDx64N7IbDt@hW#)t@Gn4vA1!fvVUoBUq{H*-??*r@Qk_!v2B;~ z&g1s#NI#-HsrM%N2jRay#0T^bXs#+8W_tF*?*L~#%@yKwr*qd-?L)eWGaF5$)Q{#YxUzbu{i|N~{lorz z>QTDDE!X8|RB2TBz$?W&CspJPG_~8AUcURsy*UbE6#}~4{+)J5vBWO4s$}=x{Tnl} zUH?UI0X~9tYOyn3u+d7qV*Y2%K0msA?0>iGE_ z*s3r`@A~+r4J%8pdT19uNMgs-e^(gkvik0*Q48pM9gEjQg$?_m{y;-jOI6;spGufh+=A)Su`Rj=uAhFy8d%M1 ztNooc^}NQjnIZKP?8bgGIR2Q7pMI2ZZu1gF?U_GoZU*0Yrqs4t^2DmUhfiKlbiJ-? zXRF_mT$F#ZO0(wG8TAW8$2y(acGJkqIkCy~;*(2%wlD@3+J!i4`5_?4qrlTHmYVNlZ$GG z$IrgYs`hPOcWd8|#;%_yZ#elOe&YwNmis-9G#t~@9QmrV%eqqqO^a{5zaKhkSaJ4# zQ~B@j=RWaMmMvJ?cA#;?x7Y&b>uNh@!ve~(C+YQ5K z6)D!1$>FmL^VS_{*f-`(;E`Lo| z%a@(HEBv`V)%rueI61zo*2#rjU5-r5==_1Jr2 zU60*EZ1t{wTIN>2Z2i<3V=r&)j@$EpT7Mz@h1qG~{_mdE7VrB%@HlqI=4rgDd?$P5 zuZedP{F8EjE-c<_bMts%YvTYDw$p|g^}kv9SAI_%xnO)Mt6Q>()IqtB$|XRa?2`+J2ZN4R@#pKwSD?*FST|r zxO-8Eet)gM0c!u%C;KnjZ4s)~ZB}@q!&|EtJ@q4{KRUY<_BirHd0|m^^}KugwNv}` zj$Cd-$s0<3aGHN{(UlRadv+NfB_(rHB0uZG+3dBGk7_QLU+??*)cWRbEB7W(a2R_3 zy?D;m=L2qPY2f23%j3?9U&bcr7cHofe0F!AUW)AAk?*}8BotbTZGL)f)6k-2TYfp% zckkEN=S#pX>$dEDLz9cnj|xt)*!4$8e&f2XX+Bqlen*Vd99H%={XeRB8Fi`Z5g!<~AH zsP8cq#jub(@j?4<4Ly+`yzrvjuoNS)dU0Q0++Y4vdx?-I%DxT@9d{nuegYr&2yF||>pXS)%bTu0Uo)avQ7*^Cs{CD=cgc{Cv!>?^8oEnH zui@INZDq$7cJH-+@Yky+YtQFRjBD9c{y(98CN`_!A~TGD5{lN5idCm()& zrc&>*&vZ2-y$t)HjY~gfMjU^vc)oC$*QdtY(rep>sl>m$eSeL^oq+ipPcCpz2z9XG z1kDauWja8*3#T4`C$E=FV3CfEBbdES}C=m1N%ix9XZp={(y$E)iO`zg?Vx|{f^vA zmYVhC`SImj7G)fu0&)NSZ?#7U`gGKuUlLB2G>`53t0+t<^>x6KcdyibcIkY5eDaj| ztqyh{Mw;y#T=7d?e5)_#hc&hI>ysMm3xk{redn01P?F7dRq`J_(nt2@%pUQ}d!0Og zs?+rg`&v&eT{6(^a%k0#Be841(s#t7Q;yLypN`y!H$+wi>PjMcagey8W9I+QhZ`3TmWC0ZfVqQQGo>l{#e=<`Wej=%cD-Zfg5^j>!S+xV~R2{G&8g?_BPa3 z^$zh2^H&8s5z-qq85-#s=vk<01;oTeL=V;12ae_;4?X|zaQ_hB=;~~;X%IMF{<8{#-=`&mOkd*entj{W=0m4#s)?vhDJW-1{P)} zhCZf7K1P1#zP{Rge@3KFE%3yW=hwslZUpbqrJu(}u}$KeJ8hBLDwEbFU3Qz?_8u7u zI~8}p>l%0;)fW820OK&g<4ih6QF-VHu?Q5$kG&zbgn=1=bQ;2zK*A2>BT}IU3s7E| z53kj<&j5J!Di~~O9Nx_l42!|DWI^vX-2A7K@CctS3x*%GlL2TQ!4OH~@NHwkFq+0m zZy?-!c^ZdL0R_Wr*e(>j`VkD-G!DPE6%5Phdch|>f?+g`s|bQ16-d`twH^L|uCH1< z{0pt;fOdE=je}ZG;S^kf|LP`TeQPj zG;Y}rzf0F^XgfTW#=!#&Mu?&7HJpKh?=EP3L_6G-uJ6cp_(i(DquS%No}700G#a;R zhwISz=yv#TTK_Ta@EbHfwjI8b#;x1owlsfuM_Vw2(e)iC2!d2M8nZ~+I0=Fv1^ttQt=ik+6KQ;EJG?)QyR^eU)Ae#~ zhnLd0TRS|F#;3Kz-_dxFcDNT^-|6jeHjU3{hg;Kjz%w;J`v`4^S$qJ+j?ndTZ-?j5 z`pCD#H_&q1Ki8N<<8&c`GAn3(XyF2Q4Gqzm0(c9pPiFxPCgNzkYdbs>@L|zUjk#GV zh++w#XHoqAnT2o_pdyRsX%TE@j_{3OUBROG^99C-(ewt0ilQn}ET5+5kMoxh&Zg=4 z<8uqb<7j&RcwUF_S{mn%&okjoZxCkCIDb6HKHgku{`~RzKBB)))APskQiK};6SFA( zdZ3WYo_bE(hrbTFf$*I)&R=g}pL6=4eOVNLy@7oj)pdcm1}e>ewhBK|V9}n*xmihw zf&-e6MQQQqSEE=HO|RV!zfSY#&)2wJ4%7G$9(@Ul0behGzg|0h9xazY&t5_l5;V>~ z@8S{ul;*?l{}^9S%T?g{Zljn9IJH>3)jdUpAUuwi%OC%X5q_NRZ{vAXq-RqV?2k(`SX4; zqJK^IXa2m8@d%pU8FS^G7kM;2f8NLEixO=gV%|q~h7MU+6fy53d^L@`@%S4cyo~10 zpZ76dP1Ez|_f$mRm&WGcVllg4=DK?34<81mXZeciod?s_*Lhb{= zd^YcH3P}xd{`gGhum!x$@^jb}fBxm8kWXJS$%})}H+XR}!Y1ZrL7YGD3*xF|k{4%F zYP>iZVN?9^K@jJU4}v&1bK5$<|lJVkf zYA`QOM%cvqP!JzNCV6o-vEJZ;Ai}2j>q9}@fK2k@Y>K}=;ejB+Zs(zqo6Dy7>r6p< z6Eew*vnl>MlLvwbo8qq<1#$j5QxLZxle{>a;?M6q5JcD%e|{Il`SZIV&Y#}}asK=+ zi1X)nL7YFo3*sCy$&0foD_)$8uqpohE{OBzcR`##zYF60`CSm_&+me`4VmP{*~I#d z2Z9Kj8c!y9aW*x97bhcZ%8pF(;%wr2iU)!So4B45#QF2PAkLrP1#$lTE{OBzcR`## zzYF60`CSm_&+mdbe|{IliTRz#V3YH^0M4J^2^iRiKfep&{P|rF=g;qgIDdY}csQGX zFCJs?cv}QMRRsPCl#wGDpg5cXh2hyEaE_R8`hMcVak$U0F#d-{;0hx6H;d2*?&B+r z|5_2ajtD(Zil9#tfv*GWHDPkkh`?n;$c6i$3*!U*F9^d&h|mY_H!qC-l?Z)wM9|9s z{yk`~!Q2jldBPd32k7ZI(9e@VVuA=he?-XLDuRBHh;WXleh<> zfj;Pe5%gIE-a_D)MBvXv;NnnG5Fmf(=NkuAU^f^b4t2%BnZTh#L>wXr9M%DccmnTD z;F}1X)F1mffO1LvHbD>baKQV{GwE9hdg7gPN(uB^7$ChO!N-Kadl5K?z-0*Bfxy)X z+=IXe5O@TED-d`*f&bvDM*m8o6AJ1He24Nv7lgw$Ilx0fUt{2S#i@XB*d`>s5(CHd zstAX2RSCHU1g=Kl@HsUMke=LV!j{052ztB^8l-RH7NvjP2>Mn6_Yi?&-{+7INgpAC zK3)W#Bmz$%aMJ#(5ze%KDg(!NNb$b*O#7!HdW>WGEJ7}6{~Q7zNZ2!vAs1gM6*Bl^ zyp-TWwj;Q$MF)6}b|?62Asmlaswi!Mj!=I%UST`};g}vJsTdT&^ccrSC|84!OX6At zj`e}<4t%il0=^Q2cvk}FAPR_gBXD~HmnLw$;)V2*1nxu7|3-0m2qAD5L67hAK|Um2 zi0GO9rx@Y5KcFOaiQtdNY6w*lI9w~@@Bu}jToR{{ZcH4HMNAy`F(!`h*D`T@Ul!t> zku0c+2O(FAz!L~unZWV=KgdUx!1oaJe{f~Nu~Y`%fDdkFeL1bric<30e3i4*fq8^K4Hz)3z9 z2xrz8&yURdI*Z_wM&P7AIRsAX^Nhered-X-)aMJrnfgc(;~vR}oOeil$oYlTM+(^r zp3?^jyD1SkY)5=0kH;%WpGVMJFz6Scv@L-jBIw-+9P;0d(g6g17{%csp1?`^6at59 zT^!O-1nLRtuc34ffft}SJQNc+Nnb|bM^GFdDhV9Ye@5v#0zZo4@X$oykRGoc@fZU2 zJcelC0k1Kz{v41G1D-n|j>lezTcCVQ?}yU11b!S6qToj0P@nZE9YEkGFflmB6F8(V zLg^F&FCysE2prPCMClv?$2Nz>iU}OjcSYxU8G)aKgeX)JIHVtm=<5jl6eb48CITnv zrBFF&x6=f@5`jZ{UzEn$eLR6f z`V%OfLf}^k`ZNM3>2nAik2$bdF@Zz+=O|r9;MWNLl>|=G*AY0p#>b(Fz#+XXnpg1r z0_}Dk6N94?%E$IJMQJSpzd_Jj5IE$I>1_$Tf}qFq7v}GY=Is(5-&^Hk{NiQYAC4%+6N6;$~ zI7zQX;P(l73j&AqHAtQ7_bxiJ<+T67)(0PSR@;IKDRpi&+pj zq)$fjxbKm2uce+7{M{Jz2M~P#fmadq@dOU}-$C>#1pb1cPa|+h-;C&U2)vr0FD7tE zuZGfP1YSeXR}wg+ACJ;?1b&gAZz6C=kH>ScMGhUH{mJ=DiNGN}o{zK$oID>b2prPm z^U;>T$#t(AfkS${?hPPtavc~?;E*1#15*h6CBSh=BXCF`f$E<_;IA+-I2IE)q~C(* z%LtsDFDeNf(&PD}j=--G{F?}zq?eN75<&aFCg_z29MYE{eY6Pt4MA@~;E?_$qKEH0 z!2tQc2nCYfuJuYa7e!e@h>CruLON1 zfs^!g1pbYnZz6C=UyAK7!zF_DZzSlI2%MzXBJl47J$zpd2FM4}zeD`{(kOQ=zZ=Ej z!JfeP5V!|{?ou+85*-fRcWm-Z9}(kS!O6Z2f)1 ze4{)CV49l1f$1ToZ&Van7|H~y_(oBozMU^4322YR3`u5T6?W~*4^hEl6E@%&-*<8{Uqn? z{o8A=wf5Sd=iI%|UQbqP?X3G~b4Pn{?V_vdV8x2gbs;ga>1=Lps%vXrN3<(j*Hx@E z@s?S|+F;JQ_O9kRS6p+$MJU3?HF=ipD{o;xxUBAK;p##{kPw4Q zHCxru%rve|aH#tFYs%|j)XNsvLIW4=N|r;5mw#Yc?X@ljOc=wR#NLLIlagUC$-W#7 z7ER=%6;<=<);4#wv@->@+~##nUfx7KkW;e=RVUt5njwPBlsSkB7iHVJZhb>jAiAw> zXlrY44A5gR$2pC`oX)O}u7;Jk-@cab9qrtd>!9K_S6*LRx45Qyc|~1i*~0fjr`WiP z1#=VQ%I77=Rm@F}tD0Y)$P>COI*BfcanL0(4!R`9L6^d~n`)O{U$-!r*)(T9U+3|) zim#P?oy*q>zLxWKVS&cXVF7dC>pZ?z@wJk#bNO1q*K)q{W&V6hG>@-Ue68f`T)tND zwVbc+GLOmmTE*8&zRu-q1z*eg%9r_7OwQLTzE<*eE?+D7T8`_cIaLMOxpLX{s4nFT zs_L#>QdtngRcP7rE3dw+Ztj9g;_j~V**}l3ReY`F>)gcT6%|b2uI2D=no~%-Vqx99 ziaIB&V(!8l=N2g9VqIlEc`T|)Y+A>;d|^dwtm9n1u-uCk(^QdZ=5qe|I-jre_*%u+ zO1{qJYXx7+aosd0E*oJcD^8lppCy6YN zjTDW_D^8MfZh2g!q?}jgMVdN^(&RGX>wLb><7*XPEBQK?uN8&4;uc)aF?8KDr!cy6 zZN++Y?6;N|l+Vfzd~IMoK0B}saa~DqXefzsXa$LJ$V_5fRe5q;`Mk2kbaN|`W4tYq7Lmm?2kcY%L6CTEkAJ-FxdX5F8I0A3t;<`IY+F-6_4)xy?INSvjO9m*Xw!YLikRW zUf1Dj0zdssMEDrd9^B+o=gHhFn*u&F(Ph} zANZ$AN|H}3efe`CJWhVM$hT_mQKb$4LJ182P8h$fq@)arv*5{Oh`3;z`bz zMZY!s7|~6-o3267Es+iIpN4-w|JS2^k^Bn$TenBvi=9D6GmdD<>HUwzPj%b6182FA z-7iUq%2(Qt!4s$d)_WbrrZe1~^ryC<>9t;;nCNstGbnJGx4WP;!+e}C>&IY7dGXVC zk23uO3G$Ci`up>eoyV7dXM+4Yr#t$Q(*F{L8mE7db?LXdTmI_Hzab(0R!RSOKBe>c z=}$xbh?8GA!_kkF{%;fHACmOFBglUuA^oQFUBZD8(*FeQEKdIg7r2B!7$NpUDAI2`aAWVF43+L($7jLzXR`b>FpXOLVWqTr21Pr zy7V8ypb(e;vI|F-{wL^E0Mxbkng z*a;q~|9dvUe#b|d{%p*X;^g;~jZXewCdi*!?$X;eY=rpb|M>*_JvYkqUreyyR+$j& zcWUIXzWlif`LCVpl8n@TIuh#7>`Iq@B>C+L`X80_NAj9GkFWo464D>4a`bPFkpB9F z^v}(632Ufw80X9Xc|!Vg7q~?F-6Cb-r++pf{icO3#lQ&iuT3bw1+qcsxe?M|olt)# zzSqfrTosqQumAZ8^>^1O)4w;N|E+!B=;WW7p#O16ufNA?HhlfpB&6SVsY@}^`1z59 z{MY10m;UyI{J%BI^dC+bKX+A+PX6l&>6;e0^dq(ZF$wvrFaJ9d(jUCcB^jyz_;4y2z?Xk%LVEp_fqvI0DgCsh{`X3k zLigDurJtQ3zxyheqD>RZ-Pixi3H{HjqfEahA^nQ?JAosO|LqC$-y@QK&j|W|E}{PQ zE_DfeMo52W!u-GVYL~Egg!IQI#LqttNcxfFmnEcMc8wD}Qu?P8(jSuaBk51;duWL9 zpI*SA=zBfVs)MYOHNagpl1o;O?nZ6}Ke$RDI{y}%kU;X<3c!K;D%SV@fQbPMH zyb{g(9Xn{6oc`?POJdcXZm zmGlR~r0mOh;iE|C*J&cj$ou=PLf?RU9pMt5D);vzu`ipV21WkSw>d)6`%V1&=`WsN zSusBwy0Xxlb$)l9S6Rt16?4lg97+9zdoEjgc~L5~NGkYxtSvL>qt)fulM5z-^28la z_y79TVCc=8iu#XTo9;i64jz0xo!)sYU9|I!bZY0X)4WxA+ncx#rq9}mq}vXsr|*0r zJ%#;**QbKrg9sl^pACHS&KJ`qJ6{soZfwV(I7;^>(vknzwTt`TylD~S=7vt(vA=I1 zUHAO|6g~cL{DyxP#?`vm1AkCE@w{CA8~zg?IsM^D!A!uHP#jzmjf;)H{t|H9xAoor zYD^$JH_TylES_`wll?dC*aN~<7!#ow_uG7tT9KkMpiYd_<37Bk!!- zOdbvUbfW+7kbADkqThf_7Zv0TUQoMu(d^1~ydbu%b!B7Mru;(Pf@Q_B6j)c|7On{n z*A=^^inJ1SB#M~jrTI0P`L&wDCBNn~Pmy1MiFK4~+t+pJ8cHI#ykc!#XY1PaZOw|( zipN{KV%9t2r){_7%KiNP`}zHvO#N^8kG9GnIEt~29PJsm&I|I_6$!ItNc1_n#5iG_ zkD*s3CrhvGOcVI&7a+pNh?c&AMsAb4@z<9K(mJmFCXMTH@()P5k>t}B za=!eFMZUIk5gRNMLyt6vx=Ye)I=%m!q}Q}IVyzpno#blzrwxn#N~fL zK+PAX`rNN+dbK}&m%*0}C|D+7x9CAPO6#Y`9IC23GH-G~+#G7|T$xN|M?Z%;XgcH^ zbfDUO8mxBWj=%25JES3bi6Kw`BOMwb91v4=4)==_G`@BNPgzr;LPz0 zf-~_go(-j6>6wfyJ{jqhPthse%Te|v!$l>p)MKVYdU9Hk z^FoI5;^wK87X48^?YEIu<0zfZLyy;0_v<{gvE%mjUF{b)H{uWb1J-vmH)1nI6S`vb z)NXM-mZ`6Ar(GcbH_jEQy=j}{_gYIQo|pafm`BDvoZ&fQCF04|!{CMUNSp=5Gf9q) zy_|_OadX7~MZC=S?KJT`#Ihf}lrV9=h2u|OvvG@|fiI1K8TK*G-hHgv6Pjej0 zXPMwWe>=CfbK)+cC%H7vsp}CB;b$s{d!NCJ4ZchKzCKhg@-;>LbbHm{XB+&u_j+c$S(scm6y_KKf^=J~L3|NV!0trJmt;(DkR&Gr^7yL~QHEXUMWa_wo~W?BnMm zU|aFe&sZKFbcW^tNf12bg^^Ir#qmvE7|+24@qg-td%f^ZFO0fXkp5F%_*O4`n-{*v z3uA6o!0%7I@Ta{n+I9i`?OwRq3-@{9^a8s-Ch`DOF{Zic;PR2;q6}d<6ihPUiiX8tb~Fbo;oG=2+rF_Y+rBE>fg`1XZCtggxg(2{qO+Z}cRpxrScfknWLwwa zwCS$Ed>o=M9lr$6Hnlf*W{JFWUuwGC?^D!YE;O3-H4G~XWZ7Z}(GZ4Di;%IZ}WYrV8Avts=kX58F`qqy@z zTPvE7@%X59_%&gDLs#p{w&pB8DS_j+I|JCZp$%t#H-x^9)f@Q>AR4tYAC>>ehDH&? zj^<7}B;37I@*`Stb~wHp5^|uApyWeMt*e{y*%D3Uf?59fgksH58eariohM@RgrWA1 zwfR8!RS!+=3deoOLou?k`sITf8l>WDk`irfr&>p6oad=gS=Xb!dWqKOpNO+#f!NDYW}o@s?ycbT99x}(<)bwsJNv{LX^~ae59qV zp$VTWK{0f8YiB1_!fUTw5~x3{S|Ma~UWddodLDJhAeG*%p!yM>Ib)8`eleJ6e_)I&8=N9Nb5&A9A>IB3tph0q-+~z8nmyc zFSt-WGHn}4*EevrTeq>TE#whs5r~DjQf3=ETDw~C(GN5*ZJQE7eG5K3)7o`=;1Ju# zphd20@=~DTlN!*5JC*<)S5rHh=f<@wVSK58q^xV+L1#-t2P_3C?V?g=8`7_W)&cc% zYa7u3NLN{Wgf#@7*ZCRUIr`v=U2S2$rth z+}6>Kf_9yvDPjk^ME}!Y3-jnQNyeDeN0$ewJKvsq+r;VoURa+YE}{6EiRVpvr0C(e zXAw!x-&Br!=lgvopr^Y+_ct6or4U4DA0q`rBO_1qm7Y=x-Oo8F4>Tr^oMrtD&WLN%S12Zl-wrcUz@``|q}93r>7a zRVKKrB~!qy^|X8y*EGss@pFXN0=X-Gk%VhJT$Y*#D?EIugj+lu&mrtKdH7}t_joww zb?ml#__rk7=i%Rz@E#9$^#q2Px+oX(CScf`Z>9nx_R*Kb^_UTTNigwIsDEB*-ymwGsz zK}AmA87ci=3SQ&Ue@DWqm(u@(;4L2gFC@Il!{3x}kB3i^u5P=B&lJ4R!^;KV2KI_#(mkJp6-#@9}UwYv+K6-y`&gJY2uMaKyuR3jJ{p z|DNC(xvTvLB|O!`b*L=$@M0Od7kK!&g6p~#<$sajD?IvY!CO51I>9%2_)5WhJY3&h zZ};%Kg}%?jw+g<;!@nr_xvqKhckVOd=bKwMMn8VEwKp`?;lm=B*>~dei0kO%k%i02 z>{lf5!wqQbI+`0gL26f%xz9XybU22Nj(A4CR!Bl!diTqX2={+z!NLT*5QtwKR`4@P zQ_KfaeqTS6JON`#)w9+M21;D;r2;hij-0w}`XA@f<-D*4r5H8Hr;VO0z0R{VfuFtx z5k5w=rKhsdk*R{yyo==fHt3dkJMSb&(@S*lE_mYP_lW$gOpzyoj;gGt zSNR8lk^Bn$TenQ=_t)gEaYRc_?{61>8KdDPEfYe#$1ZT1PVa4qRlg;COed5UjG@JQ zOinMuN1nP*())U8{*@5#O=IoXC-qP5ME0Y3nWk5KH!xo|px}_mUnZHO8$o{hi|1FB z$&Vgca%FsV7w31^{F?oR6=edRPVqme2)^=sFF3qjipN#cgC9?>xKOIM3VI6-Y}cv}4yUf;?I~^(_A`GyH7uqZ4`e*jd4kQbBhy$?JQzZV#VBkukoE$Q4t@B|Cv#eEs0DY`p?+L$ zh|;#4o*Ozq@hRx}WFgJUqSS*ys(U%DUE_Ssa%t+3hQq~jpCb2)+z_hFR-CQ);Jp(m zT?wa4;rFL!5hmHN5o5ldwC?ZNwJEW6Fv}|!w)Ft-jnMK6ZQX5bO?kDp?hS%Ul6&l0 zvaMSS$Tr~eqdgRbaaIph*4@WY-uos5yC0yk44nNhO=Vs|g|GE(dNNz8y$8n!mG_Jb zhI;0})^l)&ElaWPPi;!!?vG#AUxe~t8>24eGQsZ6V)MaMg32D)y#{%%7yEZhTzzpc zG&l~lijNB_H=}H3ppMq#4qH6QJf{Rhy^u+96wbj+X**z_H zq5<{cUa1rH(}EMwV{c1wu(#)ZxW6yhOS}fLPO%5JYQ_Kb)c9BG(?M-F>e>Kw;P@2c z-Dl-9T zxvd3bkWb!!6Ru&U{vk8b)f+sgxjtbA+8p;AXjiZ==E)m2qwQKf?b=n6AF&$#upZ=k=Lg8T=wU0u^Yb2sYV z*HLefF|L!xs4qRm^`(?w%*A;x)aO!@=IeS|UL#u+Jc;qFgw~@T$Nw?><2?$8-!1tk zy1_B7zP&(xUVrP>ii@=#A1XIl>sSM5O?+GEz|vOZj9v^Q%i z_hThs!)$G9m(rW<%xg(-Mv@Z;SR`b;6B>z z@p=R0qj@KtNjL4gbgk}Sdh)EewYM~Wy@7SqI)3rEA!R^ylI&go@#_ASkR9g3$v~Mw zuJb=LF4(ZotD6|>OPp>bdlBT&-ZM9Dow&oTIiT^1>JW{6<0s{Y{#M4AR6p_v`LzBZ z8%%$m?d|me)$?3^Ekz&DgZ0a)u~_Pdx@+sLS-%iz8;2$R4AY0aHavWG+`hOQK=T>M zpfQAO5Eu}7F_oNQa#pwfBK4X8>%rL>00t!I;f)loWd#e zHKb2((eZhxD_ncwl3@O zF|Q!qbZ#_=a3%8h3i4EfvM)iMdILKB1H!c!V>T}7UVcdOYun}ZsDGaZZ9UoqwHL~J z2L8{WUH%01kn-r}GfwV6aC|<`5fGn(9i(jMcftmhSGc;l?eZjBxH%KGC90=|b+fP? zQ&~mZc441Vk3N>_C$*UX{ywyq11P6H=+=Wf&7DX;DzgF1OL}3i#}G$0^ZT3}>T~ZO zJ6qG9SI*bippx$RFPI}VykGK%d^8~6=b`-K=yqJ`=&E63%Cp@IVawb0UvYd6U*-6u zz=QatP+n>~TaR8v`BEKti_5uSKD)CUW!gQ*l~)$FBAd8z$kjn$l|8Tx^_SZBcFUNg zbqsBQ>loGn$LIH&UKD93iIz{P9LBC#2w%4AHsNYysik(DQV2r$M9S|i@E8W z*x&pD#%|gxvjcak$5bzB;O~_@*MpA7Ae1N71F|#K^(^{0ZHGf_6DPkOHli_?XlWk$ z0>Sdm+~)F4s8{=LaQ34zu124xW$eZ} zwTs?e9mSgU*s`czo?I5;*trC@T#P+Pi(p$CL%+k%etk5TJx}Mdlk@ZNf!_>Q_M(kZ z9(KSkT2E-s(Tlmi&NaIKV;DAd{RQ>CZ=CYzw1Zxq)MpuLqoJ&D&X4i1QlBpxj4Ya? zg6C`etO33{ueNoI=6W;_4$9m;H9K%&)C-*->$6^g9(Y!!=QpYk`s^`)vaE-E%CqK| zp08n(O0vq!sh7R-`4JFHHrnk*|=|OqGd0^-ZU4Pe$Jm?rUz|Wu4BlDyd=*4sE z9X8J>Gt9Gl>6wMq*(~rF*I@;CoP+`bFb{1p9&38K;8&G$2o`UzSvEx%pXjAd^A=0k>HbHf;24ghY9A~xd z&Y%vq@Vq94zMH;jLhnk^)?xoF@|Qw+&%pEU%I@yv`u;Qr`aZM;>MKiW-ax!CPb6NY zJTGu#AAcVOd;-LE6}kS%whOAiep`tv!?-qpciOS`*$h32hj|9Qj%=#+5-(ok)19Q9 zsSVEGOz%S7{2@+vvh5M-%cwrP``!ytrrGf=6R3Zp`bzhL{k2$s=Qh^9|FRF@7q<1c z)6OXJ%kr(}I$8`USYu0b;~EC^+%!bixpkj)E^@=h*2XpY&q4Ung%NIzoJ&|3)6m*+ zTWcrIQX_!{QSy<7P!my&_F9P|BsBi4HOd#Q%&Wl8t~jpwIAO{gz(5~In~xJ(PK(vQ z!Q%FHO;{b+zOJFIZrS46|M6RtQC-7zQ+6%dB;fj64f)B@eKz~T-(#`}=LGAf`?87W zmFc%{9+~hk{r*G0^)^u)+)=uKCQCHD>)FNMPdHo;U3gD)Vf^ES!|^&8FP`+;&#|Fi zr28Skme3t(bS)jxACtI@+=(8~QSA26)$GfrxS0}{^WtVAjQJcpUNcni?VoVZHrb#> z=r$2`-cA{|63OV1_=hOoto_R(__)MvqkDl2w=0}z4hW6fIIbLC6`H3(@9RK1=J$9J zou?zk&&G=natG<+l>^ygsl@N6^eZNww@mB8=U|J^PkN;I;S#P7=#$yC(ADEZ<%9VE zJ1rl=`eLxBW3YoBMtZ*_*jC~iBahC|AV;+1NZwSzR0qz#V5Kqkp)^aqG=yRP$4>bW z))j;G#9$8zM)iXnrQIbM`N`2;*Xvm9Pz=9U1+)1K#xR?Lyq5^3?L7;UQo*(pdA@Fp z`>dM+T}SkJDHuKDz){!9Er6mQxerF~rDo})M~Z5GgeiEk??mrysd z%Mqa|h5uyk#qspp_G`mFP16KIuJhsG3dU*ZFLbjQ#~|Rj8|epaOyGPsi*aw^0Em_` zKE)>wW-^X9JDxj*@pC*B=hCu1Z;RkRWE^kAJhzK+Jh^-B(~QsX&>*;#@e3mO2N-`x z1iyrFT8UBUPGkLL0fvdXit!5#;=FHX{M`{e#kkhsF#08yi(h~|_g%*4cxVvpWSn-@ z7P?O|US0?yw4U*b2!1`|b0hdX#;YRuQN~djJ-3AOHP1uQ{urMh!GFVi7DVuWVtio) z$8Xng|0{w&&iH#H_#ZKTX#~H8@mvJIn(^ugUdH&M2>xTnIdcVZ?_+350Y-sh#xIZH zZ!n*l2u|Ps41%j7_%|6}8o?i7{F(^9nek;2{3*uqOP=RG&-fW08U%MTj$c+hSI0Ph z1^3({#!EcZ1%DrF?uk>n;L9ALs5Gz63B&437kr^XQQ{NLFU6({zRY3iqxp68N%@WT zla4;xPdYr>PdYr>PdYr>PdYr>PdYr>PdYr>PdYr>PdYr>PdYr>A3FTqbc?ujeg|ah{>|ah{>|Z6(JkWA`LFL3Mx}#j|3(z) zAlkn zrwXPI`%k5R1@yiB4%=F=NR=40)j3d+HRPIxpuO$ix+r{^G)SqHAf7bH7kMVHaRDIH{PdL8t zGdp;_#q^iw`8SF0tDN6(Tvk5!vOU9be5%mzV!MU&0oDIz#>4rE)*srFQXGWynXSU- zY21s0aDKw?e1KifcDPWe@LofFuQ302<#B!ohEO@@H=NHe5sLGnzvd;M2%anPABVpQ zJ>&583H?K50zK4^<#Q?YjN?z|8^+=Eo-GcqPUuh0O5k6TpeN1D>fqpCSkLe|h~G&g?g;A>K1ZlNn-EtV zyhBol=UKePc=%klMf6$Ce5mxDqx9r{&HYmNJpP=6gP$P3#d=r~us*>Xp+HT!TGWa%wmm2&|gIoG<8GNgu?>6{$gWqBBUW4Cn zaJ2{N|22c}GW2T=zDNAD2foqZS}$l1yu}X~KKB^dX69Ae{FCbKM8-v;Om8tUyfZKt}~uZg8Surr-v*3{eqL+0V8+2!S@+_jQFX2 zeaGOoK4{rd^fICG^HnRjpRW}ju07Yyg8TWZ_i&|e5!}z0>gMayE%d%VTK5!J{ym;t z2?km}RZpeYI`8ZAxFjUp+Bs`*%?m*b41SyV=~iR#j~QI;M*Ou6Qncoaa9f|Z8b0_A zT;BDHkLYjDqhZ@2{8oeSH}stbKV)#*?%p!^*A2anZ)*QK$RSrIceS(Pm4cH#&pA@Q z+V{y@xBkwsBuiwFBY% zBrV;xi=XgTgZCPImBF7#zz-OFx1oQ|;A%sHUNU%x_~~}s;Oh)N2KtdBJuUrIgIjui zJ|p@+a!L7W+x13+FEM;9UTg3sLvP!u#dSO-xlbATsp2R6hX$W%@I40Cc0}}@248CE zZT;8!=GQB~zUf?Th4As~m0#bKUh_!$3>ba7j6VAe-fi%&8C>fI@v;5VenW5Dk?oi4 zIAZN%%U$h2{4H+Vg|(aZ;lAD0i$03qDPhg8Z?{bnuej283+~%(tHG_^Dh+PygO-d2Yi&Ie{2{0HKvTTcAM|NG*n+cJZH&*1e2x8>L*xNjeAcZ%z?P@B;E z_F3=YO0V_Sx6c-%kG0R!2DkH^OAK!9Q)6&D4q7|x5gNMHi=Xtd#OEAA4Qt|&sB7P=!zgz}AT$$D}HosW=&Q9~?LgAWC#Z`ZuC;0i*=LN-;-p(HelsWD- zM$df)-(qm9zkM$Ls-fR)=>NpvmEtG+SUx#}TRxWle#6Js|N9JX>;K0MUTXM%%;1)P zr@^-wdTq-DJ#KJq%LF}P@NbKsZnpkEYw-QzCp*~ZrlSeC?LRI3B%!DG51%yrGX~c- zOOVAsVd%5sCqCaWxV4Ywg`#VPhV7q2WA7aizag z2>g6$nG(KFnc#l2p|^V03-0Tw`BMA>(NpuK`bhFX^QE}bcNw_@N{oAt!L6P%4St)U zx9$2CgR7putNrInzD8?*rBAZ|R-?bQ^EScNo|=X29x%blYWco8R4n`~0=9P+Z%o>gmfJ5I%}4{Q)CaX$bn6!L2@n zf~#B!=AY9QzgFtQ5g|~yO8=^dEB!ISef!&S-`d}f`&LhV-dBB8uFeM(S3Br@z}Iu8 z}D1}`&smBF2|>2?=iU6ACepX3Ln0=A^Z|UujNbldkwDhF2dhuaJ47l zmm0hcVRD4$*yk==3|?*UK7%hZ_zw)e*x*MEuC}GGx$=2A2ImV2G68jfcRfy@N*4*t-U_%efk*x+pj|A@i27`)EleFm>L_yL1A82nX(uQYgg z-d$^FT|-x0{>T9AUUWys(FV${_AsLG$U3__RF0UFy`t_MZ{9hIgY5WjlG=Tuk*%AC zPBu}7+d89hyu(wrjMAP|{z~i|Nw~VXtBkjH;y?=CplZ^`=uoh^)sW`7t)l}QBAg_; zaIb0fJF|_XfgUHG7ZvVKjZ>Y^PVqGtd9>9u%(2Z5vRx-9usd_uNT^w+v5NBv3w1c@ zrLK7s9Xz3P!C_NG+jwvX!^j@wp6jbP5THKn}u#-XpP4fVR!n(FqiE zSiaDS`Se-e5kM`0X3F&53(`=ja$nV=VWX8^SYz^a@zF_f(^OtrqFefgc=5kzCS z8=$DX_1L%x)En31bLfT^)uDZz>*J{oA-Jx2HI6pIfmm!yZm=C4?H%}VItI{CVJcic zzNe0l#zI;?8VTH*BekFm4SO}t5EAX1ThRMpJc-E+b-M+lN}<4TEGopCnpbx;HwSVw zt~o4M8*IVRxwSRRFRNaHPsiii7po{;)Tj(2F%75e&l^`muIX{eJCWC>ZC=+zZSppB zv=|aq!GTEW+HzVfAV9!K)Eg0JO#)><(!hQ6?`psSCnu& zA1r|51j_LRe_~X|w0y1LYdK%_LEX-^e+U2T<7r=2)E$+Ft`D7B7>CD`0yhVV2^&{{ z7CtlED0xiCL(kxO@nq>Img>w`Le!)^gc%9-E&={8c9p?sVakEk#3EVe!{zuIUVK?^A}TKZ7D=z~809YocyWOS-@>_xBS(Ybu$wC7!eOFa7k(;CE4#B{QL61 z04z@aR+0aZq}Q7->obV(F`~tH{@B^_dmG^n&VOI(pA*V&wh(S3<&5)Xy@2#SM&vnp ziH&axvZMT;hksxG&B$k5{s*YDgd3^JtqI}0_4lj zfq$I**)&+dwYXdU>dX3HNbF-o+_%IfDU+0x{|oW&%l}S-{B0s%>4i;1);;Ja|Z14$o?1OU+t;m*NsRV zXTK$rT*7lDz21CTKSo4c`g%#P@{-a&m5{zg((CVbN$F|5p05+pW-oIo4!IkT-!vst zeKh}{N+|!WG+8n9E)x z_;+0Fuj#4&(U9!h|A~bD|A5GsYM|mHW&Op3{(sWtE{T;-zaRVZ?@D-nJv2)B^!s95 z{VR=;PeY%crw*eT*nqi2O21PxW^R{{8a9w}E5jzbf*ZB)#5z zS+6D3pB|ClCkaVDLB9O|lOTWDSuUZb7dDZ+elJ0O*%dCuAxTK`Yw+*Or|(q8+5fo6 ze@N2n&CmZ?3Gy=}3{LeY`Lr&lq&HRnlP5APw$HnLWxhYO!sS1|6pVx~q z&n6WsJi50eeY>Z>2KC-9<*)5T*{qR{_fZApuIcoChuF^}3ntLRVvN&t8ud*WgfKCa z!oeg-f85Kk+D{3e0^pHwRF5obX^}`Oe_AJ^>2+NB4W83{*~B38cDiDnlC%TTu?hcv zdYmOW*PRWSWf%23M9-2eFRQAoWXjQ>CAmvg%1f}j6f#@h^qhL9f6&uK@GTk~eThzy)-N9?*w*(D&x+ z!LyfbGI=MZuZP?L$R*t#z`s4ylFlx~86kU_4(G|V(3u-JQ>lf&$A1=oyB;sOtF}!E z&a67KdpVj`$#Y|H)&|b6LNjImWSl=#BDMmb!aU&oFXB!5)3^Qg+wpqdO?bA!Vx04^ zsNbFo=FY8iXI+9v$?)P7&I2`P@8HbA9rsN?K8!PYT2Nmy@4(qhC?Bdb7rs^Zqb6 z5d7!`)XUzYOP_z^A9DTZ7E9hZB{%d;QOPSS(e#hue3~br|C^`MIW}kEyZ}0r&($ZY z2UG_ZPjPh&=csX6_TE>w=h(IG%$yT6^BLBI3ek=DO%q#17 zk$eu%^ujpXGB0a3&Tvp!WlmN;U8SL0;OHn0_2mC^S9tEh+UBkn{8(yN0C^U4>@Z7jbq+t`NnP1#%B`h{$H#hkJ^3$mpxU0v%t-*fTB__ddK%vs&uzPhcs zvwdSnV>6v}esNcOds|~mL+iSW+uCkjdl6QQ+|u0Gm2F%&x2kF3!lwC+t18OM=T$6N zIJc~#vb>^ce%XR~mE}!U6-^bZ<~KLfyB>XZOZv9IykcWIeNM1gPD)OnL5N?iU>OtF zBL17{?tNc93#f;1I2sJ%zF$v#pCAG_)j13Q0RGAGT5o*!-v6dO%>iCw3e5B9ZoV7N zd`KRg)xShAl|y%ot?V>Ugk2JYEfdVzs40eSlVD37Th5dIj$q~X3Z2E+Mo3p`(xRVc zr}>bm$jv>=M894B&tr%*8=?O$3Z!T*BscSLaaThF^9`0GrMk+@VM;~0TG_a}^NtqddYXZ-XK5Z~>LYpn~T z*D)>+&LJE$GEP&bLbnbBZz>4ukG7w3ekRH0i8tkav<4trA1FGF!%O2_ntwHq#w34} zI%*$EoerY*ad^}|4v*T$;ZgfIJZc|@N9(i0qxIS0(faK0Xnl5gv_3mLTAv*rt$Ah7_1WQBxt)Ds(-4rbaQ`~MEtIP3ou^(_v^b3!aW5%o5X9+SCP{6$pF zIQo6ir`W{scm!-B=4vAhA_F0;J-Nki);7{d?oV_>!<2@D(e&0Pi@!xm_DqB+M=ih6$fEGRQg%4 zzx^hu(!ZQgUfbB7VLzbsKVm%W50yVXR22td`&Iqvok+3iH`G3R84vr1o5?tE_a^9b zZ9@H7n1J5}`=}0%v%9{GTO3Xge{uK&348#@(kFc*dpehwT2ba-;L)4F=ZyrppG&}Z zC+JV_N#pYMNCG{`+0mZ5at+`PGqa;Tbru&mAo>ao;I8y<_i!Z{Eq~SB=dV4y&wsWE zpgn%qs4(2MCnr952a$K$jwxRjUmz63XJMY&z4xS`&u5v?_y282z-6oJY4C!1o!p1-{98HM+|<0`04hl_*EZ`Iw~Gt zA55y*k=!aJ#$C(H=TjmyKA)`M#K-n0Nqic^@D%*mbb8^upI zt$T#8F!(a@6aE2%D-GcvGLq$RzMLx&v==m-#o^nL z1`lUt?srLwBKmMv7Uq%gtfZxz);Gdu7<`NP2|wT9y9|DT!S@?{ropuy5}$V%ddR_tu3dr+h+TDfSJ%2KKALv3NVL2_Z0c-K zB#EDWl^93k_CJNM8}WxNZMmW_kyH+$gAX*BWW+6B{|8P zQF=4Ewwd-h+6{olbi8RXE|T)dk+KWQ`3pAEX|`cd+G9pVft_lSHEhVBeQR;7smRQx zG}%8TN|9WS^tdN-!uwwA+>MPUUJ`9>#N^&yFK2PyO48K4ssZ~w>zdu}V0w9c(yd@d zQCHJQe|=p|wapm^m=luUB_)J}+@!wpep`%`|iQ_~!8gA;(lO-%p_H!=Y@>E2+SC$^7&&MMkgxM3owtZO5n1$& zjyUF<;TcFsnSuj~I#&_5%uymX#Q`qNt; z)kpDj66)U}5(cNgy|_?RehJe1IuUJF06YMu2gd^FX`l&em4~{bZp#=R0C4FgLQ|IyZr)RS``5784;6|#yGo}7Zb90Gs zEtT|}@`&^J^u9(c%K#%OpMmh_K?5c@Qp-mjPZdt|{Q z{)9*fG@a7_P}1X8;CdxJ)i3Kb|B4+z!Z`aK68jBGda@tYHBGPfqi^NM}o|Jh~HK}0qYA-ack@9PY;H2@b_R{;XUsR z_O{Fk_V$c(>)C?TrO)RwK^5vI4ISI?U$8c?8tVudr?rh(Pl&!YmTsTWWv~vi2kQ(| zSd$hYjjkmuO-Q#{@|r?AqTh_Png;z!tgOw*Kj{>grXFieDX#u>xqmP>1SVUz6=A*R zcwXPQlj2vxPwV-x-jT!M8plN_uj>92cRbri>&X1|jdl%RW_xZgmC^Lc!G>%qsGWXh zu%Q93!0VSg+4n3DhU}WWBs_<8pK*v4|`3BFF)TyG6kUg9&A~u{B+VIB(MJC*?tT>-Ow4Uig%{wZ~7E z(wf-clf9mUy&izQO3Rt&lck>B&>!*I&lKw7eRU_X-MGd5TK^i)qW0iyOnD_g*(!xL ze;?vBubNM_S3aK+T?*~y>!ke1c78uZWibBC+|bL&=Y{aodfe%$@vroz`6rxhD7S)s z;ILU|y8~;Qllp-Mp-buq2Gi4L9lN%$jd2?aN?yS@P}_4O?2Z1e=ltB>mh;h1q0YB_ z!QH9u*GoI=#vSX^s;G{WE?M+#KHqL>hZy&vmGlRo-;B0F?PCVk9{0NAbhg!Bg+B5( z!@DVt+RWg8z>jvb5&xS}@7@3%w?pb%uy%WJ$i>rIZtaV6L&KHa#!|V3rRmJPEaVce zd%#qJPG5Zdz_+LG>0Y$xt${_;-|9hoE=8Uuql}+KzgRS#+O!)_y5F7~I^To` zih`kf&~CnQasLZKv+?c05QctwEama&eCoTQ!_TqSzXkaU`+-I12XaH&pXP$;&l4T~ z3+h%igi0{tIA zU22^W?4@)(-i-??DURA6wGnC`aeAdb=y-;8d3pt{509hW9HA{7|HAR*#G?iJC zOKA5q8k`MiY^HXfl>h2_M>iv89H%ya;*Nc6=jlP}m3rtvVX6<*ZZ*!9cMdvJSqHVK z(->#&MR`*GsC;{+kJqsq;YfLstsMPyv`@dRb8b(|7_<%U8=uCWh5+@n2=lZw+ioA^ zldK?{8^YKQUD7*g4+`x^A->)CiM0NFr_%szNErSL>h-=kq3sTz#CC@-a&*-(wtEA% zL;FXc8Qps^89Hj;(2KrM{W;@rfsWWW10EUHJ2NIYbGRt8W-a>9IGtydg*sPbU&243 zKG9g1pBtp&^V(1zrrV6(_8`*LqwnnX`ps_io4S7@i~f@OFztJKj}PyL5%aPF?7h*s z2;~Fyp&%dQGr^fyYqX*C$?j>HyHaOmP7BU_6nXoXBFw=sj!^#UPnCKEzvdw~A=pj* z6!qPiv6xeRc-)44V}n|?pO$NCOmLlI=u@hepzZ6t5|3W&*E%@x@92M}FGk(1RQWAe zxjswnPh-I`*pqdGALH2W2Bgz@K@NRW71{*egO<=3MRXLVba%t1u0FUq#77ZsfL&C_ zZuE)RH_}gOvZ#}!EA`ojsU8FChF%+Gd~owxijzGnDAz`$J)EAt^CiqnD4x>5MzFcg zS={|6$A_yZ|30p^xt_{ibSHgD_a6fb@Z7_FZH>DZ%%wBfD*{`*j`lT(|HD#Wdv!hs zUGN+ChQYHRoo46M)VJ7h06rvx`o7c*v|aQu1#%{;92&O^<*5Fnk^?>@=Thi&Jgxhkv}yv;CnDr!m}kj+lBo(8a)$IA4uc3J}178K4=E^@)Rv{ z?Tz|R8h2?<@iqLXWK4bm@!AIt6k%?II4Wz}>qO;Bai7LG?$4Ph4*v!HSZcA8m5S+~ zV1JCGh4Z-p`+nFK*z-g86L*B;(b&m3-Wx=Hes98j;P7Qm-i&y8`LU#c?>Qs$opHtQ z!1w>xm!H?h{x{h-bsqM$p^a00ptc%U|MtEAw=cIM>@!>`d}*E$$M^8k(enL9|6A>; z{{L8A)PKA#jrRj%Fi#kppJUPU(*(5f3-Mo<8o#C*W9xYI1Jq`z4O5$a8FQ4Kn1`bA zVZJqCO+Ds7^U-#fp&!M*(}g{FZ}TD|@zY*e#qs-T-v1lp@5Vg&0LH=pU~CHd+;etjP|h!;r|x_)eKy7c_k4+QrLqrn zG|n7OpNl@^ZA|xKdRm^Q9%IWO(o;O?HOO<2sR+M~!}T0K8{ug#9`mPtm>)cbf7+k> zqV!8NMv+}qcO7HsdBexf4!Vm6(`RFDbQ#KI3Cde1H*59W<%sN=R2%Zu)#4?4)+`GRn`k6W52I&3#!8V@#}!j!>6sl!v}|vCrPF zuJ7lu&(FvB>v}s1sC2Y?>2y?B}_zZKFjW9%a9FN2t@u%68vJ9i6q0 z>Ob1{Df1*LTQg_BE;sa@QPjigTSuqsj*X+!mD=P3D65l=ZC9CbkH)rJcwC$CN(%lK z#MNMIr1x8!G0xGv>Pn6u|4ItsR`Kr`a{Xv8kAY#n$J{WwF+H_ubot(V+vxNC`y124 z{G>lHy8dLx?W4=j459n4)H&);Y`aLej!wsh&7;%taQEnJPW?#I`0DF8W^Hche$0=m zF@Js;bNgSRkE1!&RbzwKE}RiO*gYnweRnE1)Q11*sfql~bt3pr93HM*Gd{QX`xrYO zO`W=?`#*(75^??jzl}Iu_&V7`#7C^ZQeJHaQNv(K!1(GtSa{W<@G^ zvI_s0*P~yZf_^m0m&P9YM$fO%*S>;&mu$ZVw!aFt&qDvDu=^+3_NTqF599HLu=^I+ z{Z-ig($vH?y$NZZ}&fziXuju_)%zS6Y1J3RZS={l=uo=IP?*Og) z&Q1!?Jfw?XL*p~Q zFAGu+QW~sead*7S%#ohJ+xREmknGpxw+U)jWBwMux1mgy!0y_HXl_E! z*E%OTUPsTz`?*gzg7>ueO<;E?N#P(7{12mVA^v^D2mDc|D#wHW_=Ndob-$}WGfZ37e$>v< zs*$Hs9NSEJ(mA<~k%K5Jt3!k2u~hPSgmi%ptP}FcIw6lqI_>+?Z>JNzQ)3%Kzee)A zd>80CoThJpnR<$TiPjg;djP6a8N9!kfp^$c#(mFD-*epQ%Jm1o{Tw+J z`p*gWQaYulIHKEeR`4V8;~iFI-?MdlTClFkr>iGhVGc;^22!U4we)-Voj=xZ`~*Et^Vgi;UEvmDt)%kNF}`ScswGsExeA0AHi(>LCZoFQe2{s-Z`&*0l> zTn6W0jTFj&*Dalnc7whR?e4Wc#1En$=p7eSZ9u-M&!W84kC)$H;n)7BHw{`EcY*cZ z_x8Mh@T>rRjPx64pgbmq<)`oSdhza*^q@YAbeNIBJjbjxBA)2;W(}T(XG0Iq5r%mD z7nE(o--h;Wz&fa_q5lqiPmX8@P6;aU9k}D14!`N)_cV+zZXQ7x^{z(S|ZQ8`Z>8?#se|6-ik522E73_UaLS32hH%_-yOkYF&d{TX#aUjgo;fdYLrzY^< z{Ed)q2iAINKSsQVRb&-*{9gAJMUMj7^hZE>_d_P?8h5A@UHlg}je?~&P_(3RtGx+{d0$=@ICtP1s zxMl`(aQZ||3Fg$Z{PN4vSS)?}j`2b5Z%{v`)mQh|pAqfb@3|-F{|5S_?f6$du3vX^ zmHIULjMJ!JpO&A$Y)8MYwAvQ4c-|wK^m_@7DLe3-_aXEZS|-7-hIhB5a|_+?Ff^B) zir-157x!QcTYLunuJX40{0D~;Me5z*Mpq}hF_sU4o@|_@-%Z3nK)+9jzw{KWeF!pZ zE}9tB-hg!)Pd(SY{IaCF^mk!->_B-;NT5soD5N_KI&IU_P<~qGT(>djAl>j^(7sbY zH0e>d$0Hq;-H!Y2?ssj+_0jd{)2Q8iBB5TS4mv(5jE6iX;+f~o|BQb=iW?LE4t$@4 z{-6D^=;P^$=gL{EKlo!TpQZWKa-{wzlSZ4)ulYnhLA%!a;C{z&b?15LrMT9U9O{|< zU2YKLVm;;*hZobF$35>+pY-CX)%_%s>Iv!73#|L&SM}3cr$75uuKyvd(<7XCbz_aU z`+d#LJ9;ti$-d33m0jfW>S*4EdOQtt{^>g}y(f)FF3gk0=;y?EXZ?KWj+7IkYQZ2$aEuwG2c;i>1lmp=l( zrlV(T_5TF4xBe7mW#Uz)+OwO+z`3q%44`csIRkULvB8GTn1BBSW7Lg*-@W|fNdGA2 zfTfs=(YUDPSNiY6PyQ+5i0=7A-OKNUzu>!^IL+96m9yZuVr*k}rzr9v)A1C~RU z+dIN@9(g->b8}N6!Y4w85N+X&f#iJ1ya;zJbyI6+V@K=S)^!co`HnbuI4td*&j(bq z@LXAYq;{T+bh}DE<%y#+vA-YZ#e#2Fb7$QZmz%R#NxxAM634hBYE?^Obh3ClTQaX+ z)5^9m(7F!W&rN=l&JVXIgXTHWA+q_v+J-gFqC_6-tV=*~qHCDY1zh1%PP#f;*WpOa zhPFCQtxUgh~@)MFQNly8@hA{y*po*zw@xZ0jG<01~^Q(9fhzu=%iZX zj@gydk1wLrk1x{Gk3(^^U7Qa_78ZQK=|z0NDUMlP+k6oN0lweb(a_k1&q;K4wKiVV zbz8ecGz2U0Rg$psx>JK2+gE`abvdm4EQHR~{-6G}S=~Elzcq_KD8F|a{Y4Ngi+;nE z(p`doa>@g9-2m$`*wFxIzw3&GvlC5fZ&o>83tJzC@4J80mXRFuxo~pJN_9VHvUw+(dWd@;FzpI35cm&g!vLFycp!?)5Qr*lWek zrtJ|-T>I4hI(Us{apyFjoN6k+NE z#nql9Zv9E(wwxrc?<8^iPZBqHk~sP<1UWwsc(x6uQst&Q+3eR?SgTi;MsS##PtzBFHZOL z`f;SktC9}S1g88mk4$)YBIjWuUfz;>oGykh)eGHgD=fHfUn2C1WkI)0uriVn(}pQ; zT_=&V)#FLBANMfgLFcEDJ5Cp)E5$u0aei4)+);`1^GI-*oWepB<=|>E{kxt z#O)D1{IQAJ;^RVdgfd!x^0o+ySa<$uw1+tQjqxY=GpzST(%i*3=cXX;8pc0ffKkAm z+b120iCu>u`0(X2gE;SBGEP6)6}lG2&nW~En!|Ybty(1*W_{kK!TkLo?_eCis(5ZO<1;)o2&OT9eguCFb`F9IB6ub1F9m60dl`R+L7aCbH~m!QahzV+1c^yg7pZJ!f@w1mDE;oQZ( z9ugT}8b3G1Ik%lR8k3Iw3Ni7Ij=z*T9Yn`pheyX>heyX>hv(=Pap@pB&Js~Nh>o)k zkB+krkB+krkB+krkB+krznX3lmkzFtU<9Ot>k{zjIP2)6BCrcXmp*UXxUUz* z&2EGo8TaiwXJe#Gpyx+UiKnLpOL2C)F#$g%9Z$ay^RYNS^o}+fLhdu5XR(iX+$Hx%<4u$jY$*(|p6$hme{5wn^&g(Kl zaR$qs5uyJc^C^qqWl*Kqe1%^5{EG3gKh$?}x3JuBUZ?nDOdq}qe)1`kx`0QpqFOpFB`$aqB;rvbcWB&#CgyY5ilJae6kHu!Zn<@Azwp%#QS3XyA z{X}7k)3*6zgw?Ncbf1read#oaXE(1J1xi$xlb^k*)D*q>ho1( zq}a^Q4+zEGTu;Jzh07W=6EWeTm!Yl02V- z;%maaI0&B;_Xz$16etcFBJ?fHC!9Zb3&nR?E-vC~^y}s=k_7sX zCD3;Pw`ay_y`7g}w_)fRC-)zb@i_dG3Ht0qyNjd$VS?N%68PVeK>umjD31U8P+oEP zPZRX~5Gr&W{fAIb;_y!<(4PamI0&Cp_;)kt_!syu#*>gbUN3^c+qoWw&lmjr7I69& zZgCJk2dNJ4f_;jE@OfvdFziUsXCe4#T9r-rzeyTl|wfe1YI} zHq*BZ{ZjG!e3m8fx!Le}+VJTz_+J^kI{|;f;HN?-b-Tpl>$BU#wa3x^+t07+rnu7Y z7d~VMtqTM_XK<^}A;Eope&*rIe^79hE5ZC)9>taZRUz>886!3!{4`@9)tPXs=Om%= z^(^sll{-~%)kpQzZ}Kay^fQIt*Him@U(cMOw|Xw|^ijDr9ZccEYPmSPyd95(GwSSYrt^L)Wz8$s-y>EwJ!{_Vbr<>Z1 z^!ZDJYk%wGY7<}X(~{Pgdq8mFW97aiIN8VI3k3K1Uy{IoX#$_wf|Fd^&x}-#Dz{Y9 zt3H0de0`LDiIJ;)GC{QlxB6(gt6U+=pBt#S@~;;HUmvX}iYtAak!$t2-{7|2J8tlC zu${Uw;wO9R+ER+sae?qZS7O{}8~Pmv*Z!R7PZ+%3(EppkHyPa4|0e`j`)HC~f~y@A z*LfVtwe{_1hJT+DIov^wZgOdz(wFz=p z2=2?(b*jExU6)F@t%rK{kDo8v&_hmftykL;ohz{3Xb1+Q{$c zOWQB;vGY}1&uzZeC-Cp`@Fyj_N$$SfJ3Ua*Ta?n21Gl^*JDXNFUqY2MuoR_LAVfo<}@f<-RJo>LbD6sD~@P?Psi>>i6}`LT_@u zJ~IXP_5iqs_1O=RW_O&@29J2``bmFSo|Sm42Dvq>tv2pn8K_eVPPU zxe^RoJY4x}{rC0J`measZ!&VNK3fcK>q*w&cK)gJAIjH0p`n}2@3RIk6F<>^+2Cq_ z!oOs2wKL(?K5A#*K1(I7;`(M&^-(*h2pyLdSNfZUfaF^HsGWU%)Xpkb`TPBh@>lz- zT&2HLJc=v*{R#SPH@GdY0fSpR|G?nZ&W8-XOZ;@x_D=b=_;EvT%jGS>eLDn5Pfl^o zm(D9Rzm6)LV<@il`aJ8GOR4ZD+~&*n16I#UPal=5&#k_mmk7P;qx3lsS3T`K$JU=F zp(j1<{Kr0T+WF7@hQ3dQ;%=WGZTa>ZdRtyPFY?RrkfDFX@PEnRy#{~P;13ymVv!3F z|ECPD^Ce$y*3f^|(3ct9^2r(8+Clf|5dS9(ADtHwZu8Y*_&jFly9{pUv39=nxS`j* zJjCDf*=_jznW5J`Jw$KyKWON`V(4EoIK7ipchulImU3L$Q4oJiKh@y<$^>`a14Q&+ zF!*dkZ}q>#;Ff-g!7cq#gWGakVerR{+^qP0`^+}Dt>?chy|!y%oBxH^Z`Wl;?j9w^ zUB@GzPmR#{d~|%FeA#(^i{Vea)Y*RC_E$YZ;LF|O;a5v|tK5Bkwt2YHYg;BgZGWYG z2;p{oIal})ZuQIx?&~?z!}S-tQo(&awcHg~`bweq^;G-+zV+-7d85@+>HpArs(nVQ zr_%qS^;G+eR!^n>L+h#b8Lgg5|A*F7?K4_EmHrQ{=f{4_cBJ%wXg&2ev(eg9>3>^2 z?==0`!{Vo#_S@8t^%~sH^R=(0Xq}S~y~S<6ZSkjtr%!(%0e>z5xAW>R3Ju+KK1}>A zz6@bbTV6_EpP)}td8vK;dhXX}VVmFCq2=|mMELem`bzPr zJ(d0v!Toxr_1V{Fnb50T<*)WpT={FgQn^Zhvv?F&`X<4BeKr}~*7L^&r*~<@OWl9f zp2fmzwDwf`|1Ntf|Iyl0>HjPC{C~-NANZ=S>rC`q39!J}#vlX6IJ(#*5rkk#NFY)s zz8LHfhu8!w2}wyMAqk{dNCM;p+oTpYNtBqTP?Lr_PApvK4Pux+I>9M!-CD$ShS%_B z$g`8WEqxI-X_eS*?J>3`8>07pd#`oxx?AUfoJ>0H@9m#-&pF>-d#$zC{(JV>e~OJg zwLFITLG7dIuJ+gbruc6NFD<8Cc6)=95q#%_oX0z2=8dpI^1!R{ok#RIci;`9yK0uQPVA?MSD= zZTc!dHk0QS387u4$F)3Q2VI;e^X?H6_&y)Tcvm%C-6&Hu#`2!SyMF+x*!lxauR1(XjwmI~*5W^-=m00j~7V2_EWs z#^5$Tqz!KM9Bn!J&O0neO0W4O)YGQB)n}#X8QN`CfGhtR!9%-g{!v`%>x4ekr__XY63hQIeg1Rl9Y+L%S*c zugh-Af3$W}`hRV^ef=HUP3eDKc2oYNwVTraYuoK7@6c{a|Ld}w@*l0;l>VLCZB69e zHHg2h-$vUmpB1|`3ZJX+tYd71!gg8dliKAj;S=h!L-4R2=?-w^zfEV#p*PU zp`Eqg9_n8#VHH<>rVFlmDu114sJPOv5qipfREcrjY4Eh%(|fPM?Ra31!L9ut7hLsJ z5&HvN^*JcG>Z$aH0$k~j2p-yB(>=6jnC{A7(_Qt{`G{eV zLw#(1Rz9JgD}-M4Q9jCF@tZ`?RYIWpD7}^=#g%@o5Kykwv%}z4Pt9*Cw_fDV4&*9s z?XP2OB+Upt<-W_wLH>3my6BGLeoO^IW2r9361hmT>G~npI@~+{;|j% zZFyAsr1Gfcj(T2c;;ZF|_*8>8%RTYG6Wj8l`JXud)oDIgyM0si?-m-ho8r3!Cl8yB zHvg;5DdUKtx8?LH!Bwv6(-+`spJRfnK1zQ)z?J@_;M7y|2E&{&xGkrz7~JZ4R`5{I z!2nme=L8S+jKr>rE4`hcVD;2~F7>zi=pOl@K55~v_|-CxQ`a}CT(w(ippVj*2_D)l zV{mIXJHOZJxhl{{<<^0EEoy@uZQ zlluf$JHI8*$KT=}1q=YF{=f5it3AItw0gIoTCf-C=D z$g}cO{)&$=^MNh@i3Yd)OAUU?*m;$~Z9dVn3sfHsqVtdy*K}Vid{j@RuM2Rc*Zprs zKDQ9pFm8OYl&i9)sI_yWil?cv0^6u)(c8j|d*>|5Sjh zK7E3R`X38$r9UBfsQ)R0TYdTk5A`_{;L3kM@KB$Z16=8GE}3(oK4Zq@aH~&|;GsSf z16=t}5s;m;+|Ey{G`Q8XTJTWMB>}E-GlGYDE)Q^}UnzKKx3vbh z`qT*?>Z50ED6aEDn*+H%HE zzIuiT`P=z>+%Joc_%Hme`|SwiP7wZjrijW_e4F88hrkZD%VTPoin4j zj)xo!0%aFwg{X98U5Ulu&H&pCtJ zd^qM3&yn=cD05u(Je*L^*+L)cQ)c+s`ng(g<)i0rEeZH2zTEJ!^;nI;?YK&_!EODv z&EWrF;Nqc(cKET{HQ#82q@Q|E$4J8T?Lz>$m~=v>Lp)&_590Xz)^l zw;6ni!P^b4@Ac%Pd7IvyhCa8uEb_U*b!{B!4;p+60ddC--l-t2`o2lIcNsjAemL>Z z8GNR}KW}h-ZzBCxgX{Ya@w*M)ZTQ?{aD9Iv{k;Z1V(7OST;DrL{{@4;V(5R{;FF|( zNc#H>KF{D?2G1CLyTNM=e!s!D8vFr+?=koegKNK?`h3ygPZ|0z8T@&Jf7#&LPbQyk zgHIagABca&;M$KR{#ApoF!T=^yu;u-4ZhdlzhiLir;-2H4Bltxf7jsJA0xfi;q)Fb z^t%nc_LoTidj{A35AlZ#uKgV1dknr(+HvAvH@Nm&i2uI9cNqF_7+m`&q~B}sX#VD= z*82IKO_A`Ihl<5f*Z3Z24T|tQ*~a#~mwcS1nz=^rN+{?F~2*9Iy9HG98`?K+#KGBt7%_Wu zQ^TFLdB>l}#i+R+N11nQZUU>0yP)^RyIOO{ZGZl@rMJ|^QpB;kAeYb+F=jSf*Wx0d zO(S5M_=u&ASbjd)(z3CmwW-#fy-g-td_pjr`{)}Vh-$lQqfq5aM8FWr$bsN-aYKsd z9U88I-8uBNZ7q#?zHuDljzCYM8+jUfK4tEt`k3S4<47qyj?`5R8W)$(YS*>4v^Cnp z?ZcdRSLgcb+K$f6HgU3Mr=aXn=-HabCkgz@jAt$-vZ0wHatEu&1<(1in3BF}^Jbj7 zo*(I~JfA_ryx|n_$F?t9{i#(ox7Tjz+}wDVJM|tl5wa@O+}KeoP#aEwzo(*VVZKMc zM4uuIkdJ#!h~K{I=G$0HKvY9LYN(ANsb?_~_biAbBlDu^^`TojYNZ^|5Vv-0ZvSjk zLuU&LbVEC$*V2ZHXiF`~0;O`<=R#p(#4vR)6eK_HUd%5OhS3?BT@zzM5eekkti=NC z3+qUGcneeLg()Z}M}gEpTgrwhCVwGoHZ|6^HnoL*l;R5-T8PgzZQjz--d4N5ee=eU zkirrO^GZ%GF=I_o0md=(i6#Smtj$L78ELcx5^J>)Bu@J+Y;|JQB(C|;HAYE?*425fBFu(>H#)!K&EruxkgJ;K|EHr~=A7=+bsE;veuZ6jh>X4?i1Pv8Y`;eVc1~kh`fL#6;njB@qPTL>D=qtZvT4p|$Q`3#aRl)gG-npL0^l!ZHxkx-}AOP{L3cr~>(w4-U-;Coy2$9TP;C?IIZ@K$*KMNN*Libzgeiyjk3in&? ze(}>df6+pxfcvd-zm@KHf%~m+zvb>1KOnDik}p3*2vo`z`l~Bd>7e?zhVQR=VE>?zh7Imiv3= zhRs`=Th@1$yO8d8q5G|Jzm@KHf%~m+zvccHdAXfggZZd@zQY!kIl1n)%KcWl-v#cs z!u^)J-!l8^{;S+qT*h-LN4l-@G53$J$oIprL7r;_Kum@|vVNKDUH**>cV$7YwYX4t zolmF%!tk8)6=J0Ak-_liC2|~V;%yN<;imgbv@AjYNXAzu37uX-Ssz6B5F_nY87x;h zl+PitP=4E`@$sJ|^6fVO@(pFRAbg0CZkNc{j6(Sw5(?%2ZGwCq@9sw!>q1#SN|4_t z@~fG+aFjnD|DpV&3G$aqx~*Vf<3jmQCCDF?j}jW5@KlKl;3-G%TW zM&iLnA7q7ur2J|459QZEPMrMbM847sn-Q|o3HkTbD8oMn<>Ta^(fCU_Op^aCgpZ4V zrpbqxE*YEgzXtyrAI<+yC&*vP!fNRK(@0s5gDy`0no)-5_n)}%YbE@}%Ku9V@n3VN z*VxwoB_=)^|M3a=@6agq|0k5MIQ@@E_=##bxrS-Q`G;}gkBu_^wF&X>j*0*EG4bz8 zkU#x$udwD9jYg>dBMJFGE#WWLfB4gc@MWWvzZ3?JvtRWn!xtpT&q(--rQc-<^~cIl z%AcDMzGjr+zlcsvT>RILGW;JUgl`;W_=5@dZAT;X{n1MhpMmgk@n6&CBWmNnFh>5;1ojp);AilUSL zlKlx@nP7Ns6Q2*J$LyV-)i~iPr9|j)ke+ByIaq^?7*+tU- zjfC_c6!|v&KN%w*=8NL;-^v;AfP36uvcIAI88*a7{JczNwCVpT;GzBhCL#S_5&0qS z@R{@RLX7e!b@4Yh&c*cSkYFf(B7nH~pB<(AOAtOzerXqk!P)%BA+b>Y%L)DWL6JY` zxa599S^tReAx7#e}#i3a2IPo|2iT5Teti0R(?I8Q2v);{5bpf z&Gg|P_m}K%7}xs|IK)VN=zbr>%5MM^%HN#Oe`~zfhrgKojS2m?fd@v)Z;Fxsu>|== z@ABb~`AhaUjO)q-`ROnEAU6IR0EO{?7(kr;Pl)^z^fWG%|8;~9F_N$Ok`JWcF}m^C zg8xwdcN66AP5baWFCzbs667~iAlzOF&quyegWNeSmv!i$#>Id3b)Igv(Ca0P>u(}_ zh&kG?`VcCI^7%>`%D*Z>{)$n`r+wq(Pmht$SE^9{hc1hcf2+t>dLNsSvTj27IQeBU z^7%@k{M0U66XbV}QvQ|%`72`NbDcpb|G&Y0ap}KJi?}GzfS^owQ2?Ct))}KF8_f!XJ|G zH5yQ^p{;(qFh2a4**?IIi-f-$;X|GbQvIM0xL?9E{_K*5@&7*(8EI9v^-{1Ng@g zwqBGVf7dP_V2~f(;3$7P{*|5Pt1TEOqkN9-S@+xx{^|YTZ=IS$ul=~;eVHY~eQJRR zIKRL;4X4+CfkJw3>3Sr*#dsgm{@w(Sp&H0@8vZ2S53JMpEA~4GAEqh&x*zuxub_WR zNBgl!)$nS+51{@FWs|<+H~0&?NI#BxKaBq{{0)n$s>{+jH}c*i3o9!fQAJr*d4;>H zn{eOFD{m=C*G!rC7XKNJ1%{Jp8(v$q%Yo?jO2 z&ZMHlg)=ilL%KSfY9M_M3Xo-@CLI;dhfy-Q>(r z55g8jnV|v5E>1_g`wNQ>FkJVSGK2evho2w~;{Hx-xewD<5Fh5K39}vdFBFzIz1}D+ncH7Db?$|9qMg+?j01JT zo-YT|1wM{^?n8WE2ZptUh<9-|-kHLvivIY|i^HsGU8_$(?>N7sSNZs*(zqgy+fzN8 zRo~a4_g^C1>2aAM%3=7fsZnJYY_?tUS{H1Qy+_*XeV?J}GchWqkTB zqYbagK4;uB{b%^FS4M{!Cx#)tUR^nfita?SQKMLYM41db{lE*5t-91rB2F0|cXqro zs`PxX$?`o78iu2P9sKv9EHWIQUEbc7dFTZ^zbLx*U+44Te%SG?!e}mZM*i~Uu?O*> zO^Gpln$NJSKKD$F4l|APIn8H7-*YLR4SgEVOn0U4nSf_Qk9iG;y9|BL_~>x=+{}|j z6Qjz3g3M6S4>LpE&bBP4QxVUr5Rc*mXP9288-Lu9ls~7B%%6DGip|TjuIXBh<|Edx z{%X&sp7|E}JcWEdF@bjbR8QLs+9J@UsxTD?VYFQMa_q}PKjK0AYThgw9_C2oh%$H- zy7edcExopD_1`4;&6?G<`u|DrOTDXW^$!yK_QCHM{G9DuGDF8vU;8?-7`FE|&%8Dq zTVJHE>ssB1u#DSjDfgKP%)>VAeEp3%5}W!jd2~i*d{p@xuot?w#rbr(G=3ZTwr^Zi z$+A;4HrliwKPOdm>zvfg38lCmpBp{7pLsGh{?`4tceeQv^5t8@Pk5cLf^DWk)>S@V zA{{fPE%AQ&@n)R5hT`pbbe_*g%sXsHIug?ADD3U>4CrP}=~}%WbZUpKumS6ok?}WJ zHvTy*KmOMw$Nz6oHnZ*L$Z}bSI&C4+b$NpB`{w6#PhHuydJ*V`pD9EeJ|1oD1hl!A zqV1iCHuy5M;g_QgFK~UAs36r?<_ zuIr=9QpD%!!kL4^Q=*}#3$GmH zSTcAP*CG7Bh5tePqY@}?MqXZ$ik`rpCx=T?GhXU*?FIE>UYh~kN)Ai_-Hf5(Cmy{d zdiChwaLu~H%usDq^ioeMs(A)=r;i8oWHI_Px51Vlg-ut&wjY6wZ$%&N!|0R?o-@%=K^&j%j3 zc5vYO$l1RKal6U*F-=e|57b>3?Y4~wQ@>oE}b{XHi5AQFm9elI^axaMv{|)}J zkIUhKf|>v6^%tYwp(~=H{SUlrudL$o3Fqz$X0uGJ-lGhgb5t+^LO!lDW4CHanBFonQcNzamqb!!82Zwic3~To4)(| zUw^n4dKJC)g=ba9f|k<3?t-EROU6b+D(`gRl({VXl-qSr^&nb&U=wqxeY~Esif<0V4NF92hGhP#SZ9$rSe;w`b>!cTO-(Pq&@|J%tMxU_@ z`6rFMNBXZLy%^^HhFq8)#G?!ScI}&gAAZ``dl=y|$csH_JMOqXV*c7w2YR#(S^E1M zN$>kgSso74{?at`ca!rh`@2kQra5i3e_C{S5M_9O;b#U*QRWBUn;Clgfs(<2@zFwJ zk6j=Akn&QOk*0Pqb@vjNAL`Km*#AK7Ap3?)i{6P*O;6$4!Cvs3^M&Y}C8_Z*J$6}C z(+eI&QPG2Fe|}grzVG2V<1<6_`wHk8Kea300oeaP`Vn6y=vR+4V%lssedHIMKl^sx z=Ho zz7NkwP&X|d6V<#Ad6l-AgKIPVo@8BxGW;`?-2v2HlTg2|ce zNblN0U*}~&m%a-54>atTPr3VZgRb8MJMTxCS}_%V$fwL>_Z3Wg>GSu06yd9a}OJNt{5%i}XFRb={=+__U zL0iXq<&G<^e(*ljq5H@1{jUV==8OYV@2wiFM*iq2{4G}w@J>3^hjPoZ@ne+tqPy=J zbb0-~#~)^0b^I5@ju&M<0X?5CD0=Di`C(4Kart&|!_wZL{vy5)JL?XwQ&?AF>RvH* z`ANZ)moT{E%F&3t`0)$pnIYKuzd`Qz5D&Z~ySkQTIWz3_EgcsfehqOR3t6)db+?M?c}h5kj*7hQJMg9T$Vy^jA|K1}Zfq&ak>9NN9~ z-NzqZ0h>RI{C^zz=5^EuMH|uQ92`FU-K^}Zr7wUw1n)vUZw^;tf0RvUCPg(rL*5yG zMFiTJgR~KBF!%MsqPgs+T#xusc35X^M_$&xQkYiSt~>@Bd|!pRHv!xN%Sg^1hF?kSm! zcax9&ym0*7TgOM6PQxBIrl#H5gFKDAbS3^jMtht9&N9M2B=umvh@KwC@RNr%C0>sV`Y1)IuGL?G?(Bne zO!De<)H{A+G&G?sdXi!5-i12NjelM3c=e(FW8H8Vbpp#J8b6nh!? zV_!N#-KTo6Uq@T?qi)9>7JrZTB4S~@_qFC^a?Dc8Jp0q^Pf#Xh=XmFjVT`8VS8y+F z;QKXNuCn7`cqcx4`wHZR4<9&z!Hc9Qqb`fK0hu<6*y~=iRsVhTQ9~i{D2W`lA${vg*Dm~`&A7-1t_ZRwiz2WQk zX&j8DNzEn~3W(U%IcC z;a)&EzS}wf*Svr8drv)lFWTz?v>gNglIgv#u;?YsokY2(9F8OU_gaSOd3Crlha35? z#N+7%yzXD(>3jY;9`FCBcsvc9HlqI2d)Aw%;|qPex8mjD!{0;N_;~aEm*dxH@6qnn zy);~T0O5R}t!wo?pDyUV`?{$2v+qguGLOvpX7uEOJEEb*xMv<_f8chhi(!YndTv%n z*XpYh%4BM@&o^;pn`LBi63AhOds}*QW%IDtubJ7j1^=%u{vTsVdykdUY z{OWXRb7yDAmJi%;L%ruQe?xowhSsJn?RRZ%XyPVWH*~hQw>C7_x3t~R+WNVT@0Xo& z(hZ9jR5dPM+_~N5!_l)3-1i*re)4=Ca}Xnx z@4n^m;KM9P_BtFRzJYtl;WT8v`8{Gz$;*yIC`!{h{H1peDF>jOJ9?q|Jw=l z;}Yo4Cg9vFI8M*^Cg9&o;B$LIyrv}BhiApa$^B3Q{o(|?CPB}867Y8?@Y$T85BKhk z)01;N;_x{MeEv28->TA%lLp|A)UsqQH|4xFQzn#GU zmIV6N1iQ5-*dLP|V&hwsK))hEpUMP2f8gwpt0!IC10F~4KRL?PGuj4ltd-Q?J)Q( zx#y)@?nC~}hjbzTy&iUZid+5}gO|xYFRgNqZz_57pj3bA$v%QQtN%g;aqW`(P*07Q z;%vX^G+v?pVZ4-nj}PYJg?H4f+i!5I=OKezJr4`6`Y0pjD>}th?o%EfVduU8SNh|E z({5JJ=M7#h_q-H=j*j&Bew1}=@92n^`&;*maU17CT<2O7pJ(VZhThs?x!@XK4YDG@ zHC`(P57TQ^fGho4!KsgxTPJuZmwWlpDXx5)1rO!2zM@lH={p6dTx zg9cAKN&ZLYM3TS7k0sEbOu*Sr(S>{l67aJLIL3%$`RJbXA^&1SuQnrtbOJsv0bg!# zS+3ypSY>d`XUMv>2FEwytZOy6OdE85+Y)fy+n(`a8>;RRL!VX<*T)TR^*Lg2nWpGM zoiw;CLvZ*RgHJR3*-xVj?K}qUpyHOk*x)lfiTf=z_;iDp8Qj`U_b8%VYquIhZ}G+i zyfXp!??FCZmd~C9`o|OS!wLAY1RQhIoMXIfy@8iF=d^zCPk6TraLv<2f@}St^b-SI z>5B!YTw8CH8r-B8bQ`%=pB{tT`uw25Z9na>!RM+_T%R&HC+(^` zW^kMC#|01Ldm_M9|C54i`YQkD0$l0)1rP0fCg87p1_E69yd3aX`d0#6>CXus%GFnn zFur4CC_!=MgE3s^!uU=MaHZG&cqn&fz+d%G2e|T?9q?EB(g0WbO2I?9)d7Fyvn0Tk zPbT26^veTW={p1u<#q=AmCx1yS3cVU{z~5!;7YG&Yfx@pKS$_^zh9Z)dd}dsoti0Y z0!W|NP9@;W6Y!k|$FODA=~-u?KK6_!Q!K(6YqYcEt!r5`kMtv>j!QTM>UczNdfC-@0FYPf>l;>#)#=`kWA)a^J1Q zxb`RD_PxW>7ny#q#p?`i``gbOe6f)`J)yrhQ}8fe=>S)I&K5k3ulB1IS9;s8w&iGr z(Z||Kzb{T!FTUpuw%4hZ6b^+W!gVYCnhk->u5vddl<@mKZ!8wAbo2J7|{` zpC>r^+kB{Jg@ty@B=A{b_*gx+8r+U^>Ue*cpN|WDDECBwtNnEiY-qRVgkEu_=bk)t zVR}VHIo#%-F@lHs6a~2Q=bkTgD%U^ZTS|Z{y`G60>N8L1iQD|M+~C%py9{po|4$j* z_Wxfoxb2_o-oRnHbjYXT&<>q~hw3V-T+tn9>K$S9WuC$*C~VB^evT$kPjCWs?%?Fq5hRZ5bBu`oP6G+ zOmJ;9_;m*FH28ZBzSH2=p1TAO_1P2P`aZT-@KDc30$k}I7d*7*5rbQM9y7Sr^SI!l zo+ktk_0jh@rB{8z_c+D-ja*ya&l=q7IR@!L$9UQNY`^ze{fmWO_3@!G_7dPXipNaB z!+50wT%5AAHfCtCe$3_a!qW}SYgBcG{R6yL`Uz2Fswwn~wT^&3IWm*zbLI+}OTfV=Y0}JtuO>r!tFTj-0`@E}{2X z!8KkQWKi%hUSrJrwar)dJD}xnzXMu4WB8P)P+U6&5B1USbfG>w3?JLy+i!5&KRKR& z+i?R+&-qAnw5M$cb=-isZBOm{zNKGf-a~EsXy3;zAARo*`Rn_2h@UY0EgyYf4(ath zH^hs_9s4sHUIAsJWR*E0j~6q3r;<)-2DN6uQleD2DtJ$6!2I2 z!vU`J`kqd?ww#_6dg8X6o-(-AQ@^u>_6fhUs9b$d5A73vXHojIMy}OUzmJ4^Y8}Y4 zk)>>l(Qyewo3$4Su=7j~Lv}ZXGcABty^B6|;x>;e51~w)HJ-EuDAg za2_XSPhZXka0e*kXexVFbBJMbl-#j_2$Fw@VN5pD^98df z7G~u*9|@sUZEZN;S`(W`3&L!l$8pz~v9HJI)pxdUY-w;u_GMX({un=)vlGh`!UOyu zMo+e;WqHgTj=aNJbNq29)w%QM{5f+xsLh`P7jurAz9`tT{7c+p?XH=HnqyG+A%Fj8 z(yplws-ZmhB|H(6VW_NMCVQ8EBh_UVJc7U%3a|B|1_;A{7lA{Jw3+LCi0KlLeKba; zNS+mc5dDid`CEnVpj`D5%K8$*hZt$si2UazAmwu?FqHpLLi}e_DL5S;^G_pXeJvsW zW!L)4w;1Ve*!Gd{wIsQ#OXAe zaiOjM7JeZ{^5^B_*`SQ`Q9j$-Q2u`b7AJo|CY{ZOzjdLk|A6#j0So$O{jHJn1t5+0X4H(kOH=Ak+JDcq2d z{wHto6uX3w_P-MUq5U_&exYmznIs*hGO1XoH{ZX)@HZ@4SXSls3iLmICqaAf5#3v` zs=Bh;`;LBZ!M#*mT*h59IA@J}3qIY;eFcl6%+T1IGedugJ!{6NGK;^Ga$VLvAkAA} zx3AEzg`1VeRo2#`Pggt#;klVT< z;gxf4QRd0d;(B9h!kzoDPMrF*pbJg9o~Y!{EARbtE?(n4 zoEiGB7m3$ttnH=V?=)WZ6B6Tf;GM*)?;`QaOQ(-sJe`ip9*plaK3q3UJN&xS>HNKa z);ol?v4gb*ST9_Nwc}%4K0J#(pehpG;3!LOugMp% z_mr+R@51_De3NzS{bjGYxi4bP>=~?`{i&?8ML|8h6>EZ#NtjPY;-VVa5oV~t$=jWma9Se|baP-n)FhSNioV}NP_Zf%Vw|MWr z#^LsDJs0lZ-kQykcAg6TM_M_Gu1ml_j_6G`qZuxr0OQ!EUBl(_2=G5~^f`MfeTAdX zrI+H5IXssxnwQ%ho=Zo?0mth9ckqad7xq4g#pfmP`C0`Upj4xwDzt*r6nZfw@-vqo^0E05Va zMsej|Cj=^2=^F!F>9tQC>a$JgiL0#$9TS{$>aLS}UQQUi#Nc{M`f2)Lt|6|ne%W-< zal_H3i_-tP(na~#Nt`d1E=vEaq{}R0Uz;v=ZO*T1=UYX_Xzi@@zb-o~|Iyl6>34ujkJq+9S%?#=+m-dxV@ zl542Xo&Z<+M+B#ywthQgaLs#!jtCy=^OWGB+~b0izwMk#mVZt1Aq(z3CmwW&7Oea?ASY#iyEKc4Fcp>tugL-{!-SqZs5 zd(JZ_A?F(>A?KS5n`L}~7ls^lPSOR)<3wM8oJOU0)8@_Xn=z2v)LK8^eZm;UyG$)? z|IUL{Y>ei&wRbkn|Ilq8fB%-w`i48*hZZW)*tG7h4Y3?^uR&hL?0CH$IhXs5^{x1{ z6XDYX5;bO&`+xJO_G0u?bG=B(?6^#lLhwcSTZdwq=h!nPCPPnIzfATn|7J}7V>Aze zFBJY{Kp%$Z9v>mbAcu;4K%Ik8j7P>(;Osh`mIV1a_ax*UJ~t-FpFY9MpYAVi5Fl<$ zn{zDiH^P1#0H6!yh0otekY5%fKWk0B#YzRsn&nEemN=t#X+h<$GJ2NA5;^O&SB8@ zU&Cnp_4yJ6j1$!*jq@%cWcg)(K*MXfT8i+YYzAqTS6yAZLLKA6V@$ka@jDn3FR!X9 zt910E9~0lTfEsz1ahD9{xjCyddTzf$d-e`|c5$D|S@7dtmg~mJSSiLG2X4e(hGo&+ zb+<)BY3x&H&*1?tcH8pC(YH(3RLnRd$HZ;;^Y{LF@9P*Vb?5kCte*R8QWx$Q8S2u5 zu~F5f2fFOJ&7b$vh5ZP-u%9<|sl)hZKgL13alT9QxM-*gd(~(CCSbop`mN6_ZeAZP z?#3Ad&6A^{Zk*-QjQu#frgHCNoQ*OgGlcYYdu9KjjDgopb$p-T**>qkG0&s1osDdUYZ0)PeDISHuDH0e3xty+7~Aw+P)& z^)cLYZ%lo@5B9s5oU0&bKlqnI7So0NGsqA7fKfJ|`*2=RYJumidr7B(g}h0N|2#XL zUYHw?ug6%ojzyyyD%QPznO{O)w8tBtl(V1seP?-QXexB|dyJ+IpniJdICNYAy(yRZ zhWdtj_TxLuzFTm<59oB?(4K;*3ZE9U^6~yt9H;xz#qqkM2`WAc*{XjZWbmGGc;k~x zv0vyj`@yeRpZzx?pO=Q0`E#Q3z8fryc27s#BE*s34_?RjgV*GoDC*_Tjli{JOtk4z z>{E^Jjfa~dzhr6prGlh=t0(1j-yVFg!h2vb){4zVSFAX~p1E~Wu23F|SuZ?}bG7_A z55@TYFcse({9eP9{~*3u@f;MFk5LZocLR6k*0Pk;J5Tk#i8BAjCkyaxq|kjEnRbCV z4xlVEp55-e7k?Iz>SJ}mxjS>I&)M6T!PYlH2ESDtbM{u-zKK2Nv)^Q3TgrU{_QX0k z*fn)v0CfY-N!WB6aq;D43ic)Sdv_xb&CS3L-$i~p4jcar^#;ESo-T}P9&6yaVJu(% zT&zrCRM~^QhEvG%v$$;-&ck7P0e9zI<>>uBwV5$dCG*Yq5a!J9-_-jLsGGk0SO$Bk zQa;ZWntA}~;>tM2!Zy8zy*H;p7w(;ncjDp!=&}Iy$8p%5IA!5Kue{9?9a1s%GWnpd zR80B2*ZS`noVnxA%<(pWJ}8g=d(fNMuRcFr^UEd6WKnegRZQO`rui72g{^Na86k9T&MdKUuOGY6FxtScrjnGY~ENIZEC(U zswu^D(X690zEZq>HPYd;+owh~HzFVQT!JfTmSV5*ZvaE7nQ_^h5ISYNr8=>E`Xg_`*ypF^ElJB1kX^x{# zZifDS6`7HKY=hwUMeukO`=kG-3E1l$Iv!_xM7yobJv7TX!COZJK%4hyWx*C%Z5*1 zxe4`q?s@i=n|knFJnLTyfBQTS{;n*EKBunSGz;faJd3t@1@!J77hQ?H>o*O6C*oiJ z+`4FSKhm!U^)l0aKdwdPsLOHQ3ZLA7eTGFye}I znH;7`9Itwo3(DYke6&Zb%j4*rETOaQmbO(|&ol4*1nGlrW$|<9Z%o8hBKMg0GYbW^W+_q-)H&R<>?VLnBEUybJ)F>kVMWgW+Q0_7OR8a71z zr}odmSEcPS>Q?OO?b}c7cY%Mg^+$foqlX>xp7Ekv8OI|hSIz-s zUk34+<>KNo_GOR`F8`=}rmM>DM}G)9;=BAv9nluB9xa}Qbd2+Nb_()yePu2Wp2m0h zq&!$(k)vZ?)xMMFL96Tedq=jn>@$_3Epq#=ugJK)=zrw;(`*Z+uZMQ-3FIrby+6Wz zo^{# z!Q)?$Kl`MfU|nAMHqSis?P=e6ln>}xG&8z#d^PGAoH0=P$K5lEzOd{emMhk|KSlVx zNbvtZySzCZ9UGfEn=xM4ac9%roVd)H=Glji`pxwlFY1v@>8rNeib92k* znzH1LKZo1Zn}bKfM%gm%AhV$%gj+u%;%M(St4clIgVdtbKcr zbA;C{jn_I2s7w53@*1NH&{+2=3?#+vYkuAhFrgDQ=2J(#W&m12apfdQ24%b|k^LXCj_A8(F`+psto9m$=o^?1!Tl1Y? zKQwX*G{`AC`#{otEv^M- z-{NKo$8uNTW@dXp=Y4aoO#x<^s&jb{4_7!oIeWVN2K*^UpR=dSXTb3u0zSEP*@0)e zZ#(*2yj=bVj9G~I@`tb?)jR|}nh5nOKbEwmP+mi`=elH1H^f&ch^yX*{8tK%;@Tpv5ZLVsD7Vz`vGG;?DYsgg;M#2HWvP-w_6i=#eMIn3 z?&F3}h1~PfC-~KOW#}w-bVga!&@h(rbSqwDZeCPu$u$ZSci%&x^I^jRr51 z`%wQ%!9zVWf>W-BCA2C5Pa9nGDj^L^KDP)BFG@pPc@nqzZ3O{wb#e{$Zw&D3|)jzb) zR-sp1%h)!-)eb7RE5Mb$Tkz06TJDHj`|LOLHr@LK=Um{7-1B1d2?u-CRm%FDa?Vz|V7v&1#`iR^!UY7rHgKHWQdd1*2 z9nT6L>N6PNx6AW6xrTb;rP4XYmA**uFdg;%FHFZWp%3-pz%-rm_fIJAhW`x;;#w;A z>OH{q?<;e6(zmPRC=2+kB|| z359r%@DK4r33y)uelh{?PrzSE!0~eJT&T~a1U#L9uQIqTr*#I`w4=aA!9)9FyxTd& zH~GiNueBPPE*(Oz>812oU+5g;W!tZV2Dkbg3gn8|=x~55f1LxTa+RLrCv=J{{V^lg z>hqkztv=5Oay?h<(;48(zh7{btMq3AT z+g^7Xe7>RYHn{D_+WnJmHuR4h`u||?g9f+uJS4d0D-Ciuz|}rS1P|@`RDdh}F~LK7 z7K2;1T<=T30tI&t~YzyS7 zK3xH>{C5bha+SV2z?FWN;GsS}2DkN|mM_xVdT*5oB7Tz!#kJYs8kW#DgIoJ|2_D*C z`;&^V6S{7>hVk7Q;7Y$o@G!oQ8{EdX&)`f1o9tGb#tasxRDDz|2sfYeK_I%8^H72{afr5$ zD~(vcrLEj0lw_(cE%!9VDa2VJGVdfND&j+neRR3smGAD3Chj_iefQeilw)?K9SO1V zU~OZ|hNdl@>+a?x6efq)3)!)D-Q9jpN^QQE3)Hk>b5oP1rP*6g(o;9m^UOx~!#LRRtQPd@qS!-f9y?7QfaVEwyn3_}D)&d^OG=eQ#IxC3We$%bBTiUX>t^QWB z>^*)VqGn+Klqkwi@j(`lX-MJbeA$4oXIZVc8~5N_%pYvix7BacSMK)d!%yS~;*Qw3EaGo6!LvR>T%P*_2)|JHiFwqy?@tQvLHLj- z{d9jewGi7l#5-0zx$ZhuI+22ss$3PciB<_$7%q|H@ z`Qz~)%6}kMefa17CHou7Kan86 z=v_WYHT>x)pR;B{`G1rk|CGodU|{1y`MnA9Gtz0a@xKCmLitpaDu(4(&o$~avUwZI zzd8mZ-HJ4SbMK^#|CRU;izK2Z?z~&Y!bTUwU&DJ(e7{JLzjdCcu=O{qG!3uy=RZSvil|VA za$R+~zj-0RRUN&49say83+O6XSm7S^m+Y^G)9Vcq|15#r{7}M&xQ0{w=Mo;5JomhW z?+F5E{FV5p2pE@s%`({|E#aAdv+%Fs)qbrA9Lgr|t*k8IIwSzuuuBq#$6Ds9s&vkk zXYFQelJ6+4L=k8@cg~94iszo&TwzV>!aPnm-uyZ zJy_pRG)|llF=%Iq>uqSOYYU`#z=)oW|OV+}h8` zt+RQ|t@rWk@)*BcF)eby&;sm|L$n4eJ%J#`+EJ zBU!={zh^(z|Mg?-PCwQgVyzt39!`UQ5&ZqSihb}eK)kTtV(v}g{S5XN?FS9R{s^C# zA1#>jQXPgrb$!fP*n{`FW-#1Casd9QJFw=o#<)d*D&R;S=ijt z#yw8T$}1LBRxMmqy?E(O%a-4K%fEwp|C3-eIy>i|b)1&XWAwya^)%&yTXMqm84 zVSZn#=BBOD?W=CS?T$NE*5V%HBo)}Pw-#uYki)fZV=X&Sm-R)UaO2;Y4avZ_6)Vuf z(Znp5#7(lY6lUN}Mx{m~cJM8?l~#u|G~uWe27@rP)X1@;#$WGo5aW=(BWqRcJ0yws zK}mm2ui(*rPa_t-D`Yf4a2*poGu(y3Ykj4`!te|mVx(OoO~UgMa3ZdZr{+Cv4?hYl zPCnnE=(IlePa|cmfJdBs-NSyB@S*&;v7))~CrS9OQH@Ru-Fy5c`z!2R7=m}>pI8|m zjQcGKf3bIsuON)_G{K|u65e9G4{85cuo2{vsp=TWIJLh*tncFN*CqK+<3;1Hv{xVK|8nX-$I{+tX{WpXeg6Yr1g|fVS03+yJE9@V@4vq5 zKWx9Ii_?Mjs9fssBJ}a^30Hwn@qw-fzPx1n1KmpoHu(21^jkL3|Lk8s%AtcjNc&>E z54iRGju-a1ID7jYu;Xgj^JB2>xqh8}2bc%rXqnl{!caHy+B&<2_75(9 zc+xi~KT`bdsox?U|5>-u&E^l*1nVC2e2jDd2r%v);AYBmBh~q#-s5mnIK;ca;kMV} zJ$}pKBU`Im9scWk2UrOHwvX=Y0hJEnf0F2IFH|QE-=2V%CE!OBaMtN@{Qr9b{=o#i zE&-qH;+wOx%P*i^j(lP;3~Ti~Kk0JgERKy$ zZJi^#&O*Mvsk5Oux}E*^RZCYd{U~Ng;4r$)cQtf!4_SO~#zRZnhIop*I@eb#fy&SO z?4I`t-G6H@lW*ikUH=JO72?hO& z5&LPpXur6=_*=k3+2lPa;GihXOI-LH7A-1U^bY#+Rf{SsJ^ARr82w2D%hp)pTph8nTAAkVbw!dX=y+=KsJhziZL`zHLSFrM#l?lD%Jzu%Icg~fB9 z-rA5tUpD{Tr{;Nn4<(M@58_>b-vfB&6Z!G`L*01ptK|1b(<{gG(+>CJ?mf7F3z+V2 z#B-taz9&_;kmLJ)yx#A_1fCef=YE77!=HgMe9!+a_S1{#=f4MV-=uyghvC_eFOly7 zGqAU#50jbT>1D4)`1Aa#d_Ts;?zL2ny_P8d>iY_r3VD7XfZvT*JbdT<*ayzpG_dti zIj5@#`>}OnKeyCaymG_t88nS=;QfK$6kf;wjlQWIkycCby#sADo6!+|DLD&`{PtbZ zwHj@6EZsiY_ca9_NV^?+=pI|tf%5Tw6B~B>r9Q9Nuu1yN!v33heU9Z*FXx<5e*KhO zo}>Ih$k%Tynh!MZ=oMwpeSa#*JI`xscK=3xi+O7U_ayb_d0lYHFI3?a$kHMz&Yl zX05@!J!fnl9xI8#b+IuX@y!VDlNUS*%ms~}MdpZmXXFNzaqo=2EeuZd&piqB*Cyb%Ch&PW0smS8pOXpn{Jt0$uZ{%zFC^ffN#MhA_Bj6g68Nx> zWWU?F@(1kw4$tLVSN4FV@lVHhJ(;HFo@cw?k>7Pn1AMAHvs}~ZJFI`o^+^?1`f4Gd zT(n(Tx5D7*ESlp(`n-2rLvP0fEFaoLo!WzZrYneRv)mJB1EH={ZisV!o4RhfA+FyR z3H2D+e)s}>&Lk~LYGuhv|U;Pe2+@^1}(Cb)) z23Zo|nywkaH64|Hd4Mauu2G|0o4%bwAL_GJ@KB#^0j~VJ1P}Gu5#UO{OYl(co`Ao` zYj1!npGN}zO5YRUO21$5&<;loZqwx{!9zRr1-SA*CU|Iv;{mSpCj}4nIb-m&Mhe%n z2Df?+3LfftF2GeT`fSdHdX5QjrRTXCbfKPUgIj%O3m)oI8sN%*p5UQAWdW}AO9T(| zPbT2+wf1ufd9V5?pA`XrrC%A~N?&8-+H%xr@U$|)wbS6X-PmSunU3y4?J&6Q1?@Dr z9W&&MD4oX3KcV9+cxcZa!^gY=N5>NQ98ci$oZ(ZfLUDb?;Ij{`ZWQr z^mT%V<*U=+X=Q?|woM%4l~1hBSKILsW4~s8M(+K_zSzVP#Jm7ux`bbh$Ax#;#a9>P zVQG|%E037kk$*Ow5aMvN%@}ir3U2UuW79?~UE%^Oa=|Jd-nQMfv36ZcXLb!97fWT= z;Q2WwgzDF?Z)t17uyo!*(tfoR{dLpd?6NU`o*M+X2_Bq>l8usIg9op5Z58WU+H!ML zHr~}rm3SF3$3%{avnRCWhP8DO7&U41E4|{ToPalDZYP+yd%-!foxfJfjdRP3?Ekij zCqF^{lPqd-C;C6q*_tNxfqH^G&wUY3#D3YaYKFT|c4)KG9ck(G zN`FlQagd zXM$n;E#P|~HwNzY&5o`As?1|Sfx8^Ly)B7=w{)d<+e;Vh< zyns13FJk`98O*tVa)%Tdk#9j1s#Vl z=FhW*+*u3M>(b~j=KyhT4E1q(UCwU+{yBXG&dvRL=$oGzA`QO>^iTF@peUc7 z2TBI%*Hc(B_+y0M|3K|vH?AD7%{YG7IR5=OYY9BTU!GwvhT~Z=m(IdiE#~t3c|6nS z60b`~l|A5fy3jxOm*BZD_gshPH?YRy6nMUgGiXk`H3L)e?SSVL&4m4@!B&1eICGU> zOF+Inr)2O_t}ozxrm5~b0%U-mw)OP=peJ?&@<`{uHSimTU)Rtx)%y=Z#-BjP7a;pZ zgw-_&7)Zdk4Zj}Y4Xp2Yli}VTuG*R~#?J9~>X!Z1kScNC8g#55~+4{+}d_o6mX& zJ7>k`;b{2c zY25|-3#E1DlBkmD%k(6j%IODg)3^ue%e-Oq~^jI(NR&f{TzGp)P9=LgoAeK=!`^j*02qfXTNm-Qua)VXs@CeFC?udtq} z`(4qMU->}p9GMwkD4gQ+=1kG*y?n-<6L|g=@@@BoX!7_}*Xrw1MISj0 z*`(>85mi2oHfaFox0Mt|ul@|zqSW{a16M>(Rzb(<`2RE5?<~T98e!|8JM%unc3l%4 zuE+EDZ)KU_x-DOyXTb9r!ML7_YqrjaU)|MF<%=%;_Y~XRiC~j+H~}-VYDM92OdhuXZx;^Jc_!+ebbeC7MT)% zBkP`7Gd(@?G3&4i33Nvd9qUZZ^IV6=@1Va-y}kVc=j6SVP$w_NIeCnStt(X*+J)b& z-^TxcNr=a+lH~Br56a`Qgz)=dS9BqZKaM$&Ta z1b(NlOHL<-|3E^xl!R+WyW{HUZ($0TsiT<=Z^JHskNibG_})^?XS}x*tB!H@*f+at zHNKrVnmGSi@9tWSu{g&I@6j%9FqFGu?CXNOm%b<2b~?wvmow>CO1f%0kVafo_czUb zoSxg?n@iVyD98T*`r!w79%=#lT!rX+jY0o=;rMR&$C!F zz;>|*S4|hp>8Y%fcZa?S{wz)Et^R)gkj@EW8|&|Vd+YD(5RUH>d{-KhHPvanyD)4Q z+9C3Tt*Z3CALsD#p6vQaLXyKw#{?<4xjeGisQ@?PmOmkus+G(rD)yEzMQyQ$l` zh5&P54&011hznO=mdi`qO~1RCY3kM-+yYzQ44W^9?U$i1e-qMeX)n?wu`i!0&+%kC zlhh6z6}lAaW0vpj=#TXyz2o#eEob=Ix(Q<#v2ohBz{}6pA65DF2kqhG=hIHpQ~NaE zhYt6{=1fcUS5V)3y0n`o=F_WW;x%`oZ~f%YQ6_$NN#@DYYojaYEY9_Lu0fxtAMFU% zqs-MaaUkG4X8(ur&rlZ1l<%ighpW*Rcs+XX zF0dVWrysic`D*!o`o8Y+C-V6VuFNtne2-)sW#+57`EA~hWjb%Z8vUFOT>HXy&&!XX zo0AVe>Wc3Lo6b&qbjHDiv|C!$wR(4g-#(mc{nZ4&(~G)RKak+Jy}E1lwgkVW2zOV4 z-z+(c+U7ad?QwZ-A83=_X_kH*6&yBacI^JBh=gj&g1uetZ0FG>>Dc7g?u7`jbMxgoFAQp`T4! zG{AJH_>*v!U>Uqhh3*UoiZ8;KtdiUrj0MNdajSI$(02BR=Ww&bY1w>tt;6js74P5V z@Zf_1yguS^8ZqBx9F7tjIG(qZzgpiDEOfa2dhGFXhuc{^9-rrM`?c2N?{&DHP2=(F z9B#iVd;Gt`{`Ootmmj=W^uJ zXk>gn{mAtF8ze2uO6Zys@T+0BIQo0RAP)cM1iTF$(m480C&*=oB#!=D3G_=6aISrh zMS6IzMc7g54fY;KOqndgAa067>0t1pYrrzuzm zwv{XmaMnk3>?6=|PK~86^Kced`f9-`mkZR@t&khyA5;+6w84KFJvpbBZnSzT{lB)J zOTC(-)>G-b4quv4XhnH8{phv+i+&TmDB3z9dVHbCCrP z>xaGo|6K`lOz^ONuyb!&Zz#Q;du!{50i%ztAJ|^d(GFJ6>4JxP&J1vsn-)COQ|HVo zuJk%LmU6A0b`Gr7b9sWEI@dMSQ|G!Wu5wo;=vfosO25{~wR*N1+}f=}aFy$=o0~JM zxbkPekxuR7pHNN%TT^i&FddH>+@|Am z2Df&5UU1b%<(>*~mD?|PXty%~uJkVp9_m?)egYlwIsVrDrVVb(^>TyTdZW?cw%*ug za9eM58~l1B_i=+`yf^Fg+$rj5=k^{k^cH{4;CXfye1x3?TgeoWW3^nL;1xlMZm@KRb}?wZJ$`fGd5O z;GsUt4Q|WDDuY|Q)d(KyxhB9>?pnb^yVV7_(l-kp>bcF}R-Z1xLw$Axxbp87Jk)1r zfGhnT!9#rx8r<6Lh{3I%PYE9C*%#m{_n6?Jp2q`R=}!tC>N#L=tLLD>Z8?o(2#kCz zUTp9gn%QujX>jek(tEbSEg!WB`P=@a?XQleKiMcckdO9(3E6(8?Kf^U^cLS^@R@SY zOOM=>zokE9aND0eVsP7^95DF1+`P{CNV*l`y$}4Ce6&@4dNjCX|QGcuF<3g|cs9f!LDXwx42Kp$y_Q%woN`J)YWA!{?aI5F9+D}utqwS|D z{mVult0xAloul2Xp0@vH?KwT@SEzkv2Dr-A{+`-R>1PYQ;!3Y;u)=(pNzk*#;8xEy zfj%mCZGfxXI>A*RrPuza;!3~E$hG4P_I%T&$^_TrhCXBPeuLZkP5WuIgXLrUUABJH zeiZ4iH~g2F_R-oWBe>>&4Wj)h#WlVwgkJ5S^eY2g>9v0qremYg$L6Y)UzhQRj%&+ ztNN&(YlU8MrEg7;+wuRg_a^XMHPQe0M-)XRDO!C(l8}8%LWQCzD%$L#Y+0gIh)O#p zX;-PFO{IO)A}a0sZf%qHLX!WSduKGR&wYBH@Av!rF8|jvFYe5J&zW=1oSAz+_s%^t z!{JZ(L~wAzCz`{b(9h=Jggy)7-2StN!=LcU;oyW%E{8v%KgPiceICZS?Q)mG>2`Ta z;r$776u+i$`uX`Ih11W;H9WX{E0!tO4vHA(wtIIDPULR zF%J6BzZWJHPG9fz`x>n$Sqp@#CwwP`KyV`01>;;jT{$?Rr{4!@Jwti)+(6;9o*5V? z`movw1mrsc!HL`~jy{B*yjK$a34Jalm)4VfM*ut1`V{i$Q^dgufAW2S$R+yR#q&*kdlKX zU!?G!6#kLI>2Vbqah3@5RHf+QJ3a(1Zb0Gm_eAo31oZTHdjv&KkGC(SaC*Fb1BKJ~ zPx?KGZg(=?PTH5%8ci6+d;hq`hMk+E0AD0a^*^3oY<4dmEzz;t_;Sxa%DL&nMuIR z4iK?cQq$=J6hX781+>Z8)rP!+-6KMnCU*A=i1zhCXQ2WFl7{D?s7rYI_)s9SOr&>E zr~s{@1Q9w#o7B(p4GSSF8+m)8sT62F1#bmW7Al3-JJR!FQn=gwZp6R4>`{bobc8n5 z{jlw*sTP!JD7rrqG-(7hokKL6#@QaM4T62Act!-w@Ws@PYcio+YHKfa*0}OgW3O$t z4ikI1L7yedGEMOf_6>vOuVC&-a7eJXFPVSh&a^9Bn*qV7X5qfjznIP+j4TTY5QsM` zK!w2&BDO2=(F;IZ+2cz^5TNHnouPdQn(S>Kt<7w0&unVXY-i8xSI_KMp!@%Pr+W5w z^$9)C;71zzE+!CKv!_$>{hMUs+a5U;yhbU&@NiBeZrPY>n&7Y#Y(|Cus=RB{;sS2@ zb*L~GgCei-4@?#=5AO_6Pbqw^h+}00ijtp>^Zz8j2P!X0esT|%0WBYf;JEUip!W+= z@<0Af`S($IQSwdjOAIYvQiOc?9w@R@ELV@^ovuDlaSM%6E89RI3#IEBYAD*+g@(mCs%Kqk{EDBHAsPV|H zKa72HF(CH9gPad>NstfEZCv?>cFh$NG7R2Ik)Gzf7w~F6mk7>sCqq$$B@?IPhiE6iE^y%FIRS=(2OKzgfqJ!g&3`!V=$eFzRevCUgWAUMKdV!W)R*9dp45x0=Mc;va6$_Z;m_5R@aO8uwI?Z0Y*e*mLK0OKje^gHxtE3)z8ruu--&Zld z$0H>Gmm$iaI25M=r|&jPDZI&Dni|(>_5<83ukp7S4=-{yw1joX(QmUmJK!g}H2d4# zEDsIc0CRen>G#k7KU)C&_W+=XAs#f0V+?yrqQM&nHqXUMSGJp?3|A28XMOa$_!k^yNcOV+VlPQ1? zrMNteL7Gc@8Dm`X*BHovLR292C(uQd5Y>LN`1+5=gmC@HqJL7JTtBZ7#+404lJHH% z5@&+mqROLpbyJ;x@UE_>ultYR)ycg8^s!8OPY0SFL<+w98T+sFB=rALJ>l7y?v3Of6YwUz zQPfi^zVMr6k-Nj+dNK|UiSX679XUn|eSPSLMm|M>uiILs>2cw9&XyS-2ov zYXFhHKz@UJAxxC~R9x;)^5HrWC0~d^TE3`f*dtgz_ZjLnmamUv5`nG|NNkPMIt=>z z0M|2wKRrXaAsWJqDS!{KXRD~dg=Zroz*=yK^Dv*I>kn*Jc z)**~58+glN&>!mok*M^G3kX#IY?&ONivEbQCSQ3L2;-D9$bD_WZtt(k0% zc*EY)7nuEMfCl};=dENEGkdOk;%_D;Xw7Wq8w9oIGwfx<>@9E( zts(mZ)d#JqjP_??b%s3zJX-zUTObbYGa--m(rJPAo@UoP@2Vk>%7d=Lmauj?yY6+K zgunpRo2e&i$K+DPrx&UNS=(GmLNI-|xBy1R`JymFVAPe``8g{$XukptBNz!TQ~)EtK@k zP#&odn#0KG18eOHkv%{bv)*(|HqERxjnZHnD8sJj3wyu7I=mgTiH(x11*77a^@Y1- zXNfBv13nqB*F3Y=0&BY(B!kGULHjO5qxFP~(OT04gMCJjJvFxB_3VLvX*a=f;Kh`s z+6(q{Ky8*w$`+%&J&-SSqaDBoP!9b!>1SeiZvyCJuvRx&!xq+=ChI5v?z`;XGO!Lf z^i^xr&IzbI*`wk2y36vYfByBJF`y5$4YU!oUj@JQ0zlGA! zw$R4V*4NN^1F9ppzZBOrpuX9iX+!8YqWa_2>IRq1?yaVuWBMQ47Q*TV1GF!Z2A7}5 zci`9UFZtPjYiR7>=yy!MX@6z+`ax?nGdzmFG&Jka>>ABD|1&pV0k7eV^FK8hz}o7{ z=-yM=&GI<9=O&|Pw`3_XK}uirAKO7Ny$w1aj?(I4N$X-;3#MD47_PfAWH+Km#)k%j zQnWV)tt+iZ#(R{H)`M<=){W<*iK{}oh@-ynxgoa<bK=g!k z%X~-od$`YUM)%HssPAtUw3sf1?(b`IlDd|nJp+op1u2YNRKF6GhU*#ar^57GxZh@@ z*HgHs2+{RwiDGo^qGiv?eI01oeR6=dvL#wa9WA2x8u599?D(d$pu^8Hv4iNHCmDTz zN$!IFf1v9c_60HTkn$P%W~CtioD@Yd%Y&xks0`W@290aUZ|!VplG;k}sjNjB>cg;~ zN0;mvNxX*vl7seNxwQn4d5wNJV?t94GaJbI^P7&juIxeMQ$*<8`cz>PzlzN@#8L;s=|%esy$2b{>iB zJp$R?0omUk{hklsh1!EzN1q#VO!HM-|%o>pT1@S3Xcrt%kiJ-6&3*0R?Z`Jg^t69mI~0I60-FHeKp&yY%urwU+}bldAe=gP3JIJU91;}Z8E7VO3JVDGMI6o0Gnc@c zIXZ%uv6)aXIKJ0b*<&c41rW~hqIt1dtq^w!afMiETsu?qGH3kmQMsv8^Y8t53B zY6`tPQ4NJ5!NM>DT_ar+eQ({qLhnH2jV(kkf8hZrLsw5*N83cG?jI2m8gACVKXTUw z9@y4(lasD*U>Z3)$=jdF)=dG^)b}*(epF*_3hg@jzIer2vMgY&$>A%{d?W;R%ue3 z+H8d9VtD6=_b><<@Z9`|^|^(JBoO^W;NuDJHSnMaAqx(i^~!Y+#FRyGI=VprBok5a zhAZfYUep-VdxSR~tzcQaVQ_l1g2l@jT$Vkdj-8ozLHt5U;Vl^G_gD|fs%QAnqX}#d zJdiXUZDH{*3{HQ^WAUlTE-k1pe2ksgEc7ngTp!5#pYT@*Msk~5O(58d^cRKiK=l=c z!&rhST%HH#TO)W54}X|5DT@C(9vr%*DEj?8^w8%;(I@fH+aP+{pM$yf5C$*A^w?q! zU?{-%7E%0F82aC%W6br2Xft`}Px9a;Jor%_{qG{VqV!SYp>NHD`|{uxJosWBxe+`# zj4_DPa|oiBqelIRohy0x^yT3L_fS#%Va^}dq2q4rSMRkhB0Wmei0lTu4f3*Y{aZ3O4CDoL4dJo zzzKaKgR=F~!)b`pDV!efGN^B*KpcvysF2Ubn9PB{Lh3g9f;P8M>0$KY2@a_aeG4XBY;yx4~ntmyTt5bY3C|rfY zb0}Pu!cS4SGKG`113;gC6#kB)2Y-1I$lQLQ?@d4y%b@!h1i&@fBy&`yaQZq@$2hS+ zDMIGt6CCzTfS`lvNxQHp>XRIt(3?|o>FbD|!%tsFFsB3p=--V^GDi;{+@A*z#W>NQ zu!_JqSN}MQ51xL*6oKDU2%ryoM{5ic_>l;3x_+>QlDYSU&v(p+%)KXa3GP7g zq3u7Bqt7qQ$AhB}!9#iY&~x44_m}mvMt&t6J_Jvt_|Wwt_iCuG0@ej0Ax;BM`v;p) zxExMHL_eQsQMe0E1E2rO=M!>|j>i0n{fX$=9GuW6Qu@&MRq{IzdeZk*MT(xb4{bNv zKIC2jd}#YvQhbCs4Uq#*bM50p;q>ngdHx~&5R)}N?-AS_XN2OIYo7=XPUwlAc*!xn4g(;xH6<>1;FKgPj{ z-)14kiCn^`h=UV8cR4uWQ-g7^53Q#OmJc{>A3F-C?K2VM#6IM?(F5Z|Pl5;X@FD#Z zd?V;l3rnmg;4(N35$Pv@)4n6A6g@o}L+lLn^!19!!7xX9Q3KZb7)>BYOCZcZ zYaj&p=miIaM>KUI7BS3+#{M{ip3EquJ6ZsM8S-p0{waXrx**?Rvt zxiJGBwW5JH9%JOdc+z@ESfiK6-&zhq)Bq)n%{K8n;nt%WfxG=sx8LKsj@H8&D}^_4 zvu1~R(NY9W6i0sCXkCOrUk(}?0%OG9A?83~5Do>!zF!;sO-uc=Z@OEbAqVF3}oO*7H(ELw&k0*w_n#r)zqJOS@3nW~W z{A3_T;ZOB9MTJGlFUCItbp1gUuKXT6@-1H)z3?@6ID%h+kSsd9XkHZgJ&HqD}$w>1PvkDu}~`x{yf)a!TSwC=b#) z6b&Q~KxI+*lP}c~RG9E$ORz_><^YXBnoBzYUB7_g*W*TVQogtmVH2eO1RjeDa%~EE z$M6q+G$sW5!6ik?lV^;ls61CT6w$#C39`5!gN|@XaLXfKDg!;%If^+p_f2OJBLf2_ zUsqq>*oaB}eP60LY9PlF>45GIXkBl{lF8_V`7T-?b7t2U^gXy9edC31(FjkC{UwPo z%i8*w^Nc@KGa7StUuq9)%i35AK`m3p8vJBBW|MLVlmE|@`|2o${k)J)NFMllfgD;U z`~6uyI~K`?ykg{=lw@I9`x^PeGqgxIOXM#Rk1#lgbR5zd(XsicTn3^QqVLIH9l`&L zt*-~Bhwsi%KRS;~TOV^0eQy>+-N3B6WTAH`Q8ruhyz~Sf*FcU z{eftO5-e>AO0)Zx%QOBZKxZiq{$a2Oc^B{>KzL{5ccPe``&M!nBYLtajUx4I^)L*O% zt3T*og8c+p-IN;V=99S^<*3cXk&JDW448Yt$J?{(-{E}<)m;qPpatqD;!Hnb>Vf>m zz94zuQ9Zz)?Hj6-Hcz5 zhrQ*0_m?t+RUkXF{h>3HNA|sk>xcN32~m0AgZ`WJffA+P_1uE`1MyEo{(Y$JiB4>r zw?MkHcqi2MgHgS$QT?IaFEZ_Ji1hu!Y12Z=-lczN&yrrhb@@|!f}Q^fZ!495z}ph7 zXMyf1Y+saO?2r6XJ{3!D?n>tCh_dAt)j!KXS{9Zw>Q6E;EkMCdQ zg0^S{!H{6z|LuN4&{yF34Fc^e1Q>aiBjY!4t_g%FsKUWPriXBq#HLmor5IW}z)&!O z11HZ1Fci3X@HiO<87S<515>U=D$A8!?;rzk6hh$|ca`bkvXYfxA+}yPYZ~FC(rC843^w%*KPhfERYd(u3|7{e6 z>NGdO+$rgBpm9KRq@_#y_UM;F=5 zxeQK^BC>cmgEtv1WHN#ooc>C}(g!d&{ndcQeHgqGdqN#yT|hDF>*q1twm|Z~$rp>& zr@0+iyty4%yty4%yty4%ym`B`c=L8=ar&zx8z7z-06ca(%^d;<@kNj!X(^YDT7 zA4SOx<>7ONr@r5L^clg^z79P6-=T+nQTnt+d}tpz8B`tujG>64zk+UIqHr}HJ3K`C z%TZq~nfp89zn{T>Ul#-iUlBR#Dv(ah6lnRTtW4cqr4Y_`7{)K?hh_Y`4E8G58F4ul@fCqeYT@8_yGzZ;{^@B1qAyNmMr z@wC?yp6kvP=`YI8XL)eg??Dv(1fKS~igXf1pUp$>&eMNJ@bu4TJo>=8oucG|PmU-Y zbqA67JRUx6dH8JMp%3A)rxH)STJhLt0gs+9dHADwaw6-M&ZB<}54{SH+*+RcPT=8# z=KhG($D9X;Z=j;ui_hnC5RY6X9zF&eio1%NdF-?X&Z8V5&MuTkl$y56M9Qb0CH)&(fy6Kn-J4; z^(Xb>>QCxL^u)y*-}wnn?kS{RL{CD`trwxEuNPW>a!&w#X#HvW-h?@d>H4ZsxGPQr zANWln!5=38C%OSNo5Bro8lnvpu1n!r6i(_6P!5ID{UI0Q#BTUhaEyZo;`38D=Grrl zgA@8fj6=O>d(zi6ZBKHY0(~!B7NU0)ANo2HVjTJp>4O0MXZz1W%$L}ZTVK*f1Sj-# zf1vBj*MEdq4(Q(>ry=^!>c1WH`n&oQ`hTjwB9;T~rHRuJku>0Re65PDBPaHNm-zuOyRB+{X`1)pz!e&?oZ(pC_I$H zJt#by!rdu6j>6#`pM(sY06lF9h~g{?A5P&p6z)vn$0(e%H9&b3J_e^DDx~mX6n>M! z-6;Gag?mzX4TTS)a5VVF1gMu4h09X71%;FMZ=fGY;X;a@T$_-sPT`gmy$*#>p>Pul z_oHw!9t?7QD4aZp0PaoUt`r|%3J;}l(q|w$n!*Dp`Zx-oO5sTqK8?cDDcp|2Gbnr< zg=bN?D~0D!_*e?>j?>`7Nslh-P`ErrPwwYHPo5beo75ff&J=wjP6JMlMrKmDB1KR7 zA<%cB@OKn_R|=OxbP#~P8=GW~q(1;o>IfMQ6g@qv=}+NJM&s%4R(M|}@@ z!(Zr_J<#YptS7tm5|fLR8{s(8h1qP008NUatvpGh13UZo@5dd*o8OdgNSC=m8T!N`cO{{ zK?RUSB7FaX9x3Af_vq1{erS_En(3dr4t&9Gx_CCOH0*SS^=8)IMmCIOHk|W85itx^ zIoOU)1dMxFc!Y10-Rl0V8276?*2TxGxv#efv21UGTU@xmD7EnYC(ze340&5KRDY!s z?#MK`2%#dV{>+qLN0uGVCvC(o)QE*sZNx4DiCSz5sVwn49~zwv;iOTjS$f~Op}MZ z2YF8O#n+Q4Dmt5OyhfjW5jj>fuc8P+W2&qEN?{{RX3v5p)qIT%V0nH(3^q&E?kzRska|xnFY)|N;t;;NN zj}9ow>{5shD9P+qhz=-;b}Wq6W)6JY7NRxrb^eQ1!Dk6PHmw9q?mS zBP7{^^$Ba$h_DGu&N(@iAPF2xBL2XWue=P0o?E^JD$m8B$W8o^OP+h7I^yV`REIpH zp5)P=JQu41Gb(Up9YN)}7(>sQQOunILyd*X5C)h0Fa(KJ4o!O1_5(`K?9B--R$y^)JTq_u!aBTv?eYgNp%e7M4%y z0ri(g|J?d_LLE<({G|Y*K;8%0v*xm7QF&4Fo$yOj4dw&#;VUm!{w7pdlziCF5P}DD z{C(icT8jWK2Gn-AYs_qi;{1L zUtaT&Ob8$!x+GWrZ65h#zsx_$zs4h93cn=hA(;?BKD@7U z&+_#DLJ{(zNx1T1jR>$mZtg}oAF=#nxcx{5DNoL&Q9-Uwke7r91Eg>!)E}CJlqdJ) z{RjXN^fxDTD#${1g;2ppjYpymiM?B}<;m|1AzX$9Z6*MYNjVbVNBWU8O{xhuOA&!f zI~eyLq(+mVgUiQp3Xu8}Vhf)B0}Jv(5aRM+KOy=j<%#_!B7iF!kqO9Nk-|1`#?}#7 za?7K+M@D#IW+8+>%{?+j%l$Eg!oNTFD2e)DZwbl>EYY>dR4f^tFmsR8hakWCAT00)tH94 z8=y0+<5`C0@4!3_DO+~l5Ulacoo|8WZit*`AD&>EhwZZqf#c0~V8=YpU*18yZmF`82oPp#pK<~3cmq8-^hu|fAycbfhM&8I;9ULJUpc`Aqx zZ=I{ryf%8S4dTz#S&XS`i|q5Lu52F@WUDaivMObxii)hO7@qqC^*l$lHRuBU5o|>2 z33Y_J79%-qJ)sTRb+Sd*5#@=jBbht(yN=b&ygYXP46?lduBdzL%_b8b4RJDEErk)U%r$p({Qr5`TjIV1L!m{EqPB>Mdy|nV|-nB<~IPH zKc@Q%F%O*(Wx^?1X+jIAJV<;|Dt`PlLgk1BD6%zZkjAAB4bHvFQpZY_XB(hAc*{ zbV5Hn{$H3YppWX++{$PjC>|WXiHV};^9>hACKg41n}`1_9(*?s-k*nmDe4NMa{^aH15p9zX0L1k2!NcKwVmw!C};b z4b1hAl9A}2_9Z9xo+>1lURRa)+F9_}M~p|G1w8m09^8h<4t(p>j^(jW3aXbVd(P&e zhp{VB^c6gKPjr6}Mc6N4|(4Qh&;CdPSb}{^mzD;I3xCsX@rs!$k zmU4=o#>wvq@TZ1C1T_>rjWaKDC=cj`m9-`80WSxxh@E9gz3n2!EIj`oKJ8H4NpxH1unV*0wE>nnw6&=`rpn4*`Za03cgq;Ne77gD$eg{xC| zKML2Oa6<|weHHW}eF3s9F%96vwg8bd;JTOwBGTUgCw&-jS2&;mxHX$(jvhD-xFt?Q zR`*{uqVRzT|lnK7gVx zq;Pr;%1sI%MA1K_a9awmp>TByC-*m~Z(j;0_bb44C>-9iAOKF!g(CMWz{#}(baoW| zZ~$;{qVQn^M6oM{+f#Tbg^#50XbPu&uHz`&iK0)UaB@vUb~=UAbF(rioc7_(qHx;h zH;2N>Jqq}fdm8v`$^d`^u`S^6O_T(3EdY+jsT)HeP5}z|2bqJuD89O;dQJGkIpc09LTN)i-6phfj%am}^JEBfZw!wJ z(?zEUBR}T!@9#fMd!X@2aS>${6N3CXYK{fDNjhBAURMTHy42guDE`5+=6C{qLB@9-xdC|x6ceO*1E|NA~r zIkSIjXbH**EYZC{l+~Hce-Hm!;9m>;Yk_|)@UI2_wZOj?_}2peTHs#`{A+=KE%2`e z{!tF}ZPwm9XVJ`Lk4t+LeB4Id7(46AyzF3!{z^-BJ*!Na7^Sdw6bpH%x~+ZUe~?dv~TxYJpS7IoqNA89W*3RPG{Mbw>FC% z(rVKbWk=dvw8%(R+vs)MKIfG5y|LSGpX;yH>0#9xg{yi~^4rgTp0#vD#xdikZ-J5RRJeE49*q0jZ@k>&=g zk1t(mXuafOVc^}KQw;9}&79v5amG@zPo(BsiK4AxackUvEgswcYfz@Ag#F~)(uWI= z)DILa-c|19?)a{!rTVm9?VZ%tWb|HP@j2kBQN^(*Vsq-k=U7yau`(^zZ(C+REyg1F z>6~@JhB+o3SH^95c~*Sm(bzH9ZOoMme$*+RXqC}AdQjd>_m@-q?!Q%#xU=f`k$Lgw zoZkx!vf^Kizau$UTfuTmzpolf>!w78XSw<+y!ezjBY&CQsuK0>;j+P-OvM96zo@mD zJ>koQb>5F0zby~1(x0PpJkWgo&Kt1?A!|y1wOLZKAR$Hj*|Y;^cdT^OndzTm(MsWs zbZ^NWNhyKBg%6+lPagVt%!jcieQz$ZbRD(XJyYsZs=@6LxAwtT=Esg5v}Z-{_O@l4 zEUO;w(`lP)YiYktrCV(Kh8H0{79LE^FgoenvFHAkHIl0f%CoF?RehBDd2V>sI>(Or zRf|`D3#fh{d1S=OYOwa;D| z*Y=K4FHb?o)nzq1d?H#LKD$8j`4l^qV%0RW1qXlZjLcQDzM3|&I(gsr@|#0-U$rm3 zdNwsx-_cj1F7M)?QQN<~Exf1VS8Uh%#MC}c@Alo+cv)Ni+%ULk-i)6{ol7+!y=JnTiYNr^fj2FHblb@nD(QDYNCDQFSXuntbbw%)V%!3VWBC~UBlE?J3*`2;| zcRM+8*H6R!-6Ad<2Zg-66aH!2vorIrL|i&DDkLFfOB`B+tj*4bou%6Dj=Cqit?i}n z7A$Te`zZah%wDN!f?fNJ{0?!RGDKR?LMqf>=ck-z==eM2wSt;GsBwcOQH?6)_2?I`8+I;z5?|gig zhuGp}x#J#wF$z=e?{+7)_ve;mVUozYD@Ybt6z2vXT&QMU%EbP6Aiio$Z8J{%cz~IQji-jINAKdDGebKy2 zQOg#-zBxhW;}E-L@5fv!*VMF%oHYLSwjO%(rEZ9ung8;Q{BV1Ra%VqNot9TEER8J|qzn8P)m_*Rjo1SG|hpkD?Uw&%O1nD;U z5v>-zKY!G{+m>lv8>${Br<`j$wblKrEv751o^xry+-Zg3;%%p`2p{XF-CAYjzq-~yo;_K?ewGLvVt*Y5eh0s z7Ahsy$t6b%9v>Z7d7;kB^{lQ&UBQ!qKNsp9u&5ZAI&guW=dUie^>mjEezH5W!k|!R z-_jP&YYlV9ni$_`$Z6S2&iCS>4GF8|?ugHdTQgybexIL%KUZga9QiqBh|ad*+dOou z#eU>0o7Z=z_|dt8D*V)rj=HhzSxAEE&-L2}9y@dokN6^2vmOyMi(+Z5{hfys7hkXT(&W#i!O+%o{tSe9*U+Ze4oD z*?x-Jqc=FNO*i!;UtiDeUzue;)$MRil>glYfeW8r6gXag^4;J_;uqxt#nWD!iTf#M2YsKZ<&*Vx7HxTJ6${q5jXLeYX{q$Fx~A zzxSNPwWcqRor%?LpD2?aw%cJyPG&;#$yMQ!k|(?;c!riF?#sTvZM@5^w*{IpQ|uSV z`l&BdemBo2!26@Kmh6TN29B4~ET3F&S8cZV{UAN}elo*PdDkg^R~vV^W5=V#MHVB& zf0VkMoARslUH$&rw6&Yxl-^7=)xUhju+Lssn{*!q_czz=3wO7@o%HVH#1rRq9PX}d zE4jMO_R1Zy_9LR?XCw`doi=Ix!XDEm9hcZupspCYW$mf8-#$&>Wp<<@J$=Qjz{g#^ z+kJX1yKT15+~*o@-6XCAEI-kIY{|~uj^!JN>2Df2p~Us#pta)z1QqV{uX@Ez9+=cd z&-z^L)Qn2s{t8~b)10;j-+$5iXixuxvi-hnIyfbAec6m(tIs4{JrOlQ%l%pE$##Z>}cE1wb%F#rK&#N?<=m`GswDKrJhCA zb<*b{m9*rz#LjXrGL=`m{A4Z*-CMQ=(k#+X(1yYNst$JHvscDLlW*_)(i zbzYHsrFB)}mLE@Nn?LKHqgA;|{aa6&t}=#wEI%vzY0dkbD!$!5ab=J6dyiUAt@o|i z(ysK;ky|Iu7Fa8rCY&|?9(Vrji{ttk`yZ5ruA5lX)wbW^XPwHV3XRLo_g>h}Jb#~O z=J2sjQm+2nhO0|`Sb49bQ|lQ9w)?VTxA*IKbbOkx*XQh9dyTzsHQV-FGp{`4*ViQZ zm=izpbE=nuM*KVgHrVMpH` zy`sBRHW-G+@9(1GdB3t@$EHbxVi##EXG(8y+|_VWrSF!ni;vpZovmzRyD+++&}823 zxtdR<`sMC>=rg42i(X!RK6`o_@4ee<v8PP%d3q~c0Mg0=nY6?F{>Bl;u_ z_Ieh#wN<*EYlutdkhAedg($2+n!r})RkoJSh)Eu)$TAlFu+f?uFuQv`$C2+T+r6y zPDb1Zo#V$I*e3e-`>YqUXw~h6v4$7UPE>ujS1WUv_o7R+s-wEEzjak--s3|%OGc#K z95STG$Om&~jneLaar2W_&Ob+utvEhyxTb|y{s!x^{budkMfCLxjnrs$x4lgL+alAO zJ8dIZ4r#sBeB|Ejihoy%t>Ex;q-gio`u@`$Q z_@8-T)Y9H{Yd4>Y4r${D>_|SMHFwNO-BquOv?GqJA0d%HbiK6N2TzrObKi@N`w=B) z>w}(_&MepV@38t~*V_aA&OKSP>EwxXewl}-i@pDLvgc;2pOz77)t59kba%UcLs21q z(%rI$HeQ?79JsPa%%Uc3>-*xGFIsPID{Zzq*}uXkXu>Pob_p?3llvO>kJKIFaMUwX zT)R{1tPC67n8Akz(4cx~RP;-?X*wC87OnmiJ|k1MBxbSMpu# zs+hQX*B-MySC8(hl$mXozHZQ1l~Jy4BfpLFc)78rx@u#*y#JZ~T`CT*cP}3`#9qbv z*~+dJb3a6#Ns8*Z__RjUfwtYs7RPp)zUs1jv{ux5nY}a2r3&z`*k(^A-Fq9(lGhZvFsC@6PU1W~@KF{K}e>UxhbE#N6B# z5wh67KsUNu*wD<2H8pBkBc%Gr49w6t?AzzOQAe$136)=^)U1~1eQ6yUI%#pyu{YIH zFWiS8TYR+J-qH)EZpE=T{bJURe?GcY$@aW=#H{T}7gR%s&v};lvZj9GkEIUnN3Z^( zIm33=>nFwQhb2u|IR2KTYO90+y;WXi&-@V4LhhIC#HjFUZF|=N9x*BX+vWxd;<{uf zojMrv=;$*&Td!~JZB{!3icP62@3&`lV(&H;4qC&5qv|V5oY51Pm|n}E{L7P)uZ+F* z&{AX6h}9RyEqUg(A>fwyqSYpv=Yp(0U)Z`~@Y_!<1Y>PZE;O`kr#Pyw>B*o@pRc*7 ztPXhE=Ahc6-X)(TVRyPjWP!!aNvR5hbJN={ z)(v#qC4DGU+D1BSrkB~kvma9L=ziWZ=Jm=U#$NNfc`TeVKl)x`c;?%&Qqlggb)AGh zm4Vfh^JXTv#Z+nSGPe2Rbzn88?jtuT;UExURYn6haHO3Ke{l_I2oe`NWK!o*uW{oRpts z-`IH0XijZRKwkO@%X{~2R;`?4JjhI9UE==bo)T&<`iXgadX0LpZdLH-)(i6uv(j>W zk_|^!wLA4>M=Oh0Z^zj`$nQR5VA~5y%N^yOnDx>KIG_61A*CqGXwie{tcaQ3D=SS0 zBrdJEr1tSc(YY}D<=4s|3F1z@DD`xfh|lSm9~c#}O=iM}4{r-5RGxkB@?cg#u<7|K zsUh>EIxqPY;a=%+&&E5>^i4_|g(Y`eKi#o=>ZzJHt-G8{*!*H|pl<5%{HTOm4`)=$ znG1B^?pb5n`Cj~wAlV5P!jhzk_Fp9KUO4`)BB$fG))Qa%DSf_vkM`#ZO?`XEcLh?l z=kIhI5g#DGCBOZ_aZ8G>47j{O>3ypa1zuNI42!SZ?jLVtqCahu>s{3;pLFg^d5(|O z9{K6MPh?omi);HNtWHa4rWqONy*qvL?DE&PWy;THIu}jt{b{my>-7AfHf1{ZM~C)0 z_@R^EaIJn5ubOsCk=@Zk`DT%x)5OrQTjGbbwDqg@&5|4xYGU~F#*<$$YL85Mj+X2n z7GHFym%!W3WXLhY&yE%POAkrP>=_vTy6n*4{9L`SRxe^&nH`&=kpIp`Coi+FW%=T5 z@`*bV3ntl*Gu~kRGE-PR=|iv5IG3PrhtF(VeIvcb#Aa*qxYjFjg2dcckB|OdFV?<( zd+80AZT-&aoC)fB=gD}5!8WVnW#&tCe4P6{-frS4>rFv{^BT5~I&kOqz(+-$S zx;*CU<_g=pqubALd1rdW@2G2zZpHVzLeDV z+vgM7@l{EEmQ@T&nEc#(#gu;Yzi6yiv*=gaH-B<3iC+_rKinDf;)dt_{p%I3?q4ze z(D{w)#`Li0q0qZ<$n?Jb3&jSMU(_xd@WkL`UeOWBvIP!aEnZ*fFh5W+ZrkY=I{rr6 zj$ArDZ?I+6mK*uk%lj;@TE*7g>!-qu9#x1)WM@|mBGD?7@O(-T>|d-_OSgl zxAVhyCr4k1@fv@~V~TeDxX*P1y>?kG+pi*mMkA^C6_n(Y^Lv?Y+k21tzV3Fe#`3Jw zljWw;M*}|@NGm1vv47j+ppm4#@~)dTpF1vJv+6mP3cuhNTCTafl9dGg@fi&iWe7k;J0de^S1 zXZf3}1#P!g6o$yiXKoxXzdz0FpwG@d!d+qx?|d$;ub0Tze)Vko@>j2BIJ>Qum#lh| zc2lcx^cIU3|87es!96 z?$#F#@d{g%4-B5r_sPnX%a@k*?Gaoy#G+hy@9Xd%`@U;7#9h7~+p*^Z)vbq;j|mkk z0^5DNq;~(!>oMhnhIK5x@?m}63RNfL54{>@9-Xv6yl#GE#Myi^og%@7wvH+Hb-UcZ z)~>sAQsl8(|5=$9%c@Sa%nd9ay1~job>9AUH#XhwGcoqi)r!5j%Of_HpBQuKj@~J+ z4u>-5eSG+Hrg-SS*w{j+!)I*ebsu#09X;TrwTVj92ovcxo~e7bU4F3E(ZDR}br0z^ zc0m(89R{7B9q281=C<#eLYrQF(mSaHCC*j78{5q+ee?wn{rl&B`DYCqIM?}o+p0zD z*1gS@~d@X@wycf>Dr z$-6S8^%db4>3QH-mp<~-`;YNa&nU8$xm#5)x%Segr|wF2 zkxE z8#cE!*-)#xR&LmlXV-_k(j928viP3Y)+f2aibeUu~{QSaR7Y3S{oEFw! z*s)vhSmCXS+jD(9ZZACg=6t_{krH2n)7DOsLZj=8_s)KwI&$cOy=`VqT+yI@$h>Cq zp`H_qm8(aVzfiip)p+>A9i8K3E<`Gp&scGx+xr9M_LU)>>^$}_Z&!InZQE&$!$C`K zZE3$eJNwwO#8)O9OQC}5%u58xPUXyNgKYiORPj~xb z(*>L6PQAJ?MC?Rnt7!u!`OoigTf=<0+0rF$8N=&l%ztTn;p@ehMKKN2#c!P#E1x_} zcSk#g_0~@#@BeBo9n{O_m*utDPp(`(;gfKuT6%9oec7X7v6Jkw_f$k^$cOm!if?^Q ztIM~s^RwQi``WC1ccyH?9jhhfGuBT?*WdKy^7BPMJY2K-&$^c}DE=Lv6LMEwzgCOyWJi8cSv5skb?Dw@CBS-N$yr zZp=tg8I|(NDRtk`PHNfnZmxMfIs0d}hgW=Def@slqP~4r?;U%5zTYsfLtVeR6ikW@ zFTP!(U6rb3c3CaIc;>CbG}vl>DooHQol8$S`trc%+8;rE()E{w&l)Ee64yapVa_MD?3SN`7o@-XzIj8d74IHs<+AXp&KavbyV3K8 zMenUw-FyF>e9w$?1LwJkt-tWKTJ8Eur;fJ8Uw%CD>=GyUK78l|gP#Wz4-R@7wOs3v z*Ku*JBN__V>RirGK7QkV%hElAt~<5gVll^wJfT)~j6 z?ya&lTKWb)O`fCeY(BO`=f%~?fksL7VOj;t`*#?xz3aZQz3#~1jNy-V*(o|5Q2!nw zK4fRBF$=nOlbm_6_lZf@x2DbU+S%*l&hshaCdSf2%cL0fuV2pR*nj`f|Iy)ih1J&S zv5I%+Zkd19>#1e=ouX*5cXCA%6Mj80o!xWn?67giUu+zFw@m45K;2-KhmrBGP1~2h z8TIz)&PxiHA|0|6th$d`zU+(7sSEl$&z;%2DDwW}y+iIjQ!M@2W6Pp@$xaO#*G)ZF(y7a>1t(s<)Q#vd@O5d- zugg}8gcGLbDRzEu_+zZ0h4b3FW&0u>^OrTK+_U}~KXJ+QS;{%nhA!A~>B)`+G4DGx1Yd{rpkyR+@czaB#KrOuIXM6W`^x znciu1z|@l60jcLlz3B7sK+B7AZ+kut{`_rmR#?RNilGzSYjegaJLd^#|D`e)q=arg17Wa@p?DrURbExtju=N zvlc2%Hylu{Nj?FQ=iI$# z3%VP6Zra=B!NX5J<75|xXDu;Z-@WVkZem@n)Ld7ssH%PStEf-6X~)#ZOG{*=s@V5( zKXmy>jM4Zh({7)4UNdR?;5#!DN(U70cR&3l=O@|?T|uVQ|Mi#Tf_^bY+1I~Gn-7xR zsk`xGPm73grx(65zG>WgpLp7Vy(_fBp0=l+8%li2}t@$1_d#@DeUkH7so`7oluA$f8`ghr*FLuJliQv(D-r{a z9CuHA^SQS5_fNVHx@Ps(b3d>%vC|L9Ea&SQYQ-ZY9fx|)s4vSM89(`@*oJTOw5GRD z&kbvJYSAJO_eU#l9Jea#m|Y%sIP&YdZs)gU?rPuZsoFE4Y@gGuqU5$8dcOJW#Unjt zJnbydE)|S8Uq`^bl8n3_g^V3k9b|vppOw;C^x_6+%7?)v=idFAipB$Rwv+Sp@(#PUF ztGq6iojXrAO1cp_aKp=tL>D!m)$2;6N8MOA#$&|B9>&wNQrieCKc~q5l*{Q^Hrec? z@^j$<*ALPM&i8-&@JSD|DKV$jehfDsczU73iE%ILdQ_{qj~@AKy@^+q-MM|SSsh!p zZpgbcEK+G|@yyh7Z_2*uTi%`aYeaD3aiM>|z(b!7bgy3}A8WY&o@A$mV~-D2_6dJt zV0fj|$gNvTX9dgKeESr7$4uK~MswzxNXdPytDfAvQ?LpQ#Q#BG7w8%(y{fx{#m*|Ooz{DYq0H8a6 zkB#ZH^5gXT84=E&Q!WAFluE zQ2pJq_yC=AHEUwNcxT@mpT7E#uU4(Uwx-(4s1-A2wJ2~>x4bdLPtj%chnZ^UXH1yB za@dKI2cMsfD~=96@~o|JeyzbK-)WnzR7($Nd{}b3OMLj)@rieAY9h*%20rS%z~uXE ziQVgb+S#>o@Vurq;zP*&IlA4)`d<9Bv(ui;(j^I#eT=lDQnj_WdEE$}6=b@mXUxp=4QjKubJbH`+~_x^cb$<_aGQIuonl%4fnhmtzZzUm!RZsHI;pt@|? z=tR#ha-+^v=?#o}w&jAG@60XJPWc9w&Gi^|`bLQ7n)EXfCbwFjbE}B`b++E4TbjUT z?1*@WP&ZS*j;^n~%zk#Os1?6!zq`j+<>9TjKigw^rjO~N*L#a47sy`UHFAmVvSZ%; zJ-aTsd*@g9yz%#U*^J#8|K{;=g`I`%RXb0W`*p#0e$?(oL%MBSQZM;6D!XL5e#EM$ z$OW!J%Os!fvR;vFNCFRd~a@UT&IAVTZIdFoY{S&_lE{1l-OJ_#h%IPGgY&KhA zsj$`hj=}HG=I#;mJg)A$+*!`C*!|}d%fPK&e1^>`$S-sbzUN=!S+Vf^S~rJ2g*R`? zUf-n^zl)}k410G^;`>1FTY|qdh@$U8G#9&k`czk zWi!$f%zPERZz`u9t~zzZ`7puvrRn< z9t;ZYUea#Z*K51$NAxc^>in~+(n=%F@{4UvrwoTB2H&S1(`h~8rN>d#X%1>H5{wJd zP8dG!JMzltYO6cxeGYDVS0wi|s=mYN((l4wXN?$@*2l%EV9N%>(Mn4~wt5+*wm2YmX{2+4Z+h<_wV)3p zXBCf~8mRJm$C`7W4`_+^{g4r~VA*&H=Bpr=*JzZ>l zq+o;X-Mdj*zmKfy0la|o9C=`%_3YZdgs%?`8|5)yZEm@C-i+J zHh<3L6W)VoshnJGHbX12=N>-`q0Ta6AM=6`qhkghw{u-2M+g3p_|00~1zM`b|`2PnpK+L~Epj)D8NV@CHPE||2K?$gkT*l)d43GSN4o^KtWk4Qzn&6L* z>C37FxY>~~DohtdzynM-)7v2Bj&O%pPm0g(WW4VWp3jwD5l?zGQ;dab|8g5OQHl7J zWtZ&!y#Oga=$0d-!h*tH#=b1D^sp%_((YPASmJcYV2+iE-YDMBZ`8=Gke@KnL#N}p>8@z z6C59-AJPJO;pDlQq)_TpmQI3v?qvrihxwgF7dK&kU%Ap%JVp2HGYF$WB#*LnLAIhH z{*-mylFC7Bs*_v0eiK@Zih4aPr?HtvukX9LUQuf+HwAJ{&W-xJAC7b1+4 zYd>Hbz51W#Lq*{Vl_3UFy;xR+RyOlhSVm%Ov!E$j{IrK(iKVM;T13UjP=nz?)R$}s zu|qQrI*T!(u6J>_XJyx?$!toSfYraQ51Y;!qb9}~p^XyR39hW4ORKN;#hxbSBg;Nu z9zCJ#S<3N;4zEXFs~4HQha4RM*0Nbv-AN#|k@yVpfW|kH*DL}JM;jY!KVZ-yn@LAJ zs)Ixul8)?SK-QW_d|sF2@Psxn5es~IJOAHz_Q~5x-74qGnp^MGgyKYt?@kR9*1NhX z0GEzamn6sHoUAcT=*c}xUK`!u-qqq#sAuhHZ6~?z4($Sjts-EPBZXv+pSH( z?@}Cu+zs=qxeMSJr3T!1L31^gH-x&uP735r1^%6MXi7Ek6{>sw2uHGnWgQKl=imhS z9IR%ub(W7MwkcCmPMcRsL+Jr}*z4clU;2WB-H693QLvk9YETMdVHGbosmNUWhEpV~G9 ziosrNE<%nPeRXNF&#)ALsFA|FB#$MUo}*1hRZ|5F_}k#_0wYW+rN3sRN2!ib()jfa z56K7E8kB_3vsP1IgB>uols5Dha*S>9{IUV)PH>!|R;hW2vmwgyY zJRb%0<8OKyguG~^Zd$c^QQGx&9{#X%LphkY9v3z>6=aaMgF}zawv5E&?hYKiI_7Rf zbBHjY@R#*o66)F4wZ$FB$W^;6WJ6FDaRSr%wC67mn4X6~Dq#jh!bh(}Pu-)ivW<*` zmeVRY--lfsWXMlELC5%HSf-oH&3D^4=P2AlVe7puGy2XA0rzy3iZC z$c=Uo=rEy^^p$E7)s-=S+cW&XdcNfPP#Yw5oA`k=$otwnZ#$Z@ZO8M|E>QCkI`OjBa|7;`Y^W*Z}1Z z-gwxw(->MLLy-)=iyMeYev}2!?9y>2$8hV4g8@?8<#sU{6cdnJT9k?6PAwPqyl3uF z)BuC!7^PHf(t01;Z|#2vyPrD3j0E|bRpW5;HvL2e+4JFtEGg_Ti?`k3taX|*_fStPJTPf#gv;s5-;DxYFmaiC)v{IHoG-2sK>=&`mE+pu%%m64 zQ29(TD^B-GyLFE!8J~%Jcz{7rT3jB2lb=svmMIJ+v*!PXka!6M`6@l3)o7><*+Bu^ zK>`0Dz+($d)qr?{1yN!N`4PR|zc^Py{xaJdQxH)i;uN}#v1z~yrKm{ z{unC>nbs^JrG59q`$ka!jhwDI<86D3gf!@eRI!JuC>n8HmzrU_RYb;gPA@V&em)9P-529Qs?VXV78jFjqWSSBtPc&!wq zc@(|Dc=@{#evQ9A$i->bT1-oZB~0l$!rA!0UPe#Kx+Pe1f&z*`o-L^ev|uU`EH6D? zXxOPP9Qxea`}^~Qc^a9W$eEv;c+`q>)rp_l-_XiyV_F{I zF9D>`V!&Tc+0#elXmgB*P?7A83#af*G8w7>z2qRPTmah`!2iL(kD`o6k%r!>3AKjI z9e+!G7WN^~_^K8lsjNQlR_+cR)V3 zM?t39S}<%Nm_Pew2y9Q4g=!SJ(+~UC2YbG1*}C4Ctk~s1 z%~^klJWl%lzDOapK-I_|idNa|C9PgD^YT3lR<$4q(*l8$DLuUkoF;VJYktv68XQMS zG`a|SYO~fm&?r!$*cXLit0W@Y$g~>=E@yXy+;9C+rRX$cy{@jugdJeWkKQ8vg|rg1 z1Y75|Sol_EqqiPZ(AyHKoQYfd^ylLAoCv7CYvayph_!UNNveCzycdCC;wW!R=%iJ} z9%&(u{ix8nZyWxMUip35!oCl0y{D8APT*R*qd=Nktq_-zJH4lMcgCjPLI6AWwo?#?x-=h(_k}TccDhvuYk*x8BT(-Lk;QR3RYaY?=BwU(-Qdg2!FaTc(KT~` zoJ9ZlimIBF&&g5zr9Fn$XK@?bgR*C^7tRwKdW6WYX@2ml#f&!+Lo;8h-p@>Pe`|mk zCvsxwJsgyg`ZMnnlz+BU9v!4X5ek1|Zl9m*>4)H5ySxiGqVs5qB~A+@Sof1b?FQtnxl!@w;Yyf_LwM}8Cos`TJk98mKE50|~ z89^?PHYcU2Y;}w+$qQ zz3BDts4Lr(Vjk~0U-d^79|Lbdh5t~AE^?1t4Pk_hijOKse3$-;mu%G>m-<=0EDueE ze;DKH=-yiMXW?;vfunQ{^gUYa!Ow394_ae#3r1ZyfapDHJSnffb2O#Hzl@5*Fp00JEhsg8YlI^r?u>#2y(Us7b9Mza4D9z*vKMISXlJ_( zm>Dvs+xhQ8=fdJSoUXguktl+QBVkZ&VL5a7YVPx?EO-rC?Xd`tB;~iH-({L|Iys#5 zL)?m^J+&Tt<%1Cit73kvt5TE;uisP{@xY%PGXmLS!_2QT2{m`Ea@MsiulYIqmAm5pR4fgO9s6gO6LWIYP~<&*&l$PK8H+C#)a$~-45yTr106Q-~Zmuj+u#SNe$7!@4hF_BaZT$XaZ-CQ=RrBSB2e;*ULxo z*caGFawtozl+#^PPX-yr4hx@H#y{##gI?3jL{+25BpK=(7{M4{A!lcGe3PT4hYe8hdHIFx&*LbVY+#h#Ut8vJgm;fmpt2|$Vmcq!J)M!6F z=2}b~dr_l#=njf_+?Zp4bTXZMI(by5Or%cyrHZ5(&V;*)xsysQf?XZ>FNL#^GGT2K zGpxK_I#fjjP%tpZSibGup{{M^-tA+b)GLi2Y2MmZKRf5hbHHdAYP0*!uSN>YfvA>k zwxo3PjFl~+{t39-Jk8u&4lVzQiv4=&X$##>o0Meawq0rOoc88KbJd1NV|PAus`G0f zH^1+q|At|B#I?OzLrH)Z@=WX=2M&dsq_Q# zo#8?74Q;?w%L_l4i?IouE0hxKOI8(a(%=%UTv zM>E&-TzSXzXyh%S-dqM8h4Cu+b40w;S5FVk%s}g%HICmMN@37uwHD4rz`p_GvQfHI z7%Kl6>OrEc3sBR+YMih%Z=lP^#(7;AI!vP$+^i7rB(0iTseVPx>8*zZyeb7*(c6Y1 zK;N#6b|EvJe1XMK>JK=RuMkGOCB zcy7?1)qSviW!!F1?0Q@*K5t~B5H$C3$bz<(xUnj<1C@1*8qP~lfYddzMxAlMi@uc&^Q)KU#hL(%Ot_F+fJly~Kt;@?(74poV zNcmT4&9d%Bz`uf6VA?Oe-p4`9@ij1ryLM~W zhjxEEDF~lBr9_rmvv{e#_g&fsH<(?%ZtPf7(WTdV7O`2FLN|6B)-I>qMW&pbnIsM( zu9Ri#PGrNdtQkS^Vr8;5^)K7f@OT+D1aF-5uYqV!i-r0zBL?d?hC@-a(kj>0sWZC$ zwGM5Xk@@E*xBuqnG{qXDMLTgchkoa)bjAPcBac5_9Fa%sK3`g*!c2P!65Kii3=>xZWLm5C8o9G38=F$S5!|$%3oCQ04v~ zNf-I*BgbuxW5aMjG7Ct0*#lA=^pMtV(){cse<3c^wO~ZqgRnkzifRd~s82{dD~T{E z+Zv8&r&lr z6`0cDQ+f^pgVWL8a&B8ojX>iqB3Yg8zC##djCUB3^`5*wi+8r$T+7YdHtO{qo2L`+ z+R*6OvP{MqJ$Ee)t>iK!>C}I69mZ~heYj#|otoDZlalc_n9oFJtI=U>2&X|#H^FE7 zd?Js%ld=gDph#e^+H)(TD)UW_B3pVg=F0yLp$Zisc(Du|MOkPnH}Xht*)sS1+`i-8VHdy%oxClLBpka_zBgGghoBVo2+z^Xgr^T_ z;CGA-+=AtZnpg$nPu*1>ZjjYHrlt@i8F^4(aI_4x~BSqK&8}>M8o?=q~mvIEO zJ5<}X%P^4?&Xm>QmT;M+?P)T{w-o=t-Wgpn+o!;Kl|5T9&np`VVC%E#I16eLku%8EV9-ijk_C#f+Q4$m5Bd8jEI(?_}4agH*Jy$ z1a>F6)#?uipW#Uk(VRxjD|%P9RypNaYa2Pg6+2e-!U&f2V@xqKWs7u9-l!npd?)Ua zbm%0r&!g1wxfnwQT@yBf(Z3dnNQ3aqT)TCCalmuY^#C}35SZ4v6zbDI5947PULnvC zSZGJ`<>_Ub!StY*j-P+Ne$cjvPR_xL)YFr<*z*hXbIAxV&)B`D9enykf}aD*Ry)5< z9=ry^H~ZexspGC;?wj!9n}+akE#Oi#+`51LN@R=m%038q0f@O|e+ z3UMrw-60pUJ25~y1kwlw9py5Czbg#v7_aj`@H4o3uIOOZ7%jji<26h_Pj?QuB=nJCEl z#KP>}xRS2L__9gKGFa@NuvxE3@8}IoR*m;punE4xYGTBP^B@Pw<2y0Tjn7>e04kr} zfEs?4lhM8A)M+=CyKu!khmZf2m;RMjd%6QXDG%GwWl#91^Fj%=fi%XcV7c!;oy9^P zd0i{=Mh)wTgpaLYX;(=zwB7y?Wo1#XXrRu$;cf%rU%Edw%IzSP`u{v-sIhCsk)YK! zI2<_X9UEs%7t<+{q9=Ae;wCpLEcWhXK#CkI!P6+v&n?15^fy{#`xs{d3h3fN_Z3H{ z>Bt4V$B*#C#hOkHd+;EPAxW7H_cVkx`w=tNMie~pvp1}DW9J$fq)GBv9adFjMkW7! zkTfA(0HLU=;FIUt5i}j63}>$OU~&}S2=;P5NI^XSSo;hWfGyc_N2VZZbe;yetY|vt z@fo-aW(Q56wX5oIq2EDvg&13Jcv@Wu;2YQma~>AU+XDEOWM##{QqH^@}qK&C=reKgc{3ZL*ZRP)5# zPA`GNAgWKGuBNz9_(k#Z(bCVz@bpwS-1`&XIKn^RS+$xECx_J2-2K`e`rQ)Xe>4H! zDD@8iS;xI<3{-w$B#uxe*i`*6>`bV(@HJ=m%E~=%r?mTg+|B$ppE*5}{{swEx?1)fk7NbVqk7%QcE0&avKhgeWJBa zC^GV~`teJ}g_SG_c!g-?AR~*!^|IT+-Q{Vdm#J(nIwc$=RF^)DVPT_S_0mp|B?bvG zdzQ}3x4dJY1bytGN@dd~;lKHa>Res^>0o!g@}LosB+8);1$*LsA}-R&OL)! zSzolhE=nTHT^!Zk>V|aH6;fIJJ$oEK6zuZIJcz%E)g!}{JSYT_Y&JDZb@<%#|GJE% z$A!fjFiU*JFS#lds%7Jn+~Ms%w*L-v;Iqj~(U$y4a=x(0O4abQSSdA^)Lh34Cmj^q zw_JX0!B(k&a(#8eF9#^J|L>=MEgSS*z%bFFvtn`8kI&Z=R**X^em4HU~TKa8Nr=g z!2hv^ya97HAK3Jv)PF4-`KEXpE-d2Ai(k9BfH5+qU2s{h>wtP@ZOWj3vDouvm6~ zEjK>_X`07uREF+mUrCG`yW^%1te6vb?c1-rc z>}X#s7rv6=q3%E=C2PeCZw9~xj3Xp=>gl{JeB@7h7Q zJEn$X;ZBK?K=g|;M>|Wj=GaRdtOKjwE@PHIC!sPCH6&{33v*#k*xZqr0g4S_>^Z(W zxp;T#s-hAgl9(1JJJI@C?}0dT6LKMA`KH;|) zCBu@-ojeDQ-4UTY_Wq+KmEX326#Pomlhs;J^vlJB{_a_QddIiF@6XYi=Q- zDrVr1Vz5bIqewzx%qAaMI(w&r5MRdlqQD1xCMFT$Teya|X3q-DZ|DLdOcQn7Xz+Xt zMw+5b^-w?gyaBPHD3Awh7io!m?-fE$C z>SZ7=F589Ob3^#x<2vO6SC&+~ucX!5ot=w?0eo@;{y9dg1k7S_^`&Rm{J^%Abl)8Q z99t!>LUjOfJnZ~Ddk^eH$LyPi^*u)w@FluK$Y>Q$>os;Q1h<>Grwy~T@{@(JxPg4u zU%kT2^bVLT22?LzNtBa#pb9fCKeDHR?di6)hD)WuQ81n2pTbs>YnIB(Wn2#Qkt>Px zCsiibdjJ_9XHG*Tfd#k5K^i$dKt75Clw%vQhqmET(CE7kH*)3PhQQxj!o~_`r%VI3 z*nb_fC>&dPAwb7W-CDA>0h=#ENfXCio zAh-kPKSVjPxEWJg#-JFE4z~S%=YERoOf^amQh{g^SHu&f3w$)cvokcju%XT2TdU#!f`w~dsh&du4LCF5yrg%EUR0>h$#%W%to$Z5`iKlQ2muZxB7>Drd<+cKVeUX-B@JT-qyKjhu*rD z^&ISuf&9vM;)M~D$MO$%yL{~+dgH}*{{+Y8dZGSUQXA|iyVNIq$4dJLVwpDoZgDTY zCI5|=6jmdD6NwPmDIbwmQiZ3}1j*tFq7SMlv3dCj^b}XbRM%;+H}HUv&UJz3bq{}W zSUY%An@V2HBLtod*Vt*0-!_?$)A}{{6J)T!a17Lkz{=Rlio=@vb2J#~I)y^T;i|QV ztV5joeg!q{ehoN+7k?t6J<|=*{|abQ(id5(SH08f4Ct^T6Int=G+3z?#h-|ebppR* z+9g=5f_)#DI0o9-EDK`8$v`io7w9J#OaUwZ_I`G{u} zg>;@&3+;MH&Ck*WIMrC9uWBeE{Wwm81{GlYi7Imbb;qQx z)H;fNoiGU{C~_I(t{uOp?{(1Q+zZhcoW|c}ntYuLnmv!O^-)G^5)J05I<@Iig{37Q z$&3HvHzk+Ykr(aHDs4~ibY7C8Erg~C#QZjuR3)D4+3H#W3{=~K0qqO-pAC;L?tE^u z=ja6Qjb8pemO5qAvJrJ0Zz|I!A73>B3!gY!r8<=vi+#kBbfD z9QNv{0?bG3szfLK-t7Mn@yob*sDzfF;A0L&?cE2$1B2sw7qWrq4$pybS$W2 zu{~`vN`PvA&umetAv8`C8ILpk21W(&&+*P6;6U;U(DuyC!p8?Lo(djQS-ax`$RM9Q z=Ir;1Z9EUN6lPpezJkIF5M!y-e-eljfre)M<{^G5ZzMIQ>)NPR`8!7sZH@D44g; zdsBOs6tC-BEfzt{du8EsfliOZt>Hfmr@lDt0%!I59kA6*;n-rywfKa@QCAcZ_gZ^ik|{QNa9faTd5R9diFO zZcn%wLIVSxR)-FnGCI1s5oVuF(XbJ}M*Pp^@9|;ltucHJW(}zym?HZ6EkZ^G}vYlipi5(ELB3Xn_$Me zs}d4j3e;427i}?pPx6!&WnwsXI(=0I*%w7(v>h=tK+}%-DNR3IC@$YHJxS%O{P4S8qES>K;Epw6^zQ}V(DRM z_F&U~UqsId0bs(h{4YUF!3J{7-X-9SG`Qfh>jhn&e)k?E%^MUy8xz1}I75}Xdtsp5 z;PrqLp~Xm&#nsS<40EpHv*>V2exMV>#+-Li%81Y49{+6O!!yo*K7G|UBMG;?x9plJ z)=%nrBuoi(oR>QYAA-!T#6Qo*%dd=y6?yB3xdW@l_-<6*P;SqPOFv}L%W1;nKuVP2 z1p1pw_A8SN4)|!iZfxe+wgf=*V7$Q|XCKa7O}cof^_Bp+VS;6{9YVN>W<%Nj;D+yA zP0Z_8nky&r&uGI1l1)vwMt=RbN=Z zDcM(X=~CEG`b`sjLKPxqCJ5T9Q_t(sht+&eW*mLV16lY9J{y!wIacfaw$S-@i(PI+ z70)MsX_^3*zJOl4S_SGA-9%}gWX-zrZ)Xt2p>>5{++jmB!%_y+>7U=!rk1R+A>ANG zAcWTQFoO@%z&4I|3R)K*juuZ?_jia;rt`o@0Ov-Vb;W{+jA#@rD5AEL6yqq+m2Y{G19gI2AVv*SKrD!2q>R<^!N1;Dk+P;{De!B! zUU*;8c9`;3!e2-qrkJpYQxhE;r{AUOHxg}RQ``hCx$Ag|dvMZiMU6#JSI4ri-Et3~ z8!2IEwMx|K*AVB;=pxfp3=1-MeLn4Oc}shlAD+JF5`2_493YC&tJ;3?BZtIiG`1vmbs_RAdCB_jv(v&KM0xPOgY*=O#{B?m7d)O$;gUmYu+( zvx51=_=~P+M>*UO*9o+Shx&dD-pj8u^&AS$dcglARMVOdf_CK&g0%j^tmL|*Oo|PsJ}Yr^U(z+x zuE0KTXP8l@-?H@5!9(H-e4w`f{J@CiG$46U!vm-KOnePG}%EeS6s6{o*23z-Plh5QT| zG2UKPkrPEaZO~x?fuKTt*nL3}(j~VQp%y-HcN>7W@g$CLjdN|f@kTOW*AYNLAkWqzI|X_CElN& zTYT>8hg53A&+J#umo7(yOcnI?>C{CdAn*^`m%_QS;za7bm2=FL0}Gey1Hn2D_9ZIT1>^uJe*q#{ptWR@o$4glig@*#z@#gzxSI-87P{n7I z#+I@gHwHZ+@*cG3%QlOnJ>HRL!i*%6txHQxH&anxuJl zhjB_()T4v51nsHTgnb%hUH4B_mtH2E140TG)8EJkxU=c3shNW^TZ7(zD{#sc2{R5T z$%)3MN6}UUKwZ)o9Wo(pvd4)On8sMd%GwVy-QnSyB?&PW@kl@%!uim;><5(U7te0I z{cyCqK(52C_g3{2Rr^bUU90jx*Qe&s7w;c&89kBx)xf68TTc@tl5`CXc5 zRB>FL1AKFO!WWxbeMKY;K@;T5+k3|QlSs;oe4`UzmiwMU6M(6K^Uw_$O!ZzZzqX5hQ;36oD zv9TACN=nFgTB)*bxA0GJG=GOG49gZIn?bTZ3c)k;yGR!==KS<0z}r|Po0&r;`_s=H zT3@~>I)qUf!&7U>b3|@EegQYaEBB}$j@SZPu2z97MjL&~Cm%?eBve@l{kPu=ckfP# zA#rg(jMq|$dJSj^$cUT_V9Ixv>jmrUU|VQWEX$9|I~X}AkJ=ZTQ*kD#8T%ee&=iv# z?%^Tovld6MQ03**A&h56U6&c!ZrN~spVlSN`vGDKo=H734K?Mi{p+=x*ug69P4fH} zQL9*bo?OZblDoU8Tl@JlXAToggE}RIBjG{&@j}6kSPWiu2{c%iGE}zMsz|}@z>-?* z>#=oN_BHkWeU_VpI57~U*ZU~&$>cL#W`UeBn(3NeaQ9*Pldmhic%Iy0;HlA|jyhkl zap#`>f$s3uW9&-GFt4^Psx6^fIJL$tq80+IU%8`akZ&zkVFV5sdCglB$-gMj- z4t;9Ri4K1WW%%n@06oPU6vfKQD7?30Z#$%7BM#LBb`0q1WDq)b1J>$kQWU3NKz zTzs4Az#@b!Wq7?9p<;dpNtWKxi3SZdpv)rE^`=X<%0o0-Jvo&NmA>5OVRF7N864;$ zUKq()N(iHcTn07(E`&Zl2V45uySrB)ZySx}#oLV|8vJLe$m-!#yNZenrUEtA)lL5i zc`=&8t*2(SJiWKe7cfg!_0mz0yGH=P^NZIIGi~VP&(^;+b&Wt(*Ilqc_Lch@mn68s zkzZzP$J-XVxCi+7k+O^?xuRLH-brK3d`w8S7tz>k zv9!JYtsD?A!FbePAxTtv2rDH!$+rsfH-o@KbMDrQk`>vYbetgfY`B;gn%M zUpFPkw=Kh|ugnhS$C{@G<3YHlsG8???}J)^q~i<(q6?8TG#8`-EfR!hg=@e%4Hoid z1aax?rn^`|l5q76Qq3MM)F=;VHQA&<2{7rquXkflx>lFylFYi>P|WDd48R z9KHM9+@-F1oY2GiZ*rrei-!%GYW!202w{e2Dv)XkAdcQLH8gd=sH+>qe8}05&oU=$ zX!#fv1y?!7o?bWy+kv#CR0h_0cn-+9R@w+IcP7mDr7hTzru-!ik=;C~6nd2fTNQmB zn>>vD+@;Oz>Ut}Fc_CEle^Ru&PY0DbO0O=o9-hVu2UyglM02QwCTF-0$7`o3_63nX zBF)$J{H`KGmOEFG&P34t!%T~dXZ{0*k~H`EQ?uVT&lVhLHWwd3Rvp@qv#SG_h$Cf* za^r1|H(l!a10rQTp4-m>VfSq-neV!QP}T~j;b$&Tf2Oi5RTPAhB0$$#1H?ce)C1rh{U7-t@CsVn* z!aj{HUR=NJX6Vsr?4T<1ba(+5bSfcFxYFeQTLu)Rv9bT|dG{E(F{EQh9N#zuEf~ra z_%G}YSgpJCMG+4A7ffE%rrzWeL@c@e%|Yk++Po-_3_(q&4fU4Sj}Vsob#;cxZX=R$ zX?v7m96!%yG-7C7?t3&{DmlAqH0o~S>D%NqZYc{PIOkh=H&pQLss}3}DQEtDrI`+0 z1?ORI(MlCcR1eJAH`A6O=pUb{##C2h2_A9sNS;u;v++(X9eHUAqN&{* zRbp!m%$%`a$V^XSJjA24!vZXw?MQ8$5cL4B3Y(PnTO(Wv~Wro(4A#(xFoI zsw?ch54O5UV^>k*08{mMvZS#@0Y1;^Dth%9UPCtEI6=JHwa{tb(gf7_I5!-SF!DVE z>rJ`KVv1NslAFwVvvh#rdok2~_B?$tBv#3cD z5a(Q!6H8K4HJrS9tppiVio8N|@d_e!zdI7Bq(@wpNMLbXnmJtCMCf#qJ}WyLw;`C} zhcd59Fdtu4`O`hPWV<|( z~xqk&OHeV=_^$6iqv`T||D_jyZ6(i?C6p8s`p@FsrO zWw7%K4AP<|m;)xYXT-qmfYc!Neiu~h-ou7b+V|zh{`_%+fWF>K+Jkmu1OwgR;7+zO z)zHq@s?A?yrr4gvmoTmIf{%O{>@XcIw%aph?cyZZx(Xk8DjeZX1g3O!H$s%enGX0r z^Z)CAm7GUbXle~^W^p@F)e?SLIYYHm(;cGep~#K$j-i}3-P+S(*y(m&%L-D+S|tD> z>S~tW0(Jspb0}j*H{o?JLXYk&gn~muEvXYwMpW%~y$~Fmp+c8v%7iW*Z-!^Dw;;iM zt8gHpd2!^oMT!K|a1f{{!&d)8HWP@pE&YGI$sG}ze9-(6tW?#*1JUE2{{!3E*msr) z^c&gwaP6y8c*-cJDM>{)5RYMf5t%ONT}3+Q(rmT^#BHilV2s9`7rOR4)JrB~l8m`( z@+Og;jhQ(neYH<$Kahs|EKyZ^P=qJS>r_u(Cuqn+?ELz?*$10Aet^)dw zP4jnW;LC(*#s%br<8A_MJCiUzi7dyZeyUhmCHDVTno4lLh#-woUI-H=EM15bJ~Ddt z7hK!K%~}>^k*gt{T zpMmybBjm>oup0o_^cvlpp>*r;Wn6*)7p7<_)ud$86_C)87yQ!KtxMQJ15y29tTfdB zs@@>oS2ByzK~XM<;+Pc z6PTI3$)8h&2fkFNOxBitk0g0#vSLhX!ECqO=^^7M$5a33(duBRRtQ`v3Iq(=dT@+A zRX@+3>U4{|@bNl^BIQ)4aKg>FpH81hsK9~^bBjFuAoRX@-i|ybh2C`0JZm4RC~(AT%$&@b#OtTB%TK+S_UB@2RQ=z-Xjl8%y{LR*}eW zIThl}zbiJD421hVO9|t`O9fu~Fm=ULrM*QS6mr)6;E#Jon-K>m1K};q3IR!B#9?>_ zU#bCHXxAyUp3|?#Merl9D9x55VY0L#mR*rPakWA5DfC-KcNPGhIVv1DZ8n#fOoaUP z@mYF|A^W_W42@v6#N$gdPXtUS(xBmS3vED+y0a0R2bY2YN2)5+%mUMfhPBsSywDGq zT;;6BQ?oe-H;=e4iq8dqb60Rl0>Ev%~Ic z%t4fUeKZ|z18LAT-ji0jXvjT_i{&U;J z87Hq5jr3TTL%BsVUnDIE{_OJcG?{v4L_O5^g3rotQ=bZSd7DLB2a+|$^wE$jV(gQ9 z1(0>Ow%Kej-J2>hvAU}oY%AFNIgWssY|yjwcH-tm{bo=B!T^$l58V6^rEW#_|5$iMUQoW{ z$0Z)$e`s%|xcF&_T2*EAmgRb;iD`}9Pb69?k{-%*Wq-Ibb+vmH>g&w$BWcH296G8e z3K4nF$+o?nR!25#e}c8ApLuc?x=`;oXy4%23>M5#Y$apD)_d>Sq3>dWmr+S+;}dKe z&}17vNF`e|>Fz-^`;MJFyvWbz_;Mi+mEKp^FMyZ5k1XC9qqJ=iezdY1g?X8PB{9Qy!I2ZBl2YoQLquys=@HaDQ@U%GwU#NPDhl$o z3|(S3;MStQ&G}e=qWx5Ap^&9vo~FXNfO@#EU}&c&cR>SA!InlN8~>pAfy34A!qyNLa#=H}qjTmVw-Y0{_YP_n)6A(XrzzJ%#TTf;*ZQ?tjyz zd_gD4OzChpw%Ynw{#l)!M)5p)ftDoaS#LZ>;)6L&i#LjN${FV>mlFHsU ze93@HRO$UZOM$rA8u5``o$o%;c;X%o31Z#Gx!x(duwqG5wvC^^O?RZx3-B>6<#8?; zq^HZKFeDL;79nwJ8Qwfv0H)$YnCOELcJIn(VSt!O2C2;xrXE`>@3%T6_YjT3s+@QY z(NwWcS|P%;5f$6BoaFKRrDhCPGzAohEc`#0FxAkyqwz<;@mW0D8o`jROD5A_$&X@I zoMi0UV>h9qhjh!#C(A0ASEB$sK*Ybftm3_wlOef_f}!Vj!AaJ#QhV0BF%O5ps*!LR zcBSg@heuGs|M#YBW&huUTvYI}7~m6Fbiij0xZGK68T9Tt2V-a*Vqmp#&LLrprF5Hj zjujvn8J70?(rg3E%Z!l?DUoo+mS7mIWoAS96PM%T%fDy~vWJ}dmPi!uZoNghFS~$% z#r7gWn(W;{{PPWtEO}5}FL&zd9gxxNa9GwV-&R#U+Oz^F{z z{U)qNiTrv>z?L)LzDb3rh?52K6%vI6 zAbpJD3hMstznI&dAFmI;_YzNOPKOEbt}0DTzp4lBAQ#2zd6mm_tDKYbl>`20II5jZJYRMQJku($Sk60S3F-3qI>Si zmyKLO2n{gRD_@P>+$^Y4Zt7uo%5}q5ZWmDw0Ja#Q<()}RAb1{MKJ3FvLG%8JWUNe0 zsB=#-#NuLUD?s1x?eJnw!)46N@4+Zxajd0@QhPF4!WJ517_ivnD3bq0!6a6OW+Qt4 z_cJiu(S5II5KG=ZN^rh08aF8J;JRgted-6!@=-m@vNPE8q@c}HcKJqIg87{eDO=BW z)LcjLm;zcB81i9lK4gEs6Bxop(uWuS@c|26Aq{hy>w?6Zv*a;ESfc%Q_P%d*%)8^F zsdx`d9Y-xPEJa?;j}zjWoubZjR3N}a946ika~xM&njF<-l^Lpvzefq^FF#Akd;Lc|(b1TDBG{7%RG5nrx2t!lY>*20c$UWJ@M?Os<-+eIOjow`?&WDKbDn0Aozx^)OLA!TVzdn7y&nrg zZ24|#WMpZjZRa?jvSl@E*&u}EUyJ=%t6$+v_t*93uIRyN{tU6=P|k(IkcB7g^{Wvn5mcw3e|mm$G2Tvq+-+ ze}+Ds(X5Q{KDP_fQexOQn(uks%ZDC4 zoskl{c#08MmPC##(&J4h?7Ht91dUc!5p=-JA3b`lc}ZELap3idiI2}7V|S5}@eCZy zcL3KYpJ=?coijtSN^(9|CeQ$r$xO*pQrY4$#eep;!Vpnsu46TH%+v+52qQH&j`6!4 zR{vt66MF%5ZL^Y5+-?YVB~rhd>WL4Q%z4yu&t-W|K%=f_41$FP{X>KoBzdW)e zIgxf|UH*%j2c2)PvHdiDT{1GRrM5M4-K}M9vJDj8BiP_tGWNCz-$O&)v@K_L5pC<5h z40g+%MLp+~RHK9lwVeOkx?*034G~?I2G;EKKAmR0#ANLQ;H^JSwC@((?$!V&Vsr}N zXmU(#VikvK@Fkx!9g;hvr162@sO_(%jTsM`U9~zCYd+!iKX(V*= za&e)Lg>^oR_6~^R9bCBa#EKzyAW%QEi=U)Lo(EteET*x-(#yu!>6B*s5Ob0xelbGy zN_DJwL(9O)u&=Ztk5M)cTDZGJ0}0Ui1juuap>`+Ua`ZZRV}&vatrFzdkB%e*Pu@AK zf#_rj7uT8QVz*NupSe1@v4Q$-Gv`Xm*Qfe=zY7YPJjcE7$B^1$FvgUWYwo?b4TiS&rx_89a>^9vqO#bohC0zCzc``Ovu@DOELiwds&6rP?8r#)F027 z_AF_-Ln7QZG5a3qR3r~1OwGRA*duA;m-S|{W^D41&=nM#M`f3=@;)^Q(mes3v;Ffj zMotl{h@J#(@Zp_E0VKnR-&nS7ZBMxy6Yc|BbvY<8kZ?&5affy=tcbAoY_D7N^XDaX zjHC3Y*pzt4cfm+(V)iVxL0R_Gt{YYD-_coPb^~S8(9O16j~aN0cn1_e!_*vU*cBzp zb`>Oj?P)5t1kyXbda|wrQH3iTus?0QpvM_Nt94OJs9M*x$Ef^D c|E;Ug*1wli6 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%0Dnss&VQ&c= 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

^cd*uG8WiJjid6 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 z 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 z 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

    ;8d0a*J<;0i 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%0ALAfZwk2rR%w#C+K>p@ePW<##5s| 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 z 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

      Ov=+wcW#}roOgdc+oxMlrgWu`s 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⪻h$ttWD@Zl;rX7x@pYLQ2Ru(08?#e2n%5& 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 z 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%0D0fKL1ZZc$)lic_r<2 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 =P* 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

      LkHtxe<|NB4ld=p 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%0ATLCAzm8W)LiwlRFUOUEOq5jJ<PVrg6%j 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 z

    1. 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

      _(+SK%ORJHQS)kF4iE2 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 z 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

      YMe`eV`4OU0Zpl3nX~0l2B=0yx z=Lv|-lcAB?3E&2qag5vSf&`}%m9rdD%D=2M#aN|^60C`8^Pg<_T&8{GPqyT$D-k*6 z#MU)_yLL^n3D-Uq%&SpDL8G9xmzST^jR~#6z@U;NoWdOa;_+++nRID&5IIC&ftlh&);2lYDw5}&cZOx=TpBErk(4QaQzu7 z=``;(0eqB5h3>doy(;a>XNja8@MM03%=gkCdRt|%^tSroS%RI5X?>t`|F~~0T72xHDZ1pea(;hYSz9P=fi zhI5_yEx6jaD{Xs&jyniJbUl_v+AU$rAO#S0T^+N)kV(fa(@BA1o*}@-kzaP5&GBRxZyl#INXPP|v(*Yg8p;#|jNP8FG{FhDOb% zM?;^93~+h0At4Hr{cNLY;IY8A;%{QGzaFCB;@K-yzr{0&+dCh@xO_gp7f9!%j^eOE z>w#p5a(0DszP&L(%9DwvJ4~wbB^&H-20jKE=97Uy2Vp0eMf%0_!c6PVQzVUK7|cx4 z1v8ZG>Dv6{a%#OW*{UQjt)pbyI)C|AyWkJSmB_5?Mm$Sq25Yq#Pei|=hY6EC;2>ew zuVqOmdw_VNQe{7v=U=mXNT@909E{hc8ui!h62b73f$*S{6Y)Agf@|h(Fz!JhB9d3I zCE`h?|JAtq?jez7q8HsaG@7q$v7e`KZk9^O5Wv zSAB#@gErC6;`~TjAAPmO+LjV*@X0D#d`Xo^&1OwCd0ft7VasnC4 z|Bk;?fDEO0oNAc=m!y+n`-xdcg_Ej+<8poNwc&vOmBdF$6pSap!0Y4o=1kfQyielF zaJ&Xi%YWs*0THtG726z?wokue zn=$w)cx`=G3*8YE`dH$z3#d#Rib;G-lSEN`ATT0wtyO($yc z{f zc+Hk$d{0e!&GvN$oy2w&6gmbE-$3U?su{1_npXLVvqWH#41-h~#A)T3b7($1H0K9u^v6h*bY>64u1CX>l=FnSmMV+vZEST=fd7OVf@zf5!K8 z{RT8u&cuzPI~8%B$P(($ujHu-@T_Wa>0$084m-jLaQ&MVta;r)u!}5WHiAOmCZ5U^ zY`VxIR2>(hdWIqqaP~uZ;r3a`WVDGtBF4~6b*#r}m{Z(&_%l&yImDfZCf#-ZV{nS5 zH+H;&aM=A8@(IhQ&0)T$BenFt2bbszqsHbQmK0Ab@~}!CuFg4Oc(^SA7Bx*o9?eU2 z_ak1hUR!=6Xqx@Y+nJ1m)RBWx7(z_z6OnusQfCRMc=g`pBFNRo}Q5%>T`cV9^DpW$o1$@yG0S%!nsYR+y7o!rAXyO{KE&nc++Y-{g&) znx-5k7(dseBuhJrY{A@&POWXqANQ#T5L0|P0hq`!%#4oCNB*(xDKhrKh}X>_W4}nI zt8YPTwf+&2Lns*g>MejUI>lA;wPI zToCK&z6G(yL4+=KC&?3u1_GN4J&2pk?R6gddDV|dFzWZBD_q|Tn}<5N(nyP;i7d3x zt0Ifi50F-9B8!Fcgyk(lnCGW4Z#LV&XKA6|&m(tvigmT7j|PA?&;q!<4q1yB(jI-0 zj?$v+zmJ+(AD|jql-PeJ?kJCx@DahONcVj>M zYD!k5?potw9ReZO^P+SRM;`h$V5gY0xfTX(=g-aQf^mqybCY>3d>t&CwX_|t5_;9e zfEKDb7SNN4V*%|OS6EPIr&!#6L0z=a(~WI3a6V8nJyRpXDJ=kZ0*r7qA~-$m=^GiQ zXHfCxSWI|mcn>U1z1)4aZhA5ouf5ka(lZ+g+s+5+n=bWK{_uDFIePlWz>{Y8J9aAL zzc6$oCH_JqcebIIG@k@oWS2M~*?$hG%Hbyfn#FqgQ@wl~aJQ#r+LR)`Dl2J;VCM&x ztmTfas4Fl=_uRyHw>XlJNvOQ*hcWjA;aAv|#ecdv-|BX0Uo|k)&x;i(BWAUOk8N z0P~pI79(+e8Z`&%SoRsyT?;LHei~^b=-XA>(RceKt(L)I zTRGi&22r6~zG=`kzevcmIX5<)Exh(~+NNciA6p(M4YTmTwDirQ!?jS?3zXsbh_qUf z+GNyn+5d^m0-4;1$pj6FyjF{{@E)LF&X*XNy&*Ju=ZEN-HLzR0a{yCDTwo)nR-fztW=%N7_lq{2cfP``_h;ct zMvJUn(&9d24Mg7mauHRN{Oae@O7{!0KBYyP;d!XDQ9 z9l~Sng1!B+NxGernKbX>OQpVG4b74pm}14^(*G4ZSiWTmn|Tk0wtDVJ7FqwKSkHq@ zCT;Oqws8JfY7pd_f2lxl=w~mi?NkPO;FFb(WfI~J)cuT#mbui8RR36wq9adR(IOS%Cb@8!fh<*!Yua4vbze%Sb(wm2A|Ga z)V6PLK^c=w)~vZ~5>b8#?(jQ}{bN11v-4}GhpVZJCGi*bFfIK~xmr?7pC+qX`*!ro zH|-i!?c0@WP_?-0-)u}v#Pfp|h$tLP>}k493w1uny0VtGMAuL_#pID&P!B&=33Nnr z^faWJ9=nenmJNU%NxV2|t{n;m462L5UMtxm&@YRzTurI zFxR*+GVm?d(t;;BQGD83wJ?j1KE`DDXvN?-^-W`2jGlJAiN4k1X`W`Z{4`H9+P9r! z5ImcwQ%Nmg|I0VA^2AS$7V5B|4ABCP%E4jr_6!89Kh0)D0A3$%u8vf$TztrADe`B~ zHf>q?UuR3Jd$VxQ))WSzSkbtNGsn%IHf4s|Fw2^z-l?}Ox#G6LQ3mX7+z)_TYQMLg#(aFHSzaU5sUK`D zRC+zgl`cQpvQ($}3HYNsGBZsrST-Y7J@BKgrP}=?XwOM^4_TzD(}$&ml(bb(w!*K9 z=EK3gD8ZrT{Za(&C-BYMWlPZnjBSd?{baQ|{boQbH-HJRJHYnnA2cmjmEEvDRUPR% zAyJtJaaBou51Xa|;|`N1%oX1=i_zfx2}OamCjn+ICkUwvSBtwwWhm#mWi-8ar3pvw zni~f5Ct~M2YMLoz9{1Txl=?RWdGG-%bnhoqKoY(=ASKG*LZ=cx(#?5G20{X@nwQV~ zxVVuhFWgNYe;;lNF_1?$^2o7)q4ifm+U@ogT8xL)l8yL`*ngHScAmSNMFTKeEXVHm!NiXhowZD0v05|U>6rgWdu|Z zGFGBbUlNj=qiP0K+0?q9ZbwyfHVdo#3$|7%4LPcE;VeKE3eF3@%-tLc|efn9Z5VD7}F zSMFb#^lKN!VJq@0>+#@u?l;{pPx38fxk0U77}r$!76PTKe*V^!M_gSa)LUD{`G6I) z(bM?}s9(2&r2ARExiWI_PY^#Ebf1P%InOu8rR71iNbVo9Ma9m)f#4J0-q2&Z#h|{_t&Z}h-8(Z1T zrfkY`{ont0F8>z=`M>9EaD99Ga8*4LrmH^8-dPR39F};+p1;S(c(1uF++Kp0us&vW zFx3l1wnM`X+na*rs#~>GThFzOm_;LjzDMEtocp2U=bgcci?atDXxV3NBGhqnRJQW&gK>3t1*m+q zmfgZHuk~k5qB7igX$1FeeOGN!CNZ{mF9$p1ZjR-93HE>ltuI;zXsr?ZgZp9|eTAy` zzimZLL{Hx@o!s|6IfS~8ZG^i`d3E(%!EW#mn6EC;b}->3sN?HvOIZGifMf9P0$=(J zjmKG9l$xK`kBeS+MI;H_1v$gqSsGTY?zQk%y8o0bs2pYP*orZZv0JWL7)yc+OV()p zrw{@xz-!m&#$Xg#d#7XUtz_A3($EUBFrc%O*$A~KOPn3v)Y~sYbsIQ@C6G2cFx_2q z#K}tV(@jJiY?rmqgX!q*w)=9q1qByZH?)zqXx{gR*OYO(a06aYVVJe z8@S!b7hu5Q)rHVE;nTxB7g5Q3{~QYySX+ALiui`>?Wye|7#V~u6 z%Bi;{glp%M>hWq`azx*uL&tI7+{VPX3~)xtQR*SHeYx^}5eh2)fn=DEj!i&cSejFR z0UJ6Sw?v2gQo>l3@9!1RFl(;uYMWD~x}UKiDm?_?!EJh&S@t22b8SZYf&bTyRxqY#@HRs(A9MtWOXh`&=3IUM2Mgn`P{xHf{>d7tlMgn$qwupcVAza18`%*!~y}A!X#sXCk@1NcURi>3*Ud{S2VO` z$P7i{A#z+%g-Se;)Q?Bn-up^e)zv^vp+SU(2|~i$Lq*LPbnGvMBCgh2DwPGfscFna zOzj9fYYKFpC5>G0a2)CE3DnX-T$fjq*y=s^3wj+~XzGzAb6sn%2QFY}{5Z!C7EZV3 z>6u;yiXCrj*eB^U{92$;c^7pa!=hC}dq+dx{z|L$MvHVcwILC(ktuR8py)WKD(}y1 zqP{)Rq>(E9x!e>AOig{UqByHcI#YzNCy|}Xv-FpAv<$%Ke3P(Gn%)4DOGYkzl9&_u2Eq<>4E~MN}RLF;oo?_JofG>XPP+wHN$7VyL@Fj z(gjJ^&n{hutxt8wx0f5tz7kO(%7}`RI}qWUh7lxO2O(SuKaGR=wvK(7@rFtty35TMQlF+b};rj;*h)P!O=7m*+oq*?t^v5+UG28pdmwhwlr@L_H@a{=Fhu zf8c_9g@#m`SjXL7Sl+BRpk)7>h7L7GhDm0~u{ZSvdpyu{vbI=c!}A$78QN+5$Ekmw za^!7Hs*)7ivOalv_>GB%_*10*GTCtM#$-c0uEMG@WT_6S9d8ab)Bxdpem(!cY+=}U z3T=$2(4~61hA(Z0`0x(FyyO(~R&@QQa8$!g76j+j*n`*f30?k}Rwk;8u91eSBX{^O z50{9CXy2(5#^-b6Ykrtob?9-^r9SUPeY5brT%+mj+)&fXQx|cJf!^bIGG12DK}&O~ zY*)$bcninAV6%e_y8XiC;ivILAMDp`nl6=;E(lhj;$+0-;U~mh{kkN3#WlO^MijO( z@lWy#ILp59n$RUIFbNeO^O_yLW~Kr?&_1}OPf%^r?XRhe>GqxK@8yXtkOO8mQj4o| z8V6MfyVbGH8Lf>KszW{NGb1Iuk+E7ChZQzg)`&)Fs;qMp3fEwLD z;t=WJ+`=Sv_7=pV-ceBM?iCOA8Y&h)$V8}fbRM!rXq4};x;E9W(Qq`io?c7Kx07+{h zk^omFT(u8lO5JpOVJ0NDqdiih>fKnv`|FY4xt~OkRDTo+OnW;L7(pU>KS%24UCg<@ z^E}k-#R~{rHJGF2Z{(y=@zz*GK-KM$8=n^X$5#lCSC3`}<;51da4cdW-%Hq%ik{(S zRdgae*?6-m{~#<;mA$kOW<7VI9yUc~4J}GGPEmN=NK{VK9neyvkc%wrjljq?2l19) zT!*?t7E@Dk6<)s&YIm9%a;qs(%Y2%uX*ncQ2dTd|EgMxw+L)i*PHiIQLYl=) zCh`&ZlhPEj+IufToBU@JkbmG zwq-H#%8tPoE&Pz0YTr(K+6A68Nzkg-P%Kpl;8DXX?$q=HeXwS)J=QHuYyN!hQtGDn z#C-MrH}s)~kF1?d8qIyMW{{jFKCvC`7_zi)sf}-56RO#6p`OJGRld-nXR$)nd=;Ij zR$XTJE{fw~_s3y+q(@a{#f^F-9#1yXAGfF_rx@8SIP}MDfhH3!{Aa2@vO86WPr~$Q zJ5}X?yhK%Ex`QjDtqz1Z*^TsUpI7k*v-C*Ms}4(W^RRqJL7eJgyfa4m{(~u7lIl?1 zG%;PKQ4+uM^ARVS{3No8$@hG9;I9@v4<7%Vqd)dj<(Z>`k6A4m1*&&yLr*5s=j6Os zEqO3bkFb~BhMp@OfQ{Jc9)tDzYkEo4z#{|FDETN=@BJ4WK&EB4+;d;tXlyMIB*3zE$)%W&E z`r{`mKB{T(>yl1^uSeB^-5JSv;yqR{GEr^&cy2?F$)-u-gt$);)>P!Jw*8AaymLb@ zmTlwVVOl>E4?GYali)baBBg9&shvae_Y$ky|rYyxQ5p{z5=bcb~dDwnI~M-#+8Y2H!Yn_&C>0Y+O5zS7w{N zmztH(zG+(T8wbN!@O83*SpA0%9#J+l&I=}t+r1+*L@){;K~7TO6S7OQ6MO^pU-rB z@Txy!>gXHY4q5%kr5u7oT4k%03mg|d=R7>kzL}Au%%Nc8{T`!{Q-AwNQcf`8CYah zS=0L_?(uiEuQO&~5vE~sg&ETTd{FT+7lqy6{^ZBH+cQGkq3Y%C_GTg85cOeqdv>lH z{z&*6xpXO-ec&3R9uSy-Iu0V;Q}#mp+G{A1a>&8s;2y((f2sOHyZxHbC4tb1`1(?% zJ?yznN~n$Cbbi*H$r&L0jXNf&qAu-{RZ_R7Ci?8D5RfM(e3TnUwYb0uc_dHKm`w4sGzUsb=BV( z2+hfM4@JzFsyg+ux5#bSIazQ!()?vDbn335``JCUmG)Yr=gWddVKQa{33(cdLYVZU zAU8~X>~|VRtM9ur-|D6#Pxtn*2j!6R^ieLJB*cBHF-)ZoHMM}-ZxQAxwwsKl>igkx zhIGfHaH%qO!lQS2vq~H!h(yNq^xe>4Z&xOGp6$w=(>0TmjO$c~mwMn?_^SaJOpa`f zkD}3eT?tmq&zsV+cu<;0{o%fKUekf#H*~^fIr!5#OySGH}ZE!cvk`H*&h*9ga#bgs%3XEQrpLD75_X07pJj<-C652un>cBs1mopCD%E5VrE-U^YH+(j)Bb z35Kh_n}Uw1Mu*Awz=lI=gbCWuFPsPoAV7mZ!vha%m{bXdfEb={!J_^t`KTkiH{%&~ zUE46+quP@qv$aej)$6z7?4oRqEh)8J`yxl1{xh0t$xk;GU%~a&E>9)x6gNp__BIf{ z{prj6PHm7IeRv;jH$rP$nxiZ(TZMwdTRJPrvuOi^@*$d|`W_pI7QK}x>22@7+aP%U zMIbcdc~@{e#(fy~a@qCOi+r4~j}PCC#gouiYBR`*<)U zW#6^qPfI{NbuEi|df+i8-p7^ss_f4ohBPlxF70+6K^D1s7cdhhFKYntK}rn8dNKw< zU`a%bs-8U(=MpnT)*Xuw%Ng6;w@WO2el@v+XaUg|n*3_a5|vq6F|Xe>ew&Sq=`3XDHi9y=ukJ zy7_T!|V%;bqgwOsL49~#=YFHP<~4SH*&%jB6v#8rQ%*$WTcEnH77 zH6Dm%o3+s@v*+b0l$}6fhb6vm0Llel_p$I&&o40HzP~-pQ6zuNUr|TzJla$t@w_8k zB)gAf>$d^GIyxGrVXVaS#zd0wHkQljr%Fh6E6FtfJFyAOul&37ATg=4Dm{VR+boU99a|fnMeh-ZA`ol9R`;|@P-sXuEb?7;!;ps&%YiH$Y;XlBFeKdwi zzD`~-bYsrd_Gh|1-P7c0394}Yz0_%EGYID$5U^lc?$?sB{cL7e|({7j>R*Rkc+~P^`}|YZqFXW`|v@KkqH} z7gbT4F6rvILB8IOeh`{^XpxGA${&T);KFw-^PppFeRHc?$~ zwWq71Zblq7i$&UP-SGUgxSKIs?ab>EuO8UWH32Wx%}i+8Fq6sCCRI!vH*LmTgYw=_ z@|v5BO~PF>XWvPl_uI48*4yl}{2?zcDeda+X2YOf>NLFmaAcd@f20XHUDsRWWJYggaaY zsZ%r0U}HPAYaoA)JMB%?JGJe?;{*MmH-Y=Q4JxIaDr>#<_k{(K`qMWH;SSy93{iEt zJyY+gvF(hp*IdD{xW6$~4JkD?zvk=S{>C)DY2#Mfqg7=ow=>kNv^UdwN%=Z-3A-jb z?MlbW(jF%TC#pX!E@-4`sk>^l%HCK~b5d1Nt(RYD7q12n&&yUD(p}7)s)AHC?G_cQ zI!?6Tq?S#zf5vIfv2^g>9!XK7GxU@1J(cwz2rKW22hcVR0sN}jvX`A^VlJFrljQk( ze6F&b9SO*9c1;uY{TnL~n@q+;)z@q*b1VbW%Q6V;-O(Y48@NF)#q$lDVEr!uE_bfk z!c={81>2M)u)0P;Dr{@btWU>%l1pCmD@#b#EZU?>r?AwPH=f1D_A$DjLv`53YtECr z=87bB>V`&OHzi8h!L~%1^dKqTS;OAPYX~%AqO>KpO-(7GP+>WOb+BUM-(#*Nm- z52i%d2Ke=LM)m8D@D$L$v!E;-&-7S9X3l`W@; z(fxsi?0<7Xl4mAzGwb{8iHG{ru=;;NFdTfTYZGOB@u@^*dNnr5__=y6-JPOt-Pa^i zi{$aZ+U!n`OjD*8pJH+6dLi5%TqYzSTUqXWJXv|=Roq_bQBGwEn)FumQqD^Zi@zru z$6h~8b62w?`K>sZbY(O*h17?t+p?QvK#nXqpOmZ|j{un}wyo7KvtYR`xjB{#F#ZA& zn>%w#j?t}(Ug`>^Tl@sO|4i^0?h7Sh>df+jq>zsy)#3q(t#HT!opjWnlN7@CviJ^r zE8}E!z$^6bf5J>5A4RDdySim)JlTwCvo&W=nQf-DRv8aXAE2BwP-YLe3l}&IamJw; z_Smtag<^KD6+1WiZ@KRMe}xM#)R6fof~z_Xiz0Ss$}!Wv(|AUGGt-`2C3c~rMcRyf zUotw)=47FCC#1ojjR7}`L(MVa4jf)9r&?GA8slWl}b*LYvPa0z; z;Q^0I#$F#{8=xL{+51wLV=n6Q6m<}_+4XhEq7H9R`7qc@DHHZHPvTJltqxMY)Wc7D zy$)g=7_iv+-SP?3%db3xGwcxZAy3u4WfDYkPEzciot5_8Iy)xA)qowV>k@(7JEc(= z?0DRCtcF*&;@+jI0B`CAqy4)NLJ_WGMF@kf&$Pi#2>m22XxyXvY{F!#-Wz zGr{OpS;yKyZ4bvd_~%PvpZ`fE(((&Lx890bf2%b;(Hg5VqFBLfQA$9vdg^4TdXPT$9pvKK;Xmce*dL)m-A4h`@= z^Nh$U>W!3`_HLutsG|&y{Jg5}*q5Em3Rto}G&!NK#@_@4AB2|R2ISj*c%u3SXlec2 zX-S@X6b02^&4vYwxdl`I+qk&2USR%Sp!Z0`^C@j7?h1Sl4upp4SpbWWl1%m9S|A() zYuYUAiZ^)@JJ6LILfvJ#&;fk+W&ux!!n<&J+#@{(Q z;vd0%Z@VPVd+bK8!iQ5;*NHQ@^FWx6i*u&YPhY^2XvPWkdk_g*%HSC_j#6_zYYl}! z)qKoq42Si#0k|}N3v<2slw&S$ zg;mga)eGQ8ELH5GhpGod@}@(9O|1e*WbSWfCqDInS;dMU1b0sm4i~?8AlCEZ5R;InviIhyJer5?^3e;S=gQR_cs_GZ}Wos(G>%E}(EjYpC{C zPjQa5*hIzTn@-p_q6^Eqav#iCDW`rHSAaOSLp!gMjBBj}U{c1cWcKV$q$wRCk1s8S z_7cv(^B1UJ_X7YFHO9b~zm z$^VAv57Ws1-y!;A@SxUb_~>ynCfx-E4S62+M?`+xEA+ia>1%X+yZ=GL&sbs4$_e_j z(7d(H5mNns67Sq@6O$f@rM2fO@lJjJI}NY#I6}GqmQe3m0%d+;pfN%H5uyG+Nb;gp z_D*{itg_!>C|0ukCrL%2p`*aW_vk0RssgT`f zNO5%D+ATZv0vyyX(8)0axwDq?T6+{p!m{=_yQ+Je)P*0c4_u&=@;SSnbtSMb^I`I@ zPHSlj*%qoHbB*^wRzpu$ZATt;mF%oi9a={w!)zX#7uDMMysG3)IYy_VUv3Q<4`3Jq zVKXvS&ACOwcuXxXlcQ*AlHprk;=Re8-XhE=) zPMuZdfxfrwnfcD9q6UdOb?op*iLaI}Hvon7X;`}XO2%{UoTj<$s{185D^P!C3KHXK zaUHoPE>OJM*lh({_q&^l)f4B!Bh|7Ep-i^WVg~BgQrLwVtIAYe`?mA+dyT(XMvwDr|3DbpN1-?fiDyGw9*YA3CdgwFv#-(t_8vUjke5<1pj) zd(K`Sos;C)-YTtVd&Mu8NB^DQASayL;q)3-3V-@TIl zC(`pP>F@jf^i{vfppU_E?n(wfk^#SW{eI#Pey;+-w5z_qJo+1c{r@Fxrll&_g4eYk zXjkaiUXtV3ZY?g_J|LeS_>Kzj+tz4UD~{6|wp`K^q;I4&^MJbL-E z!n;pRcQxWd=S<@oHRnR-7E!yjuZEgjwedpdWaAFCkHDz8^7S5LO^P~pp>tx~GrUsG z8vi|pnsv%}v2$zVc-7`&=ghd933(&L0JPFjbB`Lqr}V*mLVs5C{jVe_c!xP8e#gf~GhAXQ%?qnZSKkoaBw3op>&fH+q#n3ky6L=1 z{gvX|sUG~>Gx68XM~z`Jx0Tg%hb2;<9Ir^tn>;eMz#MVAl#n(*AowYPwLCR{7A7nwwOdu^{=@{zTO)ueVLBJi$eh1r51UEoz-Za{oP{ zHO~`vGP#uM-b8i7YIaE;!=wWS@on(-;}j(=w5lZ(QI$vV^$SO`Im`FsB$u&H5A;H$ z{HF)r)cUiG?1oT;p{9w{T>6!&HI?EfNO8Rh@3UR&P~w;+Kf-_J|H)(rVMW_dwQ{IY zmpk7S^2<^+Ii%n*y&JcM7i1aTdzyt7> zEIL1&!6-j= z?XSUbKJeWU_@1x6A^SFfb+wp?x1VOb!Wd5RhoN00gfbq@C2gkX4} z&iR3K0)5o#7KmTC=ZUz2H6b`ezrkG4KeWr#5H+Z6bh=7w1p`-mR~K_gmw9SQIwF-i z$JBWBuU{J{%a?D>1+A{oAa{4vX^_h=v}qA)v)fhHwqz^9hQ*f~H%;;3w$tP`)I=>B zx4ccbAwFtR^zt3}l~T?>Ep9s5up^4FT*9KcQ7Ugy%yM?WPURp^U+)_Ffw(o7o2DM* z{mfwf{FbxZ$?a9hnX1=@7;26`A@}$NJezTq7VTRr{z2rMq{)5~`C45CGLx|h1v%+V zk!!?oMlc4w5y72&*gf=zJ=+rs#zhLiBDz^Y?;Iy_Ex;M@7jUfvPSOZkdM#PIn-xrL z+2^{O^RkE`0PAJ*b@`ac=oYA~<^|nDc3aeK%?t8E+|lZR<^`?V`GME_Y0pO1?@|hr z`a9$sYn(CEox=ydyCcLx9%mQoZJyBvG<- zYraOW-u?GA0?@RA&Q&*Zjb6!h?bB+HH>-np>(yb#CIyQV%s2i(1x%lJ*=R@_0d)6; z9~Noe(!{3=1r>K;f0mhJ!&5^TmB4Z;K>;w&<#_UQ#Z`kqHLc#3Ut#qU*wZY(CD zG~#_w$PHzvQc(@v;&u-`wC7lQ!P`c2H^iPllh+1uFU2;ie3=C)RVCjod|`W@cb41^ z_$9MR_pXEUWSSt&k!GdyOuYBD)7#OpTsmirf(*I)d8xjkW%T3Hyf+5vH4y=)AwzGP zBe~g1t?7gHuyfMv^g!5;i{2xwswO)S=3^SkPqfe3#F82JS}JY6JAM9y7koqPH`E!;G9&e^HAcRDNY zFJ>ERqyi>a`mopE$o=|lH72W|byaS1>dGhp&~1!O29_92D-A`RRsx5>!E|Px7Jb3| zv$6zat{H<>$uQVWSH36hFvjUsq=U8Z{`QV@lExUXe|M)*bsIMl(x=&c7jb*UY}pP}3{a^mW!3mxtfa+~3PslrYC- zup7?vqQG`i9GFCc^s-Y=pexn0*#mo*OO3=0kiPK7YwzN?Sbtxty-PLq_fu;eYD!MQ zrwMP=1e>C7pvP;}$d&~iukkk~h0AUiHsZIgc(k2@1se9CKJ{f+5I!)N#^tp4b9p}z7%kEcwTNT*y{Sl65FAT<~ zo=;nrZ%>QBn4p*8+?NITiHkHm>yPOD?D0lL&&ulA<84(?5)w9qY9OMpWUEGP3Nmus zV9dmU`Sp8wxpXai-N`BJ<<2$*g;j5?)9d6#cX3Eka6skpU-TKN7Q^Hg-kGP;$!Zi;uBHwTgo##=MY9o|4>IF z2{=Q+vfuav$`tt~ZlmSDgKzTRf)Q5386(Z=O|vFWr&->-f}DyUspd4!m_IseWs{e) zb|**K|2kjgObwo~Qo8Jr+U_`8pH9lMAS21>Q9argB**ox(EC#Z1*-D41({9fp1Ztz z6u&Y>g6q!PNO{^8wCas3L%X=2(;Z`r8+*Msys-xR0hw0NvP&5bt<^YnJHXlLXW9h6 zajr(^7vzN*a2SWZVnI@vgQHJ>a&xZgPryC{PlhW`V#ub2_Q0^qz97<3Qx%%_wejrb z;d)&}g(bFE%`pAZ>*T<}+^I~*KI~QEGmXZ|Q<;W+$CUAgg4RPOFnHGwh)@I*1HBQn zGZSa}V}2*Dthk9Ty_piHOdadBDn-3`L&3j8{N_ELb_Jgqhci8{nR4Yo9c5W9+wxn_ zSi!K(PX|3?U3H8lVN&3-t;`mmwE&RoeF(jm-#aO8PkM)fwMJTE*i+pL6`UAOBFX-- zbJCvNP6hcu0AKEgMrY@cShc(32BdMb7b0(4oErx;H$Yi^26TXBfY&SbEJH$t6zyl>DTuFvHX#z`{bLeeNI@p(Qx(h$J#*K zqS<|nh7`S_{Ivw0MnUL?7=kuF218EZ@k2O?kOsiQQvn{~4Z@A;$lzg#oo3S$fHJRS z**Wmko-BmS(MoI8*qmq4Ln_ykd^#A!T%5gE(8NV-T*YQH>K+r zP9Ae4CvtClF}EI#9euNMuFmqv)st2==s(up$|v5#K#(HEtiXF$*$lLAjxpVt8-m@u zf-kfdZw0b&7h_$kW(VRrZD0}{tw18ItLV*eKhy?+?pFhV0KWTllIJI|baiJIro@NR zhy(*I4E)5Zcuz^@BW84;uJKIVRgdN%lpThWNV8b-EuV}2urVw^*(hqYerOE}RM8!p zzXwrLwp}FOZ;;mV9wP7RM?#ZQi|F_SL!dt>#2qN8r4Gr|6tsRHNgOw4Q09|({Haby z?^&Iamf}f8etY`StR!_fCX4pgbRfp1IY^vG5ZBu$nYv6z^Xui7OJipZe(8B6D#Zgb z5)+{b$k0~{lJ&1$iL&fACjL}9(fcr2)#ly^04B?d{QM!{4yE7UL*G5u3=Q75H)yC& z&py=3r3q+j&2kZELx5*(I@%fQpSs|E`$^QY?s;fAea**ndDuVAfRC3BNAtU{H3h8z z0^=44ZpyqTl2q(tndI~N0~CH4p}9{yu4x|Q%*V;VdLxQi%LO3J8UodP0Y$Yh&za)! z-V}z_bw9c}odoj)sOpok^c^NU?;almzzZx|IA`zyV)`>DII zs{dgfg>`R9*;hQ`SKk?<=@&$sSYTI2BN&672f?;huOfqdxgf7zF0riZ<+ZBQ<53to zC)#qfyEYxWCjnjj1Z|mIB1I84fFS2&*w9EseR7*p4a#Mad^FSKA-3ISeS5Sw1ZC&g2(5dMs&1OGxnu6QcnG(djR4gteNm{95xPr`tG-2v1{sB(!gXX_IX zhO+NS@hZGciYKiBB69I0tk_Gj^8i{BPxT|+v8`=kInzhTv9(KAy3;L1^`-K5GAfqI zm5kc+Q{lu#a#+dqY4X!m)*ie1KJc+gU%Q_QpNx{j?$`_xN$%L06R&riSxN=4xi9f# zJj4BEOtPo+dhv6xT|_i>Tp~X~BMj2gpTP(zM>KdZo`hL2@nrWIfy)>+3npHZe9_$e zRCXIMS<^4>tat2#iDa$u=y}`H@L%rEdFa>+F$0JQVR|lwje3dLi)<`OL4JKZb z<^!JUT!wi>iaiMJJ>4@PO}wVJ2mDGrm0a&CKOJV9cT!k;H!Z?6m-GcaC6FLtnk$A(YCGJTE8RHVo6A$W$^JonAcU{K8O$zbRfB{&%kBD{Xu(rMKz%mqr4qn36 z&xC_2*8Qyx^i_MAu@`mF{(lAqm)&|2c#%J_G8J;#oE1oGKf|b?;hg{<;x)ziD_Yq$ z6j<8QA2G|Mn;@;N;WEYg(b^7AHU2jI$6+-^ynbu|b?};umj4pFsX`|9`U`+hiM7Js z2dotKLL1l|oPB8`fMsknw0t7?X^ID$C^sKPIUj))yOcakSm_*b$A+j#C$xZT`y_!O zC(#k=H=u6fNw_!>IqrBj5jli;xauBQ%e3bK)p4>>N0F{-KX6oe-+>m9POJfiy;86S z@DyHRUxli+P2pLrT9KV%MGh$FQc?-y*qsS#FGyGw9ci=~mV&FMAxmKdhU~=!mhen8hHD<=@??!Jf$2CehD`59!AycYXF024hB}) zRDg~nCLtTo4TbA*EnjDT9OQFRNinc?DT->XSPI&>6ftucKLn$jB4?w!uqD{Tg&?S^ zJQE+kxdI&Hr<_~RMzA}uZJIl)1MEfqwAzofE0L~b7mBLvkpZKmzr$$J#U=nYY-=!W zCGlu&S`!Ec{(>#4c%Az3n2;M2the7E42b>P7(1N=yY<=(7 zsP_2Krn&K9^z`s7AIeO}u-{gIek8IN{)XvBWG~-@elEhQBKpc8gIggSIus8af5%6KON~i%a4-YWD;voz{N`i{`6tvKp#qY zGe)N>hL&o2bSNdcz^uAdnB)^lTZb`D%wwfo!;)(NTRGoE9r$ai(^4j76J?AuqbDuL zqF*r1tW$c@{;B3Ll}P-$HD<7Sl+v9W~-7WhJF*L&H>uH8kY`oT3X3Aa6FuR`v$Fa;KTKN)xqA zGlwZ*KaPLEf>)rYXfY!?>6Lt~GFL=zE!l}m97H9`IZv^ar-bu#q-}-XTGatx8u?yk zn25kE(;x7eX(0aMG_yg4xibo8TuIxEeX#Q_D9MSYaQe|P?a(kfdJI+lwF{av{Rd2` z{G>YVM?ZIo4pq(6QoxhmVM;CaAAr}>S{j)Ime*7Q6CUe;qIA_|^ry@L$l~y)O_R_& zx?YC4sfN#VnCAwd7KPv8w3Rdqh*TUV65tLHlU=i}2y^Oxus78`fnA96{AB2F@g!z@ z9RsJ~HFQkt8+c+JD&Y=bvdsP*&I4F zLe6eL4O?eo-mcPPZIX;~vdj0pC72JL9|5N%?COdQzH`Q-m=7Oc2c{1Ne7K7Jrq&<8 zF3DAhLdA4jf9(NOhKY0r0>zp4G8*4yEJqld`!wyDjXpRR9Cx1MZ6KR=7TJVpXOT_p z=!L1x+VRMy&4*hg(*5l;*UNJ#qUfYCqyl}z*?S|ufj63*dC`3gu<5C z_PV2QI|y;AtEo*bG1uGV#6Hbsd6T_>Fv=-5}6}+qbgr4`YB%c4`GNk<)FpYXo&KGC@N>v9`qpY zZX#A32g?To)-1j9`A-z!cm&Io2orwFL|83*I}>5TfQJYZJ>z0`Odqh!jMb=#TYP~z zg^~=Qpf(dLs)$Wzd*9kTM2J^$n#&%KE^SN2f1(EoQ_Q9nSZ_oRYGorKA_7M`@MWP! zj=<6_M`XVR_^mL&EOH0~%;lNjuA`F2q5}h?vf{#Oa#eM?`sdgjElkE&+|}7osZ(4aD?U@v*#q zNLF)ziJyrLtpFNVaT2?s1cfZ-r>qpznK8yfH!jbJmE*|e-PhD3Y-=wZb}p@Nvb z09`ogzzUdaVH$;|VYvoVMe~SR*v7G@VRjJ4V@@4cl64r9Zq5bqoJ43DY8T;?rdLui z+dYZIg>fj}mX(Yly9673OvF?m^Vq@OLCJ#sNucgYF^Yont94kg@oiwXoGZv=bP~rfzFCBCkCJuex${ zvfL)T)^wNyZf@e?^#;03QZe@VRj+K1rSzZB0UA0+X_X4bC-;&x6B(cEC21e}6qu9# zQt|L)0T%5w9pHTA|4QdjC>r({ri`a$%gmD`G;+Jwll|xcR^9u#yV;wJ%gv#zff!B? zE;ox`ety z^Mijun!q7X>t>0j$M<*FNos`mDHIA_Le?4#bR#+$@d32;90dur!8^)=lmCV?9I^0I zo$_g}7wJ}+Bbm-f8nwy{w|)1j3T_$*)3)k2yZcl9D)Z1brNI@FmSE~kaA4Ae&N6G- zIm|1)CC-xVKyo-Oy)`W0P@TiJ!c81^`|62*RAm z_+?X1Xs%Q>bqZnEg76q{N^Mg1rHoVE4RmxH0t#*iLY2%l0gLraXvv><#OtsLQvN42 zj1tb_8W&bc5~%tnCjZ=Xsd`^as`RlG1+9wHMJY#9OOy{3%(5O(W79P4b=WSkUBisg z^MySj8aZuU0R4fqsxjDijR^=PYfBn<@Xac8*wyekXgLeBqcg1Z zUfYJRS*5R;{3&^gElT+vrLuC~hffXjp_$sn&|bVY9)?GLwS|!X*#~`8PA}@8po4SY zcV2-yVtWesHZYE=SM4xpuCwqAe<`GVC=vEmD*G5zx$SAnI73|7-aZCR!dNL@4YfPO zH+SCznkGE}tCY150^;0blR=X*K}rJSV-F`rE6-8JTYbV*4be2RXhIxq%ZBpu8w+qR zu((?!bS7H@v0OgXM<3{tvo*6o34bQq{~sW%Rg_j1Z+9&~SFTL8I#+l>%(D^J$aN5mXMLmYcru${&P+pz<3^{oOa7nuD;8 zvvwfm88%>dc+AU0Ccfjoa$9v+Fm-{*ID5%5n?W!nc~3pBu< zGH0vo273D`bA+!0KFH3%F^^_DeT8?GJ(O-fWsaKtDpEqAocKC^)f-rl&ffXhX*e4K zgajXoa#p>RSBeWqT*N;0dg~2FatKqCNMi~{nuXRQb0PXZDU|&f0U)7%~B974lQaPyq7L%u<*Lr;a@1QSXJH1^3`W)@(LWw!bdojWj*3(Ud6*(ZS{j2;g zNNc%nCws%1-*)SbN+G+J>fx?~6Vlti%G;n&^cs(E+#M%qVi#b7R`v@P&b;U>3BiS? zqhwwtT48*&!h^k_-+7+~>!W0Y`S`ZmnrG)B7TJk{qB**$$v#n7_{NI zb^8Fh%7Tq?zz`g`%18=~5@|$nFH(yU!*(e-m&1?JHk%W?!}kG^*@sg4ChMtivspXh zPc=nrorXWP3{YPVFb@n>_Ka9*ea;1J3L~0$NOFM_*|;UrSWv?gD#KH3O7-K-=8V+8 zD$oxQxP<6+u>Q>7bEEI_spTEm-@p2-*)TZ+z%BKP z$RGxIz>4ZUt=5PZJBfdLVjW}p-}h;b6D=Yl z(ev)gxxe5U|L1<;j++UaPn5m|d#lo;Jv_DC3%Tv=f80J$)|hK#V^_~_F-Hw^U?Mpo zCIJb8(V)E7nOj?VvXeG;KF5=(n=5Yk+eZ|*)%Az$@4G(S1%zAoptGP#vqV;yK zv-k16?Mraj_5-zS#qO_X)aC=^)O6G;YpLStIUOnQN>>I#q-wo8LOXv3B)u#T zMZN=Ilt8xCX;Z=O66|fl0uw*Q<-wCOtoF!OJMGVEWLur4e<4=b>a1>f2v~!+mM(+^ zcp?r3JmG3# zA8zTIzuJrQ(%ER7bl4DHbu(lqIw*!7vX`54l+q1D%`xoXvlrt`D~vjddtmV-{DKIF zAxYn~$1&tqKOC9g*@Oe!G3?z6FL>fqI1J~=>>)Un)DR9C_98z1@T(9AR@I>7dUiaO zeH>3sRc2G!LpTv7jX(-Gl~R{If`ZDUAdeNIzv|CXN!=?rOo`j#hN#gAq+>Tx!mCeG z*P%Fcu@CON9B78QvSC<2$ndg0gqH146q(b@5BEjwaP6MQYPk*#sA;&k6udu->)#sI z9Ij>OTvfR#IKv$VN#&hzw=2Sgb1>`Mh2Yt8KG}4FNpZ(akSEf$#=Zb)_-81p?r<2q zp|k7sq!-XiP3v&n%?{yGns7gmE8MA1#U(}|`#`Tr!I57)N#2~89}Q2l1n5VQCRBt| zeqRV4vD>k#*Kx&R9EEz=5^z_M`zrX*^b=aGKFkkaV_Tb&cy|?wuYC!=*KI>^#;gy- ziM{zHu%%`hj$fiN>LO8qmL;~O?15ak{SpO;X3;VabN8ZCh{O}efRTAosIOpdu68^c z@;GXKU5P5xW#b#Rx0m8D%S>$g_c)ZtOl*kpLSOPnJ(xpfb8shX+6RGvh|HTkO6IVw z8qy+1`_VX0f^%ha5YCQx$khUou6;R%Q`VH{&@;nvF=;xA&zMHxgAG}r$;MAO=*nDa z80iiZ{MLOimissQU+V&}rZhYbpWrJS(FVHp=m2>OxI1z~2$8+68+x%2wAgRN0*S!7 z)`c53$i_>cA%MM^n!7P9|z-=Ewa{q0}fb!;!iF?(+OLu z!i;Lt_VL)$?%a$1^%bObE|$PBtIN*d_QQ18ZFa(L;*(B$6WTMUuZ=R&S_Qr>Wwi|P2fIZiquI)^L0 zX!h&o3FKd9?o7WV_s~$cOtvlahB;8Vgu2dyv7b8srC#*n2T(#!f5SY0s>db<($P1} zy@juNUA4J}p83AB7aO1ij_4I^e$MxvhTigom#*wIZhORe(3u0K)m?#!GrYp*!%%2& zTL1QFxLUUTRzUmX_eH~|C1%#VezAP2%m2-4qMx)Q;Y#qv4DzVeSKhvYY`Ad7oYKi=IST7Y`=aA20%@9FgkglZ+{)- z{@WAOy}2AdC1GWf?E79)t4y90Fg!{!Z?Xu+g;>e6NR<%pVNU5u%5(lH$^weIw7df~ z_vxuWboGFFt}^90tgO7Hy5FVd3GCP|VV(B`KoGMu@4^zZFniOMgXUSvt#tFCc`SZL z9x@;7WrcyrtE%9AIC31Q#P*-J{>3-|mEoPs1|&{@2=5i$@8E+S)aS6dy}^hmPSOM0 zB=^P;@HHIS4x2k!P!3zs7e^oLv#w!F$K~(B@xl#!=5M*vG+@1EEb_PX;bC*Un&Gz! zll2DN@kAM6Tmc8c>yt4itw+q6kFe$bEVzgs2-G;2aa9~u_^8Bo+@<3djzc{~8sLp3 zBmCj}r0>bcF{Ppx@93rDm`d#X9H?`KNH0Nk74*{)b6D)>IE|T*oXxe|y-BJ7n;9T_ z8r!%-*u1Bxl#O)G6bGQ))|X%n?o)uhwp=lrJjFq>=88ELO#k_cc>sQrzcG*S-)ggpI?$3aFmAn*dzg z=kinl(T}EB_pP}T3f=duxg&ngN>{X$6UQSG^HcAIRsH0e5=Xi}>E%8+zJv)SMY=*Kz-{-uM-p^J8Rqa&ywwlM?yn3V)=m$WD#NbextN~( zp$#;<{y%R3x`THik7sItcF>uWpz(70KP7&d(V3L7!4R8~{=^E%uWDf^Sv}XmfviAVq z2VZuB$SLq7`q3#GeG+m$2R(Aq+}_I>s^~e0l&25^Q_m;O(J?Q}4B3m{HKGVU&$H9v z;C&6M0T*1Xexx`iJVEMG>PGDj(ksn02M`z(`A(UZyMZ}WE>vAJi`?ClgiH=qhx z__r7Rq8P)&iB@d{`GUphdkgVF5r)2aXxk}slB#C|PN(i5PIf#|afFYMKOiYL`EMPp zHw-`B%gRI7-!%^AK)xfvIa}0rGoijmzcvO7v-1T*D3+H(h#GJl`+`2gFzfFO&$X-FtA;kukOvmz;>R) z{*8{pJ(bzXJ=K9cE?kjF^P6;=Q4|di2>*uj=1Cwu1pcQV#xK;YZv2Nci(xDIVdr}u zQGihUVq)5Z7)GxLi*Q9-xcgp-{jUe_V?s^nO_h9agu9LZcv$zk^McPsTdeHA1Rs+w zqj*e7?dSk_p3hp6Vhnc*z7&yEjWE~zSFV^m6umleC6ITw;An`*#}#lB#Fs3WF+(?a z%#&EhHQ`ooKxg?YcK?oet_i5W;Xg54G3a-G+ppJ=KzN6^N< z;}&Jx*JcyxKQyQKZvdrsWa6&&1daaCY&H}i=nOhhMB}|3=+K@I%~lmvKZ31b^FPfA zDyIiU)S06^ogiA=M)hIRD$$!Nox+j;YHVMnePFRgd3Ah2mbnGS@pQp^cVKgsCO5-4`IQPS|o?Oxo+HE0M;+fA-Cz444<0$r>}!)aDy7E-ULVOfJ`6k%oTAUn8n=-q3lj8!cS|<9XN09BJ*)#MiE}+%0@bQq^ zdgB_d`E#yh?8TBk@1i+zGEb<(H+O52T-;zrZPHJq@f!+yTNT)zRD#Mz%(fk|$K>q@sJwJZe{W;=SO$owMtUNJ9hGs7Rkz6^Jhu)weT(OgWYH^dmp z6{qo3o}vAQ)i|Z6;{u}oM{J=LwEu&Gj$~{y7n0!z7?~>lcC8m>JiHDUvdEyhf{RD~ z%cgTL1V?LtnihXsfKUr=uSt<#f29*!x0_x0vBs(2g0X??&K1+ea(@=Q1%={GB63N|go%CCK zgqhAjk?u+ZJY9TF8H3Yca52{oMXg2zJWDYJP@r2u8LV+vYGrje)~*wZaZ4Ma1ZQ8~ z2UpY+)}ZJKaBA=}hY1zAZ&@GDxpfg#=@6#eM$_t{gO_qJ0?rIBAyM=5z!Gj5lBQRd zQ0gU=ZYn@YLw-c*d8eY_`k-`<(Bku^Js-5w(H}b@n11Wi@F2jfD06Ux&qV`>`^YaN`1D|lApvp)#Bg}R^ahqbc0 zpXqx%33b1ew?Htf`>8xMaKgPsPe148sg;8z_Xs<(p`ou_L#yY)g1;^u*YkOv05{eh z>41CQDj2JDy*Le5_Uzco^*pZhT)G{&IRDppgdN8%n@crYUv_B(uHt_y1PHP3B1!qp zv~`-SC?{-d!b31}wuiRd)wPgPRR=r`0Ye(BcG_c7P|(TQ7!R9M@yfO}?O)?6-&zC1 z{-*C>W3>92{v!B)S+~uBTml+%Wd8*Mhq`j`q4Za<;4VJ}+ZK5i1u5dC5rF@*ar?o4A7M}g zDRB0d|4QT`4f!p?Wvm6_w#j323i1UhI=hoAjPi(CD`XIm2+My-ayflPdWgJW5cmD= z!T!V5qToL6bV7p6FHIsmrY$^ME+82nzT3A1R$TEn#+w2@ogNx-7;iy$DOt+66~!u8 zyk6cnG~z=Db?^2;ksz0Q)rWp=?Gy?KqQg5?W(JDFDMbA35!qygO@z2LPqD#9ab4(_ z)3C0*X=ki2)x5G=UG$qs-c8O7-%2u-r$q8WZQ)mBcBKiu$N_EPi{`02Eml(0)chzYZw)}-jCl|} zI~)K@$K&Z3T00k^562f{$g&3ulP50QwP#?Zxb(L9FjS=XLYj~h0(6?`BCdVy0k{fJ zF+@X0G{k~y^nW;Ud;d}_BpIwvU{A?_#Do1!lzaz(Ytr)=^_WPsWxhb-=F|rud<|~Q zYc2$6%QS-_5cmN}g#uwyKL~?_M4^0IfL)zx*@T+qqCkmfR6Y^}Si>2R%q}}hz(;Bh8HWFwfgf#%v1F0$mD#{K zcF(|nm3Xo}y&kc%k)&?#P?WL_q5+o=JQ@_p(eokS-{UjRy*M|nY*^B`m~t{0NQ2t8_^ zTRRV;9t~RC{&^?RqMU{t4Jfo0R+XfBG|Y#jO>j+!iA2{ZYy_{wQ~4-?N2@Il|t7t~? zRPqTVhS>{H5AG_ggan37z$kF7N4K|M%0qu)&CcA@oXrq}{_+{>AzmF(s9T{wD&54u z<~E(oLskA3wNk2U`B`-8!X*%Hb8{VP4zSErNil_o@TuHD?n-O$qx5c#_+&Aq&z)fvFe$xcB1j(uYoCQFLcK4LBr@Nn@YK>ebJNE*6~*e}(CS&ncNoDzibXXk!V8)z9P zb=jm5s{lNI8{f(P4m8#U0#jMd-g3kcux(uq`D)B=Bjq%r>j)aB@Y zuZ2Lbho?`rZcW-S&@N4t4)iyn;8xppIyCw|hHg^RXXv3ql3jhJ0%i8VcSM-bS;*;U z1adfII;Pa0p-xfDMG3KI9cz}g@@vki5yh$T50fwW2QjQ^_+_Vc*d@dMTZQBca z?#$mjYdE_>3rWm~CC8Ci%rog7U?9XWETP_;8q5t^7Hc}>ltE}2CG+%T^ODW|%fY~y=D^wsvgc#lp zI!w^wNsN*DQ6}xdNFI^tjBXcQr7#-fxs`b#mewY$8r1x;4YT=REQ`+Jdc&dmXbTp4 zp$<^UdIC=Gm6DI5k}6CvO?%OInw29kMt;o)N?e5|6?Vp}giZnL0F-w`u9R3-!k7Y@ zYn4bM6akv9KLPp}#ol@&AB61;RWE*zoCIA`61#`ayDZ=%=z(Yu#{h` zrf%wV$H9Yk$TltDS*tLKDFFZ+z{JRq>`v zC|PI%lm~(E2G%yvjsO`#6Cj-nRTCEVy7QnFlHTpgmwgoV09EybZo@?1T)q zobKQzD+ip3M0KqkcKEBu@!2-y{uvhaSASlFRfF{c3XfR9W%WAn>&K2*nK*~B(Oa?} zUa%(_HRG)8TnMM`{jb9tD0>#7tRpDK7>3=Ja4uA91(D@ndSK%EPhah!lsJn`S@tfl z)9GGA)nzKU{?L9G5KFZ^pdZ;V3*zuXJ=ZxN9in^`3UOYC;rl8M!#G8ko{c0mXV7zN z0@i~Bj<65J@UGj}9z-U9$g1C8VskZ1kANrS4&VRrxR*LDRc0(i9<2up(u(qc`eduJ0mu`=0T|FaYPEgLjS-j z=^vE7nj9-Z^Vu^JYYl|ZjaQQ+{!$TvJs^1~29BiH>K3%W-yHg|E*5w$eJ$CG${v7F zYkn8(T%eN>Lfg7nQtwhnU=K+ADtkH_ngmkrcshb60^ENlS$vtOE_B>4RYTDOm7#E- zffi(K34#lxf$RdwMD5-%!|_j7d>5wK4gU9dLLyr=POe>&!KBUXJ!pQi#ZRa#OdSY! z8lPvtClQ-bm%JebceBKZ`p^U2EbZV;+OkXf7V9hABOTlGx@9Nk*!?!ETRiZ(?GrZu5QAeOXWt{rDgzz%+jh8AosgomTK)-XUp{$(?0tXa~zrIfk`tbh;HtV}HBy)6lp$4}0} zDLOh3fFrx%*lgTI{2PEMOK*#bs!LKa`5&9DR~d#;TsstA8r=>#&B*EKxGr2dj9%u@ z;!qq*nmfd*spms}$aW3a61AZt^uCqDr0>FwQL=7Dl=6Mrzhr`eZq>oe_n9?gOynw` z0}Y6fr$f{uq?85pnhq3J56(1{)vgEl<#uP-QpcO-u$;m`T?3J#v;^u6uo8spn2QTK zP#s=<>*OQ}DtbL|1+?jPNK@KpJ{Z^82@S^%KEU|s9O3E*+Sn01<7OpYu z_*%+hXh9T@l#*o8Yn-I+^a=yiQTC@<;?e9GqqGL)NQw(a-JLbB;2YLbu&ggw<~oM$ zw|&DDAiRQCn94>@1bbbWW+uKq0_dSNK?aR|lvFb6p-0KOb#{a5j1MIb9U4bAyiiIg zTD_EBLu^?YCM|KlwCj{-2TG~wZz!9zT@8Fr*AV2@Du?5mWd!)1`M59GRI%KkamfBC z!AMS$V#EnBN3_FFEprff@#Wi_>O8m1T>NT{b%*QbH__n0sJ;O49QF%^@VGi^_UsY z99av^4!mmAliC;=26}AmJyFAtF+CPsnj<$!^{^0w#wMo&TMV3TqaB#ZRU2_-0c{0AwM_{*k@8qm-j>0?lB=|BTwl0sy+^M9*3KV%1MY?uj?A86W1f%R|v`M&AExo#1 zA83`6tJ~;3!O5HKUItZDM+&HAHcST3Ql@$71GA<{rQS)MaSXiZNg3&IqE)>EV?Wj& zV=D7Xl({ioO5fZ@%n78Y;&Akcrg#d_?1b^(iGbIwG#7;hT4zYftZm$AtQmv>Khi%; zQ=25kU7=}jpc!?pE`~tIEGbOamj1+XlwKP;1LNsNWS}yY=68#XBfy-|9l~bl154*f zIVv$t@*kMv0{zEn|KFAyls%|_k1eqJ#^5>UcI+dHAJXbnOM1|;Z60x$O80Mo=v9w? zv;a-?q?Znt_ALm~7y!WGziQf?It;^oE2gFNGlQU4^{5nK@Syq87%smEJs{GJd0ef^ zYDb%9M>CGDK)AwY9Np9~Q@lqn;OIvCdUgvj$Q_i+u!@4Lib)i+%#sohS=wC4p)Nsi zvKwfYJ*TD~Rw}JWSPcA)N3;;KUIQA2ns#~{jR|@v$v`078L~xotIXhcrLdK1Jpz3= zi@v+Y2dXGu8=eOrO9w(VKMQa*j6M848Bip%yBFjjfFfM<4cctVR7^l-X)opB+FJn z{llG>fr6JIABc^lW0RA;Bfn>&P`w1;Rd5Y@AO_DTAVp5lSZ}E4#7d|hCath&4Of9{ zL4^|8)IVE!2HDIcc-q@Fx9c2mbJw7qhbuZN&NZMuTtlv{U5KNlx;fWI16UwE?_N9g z`W1+>anYz}Bp{<2B|bza9!I)8gQ5?M)`4KZ6C|MAD%?6$_p~O|cMuHY58QhjM)=`} zXO$s>TjzK?#f?hvSseqQ9e%I+DQ@7XvV4VQptsZGy1CewPOh*d$2LHMWkQMf%b2Hu zmD8d5b2=O{W}8xDeCX~*;8E9v` z+*dGIL5~5xuh7yBtJ&v;mLB*CSZPV78sE(UK~hVY&*5}v? zsvDocjRQDlWTG4R!~9J^O_^L5+JY-XT#=lPvfhV71!#-Anjl9FvZ6cd@=^71(YJK@ z4KQ;W-Blt<0h0Vs8cGeiztu9(E+<*b1>{j)?|8@@&n(w;Lkn<>XfY7aEvClEy#fYs zZ@P>T%wN2Op4x~mEwN9@y$7k-efqER7!Q%zbzElGahYAm?_pQyqcNcSuh^x4eeIKf z$*z!lxP^L!>+kMxe_gTEzo^))6_US?3b0d+fuQDJ41zNldKxt?EwT(iA3IoNS>wym ze+pho&NUXN;qH&0kh!|Y3a&cR`bN-K9}V%PlC_pXY?myhkqomK3`W9*1`q(zf|>5& z+erD>`URVrla(MvqqW|6gh>hkY2bz+4eyN5=zy?+2&(|nm5V}K(9T(8Z;vhu0hnpO?3-jm9aj1|}6QLhFK&{Bfj5kK1EPjZ; z!hUM5Vai}%HUDo(FWO-F|CaQ!sma*fZ?Je;?C5U;puC7iA9oGI{xTYyhi9}R_(vdV z#@)@dMzrQYFm2r|x$>mjXvs_n1>@%e2M~Qr(NcL|metH>468kpk;Ud6Vu)s*NH`(J zeCYRipy_4;v&|oM!oNk)&#y#M^Ps>WN_@%^Wc*sCY{@{OQZ~u-wL2SC)$ER=eZ`47 z8o1FClrY{+$h*ov5mF%&l4+L-N&G89uwL)`7XRD?K`pIk7BsmxTKXq_{eiM&^?#w{ z*HHua{x%_F?-k_bGRW>Z&q#KEtD(~?is9{#yzLI(+uI|5njhc{lf5$s=Y8R5lI zcY?JZ*y&KWCoGdG`)SK&YI@o--&^4e!K^Rse==|?S$`OOfJ%>>JP*w+wdj>(Rrz=x zs@%+v&YzM!4_$p0k7e`yylK_$Y+rIc8EE4?PR`>^o9+#(p8FIq2wWom>nRE#>o<#W zqb`T_q7OgR9jClMV9mmR#AsZbX>o1b)Xs>5%clvD81Sp^n{jYa_eT%7mU|ReiWlDv z#0~v#fu5RmU=jZvriz$n4dlNf)dxqgmQg`~%e)NTD(!ot^i;eZ*L+Fujl#XeF(`$# z>Z9PXZe~0#<;MfIv#lJaXsrxuD!Dxr0_S~NPfaFz0{`XFi671F%eIV#KjqS)T4f=1 z{be?6Iiz`cYMgSK^VBlVH&|06zt&RBqj1jNaJrL`4i6a#*prHOtX~}k6BpB7utdXu z?&=pT?P>8%*v@jjfcw`x5l;3&X*gxQ0M=GfDxe5A{St-CzG}S}1)3v*Rm~zK zf?SRaRHb;eUX|cMXDv8JSC3J9Dzm8~V{j z=@x%_iWxaDTGik|$uB{1s(FR5F@?H#&|1dODOdVf&~MBH)Tuj|xp*4@L(Lz- z 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�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%0AT@*DVwv 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 z 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�JYB0&h=^&pXqd-V6vuMwbtD6XaXwqo0Or!9 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

      3{FFt@ZxD>-B> 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 z zMe37TK}63bpP6qn>$HU;Ueu+F^0hT^x;2DgDHf~$Z8eFbYeD3!X(M!z+u*k4hovBO zeTqYnBwb$LAH9~37&ynjLy^jl>J%>qTRjoN+=SQYhL=0*v^tS-ah6G(D%+T92wH2m z#Dr(Z{D>Bi(kWE2EfjDjbqWKzhi%L1;z>;GZS%pT4R1e2e_jF^wG@_d!9Cs%Z!(=o zFm<~{7wHN#kv1ML8k;JPKY={Nw->PMam?BE>7s7erc`vAF78hwuEs_d{x@$=mY%rd zAEod9=LucGjrZY^*zR~`i*!*kCFUKWV|*;40)s-0mP+8 zKWA{xQ`;IMGyA_`!dx4tGgx>)7e~ftGQ0j;+W%4`kg}y>kL@Hb(Ra-3g3?~~bUbUF z1WNP;OTMOyD(eW83oc~i*bgrmAb&%jFuC7FGtnND!L&6*=>b*zfDpl4#D*|60o||v zg{B_kh8mC-dEjlFVOHrOV%F#gyk>1?AL~0O8zY-q-VilA7_)}&JJFpDJLAQ)j{yc$ z@Qe|n;CTdC)kj5EV`aqq;{(H0 z9vApuD{6KVZf6D>xN{dvbTM}Slx)$Za#0`QI(r{ezXb1_hG)`#4Old3gTNxi{ikGI z0*+EFFRJvLa{@lk4Xaaw!rS6rh)@)`cp$fO5Yd!!^XK#z{_XfzM5qaq`0nISMbn^| zN>Tk$7ZfFTM;qGEMb9Y!sb$AO+CUr-7q$mZ^d2ROgrk^mhH9jnZY|C*oTm_BChsr= z!N$ph!nw!KBH(=9r%P}T!CS)nZ!9Pbz>L0-_#n*a@0l5d84c}twp&7vHg95hN8DZn zKiR?mrA$wY#784$T2kQEZmfJ?d~GVDHHpND@msk3nu=Hn-m{$4zV_o&-FhG*`?q*q zY=a|R&Ztmryf}A5Wnu_)$BTFMNY<`Y*rWC>k-Ie~MH_?~tsyu<8)@lDC*B5q3co!{ zI$OEeX8{6Ki9KE_thyF^yzu2l*z`xU*u9cqthE3;njVFBXhRKuHH)b{7H;J)l3n_h zQr!0~4@g3OHHTAs=5HTp6jID0YR)aL$s(GpJjbX#T8*D|`189g4dF2-8NleU{36w2C-9ns$yOnv4fT(>{DM zw;J)NxN|OMbRq17#UdH5SSQ~4+d59bpW&9G;oqP_yxoPj z+hRp2dQXOlQu;~nZY_dt?@DLA-O+J@%*%FX@r8KK>fNrq3v9|&-lsj}Oe<^(E`S>= zJ$G<%8OpNVcjO3sQ&vj3i#4U>dHM_&XyETczGpxzvN=} zA5}Qx>i2KsatVEqEBnuEyprC%cn9@u>;+GsB7BXrUk?2*0>x1%CmsrEuGEY1JyroN zI1ph<$scFo-}M~T=9Q-oZAJ8oA)JD192mCT72j3?1tvzjFtcpH6JeN(XQ`} zT(O@GFpGkFwkIat#LB6uqW5ZPTgfc==XIpmjB$^7_Z{rr~7kvi$# z@LPaP(QizpE5<{R1ewDYrMY4er^i%w{22&5GYA4_5+^}e(mEJBg2^dgvl1e{HdXqX zy<=?U#gH%chi|>La)Q=?B8l-30XSN&PSG%~GWBPr9|t%dhAY|=?J3=ATVNtW_z5`tT*J`*c%*Vc&#CsvLcEGzm~oaKtF ztT_cIgza>J_^y?dFQ38MZHCQQRTzk=Ko?o zSGOSSS%LZdmiA8)XNxLVCA^&DobYfLQaitMv|>%ZoqCF{vU zy0Nvy)%wkY#AA0sJSmc?+my=d^h;(foI87 +>?zzG>rP3@yZjJ0IOk+FcDRN2b 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

      QYh& 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

      ZN6bDqFkn!t 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

      5-!m~A3R|12 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 Ljg4bsFZlmIii;vJ diff --git a/deps/openssl/android/arm64-v8a/usr/local/lib/libssl.a b/deps/openssl/android/arm64-v8a/usr/local/lib/libssl.a index 725f5fb45606c48ba07d1b901956b2854d169dfa..04efe4331bace446514119479f73f98d949e5400 100644 GIT binary patch literal 1458788 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

      jdih3slRRdF4M1aljQD#N?k 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 z zkravXPZH7L*|jxv$~s@wH|H5R-Qx=`4N64Cf4GEHZ?dmYxF{(xU+RZi&AQlE)jaL4 zDuiHnRs3BdaW^bsmb*5wxEq!@%UzwAdH}L4H+IjL8@tYF>Ic$xMI`6muV4AXwfKeG zTRo5t^~cxbB>bWa^@$py9L&yBx*5sgko<&e@Vz*)9_d}hP_`dgeXNM&_(D+)_k?14 zWIrk^u9!Y^=4BPsg3w}6{H|~_1;WSOa{xX$k`Vb%6)Pk?WguOzL?%cF^5~kp3|uhn_({?x190_S@k5JT*pH4sXObC8lLtvH=j1O&Zo9}#EPAj z&+L>z`P6n@|HC)LOrB8;&iUMqGNg?M>EhDPJ~u;9&X;1dUKM&~2oVsGY_D>QUuBL& zeV??RK#y|u7=K*98Qk|}I?a%{=(NUqZdzlPYL!mUr3M(v# z1P|i}#V=Qf@x$scegx|v*6h0RrKRJ}r;YL{ymDnj zq;^8tI2`o{7~{*wl})a%yt1zTvMVmD^U_J(0G9Tq_z%W&61pL*&~e^n6<1a`L*q-w zjc1E$!<#w%(u&IK4kzK8Mw+zgapTz^z!_Ixf8}-4E2}S?p*Ck-QBj!@xuW9ID=N-+ zf8Bx0s;1+-tnTViVY&e^9g*uwZ}#-*Rp}c=X%V7n5vr^-P{u=89T>lwGyNp>2lK@gw|4(jPB!<2&%dzAI;^wg?2 zJyd0-53rq^KEOT&{4n;@p%2P4`7h~1>}RJp_WhQKzu__P+oBWUtE_<7TRj231nUX( zCnOrahQpSJ?+2w1^&mUFu}^(li1l<28&nRGF2HJbI%AK@Ptwxa#ngAIKiTO6>YtzOjtPX2mrw_27o8H)`HG* zxs5BDo8n8C#Fv+in>4O`!n|=K$wKOhRa>1fSH!nWFb@|epn&-8}=S`U~ zv1!Vbrpfbe#9(F8`0^t|<&O zX}w72Ec{kvFZJ;@mT6t8`Jd@voyLiOfjW+TXER+%CX zu2lWFkKjI1(vrS%W|Ti#h|OeH=LnZSvv-JP+3+ot0N>6st~_oCilrY(vbBw6Zzp{! zP85R|`IxIaCI)o;9X|dBr42Yfn935%4*Fw`$AQN1@otJ+Kwd^rGL}h_%pBcLGBG8& zRV?=o$sx}*S@oyj;lhWCT>b81xf+P+{L*gFvJ!=q@4buDarQFp1lpI<${hRc@w83R z$zE=8e0Vm*-hVoNRSxfVyf%kF=J@O!{?CqIox>M6eoYRa>G+%+{+P?x^*MZ*<2U5+ zXC3E?ppO2Fdg3(lyH$9iL*T=S_0_(>dI8d}6c2&e3fJI1ri_de*#pk)@;`7{c@wr5u_A*P< z%k4kuXf)tF<@4Nr)#thWs?Vhs&|YSVs``+jWH-0JrQ=aA_dMwH+6jl9_P89WW$4kC^re6~IC(#82wbGLY1@nv0H3Z3Dh%PmVj|t(wh66$J{~P^k z5Z{HaFo++IE-8o~3dvV_2&WPc(o+zU-$OW$1j&CYgx6sF9wdJ?y5=B0JVbs3P8>n< ze+khuDMZh^A#peqlHb3Fl;it2Uj_Ly2&cLrJ}|_e;t>De2&soRhQ#@f5c!uv^7~1M zpCuvwoEakjlMwws3#re|A^M*QsfYgv(eru;|6GWk+flxS-dQ;6FH%P5!v8|m&(!eo zCqm-+g`P-?d7D9a`{3?J(&;^XZ-GRV0>nTS@IEIS_X#1d0R-i?{#s@jC)7;YP@wWKIidX=HBgZoZYk2 zd=YPb&b2#g1^(jhL1Ob2)Q3WkYNNln`+?Z}7sR1ZjoT$YJvdgVYKn}I#yUUIXm}C% z&!T(_)woL{zS#LcQpCLm-kJb`LN7C}6Zxy1pP6x*+&OyK>CcQ0*R!5wA#tvDcEvls z4~{hRL+asNwBJHCUUm0FA^%+$pUil56Wje!NPB-E#Gm#M{96*N@X4-S zXU5_0u*MTnzCm{HgI|SSW_&L9+TU^YVS3u1H+bvoSQmN~X?{Cz{ldvtrnx*9xYg;u zG|hML)|qI!g`Tt$+@@vTg?1X`=Qlz)iX~8fGumB{o{EtAyfQ@o8Wa)yXaM9M9bE75*B^B`7{GhVaeM79{_@ka9US z#Q%SU$Wu=qq`x_&T;d_^@kb%@6GP-_ex@M1G*4F$mwxwT=v(NA*!>k*;-67m?x+kg z^3qQe*YaaH?HS;kl%7)FCjAQ(r~ZT%(xZ8mk3FlWf%)l1KVy&h+p>eT=qEi7DX#TD ztT?&>w~(G61aRxW#MAmO@g%!%DLoQ5;@?($1aA{>S6t#|x%525_b7Rtum4x^nY>N@ z--K;+ziz4FHTkdk4a`aZV&0}z18+|Te}uPb)xz85hA(1Hdj5sCX?3gOTK_u5B`u*Y z#kKsl5H9^R+5HjA&}vtRyu{Gvw@1mp$=kI0n765(Jf^s`7t*84cPPu)_{W*s`0H}l z`IY)?<3E-4*!U-y+xSbl+x#{uc^&^Y#kD`Thw!@3lQF<=pZCZ`tZPKH;j{onJypI0^it9N4NpT(L zWs0xkZJRHNzwlF8ZUe7vex+Q5i~Qp(PjOhz+q8N^aqW-9Q|wCr^A5`k7ybL0i(QeI z_zM^LkCk2R&m8zii|7|UH!v4H!kd`e^1WU0mwc7(?}Li}TJavm>6%oQ{fbLo=-5z< zTWBG>2mMX=w@mSr;#G=E-sy0i;#&VA#XnMdWV}yy|E~Ck5c#c&Yxy^r+c?YnAU4hi zlpfu#3ove>#p)?yZuOKfC;ylFN!?$0M}+vV6mL`Vzg2vL;$Kl*-sK=Y|BvDg`Th=Z zEx%py-zfQAA^cUvb$QYC3oWGoWq;HCJ)pR5Uk91nxP5H6v=?~D}0yT-3~;d-2)`x$xHl=7?lnWtF~ahCyeb z7{zrwOGEU_xJ&$(_{jUX*8i!-ACYfjPSASl!bSdA$E%{Jx8qfj z4;!z(q2i#gJGh$Uw9^>Z4at|}w}3g_Kh)(eoXU3=%h0Nbw@HuYgPD^&-OumheJ!tf zoR3racJMZ>%6Oaf==<>H%*n3iRm`oPnMx1Ym8FI^NRQ?>Ft>Vi97ui}%SpaI#d?H~ zPq7KMenn3g>uE50gf9xw z)5cu%$oOoP(Ifo!5IuJ*J-U3?F}LNuBSg;&N{_B@yObWycN_Wry#I=k7p|{INKXOF z_3&ECQMih0{2a7SZqTdEQhbFTBdg*YJUABQIRyD*C%vzKGZ2zwlD#wq5IXr0bis zBU|6R~dg0++{@&8s_%8U5d6mL*^G;dS9 zQ_0U%i9Ns29e^flFxUQe;L-?i;{&Wc69l{TU@EH7~h5Xe1==!g@ z^e0xnDMU{)gl`JrLw$FgKO1VGjr|2vA` zq2d$gZHnjT71#aY?TS|^`P&rN?XF$%1|`2z@nXgGbJ%jlZ&vbBf5=bm&kag`wUTdD zT>Gi(=Q1UqtJ~s|GNzrd1N>Fx%FSpJHkbNkFu-%KcKkw-$Q<(r<;*aD@#(}~` zUXKH{pJPJ&k@hZjMSmH~3m5(6A^zy`{7uNW$XAEhooV!o-5SG1PhE)JIfje89^dLX ztYUdv-}L!ix6`4n6#a5M+IITSoR(I-X{TRS@=4w%Kid`8?MVBn+mWts+c>S1qr_R- zm+%^v+rew8S0ewk;UX{Xj{MYdewF2IoM$Tj8gJ98Me)BWeyif|DlY!hxI%2v;i*bq z_vclLf04IoHAnF;Dc-8M_&}(Oxx}rF_aEoA#7(#^m$fWItEYLJ;vpQ+e*^rZh5Xd`L&|8|@p*Vxh?ZN6@0J;Fu) zc4b%Bw+9v1{jeTaXg{}x__@t+vAdnQ_#^S(VYtY5Gq>$xkK)?Teavm#-ZA>c?m?wz zkzYjq-#mXsc6I+SRB;^#c`j+~j$nD=lCKixHV$J97kPPJY2%>pCuo0aj9tlZo#CQ? zjY5lpC^$^$PvO)1zRh*~tHp%OLrdsh^l)UcWzM#0YeTlR9FKt%* z7k<0auiLxyKje?ruls@5lwBEzki2g1#n`8X_`Ck5`&**8E-&d%tp9dgAu*D1h0Rwv z>lZHa31wHe_c@B|@@i3B`zigE_0#rOVpsYr@kipnD#TAce$akyQ2uB?A6H!aDgBl8 z)Am>5r}S6WPupLK{L{*=_VX3RwLg29TYp|PT=e%axBk3gxX4TYM)ghmldsyHj+^vX zB(K|}^gq^5d5^;SGgax={b!Zpy8o==wm^2pcS14_BA#R!TIun_8pZGCZR_Vc=GM;# znUj9q-evq_`5q;&?G8nHT1Z~^1LcbU%@=WhXDa@#;x{O+>q!H1o3AFrzrwnto!b0L zI~6YS(jLiwT~F>-{^)wrrMUJ}+MV^&wmY%AmGy`}(ht~nC-OU#UG3*?#kHT(jwoN+ zPiaTiPiaTO#qPckKi@H2+Lh<(%FAw1{ z<`L+*3EPEO(^BBCJmF-AmO1_^&BrlsF#JO1n+&gEzRmD|Vt&x@Rm?qJi$8bqezoD! ze#DN*Kf`hxjJ(u)X}==>SC*4{E?ny6exv6ME~j!{i@fY744=XK9fmLB{dI<~;r%^^ zckzCY;os$b`CfqdvzvJ-Ki?7lD)Uu_zt22rc$D{d8GbhJ?>2lK?-%F$1uS;2Vjeeq zKJymC?_w_RkBOd*%;mi-;Xh+8?_UZ359YCc+5Q}2USRkT_G6CWQ<%&9OQL@Ub9v84 z_)_NEjGlJp@?N*de~YSsZ+Ii~ z^5e4o`7-l_;g2xyF#LJu>kR)-=6ei}upd2!pURx(pP@zK_G#v&hF`^emEkLyCk;FXxI8u(KAbttS3ryC zFJr#X@T-{bH@t~?`QU6l?aUK~cQWrVd@J*HhCj`GkKzB$yvOjjnU@@&?ax522c?G7 zd|R}vGW;UuNyF=y?=pNP^WBEu&Aj*o-;Tuj+sxyJ|BQKy;rp1k8ZHkGcNl&)*Qaj7 zY5p==Vki1*@#h-m1%@wXKF9ETm^T={nfWHef5Uv6;WQ5jEe8$%gt-jJ#Lq&mf7Lut z6F!l7jp3Iw-(dJ+=3R#0%6y;U(th?EzM19APxA92{=CRMVfcSC?=W1ZELvyy>0H0} z7(R`8kKs2kFDcCShvw~~rPS~TnXfYZIp#^jf6siE;U3rf-G+aPdGX1%;^Mi)_^FG7y5NAH!KR?Lw)rRk6USs%+%r_YRCi5=CJ#L5l3?I&Xzv1P~%TLMn z^E&1U!&{km7~aWzo#E1t>@oZoEZ<}JADEY%n(faa=B0)Y;r6`B@QKWmhRf7`pJVtp zm^T={nfWHepJTqw@ZT~&X!zUAz0zJ1e&GzSJ=B0+;$$XXJ|H?dR zxb&yH41b;FcN_jO^WrnJ{TasnUEJ_bGjB1xk$J1(Uu3?+@W+^U8~#J)u}@|D^IPTx zhVNrO$MEC0A8auEOy-*mpUQlj;nH6pG<+G$%T&?QZ`{GWdRVsq-(g;3_|KVdF#K)i zU4|cGzR&PD_p|#AmwvxIp6$W^OE77TO@Ah za=%<^cop+ihA(HHG`xfPF2ldWe7E7hWL|t$wm%;*j~iaV{dJ4s7cy@(ypH(}!@tD5 z+we~2v9q)N`62TH!(U=P$MBDsHyA#I`|(YNe}?%s!>?w3(C{xYcRwHlSEU>~nOBc6 z{xh#J{3Yfa4F8CEm*GRWf8S^LXPECd{A%Xq=VbfyCFTjkzs9`7@NLZ38NQ489>f2_ zyvOkVd_E{SH`|{v%u5ZI^V2HBZ)EwT;WsniW%vf>yA9vQy!gCqe}2b2ZunoAw-{c; z=ap8&iG%(of-DD#7cKh4}5>$yej{)~CG;eTLW zWB7jN8w@{z&zD_>4`aU1@Qax5H~ezuF1_>;_w$7TDon|a*uzcOzzyqM3^ zt%gr#zQb@CA9NeOn&o5Tv;FB}USRl6=5q}1VcuZ)hs-w_Ud-q3ZH8aK{Gj17p717Q z`?-+is|{bryvFb+nQt(BH}fvT-)6qg@B%*H?>BrjbKgsUytG|*u#WLIwcp1TFHn4! z;yk=_?P!PMaV7tx;(YpY@=qzw)iB*2gxmK4QY>%Z2N2G~Bd;Io+eP9#)>C<#_-7QCawo3Kw@Jw-lzdY0 z3dPqeK233nKk2Vj{And$rTA{erz`%B;+H5s7A6Dj2Nl0k@okDrZ0Ya|ieIJV<$VycTdTO2=kE}ot+>2jM7&OMd5?(r)r!me z9mKCu{BEWHTE*pkA(EH2Mu%Ti^4BT(cND)~ahbn}^!$_J@_q>M8x)uMh=_ky@tUZ= zL;Q1!%X~z{>lN=%@(qe_SG-Yid2fXD%vF59lAot|LB793^3q0#lq%k=MQH!)GulNeEp5fmoD}X&7M8eQK&4f zZ(H12k7OB`m>2Ci5zzj4ugrrB2OS1d&c=lvh{-Uhs?>P#En=Nx`c zLckCLBA_`S+7J;*2!D>2lK>i!KVz!s*f|MF-~>Ycp;)w>sM85zTT-#5j@9V+I!Ux0 zr;RP?*c#NaINDZP>o^_XF{teu#I`!3<|s7Z{j9Z~bDp!#-r_fJ=lZVq`rdtI@3r^6 zp1<|1XZ`G*wfCuOiq^Jhu4Y2Cn%3Henn+bWoUELwyj@jOQy5V{O0B$~k}=;kLsis{ zmX_KEA*Qvq9zSIrL4_)ue(riZ5s=608t_-wmaH+j5MH*xrmB{z?dfn$ZA;zGT8p-} zp}MN6bw@o_Q>y5iS}O;^1B0!)p-M*dwYX;J+TUK)+6EUIDpgB~$Vknj5Lu868^d9t zQT!-)YqV-xElWgxq`JPbwKh`S*wEV6vIE|0s;b@wla#X7>eijDGH@DpY&Z1^ScPm& zRa+H>?1BWYmFn7WwS!1iEma=1h}vqj2_0Ng+PpQ9wY4o-b9b#k8#IXrn5-3RI;8d1{@wgnBB;yRrqX|5+pb$x9bW3uY0kI_!G)C&@dazjJ46+uw6 z)YeEu)k>tUCQ{$nxNS$1v%LKJ4HfGnh>@D)6~daX09J2raw1d#4ULvocqY1|t)}q{ z4Z0dznj+P0yHtb00nwd`s|pbKjt2Bqbqz3X^NxnPXU44!2sa3b3K-HC? zf=pMEf|*`~Y^|?tNLH)v1(Mg?0XXY7tX!vh>TMAOy;Z2l=DPa&NVK-TzA@5*M%8E& zpf#Y7)lde`M$tx+sO;|zc~yP=CbT{;zSL|UE5MtYkus8yX%;T1#&|Q zoUX5-c1vSh9rdwl0CeUxG`7{wyK>#H#IKudTVspBRS!sWuvUee!FyBfW}?!Q7*l49?`W@f zP3SJarM6j1Z@a0f)}e`xaZYU%Go312CaRg{Ze)z^^BO2m_=WWA98CIDW(s3s(r5Fj zI!f)$Tia^11lx_6oFpn(tbjVhu7)tQ>qVJ1;S{?nZvjV?vh`EO~#fS3Xo zCSeYd)@|rm8)}pXw(BI}78F9yC3s{iYN)G`_2lAj5Uej<9of{1@v=G^A$J(3B1a8; zkWs_}lkVYwpc#8rx)SOvxJI_4?`^EsjT#M0pP&#`^;DF))+jp0YNvs8FHong3os+z zG_Tr3GDR1wgGHF9V^U5NFx6M8FxZq*N{pXPRjsXGXl$WM#mz=t!{)|FHHa{@wN+7i z({`06r)M}rh0KGloeQW>h|qwPEN)$EL|?645mD!S&qLD{eS;B6+y|kbp{BWGlbI++ zFq}pr&g`0b#Y>&pyXGxW$0BtsR7V_;xkP2EV-b!u^9t3uIxSwTGS#t29ShYF2XHP@ znd(@ij)m%o12Pw?Om!^65n|Q3IxQ|%nd(@ij)m%|4+~VLIu@y8p+=JZn3_7`9;XrG zMs#}-(HE=Z0(C6H5&HCbN*y82(&sIaLLy&?BgClV0(C4>$3lHfv=CHg;XGjAn6Eh0 zae+D(sbir!&X@PI|Hbp4XVLE`r*HG=h8f$l6H@aun#7Ldl&~>LNS%ePYrZtM>3r$X z^P^AVuSrnq6Py1kFxwbWzGEJgy<+(3SqGIfXs)N4v@gS5|3fC9pZ}T5G+pKJkDL7i zhQYSYzFrG{8za^u=Akj$N%oVEZTm~X?56)25`s-W6QXNd*X00gjOYf9evUEHPr7aW zdjYuV4-qKn^;NpA+rjUqKf70R$ns|jd5r%Nn4A9mPpO}tpSkhR|CIdn9+DgX62m{6 z3vN=otS^J##)vfElwbOvnxgIh-vD#df1}ZV83_}ct?SpwvoRvy=;Hru;I{t180W5^ zpUaOjc92ZkY+Z}MZ(~H)Wb_Xjeu}>w?6&^zfZ475_nPOZxo6Pd4SqNM8y+Pqu%2J& z&&9Q^|KHIl-Sj_3oeehr{a<~RuIpv+yXi0cuIAwPpQ!w_B+S--!ss`}Wi?I~H5P2y zR{3o@dVk5y{u!tj+BWDUakOnM_u#KL{HI1ISk;Nmzt*GtO+V0lub_XXjml3;h3xWg z_9%aJB5|F${NKg+=T?4xkAUi2ZnphB;I}cNFB{NYWjayzpNn(b{&o-l-ATcY?OvTE zj<&9wJ^Z(SK(omHgO+gE`tS4bU;ZS`zgj1WqZLlhmpuH}X85VkkehA)5s&`kcEevU znQ?COKkd;C}$aV!5^>g=#>uoPOC&b#2ZG2)wQ^lvmB9_habyRHA{=wICQ-)z<; z^8Xo0CT+H^=fH1cMAvkLjDijS=6#b9798 zAD;Bn(jHrX4*)m)8>q9w)~%Do(bn}4_-%}c-!b}k8BWqqOJ{8T2gkbWA2#~=|KLVU zny$OR@1{TcFPfv$Fp~ZS*lqn6d-Pv-o~Id+owC`w@KYfy6`>)W9e@Ifc;*h?4I|WVWp9@A?Cb4vx^2_n}a^QCP zzlQ$F&Hm6#t@zX#>i-V#yXk+?=;wJj)&DXV{hh$v^v|Hd65H)MNgQomcOu8eh&cK) z%_7@>2_U=tPlMS_Kd+x-`?a)mT|WW8oBlzgzgvvI%U$&U&O<-1gMX71o7C2I41kRh zX~$8`Ap8H7fb8<`^r-(C7i#`PI!PRDUCkc#|H>~lOQqqY`o9vpt$zgoH~+t6^bbJ3 z+-&{Jz;9zjzvNe%i@*Ot`d4AM^#?uL|A9H0KXwNF0r0!&@A_BG&+AS||5YyfU-2k^ z?p)2!>v8l|x~^Y&lz;!fYmSgHj`Y)dC%gP1%pcwSuLf(-pXvT6_37;wBp`J{w$jGw8yFzn?4P<<)5Ua> zII?~Q{sa7O_P_WiO|ir%BKxn!&iriu*FF4q(CD9URV?$f{;zoWFK9|A`>%~I`Uhbj znaJZD%RRDBpWV-ZNlkH#bjNwz%s(tLXA2E1E*tZ6*86DxgjvOOqK2QpC&cu2`QP#A zKQ_|BS8T7qKeUnmZ^X|0?EjZhf3|L-57EGiE%6>T&g-$;{Ff9iE)0one%iT478Mt( zoCQTo3`u3?o|S8^@cWV;@i{+C_?2|?mW?v<7FH)=ydLj!PVfFn&&l<^p3?!RGk9l7 zJai!BZm(2LpKp zk{{;Ll%GDIwI69`DRy5VR!(>fc07VMX1S!~JtcJ6A88=rrF3yzZ^C z{$-<`=3@b;Vldz@AbnAPxc|9etUS+`)r`^Xi^0*c^2xr~w1xiR#XIoRW6>+Z{YQMx z;`=k5<_9373cjeqr|B!7T}jJ{59B+s^2$wxoox?}S-RulF-xNl`}zqF`<&vF>q}uf z{NluNPVatN`7$^s4BtUFe0^+W2`QSP~>NL=E zdb!g%xob>k8FapJzSH?T)bRuG-)vmJ9+=$wTlk%PllPFXe`u@|Uj&?N!S6s8P`#pG zsHmI}j#v4#zuz!Ek8UcB=c8V$;ET+w_?FzsCwywg*8i;)-0~xTr|IMQPGm63+5LU z;~(FP=Py}QTv)TPsHSN1;@a9d;+uS5EO&f2pXZyNmFLiHKKCUr;@nx2b#CY`|AA5W zjrlh96_me(aBQdOup#T*`ILWm@V?A%XE`B28wtnuDjg~~f6O;D1%d9{cpr^D?~d5H z^MN~#=rjz$MGD7+!`d!XI66XWTc>c-fr>o+Z9zP^u(pMY9s`2Q7D$^RXrh3VE{Adg z{6Q^CR=}lPUjR+EMMsxpjvG!LlN(MA$PK^G1F!VJsZ(&1Lyx3#M7dOb1N%>fC;j{) zu4!9}JxBOQ#SgHTvAfCVXD#%t$nl`z?VvfKZ+T+6m)P#LaOUYUIDI=)(m!P3O#i6C zNiU{jiR}r2pOrw9|I;LT^O#WOvOR=P6!d*Ujx6^If#(SN8iC8Go?&qM*Eo;k1YIU@ z*=lYScuK2Dtk>3Sv#oV@HFd2`Rc%ck>v5=g6<^eR|hSJG0uy%8&y zTWedXr*leItv3q-tz~q~ea2;T=yp~2E0?DwmQ>N2ng!ZsUI&!Ae$c(sPIT<{8Wvjq zKx-hdVxwlBUaCQhAqvx$N$i?8-#GezGns;VO}3(>utTOxx(4}jvo2N7LYVz5DJ+@9 zxjpZH8+o6^&+VE;*!=$s88$|={4L3D!$@t6%E>Xz;}1O_b<>}13VO=$b7Je7hYTAd z+F|36GQ&vvsn@pk=K^!npJgW4uNr<%Y+ckx*cj1wK6y>wAZhr^g+8zH<#cZ!iReZr#FiE?A}{T;&s4# z0)eB>n@;1Cx8)6o+V8k5)V>#c2ll_g{$=ccjs14)w_(2(dpq{nWqUDiF2G#5_cQr( z_GT{c@3}4S5ajj+&k6U#J-Ho_AH=-4r!{bNHRv9x4jc{Ml6_6@Z8?W}_AKb>UY@h- zk=t^IJ3c7w58}RI===Vq*gNNd_N}M=oyWiL^bd`U>*)<8^AtW5`SyY_@3kE2RetI$MvRh zosMtdawqIGbOpY7S;yv*cz58OLmhvG^fOC(?!KoazGJl0H;8#ZTzOzVEXX!-H`ooNxTes-GOPt9p%gWyKkFz z=yRR*YPnP-T`#J}&LjIo7J>7vB!*~A({C>fI8}h4( ze@qYhhTI|C!?0b^k4GMV4fj+U)3QHzdgO6+ZDjqLuWy?%+;InN44gaMaV^<;?xBwF z!Ut5g?@`(OJww$_=ke(dXwDn%cyR5~?%U2g)bSHT^Au=CoSq@vgB=ezRL}cMabMdN z2pm0zd!g-;o*U2W>oq?xQoD=9%CP;(kBq z3*QvHe8aDT;|G4@jE;UUcB@a>5c`rZPB#27CmjFgSf}rG=qw%U6h~rC^ALECK~@a0 zNOleRWBtXbtCJ{02q|IMQ=SKu%uGHHIGh(N2a!A7`ANE&6JzC=gSpbpoRy@j3MHQ} zpr6{0?gIYQ@qHJ37=;h>e7Pqo;TPPms<74IfKg50f>D|w$dw7bcjsjo&hq#x% z4)@Jec0bx}#0fSBPmk!bqm5EIsqBai6{j6zoOsu?a6D}4E7szRcb^xI*P)%0t~{Uf zZoaSMo{k3NW3)+<(LD=o{;#0#!f^b_Sx%}>_&XXmI??9Sbbb~(%47X8v}-PV$7aZy z7mm-Gu6=a>J-+y2lw%Nec1+u=V)^e(ehm5H4@UZ8Xv;tRY&an&!C!s`e&mNwf*)=D zhovt3*PekN`QiT@>FX{+Oriftl;dHPZ7brgAXeT{9_XjC_gor|A4i=I1u}XwzY-q4 z<33+}jxW}~_d#Er>Y?NHtWNkj-klj%{g{e(w3Vu0BHovFeBkeoq2Kx86)v{^=nS?Z zfADSCx*E2kKS|hn2in&?;r^#Cj+K9N)A-JgYqh=I<=T$pfnaX|?0w7cpv}elKZN}w zIPdr#%Gew3kD=dTS*4etybq3F`pwtJtNQM~!CMCNP`oR7PwCj=xGzI2wn0z#S&)Hr zIr=5?BleW``M^cV_H+zwbuQ@CGaRgqu4-*4#8aG_qPhs(rd+e~nrl|AU#H&EH0P0$ zYt|Jy=JAYr9e~gE`hCaT&)@|$$GiuLSBo6%k*bz0`fU$>w^hBZm!zjR9n~!tB-U-d ziQeYHo3QjY0Ij``Hnz5@7de{nE<#-mULM6ez>z3kNOL5@D%lS9gk}^#u7V$gu zehQh`ibeZ7@Y0Zyyt%$=i+YKX*ZN1Q@D>l=fJI4mMQW>B>TlBP^Q-Ec@ZNxWrL|VQ zu0RY#gV$HK(0i?F>HT(k-NL*wP}S6=R`zeJ-DTe8L$xI5sM+c&c{nF|s?G+iYu5(^ zHVs`{g5BniZfrp}&;<**U~Ul4LG8S~7LadU^JS+g2ikzz>^ZzmhyForOE|+ysj<<< zQ}?jCNnkQR#W~xTVX#V( zCr?=(KM!e=nc|%3`1z5k9zmf`nU3x!XzS2P+L7(!XHNUmC^W!ybdN(@R3~XirsL;Q z2h%7t!1l5IU0!sCV4}(I_M$U5Kd*Ysi_XZKWbzMr(EXqI%shm$Of}`{qK24!=6x?e z^PUZupUVwU;{r`sJvYa5@o#3`H{sh{BSw&wJc5qE?b&#?YWUo0l1$?i&aEVgk5M>B zdlL64oTE00>-9byeMx+dqUYWuiBDEI_X|wjLH~*e{{{Nx@hI1Y9`uE@gg9uG(_`Ia||TiOV}K%c7PusJ7O{?CP<36q^XwklFw z)5bWDll(pq*)QqwEK6;SGd(|hCcSjC!CT1C+xGB!S=P(+_@A}f7-#wXT`Shh^z%LJ z;q^GSJ!KyDtg-a6{0$b)_EcDUnSP^%Gd=ZhwAuDF37lhz=-LcUevomv%iwlg#e^K5 zbC8^a0yj(L33dhrF5`#Sv67v06s11!_qPcDjKJmZ`JVUH}=n;vp_o@L9yBvWm+J^cMM+t0;@-j=h%Lr#ssNsesqQ6Wd- zyM&yS_AYSQ|KBU*%l^E}!nwbC$l$j9-4@RDj~Sf&Bl~}zE79^drX@$t*X~r`=_Grw zmPu{g2NFHuOc&DGihhPUrzC97nSP16E)%$Xh7uJx$zNfvn*`1_6SQC8M1PgJJ}7WW ze@Ng&PxE-%2GkMrDU?gn4+@;;H<&ygA8mRb zznFffq37|7@be5t36DEWzuV+>fQ~l8rTyIkr}BPPQQ>#$1kSNQSuYBl=7NU<;kmEc?D7r?oao0Gf4w8{S(;THvrRwA_GcM-9$yHbDd>5; zVET}u4+}YxzEa?158c1f78STGZ->B%p6(xL+b?h_pT`ll=LSQ6NYG39uLzvv*BSaj zfy@4f&uOg@KLaCs!gRn!c*@fQ^NmVgS|lE>i_bvfDLgL+qA!P4>kk<6({jDiNPVy@ z`PCSHM6VvpgSk1Ct{<{qhQYQ}ddN@>T1uBv5@` z2SMjCgg_CB~Nj-peOC--sBz>FwUQ+T~NU0xw!v6r0vg(TTr;W_NLF_e8Vy&0`9}rzc<)z7^w|YIfLe!=Mm3)=pQuY9~9`Uvhdg^61>IL;ihRp6{>-EnpwL{l=qIA6wNn; zWIypTKl^VLFgN`hGBhL4m-SVWpRZTo#7%$5+>G+Pk@VBkS6e^LS4cnGiBq*Lq0SlG znbvAe1T*p5+rJuq8@Fk%H2hXGab7X}m6iaupW#yQyOsY%Gl}AIQTb_p&;0EFpMc-i zO|q8|F}8PjT*5iYu=y`3DqI*6+x)b1jqrOb#YKyYH1g@!Y7O!v4*J8`=~xM`(|arL zVJ!^3w}NM8`&<2ZM+E6iwN?Y~AJAF~yvN|+U5ajcF9YjZqDWDO{SMZwyr}O&$)xk+9(w-)_>If` zK!#pd;w9rLl|QNXm|64k9{i%;MM>J_wnpi_!06uh1EUH~1_A{i;9Zsv;e&RpxfsNn zCDMg3%N-1ytxOt7=sd()|rx^oB z#cKsvr$p&zv3?0Dtz&utDc-Zr9fFJwr>o^Pe{kCn-ch>$v%coz|9by4$CpvC2>BN| zT{+MD$Bo;A^-DuogB0=QZhIT))?33%dq-t2-dYgu-#W@!O!gfA`}?Qm;k}>}kTb_O zE)#v%;yVJt#d+Yx@5EQsT}bZ};aw=$mWQ=dkKo;z=sc{e!aGJ`I=?i0({uCby`hY) zhe3lTo;!r~GwNL^ypt65OwEm0Qi;B<8WPGBb_vJ%Y6!F-B zwN61_?(;$4qV3Reb zXt6G;3$!FB3SQ?N=H0_H?VtPqwFdkkj$=Fy4`K`Z|7@Tuby|4s^%&{EFl`wg&X;m3gUIG&@r zmfHvakzTJph4Pa9fPQalI70n_Ui-EO_L6O7@cACH0s6vNJJ$X$hz0n+6!Euwver@g ztP`(9-E|-j-|mQaoQK#s&%s)(zwD`daC%SdEgcJ_vjgYRw;=C#0>gRqci{T~ak*)1 zXFK*N`qPg8Ea{J;Pwn^<@=d=Q`e>v$<}ZndKN{(ywm|LR^{K`VKjJ$+^7s*~SsHoT zQSa2LHNnfBPO?1^r1ij9I~fXgJ~+ua>cbdAHg!K8IfS)h&EG*=q&1xC{k5kZ_5NDr z7#;J}UlMI4>NycFSii`9Y9)L%OJ2iYrScl(R{SWdN>N6YqAagVy37)lUmBtqOvadP z7cB3y-nv?yiM4TAStgKZ+c<23JPoNqGtR>Qm5TsH{btp?jkddF+tFXDWs!M|j9zi6&+ z6}(?E*d3%dTl0Pu=XV(V>xTEM=K33g_v;3`kM!nf-Uo4hpTQqCybqe|UcvjY!M;a& zCu`mx;QV_A|B>PSfw}&P;Qf)t_WbE=te4mCt@3(hxA7)eIjeI{<>*e_8mcv`m_x;< zVn2vJi`FOO9anls7i*aPs(s{*!nlfY5@Sh$j^8N-R9~+v+R17Tg85ki=4T2g`Ulh) zIjI-l)1!ZX9(c{~Y`f@BBlPdI{SM}PGo7%i^AN_iNtip*IE%T6;s<@|SRmE|9}Apa zkeo-+yUOYPTzVVQ?+d(6>ts!tFl{wu&4vAwdg&cpvNMJ`4%uY;k=FPUoy0+(tNSZ@ z4_NclTtL#$`?9t@ZvLMP|4+tP!hV##KMY@XWvaeajg?)QSc{DDgX|%jQIF=m@6@`- zoWk9o7wW#1=A~%6mOoQv$hke+6vNz|`%dzeoWGAet>1e-)#&f}XiETdol$sycr@a2 zjCu$9@OY;Wi{#b%_|RFU!xU$Ej_*Wxyi@T$%G3ST6~nZiJA~^~xb8UX%Ea}@xQ>2p zRpR<1T$i1-CUHHC>)_YcC9b1r!(S*Jg*C%kUKH(e=j-AcZLRKBv;)qcg7wFE_qrQ% z8I%$J)$7T-vT)B*5RMN4>+O;wbtk${$R#@9bX8$%~`thbVs_Eq@BVk5C*% zUqkuvvEg_KI>P7+xQtz+sJ`&e7oM<-ZEf$(WAciERD~<_^R+7zh?nJI=uO1u}ed{&r3~zRz%h zb2Zt7d0ye12b|8Q(6<$!4c{>`(pP|YFIFSXaGW^VNxZ&}={?*Rd?4OyYR5d8=Kgg5 z^}e|W8$>*GtXmPEay*Rr+KTuO@LmY+ljFXbrK-;yz%|VasL#Q@v1;SGFQ&Q06x=K8 zz9@{i<94e1bsf+6h62i@X-E&z1kVlk`$ji?-9dkX|0nLpM*!4)3C+a@A(L>LTXmuB z9})NOKHPs3|Ldl$gb=H-o!U+s2ll~-?YB;X4Bc0CT&nNaGofP+-A7`lc^bZDaSzk9 zHess+}{%)wH3B`3htx%Jmco@T^+w!5#ReCqs%)2 zRED7PFVWopn^CHc!{#{y>5c&#@agx2Y&%MpezN^B_>%9r*ap<68lyfC?={gFCF7D} zl5`_(5G#3ztH}j)t>&Y!?a48y+tEBHps`WU35Z6IO%$KH&S?(tq<_k`!)PNIt6cqg z>@x3iU_$T8^T6faJjroc+mO63Dn&Vy?{mp#L^Ku=pDN?fio_hH?X6MhXXJC0pV|e4hp&VSaOl4`xOtH-WKKf zLuxsk+e;L05Z{^Ursr{>r7?iwQP~#C>ZG}0;`$|gJLK@F6inKD3~>=e+4S7e>FqG@ zN>##tm1^##`yYytLFl0vt9)yPx_?k{0~@HnlzyXmm!e0Tl6ab4_%}^2>cCU)H}rh^ ze_JnnmZlee_SE}_KT~;8?`e7w8=iXa`LC8Y{XNGIF^8tH3Vp7s8}gxQGiW>1esJAM zt@y_u@d)v^h5qmSWv&Nob4lKo*kJL|&xQz{N1i&A@ z4f}`tS}qH>n`_a|l%HTP-z&-YAxX!O$9rS#<=*!FJ9y~1yr_#@`}qvLr+w^vr*mYF zqwZ%B2L+gWB<2D^C$}Kz8(w@D?hTJ&o^UJ>?z#0#;k(FQ#8UyDN#!oUoMRAkQaDgO zAK$bl`Fv&&^VC~Yt|zH+O+M>k8zD2-?VC*WuCDg0(@8Nrg84t`=kbruDfYtjoG%fl zlT+gK4%m)0ySY41qB2vx2;UrVD4tLbl2?g$rYWWPi>ddgC(-z+VrlU7$ResszV13r z-{jJH<2~Z2{d(_uqPYk?(IQr%^UDV+b)6F5VZ5`+&pa@X zDIne`+BNx-^q~$5PzQKdUDw?y@yyqL_CWQ+@y=zX_?`uubpOWlC7SoqypEr1=(a`Q zM3c{!?04Yb$N!W_F5S;?+vES;k*(Cm!sDoK)p}wW^A|!l<$VsmcoN^Z`x)wqFp77M z2lN||nM-Y|;PsJ_Z|ZreX){I^?xWFGwA`>bcW^I8u|_&*T&cu+-g&uBvk&u8mfwYO zf$}R&8bYe$k$j;0`Is}jnEPV-{+srX&ZAhGrR>$$iFRh}862i|Y|1Ro$u{!8vJEzs zD4Vp;alfi;8o=C%@?%KTY&u2#MbgHw`i7sj0b>X1Q0s&}iMB2Kf0Fwl%5r-5k9t1F zbGVPT_;D{Cz#MrLp4p7n-y*c07oLMTA?5%DJO}s-^ur&azQc&g-{Af%it8gd|5tzZ z;syT;-~2;A@P#qXqGFF&KirUv^{Oe!Sf}^+Y2Hrd_{e`=&PSQf!i`1-#nAx#Q;B#~ zzC*oY4M+ue3J9a;T7>JkF)@K>dz5#;Jd?a1Vh2}I(E z-)qx3@qKgj)J60hZw>CLu5&_*2)iC_V2+2++FR25eER<+@nKKtOMI=G*6m)E%KAmL zK`uYrqvK^I;$Q{hVL6_ylp;Q;?LVvjw@$W>&u}W@;Afs;6USu3hrS@6)_Wjd#A?~N4O&&%&z_UrE!}ekOu4IfJ3!GEH{ju&#DSmX> z$e%xYe`MizP5(gUp}vYzTV}})Ewjtad1yR&13siNMfLmU|9vEL+Iu4lzopt~>V0|y z^$^4}fQ(CH<%{tB3DuWGcMiXY|L@cN0qO1Ax@Z{6>6;^{XB}_!jGFF)L+}gt=Ta7Z z%OV(!4pV+Uo@4PnCa?3LXTj}|$?FEFJ&>*-o^|BmfAl@z3;yHYY1e=zitm)*S(tj> z6T-Ry`Mfx|W<~tBfl(OG0|jrOPZ|4uI6mey{#T4|gwpsih;M0TJc{Rl@C(y@1~eCf zhUke-Kc5IHTF@2bT{fYao>y*1%;l{;tNCKYMBdeBHDlgYk#{;SqDXDu^0!~94;er{jn(8+9{cEg5c3<#vvKrW z#lWx*My-$OG=5Kg24VUPTb|>BcOh0t9(H`!CRYA7VlOr!UGE_5al<8l8TelXzq7!d z-wl`izU?}khM4)8xg{9p9ocflopH~1f=^1ILtQu$qQ$$td=_kw@$Z`}2} z;gWv{{C9%i>2T+F!zDk(_|2pru_2$KAU^lwxp!x9yt6MaI60P%a#^>zI7@#+_S zThu2=pdhlmME`6(t@5pJ#7`bqD^kMo%g?ou+Fgnis`Rz~8QUG3=xea85&TZ9{%vAn zCz_hN7OfjUn`x0;(0a)Qtqzt(*W)*dL;ORi#6Z6?ntws-994j{-@Cq6eZ3^4RzF_~ z2~ZWn59HD(ZBfz?38bHrc4*sxy$O2^`v7(a0|@#DO4QnRO53obk5KRQp^lu3a03@Y z`YWU{q%WCt89Efo51aJ=#BT@S|3ry*Yq4(1(cjzEU)!ZT>V#-hd1YDWX5Z)kHj1mh z!%MzY8#>PHzYh`I$ES;{tc+>E9ceO?gCsO}*!qLX&xrze+%B|DRA)jx$IpzWHl^ z6Zln=uil4DeE&dy{ebkGGWjPd{RBPyzU+RYv%W1%cC4VXU{m&3`Q)z}lRuw`luxuT zai5!bhleJIPG#1)m5J{!pse4Ta8LH%=G>cm-;{5YoNVm;u1*KeX(Q|zBcI}qwh;DL z45r>`N!Wz%I;bxqYZ`vvbeNc2XsB!$U)84S+^SE?4}U^F*;Z-t**3!XeN*D6jna-Y z$mzD^5D&j6>Si11;rBnK?strw%aBhS$r**VOWQ6wxRi1B8S+=0A;0Dm@?bx1phP+En=srrHbYPsYD0zsb+iEGjN|&GHh8k3^eD#s%@^Qe(!(eAHI* z4W{C6qinaC_sTZ8!O-1E0unK$qb>xf$>hIa^oJAiuBGII=76D5Wxmm^P3RUu@&;V> zrIzPSLqqhmQCk`|SOo#1O{(&bCeU$a>qNCN{BKij)MjZTy2}i9NFk>GGnk5TE0&0- z$>fs_pS1lRH;!)KR*B&OO!Cdfq=agPUzY^TS+T-5rs22Yp_k)apN3zp@Eg)_`VA@k zl1UnVQpx{(8vcNyHvuSe8x?MxAn?CcIG)&BTb;tsu~59Lrts-$c$UJcb);^`m7V9N zg1CA?;ka|QwtrCgObd0KuPglgG<=7`FG$0$Q22#u_(El;c@ahA-mP%_*WB8w6^jZrv9YclT*WzWS)z??m+@Of!?kHY7t;dd&$C=G8^xayHp^1=$IM<}UV zj@dTZOO%C*Kq9p^fQuT8_xRrvZe{39iQLmIB%#ko2S|B<4n zTiVp^+X`2`W=h5{6|N2`_~QzaZ=dVzg9^u!c5BA+eka+F zaShc0_c=G9@75cq(@?d9^Tzmn5aD-{@vO#j5Y18LO2$8p9khK}(TCMJ9iT3;{rSF4 zmGnbGI8Fj7Z`meu0*EngQ)5i;qr;isJzkrgoEs*lHp=5R-l?k5J>#0OA0ygWP6c0 zfyCGBBuaA9`+uScIN?-6a}{vX`+v#`B)(XY$`%m)kIV@;-0Mh`ra9oG*LeKlG5l z8D(>m^HUEwg%}sy=+F1S`#t3NJ?Ps!%1bYdy6OFQ3~+Av-5%xrOAKUg^k4Om{~HfG zf8l{&?@``v5B!*ios)4(<7VgW9{zdP!~RuXdOhO&2@g5{;6Y#O;fFepa!v4%|7#CB z7kSk0Xpi<4^q_yi!=65mczD$Vk9z2x;(>4XC~uC3-wt~C;h=~A*I-KI7AH-3#*-t) z&0VH5^MO7`jE{^TSM(Pcs^mN7A0Xax#8=`_9JRggVbAxJoa8)&N8;}*Im!D?#TrdXKclaJ~^LZKb)=bixcws&Ty70FNB$GjY+d%k6V4wZ)fI+c?H5xZ9m2_N6cH) zvpZnFRC;G>A{^PD|EBa7q~Y}2^lo~69`V)%32yX%=h2S7?iXQ_ujOFiiS(Zl|WJoIk#sF$C6#6z2hd}{Y@ z{-20A&k^%;e!hMa%9SJTH=h7MZJ$$k@_uu^hMnu+=NxgLtNz!7yw$KLN8B&-Hyc-@ zTsh)?dC z_JS%`@_t$U9}4(Z<)7s9nUjjzaS9clyieb6@ad?R9Q9ub4Im8ER;0?c+FT|3`A3!B z7Pz$YQG?rdK4x&+o<577?cx50=^1}U=#_T9B5-NvkicW+oDz;7 zD(`m%&T&roKMB0ToKv~jw*+l8IN2%jTtV*^KU^+DmWUrauDs%;#xN57oh$^YSDdhI zw%!9m&YMCG`=8{$D)1Ksz0}JzME|m&ABAh$2)|XIs$;IeW&BJvxE((;ES%e6$l!Ll zW?MMZ&o?;PBlQ*=+}6wY6O6MQ?&oa1VGq4!La&V58wD=ownpI6&ZxoJ9(HNH!EJk* zEPA$|p107(^o++0PX3X09uT;+^C5x9ltg_vWN_QgCk)PdndOL(Bje;%fy?-O$3y-} z5Bc~fh}zQPP~cL2zQCpb=NjBD*L(|Sf71OUZFYH=SUA&%4Q~6N=Y51r|KBL+-_oko zk>?$@o%dRLnMHm>{Wb=Xz9{7XQsD9%=MvAxyoffkb5Nb>L&)H^J+lpN`)96@bGwj} zZ_Y{n9)YhB_#FbT5IBzo1l?$G+n!2;+xBq3N_u04hLW4jxs7w*XydZKeNo7{SICk0 zLjpf0==%g76ZjJXXWIyRLEtfSPRR^&PImGbO3-YB<97yAaP~j-i;`ZBr_%pnBZuVQ zW6milGv~JdxgKr*-)QJi|l0kD$a-{sX1uo^E61bF~4Sw2e|I84$l%FqfDWAtX+dpdreN1W6hm8W4^5ys? z<@2~>%kL0!q~aP~8^a6B-6xyfK3 z+Wx=O487$fy@3!$`2_kwVemeIVE9pPWC@%&MB!7xNPqnpG1E|(6L z>zCyGTF`e1`kx7$>zCq(p11JUZB8goB>t$uiGBqWBjtXB=p}y0(2zay`PB4FE?Pq#!7mPE#9N#;b z7-_e#NA?eW0+)6kvg~0|PgpqX9WXfC!}L5)V4Ue+5PGGZg94X!z9aDe$-I$J0>~OpG}6I{l=oWA7=bkld;RB>^G*r*}|Frc7u~%=}#^@;nJU7f?nGBkipp= zbLn(jIO~1X;I^Hz-=^oEOn=DG+jhPnaA_y^+te-&8yZTuucLM$aoL~Cc9Cs(Z8-}~?O^A|;Z z%@+Q@N#JwMIrRfo0_S)je3QUA9;hFX^h*p4;gUXVaEhzDgq)26|963NKS}gFC!%cG z@7*ux?=|N{-y`rofgcvQ?0+QvD}r9e=a9f_0dr0X&kxC-0|L**HEo1{U7xC> zobSnYBc+)9};q;|KB#aUGF^qWSsqZ($L%fAGUC&m(R7N|8xD?II>gv zKg-xm&qJOP_VYMP^sft?`xzUTIVLb7GgP-ryuZX3i4+uNE1b(-`9}~Fjm!1&#VL|_lz-8PXF}PiiFIf0@%=L>Vwd?mK3upRQ4NiXO zFz1xKBXAkFrvxtBT@d`VksS6dU1tkiw(A)Jm-Q~=N{)jvPWF>vv&}at`{$&&USd-A z1LI`|Cp)E_jRNN~5+vhC;xZm~8(vDdEF}M9fgdsFg!c)Y>xJ;w1pcO=m+>%Ua4s*i zylvq}%{A8}`+@1%AB;1-9Dh5Q7-<&lqmA``q%RZo%W@c(^(*5?j@PnW^NoD+gVf98 zAmNgp$3eEonB&}N*~#VN@saIh`Wi#eIMde~+_vXtfy;97_(=3$W8p}1%{kdA`@N|K zC%qC68Jy&BED=;J@TfVbWQD*bJ+}*z(=F)3g8qL9e2u_myJlS^=RrY#yP)q9xNH|v z{y{B7P zfy?&(sKB|;Am|B!bIcR;lECG2vq6FX!kkm`j=-fH**{DA6~fQY2|3*FQMtJ7P4Gkqz1-)D^9TNCI znR7}mGv{O{k68qT4Nm@%xRn1@Lqo}Ib58!*Cva*1R|L*_ZF(*j*|S5?uQBIjkHn(} zCppp{w%L{+6ZF!aI|VN7KVWdSCupv@jk7(BcMCbvo<4y~`2zx%_Pii)N&k|;*`923 z{fbH19>#}+9BI!hnz{c}>_Qoei+DeaN-3Q5n;C)u7Q#y|XjbGC=^ zd@(*sdx`}v<;!`Cv`5ZQBz=XE!}f%YJv?t=dl)y_>bZpMmqwWkrf0et=43Sdx12$w zTt33N52Wl0LqqsVb52Q{z^@SaL4jW>@Bx9B34BoCs|3#d0O?&VaBjbZUnTG|T+>E4 z_tkVA75G{L%yzrL*D;8cf$`p68z=hu2C__ML+MIzj)az&8qfK;YL4d{E#w2>hhL|5D&VGk+j^ZWMUFz&|hW zGJ*ewMyjtM+uD04pZ;imGnubJpt-$9Be6zqS z1inS!Z32%9{Gh<=1pbV`w+ehn;M)X#O5pVZpE_D!kp0^QK3Cuk0>|&NsEz0w1zsWW zCV|uY&a@GIvp&_wd2O}3+UBXxLAULSwANPdXsK(v$w|TqsCq|hTjO?os~MkUu5N6) z$=P1Jy&B29mfHHNB)$4}bA4muHhlMa(@l}4ZM8Q!%ge9dP_aI;rM3<15qy6-QrA#Z zyUW?QaQ@QBH5Kd2S4NgsY*ZPH5)q%TD_OfT60K^D5+c-n!sny~RpL|ENu%m&Ag89P ztx6Sq7g>R_wbVwc;RBVKEE6d)h7(7`ve}|eD5H;Tn_^d#m9H#Wfe&9-Z=)hQE6dAO zTDoezO8G0*Ys%E6P(akmvv#S;TliSF_>OjcU2B_70cxVybJX z1NDZL>xiLsTckBww;BFvt8zD`y1uqbf2_ULHkINl;nVusowfCmO?7P`+tk`RZ{C{7 z+S-;awKZ4PH*Tt`Z*{YMbA8nolR>i3G1WG-)-^UnbOtpuY60q-?l!+-XlZF|QLRy1 zsR@-Qbf2UF(~4W$TIgH(<_diuUAcLmaOE`BZPAr*S5sq?>NmHi@a}4;+FncEtaif* zR08QFLgi^_gyzOX2d09eu3>Ydv%Yk7q@k{+sI?(+THjz>DWW!_zus>ZBkk+>Rz3$| zp<%Z|1is}Q4@UlxfpkXB5w+0RRNH_6YpF*fJlU{gyGx~_Q>tpI+U`)_S`D5Q4h$&` zJL>DzZw;8fz=}YXl^&Q{(X}hfS6y*^WJ5`L$yyazRXf_E5f!=8#ndpU<$l7i6bQF4 zwHbfV+9T<|YT!bzem6l^MB0xa%xh?DtDSe{y3bv#e>Xv}Q`eMebf$?%s`=LqgnOHI zv_@sAbcoU*tXd2;teVp-_l97uM2jp`}*+>V!0!ssZzvR^*|-Y^~c_n}`Pt zwk@@=5&cdALj&AdRlfrO)rvN>y1ucsR?19t?&Jbp0W@{6`)CRxkt-ywT6cw>3bozT zRBMN@?s}^lSY>TAvKjGg=u#qZd*jYpH3U=Vq2;K^)!`6PC^dst^_v>92vjDLfGd>PiFw zHCoB3&Z&&*#P+cU%}|B=!O$xC%c<=K@wGi+?AwvBGt(GXFvDBosGZWA%J zVpVyh7T2B=WOUc;h$_sl>#C{qkP%2Vl_HLQ$%I+Hh^E_E%~#v?m9Rwx>2~;gM?-bu zM_=$`Fv1Ny72r0!$+k5S=+($VyGGR`y=gn8E^;u#r;#byn9=^Kly1wNG?j=nlAqBM zBQii;e4iwizTvinx!cO}3a759M$gZwLfz?9j_44nEszJ)T#J8|M%uz1bYhDpMVc)Ui+< z)uDKi%2dZ9bu3gzb-=GKk`?M$q>hE^s1C)&DpMVc)Ui+R70c$!?~trEnfFm@{8-sN({4 zEKwG^^0xK=?fLvH`p#|owj`#phbN@w;WjyCdk_F&V^UDZ30v2EX>RlR(wT7v ze)%knm~4Lf|B{UnUDrxFCfCl;vluF8kU(rxb>i$t`Q7Zl)8wB?|32`$=`S-66$gwQ z(oc^XZ2hY}%KwVt3b1<=l?JA|2>VEG+oQU@20=f=-)_A$42EJhdoVyrn`Rn zUKwqJ>XAE7|chi5wJRFwgp9mqg{);^HzX-q5wqGZSqpj;g z5B*ck!)E5E@=wBU>u*J;;8y-h3Kncn=p=Ep^*4au#)!Dv=zqs>lK#oqZT;&#^v^)Q zLfd?uB#ySO)gJl}nuqGlPx{ZsZtH*6L;o71pVxP=0k;0b9{P_M{oId{{&QUPKkT9Z zRWt5%uws+i`X|FqxB9E0V8_Pg)mQ0t^_ExvWB3o6{}*`i|JI}b=`#Pk;OEg){&R&r zJpQbQd^h_?`B#JA#)x##{1YSF*iZWNu(Ll{{|g@aPZ|BiBus3!uAh47 zf5-e&q|ES={+ZZq{q%nwxAM=Y#)|Ds`v2ZT{}NJ&P3k`%*S7vQJoMKX{Y={>yST(=NeFr#3&WtFtkp%dVtj z@?8va$2{zI{cZKo-}fo?*LvvhsDv_XY(MFzvBcIt1Ctt5VcPtEE)90rm|tI|m-TG$ zyOp0`u4I1FUxeM(|FK8^|Inw@{{i^j^zW+D7EArq7uouM2+XbgGp1<%8St;%Y+c_& zri~H(J4S!hWK#JTVYl_455P_TlBpym`5j$-m9FbN@Vn{XxLI=;F>3z21dy%&pvU-G zW*85!Vw2js?(!Hvn~eT$!$;-66uYhekC>;rmH$Rv31y1S*7Y#>ZH&n08~tGuKUDtDVz>3jJp3P;MpBaBC)QW#x^{c{ zzfN<=@`nN0`qz4tf3DI0*cr-S=289*qyLa7f2oW9-5&a1ov!US(;$6;qwVXR9{R)e znq`;aB>%6#ZkPWR0B-fa#0>nrj?9Qj)Bh{*+cpvHA){ZG{|XoV<8c4urhn9VT4Oin z*K)IUjRC)n5q*(Txmok?7&Yia1(*7X^W_QxMhlJ_sG!Eftd z?V&$7i?lgTNF9?0TYobEH~-}u{)!~4I$A{cuqp+mYbdEXEf89%HMCs51T(`_^E#7X4`)k z0P=}l{v(E;{lzkD{x`u$_OqXvj`{Crz@%JmPJfO5o6jZbmV9}YJhy4@H~oiQ{;1)n z@l|eidG7J(zg{%)Bj<0levtXOUY1~jV(TV-Ll6rd^M@G)ZlzuNbi z)&bA|H-DV@XZ~rV!gPU42FWs!*&v=*uXGuKslNd$T_sJ^5SPa;~z)K^fq${Xw78 z>1z*vC*z!O-0vH>oXQiOHL;V*G33o|8Rs~0U%T@izb|(A$XF+iy`T6ieNNwR zQMZGWoX%sYhu5*cf&ESFl%Izslxy(Fn&=0|hE;tIjScrluN~Fjfk!#PQL*yq@BDFP z8|p0RgKelY_9^TCv*_F`bbcUpPW|uG`9+~KGa$-2<-bqomxRsI{F1`uu%{ zQz7fJ+i@0BTxH~%I7FO(QvH1z9bXxnsspj2bOe3psM!4^`Tv!eJWer*GCb#Vim4pS zeED0^30HJDOBPX^4EoM4qV^baV&x~-FGv4Y+H-n$Ne}wF&VfMWWwwiXOVC%;fp3m) zMo}I3hE6YAO#PMJ4vu^OHQ&+cSTSnHtg($Bi+^o{}aPtF@ zIR`R|kvA}!_%<}_w6ggyXpbWg!(Z+)pT9Y*@<%oMfM-A+rWLuXP_7G*)*(F~>0YGh zzjA{P`m|88j~)yJRlii}cjBQ@&f`S$9B45{Oq(P(^$fy3k2PySq&mqP5oqHT|bF(t`#Y#)#gQkz~LZ8>+&*=>M!tp5C z0GgBQOAt#>byFPO=u|JNuC88!owiGLk~m(LICDQ)ITG+={Pp*oY7F#zv}IJ!aAY)M zbqr!?Y|rW2oX$lzm&6xkJAEGp#uj`W7}NVvV03RhFsk>xKmg;jzjrv`>wO>n`Ivyy zhuhWt_ag2RZ7ncE`EF0Zi3dL{?T?{99~$TMhtOvnJ70au>A-+9ycj;&e~f-08D&&s z1n3Vq&f~4vsl1!u8yXvPvz)&7#yNe1fyuqc0#h({icG-RNwa^rTTsXDb@E3$f5ea z7b(^EtH8S_%-A>mfzmjBqZQ?vuF6w6$|>HBy8aeopgVKMzTm1A{rLf>{~o#qeemB( z<7Mzs2j&w<`)&fB9|-pk`JLi#qJIeDocxwII;(jb>?|ul@*AY<%q*l z^l5(8r|p5w*Ta@&u=NI{5!gulG*42pp)Vfz7K-5n7j!&m=6o2rwR>|-X z>Y_RabI(nfp8;bVP|RFD*Jb)~&-*CT$@P9Ue!P#ijdy}nOve0(J%4y9>A?Ss=+*Q6 z)tK*&1=yPF;-s9^g)c%$8n#6F>vcK$O$?n zOOIo2i$1Y8`0g#g%HI|}M0q}?L-%>VM;x<$2X*rSXuFJ$e*pjLJ~$j_9h_Gw>H*JH z)clg=Xn(GN-*if-HnA=I^jeesv4*wPGcrdr~2>NWUpGw3X z<#$0(8)5+Q6VFHAU-|Nic=dgy@l8+V;vQgfuZ#uI=fWQJHL3MFvYf`L0Q#I!=zB)P zzA>gXn(;1Lt7u z8jbi4=$JyE%j4E2lTWr+3VfEp9WOis_b7Sc{^02BmI1`T9K`!uo5Jzc?IlZBXM`5z zVGg6l5X@oFrYiCdhnw4}kA{7j*n=3WXfC$Q=QLkGvEv^6Yb!V3=_+4<6mznID9#IU zPAUGEmrF55@rCx7I6s1Uks1jL2yR6zvt<{I+W+j*xF8QFoZTaoyN)x)$XW`=J{r9ec&|m z@{xD8&YOwrA=GaW^?T&wyv5X49Qk-;;Tve5A1hyx&&YS=!*hD$m;>z@<20W@UqbWp zI-Ku0%Zbw*HF_JKNld_;9R1f&AfsR$#^%h?&e2GQ^X}^yQ^;@RL*k?P`ICE=_4N3h z+^gbyzP`#A{$BlUzRuqV#`S)+-FNhBKHt&(?atBffOr4W%X{v;d|A((K40g|k&%js zZ`=v=$rW4A&e*rQ-RaEmWjucs=;w@f-d%n1vL3?PL5JTbzdG}l@LhGF+j@59zE$I$ zc-`5-eHX!ww-Ezx1u}4NF}=5^aaqr@3@83oUpW4ijBxxH&EchA^Jg#md3$*2I{(x~ zU(E>jPw+bnBfhK?G3fp3_;4KakrUm%j(h$X7~k7~e&T1~{~CC4@6h)L=vjm7`{($2 z-U?*(?n6D^@5?w*2_L)-`k$Q|dA#@hWj#Zf`}_;`xv=L%AQL_b_Kt@Q--Z71khKmr zOfb6l_<~CJ1n5RzdZNd-H%0eZLN|WDJf3&4ujd5hWl;?IGEWRZ_YicCKRxm|wKdX3 zIv@GWvYzK)!z0*-;Cu2(J^2AP)I--=*svWojK|!J{7&V^HOfEkLbb_z4S-mKeFX5_~ZAe3+<0g z_#>$NaU6C$Z)_p^5zD<7lP%v0FTEIYDJJG6Vj@G?F%Nd2t)<1pCBlwXuw$8uiHu(S z&j{n?IAzCiQ7@#6bW(hj!6yaSv!)&_uXnmyE*5bz0rvdj0>mZckNC2-l5Y?L{bwOg zIabb6z6qXq4zco1U_vkcoz?dT*pLmL4LCn*f)kgqGCn0%CiMOx;Ts(*d*PF9*z;BU z(Xm2)AfHhCpctq4AYVjq-s`&~B}Sz$_L46OeLZiZy!n~|I|LyQkXH)5q9>xqijs`|)05mhldPQ~aW(24lbF^c#s zz;)yTUk}9^wQU^}<9aVL`biJz>p@*~LpPQGgsLC3E9n0U`iCr~KYJ1Rob-=3`o}9D z1W()nA0*lc^ih4OHUj<9_Y^z2jb`=EO_ZPfp3(b=DgQoIeu_uLG3iGeU2}%=r?k;e zEWeIL>aSS8F8?_1@Qa-WTs`5!@+IX@~*iZl) zRwQv2>4Lk6+Y&X?)H{KlOXG^?LNndr?;Ezt-aXQMB2u=%=qi+22F?Fqgvk z#pTcFtuuWE$yeoHk8xwUZz9ErbIUDye*9BC_r$!pcL4W_LxE|%--qlv+|OkEwKLqB z8IFH{WaM$0Kfe7)>74Q4JrTI9;CNt8!CQfXg0};63(%)_{vjh)PXDtR51yZ6uJxS~ zU#A0KcK!46IgkB##hgmDR5c?rg!yPQ&I|pSnMeOLQrv{|Z2!2-CY)b_{g1w^%(IaG z0dq`_<<~K$&^=8a=DpO$Vm@afQgtu=0NUS!Xn$|O?l&=qr~Ldq;U#&;o#v%yf9syX zvz+4mKzM0B+9lJHEJ;s#hH>98lkUx*CtcH&oFxHgVH?VXdFlRE{7-Gx5z3p6duM&` zPrB%yp6=&MRG!A=eF5LsM@8F|I!FfjelSBn`=e{R$G!^lW70c}`w-HN`zPEx(zC&- z1w=#l+jNa|qT&fS+j`+|NyGDcdj3xL-Oq{p?&wy1-(7_{K9@IkdSoH{eAX}YGvx2z z78$-K;5^QF=`XbpNGJ1kA&%v9DS95I>FIuCvhrmN@kBiD1;X)4bN)rp%|f{-#wMK} z>5FED`@0bzRmf-Ah?k^IN7Hqq@QFU}sTY#@^sF*rv#3+X9#oiqCQ0|#r0?YVGTe7x ziTm#>a38)B_v0(@3~+f5?$6aT!1vEOZn+Re1zO zO)EN8ix$Np2;)>`MrH<;nQ_L5j7Gs3(5j76^82p6*SdGzbjIc?zxNPJ5vr<9{9eGVt1u@#4!E8@kYc4DHtKY7V*0=PHe(>@fg;+ zU&J`^0@jt(wm(yrmfQBq=%QZq$L{kIkKCUdY}}6PC)+80A;ohx1c={G@rx*)yP+57 z(05QA`>wcdy&*t+2gR{peShw_4ZYZ>emBMEQ+)hJx`y&Wioc2CXKd)56x0@ujFxmE zep~L84UZokt)=TLu3TKsF6=o_`35O|5@n-u;Xc58vMcR9kgZmq;(3s*h&S2lbKr$E zZ!3gxpUKEU_|8_a+j5Mv`!TLQ23yg&z#QU)j zT1L*VsLu!a`rs{PvWkN5l3>v4=21 z`(a1iwUC)}hjW65@$47RA-B3YWbIZzhxB6%YewHCnuU3E-@vrFxNef4hw?RJpL`e>>uV~yqbt{YZAtdRPuJ-&Xx%-|wAA2%a1&_Rs=E)hs)E6=5(Df5Kr^I!a zT3oN#RWKv*p^cd5--l~W8@4w0%$Ydpt~jnU5$!#v1iP1mmd0F(zaMdGe-ht>IPDV? zEuF`I9=~B+L;F>E@CfboJchlz$I34_^w1MC4*eeE@gK0B#N3+y`w7AB)f?Yc+I;hQ zQ}f2>yfqK{&1}Iw(l>**z7BQl;&Xz{PhgI_?RU5~hQ2)kfZ>X3p8aqU)5PQebYh&l!buQ}vhSSk+?zr(N+Vbv!*oBz>gZz)ZCvo&+rv(SEz&;ku z2hYXM!F=oI2%3kQp~vv6qYDeLzlXJT$^JX)4q@}PWKzzg4TBil_LbKiD!@3u|Bji5 z`mjbh9X$7a?$$Yi4dc4~L||Bd&&{C4n79nfm4lB46GGa3iRRKShemSRZ_zA|gH-b0zZszLz1BQJ2WFV^jI3$6mc zC+ZG;4s|f`%%C%%IR!rL8%%6Dzj$uWq)8Ot|HRBgz35|ya|#yi1O2|BU~yi~`BUd$ zpK~A5sJ`>Io>z?cB#OTe>9~(8pTd2wUcR`1uH&IRaqK-l^u#+34aDAg^tLbH`WUW@ zRfDeJa_m>ap8LvgJVfpM7ofc=CvW2b+C?wwk=B=l)4cZf)WB%+qwi_@LyhkNdu^`!v>zbC)tN z+Aq#|U3!mq6#b6MK>FW^ws|u8KaFw^e|G7ifWdaTcy!yqxpMe<4hEd-YXZ zM+_O49)GtlTUZ%}(1wnzT#j+48spD37>C}1@n{*=PgVOcKDqT%Zq6Ba#`aJDI|8M$ zbC1I_xOpMCr#ymG$%FBUoI7uzxo-3he}CS{S#(V;2HnSD%pC9T)1zxuI} z&Do55IrqE!RAM=so3Wn5Sb%Hz=ele7-%;1_(av{$8to;4@m0b_XmeM^a@{rUt779e zqpj6m70cT^3%<}4fQDpI8PNw^IjP;vf_{XD%_q2dFJJOgUzISePb555h0jo78t;V$ zWl4qUegMH~T$S)llzSL`&6j(6R=JUH*SEOb5*~f^s?Gn1F{c82X5Nvz`EiWzI_+0j zGts!GvE{%@4fc7AWeW_3ee2r!2HOPvP+=MT{t+@~8*DOk8htg#-FGxR0euSh8x5cC z%Qgq|q^?iw%k26&mrKHJ;5Yi}DVzTh_w9`4=55B>3I3GLaa!l+;{G74rG>W9$X@=+ zC}_$y-|5CJ+_Qvoj7~^w9-_RH{5?yfQxlsTu)Y=^XaM=6xwvnMXpt9f6#ml9fs`n+M6i9rr(B?veDXkY4Zfu5tG>jpo*G&H*1u$3-s4%H13|nsJ+F z!I!i`q)B+53eQ#HOH`QbF7z0WQ(-*5kqV!$!qkR^p4za4sSQh*+OUMF4NI8Xu!PZ` zQekStg8!K7{4m#fAFVl2zqZaX7rN`6)Q2TZdj1%8=|_9|aqhUygU-)$=M+LidPQPYK^K0rz@A2V8@8a}Qm&#+=~J!6|%XWhKVD3XIj|`$jPSyZiTW zjg7{|V8OXX7Zep0&BTw~MczvtFHVKR0|mh)XHGtQ^5n_q<3}#;z0~pIR46=9(Gj#& zw6(QejUTzUcrSHao(hErYGwrIpK<>A=TF9u+*I$Sj?+@1@BkXo5XSz1?u{5Xc{ApL zT8y8mdBcSB>xmZE;+^djox}68@ng3<=I+}Vq2imv>*3E;NF3pxj4@$k^3RseH<7Iux~T> zcUV&qj{DBg4e35;y8e6CM#!!G0nYUv%RPHz4%SV?i_TwucRk&s=kIL^!!qvufjwyd zDhEFLue(QwWYnX5>icu34;5ft9>=*T-M>QRqqZCXlf1nDmzsN*zT)P!e0%@K*^V{lS+KdMCBD>OX})f7 zY0Lxb#Rs4Z?!!UWY@N%X6B1m%CtD4oort`8te{ z{6PZeX|%sd<(tX(|I$5@tr(B77vSo-0CT8}&HL5*itaH;U|gp2-&*KClkfkXIm_Sw zI}`W+#xbAG#Qnd{$Nj%_U+-a@7gRZVfB!G#qj_*9?*H|Eg}bk}4|PU+P;~F*uh7S4 z;@-=CtkdY;OYg@wmw|sX_?3VzL1|?PcQ5bE?U=X0vj9A3ejGx1X5#)|@7HhM4%%U) zz2518dp2GAxXq7Kxxp_Eyb9%_`LP*3?Z5QF$9;eK1Mq2nJPe=i`RoHd+C}~Ve42Nv zz;_D#X83gOS^%8pohtZ~;19z`pUlrgI?X!+@adfXFnqM#{9*7Fdl#IRcULgpw}Weg z8y4Mg!wseQk$Z#pQpYP(q42<)=$;f`&*^($55o>5E9@TFRQ*CM<0B$$6?@M_P{-w7w2Dm@x^E3 zM{c_JQb)Q+lkVBcC^PnB4x^4wROTwkraIR5^VV}4q%svCoyt@N-CP~Rr!tYQRHi(n zQ<;VlcXbS(%G3;>%G3uxv`pttnlX9Cj2WlnM{bJuQpc&OPE_A=^`!J89T>E7{xAsGpJ(LDNpW1qG?u6Aeo<`m8N#owc;J#H8C-isz z2KNHeeSUP`C$7J4_#MXBLCBN)sBryg|GAjE$QCU*{i}#3ptcR1?z3{~=)W|!Ka0K8 zefag^w-vu5E5q-XBpvB~)4WNAi)qZII+J_T5C1>3Us4^=ul}fi?rj*?G^TG$+)ek} zKLC4pWopM`%i zAosn-WBy*(VXP@-T}Er8=a%@jQye(;Ia+(3g*6h|9s0DtE;@j{_}&S@2(5YK z*^_=?dQAbD`8w{`fw*1};6B8h1fC&6|Hzqm4dMRzj`90`yMWp%p6Mvh*?rZOIh!wY z?K{|C0$bBPvqQLt^e0$T(lZrU@47ub!XDdz_iIw!xiu55mA#%rv`0y0z%v2AT|nnX zm8s_dh#tR;b>pnh__8;|)AxhQbzkZmd@b9(UkYPSa2b9Wi?D^`pI5yYK8+g};TOk` zTmrvO!N9%nKL;Q69Q-e3#_whF!C*d4_^|aAOe7x+@GOdB@NV)G$V+}Nz8_9L7`QkX z`1rWsdk)VFaQzu>O3+A3L4&086TwHE-y3`kKB+)a5}n}i9OQ%e;Bxq+e?JoA@E?HR z3;zei7a5->AJ`AchwJoS@F`&AK1n{950C&b906U$>aw7sDyS^?2gKI5cXiL()XxGR25&l@kESK1XX z+X8=KSG=;V5rN|3uK4l>3YBzC3fwzlm(^5NuEIO7yBa%NI=beBbqBofwV`cmu%&HdTl>4(V3yUvigvu^nFvri@=%nD%GCu67tIM4 zP@rg0>6~Cyc}YQ0u?rOYz_N z-YMPM+S1^YQZb)v)v~g*7>>A<)s>YMJ_i-3bcyG+yzJ`bWx+MqzHP+~mE~2-t_jMk z%J5%YczMmr>Klp{6fR`CiiN@IsvI=LQ(k0GYQsO*n3_-z)l`AUe z1hv(xZz`H!=qqaF@*4j(-}X%%cqh2~BEY6(cXNAFP*z?2hFRqxsIFXIxuSOEo4G-} zVOG+$BJin$F{zE!p@el_gEtT?I@gKLln6SPNO@2bl82OcFHLq$uWL(7cd{$+?a)Q) z8rKG^uU%GKxfGdJuBg5t9V;(Rhb6S6IB0B6;^QGM^V*CS?Hb)Y99NgkgBFlH4~oxY z)0tFAlT^~&q`sEC{#DYxXW@;|$+q=)6Mk1aK2-q|2in3mE?saV^`4ED7#237zaT`~ zz@ttSY@}{P6wY^;3vtidNL_2A>s#(for~BtP`7GuHQ9hngiy8y?qtqKqj7%FKukzJ z3G~vv@G@X!6m;E?dLVwq0rk6p8hGH_3akx#Qs1NMhDSfxo;>s;_DX|tyo$QIdRZ9} zOPF#Z;()%W76r`RBoC^Dy4bD_>f^fEtbiVa`lY23HKF9i8os=vQ@} zTUwK-{9twMs>&5t*H*zg<<*tfRaRpo|9Xu5@}s#y!sJWbhcb^eKb?m8gQk$vaiA&X z4EVk9rw|B&GvOx?oC=@jt+U|A;pfAr`D+?{%J@z4;Vywse9wkY^yk1QI{Ic5@jn-S z9R7Lmd*PoCKLP&&`1lWI&;hQ1eIGmi@yDa1qsOOsZK?6sM*b&Lzg9V9*Rga|A7knM z+WEbPCUsI~`D^D#{ckK?Vl0_~SMM0}a|6#9@{ErmFJeXG;F!9x?r>1<|7&B+Soh(v z?sH?!Z>-y3d`uhk*pCVQW2|3d4Ea&_{o@#}UB;Rp^^LLAZ>;%ARm3ImXZkeujpg`9 z^)Z&?3-KCDeuu}hu+S}z-(SLw^)xq@Hl*_YwU5zbtzdktD|y_LW6Cj6Gqw%8w|{I~ z;NVMqVm?--E*vXH%x7?n^$W(B-`G~K-k)9Q8{k;;`|Doy{s$fw z8Ef~~-bKcCL>=385!FTB7#r}fy9JK@d6#R?V>}M#{FU>Ijj?`qO!%wsGgje~j7RO? zzt%oO_R&8p9`|^?CP%zz7!aN|b11*Ewx-VZmZo^Y;>ATJg$tKl7GK-Ym28T)x5Yb4 ziWU`>E@&*86K`y7Xj>o0S77OiX}qX-e&PJmctLY_cSqM7F2B6N^O(QBy?s3{`?PQA zY)sC_hvhHtZf|dOUlG5&we_Y=^Kfx!13o?o*BeZFeyt7-C$8Wc}C&gxqHTa zc)~~W?wfQk?hy;<(-T+XNA4vuO7-L!aiY0z!o76~!>(I~P3i6!{FM;wrdYrUpIjx#}m5=m3!fEa- zqejZ+OEw#6bi*>aHRP|EJfkKbJMBLZwxOt)l&)6Q5ne* zRwa2I;;|bIMrG_^tdQucCeN61U+%r*5Ono#=n0ckEjgzq>>$$#76*2iu|9;;_DQ!_ zlKmpnln{+-6T~x*$Lf4agCpz$#wag2!U`FqFgdE53dXjD)D6)!ak|)=upY*w42118 z7|HEttQujf^P`+5x{&Yg6M~O>37sR1zJEaOY45pm(8Idq4tURDcpl5S9gLCuIAd25 zX6oxoPLp!Y21yNL!z4eV?-1V}rmI5OmTQmU>)JnK14M878kO-dr%PQ?o*yyx5amgY zVKRadnC-f-_8u3!oOS)U!4(ou5EysVt<`566k``&^5VaSo0;^Yqp!#W5&N>^kGqGB zqnE`5!PN#0f+rpQTe9#@hcC~QBIx$&#iGKbT^m+873E~7#^?FxtE zj(6jxI$T;|I`IciAG#|&(|z9Ic&g2~9S)yiP<)@u;qff|e1~6@g>Q2DT%3h3boeD% z_+*D;VPM?Tj{l_w4T8@)d|noQtHbAK;cs{Nzjp1)jpP|= zKXUXks-~0HyK*f`101^C;iXyl1c$#N3;&Me??%InvarjjR4T5VOp2)(B z9bT4&pW*POS$KofvoZ_EduHI==$euC3CHJ}42&Wx9ljz9zs%t^S@=YUzcmZL)8Vdi zGSc4e^r_9jDDpaoUzdgd!SPv>h5wzy-pLoMo8va)Y#eSe@XbPHuYqacfNExdcODuKQ}RXW-V42u{WPog1Xb zCAaPbUWOquCs^x=ag-MJ74XRk((}k5Q&9PGHVF3Kyuw?91&p4W&f7G%$B9?zcFJbo#8SuPgL%fbkV zxv%7AC&hy7dCk)oW)nL;+4GvG&z{#jo;`ngTt*9urCrQ@%`_dCP%L%kE{OMI?(3hK z7{y{i_Wb4X1bJC57G%#~L=+2_X3=^)dp+#&ka^AVxjKT6j7FKsu^@Y$?D=1lNyxES zusj0Ko*zA*nh5&r`O(v7ufsi_JwJLpdw%q|jHVPzyO2W&~Pmj-; zc=r0A(qn4=%A{}5(Ns95=8+VLKupc2nRt5q7o1))5;jVnilICV|40P=tr)Vy=pTik zFnj~%qcHr`2)rhEd@Djv`etQVd9R3QS4SiG{~`i^Jc55mggxIB(awJ#p-(cRUE%u;q2+1>pQ%9{ zNAF~%bp(8-2I=ur@B=8wcRPLTEX ze@!I%^n54#aUXSfWs1+!9Qq;rsX=;vku%J9IJxsv^ia<^dWd~$YW1Do#~X%yrmFRi z=yR9jlU|<)pMP<7xH!fCG7g=A`kETlq;RntzWo6_y^a$8JDuI$kfL{cp@`k;=+o!L zBKLDx=T8mN>mOP1Y;k&~*Be5AisK_zNq=+vhmMcr#@;<^aIV9p_OQjs_=h6e)f*js zdY#no2lx&!(BrG?H-J8Q`Py4 zyY>S7Wye3g-f;V`z?Xwh+6n;JEpqKPy`GeMd@s_cs`CPO?E=_`BKq~`Bg%{SRfWp^ zYy_V_M(|l2!RIGvkYVL|#@Q#qrA*iRd9J@mEB4=6CnCIe8|6hNcJ6u?!oPO)i%!5U z&i**ZCw;zF!T7O=axI9ke{Tf6wBNI!*Imq;yxAO{X7C!u&jUF!9-`@E#5m zAB`ViocR2=q90WFfWn6r-mmZ@945K%SNKs5lU$9z!Z^wOoT49xI61-}@qNn8fT+7Yljwy1Nv0SyK7$g82}x<;wL(!nNFHBUe_0c-NJ4 zB3JNU#b4XGU*THrL4|9%1sLbaS$z@_c!?(u$UdSAL8Xk7o*J)0oSfLR(MN-7#-&_> z*D_A}JixT%Nxvrid4*SVnD~E4;WZp4{u-AR4$=21`ZbDPAHjDqPW->YVe$q!O!$9tn7kixnD~p%1c^s=sOX`csN?*dI%{J*03U&djw z+now8a`HX+MO2RpIrD{-DBjJGn>Uy&NWeX#Q&ExNbj$(+fVy^?5Il z{v!0!t^^nQJxot}-p66`9#r`K3V%r9T7R(*@%fUX7yDZ~)F?i>J&V3X|3$^8L(yw{ z_D0}RUb35niB!r-lxfI&Nzv=_;^K~TM6d0W$M|CSKjysTO=g_d zaT?EOocMfA(O;nOuPc1E!nItzKGe8w|GK{vGEb8GeZ{|2;kvw1U$%cGm|oiLxiJq^ zF)r;;@EaK?x&O;y@|rj-eCRqKIgu-T1n>6AZl2P7wlOYz7BHV)#)XgI(l)F#>GCu|A@h_W;-8c-0Jg+!G(UDnjf`3`3l$L@ZpKR;H2kTWw+`{K4SH(VchD| zF*%&x-|vC@R={7+JNV9zb0k;S<3oziZcpNlgNzd&jr;q`((64rXS?7upIPJzei`E= zSNEe5#-+R;V0)EXK8#l@K8;GxZ4r2{;V<>xXZQ=gNAdZX;@=;^=fMa*2P60#Qn>Cf zj~f2c&Ib*D!JkrmbbA|8xNdL5hQE~eMZ;h4ql%BV!z&8c>#oVCdt*`kepT6RI^$Ho zI~5*hoZ5-T3l$%|en==>^RHF7p7(bsoIai*ZYSf?-lV*{7?*Y{_=6Gj0}=EG87Dhv zyFIFKJ^wzXa6P|2!?;~nl72~YHLlku|I2yFt7d)0ZqM_6#~Q{(f5C5Lob=Ru^uCs!ue%NZ zUorn)!(Z?n5&U;4T-OU-XCWv0OZoR2oUU7wyN7Wpm(a^To8Uq(`)sye4k>+fz0mv8 z$Ps;m54vNm!nOWu7`OW0XmHV|o^jDr^lvh_(96D=)qfk)6R!0al|>&}Z!mdky(IXR zoI&VCp9JGp&l<)_u3leBKEnTpX~^s4F!5i{VeC9i~1&=c>^g~Q9=Vd}K_+^HEl<5l% zf5B=%c}vhFT>}F8kY3Ub@eKT#um_yx;KuAEtlM&O69UhrLp|1zeR^^&wV!DU?}{8ur3zu_;qtc!$R z`q4v%UhsoP9~mEI9VPk*K4|E_#riyH_zV7&p>JdQrwzT}&l>uhnf^zHUhwA){WNY5 z!-ih)mkd4K&qVHsp%?rWLw_IB2Rz}5eFV4HXYox`=j`=a!Rfuf1mjj8X(xgUeKpgQKKlIeM#EpqRUg5>Rq@g1`#p+}Zg1NZ zAC31a`aTYmx0A!9zsC14ZrkC53fK3mJjA%Q=K;l^#(ydAAmhYe*W;54*Y$Onap5m^ zeu{Bx|7R5+ZU13~YyK}9{-Wng1{b+U7#F!hf7IYYFZ&s!zwURkZ;;hrKu3=3^N0_+ zqnz)H9Yk&c(_4K?6(4QqD;2KoAnRY@FZ#>*zVH`Z&g*SEZ&LjAK8f^e>c7&)s9*(L zMv{9AhsnE)!z5SZdznAc-=*m9VVvkSKAmZZ{%;h0oWn$~@kbT?PDMYc=rykS-=^r} zieBSlbJFL7ioRdbYh1=vqTjCQ^A)|uI~XVWU5dV2(Q7=e=ykbfD|(F=GEVjWw;U#~ zl*3fNUr_iV4wF9bR`?)?$^IIb^BAJna_bQ%NAwz(eIBb%2h$U-_32UgfM@BB{R)?{ zh!P%DxGwL2!auM098~zH75=2cA5^&P+mN20RJhbH;s2p<36gziT>S#iQ_{c4J{q6G z8HkUp841$u_I*r4-US>cJ{pfRPJABbFnQ8WNFP1ENx!z^n{GdPzLxf5=@TqV$}8hu z1>;g)!D|>NJ@vfVs&GC2bTDq^_9}Wk4)2Jd7oODqzs@w|Nx4X$A1Yk*C;Z5{D)1#I{4Zo&<^{oD$M~?JXE-S3ek1e+oX}_R%NfUaFEiwx z;-f(UmqYk0VtU!968s9r4;%V&#$`W2=;^s8a?R`uel5oj8T@S=&l~Ua3B8=>uQ9mr z9WeMN=5y5GvOiokA(MY6)9*ES599Q_9y!rxvX2Jz92q&mZ)5sCgYRJcS%b^I13ky8 z`Rrl(9)o|J@xuncpYiE@-<0U{DaM-({#nKk8T|8%=kfhi!l%)z7pyV(j~E{?_?MZ_ zQG2zmF(wfBBwOA6Jm@{}$6fYw+(dUT|8bKHp=! z$KbLLa@gRq&m;Hqh}?f?KFz0R^8X3rhYT+JBY9_J(!a>`a{q?#{|)2v{GZ@|VEm}z zlgs^~iYHW|Kb`Tt20xGSVS~Sp@zOIh^}LMnK7(J)__GGDX1ri(CZAfydklUf7!DaugYFZ|Lxh}TX;5RY< zVS{gDy!7l$KC%ziXYkvZ{#k?H$#}sznS4ILc#pw9%=lr0f1L5@(=++p&v>)J4>B(6 zwDFkVYJFCBOmLX+YZYFv@aq-6OW`*t{6U4kP2qzIf4jnEJR`X`DqQAq!r!6r>4=jf z{GC4Nj&dGKc%8y!{ZDwk!gnb?4GMoq;cFEx*H4L$jLnq%ilR>{`YAl`6a6}c%ld)v zW`$QP`WA)PD|~~(<$5CV*{JYcioR9ha@~;VH!1v(qHk09Qwnca_)7}!Q21nCpAi4e z3XdziQ{g2F?^1Y`!n+mTtne)gm+N;V_a=qQ^*F-crEt0Li0~eT%k?k9w<`P@CHH29 z4=a3|!sWUW@wrvuQ+R$LyjS6JeTVSd6`oM^cPPA8;X4#A_ZJbL_b7a?qJOW#A5wUq z!sU7d@p+%Z<@y5QcPc#Cl-$(Vu{D_A+1}L9-7sH$lC!&EZELb_V~_tXYqGPuuC={= z)Mj<3MyBva{m18WKTEvC0iR@aQ;dnYD%ta*wWga z@ts*k41KjUtTU>x#G=r9SxmbN&h8gMXkQBygu1o*Nit!cQrR`Ox88E ztjG67weIceT(_<>37xV&3fxuK(gqtKVN((TWvMM~UCk})kVaOT zZ`54d(%t30H%vP7w|%uGNwwDYhNg7d+ODqo^Q-HYCp*_Co33tcU)#{y6;xhVQ&;Xk zElrHpwKlBp(riL1guf@Ois)3UT~n9!&0#}xy!41P*U->D(B|gzm$V!3S?Df&(AXKD z4C_CxoT0YUh(5&ZtdnhXUBnbER45FqAWf`l+9*+PjnU zuU>KOysqws#*Jb2@>S8WrMua7!IqoqTHW`owcL&^UClvvYgZjoTH2D-bXtIr5z~#L zZe6mwF%52NVnFqAPeA}$Vda|gDn+t-+0`q`YOh^YDHylPrsUc!>zybx=kE5#_Est= zYPO|qeXw-d%DS$$4urecS#>b{cP7&)^kIbLFRyUzuB+wdq_x1>)^_^XIHjo3@TP{= zEg3*lvNhSAbRYY6th%>$B)N4Yn=#tr3-XRL)vO=N*KTdopzjC_nxRUKi7t;#ma)Yq zio!frxn$JR0@KO5x|`~3R@E5MY}%R{I)x@Z{FYPipAsXx-|*i*4(ICLe80 zYOWS@aaGVp8dyD*G&E{c#HoDM4K=kZeK?~vQ6d4VF$tthx~aV>=`?gR)Y>gAt=%nc zer#xOYfQ1Pty)!CR)O-g)j3${=8Q$wXlTO7ku|{UQNo#@NZf#{jX(o%_Ux)qD)uIj zq!%cJbabu@LDTDo%p9s(sU>dgp@A$lBt)e~4N<-!ACE-_MHCxpp3$0QP(-nz@#}cH zWTnf}Zc{^JUB|{GEe^9QfXtMMOK;0W)616Bz~su4(v~W#krtyZT^IqnXpNdxnOshi z*^cqQIoXh|9GBlujG5`_4(W9O{|3s)-QwnkRt#Yh+vH<1GGGbp);iQ4x3o2;T7nYh zCkNQb^%2r=KDdz)Zf$8j*rg8JXd4-Q@gq!)EG{4A&U2x$-rwfif^B1^du{##IBMwdT7nM-rLU$~2#|7?K?2bh^ zqA-qdfg{8bfD12h$6|LZ@`$rGRdhq^`u5J2?&eL!E-#J{;*KTmxWFBY-LVMArupu$ zsK^oG2q7-Kz#WU-vB)3O_1)cBG#?mBQRwoyV~IO1aK~bIEON&}eIE8FhChjYUOtu0 z;Bfe$kKW4ru9Aq;zYMnuF~WGeK9!b8g)#$t+L;1Bi_FK%FYg_b3^xBKk=bHITPP>} ztQhT`P&s)UKXo0m6=0bBUA$lR5+y2UWvxekixGJt-y9(OWF((hTKPL!K5wf~R_A*8 zxBs zy`D|#Xk`^gmH&31rJi$A`RP)El}~Dhm0zxZ$#p7blT}vQyRl^4G9@(LbvE=SIlyVEI*?k?enIi2NQHKg|ApCt3dMCxz$l z=lo*tDE;3Zk$>PM^M4Tn!t_7D`TImL`?jtgLVk-8>7kJNqq>mtNW1(rI$oIk(#yTT z67QvsR#rdqTa1W@S-$Q+#lWrne~ysf%JON>*3QbJ>zo!N`g&Rzz*TwA%^y@2E59(J z{q(YYu@ke&l65Kahshsc`8*6d`HMp2|1zTg>}B~=L@@hS)_+IzpVIq%23`Kr5c%(c zLBi^PfaPzaMCGjf?Z|I2BJXAS1DGGlQU84de%Agu5#^so%mR`tXCq&&jMOl z!b$y+{44RZ@_QoW7qWbzCtl=iS=%G}f9Xl)|0iBQ*z>0Z=dbo+Q%5WR2T(Aq{&sTy z6SbeOM4W%!!};ZY3Q@qy|6;`XSAy+d&l$=7OYswXO1=Dm<)a&CxT*y{n#e$XSvAxi zp?@Fee_9hGZ1vv|p?`mf{*}mY_5Wam{%d&PoMq&j?i3V8=)aBgA29i?{+CARFE8w@ z=lo>*XJvht z%Ww7X<@|CVw6L)GzlHo3Bii_?NKNF$n1RUq}%+l7Ah3R{mEb z>VJsk4^U?1tgJ5~zr~2WpXK+m!Abra{H%PsKRvAceM^W-dj9mWY+3J*(7&JaKO`C1 zx4QO4=pW~Tzr^`Sf4c9`>i-3vKW+c7ro{%_pgX1yR{nLYzs*1S3ZJJVoz;bG{x@TP zo$NH4v2t7;E)T(1O!E1y{O&TJiJL)+gOyMAAf7h=L!6)LTsxb83G@rg zKW?edRi!f{Z1ZOevC;7#G`_cYU1zB!yy@&Rm?S0bwZv1Ti%ZnEk z#g!|}3VUQxNr_8Yuy_H7>L=Y+S^ehRoU}!9@I-z(=H=3HNUjAToFD+lW>6lx<vHz}?)uz)M^?u69g79K8)Cu1v&SVyejCf(|C?COe!M?q|4rk9gF~^i_9Nq-k4{RA z%nZ(Xp(QV<-J6?uXoxT6L*g1{{*KQUb4f3+^!3n`a%HNfH&Rx^|CzbclV$8#t)bM7U`)0dlAau_n3;m>?H*gR`o zP}_WAq7?U|mJG%6p@-MAHzzolSCZH|^UPrL5%w zc{z!Z7h`kgUV7T}&iCa6Q-_e}ww%1pap-(o&bZAFU^>3@xt!hDX3ht%sYBoeJy!h} z{F!+{QSTo|Yspr5BbS7hY5V5vGUafYo{vFS*nw>G9q{{hPEfK8`V{2k?ZscK#M{QNE|}IlxB1mm79B-9A=+SKVx$+ZGWiMGhpXS*prq&689r@% zVk9^=no8?`Wt1MJ$o~!GQ@akU*WZBWh%3wAq2J`VeshHTO9R?n3v?sf;MpdsgOMEA zstjekYJ9L6>)l#v(^M`=qdu1lJhaGnGFlxTZNbcm%ZhROfNf^#=h~?$jQs9e&fbLmj3%)p4qi-=7+c=rI7#3LTt= zF+lqN_t8G3|9`~w|Fd8CHtOM{(BX%v{yz=<|7_oGa)X7xPxb#a9tTeOyI?=kxzF}x z=gBh1ESGd?o|+grOnAdZ4&Q=sGs-s{6fSPKE-|uw zd~mQHGy!Zw^+ID&_j!qteAs3m`Y`&)!vi@5i-wSX5!$-6HR3w}UW5(B@-RO6Hc0h) z*EvCL_l1cOyo=`Gz+BLc3m%5dCC%ds7S*2)S!frU7mb;O*MlGFfT=4#59Ow@VhH`_ zC*V)`ZP)q!c4XyJl%H($glh-X2c15D9DP{Ei{t7y75ZJ27}ewTOjJK984+cE;SBJ6J@Z^OHaxF64Lo5#r{}t{;feFA+V1(x^X9SPiEqHxb{8|x z4~z}ZjpM;{5%c`y*zo*rE_l8nF;Y7`dT`(?7?*}eUAsK|^UGbk{8Q@vm;XIl>-%nI zn>=<)dJM(*w`3qFSd2E5Ieu}!rSWJ8W1sI6exC2k>R%qGd3NZB_n)W7I%=Da{?*Zk zk7E3epAsC@^4<6_9eo;o3Th@&lK#L*5i;;6%n zIP9MhpO6??s`R1puKv2j$SkZcsL%T~SU%>fvVFIMj>dlA`Lqs!T`^bW%*9yo2*#kf zX>8Ucjagf4r!|xtUxMAa+iCntk1@0^L_2s`+xH0OwR-3&WAW|CL%MZO2u84|I!I$W z#d#dxUq4C4sq|bmb4SiTnnN$Gt{5rkzhw8Er!Uz(cj%Jc8#f2LFYCW}H=dImnK+QQ z@6-dQ?4xoFL*_5=`z3xa;P)bamL}&F=J^oTFhk>Z&zUlQ_uTk+&vR(}pTzUnEswc5 z1?$fJ!IZ?vPhlG@sSlP-POn*|4IaDYaX0=3r(qp%ob)K3j~^!w@jPC76wmFa9$(Mn zrT=AkW{d-mQ2V0(-j|a{uLN~-yR1R_v3|2y0IU!5^Y#P=@C1s~j`}Jc3;%JMR z>mV8%bX)GlJUfUsD|V2zKGx~^y%=-C(q#UVde{7P-=eb7I)uvC4_)M(g~p~n*H37j z;B_S)!cW$7GL9YQaqKV2o6bvyp(mZ2%+2Xtg?)lucsJ#K>?Q1;I52VF_VK-|WNm}K zou6Cb#-se)D(^pl@@XD-;@s&(JQ5iHsc+l7-$5OnY+hRX{qFi4tk3=0kIpH?=Dk?U ziG2r9&!~^Nd7sC+kn1&-hPX>xj%H*G~MzAl8Riv+a5qbIDKmoa%Pa`?1=eW1((eJ`&q= z-r#w`$o;v&W?HlT?)tKQGbL zdfoOPYk!eB0KR9#*2H((tfeD^kc;zzhe`iI;td_d22%cs&aYPPybhROV<;|i2c~napQT){x}Eg=Qb(x0NQxIglT-!ee(b3F;@1--p_dK z4D4^9j=ueYvZG|@-(o&HjCJay2VTE>W=`<(cXIFi`1Kf%-iI-+89y4!aQOqL0d6mF z51khbVb0ioTJNg0NTcyv#uz$}KNaU-|BZc~pIx-nt$k^ZnuYn1=E(lWVD}E>k$p^> zhx##>5bq(3Q!>}YbAp8fXCy|3A-{}eP@bRSN3{K~j+PKTg&iHv$tgStxkCs)fV>n3 z|GA{oM$A)GZra<#I61eU(`60x80H#(ew4kJ;`z*+OZ$_Qm)1K0`fiqtW1~*SFS7Q+ zU@zF1`1I!-T@3rprS(+3?+(i;fAvlBfmsDhOCiq=LS>1d;0XwIXUONh3rE6(^!wY{p!czPny!ZiuR3t zy;i`^<*@fs*qzS%{@$G%**)e-XY{Vxuwlbd+D8rBU#33#E3`Yi$2{!XV&=Y|UwgQ^ z+}{U#yY&tFa~{?cd9?qF{)(Slqvc~So5~m;?_PzQ!d=eG5&Nk`YxxG~us zbR|3SEMf;eJ>8mI-_VF>dXsI*_3hm)4c&NPFKBFS!Mh?1$do=WM6|Uf8@q{VW?lz$ zZQ0a8obX(&PbRu>2K4kI9(r%DYihfEyFljt;E|zliizw)h+AW8oIZ1Cd=e;JG|4OWj!9g>k7(U0mCS`=qbW2 zuoP;;dslb1Z|Ud?)_bqAyrQb6ft~~JPIkiX2;f;^q72I2Q=O~*Gwl8$O2+u@7V5#u zuAqjWdk>bkw57tE@Wiq_cN#2j=t(Cu^rRD3Ix}|#*Cjh!)@@x*&pnspiPV;LEsc0Z zNkC7hf_=+Ph+LE08sL%GV706KWq9qun_JK-%9|Tn+RDpn8t|$B7@NW!6lUDfFuqRF zukLQ|1b?5Q%SF5n%nI!b3NbH9am*yeag!9!PLe#oRmsg;@Pd@`GMBA0BjziRlTw7P z5R&8~sU$BT#l%O2)WrbvL8pu1MK3Ld&plM@3 z6;-SKNI@-|gV(loHLOckyHO&OTBrCnRnB9AH)|$!Wm{wC){gGl=49J)Ja|lM=nNKA^y=ZxZhLR8oGlr^!`=8^H=tCC)=8mP0Jg)&<$578#^(; zm6xqRZ|n-Lfdzw_WU>?W=o*vrThMY>k}(*pY47T;lGpMGMJ8BNxjd+-!YCf;!tQ*~ z#Q*P3&%;E0e0TixzjXd_e_{Rp()`2ktkD+#^X&WQ+CP04lGaIwv6FmU_vfYO1%F=t z|J(Zix$@&UNjRQ6QF_4%^W#kXIPOIJ;{nc!j^pAuK|7xN^Z6g&K7Vfc3r?v2@ylOu z0{fguzZ10|+ds(KIFBUvChz$pY00>Topy|87*f$^3_x_NB-7*cIPDaU)2g&ncsz~z zd*PW+27k)Tcm^Mx*M&{9$}#a=6OWnrI1?XzHB-Vd6DOUVUWrUPoLhR_XiJ5n`?_oL zf?jwjhg%`Jd>Q5r$e5l*B1KDq^YQa|<~T^05lQ3$&TT{SbAgjScD@ljqY^-M7JiOC zQ*4kbuaRXxx)44eN-b>M?0>0g(qFkjmo@QdqSJu|l z+1}C=FIc>|sHAY=lFQ<2@z%(uczavCv!rNIQR#xlqB-%#)`qtAah%rDdywKq#q$g2 zm&Oa4ySqEO-f;QlIOQN7^VhexV}GWreM@I!l3vt#d3Sqzt2?#6ytVbFP4ln~umO85 z@x~S7nUw6DQa3++*G`7aWXk4{Y|i(n^y%n z+b+yGfAY*=HVQMH3)D^3Svz?~;_lo%<32p$BY7X4w0H7-r{7CfA-V*9o-iK?=aRckI?oo>A!Z z%)4*Wy^~$~kV_4MZR8udlwUgNFols{>qRo-T+t$vFuDMjmwHV?}8PA1GyTvU2KH8{Aa^pX>#*PbA~`#9-w$lb%~^qz#Uv4F}T-xRqK;jl73%RIu; z3y?*gQF(@BteHHcMvreFJN@HR?wfiq^>30jn`r*JR-za`@Y_@GTB^rOQb3-|l#421XHjW(&QM4jJz4ZlSO?1Ea_shc{;7 z6C9q*!nZn{8x5d7B3otK6Ccbf5w5mf5e9et5PeDFSpFUZ2TJA7dl-sJGbS@_isUy_CAIQ{La zH3-%_{E964g${pX7CzPCS7qV<>*SVY;s4_B@+|yehgW9ddmVmt7JiGvmu2Daboez{ zc$veOXW`E~+!Z1tt-(PnGcbx=?(nx};gcP{It!;~oHM_w;Yt3%;e6(!a_x6Goh@a$ z_d6VSG#J<6a5}5YbgLasBWI@TK-15~<#lmG94JFm$PLo%=N`s!EgpEfy}3CPX+L#* z((OvX;O02+`G&*O+u79_dL3*6IhdFL=a?|6Iw8Oic-1PV(^xt>-r^j2d=QYj_^(j4fap<4Nk=$!jxLac& zb_Vp!QD3L&Wr`V~&k5G1=zF&kS{k#j~i|sWnQj zEf!?2Lx>_4WUoU!p1lt7c)DFtTwF|z4}y^&b8qLtroyq{b*Zop z#MHQ#iKqK%CY~NQGV$~{lZmItjZ8e<{xk9P_@9ZV`)MYg9{)4(^n8(tr{{%CJl%gY z@pOOB#MAvc6ED-zR5%utr@}fA3)16NCVsV!royoxJ&vV71Y+(jG8*yWn3_j)YAi^P ztC@Iu{LjSG<3J{!9+xul>vc30j=9+(6-@&|4an`+c6G@(ND#CDGc8mq5tnA^n4_O z{(msuhw)z#q0d7Re3B96+7Utj)(HChBjkQ50`H38L(^VZxqckM=N?RHQ`PvN&u!x0 zVV|jL-f{bgNZSLsQ`P)3%=ABlKQ&0tU&3d%!_)J~4yM1&$vul>={-aGM&nd9zsNdd zljD<~Uj!eIb}|(`K%DHM&4MAOs`>XxCK$!~WU88f4>NvFM19SQXwNhgh1q#J_=n-^ zp-&k8U8o+0*F?yDeMG<89)Tw#@NY+y_socX@nQu1ya;?zg#M)wb}Nps+iekcdp^Q$ z%@J~!M%dxO2>k02{p*Pc{ofK{xBU_H^seNvdasP&^L&IpH%9d9T@m{NWj=EPU7&k!Gt4=X;}4lgP`x*lILxRmP% z#Gm&i%l8^Z4_R!06NS~)U zOrEq!!au3-dJYr*w+g>Z;krN8C|vi)W`*ni*spNi&KXYGN8%VBoD=&9K7|A4K~L#x z1g&A5^dICfdA%Ga{1Fb5CwU3~mcpOnu%-Wz!oRHOpXcym@HwpTVGfrX{0QU3{{cl$ zbmXi)tqRxrOTV!6gAw#Y3fJY$SM5#nFHyLrr}<9w)bw)Q(CYJO1pSW`uK7>FJR8Qp zP~n=sN#Ryd!)B*Zt*bmPKAOhsn<0Q}}}l z*Yz@}a9uBPg@1*^UlxxPTH+x*`xUAaYnaKJ&sAelRjS;Ch#j1pQjYA`^9$@E_Nn9 zn!Z=@`Sxq1|E{9{Ytu*C8-@1dl)A@Kh0tC1{8ju z!VfC^GYWr3;adM8g-ahK=tYHpg2Uv!qHvK#kepwWp7%2id2$|2_=gm(&woFr@OsdZ zBl^dE&>izRO!z-4{4#|2&H3p%1v#O=gz*l8FJXL_!4r%hF!*xDpEmdn zjK5^?X2#`G5b3kgtLBb*e7+)jwllr#ZwP(|<8ejbs`%jDYt9M%T}&_gA%cIJ@r0t^ zr1;2v(L#Ta>1z}{wS})UUa#;r#iv=}ME^~u?=U#tY2sY3!llhpLZ8BkkF=Xz2LCbh z=~sA%311DA7I?p%YMcO4gJH6KWp&sG5(Ulf5CVj#szZH9*!{{H~3^8U*x)> z&|koKjiH~*xU5@+{tCu>4gEEY?=|>!j2|#K-o@|SVS{%u?o-p{>S5gWyT4)F*6+I+ zxApse#_L&tl? z(TlAp+f#~OpN|YHT%TXa{Sw4SpD)bjbp+uZN}mda>-Bt-!u9%G)``SNufumLdcCgh zSGZm$A5^$r4vh+&3fJqXqYCd;_Mbk^M@XOT3YT%6@Y@x>M$zA)@E(QlQ21VjzgyvtD*QbP|B=G= zI^h+C_bK`U9uG)Qef=v~Nw0gXs4QPuQMszFymn1pTk>6X>)Jc(I@~+?kVs%xvb(UZ zds7EqhL}#s0_S%oTN~zgCwsc*ivEmOubo>S<)*c>l(Xz0+rFy6ycqM$#pF~ z!J37IOX^nFu3S}F*V^9DROjBsSBLj9+5~!kAK_6FH3{2_64A~ zL(rT4G773+JxJ9`CDE8FC>dA1w9uqvya3UpnU`IfRDLn0LFMI?9@eHz*}8!sUMPv{CbqTLt!r(-n-W91OJi%Yp;MAG`&qev38>?h z(Z=|lo?`oqcY7KY%iW7XIRjd=Gm7h;C}`KaTDlvX@!G;{gE85*F=e69R54L_qPJ02TFOYI zw0p;MUH8_GB%3DLT(^#1Bb@3ETQDo6XLVQ=@98BLVK_~#U1<`k1tRmWX>P$=ezVi4 zx$zr<=@rZ9$r%zNl8u$jYlKaz82HVkx=BmfH!M-i8=B^=>ylC<7FrCt=eo{hGN`<+ zrmp6i${TzvYsKYglrE`CaV?h^@EGX`$*wNo)+{T^mRI_yVvz1??#0VA>Qam4d8}@2 z`fVtVnc zEZR@A7}37O8!+{pk>t}Ul$B4{>%-*tvffW}e(|gwCy=F`}FD7CPd3Be!2F|7rMH`Ky41$$ydw^&SOC zvt%s~!HBN3nvUuFj7k0(_*wZMK&6DqPf%sS4SO$jv}JuC=qyIW%`Cr{n8T6$Gx4+X zx1ybg$uGdTMD9fO|B;CNSDs}4yC5S>ehuf};j~B}Y*}ef#bQJ~Ocet+;5}FVX$af$ z(|${s{AXBxE$0`{$|AdlpR=!qveE9Gk?!4j|ztI9*o@ zlYh@i%3l;Azdl6%r6Kb1t9#eKAr;TmGL#wErHKukAlCME>_8=HH={l>eQG z`S+y|`Im>t-w@INE}+E%+>kq_54QYC3 ze**c#i-^= ze@{xX4_Nt&BI-X8B7bp+{QpG#h1tLKOfT<5@}G^U|Bev(OG4x~McDrtmVYAq*G1UB zKScf&A@Y9~(f%r?o?Q8V64Cyi4w3)H5c%(pu>a6W%I}S^zbssI`@1Scer`nj+jf>O ze}(r_N8A36MU=mg7fxD!S&00Z5%LF5QvP`n?Y}-metC#|y6-Bi{g2D{MLtpaZ;5Ds zyF%nwhRDA+LVndr%HJCye=tP;)gkgf8PWcBo}~PHBii3fA@Y}n$RCW5|MW@9|9XV{ z__ew(cJp&kF1N0fi(*~I0< z>))z~^2;lmt2`Sw|I(7&%HJMQ{^669zb&HtRo8pLT0SjFtbDp}Dy;uioa6I9a{~L{ zjr1`4?_&A7{%J_I^1qABVe+Tb$ts-O59DLnvc84Yti~m0ykXT#{cb z0@!al&j+5s`c^wJhxiLvf1HM7xPrKk4q|-JPUH(VKSKYiw|R<}Fusx_{ny|p`DI=8 z-%x~fvGRvs4-oEI@1>5CUw|QG4zpirlc$jUB%f50{34&ea}y?i@DiWD*L$g>1iQ1XlXuSS$VQQ$LD`LvV#f_*8X{7{yWJp^4}C8KR(w> z*d>D4m;3_L^FLwsKR^QEBtJ##@ss=_e;P7V5n;v*cYx*hQlfH_Um$wUf=HyF3SM}b z58W>S`@&BAg*<;6vfz81-{O)_@C%?2VOIaAIe)_RKdb*a0K)8-X!a7~oJjVgDwX_V zzXjOmv$84Y6dn)`^E!xh+#Qnt^5W8xxN?PAVUH{-@nprt#f2WJpLAPg^_z2Z(iX|V z8yM0t(!#qQ8aUY{oS(p6c202YmdD(8ujZ!`3mOEUC*(WJMSINn8zYA-hKavq=(|k3+r)8gC4(O-I3tc{ z;4ON_}dMAmx26TjWWe`(^IO#D(K{|=M> zev|$I6Mwg%e~*ddd+-_Md9O+TcN2e~i9cuJJ5Bt0!~gvz9oKd<6ys zP5JLM@jZtA!zRAM&@VJ`tPL{sxyi&oXyR*4{3Ax*M@{@G6aS`(?=|sr4F8Xr^iP@i zhYkI16aToO|AdKS?<%AGpEPlN&nhE*i;35o_FgFP5J{S{nIA?H-;WdnhgFInfM|TA29s(nfQJa?=bQIH1TzY|391b z&zU&hC6}S^#U}n0LqE%;Ay1R-!k!^n)vA^|38@Y_nP!R6aR>b^2JU3 zdxrmyO?=42e`4bQYT~7a|MyM$T$8@i#A{6attLLh#4j}Q9~ybrnRL8kBf}m~8~U?M z`ZN>&sEPj{_TC0O%IeG;KhI2plYpoYFycohXlsayfB_QMmPr6Npj8`Fmv-%DCdt6W zgd`*r2x`p)t^ZMcU886zDh9gS4XOHC3zpcvEl}4t{n);0TbFkGwgIghrQ2#n%_ubQ z?{_|Co;jI`cH6z)>%Ff3aE0eNzw>>c``qU~_xX4tmiw1hdQF!9O_saaa^s9#TKPt; z^p;uv0n2@{<(`p~p56&-e1YvDEx!WGJ==0mvD~Ly?lUd-8J7DGR{l5(oR)u=Ro^dI z?pH1MZ!Gs~mOEI`%=q|vvg_sU2VBx>rC^<-j6hQq2*s?xj$#QKWn-F#&WN*+&5V6 zHjCbmTJ*ica(~$h{|}b`<(B{NE&o4Q?zb)X6f6GImjA~s|KpbbJC?h^3jeO<|DNR@ zv)l>Gy~RpztL5Kr`M+=Ze_**!SnfYs?s3aqW2OId%O9q+G=BOk%k8n;Udz48a&NHQ zU$yeP$MWy7+_{$fX3Oof+x}wKR?Mrt`g;Gu`HTFm;cz3qYK`#McQr-B{wn`^ z9J&Cpl5bu{|rc_P-j zqch|Ww>ETaZdciKHmz$7f%K|$ogMA|kULKTIERYkM_{T>nPO*0wB5hHxyjWC5@PXi z)QxS$|SC+b^~U%fEQ<6j#>hK+EyGO09vG~l{$)W5Eyt*hPN$^%vn zA%7zhk*wrj-_*H2gaemE*@pP)x*rHm1p-(Pio(4q9BLK~4V@@{L%3-pxK}ctaGjCT zbx4*5oak?;_p7s+3^y^q)FDuGL&@EdP^Yc{>Lb0;EgQqC;-dH(FY%-UiW|}rIUJN2pZfy`IYgA9k9lsPjVjVh0 zh}`0@4}*$fIKV<85{`1_TKsZ&cDI@^K1Rb(Ody(Cq11G= zK?YF-tu-1$Q!AuOCoX$Xs!K|7Nb^Xk2#^Zxtw_uj%jMbG+GP24N7r`(>g-y(wyA;g z7D`h?7lyFSK*6<;kRb@0XwtLj-$slITEr+N)ObMNWb;~!KG~8?!KHkexYY5Q!`)Ieb^6g|wHj;usp7d< zESZ!`^<&u>B+V~lK^6HjWs?>h1LlQM_WMTv^)=U_Q?QxUxSY%*NphugWl9s5+xXS6 zkc>r0N@osZ>zlgKfGM?{LsKh8ofIO6Fb>Z^^;jcMT0do7-l1O zQmXy+wb$3W>w7Wk>mD4X0zu)QQdU`DmA{C4oOrz?E}u~usO=MI=5Ulvmh8J)NxM7rdB2g6@l6A39|IfddaO-YBQbvq~s#%OEk zY)>^R$82iLZ7rC4=~=y2GE^tfyqo6l;+SM*{prEcsn>#UwPK$(MU~2zoLb0xi~P{b zAesa(AaQw-(HiwMLiHeO2#`dkCz4wz@ujk;FP%zaat$}{^s?mCE#*OlJFSxG zUdd`|YlXi(+)8?&2-12XySj8ptyeRM9!6YvM#eC~IvYAS`i)xY-xR^5!Bq-m2If|i zU}L4yQv^k~wE3!GRWOK|9CkrHZ$jU1fr{HGOdBB|+83Z^(pO~YTo_%{^+(D6PNkk> z1q0jiUn$+3*ZMJohGMU+9-Tt!_zi7c=t%4e)FEJO3saX>qGGa1K&s7TsIJ!LRxlXj zT9y*t@Nt=JWup+K>Gz6PCI(U@lnT;>1X6xVjgtXf1WvLOJT_j2iqRHf&tPpo&7_>Y zxxHK+ILYSO{5!%M+nU*wu58`$HIdT%(`)ghkT_(jP#9mLyk#pvN60i)YXC! z8Id4)rLB_h87oWUmo&Oqswg91{KVjinPG~NGL*}dG`&17mPzUirUxTww>PFAn0BK( zPQW?$aCL@se-@aGmsU749mpI@Q^TK>aGg=KaZ(;&?Af@`@U*L8AeodBBho@>QO5qK zRcYz1`$VXr0V62v(5+O!+&*MW7>AUgu{?U~Qh;>|%R6Q3b6G=Ofp}Xd1<7TwT`%^-<_+@_6x~!RsQ^%37rH|vMWEZ3 z;gXC{D*SD0(~F*r6NZl(tf>r9`EbQFGSvksPC_8}uy0sM4N}rtVIX%?r+cVrQgWJ> zjG*xJu*Q6m45ZC4#;qqB#z_?)hB!5qOG}COwW{&fgf;yJRZ^orrK9OXNlY#;!7342 zOCc?nh|;>Ev|mUYJp#2s%ECB_)rO?Nav3x@zGSc&xkI4KHNjkqg)v@QiIS!G-c{Tb zm|kQTuBep$o9d6+`L24Hx=zi`p~1@p`OCDKNE`K6aaX6*=N9EbpiPu>Tyt+;k8w>;uQ|6#2jVzvraG=Z54v_7&onwiQ4k z*pH8&SN`w*uL2Iooo_+P*P9_ceZB7Rso=mTmXnB~ohzuoexi(cE$|txd?j67VX^O6 zOmii4fquvSGkM3C@hZ_T*oT&eU#xMaGt~sf(@+xoDAK5B+SlMFKa;+}FV|_6>!-mZ z+Ffno4`}xq3m?>O6VIfB{jBoWt)B+RzEb&%TR8U9$=`Mh$3AcQ8?bQfPm#a<7LI)s z@;7YZ=G%#fEgbtyDT<*(4fvCmKbN-X>~?Z!Sz`7`O@ z+>88GTlgc|ZSpbUzozks75+Qg-EHCD*Y3E5|5UrTTlj0*Jz(J;k1FSW3(wd1u!Wzk z@xvB=k;X?Y+ydt z7JbCRf27^!+W;otS2P~C!v9{ow_A9g7J&m6e!9l@Tex52!xp|+mAweU8Lk6HK~8u#gP89G0t@j?rKR^#TI5GMQ& zHC}FoKc?|&3m@0`8VfJbDon(}FVVR9CXUJXN{z>@@QoVZZsA=TAF%N48sBf>PiuVG z!e7w%VGIAg#z!qY&!^gV%)p@n}+<0Tdz(s;RrZ`63Th2N|3H5UGl z8jo1`kjA?${CSPXEqp}d+b#S(jSpD(^gPY~7Ji||hb?@C#t&O~P~)Q(-l_313+ElC z{P}dd8Tx-oZwD-!q3xqw}sEwc-+EQ zX?(kdhcrH5;oTbFZ{hc9eAvRjs`0}X{vC~vTKJ0^AG7e+H15-UVd(QmjTc(@S$fh? zV&Rn|L-(jXyJdWmzeMBJ7QRB`Yb^Y3jYlker^bz(F!?^E z@wgR!SmWC*{MQ;Eu<$oEzTd*Vr>S}kTX=!S4_o-hG(KwKD>Oc4;h)jCPxmuZuMUkD zTKE?=Zthq%;UCs`xfT9f8n3qS?`wRGg}#{)EQIEc}0I+^74!q30_aFSPJ?HC|%jr<|er-@;2Y zUTxu@(D)h)uhDqK!kaX1?q)XSyjkOMEBscCZ@2JAG(KSAU)T743m?|_u!a9ze4EBcE&NH1k6HMSH15;#)zJC(8ZWf)+}W!9B^K`2 zc)5j_X}sFPuhjS&3%^n05evUX`~r9yDj`ijmIr~v&Oeu_=6fBu<*w7%EPSQL zeR|w5^bcvg(86!kxEWVX_=h!a?v6J2QyQ7s>XeK95Zx#PveCae)`#} zz9kl3qVaMIze3~H7XB%Xud(pYYdm7%EgJ8(@H;ggxA5&6-)`Z1G(KSA|3l;ZE&PWX zAGYu}HGbH_r<|kt-@;2YK4#&|HSW{nu%Z7NjTc&YyT(f_Jg)I_3-8x>wS|9O<7+JZ zpvEH>eput(7XCYp$1VJQjc>Q`GtO1?8L;q=Yka?j|CPpvE&Nj&KWyRk8XvXrW{vA& z37k()uKCImsW0R5+q(J-z5IM?XB|&CMFlq!$WO$o57qIs1mF1OTz-EJ`_AgHPp1=M z-Jhmw!v+w3PE@6+12R=%e}t0Rssz;MN0}lw{iy7cpEA_xW%-^RKiYAuR!uG{Y5VqB*AO& zHd*{Dk|EWL9e)*I8)L`?Wh#77J>(t()>E6SlHY8*7#Q=nX%GV@e_HP}P7~j_FT_ix z{O{BGk7_>UG>N8q6JHOv;wQkE|04Xke=(i!JvzSeV_5#o^E~}-v%)l;;A1j$>OT|D zJX>99r9uhuHM>CC)5J4jAJ*~pGN^&YQ#!s~E>nLK@FBcpqF;B73SsC(`q9*4;v4*% z!0fykb42Hldz9pl51I<>_?KR`V2R)LTQK2WA?D88g_kW{q=J0(J8%141q{g21W*@Q zu!8?r_exRiGi{Km{bV)ue@%F1+9UP%(qAuNxgy*x-?d@ig>RGZc289SGVN_z3@`WI zBU4V6oqySWxa%-&=aYMkNh_`X`nnlRCK(@6AIVORNRy2pna7DbwIwq1aG?hYd^gnY za@nf+q4>=Rk&)V(pTBISpu1WUrJH~M*|Fi$4~cKu(`0D7OW|Q-4EusEsNr9l&@+t< zMyTNh*B=ASBCjXj9v2=G7r zUw{&wyyZK4j$iA@JH=71`+QEIq9|8va2!!fcOKk#O%Y2*yhWwQudUp3@|HvLj`1R~ z`44d?R&!Tgtfs_??|9oQ29ew#65e*;kK<(+mhao<5q+rheX&KNuUOwlj{Pa6Ol#oe zcv;*NsEFYCfYZO^!@`%GP~k^EVEBP0P;>9=)aeH^rT_kTS%m51>BrsZ?y}E=8}}|% zu&nsI4{diJo_$sLJ2EZC5p~-xf2=0viPiKv{T)ZWMY3Kt4a{BaIvtr7)1h0@QuN8Z zibVzUGxxL8&y?YSx9(+kI&MFAc(zN4Be*>QZ6x~g76vLxQ4ib?Rj~~1RjEFkSitn4 zE?-KOnS0_P1kKm2>8u0(|LneFjxVOqUBS+D^|W*S4|ula?40r_=py~f@#IfFUHg(b zj@3$^)R@M!A{z7a=?V{i6n7BA&z5TnP5&SFl0t?|+~52~FqirYZF=~a#I;e><#mh1 zwXx2HZX;fTrZNk(!X2cdhy7G*W=w0sq(Wq z_~U*~k89_#U!p?nLjZ=Se#)N-KVODVm51%b-{&QsD!*yhU+8q$-u#(#uGcu*jXxvL zaetl6*Q9I0A4eFEYbUg6<88oMPVxqSCLP?vEOFyD=`c(tol4=U^3!d8nf8m*&+DR_ z39Iml^jElE)NlvJyVun&#tZj`X4K_a4?`Ohmd}-0!v9;A@YiR-X>Z7sKE9ifrgO^v zj5MCjl1_gX{DLevdr+o)4gYc9JmraLPZJjR-=^V4r#0abMgIKyX~Ju#xK6)tpZ#0| z;<-k@n{*8S-l%cz*JoY^54yr@Q@TWqykdAa4yi7G%-1~?j%(cHYwCZG#!bEkzt0uk z^Z`QKUE$sMBO15!-LG*w-*3CpVSP=$2VCK`$yp-98fQ7(_>VMh=R2lxyIoGW!qXOz z{2^WbSWa!)ly2M;FMkF%5*cH!{INXl@VJLD4L9L&AE*4WoJHzY{*SRdiTl;7{NJ=c z!;`no&(MkZg$Bga@GZ-!P1n-b$U&CVjhnV(I>oMZ*cSYm_A=%0OH>HMCkEGWGQ26D z@i+9hapwCm6B$qAZ}K&6Q+_)g6V-$_{ntEAc;hzd+2IY{OubC_5}g6(wjVc{;c4hY zd8U`_r0*3v3~_gVT;swG%?Y)*a5q24UAViw1n0r6;Y~u#p{dq&;?QrMx_zNe9vmge zQ+#!6JHlc4rtiP3Q99}!fS{1mN&i3ukY-fKmY2w zPlY?yg&Y66rL8{Hf=doq2x+M86xrwUoVPE(_EXo@;o8JZg_1QxCd%^bwjVQneLNlc zw6&)fQQjTb<_>SyAfuU?IW>lP2@{j&IXm0Ryu9YK*VSHIS6f}PvT{XTM^|fI8;%<% zgG+UqHxZyj?dnDXqhW(&9k~5P%Nl#@{PtmJRdf}95ohy(jkjqmUHh2zx z{)Z*zrbH@iYn!&`+j(aWo?Zmn(aZVYQvSDu|1B1(E z6SZ2{E43@-y!YdbWG+?E!D_vBdbcXH=XCyl9p60cy1s{SHpZ}K|6{d|$oxqXJOAGS z%as4CI)77soy>&1UWZ4f{NL2|@758Sety$#G9BNHXAH}qUDnmWn5JD%6aT|(dW#X+l!@t^-%oV@#%-Q<*pQBI2RG-=wws9h zY1+@gHzK}WC;COS{BYBsvuYFH@c$EtZ|BYU?V6wm^poYLzHP_9^s>d}%0{RD|1g{0 z!lmVxEs=pf`g+OOWvLPdPzE6aVkRy;ciWQyrrEc8f8Q(ZTg6%ITgK+}|ED3g(cbqL zpvT}}AdSC7Ib3PDY`!^x1kTXymG)cMEn`BI1@B#v0N-ruxi=>fykETsA6k(BuisY; z`{vQ=SWVCUIf>}*3#6@6yeisy-tZ0ed}n&1XG`8t&r3N&Jy(h$*iSzZ*?rYe#4E~} zp3RGutCg)al4!tVNO6;|40&y3Y%v&oKlXAUxcWJ(|ryfToWofWpzp{7zX z6!GA1dj1gogCAd!Kp7K3d^?lwo{yuhpIni0e-iG?b={XB?BzLtR_7#o^7DrxU!5xRi7YDU8~OKB+In8gO+X-?3~s5C=|qms>?7TT6Z=H4 zwJLE$+n9qdUz4Qs+-p>wefw^&Vc6hJ16MS?yduH6&C3lWik!S-G1}?R2qa{^on2K#Ar?O~K7OX})D#wYcf2fEzfiWJA9Qlt$WPw#KlZ%)HxAYYJaTP- z{NdyXS@t7%H*|&`Qx=^ONOV<+zK!+D_8opQka$&xIpQrCJnEe__=@5&K=`$>8qkC*%25iO93l z6Y)+4ynlQ?je*c$`gr2CqjL;&u1J<_Y6HWYsb>C_|rXYpK%=gq)x z${UIwMZTp|67fIaIf!)M#q&u#-^cT5JP(0Kdc|9jn{yJwvqf!u?vy^q2|N)wdOn`w ziTKM%?^%`~&z+i&TRn;3EU~xuSE?-WL&&R248`wXRS{WqNk#1D1D^=qx#bh__mOrU z(w>oF+TzG|rHrFnh3J5|_7eg4q0Vlm`LS(%QB8+{%$y}U9J05A0}sZ4-Z?yG`adL^jZ zFL*<4;=mc8AN(RU2wPQ|Am7D5nF`xbAFFW^JwK83UW+iNEB{D+Zi0QN=ib~z-e)Qk zxaVN6_-tjePkI`49(U#@{HKY%T?o7DhRVe5&sEB{8^AMiH~KpJYb)sVcY#D6Vy-JMsK6o_FK<5}tFwk3U9P z&Z|oFJTx8H^u&WTpWm}D4}6Y#Rib~9K7LVC*@z3AW2k!ePg{dD&YwKau{~gZ=+M(DNtC=f#7;RA*NW4OsjdmLOV0>@aGr5WA zvnuZR?c&9gw_r_mx#;u03ck1x{6AB?Nd9Lz2fkOg|Ku%|d$`Uz`mc}8p)7nIPru{K zN8CQOCYUa_-u8M1-|;$wlv}&JkQMIsfeg-6|7`7})-luTO+HK2uOO{{{eK+aOF8`@ z>i7WaXwz)`d#b)t#-h&bm)^bCB&1FeyHM8MK_4)6$2SExJOP=(bVvupmv!bi$S}c; zRmuKFch5$TbO&#)N)!t%BQcKl-0YFz%^2(M13gU#RwjJb8(x7P#w=+vAXvtWQ7ZGSC~Mzfk>F>6)oMEbhH8 zGA?MD78h+4)p}8;xF__!nep4FzgQO&8@>;jM%uvLcfz$-#wP+puX{xw^B}$ap}fAM z7dZ*+g&ATwBhP~;exvjUKlaYh4IR5roE4C~L^tF55GE<7JmRep=m2(J;+HZ`foPGk zsK9oo*IA7x#gKFr5hXlZLV||3>r7{HhONQ^iyr+_$TT%q@_JZ`wmwo z@*HO{@313zh;l?>#do{03H19Z=99awslb?7=8IM-J_JpmKb3Bq1)X3^tOjsRfvi0;Maf9UQF<3-H1w_j z$`O=&%Q>dnqZLCrBU@(5Ik!0IIU(o6q3L~*4v&({&?QFDhL@pjjzF)Q3B6<+bl0EV z5vzF#?gG$LV%YaJ>&{rszqrD@b9=1j`*4%z-^QF0-_qehf$^l}5{ZEXLyrLL*?oOPrAN-PKZBzZa}ie8TVVHM^>p3>kS z@`l{ugZ1}JaMxqbl@`VWS>ej#(5$g<27%RM9_q%ch400@1OHzQZ3qJeqBfF`Fw=8k zQ}7%sIbFzkxjTGt%N=R?M4)55;hkHWcWwalv;4bZ1Wohz7Kpu(!O8^AZ|#i;=v1G( zJHanF|G*RJmq8|%(I4s8o`!h8c1~+9K2_8*?i-MwO!FS+)Y4;k z--56=Ir;f_;}7?IEMB7DX&?h4At{Tcmo}WUQS%#@7Bh%?|@@2W1w<+^?f&C7CM|GL$XUhCtl)3j5QOkHN zGt;`qnJ&v5ca{03DPrkePG0FApIDMso}(ASX5m4fQ#vl^8yq{*=sSI7VpWcKahc;g zHaADq*5_k>Yw>IF{kziI(1-n>5!lu2aOB_D!5hNKyW8er@{QsdPpQo_)yTi-3*s&G zAC9B4Uzq)-!FSX1uJehvm~TDo56!%+Iqw4VYCRX^e#=6n^H5n5 zy(0ORo4ew=FARJi?iapJaG${1!aY?=cHaZpg*KG3TVjyiF3gtQa;$^QKCb7ENNO9$ z_Ga*H2L;1$E&SuINNBNi+%ZGgx z1#y-MdPO%d?uGSvMa7r!P8{~micycKz!@3k&I?ow!~LLf!yY<-GCpA3u!~0Ej>$4F zNBOEyPUmhRz=^t_ z#JytQ<>!bQ?|Pk5++VQa_T0>Rb?*f!o!5aaoAqPc;4f{=tUNyz?g++OGscl7*!h<+ z&JkCfT@&o&SEBqYQI8dS-e0$T&j&L(=5YS)$of{J?C(HMz^=EUAA}3aJ=t7;3#>varcT+JdM^v2Y6BX1S50y|aD3rQ>5c*gEcB>=a zv!DwU4t{VRwikk?SZ_`|oG;2^uqn_j`Rfc(o4`KwG3YGsp-j|Y3QrMdEb|sNAHdkh zut&UwQeW{2?1y)jH2cQKYrXKpd<^cz&GA2u*WP}buBQ+D2p-F8YAW|NZ7PQhZH}KD zuZ?DDBj@8O8aklimq0_74S(tFZ)gCWDTHwUElao~2#3C!ksl7a^McLoR-}P|(jIUK z`kI+{8k>g)e8zFu;4GKXJB#PVYCea220&Zdu7*w%iSZt>CpZ;!d1rj_$oZmgR|D3E zber@~6MF|vqrK&K&U=23nCvkVnCo_pDOI z7c~hIw&b^kikLeQ4SeHes$jd!cVFozs^5b zr4d9MzK1;fUrMb{c+X?sEFAnM=8w!rwlmV~$6PWm7qZGZtGOO!%X7rmH@qc-$EN$X zRy#|!&dU{jHx-M%x-W_`U#@s-*(_1M3$p7O%s&TEj_*U>JqFvs8{P-z6l|V1Hh?_+ z=zIB1^U7ysks%?J6MJ+r%9l!%ljU@&bUNw#<^^oPF&tC=`HEcyvN7D9r z+eSU@GV~k04i*IMOn5`kE-)`;h(QOr(16wiLsRuNNelF)YW_`E*khhOzGxPc& z!jgW$+4}jKe!})Fabt@%YlV7^kYx!z6iByO?nv1$X=4fA4V%8u>HMk^Yg$64Y35l$ zkFq%hFHhC2{u{liF#+plTios|QCGJc>t2W4?(-@WM_umdmO$dCvi{np>UxjfIf-9Y zRrYvSPU5$E62EIE@vE7{?}kbIJ~xTq-%a9IKZ)PkN&Ie_#1D3mth9zMmemisPF6pR z!&&{HcW3p(oFS{D6PU5$F62Grb;x{;n-;Tq2)2)wRtLC0^4(3&JuylJm=E^?q zRZ;61QOsr1_vlz_AN`ek7*@@jQ7*G~iLoP!_ZanPv%Up)dRpoGeSFB5W20Jg_6!y| z&aqw4H-a38Fb1=JMWWys_L0bST=)JR&L!v&0>!#!$zbL)aCfKM;ya@E!S&Vt}aQZ^nE~# z&u~XDZ!_V7yDRrFY&LoY65|%V($i$yP*)iRodk4~0P2eT3j}N;#NBpc+LXUhB!(D= zx)RHI0O7yFy)LJw=Jwwx3JhUdyL)AP+~U{|eRwsCP?T&Oc{i zo~71js4v;JC5FRa`h58bMb{$;PrclkaCSR=?Zvj26`*Z2&zF|TH7upK6crR~An%hF zoMX}sBlmuw3`JsA^FhhmTE_uT!FIOKWuMu00BNP_IZN6}Sbp+fHr|U_ef6W#;NVk# z9t~vsfG5~i{feKrv0Wa-eEbaXb{G25JCa{i+mJS)ByHGcZrT(y_qzH$)dUZfW4WiGw-R>>6fW(=-k8*!K$Ma8 z?s`Y=#vX%tO1AdH=F<-w59t%Yz95tJd>sybIUTw?7hBwR>(Qs%+FUQ zI#Fj6$ELm6ujNiFhVYCp`w-%j##}exGtDoQ?q}~;B0WaH17@7X+Iwr76Jg7_ z3x8ZI3xL<%`#$2pS=I>bkKAvo*Cos1Sm)TS_k4Ntpbr%LB+Y`rNjv&SuE8F>n^$m; z=7xC~*NEdUowq01A3>Su-aqB}Lg4;h?ClKVuO53onVyjw?r?^0{G|Wmw9m2JfkZ#( z=|C@ntlLZ8L44C+)5;Y3vFdM>vBj_fh9o|={`aBv`_Ak?i*uI(i8*z7h z+GwTBC>KLTE1<)Guh=KJXN`MOBXh9+gS3hNx%=q3Z_SjCbQ)hy+l_b6+vj7w{d=O1 zbtwT)&{iYIDqR-V12&dY-$K;~O}%37b!GPD=hsz0UMyi*N5Eqt*k2g-?el4yTD}MQ z!9G*;GX3$F#`nc&c{8#wDTP~Ur6~na=Uoq?Nfy8mv(sa zf{nS`;LmMC(yAy^`(cmKe`Wh|d=Q_yfJ@0Tm<$Ub5N8cj<7~b(A9`hSLQ}IrG=QVQu^5?K^bB*;q*t3(i zO)vTgG0ZLkUZrfH`v zMjxT>briH=di~hX9Kk-ypP+uGOu*Cn;*ldNkB~nl_f6a5JZr%)$_E-23?$3Rb#67^ zeoxw=)mks+go%F4xe~}rl$0*YD+~;=Yyx)EWmr4GxK!)h71+Z&mIC0%*C9`GaNfrE zPq){2g>Ng{&VgIWjMxk*vt0YXtDLc=-1GMeWB}_nIu*Q)y$Ir94Eh@alPUVgxX=?Kx%0fJw+?kNZf~$u9l6>L3|Izp&o4g%%$y*=g zE##JwW8{V8_=vt5m-?+sh81U*VVP)E{BEkOwyb6Uq@1ne@ulxf;Cek`vi26O!O>9TBI4%`p|I-^SNx}6w74VW;D}Sg}9m8 z=HF!7r0kW{XNI9OlJ=uQEPVjuaBWU+jSuza`*BZi4dpoVdmHuJ>xExQW?FDRDeFbO z4C`v8h8DDMf*$uL*8%@Ra@m=h(gXi|?Cj^rFG0FS#s+Y|Blpxr*w&v}K7{Au$V)2{@e|{FIi{>a9XO^$tTE*Y^e^rs zybJzcX;Av}nU0v@+gvom)K|vC9$B_M!&096oHI)!!0^4^+5yC+OgClW-XGfPBETQS z7(u@>yi*Pxha3XmLKaQb5g4BS4F4YZ*raEk%=dAOBPFhI|ABC4ESOV1XZ0NX)D=vb z<}$Rsatvl2f?3W<_s((g8}zAsl$YW0m!=a{7N)}4veuqkxaUCvWr%1yh6(4u-ecxM z)u`9_xU=W&aj}Peo?$_=lzxh^q=nH>O&W|(S#H}|IVZ>qL7#yAX`Z)msSkT*i_Vy~ z;fK@(Dgzs0c+&p3%qKQfp+6Y<_@TS-{H?6}l+0(|de2SK;K*s&Y1MmnDqLl8N`7J; z348z>t#vLiBfZZ_rQsm2-=oblg*)O3SB!AKK{zFkXAUj~Z5bzuv!F*A{~wgD;GX-L z`UkkT9kl0I)Uj+K_AZ(0raSC@NxGv?NV?;BJ!nzp@2#P& z*7x|jiUF};sh@o9I?vKsihVT*ld-N@WU(6OQ|C!OO8t61Lj8RG&^xg|djxxX?fM$J z1+h;nvUBxN9Q`XY7w17R=1106CVYHC{y`s-bTvG=%A;t*K2N^9ih42l68)r>>5vC~ z*n<<szMvoJYp1#F3Y-~*yr5m3?cxb3`%xZj zWt>Bu-vql1ctBu$RrFB$5On*!B|NL}FHUl9mz>vaj&z%I3f}!9Q6lT&!x^80a<9&^ z?aqdN)O}gp*%0Kj-Pzz2b3Lz!b70Kd)Y%K}=VTd7Jmv4DzZ{=!f69TJm9)DY9N;{P zW#&8TUEu2u4Ees0o}Mq30lPH=c1H&6o(xz#1NKM;tUm*GUj}Sj25frkiX{$+1`fM#M08bE->V|j$@xIePC(sf%G`_Gmthg z&p>+G?z1A**gNZc6Jd@E*grkT@O>&d?xm%R`f>k1_Cwxn*D(+F<`SG4Vf{;RX2czj zemqm6{PXX&{e9Jyf3Y(l4)&~m*cp&F@;>?*5PXMrsT|i%&+WU2{JWy^FLw5W`!_%A z?8n`hyYTGCDx6oTgFa%Pb+`*UHgqp}*5M+|(PdfvxqUv2y=a3{bv`6d>LJu;c)x(V zZG6X}tC{m5kO7`IC(4OxeSTvP{CP$oE&d9Nx2x0Lp0SDP@rF(QD-v^Y=jFv>AOkb~LI_6A6^YDjtsOBau|0&}~&VTH4eEMLsnukB% zSqO)}Y~lPE3pj>|ZB=s3LdN}>UPsFdBx2*^`zX7K$EdfL<4hBH2O6I&m+{MFd+diE zUx0Ku_C{fMG~?X}Z10>Ga!iwZ@S)dXzYf;?iw5)2U${5qi1$qCAHX=xu-JbC6Ry|> z8(nk0+|w-W5T(SpU-szjViD74Jj`n(jy1`}`%ZE%f{^Rhn1A3p3(RwHK6@B-DM0=zNh+| zI>&&sFyMc#1)Qbm`p5C5e(ag=y)A$vQ)1iu@PEuRr}+}}!D8T_?V(6jmmgD?U6=*|!?|G?Xj{l*koc5m4 zDdNR(&&*?^p7;*v^%dm9KOjB#e1Wzj$`|(MO6cCCn|sc41p2&gh>wx_@v^vuUTXY@dGX6;0q2Q;2|X6&-3wM?A-Hev9YuK0vy!pCa~f9qeK6SyOv(CW_}l6RU42zZE=$ zalQ0?&pBJ^Kj0~tTI9@bJ_MN%T^%W(#d8VXg62x>`wLYq-a6u)ljMv=eP=UqcDbdzrIoEHC-Mch5@9Peh^`ZSV76HH7C7 zWuSATlYp))<)PDv_lSD8WeWMG81fj`B$lzyRiUji$+95!wmXnz#aNrF|AOlC;HlD{ z&tYHx4Gv^=y6hue=2b_^_rTr-y>}|-htQ9k8$b&Odq>&Njm_lt+qe(Zp}dv-?EuQd zJyz~K=k}!X>_UD~tfH#eq`S(^bzTC=gJg4dQ)ZN{YX8y z3(GFspG1!>S?J-)bMEb_JiCxz6#3eDW~2wwo{S#O)!>!u6tDPJRHb<9z7oM}oY)(IH+eOK>W}KZaLn7N^XN@g2d@6o`^U(LJ`jXH6bMzf{UsZPV z;A>7IfIIJ^uzlj5^yJ!W)q|wJ9#iJx{YdVeJmr&oBR$?aE?g$ zanBs<5S$Ht7xx7yok*ACHTX+RtqBKaQKqZ+k%H8F4DU?Cy=N;pLzH!6fAOX&(YLu? z=|15n-FFfeLM~BfRO8nO$}!?WU62mvKI><(T~V%Iq5QZPE(RLVO`S7Bk`_*OjP#InVMU0%isK7{(?{3OE$cYr=q#a{dDkbkNuOSV1It>3BI zK6oD5IUnZ&>%o(-u|_by$#m`&xT7*&BTn^Q6WZhM`_K6*4h| zvpgQ0!!`cK?;_}~5zEi%RWv5;W4w&Z&xjY=>Ev0V5|lYvg3q6621dU58} z*r(3U7GC!mhTr9~1#{0~ru2{O$u3h&oy>m41!O0-M zw@81fr^|BjUb;->3q72we=*MZa-RtH86@wd^ORt03+DCJO%rboKtAgn90_VGFQsi(N-8s&eVdOGp^JeT-hNc3Re z;xXJca%xu~aW(F__z#53-yBHP0q4CbTzk%g{a_jF>a-&z<6|Cr5z;g9*28@X+&3Ls zKGfr!def;`)0v99iKbV@YL3m^y5n~<@7;lW{`Q_44kXs&`D5qSr<xJ08besM!fTy=rsO_4Ayb`!}NB|IBmS)0a3f`g}^(e_Le6wH0~d zEZn71)N#RCft!b?-1hW7%oEnN_;fz(zT{s6` zK-*{O*F5Je!rAvlkzaX-nvZ&i$g}RfC3zo1o@3*C^X9>}hG)~e*Hq+Y8qj1iz+9&8)mN1M%~Tkda))l}o1JZf|q_Hp+e!PJxT=HZMn?qT5kmb}Py zygiuHnc!=C3$7IcNOJm`s%uhyTpPe-2X-zvOK;8fkXs#H}^I2-n9_sc9a)pUuh8Q*T(-L zPx(@uZECK>c-e`tu#a^3!2frhp}vV2xhb-L)LT+obgt;YoCD*X8c&R_;^qgGp}_4X zooN$tKW%!?g8z3t&N0|QY6rkGl+m;G+?adWY5!x{qEnztpq&S>-p;dZBMgu8#(Y13 zcROE(wXp%{Q*vyBzQ^?9IBR9xCfyL`IdSBH@vI<@^dr#m>~!2VvSrX0ARkB>9PSgE){(gB+73Tdn51?#f-(z#!;UlFOn@+{vGu9R5a_@ENN81NveNyRH z!fnP``UfrlUYEb$i~R~rAA8$E;JqmJQhZqaVpsf3`McBa2j7~qaNi~Cmj_vbZ)(md z!u<4gxczvy>+3rMYk9N8hNGZg9{T+}+&Sj|d1QZDxEa*_d`lubD~B-7m-QnpxBmgl zElQM}5d!<}!AD$6HZlkNIYG~=d{fDnV*kXsrd!6Ov`-hE0h*!R4Gn(ax_1p_mUE7PgSAEd&i*u@)96RMQT@IP@9r=~xPQyB zFt`7o{C-Bknb3~~b*a0UC;BGqkmpSM^fFxsAIb>X+s8Ug#a%L7lQsF+b=afRU>#o9 z?-S~PIqH8!9WvSdr#j&(ne zzJrJHU>7NM-v_)Acl#0lusea}o%>tV9l!?;c}~P}ew=sbQwHPS$5P(cUSiz~7=xYl zyHjvK7VfCw+Jw6AWp*j^%h?v#rtui?2Qj{F#NV$yvyS;O?hQk3@4??D$W8LZL9{35+J5xSVPNBs z(LvZV*;ZqWzDAJd14eX+vIZucc2X%!v1kb z$!;+n_uE{f?&&knwssq%1cRXjJPgM1cc%5+|d zG-o=b>l?qvcmmo)JlGTeF4jZd#d#^*11RskZp+9JXZMz0R?Yx)R-S$XCM?YHdl)S>jg)hImJ1a~- z3jE8yqt+Kx-;rTa7urTtzvtS4@U^ikKkTz_647;k6Is8HV>_T zfNpH3Olx=UIiS=jF8I^$*yguB-19>p=2~cL-a#kN%#n7KDSW2+VJ?>DhdErMkexP%KbeE^Q-8vV~dslnJKBHr?Z793_XrEov&HeVu zCPY7sS#Ny`eLDobhddOWAyhw@uG+<|PZ+t+c=$`3ixkh?qU>I1OUeRg!rAPUe&!r- zhGabssPnN-K-u_3KWq8}>!1Y6}pYiU30M^x5&u@T+LD&LW#sioK zTm+gu0NveSBj9PuJlf+$@RU9$bc*U{SR*mAZwt@FkU~=fV(1s{62>M<^{`T#>@v^ z&Pk|#tkOu?l+xE8d1Z#3`xg6 zO5V_?C*&QHbxWPwx9jKTVbanAT6$fy6pDTYnf%;kDiNN+0q~TPM=5@$&5QIn2;Pff z9Nz+(+zy(s?gwz+H+hn{xf99{jC6OG%lW02&%ZSCIc2BXjXIMTeX!SFzaYND7t00T zaeXOuriyLrZpWF@wwsQzF6OSS32BNyKh2prpe@SEGxnW0V~@RIA6ib>7~jHty_Phk zOmNd%@)*(}eM!p)px2OQq@CIGkFVvj{}v>l2fWH{o@iS;UCGnHIfrJt(b+0plcu{2 z3|omhxzCRW(UzIw8N6qb^q42p>_s0k^0X)?=Pj?Ai%gWOf2HIqWoo7COsdU;5y(6> zZi>DwjN_;~YPdJW;D>;lJQ-d%xGVgmI@j;!MfyRe%5m9^yXg{>GT=|EOYbK>VqGAg zO_`4}PKLV7{iLfd)LFCD1%8?85<{O%-YxKHHO`uGKFtr`2qOO&Kj%5sPn}!UnxZqT z-7)R{k#^sq-7jc&T)X!w8=DjK$aJ|+?eLZdLNh@Yf_l=rjCDHJ;m`#8Gl)h zcq@ed!?i=|rOQqayaj!t))`anr^`N}Z^=FYU4i@<04*dx;~P_U|8gGJ_Uy-%9Xo4& zPfeHn;?8dre9pe=4CyrXt2B~$o}z*9Rb}p@kkh7*_CQZ$85uW-ca8%EvS0e-Jk!`d zBapq&Y4rDJ_}u~Sk2QNc)Et0&7nvUG>h^cbM@b*#&pa8{EnBHO+xH%yIjqLYcW~~K zXLGrKhHJZw&%c-$TRMh$NRhYTSYDRC?tD)5k9t37mXB{3K!>7SH)ndN=YLGfI;GPc zkoD(2Go?3UTrOk(R_ABb7*ATPhrYtGct7efTgOM4()723$UEB|kiCC9dAXpsU@TX< zfg01*8Jn~_mtR;hMBWgv8}rFO>eJ3!N*Cn2cuVPn5`Rba6N$g0WVpmny6}@4hkl(* z2k*&rh?{hXn{qh>&`hEHnHhc04DA$#BJYPYegl z6;2#h=|bnb?+&b$d(p;dhXU9=llwkLvDZ^PXwEuh-Z$WjT_tVr5zGboy`8^98WDVN zXB7M}aGFTeAFbWYJ7g)d$a@?|gGVpvn+qN=HW}JoOq=b?8(SK=a%Cb8`$*Gj+!K%I zT@W^zh^wC-@Rxzj9G&B$be2q zHm2ugXjGMjMh~L@mcTEvW$MsZux3NrW?TC;<>Hx0zN>Tm_P!j~_r6drev8eNm;IRa zz+YM)Esm$g&x5Wrp(qP<>-0GT9}w2N{ol8drf?!9P3kVdkunPWC`ds z3v^q8G~eO4i8Lr5G0yDeJ@cb@(hqw~WI5bxV8LIkNchpVtPkzo++Rw2pLD~Xa13J= z@0lN9y1e)OtRi`*aSUq>+|w&C4|j@Hc(&09=5I`s^9`l}en7iZ<|!Uj?`p3G`UugJ(|mvu#HnNQJAy-M#KH!jxwe`$fomkzeH` zcA#wb*an@p3}g8Q+9MV3Y1%kqu@8I)yH}qd<#hW6Fh?eh@HZ)6=4Yv2=u0X7?M3~} zm`(n5kFTlx(cf-67jqWwBUNKK`I>UrwgnVReVY2H8gpr@+KO=xJi|TcXs4Ovky2fL z$&1ioYxlvf`97}qdQW*o|M6L%E;y$o|ug<(EomdZb4xF>Mt32Di2*k_PEy7d!AgG$iuUwlJ{DB2CK2oGH+#N0(a=Vh4R+EfjXei z51s-3$WQd#e+=)x#or}IMBnec`Gfzx_w)Oo%3ZmC9D6dFbGPm&@?bw#?matxjPJY_ zga3=1{9_L}{GO4hoeCMW>SI$M_Br`KoL4FOO21gOzYg(Up7PKR?0tQ!7vXOJPdaGx z1MlAUlVa|p{i@=l0A%za%36(b`VeL{%J@3UvAP%c(x7bfaECd+L$i7pz7d8#c$HJP zzj=JT>?+9m9%uG3?DeU=y0>oswC;=czXRFz81z=^;HH1M#~1YB#KtUsnfi0DE~5i^ z%sF+h%TCF%u|Bdc1F9};1NLcmo@_tXD-ZSiKID!M^&{c&=qZ(bp<_12BCei67eUr1giMz>pz%nYXP^Xr%E66x~O zjAfJgG2OJj$-0l~x#g&uTe|bCJ4d|5J__4%MmbsejG|YzxeN0mElq#sos6`H5l1`S z_Zx2x?2=xN!F^t=kMmnb3=21GozLz$(dJ;k`^0k=C9nbeUdMhl^o4i4x#0ht!35HI zAN_-40p?sxbK3yUFyJnftp%rwKDO}(z}e28r&D%>0Q6qo$#3>}7K*dCo&))C&Y7b8 zv(SOgM!Z{awxjCIKsmola>RSKOuOO~@mAqf(N~E+!LXk}*s~C}0$~r$HeuCXRE#&t zusEwxp>!0EO=k|W9^7w>{T1@;{rC2=Y-hqx+g;ISr-2@<5B}1}VAO-SThB<>3&_Xm z=QB>U(T1tcXK-Hq8_?}l(9Hw;qF34vm5mYUq75eAX;G4+=DgsEy>-xuR-t@LbMM-b zm-nwb_??-OU1vT#jDC`-yp`Wl<*mfG-;Tnrm2GU=^{fha1oG%8?jm&8iF?r9>q3~z zgTK_hPr*U;ok-K44)XU0t|LDPK8ks0uU7o< zN(JX{dcA>VgPiR`I?V4oNQ+OkpKKz3RDNe7e>{OWY#T6C+CJ5T-%a%iwvPwjfN;~D zv^|P2hA-I;Ec2r}J*1h=n+H|iK0ofefxPwPibb?<@Ow8$ow0Aa_pXlOoXU}@Vh`3E z@ST|)*gkT>lfKg5AP<(+y>FHBgtGC&&cu*Uc@BnSY6QIcnC8{XC9nQs#|du^cy-Rh z)meBI=d;Q}&!_Y2)GYn*UGP-pKifPzD`~@d67ldYCCDWY>eD3gAQGJFev zm*E^1+!*)f90R>-JEv#vN3*epANrxIY{jvfTad>tU0#lHN6^1GF7@hiNeq3-=-+o` zsmsgwKKZWysnSlDE2;WyMBD-FDaP5Tryui*4QD%d?KpwE#lYhQBlt$m5$`#&Zb78Q zIoIedV3W^JQN6c6T|x{j}I!2IfBkJGsdp`K0F$ zou2s*pBP_!1oeNPG!;#fa98s1r&$g0|D~-mBBfRK^d`HfA0<;#Fgu(t|Re<1%NsIEGNKaDMI` zV!srJm&<1ouRK@bfzPMo|67Our4@dq4!=T$r!4~WQtbcz6u!rW{c+e67>C}Q7r-7m z+}$PfEL3a73|no59cEbH%0xcGS0g-iP^4Gu1C}?9c9Fbe=nFX8o`?COPs$eabn8OO zHjFh^ZKsLcfOTKFSETFd$PGg7KQ%g-c`^*=q`pM-euj~DkJVSneS4&tTNjJGQ9T5m zUhZW!@nIh;6TFAiH5YbDawHv{$EV7tdp^Z=1#|xKb=Ms{TcKO?{3GU!wLJIDx{S)R z+iL!QfM+KMapwy6tYK`!IG6Ezr{pF4rOEl;|E>5_^77nC#`J$ng{uV58#$!TDf5n| z)Y@vMe2RaWirzfJGrkyQ8)!avD$=T}^L9Rjk? zIVUhz79Kfo^5%LH>>tiFPr`G$et&Ly!ZWPaW^8*3$0V$I{+FHS$kdJVYx?6VBZei+&jYZ%*?gy z6PfzMo2mAxT$ti>B}-F0?(VmLa@n|!Ys!ZAk6Je84M0bZw+rs_YZf{udb=FuA!|p8t#rtZy7bSS7WF(To-N))whI`LDx1W zUpKklJM=pX(+~+aG}pCvG;It;!*$K!%`(PBlm+exhZ^geP@0a`P>T#lB>7T@O15mS zYYat05^E2Kn+4-->S#jRX%Rcat&MA&bWx?hjG{tX>2yZAqK$2v6roVUx~_KQp=xR9 z+0fJ;33q_xohd@umUc1+oElqGE)-O#uyfDQWx%)HBj{E?AX{*7j9^%YY2BB zN^2vct&>SKw$(-8?u>+*!!klwYh!qAQ){@fZf#dGLwKlhsTFkGhwJBP+slKVL zuD)yS+Hi^oyE?;l?VZiwuW)O$DZ05Xg65G`$?U_#k~PFzXCz6whG^Z!P)ie76 zqnq2qOj4GzGa4ehb#88LsJp4HUSjN9sUFo3YDMR44Xu66<9uW#Fk zsJ5 z=Hvor8-=KBZR`LW`%9KCU0AkYamB^{`cP-M(cjkU? zg^T7dm|yNMiA1CAotIyFDTv54=C5mOTh|iqZ0qW12+wb5TYqV^t*r&k)zo@vOUuUf zm!QAi6mE$68!9ea+*nc3xU^yIq6G_=EGnaw_scAPxW8MBX}=3#&=OZqJJWcI|&7 zHd4{wT|Tzie(g`ifIsHu>6_#>7+M)?z}Is zFy>RPG07)M{!s15bk=Bp(>}ynER5+ukCeX)*gjS|Y&XpFWSdA zbA#@^oI*}&VIB|FrOA3HqN@PnRf1VX<<*_Ipfg+)&5pK%zGdM_U#PV3mLFi zEsS&>)7T2UD?U(k^}|`fy5RRXHVcs+nfg92kmB!R{%7$KX}(7LU!B3<53F1Jm!-9P zO1`kpkLWOl-o&2L80)|vpU-Kmnt&{estf%_ChX#{@4CF zY2{DJuQl5Lc!u~aSGV>rr@vKZ+yy6pwx6uO_H)zZxeVCh4A^foU;-Nr`E#dNkO9M* zp8T;4{PB53hH%$qz#1(~)?Z^KOw5wU+qB<3^s{L5l=e&URZ1TGNc*vU_+uGIER24~ zH70c1xyKfktw0k)=5Lj4f%e;vaPD$5udB76n?}J5STqBMJ5A-!9ruw8*i#v>=PZnM zIIOV+Ox2>{aqSn#;CDI|IQ-)L&x&`k_B%m8IhLjRS+({H(9eq3sQvD+{8-nR_M1jO z{QUUarm|?P3>G;h^@QbuH`C(F^V!(=Mcx3%9LS?EMwAJJiA zcvtO`((`1RRMhda%SXR+v|pyY%e9}>tJ20yMSsS*QHL301}=VKxw^IA#VmW0o+{~XUeD1iamgn+n)&$7AJZ$;*a!icS1LV*E7$%d^v93b z)f#h`IjAu?R=Z>g!{3@Ajr%m_hd+M|_YWDu?bq1FGL#DUBaN~A{Q2=WqOn&AWN0U* zpK~fb^;nLltiQ%u=#i=Z+FvIx<6Nz=VaBoAlxenT{}(d&laBXjf7z#R%&tq3xAyC> zKJt%?7wGp>?dQk4yB}W+=bPGZgnk+IwHc2njZM+i591?$OqV~>t4w32?!>AsjP<=y zW2a}}ar)mni9geP#7dLcQyO!Z=Q)j)!Jj{dJ8Xr!0N8Ie)|dlF7X6dy7Qpbz-xd51 zv^6r4=`PTICNI`wg~r+$-fDNoY1ICF=Z|@GYpk4r)qdNu_%Z%d+RyYcV$Ws34rjoA zn*o!=LK^P$3Uoo;SV;!#iVWCw8L&o;x%s6#L%4e~VEq>6M_Ko3?9DX3N*{|3Tk%Nq z-)ijtu=oCPT2)ow|H;83rNjx7lytOFsSxLvIwaPG3<`-lH;&#^11eAVNy|%QB6g6Q;}g}Qet7z9Tp}PDizhU*4k^G^SSmu8|d5feg5ja zUUQvu-g}+3)?RzVqiw&Qdp#X2KY||C^O7fDrezzQi0l8# zHYqEk^>k%h_*yeE&UUH{#;QMut@0S_A5sctL?diQ1Sy1<;9JV!w?aE>MbJ(ac zp^Y++v9C4C_Op1J%h}weLCbX|<6XP%%;sZYykmXKv}|cwmd!P|e65zZ=9F_>H*2}B zq;0qB4#sPbC&#*z({b^cO3h+2FqwZ zfY)hU?@d~czHQB6yK>n695#ynA&(c+$3B!PL<^5W|C8wP0 zIH2XyRUYo-< z<{Y~vhwaQ^`;tjJJ8=_2QgkSLDbI zcyjFP24(%U?fc3_+q8UqTJHK{IqmP&GP&3lNNx8Kvp{*Pj%w4jYLWzwH> z#)X1+4C`r7hPl+P%-VqEmgcaP%DAuc!g6bsjThqB#vHcAV`U`2Q`x#m+*$vKS3AXh zZYA@TvC5j5!F+|~YqSje{B&g&JC>W{F|K>JvgNdmdO5x;w5*kV&At9FzBb>a@?|8> zOBwxbRW_TSa}|wm*?p;fDpN-yoHurT%RY=gi6P}X&*Kl{{y;(HxxT#cx%~U4O zQ*-)Crxu|0_HCS{7TUyJ&Xm?rKZ4}N9j}O6ep*P{HTDB zeIv`fEZ|3pKQ9mXf%8~?big-AeLu~GMaw90Q6CUP$q0$3J|G1CN8vhw1b(FGc@T)( z{QCvG{(Qi4#(*!A_&gNwYb6ew0^Tlh`$oVQzk$(E zz@L_S=|l=jeXD!9cl@f;&1NloO4zCV4eQyCR zCk6bUQs1(G|54iglz{)*wM)Ps6F*-Q@b5_+P7C;u#NqUSe^26YM!*|H&*{ZMpuGzu z4)l%i-tq>C!|MWm+!Pj^5b!6ZzGnseTT-v8fPYc^k-IoWme)zW&JN|JUgre-Z6ZIu zNC)pslzN>T$e%9tniTLCP2r=?3;5&GzV@al%edwHQs46f`L9X)zA@krNF3f2@OvZ< zg@CV?dQA!VJrakh0srL`_RC%jQYUHkQ;EatGN4=k5I!x?^Ss38qJTdl`lko{Qw3Hy zBj6vExV<^xcSzhW4)_fcx0wO&lDN^g3VTbl#O>06zeD0yAMl5zUK2bmbOx6=%nIb6 z5P5lnr|6h3PvPAw1NjvN=CcESqr~B@0q>SL*c--ttXt+v9IguF8zc@*0l!e<&>Zkf zBo1=}{^==fXQEomR>KkpxpR?0+8UBL%nS5}=8UfW+atK>j|7!;*maPvOJg8SpC$%$Ejy zy2RmzfWJZFaAUwHNE~ho_(>9n{(z5`INTiY<0THa1pFQ14_%ad%LgP5w+8a>kvPa3 zTSZ5-P2t_!0{Qa_%-CM1?G1L{2x-^ zdjh^!{22)NuOtqi2>3RM!@U9jk;LJX0pBKZSR3$*M1L(iTeMszakwv(mpI%X@KdMo z;hzflerfl?fd5Y7@acf>kT`rM;17$RpAGns#9>{)zbbKfAmBq1htCCklIW3xisEpd z#Noj}zFOk2KHx8(!iRr8;JYLaUkLb5B@P<`J}hzgQotXQID94G>%{-B2K+v$(nA4X zCvo^%zzZTTMvCHahQ#6Pf&9r5hi?Y_uLVAQDBxQq4&M&=w1pMj(t9>Tmb0iLb2>7KEhi3y`kT~oO zc$LKAj{z^2IQ%)_ua`LN3wW#eDV1Y~)8&4N!*hZBk|`{*Kj4=YnExf4Cs4S2QG z_iq6|P3rsifFCdQ{b#^mD)oKQ5o{fo(NbUfr2%ibL+W*8z;Bfhyd>aPO<@Hi13q2+ zpXO;#k~fI|7Y2NS_ zt*C59fp=#WG2S^(>^21aOo_u40Y6#daAm-cl{m}}c!|W}tpPtu;xH%R9~Ha$vN@FA zCULk5h}*nD;?NZE*%F7j0iRf4)DrMAi9=h!OU0l00Usf8=m_}pQr~L={;bq@LBOAv z^IccK?-2dR1pFNmhj#?LL*mdI@H&aZqJW=JV03N3M@bwO2mBx6&ys-em3F^A;J=bM zEDiV*5{DZC{ws;YjRC(w^dB4Ww@V!Q1Ac|X;pTu>NE~hn_=^jSZVmW;Y4_U#{yT}o z?E&8*el8FA!xD#g2mE^yhdToPu*BicfOm-=efbtjXGk302gGeokvOaj_&ABf2Lk>l zY4=qD-z9PQP{4mGarkh+hb0al3HU?e|LTB$QQ~k{z#o!0tO@u{B7a=K&z3mc9q=8QvttU>ie01-y{BiHsJS5eIE$;{L_-;h$MS% zYZ2@|nt68q+M`E4N{<|lNV56=Naf$6sq+yq{~uJogocArh4#V%7-J8l2qR8K2>0TWWc{d`EZ1MJBKSW`A<_m z93kJo%H{+uxFwf>Qct$S)|IH4sOThnP z{u10xw@aX2DWr`Os8=!1>Q&6MdKL4mUd22d$GE)2UaCi7;m3Q#?Up2zEICU_a$*i; z{jZMjlOwz=!cUFx@(2%~f3aXmGCm?7J~wglloUBjNzQ$BCm-Htc09cA>bUi)Vk0F< zcwf%R*A@%vUP&T@Tu@fx{xdFz%ix;BWiZa+g@7?ANo24O%1YdSDCO{J0b@{-g!6pI zFN(;A^L!_NaYTM*gopEarw4m~c4$e?eBQ}7WJ0i2l3W3M*=9)+&gZ$bB$=HF!B$D~ zR@lonOOiR+4s4YqSHWJkS&}qmJFr!f%!R#dvm|HU&ZQ+uTP6fsCCPl)%Qj1raNf?P zCCN3J5Nwqs3t%tXEJ?bu9oV9;5Qe>Mvn1)wc3`U{Sp<98W=YQcoJ&iR#hDOnl_X1G zFWW3huFrO0t0Y+pd)a15aznNQTP4Yju$OI?B>mYAY?UN8!(O&olH8K*z*b4lJe-S5 zlG{Kk+bl_L&vsy|#JzP7#BG)&;XIs6N|HMQS;y~;@b^V{INx@9!uhu2t0HNL0Bnp%y zpT*sDyCiua-NucQvN8+|ik}rplNQwIQIh-^chl_>`bmSl zr6l=D9;SFc8sU#c_)jDJ@d)1@;XjM;pGWu;5&mR^|02S7M)*?^{_6<;O@#k8!k>=t z-$(c}5&nk=e>TGRM);p1d|!k=7vaxG_zMyKmk9rBgdd3Te?)kaUU#EFNpeJlkBIOW zNBGDHe`$mt72!um_^1efS%kkl!jFmY(Gh-ZgqKG6m677U8Ev_^A>8ng~BF!n6B7#d&x}ME12!DTse;~rc_b^=^u8PQiD8fG+;o*Cj zPXApI`85&#@d&>=!taUjfe8OZgx?$CpN#Oe5q@8U-yh+hitxb*|8#_ZCc-}(;p-y& zfe8Oxgg+SJ>m&U05≠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

      MXhE9Vmm z*K&4ISRAC+9wS=`m< z83&j8SIV`kPbt@e3%!(I%Bk)7f7)IP|4-Xq3w_MiCzMC)p-$C5?7xYf)H}HFX|TAY zSLmhP7hLF{Q1R;g((S&^ue`9Id6aXN%Ew`Y;`kR8K1tzsD!d>7-=Oe&6#dQsT=s~h zJd!2`<6b>Hh->*@Q}_y>#Qb7C)EuP0PvPSguK7e2Ua9DxQMi`>HHB|g^w}6c@?gAG z{-ycdsc;>y?0HRkEx+FLdb#3rLh&hAcpk=IJjmy({-ybyukf`B=ez_D(qHFanqS#t z+AXL2xRr^|0IGt{(O}xbWX^aaRvdIJnS1WpP&z z?GArQ*C7WNKF>J(h5oRE3;j`xGhSWp-cY#ix4)_IxypXJ6|VJm-r}y_Wa?jVk!Mh< z&(zgh#KDC=&El@!(k(9hMGxa0T=--<{Dpp!gA4ssi@WjWIsAoBfrAU5*$#i9k2<)} zFS9t~jVk@uD_rZp!Q!qSHaNKO-)M1H|BVhV^gAu?>Y>@;FX`Il;KFCO!(Zt4I=Ilc zTHKBINr%7idCI|sPrJik=npx#(7$GJH{LfK{=(-?2Nyn_4u7FP;ow65uEpJW&pG^s zPq%{$pYslXp_e5($#&@rpdz4leXlE$+%w zq;TC&Sf=p1Re5Q&*W{z;OWPH$({;$=Zn~av@a^{gusyr!dcnbk{$-21={lisovwPw z&4cu7{7duOu5g*-;sZTTQm5!&P~!{D=S_ukA3!;}6y6{p&Vy7xzgFQz3fJ>v+Y~Ny zCk)oDa4o0rd)`m4#$_*1>S2M3H%;{ebv~wB+|9@F4lenUX>m6nCpoy#Pqw(5k3|aC z>6Lyp>9w40zgo(L^s7aFiP!B{3;o6bIZr5gbi7>_7yiOW`qhFzPg3z}d6p<#>u0IOU3s{{5)Z+J|1yia z^4#g*LSJWbR}b|Lf6+sOgA1Px4u7HF=-@)X&El@zwkllf;Yo{2dWHW}4lexLE$-?; z#zBG${b3ca&X+e7uIs~2g=;xaSlpGf%fThyGZq(lBwg=1xX^c7+|^qo*|!HbABS1o zm1l&53;#5WyYi$vxX@3vxEpVt#oc%d99;Ow_|c6wYUu?R`XY$6P6yv^c{N*HaJ&=P8T3^0Yhnb}P>z zi@WkX&z%-` z^(ONMf(!pjCtk_Nn1c(w%o|W19q)#KcsDw@@M(1TOT610Tl8j&;d>Q+wZdh+oBSnD`1rh{ z$NqMG$K)jclJt^CM6kD(If#ob6DU#mbf3iky?trnyu}MjO0DmwJ~vNv;v!yaR`Hr2 zI2or*_&O`VU6VXnS6>GgM}N30C*|m+c)`4zi|3avDZB&jZH&(+B`7?}_@9kwe^2z> z)KIlfyKag*a&r9CB=+tkF~EIP)mplbxgY$rdztuGYxbFhpu?Do@`j)w#)FK{O+wIH zPR07QYemIy# zf^y4$s@)SQ#OAAyh%$J$YJI&|O7B&xeBV(097QoB*TvR1RPysf`rt|6If}6TV9&ZB z5<-Tqth%RseI0yH;TuQm7l>Y;6y?WJiJ&yZ(sd2x4b|}R!_aYOXjb3mi$|JbMZ?;< ze%^(AuT@p$YwPa!y$n^XUcaiLbakyaW!372swp?zblcTnT~TY?6!mxBrF>M0DAZ3s zw^jX0jM1L)MC5z6l2E?SB2PSsRaPxuze1;iDqG70!Xp=)D6LviTDKbBto(EuXG2Ia z{0>c-vSi(T)eRM~DGlYz>#C-FY&hc&Y5>K5gQ?A}ektwmcFWBW=c$pTUvTSc3a-73 zWylw(z7MN@l>MJO886{nw_m7L>E6t^l{2zvWux|r*C>77(Tw(OO07{a@Q< zFv-%2y4CRf<$4EGif~fldkRB#Tw7|N*jmDh_UXKbITh;4xZ^J;Iu%L37 zR9jbDU0)h6(4OQ-{d%~(W7|<$+J_-m*P`lJzr3^_McgmDcnoh~(~LVX^E1sj1v5X> zjB7CbR8E;b6FK91`l?vhFb(d)5Xk%*&tcPN7{L7E2lT${u(%ho>AnLo@g)Wd-;G$@ zqu6xcdsv`fvFXOI*tGve?_!+Sv{SjdH{x~KmoxLE18bk!Zcra>I*B$!sXx~-; z3p=gb2R@9ej|(sTVF}=d|2iJH7-?g6GJ*2(U>}d^l;jA`ep;gV<(-)(23Cg~*XI%5 z#Yo<0<1e#e8UJAXx$)C?e4_YI*lw?8TTzd@)(@yq*y^Ce z!n+trJ8k-lY&fPr8Gj;==zmN={PNzQjFT*z0df5XktdSBh#-z7{;BWRmGy@K;dj~a z*?l4X3pf1i0QsM>;SYa8`1}Ctra1MGLB9cKu=h~di5LXk*++dgIZ z8FB#1vPLHzRq z^mjtycPdvmtzW=%7eh4O)B^s(m$&7^^mDGkP5+;x{$~DBH~JW1D`dC)$i19{e6wK> zU319yN5b2c6}}!4%HL%_W+<}hr~Le?$(5h)1tzk;-F6;F-Y*S`|DO=vm5H=d?Ic?x znd4ym{Cdib|K5P|+jJ2_VS}1s{#kzAxYh)e->2-$GEZ4PjQ?`{x$%Dq@+C@t`dB|k z`A#h;{@W1Pm5H=vH`)+Ze#X!FAvgZr0qMWHtZ%;;|1PdSxxW(O z-8Au8*&RMbktL-5DUzf|>aWIt_z!=|_#X_2zcoSpoL_U}=Uf@nKNWxac*DlOPlLD? zy~%l-%|D0CyH8K%sfQ9ypi8X%*lJE-Z-WhA<~$Jjg>V?cC({4BHvQc;Lh7G$uM%GL zkNtf;Ckn&*4Li9g<)3WWrE$YwlRsltraC^!x8IDJQ!UA-_wCmSXK->v%|#S;8S?1A z@7&EH<0tJLd`)m)*Ui{ht_(goj@$j+H~pOc=jhMtIpfbO<9w)%dri5%|2z--zN5O! zg8#M&gZ%xoHep{n?Wa%2$NgoK;g>BXx2c%>Thn)4M(Fajk({Pt?pu$2?VhGQ5O-HK zd>u6<-TN1)f7aB@y&l(1d$@mL&R6&C$^J^@QTo~|+1#{8;@=YC9&G-e@tsW17l!mS zTtB2I6Z?wkw2(Lcnvs9aIJeBjUtzK@JNK04{&HI!-)Qvjp?O?*@EPnW8^YeQNzhZ+ z=#u`h&RPF*p@Jbj$B~v8_9lH1d+Bk{HIrWKE6Vh?LZ;Cn>=_DKBGJ$#eEv)92gv)_ zpRbt3G@sl8KZDroZz1TO#$L4a6Ll1Oy^Xpn)RG5ZD`?l7=_g^sW7AvEpKF0hr|rj{ zjqk(X%f6&Br_-^wbSL(_t1l_&ynhJ-vOb z5j^Ni1eMzlJot6Oxn~soDr&yv*wdVPMLnH%-{*Y)7_LsUuvawG^YJ>J2OZ9ZE@^8o z7+V`?WAN{R&u3-tQSnVc9d%+q$NskVH{fS|Cx*S2Q3clQ5W{us>_#2f#;i|F`!|gHHOsN7s9&aU3so zZXSuu9%udcA}b({L)Wn~ev60kcP}Hqn4$K(*LZgLO#;+ppWlfL@=AtX9_8L=e>&t_ zk#DE$9`@bg-(lZ`GCgJKX7jA}UdzPo%fxVO;}7;vn<_lMoAMoYtr-4YKEq*TRpEVf z;P0c5C(#~XqfA3IYCwR0r~CtY_@2i-2k@p5fBGHtH$JdOgSOk?gZt6)#$Ve)t>YZ; z8~&0T@rVCq@RT@UuYO~2YNh|-e^bWMYyShjaBwge1|EO-9#aG5C)aSFHT91p>QS-Xv#aVj}$|D$|!wRR)qqRum0!~9%K3ugqxJuW!nNK;Kn@<1N9#@AJ#gbqxAcNf^@DrkE$+&b z>EJ>y?=ZM}i&}c(T5lt4Jj5s3Yn~=4T&^`Pa$2&!eM((9ql%B#Tc*P8bc8{&E&gfw zYx~#y*@pArI}#W9m*!W>J@I%g5#N7?xEd09bv7(<(G{Vc3cti&^VF_zT}!{BaNVk& zQ+S%aHm8K|YJ7_KGt{D>=?wb)JimuG@I{9Ny+D_NT{-Oket}Cgu#@Rh2pioI^;clc zGUeRcuD>2{f%xwXK=4w&ZgF2J-bbm&x*>PyO|Z~DU{Sre7)z*p5r9kHAG2JlqYPLX zomYIv(vq7??^#<_<=N|%<`odX``p*Zb{7v-x^*l@tn!9(F5Y1suyTr70W=GMW|_|{ z?V05~vxMg_-u0~sVx4~46s+7;PWj(jpKF6X$6MjJ;T^VxCDZih;yB3r9V`pP+@4Xi zA65KjQ2f$d{Vf82TzDzh63h+Xfxs?CT6tGj>Ri^zOsDiq1phU#MDaHO=OOg|-N3k( z1<1eA2KXfTZw-)tKNqraNP9;4sbi5xT=V{1Gz8 z!T1@s8~>fa62-sGhLiph$jsr!bvsZOBjLNY%T=J_C*;P@DfmS3V=luSQqTK$1LK;7 z2Z`dBZ^EY9fJ{Gojc)v#fF+85ye(AQY*qhqx*Pux=$Y}mbK_@h{35?)V`zEJFg(~+^IG&w zj0fhd%t8CqhlG>!XK*3cn(h~g5(NU6_C6clsph;lYyp-P`A-o$mgLDq&ujk2LL6n=ia>HMfUob;W4QGDR-0-#23ueqT0Y3fQ@UnX; ziGM`RDe7fIlZBY`iX8TR2`7gzZ@BpjKk(oq-5cC^T^1%Ek_Qj&F2o$7KNtKrZSP@T z@Z8NwX8sf7)b=zCD}IML&{5#Q`L+F+Q%)KhpIci8ACb=v@p*9W>^;nP$-G%M=8_|m zJmbrt-<)wlv?F=v{GM~+u5DsJ*WcAq3Lj9LF-wzk+dRyxCf7!$ZHFJ9 z#6IqhV4f4@EiD_gN8vxIdeL1SDWRm)>`(~)eo{_vxBjf5j(&5)$Lu`jz9erAeJn1- zd~Q~#Y3!CXe_mJoNxE~ynV1udExNoz&l|@co=+bf?GeZjIo~@2aqV*BJ2Kp#4_uy! zxoE`4x#<7!{b(4wqRsTq3%}ZRt#{$VgG1rdECSzV$(Tb;!CYi2=A(zTU3fm!5`oTA z%BHm>k66$%4nD$8J?^!kzHKfFMK9#Sci9~H5#rpW@qdYVLvK?2zj}yY=z*h?W8MRLB{;Lf59(o(Thj@lB(UOWU-qceAzg^YV_t1Ly#He9D zr`*+%i*s^P!OUmjujdGSnq>dmhF?T3+wd@aCc#HrI{YYp{(Lt5(mqoW1RQGzFHV6hQ==Ph%SgZWK7>8_!;u}4>z4i^a?#;`>4I;r^);VA zL?4u>BiiZrh;!FZm^5YN9)mw~@%tD{Sp*-vUS8?N-kJmCiFtnd%Am>b? z!Jplz-Z!`EB z*1ArVujSM={AFXWqdeLL>kZmP(;)BZE~KCKd;mJ_f?v7_WMLj>;XYP#QxAPaRnxZN zODf~5-q~2q@SeAC3h)gT_3In@e0nakvG`HgjMYK^dJuW=H0say;OFXFpg9k}w|jef z+smfICphxagt6xgFSI5b^+PvkV}Cw(Rx7rh%tBb!HM~Cxea8^42|kM=sGGipylcSv zR}=DNOep>IMELsp_7LCS^CKg%E(zb1vWCWW8rCn7!Dyf0hpclL)`r4kc65T~csTta z<%kaRX1tEJW*7V*a;=K-qODHbjl4v=Yt}2b+z?+cJcoMlFnm@fO7{`a5syJPO{j~L zF7j?+y?hIFKwpjK8RR|&KW>!qIOLoVb%cnk#9Kd$Xf_@sCij$$EN1&sz@I!Ym)&f5SUv%fwu>O~O6mh?fbUrwb z_BQtP`&+*~b{2etc3$S&nCOn{dm@+U&cnJ^Io1Y`T%jJLwydA3T2zbwZ->q3iwdn_;69CN>uL2GC`}-WZ;7V4g4`udKYr z;`{L|xX#Y#tFsfyQVw5R#0#-D$o7_P?Y}~v7}}jKq@w}#O`p9Wy|TWHmlE>?e@x-g zNMgKkXdK_7=numl67hjO8XJLZ{mNi_o|jiX+3JOU(6Snfrv&L{D%x|TW$(~Q7h2F*+#Mv(RdKnuT-w)9K)GxjNnV=+cy6BN zhdTm$c@945)&_r4Q83uhoNHnH7DJFy-7A3*Tgg7hr0}IUzBY-Xa=!u zM48>^C7)gnzuF9!wQ^z4X!v)Ge0fVTeB|yxTAyaVduSgYt3-bi?;tSlvar|FIKpc` zhWdy+UqJskBQyNV9`KmB0_pIYjJ=j!+@0SA8##)1En+CY$#-li&Iu>)$c8Vs80rJl zU%F@Etpmjvu1`_?z(XgMWfHX?69=0^Wb4w>J-KQau&$ zgIbGzT-|NnE&Je;a54OKK8E_d2K}lUv=8OzpJ-p&>^HMt71chxA^VG}|50oEADK8) z#}UXJ0e`l6O=u?#Mjv?Tejc!Yl5t7&Yz*yu^`Fe|$@#C|_M8JZ&Vp~nTjoHf*0a4O zDN*$0vtAs_HaZ9QHzAMNcJ^yC-%acvGF0Zl#0;)X8GVu&^}!*2v}Q zBVkvy@TXN0`vThcq3HW9LjRa&_K{(~?E4=)Ttb|SF`Uq zl5-pJci`OdegF5ALI)>Bq8(n|{GO~4(VmLY(Vi{d2reJ(GQ1IAKi;GJzavN9`aP!J z=fm*Ro{Y4oKnJPN#W3jPB8=^aw_TW*)KZGMm?I93ZHQsqu+cD@3rCm@;r{u$}neg3TZu!veuOPuX|30$G;T$%(zDz&`*tq zQg<9fy7*4vUijpsF1kQ>67&xZ@otHP(spb|o7Dwf=bp_dcmsVQ#&2vFeU@Xx=e9j| zsrM@5J`o;o`a{uFFR%6aeTT9kWBOok#(QXUkE8uV7*s`GOV>oN1>^LC&!+f3WV^|*4dxKMwtXarEJ!Ircoq7o!h$Zv84~zc#yTj<18xfVrg5df$%O zH)VP295T1R6%5B8q^2b7s(DRbKx-`h4_ShrpC z1L$(YN4+!XPx)91>MrnkHpx3X6k~^0)RCPSZ@rDQ{W?7E;C~>^=Wf0UHgO|tV+m|z zF>GZK%E`jE6XB*kupjm(5|-g(R(AHkrO&I&p>OAjd6Ta{_xBUT7ec&Ah(8QD2EjH5 zn|Z+Ac_UvxTpJP1fzekCAmZFF^v(t|EG9su;QP=AG#khY9b^N&uuj75_t_NlN zwXf~l^C5Kj^kZJjfyXwr&G90qkIY3K4V@o1`o-J>^v(E~C;wRFmF%+Z#AdV;=Q5%l zEEn$~53u*~)2E>0(HK+8n9Za`#&1l^6-W!p+peT5M*d`+U%tqj>DYjBgff{hkIEnP z?Th(C8{2|$iJM2iL|Be%3oi58$KsD=_$c~6qJz#c9{LuxJR#1vQoOTcP=32J@Gj>y zUJvIo^z+8hp?u1QzkYp<1KZ-Z{@nD&;(v$z{^jLf`$?3WQx(yU$UfhfHRpTIKsP7x zPG%|mr>AClEj^cdJ@m1D|0PX(_MxvPe%6^M%m?fz*mE9r1pC@)NauSKhqvUWdM)(n zeQF%a>pZUm%NA)}|Mit$wAIAAPocbU?xn3JyE}q15W#f>bpiX~y-A}_ccQ=Dy(;a| z28HEa(#^x1`1cW4GGv16My4+4 zrU?CsTOdDe_xotCWxlC(PZ4~KAKKDXoztC@5oQ1MlAH{0){BFqGjqn- z`*9xT6mdVs-jBiaLAbxv-d~F6yuaAqUySGQLwssnv}Ymag~)SZ$eWb|EN7^t8S2ey zqc37SLtQ!x1F*D{kT>?wO+5@pnUJ4rn3s_|syA>9a&mg=qmkspUy6KX#H|=-++UO& zy?+tL7TFhh_vdDLhe*>!-48}z7uRoto@2JhknUKfH!GGDy`Om^JYvn>2IS%WefLj! z8<V-qp-E7=E(+4Tt4*QmQ%&fUBK_1S#XYx7XQ%|$)O zKEU6bcY70+kF3q`p^dnDE{*oEjG=xjIr_n-hfh5oZecx9jk)+mC<~`Chdw#<*<^jgYcJMSZ18KKdq%V2K|mx{9RVp8O#MHj)AZiC)8do8Jh7trR; zF8-?5eE?zJ23;ZExu;H#hewhaPPJq|(Z-&v{jx~Le{jc@rb-mNr(TaWw(|GhhduK=;n~{!re2nAz?#H7Y%JfS1 zryRa60=o}g6uHUUcI>A8DUH`%_M6`J<9rui`YMly&{w(a;G9(3SGj?GmA^;-;~!?@ zJL;Y;Jn#JDLAI}AanKw?|BteDZruUeowK`E`+XJfRN}Eq`6G?RD+9(7#~yAhz9;C} zj>h6rJY$;s>F#@R-8JF!mag#UbG@%*+&T?q;3U%5v?=;ctO>1Y-@FTNAvt?OU$s?n3#at?o%G?S5oA*MYD`1$y%NF#M-`&ZA$%xY*YJ`q2e# zLrX^8%05*Db^0;C455EDj(yF8U1(ECyC3$b( z#^StyXXTq3i&OAS>W8-DpIkS5Y`t(GalKIP)C;Cgh5p_~`?}eE#=a+X&+^T(U39E> zMrKgG+KlfUE+n28K8CdY0?%mo9_+sJ(#GqU*OHIS;{%ANG3oGiO~}7vmma>3bJ%^) zS#~f7CC`(=C(D)}9sW-{6gDnpk+Ded<*My zQg4#iTSI5IUOBhzAo}~@vm*z8ix95$$|PVIBO>k#4?b)9)wDeXIjJaO?;XJP=(R%SF*uk)on~N_Rwz>Gp z(9S)hV|CrhsIya1XQS_YFyakrN$E^#N%oR=qU44<*0!ldT!ue?7#Tk@;D>)`4`f47y+%li5n*)4uw z;{?W{zupsV%Z45w!#d>KCXTd&@1SprvEnSq>yHKOS|t16CSG6fX!u;zEYea(-^Us?>miO?nKr>sN4%1do#*0n zNu$v#o+Y7t_~Cq+h;z(y0BM*2`S?tD?SNkAT1>ukBK=F43qA%N9EW_GJ{7pnI}P#r zYg~pu^TEh!zaOLgXrCY3T8jR*p9YEZG{&=m^5a=NjQ`!0;g34%IOLbO4KLW`*J0zt zc)t&2Nv{2|YXAA759jfnk{jA&uBbOW2zH;+_95ET4^|9AzwRRR?}lT%dU4x@tw}Ak zd)74%K|iUm|6#EIFNd~|-5%PpCp}i(Jr-kGj&WEPu=a^^5ZS>pz=6`t~{K+k@AJ?Zcz@KQtkFsO{}5Hl(0$e-ifG7S1TZ znBjh*OGX(wi89r9|08e19hj48#X2U&75V!y?xh??ew6KUV>`Ya#H4Ib@cVbo$I!k4 zH*+|A{%PlKm=Er}4d-*n>xdoAN-Crf-zmw6;Y=BlBO%XSxp#kHI23RW4&1s-jBBTqwyT$ucndq zek7jrez?6Kj^`oVr`Y=xJm>uodyo2~$-{k;y+^&mK0W)}v;nE7uwIGz)SF@NH^J_2 z#CT>2$^pyAqBfKZGndo5H3{Woa9a=hXx*hlK^sBYNX9&4sHJz4*Opv@HIZctd&b~> zqFk(3(XMi4aIHDzbaE`&%p*|O`0F=su=$8TZ@@7i*X{KD1!a64vU1*p-^^CyeT^92 z*Wmmtc}4A+^=l0F!FLY0KF)P;u77u-4aPpKco)HcpFr@)Q2)IG^fTLIcVi6*-@HDD zx+al)2VU^yleLUDP$m-56+Z9NJqP{DdiOtqHiosEYLwyo@&3he^cT`Yqh8v8wZ!al z)}<_SoZpMTr*N3xu!hrjbb^-e2rw>;_wo|OdEoE-I5|hhHS!-JKBkqlF~oTyEOos9 zU9rUVYw(4gn0E~h6i4x2&I1h6?15%=7Obgn531KM8xP2G1Dn z4)bQ&&_e|4gDAVVWN>{D?ND;Gu{b;H=-6uT;QLXipV0;}U(*h5TJFn3Sy}GJL#_zc zW`*`e%oXw({`!@PWB(LSFW1FVY)zK!f@ULM!e z7NYG-xqC}-KGIo$cQR(74j6~^DZa0>5&6D8DP_l4;G8?6oS|cW-5VVV`@s8y8GonV z8=T>tJ&t;o?+yNXBIaOG2TuZDo4#DeYwFw)n3LsuhM?!Tk?(ihi+3?L;2p4R)D3;_ z=9xO2@8+?s9F0Cb`a)Poei8K|-+%h)^yr3{P-h-RJvs;LZHw@3)*`%{Rda80&rctY zZg{ykdZ_xY^jjZF_3qyp_Bww07tsxyu#QH$FM{q~*a+5ROKR}G-%rtBt-+ck=O(fD zKy4xBDP*0m3~A!}@x8DW${m^Ez4}&CwP|C*CXs03Huf#-?gRKi?z*8#=92gjCUhw$L9KW|IGK}*pKr< zjn{>iCHEu`_BwL%yp~0H2RRk{QzS1N-jm#fe1zSTE@eYO_5;r{L)`w>2Lq4g*XGmACtA3!$t2DUX9#i&LocRYH zcm9FL|NUJCMj*3z=sgCAr5n`i`_>WldEfO?KI{92KVrV%XBhbo!+uubF-#f$c%-3H zcJ~&T45$%*=0HL5Du-QOCi?<#Z-GaK?-}vv$h~Rb9sQm3!A0ZA?NLyQIBy*yT(6>2Jh$M}8;Gq@~N!VXZoVr`0na zGcD<)!_my2qIg<(o9Nhx54RHS#o+tz%p4HpSNzb+%Nl_H%-|CS;D2fGi39L2V`8-b z*Wi}K;FwKwjui%{vicu47@WD)|0p*&yI}nfv`aWf_Xlw|(cn^g;*SR#d~6)BS09*k z(X#s=zcsl2ir#;oWB8bd{Q{&K-2C*z-!r5s{V?8~GWf6oIM#=8poMY{-#;r$dH>@X zL(kV0`yVqQN=W7JRQs6zqC#Fge+B2`;Jqpa=8I2nBDb95r!YDwiH@+@IdkBX|3CJy zpcMF&VW2PuA81!T{Xo0&@qu>b;{)x=#|PS#k7x2U;0UXH)DOcd9|iv>)Efh>#Pi+` zz*i${6VbnkZ^IJdXHbtN!haS(zbPQzbr3iaAGQsN@B&mBiSTa*(9a0KgZ3!-VgUct zfb{-20B;E3!*2)^$)6EG&;9Tc(YFTh`S$=mw*=_9Hb6hW4dC;S0XW1-DCg7w9N(@a zq%RFf?>7SMiX}0Tekud->jUJU7!dF80{C#B%|!9u5s)w63E(p?0RKjSJU<8jk*Klc zVE>56#h@RFmS2vg_TqBrS?`G>EzLuCo=E;H0@C$CK)SeJ@krCd^dmI=8eD!ZfF9!+ z(8udZ(_aGpw*vCzy#PD8JwVRu4F7n&+U$$v{k73Uygf4gU_847e~I+)Cjs(&D}eqk zG=U>kKg9GeL3>Al{Br~HcSC^Q_JDsPIiCvP^8=%Yc)Mo$!jNZV0H5Q0rurME-wx~r zgNxPJeZzpgXZXh@GJSdAKR5QE`Z*j=;7AS7!;b>=d?G*((*xvBHu{hEf6Q0`@#4E) zq$}QDXWF78nzfl1Z!QyVb8!ayU?XB17;KFB{#oc(D99-y|EzWpn*lV7iQuqpmcPU)!=ZwW& zIp1|~iT9kvT{*iQT+`m|k+4kZJ2YwgGuz^>exeS3wIAG@Z*f;YMGh|XOD)cLbv~9UT+35waaW$0 zgA4yUi@WmFJGjvAvN+{gWYfgcUWMPN@bRdBc#wXoe`$WXe?1RZ&Zxy*d6pr?G|_C zKjh#-f7s%#{I4in%j1vV2ihmTF))Y7Dg5zmwmDpRIvrf-yHvcoT%S|8mZ#g|60aW{ z_Rw^2;V(maSDrz(YbChQ=UJTk(eV~o+>Lj(gA1Ri!(Zf_@8Cke#Nuwgh+k@nSL$N% zOD*yXE`FxTr$Hjcd7C5WT>Grakw@@dN*>Jz-@uwfTb8w+=u(&JFHic_>nk??hv(v$af3wA1d3HIt z(C@c6<mv~QD z+|^H)gA4t;7I)>8DP31@gOYurU3nr7F8sxhxGT>HOE0+4XIh-`)+qgCD?Cr(;{TiU z%N4#%(U&M({8GE}zv9RvL0(gQt`QLD^9mQ)`B=uOuHNdo)`i23x52@M*9MD=e*Dm$ zx6#3cew)P^ukI)8QnlWuWWp79PY{4*^s@rwMD99-xpTilgrw!*bM z*k{HZt~~P{T=*AR+?8jEgA09$#a($S6|UupS=^PU&cTI$y~SO58XR2cH(K14XQ#ro zJmLq%m1mcw7hL%7cH))%+Uwv#|AdNHm#;$#*Y)`e7MFO1|0@oE!Mhb7Js%|-54(H@ zUF3&!^*O@g)SKp0qVQ^o6z4k?uJu`FaW~#d2fy0#ido#1r_RBJeuKp+r;c}{#oc%t z9bEWqv$z|t_{S1l=$kFQYgaETT+8!{#a($`bMULJ9^SCH#4DC*<;k=PapRqAaq`#wt|bZ=SqM#1 zxP&F7>Gk|=qoV)3z2<3`!e=S`HHB9x{Jg?7A6bv0{Dq2sD(-oR9`5jO&E{OZ6g>z& z-_ny0*L>wDQ}|K=ahAQ4N&h*8?^N{KPMR$)@<nISoenPPJz;Ut19|h1_Z0;f z`gc{lT0c)Jd)D$lrEo3(GPSvRu zRthoB-3r(8oVU2d+ZV*HzX&e;2U%R=6?%N%VGhBCewW2*hgv_cC|t|)n#Cnv;s1t% z3xB@f#Y5ut@36k<;6h)b))BNkvL57?(*|c9LHKWQaN)nv;;uZhP9(U{?^g0eg*nbo zC|uj2UMJFasMk#j6`w&v{TrrB*OO@hxVwHK?XtUmA^1|oN4M9qPQiF}d)=()b$h*A z;o2VD^#w_qtS^Y2h(4dNd_>Pe-|FB(FY69&zRS9U@E1PMSU!RapTiD+p_g?Ekw@rd zJ;IImHHW|OdBeelkE~w^f1&Sm*xa;62$Po_J#&`(nHliGe{9#!~Dypt`x;KFCB!(Zt099-z1RPpNiLjHgA4ssi@SEU zGyvbLaBXidE4-h*Sw)fmB2gO7!xVm#!ea{8^mPi?{kq)>*Y&XOXXywz@B89J0xb7b=QFybWzd_-AUzZ2tUEp7u z-*$`BesUFl$l|mUjlW=Vmyh)KT>M-B{V>%Z)ACFTz-KFbu98#6M~qjeH>T({{|1XQ zy;mtdG7e&THNGu?&)xvMUEy;T{}&X#P~oox;M$(G9qRFvw)4Z5C-op>H$vwWuI(fO zIv%9I-oG@zdVHbFOQWLKH!{14*OkN9bid zF1XO&X$csw9v^A@Ss_etZdUXr>h95OE{8@K3k&60gvYcW|MfWN}xX4GNzsOmNoaNb7Bz zr5AZ5NRxwawhwk%+?7+xqu@fn+tRyoO1UGh-|N%$xqfd%mm_T_dCLBEdUZXl(_3fh z-SpNwxX3T{wxmn+qwDP)fI{D>LS1bIGBab|K#^SC#M-?AE58S2j ztAz>9v(2eFIBkAn~{E*!p|sr=^OL$AZ2ed)+esZqfXaG zMSm9w?a`!gT`u-3ydNJMj&kaF$6K5}WiJ!vI7?kYJpNTqe9nRRI7Kh|CoVksc$=jm z9{>6V8z?J0!(Q|Bn!+>fHBZtWkx!PwGjY#@_yqsb{4Q1aM1|KWTx^Mtr5+}q&nSAy zcj8wnT=JLrXB9r)>YsSF!o3AwTv~eL{L*c(Mis8C;9b$@9^!v>eU zv}%J_TzJ#`(&hIzRITG3`OU9hQMIn&`s!8XbpqKaR#n~SEr17Fo{eW)ug_gCJi(S$ zufqT81_}XZu-?tYmKGKl-U!)N!NKeLiiT3|%23(>x35)o<-T)Vv+YCW>eBVA#1(F$ zr+v>T;nKwm?l5Vl&)NF&wdE_<8Oi4@Tv`MdyVQnB_JAiu@2M+avCi2T!uNGsRcUvK zSeID#)fEkluVHOJN4-dO)!MbI*Cvo)YH3AveXPnpQkTA*kY;Kr_NKVEx)LBze&+_VqmF4yRP8i1Z@Tvr?sHk;SYf4wGU+KzO z(Xh78U}8tSUrh(a>l(@%s#ccXgWWWI3g0qrtzNOpSckC%B{o8wFYBs zeK+;1>q{F}`}Zo_6YT&p@8%nq_Bli@U0%1kq89so0IS+iU%sl+B7V~StwfMv^>yVi z?pPIQ2Y5?{tyr6&rmF8Pt*ctKq9N8Nr0+)A79x_EO+$F^n39oYz*D1sO6fm=-LG7I zuWUME1@yD0bbUQGC8?5J;w~u6kM-EPq)MK}%ie81v5~`AjRN9%U_qr*W@-s9GgN zVqpzytE=vsPOBsH&6_{($d< zyT40rmCJ??_q`(jX&-4L_U40 zd2W8C=b{_mKl~d0K0Mn6?H9Ofm47SiF!B)1eZS*D+!3?OO?}UzeOLW22KB!+>%AWr zezHUFhEE2ND7?&HE&YV>gAm^3$solDJf80lJV{4)Mx{8XtMf7sfOTmEBdIPrcm_5o4y~ zVEnXEH~#Mhr2jQL*eYURb+~DLEFk{f<$fTkWf?z{w{K>EjL`r&0>*1sE={$hl8 zWg_iS8^6rkFn;dFwBK>SZtQVPgHiOS!kT!z9p+m2KHyMb{X4~T!NZ9ocC z`p1Kb8-IR4`nxClF*ZxY_Uxv0dVu}KR{8;S`RBZX8~>7_e)^|7@if^|c0Dc)1@D5dNl58GbVuk*6EaAKCExBqDp3_~m>t>`SgS>E(Lz zQ$28Lx&Ht$H~pD5{8Z-udXKIsDcf4nO7laNjgU^Bov3EOcxV;JcoEyK4;MEA9 zZd^V8V~*-#(>XzkQKV^ zIhhpw3+@yB`1`#j@OSZ26MX8-$?(>^9KiF~#f`<^2hT+M&Pr`8ej?!6k>tkW@8H?2 ziQX;y=XtMk|9kp(dj{8rSMB}h%frzNUD#VTbA0BM#@bouq2nKQ{#S2Fb#1I52Ya|z z*Jc;seZf~3_TG^H1j11l*k_pg@|(SwvDY?hf8U1#e4XEheQjwc+mTMKyD)sy8#?H2 z8v7nsVE=i@C?0KS`R0JUiXhTS6VQJ^!6Uk3H`54@vs5*YW9hdP~|SK3M$_(m+3H*hl$v zCwwv8_D*kJ7M^WK*pRZjiJ&pOsXOeq&$QD|3hn0dpuC4a+$#c}6~bpN`309zUr+Ss zMLPWTE8|D7XZO&6XN6)xW){}?W_mq53a?8fjOHUd;gDbmn+q=-Yb{w zr?e^D6D#q4t?|88K@oUdizXq_9;)k2Q(-$~Ds;WU(U3Vut-+7o@k{EQ93Xo`);Hj0L#1tL2$(=>->gq84}MpYPy8 zuh(kru-C|;-(~8jPbXeOjGw&@F8ud9@e2JD4leXEhvVu&)&wQJ!sp$9c+WZfgm2l+(Awf$sTT%I_mu!nmehK|# z2N!ydC3(2<&UX0wR2WM+xbT_p@E7_b2N(LK7H7P=-is+**L(E}*VD5b6t4BQ(c-S& z8Xa8Z*=BK9Z%qy^^z!YJtGC?_f6>EU2Nyp39sWZ9go6t`=W}@Q9fp3r7xm7IyCjCtMWQYgqmw_{S_T%S#9GMP?D=9>lfIU2~ST;sI;C{!&}t`mD3^cCG0#C+bhT z3vd#9{d&A2U|#Pi<#HJo$||Q|Jq(L#16I5?OquFu(f{c82IQ};TKe%xx5ob`c&-oU z*1W$;te=hGKB@z$Yin+O$V3GGxbV`Sk^pXa?#bz5q>b7_de{oaI*{pB~4;zWhPt^Y21g&LMdS|QYqj9S@{cyPS^~g}nC1LCw*%)~g{rZ;7 z>ewOT7asiUwjTI=?=DTkJXjcWc!P{@)5wzfJqt0{kaKx?${g>qwUM*Yo*9GpjU8R> z{Rs7K3Erh^{#`f(U!xv;EoK~CR_3+L!kh;B$7yK)^XdOR{c*45t)wxhXT6OvJm&8r zTT2fW_4elV)_7;TF!zJHq-8?Zb2raN8s=dxZ!XeAA6tKCe6U6a!3QbB z!LQ?l(6W5`bToV~8MbCIdM2N&k1}Td4)YO_ zSLPdk+&Pz(rx-uZm~Y914=d97zW)Yc9&#||BZnX@%Ku+D)bhEKXxnJy&H3=)-0tuo z`n!bwlX5xVy2G$L;XWe&rW1mtFgFz4juc zw>JrSeEEGTAHEZ6I|SdA$s=|aqtC_dG@4OdnqlK+-UT{oM)7Y(5#T48&9nooPc%nh z8;2fwq?q<_evH>~7B+Es`Oub~u(g$|zE=D*oPUeIsfa7f&d+Yc`Oon8_xO7Uf3zR$ zD=0^r8Cr72zIrX5W1m?lGQ;-y{AJ>i#J1VOxFAW1vU<*>@ko zbLP9Gw-wKG2D99asp%XI-*2b~7NI;ZLOoF9rRP_Bk(oat{b(;g8NTZyw;d>_idDmec$ue6rvvaWt#W&z3^w25=wh%(S>=xSoD?jaivw>*`sHAOZF}H z)->|`V{c6q=c`O!r`C3!?k%Z-U%kZ#VzW|=Eu_?*Lb<)_^u_s$vTjc~b!uon`pIbr z=9M0Le4_X2aoE<`p{Q438_&YWEd36%yp^S(UW-IK&ceUk8O(vxZ|-1DG0$DC>d)j9)PX6HnHA7mc%|1i;u5c8{AFIpC6{qOdEC$N5CJ;C|{`DyA8 z)+4_~nptmj~ButQYkY`oe8!(iFU}?{M^N_?Ps;RtmTtj% z40S2<{CL-#Qvd_P9b4>&I|jQ(c}Pf8xX7m|gx~GwFxRg6Qs30$V;EQXXA=W8tA%V3dV@ zlK%(~h9A#C2d~0?Miu-rhrEs=_&ZNQzslqg1kTDkt^PTC^uu zL#BPOnKQ`4?_XA%QX3kUTie~6NBUgQEG~rq$#VKt##%4du7`%AJ%5aRdK>yU5gu}| z)5~~Wbe0W2l?yM6cFadPIEMb%+we(wJe-`1d`x2>`-2rB^yLQjv44+#-0$G8oc$*D zvEM_!j71;26Z(4}I`2mRt_Nk0W%pS4vRwEJ1@B7{e>(DH%t6{oX4uP{HPmY<4PSQp z2>jfB3v0!g_i27T$!pPBX}Q$k8+mR7w6t}XijKU4a@8D zn)?p<@n9Vl<)!SSUb>MQ(6|0zMIq`6zi(aYg=#Y4Yc*o~*txckT?1Q4MtPru@?Hyn z-E&ahPolg_ADi{B^s(7KvyXi$OkeBi`6tMcMjF8tmGu!-o9#2mH2R0n#=fX`BZ;wSHXj9tZWI#}dDW zk7KFF=(m>seNRZ6asg!zV}{1ekvTd>*m?P4|e7eqoC(_=NW3TUfy zQghCxzYSZ2?S$steduk=o9{MIADtid=EYFICnKFKf7zkkdoX6}$^NLf-Irk$(!uv2 ztPHSMu7w{)o8evPo$(U#k9~}8q?7#z_9q!%#`B}kcH-TJ&%y6^A$;@(#k+7T%Kqb0 z_P3k3BOeoYCgS`d;-oE5{xVyCwy};*kiVPj8jG7~WAldKU7AbL{-#0qqmT!qkr!iN zXX$Mho*&f0dZ81x_WSTq)DuH6)*F2AJ=hw@eIKCS=*BanuTXb>YelrQ zA|K{a6Y`67X(jrZ4~-mUur8GOCX8+Aqq%mjPj}lTJN8t}4Z*)T>omRxl7YI+*IOsv zv7kIGTZhqC_Ve1OA+ExKPRu>WL3xDI0na`>1s&RdSJp$%0qsO?o%|lY(f(y`YZYXRPEp)Uzmf7I*yYeA zvB9;4ROap8f!yytkqIMt~CPtyXcwI_czT!1^E7R2kaEVb4z5me%LE@jGW$K=o5cm zFyYvu#qi}@;nN?3Z{GqRuf)7@a~FKx#g_Vy&BHYv;x&9^Nys><+MlfWCCYY;PgZ>X zIbSaLXT-`w{M?Tp-wNOpmrwW^>XdoWAHjYP^!ggS2^CQ0r){b{AG0Hi;w*2BHzcT zKJ~pXckJ$5)XzixUqk+H#D}57jqr!G4!#dM-QWX z=I;&259;2UKUkK#WoD3^qE-HS1JShSjBs=QVXWKrMS|&fHu`!+px4|9{+ua#(R}#_ zx3>7KTU#Xg`rPVU3|&cQZ{mWK{~T^fR;*h(%;gB{CJh;+`o!nt-9FD#xqja9)~z|1 z2XbA$5xp>3@fNT1bv`$CFSWA{J_TEJ*MD!p;CJiUj$LZ0LIa~AZiMP`;hxzvmZQp(B z)bu*gDg2{?KXakCDvB6OYgGe?L*sFsaX;1+ug03<4f(?!h(*S}M15OuUenCFM{elp z8$!e_wbgkbuKYkSKe*B5Z;Ny?se?@N3 z<6nVo&~D^_(}V0%bWgJ4evG9$%*$>a9M|JNK<i8b5k;1MDL9@Q|0DZp^!}emp(a=Wg}&S@(AKIM?lV^_HaTEq##deR9a) zy4y})m*OJET$WzZ$_0bO7x!Gc>nh;CwErZ=5AxXh+YmFbzXQ)6-`F*8{PM`VN8J#) z0{@3i_#txnp^?~Z48{_Sfj3~At?O}pNY{eDJ#p&kp#I#y$=BD#@{3L%GfCe%)|aj^ z#%>?#e2k8@O(fnAfHsQUqi*TY9vdqYA4=OSr=4wf18nx8Y?}?h7SwlR|2D5jWF1=+ zare8N{pZh3jkgW=Co5X79Odpsc}Kj)WKQw}6wBZrC5fBTbU6t^KPPnF`{n%6zHWLQrf_{p`iyRW6j(>F zhQ!_|3K?5fU-0cq^J0!!XS8FB){N2KET62$n6Ae?z^LBx^2B*`>?3i}o+at1r##+0QbsAA;A`#8~HZh_heC+6={6tgBQ~Z0ii*5oCw;9ll;WVe=g10Thd5 zPP2ATwRgPV-c$4ZTq0xbX&!PZxhIObpljrqnWQ)ASv7KTYF-#N(w`T4ai5EP{}}QQ z^5gM{!+jK=Z<{;ViN9N@`^wze0~d~&QFp_QJ$Rq~^g7I=1AHBa_GIMhJ9pzABz)QV z0oq^xM8oVZtepn6d*`lnyPv?{GTefC`2LEUC*`?+s@E|rc-}kI?bp}&zVgav`i|l#ncv1D~tB>y!CwsGkzQi^8vPuN{6Q`Xi?awB!Cgz8xONwMi#@ zC?DguXk`1PWK-))!-yyPv(DrGq+FY?bE_b~46^H-?9BV^C+{xBbseu6QU7BtHmFZa zzn-l4k{Q#_!k<#Hp5)E_o1QY-qis>zV;y7cdvKi%`E@gH^xF#=?eM{3(r4U9`A0c$BX9tKQ6?3#2OlE@y5Ay0sYOPdKH~1 zXlhv=$7|@8)~}?uv6X$Kbe@MNxAEwBbM4C7WsR-%^!_d%X{l|#v$i?Dl3t+YBP*&_ z<9%AoR@AO+rKib#u(ld6i;Lgh*u0{uwM8(zs*ah|6fu*yXXIj}8Y!yyfrPdU0%dW4+gHvjWQG9mI12%H(g? z_L(xWz5IRI zFBkucI`1O6ULO76;)i~eTsjTfilK1O-&S{wBx?NzTEF&X4tJiP!7k6?cuLr8_c=T} z5jf`X4;yN{-^bx)S@>5Sj@3!Ceb(VO8Wew*M~R@v#!{vIjy^jfJ4EAKXEuMTV-xvbNH-G5NF#Q{{AfdE{D6w zlTns%IPQ3w?RtmD4C;AP9X>Y;Z+19cwPtRga5!BpWNz~v&VOj6imq`uMX${5Vuw3t z$takO2dE=nIu7jNA@ysRILAx-NjcYQ2kRX5MN1bKQT9Fz(Ht-B=lhucQ{b1QzJR=k z@n_Mb94~Eu7l%>yZ~26$$6YVeFNSGyytLh1TtrzvCgU9U$caxV{GY}JYmSTHKJMmm z9G-{v`nNHCe3!p-*D5*gZD2l7$2fgAEyqjudkN#4Tzk{wT`1hp))6y zsio(&o1LB0;}_<2+Y_$6>2V?WNvBWRp9Npw+MAAV(xZPu9+KmwWP&N5h?->9{97_c?^59Q9=xiM(G$y&M(CmM|aseq4?h<1^1Y!AHMvczPVQ zGX4te7Exb*krDDWho|Qq!KvE0yz9fK4~VOd4;me?<$BrkAd%&|Rj2FvLas%=NA5V`*pM(FK>!tl66HkweOgtSQ zGV!#3X5!iNAeHBO>G6_DpFQ9C^yxU3Nq@CIO&#Z|ahd{gkn5$#btaxY-%)vP)?c>z zwQ{}mxX$F0J>U6!vgb7)Psf2wJ~BErO8R8aYd#+t<(57@9(75s8o!x%IzDIO5{)!U z`g|x8;IrI}FJ7fda#b76Fgl~cZLHH2NM?v_~ z5PIs7Ao_P9patOzL+C$%`80@rVhFx1#6E2y{39Xst3uj)ZwNhIi3I7nDn!poA^qDN z!vEU5VE*)7#UQ!WA#z^;aS;7z%u_-5uS4kfgy{KTh#eM%@E;b!|Ctc}|AcuwNY9Fp z_C5^yQR?kOPeMQ1=7#8V5%LZF?xtd&+&dZ4UrR&ytU%8 za}b|*h0uRL#BQTQ+WSn1UwuEsAFd0DV-JV4cdzrGbPL>CDvhO(ewiEMKNp4A?P0J^ zb0^0B_SYf$Zwj%`ogsepvk<@fpAh{Qh3L67#7}-7LjV1ceqR*Q@2Al0AUg~T>95)l z{Kp~vI2h6|uZQ^66|nOtb$uc6^Lrum6GQk{hxG5M5IZah>EG&*{(UT@fA@s+Z%c^& zheP`J{UP|25Ig^Kh(EN2_`{SCJG>fVhZQ07!o-kv9SZTQqaow#>5z8CVb4+OI#lk{ z(D$i>{B}u*KYT01ALu)ML43XxVu#O!_{0B(_``@0`g=p{wkD+CM~3kKN=QHcCZyk2 zh0qs;^zQ>9;~jq|6==7Q10RKdvbpGjPLPX&gJyZ zv}UP1`aw-*dT*_~+i?OkYaX>Yl~rM-QOi~R+E z-r&Mt#<$RmJ}(-2(f?(GOM722xY(!P;9}1KgG;-PF)sEO{f`@5^gm&6(O*&@;UoIz zahwob^p`jxxadFJ(2M>B1{eKjF;4c>{zmuvXcIfj_>%cVaN$4S(2G801{eJo8ob|0 zgAN84`&1fS?77(B(k{A=qfPXberaNy?55k>s&GBN)*4*en>4tzm(~YplYWu*wi~?P zQF-2GgG+nq0dOs z(7(bs$z7}D9#gpFs8oDH;aX1*>#MX`J@X7Ma-)os-L#&=4KDNrj9Wbm6|VIe$GFu8 ze-o9Vr|_T1xYcK}!G#|0k8_*VXQ9Hi-O3ra`cxYJK3C66C_Z-yh&{f&<2LIjbbp*S z%YTHyMgIcEZF|QUT<8lKx9yeuoaEAYl+EVhg5&*^Zo3rw?E+%IgpY~8@Fb{}ap6Ci z&sXza#+~4E7$-hk`IvT<3g4peI)!WhX<*#iQ{sx?*D{^xY3-@?BtIAWB-gX{>{R#@ zd`!D;g=;+xcRf1c~oPJd&9 z{HKsWY%!*n{w;JUzMrS~JjNL9B%c*Ok)l4sNATA}_{`$GkM#en5My7aaBcsEj9dGc z8(i#3e`HRZwf|y+3;leb+`W7MUOuLs_!Y^ed#19jW$Gfr~FXQ<9Dh3kIVtML1TIrg+3NE`9dxLg+#{&zl!`+ZT-Z&bKkhgv(xb*S}E zc@|r6X&2tf<~H#|5plV}g?=*QR&EL7!e98zGPv-WWB3bw%-}*V>j5NJ+rNS73Ev=0 zu&3w!XtVeZg=@ckl5x@hHov;JhjFow;0F|+cBZA>5rzM)!lQZq3F(tmc%j1AD_pK~ ziGH2JmneGe{|UxLf2mSqaIt3{0^44pmmEO!6#BJHVC}F?;o1%ZjEh|1{~8|%f5A`ifwhCqL)Hi}_TykL+N>QU zAGUHOKM`EoHJSNXeM$^2^paOwJ5(xtv>mz`C%GT@Rd&Do6n~8$QG9g2pHTQ`6rbTd z?@PO+XawW7U1L<9p#7~x;X8#1_Hz`j<9Up6D|f!Z#cq=4TYV(Y7hLGumE6abKAj5J z`aEgmN|ikZ7yjLhi(H|Xd`xhm?^SYTEKr?;3fKBbK4$Ina)>^1|3c)7KK({d(MRH{ z_5V3s(aMb(d?TOF=e?CH^Ml|*U(WQ_|8-o_{@Hb~>M3;v7r7m*ujs?4scT`ug}#6ZgpbgV3E@-7_+RP|VSH*7e{F|4#;u+W z2LC3XpKX33^lOz|IVNa}!o}tU3C%kl@84ySAL&nPpFJ!`aN*OdudZg8RZF#c(?dg^r~u_4iI zQuGfIz?)u2dQm{^CGR5srxdQ&Ep>a3F@M`$xxXa1=r4JiZLeqMaiNbgZrfX|@C?6I zxYjetxacEI+hlN&EBTexb2HNmF7&O;ko44YS2J$q%J>poVtSJ4g+HHqn+z`Wn;EzE z=}@?~&npW5G9S}!I3Lf1{tqf#;^ZuYU(Pfn_W?y;pzuc({+G^EzhPdJd2j7gVsN3K z!??9ixx%%5q`gG{2-DC`>wmw(XYn!7e@@|L3g4>mB?{lB@H&O-_5bY(*M22Bi~k6# z4n7b(3cYCCzd5sXJ5?^Qmgo%kE!e^huO z9~1s#g%>OQTMD17@Q*1xrtn)8UZ!yABZA5mPA^iFP3%ef{6s+P6MRf~kHYH|E_De? zD*QkBn0D<7Kc?_43jd+Pw=4W>3hz+3tT7X`N8z8~W7_Ri_<+I>Dtw>9g@)QIzC^{Z zEBaq5`r`^08V8|1ZN%q${-OI7zb5=Cg^y75f1~hXh5t_B6t8I`J}>x(?pN+_68;^9 zFIM!QRCq$+zgBpi!rxYSlfr+h@YM?cXN7N3xU4Bs@pgs(R?&AT{7(w+RJimV74K2_ zw-tS#!V?NVsPJDY{AGo|sqlV<|488j3jeyoCC?%IS1DZb9K!!q;j&Ie_;kPSX?lThoGKCi^`u|dRaR^?n@H$1mSmFH&Z&G--!rK*IukbAjmt2gB zw};>z3jY_yr!xeX`-x&={2Pj1p64We4k=uo+a&xgh0F7qgg>wF4#odzg?B1^mBKIQ<00U) zP~npm{t<;QR`^W{7hfViixj>?(SKCo;*&&Qp>T=egx{?2*A*Yh;R(7NbhHuuE&ieV zU8r!K-%1`r^g6$lbq~U&jl@Xu1j2QGctG*j`Jv43M88DoBkLH1>wIhs$9cka9yL+n zI?s{$l;{(R{}M%CrEqx;hv=6oT;@B%s};UW@u^X`%!5Qf zAHwzcq8G7FnHI+jWb5y&jpKc*^(}R^HF&kFx8P&t@$wrNd_2Cg_O5ty)m`x>kkD&f z>AkPDt6lm0`en5(t=F%trO+J-7uFbTS~#_8R;Z7q1i?W#6Nwy%+GZEOjm;8)Rxlvd*n zysgb`c=2vaYh!hI{h(63&Uae8rFLZvUW|)3-Da!HugrDt!PT$Db-H8}PO5HPL2u*r z{MM%4^&79J<~G#cS%tFdHfXVe-Vh86)w}ki_m<&(zs=M&Ew$CnwOMFg)yf*YsCRj) zT-&p@g_Ih?$=cB8?JU*W>aW;W|vxfW>fg}eS2n?rtACitNm`)l>jNnpqC`y zS=CUFR}bSQ!wn780&=CSw+vHrGGB2_RaI*;3zZ1}MZ}rKneS$Ht;r@(T4xq2=FYLH zw6T6=`t8f?TCHtO@uh9I-(K77nllBR4M%NjYHDn5t*wbKYi?|73T$W~jcRLPdD`}V z?^roE-@MQ%(Ad;UFRl(8f2lfn0o`;Nr0vWKbeM?-ld zcYp>hx=g8&!n1TqmE2lhI`75>l?W$r$A&7r@!O|$Wj*sQ;s03S5-qW#}uwuI!rO} zhgyn~=EDY>DY7^^=_y>9%V84yTKqZ7Lxgt0a0QYTyiPyPaZ0OBeeSbKMGx-jmb%8a z2BZx&HR-?-WHIxe{xm}uW=v^Tn@xG_iy(^i31TV3^)jjgqlK77+H*FdLguv0;* zv86Sh&g1Ay3W0iskZC;wNGJiPSYK1Sv~8K;>zt&zc}-JmV^cFeHjzc({ICgrT)#4~ z?n;^|P_?xYN&YftVdVZUi>d!qElEQLTaC6Y!`C9}o9ghH3fCn@4<|-{*usniU6j=i zx-ei2*kaW$x`?ib{41VYnkd&a-ol_t(H$R8X4C41#+F)7hER1wZPiMgXR6~`nf|bb zX=Az|tA**JOop!eG7DAf(glj48x_<)sgM(pE%SfMlyA9 zjnZErG0oCNimM;BGYkC~kX@1~&^20DObg5^qE7YwakBq;luTAm_v*&R<@J77sga~m zGrm=cGB%^)0El5tjZH9St?x+gT03>dm&fj$Cs}vAc>3ho@taCNvcRvXoDD{);n7sL zyykZFUK8dyo}^OOhyK-Gy`%K=5V~S&ysNfGUt3}{%hdiUDz5fYzCa(VnS`9BwQ4E$ zYgW)cz+}N6gK-yN>CePub+)Nx%xX%NX;q1gwx+h$_|i44wJq^@Y6K##G}Fb?Qq0M8 zxf{oqZ%{n0X416T-niA1rn=uL?iW9RXF1sYPI15PXWC2$yWc79*ZoYJ;b8YW#r?XU zY119-ey6x!_cN`;!R~hoerqQAKhp@F=6VBvA$F6XSD|Ek8 z-R~6tH#K*n+ontc22qn8t^1woey6x!SyojmXz%QB`UrY2aP}5U`q;=(nPpg(%GfsJ zjIi@EP|u5*b2;VZEjjfrxbXD#i&K>Tfvq1!eTxz0!4LcNVklaBrglbsIQ9I)cd+gl zq`#~w9$|XfSy?@(Z!t$(=GWkzNAhXu+{%9l!h__?y7QAho7AtB^%8)f`o{^xChs-% z&$4xW0rf3UqAg>^lNb0kNq^Ga>i-9p&&#(yF@B4O`iCVc#6MuQQs~F?gY{p+_2s_4 zRIs|zhuSShw0*pY&&_c59|qj&e+fDz$bQcgF*do6;Gbp78io2n@<;H^0xh3RY2~+s zw7+w>FY!$Bzs~lz<8Kr9TaD=$tLsw$EJl(Sv;GIUKJ`CBMV9_IpC4?$fp-xX&y)LI z{#mxHn@~SUelh>?%`BADM)D~XS^NDGb_(jh=xC~ydC!v0t*l?5zQu?xk)U7b&kjrS z3-I5{zb+(x?PdA%iHX{*toMh+uVj^9N&C;mfUNw_hsZy{@?Sec|8EJA-^cO`Sz&7b zm;m`tv3w)O8z5qAw!LglzYxDa5ApxkxPEVn(m$~LeiAbN2l(ca)F=Hf!+&eP^8k=e zcKkf~R{*ii@^`6UD?ftz79-+LzKK=FHA(&z_;2NZ8k16x{39%X4%e5Rm9+--Ek?Aj z2gn}_+{!NskzaVJFL9s0OZ{3|^mpbKBjQ=h{3@MXliFW||5pB+XnaunUt#%|bA8!a zS$~g$p!&zT{t~Ikdt1K)xW$OHpY<=J6KtgaIQ+Nze*{2~{7P~*Y!ox~W@SAVQon}l z*XhbQw)G!IeTz|*Vy?J_>y!TP!+(&wjfa=_D*!?IKhN^ZnO=5Q)-OZk?`8QShvbjP ze=Gk!#P=ZimvhHc%+;Hf{{iF)LG>qd{WIBrM#%ghC=asz3aN3}$bOUX-`bDU_$>AR#}NC?;+yGM|l;Ph-i-|7nQ)6D+@#>&wo{`eBIt1k3N`ie&!};=h&uScv?lEB%TmxW4SH z{D(v27dH7dExOue=h!8`Scz; z@;`P{rp9iZf4B$ZQ*TmVu=j2za>(^V2iG5CoI~s{^{+;KL*k11*ZLF*6~Ar-B=x2LK7jaRZBI4#UhCH% z!-S;wo%nC-Ups5YtU|R-&N}vy86_pIWcu`JQ>MD3#L#sM7JeuvlD0_1`8kD_MH!+`+16-?jBBg@bL0)amfNl0uXnTU6S0^6qCldvoJ25ik6w z$NsipzZGM0>-yYe1>s8zlNFJn$%+k;j^_T{i*~=7JJ!kW&mB8K^N1OqC-44t*PFw< z!DEYZ{I*P7Fj#lK*G=u9_W13H>^{W&VtJ-5xtZrNoL|Xpk~$q|f7_%5gZ;Uqolb|r zdtQph$C9e;h3dFBWrw-YGd6hg?&m^nvGcsMu|*~y-yWG*M&C|eF}qmzE%erXTWI>W z1G-mDT`^m1Kz;L0`gMQ)*|a6?8)xj-;|m6h(XZm8>m!-%@JzoZ(T_#kN3IR#JV|}} zc4nWF?;hel{=ewYL&ML;2AO>q)SstvBQKo1JJR*$MdatXT_@*xTgeWGF7md*7q`+_ zA%CZKQvbb~>rHTNwqvcp*N4U#jj_YIqbC$&Y3lI#vGH_Hb&~Lvoz>ubmA6%}Dr;-w zGi0ls?}`nA&!CP6z3_dB2MHbrSlTNH(yjF3v$54Y*nq}RX%}p=m0}9n>+MsgE;+T) zx6#|na=MPkbGzQUH4pJ^h_ltH^S!~S7wZ`t8NLcZxbhFVITP>>_T6vhMx34AV%uT9 zSoNdxyvjc!<~%%tY;-aF;Sxs^ZHmnv8~Lj{_D8(RXfigtJu+tIr4wU4@plbhwHdEW z9h-Z}a^&M9tNwhdlIl?#;};EIbwA3G&J+lC2zI4D6T1xL#s=$hy>7_djdY`c&cSEv zshsH1Cvv>X0oZgL`!V&`#cS?b{c7$-6MhZ)L%A0_-4cI3RkFd2Yl@xZ!#>_|@|26g znB!9N{dl?n_L&bm&Fgx5*<8eD*mI+APv4Hlh8x-6rulv${`SnqvBys#_EK9<=XX_O zviVbT(a_3dv3y0^W z{j${fWyg7$vAocnt z_+Mkp(YP4BX7%bL@Ds!f*9S@T!P6g%J(%u?i_i~#8TEt2T!}BSC}jUbZ2U{;>#-4U z)xi0WUwR$d`P)k#zcd=jANt3f=mWokUk8nqqRY-^tfc$+q{Y&kmc8dRb7|U`@ zeOL(l&;0YLr^W93PoAm_(qaF*lNCeJhe2h?b-IgC{;$w~{}sNjNTs$^W4@=@b9kH| ze|{0tzV(+UEBa7IbNgGjMlg>3xm{vE$?Qkp)_*Y8Q}@~VgFiqU@C?DL1j z2FGJRIucuh3~5Udd(pkT!VRP z_f9j0V9QY~bX2kX{ z5A~joCT{2<+l?LKttuMoRg&-SbTOLz(9f$2hi1mBj(k5pW#nGKbncx*+(>+If%BiS zn6H-SdX@0I34}?!p}bY*G@|(t=Da^5Cpd)v)Cb~=9_kV;Ou zQ%siQUgUIzuoRKdSkNN=rGp@-FO*ymu^fg(A?wb}2j_u6r5#1$bpHBBkPG-zZ zm@yB(Dyh16!Qj&S7o_4S>0Jms>rDE}l}a?ivNuRDTREd5C`dr_D2&0pnQvV5n@IsKT@ z4_xAhjK!Ff!{vytg&0#9*nxBR{+VaC&AE=p$n0dr(GdTSygylS#QJ~dvf0HsV`hqt z_Z$D{4e)L91!|Y>`w$l70*B5SV!FDu{1od6jTwkWX zo}CT9?!3&uX80kly?h_YyvD8?k{NFbF+TJ-?J#Qvg*bous(Is|{&ei2XL6#;Z^Ss2 zu_*aG&0C#glRYRuih1*e;mCa?HYHGBjy)cKl=JC4BB*^u^UubnXXdkhfuG+6$v6ZV z|K-MCW`B%6Hh)mY-%ew%gt1q@u@|+s2;)NH5Xq%H?iXJ948bHedBDXs9q4O0rZMwO z&Yiz61E1)S_Dc(~ubVIovHdLCTXybtJKc3Jjq@t3%}Jl1I^}gyo04d!_8aP3eV#2I&$;b zv^Drzkgk2paGgZgEpF`r=kVRF|64(XFGV%?Zz#Lx#jajh;n?%~`qP9N%vwmTz(cYZQ|O$W+T*M*CG z9mMY_7RWJVxjAJI^tuGG^AgC|_7OiHZN15_2br0?$pl%;u0wy<;kr@U zqV?EN?(^FQSwXhie`~VhUN=tly8VJdd>bmgCThkhjjarS#F(mj40+TOnR!$%<|1ix z0>>rj^RRWg{kQpghFxx+>3ISDkup_zQo$D!TR5pS>=8>v}LcP}U*w@u*ns~V@qZKk|1JLC zi~oOz|LypHAO7Eu{}15*X8ivQ{(lz#KR2iU`^gWS+Bkf+2c5^}MOV$k{1c?x{sij= zKfwDM3TWOOjd`i=O6UQ-28MZS-ol>hj?K$^18XRQxnaDjk`+DRafsKu-Wuw!^YxDQ zy5-ukAAJye7q0mz#_@G{?}hLs*cD^b*)YcE>shzn3s4SvnKu&;&Ue?c)E9LR<_!)Y zhe~{5{@`fX{plR6+tkuH_t$L>ZHRTfigS^b_(I-b5`8;>b;G(x@&@bf#k`;Itt!R! z_G+xTL~otfQ-|y4=ySujM&EnO4Xjd|MRe@0*LuS@s! zVXR5vanFKvkP}2(dV89d#>R$#`&jVbt;ZJ4hfmML+Us2SI9s*p^{F_0tik2rUevMcV0X@Z%!)$9jqqk}R>xWP0T>L=i5O4ao;FI6H zI5ukl`N$=ai;rG~HPq-gN(aZ{xDeM20~o7B+lP2wgti?=A0WVYJG;GgYWh0ZE9Uue zIY^Jv8o$k9u|W58FZ8ALv>-m~>ys75kY8%zR}%3`$1hLi2OX3@=Xvicgno%fhMepQ ziJLoDBr6^XDJ!bZ)c>Inx}6Q_zI_&B{(jH}-IJkwyUr_|NjAFy?McNZ_`Af{ej1PP zO^G)}m}m2`p7>kXCVCI9?aBXNnm-sRjbZq?Yus+4r!_}9r#ZFj*}?~kBhd$sn?jE_WrH1>`2-zc8`_#-=2-cR(z$K@udNBOqQm4x@g z#vObw2XSkH(*fEjxEZ*r*kSd2lu;jy8d*TH~99l zJdBkg7>#9yq`2ZqFAvS_ z8T$97gZWv}^ z!?>;QhmA=GEg$jK#oDpnn4`!=Qu3>C9Ml(8_a!UvNJ0Vm-xosqtLW4IoE22Rv_0+T zG`C?cEs%A=F>7NF6`Aqbk65n9XTqHK5BEy`IpWPE8;Orau=bt9zFas8`El-L6E;9! z86U}!UP&?Tfem0BRAC-i`bfGi>6}2h(91PM?+A>kiW_^PL%fl76~lUj7tKAi&M4}N6xR!OBd6YdD%ZWH6mzz>itgW$ zAHNqi`U-61>S7!hqh7l1#i_ajs%`|af#PLoZg>CLjMooiEPe=Maslog&c_&~ISlug za&z4M*rE3%EB^YP-CsJj@e@aXhkIJrBTnxgI5j=`(Rt{X(Yr5;T!yE9ylwU9FB$`H zqdk|vw=ix-(m1F`|MmUXsi)RONZcbIvoP|ZWVG!Mb1iQRNXu-!u;z$C{_TAC@y_?qI>3 zxi046UiR+xoSd&F5U1uMp5dKU-Cf9wu1BuZfq5PFePL)pY}R#=p+`I3>vdJ-;hr^O zRMimL=Nx?w^)B{u9-wD>zFFa4-_p81wIBa8Vt&z=k`-5l#FxnS>^9*Ecyww%e2{OAw3R-yYo#eBaE*CB7vSR3zQT#k;-8j3j~KGIt? zey!I<*VXlSzJ~6JMKF%*G3JSP@y-io|H0*h;m=APdNgg5XD>L-8t!A^b}j8l+bak6 zX05%n4!UhLuX=d43S*(0+Sv~O3bfakGj+sZ5A6G@Cw#il+!1j>>w@dJo=zTX893}0 zeYkWm3cZ5#*$;hwgZ`82(JOcPa%oQT9>zUj#CNj4<{8AN3iV!eaU=7d^my*`e9YAo z(BIQB&W_~{-QAA7o7PcEkt)E z7;UF(J;byi{Ysxq>o+RI@AiMyr`eD3L-+WD_!Kcs1TlriS+?ENG1|q2M}}s^em!pD zBVwy|BDPu|)AxrD!AI)Qu6*2MACG(N_u<}06nQN@_i{Dj#n{r=s(#SyLc1-WK>hzI z-9{RJG+v9*&q1_1nU?xAsI7WjxVGLov`1rP8#xF6f}s21WP>WU0UW3x+PxsPwj8Bv z@fiySKacjy7=53w#^YPLxp?*`XF|~xONV+@=Wm^hYbKgU z-ptK&`5@)u8%M>u2&XpFy}4gw4*3nn4e3JH-u=jT@TX%1>!5Rxt@lHB!gHVp$*1d~ zuz9U$Z@LeI`h~8W?7i@ZFn(wpAEL1XIdwUsA85bL>v{s??$mRhdxp?GOM`q@?kiK= zq7o+`>z@i>-rt+bQCtZ5%GUvBsP0F;@$Gd@S_{i zzc)mNKXAhkZ|lTU!Rx(|eSVwB*T%q3K{nd?opie?Pkm2)>EI#c--me}ief?xaW1It z`d+_o__)n%TjH||2BE~3ZHSc{_EW6nd!!e|WRj} z4-Oej-0SBB+HUKB2k97j*4I(bdoQ`TxDPpX1bv!*jwISSzlY}CKEyp5!<6G;ed~=4 zA=iJ0zMHmhSZu30khbsX{OWj|V%!0@Hq`~c8V0$q<>v3c|2?tQPfkM4gy*1c_(1v3 zZ@8fMm+O#IuK&}i$_e?g*##GPFO0vy+uDU3^6{LZNB6&dsxtARxv4p6?)UsTiEOhJ z$8%0NvgPlvgF3Ja5iQiMDgYd8J=+|hStl%icZqiTsJcjv*a*=g2hV>NZdeejSTmJ*J z3-W|+0M9n!p81x!cn&T1hty_zuGIG-mxnwR8T8QZ`WxmB=6@|Rm`ia9GK%^6%`bu1 zSl~gjs=)8ND7V)Jl8X*SzkQi=(WB_U2K3+N4~)2ZbAIn_k7KR$>SC{JC+3zo=&G@w zF(kHT!borHu#w&y6DE3Hy=ec0k+Iq1Mvd{v>_Csy@CH(E0qi)#ivSBkO`t76y}Bi=+O z4(p+~<9Ku|n~k_VGg^t<;o$t9XymT1M=QO-dd`y_4c5u>@0-^%KH^Qyzb`jcSLZ0= zD->Jke!$hpW1~2(M|{6y2x5G`xAkiDdtpew7rm73_rn)u_q*f=q|bya#!QPNuPGv* z^9olb(Ej!W?(ODyPB%>()CX1nn)Zzi7y9eqr{?+3erMb-!W>u7>aPd3Vs5LuZLV8y z3*x!{mp)IMA7tl!>9u*qz>97*K0qI0D)nhDc>gPO`0aaRtH&dL&%&4)8yR!7 z6zc#3Ib$B^!}T!UW8WR^jm_@F`k4RhIpsTajc^IBt^NC{9e?znEl+%N)a-x8IG|_j z5$C#t>|6Ru_2m>F!nAF;a_zmSwU+UwC*VP!o{}z=$j4j-;Mb1 z=Y^vu==fzq_ie*{XVQHg?m^S|T@eyvihia18`mE35W3P=eL9^>Rx&NETPHDx z`PX{>JVW{Ef1|xVb_x2@??=K{z~)y$CtrX6T99-t#9Y^QTh1WecMi1sZ+smnm(6)k z_!>>*ztU}*`(7I#{QS8XGQ#FC=eJm|nvS^C#eQ4j{I=j|DRQAs%;CkjzSj4hpPl8) zl>5%D@J*S6U&ZriVw*b;PjvS~dvm-&^i_8&?o(6$*mxe){;H$C3^yMH#68Qy#@u)` zwu=k%^0T|_k`M1pLxgL3Ae&xKLF6?QYl%C6I{aIcQ z$ykSbj?5X-uqqi0gi9B`X1>RHg3Gx#@6x)|Frr+@AUbJXlHygx&-$QIFX1-fJ zs9x%=h7vfd7*H$jPxlms08^rg_@2}VI z;WlcMWl#S#19>~LshE04vB5K5_iW1K4Z8+zsSf;%g1o@oQm5>gdMkT?Rq!_3)4x+Y z{o>Jp+UoV0MtW`f-H`$Hf?q=G982D~Yxp$M7$3s~hmTVHwtiQ>IRuJZV;8ab0U`Q_K6Wy%w)cB_5NO zH8w75sBLL%Yp$-PuX9}6+Su5DHx<{fytbj?&K1|-rN(#ER<{;b&z?5DX7=ownbo&X zojhg6)LFBqO`cjZWopgL$+KpZOsSbZwPxz=Giz(dBRJEBdDU%^PgQu4weOBxHhipy z{4(|KNX)nR*wOGS3LnbZmiO3sk4AAy<+BLKR)7UhuYC9wld1gk(Z_~9I^2~ncBP(o zfc63PS9AIBkow!Xd>oZmX7Vovw3o|~JK*C%!>=fJ^3VH1^ov8c4}bW=M@Bq0>QPDx z#^L`FrrnIh%3D1AikPN-?7~OM28HDTB~2&j_FT|cI5llG%A zpjpi{ui)6{;g2pV+s0)Dq^slamlfi450}Lzcw}fdrScgKg6~~5gs9VY9F|v7ve`0K^@wS%fGJPoB78;iwOjCnn+6e1rY>q?x zSk=ea^Momzjl<~?F6*OqpKknPF^jf-`U&Z`$xP$ErKaSN-4}A%+Kj%D=s`@gw*&d~ zZkIPs*^>3RA(r`7H=m-$;dE)0xqaB-AIk)B_Fac_hpW?) zhqLg%a(G!5p5yTAv+$#?T{mXoFFKswY?Zlv+u@5cL7dHX{M}DR*;5YsXa+_nS3CTI zEWE(sxHD+BlTPkPgL>X?9DY$2{!@pK&cgSht8%=wT$cwiRj!vk-l-_p%O3AOp6&lW zp6w4lo^2l=PwPYHvgLZ&cA&Cc_h;KemEPxi*>>>hv+dyH+40K9v*VSIXU8ia&yH6< zo*l1zJUd?bcy_$<@$7izYn&cX=D^{xrQv*VIapBPBt*|hNPDlxd>5qWBO!7>6+-_vA$Um$ zPTyz1(vyOi{-*D?G!0B7i zqxAI}1psW_jt>fX>*M{y&JO9ktAp`}T)UtwZ*GkQ$0d$_q`>|f9?t071EW+vNp!TG zL_d!5X!QA;to{82r=z@dp6S-{fZYxIjZ%56TT2AK+u>LFOz`X0GO+)KB0xOV!T z=?}X8`fv)b;iFGDJE!v*w|0WE8IC@k2fo7eA9MPbruewEA)Fm?^yz%Yt&ITxPuK71 zJaZfO%fGmOOy_%U9SZc{cKW3AOzHP3N1x6okFW-R!hV#O&L>YW{_oB{*Yla@x%DEP z{nGWx8dSc)6m#Tj5I--mLIe zg@01vtNHjM@L#O(wFZ|fq9o&ZW+#Jwlfi|4GvlOxoR4X@OW_+8PI(<|)(&%g*x}j^ z3q$aP!nHk{6fU|EB>IzFZO<)=UfXj=2)VYkS=&>5hU9AdXgg~=h#y)zSU>y(>%G>rmruQ(+gaveYiIFK!SCVv`*?5tt=Hf}-^aMM zbHBp1owdLH9n;XRMA2*gXE82%@@eWDAA*ZrVoYH5pKoxX*Z!>IQXSJ%yF@pFbbrw` zuWZt%M6bui4kjR6$E$9I>p0V^aNWOpTxq?d*ZnK~MR=o6;(lX%OgPP{Yn-+dhSBzkN9bA5i#eKBk@I*JQU|g_q-;Hfw*$iwW2INd85*wzK4kVo#qd z-><}p;9|EOELZF)^pc+nF7%yBPi^O3g=_zRP2qa{%KdfHU*iSHKWVe=lKbtVzfXl{ z4wznW(X)_o(O>At8C>WmhsZ54{DqI)-?wt-82&;p*DIor$gNazwLRte0O9{{%xH<> zFL;yUqy3?kap5ES$nyn)i#}@&f1ytrTH#=F=-s#GdIw+V=Slfu_4 zyjS6RTu3}8ee^sc*RR&EB<_hFM1)*F34Q_i(Kd$nR)4v^6kO!eFGDaKA#g}?2`)DcGmNej)xtJUgJ8hewJxy zcRy+GyIH!&9RsNy-)#F9eFI4neu8bF}Pg2oq|JlU2^`CZwy+su3GKQb>1 zF7(@(p7hcFvq#}N4(wC7)>GzLtLFix7hL4_F)sRuNuM{k(7zla_Z7om`1BiG_#83( zg?_-`LVt{LvX5@>amJ-x!smp+g^y?EDWT6ZxX_Pa+{%?a#LBgKi13j-#M;^BAwoYf zM6To^R<6xMgpcGQR<6xMgnl6#gxag)OdYx`7&;0cB6_%HrIdg^&c_oJ38b|89f=Y5L5rted@ zrhi%Cx?f&l-1bYq!FNDDZAbi_C-&#l)VC`I7kWM4>3)eaKkJ`*UekI`W_qhC{*^pW;9 z@PXiaSr74ftEY^2!G&J?t?tKdN*_JGCM#UGOOGRsFH!WmT?xiTe?IlZ4ub!b+a-1o z{e@oaAh^&=d&&N~U7NY0_0RvW`|CI7*k3|_uKhJmwO6lG>3-DxQo{6Nf3dUV^Mapb z{l%Zf{z4z)1Hpy9jB(p9?F!favt8jjK6i%TdS1|c1{A%HpT|P*5!^n~Q`<-KcCiCj zPhA%aF73UX`G_5azR=)8U##S6zl|wek4K3=R?j6&FZzhwguz8_4dYhNI)e*+E8|w~ zYQtaTt~I#uNgDn_FY~|XBlN{gKyr2eihmNW{iICMYh1@A%}2)#jVBc!?LRu6Xne1t z*Z#AQaoaDw2EU5);{%L~9r)DiGq}(nWSs1v{YU%1_8%PwbbDipkG5NR2rhA(*JLb^if{P#8b#GBg>?-;T{X(Uu9={2NYyZ*f-b;l!_I7<+io({nH!1$wZt@(H zwZj&sm-Y((Z3dTiZf9KDEA%@IF7(ArKytO8gvEIsm$d)rIIsJ+LGjn)sEKjgE}0hu zuVTGdGreusT7wJyCM8$*?+%6Q{ykH?vT`LZk==AZ&R6^;CKIIfxr1qFCp5O-&o*w; z^Ki6n^LJTs#>Q=-?_he8tL-yRjceUs5C7i(JWfFOsZN8!9}p(kw<=uw&za(+ z=qYwihUmG;;6ktCr}m$Y5PfzrE^?&_?(d*+BDnB>(#RG1Jq8#0y-Kdu=b*xM{289> zbF}_Ef^pGDY; z?;vO+eYD*UD14(&;(iY*T#t)a6t4B}XWZ(4#NeXO0OMBw*90hXDJ#WrZxYmCT<5vHe!9}0>j9dN73@-HYH{;e17aRW4ge3+SJ_*BL=xYov^bL&L zewV*ZxB4WFT;adT;KIM%$QAm{1{eBmj9Yz5xFX?g!UX#oh2N)e$!CZ@q40f*Ui-<5 z3fK2Z2Nb?R@j0e&?I*_>w|;WM;16>=@}M7W)=%;bF7zW9xBXJUxRpD`;KJu}!{67! z^9l_v^pc0zeu*(X;Twes_6a^FTyiafHYr^9SEs^1!^gA}I}jgD|Ci=V-E9A}&6k9} zOtn|{yIjv&`se=(h0|5~|ChQH8D{wDf}T*=dHzi(0c zB!mg}yA-a+SGU4-96k_&A5plz-Z`#t&3}xV-!=V2g=_lx3fJ+!QsEhKM&Vk2$(P7J zI&SFvN8^&u5WSYG^A?TwDY;so7Zu*3?BB0&iGfrsc?-$?j-oH;`PAYy3fF#K$GG^F zuxc>4_)in#;#Wf7YH*=n%Q)$y^AMdEZ4@ThOI|_r35CmhTnN|tOFm%rAH(yG;G)mv zj9dLBe-K>gCo;X2JK69TRZ9#md?XJM{z5N#h~Ppmd4-j`(C`;NF zaG@_|0+Or8SJ*nnd_}MQJfU#iUp0(Nzwl}59<<;;V!xMbJ<(I>W!*z?p_lay(qH@A z7Nw8&H{nn8Nnwt?j5TY2;V*hhm9=~z`0rW&B;%r|&~Gxh&}%)l-L^5k@E1PY4K93k z82&=vVQ`_>^R>2{&abpSz0AkzbHL!jzt70!)70OqiG76rWhSupf5q?@KK%w4K1UcA z{z5-saG`&laqB;l*I9k?;5W2cJ46jG{D(7c^%-Gsp_hEm>Lcq#glm76e1q_$)6D-# zFn_Cm4dYgSn}>)#l80FRZ5|@@i&+ONcM0QGZo=Rf=anUnX#l#KKN8+KCEAdcppMwpSxX|l<)b@N)>9dxPX(#cM^q0RKCtT(=>kpFWi=ISFo8fg#VR{zxozbDTJr0=Z$Nv0QE=*6$B{t^$ZKH@)CpB+Y@ud{!47`c3!%JW4Z zp?{JItUd=7uE&e`t<~pcrWaiJzrwi4b za&_D&SM=I{S{1JCvzl?S1FP-Hdbr@y-XzmoJvSL#=r=35dOS{6_R;#3FfMXMpIHX~ zF8j|M#;ravgA08byl6|VJJ%(&HOiNS?`f^n-)jlqRp&*R!YNv0<~wg2=pZuL3B zxRv|5;-me?Q~jd-NBooIYCG6`mD#55qlrG!E}O3kz4)`}DfHT(wOkvAg^$ExE7!(h zp)ce1TDf|>X#4B&vR;^Azf0LIsqnoD*ZS{cT=bMGy#^OM9AI4Z6#71c3w^)gBlJfM zz2L_fr~VZmrZW8;j@G}J*K4i*a=%G%(PuK#Tm4H6F7$uty!LM#2i9@}t=y!+g+6Rv z+rjj9-0fAkw$DDs#SVO$T9*)9^@my&jL+&Xv%QHnFFFhIf=1T=*Qkd|JumE1xYo0iajU1~QG$!yJxnk9 z@TvQdA{`4Z^y2?k&xu^o+HEr9B9~87f7dDaMR|US*k9xdz1UxHp%*(_eG*)eaBa6O z3fFd%{8sc4x!d_baFM%%anVQUI}9%L#~3Gl?iXV0^KecZ;re+?nSTj?$R}~XO^SY# z!gb!I+qH%1MSrQX&ETTvcE)YHb{JgfI~gZEwcIBew{rIwT=;Y|Zsp26E4a`fWO^(2 zMZ;g(`?A4>&nqEvWuCQiUkj1@y5TQ!j~QI#9uJXw!r(%m$MY$*SI4VDg+C}lv0tcg z-7n>g+kUAuxX4}1xY$8NEHSvyuV$R|)PEPVUE#gL1bcZtmgtu%Tt7FW_20*Qtp2?Q z7kv&eZuOVvPXrfw{XDIvP1&l_m@rT=>5hqR;CF7y9Fj+kV&2_tuC|>XZxIt=zq4)$q0Seb26Jl^x49=^#^&bMsVRT z&l^j>OMB&cW5I=fmy)afVXwkB3KQ&m6~0vAGEa#<2)`15IMeMWG39!T;Hkt_6)ZwM~*-Aq7owLSY3uI(xI zv3f3KdeKMZiroaC%XXIQebGng7xRJOLZ4vV>e;GrZ8x#A$YrwBdnN@J{z)bfxkA6m z;6lHdajTEEr`BgL(~Df;zt7;pzn5{V&jEuA{qu}lefkxy`>{mfTF+UGTRrC(T%HS$ zF>dvoZ*ZX(Ke2iyn4WO0=U+N5MDE#+3!&Hj7&b1n-NgRZZU?ztf(!o_jeYnu^?p&Y zr_lE^fwkL2*o!v8b-r2|f?w{FdqYs3etUfS{tMxgnTB>t6#W#1uT}U|g-d@CpY&VD zJ#U|)7vCdjK;hH*n06yrf8sMk;Ux;6sc>m8(TfjL@oGgsThVV<`1=*USK)uHaLG%F z{~U!&en|KS6n;79350)8;d2yzox&x5Bl?)a*DCr_h3``MT!l-1MSSKdT=E>kWo%Nh zy-G4sup}Wmp-)XE%;b@y!^%mACE7ig4&hUjWxA3@us$=4fWNI0G~siGL5R~ zLMe&k6S&p*0(QK*wz)OVU$b7?Sflu^ti8)yP*H*J_}-PF2%S%A#W%(2E8kL( zUQyNBP~Xz(O=_-fsB*=V0zUL?KAUZb)hC55AwJ@}qIPAg2g9I6XOfcnY46iW$s{C& z>2u1h_0`MIECgR{J`LyWQu77t%uh*&bIPPk^?G$<(;E8Pb=8VmctnfqA?FF{?><-8 zH`P&5s+-b9{3&%K)oA#R$x|N~H~e+~W`B*`5F2IatLAC9Qk-=U7`_TbX^$Jz^ZO*Zq68dB;W5>>ee{btZ9rdtzTJF+w9R-x0ltftZgQB zn&@lXuAd#H`viCT9OJgRv8^dyUlVU=Y+T;fPO_nGx@2Cmq*b!&V@ z{YpgT)$)<`tj>Z9v^G{ZHlzr2_qH~+RyD-$YOZf>t<6%|C}qA`AFiGug#9ogyhY^; zZldV~4zsdtg*A_nRoe;*3h^$6E89^)qw@xQ&AxU;{Prp|;0(;@>+s>)y3&=6t+kUr zeA6x0AnaFXQ5)r&8e3Z9b@zo{;sQ%7cZ7htNHYuyFYHDd~K*P@D8) zhs7zTx74PhOLapd&ZP6I8)~ao;@p_iG>`^9Y}1@Yr-Y|zTI*K`VQpRfcA8Mmz`v!o z84*6dGJsM^I1QE2w;BPcK1--##ROsnxbW@GwYBLC$enTga>qJva)7e$?TD3bl+L@p zylg>5+?|t4uc&b@koGJ96l48BNn!r3+8POyD_q#uhN6>V3s;4{KMp)Hkj~Zq=}| zbyBrA2}7{8YAN<>R=E9XQ>5Ce=7u%#8VoGW-35E{3bN43c+%3gl+(s|Jmo%3 zZLR*iq%b1PoV0XdYZc{#AZfx##E3%dKym%ln)u@BlV`^lEUrWxK|Xr3!xqiExjbI6 z;O6q{=X>K;PntHHey6(MDel+(Oq=Ck_dCV?x}Rw?9qfLmxL@}(ZH9y0?-cjzex^-# zu=}0je%;Ts5(m5ADef0PHIquF5j@TPPIbRie8d$_b%pMCs{5VdAG^XSuF(BXb-z>m zUvx(!bqjUplt~UNne1rY?^O3Y#r^7QZ=K$s>+wtZ^nKHS?VCRK!(o|axXj4dx^PC= zc^PQtwW%)R%bOJRkLRDheqV~xKd|+?P~T!iS;!YXQC4^{FluL%3bBpxciv|J1nDpJ z3QU8otajA57_lxUf!O4JHJ#EWnU$Xl!v)Egb%6uKL~T~qpTX2(M81U=pQRlnAEwHZ z|3_2~k}vm7hM%GRzeoKb`P=znCEb3wT9*8ugMX0x*Vrk?ok9LjP#z>-7Nq*QKDD1* z+1me`P%23N2)=$UJA?eMp?;A3e*WW>mm!ljl79jITlsBRp9zw`mN6acj3R4KMBHv*q=FGi9xBJicxT{&8{^B%Tk|N9nSrd$j*% zGs%0>WF+~M@o&p-^pOAf)jDIp-XwnQvetXZFJG&($oO+DAY1-(VCYu<269%UT2p`e zD82k$$ZzXJv@05Pjy6+&RQ~JnZ_97;h`-0j>ik`LllZk|J%ao;M#Lx0OS`1~Zvbw~ z|0>GoR{l-YSdco^Z}P{M^;gJjV?=$hN#~LBa{<}%{T}TvXS~jTx$GJbj zY!NN4mW@oURE z=^;PoGdhbb|8zjM{IeeY@2MP}pXb$C0bBlWJo?|LdFe_&4SJBM{%^*=Eq@u#yV*ZR zjTLFtW$ORq$ZzXJ`O0_FFWRBWPx5cYzb*d-kN9)yLzElw&th&JIzRM?KSR58{z1fN zN+f?K{%!eVJjx%Y#)5Q6ZxX+@{81j|@Bfm{a^B=5`9=7*<)8GBf5FJ#a~b>pi--K< zyS3nIv`6G3ie(mz#>|y`HFY7F_{^tO)<^K?XoB!2*MCZTU z^~d*+-`0t8_P6W&G(Mz6<)4RtTmCSFyUE{l6Xn8n+-2wXXU?O)Sb`i=fne!5R<%l{)VB0)8#q{%vDK z-24rlMaDn6?`z9{-lP0`3v_V)D~T zk!)FaA-|0gdG!-Ilk9)X0NL_8JmepzV2KpIO#k<|hy21Pb$)sMvk;Ii{}m|jR{pVt zI)D3R%Kv|n->v*5PwV{B{)=7YKkgBKIw@Ep)#^>+*Orxw_~xd6hFNSO*B}rRJO97J zzHa%$CO@xNVFm2`RKGSxv?rg{IZBNEsQoR$zit0d0C1B(hJrN`f9GBwrOR4@{BH8c zen;mBp?{!6^6$dGE#L1k{&>YKCh12WnQU2?JmeQXr*p~j-wnu?pN;EWxAGsNV2w1z z*iRp&m-QOtw{;@g=-=ub$AtZt1G44+r-%O?FVXq8UPk`EA-|ja!h<^hkdS|`i~J`? z>+&0S)0yzQ%q+I~JBvB1!`o}IL;I$=Ci1^$7SlYHK=cmhExG7MoaB5A zeGUdC%nDOZr^z2he3FUn&)8-FRuR>y{O@TBUgtvoOY1v0e~v!w{3ra^mQAOE6l{?A zI*xRtDM35`%#zZQkVu7T`x=>BT&&I%70oWxd(~On7B9Qg?@L<5=loFFg5=5+HDfu# z!smxp=^7TM&PnHwjT;=nx?esg9nBVA_?+c!F`kju2 z!^4&RINukjdX?y4+H84#D$aA>GTP4w_g49QYpbzbx+>FIzyJN=${XJwK2+~GapFPp zvEKX8XvohU;k>yWbj0_K!04Va;GG%Y_LZzrv5JCQvz}Nx&ew4+klC|s`;^1mMvOZA zc&78_e#pr6WuEOrzNJM@N6?q~^C0+CeLisb2+om=;hnw{m$vx2-(BPH9;ym-zx~OK z?hDIDbYEKNbYv}C6u%G{+4IN1h@Q6t89na=0zGd9oSvb8uV8-0wJq_0zo0Y2sjR;( z+*|%8Y~*v+zdq`z>jpOO%DQ3a4zf4tiT@P+%d)lp`;S%~ei3CLd9R_Ki5C7;aBg^b z^6)}G>M78Du_*&QM}YT8$QXsX3U*&Q>U3O-x;iu3iRZr+jz_bcLl*)g3f@M2y%X>! z>g-+cd=LM(kIfm6u#!!*TShq@R6pAS!Lv^XoywmCa)*YmapH6S5RP+QycWnV=<;8; z+m{*cC7r_W4;Syl)F)xVqHyW4OQYth{mgKDlT$J;>NwB84xI;K!*0;z`NEs0j|<0t zGddi9W}$Q9OpVjQb|sts8uny6hDHv}3%@s9y#JBUY+3+Y_QT%FW*JU#nK+IGoZ{2h zgyT=+5^#T@YKZCJE5*EDjs25OiPA0es&Mb?BZBj$`*LSxUgh+XUinv{eZ4b$i1d2~ zJf=ZME;H5XVU&UD6Z3-EN(Zan2CmojwmKB6@MXm+cKAA5(A~MxZoe*B#|v&quj32L z%Tb>nN4?&O`dy5AUIf2c*o}Jk^qYYx-~%1=5hvi=hcdDKX@+wMF(!U9{?DPVF}%ob zMA`oqWyV;v<0-_dwF6Gaj(}6yG$P#Fh_atY-1uD}t7n*E5PbL#=J+7a<@&E)>!5A^ z0qyuXfq{48fZwQJIm>`4B9Y0E#L zd_I)ZkMaiKzZu<^0!{~&Av)SQMDZmA-7^u_sEuC;_t!U3!lm@D23d2{7%R7`2UhW9KXw#vwJQ4benJT*?zS9 z`SAN4h+&W7Tq)W@4%))o&^OcP6#vwpvwQwHCqDmLCq5l~i1sMTgT5{M0q_Y=2*-Va zSjEl{$0|-E9*~c`iaeMbjE50BeEwL)QE~34$JXzm2bX2`Kjv=H{N^$+a%Hm;mYao?dqxF?sCL1I8*x{QIC`QoQ^#x1NAA-k90bI;t!sE^|aIBM{NA5|DmDz zC{G#e-{-FyI-MV@7(i?yefm%?|McW>6t+5V>Vtfv8t2hNw&zhS1s&y~m~&zIBGk`9 z)YAggR~dZqAG@gj1_R;v$PwZAKcU@?@P*^25o2CM-*6@{s;AG%eKlFnFLb|yc=Yxs z{ix%Bs$;5KC#1_obtTJ2b>vpQ7vYcpo$^t+E-YV&GAw`|sb##h<)to^Gdp+yeulmx z6MbyZ^jGMw-weXft06ZFeog%|`E?fjdMRQD_0t3Jfn3yIKl(atliVJ8{9E*yzd@h* zYh@R*j~{)SuV4UnCAq^#b)S2&$q(BGVB-wvIRbVXsrp^q2WsB{d;Ago>)Xip4%rQU z_Tp@+#|b@g*m?*u-h+&HA>$(Ifa>i6(ZT2Z#hQ*VvUw}~=sx_TKW>Nrw4>hJccH%j z8vnn=f8aJ9X9oh4(8o0WFcji$0qPFCpM|rZ*FKWM^ zisK;4#^-lH2YLQ!bxi%Jrq@1pC(6AT2%tXv z1#$3Qgg)+%Bc11ewbWTp<1+MnbIC^GkI0csnIoKe;lFvXyB_`I{L$bu!l@iY?0o}ub{Bkan{U$EKE!Dnw=6ZWH;B0S#^}#} zk78rq^q`813kwr*@z4_V>0PtKaT*t5a=dA}FYAf$ADnn-yYpPg7yDT0fHQsGCw$#= zea`0MyZznyh;8M_0~sCVZ(;lZdx3X0>1&T;-a|X;4+IM?ZTTk^3$n&K9cQ60jq}zT z9Ua84@*`E7a-lo5n`ORmFY$T`W3U+dil@vtSB(z>PC@R=&U%U&QM9+$!MgzaOY(mD ztw(l!`Ja2HbpBV?kzfATQeXdn&G%)!5r&>HSZs{V?{)r|A6W zgW))Q`%oMD5gng`J)MY6e@gtqa;TZK0=sVAOu3v1i`1~3Nvx$(YqTVQrFD)|)>zxp zR9_p)pEs|lxNuJCEuqzs4Ry7lrp8c9ananOlG!yy(?c~4k;XM4vs5@#G;2oTjFM1( zw6(Q)!)-HXVtF6&n6aj*X$=<8Hf?OFshfdC;4@pBni^`Nk^07&4GoX3yA{hTAE~Qp z4b_y+o>N;|T05`i;aP=6b7z&5&Mur)Tr{h8USY}H;-cC)vubBOJg=^9x-%9|Ny+z_ z3dgtgL%!?B*<$J}o?XHA7PF5+sg#f3u-DwfmQjGgz4TE*o>h*eCtpMjKM^dfjKvDH_-|-Co*Sq~9?^D|J3)uqnhFiRjK7 zjBTP$xct12hM(cQIc%S*SNAB)4JUE(A%&Y8K>|l#gA@{o-u=14)lbT~zgG}hAT{ZC zyNpi-ar9k9Pac+C=T1h`!jENB|eO}RLSt!1fpztwic$31fO2hRt*4L!rpHlSX5vl12{KKDEahCMY ze*l@^N!p*=!xM@=sSo?rW`!s1#+IUcAbw#trY9`|_;X7Ec%oYhs8wp|X97;Torx;o zq}y5J>2}t5vRrh`DWFzI@lkRcP^*@b$GjI%Esu|q+kmiV5+yy;{h7`OoOFNIc)CAp zJl&r)o~#!-<`fY1!WeA>PI`M^kNA-8J&rTrfiFP4yV3u_gZ>uCb)&!9gC6r_ux2tx z2*;HE4gceX-NFPSeFgvHg`GnLBK^Gw|1i#t7xl|=mcH>b-bvb-@e&U{WXYtKI4~&$ z*LTBRUJ1WV;DtD*M0ly*Rllr1;nF_4 z3_aU{vv9c>pJ7fsZs^$#Owac~8E1OFH%)S-eGV8twmt_v^f_eV%>S^#SuX4If`v2v zO9r>~IVo^iU+6Sdvh~a`INOKi1}&WBjxo5c=U5A8dTt9g{}Lm}<`XtJ={b{?!FH9| zCq8)suNFAVBB<5i#9z{H61b#4WpG>WkO$8GX_xDE$fIPJtHI#J|5i<+ez~36_#Q)V z^JhP_`FDEo4;fju-KGg#+M&?kw%v*aF6p@+u=QvA+jzT&+&v!rI}J|n#+G)QBJdBJ zecFV~zHK)yuWh$VLr;3L&k_{%z}bIndu}!Kgcq27+QiI0;WwLo+Uzp>ww*by5-#~X zF6bqnLk1`P^UXeOUNHN%9r_Gz+u^vu?fT+&Ve{$t;B(%Cj|2TE+5Elgk^Rsv*9y%> z@u5jFPSOuKw$M2*JG^8v+ID!^;3SuIAc*y(cMr(XFVhgtG(^9Mevk;~K9-J~=?95$ zd9~ZAP>o}bFOj%@i9VD-9jD*y6P_pV3j&`i@Ep)lBKjNkuKK-2;L`*i7PxF*%>w_3 zpy&RV_}?V(PC+mI^JRfg7xeuCm;Qf2;L`u)Q+>&)G(0Sb2l^Aw?V0yK@aq@!>lXAA zx%6z~!pfC+0+t>ytj9|c@RT?|Jt~CTZjH8p_S<>d(qesx1)Cb6o1 zLlqu@ta~(q7dq%dB{^2rH`b@4+C1jTd-J5Hc{V+bfqrmQ>A4!uR!8u(xO$XX$e?FJ zbxFJ^5=CW#z(b*7f+6dFo$wWcj9+kEpb*372eQ;T5t7lpHIZypW zuzmvA?Sb87#tr&0S@~dWx+UmoSdEguBvi*Epv}!qEv-p^G|J0M7V{z%4yn0Ormc1sZ9=A@Ku#zAw#vWl<(~y$FDM!hJ zjO4D``z*%6ACy04(cAg2L1wr7eI{S+W%B2F$mi=UzCLF*wtSigurZ?T!_7EKD@Zvc z>RU$OKS&2iIeO!~>>;0UN<7b?kJ4rRZx8unag&!)zTqrba`o1)C{E#7BY4Y>NmQ~}Cf0M}{ z;*4f%=YI&ejS*?P8MLvVlKx}yZ|na&FgN}88p3=!DUvPgAkNtsk#`ySJTE}<$K&6Y zPvd+y`F&=}EQIqi*|PouCvA-ASDHbnEPpm|TmHWQbCch1b&blPzrdU-i4o?;Nc&t~B|1W6Rp$ zq5qJ{FRu}Zhn=6|D;3dh|Jh@-#C*L;{Mz|{fc}m0%Q-3{zTM>iSR$w1AzDhjJ#Y34 z6`K6nZ1O*qgw!7Aa2oAh#{Sr(q(pw}1lJ!E--+|KP1HGavBmQz zQvrtX&-uAsmD`3O7z%+gtZ(i-DAbLJN73|GF!xc{h9N&SS) z@BOgkr7b`1ehX_*cnut_*BQjxg%GWQ8{wSrXNODjeg3ndX-@ZQtdT(0J@`*uKRQyc z|0u)OU!d13W;*`e(?d>o^tuJ{T;z`+Z{)>mI#hnFFLUE_1Zzgn7I_YjW@$4+mPoq;SDx{^v!#6DK+yOR$!Y*1cs$!tv?b%SvC*$e9{e%ZtDtfe+NfreDH(<%0cpm*)Di)(!wCTjlS+s#N-@n=acYrq=B^ z4-u;HCJDn6fXIRKTG*VzAv~tALZ5S z?Wmsh8oMyoHM*6l%&bMGcyT5ETK(?gxU6^bLE@|HTdx63)c3n1;(eyRZ9jC=Wx(hn z>-vb)H66{{ag>i%L0t&7yU zzg9~AoAlLf4~>X#dqDefHTH3D_E7Z2f{tt-*3Q9KuB0qSupXPrc%^oAv&Rwm2jS8l zwBB0!erD_9IMyd0qL?`~814;hT8y=d4%%I?CxmtDo$z(iS^AZmto^y^vOXxT4(m+9wR=HKA9qZgEu+d-S7>nn=Y))FNTg+d$gzh zdEU0XfOUTGb*xY1^`d$`=K$7iP6baY1M#LZ_q{(n$F1yTSW7+#yKbQLU?+PQGd0Wu~=_Z(RY8{oq0U z$nZkF#yDl2J<3P*Mfw~a;XF?|x1s->j(VhZ_L=bcHmsX2K-)SCUur-+eQJcWzF~D% z@9qMp`v}??)<3`b8dlL|jZ5~qpG2QK9qZ3e|I>b1fcYjy+!lXtg$#OcO3uf6(?#qm7&BkA)?l#902cZ`U~g3h5~JiE}D ziFLI%g*OE;W|#>52eX_LlYJAH&Q+3q92>sGc-!Cf9?l9I4T^^2~6Bg z&lu$Ta?a*~56R-Vf@{9w$(M$)MB2&T26=5X?jW1NHe}l@v=17md_s*=CZ5d$KFK$6 z_t!t?bWe;AgTJHt-0B5M{iQCd91Bnmv?J05>uk@4-x+qbd!#5<(G6dqJorx;GY-s* zRXpu+Zac7?Lsqj&|Uz>|Mo*u~AP52kVlX(0QI&Axe9s{6#7vQooyBf!D2PPNn#aJqL zl=EgEU8^8&{A#4LK4-LZ;x4Q^rx@}M;`4Rz4LzoqTtNJS@S$Aab!Ypr?j6tZj{B8= z@>(D0e+OH932|X5#xfKW@Q#8LnTWNIpucRJ;dJkWZ{bKJhb*TdL6C&~r?W6x^kr zx1ndT9{J9i(w_Gx&()YS>rD@x_b*D?#BE$F$3v=57T2u&OwM~42e>_x6Fk1C*TjnA z=+h0bNpK$Vz}#te^nnHDIpOp;>sylE7N#Q)$Cqc&u5W|QmcXazy0=utmut@sz;5M% zYt^`Ze~r^|TJ=X0R2yl1WN~~Cd}m|h;`leIAAe}cX4t>&Wc@)AH%sV+Wos&4O$< zy8T8^8oQpJkltP{EKhw_=e@*O#QV9{?RRO}`yqEK#`$MaZy$xtKK1tSq4{V_m`txM zcyHTRXiP!<@zPP@&4YpKdZ>TAA9g6fv$vl@|8^98@(zX{GC>O%G*m&dCh)(s{a;r*hrm(U)(pOxELqkHjkWdbEKfcgHIJ z%In;USjA^O&iQceQIB(Z_i5SG=Ptl_Z8PZT*{O>j&rS`G3ZEDbj5rZ|Wl=o15zl5) z|NQKNQffaGOQ_x4DB3^`e7zKH;6mWqo-dkyc8+QX6VGl({A=@1-2KBHx}SX!?S<@x z|CI5}{!e+2F}JVO`g{2{^zDGY9rp817gc=F&pMIJ=&Ot3_5ZXO{eja%V@wCnKl<|) z#BYp@?#RP)bQu|14!-fx^ET@GB>scIy6`+T<;9q=eF5lbJQP6Q4CKW#fp|_Z2hR&? z-^tBz){n*<)czXZiKo%-iB|iqehyllM<3J$-_6~QXZ$g5MKs^=Pu@*B_JbE~JCWZH z+2m_<9QKG00}m$sY6twP7j?_yHReV6@tZgKt8{I~0{v@CLocM$cMtae4XO__c{S)iZ51u50X{vD?@yB`zW12q0 zN9l(BPho69=OgI9Y#Qbh23-U`Bl)m=;uAKyY!|xp87#rW94}O5qIpg|*A~NdAMsUX z6#IR_BwlUy2NpVNoZgQ z?moJ|HdgUZILACm7yPHT+j{tehmS`dj#XUp;=LwTk&S#G$or94#puh>Y+s8x(96)| zt&3H}p$E^+*z-+v&tNBFAk71o_<#oifaYFZ}0}@oiZ_A zLK~Y$a~@Iae!!9u`hEblIl3osGhzkZ6X-`gsm2&fw+FPZ^|6Z9)ie)3q2VVYdteS>-(J{mmn!b0c7Q;5sK&W2L-MJ?f}=y%Muj+!rn zAHIfbwQu4Yj;;y0ADE7Q!0WoS?6b+Tx#{~Z%8P4BJZqk-#<>N7;O@1jZ|pdWvDTL` zx3%qCS-r=u!?h^xdvsol`yM1W6LSRUgQ)+Qi0jSQa_}CPtDQHyv7H;ZZuhY}!-og2 zcY340SQH<`SnL^;OUIXM5x=hMp?;(~*C~!6_QWt|G4CnZ(|?0=h~7OwINAOiu*K@n zVEl?W)$h+z?I4Qd!8?5MEtvbHYsBc>(Y+G#G|UyJcC`U&DG zapFAyjNjYRH^G_1GRgkiz>~_|HQqUa_tlJxW4sd_8h#$ZExRg^@h09eTN(Ws^uT+E zhVcHL9K<}_6BhTV^q5HBuecW11J|iOl;nm(&r$j zcH=vJun~=ONZvPq4Z;tCPVncMpACN{h&GY`+29kyJIl|$f%hYP`uD?g3VuIo-W!c& zak_`_^WP0uzHvR?-&3)$H@N?raZ52a#QRe2!h5&Y4xYoiIZp4Yz#Q3VI&-r!)pzx(Yf|_s&j(WZqtv6m zeK+YH@uilx-zsl4j!%yYchfa6`zF;R?^h@4FZKSkuESK!tsV#d`bx^2%E#+|Z*bL; z&0V;*r1En)`CiK);$sl=s?;7x4?1oe=^Vm+5WI6Lw}-}YSVE1pMd3K^Uvv!Pont$2 z-8G0gQ_6#D--6fhKWX!0n|S^c_dyGYS2f-d`05?uuk291!*i(m9Nq&|jA!K!(Y!6a zC#VzGTVsz2Z*GZ?SpRlQ)X&&)> ze^;zxqQ|+&b04r~;k(}PefxncsZ;lR+bQjI?^1OiA_^a*I-q(bd-tPE5sd5DCXDeh z#~UuYj4d>_CVNSY^5Z{coV5S%uA~gfcr5j<8XI1}A7dw5POw#%rw#f?F~(BuG@{q( z)%%j`^hP6gp24*X#nDa|KKqrQCEFwQH`0ILV<~F@mk8cx!H@ZpO%w0V!#qFxPapD! zuEa*)`_pXXX6MKuvxehn>Ux{tu0_4MxTj6m!kL&`r*@qGAnt$TI{L;)nX;W~;}c9Q zqw6~3>-JoNu7}hZvK{Z$Vt*mMI+1q(Z5^?$m*%_J7X7C0t^PuWT5EW@buCAJcqKMT z)kXSFaM6NzKH?Jj29=rKt0?t!t7}>JA=oQ&=Ysg^rI@Q1itVe%S zNqto=)_yt)8@s*__uY?Jz7mEl*gkBFE3NOmBY#@?Q|cG@zq)YG*!BUg?}7h8J$*<2 zR6T#x{YT6%@!IU5nd8bdarmbJ9f!a6k{-|E{aY$tR+}+m#LSm-TZ+LCW&3le{bBx| z?M|_!TC_LvMIBogKo43cr`Ji7JU{C6YyYUrgM2Cd5#A-K#u{GN!*pFkaZmCb4(N4p ziT9E&#QloF^4^In7pQoue2nfpVN5bH%XvOx?k6P5hWY=Lvf-HSDWsGQ^Z!imV4uqN zX_SNJp7HM1Ls6O|!5V_#sNh_iexbOZT^^}E2jA~!pW8)teFY+;XTZdMfYD` zGhHflwF&OhAuFIJ2;Jy#*+=+WV{W$M~z4I{F_2Mhq{*mvM z#aI8JOpX0WZhxjThsIFHP`|q0r1f&LcO!S`l!Bzz5K_uj=Ha* z@dT~epV;&0qrN!t#5*#TPgMV4eCfZMc?lS)o!);7e^>X2Bma`@Z$14RGIxM3Y;0`v zC_}xmjvvHhHR$l(7T0>(|9^B@?EAdW7`;)Rls38j7np9VdT*S3S_@KJhC`Y60pHi%~~GI8ymh4-WTI%xd?tv$F8KKU7x zmDVQESR%L{bADIpu?64vW1Bg+UntvR%%$xQ9Hp_Az9xym51xL;IdSCb9SOT*&8V99 zkntf5Ytp^g#J27mw{_=Y-WKO8Ngw>D_{jeM=iR>Z{v*A8XLD02qVr>e0VH`^|U*+9limdSG<%hKBsH}I#*k4|5dEwC6Bfg`Ojqe{Im2LKi0bw z*U)qyfsaEte)=f%R&)EtA1@9U58^%KuVbxN7VtOF$KzR%pTC~9gWj2Yb`WdbrsBH{ zq${s&p*4^c_Z{4ia9i6#adGHs=iXlq#47$3ec2DFKZ9*JZqfS30P-f+woFP{+d|J< z?Z4);-DjZF>4l`fj=MB}OXG?`;Bc0M>n-?*s4e0&IUzHtWkqdj~l(jTjM7^0o8LLKfkb!Yo5 z*3qc8K)y!xufGMM`#SAwrvEUp3GY5ezoP4*4?f2G)!3g6f4e}jY9Wn9%scRpVjKdy z2Yr}x9}#{o8je+z_dne-c%#$XKgxNI#>v5J@r{bo-0^sxPhCq>{G#y+)nA{3?U9+JM>HbhY z&Ffg>MTaox&Nhl6u0%k)Lty7*@&+T@~pCitg>{XEkr7Ir;M#>Jk7T3 zOw@N$o?Ceae*dTGY}?5Fec2mY9&N!3PFfo_R5eFhHq=$sv^LS3ZyM{?G_}^_?b`M! z^YWd>$hx#s>mr*TZi%c}hu8fy)HSAMY-zTkx|*uy)~bh_TGmBcH`pgP)NR;M-_%&u zT3@rat~Kp!{hF#s!y3GyrLM*EWLhS?E_@@EZvDo(4QaU|4b5pvZ-hlQw6vya-n?OL z)!MpERqL8+>(Vq|TerDtLp0KoW}up;rnU8TPWjzs3!VGQ%Vym=YtGy>9r>L$Rcl(B zHa4d*uUnT6MOqp*SJg&ZBQ`UrnFcj&XvKS(8f&59+PbR9#@47JscCB5(Au&QFVMkz znrhNKz&dSvfpyx&6D*4Ks<#Ld@Ai>)uxZj=#HL8Eaf_l6Z~Ljj8`@i&s^If(rbzgO zl{3XRtaEj(>)cpzngUWQr*frX=rLi6~B!l0>w~Gkzo_f}i-iL9LFr-)L2RepGM^yr?-w@$QicX!^ zXE9&k;F(&L2B~~_pMUaw{P=!=dLzGn&kMhoGhdS{+t9lB#Scx{x@R ztaCbl&g4DiaefTh3`zNnDnn}iTg>?(BC>2iezVM+KV|CG&2LB#{hofj|A_dw$k}7~ z;5x$f{2_DxBIURAApWnI^U1cCT8<0m{CUdnB0oEWPMGgfxSTIG=evl=<$R?%e~!*W zKOG-}DmsJ!wVLx7GvmsL&yW1Nrf{5TfcF}j1GM#MgH+Z&L+94c>3qLAU+iMb5YA(4 zuhL8OYn4TxasQo!3pclKQM?b_ah9iLdYb~Hvmy=unZoZ)!=F?5eQEgB>YX>H0>#A((vmQPRmwOQ-;DnnhN5mOW~Pm_(g@&W45X3xWebB zf;jrV!pqX|uPc0E8oo{8i_`F^!atsdFI4!FH2fBY-<5_>RQTO#c!$DO<4ZaB8HKCL zPr+*xZeGA7&fKB!aRSl1Hz|BV8a`Ix6Vq@4yuTfi-cB`ry5DL%y&g55US5r-msjKI z<<)q4c{QG1UX6Q|H$Bd1`t&%X@$@*O@$@*O@$@*O@$@*O@$@*O@$@*O@$@*O@$@*O z@$`72@$`72@$`72@$`72@$`72@$`72@$`72@$`72@$`72@$`72@$|T%@$|T%@$|T% z@$|T%@$|T%@$|T%@$|T%@$|T%@$|T%@#VBhO97Yu`n#CyADc#r{sK+f4WI3SPxHY4 zA9%a*Sr&B1AI7-Zjh@DqZuk=(`qMiW-RQ6Kp#Q#yK3_mca^v%t9(?Zbkh|9dKjp#a zZiGlTxhoM;-S7+#e6t7tiyrj9@UX-0JorrYsIMP-(Er-Q4pTkwuVcLHR^Cz%x%UO! z>F0XzdBB4Y?vJ?29rnQId(_t$4|{I(kbBMp_j%aoZ#?`H&)>P~{|_GYU-7_?dDJ6a zH@nr#43F~u-h=N*`qKSsI6JIV3SkfHby^dIk(CFr}%-aPo>cqcgyIdAaCVgK>Y;sm{#bHLG2rGIkV z#rn`q&hg^wP->0^^nauHC&v#j8ID-n1p1p3{4bcj-zz*h-aBP*dYATiCpk`|ewxx( zP`~4yu{Q#e-%9|YTsktTKjS62#Syeh`w%btelUXCpn(y zZ*fdl^_v`TtGPqSUa0Ev!$u2zvz89NuF8v(CXGcoDdD+E=y{_)!0%SGcdfE>^12|$ z;8A7IUmSyA$k3E(opL-EgJ^2EFLS1CSh-Q=9|b11J{d*ABeKY#F`FEkSA zn>P<6q$lqkOaNXf@Dj7nIM?*;2A^orhb^4x%MDI)KW+AD(=6~W34D{lrJn4MtPf|2 znH|Pi?kU$wLV11Ymw;NmTNt2OrrtdenZJ!GQ zm-ZP0Kci&p$#IVL(NxKMON_Hz{+1H!!}L=Of5w@zr}cXP=>GJ(-^GUop<~T|%yGr-wb{zTmj(fH~+;(hz+6^DZnLo!# zmdpC=H9L$mJ;yy;ZkNTM`5drt=EL!g`7=GoH^!Nsr9IkC!YSx=^~ws59rf3WrEe$dvR?ay+#9qqIDGtTxWKC+!kyUF%- z%J3n2X@`D;vs`ni*BRh|aW2=OA+YUm&cc~q#(C+_%M3m9=W=mh7`*wNRpINRUbJ(7Y?=mOYpIINKxBZ#v4-2`nye|vzC=d?x?<`KFua0 z;nHrBUh2ty!uqh>YO}-mPt0+x+1h$WEu874K2lG%tF7lj!-w!E%|30UpGf^*Ff^ zT-N&w0+)LB8QiuT+lO(MYum?UcV0F-ww`~keYhQ7sePD!kI~1jm%Se4-DlyBD*AnOJY~ufjCQ-jU&L^DPAf1ro z@XrhSR>Pm@*9x4+x1`Swf%Ev5^pQA^Z*6@}3jSXZe9jA8`XP^R+21(JkfCRs?R?ST zY=5T5I(3y8XZkT>yej36H8}HUKG_z|e0aRg{F$D|+l(_kkDtjtQtmAlf9AvEYSxGO z6dQWx&-8ddgi4Gvec0e6SH_1*flGZ>8l2@a|5X;w{HqPla+$u?!kNC=;I%Z*t$)3+O(eVV{LF|4xJ3`aEmlOn=DWwmydiF7*(Cp=W%&X`kHh+xoN`dd8W4tB@=G zR`z!?ex9`CnnQ>CE9TGmpx`gZ|K}_|JbpfJaOT6fjKh-8G*fP}=Smie?d<}W^~>|? zY&Xub$j~#+_9-_w>%;WRES%|AddOX6@n=5O7S4QXE&fa&wQ#0yHn{CqA(N5tjm!jF zwiV&hKC283+kvxGTlhzeJoa1LKJ2%QGd=sKttXE+2$%l0&&aj)?-F>u*{2Qr711{c zocd8pgv;`>pV;NK{e<;rKjCs|uDGr@{26C@IUbPhYpaJoF@xLs?6Pp?-)6~WeIB=P zrr&FD+Yb9I{>-P-!kN#r7JsJivT&x483J1_*SlTbHbc+&9fmLa2HTnCa=c=k>3RG~ za;5zb2z{6*L5l<~{iNLBtdBW#mRb0xjh-tE&iXKYrG+y+w>w);>F3-Qh{a2W57A3K zj~U$7^JNQXxyKD|>-ma>GyN%p+j^c8xYXyo!EJrGKV+Qw4_R`}p>xr~nLfkV+tw#X z;Ie+XT@$_3liM}x!*aP@GtP4D_|Np*-r1f^FZ%`Qhv$TzJDCZ#a{MguX=40vNYIxH zoa>rS^LUcV%WZ^k9@i26Edoq>T=0?h;c*??f$4c%$2gal$8~H6rsr`T<4n)vH_}Ji zM~>g5K0JP7xy;`lzcGIvzp-4Vx5sZxFUM(8?kmPVw%n5z&U{W8+?LyK;Y@$d;McXfS~$}Oale?7Etj8-vCBKw&@;|_vJGyRH^;)6J|yJIdf%$m zNz*50aF%Nh6Zh2_=j(0mM{IpKCNR$QvcHh_=h(~qS#GDL5A%7};LM-tIi54l^al+A z*#)Ju4$SHW3upcM49@mp`j;%6>0dTD z=_%{0U*NJ_g94Z3lJQ^af8NmB`d_ec)@R7zw*D6_oar-69I*8d30&$g=T)TsJg-80 zr2d75kF9^Pg|j{-2DkOU-NKoEk-=^Ky9EAKu0(AA+0_C3?Igs|DeHbyKz6lIMZ`~VcTt`h{GHM$$a|+&M}$rg985?0VeecJjNil{A?o0 zmGq|!J zD{!e#m%(j)4p=zzKWK1UpFj{eu?H{KpvFw*OcQXZn!AZGEN*T-FQT z537=`&n*_t{0j|k>r-suOuxwBwm#(om-;L-xUJ6$3upe72DkNDY2i%I<87Nik6mp( z+}Du)a$Z-Cho536!IrOW?Rr0MXl%JWkHPp}$f0ynZ_@5-oU(AHKVxu`EBo;wfpZxN znr7tKdgdFP^)cCR{p|*~^~@1^N`IJQa9f{{g&#J2ry1PVC*Q)E zzR=*dK8pk{?e^#DiEkRHbftPS{gvn`?N)B|x9zsf!kPaHgWGniv~Z^9YbD!m&4!+E zX}4;DOFe51ZtEGfaC&}*QiI;4wF{QZ`ZN6|LvQQJy4iY8F>(n1y2(o$_J6{g1TN?6 zb_={g@cEj+cX{A#0j++o-^~PU&<^;JhY|@I3;jmq&7v*I64F#P+bDUn6jO9)S|+ z$$bPJ^Sf0D|2_dGMFo8$gV?qTe6PR<1upCBg1}|F!1sAnvh94)!r9O9(hrrme)SR7 zjaWF-=Np{L6=7m*R|s6{Q)zHpAHE)8ocXV^zA)ni2i4+47T#RL)QCw!AF+sg2C-_4Ouwr$=4Tlx%m2mai-5P z<6hEJ%AI13pScKpy}8kN<7CB_48bw{YeYHaPQVxqKbLIMeeu zpX5rvT4ngy`czwTnSZT?GykZEJ`EPm^qUNB%iU`6XSp#8XFj_u{!HIy;Y{CdaFQ$i z`B{NWf9Nte*E{n+VByUFpuySxOn=D2nf}imCl8?bStAJ*6F_J*6Ea&SNCvFUz&h@VCp=Y2mk-aHLU9MvuQN=VgJ*df_tC zX{I51Y3EZWFX1t>Pn&aQ-^Lx#QL_2S>tAVqo);o|iI)gIvR-(ehwZPW!48I=@qMOV z78%^GmvRed`brPED=q#kca?=RpK6Og)7M%!(>EKO>>$g_^NU_J+Mz+<(%+;%OT1ms%lc(I zvwaL%;yu}nf5gmN?K1?n-8wCt>AMVW+pSOF(hvVsyDbxZq@8O$aA_Y&ze~_dyK#9* ze`&W)L(ldxhl%IN7{9~VjqPCD?SRS1IMYi%m+kjuLr?lhyTt@9%f9478Z zFuvZDtJx5+{!HI$;Y`2P;ABr(E@^*RE-(F82|h8iPaD?9u16_X`t7qOuU)_Fhg@D3 zalq^_-e&B;{$SgI{gZK~e?iEVc6deL(hj!^T-KwsPt4HJrrPY=c4!c|w8K7uOa5G5 z;uAA8wCOYZHvi)S|F+qu&5*#qEbwgbr9^zT>s|F561ddU?oT<3SAQzU?ee}1kGDzg zSC|R5wL>>$f~(BRCU`5dxv*8i}@pXqsAZI|~YAy>AGQv#RmVo2ap&x;1P^>oZQ zk#W|O*I}|gtY^^BGtTr=3{LgZ!Nl0gb(kDu>9kxYxn0n&5PYPcud?*yEY+4ijLZ9p z($8ap|6egNw(@?WwA)?}xqO|(c3@VW7CqbNSxZmG4+?!`{T>sztlyIYmwKKuIM*ZV z({FHFPkY@a>oaK4Gw!uMlh@%>y-Pi(nD%YA(~!Y!J*QbX%gr~qtv}zNWt{1Ygam--(Qcnu51_N2gNdn`9J#9#KaD+L}i`?TTl7|~07 zlc6Dei`l0Q>qhuCfp?mHTP}}JZ2Xu9y#v0KZ2B<*->XT~?-YT{@^U{;d}4w=Ea;{F zD+KCa8Q?lb&tf3y2jrvG#MQ|5D}{VCIX^`|F=ePsJO zWpKNF^;I9!n79W1@iTfAk z!#Kx(;`5;3b4cjFO5pthmwu9+p^1o(tgjq{bGew+6bonjhYZeoGW|3QXZl43x8;^w z{F%=(3uivO-pQ8B>zx>9`c*=%Y^Tivm+f?`z#n2|u-zr_8iBV9T>9HS4}7f2OLqQ* z;FE3kNq>pUezsN6%lQF$pPI{J+qqrHtrUE?ui<+CwecJ7``DhGg|Dv}XZmLi0m+qi zenH@@8$pEvm;Gs2;4!mL8`hclOZsXhii zIZV8_gz=Ha5Bd!O+l}eZSUA(4H#q4d#yjK3m`y z1zs%h989w!jaeFvRBEch=G^d|+rRNzAbzf0geP9Xl=mg#hfiF1VCE$CMY z{2qaC68Lg~bH7P^RtWqhL4U8n&j`Fi;Jgl&_}nLO=aVbS7T&eEvT9x3x|-(A4!-AI zwFckmZox;otD5m~VCTO3mQ~%i_`ds=EWf8}LtSf8)w;-r*18sasCu)r`2H1DEACqS zDP+Nky2cuOxVpBgdE@Ga`Wi)mF9#RRrfl*gpAp{_rtfXz6Vd8J+N+yt1?R@P$EsQ) zkKtp=^^cNH^u6M`O-k~j`Zf6A_I>qh8kaQILxM){UR1TPawR^y{Ft-2qC#zD5eT2r ziqA7UGg_MH>((=7EUVI*%(&clj%U;)zIsdysBlzr^R4lQdVKx6CR$gswyM6dN*&E; zscVQRX^OY_7P=`be>B`8w7!=7!Nihl%J<7>)HJQ5&!%&wZm6qi(ce5rog^wb`PJ^^ z`Knrw;sek8nRH7%DKYh9*%qN)j#OeYH+}Bfe2d-6D}bwj;cJ>&YBx9(g`zEX%&DrWZ;sZrsBfPWt6F?@yuPs( zhz?h+h5*`C)kGr6WIA%~hajXlhyu zaAC!#R#YxWcxq{^O&&s3IwB1=7{8`tZzCkW>~4`*HRweq%(b1ic^!8L-K3d&{~xY^^uLOQK@6|#tqSgeIAB^a7fxFb3`M6(0@=6 z*s!^=HCjjJTL*85tf>PX&QfWynIqkXa`y*zCre4C<7YZH3&HLB}JCr{3^ zq5d;9Xs`bXT?*DM4C5jY=GvrQo=wj81$@ZYOQynvJ5XN*`;b4nl>cG zt7w8_%VC5x8pUitq)MZ)WF_fZ>(?=HU9<{KA#v!|^i>RRscLkgvLr}KYNpzsg_M1{QBaq{FC+95gagAzxNib5k=4R9BZAP9~1bU``#IFs$~ex$>Y?0W0Se zmR2oZS&5cR1674BUwGe&s*1(;tyr>111gj)Sy8^Yq6$7hYB??x*Me0}m%$}!U^;@KV)z9p?3ZAR`Pc`(|Sfnuht9ED4QAFyu zNd2mx*~JQ0zeVa-{mh=NVD($1e(_T~qj(m8B>bFS!%1H)!o%AQ}=Z~iERHvt7KhW5Ot5VP5vMeS25l4iX$CDE0 z!il}q9dp^2051eTIR9XRQt#OL|A729MwFXYYWibFVVawza)Ml?9J75f(_MbP$+yVN z2N?1+SwBL4H~C>R>BaYRN&X1@+w%9oaBlW%FqLwK1)Hrc>&wV*V?;V=ZZ`0G8InH= z|F-;2DCH)f=j(Z1k$6(FWj%rXHb!)N&CM4nAEru^-wyk_$>--o$C`Q|o|J4^yOH0< zh^{T3Kn`ldTicw$T!*RAA(8zj;NO=2zdigvM$UqiuQ!QbTh^~V z@^_j1yQpv?+4=jC-^Pgi;98w&r71t@KMDV~{`Y&xzs1CDUKgjirOUe4Lw?Y_Y@toa zrMX?wHI&}H(G{jSHqt^aC| z_Z5d74|>G^lJz=A8|+Jo~GqC?s`ESO*Eq~BMem^-265o&0N9pB% z%|rgl4xNMhPm+Ht{%!d`LjAh=-wV@p{>%0Mhmqg53FSO!7M1h(jpWb7zb&8E0lCR< zCuc<((woGuE$jQpZ(~G!_^Ucgh?pah{386@@~3;W|F(}%F4*7X*GK8HXdSDY{FB^p zah?*%r~9e4{7R4V*XC0$ltXV4zqYL99_2sz4V~q@$w~6(;NO=2ILhZ{|0&aT#_(mz z{}(uK>qI$^?bZ2XCO^ri`@OdO-2mL=uPV^_`M$G0N|*Ho_8b<$WV?-Q!LT8cj_oIMp`J0j7t^Bv&qVse8>7#U6tse4M?n{?X z_qT2NMIQ0@777+fmy>^sNBnL7w$3l@Pxs4h`9Jh%e^X}Y{9SsJ__b~QJ&*PmeNtzU z^2-3(@}nN|Uo!H~B_!(|TYim){P0tnUdF$LF7m(N5&sWTutehZc={;4{HO0EO90vOS9^@V#+t<@#iX1_wyXy|#$PKA>P*K>ezN~v__yWnhke}2 zzsM|Vc}d8oU0eP>EP=9o7@3RXy;u$Z$sc>5k` zXdm5BN_vnQJJK}0N&Ip?2B?1}tdIe--EQ)mW|TO~`FZDHCCjO33^L<-;aMg|IE@k zB_WXt)Altox42lHDJq#=I!o`uQgX%V0ELsb`AV)FMSbsQ#z)i#WI3FKQ9 z?(GXyz3SBJZ4lciUIEb`$Soi|i1WE4ob~;apSq5ZQ_h#;yf1k^--%V^mOH(UO1W5*T2>F~!;$M~F6cO(r zTb7v;|pZiU20D10s4l?(&Jsj>Oo!gdbojQ%q+eSJ?Z4W!W zZA+bA7^1T6bLKpBCVl$@**&KN6KKS==fd*k-Iuo9(+&MQlr2p8xek0NJK;`)sWWWR z)YfM@vGLPKeDQ&xFLQLTLDK{a?^3oagUnz_xEHacSk-B-vwlC>Zm_&JHxuAy{cYH2*&Wo1s%NTWDks(X7h!+$E5b72TZ9k5M^!!V44gQ7 z^T>6t-#BXBr7gkki%pr`@2<(}9;zDM{q`rvp#HDwz7+6xupdPrcOq={y5Gru3-vpM zdM3Nmf3D;7KKA29ajctvKKkmS_~edoJlYuUt$!G09pQ|NHaflCsNd*A%9eAYsOLcp z%cI{}P}=6?%ru>k*(nX!taJ|{amC1-qQ-%}O2zRa~T$S9fX%*pj- ztRI-;ROb1}A1A;ca|_M{a&>uTq0D!N<6X0yLtMtr*%T)x^lZDwiEsOsub1TY6>Hl> z$tEa2w#Ct>@9ISv6)n-kmIFiiaZZ&V+vll{qmQ6|O&o~gxcVc`rHMGs#y_TV+R@Fm zBUHC%;r}Z9V|uS0e%O9J{t<%PpZAC3d+`52ARK?(7mh!N|6kz$RbX3y?LHoPBM-puMu+1H^UZ%XHye2$KzzA0TsatU z3ciTxtAZ`jP17^8c87equWq~F>HYQa@MOs+ywEA0OTLG)O?P%Ae2e0FzO$<$&)0Tc zAN*|p(FYHcoa(^*S3Ap`;=xhjcJC#!BU;w@dnq%gJ`f$X2>`X-(Y-sV)+!_S5SlMCJnT;D^s znm!^N|6^cE57kw^FSt9p)QN9Jd8E89w3+=!lQzPTCtDu(f7B`72K#pf9vo_$I`qT( zrQ!HMjnhHpdi@z+cNk^M4La+|m&0!jSLS9o>-(~u%FcY`gRHN^cI0Q|Z&UD3{zyJW zzO@fq@;R#0M_$ah7`+E|3O_2(cPhy**ZQ0es*gwNqa|D)rI)dL2>P(iNtZC{wYtD5 zCLMj)|0elBMYxw}sE$ddBz_mA?;dybE=W zzP6}8%c+c@9{NG2+Vu@+v+&8Mah~m_{BsWK5dPOU1$klHV<;D&Cmiu~{d2dXT|w^w z#2Mzd7IyjpY)WOoWm>i??^4Y>mW$Y7^ax?!s`t6k&+wQ<$6kufxqqqSZf+U+CfG#g zp*Xo6v6O5_WkWns^66NW>0??h`H-Zedid^i*o9&S^e6fl`3^e4KoVd<%7^{D}OD&b^1&LFWfY=@=6H&*3?5zCS!Ur7TX)TrP)^9gUCnk8~>EhRx@|-!Sg_K%L9h3EO4GDyYutTy&})TkBmG=1=2jYTFn`-%I0Yl06yy#U}V(8O9sbf0kh!LUuSEm{>q#+i8n=AGJwAA{^KBpfeaD%O{X2a0 zci8t9_H+I8mj^rGAp6pmA9ufn7<(z;bkKExGbS9Tm>0qLmuyOLAX=dHq}cy+)Mp6i z(GT~&g|XMAEiZPF+K*gOJGh}V{J=QeQhXz-n^pX!a1e4 zgjPp3)YXQX8bd9`MRPGxQByQMRMQY?ToW?uqeDfrW)#jS3FSvyTbnoBHghJ{5EG9X zYnqzYU}b&N#+I5odYWTqYg1DLR=C$U&TMFSblt636#GbBO>3y8boQLu($d;_H4o1! zESfv3q;z)Stm2|swet!~<`x&#&Y4v^>*0BIbyW8lbg5s=J$$CZ@ooK(@A@&h3gfw( zpgB);X1YExKSNm9oDZ2TVbt&`h19Q>fx1+Q`4Zh$gV8=E+P15`H`wC>yWL>2 zOnfhtWe|^ALl?vaniCy!LpACDwUJ*Bej{t|m~USFt+7vx-d#8QR5(V_R{Dv;udz_a*@-ImCuaIFPfBgfq(EXel@YxSIO%>uX97;T zJvFX`>&)Ue;G~yV)2I8b#?$Sf@pL3**9bU)X4x}R%2-On|i z?&lg$_j8S>`?6)r8GdGRBnLQ@W(c#DTIo01EEbRDov@PqDe?nZXkt_gqA9`HxxB3j01{_O4~pg z4YYO8Nh>Ih0eKo*R62u-K6C;_Us{-%)}fU+DDS)WUMqKH<(}I4z2EtKl5_6&ti9IS zYp=cbpR>o=#>vVi*y+=BH9YSO}d{PJ>diOsa z{gDv-b?_gd>X&%@G*qn-L8`vQpdTGy$KME5?}WY{q$59d2`WNcrs|f7`8%8R3R49+3XW zx1rAn6@R2g4GZzZ&xGXno)G$pFf1y^FNTy5pET(&#&0$I%l7l z2k~F7{tCGxRQ)YtimyTL2)7#C1Ko`O*7;{D9t!_*XU|kzl`^HZTO-`6cF&-U`OvqU zgoYt^+8bh@heGJjh1lo15I)@@eC`V2lM{l+ogGqfTm0v{4o|fU(l2g9?nbB_i`{Y@ zeX3m(n>_ByE7gvau#tWilCL{)U(zzEJ7t9UNiqZnoR$ymH8sMm4))xaun;QobaKBK z!oMB)O-Ik{0@`zBqWr)aVTlbdu|9fX5Zy$=8Gn4MD=6_}r-I%M|@= zg_kS*4ux+~c&Wnk!Iut_s~(XD;~1y>&hRAef6U<0W1x124r*sKy^N~_7y2ruC%Mf& zsr%oe@HGl=Q+SiY^`3l~JL^A=GQE_S__K_kq`U;DH5_!z#JR>_y8k^2uT{8=xrlzb z!h02cLgD8axB9$haH*%~6`y5_kBsX`Zk@s}Dtc;z`VYhhI*7jBU%LNUjEg?Q`CgQ9 zTJxvvkgITQhv5p>cF0q>wnM(cmnnV5DO~3(rf{9FNeb8b!n~6^Z28I_If9FwiwwQk zp_p;9PZ2muoGf9S{8{4^=jkASzTaQE|HX()bP)bNf9d`oRQRn5AI=q?=+`PdrttSG zJi$1X??)8gpzseVT=sq=`VT6+MbY1_aM`Pd{6X_y&-8?A{z-*v{u>pp`R`y{>@1?& z85cVXJ{;{M9YW7!K|bR`FL)K>WY2P+)cxP5@Y@vLtMJOVLXkNC}Q8{2s;U zsN$pPk11T!A6I-9D?WaH18cpYkH-BxkGI=GMIYs%HRY>T;kgRe@npEdbv(&a_%g*O zU*UBMAE)qp74GMM2FJ-sOi%gJdKM~tx#B}>iRmDEt!I(KwVuTa*LupDQ{tob^z%HP zzm9vg%!ll`+^gXJ`}s7VFRf35qSyK~DqQQ+qHwLxI)!U})-z7}FIV~`6|VK!sBo=M zo5Hm|n-#A0*`jc*&o;)T-bp;)&bZV&!FMxG^;h?cIusw>&w0k+($Cqa_-p!3gA08Z z<0SXp%5KLMPICxyoKd*$FP&4k*8ere$qrhd^9C1vE-+5^(exJ$F7(l;*UZ{2mvJk1 zxWR=_9^+PSzQKil6602Gq2Vufn`Us~Q)KuHeX+rXem3JISMRa6MByJ7COFqBT$f9N zaciFjgNxio#;tu?3@-FZ#;tue8vdeco53gWjm?I?&~Gug(C=W}%569Nh0kt-i~b#k zztBHpaG~#H+?LBRh3j%Tp>SO;CmFZp(qnMR?-|Bzx%3)b=+855?Q_BKm;7EdxbO+G zJ%yE$(6=*gT*A(a2>agD_r~M3C68IoHV$|#rh|ASbsQU zaG^iPxYaX@AN3JFM>30ZuEMpR!x^`F<{4c4FrRU&=Qx84{UpY%p0gFM?YTtZIu0}{ zTly+Q;R`Zgt3`@;@}YyI~tyhPbw<^$|JY9Z5*eP$|p83)iF zy6;dp&H2zlcri1TrU->h(%r=@%qD_rJL2^Sx9xBcFqHEXd9?7^UxwzH*831v@2 zw~z7Mdv2?I-~9K{cB85Nhy_gTMGQ`~P4cQ*Y(a;ukoC@Sde_M6nwq*s+?9=e{kET) zg7#m;9(%OKC2wR&o8ApXG`-)i*zfr0Q^}Two<(Y#y8)?IuUdt5XS9Ky+ua%4r7l~0 z@4a;FZYBQ{m~--Gpsrv4V06T8^Dz3pi4!zO27La-)ni9kr-0wgPnALf%l43Xuq3C4+ojZBNxt3Yjo8Swk`!6BdcdxoH4XLH zf7I<(ifxOr)n{`(?eRN+hBs97YXd`Qn2%dh7(&8qEQz=d`BSA+HJE$H2P$i@!)ch) z4BBc`m!$JKPoZH}u#t8RePDId%5*tQe^XL6)rBXNdpCq{U+ULlR^Ho?W@FNU`;4Yh z8{5D3*Fv{NsHS1V4x(|sjGcvD!LhUT|Mc!dRmp8TN-I9Y%uT+pw+Kxog>NsbyLUBh z`ssGe9H}c`+hAo# zq}sWCMF*E&-MYrr*n<;+4O@T8CZeHa;RMxd1X>P#=pS3rry*~T*_pH5P`oO(B0rc*7#q+(lN*@(MKHK!|z|*BKXZpXDz6Oe?OTUQI$M`HKEB|@`>C!j8&GhtKK3)1P zoIYO!^V!O$=T($GwNk|sb})U6&vFub$T=%S|87n&ToUrx%D;s2vlx*kcrZ}J>8Ni_ zQxzgt^7ZYE^!Y!*>B{&lCoAh&q_-H+ZfE%-hvd_c$IAa=h2KsWc8%+-%-GYpXjwbME@*aH=);o6JIN9832nB-39UAk@U;&=SMQF{7ql|JVnkcWgH^E;)qh$&E&K%kU`YEjo8>Pd zX6mrA?h1*2@ig+U1s^Lv9^(JoSpFg%Y3d?aML;{93QZK0$bg^9#5?Co5}BDR`CR z_utd+C4S$V`ui8S_ai&-uH~b|r>V5>1-uVF`C8;HlCz?U@>YaBAaHJ@bS2RDieT}l z>3R`xytBN4uCcE{`w-CP;yunQgT);~^JlJSyeA9$h|o3oAb*Q<@V@WlNKQ^Ys!=!O zuB3b5i@9HCk3*Nkj?kl?_H-#AJ#yE)@~bDu=0x5xVsiF^oa`%unb~+(82kI=B!&gW zEtEcny>p;fcUH0j>(KJ%%!VxR>BVoXGs~MZ4fpZ84e~xfzoG9Tyc?as?>q530sEEX z-Bij`gmBntKG7jR1$fst8p)qg4qEt!Wr64O?NuT-b1BBsXW+o0o1O+qFXu>2oR*XXr5ue0sm}o>i5R zVJk|(5Br8p>Bf85sIPfZ=#h(a2Yd)VmY3M;_ehGMyvR=U{&8aOumh+N+p03L-w80% znew3D^CjEH-+*q&uiO79BYy_jmD1BbBJ%F=Dadp07lU5`uIWDUw(kuShCk|hZo%2@ z*K>&X3MfUo4e#)2>AmE%>3_U<$&Y`$^v5`==wI5S_TFH3=9MFFzIOMp*zSqD=@{bv zr~fw@f+!xG|3CzLCJm^sI;7+PDhz9}A{qf-YhzIb$?2ven_`0+GOP;As^D7Q@CA2WVfR!YKAFLK?CM{s!3Y)Er;O5`Ua~U=Qr)_O%)L z=veqs9%1z#jQ71tINsGSjI95BkRAVX`H;uPQk|`TwH$sOtcgLd`p-ZgykA{_cmBJf zBi0$YdV@aLEu;(f?!r6jrFbXZzYm_+yL?t6Gd3fEbmOn}emk1eBoM2jcxS(ge$##M zEhT%sS=N^g`~~nIA8Gg_)#YyJ_CcKKeRcAgVw@?TRngR5O7Y9E*BIy)f-b!-urKyl zD1dKwfNn0yMc(g#EXn(9!lr``y3k$>(V@wT5@6|UT8%o1{;JbG8hOWbmp}0Ch2B$v z(>^?j&y=}+p9&%4dSK-^PogvRly9Ow`DQEM}gjpgY-C$_t>qS$sR4J zmlk*S4`6?kVaIvw!^P#l0D6!Qlt&&NOZA!3+qA)QI+iT|`{k>ae{A`KU%^Gl@%Om3 z>??DFxz}gn$jQu{R#bB34Wn0#r=Nq5TM3$vy7U8AkLX?gD7BaH^A5zWu=+6pI!?sj zUp{%L19r%ZqCFm87WD7=)s6T}_DLeP^*S3xrx0ydCiV>gt=rEAdxK$bvKi51i1lcD z#;?O(H7@Td+HCB@Mp*V=FBQ*$&r+NxxwHqE$PPyJA6dA%vj11Qi}7Oz^dl(0;}>E- zo12hl>|ubq)1PMqv;IB;#YyTXNZmMvI+vLHu>)A=QB399ogJH5iWo03G>(1MsJ+#{ z*Wq_P_9~)2OAhk>0(?^XENF9GjEY22uepx5qb-v<-U@m3kaq{a%A7O`XQ-(+wh*6+qbO?b)#Q5)P2|1pgsn`DQ)QlpBGn7SNVO1Vwu4$w;Ndz z_=v;-S1&VyTiy$rs`r-l(eH=fo7ERbdFl2^ZR_rS6TY%U17odMQ<&BI3(d^XzWav*h9ZFFLNiUsW`0fDx3jcfj zj8e!G{jE%$$6!hBlHp6PUlMYZ5)Pf8NU8CmiCR@SK61?S?c*; zGYV(^A|rT?+B9cl)1E}0YIX59BbGi!y@7Ta!?S*0q(OptEk~aGrgrMx>h~+S4};~o zx&WTkW>1ZwpUPtf)V)6VMBn(xwM~e(L*R=;_xxpEuyy3-GUtQmGb0Fv*yjph`1H_zjMN_D?ETQ~ow=?3oxbj^-7sXU#D{YD zKhZ{Wf?F~%ju3k6$+H*xK{~xq9&50Ma&bBxPkj#idO@d-jQFhH%OLkN^Jih*_$`UY z=Fdvd`E&DU71H_h^Jn!Ut|q>O`*i*)?$h}R+^6#{+#iDT*KwcDdvTx6-^6`7e;fC+ zaDE>5>HJ;Xr}IDKKAjKaK4NL&N4QVt7jU1>Kf`@G{|oLTjwXJI`*i*d?$h~qxKHQP zxR3go_yg|K`BmJf^MBwzo&SjYWY;%wpU!{AeLDYj{;cvhFBMl`@z{a6@E`OsTp4tY z35qkEJ@Z@~Alt=&B@jRB-y1(LvO1gg3A`nn$JedzKpTNFrF}rF(QZ-uSAI=wChe!> z+XBzGXLL~fOT=B0`jCi?rAo~(Ebf8~+3ujXV2FU^UJX`+3f z#zY=N_deK$smCqUem<8GY<&@O|BU=x#NWFiullm!E}|v6KOv5tek7Rg{ckkw$K-qu z<3qPU=IM#Ff8%HuC!_D*&fCF}`@^ z1{!BaSN8t+$+4Ik%In2mnDw|ntcUhS&04bpdtlDNIe|W7CFt%$IZ!_f(>r;u%%HSc zYwB^&@%YY@V_(7Em=`mnQ*Mon-6Z*_%p7xe1JXU58La%|Wx-WvFI-xDGB4=-F8=U- zh|3G|>&ASPC&~-Oe%e2=o&4kQa`;=xj0D>7P&$;alwC3}C?4P+_$_6Z#CVqWwGI9b zaX-`VJ1h1<9})F_9`>%xU9%8l5-I~KCmP$ofp|o15T!kZm_zC5ek4d9pgyX|4o1Qk zhXz;uAY;_Zo!HY??qRQ9SElh1DLs3xLVXx6@g>jgwhxxD7FQK4NhhV)8u1=DBE3OZOmFyS>CH{*6LiU7K;;*89Jm z)z^0B65>QzAJt!~W6l@RrV$P4NBTCrd?{@_-1)_1#YybaHZKjGe!nZfIC zT>V8?PpuB6$5Xs^jq>I8GHmg52+zn%trbs%-TPXy;>#iT4&mOGuzSC3t#~x#UcnRS z1BBe$`HR+yPlntpcpT$M+#Ar3!g$E_qj-#a2=$lxNr}%4>?5TstLhWpP7`A3`-yhm zN6)WBdA^nU0y3`1#$LKnvJdJue9&;=-KUw{o`F%Ul?l1e@{662m^z8xlDbwi{ z`A%y^G3t}lNuoh4b>m|i`=3G{sqf(9t>+a)g6HtaC@=AT_&)r7z&*qdJvCNb^Bmh#&RX?-_ll&U);3{S)k$9K~3tbcFXIigPqRpmcg3MPH}OPwVsE&dZdY zb3)=p^#S%>>~py5a`D~NJerpEmrs6o&qeGD_~+#rh!2^F6Itl14RPa!OY?GHiel_Q zzCmR)7UPB}<|HdKqp!wBp^g4gSs(f;o%ra?>Pwlqv(P?0i*^8iBk`AqzpL>#0)JQG zZ}_t`cEXVMwKT6*NIR%hG*Mz-XN$JP$rTN};{C9ph#h>Cw#<*k!)~M!D-}Hl7 z6vv}(Y=X97@A#~&*K0727CxjS=}LN*E=}=qdQx9Kjh<*%TpOYF6dmavjhl#nW|h~Q z`n@7g+oe_6B?6nAzQ&e!fVeAVpR!3x*7!lPh+gD>5&Om?NN@QQ@<;alA@b+-8}0PF z0DDj#PCMLV)R$Qj3p!`wuj;#{ePfWG_8;H%F-kkerK5h}y6;B%?*HdV--M6DU+*bJ zTbsIf3Owfplo$F|z{tI$?}@lJBZ)pd>5NS;s-G=znA>ue)wH9 zyXzy-hlbx>I4M|1ZRuf@4Yi|Rf-eM!EyR!d8+TsA{a(!HKaH5A`=K%HIq&-*&=+Yk z3g)_WPMo<+B2K`-A=q&+?Tc*xx!9V|YTS&I5c<>-B@9eZG(!v4!T zolf)gO*Eh5Ww^dMble0TC4J9_C4Fh1mrMHzdzn=q!rU)(S^MosU*h=)#lyUE*oEw! z#C#Ol`%)&#|08qzMqNR9q4@&t%U>OIk{vxpa|ok+9|Sf-+=0$f@jl`Gq1 zD)uFJ7I^R1&9OULzW+vd1_80eLeT}JKy<>#3^6DX?!$t?@QQ&`M@C!Y zvto!_KludB`HyKTtV>pm!8omIG~yCs&svn(7h#7{9Cv(7q53syuf&wD@op>9EmW5Z z5c2}`^$$Pf{e$97)jP=_ecf>JOB4fkT}|IWNbz~Gh+>of{d?TUcx^;RJXw*6 zIlCq^We z1R1ZtjCfdp`a9tMY=57452%0mE`#Xs0OI1UA$2XX`mJNeHIv#Xo@)c)Q_<_t&%1Kp%<}yGY5ll$b8E$m@IUcm;zjk~v*7XO70HTi z%f0?6?*VZVb;kJs#SN5@&XOJhbgw?@#gQhOa~^Motc{qP)`lG1<22 zirf0@Vld42F{0ywtFlXitK9S2Z?%n$JT&hMy4|9D;XUDEN=q@Fep5e1VzXh($ zRewBfKiB)2=ptoW_3hHW>gVx1f^9hQ$yPjjWBt)ztp4ZHzNZ*_7=4F_QCCP$8cRNm z{^G;vH)3qE_526sW4uy^amzf+Ys|$shW07{k$X;X{>yLI2S-l17J0lt_2A*wiu++3 zx+YuYeF`xczrXV-iWAi5@Ni#vu}G&?eD*s)

      `(u*iAp-p;ewym{Xv8c( zMv->reH=rNaXqnm9b&z7-mr$+^+&cPS}UFpOZWF)XNg_9UqtpO4Y9+aE#Y=ZXSeFD zo?h!m>xRx(!r7teV|fd|#2dvJZcwY8$1`!d!()!V{(?qr^a5l`Ki z95GefAy4_cl#5nn)~SWTo_6%_inHUhqL&9Rq!<1M#M)C2`@HIyq5ZNP z`MiYhIFVh+mUur2-#EnDk?Z2?CckIVzfQiq>o=8=?6W(uZX_p?y=lt&V9%*}!Pb{2 zA~q+J71uc%Tuskk_x8RsvWIl&!rbj?Ja3Aq`_y-oXDD4XM@RReYXSO^bGv=rsRA#Z z&;M6jrnAS+A9-0)_SzO&r^Bq1ueT|`Ae{;?$9ls^-loa$xhg!X^s&bGi4yotbuh1$ z;?%%&!KiCulW(}We*yP8OoRHNfggJU(L+kdnd|u<$H$Ty$*9;+rYN0G1^>u(4}Bb3H;Q_cNAj@W zaN0by?(^$ZN+a=S`w&B`Gjg7t9EzsMN9>C$I{HMhWqH6i*J zeB1Lng>lV>>oBi~c8$ucH-!EW=zj&8S@5A5j|N*Gd^LJN@_7o+XJ5cQtSjG2b=CPF z+Kb|m@sga&gV)dEx#ZN$VN(d-lo8CR1kEF;&r?w5(UHMR3s9dIpgxa}v z*;I)7{L0gjJ&3n?X>ImTN%#Ei(xu3rUq^zOr)p65=b`Rb4Xpc=w&#sY#iwCMvg;{) zSCKHRLoQxNYrJakJ-O=mfsfELqfE3Tc$Q0R$f=!q6?)V9^U0anQ|hq}ldyX5&xv6! z;Ho=55sfD+@((>W_TwQswsxv=MVs{)Z1iFHUklpvba^WMPO40HO-WXK3iOF@mth^y z=(C5=hE(JEC-o;~&JpvIY55fFPw_duK3UN~)2U!9r`HlzK@-|PIw(i2G*tYbxe@CNO~^d zzZE5MH;K8&#BK4u`uF=Xil84b0pGkNx$P7DbFMPv;S+e?PGv;TNb^w!woKcx&NqQF zeHd%z`}+@g#wO1K>G>L!VHbS7YS~SWe;jGjl|}VIE<417!+3Uk4V4A0Ey4Wti>Sv5 ztle*;=Xn@MPr;h~DY(voKTv*Oy)rmZw_$!?L1|>`>6?SCyJ6SJrO00#z zdg+xIJJC2Udq~hn_Upp4J}D)AaURwSVh*kNLC_XXEpB2GoB}m$yUTP5H-RJli{i{_V@C9|c(Fm4Q5vd@36m?@4!CB*4pjq4xt}AcPzdO7(%!6kf+oAsKyZ5)}txe8B>!L z_ks>>$=<46kv^(R(r2O=sq1#ni3$lqaVF>z_v4$$zrEC%&dxi3 zouWSs`}Nm9iYY2iW&9TF@WD&3Dd_LRpq+X<{rL%qD`|CT_d2BQ)46e1>K%x;-*-!; z@#`eb`bhM{=s7#}!6+7yUM_xANBWX9PlPg&db0=XyCgQ=iSnb^7~tFnn%>KU&PVaB z-sq6vr738~ADs~FS#Wu9%VW4#i8lRZtViFB`@mk`6p7DzbVz(w8^$=B(Fff;1?z6{ zJapyv8~=6cwd?*Vf$<&If}Je|hM2U4=3#z`XTcZ`z5WQ^0V6q6z+)$iHzQ~Cv*IT?T|rrj-F{o_?c!q@{8wRo$ZLXJLd&2NjpjT z?#QgXFg}uhww2bDRAkbOnD%Ry-SWFLFkeM?tdU8=#{ym%jc4ls)OW8@Rj!L%;R- zUfx@|^azc~valv^2*v_KF($YSV}mHhW!YGR6WRI$)E8NU6D*nASKJuiGY0E$-r)7q zv>xZ(cy|2oM>6^XeAl%DK810adoJ}n{Qf7``!V-S^wDV?Ga+Ogv-7`Ho-lu*V=mQs znY;Jnmphw8e|!^SX?H@rMIzlnC{3~coY z)RXw#rG2B(AIpay5F50n9eT>-t;nb`$}US zDW_em1J%#*cVV77J6SOYwyZ*%K+jg`x$5{+8BK>U-ud28-?t+<$v<5xPA6|?L24f0 za8a`2A0g|(p@lQc;meLMVkpIRDWi!fi*|}llYAK!pp3F3k+U_BKRSqPDnvPc=lWpJ z%ZTf*a5>I$G-J+E+jb#ijHB5PnjfMsm;Fx9=T=wNW6#b-j7z8Ip}(T<0^LZDHhgzF z9ZlFL3qZqTIT*_xBGK}H_x8TfwqKhu|e^+={g45B%RBGBG>ReT-VSZXU@nsa%u zW-szg{r&{zN=9L>WCC>ceOIh8Cci@eT>q}3I!)~#%BdUc33oz&vekq<*esH9b}rWR zq|-Zcd27Yxke}|}&S73pnmd?#W3pl>=(01%ZlV}V^_9}l^CrKBXv`Fey|e~^o_Usoqms?fF(7q&|QQ9)D8alMED~E8D^VRgs&p#)u${9*+3vmDZGx>9j z547&TyyV8gTKAImx*OW#-0ddzh7RG$0s`Y`TGi679Ih;-|L z-P{@d0Xon8(PcBogy^vI&)hyKTTBQUL!CmMCVsBoUXQse(2#&47HZs;AE(V0HJ_<9w`yCuXEe*@?D$E5sg7uHSuCFHs7 zq0uQDO26)ppna?P<3sta6;DI=Jrv6@e@yyNTTb(d3lI}av1U@@5Y?@z2l4Iz>SgtB zO8a)9{*t~FCn+XUTSV>Pcfjiv)jmeimOO&?@D;R=#EbT?NSDt;*R)prFeGm~$EIvB z;ksnS!4SGb87aEFka8|y8r=`c38CGY<@r%LAI=@v52NxXUwjj>Y$?ZgT5r&Wwt?bL z5861&Ct}ZDdd8eC&#mJ;{{;NL4gF+V$47f*P+fQN4`VOt>-`>Ol8HE&h4I-RaF2LV z|Mgv%KS`i0x*;n%5_2%6SGfHz+A}LJ9D;6+j@ER+=7dGC220Z3hqOCuq|E6Z7+;rS z&tB?$>XDCMz`AhP&-DE}U*9@_Q=C7Kc#2rCH6upPccV_9Co`}P!p;Bqu@|-d9}X#} z)@#Gp3AGO4GNd*Udr&+T(sowAgKY;nQExl9zK3JH(`iPC{8H#mcBsbqXW5l_cNsFM zJhA?2%4S?&n&;n}{1f8%n;*(V|3AyUFB$E*VrzEn%B{4r_s)iX zcj6~msX2j_JRXkWOwY7wKZ1^7!OW^p;ayN=u8|r1Rhtwx5CnG2B}s@#Bv&j6de>`4eKTdyi?Je~;-W86!76O6>&lD1C#&CEh0=-hg#OpNjOY#k_m} zS^Xg_PB)itM3W11<4{iRK0$wbM5bjxVewTpRx(#jNYlf z--`HGOgQP^{>Mvc+qTvlyiPP1A#)^&5c@`$*7Z}~m8|%yjXkD0)$V6PcC>-W55 zZnQ8Xz0XGOQRS7U-s$({UH@-Q9Pa`b&JdlceYhO$vHsnI=Wse5l@0y|^fwN%T*}h~ z*!eW{zBJE2tG>883v&!ZFxM~?b^bEM#i)B;O?{oI{Jc7G6~?6SktvwVdK2>^uV8F9 zYkqwHWIRJ{fWQ46>hQCu!}sAi;pRyE0PR13KIW7sF$aDY?bMU-w>L0P)rEM3{bOE# z3fLV(ut!2cu(hEec)c5A!~obm1@T#l>*#s#$g_{obA;=Ht+%4j@+j)sPf*XOKXMv= zi#^ivh(F1pxf8-^%uIb8qN6?;)%}lROgk02t*nk8xD#~%^QZ?ZNhk2Aq`6F-KMFq? zAGzi%@umG1#+SbP>`vJDnrnmNshIziG%tcbrAgvkg+3waKzSnBb1$ZUS2J=;czIL* zTh_nnIrjo}UXMU805PFTm$$4V0^!m~(Jz z%IVor9Q(CI0{6aeHf%xt)O62;s*(R{@S^m@lg90zjyr3NZXgZVL81_>D;4C+^NX z@W4~PeG;49q1yhlm}8(A+Kw~nPxIjO&_;KIx1I;5H8`!9lcF^^rx4GcLjO7=*w`Ph zXb$`Zv=hDG@N00YF!$k~Bd2I|Oso12j0@3MmzWkrQsZd1hV?Rx+hN<6A&dHWXQ=;& za>>A60R7J^vB#76UGFt`KOOXilOug|zLjx++78KYHqZUvk2p6Tb>``_etlUL&Juq} zrYo1rF3cpknJ6Fl-IQe`^0!`w=evbSTZ2Aj8OD&5hUV*kk2>=Q^oe?h1qVRu{H*=| zAYVu?`I>NhYsF}O=1cqwz=zV$z?pvEigF~qN^qu_Ci+anZ>Nv(lgN8pE8Y=u@6=rH zCx^k$wL|E45$VH z(M&2U={wOLJYs`f#3i!V1|HkczEqSC%SY(b?OUbWG+F0I`+mg`7io{KD#VKMkNZ9S zh>x^CkdtSBlWhDAsJ8{5^*ZVC8l@AP6F=&Q${uKT4QaH{zfV2BAaHwGke|{1c;rLG zC&JHx-1rtcC#GN=1=?1$Kh$p9HJynScO2*lSuaw0&g)wB-8&9YUeGt1au{=5=;PMzAzJ(mw8MXR-sE?u)9g26^~Bf?{W3omOX9s?U0>71 z^g}2o>PKW};eC?=_dI_^K;uj3EOSZy@3R2Q`xxFM{2kU?)D4V%kE;ITRPq7Dz8-2X zHcZ%Bvti=a3_OP?yHg%xSUW_0NvnIh{2$`{(^&j8=5)Kl>e_4GPL2+9s?US&(hmc- z4~|<`JTKTv&va?O&PxxYFM&3i_MF^_yw<-T@$I*$D;Q4~obqdE=sA1*>I*Ybg2m!H zq`$PE0m>_J*pI>KU3J%=##|%q>x4BCD=-JUcoN3loCfnNe$5W$F?l8S;6RMdj*#8a zCQl5up3e0BX}VA2>=^p4#aS0-lI$mkVofT1m&yfB;(Q8p1N@})IUgg!>Wd$<$(|E| z-*W;wMC;;x@aus(An&9@@x@Csl8|2o*;H13zY3q0;*Qqs5X!t4?<2GkFU*aU;wQ{VD=qGyn$m(zT%kGC%7K?bGi0be@fd1vwesC>{a zhn5fR#Y1bAupeqQbfZ`~0scq)AI6x8d~_ntUQa)c zPQusH$tn1URGr!t^Lv-3rQ4mN%fS15#9QLD_}v?b*Rsx@?h_w*Cn*L$Pe{K4{cwsU zIouDYSVDd39>fyb`wa;@7mSG?*ff^*ZXLGr6vn-@@9UipmC_zxohxzg&ellZO02hf z8taZ0w3hZU?b$=%6+_-zn&|oZz%~16^YwKfZyu$!jnIesI8(V_*F)_D>QC$3xbp|J zd#+za@tp7|^of-EdsyReHXhRdKeQ)hySdmm;9DW_?bO~B-L8E9ygQxFk#Arh;xzt1 z&#&u8qD?A@ANWB=_KF_ZEt~fN%R|hfcUOrYwI6gwo$bUN7wW*s6*1(s5Pe&ESO3Y3 z=&S9BLme15CurXZ(Bf}EEGqbC_D|HA36Pl+60=$lrs#GJ+B0GBdlkMNh3~MgT_O99 zRDVCkHv{wZufiTJL3Bm}&n~**Bjf{br~D6bK6Ff_HN19jKN-{GxnL))$)@?h96TdD zi*?xzc)p2eoonblh6s%hv1TU|_M3vWI#aP$XWHd>ui+}J;pO!@_h7xwWUSqU-QAj< zo$xp5^Jd&hVKz|y1)0IbLVfegjWP!I8^(`mhIYU@k?NoH9 z)67edJ@p=e4@0kXx>O?%gl8b0Q2g3}zVyGtreDCgh~Dct#jzoQ@qF7yf<01Jnz!zI zN{oZQ7AKZ1!1~hQChCLMqYf5g?;|Sjf_Gs*3F3=(tsQ;1t_;MR=jXe75{s&6AGKX| zv|rmyk}3UFdM_YdJ`UaG^HG3zZ8P4&Zq*g+i^%H)_@a%CS`O7wdhfR**f%r!vHZLD zd@5NHd#EjkbV%Y|Q9Ao~Z1BwYL;Ri%`ZdwxWtemE`@T#6}dG5bMz{ zr|eAq-?OOShx*_B_WtGi#f102`<=p9!oIuQd*7*dylCF(S;T1ZPio(@Q19ipAE)@Z zkGbEx)VO6H^1|&Q*4j`W2leHVzyHe2!2UP1w+HqqLcgir^)F=qInTEp@!r)zvfq+RL-KaMTKD$8*=0VU zl}1+D&vnr^%TfYZara>~|A9sMyqEq~n)~LT+~5z3`6R^6+^E6l73=Sm41N5oG`sxNSYQi_-@M*mI<%xk}_>TK@Tv|g8 z$^aW!id>8)CKjcY8uwo*4=JRdvISjn!1jHzWpRhLSZm zH4egR6Lmpjusmp7yDTUxA9TB}h6qf7S`7x@ZfdR$D()^#lQ2EIFfq$fL((uI7+;GU zEZ63+ZdFawgN-e9wWvESb@*iF>Q&A3<gz41oWC*pC#^3|)CH`Fz+UfWbtN8g6Mv1Rq@285~l zRW~*?+<)J@5CT`=bFHzOSvTKOJ8M?$%$j?r7u_^tddaMti>4RfG`)6aQOS(rn`&>F zUOWBXnRRuOvH3V>De?(4)$898xh8jffO&HFN4NGk6jw&#B3imwj;+K3%_ zPmFq8@^{fugBP7m9`lJmjxGIiQh6){Uc&dW4m`aqmPGcdW!hu7PUXwzitN9U?~DGF zW;F8w4d*vh~mf6+-n!vygo7F@jTojUh>_wPF&mangl3|WZ>wf zvR;yVZCvwu;)=&fN3z*8riY##&3I;LMjjxj)Hu9Haeb}-F; zTVqjO zx?juphlix!$oH30nHv5vK)d;Va=`t8^`e_;PJmw9ipuT`-=ngoBZfb$Cv?Xd`oDN^ zT_e56QQ6>Vqkl#(g3=uyA3@)adL7|+;L%CWh)F|x{Knx|TR0fu@Yo>ydyaJCAp8@K zo+`t@;~yRU9Ror9>UQ)C2H`s#e&-8-Iege4Jm2A11!ImLhjXE* zd*5`p`=?Mmq;k-x0T}&gaX5MOz~e&>A3G4lueighv?kOWo{nIKGf#j!h1y2siLp=D9=AIDhJhe{O>}tCAUxOM z(+A;ixcn9m!k=^aj6wL%9G{Xw_%4TIrzLZI+TpVe8UzW4zjqLRr^Dle@M4G09fV)& z@UlVpP>0VSg#V|@7wz0X@c5Xc&mIWk*NqORpg-`4I2^O;=6J#Jr$%$&@e#1d2vT-% zu@WRF5c48Isy;5_WIqQV!sWM|^PyrSNY!gy12coc^^4eLrin`)AMDQ_9~@^qKG;4U z*IE$bkIZ1O-RMqcFgQMVe6T$|KG>cfcgCj60Y|2LY%>6IKQe>C@q}(<_V)${rpXKj z#}iLKIG%WXa6IvNj821&%wTYwA)?G+aQyf9;5g&)!EwgpgX4_H2gezY4~{b)9~@^q zJ~+;Jd~lrccrl#@9ht%4I7394!QeRK@xgJ%Zzvajb2FDq?ml?!`WWYHy7#wGa zATt;oXFNVQ&Uk!qobmYJ_S)mAdQHFO$W-w`uwz-Nv5jDKJ{*G2L6sh^3Hkcx7)zwX z9|V{V$6A}T_-Rz#bo5I@`1GPmr=#yi7b+e8bO?SR1YZz>WB=K-{NKn)kIxR_QxcM| z`RD_u)BkHBa(^8{{~|(XIzBBZw{-a05dI58^!#QBeQ$^zwubPTgixMNpKde>>F`%W z{P6k^{@Ee?9}ls^J457-4w3u$5c@w9g6D_m`8dV}>GFFxgb&t@rlmg?Qoo)L$=7vg z0@KOGTCTMCO(Er56M~-$vGaMnaFI@K0$qx9__HDOFMv25{l$>-x+4TX9}<5a4awJg zL+Tez2Bg#He}$CS_7MC3ONgGWA^iU?gnwp8xqm1mZYM(c-x5-ft`2E0J{nSvn?mf? z5)#jE2+7x`5P#?i(dWq!dSokYd6kEh%Yz~K(h&US5d2#qc77p5A3Q@#tLNU3^2NR_ zY3UDy`17FsEy8mG8< zTihE7JC6ubqgFfF2@#mo-bQc@nT5){AEbKwuI>OL`c4x zL)yCsLiB$mq+EU-!vEtT`c#GZ`By^hToU3ZJt6I5Rfzwu3GwIOgp|u)L+bT!Lh%0` zQjSAI^j{ESpK~Gld@Up%?hC=oLhP_E1V7^11q6FOPV#wi2!DK!Fs786RW*O(A}}ETq2R{oJ(n`CdqUc@O+~gqr_x&!!;zYKN!hf22Kq0`+l(`>d*0 zFvfZ=MBEq=#Q9ecBq_k)n2Eo1appSYYeaB^qoIH9`5n&rA%6a^A@*GF?3SAE>LO-1 z{>$;7>wn8+yUz`Q z^Cr{KX(9BXgYb5D<^L^F_)>+F-RL0tkNHdYf1SeX6~3Nv%GZY#o;3IvzPFKa%CDwx zGq})iVVv|?q4@7s_z{I`JJSola%ekid_5D8{)CGMBpD|?HNKm1(ns5&gK=wzXAC}@ zfA8b7wS$Z&1Q+_vkVgl}{kgw%|7D#3;W4J68y6J4)|2`PbXYy{@MQp=!}gW60iutm z!t-*b7hLG6UrL9y&tk*hQz3pBT=*l8iq zWA8uK^A*u+T-rO*r?a0L>$3QoaIB~9Kic_<_-J~uKjE5Q>I?B1ruZCHd^CQ7aiY&w z^d}X)#(NpJ{(O#c>km@b1g~Pc^L(~`a>3w2FEPRTa~|t#{kf2F%2$rc*EGH+yJ?(W z1fhfIFXL{UXM# zeOeU$AAC)xBwrK#6MRjl?F#SVYdVP>qW_J;#ZPR0dzeP@B}vX0T= z@CL@IT(q6nD_q;NP2n#oefBF{>wiMw+77)6*Zza|%-mu9Do^2B&mx6Kkq0^A3a=Ls z=Q75n9OYKI!Nt!PGA`vS^otBG^fE3a{k7aG!(aH+8eI4!41b|-Fu2gSFivuHe`B-4 zj|dZ-dlddvg`ZQn*8eret=-NWT=b!N3_7gcE*f0u3o$OHgY@6;FWvtlg=>9^8MpeB z7+m3J?4R&Img@2P^I(cn@K zTMU1pUuSTkPcm-(XN$tM{kJhL`4#@#4KDn5FmCPNZg8RRWZc?ezu_-(4;ozfbQ%6a zf5hNIf0S`+hcgP-cIai?+TonRh5u`eTRWULxX=fed5x_dvKY5=qXrkh%4OWj9d2-; zAIG?rOV8ctuyQ9ET=*0k{ysI<{u^BAOBlCuXB+;)CvI@DTbbc6^yLN@`o)Y}xl0Ux z;j`4>qJNd)FZ8tr7y3rVt=tyFU-+yuxahy$@E7`|!G(S^<5un#!(aGpGq~u#-S8Ls z9R?TrVkWS1rQdG-%J$n|<$hb7`B;B0Gq}(%RC0CuSgUZ|K5Ba1&s?nNbsSj2xYd8D z!Pm3?Rg7ExMIXV1ejU@3-E@CxyTX6Q*L3O(!6zX-9oGIbUbFhkcujE8r-=E8o}Me- zfvkRqw(_!*Y>}_xai40gNuA& z^Cj~GLNEHu+>X!-K3v&Z=S%#J^n6`};;j8g>ltT0B3F`>8C>L+GcNiF{X&Baz4)88 ze^?x12j> zhwzUZTlJb3k^=|dg+k)AFIz|rWai3t3u?~8vdR;-qSRE1aC0((q7B_ zkH{5#y^^c_P3C6?`J1BG?a{sv{D{H_v@Z(RcD~5CwR6DZM8U;wS!Vnwc98iE$*<7o zF}*E!nP;&1mH7n1wLi;vpKz_e9q)@iGTs;c$8fuA$NNH`F!>Vtzct>M{0g6qD!*FK zHpWFCp_lQ#;Ir7DWxQ|s%XnXKp>Ge7yE{Z~hrz`^pJ811i=O)oF7&T4PUWKeCs|RS zl5pL==Q1w&75;gQTe&gCr&fq@E>d_>;foZm`yope-lFIm6#jP#Z&dhZg|AomYK3o8 zc%#Cf3Bivje3haVraET9_8Mo!W#o$7}opH*qj-UG!enjcBU*Yu%KghV%vx{-753PfxL+GX6 zbsKuYk27xdd`;n6&sdJ+?d9=)xXH#LOvYq!mYzvOF&;-lNm-3r(K|BS+QdF^A| z%I!3``15|oZFwCuxX^bqZtZ{6@RxiYGx%NXC&vwcp+8}8q3>bb+W$3$Ydf50+}h!S z!6jc88Mk%_hI!2d7y4Yrtv-_!uKl4{;ablU#;u;S85g-?pSYoy`cCWW=@5Fs7cp-2 zT(9tIpVa+tSNL9q?^AfC!uK<7^*_kC=p#vvDn7b@byDH?3Nf8?{SWJJS&Un`vR+$o z@t<6#xB3h>xX|Y-xhs@DlN7GYv5;|*D@mpq{(=`7dMU4BLoYbKr|1q_j!P7-{Vkzz zZRbXXw~8`2uV>uqpJd$HZL{K|<5fopep2DuZas`!xn~UC%5kHYajVZcgA4t6#;x6o zE>GF>d&&;88Mpex8Mks5Dn7M}53T>FgXHRdAij0pk3Z`#-T!ul>;CFKg(nsLafR#t z*o6>0{|cX&^cm1kQ}{n9{tFeZ>6a>8w?~Z%*X7&7xV7gxgG+y4J>%BSNrMZ08{@Wo z+ZC?sMW@2Gp8FZMdLA^m$n9d>>UqTALVuKTt7osmwLa$duaZ*bv%fpM$PMS}}{)^J}ERv+3Agbu>BKI0g-`os(_{3kJP z^(i#C&=)gq<pn8{^gvn+<=jHP+P|T=;A={DpqI!G*q^achVD3fJ}Mh{AOo>t@{A=P2XW4kr~K z9rub^VbbSmQ6A@|3fKMWMuqF=DQybZ<+zz~tLGMje=oxW+Zea{%lZVtg}$BX2ia5M z+MfB0lRoqKnoi^Rn)qvc65~WapRegu$k#-#@dn1NUy0qU9b|4z@UxtLo#OvtzNVA( zwZslWzmaLI9dpB(!Yeyzg07$-iYlN_({1@WOjIb>Y~VWg8B`Fu_II}|SK zA_yO+a9RIA_$YkT4G|BHN0cD_R4vaUe%6n%2Jepo%_{bu5$$4#<+fb5p1_{;hM!ljHzhO8eT zoOsD0>jwzac5YyOte%Yq|8kb+BgkHZlq3yhl=}8}L=N(3_=-+Pm3*Mpl zXuF+IxYQ9!Q^X0a9VC8QJCrcJ;PQ^yY{sn};szJ`jf~U#M9=dzoh06t7+h>(_3Y-f zqK~jTYH*QzjB%^yaf1u}NybU8F0b8)HHm$V%kn4a{JG9q3rMy~K*XZQ=ARD87Gb}C%kd4CB1 zg9exUb}=sb61hhVF7!tkx8;6D;aVSAXC-zP{^yupaN+-&kt_7)4KDN&XKcAkoDu%Q zXT6CV!bjqdwZldePlSG-iW@r4A5pl}9g?lrDQWxIbxNYAtWy&GMed|bPhs_x^-F>a zy{uodieB4o8{?vn zB$4%0f{WZ8MjxSXH@MJuD7jkCBMPq&CO98gxbz9>_IZVCKhf*2bblb0<(Z29{ukbB zW?afw@M(;b-D(8HS>Br?{96idQ1sFk(CzICFW|aHxL$wtH3IlJuIP2SoM7DQf70M$ zXWGY)4x6tt1{Zq0?n{?T;}Fk>^7}h~>HhCfxb~}k3fKB~GH&(XZ*bA)AmdhlS??sc z(041jTL0G+ex!xuJtbrS+64NizHv7PZ86Lo?^OUgA4s^#!0T$zeV9a z!UX3oh3o!Ruflab8m`t$==U@yDf|V+U$2wVb|_+c$*&|SHn`-ggmG&JS#Kk_(3dHF zv>g^JTf~#y|3SvBp1H6i9VGXg{?h%Qr0{Pm{27Jo z{>gEL>v|#mdE&4A{DPwYg5saA`or4a#xZX56*IWZB~4=7=C{z`LSMwVEtj~$wLWEx zTYbt6F8miVZuOD*7QuyniIS`RU*=D&pUC)y@Mn}gWt>9u0~&8*{v`(AtmJ-P@#$2! zw!?nLtsM>;T=Lb$xa3zv$T&!Fp+6QP_qgFNd`=i#_?!%p+hcH{e~oeL4^fV1*8X}w z4Q(G8uUS5NoV8Mv$GJrD*L-F(ZtWa5xaeQTxY$!f$T&`Lp_lQR)w4E4pM;Ss{2L4| z{2N2`X)(CauV>uqvsvNVJ~HmJ_OatW;V*vjd82L%x4NN^fGU0 z_0NZXbco!~vVF!eE_?(pWSscua-6O3<({ScFY}f}uk*W*=|!$2k$FqOMgPT2FZu}m z5`znU72`I)Eg^E(89u^4Y(8_J;{OvN#(BTOb$;!9rX-R1Ov!IGr?>N&Lf>ul6#8RI zu5PcZR6C;esbyT`3jc(`pJRWJ=PB0y(jO39=r@MQm3H6Cm3Cin$=4R?$Sbb!^QE;I@s^n^YqFLU8R4#uOW8$2z@RJIUD_rYe z#<=JyNy-f__F2fd=qdCv4=K3NFAb4fW%vu9T7wH8S!W^qgNiGM_xgg^%F!o-Fy5<}*$4m$5CWJKOMoiTT_2TLstew|-LPcd6q4h{D$?e1pQ< z6t36L=y_o2!%(tk6#b)$kId^*ejii#QAPi0h3ofKf3I-;KIyXxm-j<${FHfJDHlm% z=XJ%OWnNdxOX%&quF#jLc~|ZKOBAmCT;9_pJvH7ILf;;O>-RCcMM<2GDSB<6lM2^y zsfTfEpECxRc2nk=t$ofhz2HKBUdh$=$yM`*N0k0D&rJ5&q;Q$G?%rj-u<9 z;Z=(McnE$n1n*V2_LFmri`_(o%=Zc|{fhHUZ|!-(;6g70EwY2QXC4p0Z29IhE^zd9>%RcXACa-SQ%o()WI^=ve_$d&h4t)A4=ec$z37LaqduflfvaaQ?kQD z3O}RhKc#SauaoHaDSX^8|AX)~3YYgfC0}xD8q?c+$$Oo|r$&fzE?4~ZJlkT0YdbGt z+{#^QaIsqz<5r(qgA08lSu$LJ$^o-w%4pJUwGt$`DY z9fVIKUs!)gGH(4-#+VlGQuMl9#3oj5H`5FL36wJ(NBwEgdZc3p7y1i~lRjFm%nu8H zCJO?VBe?L%V%*vxYH*<+&bYO+e$Fd-C)su$SmvMYJh0$P6@MKc8W@@!1NRC1k-}wO*V@z0>q-)t*A;!lK6YML=#Lsbg+5EobLw)8GA{guPp-j*&v3?V zIp!H$=wpoA{7y3bMQ)+Nh0ip@U+9YrF7zdgTmO;yZON~cqs(thz66(fY~rK+M4n$; zKI@G>!bj$-iI4V^E~Td~mm`b|f5~sR!6m;(ja;EWW^kdG=g!tXGG9&jUxW$H3p4!> z!lmvLvRL6-|0RrD{g)bC^r>Q8?C+)FJr08leFNiG|D?jTJ{uXg`pA5{;KE<#+pRt_ z-!8b&%e=bPN6%wNU^_X^DLwW2lM5kwUSwS43ZJYje?@X@1jIR4;kvx^x?F7^nLigh z2&-|-M{vn+jB%^aB!dh6G^LMj-)9^CA~$aM2rl#UHoy5yK)BA=IL1YP;S)1>gzL#9 z#%;a|4KDOWjN5WAQ}_|Src*-UuPS_(>c|{~sa7IiLNA^c0)ZZQTw&uIQy*Bl+?H5Jw-+-Xvhzn2y?*Yg z@iry*4Mo3A@zL)WZ)aS}U6OPtKDu7$=bmSU80TY({(mX_gu=Doo@CtmPmjU-{ef|- zXRpD9{ygJkXD#=F;V-Jn^Hb4B_yj{dg_WCSaG}p-oaAc1mHmVXKO#bLo~G!vo<)p{ zK9Z!^;3Bt#ajU01hZS7t%amNLXFdzEc6+=11gZa%n2*R6{cS%%=>Mnv1gRsW=PqH6 zv+fTZQ@C!gcPhMuug8MVRrr&mT;anNzL0TipGAz@@>*!OF7&mGlU!Y1 z>lLp3s#xLw&ewEGC|vv7-Hig+8g|YW>?3{-1nJr|k+Coe2_q zkR7CtNBBPahl6nay!D`m9WJs65?k4F>}Gn&FaPYH7ZP0ZB|awk75d|RA-K?=WZahH zYYG?L2om2T`hQ^>I>|ac!kFbHywnZ@|W(v%%2dh{XynWB)^hG=1&Bd zd>v!{l3$@eZg8PL$vDZ?{%}s=TA$Y#7rDa!yupS41;(vD7Y#1-St0!msi&mpB@v3V z_#WYX3h(4=!gE;`K_?Wh^CkXZ^VP%jf`5$lJHxomSFgc^Ui+1{bCh)>J+;5-`MTZA zlTOnAC;F!p{*2bTmiAQi6#7McA-K@%`l$6! zFg@w7^?AGPn(%Kiaz&qY1{eAy%o3Ap)2ie)+ zqUS=!#h#vP>bZd6Lcd#0|kkuEY(|M?_295M1abK3Mx7 z4bey1DUmDuC2j~V{7*0+kt_5k4KDO&lw9qf=M}E)BXLIL3jd2tFSzgzIBr;dr2P_H z=!=;l*+=(_W-DCxEB;^W(c`S&+pR}JpH%v2yKPapwwu&1u@95=_ZtNl{yUgJ>?8E; z1{eAc#;so+RJg9!JqrIT<8PkZ`z(k3fKA+ z8-EjhN(?UiXESc~k$5Gz(3dN@TAxOfUy&Q;KS?H_a;X(!oTYpT*ZFE^8f)j>20zUD zNx6&uOxE9L5M1bW+}3i%PpsUo5V_(@!e8We^M&9d_ZZ{WKYJ9e^*O`1)kpkOaN#fh zDRMb^zkdoY^x}tBpIlY$l1JiIsBo?4G{!|Akt=>HxX2a16@7$W{8n(G7yq<+Rw;d? zOo`WUW=Qlu5#~5AQn=WPAn|9S*ZC5E7X3MSu#PVT|2NiSJ>#Ok&?gNp^lgmWd~H{_ z)<^1#$Yrvioi79z{!(A8KDNFH{XQjE*LU#&(o?R9bef_+!Pj&uQMlNUpoI!w&DV6Q zRk)M|L1IsmtMP4$eidKSN%BkddL2}!qSttr!hg-zbShT3)CGdZF;4q6Oy_GlNqz~J zw1h9Ae>e!A;V<3)7QQB2(h{^q;kWWNokV}4f49Pq@ipP^QMj}tguhqeG&eU?HrLgxZK`j1F!<1-(s_5z zUtD=#-F-EU4+bp_&6PE)S2edZt*vRPtf^~isl30gss3Jnr?F{uOZlw^6`s=B7?mO76txus|ppq8S_#?9zj{?= zO?5-f+6J;zOZ|OytJk)?RmSS?t*;@{rn)t2QHm-*#PeqO)2iCa>IV3Qld%pZQ`giq z-6LeBx>d{TSJhQEtgf!DbecBQ*RAp%mMU}IT%F)vKt|HK(ir7bY!Ty{=qV zk6Ux!U%6`Seg3+?X5Cl+f2n)__^PTaZ}{9K;7tGp3_qmW+#qd}h{%s1iPdrwzyhLR zjIC`QlaK^%2#`R61+_y^rcV$%L#DJt9a{mNPLj%u^A1kQj8nln9c-O>wCz}C9-qeq zZ66Rjk0@1ci_QD}?!DK&>+am6eP-s5_dTEFo^!ru?X}ikd+oLNK0o$`E*sa@wKr^T z*wBoubp&)KrfxLu(-E*D&p}zkB;dG-OjeVQ1(}WxklwtJ*^&$E*Eb_*cre7E`cPwa zVHQhm)~pqEH#cuy+uZc&^=+#g)*Ci+QURo+Wo^UywGQlPxVyPdkm_YCp;jl#t^wD1 z*0{d8fn~{aiD(enW_;FEufXcj*ig3-x$dxD+hjr#YC>ZIVPSJ~W83DYjv$>wgb--m zm}uCz7PVwGY>nzi$?)yA&F0KXw&&J2#Egt-NV+-95p94(h063PQ!I6BH@9tR4;IyY zZdEPv+PS$Y<7}fkh3E2&vc=1I&Un6|-Itxt+D4QHP2JfRPU9+oQPiiBFz>37r4c{c zyt<_=SXsTiZevT++>VV_IaDo%oVo_L?Z>$Z*G92 zb;8v^-e!E~ccV=;OK4lslxVDN(+cOa=)5{a z_x3F|+R`Thn;H(cZ)|lyDn2k1)L?T5N(zmAN5lHg_03@4xtTl4Yk|Ox!OB%jZefXc zv@$>hiOri)OigVYOzzgSpvF5Fx2Ot_rZm>Jp^@6sx({3|${5#ma8$v%m_2J_+r~z;Uk$69 z*9Y30)*zB)BBm|0u%Bmk57N%vP78doZF6f%2hG@dfF?@0vkAnuhGfL3ti;)vZf^c? z!9tTVqYX{Acs6Z8Q^t~>2an&_ytWOEDr%~^m~N6>Ps^e(VQ2HKPv3I;)i47REB|TV z(vg6J8RM*3Z%z=;5OtyrY?R6WP z>ee)OHYSV`=sCF)7r2|6S8rJx)GS%FvSxAJimJ~osgd@^GysSQ?dZv%c}(Xaqdqh= znTw|Ou#&Vlv%A&2wxMyGYo1Kan(Lg{T(-@YZ9HwAcL-Is*6i4P_vX6h#ztFlo!8qA zBs#~No7be(F|B;dJHlvk>_ z<$4lZ5WS5-SgTDdYA>KkLs6QTsl3OUC^h<^XWPEKxgaf$g6WyI$9KEw^J`^H6-n`O zm5Dtn*Om2Y5u4%Psd)TBl&rR*jSEB{MDAir7D`4>4lZAp0sN9&L>H@g`dajvYb z=#$S!^)l zATy*>V>d4vw>LLtFv)V+*xoX)+tAR+jLtLTZrUDI9qp%qrH8Yzb5^6S<1|cDoAhfL z@#-2^2eZ(t>}=qE+Xn7aZYM)~%_1}RyyMV@l5W_%ep?;K1g1Q2D}qDCbn&_|-kP?} zb?phELHz1$L$D7eOX-1N*N_@gc5GSgZj{y4r9gJ9?H!ynM#9YTr%Hgf51A)PJGw#e zDs-!HSyc<((qWgVuKJc>M$@c$mBEayv*zNrY1W*|plNPP9qRL z&m%m~{LVGMbMT9-n2U4GMe{q?{LZn*=HeW4(frOezjN>l4O8(LE;9$Glrr1Un%}wj z1(i9Tt!{(mP;aAAH%SC~=BWe~^yQ|9eipumAOKUYR-(?DoF?XY#Y#{}Gq| zX)nF6|1Xf<$C#wVJuuwr(o=tsj?jNxL3aD!;R@;+mtJO zqpbZ-|Ckd<{m0_p_aDw9LK06*@Fw!b?PGSA`t|kyUWopMV{DRFQYr0$uj@dF{zrFN zdaeH@fPDRbi}g{d6Mai>Z#nr}J%xSwNu>8N@)>;4a+B|bXuk>g_vM#DsciO3jI-%K z%zl%d|NHvyap`3}0LyKpt`m?joBsR0VpAM(cA)+Yg}(lW5kIrpuVRu-FaB@OM#}n2 zq|YXQ)i-R4UYC&aC*$9jKLn@DCjUt%f6s@MAJ?VMCjY#XKVHQj#!O%SS3>+JKE)}{ zLRXtFi|ZHr7|ElL*hJ%FcF+7z!@n>8ZG2~vE&uTno9;!sOa1z?eu?xxM&hY1@V(_y zQvT)m_vQaj_(wMR<4bMA7hHPT`LZ})hL4dp`u8@)Y?qMoKT6!4OZ#<^D}O)!yyE1~ zbo8?G+#&cwSO5I_6D_kT&U=h~U3Ve9k1=J1(?9AiQvYK7`}%)3r2Yq2lS}%&4SQy7 zEyvt*y_jtFpXt({5P>d{uj_)4`X4`L6Uh4G)PDy4g`L=+&$P42&vP$P9JXvyzrOsH zxZ-0Ze(RrYlB0HKp3Q$8$G-eEh;!NGA93>KdAegWLRJIPXOsWrf43=?I>%uCOR~u4 zclX)k?{_bS#4MZCuP^JXNbh4LKL0N^iP)L)>5_i_|1Bi`9Ch-es2_UsW&KM?{2BkU zP1VJqi;ePGmwfp}s2|z#fBZ(K!aE6`K<_k|hV(whbbH?9ZxF~jI+Q;P|GxZZL&`sP z6H}+(`?hBzW&M3f`Hw$mQ|SKlY(T#JyF$wUgp)7xtA@${TuAwE{gq8|RQccBEb{LT ziT~y9rIn*1*zJ8=ZwiV36&GxRw_G~fza0O5{=eYjms8VGV_h~Ue@_ar2fqBzAia-~ zvgCbBf5PsJ|FKH@@)v}Z|IQklu<%3T_uP>34}NRYFGcxqWBx1f@5>(-B7YwPBeoA4 z|3pLNFLfVTpK|(BKC84ZzZUg7Tm9SVUJ{c23w7b<+j=F^`xxnF=aDPEt5W&D9_PON zuLH;?fA8l^^59O(#-8BUm(_#xK1Skb)FzboznFi%ALq-z5oFoqzx8=?34*QY*o0bs9Q=IwzYK|g?RQdo`nxoHHc}SLH=F#Wbt{vqkNBE8R(NuG3*0qFX>1h}vNrjYT&s=KV+0{DDH7f5uk5opAC;BR=ZQmWoY7d_2aV#9TE^k^Zkndx-9B#wO_n z+=&bkbJa}X;4PPae+sb&qQAh8Iscn2fZOkBvImcPxX73NHjLBdSd(7Utk2TNKJ6PW z{`vWz?b26x1?KDj^N{$rUlwUp@#hw(A?c-DzlQSnWmDTki`9AdN9>+@vr78uubDG@ z_WW3So1H$4*<<^AZF#x5GI#d;+4iWuVEd94H|9jr7KvbG)%2N_%ij}pe7D8TJ|2{U zvOYIB{QkY)>pQnH()WID&=W0*54@8b^!K8vt)CW8f^={FN8Nr_JPB9bvo|N`IXSkg zW+=C?-&~&?Pv(qEpAY6<+Rtm}R#x>*2mb!O&w^c0cr>@}<@fLX+rHn736j5Fo6~o` zF1PR9&*nk)C?oq^ZlsK|$#ee|L3!e?>Lhth`i7PNOipm-wabIrM?W8IDvkuTiJExw zR1iExx|Unw$>;(6&k1@KMxtj9d?cu?U%ohbG!h(6d}?v>I9`h$%#9k}?dK5{2Kbp<_u?ACqHTFAXY7f#+WxR8kMx_VLD`hk8>N_-5H_xs&>HBKfXCf&klMH&JA7? z`(WHq{uFo~&td*2oryh_|( zU$3o3U5_WcbKeB5K=%IiVf(4R;8 zUPk=NuNvKR`mvy|=xmS-A{QSDBI6DP&0RNKpzYwp!B=d|8C)482OD#G=qItU!Qo#c zK3$5s7+e!i+88+5#*}#y1MNBE-eB%j#6f#Lm^;nT2`}>5pC25)PDenp{_k2!0)b$51`(ax7-C^yFJ)6i25x0MX!nv^!{eJJot#!Hz>0E z6R;2BPFWIiqtFfa5S}Vy+;MrS&kGJ0=2_WE=(1~iTKMn{;AV>v<=h= zap@^^Z3-8lOhwNqFxsO4_Q-ekIDOHh(@G-?3R+^pwTaQN`;|F8ug%Np`Nd;suja>- z$8x%Ab|SXX7k>`^^cmLat1k&^PwkEm6x|wZ>f-Sf#5lymA;h>-3#uzmf3mvr%uUsm zZ?3Ga{N-n>E2Dqk{*yNrR#%o>vGuP{f1$dv73aHg{Hsq_S3ZH`bBn4gXY$%@)s>e; z3i?mgRagFcUUlW*rL1$4$^!V;7bE%ofBMm>^Y%re{eurg4h=7Y|K#Q#8l2K~!>_*| zRQ~3HU|X^%NWS-4UZ06Qxxty^<6N9Uez)i5x9&&zz5%}Ufht^Ehi z3sqx-+UsGzt!OujaxXiR`!U2A_{*}~V1D#p5O;EEPuKuFFpj7_1-^-#V7}zvas3m+T$zKyHQ%OLc^9Os8k%tbk|d{{P& zxuqy4mJi#kC}LkO+O^kFKUiKdmRDY|={v}`DWk~LGZDnfN8op+ZK}-cDT)LGj31}) zzZJ5h&=tN?m_Xi%GbWVacxiqxKL`L8;clcLHkuNYHx^Yq)lpQz*m7V|@Dg<}_BVbRZS6z((8o?sd2|};*V#8ry(}m= z9Rv&VOM?juBOhsf05PlXwqVl%lpmh|&BvS>hZFFHqTIZ*`LK1~yj>5o&c22?^zFvr zCHjZ>MXK(?7tZ`@xVHC!yUtI|jh>18cDOc*4tiGVjoF8tNT&Wcnfa5|59L z3(9kV!v~BX=A(^@AXeKx2-;1fTVvTEu?KqC+RA z9K9i05+oyCkwZDrt{X0M_RU2e#h$dU*z|Sq)OKYZqg{*Ot5rDOk8)1g4l#t~Jp`H3 zzQoTBKlNW_tLwaY!SXzQW_UjR|G!EGZAkkqhOETDq2Gq`FB+A%2{CPe{SEdpjv?QS zb67_z73c1UAI^Y2tS9Vul;fD~$PDOq4%l?;-$Y-AF}}O%#>!p)gtilXs}l69%HCi4 zlNR)&66jy8L%(YGAKX~kivHB@9XD1c(04k8Hhw$$Rol_8T8I8q3;Is2=wB6;2FYMY z6r9ZlLYi<{=hM$S=;>#<*qtmSX_KAnG)Tei8aMJ$^syLR(dz^t0Z-_wUgM zi(p)pW5;wSs?C@Vf7SGz zi_p)lihS+iXLIa$0E6E0jJ_QBNxNbCa?qP?huD<%On`=cx$c}Gd2VGj^rYV3H~mA7 zL*K#J(2PR^v{{h117($uejNL6)h7Ru{<15ox0PI0y$!K>!Vt!EWmn{EW0~(q9VG8} zOrP^v!;?7v_b^Uk-^1A3@FkQj@YS)dnn(d+aAf~xKUQiUdVIVPu?h1*_P3%f&BpuK z1KD^NrsD8B@FmD9}9+CAmVd?`1}sy?)&#v^+8S#<(abZ zun!vlm)sYlupQ$Jr{4kSb1pZhpL$YeeKa^cA9?;-PB1WqeOUPN>9Y6$ z+xAnV5hrKGlM5rkrd?=X%SS!>a89JqjPrPn;RD>`Kf}KxU(e=)>AnE&ZInF<+YO@6>c@_o;3K|I+WDL8Ws z_)jQgRf$oeN)+&qPHccp&y5G zOnel3lx1Q%_9)N9$FWB_Bi3$991OP62m9fJeegl*%6mZF(ATt!&Ijq+z6}y6=U&v) z|LA=)J7#2G#@2tvO<#r|+uwz~(LdM&Kk6@LzY^olXD_nlPrDCdoVR6kaF{f_et(ql zcv3&}#WIWITIZ}F`8T-d(EHJ#hjhXFi+)1d9K=S_fyYzaPr|jQFm`4vWgM--b>S6> zb=7piuXiApvX4*t)#iF3@?+)QZ_b&&N&ReBNrV3k-yL$gXXAGn(x5HwH~OL<2>bNc z&kd4hJPux9Xzopleg{lmtu3?hd)8b}+Z(aDpY4F(E-?-@!te9Z=5V~4kM^gGZS-Y1 z+X~S3L=Z1>5I6D>Gjb

      SOFBK0pwEDqTA3e>R~C$o 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 z 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

      )-47|9A=i2aEWBZ4v+FM`MbW|Nb}V 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%0DTtF#N0Ciu&i z=ErHPN)vvbuxYCQVjfCtg14a`@js)|g-w}kKjk7Nu+@-nq|u%HM%WtrCZaLgq94#a z#Y6Z<8XbwIO3|eHPO==-UbiWlG91%JSgXQj3PjqAI$zq_=+7w6F_qRz^_#}W{D3bg z8exw#`jXA`w;n`nU^2)aMYy3#n`n!P{5qn@H1od-6Hon|^L-{hp6*yV{Hq0$!YA-0 zCb`p_P0)QVyjsw!ie{;|3S247@Ct#e2S*t`L*UmkL>`V5IA-CD?Xu8klz}4d3LGPU zV|zv5qYcz?ekkyNt}Hjum;v zmLu?+4b*Yo7jh@N@ZSoY-l~wgy(sW$sUXhw3w(wPe_Y@+t(LldS>T^e1#z}Q;J3PP zuh1XPXl(Zje2#%S&W!>ucHvhEyu^i{7jjEo_z8jE?!tc}aNXjQ$=?_F{3M``zA5lK zTzHef?{wki0>9gZ|6bst5GiT*2T( z&Kdd-C5gM^lEmF{N#gFfByo3KlDIqmNZcKNB<_ws z5_iWRiM!*E#NF{n;_mn(@jGbe+Pu!4E{p)Lk7JI&J;ZGy6bo>cRhYz*b`D+N->FB3h?ED`H{pslc(SrZ8rMy!u^mJX2j(>+m zPmiU%f3(>1af{p=&=01Q>#^V`E&MNA>g!319qzI4ztw{GSnLCJ(&|4721-}1l@|Y; zY|--;i`>SdUd9Or0yFZ3Mdj8?hToCwZ74Lb~TlH&(4 z*8=?4sIOtprxNsHjss`E5PBj}Z3oo;1K4?(lN`^8c_E}_3qHyIUC%9@6mpaOc&p;m zEbwH%FXl6l_B)~fctw@`4)RjLABk!^r1m?69g^c8F-L^78N!|@gx)|$+s%SLIldKh zXTaAAxyf;zm@@ogybCTmdF^2~1A=LXYHl7socfj`ve5}fyoL5^b z_$SAE;@TWk(=2}ec~LJV2|jvmYriOOvLDy}@E^i|lKr@t7oglipXB&QkI((W4rK}c zdj4XmsIS`-xTe7SO;FzCxI)Zdfa;RaGdUi6N#(p=;Kd0(Vr~X!9fE&yT%ql-QSeWW z_ryF5=zk>YF*)uM^FYAMg&mUPJux>0e3_t6j_b5O7aQ+bnwiz3OWjQgyB0G zJ;&P^{tZTdl;PiJ_}dKUeEba8IuoRiNl(sy9;4^&XbHo4y;NFoZcnb~Ax6*ncPZSg zua^{V*4OJ6`fdyTMTJv&dHw3~2;tm+Cg7Yl6Q8YcQ_q0HO+9lZ8^Pzt>X>%g&L*ES zMPu^e_Wvy7qvIIq8DqG%8{yo}-HL{A-j0SS{Y`!J_{G$R+lSjzk55fLWs1Mar-tdX zjp-j_IM;tW!?_=}T5#@fG`7?mw-2xPV~W76ciq0sa-CE3X1RQ-yu^pwXC~v%%cbj` z=y|z#zrg9a-8j8ICO$kaal7%jw2SHUs5++I^9*0h@S_ap^xX{SaxA1w%LVv_U z-)*5kW1+ufp{MH<+RSq0D%`Zg^%nX?l8tM;T4}-8Dcs~AQ@E+mPR57Z*(Nv4=(%6% zW2$!^_ck+n?kCSE+|*O|%ch=Pj1SlIdWP4jW7_flm$&PAj9%+Z5Rd;H4>Nk+?zEk$ zyu7_{XY^dIE|=LZcpTvLM;IS&x04Dt?e@CDO}kxSe7N0mEq;5w!c9I!7W$bM`g|sr zmut2K*ZypltIATY7~{jsHHqO|F0XfvFH`iU+_1t;J80jadgOBbik@)J-{yx46}>4} zw>wj=wu32m9Fx069n)@tIyU)heN6skir(bEjp4jpyBMx*LePE-evILq&)W>=etyw{ z>;B6um-c6~T$3z*tNq!e*ZrEwU(f59^fo`A$@J&;;dbV@_CwQuqKpr>Ta4k{ZoIxY zen`=q<$7M>X1Pu<{@l-P?JL0OdAYPdQ@J><+dJX>`bg_<>bc#bXPd%JdhLg1xn5#= z@^bZ4enR^2>#2DR->mY|j*oN78D7umd3`lAocE7A6mIIjQ{krmdYnUgKEUK2Wc+!( zcUkab3OD7RP`D}gZ43Q53%xHxDrfQ^q;Qk}IE7QWc)iSIc$k$ppm3A_JcXP57cxHF zZc8kDmRk6H-1g4>pVvEY@4UWhR2j{3)hpaASF^%RyX~;>*=ga^%J^{m%wzah)G_UJ zTOhgB4A=UY`s;RW>VHw?HR&%Y+@znN{Eg)D`8s`_V)6+ndXrBj<5R`-=k5244ByP? zS2A3;U(!d{9VI`*=vOg%-cBnS{yd}S_WZc*RA0Z4KD-`vJ0)EE9*O7eOV=IYAGdui zv$Ug1OFLSpaMEWZ2~^u53m^T>LbD#b8K2K-CfEmXKZrKdAN1N`lg~0mZ|bAh5fjeq zD{A52q;Qk}F2P`D}gZ43Q53%##jdbGgG)si)tfr;d9jy&lh)v227c|Eo=ocs9!3x15@yx%;-aL&IUivyfKm*Jd#62p1>(s7T<#r=5^ zqv!h9Fr546HVeL!;au)B7MvdHqs`Q(i{TBDMEoCRcq7BHC{Ap|r<38cE%+jZoBpsw z;imu8Fg_a@e;&tpd+)LE*YV2a-_H`4bi6X@{T6z?4#lL;S2~k@xSz~qIIs744CnP2 zR=8=mN`;$p*D*faZrb-qpY@7{cADPgA5%0Y|D6gq>33P^4_fFCS?G0qHu;~h(7$cr zuj96eEPVD`=nq)vwI7n)&np_*om9tWd0$t! zX@9N1Nx#fOuj|(=uP&F#XQzcvo5G0?AD{DbeOA%X?iizwsbkuG-11&fc}+bpDcrQr zOofx4KUT-ID^tfNAKi{jKDxb_^i_(FNguQD-)y1ZrEs%eKCawmi(K7KO+8yJa*rx} zBl<#ojRu7 zIdyE7_oBkh^6K%nNuLA0w3+mL9)R}?I{uSBF_BaL>Go^#Z&EZS|BoBTUQ&Ea{zokQ zyA@7)a{Vt^_&63j=<65a!{dp*ULc&;`y|E3w2z+8H1!W#^=d~y_S)^EMCr%A8dok_3bD%pY8Z<~eBeubNSbo(Mc{QfVm zcYfdYg5pE;E7URVcst_sxyo*4xpcjo`V?8{^?22!|G4d_jOowq7E`#X=VpbQa(7zz zd|Z8WyEf}l$5m4w-A9=EoMZYdSI4x|?T+||7_RM4cm>0?{R!X1@I{t-S)y=LpBf8& zy@g)i-!aR(%|d^`!vCO!{-naGT>O5SZjXe2pOrUXwNt{w44Cw;$2{KG}iaf8q1J9KT-4%>;e&X`tjdpYTbFhIZO# z2%pUGb?TV#DGcAm@Z?h@$#sK7uWd`DXBd6*=@opN9CWl1{d9RK{&l$sPd;^m>pMoT z>xeSwcu4fK7#|(q2)~8l`x&3)(<`{1W%z7He~#g|GJJ@N55)g74A=9wgeRY-!8<}2 zeSp!|GrXALI~YEf;RhLB!tmD_uG=OhUt)MEqtExs6VmfGhSPI-v=M&0JQV+W9+hw% z(Egxn@4hS47>P~}ttxMfMjApZBWs;#O=Acz0;`BL zHijx94bc$2xNJ>hXn9@bTBr2BMWID^ls*uujXa#fh0Z5N@p3cDKRL7_5)D0A*RZNQ zT2tK^btX1MYRX0OL}Fi2SKAnESW^)VRYdC=wSb1m>NOEJaeaA1V+1sH6((Uq8Bqjc z9I36StBh3E*Hza>le$8g$st!Vy#Q@h1azh&2~5}kdtX4D#}BqkZNzm3GG zzs81o2MScI;tJ5&M=MZUUu#k@*=bS@vE?-%$v`AavqeLzs%sHjn?lMXU3N!pBCyrf zBnY$%P)$YaqUANAha0M+(TGcBLn#P(u%Ubf1vEJ8N0iSXg#C#A?nR|{QKx{quU)gs z%x=hvL_tBZ-qmi9P)9|V@45^>X4@|BTL`I=~z$=}RTURhaPyF&CAcg_nnR(~lX+#c><{ZNFP=ArVMHIXZD zYd~XJQ5UU7dod|lxj0qD8gy=}La-+V-^NHH3{=$A;Y?ReMNOo<7Uv)B+|)u*@&*?j z6P~1rR_2iO6e(}0SsSWEv*FxH5oQraq@zXS zn&oO}7YZfZr+!UTb|4HR!qnb{Cq~O@xCavb652>DlB=gwhL%p7G%HlPbP1va#*B*v zc6Z6*MWJBn;zjf4IpdlpPMt;nQ^fyd@h|?S&J?itpDg~x-_#ib7XOpQzxbOvUBKdh zviKK&Q>O`7{7)AD;%{n^fW`l0@sGdCiA7Tho+|#Qi2unF5s6boqWGU8{wK?0kvLf- zivKC%f3o~Xb<|O{P<2k8D6pbQf>!)b5&x6LKfgZaL-3Dt{G}{<-;;ZbsY&$OfvIV@ z3`p5%u9vX>DJa$t8t3{{U1sQ0hdzYzQTg>eiq2r>zZ3aQjA#$3i#a`yu@o4U(?^Ne za^=pM3?QBSiz;2uYv@x`)&%4?F`^Bti$*A#PRZ|5c}f0Y z{7m^YuaZvwW_5kN^a}DOI}|8>=%!&i_`_vzBfpQI)! z{7nAPH1Zo!&qQLzkJ-vlIzLFnX3DBXeiI|YMQSqSoXjTPd2%(5P5W;FmQMaMa#n0b zsvXEPx2zZv(#a2~Nta_PKiPjcex`hSw{JT6+g04%k34)cW&Ig|i4pw}HCfZ7GL!sk z@H6GpyMfcmpFK!sJfZUIohj>POZ;h8^4nBKl7B6Jru;@QOecQ`H5P1(D3NWZ{8|7e zM&y&!q|{E8pX6VMpDBMD950>x@KwYGABd2<#J?$P67riE5g#Fe*qY={_#fR) z!qdsWpyY2;`Ss3}^)+NRF`^Bqn>Ad19&l6sWlQ{tQLwKO{5h0H{%9~U zk#X2&mh~Sj@+YZ92{DzQs$(pEru^Sn;!h<7D{ODeUE<%APtOgQ7!e;( z4^!~?Gak4p|F~uRvuKzUspsA0nOoLT%lM~tnaTnEXruCf3O`f+1^{FtGyZnv0K|5s z{&yYnrz?M}y4lRjUjTll{BK(N-|ZAEvFY{3^2{ykF-!luJuGwhm2y=68}T#c_p{jl zAO$OIdcBD}bIb3uwEqK@G6x_3+yuy!ztIwZE{>G>_51N`@*lOxKNOKUx>)_+oJRgH zE%J*fSYT@v|H(hIuK&{_zo}a0*{-sZ{U_sRmVcea{wI|DE4BZJE&lIQ51;A$B!6le z`R}3sO6UKxM}rvKOLCX^H_Lw>`Av+7>sQJwCsj_8Pxlqg@_!CMI{D5Rnel?kuXm=b z`;gznh_4QT@-s&y+vH;{QJCEU-1H{PN5#f2hU(m#&sM^!SbB z7vpEjzuzK1mM`;9K>yA+)7C+Y{I&*}YlzBE@=NeD<^Ka1QV|ixQnvkt@>ItUooLE` z9Ds=t?V+g5F_YQ96p$%DXoG~vH{v9fR z+ZFQTJ9lZze{PM;$o+plAhY~&OZ=Zroh7!`E7bo5OZ<;Ll$xLF{|@|2`QHbSuKcf4 zXNm1f?SBvQn>M9<{B8GGJV}dqoPSHykCZC^eWR0S0dW|>wV228;TxdM_+}oiR^xMg z&gyb}FYir!YdhNstPOcGR-)}MDZsa-=XiX*PPfxif^Ssf`==fBtyQ9fX>)k`7^LgG z#dO>+&>8Z0R)+Cw+G*r9gFXUS36Eze6JPq>6@4XAs^pSKfeKV#P==lz>Y!S zofTjIt?U7@VBt;KPplm3X`yeBuHSI|q4k*q4sF9X3HLxoo+qof3;7mI#`hUIez&OPx}WeGTJYOy!d`)KYXt{v;A_3(~?~_7vDPXk8g`-cD#r0 zYrl{0Y}5CDFM2(NbNXG|5XX1O!}zXc^(}$Uvh%Q!$65U*zAfH1z&ZHYKL+CPn;eq& z**BaPOztjO;3d0VyOO@;xnKa5Ju6Z67f|-%fdPD%{c3#AG?#j}9pOx;C~shHLkxB< zn;Mu^mf@QLp4&I8?{qIOmER;kJ2V!Y2w9{9)vWQ8yHiEoIK4kUL3=`^G{ znCJC{bI;-XhsLN-|M_4V%cIZJ-(&AZr#@4!y`b0Ds5{sz8D z*_JVKt0ybaN%jx?wXX>46pIM+O%BXDa(TdXahw&1H#swBR5{LbZ$jrD*sL8iqw(F= zf}w%7>8>1Jhm=+_Di+)~GW9#L zJYOl&Ne-2Z>i5FkWvI*BQKz?|Zc9= zHtG_?h@4uK?VnMmZHPI$5p!0a!Z+mc{n)z9KxZw=b`I^IzN_9xu>?N(XLWu6X?Yn} zt#r`F{*3ncEb>uXpzjwC=`YWzo%{fFb3jLFKLF1;8J}1g#<$q#WIL;=eReB5kw0I4 zVjH|0H#W<4<%ZTF2a@>{H^ zw>WNk9Bjt-*{k|HaoRU$IR`NhOw%jd-xIMW4?dGuI1BajeumTX9Da}CJM4FOa<{I8 zAFlUY)7y=9JO_Tg5wYkYq|Jh_=fcefbb>ao!L$oiVJXGJG z1)spxfw;$uZ>5fp1y7@WQ+>ULJYB<_cmT1$lYwuM=CTiDO{WEBej_*Q)Zd^bEM&|Zd^gz2j7_||yGh%ToEYf@XNZ@_oOTkxIN-q%h$ zEg6V$uVj4T;vAHx820bV2wj|8ko?Ab7s|DqomatD6fekc$v47CM^CpMU0KUs&`}wr z&&lswUkuGfeHFvsUT&lM>+uHS{WAmcpP^l4;+x^85!>HDj6dTY(9z}Oy+(XxJwM<6 zKH|-L_h+Dvy`qk(ZXLfY7u6Ln8`V*|@*Rdh{$I*R<+^Zp34ClW^hhn^LpgJN zt?)C%e){IOPxU+KchCFa=V8drhF?=ZOMaaVzg~dYK>h70_&^@&uN!@qv`JnEKmP;z zzTczoJ1gu$_Q^osqT4W2R$=kr~ab1IW09I-q*HKy>iA<%*6lvUwDKv=~2%QShJbsCUty z>_eUZ0YC38GLD||jzFI^ypZ~-CmNjgf5>*?YnMCi;1MTYu?%M#wJ&N*%V$uY9DFZa z`u#?n`%pHWei}OP^o(gTrfGWVW4EE)r6~VA*r5b*P4#^*%D&HL$IeZn80{~x?QVWZ2B6u0+nazxy`{K${nKZK9E#xRISBjFqGz|MLc^FHi+ z(d$KhWE951cOLq%cl$ff{cZuihm1Iaer-D0DA3=TMp!p&`62v+FzV}jQ1?Io@{q+e z&RLM@Osn>0WoKnNGXnqk`Sxn`gL4Lg559ffgV_5P>g*2q-g?i7m6+!g@MkCP-{3s!_rz|Ub;>E2 zaj&O+y2n{tbZ16;K4M!L@}U1{DSHRw1K10^b4XuvT=F5>QMcDuc=?f^iCB<5#A)e; zzVNG@m1sAlql5TW_Clx$-=-JsW}zq0NxXJrOcg_4v0IH-MgQ-03iFOSt0`twp}oBc z-i0`xKl+t__~Pbo{<7ox*1u%G@aw-U@O1xWjwk!A0PIZd?Q6AP31WP@vK8&JpnJDC z4&a!4iqg0E0&)2E!DjR$GCuh_S`nLMTm9SO7nU@o``$Dbn&ErX|BruCdI+43HvTPX z!t}LOj1sXCrlvy@@36`T7Qm0T?dTX>-}a?%@`|tf%Dgp#63;mhZQAem4%;Qa;49@} zTqw5vYESYGsN*i;fp5j8d`p&eqCYL z6K`xpcTQp2CL$rtAFc_Vbl<*3-+)a&8JEn6@dvgWl7Kq8Rp5RX{+z(YUrO2&0z#B9 zwto@$FayOmq6Ci7fw4U%@DT>;IO_$jy*rtVeh-_v;gp1(YJt;T^VIDN0@s#JrfnBE zdQM~8B5?Gk#`YzFV*I9x`pm=|rzz4bT2LwLYh2JIcPq^?Bfs;q1Zk_Otj6~~C z`scrbECXNv(VK1$-xl;qeY9V#7I@Nb+ERB3T%Vy`X@=O_zm4kl2g>&M`(~=!&XRw! zTy(BCFZ;Hu#%OQ{5KZ*a)=+sa`=@x#|56WLqOq=2|Q^xzrvre@SiE@lkGys z%}t;m#^Qj+$5{AKBurPXY_zX*_zf2Pc_B9$A4DGs-m3&I8mlN#O#EXV9qc&_5n6AR z>R_m#PsSh7FC&dSd6<**^DgA4ZLHvvj6eG&>?{y`lJVpjg`dYhUAfMHPdfY;7JR4T zN6*U6RmZeDppNMo-3bgosE&slxb9O;`g+jOX3}p~ILR%MB;vnW9TPr};g=Y$rjrFS zi1Fd`^Wzv!KBl)x45xe0dei;CslV3K)W22nG3lRCxJiG=LjSyl{)EC!`{=qb#OG#RSnQXnW8yQK;bDerSp-EDPW(B26T>k2pJUbNu4Ud(dMhCJHLa%q1f z{x?Yy@xM;doA?feoBZ{fJd?k!Uz3kt$ujLWj^W%6lN4^+t%%{AUdInpuC~94Z@0+Z zVd3AZaC)Z|x0@ab5I$bf(9W-pO}pvxns!^F=t)n^(rUU zo9Pd>denYsmTQq@Blr}lW7=^)q)8IJ+3fI=A~5~osKQCE)`1|cCq2u}M?so~a7{z> z^XLy7;ryznUcv(BS3Ru^$6QWg)AdVy{0TJq?lZziGyH-&CVULTb8$`^;bY~Y_@BV= zaSRVIoVPFCKN6o$GJ4(b5dJBKw=zE5KaVoJfYEm|ocsR;hI9YtPhcePwxOgu%VpYY>MH6b29{M!lDlXdAi5~sQvaJ#ZR zMxmdBPdvO9s%{M7F}27;<#;+?7AnaxR9#!`Mx|NQW6bJlJpDAVc&d*vkdLwnJ(uI@ z)^a?rYm(4&d$J@pibPR0LGrmeVb4VQpf4U~uXP%$>ej$Cl$a=Jx`$Qm51X1rNH~Ff zPE$UYneH*lWX4AM@FIU)(Oq_WMp2^VAqi#iV4ivkUp~PI7sCq_P*suI^5r#nI*~mX znv_TdHlABl(igWD&n0(fcJ>SQk z=}SDv*EBKl)E*A?GkQ3*K9TqLd;X5X#s|3GNM7Y614)?*x<57&RTxPSQXfbd?nS3; zft0i4Nx$TwI9dVuAC*65(3|-OAalC>T`FJY74i?X$k*2s+le{bO!@th-^7S~CT_CO zwq5Q-UqV-hK6Rd}_CK=7*YB{=*Q1KuCF=(k`A3v|ztVpU7|>O&DSwp3eg{;c_G`gv zZl};yt5gM_RC!5%x~ezzp8_nM{yj?mQk7rtO!=R)L+N0yFbH8NL2-PWxWm`-YvwnvCN9 zxc`pz7~aBIFoNUMbzrm(=dif1W09Jn$+9pABOMw?K^@-B`b* zd3rJ>&#~Y+9_!M2vHmArS}E2HoKb6oV!!ovUbs6c@A4x*!CDOu%9N2(rh!;5T7h*7 z`6$<0SYt7Ne4we|))mecysp9eaJ4|iJTqb#&;DXTmXFW68#tGZwA3?J4N=jgB(a8T%++!&2;%wn*RW1! z?rbVsp3r0c7_V5z^R&Q7w;bpubq*t~Tli-z7*3;8LO#|vlHF*1<37mxA>?0v1=+Ed+`UUOvB;77qI5# zu@QlpKh4M%^_=hVZOupd8w!)Bn+S*b(5 z_&WSp*V_u;B%R*DdM6!kIq$=Ycj?$veK>vJi*jw6h?iKOM(bNiMmA#K8;A`gJB!6i ztZDBZ4LlpMvJk%1^C_pj9ra3f&c{0CBIuKC#IMr}r9X|w`cv&s7tl7~hgiF%*V4(g zZl_T0G2lUT#Ebl?>#u#&bh*gRn%`OQdmBEY%ka+Cu$x&1wB@vApf=9S06S9|j^Hs- z(t+fkhK?jZjB*J(V;!wnm-nL7HAN>?_b-1cSw?FA@B9sUw&csY?<N&R$5=3=gIBGGh$0f zmTvQbET`z2%Y9fL>g244yk_dN$wsgR*)kjcPJR5nqK_ZmI~w>1&+x6^`LfeKJl+TX zj_Ak2)06shT|_yiqa0`#qzl#<_6FYXOKayX(__JB;lt_b;4IdrexIe$+Iy;lv51c^ zPmBe3vosNZRNd{vI?J7ww6l|A!4{!mL;MZ*#Ia_yUJLjoyI}JKsrqj2{*c175s?YK@*R;-BuDKkJwfH$5 z*%AKKA! z!?t5E{vSI5GK*7fi%0Kr3cR^nDTaOxJV@5Nkh%V_>{rn)3vtPm6UO;_-fIf+uKa^} z1Dx}C9%@NG+WYVNJF9aCI>+z8T3KrQ?<0`Y7lhCU z&~p~qLv9z(1JJV~*-P%9)$!MBrc2D3a^BE&qw2#V3*6&PvV|VY>gNJJM1Py^xd0!= z&g5fl(4%VZGL+XhgYr*?zSMSnnRDYlHs%!mi*XqF@7cRz!EvBVw0p$fTVRX%@C&+L zn4g2m+_3aCHr#=htVWNMReVpdM2YiXg*pcw3dt$*q!`7dM z4Ss{?wC0en<9Wft57&Q-`esZ@)ANFBd%Pn%sNcB{Wh}(=c@Lo9pzFjD{qfAuP^aZh z?{$TE?yc~Hj1gO3!Lw@BC|5St-{+%j^KTupcxG1DXPaU32e95h&+A+1L0)Qur|@hV z^^th~4bQ*GF--ur*o)`R-a!8}4ti-i(vjM0*9Uz?-Re0-vY(Tg5f5X`eG1R9(U?AW zux~BVkv`#ga(t%kTJlN6h0n%svnmiemWi9UqsyMhq;qI*)4c>N5uAvz^CI`yIlNyNNf9q93Pz~ zdek4$y@B5uZ?2%v>*uTT!DsR|;MrT0lW4x1am`lJ z1->Hqv?6~7}(hv@v8mg<#gX{=LP9t+Ylj8~!+ zQ&=-In&v2~tpk7Ce zDvpm&bR*tf*-8)il-2_` zmxOMbCI&g>8L>{1t!XrGQ8w^gi@uc7%ljw!Xd2BY3_9`?&Bp^@5#>`l&~ZQ=Z(#ap z9W@_KQzFVmb6Rr#C5Gz};!S*T&67Cp@+FVM>i87eCed{dNT$Vbda_;7F%h3u#)7{?n%2W?ht#&V)W?FavHS`DMtd$@ z6$}1?rRnxd`S#Vuf=8~vd*A9<@TXUxIol8m{^$xc`=V(7pwV*z=DY^Y18+i{qq(Cp z#CtsVH4D#kb$ktDT$%^ogBZ5}V_!WN{1)anve57Kc%2z^?OkQe@xG$wctxLqm~tax z3eEFUj0j`=k+@D+8w*A=t`l{){PalFk%L&B)3JUz=9|7C$Hfj}CGj!mM08yglaH3E zxw)p)KEurOQGBRwh!53G>6c{C{+T1|V#}7)x_Ad;2VAq@Im|pUUMuwawyr#UbxSYCB#&Y4WBtbdon<3&&4W2; z|FxKdCOKKS-b9~3@q9S0YbtW_4uh+l^99&X_m13ps-Mq|_h8KOG|C~{ z`L&26BReQ=#;$jYVtDS^L7%Ul;oX6Sh6m}nT!ABQd>3V3{?Od`DSAdSqrdRSDxCNH zhZBDUb6<2_Qgy?C&Y9RZLC>BKz^_=oFM(np@$w-~`+(6imK2Nn&?k1G|I#wZzU#q* z%Gox|IgWQT42@%~(0sA)xgD@g$eVFKA9FHQKZ9JnOXDKmO_7W1>0Gpll*Cwo|o`D7$Xb;jy=hRKNVGd;r>||3(p8+Ou2!42r{~0BN}JW@ppms`~}xhj_=j1 zM+4vTJsJzaGvX1w*MK%C}?@4z_Zt?L4vZ{9Mu)3@gn zLl?kH_e4CMG2+$ib%AfM!aa_!PjT9h;5zpV-j}lt_i5?c z-{%?BI~HSe%n1ygV6@t_|IKQ=f1$Snf|Ms_B9R6Ujv|94BBWImPDS=Zt7C~GF#AkDRAZjA-gmGuXp z(KxS%eLHZC_&3<<=YJOZo3112$hG68CU$PFVpXc}1 z1JH|~r&)0|hy=Y7K=qIq&L7X25qjH!9_ z{jv8k@0fTePYJFash#1PEMK*=Jr#03P|tJs;JT<8W1{yE=Vm~6EX&Lx>@~cf=685M z&2r3>(Y(e+QNOJX6dQ-HeW(fV04XH9Ahr}e_nE-A?x%hRZINW zyT$vmhO9=s7k&N%aa+z0@3uj#uqo84J(;LXP9MVw^-V3++PKt{ihV+E&z-$!~c3=!Pw6ZkE#on7?$V zX$vHat|P`DPrZ&jOmm0#;yzv#U2Ef>Xj^~Z zbe9Z_Us7b?{h(=O0H=H5R93%Q2SfLP=sZT}6f<$oW2T?!)djt}LE}+t7&iWoytYZk ztE(~JLhC_?cZ?YA5!ceRCbS#Z`F@lI*V~X!G_>|c-8%qA{)%~=)bWY#mru%fO!C;A zq1*h4G~*AIcJ{x`dX?|W6YGk+srOvPxCQyf!WYg$-e1^ts!sEw?VSA$=PBpO={;X~ zwqZNH+fUPyPo4d(q&<_kUX%1>zcH{I&Eb;We?xudCVIE&0L&NoFyEMk`9_Z%o2vVY zi(#KNun*mPB){{mqOqjxV>X!W1@|1dFLWFJ7smOi7pb3B*O92-y-z#GU$|;xqMr-^ z8x5J-M@die$qnID%mJ3p&jPrwKw}iTPjmWdIbY51(*)qJly3}VkREhjpWZKc3TuZ+ zRzUcv^p8_0ZwC4st#3H-9#o}2`kK9Co#P(SjwMEYtn#x$p*!;I*%Z3?Mg`s{nbO{2 z3yk0Qig_@ZH->iBK6ZV39_FID5RnhGI_>3CZl9#IH?Wqn^mj@Bc?Z|X z&=J?k^HJ|*m>aqs@9mTCJJn_NU+PP_rfe2ArK%eUqCxL;$m0V;zR>$^(N;(iU%G(QK|I5fwp&+!ht zqP;IdM~v4s){S!X;C-QQV(gy{{4LC9V@>g^Z)R_#ciZ*$;JWNEuBE81=-xD~`AK(g znqt)&#KQaVBU*}8YAw0CCoS8UxaSOhdp_}K`x(eQT|)ZFxJU8mCd}XU0H?X^H{tjB zj&CdJF&FshHm1qy)+)6GIVVE{6%_abO>{SVKx^??O*#r=G(C# zp1(&K0B3;x4n&O+z~mKET`%FUmo?kzw5;rl>ZAW4|a@a{OF167yJi z_v2`c15Ezi#u$diG`ej#I5v4nnL_H?uaosc2Jonl6?E0ByPye3E#)gL)@SaMRIC0|5 z`jfQyFnZ0zD(7;KNlE>yn=9!+1$- z$LJsLVDx`GV@JQI`ag*_>-h1Ti63p(W8mv78Z>GWr9a;PJHDr~pQOj*DE~72Xgf-O zWy$wA`f=Js7`7hzOOxLZco(H%J4b(MXh=pErD3b5KcT18lFINpVc1@xKji0SpuCp| z$99DNM7qp74yXE^BH~$Zyi+rv%lF;vor9jb>PfO2{Sd>&hWj95^W%Ss!o+)#(!5VI zA2dyhW+&~h@XpR>6fNmY8|@D%Y(D|aw#55{N^7OMN&5~?`9@KqMSKujKYA9hGR^xm z)!RqOp8A_R;{8x*?72|!qK=m9MEYXRO>9y6XZn)eHmkHE(jl$B$#upLi{Fc(ssdQ22Y0`&a0WfV{^p_@ml1lHPbi)RIf>io0Rj*0EkzPYO$oFch z_pPRpu|x3?@2^Rdeo&?BcESCc_+yQ!*iO=an*0}3`sjU2XkNmxSr?T4x=Qy`U8K?Tl1e{7`Hggf z(rw?%re|``_nB#H1`=|&2|G=L2wLRA7Yh6y7k;zAab<37+Xb#Fj-^!!T)ohN;g1O% zGw;Us1%Xp5O5KVDPM1fi+c<$=mkQ!+u)xhHupQ?;VF!$YjqP^=A8nwH^DhD)>%w;m ze7pu zi6;(>?NxzKGf>BA7dU?lq9pm2!0C2f>h_4hKb;EVtWfBa<-)%#aC+1ubqfl7PAZ7A zX#y{H;kg1Yap4|;m%4CVi($Lng}*HD`7Zovf#2c6w+Z}C7k;&nD-u)Eu+AFW;1rBb z&I&yFj#EwWoWOA>%GjO~_|*pLIA0a`a2HO1{hht;b}H%Jek*ZzJxW{%r^A%(8ZxUIbII3wxZaYo|qI3sa)oRPRY&Pd!HXC&^9GZJ^l8Hu~&jKtk>M&j;x zBJmq(=i0m}Z+A>4dsE&5%5ir*p;WKqjwcd##}kRWp3CZb;l6 zHze+k8xnWN4T-zshQ!@*L*jSP&b4{P7xr8*?CI{WiOQR%zn+MGpT_&<_6VAEI{aOX zEz;q?x8T=f?3<4M|MR5BZ?Nd|B`BDV4}DKI9X`auXSYQz){mv-6SL6&7@;bi+>k}? zDT|(0Aw;I*^J9zME+KTLqyM3WPlH8ny+zM6mU_R%LjN_3-Nsn(M=gHxp-rwgeR)S& z`1H5nuUYV4S?qJzV$T~b^|IH3!+p}$*9{i`IcF*F6bpTp1;4{mUl%O;oUxQQV&Q*} z1*h+er}NK0Sp4=OOTBEg_ygFa(#kD(V{}cKTW8-IW zJq&y>>SdTSA4hU~N$q=Kw_)Oowh|E6zBt?m{f9ZpaYc`!e+K#wbBfg&uDjLIA7Rg7 z;>*wyIHGXeuLWM3px5&{YXyDs`lw4$%o2Jg#~bGq{(02^qga_kULtFJ7O*rXEz8w+PY{* zkVo4Nly`_cO!=<>pLF;nMMdu<7xSp<^Ou{;KO!!wBzF8fc{F@bS z@^7`!KVzZS^=a}yV4>IbW6~eB(4SGbS>8(uH~BayKW%2Y@)b^ez9mV-e}LilGhENt z6a7~hPUBwMOu3sCZpv-7(CayVlYYOVC%N}YQQ}{}dsEBRE%~4!SK~)4d|qex1B}1E zFQEDBq<-*Q+DtvQubT8rCAo{fM&V{XYQHu4#4LPvSomoFH2Jhy_&jgnQ^s&!?~4>} z^4E4S?PDviZg-lGuCHx|o*LKvv*{1}nV!5Jk6QFRX7E?1iTG{mqsyzyrS)0H`Kwd;?Kzxi{u;N{%LxmglL|Na1T6IPEcCowJg(}pnEGpaQ*Ko8H~qYo z;onuqwA21+^4Ili^4D^SKj)+EZ}M5EWSM+y?MTZt`Pkz5|5dKZf2T!HE!VW?+lqb$ z>`R9Y>P8;D5%0uzb`-P1RuVnPq4A*g+^jXhv9iK@bjvr!t zxIR2?Z(@A96}@S`Qf0^_}7W$c%{$i1Zeu;&?Ug1

      W-+NVaE%@xNsE8O(kqY5|q*y8i+j1P~uXAC|%KKCeG z*O$f}=5L(O^$cIC^3twI;ijJC$Fynw@(kAz7WyR?dcVp@_G#2iu-7`6a&_D@<=W!y zHVc0pXGrb}CYRg!iwxJ}MpGYseQD|ww%9?(4U>MIg+8WmlfFsmX6j>$^V^vnc)wO= z;j>WTrrceO&v(=@?VeZ1raoN?H~E~j&};jf^g5oK?MVBrDc5hYTbII#PfY1RyKW2q zHp8_q5xtMaljQ`cEyog1bX+ydHOWF>q;Qj7ueCADtK+Ikujgq@`Wg#=y(Y(`Z?@3K zRJl!h9rsLqwEvj&t%{FHe@NkGz3aF~_~#Xk*s=O5XLv5dD;Tb?nV^mv=$4-=p^pPI@fJvV3&d%wa>{~xDt)1L#3&l<*Oo`p}Dg-_T*UumIV zXQ7W-=yxfc%FFd^weWey!l%o^=OqiDBNjeqEPQ$_eBQS3X;wBj>r0Of%=+4?=*bTE zvHIfIvzmsIk186IzwNp}kMoH?AJ^sJoHmn>?gvdhhe&c4eU8FS`h10(a{pd@0v3Jd zS@cZs&+`_2UT1P6ti0V8 zKDu8s%XP^@@8CW!Z6?W65U<>mI_`aG_9(r$@5Htoafo$KGk==u16GsC(5+HR)) zhZMc3|1rjg>(A}{9YsUCD5KY9C#aR-yk4|lQF(c}x)?pjPcWSGd0XLTxy~uvESC@R zXfx^c_{XHz^P;3Dx2K*rHt~5D{$&a``G+m^SDHs9xx8NdqEzxa@g;RkJ6>PhZe@&~ z$#`V-yovGQxGhd<{mpWE>eN1kE;aeH5`!$lggW-A}z?2(Rd`!996mHUQx6rp)==WRbUs5>f$^BW+8<=v> zSomC0xJiGdbqJ%DrocMf`;mwR*#}-Q7rEs&}TNQ5ByE$*BMLchzKVjj2(n5bu;iNzJD}7&>a2~hE zF@NTEo5^r)wMR5yLAOzL4RcV|W$A`F-0R4Ci+1Qn+b{mlST=?R5*izVBwzU$oF)vhdI8Cktch zqwmL={3luHZS#TrejNADrHT*v=Q3u`FvEE~tYJ9!hb9X?MDe6@-OKprsADP@#}_J` z^l4!9y6y<)^EvuD%e31L#(xRpv!C(jc9_I)9^V2C=j~MUBz-u2n9+0lXgy8(Rz}bH zb3Hkq6N=s}uO1hfesa!2e?j3UJ?|H|ee#)}yu33R&h_W@$my3ddS0%2g`4GyD%{j_ z8{@oREhmc0}QxpyDy45k^ zQ`NE9;hZ+Yi{zpBzn$;WHS%j^VnFC|QpKN$xC0ulqs5Z(+FZ?+E`i z!~3Z?Pq?-%CF^xfgx|{O_4tbL&oErCM65MIjgC5-+yhU;}5M1MQOcQSfCR;1)Z44=>FPcnP~!!I)Y4u5OiP7})K=70Mk?#;s%u#? ziZD6kN}gCzw`x^H(aoz~0W}v_uc)10TP;gIHCdNc<+YWKRpl!qsKknfh)54r;t;kA zMXM`T0y0X-m5wwvR@c>92u)L@5|h?zVACrKiByE3i>#Ds7^c8`sp=*EK{V zm7x_4b!+NfTzHYLKxzndai(@bj#XD5g=Jiltl1xmG>|D>8JKF3RjyQn9Z`rvHS{_0NRBrs>(I2gH?G$`6^lMiSks`M9OQ|)H@}?2No^48x6XlwlaAN zE$EDxH!7EuXI}j7fQoJK0c0kWe*J zm~Duxsv~caWp!B}6^v+FR})emDq>SIs3eR^P9Lp{me+(HZm5n%BOj&Ws`91>8_HKu zjH+=H8p;~Ps4dE)J+>M_O@!p?iV)#!Oi~x8HT|P3SZ#Tsb(u zy2fZI8M({XM60-t^=lfd683oz2Er+6o6J#F4hZ3%+H~XE+Gte-Q5b!FV`KS>2q^K8mtsi4QSWYi>6Nl9}$juP1M)bL;px5IUY%zsWF;3 zS8-GvQ`^(yLIEtDHfdIi>f4`ki&ffdGp7pF}J?mM|y6m;rRt+UwuG$rNCLBUX z-Kt>bhP&3Pb9%)VnrWt7Uv?#ZJNXU_x%Mza*H`kkYGXRBX1%$FmT z|EufoVIL1OWJ`-T>pp$^^$}@sfMHSE!Dsx$%<`*bSS)#!eqn}VNw6#Or{lk#q|_H~ z{4I#@Vx(MP29y0dnwqm?K0&UILUX=3KYRLiJ;6jX9yjC}X?+&)v!#F9q<`8djB|z@ zTDs{kh2pa5Z-yz9*KES(?54FC@m-9h@0r2z+a?~R5^iO2kp#J`*V7m)dE`Hz_j^`ePyPj330PjfNSzHQRqVIng9 zbMfz{|5Mmmw)DCG7mopbO8&ZO{TT6GjKoc5@Y|(@pqw0c1eZfAYZop7mnBQXPNTXcbVxQ zMEq>|Ke$TAkp6d4mh=-I|FgsxPPI+goZYm(UD%ACLZ%Y8UJqn`%zD`<^N%m zzI~o!*kt7O9}(Y`Nzpdw7}Ebu&60jO{9Ly5N1dA#yySzoy6_aeTF zk#g2*P5+)gsr*mJwVVECPyO2*)e#3we0y@!y3EuSlDhZu;{)`QL3` z7L)bA4DsFc>0c?Lannpf9W&@GaLo9G{7*-?D-+`txAGVLKz&m7&*!af`f~wfOMk^B zI-;#VhD}CVGZ8;q`u62FY5(O}(*GCur)=pjp|iqa<=1zaX+4Md+0x(CreoOnEPp-^ zcJu#fPx{ef9seDDO8&ZO&GV$ce7%k$)93SLH~s%Y!Dq|=8I%4%GG%??rhnK||BKr- zz0^OSSG(zd+f)Buq_f7cTc47@Zu;Ny)W7a5=~sY@oBj=+^jDVXBtI$tOFiiqZqV_2 zjN~l;D*U_YPw@EvDQqlo*mZ3BF4NY=di;OCNq-jPXJdiG?x(Bo zGSh$Flm2^Vu}U%QlLynk8vkzkX9LJ)e+6?GE45BU-({wsgZQpZkhXBMj?rTxGW~1t z@1}pu)Bk$gq#vbl;&9VC=;?p;oAhmbrhhH|-Sltq^nXsXvB2?^J|%zM^y8lX&%t|i z6q*0)0J-TmkI?!z*-fU?V;0%SwJi*^>agcW4TfeY?Ko`WPf0^l@h$w%U_@TCEMU%O zmFWxemxoQ)o;!^GBn_{hF!5d7#%G4q)91_DwEgL8!_l)M-YmA z3?urO>Bw&^{w^FUIfd^}Ch+~>L*bl~!{Knrk#O$5qv1Sy_+4GM;Tw#QxofGGHHvSt zQjUAi3TAiR7W8#34f+yzt+MMcba*GOPu-CEz9PRPd02f%wxXBcu>AN-&-Z|DL4?pLS2&|RT%R8##!Sn5;8uLkba=O%n>*?wRBW$=oG7=Ofi41v_Q)mdgC=t6&Q`MiAx za~8hEIQ2P@qYg53R+Kk|3gwA)ED67l=+joBA3#dl^y z_$K+p!ZG>%kMi5SYZBnSyDTUx3gxb^C=045sc$u($M1WW95vtgPRvH$uZj&8&k6S1 zd}1)7z5&hqd#?`$i{20Vls-$fo={Jfo^UR0dhqJLCiR_B{hjvcXLVfap&6eWq#i)` zLza2dYLvIBk4?C*y(IW}BJK9mDbea5y%& zD8qx?q&rGE&Yv+u+3$bDU~!)L=6p56$$jfQTlq3enUrSJYO==})w z`_#F?VAE>t+rISMyuN#p$B*z`XZW9j=E}S?unAQkRobYx!LXou$z{+V$~alRIfe80 ze2w3M);fewE2z6Q)^{A=zgAdi;af!ou(?~|b3PubJ{}HA9>5mpuiV|VXRuF-meCH8ziIe3wY4+)*5Y7md{U@uLN{z~&kJ8Tz&Nq+ z!ne>FO_qPb*owj9_!cw2S&i}d$t5NDR3McLuZ{h9~T!?xy9% z22Y2_m;63_!9JEBzDK>SX=yO{CFD`2-GlnHN8~kjWl(xA%7EX6?wNG@>E@;Qj`S9O zGy1%JCno3gMv=FoNU)wZ9sS)>g<$^3Rlx?&mD5Z=c zTz{2z5RdhdrXOXbY#<)=!LO(^X$Q%4?@HOi64tfrgFfb+w(z*IEtYc>b+`v*jW%R9 zZLtozKL|QizbB#GQMQjE-0Dr)XqowDIqY8P7WLYO(=HBP>WNpbAv^aMXqKsw@z|CKs@^ot85 zJ#~F@I`U56fU+b#?cVCQ`2C?jsbAPnUjnwmxcpW)eOd(mhdzvUbNuW;`6&7(hJ6Gd z!SLhwwmN;qz^{hNe*edz@iI?M(1Xp7^oO)T=?DLm|7(IjZ9<-20`D%`0Qx7)`x0|a z8@GPe8%SbEdyhOa=+7v%2 zZ(-jL)!!)#_{M!UTdJjR z%2GDn;K#Db8J6->Qg5`OO6sj#^TqsMMn3z`^2ptYzBA}0KkDEx(%ZW%C1)g(viUt{ zYn`&6Y}?i-c-S&^Z3oZJvf9F4l=J_;dSKa74)((jhR5zhKm4=ohm-Gkw3(O}EUiG_ zgl%mF`YiN|hr{Da*f&0i^QjxI!#H3W#sk-4T(A`5gKK&}{?d}(6O*rAdvf|!YcYP< z$?=3O7v`7shULt z&2t32A}1;ad)Plm{Gy$i<3%;jM4ws4XL`*@gEA`q9G{zUCYG#Trso^XX=XiMDq7dj z-rC#{EuKGrcIm9L@)^-pbsHKRqOI$q?WLG)STMJK_OxhyOWnHLqh`T!boQK?vt}-c z7B_Wtv~9Tjvdgfjmpo?P-r9OQR<5^hY_D(RD-)M>w6?Zj1$pzj%UW9QSbHhftgddX z?}*ly&n;^xFK?J%f7_f{v**oOP(F9ooYL8I8s^VhFt2oWL)n~$Ik(MkY-Dlb7^P1^ z=yUN`hpNRNY^61$(mEQS2(pLyz;MdmlkcLC2_F@n8D z6&}rC`i}~ql!5P4_~Z=yM+&!^Oa)KC9A;{ED}{fg=yOwmxhhcf=Vsui6um0(w6G%z zHw!vM$WIkMMj-m~IfZl9E&X^(;na5e@uxoR`eHT;J;KjT2JSATjA;_E#zMnq!LNPpHO&y8pfN46pj(0b9_bNn9XpG zI~9)Jt#f=DMVq5mRp|izEp~nF|3-GEJupVtzBs6(Cx63%N<4XQFT!dyroBs@!$GEf zGBm7KPp0VXRaks$&tg3LzqOsI2Th-8&l=CPXN_mtv&J*+S>u`Ztno~H)_A5pYutKA z-ldLkkZI=(4U2F2rKpK#+Oww5v}cWH+Ox)^Jf$72=u~CX+T*BN*>HNQZ1_qKpIILI z3GmC=`0yS1Z1|HNyceC`G0>1btVJGGc*>rmhTsvL$B3tZmVOdQ$B24i>3`%&_cHL$ zCg+dAKO6op9zMG~d=`7?Z}H%NhpL_}-7l#8rtHn;_m3#wF~Y8FoB6kjK2>3+tOuaO?R`ntz{{>_7PEqAv3j`Ps}#G|)kD!-|EZT0g@rJq#&ngTi= zKT>$Ae$CQwum$PLZ;5U-_}8Hy`K?ULpKEExs8!aQ(B|d1N1v-a`YiM4;qN?p;5RpI zT1G^5N_hB`d+2}b(I?m9j|o!#)7nY9(nBg`+vmI&sgJ<`-X2yz&nrHu_SD9_N!8Po zKVM)X@|&%e#`5C1693uoK@W~+7g^~6XT>j8a;EwxD?rDCIm(vqJs$qtLm(TyVul~? z-EpzK!5QT0xX8ha4bHt#Fo%#l66T727h|^MVfhfhG>NA6Z6Ke^1-`^w6JI3oT>`&C z;8D==p!}u!QvFUbIQJfrIQ7qi{9E*;`rRyW%nK!tT>@W|M6nlyz}p1=j=`-yt-T#I zxYeh{-!=GroL34y?+Khf)*hz>UTZ;|PYb+G;Aaf(%3~k&Tin(oyEh2s`Mls0K|SR` z{EPZh{f-cLjlf31pubMw zcJF%XS@O4g*AtigcNsp!CI8(5m;CKs_g0@a>HUV@>eJ#=&`$BN^oA^$VQ@=t@eYGi zZ&f;~`h8pAl>)bWyp#SafzL2qN#accUn%g#0^e$IE2p)e?FP4UT3nBpb^X0j@Y!$Z zsZWU?FgVMR6OQ(HM&LJC5a$;KA4xwTa7nM{F|<6_3qEfOdWoMgIQ4V2ptoH{$|?PW zeP@e!t)P#Xp*8V3fsYWl^bey1F8za^_t5f7|4=CCR|)A-Arwn;)r72rF;8s^+@I*KymhI|F-@+I|pErsrbQ zoOKP@mWI3aiOqxLworBT^^I)^wY%}@y}Tp^cQ?bnJKV#{>{P{#aMBS;ueT`FTRQ1j zc7GbpBDM8RTCCP}>+l?#`KH(%*zsr8#@lYghI7H&{ip+=G!RsvUi#x|Z6B`smS*fIruHAhzJl1iYeO?P;Y*`2n<#OQGB1tcgZ;4@K7ox( zVr_+nQ=>!;DzCW#`$o2>?GGkPM{gb`5tDoyclo-rwS7%C`LhSwnC*@Jh&F7df4ecg z>Z0bhmMj~IWf2q`v?Z&L+SW_b7=35ZC}YG{eySjh@g#4xIj}C!R+KotO2#TAxA{s% zg{`h?#I}*x3rlT-l`a)FP;11VQry+9`8Mnd)w(Wi&n%TD_B5?;YE}Vumm=<%mO{Bj zXmX1$ZfL1%S8}5@Ps)(&PmwUsX(X&#N)yIOr5S`N^VAkr*@#Rj{AnUWPXCWwl=jLn8QQ) z;0@Y$X*5~Pg%#xjj-O>>(OPHi@ZeYosiUUs{y`VAfFn|U?Nv>SMlT5ZdP zpN5%plDl#>%)}*t^!>O1r0>Lq-NVv%-vaO_cickw|GT?vEyO&InVOWXZqUU^O&mpL z9IEe<%Z2Q%+OL{Tx0wz~;<4ma`i1THS@dxv{-@%bVVEUPJ_oVDH*t|I{t`p*N%1d$ z;Mw9YH}Rw9Y)`KIzw*f6_GiZD^Neii?=bQ0{IoCq%|`yz6I@N%<4ND@!=9h<$Uk7> zkFp7yvzz~?5#Pl~y2*6XXPJ2H3+LnCrfc(cPfqsyzir}eHD`Nr)7pgiE=Jm(Ea`KI z;-+8X(f>*o3XV_8|6QQTR(>rezD-Xt!;dTLR{&&--|=V0=Qkv>#kbGT?6}F7{tX`c z-)+)gU?ZBdD}OKWZ0Xx|c-ucA{%<|@$Mq#Vtexn)O#S^Q02Ega%XM4i>!vjUfQymtJ(GUhIlK!3rq5MJZu;C~iupIm z;mRE6>T|KZH)ogb7U0?RS8U?j^eh`!Rz6#BG1AtWL8a9b<>#st%g^EyJ>@^kq`!j9 z#NnpJ7gAh|dx&)3R~X zA2Rh{Hv>E@PX;AI_A;sW)lpEiS zzUo`nb*LBZKj|I&vhum*bD}){{CDhwpHm`z#MCJkEQ8kMI|uoA&yw#Q6xU&Ge;war zDV#qI?;0<}yT;q_F2}-(*m^wUuI9USeBYwzTX_F-LQsu1dB-%oyZ9iQy6Jd#acTbW zZLv_%TMKK0_1$=XXkn>2kHQ)8UxXWM29IgrvG9k%`T@LygelM+OTl9scr0sfUa%&A z#I{=SI8+dn731BcZ!^v-vAz?-g3{*uuIfXZQMwTP4&i;HV!R*m4TLYu&0W6-yq4hp ztGr*K-)C?B;#KOMgC4xYfVQNd8Sk3DQksZQyRc$#+J(qpXxQpn=5H3>hr${8C|I}v z@A~2$q5s9}<#&6Migd`+B)p3h2^G#;0@@10s~_*8u?+FNt@Xz`OXE7cGcDmJvAjz@A`l1x;Vo`yhmJwXXP%P}5h> z?nCw1RT~aUk3)XS&3wrBX{g`m2apYUR(l-e;Qdq3Fh1W4w(sa1LVD^w9`KulYx{1d z`+g35&koqu&I-_6jJ$8TC=qYOyNo{i;FX(iedU!ezJg;Ff3hC8H3i=dpF6hnqVEo$ z^xY}n<&md;v;UMJ({f)6*BA5%UvMq!3VcC;bJ7?56MO+|GT-A1n*K`ZdNu}m)lJa< zL$o9KfQ8uGp$TPa>;Lye{jY{j=>ydM0Fj_<65?20g;3symqJ%~|7~$B5pQLA!lrtm z!^kz2YTu9Iu@6j082s13^MUgn+J$(BD-zoL)gV9i(UQCeC-D8i=EI9%(+M}cC)?3P(!qIt6h*xx>w%74Y7jYu+R}s8t z{6*d~oP4Rbw-)#11Ahhlu_r@2>(u~cWc}s)U@ZGmoN0?_Fz~*Veoq;GsI&`oOF@@a z7TPr4f2@N|_kb?ObfK4PkQQ~Ibc1~2IdnnO1kgertYfZ@oRx@|0h9WD-s%@NsqzE) zBcY4tFpsP=$02($;tb#&dZrQiWtG~Wr5I^l415XBQKmDdqI@6}%+JbuUdql-;hiv7 zx70xg>Y$4&od?i4$}RE%-kUXLzZ7ZO@?R2qU;^tedARX|)jV!p{a35kudZ2r&u(0J zj=w@sr2j7uK5xH>m^m+hixLRue!`7K%& z3`S-n&v+*=g7(Gcd7tPX&@Zx&VC%#o)U~FISM>Gd<9$=qr-A(F{0h`@YxlAIpzI## zMc!lFT+obn_1Rw;hP=N5JGA|kHE1*Fqe2nXXH&PaJ|kJTJCR;9(z^!f$#fED1!eUj z9lmFIh&~JH*gaU9^HO`T42QocLOT7Z4_3BX)OppmpdO-Qsp3{#tn;GEX|&!`AQ}$J zP)^A_F|816#MXb7H+*c_LeSJ+UOCA7doRx!jG??_dt}p%qD`lq))soO$AL>*>%>hs z_rZRkLq3fCT!^!*x=~jd4}NVQ#s@np(Z(P7K6#D>Z2_tS_7#9$KSbRtstXMkeIbNB z4)|_zCFE!O@`9@0X}-kNt76!styd3n3g2qR2B>F)DEq;p(1q>rvkx&H)H&5x%18^k#2iwR z_X9|)5cg8&&zGSszc3L$hWGrb7xs}{KKWtYZ;Rl)?;51nDX7$ zHbbUsf>`;9vxBnyW0mE-JfEm6Z|3cpi=LT%5-uoagfq&hv!`=Xnys;s5fdBAn-G2UxRR-uR}P`pG7$InST?)dHx*2agKbUs=VpL zq0+h!@9(RGouFT!%Wwj84ISqweHQEsLC@4>?0n$xd(EGT^^L8|JZ(VJ92}SK7mLx}WB;bX zixaWInjrW6t_uRyPFs4s_J{oqQu5d0-uloxv7golXkYC;!^$QG`MKNq=9w|D)JV>9%?Hs&JKf702uY6}^$4 zf+?ATm*+9ArcpeeessbK>X!22(1Ll)kCzVRYs;>-ASjjg(T{suR^1qP za*w&-{@7p)``}0&_1Jzk^iwo)#QJ3zN7(Y>SR7?u!nTC*51}0)4~B<=L?8Q?Hhre| z)>*;mXLH7_*@HdyY#8>=({*7?O4jbtL21q?>thPk9u#)pH~Jaw-N16m>T7oCeRZ;h zE&i6~N%`pOPu*}8eC%TQ+C}iWRq(x)X#XmD;fwV?9PoGJP&YRoF4%d;-{cHNjt!NC zR9zjrkGRqUV(;NdB5t6-{XYYc#9uR#P2{@vJZsuiyedRL7k0kP49Eaa?7bo#H-NeO+D0^(Wj7e z9qi+a(exLT==nt03wC^+R zZQeh1#;-*Euyu@Om&ijMhaXepRE)n5As_4)XkTjDj8O1H)USf3rImv@=x50=j2reh z!`Bp}U%+usiJ6xM)H5 zmd|{@d&`yhzXJcC{yxVjk5%Qofp@ughT*p+y%8JCi>C5gggLugGUH)S!UhfISKrDP3*{e(iZJo039TGaZU=n!V}TYTHP7P^MV4j zlO;cbPiK6_WxHIIoAZ7Z`tNQ$)}g$0nKHnaE59sdu<0|5V-E5Tw`-Xuqkos=ZSr^I z0@Q=G*?4Q8pPhG625+_zHob}1D;4uXJAMy69)zy8Kz1$9cqI?s>)l7bk11SZzXx^z zeUWeCpLO7T#4ktO`&v;)8!OOmov-3DET@h9&fizq7#bYc92#UlEcm%@(|ElHysKch zY}XE>|1$pPf%4z6No>CY`1MS^S$Wg-r)9JH)9r!Aicu!CJ&ftAhr$?hP=;SZhI3(q z&^h}-JlEph`se_2X^-8ZeNIq-e15oC^~at=Sw!xM+!zT0^g$Q*MRM^vNJQ_O$hLH3 zq3KUzJ{$9()v|xrjXfQ8e@d4Z)2&7Sgc#FjpY0@`wb1r+k-nupV#XNc{~OewJ>gqU zABJvhU*O=Zp!5*-7?knS;#|gg4V{MS>q53|kj=)AV!uokAAEJX=b?|F$29@=#AG?< zL!Pl1+va18dn@Y164W16pHT;%4Ua!fnsIrRgWnjQ$`9*F?I_-BUWw7ce%g-qgB)k4 z`kcX3%D_C02d?#V5P70rA`^qr`3r*4YOm5CbWI4|Q}s3G)!Ged@RD>X>8TsubKEO^ z-o@A-kactF#?CmtXO=ZA59NI`!n)uin74jwFD7qqiM-WL2=?3lx$S${{&W9in-`t$ z?y1-(6SASq_R01pI$g_bZSMJPwvE&A=+BpAk##bC%$=R_=?LT8L}Q{e4#$-87siJv zI@C$(Tl&LnbxPNzLiF`rUo>8gcTQo?M^~ROK)z#lY5vstce3c5GECjn8GjgIi#t2x z-^KaXaCH7hV~gic7%WPgv&p&A^g$l)jGrR?eVy^Yc6dH!{QMLDt22HQVM!lp^2{=R z2|lNr`)Z=x*p{#jilV;1d^hTDXRN#kW2NFo%wJ$``QUi%1Csq_lq<`Fb#oH>Y61GC z7k^ck3(GqiP1!f=>#G-G-)7T?r4Cp}F9pVHW$Q(xFD&6b|6${>f9;o4eFv@blZwaq z0ftb^Wrs_&oUJZS9OpUiTS0W8I-HY@FqwWgAkPvuLpYY;8N){1g3i73zoev9);S z!#MN<Qwu$TG==c#xe^67k5B^1ZYpeJieZyv-X#?Pt=F{hZt_{Q`hT^aiZ1vmpbEDWs$Y& zV(9!Eo$+_FgsJ?0t26%dEMbh7x4Sd`6NGX8{e$5F^sDFJpM_5tyR~XClBi1d?RDJ_ zp?!#`z8lLYf#(K2!-CNmpL~_|yDSuWmHx&00k)N-i($Od4Ije2{@L#%rpGUpNS9@( z=grgX-HcHi2c!-;?~ooRAJ4CjD?eMbZ(4rv*@fT7b8U>LhM|6BTb~lV_<-6MGx(r# zkk8`qMH_t|d=<|=yW5FTHlAbfr94NlH+eTOh9}3HLq)0aCgx-~-dr+?^Y`8D;Q5e> z$MGoVx)3+WdsJZo>IlPz2RXTCg?m5VqMuQ6%oRa? zi;&+g%pJo9v##kW=5xvX;QcC$EvE$-f8u(2ez0?TanRche_om&E02r}-WV1tIQcyK zqqYnx;6E#8Vcc{c?BsE*<$#UT=1<*Fg?XOJUdXf)<>)3L?gV_Dnc zjR@=<3g@6chS3J)qAkipn{*cH=Gna;zYy#kf*)o1uzq6i;rAn`cQ#$>`eJLxKR_D{ znOP@MkKg!pIDg-@u(LH+j=FJEe*djS=Z;uk5)FFyVD4iL=0NYoJW&O%i#k!4aUKqP zS%Z0|Wo5D6>#wZnZCf1ct-Z9OcSO#JS1!#N`N}!LIj^hF@MBKhwZ>jI+zVU+>vY8>k4yzK`b(B|+zdSA;qrxMEr~ z);q5gWrg_jrfC22@8e<%BKHSxL_*_FJ`cZ~OjqjShq}yJb_dZOB~eoDv277QC1ynhmQK0Q3V zg!s0cU|tPqw!lx6piCoUgEyAKe=LRnC<+Zb`J7tkHf&ol{Ktv!g?eTGLCVwkbRzx_ zNONc?)cYS;k8`LVzNQMkrZ(NzP;W6jBRdS;u?`$EV~}pFv)RP@Rv#OjP#5d_2=y%z zMw^6Z5nQ*(HtW}rn`<7Yh4V}DbAtKAn!$fq6k~|d*W4Y6VeItWgA;Cot!9)R+PfzX zB;q?EodBwPQJId=`tiMe5GgxMJUK@7H@~OqSHfNIJ zpEx_EbG053b@>H8i+C;(pH7|gc_-$8UWLzS!rIR+&P8K9Qi8eV5?r&Kna5wB8}v2a zQ8hTJBDC}H++gQk=#u)Tj`+O~%C1|tqbB5=?SQp2YeO$!j(YL4i8#NX zaRfF#3F``SVyQAdMj2Vgzrwn*S7LokFM_`5symSGvmCodPVRxtMZ;(9tb6`ErMH7< zcinWt=o3FNkcj^h=}_J-JU3|i2lRs{V+3t^rN@crp zpJ`WWA;;=0G9Q7@YW!&;{&|F{zRskI!Qz8MP^n(`%e+MCr|vRPEVDG@EzI<+#>=&SI_;dQ>k0FmXO|}cNKW@ubw~eXiHJ{X1qAy~9Nj@*q>t}L$2QLT) z)7H*x33h&nXKd`tFn_0b#=I`|Z0)-j>j12Ox)$=%Kf#w{oqcR@;GAIp%lLj0)>FPw zf_C!di-X>hbAqy05LSaW^98JVe+}VFalI`RD}R9BUc-1~JNkRCl?1*0Sc|ykpW1#l z{lZOu-xP}Ms|iI;a{W8jBJJR~yD*Hg5aQOKi**O!Qvx2-!D9w^OaqUlh`SnbD?=mp z4GZO*Wcp#Oc`gs-Y}U)a}-)cU7HI<-~a?JNAyE?vu~&&kA<-d^lwMwC+12 zza^YsT#C8xrd4>pfpw6zf45lq7TO*Bh*}?Y82#iIFz+|@J^f7{X_E}&xa^7llV$Ay z!Y0!<981*^&SC!!ZG@fo(0x7nH!TzF8hyRg+JeCgI6r{#rdd~zkv8Od;=k}N0ouA` z80shGdK`V*Cysk$M!d!oewnBKCMENmk~iw1$}{>tFa0`2^D1a)L(iUt=Qg6=hKwx7 zpgY!ClwAqe52W=qPU^k}`+D@_y8Mbt3J&SHSyk`AJAr4yv{9zhE&5CJ!%8Ns$IJU& zN+zpou4mi}-n2QZ_XNg|(zdg;Q-{!I(*Nb>;+ZbTdy`a~v^v2xvXE0fSA#6J?1&Zo zG8kb#vfuoLUkVjm5aQg+I{0sd+uWVdBY z->dS9cP{cyp$xKxU50Z1AfeW2*mVfhnVpX~i1`S+R&l6GkLAv^=3-othw;T(7-yV~ z@mxfW=UBJxGw#xsSnmg1a{yfgc>Yz6XWithbcAQ#SA_F_U6hwI*o`&JJ;*!8b!yK1 zNAL$PU!vy_=3@-NvCw1ASm-gV*=Idk{835|)PXH8?dO+3wyPoIRgiTt*4&tJP?a7B zz07gYSvl|b($6_INd8r58;|`#*Oj|bRx!++EN=ZD~D z4jU|nH30os=U~f%c1OOPXPo+RBK}j9g|5$dK72;oG;N~jjR3m9S_eF5iz45uO{G2Y z`OKl5_BxD{u*atIP1I-X^iZ;I#&+*9)a4guA&tvA<9$fu{IiPZ^O+?11$Z|L>k1B7 zeNRT;=K%fhr?kGyq3?Y7@_M8@A$|aEjJ}M`o#Mn^9ZE%D8|w!!^8G9 zqiz4*oS+wd?lj%p2cF>q*xY%Y@oT~BbMJ|Ag>R-_IPY+*s54%L@N3a_-;A~!{Qx@rE`ZkO{hGA9kBU8tA#wQ}|1fBz($jRTvy2Z2)VxEWR;~aBi z&hU67*x!$TJpY4y=VP8*k4Z2wg*rSz$!xKY6vk(*d`_(Cxb~tCeUFFmzX|{3L;f+0 zyQEyJAlD0+Bbz#`Gk&`mE3qyrnLh=6LgxQL-}3}y%n#>pV;WZO+TVr;6Z!hN=ArO} zq@1-Mh6lC$lq)5F?MLCkz~&2iwer^fF+3Q9uC34R#uzBAUgrhvlTdDXLa&sO^0QCy z(%GrGMy^@?2>++?U#jNBa+IERnWCM69-%{X5-B027f^}Fo;!^j&20h!pVW?-t^xY`q(5azn_Qmf!HT1&=MINl*X4`Q8 z#i;)Xe)`bk~09=tTXGd>$O)62S!c~r{I zIVH}!EyX-)#XX~Lw6@Q_?wXf|RQscJc0by2Prtfsyj|hC~7PJNVXg|oS z7V~$uPTG9ZkK}!-Gd|kMgSDmmr*_7NIbqgb?jMn|7h4zFMSiU=UVttdN8-7x3^Tf@ z!uzL<=cM@XIYtTS?D~LM==A)BRne0tkUv-UF#582)9@VjfKx2?@f%k7~l9~e(acE zt${#16%HG%M0gnM8Is|6mVobyR3EBmAC_gzwawZ-5B_Lq{}GJYu!d0em)M6nZ0g-{ z;Ovv24_z_|&&w+>rH&%X=J9Rg_1D2i**+HAyzgew0sYl6=x40sZ>b;V;faz?^{rB? zSF1Y}Ha-10a-HeV)SruZN*4Xh;>$>PXp4T%ce*BweqJv6pn3XvAJ$lM{UpcXT=QBq z8}mP%h2M|hIfEUC=ZmrF_srO|7H8T4-{VgjIr|-%Q&SeWxq)b^g%4cVnIE2cU1FFW~$U+KNbyZ7cNnwEqu7 zrOZnc+Qe-6J+`n@^@F3Z3$8sUZN3=?bU|ms=$Fj10L;6eti)I$E1yqy#`|SGM}4Gj z=ue-xT=#=*-VcJW%scDp&|d_-H+k~R@Pj$QVB)t!`#1hHJot$+qF!dm2%mBPyw3PH zAtP;P8uFWeO^*6jx3$S>V$Am{{3qv25;)s;Ejy9-7~-){JUldP+o393w~I=)q2GFZ zx_*XQi+m*e8NVA!TenS}uzu!!rZe7=MPFfrFTS!fzE-4hWHO$i;JLqiP9W0@FlViv z*$Nu@tRP^&6YZ|mdCmg;eALPq{7+U6Y6Y-=tt?%OvzCFzyI| z-83my-ZYiZ8ONU7f_9>MYOwQiwEqvlKfDb8z_$G`Y>#Wa$)D+Pd`&zIKgs?A>DW(X z{ro(}S<@lgnz~ruwXkE%E%wz=Ch(}?ydTb=haD7!E;vcPeAl$7;?pPhK(GHB@1|Xw zE8?JyQE_mt#dw(SQZY|VyYfux{TKSp=b>l%&6gIX%9U$ptgTh9(DuUjhB)?dpNsy% z&Xf$9^t-gu|^Hgm!j_nXkQA^ChPW=eRX_mwLM>pJ5HV2jdD8Ae}l|B}x54?JOwNE^>@#y*9yTzeT3G|~^n{s&_& z$T$wVF2uWz%me#CN5EURZ+h;=J|Bx=ym0(He9sqgihF~>g+BCQVnpJ`*=1?J*|l2yMwd*|7Bc36zK_2_3U!uX#4h0nH*!Pfr| z`WeTE2YsN`HgrPEZtZ&2EuHc4d1!-?U-IW#5XQIfW-msWQ7+CCxMj|M*3=t2?Dcg8OjVf1OV6}F{|Z|aO+f-u+Ty8c$Kuc3T;4*R?`e;ZkOOZo9&)_nHMZ2zGN zzJv6`Q0MLXmbs9Z81k1EpBTej+|FUDy(vN$%qe;V`-PxBat;%53ZyK>-=CN>`yKn6|5h+H|UMhhOwW}9{AGcrLYgIp^l)y8RJR5yN_p?tMLrEdJ6jVCY~Cbs%L=6 zH^<<753=Bc*dRI^`$PeuFw%lIDl?Gs3USNQaN%7*XH zuBUvp$dmhSK#nQ*ynjsjSKYs~?=J@W{YA*aGNc_GLi&(HjXS6ZruXKVp?L|U#cz3Y zO`?AHQO8BwQX=Je4sF75%=L7U7y1nqINSUMkoyqA?0o`#ol@|{`kn&jV-n)BjBjT?=KdW^(RV}S z{Y%e}^=+HLJ-3Fh31LqZ?%8$iAo?ZB&U=hr$oru*VCb$L}ZNf0Hc?`k%TF!h zUa^VPJmpXEoM`~%%rf+qAKNp^$oA|QWaJt)cTKk)M_@jDKi3>`9$^^f#!q71VGHK( zF_*udYl1`20iVr3j&lj-6)bACSAj(?td z&~pm4mt*c2y4?5~J;o&cec)?#%QpJ(m1dq`W%?Y74V#Sj6c*o_u6G-z=G;_zx{g^t zF7?i|?nU}r;XkP-rpG?wF~s{V^wf!dpk0&Rh5jG)j4=fIfMZ|nLLbo8x$GxczmkC8 zXj*y|)>#F!qp+!Fv>nCgqa8%KO@eJIAAokF8@|0Z2lam+){`O3`i5HUQPFhYP32u! zf5-H*jl(9LgEGcC-7xfV|EhF-sPaeH3sa!0`gA*#yxe_uBCoTaZyeg* zn^8aP^IW#Qx*y58Hm*6yYWL$i8 z;4;0xra9pw4cKP0p5Ml>0W)V_)>c=)2AlA=wAR9B|8PUddb*ow$ z8>0BGKos9Jh;G=}#=Yo)VAuG|s+Zju#Rmm8@S_v$jT<(uZByT$fQRrLL)o`V_fY>C z@XZ05^Zy@?iggX`t<4S5;`#Gum(D6HpAlVEw*k3oT^DUHojq^%g1Pmxr$y^q>ek(E za~PdHXXdP#3!=qM9UW~OF2C%uI?ZF|?X9i1w=`~O-Pm5=$d8{~*3sJ9Qr}e9yza7= zmOIv7if;z2#`j2~_2qNR8p_KX=GWggXV&a_a~71(oi(R)_MC?Kvlh%No!wA2r(w=* z^BWtdVM8O6rO@5+Ahh|S&;=uk)IQD_6RKlBbG>ZDh0(9&e*3IPBI=u(c-EticXMo5 z&MqCQ_kgZ8;m`2AWWa*h8X2P11adpfn@a-n-b)J`xxNz3j!1wECeIxSi zVUJ)xNfrMoL$d^qOY)w9+t*CkF1#=w)Q-5Y*2e$lu-zlRbYX`2=m7O zGlqUS&qB_LxGf}q9GiGn`A_As7|;R}eiR+PtZA8)$g9E7Dt#pLrE@h3;ag4k0bKK7 zoZSX%p#Bjj%Dku&2m+>mz=Y3;;AZ8B3zxfj{q~qg3J^qIM-A;>T)TOh0w|Ydf#V$( zQUV;``8@g^> zOFN_vo-tu>l1J7wb!n5&aYOqst|cFa<(itkgkg>yL`~RH#&^nrx{aA|_3dJ(Y#Cl_ z!qvB(vVPzNhdB z=^*ZQDV!FSe%zyQ%uG7RB85+KQ0%#;aO~RT9P^a?w5s%Dn8Ghf2XXg1#fP;p{dh*< z98#noPbi$8BK`O)g_{qUh@d+aK1(3_@+O7P$-qCOaN9Daf-h3|ycA%rW~qEF$iQB1K>m4-rMsFsJfvbRUc)|2?v?=g6zUs{E5ah?NH;H z{z2oJ`q8+Qf`~rCL8jgq5)Lx!wZ=2`sqsvGYFrr$FVl`NHY3S)gwfv0@WLVKM}{-qxNPkZVezg?e=&n^%BbPxae9z7pHlbntJ zZ65irM;9R*{lgwUH+kygcRl5sJ`GL9)rS(v#nR_4tjeJoS2uN1k>MKFMQm z7kKn=+M~ChdCK=I9($K@Ak;~lt-U`<)KG0W-YHLJoV@;58mg& zcX;qCJo)`wk36q??BR?jzY{(5C7yb8#8bYtFy?Ibd@JM}6QufedvVWWw8swdZhTfg z9QkJB{~sQ|acU&fg;LF-=J{}a9_(t2_-gn86Fvn6JVx~2mKb~%>ggEK|5x*k2;)op zV*>n`L(Qw;`aZ>Hl7#~`?}ocy!_LQ`=VcEyABvkD3dfH*)Lba8|J$RVpL)viphpk4 zdiY!ce2n^%r%u>@GyE!#y&dwTyT?=RKk(pv9zXLERGF=OIljz>FYxfWAKA%9|CGnh zulMj7d{({{XgQ#SDAB(=tM?Zh*;e&Tn zvg-NE9(ojGR{9@!51#=~y6<}I@QlZ9-}mtUH&6TWWsm;9 z;<2|zkDSe(c4V;!@As6;>mK>{d(yqrgRk-Ujf4kZ?a{-xJ@^Xchmp8BUN`3g4}a`M zl+_OFJoP;fyF+qvS3xA^K>TKv~ zOpuzdP|qb0#>H^RTE_7MML#o%tLHhmyU(MCD?RuvN)M^|nTHL>r_nx+31Uh9RzHuc z@|uyv)pIA@{nVpp?C$|Ssd*vw%n0o4z~{g8rTSeV@NWs+_IF5s zv%uQ~{Vf9DYH-SbqrkfiPWdI?E%^L{pqF|`l}@@IB)-|iWxB+z?h*!Px)R?j=%qY8 zf?ndg5T6J2@S?s{zuf{q*IYBeK09^w5P{wDaP?4YaF@QpLvO!LOnIc<3N`zHd{VVW zKkv2aO8g2#KLPX~n`@q`%{BQyFL2wxcIl&rhUv;#({*3qufj0^IwF2KNaLH$hDKGN*o}jln zcgxp$VAmd&o4Dj7%ePkG*5?u0D)66}Yo2zQYd78926xl7_Rn;`U}$(MG}q))F7S!w zntUW~>mTQhJ{0s;4+|W8nV}*52ZG+}f%FnzDd>MM=xfb2=_TGG=zk~Zt-X<6;t4_j zq@cHYrktk)ZuLw)lHTf>xTHTI_@5DcY?+c?;@19|?ni?DHFHgRiN9@dx7^<`xLfY; z8QiruJk(PM)BS^?;VIYPOjqK?g8sCix8qULr{RW%>Hcp)Z|%gD{|ZCn%3mw^{HNe! z%boncA#huc#D6AmtAFA@7P!^FE05K`E6;m~&x3sS=u7o${Xg+;fiDw&<1v9-|L@Yb z3HnC`eYe2(3j8U7Oa6AP4EcXk(7z_=e;o+W;TLvQ^>%%QjVN`o`MQg1B+m-^Wx@P85VJSlJ~|7!x5da(URrn^V* zIV0#Lj&;52aOIpLa4v+lN2$SG`&?jf*FKkf=&L>SEe5ANvOU@_@EukdoclfeU-a-l zBltWe_~e?YG&f%ngS+{Pdg!Nk=&$h5$2{~aJoMP_Mjfs^9Ul5k9(v9n@^JOM%i&}D zQo9{K7Vj2(R%@2(x5wdQgPwHwSo}r7N0$5R9zJh+_`K_(f6qf7!MK%&Tkaza?&^7p zhrZZDkG)Q^@?YekU+JN*_0Vtf&~Nt87i)1c@;k%eZhm71ckN`E!1tPKo~q5YtIrh% zclmEJIQdJz^svBRFxNaC@Zh%Hchj8(zC7G?lk@rrm*cNx9{L7@yL#x->@)OfeYKlz zkD+(@>=*b0=9;H|b4_}QziDtczi%7dP4|r8bJ$$-WXCTqpHUt?SUtP)v%kf|l~ay` zr2H!cz3l(nagZxdi$|U=!AJTHIgXa;%5k*B_X|E!o&gX3y1`vJ-!!1F+u{XMB4IS(N5gh$S;9yxald8D47 z^x(38_#Kh2HwFE@0)NNguHFtB+|}E=f=`X$Bj>MVf1_0NCm$2^iv)g`z^etmS>PQ4 z|B}GB3;f#x?-979KOk`HOBwAofy@5qae==j_)ii2!`B5~D)7G$_;P{2D)0t@Hws+# zdshm4hoFC4;9MuhgZBA3eW`wX4DOb%?I*kC`=W<_z~C;uT`J0Sr5+}VexuCq41p(v zoQnj$SK$A*{o$2@kF3`X0>4M_Z!@^7pALh&`Q7cIf7nBRz~I!6^tZOZOKoQOH>;=xrZ~!F>MC zgY;k4m+IH{hl#fd-1d8kuNS!O-@3Sco<_V?(C-!Lb_l#*;CBlAsKBMaJtOcvf_`E| z-!NT?mkM0^ftbLh-(GHTw;Zbt?v`Vl;3Ml}Lg3PGZ1?cr;o;vS_(=XwdHC%2@Oe@2 zk@fvGflEES?cx89hyQzmkCgMYz@?uYk)J9r*&cD-4iA>2Y>#3Bm+jFKgS+Lm%;0W$ ztrUD@xwHtpPK%&^H+%ReJp6Zi=pXjbKk1==%0oZkp?}Rof7C;N+(RGWc|8wTpScEi z^~rT;+32Gl`UM7O`AR#9dH5{y@L3`FNPFJo!JqW-=lUWZZoXaSREO9Hn=O#M1#9}EB5f2;o-B$!)KYmr5{-C;m;2l@o?pA5PW30v!6#;}d75ahSza-7&C?Wf&2%dTUTm&OFYy*ZFXwG+zFd3QZRq(N`5gS)<4J+r zIS@ko4bFVwTUN>AZF5CF`2v4e;PzP+q0gZ-kF~KGI)}$k9wGKlXb_9)$*X z`A;;s%b%Nb@^I~Nx!^xc@UQmpU*X{|=R>3)w(pO-a@u(kS57-0LOG=#_6qsGrn91c z_X|8C_*&%Sb4(BO>OFg_UaOo%CF}N$wL4&*blJj!XKa9xL!qHB8g`C9# ze@@`l0=IMc4DJ&6PC;+y-&{F&8G2XFsF=5TL-1K9a9J+3p7|U*f93MuCHM>p{`NU9 z^&t5Vc=*3&aF_oGG4CPQW7y}d197$rrTxcU3;4%@NMRrCu@_goCgezn{F=h z$%Fj&=}YyyL*UYn$$p?L-`51aEHBwV{42r#l%W5Wz(nGU<}fUkW}?dgOe{Bjc43jBaao@YGryeargfAXHd|5fm}>((g0w8KTBKk!{a zzg^&O3Vg4@T|L|9aju^GJ@oc@oJ()qt@2lL+#NGAP<}aoyV>BbJPCul{Ovpd`AEI( z75qEQHBaxDYnT5)gS-5#zqRz|8#+67v-B1(fE+wryDAp=Dovt(OAT)M+aUTE9+tnp z!**OAdfz<2N|CO#bJU9MeZ=6dJa!!9$}`17Uu`D>@NLgLEj+wY!$d{N46W>)sOGF`~ktIN$|JhJIYfp@S}qM zc7e<1?{^E_j@QU%i@@!;jQHCEU+x(PRU6zbuMQ9WCJ+4%550ZP?(%=qL;sYA|8ave zUq?m00@EQNZs+b8yujdYd2wF?9tw};OG z5B)P9`Zo>krh8Q2_iL4?-%}p`_W8K0w^5$wwgsN&wlfS)dE`2fWdh$I3luL^vx z2k#enkDz}?;OzqUJ$HWB(7X9PE%?a(558@!4(3bt4+}icTMIqUTW5LbOFi_gPyZm1?xXb^vhu-%bP4=s0eYErW zHeK5fUj(^%*mNy!`_FE^+8Kut5VWGcAlU3KMMRQLvQ7@LHiAE<+S)| z54~Mi?9%(@TM9k>>MNXnxXo|Op||)FgS&dG_VBU&d@HBr(Vr|E|GZdOLn`3SHMpB@m%-h1tsijdedB2PTu;i`;i;$AKe*{8482>9&j|cKjLbaQ z`cC>?0?!ro=<5QP^RY(+ZvB9p--(|3WykfdoVLCbm+MR0JoUH3!+*Pneusy?$3t)D zS6w~7Y3M1Zonxmu8id`-dMfL$tf#vL{r?jBwDpwy*9lzKi=PWT$kjKbzeC`1yk9Nw zsG(=RBpwrd{*RzvW^lKBmkT~O3i?{XN7i3C4`AoY7%k!9Z|4VG{oDBgSDtQ+64Ve=9;Ii0)I&0*1vJxOTd3~M9tZibBe)T zITsk*m2-u_-!s=d?H2g21#WGgd@K!v-xT!Cg8sC*cI7-{a92)We@xCRJ|g(be$m4M zKVWp_rfdD7o9^p|p82wE0olDH@FxWSqXL)n1E&No^(p}59x#r21Dd`^+_za_G zH{DqVcjdJGZSwhd!Dq9fckwO{|Lq?Bdp-0$9{PR{{fi!YSzg}}^2f|I<^NZKTN`%u zWBre-AKRaC>9-r6F8yASuJn5Y0=L(MUN^YQ-}()g|0s`stbcInZN6Oo9VT6uK4Ea` zP4+jey}5k4J$w!r+@*iULvQoz(!cGYw?2e&N{df&CRc^7v%GlNsFgZ=9>6F z3w*i2e<|=bbM2<<)3dc7mwt!gV)__$mi4gQvFU8_!R=bLf}^lyh-4n z5xDhZwSEDFVMv;EMz<*Kyf?KKa}r=xslrxV1?J?-hJLE9m9De zpt!WOwyxROR#hpE(xDirCTlC=4@=6dG6y>b0UXjBNx1m{8->l$k6T2MwxfK5T9lFjL!|$HPk5abh6YyDp!r`>f7&X69Du(yM`J=NNYo5LtAU}IuQ){ zvjp>dd~1=X48AqZ>zXwxZQ`1AP~CdUi}9OLEE^izVVyO%wKU(})DgghA!o3my$$wa zOvq?;ZQX_r5W?!)NdesWC%q%>sfWzDK)z?Ik6tlPL&U(+O&{jF_=9P4hcX{&3mTib|iZAjUW z{&Hl%iZ~ng0d+v^^<=V&bS%MC?MBLt>zE}Q(9(iWCBoLzU?hV&L}^6;?7P0Hv3`vf zVnZ+!TBw^jb6L%GjqSHLHeB7(x~i^4v7McC2pgJjuWPy8fE()WXsoeFwTSg~HS3^|4Z0FEC~s3!Uk5oGpo;p| z_J$2XD)Vp<$Pm61x$gGHnvPW{f_NMr2H9_KZ*5n1S_plwO$N18*JijYL~ZvKy7qmj zpXsKiO04Gg_STJUK~?;7%d3&?j`oJMyLI9g2F*LBZH!WH`vR1LMR;`<}s(GDC zN;kW@kyIZvB|5jJbz=vuRJB+dR&`z1MhzrAMIA)E9o#zFTN>9X_RZkGF1TU&;_F$6 z8`jV>1WoPjD3ylRwJP1)no-q_0c%wFL?wbri+unPz%|_7in47&ba-APwlNrG@xhJp zDVbwN!uCY+x)QF8Ligx zblNciohOK$5k(~yn&0=kU+&#^-+N@<{&-G4xo4lX*IsMwwbx$z<(#ulbKC(^@d9EB z3GcgUb8|B+Oqz_)o|=moEvH=byiF~e8bZP5y82MFW17o4I4KhOG+SzI!8m&5YwQTuHHDBuK88mU>*(6l84h8f!?duYqYfTYqzh%IS-|1$q!+ zwj2!P5GDJQg0LS+lj~@|y*(IeXpq*gY|jxBL`)&uL+j4bw)lv0tU?`;J42t=#7VfZ zUL{KM3iCaYrhtu@*4`d6^^JjkGdaZUgCm@>AN7Uj&G3jq5erd4F%YTYMKqJ}Lq-!z z)x_rJv@tme78%-88(_*PCs;R&$+9VoFxD6?Ef%`8nq1nr@OS9TF&{_wc)0b7S@W=GfnvZ2+wL(D5|@!~_UQmE+%gmZ0f zSs!fgsMB_kknd7gH=Gn6B+g%TTL|bn#->7!*=h>n!i{Mwi_`zqBFaU_v0bIH39IRm zng_Or;--N?tF@&S4GmbVPbOY*42eOiR;*bL7nJ~0D>Z?mIEge3RGWwZU`Q5ccs_9! zzDA^k1Li~^2s3Gn87`y~*RWPBQo~J+>oCh~g{z`P6=T^YR=XP;g*B*C%<6&)AeMu2 zD$j*+L=~1!P)r{Qqcy6zMlkkic-v_N>+0*u> z3Ls(j!WdAgaHE)^i^Yer%CJ0JYp5ZCNQ!KsT1h;(v95vQEfh;esun#G!;Apy>E))* zc@1V)q+%LdbRUy5rFv%`ra_%`Ja=sr=eTE1tSeW~Eoip7_U5i2XQ*N^P}kTfmj)8V z*2GGitC)E6sWr#CmiAz4xK6bALaxF(Ti`ie(XTfqK9)mvEDIYL`+-^ znVFq+n3oZy6%zpXKurCR9qTEut@**F%PjyVWX|lyc?-*&*<0oz5zs2~4=rMN*Qz^zJ zU?uYfuJ~PmUto#!d~-wXznA`a62D)Xd>nd4!mgc~n1^k@gkuK)gsI1QV|jsCDlw6s zc&k5*acKL%SZ^MYYrd^iM_Yb&7%6j@FI2KR;sN%1-Q&lcv#Ve)U9D~S& zUH>n;$giI#(EGHSj4kV}F7mJKkR?hLL&^`-B>B5tQd=Kph)w_#*CqWJ6Q7|DNf3jXgZ{&xG%1)RsZ^vC#z z6p?+yJZe;V{XD+Tvt|7lwjel>4{HNjH=07$eHUH8amd5wx&(VILpnNL+yQ8AGWBSirfNcJ2RQuWbf0DxD z&~_xRl6hT+@~Qam-6l&!F+TBN{b%6c=Ko8V_TMv;r5xv6{)_JorQ)CaHCcYQJPH21 z*J|@0Mn6y0{%dB*f`?RjeX@BmZkY`uZm;4$UlnBiFTuafe}Za%yZ`uR%YyoTvLYj7 z)oGq@JU_MkC91r>52(x7vaUjT8%EqCN`8I+kMif^-IluNg{mNwQvyf~n-+`%PKkJw=%EQze=l`vQ*|{HJRF_te1kxWJ14*t~de)rJwf zTRr?$%L^Rje;NL5{x@S#O2vPVGMwL8#H~wb4a(av@*7e7PpeGwFG#`vHq4V!@o!ZR z5%^KYJZxTHKzSQR{Gmr>DXnMnFT%fF|A$@t&u+#40W}UwYRSCzy7-^diht__S(5x| zi#Gospz^8ee^Ee|^I4U%E}ieAunl9$@DFAAu*xL=dHA>a|H!5NXD^lI_sLW2*XH$v zOZ&g_x3WmDDoOq{DVzUHm-c^N@qgW7Xk9uNyR`q7A4|rj|5%WM|BWvGfA0!e{vmma z{o4E)pT~v~x%4Npi0S`J0J7_UiSl2z|0!81%P*Iw*ssm&LX@{*L_Vze*Q%1#|6=^x z{O7o||J{nej&GsJB=Ne;rTq)kz%@kU#zFq2__z7DPe^V5wX0bw{#>cNO0MfhluuQE zpL!_ju)&|t6WRP11CXl!T}8)=Lq9($uabEcqkJmyWeIcr$LF1F{y)ONnTr3QdI(36(d?6WJ%RG6_!sYUWMN1Zo zRBh(gWvi}9^Tajcaek7dAIk6wJDxfM;v8^33(Q)tbMWk4|Il~p22bBvuhZiz2n>AS zb^3ep>Cf63fl;9Dsl7y<=LJTyu`RME&FMLs6|EljX7`Ky1%c7DiSg?p@6>+gow}i- zZzkYp?|K&Goa{kw@Qt%~{j~3o6P(dc)~EHI4to1O`a(K*j}yF4c|AqsO`2FJl!U(+ z7$vQoZ%h79r#UC8E_P}j`J&U7?{R9v)q&9w$9al)k?RAazWw+wc6!P^z7w8{oSNEe zDn|!B&cX1Nm7|9d{&mRfle9_S)4PQEf)}oH?hbst7I^zW56zkVp*OEzT%)|k8F8Z3 zBc6TjKF7B+FT*+c45rS+VZLum-c1?z1ilVC$Ucs;A3^TJUtMv!2xWeecHyD!T<2h^ zCui5k$h&Zf(=%he)AKpx!8Egnym>{v)0~5>*EZBEf_kk0-;W`4`6B1!V>wPuVX^Zn z>lXfgMjy+t&eQt>qqXM;M)!N7)ki`182%{>^D;`D$r;ZT?(#u*K2OGp;|seVEH8FW z_JTgk)LCWn5Q6_N!G~p8CeJhD#PP{ajn8x8OVlmfA+MtFL{9OJ2g&21v-bJ9Br^#H9U`8j>zYXYMiP^US=OUr!YC{N}t#KA2qLVK+|yXLjb zaXP*Hwag5e&YXzzrOV1PC*z!ta}Lg^ufV@hr-6U5OlRifd_d)2s?*3Xbjk_=&$!$v zqa4)j;|)#^<)$pK)1qVEoc=UV#xB-_df3Q1To4$2I?Z?DnG9)f6=_m8851i9j(eO% z5ml!`(8x!9z6HC9qy+}bJ?U-xQ9ggZ)AQ&8=T)tr=y^`bQ=oY`jrGqt5%9@&?g!2n zJkxg-!Zz5p{TDc+LT~rv^xZi&HvM15IVGA#-MGYd&P#Vrz64%6zc#&giB4lcDj}~w z!nVSolL6fq;`6E*(0L(rUYM@a%U>(>sdN_3(0Sn`oT2mbET^m75B+6pT$G!w(&VpW-LMMLok)vp%w`pgd@;Bc6bEl86<0!iv=WvlT@NY=dubgS| zfKRet8GCO0s~Kz2U*Nlhe|gJkndap8d<;KUP%*ye=wEpHM*iCAD?jOs`aS0#@Ovg6 z@Q0#TvoCMG-Wg?|aQ;&IAjHT#i1+*Y;Rmz*R|H0-ADk}wfPbO(gYufbZ^(Nge4)G^ z^5(|+r=~|*(KP4ah37#J;8Qp&(3P2A*;VezY^p?G)p!MS0t4M=#!CF3QF7$T^P8x9 z(38!S;U|VKKzd1K+40X+mYuk+vh3X(D$D-xg~~GD-?zT@PI+Zn!NpsC zeEdt5Wlgx=h4deL@!OF5v7FL#>@qVTVK|oqMJsJH! zza)3zUXQPT$UCin=swSZu__0)<2^7mJ$m&g&pBmh?sK|E^PJIB$I|;mpY%E>d|9gh zK{toy#@X;&wJsCS+mfWt_%zmdYwhSUt>&2!h0N>zVc$WcMo(u{G9Y1lq)*HDcO<%ebcW%=hQXz zOuteHom1EJ%RW!`E-!rdTWEjk-cQ}9J8g5&zCz!g+!OoHV?WL-8o~b-*c|rc7hUXu zpNEYTPCGB4z5AR+(*b9lSif!Kp%?H!igp`@+zxnCw&S?o0C>|alq0XGaGdjM1awy- zpFCEMb9y$cbViH((drGwX#jxHkr}Ah$#>3sWJaMUGxIoJ4aq2UCYO6I zYPt`7DR`69_Dm+m0oVuj|3#n5^QNE7fWFcf?s$-W>R3Zs&-WXgSJ~#etz&%)?c4P6 zSWWMJUp}4d#eC#XV>JQzM9RMWld(nLM_no7l~ZMVvHUQ61>3F`zI!I%h?OU7s}R05 zAHGJ8ofxNJOT?p3=*2wE_6h%8zohN&PU`r>u|@Yl#{X>|e}z6o{cjrwyZxwgbVpxz zbspv?zHK`mEQg*B|6#1gf!}=gJkBST-%OW2_uKHj_xh;oxKH(?|2bph`iAeTIB*QU zRJVu6>l_%V;`m;5;OO+htEpe#9B0%6f0H&LdUY86m3{Lq&|;ghJ%vw1yY1rmk9Nz0 zZDUbXz)c*U}Q$E$sj`IDE^8JoA{y6aeavmNZe|(mVk3&u^~VO zzjzn6=PRxp==L}RVqC`jFK=9W+X(EC<1%9Ik8++$zlm=M#r)>I(8X-%hIYj9x&&$J zv>Y=00b_q}#WiJpzr;9)c}M}~AVp`FzZSuqBaFGo2FyWzaQ`)BO_+Q9VB0liTQT?8 zin&J^^NkIdXGAc^Xu>=sjQPO>p1{Bc%&+F4ALL=ab+hNb2TMG=9()92*fwKM>YyLV zew711tkx=CtScaQ0s5Bq_w@CYne)K6fT!mgBN&r8X5|$+qs}(Z0cV?Y!12I#&_)^X zC-AA0GxF2A=zm4u;8kyw8@7`IR- z>X&mC&Q~ghPCfla7gu%_Tv*u!-#vL4Ynh^p)4J#f_R$9b=L0dndREM@u%zF;-En$6 znbGQc`f{}O3+=3@oUgOKCce1_EJq)}vjhDvL52i6MUu|_U8E!R`GKh8)FQ6+xXzPv zyX^iCu$H52{;@H%fy5pB)7T=Nrp!$1a=^{jdHJ*(l!dGbbbVJjQ+!={H#r{9b>uVl zob&40yF7g#Ooi^MFwar?a(Xa#e=hG3Y3#ee8Qs?){UsLZ2Yu;*(MPAsd3i>DpvzZ? zc>`$Xdwg8p@8P(-6TaGkul@l2;Ot!$ec;nWenQ61$X;ydK&zD?{doaZ^c|$ z$+sW!eCSQwu;^VJ4L&8OXbWg{fzF+vaTm%npMA$%d**>J*Q3mv02?sv z?b-R#-a@-XAf?1?h8T zAE3{Lac5%%qW45dLBV>}MrxW2MKpE9jYUVi@x)&Zl-Fe**l{R!`=M3c$kSVGli(T|={+o?-Zc z4KtmtLaYt9KI-Y)j5#Lu^2)klA1lx&uqM5(=pNrq;Tg_oH|!;R3C^&Y@JyUxH{r{0 zhCRXeb%h^wy2j3f?S0NEJ6`UTQPv^ox*PI}@l4q|`_O)lGq9oF|G^%UTw8I@B=x!r zG|%4k_h?fO+B;3`Cw-*a5_=O#ZOL{FU|z8ZbBe^a%n@zL_IHriInNor9pgyvCGe$a zGv{p8Yi##4_*K?%pVxUR2k@t`mNeUPDe^g<5T_n#`Zn|laec42rtCTWoJW6}EpVL) zoA0L_AN`U36Lzt{8RdNXKVxfh{EPW&thuJb=T<^b^w-Y`e@(vxTRfP7v4u91fpMmY zW7~ykU6~kTJn$cB@FN-UA>PS3ee{JK7t0H= zU{AJ$W5kfMml5Gpu}7E&JH#9;<81J?74S7%$EUZ|p=SN1-)SqN ztOw9Pkv9k&;tpfYqsQ2QnlsQAJ{0o?X$xajU&@B>Oz$Z?Qqfm{ zv8m8A4QoE%2_NStrz%HxV*XC~v0rhbaNEuYIhW5so+I{uYCz*A(5i;5-Pi}(!q0w` z;~aeYzP!@~{y^8q(82y$*xOV#(R(a!3w?&3|FZ86p&$MjW8HE5hw)Dyp0n^}3*ZaS zgO33$f-&+Pj3eL2d|K~!%)-7L>nrE^)5JVq&+#Xmk2$_Kh&leW6Z^66aU5l#!`*Mr zbWWmfJx^d=T_oz7d13?BfwZS4@SA(K>g)3|0$;m6|DR@Tj5L>G4%l-PrsF!Lb` z#~jL!TOGTLAU|TG^c12lJ0lxPne;;g?<0t(G`d56MQ|mU&b)UNFk7G}LUX4p; z-!FK)qHht}ns!it@jB0wb7BO2)LsvB|M^8@4$l3OwAr|4Fcow8Me#Wi=kj(x7HgDW zv%g}_i!~Q%<%_j!wA#k4y(TbFr{%A(c3h8}bt*CedRG0?wsNwoT(kcU?du8{Y^)F~)# zhc!53e>!vey`jPAn8$nG1$pILor+D3?Jbc;f5DO^#U=9>mCg0n*L8#%{VkjP?Ip#F zi%SHAjZ-mGt*|KOzWWPf+s!@1)5okoF)=K@){HWlua zha|Qmo)O=p@VE24io7M~i*Wg*%6mMP7nck7!D6vcnC8KHyd_d94w|Toq*p*VIu4J$ zJby|({K(eNHHbJ|HCY$W*LD7G=ELw)4sq5fdg2)Z@Un3zSEs@$L7E3)*t-yis54TO zTgOp(f;pBR4k`Rz=EeB8I->GxFj;ffW?hUseY$-f%KGm450j@K|5#&+V>a@#32TJ~Ija=K{`}BpzPz&<`t>cpMk_;wK^F ztN=|*fbrs(fa4B}bsQ0JZT;~~KJzM{hK<9RdRD+`nTf|w1RS2r>b-U_89|OLcg$@JV%e zon$=|&nw=FNG{<`p=XJotY-;N*0Y2s>si8+^(^7ZdY15HyOr={yOr={yOnTmbtE6& z*q3k<^St7z=R_E4J~F?UeW*xWM0bf!_+#NyYbK z7rytn;0Ijr*Sqk&$ECh^x!^zM0{@naJXg8EgD!l31d<905_MZkXuzEceUAm%H8??-*7IPre8T@j?m znBv6yyO!-g&A zKZ0*6_#7AbZJ?hDe>v!-f`7{e|64Bj6J7Y;?uPGT&p&mcGtb4&KkouR?ZVd&I1k2D zTq2X=w?L%{=Vqop=Bor_B+k)5oOL@hMxqH1C>+w!WeHm20uL)VV+fo0vkiRpSg?SU z8u05?ny08rlkZ}c=4rbD*JTOXZNRToX`c2Na5LuNK?82mKV-m7`mY=CMJmlxE#%`t zIWLz<@w>+bu4AqeKV;y)Zs416{Y?Sl-)!KYf?e?-yg??#Z>e%UgyX(t?9eg)2{+|j zYv7wP9vcm~*^JfNJ z#~3Hvl>e}SZ}NT5fSY{v&`3IFeSPptJP0@In`^+$cESEv4Bv#8y1)Yl+-xuX%`#h_ zW&_`p=WYXT@_oPsF4sG38Pr_R>or!p-_lQbV;3pKriTIRgeffsRiKM>@KX6EfR? zn|?$05#ld3>Q$rCwm;FfYL8Q`3ZHZm`il#lixk|Zqw8qX(ee*y+=m4iND;yH^(ErUuL&^jl#FvtJ$Dqw!5|~n~t_I zn~td;v;Wqry4ZBIZQFEO6+Y{0($V^~>D;aGZ901lI@%@)+Na<)oyQg2rgKQaDUV6# zbpvj;Z`9D|Z3>4cb3SAGpC=4_)BhYa;HH1pF`sSu2Nk|8|H}rQ`G!2dbAi9>0?$@u zZN6@Ppg`f5;qdgoWmnpMD5t4sZ9lf&e(oaY zD++Gg+j|Ob(>dirC(CF@({3*^;HI3qUz4v+lXSPDPk4n&^R&l+FEij~yH^@;-R`7Q zWxyXW=v?ChH~s1vg+o2iSNqg;I<9%J-A(vf1t;Ix5=HzDDY&MivqltL)6sC;6B7sN znEmvy0XO^UD++G6*Xs&y+vku$$84APT;Pr|?=|st>~x#2o+sOUvt8)SH{iEvCE&c& zfSZ0Spm1!y+Lmm-nkMyWjyq2%I)q=L(mcJZ(l&kFFKqfg)s8m4?iV)xMT$OS!hc4k zdAiDgYaD{KpCSIm3Wuk?Doyw$2K=A_&okh!8*sk?A2Hzh23*@Y>CZIa`kN7i&obb8 z+$Y?$|1G%YLHMOIDSjU?;FlTjeFprq23(Ivq@(*jv-S8wxH)gv-z+2CTu;du?jrDg zv51L`i0qpYxV}BYkhonUR5POL8=)O#XzuVv#1pJr&*EjnGZ7UUBQi= zn^h?9jgd{_N`{PYm0TF-S>-dhTr;98BNiqC1Um{Lf)JVr>mG~4o+JjNda4+WTAXBA z5fZkeBeW5bGGj7}*lUbZ$SA2I+oa>x>&F~+(}P}T_=JW zl1)o1BSy>6;PF7=jA^H$JIYAmh?$OP?oAB0&hHj50BeV%feh=XKvKstAhir8u4C{e zhSf{10HVh;fc3@*qVjECw=UGqScEb}ZbwY(2+3ZDkbhQ0aWkYQ6r{q8$EzR$AB&)m z$!uBYc>KUH!d-_Ddp!2dg<=t8SIL3c%}Lp!sdOY?nXOC&p)_M!zJu|+*?vS9!M!VQ zz9zVO*=mL?N7QS^WR=m`8L`={j|{A=NrplQo@@mo)(R$RL?m3_8BUBKELb8+yUtu% zv+AZ`LX2VRfbkX^gLec&tt|~<5n|AY?pcrU@MwF+^`&L#=)6frkI;~!>0@RmL(fXQ zSP0pqVn)-)w@JF zUR0VsV#3o^Aei!&)(C7kSsD>1eO+Co8JQ})=bbXVXJW8VOHD@K{?7*X>}2q1Bc3NE zWIRtRT&Ff5Gax3TF{cK?0+d3SAW#7hV7PB@=dzSY9F%U=nA4P%jj8gzSAd5+Djr%zqys&g-ZsrWys^7Z{Xb(zHL zF_cfme?;-u^Jemgs+0J8Q8*QUz5l82W4ZDFlMDaDY7$YZgd=}$q1p8x51~@=e}1Cm zxLq?=XS=Q*l(%65Rc#*Cs&eGdr%P=9zeM3w{Fkd+i;t`F`egIsezOfDZmr^fL=_}| z-o>=}lXoiq?<)S2RC#@}dA)_gsmh;G<+tmC>TH*P6NPOUQA^ciez__~`AO22|4kSB zjb0!N>ie&XOcJl(y4X)t@i+BHUD*8b{!hyK=T4R!PfVb^sA05**1Yv;>Clhk^S z_2*r8n?KjCsq~*URhBP32Y+_cRQ$tg(_=`LC;x2x+x+=$uT=b(5*bH{JjH%(Uf*#k zzeSbb9xEvmcKI*4ls}`&>-C`~W0$`L{qu8(d0|E~PExkpEQyzeazC5F7fuNFt2 zcc}90TjnvW%G>@=m(y~54}}O*-8Dwyq$>YN3?dV{ygpy3{FjC1>^3(Qj7(ilgZOQB z!eGV;hc558GPK+p`6UVPgdG-Y!_0XTiLcpI?n;g42=;0t4-gmIe zt5`j<)DnT%#|7t9wz*i}OJObhrz`cEsW4~j=cQ1WQ1Eb!@ zSM)LF3*!s%JzYL`uj9Q8jyt`Cace5@Y z@cvHtdc13bcUbtY65mDc#`E?YP_7B(>QwxbDwJzPIX`&l_$P~y=KCvXg6tf;hk*G{ zHsk6bR#DLk;4*#;+Af=Tcy}o2odEs5tat~hO6Wtpe?)ymQ6K$o5NxDmcoyG3lJAX; zsP~Uh=aLb;6V3OJB8YcG*}{0gi0=TH@5zo;$#*YL2h;HWj~Dsrc!$X8k?*}=>v$60 z!M+mjx8fbLt<_mwTc>zOYrnGXYUm;M4%I2hv>)&39u;y-jm0*i4&h&RZ^t`$e2?JX za`kSrh_w=bw|PDEz;_rj@a{td?+E!OSBQ6o!auDV^}XupDMh}nAK&?X3GsM7nh+S6 zKJ-X6^@(?F+D@l^bH;du_tbb1`gsrDJ#E?`Vs(i3`M8C(hj!zG-S}WPKHAOPz`&bn zzNYK&-i>d*Ouviwl`vn+_La!@yGPQxXXJT(O>+VFl_tV=ox!_JO7<7=?h|G2#yR|} zO4vWa$A4l z4CJjy8%U^wH+OOEoz4J;ocQ~=c=v?5ery`zbWDoBdjdbOJ0EQ!=t38K7X>~+%5gGT z4&t4LahWpYMe6eHGC^ zRlj_3?CB}!gH6K|oEo_5-Cy)NJ&)i$;WuEXY(o=v3m#*^^RWZVy@7${h~aV+@2%c4 z!8yoSNu&5*2pKPe9V}-|9`sH2xsSo~JNT^Z*75Ka=qq1B+1`I$HgFpKbvbO3Z3)L& z(+689)IP+?T|)Rvc%O-Vmh@-gj5s1~JG^^m@IC)-Z}$wmPuKJW{7=4k=a8`q7>gjc z=q{yL%ESDfwEr5x43sD?5r!m_%iLou;CBT@9_*r$-h8nqo^<6`TsW3C-L6S2(Hm@ z2mT%DUZkPdlRHFQi5)YRJC4X(1KPO9KCl{R>i4Dwr{_xW&V`P{X~EM4x|F8KZ-B9Ya6O@P13^(&wtn=_z&jY4o)&Q_l6M;#i8!e zu|?-YuEQ?6JPaKLy-wRF&_fyIrS4en@W*3|=vy!JI0IeKHTw~L`OtLsmut`umZ3i^ zMZc&*oGa~bRlm6}9q(*T>^rmmeBfLF+)3y&lhJ3qJp+$9ua=K_`pU$)do&~?sRxx@QcAtx}W(%(IzO;B3b4bN78ARWp{fY76eCOcsRKzp`y~i3DKS7QS z#OXHt-(lF#@RUGTCG^2K04$HS8|outU(sJUh_y$bQ8_bO?ML4u4*PTzGBEDV{wf)t zf${7ZGl}`QXVSJ2F`q`J!BHb20J_oVuM7|esi;(XH zUMwH9E=PR2ZnVWLZ(wvb-ha*WWVPkPcgXjpz37AKk}t;w^eevaz8|!hpOz6A@K$(w zDAy3$>e2h8y!!oa%K8A}#+l<(+UKJ}#&MTLt8YiU+Ifu6aX;cM(WX=7h49{`);ang zd|+NbbxA$mTf{v1?y!CbS-ul^BWz&}Y~lvk#`PGZSNDzGmoDDHwRy|}|7HF-j}iNQ zJ;+a-@1f1ENg*TkADR`dE>Driy1jt7QH>Nam)Wivt1q~*9PykQ;G6OeWVP+b zc_#V<>o%->A+M{HZE1Z+@xC;51DqnZN#NtL60MuG6uRLUG?1cxti%0yFOmJ%)(`W( zhqiNTpBD<^x_c0`&))U(zK`*~cP#z{#v_hjA7K1Ch1egocRkl!krtn8o`9`!uDK6q z=Pl0-eh2T@JI;Y##4}_6^gZm{$hcnxj;F^b-j8*5<5~Tl>5#b><9QwA#%{`|GFl{G@)W=o>!Jcm^=|i=H&t0Ne2=NVAOw(Qif&pYWTI z$+yGP6UJH24P;!7kHtIb&x`m3V^#ETS$$`koYB+4^I_8$z`spGj0bNIbwdBdxjx@1 zCvEz;F)!#LPDdF1*7?2E19e^tm}yUb#DFm8KHcd)5kpbi*1qx1BGVS?uTc6b#{1xw zE}19#$mP-M#uRz%2j4?19^FSjg1zD%dd${_F~<`0(H0@lx(RuQ;akz(d?&p|%TY02 z;&~aL4KY$y0PjWU(w8Cq&{62Q=+eNJm3XJV0&x~zoayvYFZ7EOFwf<@kMRYZ`zwU+ ztwnqbQwP0iz9oXM$8)j*e6?@Mdm^h1YlHapstej2Tua=vleB{v?wSikY=YlpVot5< z0r^fIO;L|y>V0P7={j<5uXP<-5Us|#UDT2FVttlhJ?WwVpt)p4+ zJ1;Cw)H!`8b)fqP)AS#CZE`HqzT;?x*(au9J+%h5cLV(C^{_?823m!f2GXBW2L)%w z4(2(&rW1c0tNGYF9q|RHpFj+^B$-&>5Z-(K7x;-IXt&{o7*{doJvPgEHN!g{F$<>l z>o$viGFHO1Lfd!HtZEC;TVcY8&*S>r#Iu>muWVu^(Vw zb&%y4d+ex!pT;%ytaYf{fWB`T-r@cm%V);y9kj1Qp4O`mcGZn}vo9w;Ru5sEbsMX> z_7eFnWA!hw-U?%^er)R2KG9AXtGQkuhA%b8=^rqrTx^`qP8g>LMJzCm5%Ky`e@__g zQ>Xe>1AN^wjCa#eCmVk?#wxB|eTW&tKBIm34r9My4rtPc51~KMwtOop2k5iwaD5AO zSqHke;~Y$(PchD19j*TOPl@l#Q`gK3T@|f<&&V@nz7*@T-12*!u`#@8bukOAvLb#d$g6-flpBR-!)d zfKI{Wz-Yx3)wi%l!VM9zu8+`XAuf~;{w@O8PV!2#5dZA^2(*-$!(Z}l2Vc%H4gAShIK1jXMPU*`$$a4^XfNf7dHpm!mhVEa)`X{zm107TM zVlM`^pzWWuy_n~wsd?Kz(0F>h=VT@N4`YXt-wwc>it~HOk9^6C@SNkGQEcBO^oyf& z-J2PgM!^0|K|_&C@f()22@W_=d)p2NPt zr8mgA(+;%Fi&$gtgm1$>#mVJ4fzq9qIeq(#zDEDda#iSSYEqT` z-mTc1L|NKz#>Ew*8JPF5uTys!C&laHdjhH->AkD4CwFna!l6CU=W>r?Klq7wB1X)^ zTHu-X5|aV;P!IVZ!yeK7UrO#9%;P*LbX#JZo3uX7e}%Cx5QhKSdar}MS?R+HAWIlN z%=8J=tM&;mL4NuK>P_2wtoOhn+UlOqt{%ku%9xo3UiP98xnPI$8e!vtcM)hFCIsK z7rx4niFNVipWkDzmB>TPbJxlKCj6;guHu3oJbx)-CKsSDWTG!@NY7nT2>q91%$a~O zww(IM7*82ifWIEI{DAo|?&M>gCfX8xFp9DGpV7B{6S4kze|%5<`{R1J-_Lvz6Q5(s z=`k^8qSg)Ii7ho%XNq!Hf)#G?aMh=w6KOMZddC?tyTxK4%-^G=4JnROGkI1~NX$TM}7WIlAQSz~~*= zlb#OSn~uFV%2kW|6O47Np$fp(keqL=%(#_a%h*RNx2 zo(|G}R1VqAQ#N7@a# zTyJq~F=IsLv<3!FdA;JhBba9-tb@BTudKaB_Svo1aQ-RpFZrP-@m&Dz^Wnex44;1; zbk6aHV>8zZoO5%`;&{b1fEcg7cHY2KnQY&w{abgQH?Z~d&cIfTVO#GVKft!;c(MUy zGvFUFFBvF8zeqLD-3EFU!p@~^;vUiD+K2cC+;7b zaUypZbu`yFwY=x#uP7VAtLAl>b5nk_VK#k=)>-%$fdS-~i2GAFCd)^7hS+byxH9bN zi9pVz`&`h8o~s;oau;(>Li%}#!JIeIBlLFrPb)|N4!)UiJxAm?NWEy-v>mcdvG;WF zL#%0HV>j9{V$^YhYR5q}c8hz7pw0Vnz39W9bnP>z_7A3&zwx^29~?VOy_tFlKqq#7 z%2>5aMJ!t3Bfp6<*;u>qzH#0}=j36oS)hyi(tNv~PxHO>DDIOMF2eT*;8%4l`q*~{ zFhBlF#sYjUcqs2yr_IB?R;v8+%IE+WwvN6vq+X)@+g8rJpuMpqNSb_Mc zg`NrhI~Z#ZboreG)~Rr^Bkrq4X7V0;a=c>F`~*5pX+P>-596X{6ju(Ek3(!!*mF1Z zPMu*Mjaa0~G&6FrcLSV7i1CTK*L-s&*2S>3=U{99HcQ$UZH;4sjH{U=;%fRakK$Tv zBiive_UK9DDa>c_oWrhe*w--Zs~dIW^APYuWwe9+pikP}u)A}u!FEAc_8Lr#OW@m$ zJO}G8jQIznYQ8>*b|XK=P9~m?pF9Mg+YOt={kDTUkiQ-IU#Z7F26V#M_S7lwzpg}E zMF3-45Vixh^ke86{otH?K9q;?^XcygVas`S_znrqgtINEn{upc^U)XczU`dE9HNG@ zoG9D=tCxRr->-h~jUT?x_J82UeeeI^w%6W&`LUPZFRBZizI-@vdd}RV?`JJ}|NWJo z3BQo&k6U z_x|Kqg75nv|1f;WU!XlrSQyWsJdJzD7vdiDmELd6D6MmPI8JcATY&qrLEN`rjc?%i z{-WZL5BDz-qq8X=_Uc1SReVoLJQL7u+^-&iz43nXK4sGwv&C~n98U;;3HHym675~* z^_|IELb~tbd5<9Sc(1uo-OHv7d@djhdHK+j>Tl3h{9d;Ik7Fg>>bU@YFWaQg=K=_S zXLKxfuiU0T5qaHsF5pGT#peRHAx5~qcioNos(udO8GOs+=_y%l!?a`c*Is;=Y6r&D z4D_RJjNOMn8ar6%sTe(;?mXqgxfkc|f257R3#7GS?4r)darlFesSK3UKC>kHyu zRLc8$ub^HI_JlFN%H|r@likF59{ubspsUw}KHxlp_IL()u|5L)KFEI^@Z|G7k_PLj z@wZ`r+{Dko-o-T7E1y*oa~rfD+nw!Ki}pE;=LtqIM?HLR@N}=T)i7)|2mIM@e6ZE0 zAqV=om`7-Pq`eS60ds%SW&b#y_6_lD1)o=B zl5_&N4-zr#oqd7uU7w8A{D!_1&q##Re2c?|o#i8s{UjCdmtmVPq8xpM9=pu@gkkuo z7w`S@AwCDhHvAa4b*O8BlXYWWj?;Dwdf)NpBU1{Uj0xQT=6#ZKC%x?%^jYCMoQx*e zQcYeUAm-`x-#c*4cBD_@8U1vC>2A;|aC{Sp6QcvYRUlvEYhN~YpM0(<>Dy#g@R9Im z1?k+Mmp-is_TW1;Zh-qwu+f^A;L{M#zlmcv<{7*B&9b7U6{FV;R1RRDYSGT4O9wKi zI*VpOXLI0lnlOhwF)nur_wHYsBKNVPINN3MY+8xN--W%e75g)L=AeFz;XfzG8MyA& ziqQ%9X5p%vD@L~j!tp4NE0;PH0j1v{potj;q3A^&fWwl**vu8ATt7kM5&r?LP zCxZ@}&1WX}L$_OMv1UV?9LG1I+5nH)8TjQ*%xa4uKlevFW)KH`eo+`WJCJ7kIcx{` z;!Hk=<)Q7Rx2?c8CYaZZ=Rm02t(dp%Rs1si_%73{EAA9Dfk&D9qc#YnYx3hXVWlb2ylLZzB3Jdhxa48u^0Cy zZJT4ZVcQv~6X8EV|CkCMyO7tU+G7{`73rOTFMk&{$+{GJcVLXkXj%mr_od$yzW2VNBSyzxGCtc~9J0N=FAmwVKl&!oX#^Ssyx#~$Mfl<}k8 z<^%sDw8fj}<9;OOhTCdmV_83a+z`eQ>i=`ZLmRQJD9^{47`wgSoRKjB_e7CLe^7{V znm*`q@F5&Le?+`TasAHG;FiF%S&hV{0uf~Q_rd^nYB1^Eq?Z1jU;@Kqki8OTpVolsZK z-LT#iYgM+X1D_j4J-Q)V81)qX0J4XvC-^rpUqhS4=4tHqZ6|1#F_g* zOmD~j+B4WEI(i-UuVHU5{71BUEAn-j{T;A@2B+sS^<5vzfU&KF<+(p+(|G%XXmtz9 zM<5&RsRFXlXX6=}Y#}51Z3fzsvh%(`e;$2OX43@7+5Z`tUWK`PQ~ejpCX6dx(vNQq zefCr29d}Yb%OUBcw`IY`ccE_t;RkklcFsU-{ie&IpOp254ZLs)^#*>nXINv z*r{8Y`#+3Ub1mG@bw7M9>&P*I_ck)27p`?zV!l#%t2_tsJoKn|BO0+49~3G z|1tME(Dz~Ac^O%4s~~R>x|@iz8$Isd_d|y;mXf}Dr^k!(MfX=6D#A7O$u&WdCwLlb zhJ*C8wXi$3!vx?_j_qcOCdeD(3+o;+aA7J3el8xO6mH&1Y5<_VTe# z=KPF%JI6UclzThaKT5nGs%?zC#XSYuIi9`lMVmxm*X+|`e1qMTdoFJ0IF#;Lac99Z z-7~@;jZ3%}YwtnI{oK4F#16&xg}nV$ILl|mJVlRV?E*W`?ilZ!+yh_7ai=>i(3O|J zs0q&z)I1A)RXY3H^*5Jj`};7qQ;+sOlcwQEo0&9H;Y!^m?qiL4)9@VDIP7hW$9}|l zc)rwwef)H+!@T(3vE0vp6whE`4lz)H=c;r&1>oa*?+c!O5zjCV;~CO>Ash3KPj$*h z^5nOI{Mg@o6gY$r>*q!>*8UoEe+i3!!)=iM1@;@chW-loa}2SbmEQ$)a@F~^_TUbuHrdKw|5yhk4CxO_{X=r zOFxJEwZ||A`U&o19KS5ErSR%Cua!<5{4K_Z6VIXzwS8CMp53EWxMzp4 z=6j#nmT=FG_kx(mJ@U6_@ZOGG@5G<|l=Y|ldXGxBTk7ZQkEiAC>cg{Bh;ez4sN_Vn1+o`w#~- zOG?jFX;84Za?0$X@X8U7a|OOp@?z>(4Y7WEZ;-m^`Q6klG7O5xDMuA zrb^J2_A!M1A=^(r@0I7|iZPD#cyEj4@tl6s1k6>nO~G!3&&V}=FYPaFnY=eJZg!&X z&AeroCF@?7TlQJ%Uh4AGY}4%?VF#Xbr5$|?ebN5%(chjekTm%&2Z|eu3*3agFadf+oxD#U4PWRo|JYFZ!e*fI6M2?){oNGs~sg zf6%ry1Rc>vpqCM#f390>Ctv47Qv z@m|c?Fn2KTYd!zx_yPu=tEZg2FDsrmhE8jh9l^+AW4Q2Rc&3f_n8vjxK9`{LjzO+v zEpl97+elkUeirzj^AB{s{b1eXf4KO8v`a#VdY*lB^0YgD_Q03V`)b3OM53E2-$K4!lmfX#yC~0RxG=| zCRkl@{n8s&JIpDbw{Wf>v4HSl8GjW*0!7wE8tOVjw}jdw>$>6?4b2e*Buatd;C_UN zlZ5%4h<}88%;LOMou}c9HIoCo6z^AJ?IZH}u5J2T7M6&@}tMW@}9EsoF*{i?3GZ$G=jmLI7$9Itmfbyim-$Q(St7uL9 zn?C&J(nFKJJLO^8p&$Rh!#@wKdoZgrzyBj8pq#or=hL`tdWstBTcFzg^%VMGKU=Qy zTamWEQ`D&Pj>Pifx?HY<>Ue=PGXxb!>gNh-H7L@?S>UE_+(##pR95 zM7`vaCXNSqPS72`ZDo8rDWLEYWxzMEjPF4;Djb39^35phr-);>;+N{1QBNowzeE+b zJE&lyEdi&EysluFD+t@OY~(@HMzp^WF%}Z)DQh_iBxWn0vK?t2^i#R7Pv?)Wg!aGDd3A&Ek6!o!3;l*uJeyhxn zyeCzj=(horQTU~28h&n5hN>m8=$|QJ^fM1sc&lK=gN$|4*eti=B zRRI?oO~^Ya;Cz%X@yOwzuZ`8nIxg_(yb_NK1U_dTiN`U4Pc0`N|0v)pV1|*^C*ZV# z#N%rMen}z_S9b}xKMCF_;4_ops|B3ak$5Z?@XHc`xSA&5?172L%L2|BR^pK%^uXCp z;_-Wd&k-o`7!>e%i9lRECgAgv;139RaT0v9fO9sNczjvF7bOC5b*+FeNrKN8@UkTM zBmu_`ymkDIfO7_#czA^#u1*Bv>Nf(PGt0!|rvhG)2*lOH0$!B_|B8TfrkQxO2>7*$ zKwRw=aL#-ak8J`jeiAY^2oPtwiN{R>&Y5iDag~5`Mw@tCD&U-Jp ziH}o+>to2ZD)oOMdYU7M35b|uAeD`A)#I#m?ooK!;y*&@_%wbND){Qm)bLX-d_UtthZD?H^bcX4nhO4P7yV4bCPgaz68P0r@SnQK8G_DJ;X5w$ z^IYh^;zH-wF7m(W)-D(aQpxjwT=cfxrCly{sqZltIUjYA^CvEH;`xA-a;|jY+vtKH za}{`$K7Z}fj@w-DuXoY&Z(Qnoql^5Uj-_hf9WL$rQx`Ztx}1tm zrwe?Ii+(1%=pXNSr=;KIqJP}0PKp1%OMSoU0{=%B{dWL9#rT?oSWAM&O8AW_hW{69 zQNSM-@G7L_q4EC)?J~vqs+U+h1Lfac^!9tuNu}qvUFv(Ui#~ts0-xYwSHEzrRFL8<+Na#zjAj8JUXC2QGBNqF(WN zg4oA^EJZH;>kgOpinxq->(GCvU}V;ZA9C>6?tgF zRbfnXku!>ZIz{ZZOT^g<|8|^H>1__|WJ+w89s49o{^tdq`20=mL4n3`0guo3#6A|_ zhh5~^FYv)c9eV$($3_1Umv*OEspKzrv4``8KI8MusNx@l{ZA2h86;r4f`8w|UmXzm za}^fWpOBBoK?pQO?C8mBzdSj&xb(Y;E`I)67yQ-eM^l_-imD@GmGj~f0gtacURD^7 z;G9Z7n_c?*Nf-SubdmG>sJHno;IQIbfb$gN+uve;9k5G;-Nx5J+HTLfwC_I&J;&E~ zx}RShV`msdyqxVF;;_F8(&$TXkcudqczHU9DBx@J-LZ&)Om7H(7*v}Fd z{Ty_`&vL1QG4Q`)z;#a{ z{@)nzfPsIn0bgst2Ml2ryTMc-lO6OScyA_;#|JuNR!hmlv;JTfOZ^GX-@b5D4 zUj`lzTb@@G+?HoV!EJfowdmwZvd()J9Szs_e@JJ&!sThXN>iTO4EQRQraUHGr-}b1 z1Hab5H{sd9<3YYZmr3zktNMWruTeOJzi8lVzJzxeaIJH~uQcEf8Fac0c&`EH*s2fR zzIMADR0wvv3@SMJ)@vd-4;k<#1D*vu9>m`&lj3)-3w*5sZ#M9^81Oa&{(u4BV8Hh( zxLvP@6x^;C$44GE{vj89ZMQbQ9tUjt+HR=_vwxj-;d{n~ug|cbIw`XFon*k<4LJ7) zc-V4ke{9RS#-L-$xz>fwZ3=GF>2$&0;)1WoH(O3U{@C;nDLT|=L{?G!ju`M-1AfMU z?=s-}+jFGz0|TC|rpUHDxe9K}qwk%Pj@d4A6+Yo+yXbkPP5&wv`ZX@{taZU}b;0j+ z!GA!(DW}=)VWkr-r}lBWZ)!bgxb``u^Jj)WwO`V7bk;tV&~!BXkV@F{Jg?xIj=ukJ z*rKE1;{GY}Nat~d!_!5$=0W&RWm5dkRcXRaf4kIxf6c&OYrwV7B*^s7zcBElDy`+$ zS=&{@*28~SZ#Mm(yU>4K!EHScDY#ANEf+dIrB54Q`+vJ$OAY-$uW0ggn*le+LH+Cq z<=kxG?=kRAxLz09`2StMZP&}5Z)lPHhMzIV*|`dC)0wZ}wtkiybj<#!{VnVDWz7`l zW&_{!Gp#OswSTtxMh!Z32K_-7I?pS(P3N>h$DE&Nze@RA4Em=3G}}@8LtAeF7eBVj z@MHA`ef?|-`PLfn|E{03<=O2b&k;i&bN+MM1@2Fm!ck7`V+jcuaC82{hxK_7f0Im# z-&zH?bT%4ve&<4G$c4^n7yL6W_}N&u^04L1Rd8F*-$`^)-@j04p0uCQ zbhz&2F$sF%q3LM2-uI&3ekM`GufESr_~QnAt)ipp>n!cBG<^;4biv=E;5Pnl1t(v# zzw3FaEstL@B3zHT1O*h_mUF3s+k9_RaGP(g0snKA=E<+pHvQQOZqwJ}qm8fm+W4J{ zjxCRF3&QnSPgFgw+4Kh$9h-iEg4_6d+_&)?UGT#$^!F+_<$OY=c{*gkA2i@2Ds9X2 zu7cb0q=POG8()vVHoj@+rd`zvD$;NKe=5z>ZUb(%yRMhb_aTLE^VR*4dT3BMJY~Dc zpR3?Do%t^KB`)}@T=3Vp;D;65wzqu-T-zSyf6|4%?x(i=M_lOWbrAXfmW0)z?T~PD zJyN3b2{-4Z%MG~RYb2;v!R_|a_H4^}x5BsepzXn?vq$0EbhORebPgKy&H2e}1KzFD zJYA*IHs64P+kCa3vH2D#e8P9AG*2}K{O=98)*m#UBF4Y;|#`nrPKdei;U*4ujq9n(){sd=nTXOe>3bo4x* z`Z49y^L(3*-k-7Q)F}EkowY9V=yicjXS)j>)1L&jGI0*5H2EGf;MxZg-fzHvXW$PS z@Y5>21o+=G;Ad32)Pn2r%hrz`N9=mdMtL5T$80at4x<7?{+M<+Xuuy*bSUTd4Y>CI zl+%R&PT`a9w+(#LetHeKxnF0(?>5@Sgx4ziwjOl7Y(4BX@=UwO@ zR&bmCkU_`P^CSaq@+~mn=6#S=Mtx1V7LE1&qQ1a6U8O0H3C~sV8GvhFN>D(-N#{0| z=4q))la2}3{-5}I?~16}=Mdk7`*F>K?QZhbet_^!i6VY;jry)L;1?P2kO40+;4c~Q zQk5osJq8i9T)}PmS1GtHe^|jur%|PO+M?37-tJa#TW`52&%@S(DUYdVQyvqp>tf5_ zEy;`ZnyLRahJH-_=NjwiXH;39_PM~%xWLz@%fhUeN#_9*bfz9m_&x*Q)X(DzZnyg(1!uhmRGOzjm8P5~{g)M-bWHesT=TH;=^uI6_^mGZ zTU_w9zq08+;evle!RfbOkRpg*?XM`82|uOqZTe>v+?HSWN78@Jps&Yq(l_DSpWF1K z%5H7?4;l7s`qe`UZqpfbp|e!UX1A~IYlQ#Gkl(ah^Zv5-d&D>Wv$kg&zTMz!;%hs! z@pYdi++5cjG3fl%kn6`d^zC^g@Mbx>t=0W(KGAVwqQgB{SYfbha7zb5)vj%ysBh2Hd1mW5Dk+=rkJe#|(JXfbTTmrhS_D zroEYb4;pmtH|RXC(ssKaR&cu=hg|UAa=}02g6}|IJZ$>83U0TfZZBI--Cj1GQb}I) zmwJ`vNsrg0uXRQE-Tc8}(~k;hvYdMr+?LaCz%?&|mMXYSf4PF&^53T5Hht6H9#uFz zX*$F=?PRS%$Hafgfd8{f^YnyD+j2gs;I^FFPHg;_UGTM?*!A)$e8ih`hEy~g+{)Y)rhhLpZ z=ert+vnl^02HceYI|lqBl^zE=iwyWx27Ivrzs-P~Z#iu@;F=df+Ha74nZn^|NTmtC zQl)uH$2AYaKPQvoSC3zWYuT8w%D}(czz-Yn&l~V=172>x^*odG0|tE1z^^didOk_~ zN&~Lvjf7VjaJ{}GT=!*WFHMt3gfBDj!v_2s1O9*kzt(_1X~35oaD5+^^j8@0BL@CT z1D@`c7sS8LfEO6>RR&z&hb6wghsJC^ug-(;>t#~>b{p^;4EW;)T=yMj^LcC@q;sQ8 zir;q)c(nm%03RO2PnZW9a6N_+Z@B@#nE-XP8t_{*5a+!H{0j#BpaIu?Tx27-Pp~7@ zu(>_b+2wp;O-0pp%W8rfLmL}fyPSFLq2{`IouMtA^E#V5f(FyJbyqX=HtMz^bvbJn%`XeC z4|UEDwr;K`0BnmF1~<1hA|OzZ0E-)NA#6uS-TF|lzNN9tA*AZ5rrt&(G=VixF+a0Cn?Z2qLI~Dse}Xv5YjD z(4Q%HLpapX6pU;NHb*)-9ZDt`itt9ks)_{g{20KfIJLJ0nhLeIFQ{vVo@Je6dkD#$ z7SXJo(AvgeT|+~twbPl`(6VtOA}A%~b)c${B(f=@h{P2mV0O!`AYvSNQ)K-n0it>6 zmS@389j%HXor3F{BkRMR4h3p%Sx;MQ4?&u^X)&j+u~DkLvn6;(Yh6QAB8srS=9Z3- zVS@_GtSMB!Db!%-R7R(A8fiws_7H2^5o!x=+Ptwo)ZRhsG6Ap}O`Ute~Y`sCQj^C=|S-KGG7b-@I;Js9n`tqJexUay$5_Jfi`q z2D2lDLv@WPy{syD-LhL{cU<4zvboi%s=jqi%?-jkY-~-adtI<`Q?LO*(SxtASiMYK z(YVfjiqErY%IG8CSi_z<(LTL!M2=kD==+lvu zVY(pENMuJ3hC`4n#*u20%^0&3p?2*(r2(UjB6bZI23t0Fwr*BlMPdj=#d{m7I6o+J z61!J|``Ww_x@!@>DBRxOUbm^SWusGlQ-$!J!G_K)_-}7E{h7F~TycZUFgwdScr=M> zy5?&ln-ZYx;SwfHmbSDB4x9E^-`vvBpR0v z^|GoPs+R^=RouF)S{Pb8j8SJA-nn&iM_6bSX5QElu4@Vf!*u`|rV8J|k)We%Q)f8T z8EJ?)e}S05NVy}?v+5dyt)WegkxlExhyp|G1OU#dIkdj6p)1%CSzp&I^A?~L=$}Ql zg0n@|urG8(?hHwuenDTMdl3 zncOUfN2l`UYtYeX)uC7`G|*`(Vxe$wT|2xMJNC8JH{85Njyn`ycr%42tP9>5hBl9m zQ`>*AlOg_6Af>{QHp)TDEEStcK>skJSTozTU56p0BW&c;OQ=bJ@Rp{sTU%ODuTaPy z*aeJAQquu(tvr}WvscIj6t{ZWYJ-Y!U?R`3JqjUhLwSy1W6K?z*0;l13aeU>cv&33 zOt8yHM-Y^5U!WYmaMHngSSYA!$Fnii8E$DL)!U1M3oR%c1z;Gebao0^ffIoewb(+{ zbd@7aB(MOzLk!%B;6$LNn+RQsaE|DaLUuWAq|Vscw8rXNHg6L3D#m0$O#L=C3U?*C zS43pV{uHd^s1Ry2ZG+S_rC5YX69Hlw1G+S$L=wc%ohg>D$2GESaHpq+Um5c<*wGqF z!qt>hU_$nVFc|uHj^QQ|k)>>YV;zW!ej=cqbb^G5E6%KfT51WFQ#=`ua~@{r=x)xu zj;@X39G_#+8>gDmig^SlUt$&^X1P}VG5zkSgNKN9)}WfUAk=5DHC&gBjzPS$rTtS% z=v79?=6W%gz%)G=^H>}v#hlB45mB@aeScDBXB`$JM3FN>4lF1e^Vwo#m2(-VaX};) zo1r+71&zkl?8bQu%beL;<}DDv#bvR40s%vQsmK?<#o`w~051_>@mnl@@dNN;0T#c- z;#d4ETqMBaw^;m&pM@m?EPji{ulQNGP=Lj6vG~PL+-CBP73~eTIYPg2>>LlhQ=z7Hg?lKD?XdAm)C8xG47X8*ki zAiMs#F8U8&D9fL#{ieF;e{DpTuazfZzn36w^S=%KJ5~LUDE@lCUy(_w>laWyRsH!9 zOCI_;DC*yjf1Cd<08;U9q_S|FtNp)%@~Qa0(k#oH?a#5o=Km**52^T{rm}DZ&M|(D zqI@d;;Z3r9uRIC;&qmtj{}f=U_?PC(g1gVb|4E>w;yJZ%1(0kC1j?^gU(Hx~6T z0^H{R*Dn4iOEKPi4*fss;(zuj{-*z)n}YwPnAD`I|Kn^d9QrvDd6isOKgy@7{}$yq zdR0N{e;)qr`rqnOe|+Fi9NXn7_G|Mx20$wLkErs8tOC}h^REEdFf#MENtW*^&Xm6x z|F-=9fWoQx@4j3X)b|+`nIv8VF8n8{mqEH!`;-5|6#RWI{xhr$KdKq4vt3uOi~ro) zDGQkP%lqSY{WqfWsp>zX_#Zk4f6ni1nONk>6#RL=-R9qig$#U+?0-_biYF&o%%2GZ+8ex>=TQHQJxg1K9in5I$A?!zHpj zrUwa!UDwY6V8d8o=nh%TY=1sqVDq2rQvXiHe~ly)`?Yy})}{WZ760X`B=yhd6>R=X zUHCt*_?J>S#$od>ci|t{A`6-8&kBHS{@-%pe}z3F6-w(RsUMmu&h6y)6wO1{a?rW$>vSk zy94~idnh^bOu4xwVwcBFQ9gsw(SCdTyp}8c{`vm+A=C1AaY>2DSX{DT;R2DW&D^?d z)ir6JxJEqAPh$2hxys+(x8hd;kqqD+2oLuocQ?rI1ZJZSyDL>1C@@>`9kpyw-<_}0 z=6Bb`H?;A+GJJz~;4r?|T8MAVmg9S6P572sIliOq$JuuqzRf$%xiRk z+TE3-g}+zdyYCDP6yjUg<>~2d+wiUU5#Yc+1pmU{R}J*x`*Y=4p0@qi`Z|of>qu{n z)3y)ae`J|q)amf}+{IyhgDr2BGwLf4ud(bI#y1!FJv+3)9{C;W_;>uwZ_@d;qfVDA zdbLhl0Q9K4e9-spz82sAMIL0o7<_$@+XuP3@i=4oRnRZKbvRqe!}|Hs@%=sG4J{pj zUfTYD=H3Q8s_NPs-)AO)nGhg^00F^F_-I4G2pGP+SSAUsTzGe7E{33k+I*7c$_R~D+ zNCV%W&itUaczznfkRJ-&8huxo>RO4aYr)%8T{|e&6^)41H5gK?t|3jTZ^3V(>=MQF?s1~H zi1clVv^9udg1XiUo^WZqt5MgULfo}gYv$bN9lXnrxFN*lWfxop8@v(aNA(JEgyp|X z`6@k<_!+0u_FzFbTk&mU`X=EqeDm>Ml=pdoI`CEcc55DeyLu*l+YqYQBgO@12X|iI z**Zex9!K4N8?&^}kf%!9+20KduLPLjjcCyHxJg z_=bD6l^1yl-&q|5nszJW)L%xzf={=Z? zd=b9)<6eAcyRdWDX9H!vrhHDm^8V6Wyo=@Q1bhYAz87*(UhtjkHJQMwR9>2r#LQo_ z@6D23xRhN~&g}a=N}ji>uiiYDzH$CSqHi|&sl)L5$6>!Kp%V|zU!n3-x+dS>1l

      qYPO%5PhHT;kv|w$O(8m*C({|Wcn67U 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 >+0fvM`jHu{rErEOhrNx`#=J@t$tlxu|ar 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 + +# ifdef VPAES_ASM +int vpaes_set_encrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +int vpaes_set_decrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +void vpaes_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void vpaes_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void vpaes_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key, unsigned char *ivec, int enc); +# endif /* VPAES_ASM */ + +# ifdef BSAES_ASM +void ossl_bsaes_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char ivec[16], int enc); +void ossl_bsaes_ctr32_encrypt_blocks(const unsigned char *in, + unsigned char *out, size_t len, + const AES_KEY *key, + const unsigned char ivec[16]); +void ossl_bsaes_xts_encrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +void ossl_bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +# endif /* BSAES_ASM */ + +# ifdef AES_CTR_ASM +void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + const unsigned char ivec[AES_BLOCK_SIZE]); +# endif /* AES_CTR_ASM */ + +# ifdef AES_XTS_ASM +void AES_xts_encrypt(const unsigned char *inp, unsigned char *out, size_t len, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); +void AES_xts_decrypt(const unsigned char *inp, unsigned char *out, size_t len, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); +# endif /* AES_XTS_ASM */ + +# if defined(OPENSSL_CPUID_OBJ) +# if (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC)) +# include "crypto/ppc_arch.h" +# ifdef VPAES_ASM +# define VPAES_CAPABLE (OPENSSL_ppccap_P & PPC_ALTIVEC) +# endif +# define HWAES_CAPABLE (OPENSSL_ppccap_P & PPC_CRYPTO207) +# define HWAES_set_encrypt_key aes_p8_set_encrypt_key +# define HWAES_set_decrypt_key aes_p8_set_decrypt_key +# define HWAES_encrypt aes_p8_encrypt +# define HWAES_decrypt aes_p8_decrypt +# define HWAES_cbc_encrypt aes_p8_cbc_encrypt +# define HWAES_ctr32_encrypt_blocks aes_p8_ctr32_encrypt_blocks +# define HWAES_xts_encrypt aes_p8_xts_encrypt +# define HWAES_xts_decrypt aes_p8_xts_decrypt +# if !defined(OPENSSL_SYS_AIX) && !defined(OPENSSL_SYS_MACOSX) +# define PPC_AES_GCM_CAPABLE (OPENSSL_ppccap_P & PPC_MADD300) +# define AES_GCM_ENC_BYTES 128 +# define AES_GCM_DEC_BYTES 128 +size_t ppc_aes_gcm_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, unsigned char ivec[16], + u64 *Xi); +size_t ppc_aes_gcm_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, unsigned char ivec[16], + u64 *Xi); +# define AES_GCM_ASM_PPC(gctx) ((gctx)->ctr==aes_p8_ctr32_encrypt_blocks && \ + (gctx)->gcm.funcs.ghash==gcm_ghash_p8) +void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); +# endif /* OPENSSL_SYS_AIX || OPENSSL_SYS_MACOSX */ +# endif /* PPC */ + +# if (defined(__arm__) || defined(__arm) || defined(__aarch64__)) +# include "arm_arch.h" +# if __ARM_MAX_ARCH__>=7 +# if defined(BSAES_ASM) +# define BSAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON) +# endif +# if defined(VPAES_ASM) +# define VPAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON) +# endif +# define HWAES_CAPABLE (OPENSSL_armcap_P & ARMV8_AES) +# define HWAES_set_encrypt_key aes_v8_set_encrypt_key +# define HWAES_set_decrypt_key aes_v8_set_decrypt_key +# define HWAES_encrypt aes_v8_encrypt +# define HWAES_decrypt aes_v8_decrypt +# define HWAES_cbc_encrypt aes_v8_cbc_encrypt +# define HWAES_ecb_encrypt aes_v8_ecb_encrypt +# if __ARM_MAX_ARCH__>=8 && defined(__aarch64__) +# define HWAES_xts_encrypt aes_v8_xts_encrypt +# define HWAES_xts_decrypt aes_v8_xts_decrypt +# endif +# define HWAES_ctr32_encrypt_blocks aes_v8_ctr32_encrypt_blocks +# define AES_PMULL_CAPABLE ((OPENSSL_armcap_P & ARMV8_PMULL) && (OPENSSL_armcap_P & ARMV8_AES)) +# define AES_GCM_ENC_BYTES 512 +# define AES_GCM_DEC_BYTES 512 +# if __ARM_MAX_ARCH__>=8 && defined(__aarch64__) +# define AES_gcm_encrypt armv8_aes_gcm_encrypt +# define AES_gcm_decrypt armv8_aes_gcm_decrypt +# define AES_GCM_ASM(gctx) ((gctx)->ctr==aes_v8_ctr32_encrypt_blocks && \ + (gctx)->gcm.funcs.ghash==gcm_ghash_v8) +/* The [unroll8_eor3_]aes_gcm_(enc|dec)_(128|192|256)_kernel() functions + * take input length in BITS and return number of BYTES processed */ +size_t aes_gcm_enc_128_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_enc_192_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_enc_256_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_128_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_192_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_256_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_128_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_192_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_256_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_128_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_192_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_256_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t armv8_aes_gcm_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, + unsigned char ivec[16], u64 *Xi); +size_t armv8_aes_gcm_decrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, + unsigned char ivec[16], u64 *Xi); +void gcm_ghash_v8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); +# endif +# endif +# endif +# endif /* OPENSSL_CPUID_OBJ */ + +# if defined(AES_ASM) && ( \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) ) +# define AES_CBC_HMAC_SHA_CAPABLE 1 +# define AESNI_CBC_HMAC_SHA_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32))) +# endif + +# if defined(__loongarch__) || defined(__loongarch64) +# include "loongarch_arch.h" +# if defined(VPAES_ASM) +# define VPAES_CAPABLE (OPENSSL_loongarch_hwcap_P & LOONGARCH_HWCAP_LSX) +# endif +# endif + +# if defined(AES_ASM) && !defined(I386_ONLY) && ( \ + ((defined(__i386) || defined(__i386__) || \ + defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) ) + +/* AES-NI section */ + +# define AESNI_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32))) +# ifdef VPAES_ASM +# define VPAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32))) +# endif +# ifdef BSAES_ASM +# define BSAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32))) +# endif + +# define AES_GCM_ENC_BYTES 32 +# define AES_GCM_DEC_BYTES 16 + +int aesni_set_encrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +int aesni_set_decrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); + +void aesni_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void aesni_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); + +void aesni_ecb_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, const AES_KEY *key, int enc); +void aesni_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key, unsigned char *ivec, int enc); +# ifndef OPENSSL_NO_OCB +void aesni_ocb_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +void aesni_ocb_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# endif /* OPENSSL_NO_OCB */ + +void aesni_ctr32_encrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, const unsigned char *ivec); + +void aesni_xts_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); + +void aesni_xts_decrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); + +void aesni_ccm64_encrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +void aesni_ccm64_decrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +# if defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) +size_t aesni_gcm_encrypt(const unsigned char *in, unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], u64 *Xi); +size_t aesni_gcm_decrypt(const unsigned char *in, unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], u64 *Xi); +void gcm_ghash_avx(u64 Xi[2], const u128 Htable[16], const u8 *in, size_t len); + +# define AES_gcm_encrypt aesni_gcm_encrypt +# define AES_gcm_decrypt aesni_gcm_decrypt +# define AES_GCM_ASM(ctx) (ctx->ctr == aesni_ctr32_encrypt_blocks && \ + ctx->gcm.funcs.ghash == gcm_ghash_avx) +# endif + + +# elif defined(AES_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# define SPARC_AES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_AES) +# define HWAES_CAPABLE (OPENSSL_sparcv9cap_P[0] & SPARCV9_FJAESX) +# define HWAES_set_encrypt_key aes_fx_set_encrypt_key +# define HWAES_set_decrypt_key aes_fx_set_decrypt_key +# define HWAES_encrypt aes_fx_encrypt +# define HWAES_decrypt aes_fx_decrypt +# define HWAES_cbc_encrypt aes_fx_cbc_encrypt +# define HWAES_ctr32_encrypt_blocks aes_fx_ctr32_encrypt_blocks + +void aes_t4_set_encrypt_key(const unsigned char *key, int bits, AES_KEY *ks); +void aes_t4_set_decrypt_key(const unsigned char *key, int bits, AES_KEY *ks); +void aes_t4_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void aes_t4_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +/* + * Key-length specific subroutines were chosen for following reason. + * Each SPARC T4 core can execute up to 8 threads which share core's + * resources. Loading as much key material to registers allows to + * minimize references to shared memory interface, as well as amount + * of instructions in inner loops [much needed on T4]. But then having + * non-key-length specific routines would require conditional branches + * either in inner loops or on subroutines' entries. Former is hardly + * acceptable, while latter means code size increase to size occupied + * by multiple key-length specific subroutines, so why fight? + */ +void aes128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes192_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes192_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes192_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes128_t4_xts_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes128_t4_xts_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes256_t4_xts_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); + +# elif defined(OPENSSL_CPUID_OBJ) && defined(__s390__) +/* IBM S390X support */ +# include "s390x_arch.h" + + +/* Convert key size to function code: [16,24,32] -> [18,19,20]. */ +# define S390X_AES_FC(keylen) (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6)) + +/* Most modes of operation need km for partial block processing. */ +# define S390X_aes_128_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_128)) +# define S390X_aes_192_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_192)) +# define S390X_aes_256_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_256)) + +# define S390X_aes_128_cbc_CAPABLE 1 /* checked by callee */ +# define S390X_aes_192_cbc_CAPABLE 1 +# define S390X_aes_256_cbc_CAPABLE 1 + +# define S390X_aes_128_ecb_CAPABLE S390X_aes_128_CAPABLE +# define S390X_aes_192_ecb_CAPABLE S390X_aes_192_CAPABLE +# define S390X_aes_256_ecb_CAPABLE S390X_aes_256_CAPABLE + +# define S390X_aes_128_ofb_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_ofb_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_ofb_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_256))) + +# define S390X_aes_128_cfb_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_cfb_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_cfb_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_256))) +# define S390X_aes_128_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_128)) +# define S390X_aes_192_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_192)) +# define S390X_aes_256_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_256)) +# define S390X_aes_128_cfb1_CAPABLE 0 +# define S390X_aes_192_cfb1_CAPABLE 0 +# define S390X_aes_256_cfb1_CAPABLE 0 + +# define S390X_aes_128_ctr_CAPABLE 1 /* checked by callee */ +# define S390X_aes_192_ctr_CAPABLE 1 +# define S390X_aes_256_ctr_CAPABLE 1 + +# define S390X_aes_128_xts_CAPABLE 1 /* checked by callee */ +# define S390X_aes_256_xts_CAPABLE 1 + +# define S390X_aes_128_gcm_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_gcm_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_gcm_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_256))) + +# define S390X_aes_128_ccm_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_ccm_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_ccm_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_256))) +# define S390X_CCM_AAD_FLAG 0x40 + +# ifndef OPENSSL_NO_OCB +# define S390X_aes_128_ocb_CAPABLE 0 +# define S390X_aes_192_ocb_CAPABLE 0 +# define S390X_aes_256_ocb_CAPABLE 0 +# endif /* OPENSSL_NO_OCB */ + +# ifndef OPENSSL_NO_SIV +# define S390X_aes_128_siv_CAPABLE 0 +# define S390X_aes_192_siv_CAPABLE 0 +# define S390X_aes_256_siv_CAPABLE 0 +# endif /* OPENSSL_NO_SIV */ + +/* Convert key size to function code: [16,24,32] -> [18,19,20]. */ +# define S390X_AES_FC(keylen) (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6)) +# elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 64 +/* RISC-V 64 support */ +# include "riscv_arch.h" +# define RV64I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) + +int rv64i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv64i_zknd_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void rv64i_zkne_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void rv64i_zknd_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +# elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 32 +/* RISC-V 32 support */ +# include "riscv_arch.h" +# define RV32I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) +# define RV32I_ZBKB_ZKND_ZKNE_CAPABLE (RV32I_ZKND_ZKNE_CAPABLE && RISCV_HAS_ZBKB()) + +int rv32i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +/* set_decrypt_key needs both zknd and zkne */ +int rv32i_zknd_zkne_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv32i_zbkb_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv32i_zbkb_zknd_zkne_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void rv32i_zkne_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void rv32i_zknd_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +# endif + +# if defined(HWAES_CAPABLE) +int HWAES_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int HWAES_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void HWAES_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void HWAES_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void HWAES_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +void HWAES_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + const int enc); +void HWAES_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +void HWAES_xts_encrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +void HWAES_xts_decrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +# ifndef OPENSSL_NO_OCB +# ifdef HWAES_ocb_encrypt +void HWAES_ocb_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# else +# define HWAES_ocb_encrypt ((ocb128_f)NULL) +# endif +# ifdef HWAES_ocb_decrypt +void HWAES_ocb_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# else +# define HWAES_ocb_decrypt ((ocb128_f)NULL) +# endif +# endif /* OPENSSL_NO_OCB */ + +# endif /* HWAES_CAPABLE */ + +#endif /* OSSL_AES_PLATFORM_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/aria.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/aria.h index 03a62950..21a9932e 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/aria.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/aria.h @@ -1,8 +1,8 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -12,6 +12,7 @@ #ifndef OSSL_CRYPTO_ARIA_H # define OSSL_CRYPTO_ARIA_H +# pragma once # include @@ -39,12 +40,12 @@ struct aria_key_st { typedef struct aria_key_st ARIA_KEY; -int aria_set_encrypt_key(const unsigned char *userKey, const int bits, - ARIA_KEY *key); -int aria_set_decrypt_key(const unsigned char *userKey, const int bits, - ARIA_KEY *key); +int ossl_aria_set_encrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); +int ossl_aria_set_decrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); -void aria_encrypt(const unsigned char *in, unsigned char *out, - const ARIA_KEY *key); +void ossl_aria_encrypt(const unsigned char *in, unsigned char *out, + const ARIA_KEY *key); #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1.h index 9c9b4d89..ec76ae6f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1.h @@ -1,23 +1,32 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OSSL_CRYPTO_ASN1_H +# define OSSL_CRYPTO_ASN1_H +# pragma once + +# include +# include /* OSSL_FUNC_keymgmt_import() */ + /* Internal ASN1 structures and functions: not for application use */ /* ASN1 public key method structure */ +#include + struct evp_pkey_asn1_method_st { int pkey_id; int pkey_base_id; unsigned long pkey_flags; char *pem_str; char *info; - int (*pub_decode) (EVP_PKEY *pk, X509_PUBKEY *pub); + int (*pub_decode) (EVP_PKEY *pk, const X509_PUBKEY *pub); int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk); int (*pub_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); int (*pub_print) (BIO *out, const EVP_PKEY *pkey, int indent, @@ -47,9 +56,10 @@ struct evp_pkey_asn1_method_st { const unsigned char **pder, int derlen); int (*old_priv_encode) (const EVP_PKEY *pkey, unsigned char **pder); /* Custom ASN1 signature verification */ - int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, - X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey); - int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, + int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, const void *data, + const X509_ALGOR *a, const ASN1_BIT_STRING *sig, + EVP_PKEY *pkey); + int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, const void *data, X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig); int (*siginf_set) (X509_SIG_INFO *siginf, const X509_ALGOR *alg, @@ -63,26 +73,35 @@ struct evp_pkey_asn1_method_st { int (*set_pub_key) (EVP_PKEY *pk, const unsigned char *pub, size_t len); int (*get_priv_key) (const EVP_PKEY *pk, unsigned char *priv, size_t *len); int (*get_pub_key) (const EVP_PKEY *pk, unsigned char *pub, size_t *len); + + /* Exports and imports to / from providers */ + size_t (*dirty_cnt) (const EVP_PKEY *pk); + int (*export_to) (const EVP_PKEY *pk, void *to_keydata, + OSSL_FUNC_keymgmt_import_fn *importer, + OSSL_LIB_CTX *libctx, const char *propq); + OSSL_CALLBACK *import_from; + int (*copy) (EVP_PKEY *to, EVP_PKEY *from); + + int (*priv_decode_ex) (EVP_PKEY *pk, + const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, + const char *propq); } /* EVP_PKEY_ASN1_METHOD */ ; DEFINE_STACK_OF_CONST(EVP_PKEY_ASN1_METHOD) -extern const EVP_PKEY_ASN1_METHOD cmac_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dh_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dhx_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meths[5]; -extern const EVP_PKEY_ASN1_METHOD eckey_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ecx25519_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ecx448_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ed448_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD sm2_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD poly1305_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dh_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dhx_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dsa_asn1_meths[5]; +extern const EVP_PKEY_ASN1_METHOD ossl_eckey_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ecx25519_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ecx448_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ed25519_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ed448_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_sm2_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD hmac_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[2]; -extern const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD siphash_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_rsa_asn1_meths[2]; +extern const EVP_PKEY_ASN1_METHOD ossl_rsa_pss_asn1_meth; /* * These are used internally in the ASN1_OBJECT to keep track of whether the @@ -110,4 +129,21 @@ struct asn1_pctx_st { unsigned long str_flags; } /* ASN1_PCTX */ ; -int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb); +/* ASN1 type functions */ + +int ossl_asn1_type_set_octetstring_int(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ossl_asn1_type_get_octetstring_int(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +int ossl_x509_algor_new_from_md(X509_ALGOR **palg, const EVP_MD *md); +const EVP_MD *ossl_x509_algor_get_md(X509_ALGOR *alg); +X509_ALGOR *ossl_x509_algor_mgf1_decode(X509_ALGOR *alg); +int ossl_x509_algor_md_to_mgf1(X509_ALGOR **palg, const EVP_MD *mgf1md); +int ossl_asn1_time_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); + +EVP_PKEY * ossl_d2i_PrivateKey_legacy(int keytype, EVP_PKEY **a, + const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); + +#endif /* ndef OSSL_CRYPTO_ASN1_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1_dsa.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1_dsa.h new file mode 100644 index 00000000..3eadb9ec --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1_dsa.h @@ -0,0 +1,24 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASN1_DSA_H +# define OSSL_CRYPTO_ASN1_DSA_H +# pragma once + +#include "internal/packet.h" + +int ossl_encode_der_length(WPACKET *pkt, size_t cont_len); +int ossl_encode_der_integer(WPACKET *pkt, const BIGNUM *n); +int ossl_encode_der_dsa_sig(WPACKET *pkt, const BIGNUM *r, const BIGNUM *s); +int ossl_decode_der_length(PACKET *pkt, PACKET *subpkt); +int ossl_decode_der_integer(PACKET *pkt, BIGNUM *n); +size_t ossl_decode_der_dsa_sig(BIGNUM *r, BIGNUM *s, const unsigned char **ppin, + size_t len); + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1err.h new file mode 100644 index 00000000..6441386b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASN1ERR_H +# define OSSL_CRYPTO_ASN1ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ASN1_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/async.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/async.h index dc8e937b..7bc0dbb6 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/async.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/async.h @@ -1,15 +1,19 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_CRYPTO_ASYNC_H +# define OSSL_CRYPTO_ASYNC_H +# pragma once + +# include int async_init(void); void async_deinit(void); -void async_delete_thread_state(void); +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asyncerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asyncerr.h new file mode 100644 index 00000000..574e0af7 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asyncerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASYNCERR_H +# define OSSL_CRYPTO_ASYNCERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ASYNC_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bioerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bioerr.h new file mode 100644 index 00000000..a0c06099 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bioerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BIOERR_H +# define OSSL_CRYPTO_BIOERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BIO_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn.h index 250914c4..00544d9d 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn.h @@ -1,7 +1,7 @@ /* * Copyright 2014-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_CRYPTO_BN_H # define OSSL_CRYPTO_BN_H +# pragma once # include # include @@ -87,4 +88,32 @@ int bn_rshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); int bn_div_fixed_top(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); +#define BN_PRIMETEST_COMPOSITE 0 +#define BN_PRIMETEST_COMPOSITE_WITH_FACTOR 1 +#define BN_PRIMETEST_COMPOSITE_NOT_POWER_OF_PRIME 2 +#define BN_PRIMETEST_PROBABLY_PRIME 3 + +int ossl_bn_miller_rabin_is_prime(const BIGNUM *w, int iterations, BN_CTX *ctx, + BN_GENCB *cb, int enhanced, int *status); +int ossl_bn_check_generated_prime(const BIGNUM *w, int checks, BN_CTX *ctx, + BN_GENCB *cb); + +const BIGNUM *ossl_bn_get0_small_factors(void); + +int ossl_bn_rsa_fips186_4_gen_prob_primes(BIGNUM *p, BIGNUM *Xpout, + BIGNUM *p1, BIGNUM *p2, + const BIGNUM *Xp, const BIGNUM *Xp1, + const BIGNUM *Xp2, int nlen, + const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); + +int ossl_bn_rsa_fips186_4_derive_prime(BIGNUM *Y, BIGNUM *X, const BIGNUM *Xin, + const BIGNUM *r1, const BIGNUM *r2, + int nlen, const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); + +OSSL_LIB_CTX *ossl_bn_get_libctx(BN_CTX *ctx); + +extern const BIGNUM ossl_bn_inv_sqrt_2; + #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h index 459055c9..f3a8a8af 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h @@ -1,9 +1,9 @@ /* WARNING: do not edit! */ /* Generated by Makefile from include/crypto/bn_conf.h.in */ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,6 +11,7 @@ #ifndef OSSL_CRYPTO_BN_CONF_H # define OSSL_CRYPTO_BN_CONF_H +# pragma once /* * The contents of this file are not used in the UEFI build, as diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h.in index b6b9eb74..dbc901b1 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h.in +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h.in @@ -1,8 +1,8 @@ {- join("\n",map { "/* $_ */" } @autowarntext) -} /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,7 @@ #ifndef OSSL_CRYPTO_BN_CONF_H # define OSSL_CRYPTO_BN_CONF_H +# pragma once /* * The contents of this file are not used in the UEFI build, as diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_dh.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_dh.h index 70ebca28..6d12c20e 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_dh.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_dh.h @@ -1,24 +1,43 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #define declare_dh_bn(x) \ - extern const BIGNUM _bignum_dh##x##_p; \ - extern const BIGNUM _bignum_dh##x##_g; \ - extern const BIGNUM _bignum_dh##x##_q; + extern const BIGNUM ossl_bignum_dh##x##_p; \ + extern const BIGNUM ossl_bignum_dh##x##_q; \ + extern const BIGNUM ossl_bignum_dh##x##_g; \ declare_dh_bn(1024_160) declare_dh_bn(2048_224) declare_dh_bn(2048_256) -extern const BIGNUM _bignum_ffdhe2048_p; -extern const BIGNUM _bignum_ffdhe3072_p; -extern const BIGNUM _bignum_ffdhe4096_p; -extern const BIGNUM _bignum_ffdhe6144_p; -extern const BIGNUM _bignum_ffdhe8192_p; -extern const BIGNUM _bignum_const_2; +extern const BIGNUM ossl_bignum_const_2; + +extern const BIGNUM ossl_bignum_ffdhe2048_p; +extern const BIGNUM ossl_bignum_ffdhe3072_p; +extern const BIGNUM ossl_bignum_ffdhe4096_p; +extern const BIGNUM ossl_bignum_ffdhe6144_p; +extern const BIGNUM ossl_bignum_ffdhe8192_p; +extern const BIGNUM ossl_bignum_ffdhe2048_q; +extern const BIGNUM ossl_bignum_ffdhe3072_q; +extern const BIGNUM ossl_bignum_ffdhe4096_q; +extern const BIGNUM ossl_bignum_ffdhe6144_q; +extern const BIGNUM ossl_bignum_ffdhe8192_q; + +extern const BIGNUM ossl_bignum_modp_1536_p; +extern const BIGNUM ossl_bignum_modp_2048_p; +extern const BIGNUM ossl_bignum_modp_3072_p; +extern const BIGNUM ossl_bignum_modp_4096_p; +extern const BIGNUM ossl_bignum_modp_6144_p; +extern const BIGNUM ossl_bignum_modp_8192_p; +extern const BIGNUM ossl_bignum_modp_1536_q; +extern const BIGNUM ossl_bignum_modp_2048_q; +extern const BIGNUM ossl_bignum_modp_3072_q; +extern const BIGNUM ossl_bignum_modp_4096_q; +extern const BIGNUM ossl_bignum_modp_6144_q; +extern const BIGNUM ossl_bignum_modp_8192_q; diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_srp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_srp.h index d4b282a6..00b160aa 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_srp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_srp.h @@ -1,7 +1,7 @@ /* - * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,24 +9,24 @@ #ifndef OPENSSL_NO_SRP -extern const BIGNUM bn_group_1024; +extern const BIGNUM ossl_bn_group_1024; -extern const BIGNUM bn_group_1536; +extern const BIGNUM ossl_bn_group_1536; -extern const BIGNUM bn_group_2048; +extern const BIGNUM ossl_bn_group_2048; -extern const BIGNUM bn_group_3072; +extern const BIGNUM ossl_bn_group_3072; -extern const BIGNUM bn_group_4096; +extern const BIGNUM ossl_bn_group_4096; -extern const BIGNUM bn_group_6144; +extern const BIGNUM ossl_bn_group_6144; -extern const BIGNUM bn_group_8192; +extern const BIGNUM ossl_bn_group_8192; -extern const BIGNUM bn_generator_19; +extern const BIGNUM ossl_bn_generator_19; -extern const BIGNUM bn_generator_5; +extern const BIGNUM ossl_bn_generator_5; -extern const BIGNUM bn_generator_2; +extern const BIGNUM ossl_bn_generator_2; #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bnerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bnerr.h new file mode 100644 index 00000000..131e30fa --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bnerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BNERR_H +# define OSSL_CRYPTO_BNERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BN_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/buffererr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/buffererr.h new file mode 100644 index 00000000..54976d95 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/buffererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BUFFERERR_H +# define OSSL_CRYPTO_BUFFERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BUF_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/chacha.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/chacha.h index 4029400a..d29998ff 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/chacha.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/chacha.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_CRYPTO_CHACHA_H #define OSSL_CRYPTO_CHACHA_H +# pragma once #include @@ -35,8 +36,8 @@ void ChaCha20_ctr32(unsigned char *out, const unsigned char *inp, ((unsigned int)(p)[0]) | ((unsigned int)(p)[1]<<8) | \ ((unsigned int)(p)[2]<<16) | ((unsigned int)(p)[3]<<24) ) -#define CHACHA_KEY_SIZE 32 -#define CHACHA_CTR_SIZE 16 -#define CHACHA_BLK_SIZE 64 +#define CHACHA_KEY_SIZE 32 +#define CHACHA_CTR_SIZE 16 +#define CHACHA_BLK_SIZE 64 #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmll_platform.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmll_platform.h new file mode 100644 index 00000000..8cadadf6 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmll_platform.h @@ -0,0 +1,51 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CMLL_PLATFORM_H +# define OSSL_CMLL_PLATFORM_H +# pragma once + +# if defined(CMLL_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# ifndef OPENSSL_NO_CAMELLIA +# define SPARC_CMLL_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_CAMELLIA) +# include + +void cmll_t4_set_key(const unsigned char *key, int bits, CAMELLIA_KEY *ks); +void cmll_t4_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); +void cmll_t4_decrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); + +void cmll128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const CAMELLIA_KEY *key, + unsigned char *ivec); +void cmll256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const CAMELLIA_KEY *key, + unsigned char *ivec); +# endif /* OPENSSL_NO_CAMELLIA */ + +# endif /* CMLL_ASM && sparc */ + +#endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmperr.h new file mode 100644 index 00000000..2bd16373 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CMPERR_H +# define OSSL_CRYPTO_CMPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CMP + +int ossl_err_load_CMP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmserr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmserr.h new file mode 100644 index 00000000..1de2f9c7 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmserr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CMSERR_H +# define OSSL_CRYPTO_CMSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CMS + +int ossl_err_load_CMS_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/comperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/comperr.h new file mode 100644 index 00000000..0fd9c6de --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/comperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_COMPERR_H +# define OSSL_CRYPTO_COMPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_COMP + +int ossl_err_load_COMP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/conferr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/conferr.h new file mode 100644 index 00000000..cb367e4f --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/conferr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CONFERR_H +# define OSSL_CRYPTO_CONFERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_CONF_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/context.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/context.h new file mode 100644 index 00000000..cc06c71b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/context.h @@ -0,0 +1,41 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +void *ossl_provider_store_new(OSSL_LIB_CTX *); +void *ossl_property_string_data_new(OSSL_LIB_CTX *); +void *ossl_stored_namemap_new(OSSL_LIB_CTX *); +void *ossl_property_defns_new(OSSL_LIB_CTX *); +void *ossl_ctx_global_properties_new(OSSL_LIB_CTX *); +void *ossl_rand_ctx_new(OSSL_LIB_CTX *); +void *ossl_prov_conf_ctx_new(OSSL_LIB_CTX *); +void *ossl_bio_core_globals_new(OSSL_LIB_CTX *); +void *ossl_child_prov_ctx_new(OSSL_LIB_CTX *); +void *ossl_prov_drbg_nonce_ctx_new(OSSL_LIB_CTX *); +void *ossl_self_test_set_callback_new(OSSL_LIB_CTX *); +void *ossl_rand_crng_ctx_new(OSSL_LIB_CTX *); +void *ossl_thread_event_ctx_new(OSSL_LIB_CTX *); +void *ossl_fips_prov_ossl_ctx_new(OSSL_LIB_CTX *); + +void ossl_provider_store_free(void *); +void ossl_property_string_data_free(void *); +void ossl_stored_namemap_free(void *); +void ossl_property_defns_free(void *); +void ossl_ctx_global_properties_free(void *); +void ossl_rand_ctx_free(void *); +void ossl_prov_conf_ctx_free(void *); +void ossl_bio_core_globals_free(void *); +void ossl_child_prov_ctx_free(void *); +void ossl_prov_drbg_nonce_ctx_free(void *); +void ossl_self_test_set_callback_free(void *); +void ossl_rand_crng_ctx_free(void *); +void ossl_thread_event_ctx_free(void *); +void ossl_fips_prov_ossl_ctx_free(void *); +void ossl_release_default_drbg_ctx(void); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/crmferr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/crmferr.h new file mode 100644 index 00000000..f1a27e04 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/crmferr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CRMFERR_H +# define OSSL_CRYPTO_CRMFERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CRMF + +int ossl_err_load_CRMF_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptlib.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptlib.h index 38b5dac9..39a956bf 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptlib.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptlib.h @@ -1,35 +1,39 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include "internal/cryptlib.h" +#ifndef OSSL_CRYPTO_CRYPTLIB_H +# define OSSL_CRYPTO_CRYPTLIB_H +# pragma once + +# include +# include "internal/cryptlib.h" /* This file is not scanned by mkdef.pl, whereas cryptlib.h is */ -struct thread_local_inits_st { - int async; - int err_state; - int rand; -}; - -int ossl_init_thread_start(uint64_t opts); +int ossl_init_thread_start(const void *index, void *arg, + OSSL_thread_stop_handler_fn handfn); +int ossl_init_thread_deregister(void *index); +int ossl_init_thread(void); +void ossl_cleanup_thread(void); +void ossl_ctx_thread_stop(OSSL_LIB_CTX *ctx); /* * OPENSSL_INIT flags. The primary list of these is in crypto.h. Flags below * are those omitted from crypto.h because they are "reserved for internal * use". */ -# define OPENSSL_INIT_ZLIB 0x00010000L # define OPENSSL_INIT_BASE_ONLY 0x00040000L -/* OPENSSL_INIT_THREAD flags */ -# define OPENSSL_INIT_THREAD_ASYNC 0x01 -# define OPENSSL_INIT_THREAD_ERR_STATE 0x02 -# define OPENSSL_INIT_THREAD_RAND 0x04 - +void ossl_trace_cleanup(void); void ossl_malloc_setup_failures(void); + +int ossl_crypto_alloc_ex_data_intern(int class_index, void *obj, + CRYPTO_EX_DATA *ad, int idx); + +#endif /* OSSL_CRYPTO_CRYPTLIB_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptoerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptoerr.h new file mode 100644 index 00000000..1b6192e3 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptoerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CRYPTOERR_H +# define OSSL_CRYPTO_CRYPTOERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_CRYPTO_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cterr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cterr.h new file mode 100644 index 00000000..760bc796 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cterr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CTERR_H +# define OSSL_CRYPTO_CTERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CT + +int ossl_err_load_CT_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ctype.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ctype.h index 81ef8f5c..22f69221 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ctype.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ctype.h @@ -1,7 +1,7 @@ /* - * Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -20,6 +20,9 @@ */ #ifndef OSSL_CRYPTO_CTYPE_H # define OSSL_CRYPTO_CTYPE_H +# pragma once + +# include # define CTYPE_MASK_lower 0x1 # define CTYPE_MASK_upper 0x2 @@ -54,10 +57,15 @@ int ossl_fromascii(int c); # define ossl_fromascii(c) (c) # endif int ossl_ctype_check(int c, unsigned int mask); + int ossl_tolower(int c); int ossl_toupper(int c); -int ascii_isdigit(const char inchar); +int ossl_isdigit(int c); +int ossl_islower(int c); +int ossl_isupper(int c); + +int ossl_ascii_isdigit(int c); # define ossl_isalnum(c) (ossl_ctype_check((c), CTYPE_MASK_alnum)) # define ossl_isalpha(c) (ossl_ctype_check((c), CTYPE_MASK_alpha)) @@ -68,15 +76,11 @@ int ascii_isdigit(const char inchar); # endif # define ossl_isblank(c) (ossl_ctype_check((c), CTYPE_MASK_blank)) # define ossl_iscntrl(c) (ossl_ctype_check((c), CTYPE_MASK_cntrl)) -# define ossl_isdigit(c) (ossl_ctype_check((c), CTYPE_MASK_digit)) # define ossl_isgraph(c) (ossl_ctype_check((c), CTYPE_MASK_graph)) -# define ossl_islower(c) (ossl_ctype_check((c), CTYPE_MASK_lower)) # define ossl_isprint(c) (ossl_ctype_check((c), CTYPE_MASK_print)) # define ossl_ispunct(c) (ossl_ctype_check((c), CTYPE_MASK_punct)) # define ossl_isspace(c) (ossl_ctype_check((c), CTYPE_MASK_space)) -# define ossl_isupper(c) (ossl_ctype_check((c), CTYPE_MASK_upper)) # define ossl_isxdigit(c) (ossl_ctype_check((c), CTYPE_MASK_xdigit)) # define ossl_isbase64(c) (ossl_ctype_check((c), CTYPE_MASK_base64)) # define ossl_isasn1print(c) (ossl_ctype_check((c), CTYPE_MASK_asn1print)) - #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decoder.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decoder.h new file mode 100644 index 00000000..6b5ee56a --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decoder.h @@ -0,0 +1,40 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DECODER_H +# define OSSL_CRYPTO_DECODER_H +# pragma once + +# include + +/* + * These are specially made for the 'file:' provider-native loader, which + * uses this to install a DER to anything decoder, which doesn't do much + * except read a DER blob and pass it on as a provider object abstraction + * (provider-object(7)). + */ +void *ossl_decoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef, + OSSL_PROVIDER *prov); + +OSSL_DECODER_INSTANCE * +ossl_decoder_instance_new(OSSL_DECODER *decoder, void *decoderctx); +void ossl_decoder_instance_free(OSSL_DECODER_INSTANCE *decoder_inst); +int ossl_decoder_ctx_add_decoder_inst(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_INSTANCE *di); + +int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, + EVP_PKEY **pkey, const char *keytype, + OSSL_LIB_CTX *libctx, + const char *propquery); + +int ossl_decoder_get_number(const OSSL_DECODER *encoder); +int ossl_decoder_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_decoder_store_remove_all_provided(const OSSL_PROVIDER *prov); + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decodererr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decodererr.h new file mode 100644 index 00000000..d7badc43 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decodererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DECODERERR_H +# define OSSL_CRYPTO_DECODERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_DECODER_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/des_platform.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/des_platform.h new file mode 100644 index 00000000..07ea1ddd --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/des_platform.h @@ -0,0 +1,35 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_DES_PLATFORM_H +# define OSSL_DES_PLATFORM_H +# pragma once + +# if defined(DES_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# ifndef OPENSSL_NO_DES +# define SPARC_DES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_DES) +# include +void des_t4_key_expand(const void *key, DES_key_schedule *ks); +void des_t4_ede3_cbc_encrypt(const void *inp, void *out, size_t len, + const DES_key_schedule ks[3], unsigned char iv[8]); +void des_t4_ede3_cbc_decrypt(const void *inp, void *out, size_t len, + const DES_key_schedule ks[3], unsigned char iv[8]); +void des_t4_cbc_encrypt(const void *inp, void *out, size_t len, + const DES_key_schedule *ks, unsigned char iv[8]); +void des_t4_cbc_decrypt(const void *inp, void *out, size_t len, + const DES_key_schedule *ks, unsigned char iv[8]); +# endif /* OPENSSL_NO_DES */ + +# endif /* DES_ASM && sparc */ + +#endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dh.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dh.h new file mode 100644 index 00000000..51232d18 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dh.h @@ -0,0 +1,62 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DH_H +# define OSSL_CRYPTO_DH_H +# pragma once + +# include +# include +# include +# include "internal/ffc.h" + +DH *ossl_dh_new_by_nid_ex(OSSL_LIB_CTX *libctx, int nid); +DH *ossl_dh_new_ex(OSSL_LIB_CTX *libctx); +void ossl_dh_set0_libctx(DH *d, OSSL_LIB_CTX *libctx); +int ossl_dh_generate_ffc_parameters(DH *dh, int type, int pbits, int qbits, + BN_GENCB *cb); +int ossl_dh_generate_public_key(BN_CTX *ctx, const DH *dh, + const BIGNUM *priv_key, BIGNUM *pub_key); +int ossl_dh_get_named_group_uid_from_size(int pbits); +const char *ossl_dh_gen_type_id2name(int id); +int ossl_dh_gen_type_name2id(const char *name, int type); +void ossl_dh_cache_named_group(DH *dh); +int ossl_dh_is_named_safe_prime_group(const DH *dh); + +FFC_PARAMS *ossl_dh_get0_params(DH *dh); +int ossl_dh_get0_nid(const DH *dh); +int ossl_dh_params_fromdata(DH *dh, const OSSL_PARAM params[]); +int ossl_dh_key_fromdata(DH *dh, const OSSL_PARAM params[], int include_private); +int ossl_dh_params_todata(DH *dh, OSSL_PARAM_BLD *bld, OSSL_PARAM params[]); +int ossl_dh_key_todata(DH *dh, OSSL_PARAM_BLD *bld, OSSL_PARAM params[], + int include_private); +DH *ossl_dh_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_dh_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); + +int ossl_dh_check_pub_key_partial(const DH *dh, const BIGNUM *pub_key, int *ret); +int ossl_dh_check_priv_key(const DH *dh, const BIGNUM *priv_key, int *ret); +int ossl_dh_check_pairwise(const DH *dh); + +const DH_METHOD *ossl_dh_get_method(const DH *dh); + +int ossl_dh_buf2key(DH *key, const unsigned char *buf, size_t len); +size_t ossl_dh_key2buf(const DH *dh, unsigned char **pbuf, size_t size, + int alloc); + +int ossl_dh_kdf_X9_42_asn1(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const char *cek_alg, + const unsigned char *ukm, size_t ukmlen, + const EVP_MD *md, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_dh_is_foreign(const DH *dh); +DH *ossl_dh_dup(const DH *dh, int selection); + +#endif /* OSSL_CRYPTO_DH_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dherr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dherr.h new file mode 100644 index 00000000..bb24d131 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dherr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DHERR_H +# define OSSL_CRYPTO_DHERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DH + +int ossl_err_load_DH_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsa.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsa.h new file mode 100644 index 00000000..260c30fa --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsa.h @@ -0,0 +1,49 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DSA_H +# define OSSL_CRYPTO_DSA_H +# pragma once + +# include +# include +# include "internal/ffc.h" + +#define DSA_PARAMGEN_TYPE_FIPS_186_4 0 /* Use FIPS186-4 standard */ +#define DSA_PARAMGEN_TYPE_FIPS_186_2 1 /* Use legacy FIPS186-2 standard */ +#define DSA_PARAMGEN_TYPE_FIPS_DEFAULT 2 + +DSA *ossl_dsa_new(OSSL_LIB_CTX *libctx); +void ossl_dsa_set0_libctx(DSA *d, OSSL_LIB_CTX *libctx); + +int ossl_dsa_generate_ffc_parameters(DSA *dsa, int type, int pbits, int qbits, + BN_GENCB *cb); + +int ossl_dsa_sign_int(int type, const unsigned char *dgst, int dlen, + unsigned char *sig, unsigned int *siglen, DSA *dsa); + +FFC_PARAMS *ossl_dsa_get0_params(DSA *dsa); +int ossl_dsa_ffc_params_fromdata(DSA *dsa, const OSSL_PARAM params[]); +int ossl_dsa_key_fromdata(DSA *dsa, const OSSL_PARAM params[], + int include_private); +DSA *ossl_dsa_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_dsa_generate_public_key(BN_CTX *ctx, const DSA *dsa, + const BIGNUM *priv_key, BIGNUM *pub_key); +int ossl_dsa_check_params(const DSA *dsa, int checktype, int *ret); +int ossl_dsa_check_pub_key(const DSA *dsa, const BIGNUM *pub_key, int *ret); +int ossl_dsa_check_pub_key_partial(const DSA *dsa, const BIGNUM *pub_key, + int *ret); +int ossl_dsa_check_priv_key(const DSA *dsa, const BIGNUM *priv_key, int *ret); +int ossl_dsa_check_pairwise(const DSA *dsa); +int ossl_dsa_is_foreign(const DSA *dsa); +DSA *ossl_dsa_dup(const DSA *dsa, int selection); + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsaerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsaerr.h new file mode 100644 index 00000000..fde8358f --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsaerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DSAERR_H +# define OSSL_CRYPTO_DSAERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DSA + +int ossl_err_load_DSA_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h index 4b1167c3..795dfa0f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h @@ -1,9 +1,9 @@ /* WARNING: do not edit! */ /* Generated by Makefile from include/crypto/dso_conf.h.in */ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,6 +11,8 @@ #ifndef OSSL_CRYPTO_DSO_CONF_H # define OSSL_CRYPTO_DSO_CONF_H +# pragma once + # define DSO_DLFCN # define HAVE_DLFCN_H # define DSO_EXTENSION ".so" diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h.in index 57a09b10..12de11ad 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h.in +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h.in @@ -1,8 +1,8 @@ {- join("\n",map { "/* $_ */" } @autowarntext) -} /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,8 @@ #ifndef OSSL_CRYPTO_DSO_CONF_H # define OSSL_CRYPTO_DSO_CONF_H +# pragma once + {- # The DSO code currently always implements all functions so that no # applications will have to worry about that from a compilation point # of view. However, the "method"s may return zero unless that platform @@ -27,5 +29,5 @@ @macros = ( "DSO_DLFCN" ); } join("\n", map { "# define $_" } @macros); -} -# define DSO_EXTENSION "{- $target{dso_extension} -}" +# define DSO_EXTENSION "{- platform->dsoext() -}" #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ec.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ec.h index fe52ae70..62163b31 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ec.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ec.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,11 +11,20 @@ #ifndef OSSL_CRYPTO_EC_H # define OSSL_CRYPTO_EC_H +# pragma once + # include +# include + +int ossl_ec_curve_name2nid(const char *name); +const char *ossl_ec_curve_nid2nist_int(int nid); +int ossl_ec_curve_nist2nid_int(const char *name); +int evp_pkey_ctx_set_ec_param_enc_prov(EVP_PKEY_CTX *ctx, int param_enc); # ifndef OPENSSL_NO_EC - +# include # include +# include "crypto/types.h" /*- * Computes the multiplicative inverse of x in the range @@ -38,16 +47,54 @@ * reduction round on the input can be omitted by the underlying * implementations for better SCA properties on regular input values). */ -__owur int ec_group_do_inverse_ord(const EC_GROUP *group, BIGNUM *res, - const BIGNUM *x, BN_CTX *ctx); +__owur int ossl_ec_group_do_inverse_ord(const EC_GROUP *group, BIGNUM *res, + const BIGNUM *x, BN_CTX *ctx); /*- * ECDH Key Derivation Function as defined in ANSI X9.63 */ -int ecdh_KDF_X9_63(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); +int ossl_ecdh_kdf_X9_63(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const unsigned char *sinfo, size_t sinfolen, + const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); + +int ossl_ec_key_public_check(const EC_KEY *eckey, BN_CTX *ctx); +int ossl_ec_key_public_check_quick(const EC_KEY *eckey, BN_CTX *ctx); +int ossl_ec_key_private_check(const EC_KEY *eckey); +int ossl_ec_key_pairwise_check(const EC_KEY *eckey, BN_CTX *ctx); +OSSL_LIB_CTX *ossl_ec_key_get_libctx(const EC_KEY *eckey); +const char *ossl_ec_key_get0_propq(const EC_KEY *eckey); +void ossl_ec_key_set0_libctx(EC_KEY *key, OSSL_LIB_CTX *libctx); + +/* Backend support */ +int ossl_ec_group_todata(const EC_GROUP *group, OSSL_PARAM_BLD *tmpl, + OSSL_PARAM params[], OSSL_LIB_CTX *libctx, + const char *propq, + BN_CTX *bnctx, unsigned char **genbuf); +int ossl_ec_group_fromdata(EC_KEY *ec, const OSSL_PARAM params[]); +int ossl_ec_group_set_params(EC_GROUP *group, const OSSL_PARAM params[]); +int ossl_ec_key_fromdata(EC_KEY *ecx, const OSSL_PARAM params[], + int include_private); +int ossl_ec_key_otherparams_fromdata(EC_KEY *ec, const OSSL_PARAM params[]); +int ossl_ec_key_is_foreign(const EC_KEY *ec); +EC_KEY *ossl_ec_key_dup(const EC_KEY *key, int selection); +int ossl_x509_algor_is_sm2(const X509_ALGOR *palg); +EC_KEY *ossl_ec_key_param_from_x509_algor(const X509_ALGOR *palg, + OSSL_LIB_CTX *libctx, + const char *propq); +EC_KEY *ossl_ec_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_ec_set_ecdh_cofactor_mode(EC_KEY *ec, int mode); +int ossl_ec_encoding_name2id(const char *name); +int ossl_ec_encoding_param2id(const OSSL_PARAM *p, int *id); +int ossl_ec_pt_format_name2id(const char *name); +int ossl_ec_pt_format_param2id(const OSSL_PARAM *p, int *id); +char *ossl_ec_pt_format_id2name(int id); + +char *ossl_ec_check_group_type_id2name(int flags); +int ossl_ec_set_check_group_type_from_name(EC_KEY *ec, const char *name); # endif /* OPENSSL_NO_EC */ #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecerr.h new file mode 100644 index 00000000..782526bf --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ECERR_H +# define OSSL_CRYPTO_ECERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_EC + +int ossl_err_load_EC_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecx.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecx.h new file mode 100644 index 00000000..48b95fa5 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecx.h @@ -0,0 +1,150 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* Internal EC functions for other submodules: not for application use */ + +#ifndef OSSL_CRYPTO_ECX_H +# define OSSL_CRYPTO_ECX_H +# pragma once + +# include + +# ifndef OPENSSL_NO_EC + +# include +# include +# include +# include "internal/refcount.h" +# include "crypto/types.h" + +# define X25519_KEYLEN 32 +# define X448_KEYLEN 56 +# define ED25519_KEYLEN 32 +# define ED448_KEYLEN 57 + +# define MAX_KEYLEN ED448_KEYLEN + +# define X25519_BITS 253 +# define X25519_SECURITY_BITS 128 + +# define X448_BITS 448 +# define X448_SECURITY_BITS 224 + +# define ED25519_BITS 256 +/* RFC8032 Section 8.5 */ +# define ED25519_SECURITY_BITS 128 +# define ED25519_SIGSIZE 64 + +# define ED448_BITS 456 +/* RFC8032 Section 8.5 */ +# define ED448_SECURITY_BITS 224 +# define ED448_SIGSIZE 114 + + +typedef enum { + ECX_KEY_TYPE_X25519, + ECX_KEY_TYPE_X448, + ECX_KEY_TYPE_ED25519, + ECX_KEY_TYPE_ED448 +} ECX_KEY_TYPE; + +#define KEYTYPE2NID(type) \ + ((type) == ECX_KEY_TYPE_X25519 \ + ? EVP_PKEY_X25519 \ + : ((type) == ECX_KEY_TYPE_X448 \ + ? EVP_PKEY_X448 \ + : ((type) == ECX_KEY_TYPE_ED25519 \ + ? EVP_PKEY_ED25519 \ + : EVP_PKEY_ED448))) + +struct ecx_key_st { + OSSL_LIB_CTX *libctx; + char *propq; + unsigned int haspubkey:1; + unsigned char pubkey[MAX_KEYLEN]; + unsigned char *privkey; + size_t keylen; + ECX_KEY_TYPE type; + CRYPTO_REF_COUNT references; + CRYPTO_RWLOCK *lock; +}; + +size_t ossl_ecx_key_length(ECX_KEY_TYPE type); +ECX_KEY *ossl_ecx_key_new(OSSL_LIB_CTX *libctx, ECX_KEY_TYPE type, + int haspubkey, const char *propq); +void ossl_ecx_key_set0_libctx(ECX_KEY *key, OSSL_LIB_CTX *libctx); +unsigned char *ossl_ecx_key_allocate_privkey(ECX_KEY *key); +void ossl_ecx_key_free(ECX_KEY *key); +int ossl_ecx_key_up_ref(ECX_KEY *key); +ECX_KEY *ossl_ecx_key_dup(const ECX_KEY *key, int selection); + +int ossl_x25519(uint8_t out_shared_key[32], const uint8_t private_key[32], + const uint8_t peer_public_value[32]); +void ossl_x25519_public_from_private(uint8_t out_public_value[32], + const uint8_t private_key[32]); + +int +ossl_ed25519_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[32], + const uint8_t private_key[32], + const char *propq); +int +ossl_ed25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, + const uint8_t public_key[32], const uint8_t private_key[32], + OSSL_LIB_CTX *libctx, const char *propq); +int +ossl_ed25519_verify(const uint8_t *message, size_t message_len, + const uint8_t signature[64], const uint8_t public_key[32], + OSSL_LIB_CTX *libctx, const char *propq); + +int +ossl_ed448_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[57], + const uint8_t private_key[57], const char *propq); +int +ossl_ed448_sign(OSSL_LIB_CTX *ctx, uint8_t *out_sig, const uint8_t *message, + size_t message_len, const uint8_t public_key[57], + const uint8_t private_key[57], const uint8_t *context, + size_t context_len, const char *propq); + +int +ossl_ed448_verify(OSSL_LIB_CTX *ctx, const uint8_t *message, size_t message_len, + const uint8_t signature[114], const uint8_t public_key[57], + const uint8_t *context, size_t context_len, const char *propq); + +int +ossl_x448(uint8_t out_shared_key[56], const uint8_t private_key[56], + const uint8_t peer_public_value[56]); +void +ossl_x448_public_from_private(uint8_t out_public_value[56], + const uint8_t private_key[56]); + + +/* Backend support */ +typedef enum { + KEY_OP_PUBLIC, + KEY_OP_PRIVATE, + KEY_OP_KEYGEN +} ecx_key_op_t; + +ECX_KEY *ossl_ecx_key_op(const X509_ALGOR *palg, + const unsigned char *p, int plen, + int pkey_id, ecx_key_op_t op, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_ecx_public_from_private(ECX_KEY *key); +int ossl_ecx_key_fromdata(ECX_KEY *ecx, const OSSL_PARAM params[], + int include_private); +ECX_KEY *ossl_ecx_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +ECX_KEY *ossl_evp_pkey_get1_X25519(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_X448(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_ED25519(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_ED448(EVP_PKEY *pkey); +# endif /* OPENSSL_NO_EC */ +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encoder.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encoder.h new file mode 100644 index 00000000..5c53bbea --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encoder.h @@ -0,0 +1,20 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENCODER_H +# define OSSL_CRYPTO_ENCODER_H +# pragma once + +# include + +int ossl_encoder_get_number(const OSSL_ENCODER *encoder); +int ossl_encoder_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_encoder_store_remove_all_provided(const OSSL_PROVIDER *prov); + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encodererr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encodererr.h new file mode 100644 index 00000000..56c45823 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encodererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENCODERERR_H +# define OSSL_CRYPTO_ENCODERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_ENCODER_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engine.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engine.h index f80ae3ec..fac6ed09 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engine.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engine.h @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engineerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engineerr.h new file mode 100644 index 00000000..737c841d --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engineerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENGINEERR_H +# define OSSL_CRYPTO_ENGINEERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_ENGINE + +int ossl_err_load_ENGINE_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/err.h index 8ab0e5ba..15ec6fd0 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/err.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,10 +9,11 @@ #ifndef OSSL_CRYPTO_ERR_H # define OSSL_CRYPTO_ERR_H +# pragma once -int err_load_crypto_strings_int(void); +int ossl_err_load_ERR_strings(void); +int ossl_err_load_crypto_strings(void); void err_cleanup(void); -void err_delete_thread_state(void); int err_shelve_state(void **); void err_unshelve_state(void *); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ess.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ess.h new file mode 100644 index 00000000..7acde5f8 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ess.h @@ -0,0 +1,76 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ESS_H +# define OSSL_CRYPTO_ESS_H +# pragma once + +/*- + * IssuerSerial ::= SEQUENCE { + * issuer GeneralNames, + * serialNumber CertificateSerialNumber + * } + */ + +struct ESS_issuer_serial { + STACK_OF(GENERAL_NAME) *issuer; + ASN1_INTEGER *serial; +}; + +/*- + * ESSCertID ::= SEQUENCE { + * certHash Hash, + * issuerSerial IssuerSerial OPTIONAL + * } + */ + +struct ESS_cert_id { + ASN1_OCTET_STRING *hash; /* Always SHA-1 digest. */ + ESS_ISSUER_SERIAL *issuer_serial; +}; + +/*- + * SigningCertificate ::= SEQUENCE { + * certs SEQUENCE OF ESSCertID, + * policies SEQUENCE OF PolicyInformation OPTIONAL + * } + */ + +struct ESS_signing_cert { + STACK_OF(ESS_CERT_ID) *cert_ids; + STACK_OF(POLICYINFO) *policy_info; +}; + +/*- + * ESSCertIDv2 ::= SEQUENCE { + * hashAlgorithm AlgorithmIdentifier DEFAULT id-sha256, + * certHash Hash, + * issuerSerial IssuerSerial OPTIONAL + * } + */ + +struct ESS_cert_id_v2_st { + X509_ALGOR *hash_alg; /* Default: SHA-256 */ + ASN1_OCTET_STRING *hash; + ESS_ISSUER_SERIAL *issuer_serial; +}; + +/*- + * SigningCertificateV2 ::= SEQUENCE { + * certs SEQUENCE OF ESSCertIDv2, + * policies SEQUENCE OF PolicyInformation OPTIONAL + * } + */ + +struct ESS_signing_cert_v2_st { + STACK_OF(ESS_CERT_ID_V2) *cert_ids; + STACK_OF(POLICYINFO) *policy_info; +}; + +#endif /* OSSL_CRYPTO_ESS_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/esserr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/esserr.h new file mode 100644 index 00000000..8df2df11 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/esserr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ESSERR_H +# define OSSL_CRYPTO_ESSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ESS_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evp.h index d86aed36..dbbdcccb 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evp.h @@ -1,14 +1,20 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include -#include "internal/refcount.h" +#ifndef OSSL_CRYPTO_EVP_H +# define OSSL_CRYPTO_EVP_H +# pragma once + +# include +# include +# include "internal/refcount.h" +# include "crypto/ecx.h" /* * Don't free up md_ctx->pctx in EVP_MD_CTX_reset, use the reserved flag @@ -16,7 +22,93 @@ */ #define EVP_MD_CTX_FLAG_KEEP_PKEY_CTX 0x0400 +#define evp_pkey_ctx_is_legacy(ctx) \ + ((ctx)->keymgmt == NULL) +#define evp_pkey_ctx_is_provided(ctx) \ + (!evp_pkey_ctx_is_legacy(ctx)) + struct evp_pkey_ctx_st { + /* Actual operation */ + int operation; + + /* + * Library context, property query, keytype and keymgmt associated with + * this context + */ + OSSL_LIB_CTX *libctx; + char *propquery; + const char *keytype; + /* If |pkey| below is set, this field is always a reference to its keymgmt */ + EVP_KEYMGMT *keymgmt; + + union { + struct { + void *genctx; + } keymgmt; + + struct { + EVP_KEYEXCH *exchange; + /* + * Opaque ctx returned from a providers exchange algorithm + * implementation OSSL_FUNC_keyexch_newctx() + */ + void *algctx; + } kex; + + struct { + EVP_SIGNATURE *signature; + /* + * Opaque ctx returned from a providers signature algorithm + * implementation OSSL_FUNC_signature_newctx() + */ + void *algctx; + } sig; + + struct { + EVP_ASYM_CIPHER *cipher; + /* + * Opaque ctx returned from a providers asymmetric cipher algorithm + * implementation OSSL_FUNC_asym_cipher_newctx() + */ + void *algctx; + } ciph; + struct { + EVP_KEM *kem; + /* + * Opaque ctx returned from a providers KEM algorithm + * implementation OSSL_FUNC_kem_newctx() + */ + void *algctx; + } encap; + } op; + + /* + * Cached parameters. Inits of operations that depend on these should + * call evp_pkey_ctx_use_delayed_data() when the operation has been set + * up properly. + */ + struct { + /* Distinguishing Identifier, ISO/IEC 15946-3, FIPS 196 */ + char *dist_id_name; /* The name used with EVP_PKEY_CTX_ctrl_str() */ + void *dist_id; /* The distinguishing ID itself */ + size_t dist_id_len; /* The length of the distinguishing ID */ + + /* Indicators of what has been set. Keep them together! */ + unsigned int dist_id_set : 1; + } cached_parameters; + + /* Application specific data, usually used by the callback */ + void *app_data; + /* Keygen callback */ + EVP_PKEY_gen_cb *pkey_gencb; + /* implementation specific keygen data */ + int *keygen_info; + int keygen_info_count; + + /* Legacy fields below */ + + /* EVP_PKEY identity */ + int legacy_keytype; /* Method associated with this operation */ const EVP_PKEY_METHOD *pmeth; /* Engine that implements this method or NULL if builtin */ @@ -25,17 +117,17 @@ struct evp_pkey_ctx_st { EVP_PKEY *pkey; /* Peer key for key agreement, may be NULL */ EVP_PKEY *peerkey; - /* Actual operation */ - int operation; /* Algorithm specific data */ void *data; - /* Application specific data */ - void *app_data; - /* Keygen callback */ - EVP_PKEY_gen_cb *pkey_gencb; - /* implementation specific keygen data */ - int *keygen_info; - int keygen_info_count; + /* Indicator if digest_custom needs to be called */ + unsigned int flag_call_digest_custom:1; + /* + * Used to support taking custody of memory in the case of a provider being + * used with the deprecated EVP_PKEY_CTX_set_rsa_keygen_pubexp() API. This + * member should NOT be used for any other purpose and should be removed + * when said deprecated API is excised completely. + */ + BIGNUM *rsa_pubexp; } /* EVP_PKEY_CTX */ ; #define EVP_PKEY_FLAG_DYNAMIC 1 @@ -44,7 +136,7 @@ struct evp_pkey_method_st { int pkey_id; int flags; int (*init) (EVP_PKEY_CTX *ctx); - int (*copy) (EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src); + int (*copy) (EVP_PKEY_CTX *dst, const EVP_PKEY_CTX *src); void (*cleanup) (EVP_PKEY_CTX *ctx); int (*paramgen_init) (EVP_PKEY_CTX *ctx); int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); @@ -93,30 +185,74 @@ DEFINE_STACK_OF_CONST(EVP_PKEY_METHOD) void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx); -extern const EVP_PKEY_METHOD cmac_pkey_meth; -extern const EVP_PKEY_METHOD dh_pkey_meth; -extern const EVP_PKEY_METHOD dhx_pkey_meth; -extern const EVP_PKEY_METHOD dsa_pkey_meth; -extern const EVP_PKEY_METHOD ec_pkey_meth; -extern const EVP_PKEY_METHOD sm2_pkey_meth; -extern const EVP_PKEY_METHOD ecx25519_pkey_meth; -extern const EVP_PKEY_METHOD ecx448_pkey_meth; -extern const EVP_PKEY_METHOD ed25519_pkey_meth; -extern const EVP_PKEY_METHOD ed448_pkey_meth; -extern const EVP_PKEY_METHOD hmac_pkey_meth; -extern const EVP_PKEY_METHOD rsa_pkey_meth; -extern const EVP_PKEY_METHOD rsa_pss_pkey_meth; -extern const EVP_PKEY_METHOD scrypt_pkey_meth; -extern const EVP_PKEY_METHOD tls1_prf_pkey_meth; -extern const EVP_PKEY_METHOD hkdf_pkey_meth; -extern const EVP_PKEY_METHOD poly1305_pkey_meth; -extern const EVP_PKEY_METHOD siphash_pkey_meth; +const EVP_PKEY_METHOD *ossl_dh_pkey_method(void); +const EVP_PKEY_METHOD *ossl_dhx_pkey_method(void); +const EVP_PKEY_METHOD *ossl_dsa_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ec_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ecx25519_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ecx448_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ed25519_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ed448_pkey_method(void); +const EVP_PKEY_METHOD *ossl_rsa_pkey_method(void); +const EVP_PKEY_METHOD *ossl_rsa_pss_pkey_method(void); + +struct evp_mac_st { + OSSL_PROVIDER *prov; + int name_id; + char *type_name; + const char *description; + + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + + OSSL_FUNC_mac_newctx_fn *newctx; + OSSL_FUNC_mac_dupctx_fn *dupctx; + OSSL_FUNC_mac_freectx_fn *freectx; + OSSL_FUNC_mac_init_fn *init; + OSSL_FUNC_mac_update_fn *update; + OSSL_FUNC_mac_final_fn *final; + OSSL_FUNC_mac_gettable_params_fn *gettable_params; + OSSL_FUNC_mac_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_mac_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_mac_get_params_fn *get_params; + OSSL_FUNC_mac_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_mac_set_ctx_params_fn *set_ctx_params; +}; + +struct evp_kdf_st { + OSSL_PROVIDER *prov; + int name_id; + char *type_name; + const char *description; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + + OSSL_FUNC_kdf_newctx_fn *newctx; + OSSL_FUNC_kdf_dupctx_fn *dupctx; + OSSL_FUNC_kdf_freectx_fn *freectx; + OSSL_FUNC_kdf_reset_fn *reset; + OSSL_FUNC_kdf_derive_fn *derive; + OSSL_FUNC_kdf_gettable_params_fn *gettable_params; + OSSL_FUNC_kdf_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_kdf_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_kdf_get_params_fn *get_params; + OSSL_FUNC_kdf_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_kdf_set_ctx_params_fn *set_ctx_params; +}; + +#define EVP_ORIG_DYNAMIC 0 +#define EVP_ORIG_GLOBAL 1 +#define EVP_ORIG_METH 2 struct evp_md_st { + /* nid */ int type; + + /* Legacy structure members */ int pkey_type; int md_size; unsigned long flags; + int origin; int (*init) (EVP_MD_CTX *ctx); int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); int (*final) (EVP_MD_CTX *ctx, unsigned char *md); @@ -126,16 +262,44 @@ struct evp_md_st { int ctx_size; /* how big does the ctx->md_data need to be */ /* control function */ int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, void *p2); + + /* New structure members */ + /* Above comment to be removed when legacy has gone */ + int name_id; + char *type_name; + const char *description; + OSSL_PROVIDER *prov; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + OSSL_FUNC_digest_newctx_fn *newctx; + OSSL_FUNC_digest_init_fn *dinit; + OSSL_FUNC_digest_update_fn *dupdate; + OSSL_FUNC_digest_final_fn *dfinal; + OSSL_FUNC_digest_digest_fn *digest; + OSSL_FUNC_digest_freectx_fn *freectx; + OSSL_FUNC_digest_dupctx_fn *dupctx; + OSSL_FUNC_digest_get_params_fn *get_params; + OSSL_FUNC_digest_set_ctx_params_fn *set_ctx_params; + OSSL_FUNC_digest_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_digest_gettable_params_fn *gettable_params; + OSSL_FUNC_digest_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_digest_gettable_ctx_params_fn *gettable_ctx_params; + } /* EVP_MD */ ; struct evp_cipher_st { int nid; + int block_size; /* Default value for variable length ciphers */ int key_len; int iv_len; + + /* Legacy structure members */ /* Various flags */ unsigned long flags; + /* How the EVP_CIPHER was created. */ + int origin; /* init key */ int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); @@ -154,6 +318,29 @@ struct evp_cipher_st { int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr); /* Application data */ void *app_data; + + /* New structure members */ + /* Above comment to be removed when legacy has gone */ + int name_id; + char *type_name; + const char *description; + OSSL_PROVIDER *prov; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + OSSL_FUNC_cipher_newctx_fn *newctx; + OSSL_FUNC_cipher_encrypt_init_fn *einit; + OSSL_FUNC_cipher_decrypt_init_fn *dinit; + OSSL_FUNC_cipher_update_fn *cupdate; + OSSL_FUNC_cipher_final_fn *cfinal; + OSSL_FUNC_cipher_cipher_fn *ccipher; + OSSL_FUNC_cipher_freectx_fn *freectx; + OSSL_FUNC_cipher_dupctx_fn *dupctx; + OSSL_FUNC_cipher_get_params_fn *get_params; + OSSL_FUNC_cipher_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_cipher_set_ctx_params_fn *set_ctx_params; + OSSL_FUNC_cipher_gettable_params_fn *gettable_params; + OSSL_FUNC_cipher_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_cipher_settable_ctx_params_fn *settable_ctx_params; } /* EVP_CIPHER */ ; /* Macros to code block cipher wrappers */ @@ -165,7 +352,7 @@ struct evp_cipher_st { #define BLOCK_CIPHER_ecb_loop() \ size_t i, bl; \ - bl = EVP_CIPHER_CTX_cipher(ctx)->block_size; \ + bl = EVP_CIPHER_CTX_get0_cipher(ctx)->block_size; \ if (inl < bl) return 1;\ inl -= bl; \ for (i=0; i <= inl; i+=bl) @@ -174,26 +361,26 @@ struct evp_cipher_st { static int cname##_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ {\ BLOCK_CIPHER_ecb_loop() \ - cprefix##_ecb_encrypt(in + i, out + i, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_encrypting(ctx)); \ + cprefix##_ecb_encrypt(in + i, out + i, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_is_encrypting(ctx)); \ return 1;\ } -#define EVP_MAXCHUNK ((size_t)1<<(sizeof(long)*8-2)) +#define EVP_MAXCHUNK ((size_t)1 << 30) #define BLOCK_CIPHER_func_ofb(cname, cprefix, cbits, kstruct, ksched) \ static int cname##_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ {\ while(inl>=EVP_MAXCHUNK) {\ - int num = EVP_CIPHER_CTX_num(ctx);\ - cprefix##_ofb##cbits##_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), &num); \ + int num = EVP_CIPHER_CTX_get_num(ctx);\ + cprefix##_ofb##cbits##_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, &num); \ EVP_CIPHER_CTX_set_num(ctx, num);\ inl-=EVP_MAXCHUNK;\ in +=EVP_MAXCHUNK;\ out+=EVP_MAXCHUNK;\ }\ if (inl) {\ - int num = EVP_CIPHER_CTX_num(ctx);\ - cprefix##_ofb##cbits##_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), &num); \ + int num = EVP_CIPHER_CTX_get_num(ctx);\ + cprefix##_ofb##cbits##_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, &num); \ EVP_CIPHER_CTX_set_num(ctx, num);\ }\ return 1;\ @@ -204,13 +391,13 @@ static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const uns {\ while(inl>=EVP_MAXCHUNK) \ {\ - cprefix##_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_encrypting(ctx));\ + cprefix##_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ inl-=EVP_MAXCHUNK;\ in +=EVP_MAXCHUNK;\ out+=EVP_MAXCHUNK;\ }\ if (inl)\ - cprefix##_cbc_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_encrypting(ctx));\ + cprefix##_cbc_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ return 1;\ } @@ -222,13 +409,13 @@ static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, if (inl < chunk) chunk = inl;\ while (inl && inl >= chunk)\ {\ - int num = EVP_CIPHER_CTX_num(ctx);\ + int num = EVP_CIPHER_CTX_get_num(ctx);\ cprefix##_cfb##cbits##_encrypt(in, out, (long) \ ((cbits == 1) \ && !EVP_CIPHER_CTX_test_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS) \ ? chunk*8 : chunk), \ - &EVP_C_DATA(kstruct, ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx),\ - &num, EVP_CIPHER_CTX_encrypting(ctx));\ + &EVP_C_DATA(kstruct, ctx)->ksched, ctx->iv,\ + &num, EVP_CIPHER_CTX_is_encrypting(ctx));\ EVP_CIPHER_CTX_set_num(ctx, num);\ inl -= chunk;\ in += chunk;\ @@ -250,6 +437,7 @@ static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, static const EVP_CIPHER cname##_##mode = { \ nid##_##nmode, block_size, key_len, iv_len, \ flags | EVP_CIPH_##MODE##_MODE, \ + EVP_ORIG_GLOBAL, \ init_key, \ cname##_##mode##_cipher, \ cleanup, \ @@ -305,6 +493,7 @@ BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, flags, \ static const EVP_CIPHER cname##_cbc = {\ nid##_cbc, block_size, key_len, iv_len, \ flags | EVP_CIPH_CBC_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_cbc_cipher,\ cleanup,\ @@ -318,6 +507,7 @@ const EVP_CIPHER *EVP_##cname##_cbc(void) { return &cname##_cbc; }\ static const EVP_CIPHER cname##_cfb = {\ nid##_cfb64, 1, key_len, iv_len, \ flags | EVP_CIPH_CFB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_cfb_cipher,\ cleanup,\ @@ -331,6 +521,7 @@ const EVP_CIPHER *EVP_##cname##_cfb(void) { return &cname##_cfb; }\ static const EVP_CIPHER cname##_ofb = {\ nid##_ofb64, 1, key_len, iv_len, \ flags | EVP_CIPH_OFB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_ofb_cipher,\ cleanup,\ @@ -344,6 +535,7 @@ const EVP_CIPHER *EVP_##cname##_ofb(void) { return &cname##_ofb; }\ static const EVP_CIPHER cname##_ecb = {\ nid##_ecb, block_size, key_len, iv_len, \ flags | EVP_CIPH_ECB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_ecb_cipher,\ cleanup,\ @@ -372,66 +564,293 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; } (fl)|EVP_CIPH_FLAG_DEFAULT_ASN1, \ cipher##_init_key, NULL, NULL, NULL, NULL) - -# ifndef OPENSSL_NO_EC - -#define X25519_KEYLEN 32 -#define X448_KEYLEN 56 -#define ED448_KEYLEN 57 - -#define MAX_KEYLEN ED448_KEYLEN - typedef struct { - unsigned char pubkey[MAX_KEYLEN]; - unsigned char *privkey; -} ECX_KEY; + unsigned char iv[EVP_MAX_IV_LENGTH]; + unsigned int iv_len; + unsigned int tag_len; +} evp_cipher_aead_asn1_params; -#endif +int evp_cipher_param_to_asn1_ex(EVP_CIPHER_CTX *c, ASN1_TYPE *type, + evp_cipher_aead_asn1_params *params); + +int evp_cipher_asn1_to_param_ex(EVP_CIPHER_CTX *c, ASN1_TYPE *type, + evp_cipher_aead_asn1_params *params); /* - * Type needs to be a bit field Sub-type needs to be for variations on the - * method, as in, can it do arbitrary encryption.... + * To support transparent execution of operation in backends other + * than the "origin" key, we support transparent export/import to + * those providers, and maintain a cache of the imported keydata, + * so we don't need to redo the export/import every time we perform + * the same operation in that same provider. + * This requires that the "origin" backend (whether it's a legacy or a + * provider "origin") implements exports, and that the target provider + * has an EVP_KEYMGMT that implements import. */ +typedef struct { + EVP_KEYMGMT *keymgmt; + void *keydata; + int selection; +} OP_CACHE_ELEM; + +DEFINE_STACK_OF(OP_CACHE_ELEM) + +/* + * An EVP_PKEY can have the following states: + * + * untyped & empty: + * + * type == EVP_PKEY_NONE && keymgmt == NULL + * + * typed & empty: + * + * (type != EVP_PKEY_NONE && pkey.ptr == NULL) ## legacy (libcrypto only) + * || (keymgmt != NULL && keydata == NULL) ## provider side + * + * fully assigned: + * + * (type != EVP_PKEY_NONE && pkey.ptr != NULL) ## legacy (libcrypto only) + * || (keymgmt != NULL && keydata != NULL) ## provider side + * + * The easiest way to detect a legacy key is: + * + * keymgmt == NULL && type != EVP_PKEY_NONE + * + * The easiest way to detect a provider side key is: + * + * keymgmt != NULL + */ +#define evp_pkey_is_blank(pk) \ + ((pk)->type == EVP_PKEY_NONE && (pk)->keymgmt == NULL) +#define evp_pkey_is_typed(pk) \ + ((pk)->type != EVP_PKEY_NONE || (pk)->keymgmt != NULL) +#ifndef FIPS_MODULE +# define evp_pkey_is_assigned(pk) \ + ((pk)->pkey.ptr != NULL || (pk)->keydata != NULL) +#else +# define evp_pkey_is_assigned(pk) \ + ((pk)->keydata != NULL) +#endif +#define evp_pkey_is_legacy(pk) \ + ((pk)->type != EVP_PKEY_NONE && (pk)->keymgmt == NULL) +#define evp_pkey_is_provided(pk) \ + ((pk)->keymgmt != NULL) + +union legacy_pkey_st { + void *ptr; + struct rsa_st *rsa; /* RSA */ +# ifndef OPENSSL_NO_DSA + struct dsa_st *dsa; /* DSA */ +# endif +# ifndef OPENSSL_NO_DH + struct dh_st *dh; /* DH */ +# endif +# ifndef OPENSSL_NO_EC + struct ec_key_st *ec; /* ECC */ + ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ +# endif +}; + struct evp_pkey_st { + /* == Legacy attributes == */ int type; int save_type; - CRYPTO_REF_COUNT references; + +# ifndef FIPS_MODULE + /* + * Legacy key "origin" is composed of a pointer to an EVP_PKEY_ASN1_METHOD, + * a pointer to a low level key and possibly a pointer to an engine. + */ const EVP_PKEY_ASN1_METHOD *ameth; ENGINE *engine; ENGINE *pmeth_engine; /* If not NULL public key ENGINE to use */ - union { - void *ptr; -# ifndef OPENSSL_NO_RSA - struct rsa_st *rsa; /* RSA */ + + /* Union to store the reference to an origin legacy key */ + union legacy_pkey_st pkey; + + /* Union to store the reference to a non-origin legacy key */ + union legacy_pkey_st legacy_cache_pkey; # endif -# ifndef OPENSSL_NO_DSA - struct dsa_st *dsa; /* DSA */ -# endif -# ifndef OPENSSL_NO_DH - struct dh_st *dh; /* DH */ -# endif -# ifndef OPENSSL_NO_EC - struct ec_key_st *ec; /* ECC */ - ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ -# endif - } pkey; - int save_parameters; - STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ + + /* == Common attributes == */ + CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; +#ifndef FIPS_MODULE + STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ + int save_parameters; + unsigned int foreign:1; /* the low-level key is using an engine or an app-method */ + CRYPTO_EX_DATA ex_data; +#endif + + /* == Provider attributes == */ + + /* + * Provider keydata "origin" is composed of a pointer to an EVP_KEYMGMT + * and a pointer to the provider side key data. This is never used at + * the same time as the legacy key data above. + */ + EVP_KEYMGMT *keymgmt; + void *keydata; + /* + * If any libcrypto code does anything that may modify the keydata + * contents, this dirty counter must be incremented. + */ + size_t dirty_cnt; + + /* + * To support transparent execution of operation in backends other + * than the "origin" key, we support transparent export/import to + * those providers, and maintain a cache of the imported keydata, + * so we don't need to redo the export/import every time we perform + * the same operation in that same provider. + */ + STACK_OF(OP_CACHE_ELEM) *operation_cache; + + /* + * We keep a copy of that "origin"'s dirty count, so we know if the + * operation cache needs flushing. + */ + size_t dirty_cnt_copy; + + /* Cache of key object information */ + struct { + int bits; + int security_bits; + int size; + } cache; } /* EVP_PKEY */ ; +#define EVP_PKEY_CTX_IS_SIGNATURE_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_SIGN \ + || (ctx)->operation == EVP_PKEY_OP_SIGNCTX \ + || (ctx)->operation == EVP_PKEY_OP_VERIFY \ + || (ctx)->operation == EVP_PKEY_OP_VERIFYCTX \ + || (ctx)->operation == EVP_PKEY_OP_VERIFYRECOVER) + +#define EVP_PKEY_CTX_IS_DERIVE_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_DERIVE) + +#define EVP_PKEY_CTX_IS_ASYM_CIPHER_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_ENCRYPT \ + || (ctx)->operation == EVP_PKEY_OP_DECRYPT) + +#define EVP_PKEY_CTX_IS_GEN_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_PARAMGEN \ + || (ctx)->operation == EVP_PKEY_OP_KEYGEN) + +#define EVP_PKEY_CTX_IS_FROMDATA_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_FROMDATA) + +#define EVP_PKEY_CTX_IS_KEM_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_ENCAPSULATE \ + || (ctx)->operation == EVP_PKEY_OP_DECAPSULATE) void openssl_add_all_ciphers_int(void); void openssl_add_all_digests_int(void); void evp_cleanup_int(void); void evp_app_cleanup_int(void); +void *evp_pkey_export_to_provider(EVP_PKEY *pk, OSSL_LIB_CTX *libctx, + EVP_KEYMGMT **keymgmt, + const char *propquery); +#ifndef FIPS_MODULE +int evp_pkey_copy_downgraded(EVP_PKEY **dest, const EVP_PKEY *src); +void *evp_pkey_get_legacy(EVP_PKEY *pk); +void evp_pkey_free_legacy(EVP_PKEY *x); +EVP_PKEY *evp_pkcs82pkey_legacy(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); +#endif + +/* + * KEYMGMT utility functions + */ + +/* + * Key import structure and helper function, to be used as an export callback + */ +struct evp_keymgmt_util_try_import_data_st { + EVP_KEYMGMT *keymgmt; + void *keydata; + + int selection; +}; +int evp_keymgmt_util_try_import(const OSSL_PARAM params[], void *arg); +int evp_keymgmt_util_assign_pkey(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt, + void *keydata); +EVP_PKEY *evp_keymgmt_util_make_pkey(EVP_KEYMGMT *keymgmt, void *keydata); + +int evp_keymgmt_util_export(const EVP_PKEY *pk, int selection, + OSSL_CALLBACK *export_cb, void *export_cbarg); +void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, + int selection); +OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk, + EVP_KEYMGMT *keymgmt, + int selection); +int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk, int locking); +int evp_keymgmt_util_cache_keydata(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, + void *keydata, int selection); +void evp_keymgmt_util_cache_keyinfo(EVP_PKEY *pk); +void *evp_keymgmt_util_fromdata(EVP_PKEY *target, EVP_KEYMGMT *keymgmt, + int selection, const OSSL_PARAM params[]); +int evp_keymgmt_util_has(EVP_PKEY *pk, int selection); +int evp_keymgmt_util_match(EVP_PKEY *pk1, EVP_PKEY *pk2, int selection); +int evp_keymgmt_util_copy(EVP_PKEY *to, EVP_PKEY *from, int selection); +void *evp_keymgmt_util_gen(EVP_PKEY *target, EVP_KEYMGMT *keymgmt, + void *genctx, OSSL_CALLBACK *cb, void *cbarg); +int evp_keymgmt_util_get_deflt_digest_name(EVP_KEYMGMT *keymgmt, + void *keydata, + char *mdname, size_t mdname_sz); +const char *evp_keymgmt_util_query_operation_name(EVP_KEYMGMT *keymgmt, + int op_id); + +/* + * KEYMGMT provider interface functions + */ +void *evp_keymgmt_newdata(const EVP_KEYMGMT *keymgmt); +void evp_keymgmt_freedata(const EVP_KEYMGMT *keymgmt, void *keyddata); +int evp_keymgmt_get_params(const EVP_KEYMGMT *keymgmt, + void *keydata, OSSL_PARAM params[]); +int evp_keymgmt_set_params(const EVP_KEYMGMT *keymgmt, + void *keydata, const OSSL_PARAM params[]); +void *evp_keymgmt_gen_init(const EVP_KEYMGMT *keymgmt, int selection, + const OSSL_PARAM params[]); +int evp_keymgmt_gen_set_template(const EVP_KEYMGMT *keymgmt, void *genctx, + void *template); +int evp_keymgmt_gen_set_params(const EVP_KEYMGMT *keymgmt, void *genctx, + const OSSL_PARAM params[]); +void *evp_keymgmt_gen(const EVP_KEYMGMT *keymgmt, void *genctx, + OSSL_CALLBACK *cb, void *cbarg); +void evp_keymgmt_gen_cleanup(const EVP_KEYMGMT *keymgmt, void *genctx); + +int evp_keymgmt_has_load(const EVP_KEYMGMT *keymgmt); +void *evp_keymgmt_load(const EVP_KEYMGMT *keymgmt, + const void *objref, size_t objref_sz); + +int evp_keymgmt_has(const EVP_KEYMGMT *keymgmt, void *keyddata, int selection); +int evp_keymgmt_validate(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, int checktype); +int evp_keymgmt_match(const EVP_KEYMGMT *keymgmt, + const void *keydata1, const void *keydata2, + int selection); + +int evp_keymgmt_import(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, const OSSL_PARAM params[]); +const OSSL_PARAM *evp_keymgmt_import_types(const EVP_KEYMGMT *keymgmt, + int selection); +int evp_keymgmt_export(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, OSSL_CALLBACK *param_cb, void *cbarg); +const OSSL_PARAM *evp_keymgmt_export_types(const EVP_KEYMGMT *keymgmt, + int selection); +void *evp_keymgmt_dup(const EVP_KEYMGMT *keymgmt, + const void *keydata_from, int selection); +EVP_KEYMGMT *evp_keymgmt_fetch_from_prov(OSSL_PROVIDER *prov, + const char *name, + const char *properties); /* Pulling defines out of C source files */ -#define EVP_RC4_KEY_SIZE 16 -#ifndef TLS1_1_VERSION -# define TLS1_1_VERSION 0x0302 -#endif +# define EVP_RC4_KEY_SIZE 16 +# ifndef TLS1_1_VERSION +# define TLS1_1_VERSION 0x0302 +# endif void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags); @@ -440,3 +859,96 @@ void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags); #define EVP_ENCODE_CTX_NO_NEWLINES 1 /* Use the SRP base64 alphabet instead of the standard one */ #define EVP_ENCODE_CTX_USE_SRP_ALPHABET 2 + +const EVP_CIPHER *evp_get_cipherbyname_ex(OSSL_LIB_CTX *libctx, + const char *name); +const EVP_MD *evp_get_digestbyname_ex(OSSL_LIB_CTX *libctx, + const char *name); + +int ossl_pkcs5_pbkdf2_hmac_ex(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + const EVP_MD *digest, int keylen, + unsigned char *out, + OSSL_LIB_CTX *libctx, const char *propq); + +# ifndef FIPS_MODULE +/* + * Internal helpers for stricter EVP_PKEY_CTX_{set,get}_params(). + * + * Return 1 on success, 0 or negative for errors. + * + * In particular they return -2 if any of the params is not supported. + * + * They are not available in FIPS_MODULE as they depend on + * - EVP_PKEY_CTX_{get,set}_params() + * - EVP_PKEY_CTX_{gettable,settable}_params() + * + */ +int evp_pkey_ctx_set_params_strict(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); +int evp_pkey_ctx_get_params_strict(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); + +EVP_MD_CTX *evp_md_ctx_new_ex(EVP_PKEY *pkey, const ASN1_OCTET_STRING *id, + OSSL_LIB_CTX *libctx, const char *propq); +int evp_pkey_name2type(const char *name); +const char *evp_pkey_type2name(int type); + +int evp_pkey_ctx_set1_id_prov(EVP_PKEY_CTX *ctx, const void *id, int len); +int evp_pkey_ctx_get1_id_prov(EVP_PKEY_CTX *ctx, void *id); +int evp_pkey_ctx_get1_id_len_prov(EVP_PKEY_CTX *ctx, size_t *id_len); + +int evp_pkey_ctx_use_cached_data(EVP_PKEY_CTX *ctx); +# endif /* !defined(FIPS_MODULE) */ + +int evp_method_store_cache_flush(OSSL_LIB_CTX *libctx); +int evp_method_store_remove_all_provided(const OSSL_PROVIDER *prov); + +int evp_default_properties_enable_fips_int(OSSL_LIB_CTX *libctx, int enable, + int loadconfig); +int evp_set_default_properties_int(OSSL_LIB_CTX *libctx, const char *propq, + int loadconfig, int mirrored); +char *evp_get_global_properties_str(OSSL_LIB_CTX *libctx, int loadconfig); + +void evp_md_ctx_clear_digest(EVP_MD_CTX *ctx, int force, int keep_digest); +/* just free the algctx if set, returns 0 on inconsistent state of ctx */ +int evp_md_ctx_free_algctx(EVP_MD_CTX *ctx); + +/* Three possible states: */ +# define EVP_PKEY_STATE_UNKNOWN 0 +# define EVP_PKEY_STATE_LEGACY 1 +# define EVP_PKEY_STATE_PROVIDER 2 +int evp_pkey_ctx_state(const EVP_PKEY_CTX *ctx); + +/* These two must ONLY be called for provider side operations */ +int evp_pkey_ctx_ctrl_to_param(EVP_PKEY_CTX *ctx, + int keytype, int optype, + int cmd, int p1, void *p2); +int evp_pkey_ctx_ctrl_str_to_param(EVP_PKEY_CTX *ctx, + const char *name, const char *value); + +/* These two must ONLY be called for legacy operations */ +int evp_pkey_ctx_set_params_to_ctrl(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params); +int evp_pkey_ctx_get_params_to_ctrl(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); + +/* This must ONLY be called for legacy EVP_PKEYs */ +int evp_pkey_get_params_to_ctrl(const EVP_PKEY *pkey, OSSL_PARAM *params); + +/* Same as the public get0 functions but are not const */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DH *evp_pkey_get0_DH_int(const EVP_PKEY *pkey); +EC_KEY *evp_pkey_get0_EC_KEY_int(const EVP_PKEY *pkey); +RSA *evp_pkey_get0_RSA_int(const EVP_PKEY *pkey); +# endif + +/* Get internal identification number routines */ +int evp_asym_cipher_get_number(const EVP_ASYM_CIPHER *cipher); +int evp_cipher_get_number(const EVP_CIPHER *cipher); +int evp_kdf_get_number(const EVP_KDF *kdf); +int evp_kem_get_number(const EVP_KEM *wrap); +int evp_keyexch_get_number(const EVP_KEYEXCH *keyexch); +int evp_keymgmt_get_number(const EVP_KEYMGMT *keymgmt); +int evp_mac_get_number(const EVP_MAC *mac); +int evp_md_get_number(const EVP_MD *md); +int evp_rand_get_number(const EVP_RAND *rand); +int evp_signature_get_number(const EVP_SIGNATURE *signature); + +#endif /* OSSL_CRYPTO_EVP_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evperr.h new file mode 100644 index 00000000..d90ba83f --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evperr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_EVPERR_H +# define OSSL_CRYPTO_EVPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_EVP_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/httperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/httperr.h new file mode 100644 index 00000000..969df17b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/httperr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_HTTPERR_H +# define OSSL_CRYPTO_HTTPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_HTTP_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/lhash.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/lhash.h index ab060cce..0f64869f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/lhash.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/lhash.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,7 +9,8 @@ #ifndef OSSL_CRYPTO_LHASH_H # define OSSL_CRYPTO_LHASH_H +# pragma once -unsigned long openssl_lh_strcasehash(const char *); +unsigned long ossl_lh_strcasehash(const char *); -#endif +#endif /* OSSL_CRYPTO_LHASH_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/md32_common.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/md32_common.h index 1124e9c2..966e2684 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/md32_common.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/md32_common.h @@ -1,7 +1,7 @@ /* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -95,6 +95,28 @@ #define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n)))) +#ifndef PEDANTIC +# if defined(__GNUC__) && __GNUC__>=2 && \ + !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) +# if defined(__riscv_zbb) || defined(__riscv_zbkb) +# if __riscv_xlen == 64 +# undef ROTATE +# define ROTATE(x, n) ({ MD32_REG_T ret; \ + asm ("roriw %0, %1, %2" \ + : "=r"(ret) \ + : "r"(x), "i"(32 - (n))); ret;}) +# endif +# if __riscv_xlen == 32 +# undef ROTATE +# define ROTATE(x, n) ({ MD32_REG_T ret; \ + asm ("rori %0, %1, %2" \ + : "=r"(ret) \ + : "r"(x), "i"(32 - (n))); ret;}) +# endif +# endif +# endif +#endif + #if defined(DATA_ORDER_IS_BIG_ENDIAN) # define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/modes.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/modes.h new file mode 100644 index 00000000..573e1197 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/modes.h @@ -0,0 +1,224 @@ +/* + * Copyright 2010-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* This header can move into provider when legacy support is removed */ +#include + +#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +typedef __int64 i64; +typedef unsigned __int64 u64; +# define U64(C) C##UI64 +#elif defined(__arch64__) +typedef long i64; +typedef unsigned long u64; +# define U64(C) C##UL +#else +typedef long long i64; +typedef unsigned long long u64; +# define U64(C) C##ULL +#endif + +typedef unsigned int u32; +typedef unsigned char u8; + +#define STRICT_ALIGNMENT 1 +#ifndef PEDANTIC +# if defined(__i386) || defined(__i386__) || \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \ + defined(__aarch64__) || \ + defined(__s390__) || defined(__s390x__) +# undef STRICT_ALIGNMENT +# endif +#endif + +#if !defined(PEDANTIC) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) +# if defined(__GNUC__) && __GNUC__>=2 +# if defined(__x86_64) || defined(__x86_64__) +# define BSWAP8(x) ({ u64 ret_=(x); \ + asm ("bswapq %0" \ + : "+r"(ret_)); ret_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("bswapl %0" \ + : "+r"(ret_)); ret_; }) +# elif (defined(__i386) || defined(__i386__)) && !defined(I386_ONLY) +# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \ + asm ("bswapl %0; bswapl %1" \ + : "+r"(hi_),"+r"(lo_)); \ + (u64)hi_<<32|lo_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("bswapl %0" \ + : "+r"(ret_)); ret_; }) +# elif defined(__aarch64__) +# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \ + __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ +# define BSWAP8(x) ({ u64 ret_; \ + asm ("rev %0,%1" \ + : "=r"(ret_) : "r"(x)); ret_; }) +# define BSWAP4(x) ({ u32 ret_; \ + asm ("rev %w0,%w1" \ + : "=r"(ret_) : "r"(x)); ret_; }) +# endif +# elif (defined(__arm__) || defined(__arm)) && !defined(STRICT_ALIGNMENT) +# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \ + asm ("rev %0,%0; rev %1,%1" \ + : "+r"(hi_),"+r"(lo_)); \ + (u64)hi_<<32|lo_; }) +# define BSWAP4(x) ({ u32 ret_; \ + asm ("rev %0,%1" \ + : "=r"(ret_) : "r"((u32)(x))); \ + ret_; }) +# elif (defined(__riscv_zbb) || defined(__riscv_zbkb)) && __riscv_xlen == 64 +# define BSWAP8(x) ({ u64 ret_=(x); \ + asm ("rev8 %0,%0" \ + : "+r"(ret_)); ret_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("rev8 %0,%0; srli %0,%0,32"\ + : "+&r"(ret_)); ret_; }) +# endif +# elif defined(_MSC_VER) +# if _MSC_VER>=1300 +# include +# pragma intrinsic(_byteswap_uint64,_byteswap_ulong) +# define BSWAP8(x) _byteswap_uint64((u64)(x)) +# define BSWAP4(x) _byteswap_ulong((u32)(x)) +# elif defined(_M_IX86) +__inline u32 _bswap4(u32 val) +{ +_asm mov eax, val _asm bswap eax} +# define BSWAP4(x) _bswap4(x) +# endif +# endif +#endif +#if defined(BSWAP4) && !defined(STRICT_ALIGNMENT) +# define GETU32(p) BSWAP4(*(const u32 *)(p)) +# define PUTU32(p,v) *(u32 *)(p) = BSWAP4(v) +#else +# define GETU32(p) ((u32)(p)[0]<<24|(u32)(p)[1]<<16|(u32)(p)[2]<<8|(u32)(p)[3]) +# define PUTU32(p,v) ((p)[0]=(u8)((v)>>24),(p)[1]=(u8)((v)>>16),(p)[2]=(u8)((v)>>8),(p)[3]=(u8)(v)) +#endif +/*- GCM definitions */ typedef struct { + u64 hi, lo; +} u128; + +typedef void (*gcm_init_fn)(u128 Htable[16], const u64 H[2]); +typedef void (*gcm_ghash_fn)(u64 Xi[2], const u128 Htable[16], const u8 *inp, size_t len); +typedef void (*gcm_gmult_fn)(u64 Xi[2], const u128 Htable[16]); +struct gcm_funcs_st { + gcm_init_fn ginit; + gcm_ghash_fn ghash; + gcm_gmult_fn gmult; +}; + +struct gcm128_context { + /* Following 6 names follow names in GCM specification */ + union { + u64 u[2]; + u32 d[4]; + u8 c[16]; + size_t t[16 / sizeof(size_t)]; + } Yi, EKi, EK0, len, Xi, H; + /* + * Relative position of Yi, EKi, EK0, len, Xi, H and pre-computed Htable is + * used in some assembler modules, i.e. don't change the order! + */ + u128 Htable[16]; + struct gcm_funcs_st funcs; + unsigned int mres, ares; + block128_f block; + void *key; +#if !defined(OPENSSL_SMALL_FOOTPRINT) + unsigned char Xn[48]; +#endif +}; + +/* + * The maximum permitted number of cipher blocks per data unit in XTS mode. + * Reference IEEE Std 1619-2018. + */ +#define XTS_MAX_BLOCKS_PER_DATA_UNIT (1<<20) + +struct xts128_context { + void *key1, *key2; + block128_f block1, block2; +}; + +struct ccm128_context { + union { + u64 u[2]; + u8 c[16]; + } nonce, cmac; + u64 blocks; + block128_f block; + void *key; +}; + +#ifndef OPENSSL_NO_OCB + +typedef union { + u64 a[2]; + unsigned char c[16]; +} OCB_BLOCK; +# define ocb_block16_xor(in1,in2,out) \ + ( (out)->a[0]=(in1)->a[0]^(in2)->a[0], \ + (out)->a[1]=(in1)->a[1]^(in2)->a[1] ) +# if STRICT_ALIGNMENT +# define ocb_block16_xor_misaligned(in1,in2,out) \ + ocb_block_xor((in1)->c,(in2)->c,16,(out)->c) +# else +# define ocb_block16_xor_misaligned ocb_block16_xor +# endif + +struct ocb128_context { + /* Need both encrypt and decrypt key schedules for decryption */ + block128_f encrypt; + block128_f decrypt; + void *keyenc; + void *keydec; + ocb128_f stream; /* direction dependent */ + /* Key dependent variables. Can be reused if key remains the same */ + size_t l_index; + size_t max_l_index; + OCB_BLOCK l_star; + OCB_BLOCK l_dollar; + OCB_BLOCK *l; + /* Must be reset for each session */ + struct { + u64 blocks_hashed; + u64 blocks_processed; + OCB_BLOCK offset_aad; + OCB_BLOCK sum; + OCB_BLOCK offset; + OCB_BLOCK checksum; + } sess; +}; +#endif /* OPENSSL_NO_OCB */ + +#ifndef OPENSSL_NO_SIV + +#define SIV_LEN 16 + +typedef union siv_block_u { + uint64_t word[SIV_LEN/sizeof(uint64_t)]; + unsigned char byte[SIV_LEN]; +} SIV_BLOCK; + +struct siv128_context { + /* d stores intermediate results of S2V; it corresponds to D from the + pseudocode in section 2.4 of RFC 5297. */ + SIV_BLOCK d; + SIV_BLOCK tag; + EVP_CIPHER_CTX *cipher_ctx; + EVP_MAC *mac; + EVP_MAC_CTX *mac_ctx_init; + int final_ret; + int crypto_ok; +}; + +#endif /* OPENSSL_NO_SIV */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objects.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objects.h index 76e1b4d9..f22e9287 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objects.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objects.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,4 +9,4 @@ #include -void obj_cleanup_int(void); +void ossl_obj_cleanup_int(void); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objectserr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objectserr.h new file mode 100644 index 00000000..ec994824 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objectserr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_OBJECTSERR_H +# define OSSL_CRYPTO_OBJECTSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OBJ_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ocsperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ocsperr.h new file mode 100644 index 00000000..f9529b2a --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ocsperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_OCSPERR_H +# define OSSL_CRYPTO_OCSPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_OCSP + +int ossl_err_load_OCSP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pem.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pem.h new file mode 100644 index 00000000..2cb4253d --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pem.h @@ -0,0 +1,51 @@ +/* + * Copyright 2018-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PEM_H +# define OSSL_INTERNAL_PEM_H +# pragma once + +# include +# include "crypto/types.h" + +/* Found in crypto/pem/pvkfmt.c */ + +/* Maximum length of a blob after header */ +# define BLOB_MAX_LENGTH 102400 + +int ossl_do_blob_header(const unsigned char **in, unsigned int length, + unsigned int *pmagic, unsigned int *pbitlen, + int *pisdss, int *pispub); +unsigned int ossl_blob_length(unsigned bitlen, int isdss, int ispub); +int ossl_do_PVK_header(const unsigned char **in, unsigned int length, + int skip_magic, + unsigned int *psaltlen, unsigned int *pkeylen); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DSA *ossl_b2i_DSA_after_header(const unsigned char **in, unsigned int bitlen, + int ispub); +# endif +RSA *ossl_b2i_RSA_after_header(const unsigned char **in, unsigned int bitlen, + int ispub); +# endif +EVP_PKEY *ossl_b2i(const unsigned char **in, unsigned int length, int *ispub); +EVP_PKEY *ossl_b2i_bio(BIO *in, int *ispub); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DSA *b2i_DSA_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +DSA *b2i_DSA_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +# endif +RSA *b2i_RSA_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +RSA *b2i_RSA_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pemerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pemerr.h new file mode 100644 index 00000000..b255ff5c --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pemerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PEMERR_H +# define OSSL_CRYPTO_PEMERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PEM_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs12err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs12err.h new file mode 100644 index 00000000..662f412e --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs12err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS12ERR_H +# define OSSL_CRYPTO_PKCS12ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PKCS12_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7.h new file mode 100644 index 00000000..9caa9af4 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7.h @@ -0,0 +1,19 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS7_H +# define OSSL_CRYPTO_PKCS7_H +# pragma once + +void ossl_pkcs7_resolve_libctx(PKCS7 *p7); + +void ossl_pkcs7_set0_libctx(PKCS7 *p7, OSSL_LIB_CTX *ctx); +int ossl_pkcs7_set1_propq(PKCS7 *p7, const char *propq); + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7err.h new file mode 100644 index 00000000..c195190b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS7ERR_H +# define OSSL_CRYPTO_PKCS7ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PKCS7_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/poly1305.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/poly1305.h index 5fef239d..ba54f3bd 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/poly1305.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/poly1305.h @@ -1,12 +1,16 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OSSL_CRYPTO_POLY1305_H +# define OSSL_CRYPTO_POLY1305_H +# pragma once + #include #define POLY1305_BLOCK_SIZE 16 @@ -15,7 +19,28 @@ typedef struct poly1305_context POLY1305; +typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp, + size_t len, unsigned int padbit); +typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16], + const unsigned int nonce[4]); + +struct poly1305_context { + double opaque[24]; /* large enough to hold internal state, declared + * 'double' to ensure at least 64-bit invariant + * alignment across all platforms and + * configurations */ + unsigned int nonce[4]; + unsigned char data[POLY1305_BLOCK_SIZE]; + size_t num; + struct { + poly1305_blocks_f blocks; + poly1305_emit_f emit; + } func; +}; + size_t Poly1305_ctx_size(void); void Poly1305_Init(POLY1305 *ctx, const unsigned char key[32]); void Poly1305_Update(POLY1305 *ctx, const unsigned char *inp, size_t len); void Poly1305_Final(POLY1305 *ctx, unsigned char mac[16]); + +#endif /* OSSL_CRYPTO_POLY1305_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ppc_arch.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ppc_arch.h new file mode 100644 index 00000000..d999396a --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ppc_arch.h @@ -0,0 +1,29 @@ +/* + * Copyright 2014-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PPC_ARCH_H +# define OSSL_CRYPTO_PPC_ARCH_H + +extern unsigned int OPENSSL_ppccap_P; + +/* + * Flags' usage can appear ambiguous, because they are set rather + * to reflect OpenSSL performance preferences than actual processor + * capabilities. + */ +# define PPC_FPU64 (1<<0) +# define PPC_ALTIVEC (1<<1) +# define PPC_CRYPTO207 (1<<2) +# define PPC_FPU (1<<3) +# define PPC_MADD300 (1<<4) +# define PPC_MFTB (1<<5) +# define PPC_MFSPR268 (1<<6) +# define PPC_BRD31 (1<<7) + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/punycode.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/punycode.h new file mode 100644 index 00000000..4c6e49f5 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/punycode.h @@ -0,0 +1,27 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PUNYCODE_H +# define OSSL_CRYPTO_PUNYCODE_H +# pragma once + +# include /* for size_t */ + +int ossl_punycode_decode ( + const char *pEncoded, + const size_t enc_len, + unsigned int *pDecoded, + unsigned int *pout_length +); + +int ossl_a2ulabel(const char *in, char *out, size_t outlen); + +int ossl_a2ucompare(const char *a, const char *u); + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand.h index 9e02bb0e..6a71a339 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand.h @@ -1,14 +1,14 @@ /* - * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ /* - * Licensed under the OpenSSL licenses, (the "License"); + * Licensed under the Apache License 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * https://www.openssl.org/source/license.html @@ -17,8 +17,10 @@ #ifndef OSSL_CRYPTO_RAND_H # define OSSL_CRYPTO_RAND_H +# pragma once # include +# include "crypto/rand_pool.h" # if defined(__APPLE__) && !defined(OPENSSL_NO_APPLE_CRYPTO_RANDOM) # include @@ -30,115 +32,97 @@ # endif # endif -/* forward declaration */ -typedef struct rand_pool_st RAND_POOL; - -void rand_cleanup_int(void); -void rand_drbg_cleanup_int(void); -void drbg_delete_thread_state(void); - -/* Hardware-based seeding functions. */ -size_t rand_acquire_entropy_from_tsc(RAND_POOL *pool); -size_t rand_acquire_entropy_from_cpu(RAND_POOL *pool); - -/* DRBG entropy callbacks. */ -size_t rand_drbg_get_entropy(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, size_t max_len, - int prediction_resistance); -void rand_drbg_cleanup_entropy(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); -size_t rand_drbg_get_nonce(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, size_t max_len); -void rand_drbg_cleanup_nonce(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); - -size_t rand_drbg_get_additional_data(RAND_POOL *pool, unsigned char **pout); - -void rand_drbg_cleanup_additional_data(RAND_POOL *pool, unsigned char *out); - /* - * RAND_POOL functions + * Defines related to seed sources */ -RAND_POOL *rand_pool_new(int entropy_requested, int secure, - size_t min_len, size_t max_len); -RAND_POOL *rand_pool_attach(const unsigned char *buffer, size_t len, - size_t entropy); -void rand_pool_free(RAND_POOL *pool); - -const unsigned char *rand_pool_buffer(RAND_POOL *pool); -unsigned char *rand_pool_detach(RAND_POOL *pool); -void rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer); - -size_t rand_pool_entropy(RAND_POOL *pool); -size_t rand_pool_length(RAND_POOL *pool); - -size_t rand_pool_entropy_available(RAND_POOL *pool); -size_t rand_pool_entropy_needed(RAND_POOL *pool); -/* |entropy_factor| expresses how many bits of data contain 1 bit of entropy */ -size_t rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor); -size_t rand_pool_bytes_remaining(RAND_POOL *pool); - -int rand_pool_add(RAND_POOL *pool, - const unsigned char *buffer, size_t len, size_t entropy); -unsigned char *rand_pool_add_begin(RAND_POOL *pool, size_t len); -int rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy); - - +#ifndef DEVRANDOM /* - * Add random bytes to the pool to acquire requested amount of entropy - * - * This function is platform specific and tries to acquire the requested - * amount of entropy by polling platform specific entropy sources. - * - * If the function succeeds in acquiring at least |entropy_requested| bits - * of entropy, the total entropy count is returned. If it fails, it returns - * an entropy count of 0. + * set this to a comma-separated list of 'random' device files to try out. By + * default, we will try to read at least one of these files */ -size_t rand_pool_acquire_entropy(RAND_POOL *pool); - +# define DEVRANDOM "/dev/urandom", "/dev/random", "/dev/hwrng", "/dev/srandom" +# if defined(__linux) && !defined(__ANDROID__) +# ifndef DEVRANDOM_WAIT +# define DEVRANDOM_WAIT "/dev/random" +# endif /* - * Add some application specific nonce data - * - * This function is platform specific and adds some application specific - * data to the nonce used for instantiating the drbg. - * - * This data currently consists of the process and thread id, and a high - * resolution timestamp. The data does not include an atomic counter, - * because that is added by the calling function rand_drbg_get_nonce(). - * - * Returns 1 on success and 0 on failure. + * Linux kernels 4.8 and later changes how their random device works and there + * is no reliable way to tell that /dev/urandom has been seeded -- getentropy(2) + * should be used instead. */ -int rand_pool_add_nonce_data(RAND_POOL *pool); - - +# ifndef DEVRANDOM_SAFE_KERNEL +# define DEVRANDOM_SAFE_KERNEL 4, 8 +# endif /* - * Add some platform specific additional data - * - * This function is platform specific and adds some random noise to the - * additional data used for generating random bytes and for reseeding - * the drbg. - * - * Returns 1 on success and 0 on failure. + * Some operating systems do not permit select(2) on their random devices, + * defining this to zero will force the use of read(2) to extract one byte + * from /dev/random. */ -int rand_pool_add_additional_data(RAND_POOL *pool); +# ifndef DEVRANDM_WAIT_USE_SELECT +# define DEVRANDM_WAIT_USE_SELECT 1 +# endif +/* + * Define the shared memory identifier used to indicate if the operating + * system has properly seeded the DEVRANDOM source. + */ +# ifndef OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID +# define OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID 114 +# endif + +# endif +#endif + +#if !defined(OPENSSL_NO_EGD) && !defined(DEVRANDOM_EGD) +/* + * set this to a comma-separated list of 'egd' sockets to try out. These + * sockets will be tried in the order listed in case accessing the device + * files listed in DEVRANDOM did not return enough randomness. + */ +# define DEVRANDOM_EGD "/var/run/egd-pool", "/dev/egd-pool", "/etc/egd-pool", "/etc/entropy" +#endif + +void ossl_rand_cleanup_int(void); /* * Initialise the random pool reseeding sources. * * Returns 1 on success and 0 on failure. */ -int rand_pool_init(void); +int ossl_rand_pool_init(void); /* * Finalise the random pool reseeding sources. */ -void rand_pool_cleanup(void); +void ossl_rand_pool_cleanup(void); /* * Control the random pool use of open file descriptors. */ -void rand_pool_keep_random_devices_open(int keep); +void ossl_rand_pool_keep_random_devices_open(int keep); + +/* + * Configuration + */ +void ossl_random_add_conf_module(void); + +/* + * Get and cleanup random seed material. + */ +size_t ossl_rand_get_entropy(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char **pout, int entropy, + size_t min_len, size_t max_len); +void ossl_rand_cleanup_entropy(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len); +size_t ossl_rand_get_nonce(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char **pout, size_t min_len, size_t max_len, + const void *salt, size_t salt_len); +void ossl_rand_cleanup_nonce(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len); + +/* + * Get seeding material from the operating system sources. + */ +size_t ossl_pool_acquire_entropy(RAND_POOL *pool); +int ossl_pool_add_nonce_data(RAND_POOL *pool); #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand_pool.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand_pool.h new file mode 100644 index 00000000..f4d1d954 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand_pool.h @@ -0,0 +1,109 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_PROVIDER_RAND_POOL_H +# define OSSL_PROVIDER_RAND_POOL_H +# pragma once + +# include +# include + +/* + * Maximum allocation size for RANDOM_POOL buffers + * + * The max_len value for the buffer provided to the rand_drbg_get_entropy() + * callback is currently 2^31 bytes (2 gigabytes), if a derivation function + * is used. Since this is much too large to be allocated, the ossl_rand_pool_new() + * function chooses more modest values as default pool length, bounded + * by RAND_POOL_MIN_LENGTH and RAND_POOL_MAX_LENGTH + * + * The choice of the RAND_POOL_FACTOR is large enough such that the + * RAND_POOL can store a random input which has a lousy entropy rate of + * 8/256 (= 0.03125) bits per byte. This input will be sent through the + * derivation function which 'compresses' the low quality input into a + * high quality output. + * + * The factor 1.5 below is the pessimistic estimate for the extra amount + * of entropy required when no get_nonce() callback is defined. + */ +# define RAND_POOL_FACTOR 256 +# define RAND_POOL_MAX_LENGTH (RAND_POOL_FACTOR * \ + 3 * (RAND_DRBG_STRENGTH / 16)) +/* + * = (RAND_POOL_FACTOR * \ + * 1.5 * (RAND_DRBG_STRENGTH / 8)) + */ + +/* + * Initial allocation minimum. + * + * There is a distinction between the secure and normal allocation minimums. + * Ideally, the secure allocation size should be a power of two. The normal + * allocation size doesn't have any such restriction. + * + * The secure value is based on 128 bits of secure material, which is 16 bytes. + * Typically, the DRBGs will set a minimum larger than this so optimal + * allocation ought to take place (for full quality seed material). + * + * The normal value has been chosen by noticing that the rand_drbg_get_nonce + * function is usually the largest of the built in allocation (twenty four + * bytes and then appending another sixteen bytes). This means the buffer ends + * with 40 bytes. The value of forty eight is comfortably above this which + * allows some slack in the platform specific values used. + */ +# define RAND_POOL_MIN_ALLOCATION(secure) ((secure) ? 16 : 48) + +/* + * The 'random pool' acts as a dumb container for collecting random + * input from various entropy sources. It is the callers duty to 1) initialize + * the random pool, 2) pass it to the polling callbacks, 3) seed the RNG, and + * 4) cleanup the random pool again. + * + * The random pool contains no locking mechanism because its scope and + * lifetime is intended to be restricted to a single stack frame. + */ +typedef struct rand_pool_st { + unsigned char *buffer; /* points to the beginning of the random pool */ + size_t len; /* current number of random bytes contained in the pool */ + + int attached; /* true pool was attached to existing buffer */ + int secure; /* 1: allocated on the secure heap, 0: otherwise */ + + size_t min_len; /* minimum number of random bytes requested */ + size_t max_len; /* maximum number of random bytes (allocated buffer size) */ + size_t alloc_len; /* current number of bytes allocated */ + size_t entropy; /* current entropy count in bits */ + size_t entropy_requested; /* requested entropy count in bits */ +} RAND_POOL; + +RAND_POOL *ossl_rand_pool_new(int entropy_requested, int secure, + size_t min_len, size_t max_len); +RAND_POOL *ossl_rand_pool_attach(const unsigned char *buffer, size_t len, + size_t entropy); +void ossl_rand_pool_free(RAND_POOL *pool); + +const unsigned char *ossl_rand_pool_buffer(RAND_POOL *pool); +unsigned char *ossl_rand_pool_detach(RAND_POOL *pool); +void ossl_rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer); + +size_t ossl_rand_pool_entropy(RAND_POOL *pool); +size_t ossl_rand_pool_length(RAND_POOL *pool); + +size_t ossl_rand_pool_entropy_available(RAND_POOL *pool); +size_t ossl_rand_pool_entropy_needed(RAND_POOL *pool); +/* |entropy_factor| expresses how many bits of data contain 1 bit of entropy */ +size_t ossl_rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor); +size_t ossl_rand_pool_bytes_remaining(RAND_POOL *pool); + +int ossl_rand_pool_add(RAND_POOL *pool, + const unsigned char *buffer, size_t len, size_t entropy); +unsigned char *ossl_rand_pool_add_begin(RAND_POOL *pool, size_t len); +int ossl_rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy); + +#endif /* OSSL_PROVIDER_RAND_POOL_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/randerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/randerr.h new file mode 100644 index 00000000..832a8b7d --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/randerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RANDERR_H +# define OSSL_CRYPTO_RANDERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_RAND_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.def b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.def new file mode 100644 index 00000000..6c26dbf4 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.def @@ -0,0 +1,43 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* X Macro Definitions for Specification of RISC-V Arch Capabilities */ + +/* + * Each RISC-V capability ends up encoded as a single set bit in an array of + * words. When specifying a new capability, write a new RISCV_DEFINE_CAP + * statement, with an argument as the extension name in all-caps, + * second argument as the index in the array where the capability will be stored + * and third argument as the index of the bit to be used to encode the + * capability. + * RISCV_DEFINE_CAP(EXTENSION NAME, array index, bit index) */ + +RISCV_DEFINE_CAP(ZBA, 0, 0) +RISCV_DEFINE_CAP(ZBB, 0, 1) +RISCV_DEFINE_CAP(ZBC, 0, 2) +RISCV_DEFINE_CAP(ZBS, 0, 3) +RISCV_DEFINE_CAP(ZBKB, 0, 4) +RISCV_DEFINE_CAP(ZBKC, 0, 5) +RISCV_DEFINE_CAP(ZBKX, 0, 6) +RISCV_DEFINE_CAP(ZKND, 0, 7) +RISCV_DEFINE_CAP(ZKNE, 0, 8) +RISCV_DEFINE_CAP(ZKNH, 0, 9) +RISCV_DEFINE_CAP(ZKSED, 0, 10) +RISCV_DEFINE_CAP(ZKSH, 0, 11) +RISCV_DEFINE_CAP(ZKR, 0, 12) +RISCV_DEFINE_CAP(ZKT, 0, 13) + +/* + * In the future ... + * RISCV_DEFINE_CAP(ZFOO, 0, 31) + * RISCV_DEFINE_CAP(ZBAR, 1, 0) + * ... and so on. + */ + +#undef RISCV_DEFINE_CAP diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.h new file mode 100644 index 00000000..89a40bea --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.h @@ -0,0 +1,59 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RISCV_ARCH_H +# define OSSL_CRYPTO_RISCV_ARCH_H + +# include +# include + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +extern uint32_t OPENSSL_riscvcap_P[ (( +# include "riscv_arch.def" +) + sizeof(uint32_t) - 1) / sizeof(uint32_t) ]; + +# ifdef OPENSSL_RISCVCAP_IMPL +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +uint32_t OPENSSL_riscvcap_P[ (( +# include "riscv_arch.def" +) + sizeof(uint32_t) - 1) / sizeof(uint32_t) ]; +# endif + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) \ + static inline int RISCV_HAS_##NAME(void) \ + { \ + return (OPENSSL_riscvcap_P[INDEX] & (1 << BIT_INDEX)) != 0; \ + } +# include "riscv_arch.def" + +struct RISCV_capability_s { + const char *name; + size_t index; + size_t bit_offset; +}; + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +extern const struct RISCV_capability_s RISCV_capabilities[ +# include "riscv_arch.def" +]; + +# ifdef OPENSSL_RISCVCAP_IMPL +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) \ + { #NAME, INDEX, BIT_INDEX }, +const struct RISCV_capability_s RISCV_capabilities[] = { +# include "riscv_arch.def" +}; +# endif + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +static const size_t kRISCVNumCaps = +# include "riscv_arch.def" +; + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsa.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsa.h new file mode 100644 index 00000000..949873d0 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsa.h @@ -0,0 +1,130 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_RSA_H +# define OSSL_INTERNAL_RSA_H +# pragma once + +# include +# include +# include "crypto/types.h" + +#define RSA_MIN_MODULUS_BITS 512 + +typedef struct rsa_pss_params_30_st { + int hash_algorithm_nid; + struct { + int algorithm_nid; /* Currently always NID_mgf1 */ + int hash_algorithm_nid; + } mask_gen; + int salt_len; + int trailer_field; +} RSA_PSS_PARAMS_30; + +RSA_PSS_PARAMS_30 *ossl_rsa_get0_pss_params_30(RSA *r); +int ossl_rsa_pss_params_30_set_defaults(RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_copy(RSA_PSS_PARAMS_30 *to, + const RSA_PSS_PARAMS_30 *from); +int ossl_rsa_pss_params_30_is_unrestricted(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_set_hashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int hashalg_nid); +int ossl_rsa_pss_params_30_set_maskgenalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int maskgenalg_nid); +int ossl_rsa_pss_params_30_set_maskgenhashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int maskgenhashalg_nid); +int ossl_rsa_pss_params_30_set_saltlen(RSA_PSS_PARAMS_30 *rsa_pss_params, + int saltlen); +int ossl_rsa_pss_params_30_set_trailerfield(RSA_PSS_PARAMS_30 *rsa_pss_params, + int trailerfield); +int ossl_rsa_pss_params_30_hashalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_maskgenalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_maskgenhashalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_saltlen(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_trailerfield(const RSA_PSS_PARAMS_30 *rsa_pss_params); + +const char *ossl_rsa_mgf_nid2name(int mgf); +int ossl_rsa_oaeppss_md2nid(const EVP_MD *md); +const char *ossl_rsa_oaeppss_nid2name(int md); + +RSA *ossl_rsa_new_with_ctx(OSSL_LIB_CTX *libctx); +OSSL_LIB_CTX *ossl_rsa_get0_libctx(RSA *r); +void ossl_rsa_set0_libctx(RSA *r, OSSL_LIB_CTX *libctx); + +int ossl_rsa_set0_all_params(RSA *r, const STACK_OF(BIGNUM) *primes, + const STACK_OF(BIGNUM) *exps, + const STACK_OF(BIGNUM) *coeffs); +int ossl_rsa_get0_all_params(RSA *r, STACK_OF(BIGNUM_const) *primes, + STACK_OF(BIGNUM_const) *exps, + STACK_OF(BIGNUM_const) *coeffs); +int ossl_rsa_is_foreign(const RSA *rsa); +RSA *ossl_rsa_dup(const RSA *rsa, int selection); + +int ossl_rsa_todata(RSA *rsa, OSSL_PARAM_BLD *bld, OSSL_PARAM params[], + int include_private); +int ossl_rsa_fromdata(RSA *rsa, const OSSL_PARAM params[], int include_private); +int ossl_rsa_pss_params_30_todata(const RSA_PSS_PARAMS_30 *pss, + OSSL_PARAM_BLD *bld, OSSL_PARAM params[]); +int ossl_rsa_pss_params_30_fromdata(RSA_PSS_PARAMS_30 *pss_params, + int *defaults_set, + const OSSL_PARAM params[], + OSSL_LIB_CTX *libctx); +int ossl_rsa_set0_pss_params(RSA *r, RSA_PSS_PARAMS *pss); +int ossl_rsa_pss_get_param_unverified(const RSA_PSS_PARAMS *pss, + const EVP_MD **pmd, const EVP_MD **pmgf1md, + int *psaltlen, int *ptrailerField); +RSA_PSS_PARAMS *ossl_rsa_pss_decode(const X509_ALGOR *alg); +int ossl_rsa_param_decode(RSA *rsa, const X509_ALGOR *alg); +RSA *ossl_rsa_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_rsa_padding_check_PKCS1_type_2_TLS(OSSL_LIB_CTX *ctx, unsigned char *to, + size_t tlen, + const unsigned char *from, + size_t flen, int client_version, + int alt_version); +int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx, + unsigned char *to, int tlen, + const unsigned char *from, int flen, + const unsigned char *param, + int plen, const EVP_MD *md, + const EVP_MD *mgf1md); + +int ossl_rsa_validate_public(const RSA *key); +int ossl_rsa_validate_private(const RSA *key); +int ossl_rsa_validate_pairwise(const RSA *key); + +int ossl_rsa_verify(int dtype, const unsigned char *m, + unsigned int m_len, unsigned char *rm, + size_t *prm_len, const unsigned char *sigbuf, + size_t siglen, RSA *rsa); + +const unsigned char *ossl_rsa_digestinfo_encoding(int md_nid, size_t *len); + +extern const char *ossl_rsa_mp_factor_names[]; +extern const char *ossl_rsa_mp_exp_names[]; +extern const char *ossl_rsa_mp_coeff_names[]; + +ASN1_STRING *ossl_rsa_ctx_to_pss_string(EVP_PKEY_CTX *pkctx); +int ossl_rsa_pss_to_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pkctx, + const X509_ALGOR *sigalg, EVP_PKEY *pkey); + +# if defined(FIPS_MODULE) && !defined(OPENSSL_NO_ACVP_TESTS) +int ossl_rsa_acvp_test_gen_params_new(OSSL_PARAM **dst, const OSSL_PARAM src[]); +void ossl_rsa_acvp_test_gen_params_free(OSSL_PARAM *dst); + +int ossl_rsa_acvp_test_set_params(RSA *r, const OSSL_PARAM params[]); +int ossl_rsa_acvp_test_get_params(RSA *r, OSSL_PARAM params[]); +typedef struct rsa_acvp_test_st RSA_ACVP_TEST; +void ossl_rsa_acvp_test_free(RSA_ACVP_TEST *t); +# else +# define RSA_ACVP_TEST void +# endif + +RSA *evp_pkey_get1_RSA_PSS(EVP_PKEY *pkey); +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsaerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsaerr.h new file mode 100644 index 00000000..9b23500b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsaerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RSAERR_H +# define OSSL_CRYPTO_RSAERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_RSA_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/security_bits.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/security_bits.h new file mode 100644 index 00000000..58f49681 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/security_bits.h @@ -0,0 +1,16 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_SECURITY_BITS_H +# define OSSL_SECURITY_BITS_H +# pragma once + +uint16_t ossl_ifc_ffc_compute_security_bits(int n); + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sha.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sha.h index 6d15edb9..64305d17 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sha.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sha.h @@ -1,8 +1,8 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,10 +10,13 @@ #ifndef OSSL_CRYPTO_SHA_H # define OSSL_CRYPTO_SHA_H +# pragma once -# include +# include int sha512_224_init(SHA512_CTX *); int sha512_256_init(SHA512_CTX *); +int ossl_sha1_ctrl(SHA_CTX *ctx, int cmd, int mslen, void *ms); +unsigned char *ossl_sha1(const unsigned char *d, size_t n, unsigned char *md); #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siphash.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siphash.h index 9573680f..0d0767fc 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siphash.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siphash.h @@ -1,18 +1,22 @@ /* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_CRYPTO_SIPHASH_H +# define OSSL_CRYPTO_SIPHASH_H +# pragma once -#define SIPHASH_BLOCK_SIZE 8 -#define SIPHASH_KEY_SIZE 16 -#define SIPHASH_MIN_DIGEST_SIZE 8 -#define SIPHASH_MAX_DIGEST_SIZE 16 +# include + +# define SIPHASH_BLOCK_SIZE 8 +# define SIPHASH_KEY_SIZE 16 +# define SIPHASH_MIN_DIGEST_SIZE 8 +# define SIPHASH_MAX_DIGEST_SIZE 16 typedef struct siphash_st SIPHASH; @@ -23,3 +27,24 @@ int SipHash_Init(SIPHASH *ctx, const unsigned char *k, int crounds, int drounds); void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen); int SipHash_Final(SIPHASH *ctx, unsigned char *out, size_t outlen); + +/* Based on https://131002.net/siphash C reference implementation */ + +struct siphash_st { + uint64_t total_inlen; + uint64_t v0; + uint64_t v1; + uint64_t v2; + uint64_t v3; + unsigned int len; + unsigned int hash_size; + unsigned int crounds; + unsigned int drounds; + unsigned char leavings[SIPHASH_BLOCK_SIZE]; +}; + +/* default: SipHash-2-4 */ +# define SIPHASH_C_ROUNDS 2 +# define SIPHASH_D_ROUNDS 4 + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siv.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siv.h new file mode 100644 index 00000000..8dc58bd3 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siv.h @@ -0,0 +1,33 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_NO_SIV + +typedef struct siv128_context SIV128_CONTEXT; + +SIV128_CONTEXT *ossl_siv128_new(const unsigned char *key, int klen, + EVP_CIPHER *cbc, EVP_CIPHER *ctr, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_siv128_init(SIV128_CONTEXT *ctx, const unsigned char *key, int klen, + const EVP_CIPHER *cbc, const EVP_CIPHER *ctr, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_siv128_copy_ctx(SIV128_CONTEXT *dest, SIV128_CONTEXT *src); +int ossl_siv128_aad(SIV128_CONTEXT *ctx, const unsigned char *aad, size_t len); +int ossl_siv128_encrypt(SIV128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, size_t len); +int ossl_siv128_decrypt(SIV128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, size_t len); +int ossl_siv128_finish(SIV128_CONTEXT *ctx); +int ossl_siv128_set_tag(SIV128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +int ossl_siv128_get_tag(SIV128_CONTEXT *ctx, unsigned char *tag, size_t len); +int ossl_siv128_cleanup(SIV128_CONTEXT *ctx); +int ossl_siv128_speed(SIV128_CONTEXT *ctx, int arg); + +#endif /* OPENSSL_NO_SIV */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2.h index a7f5548c..9ab6c0b7 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2.h @@ -3,7 +3,7 @@ * Copyright 2017 Ribose Inc. All Rights Reserved. * Ported from Ribose contributions from Botan. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,67 +11,76 @@ #ifndef OSSL_CRYPTO_SM2_H # define OSSL_CRYPTO_SM2_H +# pragma once + # include -# ifndef OPENSSL_NO_SM2 +# if !defined(OPENSSL_NO_SM2) && !defined(FIPS_MODULE) # include +# include "crypto/types.h" + +int ossl_sm2_key_private_check(const EC_KEY *eckey); /* The default user id as specified in GM/T 0009-2012 */ # define SM2_DEFAULT_USERID "1234567812345678" -int sm2_compute_z_digest(uint8_t *out, - const EVP_MD *digest, - const uint8_t *id, - const size_t id_len, - const EC_KEY *key); +int ossl_sm2_compute_z_digest(uint8_t *out, + const EVP_MD *digest, + const uint8_t *id, + const size_t id_len, + const EC_KEY *key); /* * SM2 signature operation. Computes Z and then signs H(Z || msg) using SM2 */ -ECDSA_SIG *sm2_do_sign(const EC_KEY *key, +ECDSA_SIG *ossl_sm2_do_sign(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *id, + const size_t id_len, + const uint8_t *msg, size_t msg_len); + +int ossl_sm2_do_verify(const EC_KEY *key, const EVP_MD *digest, + const ECDSA_SIG *signature, const uint8_t *id, const size_t id_len, const uint8_t *msg, size_t msg_len); -int sm2_do_verify(const EC_KEY *key, - const EVP_MD *digest, - const ECDSA_SIG *signature, - const uint8_t *id, - const size_t id_len, - const uint8_t *msg, size_t msg_len); - /* * SM2 signature generation. */ -int sm2_sign(const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); +int ossl_sm2_internal_sign(const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, + EC_KEY *eckey); /* * SM2 signature verification. */ -int sm2_verify(const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); +int ossl_sm2_internal_verify(const unsigned char *dgst, int dgstlen, + const unsigned char *sig, int siglen, + EC_KEY *eckey); /* * SM2 encryption */ -int sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len, - size_t *ct_size); +int ossl_sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, + size_t msg_len, size_t *ct_size); -int sm2_plaintext_size(const unsigned char *ct, size_t ct_size, size_t *pt_size); +int ossl_sm2_plaintext_size(const unsigned char *ct, size_t ct_size, + size_t *pt_size); -int sm2_encrypt(const EC_KEY *key, - const EVP_MD *digest, - const uint8_t *msg, - size_t msg_len, - uint8_t *ciphertext_buf, size_t *ciphertext_len); +int ossl_sm2_encrypt(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *msg, size_t msg_len, + uint8_t *ciphertext_buf, size_t *ciphertext_len); -int sm2_decrypt(const EC_KEY *key, - const EVP_MD *digest, - const uint8_t *ciphertext, - size_t ciphertext_len, uint8_t *ptext_buf, size_t *ptext_len); +int ossl_sm2_decrypt(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *ciphertext, size_t ciphertext_len, + uint8_t *ptext_buf, size_t *ptext_len); +const unsigned char *ossl_sm2_algorithmidentifier_encoding(int md_nid, + size_t *len); # endif /* OPENSSL_NO_SM2 */ #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2err.h index d1c0ee25..706f4d69 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2err.h @@ -1,8 +1,8 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,39 +10,18 @@ #ifndef OSSL_CRYPTO_SM2ERR_H # define OSSL_CRYPTO_SM2ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +# pragma once # include +# include + +# ifdef __cplusplus +extern "C" { +# endif # ifndef OPENSSL_NO_SM2 -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_SM2_strings(void); - -/* - * SM2 function codes. - */ -# define SM2_F_PKEY_SM2_COPY 115 -# define SM2_F_PKEY_SM2_CTRL 109 -# define SM2_F_PKEY_SM2_CTRL_STR 110 -# define SM2_F_PKEY_SM2_DIGEST_CUSTOM 114 -# define SM2_F_PKEY_SM2_INIT 111 -# define SM2_F_PKEY_SM2_SIGN 112 -# define SM2_F_SM2_COMPUTE_MSG_HASH 100 -# define SM2_F_SM2_COMPUTE_USERID_DIGEST 101 -# define SM2_F_SM2_COMPUTE_Z_DIGEST 113 -# define SM2_F_SM2_DECRYPT 102 -# define SM2_F_SM2_ENCRYPT 103 -# define SM2_F_SM2_PLAINTEXT_SIZE 104 -# define SM2_F_SM2_SIGN 105 -# define SM2_F_SM2_SIG_GEN 106 -# define SM2_F_SM2_SIG_VERIFY 107 -# define SM2_F_SM2_VERIFY 108 +int ossl_err_load_SM2_strings(void); /* * SM2 reason codes. @@ -58,8 +37,13 @@ int ERR_load_SM2_strings(void); # define SM2_R_INVALID_DIGEST_TYPE 103 # define SM2_R_INVALID_ENCODING 104 # define SM2_R_INVALID_FIELD 105 +# define SM2_R_INVALID_PRIVATE_KEY 113 # define SM2_R_NO_PARAMETERS_SET 109 # define SM2_R_USER_ID_TOO_LARGE 106 +# endif + +# ifdef __cplusplus +} # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4.h index abe28f38..e21ec81c 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4.h @@ -1,8 +1,8 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2017 Ribose Inc. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,7 @@ #ifndef OSSL_CRYPTO_SM4_H # define OSSL_CRYPTO_SM4_H +# pragma once # include # include @@ -28,10 +29,10 @@ typedef struct SM4_KEY_st { uint32_t rk[SM4_KEY_SCHEDULE]; } SM4_KEY; -int SM4_set_key(const uint8_t *key, SM4_KEY *ks); +int ossl_sm4_set_key(const uint8_t *key, SM4_KEY *ks); -void SM4_encrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); +void ossl_sm4_encrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); -void SM4_decrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); +void ossl_sm4_decrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4_platform.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4_platform.h new file mode 100644 index 00000000..6cc1dfa5 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4_platform.h @@ -0,0 +1,75 @@ +/* + * Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_SM4_PLATFORM_H +# define OSSL_SM4_PLATFORM_H +# pragma once + +# if defined(OPENSSL_CPUID_OBJ) +# if defined(__aarch64__) +# include "arm_arch.h" +extern unsigned int OPENSSL_arm_midr; +static inline int vpsm4_capable(void) +{ + return (OPENSSL_armcap_P & ARMV8_CPUID) && + (MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_V1) || + MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_N1)); +} +# if defined(VPSM4_ASM) +# define VPSM4_CAPABLE vpsm4_capable() +# endif +# define HWSM4_CAPABLE (OPENSSL_armcap_P & ARMV8_SM4) +# define HWSM4_set_encrypt_key sm4_v8_set_encrypt_key +# define HWSM4_set_decrypt_key sm4_v8_set_decrypt_key +# define HWSM4_encrypt sm4_v8_encrypt +# define HWSM4_decrypt sm4_v8_decrypt +# define HWSM4_cbc_encrypt sm4_v8_cbc_encrypt +# define HWSM4_ecb_encrypt sm4_v8_ecb_encrypt +# define HWSM4_ctr32_encrypt_blocks sm4_v8_ctr32_encrypt_blocks +# endif +# endif /* OPENSSL_CPUID_OBJ */ + +# if defined(HWSM4_CAPABLE) +int HWSM4_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); +int HWSM4_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); +void HWSM4_encrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void HWSM4_decrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void HWSM4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + unsigned char *ivec, const int enc); +void HWSM4_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + const int enc); +void HWSM4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +# endif /* HWSM4_CAPABLE */ + +#ifdef VPSM4_CAPABLE +int vpsm4_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); +int vpsm4_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); +void vpsm4_encrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void vpsm4_decrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void vpsm4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + unsigned char *ivec, const int enc); +void vpsm4_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + const int enc); +void vpsm4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +# endif /* VPSM4_CAPABLE */ + + +#endif /* OSSL_SM4_PLATFORM_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparc_arch.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparc_arch.h new file mode 100644 index 00000000..447e715b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparc_arch.h @@ -0,0 +1,122 @@ +/* + * Copyright 2012-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_SPARC_ARCH_H +# define OSSL_CRYPTO_SPARC_ARCH_H + +# define SPARCV9_TICK_PRIVILEGED (1<<0) +# define SPARCV9_PREFER_FPU (1<<1) +# define SPARCV9_VIS1 (1<<2) +# define SPARCV9_VIS2 (1<<3)/* reserved */ +# define SPARCV9_FMADD (1<<4) +# define SPARCV9_BLK (1<<5)/* VIS1 block copy */ +# define SPARCV9_VIS3 (1<<6) +# define SPARCV9_RANDOM (1<<7) +# define SPARCV9_64BIT_STACK (1<<8) +# define SPARCV9_FJAESX (1<<9)/* Fujitsu SPARC64 X AES */ +# define SPARCV9_FJDESX (1<<10)/* Fujitsu SPARC64 X DES, reserved */ +# define SPARCV9_FJHPCACE (1<<11)/* Fujitsu HPC-ACE, reserved */ +# define SPARCV9_IMA (1<<13)/* reserved */ +# define SPARCV9_VIS4 (1<<14)/* reserved */ + +/* + * OPENSSL_sparcv9cap_P[1] is copy of Compatibility Feature Register, + * %asr26, SPARC-T4 and later. There is no SPARCV9_CFR bit in + * OPENSSL_sparcv9cap_P[0], as %cfr copy is sufficient... + */ +# define CFR_AES 0x00000001/* Supports AES opcodes */ +# define CFR_DES 0x00000002/* Supports DES opcodes */ +# define CFR_KASUMI 0x00000004/* Supports KASUMI opcodes */ +# define CFR_CAMELLIA 0x00000008/* Supports CAMELLIA opcodes */ +# define CFR_MD5 0x00000010/* Supports MD5 opcodes */ +# define CFR_SHA1 0x00000020/* Supports SHA1 opcodes */ +# define CFR_SHA256 0x00000040/* Supports SHA256 opcodes */ +# define CFR_SHA512 0x00000080/* Supports SHA512 opcodes */ +# define CFR_MPMUL 0x00000100/* Supports MPMUL opcodes */ +# define CFR_MONTMUL 0x00000200/* Supports MONTMUL opcodes */ +# define CFR_MONTSQR 0x00000400/* Supports MONTSQR opcodes */ +# define CFR_CRC32C 0x00000800/* Supports CRC32C opcodes */ +# define CFR_XMPMUL 0x00001000/* Supports XMPMUL opcodes */ +# define CFR_XMONTMUL 0x00002000/* Supports XMONTMUL opcodes */ +# define CFR_XMONTSQR 0x00004000/* Supports XMONTSQR opcodes */ + +# if defined(OPENSSL_PIC) && !defined(__PIC__) +# define __PIC__ +# endif + +# if defined(__SUNPRO_C) && defined(__sparcv9) && !defined(__arch64__) +# define __arch64__ +# endif + +# define SPARC_PIC_THUNK(reg) \ + .align 32; \ +.Lpic_thunk: \ + jmp %o7 + 8; \ + add %o7, reg, reg; + +# define SPARC_PIC_THUNK_CALL(reg) \ + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), reg; \ + call .Lpic_thunk; \ + or reg, %lo(_GLOBAL_OFFSET_TABLE_+4), reg; + +# if 1 +# define SPARC_SETUP_GOT_REG(reg) SPARC_PIC_THUNK_CALL(reg) +# else +# define SPARC_SETUP_GOT_REG(reg) \ + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), reg; \ + call .+8; \ + or reg,%lo(_GLOBAL_OFFSET_TABLE_+4), reg; \ + add %o7, reg, reg +# endif + +# if defined(__arch64__) + +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + setx SYM, %o7, reg; +# define LDPTR ldx +# define SIZE_T_CC %xcc +# define STACK_FRAME 192 +# define STACK_BIAS 2047 +# define STACK_7thARG (STACK_BIAS+176) + +# else + +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + set SYM, reg; +# define LDPTR ld +# define SIZE_T_CC %icc +# define STACK_FRAME 112 +# define STACK_BIAS 0 +# define STACK_7thARG 92 +# define SPARC_LOAD_ADDRESS_LEAF(SYM,reg,tmp) SPARC_LOAD_ADDRESS(SYM,reg) + +# endif + +# ifdef __PIC__ +# undef SPARC_LOAD_ADDRESS +# undef SPARC_LOAD_ADDRESS_LEAF +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + SPARC_SETUP_GOT_REG(reg); \ + sethi %hi(SYM), %o7; \ + or %o7, %lo(SYM), %o7; \ + LDPTR [reg + %o7], reg; +# endif + +# ifndef SPARC_LOAD_ADDRESS_LEAF +# define SPARC_LOAD_ADDRESS_LEAF(SYM, reg, tmp) \ + mov %o7, tmp; \ + SPARC_LOAD_ADDRESS(SYM, reg) \ + mov tmp, %o7; +# endif + +# ifndef __ASSEMBLER__ +extern unsigned int OPENSSL_sparcv9cap_P[2]; +# endif + +#endif /* OSSL_CRYPTO_SPARC_ARCH_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparse_array.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparse_array.h new file mode 100644 index 00000000..7ef74283 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparse_array.h @@ -0,0 +1,92 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_SPARSE_ARRAY_H +# define OSSL_CRYPTO_SPARSE_ARRAY_H +# pragma once + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define SPARSE_ARRAY_OF(type) struct sparse_array_st_ ## type + +# define DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, ctype) \ + SPARSE_ARRAY_OF(type); \ + static ossl_unused ossl_inline SPARSE_ARRAY_OF(type) * \ + ossl_sa_##type##_new(void) \ + { \ + return (SPARSE_ARRAY_OF(type) *)ossl_sa_new(); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_free(SPARSE_ARRAY_OF(type) *sa) \ + { \ + ossl_sa_free((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_free_leaves(SPARSE_ARRAY_OF(type) *sa) \ + { \ + ossl_sa_free_leaves((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline size_t \ + ossl_sa_##type##_num(const SPARSE_ARRAY_OF(type) *sa) \ + { \ + return ossl_sa_num((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_doall(const SPARSE_ARRAY_OF(type) *sa, \ + void (*leaf)(ossl_uintmax_t, type *)) \ + { \ + ossl_sa_doall((OPENSSL_SA *)sa, \ + (void (*)(ossl_uintmax_t, void *))leaf); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_doall_arg(const SPARSE_ARRAY_OF(type) *sa, \ + void (*leaf)(ossl_uintmax_t, type *, void *), \ + void *arg) \ + { \ + ossl_sa_doall_arg((OPENSSL_SA *)sa, \ + (void (*)(ossl_uintmax_t, void *, void *))leaf, arg); \ + } \ + static ossl_unused ossl_inline ctype \ + *ossl_sa_##type##_get(const SPARSE_ARRAY_OF(type) *sa, ossl_uintmax_t n) \ + { \ + return (type *)ossl_sa_get((OPENSSL_SA *)sa, n); \ + } \ + static ossl_unused ossl_inline int \ + ossl_sa_##type##_set(SPARSE_ARRAY_OF(type) *sa, \ + ossl_uintmax_t n, ctype *val) \ + { \ + return ossl_sa_set((OPENSSL_SA *)sa, n, (void *)val); \ + } \ + SPARSE_ARRAY_OF(type) + +# define DEFINE_SPARSE_ARRAY_OF(type) \ + DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, type) +# define DEFINE_SPARSE_ARRAY_OF_CONST(type) \ + DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, const type) + +typedef struct sparse_array_st OPENSSL_SA; +OPENSSL_SA *ossl_sa_new(void); +void ossl_sa_free(OPENSSL_SA *sa); +void ossl_sa_free_leaves(OPENSSL_SA *sa); +size_t ossl_sa_num(const OPENSSL_SA *sa); +void ossl_sa_doall(const OPENSSL_SA *sa, void (*leaf)(ossl_uintmax_t, void *)); +void ossl_sa_doall_arg(const OPENSSL_SA *sa, + void (*leaf)(ossl_uintmax_t, void *, void *), void *); +void *ossl_sa_get(const OPENSSL_SA *sa, ossl_uintmax_t n); +int ossl_sa_set(OPENSSL_SA *sa, ossl_uintmax_t n, void *val); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/store.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/store.h index 428d3c60..5645fc92 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/store.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/store.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,20 +9,15 @@ #ifndef OSSL_CRYPTO_STORE_H # define OSSL_CRYPTO_STORE_H +# pragma once # include # include # include -/* - * Two functions to read PEM data off an already opened BIO. To be used - * instead of OSSLSTORE_open() and OSSLSTORE_close(). Everything is done - * as usual with OSSLSTORE_load() and OSSLSTORE_eof(). - */ -OSSL_STORE_CTX *ossl_store_attach_pem_bio(BIO *bp, const UI_METHOD *ui_method, - void *ui_data); -int ossl_store_detach_pem_bio(OSSL_STORE_CTX *ctx); - void ossl_store_cleanup_int(void); +int ossl_store_loader_get_number(const OSSL_STORE_LOADER *loader); +int ossl_store_loader_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_store_loader_store_remove_all_provided(const OSSL_PROVIDER *prov); #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/storeerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/storeerr.h new file mode 100644 index 00000000..c46d845f --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/storeerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_STOREERR_H +# define OSSL_CRYPTO_STOREERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_STORE_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/tserr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/tserr.h new file mode 100644 index 00000000..2f34ba31 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/tserr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_TSERR_H +# define OSSL_CRYPTO_TSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_TS + +int ossl_err_load_TS_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/types.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/types.h new file mode 100644 index 00000000..ad17f052 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/types.h @@ -0,0 +1,32 @@ +/* + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* When removal is simulated, we still need the type internally */ + +#ifndef OSSL_CRYPTO_TYPES_H +# define OSSL_CRYPTO_TYPES_H +# pragma once + +# ifdef OPENSSL_NO_DEPRECATED_3_0 +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; +# ifndef OPENSSL_NO_EC +typedef struct ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; +# endif +# ifndef OPENSSL_NO_DSA +typedef struct dsa_st DSA; +# endif +# endif + +# ifndef OPENSSL_NO_EC +typedef struct ecx_key_st ECX_KEY; +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/uierr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/uierr.h new file mode 100644 index 00000000..789077a8 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/uierr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_UIERR_H +# define OSSL_CRYPTO_UIERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_UI_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509.h index 243ea74f..631150b7 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509.h @@ -1,15 +1,21 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include "internal/refcount.h" -#include -#include +#ifndef OSSL_CRYPTO_X509_H +# define OSSL_CRYPTO_X509_H +# pragma once + +# include "internal/refcount.h" +# include +# include +# include +# include "crypto/types.h" /* Internal X509 structures and functions: not for application use */ @@ -73,6 +79,11 @@ struct X509_req_st { ASN1_BIT_STRING *signature; /* signature */ CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; + + /* Set on live certificates for authentication purposes */ + ASN1_OCTET_STRING *distinguishing_id; + OSSL_LIB_CTX *libctx; + char *propq; }; struct X509_crl_info_st { @@ -111,6 +122,9 @@ struct X509_crl_st { const X509_CRL_METHOD *meth; void *meth_data; CRYPTO_RWLOCK *lock; + + OSSL_LIB_CTX *libctx; + char *propq; }; struct x509_revoked_st { @@ -177,7 +191,7 @@ struct x509_st { STACK_OF(DIST_POINT) *crldp; STACK_OF(GENERAL_NAME) *altname; NAME_CONSTRAINTS *nc; -#ifndef OPENSSL_NO_RFC3779 +# ifndef OPENSSL_NO_RFC3779 STACK_OF(IPAddressFamily) *rfc3779_addr; struct ASIdentifiers_st *rfc3779_asid; # endif @@ -185,6 +199,12 @@ struct x509_st { X509_CERT_AUX *aux; CRYPTO_RWLOCK *lock; volatile int ex_cached; + + /* Set on live certificates for authentication purposes */ + ASN1_OCTET_STRING *distinguishing_id; + + OSSL_LIB_CTX *libctx; + char *propq; } /* X509 */ ; /* @@ -193,7 +213,7 @@ struct x509_st { * kept and passed around. */ struct x509_store_ctx_st { /* X509_STORE_CTX */ - X509_STORE *ctx; + X509_STORE *store; /* The following are set by the caller */ /* The cert to check */ X509 *cert; @@ -223,8 +243,11 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check policy status of the chain */ int (*check_policy) (X509_STORE_CTX *ctx); - STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); - STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); + STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, + const X509_NAME *nm); + /* cannot constify 'ctx' param due to lookup_certs_sk() in x509_vfy.c */ + STACK_OF(X509_CRL) *(*lookup_crls) (const X509_STORE_CTX *ctx, + const X509_NAME *nm); int (*cleanup) (X509_STORE_CTX *ctx); /* The following is built up */ /* if 0, rebuild chain */ @@ -255,6 +278,9 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ SSL_DANE *dane; /* signed via bare TA public key, rather than CA certificate */ int bare_ta_signed; + + OSSL_LIB_CTX *libctx; + char *propq; }; /* PKCS#8 private key info structure */ @@ -282,10 +308,63 @@ struct x509_object_st { } data; }; -int a2i_ipadd(unsigned char *ipout, const char *ipasc); -int x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_a2i_ipadd(unsigned char *ipout, const char *ipasc); +int ossl_x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_x509_print_ex_brief(BIO *bio, X509 *cert, unsigned long neg_cflags); +int ossl_x509v3_cache_extensions(X509 *x); +int ossl_x509_init_sig_info(X509 *x); -void x509_init_sig_info(X509 *x); +int ossl_x509_set0_libctx(X509 *x, OSSL_LIB_CTX *libctx, const char *propq); +int ossl_x509_crl_set0_libctx(X509_CRL *x, OSSL_LIB_CTX *libctx, + const char *propq); +int ossl_x509_req_set0_libctx(X509_REQ *x, OSSL_LIB_CTX *libctx, + const char *propq); +int ossl_asn1_item_digest_ex(const ASN1_ITEM *it, const EVP_MD *type, + void *data, unsigned char *md, unsigned int *len, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_x509_add_cert_new(STACK_OF(X509) **sk, X509 *cert, int flags); +int ossl_x509_add_certs_new(STACK_OF(X509) **p_sk, STACK_OF(X509) *certs, + int flags); + +STACK_OF(X509_ATTRIBUTE) *ossl_x509at_dup(const STACK_OF(X509_ATTRIBUTE) *x); + +int ossl_x509_PUBKEY_get0_libctx(OSSL_LIB_CTX **plibctx, const char **ppropq, + const X509_PUBKEY *key); +/* Calculate default key identifier according to RFC 5280 section 4.2.1.2 (1) */ +ASN1_OCTET_STRING *ossl_x509_pubkey_hash(X509_PUBKEY *pubkey); + +X509_PUBKEY *ossl_d2i_X509_PUBKEY_INTERNAL(const unsigned char **pp, + long len, OSSL_LIB_CTX *libctx); +void ossl_X509_PUBKEY_INTERNAL_free(X509_PUBKEY *xpub); + +RSA *ossl_d2i_RSA_PSS_PUBKEY(RSA **a, const unsigned char **pp, long length); +int ossl_i2d_RSA_PSS_PUBKEY(const RSA *a, unsigned char **pp); +# ifndef OPENSSL_NO_DSA +DSA *ossl_d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# endif /* OPENSSL_NO_DSA */ +# ifndef OPENSSL_NO_DH +DH *ossl_d2i_DH_PUBKEY(DH **a, const unsigned char **pp, long length); +int ossl_i2d_DH_PUBKEY(const DH *a, unsigned char **pp); +DH *ossl_d2i_DHx_PUBKEY(DH **a, const unsigned char **pp, long length); +int ossl_i2d_DHx_PUBKEY(const DH *a, unsigned char **pp); +# endif /* OPENSSL_NO_DH */ +# ifndef OPENSSL_NO_EC +ECX_KEY *ossl_d2i_ED25519_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_ED25519_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_ED448_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_ED448_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_X25519_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_X25519_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_X448_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_X448_PUBKEY(const ECX_KEY *a, unsigned char **pp); +# endif /* OPENSSL_NO_EC */ +EVP_PKEY *ossl_d2i_PUBKEY_legacy(EVP_PKEY **a, const unsigned char **pp, + long length); int x509v3_add_len_value_uchar(const char *name, const unsigned char *value, size_t vallen, STACK_OF(CONF_VALUE) **extlist); +#endif /* OSSL_CRYPTO_X509_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509err.h new file mode 100644 index 00000000..0a67975b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_X509ERR_H +# define OSSL_CRYPTO_X509ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_X509_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509v3err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509v3err.h new file mode 100644 index 00000000..66d3ad92 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509v3err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_X509V3ERR_H +# define OSSL_CRYPTO_X509V3ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_X509V3_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H index c350018a..e57c0eab 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H index 9a9c777f..a0139575 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/asn1.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/asn1.h new file mode 100644 index 00000000..3143e340 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/asn1.h @@ -0,0 +1,16 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_ASN1_H +# define OSSL_INTERNAL_ASN1_H +# pragma once + +int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb); + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio.h index c343b276..547a73d0 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio.h @@ -1,13 +1,18 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_INTERNAL_BIO_H +# define OSSL_INTERNAL_BIO_H +# pragma once + +# include +# include struct bio_method_st { int type; @@ -31,3 +36,56 @@ void bio_cleanup(void); /* Old style to new style BIO_METHOD conversion functions */ int bwrite_conv(BIO *bio, const char *data, size_t datal, size_t *written); int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); + +/* Changes to these internal BIOs must also update include/openssl/bio.h */ +# define BIO_CTRL_SET_KTLS 72 +# define BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG 74 +# define BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG 75 + +/* + * This is used with socket BIOs: + * BIO_FLAGS_KTLS_TX means we are using ktls with this BIO for sending. + * BIO_FLAGS_KTLS_TX_CTRL_MSG means we are about to send a ctrl message next. + * BIO_FLAGS_KTLS_RX means we are using ktls with this BIO for receiving. + */ +# define BIO_FLAGS_KTLS_TX_CTRL_MSG 0x1000 +# define BIO_FLAGS_KTLS_RX 0x2000 +# define BIO_FLAGS_KTLS_TX 0x4000 + +/* KTLS related controls and flags */ +# define BIO_set_ktls_flag(b, is_tx) \ + BIO_set_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX) +# define BIO_should_ktls_flag(b, is_tx) \ + BIO_test_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX) +# define BIO_set_ktls_ctrl_msg_flag(b) \ + BIO_set_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) +# define BIO_should_ktls_ctrl_msg_flag(b) \ + BIO_test_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) +# define BIO_clear_ktls_ctrl_msg_flag(b) \ + BIO_clear_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) + +# define BIO_set_ktls(b, keyblob, is_tx) \ + BIO_ctrl(b, BIO_CTRL_SET_KTLS, is_tx, keyblob) +# define BIO_set_ktls_ctrl_msg(b, record_type) \ + BIO_ctrl(b, BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG, record_type, NULL) +# define BIO_clear_ktls_ctrl_msg(b) \ + BIO_ctrl(b, BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG, 0, NULL) + +/* Functions to allow the core to offer the CORE_BIO type to providers */ +OSSL_CORE_BIO *ossl_core_bio_new_from_bio(BIO *bio); +OSSL_CORE_BIO *ossl_core_bio_new_file(const char *filename, const char *mode); +OSSL_CORE_BIO *ossl_core_bio_new_mem_buf(const void *buf, int len); +int ossl_core_bio_read_ex(OSSL_CORE_BIO *cb, void *data, size_t dlen, + size_t *readbytes); +int ossl_core_bio_write_ex(OSSL_CORE_BIO *cb, const void *data, size_t dlen, + size_t *written); +int ossl_core_bio_gets(OSSL_CORE_BIO *cb, char *buf, int size); +int ossl_core_bio_puts(OSSL_CORE_BIO *cb, const char *buf); +long ossl_core_bio_ctrl(OSSL_CORE_BIO *cb, int cmd, long larg, void *parg); +int ossl_core_bio_up_ref(OSSL_CORE_BIO *cb); +int ossl_core_bio_free(OSSL_CORE_BIO *cb); +int ossl_core_bio_vprintf(OSSL_CORE_BIO *cb, const char *format, va_list args); + +int ossl_bio_init_core(OSSL_LIB_CTX *libctx, const OSSL_DISPATCH *fns); + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/comp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/comp.h index ac6e38b4..3ad86fc7 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/comp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/comp.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,4 +9,4 @@ #include -void comp_zlib_cleanup_int(void); +void ossl_comp_zlib_cleanup(void); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/conf.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/conf.h index 163fea8d..8c6c29cd 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/conf.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/conf.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,10 +9,11 @@ #ifndef OSSL_INTERNAL_CONF_H # define OSSL_INTERNAL_CONF_H +# pragma once -#include +# include -#define DEFAULT_CONF_MFLAGS \ +# define DEFAULT_CONF_MFLAGS \ (CONF_MFLAGS_DEFAULT_SECTION | \ CONF_MFLAGS_IGNORE_MISSING_FILE | \ CONF_MFLAGS_IGNORE_RETURN_CODES) @@ -23,8 +24,8 @@ struct ossl_init_settings_st { unsigned long flags; }; -int openssl_config_int(const OPENSSL_INIT_SETTINGS *); -void openssl_no_config_int(void); -void conf_modules_free_int(void); +int ossl_config_int(const OPENSSL_INIT_SETTINGS *); +void ossl_no_config_int(void); +void ossl_config_modules_free(void); #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/constant_time.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/constant_time.h index 6600a1d7..0ed6f823 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/constant_time.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/constant_time.h @@ -1,7 +1,7 @@ /* - * Copyright 2014-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_CONSTANT_TIME_H # define OSSL_INTERNAL_CONSTANT_TIME_H +# pragma once # include # include @@ -181,6 +182,11 @@ static ossl_inline uint32_t constant_time_is_zero_32(uint32_t a) return constant_time_msb_32(~a & (a - 1)); } +static ossl_inline uint64_t constant_time_is_zero_64(uint64_t a) +{ + return constant_time_msb_64(~a & (a - 1)); +} + static ossl_inline unsigned int constant_time_eq(unsigned int a, unsigned int b) { @@ -352,6 +358,34 @@ static ossl_inline void constant_time_cond_swap_64(uint64_t mask, uint64_t *a, *b ^= xor; } +/* + * mask must be 0xFF or 0x00. + * "constant time" is per len. + * + * if (mask) { + * unsigned char tmp[len]; + * + * memcpy(tmp, a, len); + * memcpy(a, b); + * memcpy(b, tmp); + * } + */ +static ossl_inline void constant_time_cond_swap_buff(unsigned char mask, + unsigned char *a, + unsigned char *b, + size_t len) +{ + size_t i; + unsigned char tmp; + + for (i = 0; i < len; i++) { + tmp = a[i] ^ b[i]; + tmp &= mask; + a[i] ^= tmp; + b[i] ^= tmp; + } +} + /* * table is a two dimensional array of bytes. Each row has rowsize elements. * Copies row number idx into out. rowsize and numrows are not considered diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/core.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/core.h new file mode 100644 index 00000000..03adb66b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/core.h @@ -0,0 +1,71 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_CORE_H +# define OSSL_INTERNAL_CORE_H +# pragma once + +/* + * namespaces: + * + * ossl_method_ Core Method API + */ + +/* + * construct an arbitrary method from a dispatch table found by looking + * up a match for the < operation_id, name, property > combination. + * constructor and destructor are the constructor and destructor for that + * arbitrary object. + * + * These objects are normally cached, unless the provider says not to cache. + * However, force_cache can be used to force caching whatever the provider + * says (for example, because the application knows better). + */ +typedef struct ossl_method_construct_method_st { + /* Get a temporary store */ + void *(*get_tmp_store)(void *data); + /* Reserve the appropriate method store */ + int (*lock_store)(void *store, void *data); + /* Unreserve the appropriate method store */ + int (*unlock_store)(void *store, void *data); + /* Get an already existing method from a store */ + void *(*get)(void *store, const OSSL_PROVIDER **prov, void *data); + /* Store a method in a store */ + int (*put)(void *store, void *method, const OSSL_PROVIDER *prov, + const char *name, const char *propdef, void *data); + /* Construct a new method */ + void *(*construct)(const OSSL_ALGORITHM *algodef, OSSL_PROVIDER *prov, + void *data); + /* Destruct a method */ + void (*destruct)(void *method, void *data); +} OSSL_METHOD_CONSTRUCT_METHOD; + +void *ossl_method_construct(OSSL_LIB_CTX *ctx, int operation_id, + OSSL_PROVIDER **provider_rw, int force_cache, + OSSL_METHOD_CONSTRUCT_METHOD *mcm, void *mcm_data); + +void ossl_algorithm_do_all(OSSL_LIB_CTX *libctx, int operation_id, + OSSL_PROVIDER *provider, + int (*pre)(OSSL_PROVIDER *, int operation_id, + int no_store, void *data, int *result), + int (*reserve_store)(int no_store, void *data), + void (*fn)(OSSL_PROVIDER *provider, + const OSSL_ALGORITHM *algo, + int no_store, void *data), + int (*unreserve_store)(void *data), + int (*post)(OSSL_PROVIDER *, int operation_id, + int no_store, void *data, int *result), + void *data); +char *ossl_algorithm_get1_first_name(const OSSL_ALGORITHM *algo); + +__owur int ossl_lib_ctx_write_lock(OSSL_LIB_CTX *ctx); +__owur int ossl_lib_ctx_read_lock(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_unlock(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_child(OSSL_LIB_CTX *ctx); +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/cryptlib.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/cryptlib.h index 6e7291ae..ac50eb3b 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/cryptlib.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/cryptlib.h @@ -1,7 +1,7 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,19 +9,22 @@ #ifndef OSSL_INTERNAL_CRYPTLIB_H # define OSSL_INTERNAL_CRYPTLIB_H +# pragma once # include # include # ifdef OPENSSL_USE_APPLINK -# undef BIO_FLAGS_UPLINK -# define BIO_FLAGS_UPLINK 0x8000 +# define BIO_FLAGS_UPLINK_INTERNAL 0x8000 # include "ms/uplink.h" +# else +# define BIO_FLAGS_UPLINK_INTERNAL 0 # endif # include # include # include +# include # include # include "internal/nelem.h" @@ -42,14 +45,21 @@ __owur static ossl_inline int ossl_assert_int(int expr, const char *exprstr, #endif -typedef struct ex_callback_st EX_CALLBACK; +/* + * Use this inside a union with the field that needs to be aligned to a + * reasonable boundary for the platform. The most pessimistic alignment + * of the listed types will be used by the compiler. + */ +# define OSSL_UNION_ALIGN \ + double align; \ + ossl_uintmax_t align_int; \ + void *align_ptr +typedef struct ex_callback_st EX_CALLBACK; DEFINE_STACK_OF(EX_CALLBACK) -typedef struct app_mem_info_st APP_INFO; - typedef struct mem_st MEM; -DEFINE_LHASH_OF(MEM); +DEFINE_LHASH_OF_EX(MEM); # define OPENSSL_CONF "openssl.cnf" @@ -76,9 +86,14 @@ DEFINE_LHASH_OF(MEM); # define HEX_SIZE(type) (sizeof(type)*2) void OPENSSL_cpuid_setup(void); +#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) extern unsigned int OPENSSL_ia32cap_P[]; +#endif void OPENSSL_showfatal(const char *fmta, ...); -void crypto_cleanup_all_ex_data_int(void); +int ossl_do_ex_data_init(OSSL_LIB_CTX *ctx); +void ossl_crypto_cleanup_all_ex_data_int(OSSL_LIB_CTX *ctx); int openssl_init_fork_handlers(void); int openssl_get_fork_id(void); @@ -96,4 +111,134 @@ uint32_t OPENSSL_rdtsc(void); size_t OPENSSL_instrument_bus(unsigned int *, size_t); size_t OPENSSL_instrument_bus2(unsigned int *, size_t, size_t); +/* ex_data structures */ + +/* + * Each structure type (sometimes called a class), that supports + * exdata has a stack of callbacks for each instance. + */ +struct ex_callback_st { + long argl; /* Arbitrary long */ + void *argp; /* Arbitrary void * */ + int priority; /* Priority ordering for freeing */ + CRYPTO_EX_new *new_func; + CRYPTO_EX_free *free_func; + CRYPTO_EX_dup *dup_func; +}; + +/* + * The state for each class. This could just be a typedef, but + * a structure allows future changes. + */ +typedef struct ex_callbacks_st { + STACK_OF(EX_CALLBACK) *meth; +} EX_CALLBACKS; + +typedef struct ossl_ex_data_global_st { + CRYPTO_RWLOCK *ex_data_lock; + EX_CALLBACKS ex_data[CRYPTO_EX_INDEX__COUNT]; +} OSSL_EX_DATA_GLOBAL; + + +/* OSSL_LIB_CTX */ + +# define OSSL_LIB_CTX_PROVIDER_STORE_RUN_ONCE_INDEX 0 +# define OSSL_LIB_CTX_DEFAULT_METHOD_STORE_RUN_ONCE_INDEX 1 +# define OSSL_LIB_CTX_METHOD_STORE_RUN_ONCE_INDEX 2 +# define OSSL_LIB_CTX_MAX_RUN_ONCE 3 + +# define OSSL_LIB_CTX_EVP_METHOD_STORE_INDEX 0 +# define OSSL_LIB_CTX_PROVIDER_STORE_INDEX 1 +# define OSSL_LIB_CTX_PROPERTY_DEFN_INDEX 2 +# define OSSL_LIB_CTX_PROPERTY_STRING_INDEX 3 +# define OSSL_LIB_CTX_NAMEMAP_INDEX 4 +# define OSSL_LIB_CTX_DRBG_INDEX 5 +# define OSSL_LIB_CTX_DRBG_NONCE_INDEX 6 +# define OSSL_LIB_CTX_RAND_CRNGT_INDEX 7 +# ifdef FIPS_MODULE +# define OSSL_LIB_CTX_THREAD_EVENT_HANDLER_INDEX 8 +# endif +# define OSSL_LIB_CTX_FIPS_PROV_INDEX 9 +# define OSSL_LIB_CTX_ENCODER_STORE_INDEX 10 +# define OSSL_LIB_CTX_DECODER_STORE_INDEX 11 +# define OSSL_LIB_CTX_SELF_TEST_CB_INDEX 12 +# define OSSL_LIB_CTX_BIO_PROV_INDEX 13 +# define OSSL_LIB_CTX_GLOBAL_PROPERTIES 14 +# define OSSL_LIB_CTX_STORE_LOADER_STORE_INDEX 15 +# define OSSL_LIB_CTX_PROVIDER_CONF_INDEX 16 +# define OSSL_LIB_CTX_BIO_CORE_INDEX 17 +# define OSSL_LIB_CTX_CHILD_PROVIDER_INDEX 18 +# define OSSL_LIB_CTX_MAX_INDEXES 19 + +OSSL_LIB_CTX *ossl_lib_ctx_get_concrete(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_default(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_global_default(OSSL_LIB_CTX *ctx); + +/* Functions to retrieve pointers to data by index */ +void *ossl_lib_ctx_get_data(OSSL_LIB_CTX *, int /* index */); + +void ossl_lib_ctx_default_deinit(void); +OSSL_EX_DATA_GLOBAL *ossl_lib_ctx_get_ex_data_global(OSSL_LIB_CTX *ctx); + +const char *ossl_lib_ctx_get_descriptor(OSSL_LIB_CTX *libctx); + +OSSL_LIB_CTX *ossl_crypto_ex_data_get_ossl_lib_ctx(const CRYPTO_EX_DATA *ad); +int ossl_crypto_new_ex_data_ex(OSSL_LIB_CTX *ctx, int class_index, void *obj, + CRYPTO_EX_DATA *ad); +int ossl_crypto_get_ex_new_index_ex(OSSL_LIB_CTX *ctx, int class_index, + long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func, + int priority); +int ossl_crypto_free_ex_index_ex(OSSL_LIB_CTX *ctx, int class_index, int idx); + +/* Function for simple binary search */ + +/* Flags */ +# define OSSL_BSEARCH_VALUE_ON_NOMATCH 0x01 +# define OSSL_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 + +const void *ossl_bsearch(const void *key, const void *base, int num, + int size, int (*cmp) (const void *, const void *), + int flags); + +char *ossl_sk_ASN1_UTF8STRING2text(STACK_OF(ASN1_UTF8STRING) *text, + const char *sep, size_t max_len); +char *ossl_ipaddr_to_asc(unsigned char *p, int len); + +char *ossl_buf2hexstr_sep(const unsigned char *buf, long buflen, char sep); +unsigned char *ossl_hexstr2buf_sep(const char *str, long *buflen, + const char sep); + +static ossl_inline int ossl_ends_with_dirsep(const char *path) +{ + if (*path != '\0') + path += strlen(path) - 1; +# if defined __VMS + if (*path == ']' || *path == '>' || *path == ':') + return 1; +# elif defined _WIN32 + if (*path == '\\') + return 1; +# endif + return *path == '/'; +} + +static ossl_inline int ossl_is_absolute_path(const char *path) +{ +# if defined __VMS + if (strchr(path, ':') != NULL + || ((path[0] == '[' || path[0] == '<') + && path[1] != '.' && path[1] != '-' + && path[1] != ']' && path[1] != '>')) + return 1; +# elif defined _WIN32 + if (path[0] == '\\' + || (path[0] != '\0' && path[1] == ':')) + return 1; +# endif + return path[0] == '/'; +} + #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dane.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dane.h index 7a39bd7d..a3d78a7f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dane.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dane.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,8 +9,9 @@ #ifndef OSSL_INTERNAL_DANE_H #define OSSL_INTERNAL_DANE_H +# pragma once -#include +# include /*- * Certificate usages: diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/deprecated.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/deprecated.h new file mode 100644 index 00000000..a313a015 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/deprecated.h @@ -0,0 +1,30 @@ +/* + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file should be included by internal code that needs to use APIs + * that have been deprecated for public use, but where those symbols will still + * be available internally. For example the EVP and provider code needs to use + * low level APIs that are otherwise deprecated. + * + * This header *must* be the first OpenSSL header included by a source file. + */ + +#ifndef OSSL_INTERNAL_DEPRECATED_H +# define OSSL_INTERNAL_DEPRECATED_H +# pragma once + +# include + +# undef OPENSSL_NO_DEPRECATED +# define OPENSSL_SUPPRESS_DEPRECATED + +# include + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/der.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/der.h new file mode 100644 index 00000000..f23fabc2 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/der.h @@ -0,0 +1,88 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include +#include "internal/packet.h" + +/* + * NOTE: X.690 numbers the identifier octet bits 1 to 8. + * We use the same numbering in comments here. + */ + +/* Well known primitive tags */ + +/* + * DER UNIVERSAL tags, occupying bits 1-5 in the DER identifier byte + * These are only valid for the UNIVERSAL class. With the other classes, + * these bits have a different meaning. + */ +#define DER_P_EOC 0 /* BER End Of Contents tag */ +#define DER_P_BOOLEAN 1 +#define DER_P_INTEGER 2 +#define DER_P_BIT_STRING 3 +#define DER_P_OCTET_STRING 4 +#define DER_P_NULL 5 +#define DER_P_OBJECT 6 +#define DER_P_OBJECT_DESCRIPTOR 7 +#define DER_P_EXTERNAL 8 +#define DER_P_REAL 9 +#define DER_P_ENUMERATED 10 +#define DER_P_UTF8STRING 12 +#define DER_P_SEQUENCE 16 +#define DER_P_SET 17 +#define DER_P_NUMERICSTRING 18 +#define DER_P_PRINTABLESTRING 19 +#define DER_P_T61STRING 20 +#define DER_P_VIDEOTEXSTRING 21 +#define DER_P_IA5STRING 22 +#define DER_P_UTCTIME 23 +#define DER_P_GENERALIZEDTIME 24 +#define DER_P_GRAPHICSTRING 25 +#define DER_P_ISO64STRING 26 +#define DER_P_GENERALSTRING 27 +#define DER_P_UNIVERSALSTRING 28 +#define DER_P_BMPSTRING 30 + +/* DER Flags, occupying bit 6 in the DER identifier byte */ +#define DER_F_PRIMITIVE 0x00 +#define DER_F_CONSTRUCTED 0x20 + +/* DER classes tags, occupying bits 7-8 in the DER identifier byte */ +#define DER_C_UNIVERSAL 0x00 +#define DER_C_APPLICATION 0x40 +#define DER_C_CONTEXT 0x80 +#define DER_C_PRIVATE 0xC0 + +/* + * Run-time constructors. + * + * They all construct DER backwards, so care should be taken to use them + * that way. + */ + +/* This can be used for all items that don't have a context */ +#define DER_NO_CONTEXT -1 + +int ossl_DER_w_precompiled(WPACKET *pkt, int tag, + const unsigned char *precompiled, + size_t precompiled_n); + +int ossl_DER_w_boolean(WPACKET *pkt, int tag, int b); +int ossl_DER_w_uint32(WPACKET *pkt, int tag, uint32_t v); +int ossl_DER_w_bn(WPACKET *pkt, int tag, const BIGNUM *v); +int ossl_DER_w_null(WPACKET *pkt, int tag); +int ossl_DER_w_octet_string(WPACKET *pkt, int tag, + const unsigned char *data, size_t data_n); +int ossl_DER_w_octet_string_uint32(WPACKET *pkt, int tag, uint32_t value); + +/* + * All constructors for constructed elements have a begin and a end function + */ +int ossl_DER_w_begin_sequence(WPACKET *pkt, int tag); +int ossl_DER_w_end_sequence(WPACKET *pkt, int tag); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dso.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dso.h index c57c0c40..160ddb98 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dso.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dso.h @@ -1,7 +1,7 @@ /* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_DSO_H # define OSSL_INTERNAL_DSO_H +# pragma once # include # include "internal/dsoerr.h" @@ -160,6 +161,4 @@ DSO *DSO_dsobyaddr(void *addr, int flags); */ void *DSO_global_lookup(const char *name); -int ERR_load_DSO_strings(void); - #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dsoerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dsoerr.h index 94d642a2..b1719e83 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dsoerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dsoerr.h @@ -1,8 +1,8 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,73 +10,39 @@ #ifndef OSSL_INTERNAL_DSOERR_H # define OSSL_INTERNAL_DSOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include # ifdef __cplusplus -extern "C" +extern "C" { # endif -int ERR_load_DSO_strings(void); -/* - * DSO function codes. - */ -# define DSO_F_DLFCN_BIND_FUNC 100 -# define DSO_F_DLFCN_LOAD 102 -# define DSO_F_DLFCN_MERGER 130 -# define DSO_F_DLFCN_NAME_CONVERTER 123 -# define DSO_F_DLFCN_UNLOAD 103 -# define DSO_F_DL_BIND_FUNC 104 -# define DSO_F_DL_LOAD 106 -# define DSO_F_DL_MERGER 131 -# define DSO_F_DL_NAME_CONVERTER 124 -# define DSO_F_DL_UNLOAD 107 -# define DSO_F_DSO_BIND_FUNC 108 -# define DSO_F_DSO_CONVERT_FILENAME 126 -# define DSO_F_DSO_CTRL 110 -# define DSO_F_DSO_FREE 111 -# define DSO_F_DSO_GET_FILENAME 127 -# define DSO_F_DSO_GLOBAL_LOOKUP 139 -# define DSO_F_DSO_LOAD 112 -# define DSO_F_DSO_MERGE 132 -# define DSO_F_DSO_NEW_METHOD 113 -# define DSO_F_DSO_PATHBYADDR 105 -# define DSO_F_DSO_SET_FILENAME 129 -# define DSO_F_DSO_UP_REF 114 -# define DSO_F_VMS_BIND_SYM 115 -# define DSO_F_VMS_LOAD 116 -# define DSO_F_VMS_MERGER 133 -# define DSO_F_VMS_UNLOAD 117 -# define DSO_F_WIN32_BIND_FUNC 101 -# define DSO_F_WIN32_GLOBALLOOKUP 142 -# define DSO_F_WIN32_JOINER 135 -# define DSO_F_WIN32_LOAD 120 -# define DSO_F_WIN32_MERGER 134 -# define DSO_F_WIN32_NAME_CONVERTER 125 -# define DSO_F_WIN32_PATHBYADDR 109 -# define DSO_F_WIN32_SPLITTER 136 -# define DSO_F_WIN32_UNLOAD 121 +int ossl_err_load_DSO_strings(void); /* * DSO reason codes. */ -# define DSO_R_CTRL_FAILED 100 -# define DSO_R_DSO_ALREADY_LOADED 110 -# define DSO_R_EMPTY_FILE_STRUCTURE 113 -# define DSO_R_FAILURE 114 -# define DSO_R_FILENAME_TOO_BIG 101 -# define DSO_R_FINISH_FAILED 102 -# define DSO_R_INCORRECT_FILE_SYNTAX 115 -# define DSO_R_LOAD_FAILED 103 -# define DSO_R_NAME_TRANSLATION_FAILED 109 -# define DSO_R_NO_FILENAME 111 -# define DSO_R_NULL_HANDLE 104 -# define DSO_R_SET_FILENAME_FAILED 112 -# define DSO_R_STACK_ERROR 105 -# define DSO_R_SYM_FAILURE 106 -# define DSO_R_UNLOAD_FAILED 107 -# define DSO_R_UNSUPPORTED 108 +# define DSO_R_CTRL_FAILED 100 +# define DSO_R_DSO_ALREADY_LOADED 110 +# define DSO_R_EMPTY_FILE_STRUCTURE 113 +# define DSO_R_FAILURE 114 +# define DSO_R_FILENAME_TOO_BIG 101 +# define DSO_R_FINISH_FAILED 102 +# define DSO_R_INCORRECT_FILE_SYNTAX 115 +# define DSO_R_LOAD_FAILED 103 +# define DSO_R_NAME_TRANSLATION_FAILED 109 +# define DSO_R_NO_FILENAME 111 +# define DSO_R_NULL_HANDLE 104 +# define DSO_R_SET_FILENAME_FAILED 112 +# define DSO_R_STACK_ERROR 105 +# define DSO_R_SYM_FAILURE 106 +# define DSO_R_UNLOAD_FAILED 107 +# define DSO_R_UNSUPPORTED 108 + +# ifdef __cplusplus +} +# endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/e_os.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/e_os.h new file mode 100644 index 00000000..7fdc3899 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/e_os.h @@ -0,0 +1,432 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_E_OS_H +# define OSSL_E_OS_H + +# include +# include + +# include +# include +# include "internal/numbers.h" /* Ensure the definition of SIZE_MAX */ + +/* + * contains what we can justify to make visible to the + * outside; this file e_os.h is not part of the exported interface. + */ + +# if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) +# define NO_CHMOD +# define NO_SYSLOG +# endif + +# define get_last_sys_error() errno +# define clear_sys_error() errno=0 +# define set_sys_error(e) errno=(e) + +/******************************************************************** + The Microsoft section + ********************************************************************/ +# if defined(OPENSSL_SYS_WIN32) && !defined(WIN32) +# define WIN32 +# endif +# if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +# endif +# if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS) +# define MSDOS +# endif + +# ifdef WIN32 +# undef get_last_sys_error +# undef clear_sys_error +# undef set_sys_error +# define get_last_sys_error() GetLastError() +# define clear_sys_error() SetLastError(0) +# define set_sys_error(e) SetLastError(e) +# if !defined(WINNT) +# define WIN_CONSOLE_BUG +# endif +# else +# endif + +# if (defined(WINDOWS) || defined(MSDOS)) + +# ifdef __DJGPP__ +# include +# include +# define _setmode setmode +# define _O_TEXT O_TEXT +# define _O_BINARY O_BINARY +# undef DEVRANDOM_EGD /* Neither MS-DOS nor FreeDOS provide 'egd' sockets. */ +# undef DEVRANDOM +# define DEVRANDOM "/dev/urandom\x24" +# endif /* __DJGPP__ */ + +# ifndef S_IFDIR +# define S_IFDIR _S_IFDIR +# endif + +# ifndef S_IFMT +# define S_IFMT _S_IFMT +# endif + +# if !defined(WINNT) && !defined(__DJGPP__) +# define NO_SYSLOG +# endif + +# ifdef WINDOWS +# if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT) + /* + * Defining _WIN32_WINNT here in e_os.h implies certain "discipline." + * Most notably we ought to check for availability of each specific + * routine that was introduced after denoted _WIN32_WINNT with + * GetProcAddress(). Normally newer functions are masked with higher + * _WIN32_WINNT in SDK headers. So that if you wish to use them in + * some module, you'd need to override _WIN32_WINNT definition in + * the target module in order to "reach for" prototypes, but replace + * calls to new functions with indirect calls. Alternatively it + * might be possible to achieve the goal by /DELAYLOAD-ing .DLLs + * and check for current OS version instead. + */ +# define _WIN32_WINNT 0x0501 +# endif +# if defined(_WIN32_WINNT) || defined(_WIN32_WCE) + /* + * Just like defining _WIN32_WINNT including winsock2.h implies + * certain "discipline" for maintaining [broad] binary compatibility. + * As long as structures are invariant among Winsock versions, + * it's sufficient to check for specific Winsock2 API availability + * at run-time [DSO_global_lookup is recommended]... + */ +# include +# include + /* + * Clang-based C++Builder 10.3.3 toolchains cannot find C inline + * definitions at link-time. This header defines WspiapiLoad() as an + * __inline function. https://quality.embarcadero.com/browse/RSP-33806 + */ +# if !defined(__BORLANDC__) || !defined(__clang__) +# include +# endif + /* yes, they have to be #included prior to */ +# endif +# include +# include +# include +# include +# if defined(_WIN32_WCE) && !defined(EACCES) +# define EACCES 13 +# endif +# include +# ifdef _WIN64 +# define strlen(s) _strlen31(s) +/* cut strings to 2GB */ +static __inline unsigned int _strlen31(const char *str) +{ + unsigned int len = 0; + while (*str && len < 0x80000000U) + str++, len++; + return len & 0x7FFFFFFF; +} +# endif +# include +# if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin) +# if _MSC_VER>=1300 && _MSC_VER<1600 +# undef stdin +# undef stdout +# undef stderr +FILE *__iob_func(); +# define stdin (&__iob_func()[0]) +# define stdout (&__iob_func()[1]) +# define stderr (&__iob_func()[2]) +# endif +# endif +# endif +# include +# include + +# ifdef OPENSSL_SYS_WINCE +# define OPENSSL_NO_POSIX_IO +# endif + +# define EXIT(n) exit(n) +# define LIST_SEPARATOR_CHAR ';' +# ifndef W_OK +# define W_OK 2 +# endif +# ifndef R_OK +# define R_OK 4 +# endif +# ifdef OPENSSL_SYS_WINCE +# define DEFAULT_HOME "" +# else +# define DEFAULT_HOME "C:" +# endif + +/* Avoid Visual Studio 13 GetVersion deprecated problems */ +# if defined(_MSC_VER) && _MSC_VER>=1800 +# define check_winnt() (1) +# define check_win_minplat(x) (1) +# else +# define check_winnt() (GetVersion() < 0x80000000) +# define check_win_minplat(x) (LOBYTE(LOWORD(GetVersion())) >= (x)) +# endif + +# else /* The non-microsoft world */ + +# if defined(OPENSSL_SYS_VXWORKS) +# include +# else +# include +# endif + +# ifdef OPENSSL_SYS_VMS +# define VMS 1 + /* + * some programs don't include stdlib, so exit() and others give implicit + * function warnings + */ +# include +# if defined(__DECC) +# include +# else +# include +# endif +# define LIST_SEPARATOR_CHAR ',' + /* We don't have any well-defined random devices on VMS, yet... */ +# undef DEVRANDOM + /*- + We need to do this since VMS has the following coding on status codes: + + Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ... + The important thing to know is that odd numbers are considered + good, while even ones are considered errors. + Bits 3-15: actual status number + Bits 16-27: facility number. 0 is considered "unknown" + Bits 28-31: control bits. If bit 28 is set, the shell won't try to + output the message (which, for random codes, just looks ugly) + + So, what we do here is to change 0 to 1 to get the default success status, + and everything else is shifted up to fit into the status number field, and + the status is tagged as an error, which is what is wanted here. + + Finally, we add the VMS C facility code 0x35a000, because there are some + programs, such as Perl, that will reinterpret the code back to something + POSIX. 'man perlvms' explains it further. + + NOTE: the perlvms manual wants to turn all codes 2 to 255 into success + codes (status type = 1). I couldn't disagree more. Fortunately, the + status type doesn't seem to bother Perl. + -- Richard Levitte + */ +# define EXIT(n) exit((n) ? (((n) << 3) | 2 | 0x10000000 | 0x35a000) : 1) + +# define DEFAULT_HOME "SYS$LOGIN:" + +# else + /* !defined VMS */ +# include +# include +# ifdef OPENSSL_SYS_WIN32_CYGWIN +# include +# include +# endif + +# define LIST_SEPARATOR_CHAR ':' +# define EXIT(n) exit(n) +# endif + +# endif + +/***********************************************/ + +# if defined(OPENSSL_SYS_WINDOWS) +# if (_MSC_VER >= 1310) && !defined(_WIN32_WCE) +# define open _open +# define fdopen _fdopen +# define close _close +# ifndef strdup +# define strdup _strdup +# endif +# define unlink _unlink +# define fileno _fileno +# endif +# else +# include +# endif + +/* vxworks */ +# if defined(OPENSSL_SYS_VXWORKS) +# include +# include +# include +# include +# include +# include + +# define TTY_STRUCT int +# define sleep(a) taskDelay((a) * sysClkRateGet()) + +/* + * NOTE: these are implemented by helpers in database app! if the database is + * not linked, we need to implement them elsewhere + */ +struct hostent *gethostbyname(const char *name); +struct hostent *gethostbyaddr(const char *addr, int length, int type); +struct servent *getservbyname(const char *name, const char *proto); + +# endif +/* end vxworks */ + +/* system-specific variants defining ossl_sleep() */ +#if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__) +# include +static ossl_inline void ossl_sleep(unsigned long millis) +{ +# ifdef OPENSSL_SYS_VXWORKS + struct timespec ts; + ts.tv_sec = (long int) (millis / 1000); + ts.tv_nsec = (long int) (millis % 1000) * 1000000ul; + nanosleep(&ts, NULL); +# elif defined(__TANDEM) +# if !defined(_REENTRANT) +# include + /* HPNS does not support usleep for non threaded apps */ + PROCESS_DELAY_(millis * 1000); +# elif defined(_SPT_MODEL_) +# include +# include + usleep(millis * 1000); +# else + usleep(millis * 1000); +# endif +# else + usleep(millis * 1000); +# endif +} +#elif defined(_WIN32) +# include +static ossl_inline void ossl_sleep(unsigned long millis) +{ + Sleep(millis); +} +#else +/* Fallback to a busy wait */ +static ossl_inline void ossl_sleep(unsigned long millis) +{ + struct timeval start, now; + unsigned long elapsedms; + + gettimeofday(&start, NULL); + do { + gettimeofday(&now, NULL); + elapsedms = (((now.tv_sec - start.tv_sec) * 1000000) + + now.tv_usec - start.tv_usec) / 1000; + } while (elapsedms < millis); +} +#endif /* defined OPENSSL_SYS_UNIX */ + +/* ----------------------------- HP NonStop -------------------------------- */ +/* Required to support platform variant without getpid() and pid_t. */ +# if defined(__TANDEM) && defined(_GUARDIAN_TARGET) +# include +# include +# define getservbyname(name,proto) getservbyname((char*)name,proto) +# define gethostbyname(name) gethostbyname((char*)name) +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# ifdef NO_GETPID +inline int nssgetpid(); +# ifndef NSSGETPID_MACRO +# define NSSGETPID_MACRO +# include +# include + inline int nssgetpid() + { + short phandle[10]={0}; + union pseudo_pid { + struct { + short cpu; + short pin; + } cpu_pin ; + int ppid; + } ppid = { 0 }; + PROCESSHANDLE_GETMINE_(phandle); + PROCESSHANDLE_DECOMPOSE_(phandle, &ppid.cpu_pin.cpu, &ppid.cpu_pin.pin); + return ppid.ppid; + } +# define getpid(a) nssgetpid(a) +# endif /* NSSGETPID_MACRO */ +# endif /* NO_GETPID */ +/*# define setsockopt(a,b,c,d,f) setsockopt(a,b,c,(char*)d,f)*/ +/*# define getsockopt(a,b,c,d,f) getsockopt(a,b,c,(char*)d,f)*/ +/*# define connect(a,b,c) connect(a,(struct sockaddr *)b,c)*/ +/*# define bind(a,b,c) bind(a,(struct sockaddr *)b,c)*/ +/*# define sendto(a,b,c,d,e,f) sendto(a,(char*)b,c,d,(struct sockaddr *)e,f)*/ +# if defined(OPENSSL_THREADS) && !defined(_PUT_MODEL_) + /* + * HPNS SPT threads + */ +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# undef close +# define close spt_close +/* +# define get_last_socket_error() errno +# define clear_socket_error() errno=0 +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# define closesocket(s) close(s) +# define readsocket(s,b,n) read((s),(char*)(b),(n)) +# define writesocket(s,b,n) write((s),(char*)(b),(n) +*/ +# define accept(a,b,c) accept(a,(struct sockaddr *)b,c) +# define recvfrom(a,b,c,d,e,f) recvfrom(a,b,(socklen_t)c,d,e,f) +# endif +# endif + +# ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION +# define CRYPTO_memcmp memcmp +# endif + +# ifndef OPENSSL_NO_SECURE_MEMORY + /* unistd.h defines _POSIX_VERSION */ +# if (defined(OPENSSL_SYS_UNIX) \ + && ( (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) \ + || defined(__sun) || defined(__hpux) || defined(__sgi) \ + || defined(__osf__) )) \ + || defined(_WIN32) + /* secure memory is implemented */ +# else +# define OPENSSL_NO_SECURE_MEMORY +# endif +# endif + +/* + * str[n]casecmp_l is defined in POSIX 2008-01. Value is taken accordingly + * https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html + * There are also equivalent functions on Windows. + * There is no locale_t on NONSTOP. + */ +# if defined(OPENSSL_SYS_WINDOWS) +# define locale_t _locale_t +# define freelocale _free_locale +# define strcasecmp_l _stricmp_l +# define strncasecmp_l _strnicmp_l +# define strcasecmp _stricmp +# define strncasecmp _strnicmp +# elif !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200809L \ + || defined(OPENSSL_SYS_TANDEM) +# ifndef OPENSSL_NO_LOCALE +# define OPENSSL_NO_LOCALE +# endif +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/endian.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/endian.h new file mode 100644 index 00000000..8b34e03e --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/endian.h @@ -0,0 +1,51 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_ENDIAN_H +# define OSSL_INTERNAL_ENDIAN_H +# pragma once + +/* + * IS_LITTLE_ENDIAN and IS_BIG_ENDIAN can be used to detect the endiannes + * at compile time. To use it, DECLARE_IS_ENDIAN must be used to declare + * a variable. + * + * L_ENDIAN and B_ENDIAN can be used at preprocessor time. They can be set + * in the configarion using the lib_cppflags variable. If neither is + * set, it will fall back to code works with either endianness. + */ + +# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) +# define DECLARE_IS_ENDIAN const int ossl_is_little_endian = __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +# define IS_LITTLE_ENDIAN (ossl_is_little_endian) +# define IS_BIG_ENDIAN (!ossl_is_little_endian) +# if defined(L_ENDIAN) && (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) +# error "L_ENDIAN defined on a big endian machine" +# endif +# if defined(B_ENDIAN) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +# error "B_ENDIAN defined on a little endian machine" +# endif +# if !defined(L_ENDIAN) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +# define L_ENDIAN +# endif +# if !defined(B_ENDIAN) && (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) +# define B_ENDIAN +# endif +# else +# define DECLARE_IS_ENDIAN \ + const union { \ + long one; \ + char little; \ + } ossl_is_endian = { 1 } + +# define IS_LITTLE_ENDIAN (ossl_is_endian.little != 0) +# define IS_BIG_ENDIAN (ossl_is_endian.little == 0) +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/err.h index 88dde705..d8a308f0 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/err.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_ERR_H # define OSSL_INTERNAL_ERR_H +# pragma once void err_free_strings_int(void); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ffc.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ffc.h new file mode 100644 index 00000000..c4f09087 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ffc.h @@ -0,0 +1,216 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_FFC_H +# define OSSL_INTERNAL_FFC_H +# pragma once + +# include +# include +# include +# include /* Uses Error codes from DH */ +# include +# include +# include "internal/sizes.h" + +/* Default value for gindex when canonical generation of g is not used */ +# define FFC_UNVERIFIABLE_GINDEX -1 + +/* The different types of FFC keys */ +# define FFC_PARAM_TYPE_DSA 0 +# define FFC_PARAM_TYPE_DH 1 + +/* + * The mode used by functions that share code for both generation and + * verification. See ossl_ffc_params_FIPS186_4_gen_verify(). + */ +#define FFC_PARAM_MODE_VERIFY 0 +#define FFC_PARAM_MODE_GENERATE 1 + +/* Return codes for generation and validation of FFC parameters */ +#define FFC_PARAM_RET_STATUS_FAILED 0 +#define FFC_PARAM_RET_STATUS_SUCCESS 1 +/* Returned if validating and g is only partially verifiable */ +#define FFC_PARAM_RET_STATUS_UNVERIFIABLE_G 2 + +/* Validation flags */ +# define FFC_PARAM_FLAG_VALIDATE_PQ 0x01 +# define FFC_PARAM_FLAG_VALIDATE_G 0x02 +# define FFC_PARAM_FLAG_VALIDATE_PQG \ + (FFC_PARAM_FLAG_VALIDATE_PQ | FFC_PARAM_FLAG_VALIDATE_G) +#define FFC_PARAM_FLAG_VALIDATE_LEGACY 0x04 + +/* + * NB: These values must align with the equivalently named macros in + * openssl/dh.h. We cannot use those macros here in case DH has been disabled. + */ +# define FFC_CHECK_P_NOT_PRIME 0x00001 +# define FFC_CHECK_P_NOT_SAFE_PRIME 0x00002 +# define FFC_CHECK_UNKNOWN_GENERATOR 0x00004 +# define FFC_CHECK_NOT_SUITABLE_GENERATOR 0x00008 +# define FFC_CHECK_Q_NOT_PRIME 0x00010 +# define FFC_CHECK_INVALID_Q_VALUE 0x00020 +# define FFC_CHECK_INVALID_J_VALUE 0x00040 + +# define FFC_CHECK_BAD_LN_PAIR 0x00080 +# define FFC_CHECK_INVALID_SEED_SIZE 0x00100 +# define FFC_CHECK_MISSING_SEED_OR_COUNTER 0x00200 +# define FFC_CHECK_INVALID_G 0x00400 +# define FFC_CHECK_INVALID_PQ 0x00800 +# define FFC_CHECK_INVALID_COUNTER 0x01000 +# define FFC_CHECK_P_MISMATCH 0x02000 +# define FFC_CHECK_Q_MISMATCH 0x04000 +# define FFC_CHECK_G_MISMATCH 0x08000 +# define FFC_CHECK_COUNTER_MISMATCH 0x10000 + +/* Validation Return codes */ +# define FFC_ERROR_PUBKEY_TOO_SMALL 0x01 +# define FFC_ERROR_PUBKEY_TOO_LARGE 0x02 +# define FFC_ERROR_PUBKEY_INVALID 0x04 +# define FFC_ERROR_NOT_SUITABLE_GENERATOR 0x08 +# define FFC_ERROR_PRIVKEY_TOO_SMALL 0x10 +# define FFC_ERROR_PRIVKEY_TOO_LARGE 0x20 +# define FFC_ERROR_PASSED_NULL_PARAM 0x40 + +/* + * Finite field cryptography (FFC) domain parameters are used by DH and DSA. + * Refer to FIPS186_4 Appendix A & B. + */ +typedef struct ffc_params_st { + /* Primes */ + BIGNUM *p; + BIGNUM *q; + /* Generator */ + BIGNUM *g; + /* DH X9.42 Optional Subgroup factor j >= 2 where p = j * q + 1 */ + BIGNUM *j; + + /* Required for FIPS186_4 validation of p, q and optionally canonical g */ + unsigned char *seed; + /* If this value is zero the hash size is used as the seed length */ + size_t seedlen; + /* Required for FIPS186_4 validation of p and q */ + int pcounter; + int nid; /* The identity of a named group */ + + /* + * Required for FIPS186_4 generation & validation of canonical g. + * It uses unverifiable g if this value is -1. + */ + int gindex; + int h; /* loop counter for unverifiable g */ + + unsigned int flags; + /* + * The digest to use for generation or validation. If this value is NULL, + * then the digest is chosen using the value of N. + */ + const char *mdname; + const char *mdprops; + /* Default key length for known named groups according to RFC7919 */ + int keylength; +} FFC_PARAMS; + +void ossl_ffc_params_init(FFC_PARAMS *params); +void ossl_ffc_params_cleanup(FFC_PARAMS *params); +void ossl_ffc_params_set0_pqg(FFC_PARAMS *params, BIGNUM *p, BIGNUM *q, + BIGNUM *g); +void ossl_ffc_params_get0_pqg(const FFC_PARAMS *params, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +void ossl_ffc_params_set0_j(FFC_PARAMS *d, BIGNUM *j); +int ossl_ffc_params_set_seed(FFC_PARAMS *params, + const unsigned char *seed, size_t seedlen); +void ossl_ffc_params_set_gindex(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_pcounter(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_h(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_flags(FFC_PARAMS *params, unsigned int flags); +void ossl_ffc_params_enable_flags(FFC_PARAMS *params, unsigned int flags, + int enable); +int ossl_ffc_set_digest(FFC_PARAMS *params, const char *alg, const char *props); + +int ossl_ffc_params_set_validate_params(FFC_PARAMS *params, + const unsigned char *seed, + size_t seedlen, int counter); +void ossl_ffc_params_get_validate_params(const FFC_PARAMS *params, + unsigned char **seed, size_t *seedlen, + int *pcounter); + +int ossl_ffc_params_copy(FFC_PARAMS *dst, const FFC_PARAMS *src); +int ossl_ffc_params_cmp(const FFC_PARAMS *a, const FFC_PARAMS *b, int ignore_q); + +#ifndef FIPS_MODULE +int ossl_ffc_params_print(BIO *bp, const FFC_PARAMS *ffc, int indent); +#endif /* FIPS_MODULE */ + + +int ossl_ffc_params_FIPS186_4_generate(OSSL_LIB_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + int *res, BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_generate(OSSL_LIB_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + int *res, BN_GENCB *cb); + +int ossl_ffc_params_FIPS186_4_gen_verify(OSSL_LIB_CTX *libctx, + FFC_PARAMS *params, int mode, int type, + size_t L, size_t N, int *res, + BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_gen_verify(OSSL_LIB_CTX *libctx, + FFC_PARAMS *params, int mode, int type, + size_t L, size_t N, int *res, + BN_GENCB *cb); + +int ossl_ffc_params_simple_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int paramstype, int *res); +int ossl_ffc_params_full_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int paramstype, int *res); +int ossl_ffc_params_FIPS186_4_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int type, int *res, BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int type, int *res, BN_GENCB *cb); + +int ossl_ffc_generate_private_key(BN_CTX *ctx, const FFC_PARAMS *params, + int N, int s, BIGNUM *priv); + +int ossl_ffc_params_validate_unverifiable_g(BN_CTX *ctx, BN_MONT_CTX *mont, + const BIGNUM *p, const BIGNUM *q, + const BIGNUM *g, BIGNUM *tmp, + int *ret); + +int ossl_ffc_validate_public_key(const FFC_PARAMS *params, + const BIGNUM *pub_key, int *ret); +int ossl_ffc_validate_public_key_partial(const FFC_PARAMS *params, + const BIGNUM *pub_key, int *ret); +int ossl_ffc_validate_private_key(const BIGNUM *upper, const BIGNUM *priv_key, + int *ret); + +int ossl_ffc_params_todata(const FFC_PARAMS *ffc, OSSL_PARAM_BLD *tmpl, + OSSL_PARAM params[]); +int ossl_ffc_params_fromdata(FFC_PARAMS *ffc, const OSSL_PARAM params[]); + +typedef struct dh_named_group_st DH_NAMED_GROUP; +const DH_NAMED_GROUP *ossl_ffc_name_to_dh_named_group(const char *name); +const DH_NAMED_GROUP *ossl_ffc_uid_to_dh_named_group(int uid); +#ifndef OPENSSL_NO_DH +const DH_NAMED_GROUP *ossl_ffc_numbers_to_dh_named_group(const BIGNUM *p, + const BIGNUM *q, + const BIGNUM *g); +#endif +int ossl_ffc_named_group_get_uid(const DH_NAMED_GROUP *group); +const char *ossl_ffc_named_group_get_name(const DH_NAMED_GROUP *); +#ifndef OPENSSL_NO_DH +int ossl_ffc_named_group_get_keylength(const DH_NAMED_GROUP *group); +const BIGNUM *ossl_ffc_named_group_get_q(const DH_NAMED_GROUP *group); +int ossl_ffc_named_group_set(FFC_PARAMS *ffc, const DH_NAMED_GROUP *group); +#endif + +#endif /* OSSL_INTERNAL_FFC_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ktls.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ktls.h new file mode 100644 index 00000000..95492fd0 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ktls.h @@ -0,0 +1,404 @@ +/* + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#if defined(OPENSSL_SYS_LINUX) +# ifndef OPENSSL_NO_KTLS +# include +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) +# define OPENSSL_NO_KTLS +# ifndef PEDANTIC +# warning "KTLS requires Kernel Headers >= 4.13.0" +# warning "Skipping Compilation of KTLS" +# endif +# endif +# endif +#endif + +#ifndef HEADER_INTERNAL_KTLS +# define HEADER_INTERNAL_KTLS +# pragma once + +# ifndef OPENSSL_NO_KTLS + +# if defined(__FreeBSD__) +# include +# include +# include +# include +# include +# include + +# ifndef TCP_RXTLS_ENABLE +# define OPENSSL_NO_KTLS_RX +# endif +# define OPENSSL_KTLS_AES_GCM_128 +# define OPENSSL_KTLS_AES_GCM_256 +# define OPENSSL_KTLS_TLS13 + +typedef struct tls_enable ktls_crypto_info_t; + +/* + * FreeBSD does not require any additional steps to enable KTLS before + * setting keys. + */ +static ossl_inline int ktls_enable(int fd) +{ + return 1; +} + +/* + * The TCP_TXTLS_ENABLE socket option marks the outgoing socket buffer + * as using TLS. If successful, then data sent using this socket will + * be encrypted and encapsulated in TLS records using the tls_en + * provided here. + * + * The TCP_RXTLS_ENABLE socket option marks the incoming socket buffer + * as using TLS. If successful, then data received for this socket will + * be authenticated and decrypted using the tls_en provided here. + */ +static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *tls_en, int is_tx) +{ + if (is_tx) + return setsockopt(fd, IPPROTO_TCP, TCP_TXTLS_ENABLE, + tls_en, sizeof(*tls_en)) ? 0 : 1; +# ifndef OPENSSL_NO_KTLS_RX + return setsockopt(fd, IPPROTO_TCP, TCP_RXTLS_ENABLE, tls_en, + sizeof(*tls_en)) ? 0 : 1; +# else + return 0; +# endif +} + +/* + * Send a TLS record using the tls_en provided in ktls_start and use + * record_type instead of the default SSL3_RT_APPLICATION_DATA. + * When the socket is non-blocking, then this call either returns EAGAIN or + * the entire record is pushed to TCP. It is impossible to send a partial + * record using this control message. + */ +static ossl_inline int ktls_send_ctrl_message(int fd, unsigned char record_type, + const void *data, size_t length) +{ + struct msghdr msg = { 0 }; + int cmsg_len = sizeof(record_type); + struct cmsghdr *cmsg; + char buf[CMSG_SPACE(cmsg_len)]; + struct iovec msg_iov; /* Vector of data to send/receive into */ + + msg.msg_control = buf; + msg.msg_controllen = sizeof(buf); + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_level = IPPROTO_TCP; + cmsg->cmsg_type = TLS_SET_RECORD_TYPE; + cmsg->cmsg_len = CMSG_LEN(cmsg_len); + *((unsigned char *)CMSG_DATA(cmsg)) = record_type; + msg.msg_controllen = cmsg->cmsg_len; + + msg_iov.iov_base = (void *)data; + msg_iov.iov_len = length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + return sendmsg(fd, &msg, 0); +} + +# ifdef OPENSSL_NO_KTLS_RX + +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + return -1; +} + +# else /* !defined(OPENSSL_NO_KTLS_RX) */ + +/* + * Receive a TLS record using the tls_en provided in ktls_start. The + * kernel strips any explicit IV and authentication tag, but provides + * the TLS record header via a control message. If there is an error + * with the TLS record such as an invalid header, invalid padding, or + * authentication failure recvmsg() will fail with an error. + */ +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + struct msghdr msg = { 0 }; + int cmsg_len = sizeof(struct tls_get_record); + struct tls_get_record *tgr; + struct cmsghdr *cmsg; + char buf[CMSG_SPACE(cmsg_len)]; + struct iovec msg_iov; /* Vector of data to send/receive into */ + int ret; + unsigned char *p = data; + const size_t prepend_length = SSL3_RT_HEADER_LENGTH; + + if (length <= prepend_length) { + errno = EINVAL; + return -1; + } + + msg.msg_control = buf; + msg.msg_controllen = sizeof(buf); + + msg_iov.iov_base = p + prepend_length; + msg_iov.iov_len = length - prepend_length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + ret = recvmsg(fd, &msg, 0); + if (ret <= 0) + return ret; + + if ((msg.msg_flags & (MSG_EOR | MSG_CTRUNC)) != MSG_EOR) { + errno = EMSGSIZE; + return -1; + } + + if (msg.msg_controllen == 0) { + errno = EBADMSG; + return -1; + } + + cmsg = CMSG_FIRSTHDR(&msg); + if (cmsg->cmsg_level != IPPROTO_TCP || cmsg->cmsg_type != TLS_GET_RECORD + || cmsg->cmsg_len != CMSG_LEN(cmsg_len)) { + errno = EBADMSG; + return -1; + } + + tgr = (struct tls_get_record *)CMSG_DATA(cmsg); + p[0] = tgr->tls_type; + p[1] = tgr->tls_vmajor; + p[2] = tgr->tls_vminor; + *(uint16_t *)(p + 3) = htons(ret); + + return ret + prepend_length; +} + +# endif /* OPENSSL_NO_KTLS_RX */ + +/* + * KTLS enables the sendfile system call to send data from a file over + * TLS. + */ +static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, + size_t size, int flags) +{ + off_t sbytes = 0; + int ret; + + ret = sendfile(fd, s, off, size, NULL, &sbytes, flags); + if (ret == -1 && sbytes == 0) + return -1; + return sbytes; +} + +# endif /* __FreeBSD__ */ + +# if defined(OPENSSL_SYS_LINUX) + +# include +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0) +# define OPENSSL_NO_KTLS_RX +# ifndef PEDANTIC +# warning "KTLS requires Kernel Headers >= 4.17.0 for receiving" +# warning "Skipping Compilation of KTLS receive data path" +# endif +# endif +# define OPENSSL_KTLS_AES_GCM_128 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) +# define OPENSSL_KTLS_AES_GCM_256 +# define OPENSSL_KTLS_TLS13 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0) +# define OPENSSL_KTLS_AES_CCM_128 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0) +# ifndef OPENSSL_NO_CHACHA +# define OPENSSL_KTLS_CHACHA20_POLY1305 +# endif +# endif +# endif +# endif + +# include +# include +# include +# include +# include +# include + +# ifndef SOL_TLS +# define SOL_TLS 282 +# endif + +# ifndef TCP_ULP +# define TCP_ULP 31 +# endif + +# ifndef TLS_RX +# define TLS_RX 2 +# endif + +struct tls_crypto_info_all { + union { +# ifdef OPENSSL_KTLS_AES_GCM_128 + struct tls12_crypto_info_aes_gcm_128 gcm128; +# endif +# ifdef OPENSSL_KTLS_AES_GCM_256 + struct tls12_crypto_info_aes_gcm_256 gcm256; +# endif +# ifdef OPENSSL_KTLS_AES_CCM_128 + struct tls12_crypto_info_aes_ccm_128 ccm128; +# endif +# ifdef OPENSSL_KTLS_CHACHA20_POLY1305 + struct tls12_crypto_info_chacha20_poly1305 chacha20poly1305; +# endif + }; + size_t tls_crypto_info_len; +}; + +typedef struct tls_crypto_info_all ktls_crypto_info_t; + +/* + * When successful, this socket option doesn't change the behaviour of the + * TCP socket, except changing the TCP setsockopt handler to enable the + * processing of SOL_TLS socket options. All other functionality remains the + * same. + */ +static ossl_inline int ktls_enable(int fd) +{ + return setsockopt(fd, SOL_TCP, TCP_ULP, "tls", sizeof("tls")) ? 0 : 1; +} + +/* + * The TLS_TX socket option changes the send/sendmsg handlers of the TCP socket. + * If successful, then data sent using this socket will be encrypted and + * encapsulated in TLS records using the crypto_info provided here. + * The TLS_RX socket option changes the recv/recvmsg handlers of the TCP socket. + * If successful, then data received using this socket will be decrypted, + * authenticated and decapsulated using the crypto_info provided here. + */ +static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *crypto_info, + int is_tx) +{ + return setsockopt(fd, SOL_TLS, is_tx ? TLS_TX : TLS_RX, + crypto_info, crypto_info->tls_crypto_info_len) ? 0 : 1; +} + +/* + * Send a TLS record using the crypto_info provided in ktls_start and use + * record_type instead of the default SSL3_RT_APPLICATION_DATA. + * When the socket is non-blocking, then this call either returns EAGAIN or + * the entire record is pushed to TCP. It is impossible to send a partial + * record using this control message. + */ +static ossl_inline int ktls_send_ctrl_message(int fd, unsigned char record_type, + const void *data, size_t length) +{ + struct msghdr msg; + int cmsg_len = sizeof(record_type); + struct cmsghdr *cmsg; + union { + struct cmsghdr hdr; + char buf[CMSG_SPACE(sizeof(unsigned char))]; + } cmsgbuf; + struct iovec msg_iov; /* Vector of data to send/receive into */ + + memset(&msg, 0, sizeof(msg)); + msg.msg_control = cmsgbuf.buf; + msg.msg_controllen = sizeof(cmsgbuf.buf); + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_level = SOL_TLS; + cmsg->cmsg_type = TLS_SET_RECORD_TYPE; + cmsg->cmsg_len = CMSG_LEN(cmsg_len); + *((unsigned char *)CMSG_DATA(cmsg)) = record_type; + msg.msg_controllen = cmsg->cmsg_len; + + msg_iov.iov_base = (void *)data; + msg_iov.iov_len = length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + return sendmsg(fd, &msg, 0); +} + +/* + * KTLS enables the sendfile system call to send data from a file over TLS. + * @flags are ignored on Linux. (placeholder for FreeBSD sendfile) + * */ +static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, size_t size, int flags) +{ + return sendfile(s, fd, &off, size); +} + +# ifdef OPENSSL_NO_KTLS_RX + + +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + return -1; +} + +# else /* !defined(OPENSSL_NO_KTLS_RX) */ + +/* + * Receive a TLS record using the crypto_info provided in ktls_start. + * The kernel strips the TLS record header, IV and authentication tag, + * returning only the plaintext data or an error on failure. + * We add the TLS record header here to satisfy routines in rec_layer_s3.c + */ +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + struct msghdr msg; + struct cmsghdr *cmsg; + union { + struct cmsghdr hdr; + char buf[CMSG_SPACE(sizeof(unsigned char))]; + } cmsgbuf; + struct iovec msg_iov; + int ret; + unsigned char *p = data; + const size_t prepend_length = SSL3_RT_HEADER_LENGTH; + + if (length < prepend_length + EVP_GCM_TLS_TAG_LEN) { + errno = EINVAL; + return -1; + } + + memset(&msg, 0, sizeof(msg)); + msg.msg_control = cmsgbuf.buf; + msg.msg_controllen = sizeof(cmsgbuf.buf); + + msg_iov.iov_base = p + prepend_length; + msg_iov.iov_len = length - prepend_length - EVP_GCM_TLS_TAG_LEN; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + ret = recvmsg(fd, &msg, 0); + if (ret < 0) + return ret; + + if (msg.msg_controllen > 0) { + cmsg = CMSG_FIRSTHDR(&msg); + if (cmsg->cmsg_type == TLS_GET_RECORD_TYPE) { + p[0] = *((unsigned char *)CMSG_DATA(cmsg)); + p[1] = TLS1_2_VERSION_MAJOR; + p[2] = TLS1_2_VERSION_MINOR; + /* returned length is limited to msg_iov.iov_len above */ + p[3] = (ret >> 8) & 0xff; + p[4] = ret & 0xff; + ret += prepend_length; + } + } + + return ret; +} + +# endif /* OPENSSL_NO_KTLS_RX */ + +# endif /* OPENSSL_SYS_LINUX */ +# endif /* OPENSSL_NO_KTLS */ +#endif /* HEADER_INTERNAL_KTLS */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/namemap.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/namemap.h new file mode 100644 index 00000000..fd36883f --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/namemap.h @@ -0,0 +1,41 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "internal/cryptlib.h" + +typedef struct ossl_namemap_st OSSL_NAMEMAP; + +OSSL_NAMEMAP *ossl_namemap_stored(OSSL_LIB_CTX *libctx); + +OSSL_NAMEMAP *ossl_namemap_new(void); +void ossl_namemap_free(OSSL_NAMEMAP *namemap); +int ossl_namemap_empty(OSSL_NAMEMAP *namemap); + +int ossl_namemap_add_name(OSSL_NAMEMAP *namemap, int number, const char *name); + +/* + * The number<->name relationship is 1<->many + * Therefore, the name->number mapping is a simple function, while the + * number->name mapping is an iterator. + */ +int ossl_namemap_name2num(const OSSL_NAMEMAP *namemap, const char *name); +int ossl_namemap_name2num_n(const OSSL_NAMEMAP *namemap, + const char *name, size_t name_len); +const char *ossl_namemap_num2name(const OSSL_NAMEMAP *namemap, int number, + size_t idx); +int ossl_namemap_doall_names(const OSSL_NAMEMAP *namemap, int number, + void (*fn)(const char *name, void *data), + void *data); + +/* + * A utility that handles several names in a string, divided by a given + * separator. + */ +int ossl_namemap_add_names(OSSL_NAMEMAP *namemap, int number, + const char *names, const char separator); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/nelem.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/nelem.h index 699ef88e..b758513b 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/nelem.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/nelem.h @@ -1,7 +1,7 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_NELEM_H # define OSSL_INTERNAL_NELEM_H +# pragma once # define OSSL_NELEM(x) (sizeof(x)/sizeof((x)[0])) #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/numbers.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/numbers.h index f5ade522..4f4d3306 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/numbers.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/numbers.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,22 +9,23 @@ #ifndef OSSL_INTERNAL_NUMBERS_H # define OSSL_INTERNAL_NUMBERS_H +# pragma once # include -# if (-1 & 3) == 0x03 /* Two's complement */ +# if (-1 & 3) == 0x03 /* Two's complement */ # define __MAXUINT__(T) ((T) -1) # define __MAXINT__(T) ((T) ((((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)) ^ __MAXUINT__(T))) # define __MININT__(T) (-__MAXINT__(T) - 1) -# elif (-1 & 3) == 0x02 /* One's complement */ +# elif (-1 & 3) == 0x02 /* One's complement */ # define __MAXUINT__(T) (((T) -1) + 1) # define __MAXINT__(T) ((T) ((((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)) ^ __MAXUINT__(T))) # define __MININT__(T) (-__MAXINT__(T)) -# elif (-1 & 3) == 0x01 /* Sign/magnitude */ +# elif (-1 & 3) == 0x01 /* Sign/magnitude */ # define __MAXINT__(T) ((T) (((((T) 1) << ((sizeof(T) * CHAR_BIT) - 2)) - 1) | (((T) 1) << ((sizeof(T) * CHAR_BIT) - 2)))) # define __MAXUINT__(T) ((T) (__MAXINT__(T) | (((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)))) @@ -60,9 +61,25 @@ # define UINT64_MAX __MAXUINT__(uint64_t) # endif +# ifndef INT128_MAX +# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16 +typedef __int128_t int128_t; +typedef __uint128_t uint128_t; +# define INT128_MIN __MININT__(int128_t) +# define INT128_MAX __MAXINT__(int128_t) +# define UINT128_MAX __MAXUINT__(uint128_t) +# endif +# endif + # ifndef SIZE_MAX # define SIZE_MAX __MAXUINT__(size_t) # endif +# ifndef OSSL_INTMAX_MAX +# define OSSL_INTMAX_MIN __MININT__(ossl_intmax_t) +# define OSSL_INTMAX_MAX __MAXINT__(ossl_intmax_t) +# define OSSL_UINTMAX_MAX __MAXUINT__(ossl_uintmax_t) +# endif + #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/o_dir.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/o_dir.h index dafc8dd2..add34d14 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/o_dir.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/o_dir.h @@ -1,7 +1,7 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -38,6 +38,7 @@ #ifndef OSSL_INTERNAL_O_DIR_H # define OSSL_INTERNAL_O_DIR_H +# pragma once typedef struct OPENSSL_dir_context_st OPENSSL_DIR_CTX; diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/o_str.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/o_str.h deleted file mode 100644 index 15c12e82..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/o_str.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef OSSL_INTERNAL_O_STR_H -# define OSSL_INTERNAL_O_STR_H - -# include /* to get size_t */ - -int OPENSSL_memcmp(const void *p1, const void *p2, size_t n); - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet.h new file mode 100644 index 00000000..ed761720 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet.h @@ -0,0 +1,937 @@ +/* + * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PACKET_H +# define OSSL_INTERNAL_PACKET_H +# pragma once + +# include +# include +# include +# include +# include + +# include "internal/numbers.h" + +typedef struct { + /* Pointer to where we are currently reading from */ + const unsigned char *curr; + /* Number of bytes remaining */ + size_t remaining; +} PACKET; + +/* Internal unchecked shorthand; don't use outside this file. */ +static ossl_inline void packet_forward(PACKET *pkt, size_t len) +{ + pkt->curr += len; + pkt->remaining -= len; +} + +/* + * Returns the number of bytes remaining to be read in the PACKET + */ +static ossl_inline size_t PACKET_remaining(const PACKET *pkt) +{ + return pkt->remaining; +} + +/* + * Returns a pointer to the first byte after the packet data. + * Useful for integrating with non-PACKET parsing code. + * Specifically, we use PACKET_end() to verify that a d2i_... call + * has consumed the entire packet contents. + */ +static ossl_inline const unsigned char *PACKET_end(const PACKET *pkt) +{ + return pkt->curr + pkt->remaining; +} + +/* + * Returns a pointer to the PACKET's current position. + * For use in non-PACKETized APIs. + */ +static ossl_inline const unsigned char *PACKET_data(const PACKET *pkt) +{ + return pkt->curr; +} + +/* + * Initialise a PACKET with |len| bytes held in |buf|. This does not make a + * copy of the data so |buf| must be present for the whole time that the PACKET + * is being used. + */ +__owur static ossl_inline int PACKET_buf_init(PACKET *pkt, + const unsigned char *buf, + size_t len) +{ + /* Sanity check for negative values. */ + if (len > (size_t)(SIZE_MAX / 2)) + return 0; + + pkt->curr = buf; + pkt->remaining = len; + return 1; +} + +/* Initialize a PACKET to hold zero bytes. */ +static ossl_inline void PACKET_null_init(PACKET *pkt) +{ + pkt->curr = NULL; + pkt->remaining = 0; +} + +/* + * Returns 1 if the packet has length |num| and its contents equal the |num| + * bytes read from |ptr|. Returns 0 otherwise (lengths or contents not equal). + * If lengths are equal, performs the comparison in constant time. + */ +__owur static ossl_inline int PACKET_equal(const PACKET *pkt, const void *ptr, + size_t num) +{ + if (PACKET_remaining(pkt) != num) + return 0; + return CRYPTO_memcmp(pkt->curr, ptr, num) == 0; +} + +/* + * Peek ahead and initialize |subpkt| with the next |len| bytes read from |pkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + */ +__owur static ossl_inline int PACKET_peek_sub_packet(const PACKET *pkt, + PACKET *subpkt, size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + return PACKET_buf_init(subpkt, pkt->curr, len); +} + +/* + * Initialize |subpkt| with the next |len| bytes read from |pkt|. Data is not + * copied: the |subpkt| packet will share its underlying buffer with the + * original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + */ +__owur static ossl_inline int PACKET_get_sub_packet(PACKET *pkt, + PACKET *subpkt, size_t len) +{ + if (!PACKET_peek_sub_packet(pkt, subpkt, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Peek ahead at 2 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_2(const PACKET *pkt, + unsigned int *data) +{ + if (PACKET_remaining(pkt) < 2) + return 0; + + *data = ((unsigned int)(*pkt->curr)) << 8; + *data |= *(pkt->curr + 1); + + return 1; +} + +/* Equivalent of n2s */ +/* Get 2 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_2(PACKET *pkt, unsigned int *data) +{ + if (!PACKET_peek_net_2(pkt, data)) + return 0; + + packet_forward(pkt, 2); + + return 1; +} + +/* Same as PACKET_get_net_2() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_2_len(PACKET *pkt, size_t *data) +{ + unsigned int i; + int ret = PACKET_get_net_2(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 3 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_3(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 3) + return 0; + + *data = ((unsigned long)(*pkt->curr)) << 16; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 8; + *data |= *(pkt->curr + 2); + + return 1; +} + +/* Equivalent of n2l3 */ +/* Get 3 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_3(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_net_3(pkt, data)) + return 0; + + packet_forward(pkt, 3); + + return 1; +} + +/* Same as PACKET_get_net_3() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_3_len(PACKET *pkt, size_t *data) +{ + unsigned long i; + int ret = PACKET_get_net_3(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 4 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_4(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 4) + return 0; + + *data = ((unsigned long)(*pkt->curr)) << 24; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 16; + *data |= ((unsigned long)(*(pkt->curr + 2))) << 8; + *data |= *(pkt->curr + 3); + + return 1; +} + +/* + * Peek ahead at 8 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_8(const PACKET *pkt, + uint64_t *data) +{ + if (PACKET_remaining(pkt) < 8) + return 0; + + *data = ((uint64_t)(*pkt->curr)) << 56; + *data |= ((uint64_t)(*(pkt->curr + 1))) << 48; + *data |= ((uint64_t)(*(pkt->curr + 2))) << 40; + *data |= ((uint64_t)(*(pkt->curr + 3))) << 32; + *data |= ((uint64_t)(*(pkt->curr + 4))) << 24; + *data |= ((uint64_t)(*(pkt->curr + 5))) << 16; + *data |= ((uint64_t)(*(pkt->curr + 6))) << 8; + *data |= *(pkt->curr + 7); + + return 1; +} + +/* Equivalent of n2l */ +/* Get 4 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_4(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_net_4(pkt, data)) + return 0; + + packet_forward(pkt, 4); + + return 1; +} + +/* Same as PACKET_get_net_4() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_4_len(PACKET *pkt, size_t *data) +{ + unsigned long i; + int ret = PACKET_get_net_4(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* Get 8 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_8(PACKET *pkt, uint64_t *data) +{ + if (!PACKET_peek_net_8(pkt, data)) + return 0; + + packet_forward(pkt, 8); + + return 1; +} + +/* Peek ahead at 1 byte from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_peek_1(const PACKET *pkt, + unsigned int *data) +{ + if (!PACKET_remaining(pkt)) + return 0; + + *data = *pkt->curr; + + return 1; +} + +/* Get 1 byte from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_1(PACKET *pkt, unsigned int *data) +{ + if (!PACKET_peek_1(pkt, data)) + return 0; + + packet_forward(pkt, 1); + + return 1; +} + +/* Same as PACKET_get_1() but for a size_t */ +__owur static ossl_inline int PACKET_get_1_len(PACKET *pkt, size_t *data) +{ + unsigned int i; + int ret = PACKET_get_1(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 4 bytes in reverse network order from |pkt| and store the value + * in |*data| + */ +__owur static ossl_inline int PACKET_peek_4(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 4) + return 0; + + *data = *pkt->curr; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 8; + *data |= ((unsigned long)(*(pkt->curr + 2))) << 16; + *data |= ((unsigned long)(*(pkt->curr + 3))) << 24; + + return 1; +} + +/* Equivalent of c2l */ +/* + * Get 4 bytes in reverse network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_get_4(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_4(pkt, data)) + return 0; + + packet_forward(pkt, 4); + + return 1; +} + +/* + * Peek ahead at |len| bytes from the |pkt| and store a pointer to them in + * |*data|. This just points at the underlying buffer that |pkt| is using. The + * caller should not free this data directly (it will be freed when the + * underlying buffer gets freed + */ +__owur static ossl_inline int PACKET_peek_bytes(const PACKET *pkt, + const unsigned char **data, + size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + *data = pkt->curr; + + return 1; +} + +/* + * Read |len| bytes from the |pkt| and store a pointer to them in |*data|. This + * just points at the underlying buffer that |pkt| is using. The caller should + * not free this data directly (it will be freed when the underlying buffer gets + * freed + */ +__owur static ossl_inline int PACKET_get_bytes(PACKET *pkt, + const unsigned char **data, + size_t len) +{ + if (!PACKET_peek_bytes(pkt, data, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* Peek ahead at |len| bytes from |pkt| and copy them to |data| */ +__owur static ossl_inline int PACKET_peek_copy_bytes(const PACKET *pkt, + unsigned char *data, + size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + memcpy(data, pkt->curr, len); + + return 1; +} + +/* + * Read |len| bytes from |pkt| and copy them to |data|. + * The caller is responsible for ensuring that |data| can hold |len| bytes. + */ +__owur static ossl_inline int PACKET_copy_bytes(PACKET *pkt, + unsigned char *data, size_t len) +{ + if (!PACKET_peek_copy_bytes(pkt, data, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Copy packet data to |dest|, and set |len| to the number of copied bytes. + * If the packet has more than |dest_len| bytes, nothing is copied. + * Returns 1 if the packet data fits in |dest_len| bytes, 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing + * done with a given PACKET). + */ +__owur static ossl_inline int PACKET_copy_all(const PACKET *pkt, + unsigned char *dest, + size_t dest_len, size_t *len) +{ + if (PACKET_remaining(pkt) > dest_len) { + *len = 0; + return 0; + } + *len = pkt->remaining; + memcpy(dest, pkt->curr, pkt->remaining); + return 1; +} + +/* + * Copy |pkt| bytes to a newly allocated buffer and store a pointer to the + * result in |*data|, and the length in |len|. + * If |*data| is not NULL, the old data is OPENSSL_free'd. + * If the packet is empty, or malloc fails, |*data| will be set to NULL. + * Returns 1 if the malloc succeeds and 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing + * done with a given PACKET). + */ +__owur static ossl_inline int PACKET_memdup(const PACKET *pkt, + unsigned char **data, size_t *len) +{ + size_t length; + + OPENSSL_free(*data); + *data = NULL; + *len = 0; + + length = PACKET_remaining(pkt); + + if (length == 0) + return 1; + + *data = OPENSSL_memdup(pkt->curr, length); + if (*data == NULL) + return 0; + + *len = length; + return 1; +} + +/* + * Read a C string from |pkt| and copy to a newly allocated, NUL-terminated + * buffer. Store a pointer to the result in |*data|. + * If |*data| is not NULL, the old data is OPENSSL_free'd. + * If the data in |pkt| does not contain a NUL-byte, the entire data is + * copied and NUL-terminated. + * Returns 1 if the malloc succeeds and 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing done + * with a given PACKET). + */ +__owur static ossl_inline int PACKET_strndup(const PACKET *pkt, char **data) +{ + OPENSSL_free(*data); + + /* This will succeed on an empty packet, unless pkt->curr == NULL. */ + *data = OPENSSL_strndup((const char *)pkt->curr, PACKET_remaining(pkt)); + return (*data != NULL); +} + +/* Returns 1 if |pkt| contains at least one 0-byte, 0 otherwise. */ +static ossl_inline int PACKET_contains_zero_byte(const PACKET *pkt) +{ + return memchr(pkt->curr, 0, pkt->remaining) != NULL; +} + +/* Move the current reading position forward |len| bytes */ +__owur static ossl_inline int PACKET_forward(PACKET *pkt, size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a one-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_1(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_1(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Like PACKET_get_length_prefixed_1, but additionally, fails when there are + * leftover bytes in |pkt|. + */ +__owur static ossl_inline int PACKET_as_length_prefixed_1(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_1(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length) || + PACKET_remaining(&tmp) != 0) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a two-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_2(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + + if (!PACKET_get_net_2(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Like PACKET_get_length_prefixed_2, but additionally, fails when there are + * leftover bytes in |pkt|. + */ +__owur static ossl_inline int PACKET_as_length_prefixed_2(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + + if (!PACKET_get_net_2(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length) || + PACKET_remaining(&tmp) != 0) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a three-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_3(PACKET *pkt, + PACKET *subpkt) +{ + unsigned long length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_net_3(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* Writeable packets */ + +typedef struct wpacket_sub WPACKET_SUB; +struct wpacket_sub { + /* The parent WPACKET_SUB if we have one or NULL otherwise */ + WPACKET_SUB *parent; + + /* + * Offset into the buffer where the length of this WPACKET goes. We use an + * offset in case the buffer grows and gets reallocated. + */ + size_t packet_len; + + /* Number of bytes in the packet_len or 0 if we don't write the length */ + size_t lenbytes; + + /* Number of bytes written to the buf prior to this packet starting */ + size_t pwritten; + + /* Flags for this sub-packet */ + unsigned int flags; +}; + +typedef struct wpacket_st WPACKET; +struct wpacket_st { + /* The buffer where we store the output data */ + BUF_MEM *buf; + + /* Fixed sized buffer which can be used as an alternative to buf */ + unsigned char *staticbuf; + + /* + * Offset into the buffer where we are currently writing. We use an offset + * in case the buffer grows and gets reallocated. + */ + size_t curr; + + /* Number of bytes written so far */ + size_t written; + + /* Maximum number of bytes we will allow to be written to this WPACKET */ + size_t maxsize; + + /* Our sub-packets (always at least one if not finished) */ + WPACKET_SUB *subs; + + /* Writing from the end first? */ + unsigned int endfirst : 1; +}; + +/* Flags */ + +/* Default */ +#define WPACKET_FLAGS_NONE 0 + +/* Error on WPACKET_close() if no data written to the WPACKET */ +#define WPACKET_FLAGS_NON_ZERO_LENGTH 1 + +/* + * Abandon all changes on WPACKET_close() if no data written to the WPACKET, + * i.e. this does not write out a zero packet length + */ +#define WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH 2 + + +/* + * Initialise a WPACKET with the buffer in |buf|. The buffer must exist + * for the whole time that the WPACKET is being used. Additionally |lenbytes| of + * data is preallocated at the start of the buffer to store the length of the + * WPACKET once we know it. + */ +int WPACKET_init_len(WPACKET *pkt, BUF_MEM *buf, size_t lenbytes); + +/* + * Same as WPACKET_init_len except there is no preallocation of the WPACKET + * length. + */ +int WPACKET_init(WPACKET *pkt, BUF_MEM *buf); + +/* + * Same as WPACKET_init_len except there is no underlying buffer. No data is + * ever actually written. We just keep track of how much data would have been + * written if a buffer was there. + */ +int WPACKET_init_null(WPACKET *pkt, size_t lenbytes); + +/* + * Same as WPACKET_init_null except we set the WPACKET to assume DER length + * encoding for sub-packets. + */ +int WPACKET_init_null_der(WPACKET *pkt); + +/* + * Same as WPACKET_init_len except we do not use a growable BUF_MEM structure. + * A fixed buffer of memory |buf| of size |len| is used instead. A failure will + * occur if you attempt to write beyond the end of the buffer + */ +int WPACKET_init_static_len(WPACKET *pkt, unsigned char *buf, size_t len, + size_t lenbytes); + +/* + * Same as WPACKET_init_static_len except lenbytes is always 0, and we set the + * WPACKET to write to the end of the buffer moving towards the start and use + * DER length encoding for sub-packets. + */ +int WPACKET_init_der(WPACKET *pkt, unsigned char *buf, size_t len); + +/* + * Set the flags to be applied to the current sub-packet + */ +int WPACKET_set_flags(WPACKET *pkt, unsigned int flags); + +/* + * Closes the most recent sub-packet. It also writes out the length of the + * packet to the required location (normally the start of the WPACKET) if + * appropriate. The top level WPACKET should be closed using WPACKET_finish() + * instead of this function. + */ +int WPACKET_close(WPACKET *pkt); + +/* + * The same as WPACKET_close() but only for the top most WPACKET. Additionally + * frees memory resources for this WPACKET. + */ +int WPACKET_finish(WPACKET *pkt); + +/* + * Iterate through all the sub-packets and write out their lengths as if they + * were being closed. The lengths will be overwritten with the final lengths + * when the sub-packets are eventually closed (which may be different if more + * data is added to the WPACKET). This function fails if a sub-packet is of 0 + * length and WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH is set. + */ +int WPACKET_fill_lengths(WPACKET *pkt); + +/* + * Initialise a new sub-packet. Additionally |lenbytes| of data is preallocated + * at the start of the sub-packet to store its length once we know it. Don't + * call this directly. Use the convenience macros below instead. + */ +int WPACKET_start_sub_packet_len__(WPACKET *pkt, size_t lenbytes); + +/* + * Convenience macros for calling WPACKET_start_sub_packet_len with different + * lengths + */ +#define WPACKET_start_sub_packet_u8(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 1) +#define WPACKET_start_sub_packet_u16(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 2) +#define WPACKET_start_sub_packet_u24(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 3) +#define WPACKET_start_sub_packet_u32(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 4) + +/* + * Same as WPACKET_start_sub_packet_len__() except no bytes are pre-allocated + * for the sub-packet length. + */ +int WPACKET_start_sub_packet(WPACKET *pkt); + +/* + * Allocate bytes in the WPACKET for the output. This reserves the bytes + * and counts them as "written", but doesn't actually do the writing. A pointer + * to the allocated bytes is stored in |*allocbytes|. |allocbytes| may be NULL. + * WARNING: the allocated bytes must be filled in immediately, without further + * WPACKET_* calls. If not then the underlying buffer may be realloc'd and + * change its location. + */ +int WPACKET_allocate_bytes(WPACKET *pkt, size_t len, + unsigned char **allocbytes); + +/* + * The same as WPACKET_allocate_bytes() except additionally a new sub-packet is + * started for the allocated bytes, and then closed immediately afterwards. The + * number of length bytes for the sub-packet is in |lenbytes|. Don't call this + * directly. Use the convenience macros below instead. + */ +int WPACKET_sub_allocate_bytes__(WPACKET *pkt, size_t len, + unsigned char **allocbytes, size_t lenbytes); + +/* + * Convenience macros for calling WPACKET_sub_allocate_bytes with different + * lengths + */ +#define WPACKET_sub_allocate_bytes_u8(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 1) +#define WPACKET_sub_allocate_bytes_u16(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 2) +#define WPACKET_sub_allocate_bytes_u24(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 3) +#define WPACKET_sub_allocate_bytes_u32(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 4) + +/* + * The same as WPACKET_allocate_bytes() except the reserved bytes are not + * actually counted as written. Typically this will be for when we don't know + * how big arbitrary data is going to be up front, but we do know what the + * maximum size will be. If this function is used, then it should be immediately + * followed by a WPACKET_allocate_bytes() call before any other WPACKET + * functions are called (unless the write to the allocated bytes is abandoned). + * + * For example: If we are generating a signature, then the size of that + * signature may not be known in advance. We can use WPACKET_reserve_bytes() to + * handle this: + * + * if (!WPACKET_sub_reserve_bytes_u16(&pkt, EVP_PKEY_get_size(pkey), &sigbytes1) + * || EVP_SignFinal(md_ctx, sigbytes1, &siglen, pkey) <= 0 + * || !WPACKET_sub_allocate_bytes_u16(&pkt, siglen, &sigbytes2) + * || sigbytes1 != sigbytes2) + * goto err; + */ +int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes); + +/* + * The "reserve_bytes" equivalent of WPACKET_sub_allocate_bytes__() + */ +int WPACKET_sub_reserve_bytes__(WPACKET *pkt, size_t len, + unsigned char **allocbytes, size_t lenbytes); + +/* + * Convenience macros for WPACKET_sub_reserve_bytes with different lengths + */ +#define WPACKET_sub_reserve_bytes_u8(pkt, len, bytes) \ + WPACKET_reserve_bytes__((pkt), (len), (bytes), 1) +#define WPACKET_sub_reserve_bytes_u16(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 2) +#define WPACKET_sub_reserve_bytes_u24(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 3) +#define WPACKET_sub_reserve_bytes_u32(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 4) + +/* + * Write the value stored in |val| into the WPACKET. The value will consume + * |bytes| amount of storage. An error will occur if |val| cannot be + * accommodated in |bytes| storage, e.g. attempting to write the value 256 into + * 1 byte will fail. Don't call this directly. Use the convenience macros below + * instead. + */ +int WPACKET_put_bytes__(WPACKET *pkt, uint64_t val, size_t bytes); + +/* + * Convenience macros for calling WPACKET_put_bytes with different + * lengths + */ +#define WPACKET_put_bytes_u8(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 1) +#define WPACKET_put_bytes_u16(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 2) +#define WPACKET_put_bytes_u24(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 3) +#define WPACKET_put_bytes_u32(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 4) +#define WPACKET_put_bytes_u64(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 8) + +/* Set a maximum size that we will not allow the WPACKET to grow beyond */ +int WPACKET_set_max_size(WPACKET *pkt, size_t maxsize); + +/* Copy |len| bytes of data from |*src| into the WPACKET. */ +int WPACKET_memcpy(WPACKET *pkt, const void *src, size_t len); + +/* Set |len| bytes of data to |ch| into the WPACKET. */ +int WPACKET_memset(WPACKET *pkt, int ch, size_t len); + +/* + * Copy |len| bytes of data from |*src| into the WPACKET and prefix with its + * length (consuming |lenbytes| of data for the length). Don't call this + * directly. Use the convenience macros below instead. + */ +int WPACKET_sub_memcpy__(WPACKET *pkt, const void *src, size_t len, + size_t lenbytes); + +/* Convenience macros for calling WPACKET_sub_memcpy with different lengths */ +#define WPACKET_sub_memcpy_u8(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 1) +#define WPACKET_sub_memcpy_u16(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 2) +#define WPACKET_sub_memcpy_u24(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 3) +#define WPACKET_sub_memcpy_u32(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 4) + +/* + * Return the total number of bytes written so far to the underlying buffer + * including any storage allocated for length bytes + */ +int WPACKET_get_total_written(WPACKET *pkt, size_t *written); + +/* + * Returns the length of the current sub-packet. This excludes any bytes + * allocated for the length itself. + */ +int WPACKET_get_length(WPACKET *pkt, size_t *len); + +/* + * Returns a pointer to the current write location, but does not allocate any + * bytes. + */ +unsigned char *WPACKET_get_curr(WPACKET *pkt); + +/* Returns true if the underlying buffer is actually NULL */ +int WPACKET_is_null_buf(WPACKET *pkt); + +/* Release resources in a WPACKET if a failure has occurred. */ +void WPACKET_cleanup(WPACKET *pkt); + +#endif /* OSSL_INTERNAL_PACKET_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_build_set.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_build_set.h new file mode 100644 index 00000000..126211b7 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_build_set.h @@ -0,0 +1,46 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PARAM_BUILD_SET_H +# define OSSL_INTERNAL_PARAM_BUILD_SET_H +# pragma once + +# include +# include +# include "internal/cryptlib.h" + +typedef union { + OSSL_UNION_ALIGN; +} OSSL_PARAM_ALIGNED_BLOCK; + +# define OSSL_PARAM_ALIGN_SIZE sizeof(OSSL_PARAM_ALIGNED_BLOCK) + +size_t ossl_param_bytes_to_blocks(size_t bytes); +void ossl_param_set_secure_block(OSSL_PARAM *last, void *secure_buffer, + size_t secure_buffer_sz); + +int ossl_param_build_set_int(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, int num); +int ossl_param_build_set_long(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, long num); +int ossl_param_build_set_utf8_string(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const char *buf); +int ossl_param_build_set_octet_string(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, + const unsigned char *data, + size_t data_len); +int ossl_param_build_set_bn(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const BIGNUM *bn); +int ossl_param_build_set_bn_pad(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const BIGNUM *bn, size_t sz); +int ossl_param_build_set_multi_key_bn(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *names[], + STACK_OF(BIGNUM_const) *stk); + +#endif /* OSSL_INTERNAL_PARAM_BUILD_SET_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/passphrase.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/passphrase.h new file mode 100644 index 00000000..54d997b0 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/passphrase.h @@ -0,0 +1,122 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PASSPHRASE_H +# define OSSL_INTERNAL_PASSPHRASE_H +# pragma once + +/* + * This is a passphrase reader bridge with bells and whistles. + * + * On one hand, an API may wish to offer all sorts of passphrase callback + * possibilities to users, or may have to do so for historical reasons. + * On the other hand, that same API may have demands from other interfaces, + * notably from the libcrypto <-> provider interface, which uses + * OSSL_PASSPHRASE_CALLBACK consistently. + * + * The structure and functions below are the fundaments for bridging one + * passphrase callback form to another. + * + * In addition, extra features are included (this may be a growing list): + * + * - password caching. This is to be used by APIs where it's likely + * that the same passphrase may be asked for more than once, but the + * user shouldn't get prompted more than once. For example, this is + * useful for OSSL_DECODER, which may have to use a passphrase while + * trying to find out what input it has. + */ + +/* + * Structure to hold whatever the calling user may specify. This structure + * is intended to be integrated into API specific structures or to be used + * as a local on-stack variable type. Therefore, no functions to allocate + * or freed it on the heap is offered. + */ +struct ossl_passphrase_data_st { + enum { + is_expl_passphrase = 1, /* Explicit passphrase given by user */ + is_pem_password, /* pem_password_cb given by user */ + is_ossl_passphrase, /* OSSL_PASSPHRASE_CALLBACK given by user */ + is_ui_method /* UI_METHOD given by user */ + } type; + union { + struct { + char *passphrase_copy; + size_t passphrase_len; + } expl_passphrase; + + struct { + pem_password_cb *password_cb; + void *password_cbarg; + } pem_password; + + struct { + OSSL_PASSPHRASE_CALLBACK *passphrase_cb; + void *passphrase_cbarg; + } ossl_passphrase; + + struct { + const UI_METHOD *ui_method; + void *ui_method_data; + } ui_method; + } _; + + /*- + * Flags section + */ + + /* Set to indicate that caching should be done */ + unsigned int flag_cache_passphrase:1; + + /*- + * Misc section: caches and other + */ + + char *cached_passphrase; + size_t cached_passphrase_len; +}; + +/* Structure manipulation */ + +void ossl_pw_clear_passphrase_data(struct ossl_passphrase_data_st *data); +void ossl_pw_clear_passphrase_cache(struct ossl_passphrase_data_st *data); + +int ossl_pw_set_passphrase(struct ossl_passphrase_data_st *data, + const unsigned char *passphrase, + size_t passphrase_len); +int ossl_pw_set_pem_password_cb(struct ossl_passphrase_data_st *data, + pem_password_cb *cb, void *cbarg); +int ossl_pw_set_ossl_passphrase_cb(struct ossl_passphrase_data_st *data, + OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg); +int ossl_pw_set_ui_method(struct ossl_passphrase_data_st *data, + const UI_METHOD *ui_method, void *ui_data); + +int ossl_pw_enable_passphrase_caching(struct ossl_passphrase_data_st *data); +int ossl_pw_disable_passphrase_caching(struct ossl_passphrase_data_st *data); + +/* Central function for direct calls */ + +int ossl_pw_get_passphrase(char *pass, size_t pass_size, size_t *pass_len, + const OSSL_PARAM params[], int verify, + struct ossl_passphrase_data_st *data); + +/* Callback functions */ + +/* + * All of these callback expect that the callback argument is a + * struct ossl_passphrase_data_st + */ + +pem_password_cb ossl_pw_pem_password; +pem_password_cb ossl_pw_pvk_password; +/* One callback for encoding (verification prompt) and one for decoding */ +OSSL_PASSPHRASE_CALLBACK ossl_pw_passphrase_callback_enc; +OSSL_PASSPHRASE_CALLBACK ossl_pw_passphrase_callback_dec; + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/property.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/property.h new file mode 100644 index 00000000..d09274d0 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/property.h @@ -0,0 +1,99 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROPERTY_H +# define OSSL_INTERNAL_PROPERTY_H +# pragma once + +# include "internal/cryptlib.h" + +typedef struct ossl_method_store_st OSSL_METHOD_STORE; +typedef struct ossl_property_list_st OSSL_PROPERTY_LIST; + +typedef enum { + OSSL_PROPERTY_TYPE_STRING, OSSL_PROPERTY_TYPE_NUMBER, + OSSL_PROPERTY_TYPE_VALUE_UNDEFINED +} OSSL_PROPERTY_TYPE; +typedef struct ossl_property_definition_st OSSL_PROPERTY_DEFINITION; + +/* Initialisation */ +int ossl_property_parse_init(OSSL_LIB_CTX *ctx); + +/* Property definition parser */ +OSSL_PROPERTY_LIST *ossl_parse_property(OSSL_LIB_CTX *ctx, const char *defn); +/* Property query parser */ +OSSL_PROPERTY_LIST *ossl_parse_query(OSSL_LIB_CTX *ctx, const char *s, + int create_values); +/* Property checker of query vs definition */ +int ossl_property_match_count(const OSSL_PROPERTY_LIST *query, + const OSSL_PROPERTY_LIST *defn); +int ossl_property_is_enabled(OSSL_LIB_CTX *ctx, const char *property_name, + const OSSL_PROPERTY_LIST *prop_list); +/* Free a parsed property list */ +void ossl_property_free(OSSL_PROPERTY_LIST *p); + +/* Get a property from a property list */ +const OSSL_PROPERTY_DEFINITION * +ossl_property_find_property(const OSSL_PROPERTY_LIST *list, + OSSL_LIB_CTX *libctx, const char *name); +OSSL_PROPERTY_TYPE ossl_property_get_type(const OSSL_PROPERTY_DEFINITION *prop); +const char *ossl_property_get_string_value(OSSL_LIB_CTX *libctx, + const OSSL_PROPERTY_DEFINITION *prop); +int64_t ossl_property_get_number_value(const OSSL_PROPERTY_DEFINITION *prop); + + +/* Implementation store functions */ +OSSL_METHOD_STORE *ossl_method_store_new(OSSL_LIB_CTX *ctx); +void ossl_method_store_free(OSSL_METHOD_STORE *store); + +int ossl_method_lock_store(OSSL_METHOD_STORE *store); +int ossl_method_unlock_store(OSSL_METHOD_STORE *store); + +int ossl_method_store_add(OSSL_METHOD_STORE *store, const OSSL_PROVIDER *prov, + int nid, const char *properties, void *method, + int (*method_up_ref)(void *), + void (*method_destruct)(void *)); +int ossl_method_store_remove(OSSL_METHOD_STORE *store, int nid, + const void *method); +void ossl_method_store_do_all(OSSL_METHOD_STORE *store, + void (*fn)(int id, void *method, void *fnarg), + void *fnarg); +int ossl_method_store_fetch(OSSL_METHOD_STORE *store, + int nid, const char *prop_query, + const OSSL_PROVIDER **prov, void **method); +int ossl_method_store_remove_all_provided(OSSL_METHOD_STORE *store, + const OSSL_PROVIDER *prov); + +/* Get the global properties associate with the specified library context */ +OSSL_PROPERTY_LIST **ossl_ctx_global_properties(OSSL_LIB_CTX *ctx, + int loadconfig); + +/* property query cache functions */ +int ossl_method_store_cache_get(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov, + int nid, const char *prop_query, void **result); +int ossl_method_store_cache_set(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov, + int nid, const char *prop_query, void *result, + int (*method_up_ref)(void *), + void (*method_destruct)(void *)); + +__owur int ossl_method_store_cache_flush_all(OSSL_METHOD_STORE *store); + +/* Merge two property queries together */ +OSSL_PROPERTY_LIST *ossl_property_merge(const OSSL_PROPERTY_LIST *a, + const OSSL_PROPERTY_LIST *b); + +size_t ossl_property_list_to_string(OSSL_LIB_CTX *ctx, + const OSSL_PROPERTY_LIST *list, char *buf, + size_t bufsize); + +int ossl_global_properties_no_mirrored(OSSL_LIB_CTX *libctx); +void ossl_global_properties_stop_mirroring(OSSL_LIB_CTX *libctx); + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/propertyerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/propertyerr.h new file mode 100644 index 00000000..fbee53f1 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/propertyerr.h @@ -0,0 +1,43 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROPERTYERR_H +# define OSSL_INTERNAL_PROPERTYERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PROP_strings(void); + +/* + * PROP reason codes. + */ +# define PROP_R_NAME_TOO_LONG 100 +# define PROP_R_NOT_AN_ASCII_CHARACTER 101 +# define PROP_R_NOT_AN_HEXADECIMAL_DIGIT 102 +# define PROP_R_NOT_AN_IDENTIFIER 103 +# define PROP_R_NOT_AN_OCTAL_DIGIT 104 +# define PROP_R_NOT_A_DECIMAL_DIGIT 105 +# define PROP_R_NO_MATCHING_STRING_DELIMITER 106 +# define PROP_R_NO_VALUE 107 +# define PROP_R_PARSE_FAILED 108 +# define PROP_R_STRING_TOO_LONG 109 +# define PROP_R_TRAILING_CHARACTERS 110 + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/provider.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/provider.h new file mode 100644 index 00000000..18937f84 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/provider.h @@ -0,0 +1,119 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROVIDER_H +# define OSSL_INTERNAL_PROVIDER_H +# pragma once + +# include +# include +# include "internal/dso.h" +# include "internal/symhacks.h" + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * namespaces: + * + * ossl_provider_ Provider Object internal API + * OSSL_PROVIDER Provider Object + */ + +/* Provider Object finder, constructor and destructor */ +OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name, + int noconfig); +OSSL_PROVIDER *ossl_provider_new(OSSL_LIB_CTX *libctx, const char *name, + OSSL_provider_init_fn *init_function, + int noconfig); +int ossl_provider_up_ref(OSSL_PROVIDER *prov); +void ossl_provider_free(OSSL_PROVIDER *prov); + +/* Setters */ +int ossl_provider_set_module_path(OSSL_PROVIDER *prov, const char *module_path); +int ossl_provider_add_parameter(OSSL_PROVIDER *prov, const char *name, + const char *value); + +int ossl_provider_is_child(const OSSL_PROVIDER *prov); +int ossl_provider_set_child(OSSL_PROVIDER *prov, const OSSL_CORE_HANDLE *handle); +const OSSL_CORE_HANDLE *ossl_provider_get_parent(OSSL_PROVIDER *prov); +int ossl_provider_up_ref_parent(OSSL_PROVIDER *prov, int activate); +int ossl_provider_free_parent(OSSL_PROVIDER *prov, int deactivate); +int ossl_provider_default_props_update(OSSL_LIB_CTX *libctx, const char *props); + +/* Disable fallback loading */ +int ossl_provider_disable_fallback_loading(OSSL_LIB_CTX *libctx); + +/* + * Activate the Provider + * If the Provider is a module, the module will be loaded + */ +int ossl_provider_activate(OSSL_PROVIDER *prov, int upcalls, int aschild); +int ossl_provider_deactivate(OSSL_PROVIDER *prov, int removechildren); +int ossl_provider_add_to_store(OSSL_PROVIDER *prov, OSSL_PROVIDER **actualprov, + int retain_fallbacks); + +/* Return pointer to the provider's context */ +void *ossl_provider_ctx(const OSSL_PROVIDER *prov); + +/* Iterate over all loaded providers */ +int ossl_provider_doall_activated(OSSL_LIB_CTX *, + int (*cb)(OSSL_PROVIDER *provider, + void *cbdata), + void *cbdata); + +/* Getters for other library functions */ +const char *ossl_provider_name(const OSSL_PROVIDER *prov); +const DSO *ossl_provider_dso(const OSSL_PROVIDER *prov); +const char *ossl_provider_module_name(const OSSL_PROVIDER *prov); +const char *ossl_provider_module_path(const OSSL_PROVIDER *prov); +void *ossl_provider_prov_ctx(const OSSL_PROVIDER *prov); +const OSSL_DISPATCH *ossl_provider_get0_dispatch(const OSSL_PROVIDER *prov); +OSSL_LIB_CTX *ossl_provider_libctx(const OSSL_PROVIDER *prov); + +/* Thin wrappers around calls to the provider */ +void ossl_provider_teardown(const OSSL_PROVIDER *prov); +const OSSL_PARAM *ossl_provider_gettable_params(const OSSL_PROVIDER *prov); +int ossl_provider_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]); +int ossl_provider_get_capabilities(const OSSL_PROVIDER *prov, + const char *capability, + OSSL_CALLBACK *cb, + void *arg); +int ossl_provider_self_test(const OSSL_PROVIDER *prov); +const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov, + int operation_id, + int *no_cache); +void ossl_provider_unquery_operation(const OSSL_PROVIDER *prov, + int operation_id, + const OSSL_ALGORITHM *algs); + +/* + * Cache of bits to see if we already added methods for an operation in + * the "permanent" method store. + * They should never be called for temporary method stores! + */ +int ossl_provider_set_operation_bit(OSSL_PROVIDER *provider, size_t bitnum); +int ossl_provider_test_operation_bit(OSSL_PROVIDER *provider, size_t bitnum, + int *result); + +/* Configuration */ +void ossl_provider_add_conf_module(void); + +/* Child providers */ +int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx, + const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +void ossl_provider_deinit_child(OSSL_LIB_CTX *ctx); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/refcount.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/refcount.h index 8fb536ea..3392d3b4 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/refcount.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/refcount.h @@ -1,35 +1,34 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #ifndef OSSL_INTERNAL_REFCOUNT_H # define OSSL_INTERNAL_REFCOUNT_H +# pragma once -/* Used to checking reference counts, most while doing perl5 stuff :-) */ -# if defined(OPENSSL_NO_STDIO) -# if defined(REF_PRINT) -# error "REF_PRINT requires stdio" +# include +# include + +# if defined(OPENSSL_THREADS) && !defined(OPENSSL_DEV_NO_ATOMICS) +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ + && !defined(__STDC_NO_ATOMICS__) +# include +# define HAVE_C11_ATOMICS # endif -# endif -# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ - && !defined(__STDC_NO_ATOMICS__) -# include -# define HAVE_C11_ATOMICS -# endif +# if defined(HAVE_C11_ATOMICS) && defined(ATOMIC_INT_LOCK_FREE) \ + && ATOMIC_INT_LOCK_FREE > 0 -# if defined(HAVE_C11_ATOMICS) && defined(ATOMIC_INT_LOCK_FREE) \ - && ATOMIC_INT_LOCK_FREE > 0 - -# define HAVE_ATOMICS 1 +# define HAVE_ATOMICS 1 typedef _Atomic int CRYPTO_REF_COUNT; -static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, void *lock) +static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, + ossl_unused void *lock) { *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1; return 1; @@ -45,7 +44,8 @@ static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, void *lock) * to mutable members doesn't have to be serialized anymore, which would * otherwise imply an acquire fence. Hence conditional acquire fence... */ -static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, void *lock) +static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, + ossl_unused void *lock) { *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1; if (*ret == 0) @@ -53,78 +53,108 @@ static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, void *lock) return 1; } -# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) && __GCC_ATOMIC_INT_LOCK_FREE > 0 +# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) && __GCC_ATOMIC_INT_LOCK_FREE > 0 -# define HAVE_ATOMICS 1 +# define HAVE_ATOMICS 1 typedef int CRYPTO_REF_COUNT; -static __inline__ int CRYPTO_UP_REF(int *val, int *ret, void *lock) +static __inline__ int CRYPTO_UP_REF(int *val, int *ret, ossl_unused void *lock) { *ret = __atomic_fetch_add(val, 1, __ATOMIC_RELAXED) + 1; return 1; } -static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, void *lock) +static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, + ossl_unused void *lock) { *ret = __atomic_fetch_sub(val, 1, __ATOMIC_RELAXED) - 1; if (*ret == 0) __atomic_thread_fence(__ATOMIC_ACQUIRE); return 1; } +# elif defined(__ICL) && defined(_WIN32) +# define HAVE_ATOMICS 1 +typedef volatile int CRYPTO_REF_COUNT; -# elif defined(_MSC_VER) && _MSC_VER>=1200 +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) +{ + *ret = _InterlockedExchangeAdd((void *)val, 1) + 1; + return 1; +} -# define HAVE_ATOMICS 1 +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) +{ + *ret = _InterlockedExchangeAdd((void *)val, -1) - 1; + return 1; +} + +# elif defined(_MSC_VER) && _MSC_VER>=1200 + +# define HAVE_ATOMICS 1 typedef volatile int CRYPTO_REF_COUNT; -# if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) -# include -# if defined(_M_ARM64) && !defined(_ARM_BARRIER_ISH) -# define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH -# endif +# if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) +# include +# if defined(_M_ARM64) && !defined(_ARM_BARRIER_ISH) +# define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH +# endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd_nf(val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd_nf(val, -1) - 1; if (*ret == 0) __dmb(_ARM_BARRIER_ISH); return 1; } -# else -# if !defined(_WIN32_WCE) -# pragma intrinsic(_InterlockedExchangeAdd) # else -# if _WIN32_WCE >= 0x600 - extern long __cdecl _InterlockedExchangeAdd(long volatile*, long); +# if !defined(_WIN32_WCE) +# pragma intrinsic(_InterlockedExchangeAdd) # else - /* under Windows CE we still have old-style Interlocked* functions */ - extern long __cdecl InterlockedExchangeAdd(long volatile*, long); -# define _InterlockedExchangeAdd InterlockedExchangeAdd +# if _WIN32_WCE >= 0x600 + extern long __cdecl _InterlockedExchangeAdd(long volatile*, long); +# else + /* under Windows CE we still have old-style Interlocked* functions */ + extern long __cdecl InterlockedExchangeAdd(long volatile*, long); +# define _InterlockedExchangeAdd InterlockedExchangeAdd +# endif # endif -# endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd(val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd(val, -1) - 1; return 1; } -# endif +# endif -# else +# endif +# endif /* !OPENSSL_DEV_NO_ATOMICS */ + +/* + * All the refcounting implementations above define HAVE_ATOMICS, so if it's + * still undefined here (such as when OPENSSL_DEV_NO_ATOMICS is defined), it + * means we need to implement a fallback. This fallback uses locks. + */ +# ifndef HAVE_ATOMICS typedef int CRYPTO_REF_COUNT; @@ -140,11 +170,9 @@ typedef int CRYPTO_REF_COUNT; # define REF_ASSERT_ISNT(i) # endif -# ifdef REF_PRINT -# define REF_PRINT_COUNT(a, b) \ - fprintf(stderr, "%p:%4d:%s\n", b, b->references, a) -# else -# define REF_PRINT_COUNT(a, b) -# endif +# define REF_PRINT_EX(text, count, object) \ + OSSL_TRACE3(REF_COUNT, "%p:%4d:%s\n", (object), (count), (text)); +# define REF_PRINT_COUNT(text, object) \ + REF_PRINT_EX(text, object->references, (void *)object) #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sha3.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sha3.h new file mode 100644 index 00000000..80ad86e5 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sha3.h @@ -0,0 +1,54 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* This header can move into provider when legacy support is removed */ +#ifndef OSSL_INTERNAL_SHA3_H +# define OSSL_INTERNAL_SHA3_H +# pragma once + +# include +# include + +# define KECCAK1600_WIDTH 1600 +# define SHA3_MDSIZE(bitlen) (bitlen / 8) +# define KMAC_MDSIZE(bitlen) 2 * (bitlen / 8) +# define SHA3_BLOCKSIZE(bitlen) (KECCAK1600_WIDTH - bitlen * 2) / 8 + +typedef struct keccak_st KECCAK1600_CTX; + +typedef size_t (sha3_absorb_fn)(void *vctx, const void *inp, size_t len); +typedef int (sha3_final_fn)(unsigned char *md, void *vctx); + +typedef struct prov_sha3_meth_st +{ + sha3_absorb_fn *absorb; + sha3_final_fn *final; +} PROV_SHA3_METHOD; + +struct keccak_st { + uint64_t A[5][5]; + size_t block_size; /* cached ctx->digest->block_size */ + size_t md_size; /* output length, variable in XOF */ + size_t bufsz; /* used bytes in below buffer */ + unsigned char buf[KECCAK1600_WIDTH / 8 - 32]; + unsigned char pad; + PROV_SHA3_METHOD meth; +}; + +void ossl_sha3_reset(KECCAK1600_CTX *ctx); +int ossl_sha3_init(KECCAK1600_CTX *ctx, unsigned char pad, size_t bitlen); +int ossl_keccak_kmac_init(KECCAK1600_CTX *ctx, unsigned char pad, + size_t bitlen); +int ossl_sha3_update(KECCAK1600_CTX *ctx, const void *_inp, size_t len); +int ossl_sha3_final(unsigned char *md, KECCAK1600_CTX *ctx); + +size_t SHA3_absorb(uint64_t A[5][5], const unsigned char *inp, size_t len, + size_t r); + +#endif /* OSSL_INTERNAL_SHA3_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sizes.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sizes.h new file mode 100644 index 00000000..f6496c81 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sizes.h @@ -0,0 +1,22 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_SIZES_H +# define OSSL_INTERNAL_SIZES_H +# pragma once + +/* + * Max sizes used to allocate buffers with a fixed sizes, for example for + * stack allocations, structure fields, ... + */ +# define OSSL_MAX_NAME_SIZE 50 /* Algorithm name */ +# define OSSL_MAX_PROPQUERY_SIZE 256 /* Property query strings */ +# define OSSL_MAX_ALGORITHM_ID_SIZE 256 /* AlgorithmIdentifier DER */ + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm3.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sm3.h similarity index 56% rename from deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm3.h rename to deps/openssl/android/armeabi-v7a/usr/local/include/internal/sm3.h index 97e74603..db1d61f0 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm3.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sm3.h @@ -1,15 +1,17 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2017 Ribose Inc. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef OSSL_CRYPTO_SM3_H -# define OSSL_CRYPTO_SM3_H +/* This header can move into provider when legacy support is removed */ +#ifndef OSSL_INTERNAL_SM3_H +# define OSSL_INTERNAL_SM3_H +# pragma once # include @@ -30,10 +32,8 @@ typedef struct SM3state_st { unsigned int num; } SM3_CTX; -int sm3_init(SM3_CTX *c); -int sm3_update(SM3_CTX *c, const void *data, size_t len); -int sm3_final(unsigned char *md, SM3_CTX *c); +int ossl_sm3_init(SM3_CTX *c); +int ossl_sm3_update(SM3_CTX *c, const void *data, size_t len); +int ossl_sm3_final(unsigned char *md, SM3_CTX *c); -void sm3_block_data_order(SM3_CTX *c, const void *p, size_t num); - -#endif +#endif /* OSSL_INTERNAL_SM3_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sockets.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sockets.h index 4fc1aecd..1f5fefcc 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sockets.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sockets.h @@ -1,15 +1,17 @@ /* * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ - #ifndef OSSL_INTERNAL_SOCKETS_H # define OSSL_INTERNAL_SOCKETS_H +# pragma once + +# include # if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) # define NO_SYS_PARAM_H @@ -26,6 +28,8 @@ # elif defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) # if defined(__DJGPP__) +# define WATT32 +# define WATT32_NO_OLDIES # include # include # include @@ -73,7 +77,7 @@ struct servent *PASCAL getservbyname(const char *, const char *); # include # else # include -# ifndef NO_SYS_UN_H +# if !defined(NO_SYS_UN_H) && defined(AF_UNIX) && !defined(OPENSSL_NO_UNIX_SOCK) # include # ifndef UNIX_PATH_MAX # define UNIX_PATH_MAX sizeof(((struct sockaddr_un *)NULL)->sun_path) @@ -121,6 +125,15 @@ struct servent *PASCAL getservbyname(const char *, const char *); # endif # endif +/* + * Some platforms define AF_UNIX, but don't support it + */ +# if !defined(OPENSSL_NO_UNIX_SOCK) +# if !defined(AF_UNIX) || defined(NO_SYS_UN_H) +# define OPENSSL_NO_UNIX_SOCK +# endif +# endif + # define get_last_socket_error() errno # define clear_socket_error() errno=0 @@ -132,8 +145,6 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define readsocket(s,b,n) recv((s),(b),(n),0) # define writesocket(s,b,n) send((s),(b),(n),0) # elif defined(__DJGPP__) -# define WATT32 -# define WATT32_NO_OLDIES # define closesocket(s) close_s(s) # define readsocket(s,b,n) read_s(s,b,n) # define writesocket(s,b,n) send(s,b,n,0) @@ -147,6 +158,17 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define closesocket(s) close(s) # define readsocket(s,b,n) read((s),(b),(n)) # define writesocket(s,b,n) write((s),(char *)(b),(n)) +# elif defined(OPENSSL_SYS_TANDEM) +# if defined(OPENSSL_TANDEM_FLOSS) +# include +# define readsocket(s,b,n) floss_read((s),(b),(n)) +# define writesocket(s,b,n) floss_write((s),(b),(n)) +# else +# define readsocket(s,b,n) read((s),(b),(n)) +# define writesocket(s,b,n) write((s),(b),(n)) +# endif +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# define closesocket(s) close(s) # else # define ioctlsocket(a,b,c) ioctl(a,b,c) # define closesocket(s) close(s) @@ -154,4 +176,11 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define writesocket(s,b,n) write((s),(b),(n)) # endif +/* also in apps/include/apps.h */ +# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINCE) +# define openssl_fdset(a, b) FD_SET((unsigned int)(a), b) +# else +# define openssl_fdset(a, b) FD_SET(a, b) +# endif + #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sslconf.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sslconf.h index 92c8941d..fd7f7e33 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sslconf.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sslconf.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_SSLCONF_H # define OSSL_INTERNAL_SSLCONF_H +# pragma once typedef struct ssl_conf_cmd_st SSL_CONF_CMD; diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/symhacks.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/symhacks.h new file mode 100644 index 00000000..33bae51e --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/symhacks.h @@ -0,0 +1,27 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_SYMHACKS_H +# define OSSL_INTERNAL_SYMHACKS_H +# pragma once + +# include + +# if defined(OPENSSL_SYS_VMS) + +/* ossl_provider_gettable_params vs OSSL_PROVIDER_gettable_params */ +# undef ossl_provider_gettable_params +# define ossl_provider_gettable_params ossl_int_prov_gettable_params +/* ossl_provider_get_params vs OSSL_PROVIDER_get_params */ +# undef ossl_provider_get_params +# define ossl_provider_get_params ossl_int_prov_get_params + +# endif + +#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_once.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_once.h index 8f8aa6e1..d6cb2eee 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_once.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_once.h @@ -1,17 +1,28 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_INTERNAL_THREAD_ONCE_H +# define OSSL_INTERNAL_THREAD_ONCE_H +# pragma once + +# include +/* + * Initialisation of global data should never happen via "RUN_ONCE" inside the + * FIPS module. Global data should instead always be associated with a specific + * OSSL_LIB_CTX object. In this way data will get cleaned up correctly when the + * module gets unloaded. + */ +# if !defined(FIPS_MODULE) || defined(ALLOW_RUN_ONCE_IN_FIPS) /* * DEFINE_RUN_ONCE: Define an initialiser function that should be run exactly - * once. It takes no arguments and returns and int result (1 for success or + * once. It takes no arguments and returns an int result (1 for success or * 0 for failure). Typical usage might be: * * DEFINE_RUN_ONCE(myinitfunc) @@ -23,7 +34,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE(init) \ +# define DEFINE_RUN_ONCE(init) \ static int init(void); \ int init##_ossl_ret_ = 0; \ void init##_ossl_(void) \ @@ -36,14 +47,14 @@ * DECLARE_RUN_ONCE: Declare an initialiser function that should be run exactly * once that has been defined in another file via DEFINE_RUN_ONCE(). */ -#define DECLARE_RUN_ONCE(init) \ +# define DECLARE_RUN_ONCE(init) \ extern int init##_ossl_ret_; \ void init##_ossl_(void); /* * DEFINE_RUN_ONCE_STATIC: Define an initialiser function that should be run * exactly once. This function will be declared as static within the file. It - * takes no arguments and returns and int result (1 for success or 0 for + * takes no arguments and returns an int result (1 for success or 0 for * failure). Typical usage might be: * * DEFINE_RUN_ONCE_STATIC(myinitfunc) @@ -55,7 +66,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE_STATIC(init) \ +# define DEFINE_RUN_ONCE_STATIC(init) \ static int init(void); \ static int init##_ossl_ret_ = 0; \ static void init##_ossl_(void) \ @@ -96,7 +107,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE_STATIC_ALT(initalt, init) \ +# define DEFINE_RUN_ONCE_STATIC_ALT(initalt, init) \ static int initalt(void); \ static void initalt##_ossl_(void) \ { \ @@ -115,7 +126,7 @@ * * (*) by convention, since the init function must return 1 on success. */ -#define RUN_ONCE(once, init) \ +# define RUN_ONCE(once, init) \ (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0) /* @@ -133,5 +144,8 @@ * * (*) by convention, since the init function must return 1 on success. */ -#define RUN_ONCE_ALT(once, initalt, init) \ +# define RUN_ONCE_ALT(once, initalt, init) \ (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0) + +# endif /* FIPS_MODULE */ +#endif /* OSSL_INTERNAL_THREAD_ONCE_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tlsgroups.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tlsgroups.h new file mode 100644 index 00000000..8a35ced1 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tlsgroups.h @@ -0,0 +1,50 @@ +/* + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_TLSGROUPS_H +# define OSSL_INTERNAL_TLSGROUPS_H +# pragma once + +# define OSSL_TLS_GROUP_ID_sect163k1 0x0001 +# define OSSL_TLS_GROUP_ID_sect163r1 0x0002 +# define OSSL_TLS_GROUP_ID_sect163r2 0x0003 +# define OSSL_TLS_GROUP_ID_sect193r1 0x0004 +# define OSSL_TLS_GROUP_ID_sect193r2 0x0005 +# define OSSL_TLS_GROUP_ID_sect233k1 0x0006 +# define OSSL_TLS_GROUP_ID_sect233r1 0x0007 +# define OSSL_TLS_GROUP_ID_sect239k1 0x0008 +# define OSSL_TLS_GROUP_ID_sect283k1 0x0009 +# define OSSL_TLS_GROUP_ID_sect283r1 0x000A +# define OSSL_TLS_GROUP_ID_sect409k1 0x000B +# define OSSL_TLS_GROUP_ID_sect409r1 0x000C +# define OSSL_TLS_GROUP_ID_sect571k1 0x000D +# define OSSL_TLS_GROUP_ID_sect571r1 0x000E +# define OSSL_TLS_GROUP_ID_secp160k1 0x000F +# define OSSL_TLS_GROUP_ID_secp160r1 0x0010 +# define OSSL_TLS_GROUP_ID_secp160r2 0x0011 +# define OSSL_TLS_GROUP_ID_secp192k1 0x0012 +# define OSSL_TLS_GROUP_ID_secp192r1 0x0013 +# define OSSL_TLS_GROUP_ID_secp224k1 0x0014 +# define OSSL_TLS_GROUP_ID_secp224r1 0x0015 +# define OSSL_TLS_GROUP_ID_secp256k1 0x0016 +# define OSSL_TLS_GROUP_ID_secp256r1 0x0017 +# define OSSL_TLS_GROUP_ID_secp384r1 0x0018 +# define OSSL_TLS_GROUP_ID_secp521r1 0x0019 +# define OSSL_TLS_GROUP_ID_brainpoolP256r1 0x001A +# define OSSL_TLS_GROUP_ID_brainpoolP384r1 0x001B +# define OSSL_TLS_GROUP_ID_brainpoolP512r1 0x001C +# define OSSL_TLS_GROUP_ID_x25519 0x001D +# define OSSL_TLS_GROUP_ID_x448 0x001E +# define OSSL_TLS_GROUP_ID_ffdhe2048 0x0100 +# define OSSL_TLS_GROUP_ID_ffdhe3072 0x0101 +# define OSSL_TLS_GROUP_ID_ffdhe4096 0x0102 +# define OSSL_TLS_GROUP_ID_ffdhe6144 0x0103 +# define OSSL_TLS_GROUP_ID_ffdhe8192 0x0104 + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tsan_assist.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tsan_assist.h index cc30162e..17205d10 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tsan_assist.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tsan_assist.h @@ -1,7 +1,7 @@ /* - * Copyright 2018-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -56,8 +56,7 @@ # define TSAN_QUALIFIER _Atomic # define tsan_load(ptr) atomic_load_explicit((ptr), memory_order_relaxed) # define tsan_store(ptr, val) atomic_store_explicit((ptr), (val), memory_order_relaxed) -# define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed) -# define tsan_decr(ptr) atomic_fetch_add_explicit((ptr), -1, memory_order_relaxed) +# define tsan_add(ptr, n) atomic_fetch_add_explicit((ptr), (n), memory_order_relaxed) # define tsan_ld_acq(ptr) atomic_load_explicit((ptr), memory_order_acquire) # define tsan_st_rel(ptr, val) atomic_store_explicit((ptr), (val), memory_order_release) # endif @@ -69,8 +68,7 @@ # define TSAN_QUALIFIER volatile # define tsan_load(ptr) __atomic_load_n((ptr), __ATOMIC_RELAXED) # define tsan_store(ptr, val) __atomic_store_n((ptr), (val), __ATOMIC_RELAXED) -# define tsan_counter(ptr) __atomic_fetch_add((ptr), 1, __ATOMIC_RELAXED) -# define tsan_decr(ptr) __atomic_fetch_add((ptr), -1, __ATOMIC_RELAXED) +# define tsan_add(ptr, n) __atomic_fetch_add((ptr), (n), __ATOMIC_RELAXED) # define tsan_ld_acq(ptr) __atomic_load_n((ptr), __ATOMIC_ACQUIRE) # define tsan_st_rel(ptr, val) __atomic_store_n((ptr), (val), __ATOMIC_RELEASE) # endif @@ -113,13 +111,10 @@ # pragma intrinsic(_InterlockedExchangeAdd) # ifdef _WIN64 # pragma intrinsic(_InterlockedExchangeAdd64) -# define tsan_counter(ptr) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), 1) \ - : _InterlockedExchangeAdd((ptr), 1)) -# define tsan_decr(ptr) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), -1) \ - : _InterlockedExchangeAdd((ptr), -1)) +# define tsan_add(ptr, n) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), (n)) \ + : _InterlockedExchangeAdd((ptr), (n))) # else -# define tsan_counter(ptr) _InterlockedExchangeAdd((ptr), 1) -# define tsan_decr(ptr) _InterlockedExchangeAdd((ptr), -1) +# define tsan_add(ptr, n) _InterlockedExchangeAdd((ptr), (n)) # endif # if !defined(_ISO_VOLATILE) # define tsan_ld_acq(ptr) (*(ptr)) @@ -130,11 +125,16 @@ #ifndef TSAN_QUALIFIER -# define TSAN_QUALIFIER volatile +# ifdef OPENSSL_THREADS +# define TSAN_QUALIFIER volatile +# define TSAN_REQUIRES_LOCKING +# else /* OPENSSL_THREADS */ +# define TSAN_QUALIFIER +# endif /* OPENSSL_THREADS */ + # define tsan_load(ptr) (*(ptr)) # define tsan_store(ptr, val) (*(ptr) = (val)) -# define tsan_counter(ptr) ((*(ptr))++) -# define tsan_decr(ptr) ((*(ptr))--) +# define tsan_add(ptr, n) (*(ptr) += (n)) /* * Lack of tsan_ld_acq and tsan_ld_rel means that compiler support is not * sophisticated enough to support them. Code that relies on them should be @@ -142,3 +142,7 @@ */ #endif + +#define tsan_counter(ptr) tsan_add((ptr), 1) +#define tsan_decr(ptr) tsan_add((ptr), -1) + diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/unicode.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/unicode.h new file mode 100644 index 00000000..a6de8352 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/unicode.h @@ -0,0 +1,31 @@ +/* + * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_UNICODE_H +# define OSSL_INTERNAL_UNICODE_H +# pragma once + +typedef enum { + SURROGATE_MIN = 0xd800UL, + SURROGATE_MAX = 0xdfffUL, + UNICODE_MAX = 0x10ffffUL, + UNICODE_LIMIT +} UNICODE_CONSTANTS; + +static ossl_unused ossl_inline int is_unicode_surrogate(unsigned long value) +{ + return value >= SURROGATE_MIN && value <= SURROGATE_MAX; +} + +static ossl_unused ossl_inline int is_unicode_valid(unsigned long value) +{ + return value <= UNICODE_MAX && !is_unicode_surrogate(value); +} + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H index ad0a5f56..d251d0a0 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H index 5f5513e8..91ac6b33 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/aes.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/aes.h index 245c552a..d0f9dfc6 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/aes.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/aes.h @@ -1,14 +1,20 @@ /* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_AES_H -# define HEADER_AES_H +#ifndef OPENSSL_AES_H +# define OPENSSL_AES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_AES_H +# endif # include @@ -17,72 +23,85 @@ extern "C" { # endif -# define AES_ENCRYPT 1 -# define AES_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ -# define AES_MAXNR 14 # define AES_BLOCK_SIZE 16 +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define AES_ENCRYPT 1 +# define AES_DECRYPT 0 + +# define AES_MAXNR 14 + + /* This should be a hidden type, but EVP requires that the size be known */ struct aes_key_st { -# ifdef AES_LONG +# ifdef AES_LONG unsigned long rd_key[4 * (AES_MAXNR + 1)]; -# else +# else unsigned int rd_key[4 * (AES_MAXNR + 1)]; -# endif +# endif int rounds; }; typedef struct aes_key_st AES_KEY; -const char *AES_options(void); - +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *AES_options(void); +OSSL_DEPRECATEDIN_3_0 int AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 int AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); - +OSSL_DEPRECATEDIN_3_0 void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); - +OSSL_DEPRECATEDIN_3_0 void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num); + /* NB: the IV is _two_ blocks long */ +OSSL_DEPRECATEDIN_3_0 void AES_ige_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); /* NB: the IV is _four_ blocks long */ +OSSL_DEPRECATEDIN_3_0 void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - const AES_KEY *key2, const unsigned char *ivec, - const int enc); - + size_t length, const AES_KEY *key, const AES_KEY *key2, + const unsigned char *ivec, const int enc); +OSSL_DEPRECATEDIN_3_0 int AES_wrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); + unsigned char *out, const unsigned char *in, + unsigned int inlen); +OSSL_DEPRECATEDIN_3_0 int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); + unsigned char *out, const unsigned char *in, + unsigned int inlen); +# endif # ifdef __cplusplus diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h index 9522eec1..85ae8d58 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h @@ -1,15 +1,29 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/asn1.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1_H -# define HEADER_ASN1_H + +#ifndef OPENSSL_ASN1_H +# define OPENSSL_ASN1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1_H +# endif + +# ifndef OPENSSL_NO_STDIO +# include +# endif # include # include # include @@ -18,10 +32,8 @@ # include # include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif +# include +# include # ifdef OPENSSL_BUILD_SHLIBCRYPTO # undef OPENSSL_EXTERN @@ -115,8 +127,36 @@ extern "C" { # define SMIME_OLDMIME 0x400 # define SMIME_CRLFEOL 0x800 # define SMIME_STREAM 0x1000 - struct X509_algor_st; -DEFINE_STACK_OF(X509_ALGOR) + +/* Stacks for types not otherwise defined in this header */ +SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) +#define sk_X509_ALGOR_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_value(sk, idx) ((X509_ALGOR *)OPENSSL_sk_value(ossl_check_const_X509_ALGOR_sk_type(sk), (idx))) +#define sk_X509_ALGOR_new(cmp) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new(ossl_check_X509_ALGOR_compfunc_type(cmp))) +#define sk_X509_ALGOR_new_null() ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_null()) +#define sk_X509_ALGOR_new_reserve(cmp, n) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_reserve(ossl_check_X509_ALGOR_compfunc_type(cmp), (n))) +#define sk_X509_ALGOR_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ALGOR_sk_type(sk), (n)) +#define sk_X509_ALGOR_free(sk) OPENSSL_sk_free(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_delete(sk, i) ((X509_ALGOR *)OPENSSL_sk_delete(ossl_check_X509_ALGOR_sk_type(sk), (i))) +#define sk_X509_ALGOR_delete_ptr(sk, ptr) ((X509_ALGOR *)OPENSSL_sk_delete_ptr(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr))) +#define sk_X509_ALGOR_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_pop(sk) ((X509_ALGOR *)OPENSSL_sk_pop(ossl_check_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_shift(sk) ((X509_ALGOR *)OPENSSL_sk_shift(ossl_check_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ALGOR_sk_type(sk),ossl_check_X509_ALGOR_freefunc_type(freefunc)) +#define sk_X509_ALGOR_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), (idx)) +#define sk_X509_ALGOR_set(sk, idx, ptr) ((X509_ALGOR *)OPENSSL_sk_set(ossl_check_X509_ALGOR_sk_type(sk), (idx), ossl_check_X509_ALGOR_type(ptr))) +#define sk_X509_ALGOR_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), pnum) +#define sk_X509_ALGOR_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_dup(sk) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_dup(ossl_check_const_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_copyfunc_type(copyfunc), ossl_check_X509_ALGOR_freefunc_type(freefunc))) +#define sk_X509_ALGOR_set_cmp_func(sk, cmp) ((sk_X509_ALGOR_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_compfunc_type(cmp))) + + # define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ /* @@ -183,15 +223,41 @@ typedef struct ASN1_ENCODING_st { (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) # define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) -typedef struct asn1_string_table_st { +struct asn1_string_table_st { int nid; long minsize; long maxsize; unsigned long mask; unsigned long flags; -} ASN1_STRING_TABLE; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING_TABLE, ASN1_STRING_TABLE, ASN1_STRING_TABLE) +#define sk_ASN1_STRING_TABLE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_value(sk, idx) ((ASN1_STRING_TABLE *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), (idx))) +#define sk_ASN1_STRING_TABLE_new(cmp) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp))) +#define sk_ASN1_STRING_TABLE_new_null() ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_STRING_TABLE_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_TABLE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (n)) +#define sk_ASN1_STRING_TABLE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_delete(sk, i) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (i))) +#define sk_ASN1_STRING_TABLE_delete_ptr(sk, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr))) +#define sk_ASN1_STRING_TABLE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_pop(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_shift(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk),ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc)) +#define sk_ASN1_STRING_TABLE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), (idx)) +#define sk_ASN1_STRING_TABLE_set(sk, idx, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_set(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (idx), ossl_check_ASN1_STRING_TABLE_type(ptr))) +#define sk_ASN1_STRING_TABLE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), pnum) +#define sk_ASN1_STRING_TABLE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_dup(sk) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc))) +#define sk_ASN1_STRING_TABLE_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_TABLE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp))) -DEFINE_STACK_OF(ASN1_STRING_TABLE) /* size limits: this stuff is taken straight from RFC2459 */ @@ -214,50 +280,79 @@ typedef struct ASN1_VALUE_st ASN1_VALUE; /* Declare ASN1 functions: the implement macro in in asn1t.h */ -# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ -# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) +# define DECLARE_ASN1_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_FUNCTIONS(type) \ + DECLARE_ASN1_FUNCTIONS_attr(extern, type) -# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) +# define DECLARE_ASN1_ALLOC_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_attr(extern, type) -# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + DECLARE_ASN1_ITEM_attr(attr, itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(extern, type, itname, name) -# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(const type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, name, name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_NDEF_FUNCTION(name) \ - int i2d_##name##_NDEF(name *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + attr type *d2i_##name(type **a, const unsigned char **in, long len); \ + attr int i2d_##name(const type *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(extern, type, name) -# define DECLARE_ASN1_FUNCTIONS_const(name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) +# define DECLARE_ASN1_NDEF_FUNCTION_attr(attr, name) \ + attr int i2d_##name##_NDEF(const name *a, unsigned char **out); +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + DECLARE_ASN1_NDEF_FUNCTION_attr(extern, name) -# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - type *name##_new(void); \ - void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + attr type *name##_new(void); \ + attr void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ - DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) +# define DECLARE_ASN1_DUP_FUNCTION_attr(attr, type) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, type) +# define DECLARE_ASN1_DUP_FUNCTION(type) \ + DECLARE_ASN1_DUP_FUNCTION_attr(extern, type) -# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx); +# define DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, name) \ + attr type *name##_dup(const type *a); +# define DECLARE_ASN1_DUP_FUNCTION_name(type, name) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(extern, type, name) + +# define DECLARE_ASN1_PRINT_FUNCTION_attr(attr, stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, stname) +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_attr(extern, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, fname) \ + attr int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx); +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(extern, stname, fname) # define D2I_OF(type) type *(*)(type **,const unsigned char **,long) -# define I2D_OF(type) int (*)(type *,unsigned char **) -# define I2D_OF_const(type) int (*)(const type *,unsigned char **) +# define I2D_OF(type) int (*)(const type *,unsigned char **) # define CHECKED_D2I_OF(type, d2i) \ ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) @@ -271,10 +366,11 @@ typedef struct ASN1_VALUE_st ASN1_VALUE; ((void**) (1 ? p : (type**)0)) # define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) -# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(const type *,unsigned char **) # define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) -TYPEDEF_D2I2D_OF(void); +typedef void *d2i_of_void(void **, const unsigned char **, long); +typedef int i2d_of_void(const void *, unsigned char **); /*- * The following macros and typedefs allow an ASN1_ITEM @@ -312,23 +408,6 @@ TYPEDEF_D2I2D_OF(void); * */ -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM ASN1_ITEM_EXP; - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) - -# define ASN1_ITEM_rptr(ref) (&(ref##_it)) - -# define DECLARE_ASN1_ITEM(name) \ - OPENSSL_EXTERN const ASN1_ITEM name##_it; - -# else /* * Platforms that can't easily handle shared global variables are declared as @@ -339,17 +418,17 @@ typedef const ASN1_ITEM ASN1_ITEM_EXP; typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); /* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr()) +# define ASN1_ITEM_ptr(iptr) (iptr()) /* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (iptr##_it) +# define ASN1_ITEM_ref(iptr) (iptr##_it) -# define ASN1_ITEM_rptr(ref) (ref##_it()) +# define ASN1_ITEM_rptr(ref) (ref##_it()) -# define DECLARE_ASN1_ITEM(name) \ - const ASN1_ITEM * name##_it(void); - -# endif +# define DECLARE_ASN1_ITEM_attr(attr, name) \ + attr const ASN1_ITEM * name##_it(void); +# define DECLARE_ASN1_ITEM(name) \ + DECLARE_ASN1_ITEM_attr(extern, name) /* Parameters used by ASN1_STRING_print_ex() */ @@ -362,6 +441,11 @@ typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); # define ASN1_STRFLGS_ESC_CTRL 2 # define ASN1_STRFLGS_ESC_MSB 4 +/* Lower 8 bits are reserved as an output type specifier */ +# define ASN1_DTFLGS_TYPE_MASK 0x0FUL +# define ASN1_DTFLGS_RFC822 0x00UL +# define ASN1_DTFLGS_ISO8601 0x01UL + /* * This flag determines how we do escaping: normally RC2253 backslash only, * set this to use backslash and quote. @@ -435,13 +519,8 @@ typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); ASN1_STRFLGS_DUMP_UNKNOWN | \ ASN1_STRFLGS_DUMP_DER) -DEFINE_STACK_OF(ASN1_INTEGER) -DEFINE_STACK_OF(ASN1_GENERALSTRING) - -DEFINE_STACK_OF(ASN1_UTF8STRING) - -typedef struct asn1_type_st { +struct asn1_type_st { int type; union { char *ptr; @@ -470,14 +549,40 @@ typedef struct asn1_type_st { ASN1_STRING *sequence; ASN1_VALUE *asn1_value; } value; -} ASN1_TYPE; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_TYPE, ASN1_TYPE, ASN1_TYPE) +#define sk_ASN1_TYPE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_value(sk, idx) ((ASN1_TYPE *)OPENSSL_sk_value(ossl_check_const_ASN1_TYPE_sk_type(sk), (idx))) +#define sk_ASN1_TYPE_new(cmp) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new(ossl_check_ASN1_TYPE_compfunc_type(cmp))) +#define sk_ASN1_TYPE_new_null() ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_TYPE_new_reserve(cmp, n) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_TYPE_compfunc_type(cmp), (n))) +#define sk_ASN1_TYPE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_TYPE_sk_type(sk), (n)) +#define sk_ASN1_TYPE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_delete(sk, i) ((ASN1_TYPE *)OPENSSL_sk_delete(ossl_check_ASN1_TYPE_sk_type(sk), (i))) +#define sk_ASN1_TYPE_delete_ptr(sk, ptr) ((ASN1_TYPE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr))) +#define sk_ASN1_TYPE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_pop(sk) ((ASN1_TYPE *)OPENSSL_sk_pop(ossl_check_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_shift(sk) ((ASN1_TYPE *)OPENSSL_sk_shift(ossl_check_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_TYPE_sk_type(sk),ossl_check_ASN1_TYPE_freefunc_type(freefunc)) +#define sk_ASN1_TYPE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), (idx)) +#define sk_ASN1_TYPE_set(sk, idx, ptr) ((ASN1_TYPE *)OPENSSL_sk_set(ossl_check_ASN1_TYPE_sk_type(sk), (idx), ossl_check_ASN1_TYPE_type(ptr))) +#define sk_ASN1_TYPE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), pnum) +#define sk_ASN1_TYPE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_dup(sk) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_copyfunc_type(copyfunc), ossl_check_ASN1_TYPE_freefunc_type(freefunc))) +#define sk_ASN1_TYPE_set_cmp_func(sk, cmp) ((sk_ASN1_TYPE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_compfunc_type(cmp))) -DEFINE_STACK_OF(ASN1_TYPE) typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) /* This is used to contain a list of bit names */ typedef struct BIT_STRING_BITNAME_st { @@ -515,7 +620,8 @@ typedef struct BIT_STRING_BITNAME_st { B_ASN1_BMPSTRING|\ B_ASN1_UTF8STRING -DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) +DECLARE_ASN1_ALLOC_FUNCTIONS_name(ASN1_TYPE, ASN1_TYPE) +DECLARE_ASN1_ENCODE_FUNCTIONS(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) int ASN1_TYPE_get(const ASN1_TYPE *a); void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); @@ -525,21 +631,41 @@ int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); -ASN1_OBJECT *ASN1_OBJECT_new(void); -void ASN1_OBJECT_free(ASN1_OBJECT *a); -int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); -ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, - long length); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_OBJECT, ASN1_OBJECT, ASN1_OBJECT) +#define sk_ASN1_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_value(sk, idx) ((ASN1_OBJECT *)OPENSSL_sk_value(ossl_check_const_ASN1_OBJECT_sk_type(sk), (idx))) +#define sk_ASN1_OBJECT_new(cmp) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new(ossl_check_ASN1_OBJECT_compfunc_type(cmp))) +#define sk_ASN1_OBJECT_new_null() ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_null()) +#define sk_ASN1_OBJECT_new_reserve(cmp, n) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_OBJECT_compfunc_type(cmp), (n))) +#define sk_ASN1_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_OBJECT_sk_type(sk), (n)) +#define sk_ASN1_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_delete(sk, i) ((ASN1_OBJECT *)OPENSSL_sk_delete(ossl_check_ASN1_OBJECT_sk_type(sk), (i))) +#define sk_ASN1_OBJECT_delete_ptr(sk, ptr) ((ASN1_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr))) +#define sk_ASN1_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_pop(sk) ((ASN1_OBJECT *)OPENSSL_sk_pop(ossl_check_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_shift(sk) ((ASN1_OBJECT *)OPENSSL_sk_shift(ossl_check_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_OBJECT_sk_type(sk),ossl_check_ASN1_OBJECT_freefunc_type(freefunc)) +#define sk_ASN1_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), (idx)) +#define sk_ASN1_OBJECT_set(sk, idx, ptr) ((ASN1_OBJECT *)OPENSSL_sk_set(ossl_check_ASN1_OBJECT_sk_type(sk), (idx), ossl_check_ASN1_OBJECT_type(ptr))) +#define sk_ASN1_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), pnum) +#define sk_ASN1_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_dup(sk) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_copyfunc_type(copyfunc), ossl_check_ASN1_OBJECT_freefunc_type(freefunc))) +#define sk_ASN1_OBJECT_set_cmp_func(sk, cmp) ((sk_ASN1_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_compfunc_type(cmp))) -DECLARE_ASN1_ITEM(ASN1_OBJECT) -DEFINE_STACK_OF(ASN1_OBJECT) +DECLARE_ASN1_FUNCTIONS(ASN1_OBJECT) ASN1_STRING *ASN1_STRING_new(void); void ASN1_STRING_free(ASN1_STRING *a); void ASN1_STRING_clear_free(ASN1_STRING *a); int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); -ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); +DECLARE_ASN1_DUP_FUNCTION(ASN1_STRING) ASN1_STRING *ASN1_STRING_type_new(int type); int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); /* @@ -549,9 +675,13 @@ int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); int ASN1_STRING_length(const ASN1_STRING *x); -void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# endif int ASN1_STRING_type(const ASN1_STRING *x); -DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 unsigned char *ASN1_STRING_data(ASN1_STRING *x); +# endif const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) @@ -567,10 +697,39 @@ int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, BIT_STRING_BITNAME *tbl); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_INTEGER, ASN1_INTEGER, ASN1_INTEGER) +#define sk_ASN1_INTEGER_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_value(sk, idx) ((ASN1_INTEGER *)OPENSSL_sk_value(ossl_check_const_ASN1_INTEGER_sk_type(sk), (idx))) +#define sk_ASN1_INTEGER_new(cmp) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new(ossl_check_ASN1_INTEGER_compfunc_type(cmp))) +#define sk_ASN1_INTEGER_new_null() ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_null()) +#define sk_ASN1_INTEGER_new_reserve(cmp, n) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_INTEGER_compfunc_type(cmp), (n))) +#define sk_ASN1_INTEGER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_INTEGER_sk_type(sk), (n)) +#define sk_ASN1_INTEGER_free(sk) OPENSSL_sk_free(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_delete(sk, i) ((ASN1_INTEGER *)OPENSSL_sk_delete(ossl_check_ASN1_INTEGER_sk_type(sk), (i))) +#define sk_ASN1_INTEGER_delete_ptr(sk, ptr) ((ASN1_INTEGER *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr))) +#define sk_ASN1_INTEGER_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_pop(sk) ((ASN1_INTEGER *)OPENSSL_sk_pop(ossl_check_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_shift(sk) ((ASN1_INTEGER *)OPENSSL_sk_shift(ossl_check_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_INTEGER_sk_type(sk),ossl_check_ASN1_INTEGER_freefunc_type(freefunc)) +#define sk_ASN1_INTEGER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), (idx)) +#define sk_ASN1_INTEGER_set(sk, idx, ptr) ((ASN1_INTEGER *)OPENSSL_sk_set(ossl_check_ASN1_INTEGER_sk_type(sk), (idx), ossl_check_ASN1_INTEGER_type(ptr))) +#define sk_ASN1_INTEGER_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), pnum) +#define sk_ASN1_INTEGER_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_dup(sk) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_dup(ossl_check_const_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_copyfunc_type(copyfunc), ossl_check_ASN1_INTEGER_freefunc_type(freefunc))) +#define sk_ASN1_INTEGER_set_cmp_func(sk, cmp) ((sk_ASN1_INTEGER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_compfunc_type(cmp))) + + + DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, long length); -ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); +DECLARE_ASN1_DUP_FUNCTION(ASN1_INTEGER) int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) @@ -594,12 +753,40 @@ int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, const ASN1_TIME *to); DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) -ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); +DECLARE_ASN1_DUP_FUNCTION(ASN1_OCTET_STRING) int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, const ASN1_OCTET_STRING *b); int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, int len); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_UTF8STRING, ASN1_UTF8STRING, ASN1_UTF8STRING) +#define sk_ASN1_UTF8STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_value(sk, idx) ((ASN1_UTF8STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), (idx))) +#define sk_ASN1_UTF8STRING_new(cmp) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp))) +#define sk_ASN1_UTF8STRING_new_null() ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_UTF8STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_UTF8STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_UTF8STRING_sk_type(sk), (n)) +#define sk_ASN1_UTF8STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_delete(sk, i) ((ASN1_UTF8STRING *)OPENSSL_sk_delete(ossl_check_ASN1_UTF8STRING_sk_type(sk), (i))) +#define sk_ASN1_UTF8STRING_delete_ptr(sk, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr))) +#define sk_ASN1_UTF8STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_pop(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_pop(ossl_check_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_shift(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_shift(ossl_check_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_UTF8STRING_sk_type(sk),ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc)) +#define sk_ASN1_UTF8STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), (idx)) +#define sk_ASN1_UTF8STRING_set(sk, idx, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_set(ossl_check_ASN1_UTF8STRING_sk_type(sk), (idx), ossl_check_ASN1_UTF8STRING_type(ptr))) +#define sk_ASN1_UTF8STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), pnum) +#define sk_ASN1_UTF8STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_dup(sk) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_copyfunc_type(copyfunc), ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc))) +#define sk_ASN1_UTF8STRING_set_cmp_func(sk, cmp) ((sk_ASN1_UTF8STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) @@ -609,6 +796,34 @@ DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) int UTF8_getc(const unsigned char *str, int len, unsigned long *val); int UTF8_putc(unsigned char *str, int len, unsigned long value); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_GENERALSTRING, ASN1_GENERALSTRING, ASN1_GENERALSTRING) +#define sk_ASN1_GENERALSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_value(sk, idx) ((ASN1_GENERALSTRING *)OPENSSL_sk_value(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), (idx))) +#define sk_ASN1_GENERALSTRING_new(cmp) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp))) +#define sk_ASN1_GENERALSTRING_new_null() ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_GENERALSTRING_new_reserve(cmp, n) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp), (n))) +#define sk_ASN1_GENERALSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (n)) +#define sk_ASN1_GENERALSTRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_delete(sk, i) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (i))) +#define sk_ASN1_GENERALSTRING_delete_ptr(sk, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr))) +#define sk_ASN1_GENERALSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_pop(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_pop(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_shift(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_shift(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk),ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc)) +#define sk_ASN1_GENERALSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), (idx)) +#define sk_ASN1_GENERALSTRING_set(sk, idx, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_set(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (idx), ossl_check_ASN1_GENERALSTRING_type(ptr))) +#define sk_ASN1_GENERALSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), pnum) +#define sk_ASN1_GENERALSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_dup(sk) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_copyfunc_type(copyfunc), ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc))) +#define sk_ASN1_GENERALSTRING_set_cmp_func(sk, cmp) ((sk_ASN1_GENERALSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) @@ -621,6 +836,10 @@ DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) DECLARE_ASN1_FUNCTIONS(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_UTCTIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_GENERALIZEDTIME) + DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); @@ -685,19 +904,23 @@ int ASN1_put_eoc(unsigned char **pp); int ASN1_object_size(int constructed, int length, int tag); /* Used to implement other functions */ -void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, const void *x); # define ASN1_dup_of(type,i2d,d2i,x) \ ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_dup_of_const(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ CHECKED_D2I_OF(type, d2i), \ CHECKED_PTR_OF(const type, x))) -void *ASN1_item_dup(const ASN1_ITEM *it, void *x); +void *ASN1_item_dup(const ASN1_ITEM *it, const void *x); +int ASN1_item_sign_ex(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, const ASN1_OCTET_STRING *id, + EVP_PKEY *pkey, const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); +int ASN1_item_verify_ex(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + const ASN1_OCTET_STRING *id, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); /* ASN1 alloc/free macros for when a type is only used internally */ @@ -714,20 +937,17 @@ void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); in, \ CHECKED_PPTR_OF(type, x))) +void *ASN1_item_d2i_fp_ex(const ASN1_ITEM *it, FILE *in, void *x, + OSSL_LIB_CTX *libctx, const char *propq); void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); -int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, const void *x); # define ASN1_i2d_fp_of(type,i2d,out,x) \ (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ out, \ CHECKED_PTR_OF(const type, x))) -int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, const void *x); int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); # endif @@ -741,23 +961,22 @@ void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); in, \ CHECKED_PPTR_OF(type, x))) -void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); -int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); +void *ASN1_item_d2i_bio_ex(const ASN1_ITEM *it, BIO *in, void *pval, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *pval); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, const void *x); # define ASN1_i2d_bio_of(type,i2d,out,x) \ (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ out, \ CHECKED_PTR_OF(const type, x))) -int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, const void *x); +BIO *ASN1_item_i2d_mem_bio(const ASN1_ITEM *it, const ASN1_VALUE *val); int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); -int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); +int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm); +int ASN1_TIME_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); @@ -804,11 +1023,16 @@ void ASN1_STRING_TABLE_cleanup(void); /* Old API compatible functions */ ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_new_ex(const ASN1_ITEM *it, OSSL_LIB_CTX *libctx, + const char *propq); void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i_ex(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it); -int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); -int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, +int ASN1_item_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); void ASN1_add_oid_module(void); @@ -839,7 +1063,7 @@ int ASN1_str2mask(const char *str, unsigned long *pmask); /* Don't show structure name even at top level */ # define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 -int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, +int ASN1_item_print(BIO *out, const ASN1_VALUE *ifld, int indent, const ASN1_ITEM *it, const ASN1_PCTX *pctx); ASN1_PCTX *ASN1_PCTX_new(void); void ASN1_PCTX_free(ASN1_PCTX *p); @@ -864,22 +1088,43 @@ void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); const BIO_METHOD *BIO_f_asn1(void); +/* cannot constify val because of CMS_stream() */ BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const ASN1_ITEM *it); int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const char *hdr, const ASN1_ITEM *it); +/* cannot constify val because of CMS_dataFinal() */ int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, int ctype_nid, int econt_nid, STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +int SMIME_write_ASN1_ex(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1_ex(BIO *bio, int flags, BIO **bcont, + const ASN1_ITEM *it, ASN1_VALUE **x, + OSSL_LIB_CTX *libctx, const char *propq); int SMIME_crlf_copy(BIO *in, BIO *out, int flags); int SMIME_text(BIO *in, BIO *out); const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); const ASN1_ITEM *ASN1_ITEM_get(size_t i); +/* Legacy compatibility */ +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_const(type) DECLARE_ASN1_FUNCTIONS(type) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name) +# define I2D_OF_const(type) I2D_OF(type) +# define ASN1_dup_of_const(type,i2d,d2i,x) ASN1_dup_of(type,i2d,d2i,x) +# define ASN1_i2d_fp_of_const(type,i2d,out,x) ASN1_i2d_fp_of(type,i2d,out,x) +# define ASN1_i2d_bio_of_const(type,i2d,out,x) ASN1_i2d_bio_of(type,i2d,out,x) + # ifdef __cplusplus } # endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h.in new file mode 100644 index 00000000..d478bc96 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h.in @@ -0,0 +1,964 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ASN1_H +# define OPENSSL_ASN1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1_H +# endif + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include +# include +# include + +# include +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define V_ASN1_UNIVERSAL 0x00 +# define V_ASN1_APPLICATION 0x40 +# define V_ASN1_CONTEXT_SPECIFIC 0x80 +# define V_ASN1_PRIVATE 0xc0 + +# define V_ASN1_CONSTRUCTED 0x20 +# define V_ASN1_PRIMITIVE_TAG 0x1f +# define V_ASN1_PRIMATIVE_TAG /*compat*/ V_ASN1_PRIMITIVE_TAG + +# define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ +# define V_ASN1_OTHER -3/* used in ASN1_TYPE */ +# define V_ASN1_ANY -4/* used in ASN1 template code */ + +# define V_ASN1_UNDEF -1 +/* ASN.1 tag values */ +# define V_ASN1_EOC 0 +# define V_ASN1_BOOLEAN 1 /**/ +# define V_ASN1_INTEGER 2 +# define V_ASN1_BIT_STRING 3 +# define V_ASN1_OCTET_STRING 4 +# define V_ASN1_NULL 5 +# define V_ASN1_OBJECT 6 +# define V_ASN1_OBJECT_DESCRIPTOR 7 +# define V_ASN1_EXTERNAL 8 +# define V_ASN1_REAL 9 +# define V_ASN1_ENUMERATED 10 +# define V_ASN1_UTF8STRING 12 +# define V_ASN1_SEQUENCE 16 +# define V_ASN1_SET 17 +# define V_ASN1_NUMERICSTRING 18 /**/ +# define V_ASN1_PRINTABLESTRING 19 +# define V_ASN1_T61STRING 20 +# define V_ASN1_TELETEXSTRING 20/* alias */ +# define V_ASN1_VIDEOTEXSTRING 21 /**/ +# define V_ASN1_IA5STRING 22 +# define V_ASN1_UTCTIME 23 +# define V_ASN1_GENERALIZEDTIME 24 /**/ +# define V_ASN1_GRAPHICSTRING 25 /**/ +# define V_ASN1_ISO64STRING 26 /**/ +# define V_ASN1_VISIBLESTRING 26/* alias */ +# define V_ASN1_GENERALSTRING 27 /**/ +# define V_ASN1_UNIVERSALSTRING 28 /**/ +# define V_ASN1_BMPSTRING 30 + +/* + * NB the constants below are used internally by ASN1_INTEGER + * and ASN1_ENUMERATED to indicate the sign. They are *not* on + * the wire tag values. + */ + +# define V_ASN1_NEG 0x100 +# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) +# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) + +/* For use with d2i_ASN1_type_bytes() */ +# define B_ASN1_NUMERICSTRING 0x0001 +# define B_ASN1_PRINTABLESTRING 0x0002 +# define B_ASN1_T61STRING 0x0004 +# define B_ASN1_TELETEXSTRING 0x0004 +# define B_ASN1_VIDEOTEXSTRING 0x0008 +# define B_ASN1_IA5STRING 0x0010 +# define B_ASN1_GRAPHICSTRING 0x0020 +# define B_ASN1_ISO64STRING 0x0040 +# define B_ASN1_VISIBLESTRING 0x0040 +# define B_ASN1_GENERALSTRING 0x0080 +# define B_ASN1_UNIVERSALSTRING 0x0100 +# define B_ASN1_OCTET_STRING 0x0200 +# define B_ASN1_BIT_STRING 0x0400 +# define B_ASN1_BMPSTRING 0x0800 +# define B_ASN1_UNKNOWN 0x1000 +# define B_ASN1_UTF8STRING 0x2000 +# define B_ASN1_UTCTIME 0x4000 +# define B_ASN1_GENERALIZEDTIME 0x8000 +# define B_ASN1_SEQUENCE 0x10000 +/* For use with ASN1_mbstring_copy() */ +# define MBSTRING_FLAG 0x1000 +# define MBSTRING_UTF8 (MBSTRING_FLAG) +# define MBSTRING_ASC (MBSTRING_FLAG|1) +# define MBSTRING_BMP (MBSTRING_FLAG|2) +# define MBSTRING_UNIV (MBSTRING_FLAG|4) +# define SMIME_OLDMIME 0x400 +# define SMIME_CRLFEOL 0x800 +# define SMIME_STREAM 0x1000 + +/* Stacks for types not otherwise defined in this header */ +{- + generate_stack_macros("X509_ALGOR"); +-} + + +# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +/* + * This indicates that the ASN1_STRING is not a real value but just a place + * holder for the location where indefinite length constructed data should be + * inserted in the memory buffer + */ +# define ASN1_STRING_FLAG_NDEF 0x010 + +/* + * This flag is used by the CMS code to indicate that a string is not + * complete and is a place holder for content when it had all been accessed. + * The flag will be reset when content has been written to it. + */ + +# define ASN1_STRING_FLAG_CONT 0x020 +/* + * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING + * type. + */ +# define ASN1_STRING_FLAG_MSTRING 0x040 +/* String is embedded and only content should be freed */ +# define ASN1_STRING_FLAG_EMBED 0x080 +/* String should be parsed in RFC 5280's time format */ +# define ASN1_STRING_FLAG_X509_TIME 0x100 +/* This is the base type that holds just about everything :-) */ +struct asn1_string_st { + int length; + int type; + unsigned char *data; + /* + * The value of the following field depends on the type being held. It + * is mostly being used for BIT_STRING so if the input data has a + * non-zero 'unused bits' value, it will be handled correctly + */ + long flags; +}; + +/* + * ASN1_ENCODING structure: this is used to save the received encoding of an + * ASN1 type. This is useful to get round problems with invalid encodings + * which can break signatures. + */ + +typedef struct ASN1_ENCODING_st { + unsigned char *enc; /* DER encoding */ + long len; /* Length of encoding */ + int modified; /* set to 1 if 'enc' is invalid */ +} ASN1_ENCODING; + +/* Used with ASN1 LONG type: if a long is set to this it is omitted */ +# define ASN1_LONG_UNDEF 0x7fffffffL + +# define STABLE_FLAGS_MALLOC 0x01 +/* + * A zero passed to ASN1_STRING_TABLE_new_add for the flags is interpreted + * as "don't change" and STABLE_FLAGS_MALLOC is always set. By setting + * STABLE_FLAGS_MALLOC only we can clear the existing value. Use the alias + * STABLE_FLAGS_CLEAR to reflect this. + */ +# define STABLE_FLAGS_CLEAR STABLE_FLAGS_MALLOC +# define STABLE_NO_MASK 0x02 +# define DIRSTRING_TYPE \ + (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) +# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) + +struct asn1_string_table_st { + int nid; + long minsize; + long maxsize; + unsigned long mask; + unsigned long flags; +}; + +{- + generate_stack_macros("ASN1_STRING_TABLE"); +-} + +/* size limits: this stuff is taken straight from RFC2459 */ + +# define ub_name 32768 +# define ub_common_name 64 +# define ub_locality_name 128 +# define ub_state_name 128 +# define ub_organization_name 64 +# define ub_organization_unit_name 64 +# define ub_title 64 +# define ub_email_address 128 + +/* + * Declarations for template structures: for full definitions see asn1t.h + */ +typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; +typedef struct ASN1_TLC_st ASN1_TLC; +/* This is just an opaque pointer */ +typedef struct ASN1_VALUE_st ASN1_VALUE; + +/* Declare ASN1 functions: the implement macro in in asn1t.h */ + +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ + +# define DECLARE_ASN1_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_FUNCTIONS(type) \ + DECLARE_ASN1_FUNCTIONS_attr(extern, type) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_attr(extern, type) + +# define DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + DECLARE_ASN1_ITEM_attr(attr, itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(extern, type, itname, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, name, name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + attr type *d2i_##name(type **a, const unsigned char **in, long len); \ + attr int i2d_##name(const type *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(extern, type, name) + +# define DECLARE_ASN1_NDEF_FUNCTION_attr(attr, name) \ + attr int i2d_##name##_NDEF(const name *a, unsigned char **out); +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + DECLARE_ASN1_NDEF_FUNCTION_attr(extern, name) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + attr type *name##_new(void); \ + attr void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_DUP_FUNCTION_attr(attr, type) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, type) +# define DECLARE_ASN1_DUP_FUNCTION(type) \ + DECLARE_ASN1_DUP_FUNCTION_attr(extern, type) + +# define DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, name) \ + attr type *name##_dup(const type *a); +# define DECLARE_ASN1_DUP_FUNCTION_name(type, name) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(extern, type, name) + +# define DECLARE_ASN1_PRINT_FUNCTION_attr(attr, stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, stname) +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_attr(extern, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, fname) \ + attr int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx); +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(extern, stname, fname) + +# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) +# define I2D_OF(type) int (*)(const type *,unsigned char **) + +# define CHECKED_D2I_OF(type, d2i) \ + ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) +# define CHECKED_I2D_OF(type, i2d) \ + ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) +# define CHECKED_NEW_OF(type, xnew) \ + ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) +# define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +# define CHECKED_PPTR_OF(type, p) \ + ((void**) (1 ? p : (type**)0)) + +# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(const type *,unsigned char **) +# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) + +typedef void *d2i_of_void(void **, const unsigned char **, long); +typedef int i2d_of_void(const void *, unsigned char **); + +/*- + * The following macros and typedefs allow an ASN1_ITEM + * to be embedded in a structure and referenced. Since + * the ASN1_ITEM pointers need to be globally accessible + * (possibly from shared libraries) they may exist in + * different forms. On platforms that support it the + * ASN1_ITEM structure itself will be globally exported. + * Other platforms will export a function that returns + * an ASN1_ITEM pointer. + * + * To handle both cases transparently the macros below + * should be used instead of hard coding an ASN1_ITEM + * pointer in a structure. + * + * The structure will look like this: + * + * typedef struct SOMETHING_st { + * ... + * ASN1_ITEM_EXP *iptr; + * ... + * } SOMETHING; + * + * It would be initialised as e.g.: + * + * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; + * + * and the actual pointer extracted with: + * + * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); + * + * Finally an ASN1_ITEM pointer can be extracted from an + * appropriate reference with: ASN1_ITEM_rptr(X509). This + * would be used when a function takes an ASN1_ITEM * argument. + * + */ + + +/* + * Platforms that can't easily handle shared global variables are declared as + * functions returning ASN1_ITEM pointers. + */ + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr()) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (iptr##_it) + +# define ASN1_ITEM_rptr(ref) (ref##_it()) + +# define DECLARE_ASN1_ITEM_attr(attr, name) \ + attr const ASN1_ITEM * name##_it(void); +# define DECLARE_ASN1_ITEM(name) \ + DECLARE_ASN1_ITEM_attr(extern, name) + +/* Parameters used by ASN1_STRING_print_ex() */ + +/* + * These determine which characters to escape: RFC2253 special characters, + * control characters and MSB set characters + */ + +# define ASN1_STRFLGS_ESC_2253 1 +# define ASN1_STRFLGS_ESC_CTRL 2 +# define ASN1_STRFLGS_ESC_MSB 4 + +/* Lower 8 bits are reserved as an output type specifier */ +# define ASN1_DTFLGS_TYPE_MASK 0x0FUL +# define ASN1_DTFLGS_RFC822 0x00UL +# define ASN1_DTFLGS_ISO8601 0x01UL + +/* + * This flag determines how we do escaping: normally RC2253 backslash only, + * set this to use backslash and quote. + */ + +# define ASN1_STRFLGS_ESC_QUOTE 8 + +/* These three flags are internal use only. */ + +/* Character is a valid PrintableString character */ +# define CHARTYPE_PRINTABLESTRING 0x10 +/* Character needs escaping if it is the first character */ +# define CHARTYPE_FIRST_ESC_2253 0x20 +/* Character needs escaping if it is the last character */ +# define CHARTYPE_LAST_ESC_2253 0x40 + +/* + * NB the internal flags are safely reused below by flags handled at the top + * level. + */ + +/* + * If this is set we convert all character strings to UTF8 first + */ + +# define ASN1_STRFLGS_UTF8_CONVERT 0x10 + +/* + * If this is set we don't attempt to interpret content: just assume all + * strings are 1 byte per character. This will produce some pretty odd + * looking output! + */ + +# define ASN1_STRFLGS_IGNORE_TYPE 0x20 + +/* If this is set we include the string type in the output */ +# define ASN1_STRFLGS_SHOW_TYPE 0x40 + +/* + * This determines which strings to display and which to 'dump' (hex dump of + * content octets or DER encoding). We can only dump non character strings or + * everything. If we don't dump 'unknown' they are interpreted as character + * strings with 1 octet per character and are subject to the usual escaping + * options. + */ + +# define ASN1_STRFLGS_DUMP_ALL 0x80 +# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 + +/* + * These determine what 'dumping' does, we can dump the content octets or the + * DER encoding: both use the RFC2253 #XXXXX notation. + */ + +# define ASN1_STRFLGS_DUMP_DER 0x200 + +/* + * This flag specifies that RC2254 escaping shall be performed. + */ +#define ASN1_STRFLGS_ESC_2254 0x400 + +/* + * All the string flags consistent with RFC2253, escaping control characters + * isn't essential in RFC2253 but it is advisable anyway. + */ + +# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ + ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + ASN1_STRFLGS_UTF8_CONVERT | \ + ASN1_STRFLGS_DUMP_UNKNOWN | \ + ASN1_STRFLGS_DUMP_DER) + + +struct asn1_type_st { + int type; + union { + char *ptr; + ASN1_BOOLEAN boolean; + ASN1_STRING *asn1_string; + ASN1_OBJECT *object; + ASN1_INTEGER *integer; + ASN1_ENUMERATED *enumerated; + ASN1_BIT_STRING *bit_string; + ASN1_OCTET_STRING *octet_string; + ASN1_PRINTABLESTRING *printablestring; + ASN1_T61STRING *t61string; + ASN1_IA5STRING *ia5string; + ASN1_GENERALSTRING *generalstring; + ASN1_BMPSTRING *bmpstring; + ASN1_UNIVERSALSTRING *universalstring; + ASN1_UTCTIME *utctime; + ASN1_GENERALIZEDTIME *generalizedtime; + ASN1_VISIBLESTRING *visiblestring; + ASN1_UTF8STRING *utf8string; + /* + * set and sequence are left complete and still contain the set or + * sequence bytes + */ + ASN1_STRING *set; + ASN1_STRING *sequence; + ASN1_VALUE *asn1_value; + } value; +}; + +{- + generate_stack_macros("ASN1_TYPE"); +-} + +typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; + +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) + +/* This is used to contain a list of bit names */ +typedef struct BIT_STRING_BITNAME_st { + int bitnum; + const char *lname; + const char *sname; +} BIT_STRING_BITNAME; + +# define B_ASN1_TIME \ + B_ASN1_UTCTIME | \ + B_ASN1_GENERALIZEDTIME + +# define B_ASN1_PRINTABLE \ + B_ASN1_NUMERICSTRING| \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_T61STRING| \ + B_ASN1_IA5STRING| \ + B_ASN1_BIT_STRING| \ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING|\ + B_ASN1_SEQUENCE|\ + B_ASN1_UNKNOWN + +# define B_ASN1_DIRECTORYSTRING \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_TELETEXSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_UTF8STRING + +# define B_ASN1_DISPLAYTEXT \ + B_ASN1_IA5STRING| \ + B_ASN1_VISIBLESTRING| \ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING + +DECLARE_ASN1_ALLOC_FUNCTIONS_name(ASN1_TYPE, ASN1_TYPE) +DECLARE_ASN1_ENCODE_FUNCTIONS(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) + +int ASN1_TYPE_get(const ASN1_TYPE *a); +void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); +int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); +int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); + +ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); +void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); + +{- + generate_stack_macros("ASN1_OBJECT"); +-} + +DECLARE_ASN1_FUNCTIONS(ASN1_OBJECT) + +ASN1_STRING *ASN1_STRING_new(void); +void ASN1_STRING_free(ASN1_STRING *a); +void ASN1_STRING_clear_free(ASN1_STRING *a); +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); +DECLARE_ASN1_DUP_FUNCTION(ASN1_STRING) +ASN1_STRING *ASN1_STRING_type_new(int type); +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); + /* + * Since this is used to store all sorts of things, via macros, for now, + * make its data void * + */ +int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); +int ASN1_STRING_length(const ASN1_STRING *x); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# endif +int ASN1_STRING_type(const ASN1_STRING *x); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 unsigned char *ASN1_STRING_data(ASN1_STRING *x); +# endif +const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); + +DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) +int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); +int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); +int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n); +int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, + const unsigned char *flags, int flags_len); + +int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, + BIT_STRING_BITNAME *tbl, int indent); +int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, + BIT_STRING_BITNAME *tbl); + +{- + generate_stack_macros("ASN1_INTEGER"); +-} + + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, + long length); +DECLARE_ASN1_DUP_FUNCTION(ASN1_INTEGER) +int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); + +DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) + +int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); +ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); +ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); +int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); + +int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, + time_t t); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, + time_t t, int offset_day, + long offset_sec); +int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); + +int ASN1_TIME_diff(int *pday, int *psec, + const ASN1_TIME *from, const ASN1_TIME *to); + +DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) +DECLARE_ASN1_DUP_FUNCTION(ASN1_OCTET_STRING) +int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, + const ASN1_OCTET_STRING *b); +int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, + int len); + +{- + generate_stack_macros("ASN1_UTF8STRING"); +-} + +DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_NULL) +DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) + +int UTF8_getc(const unsigned char *str, int len, unsigned long *val); +int UTF8_putc(unsigned char *str, int len, unsigned long value); + +{- + generate_stack_macros("ASN1_GENERALSTRING"); +-} + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) +DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_TIME) + +DECLARE_ASN1_DUP_FUNCTION(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_UTCTIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_GENERALIZEDTIME) + +DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) + +ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); +ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_TIME_check(const ASN1_TIME *t); +ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t, + ASN1_GENERALIZEDTIME **out); +int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); +int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str); +int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); +int ASN1_TIME_normalize(ASN1_TIME *s); +int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t); +int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b); + +int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); +int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); +int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); +int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); +int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); +int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); +int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); +int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a); + +int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); +ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, + const char *sn, const char *ln); + +int ASN1_INTEGER_get_int64(int64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r); +int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r); + +int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); +long ASN1_INTEGER_get(const ASN1_INTEGER *a); +ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); +BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); + +int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_ENUMERATED *a); +int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r); + + +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); +ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai); +BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn); + +/* General */ +/* given a string, return the correct type, max is the maximum length */ +int ASN1_PRINTABLE_type(const unsigned char *s, int max); + +unsigned long ASN1_tag2bit(int tag); + +/* SPECIALS */ +int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, + int *pclass, long omax); +int ASN1_check_infinite_end(unsigned char **p, long len); +int ASN1_const_check_infinite_end(const unsigned char **p, long len); +void ASN1_put_object(unsigned char **pp, int constructed, int length, + int tag, int xclass); +int ASN1_put_eoc(unsigned char **pp); +int ASN1_object_size(int constructed, int length, int tag); + +/* Used to implement other functions */ +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, const void *x); + +# define ASN1_dup_of(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(const type, x))) + +void *ASN1_item_dup(const ASN1_ITEM *it, const void *x); +int ASN1_item_sign_ex(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, const ASN1_OCTET_STRING *id, + EVP_PKEY *pkey, const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); +int ASN1_item_verify_ex(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + const ASN1_OCTET_STRING *id, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); + +/* ASN1 alloc/free macros for when a type is only used internally */ + +# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) +# define M_ASN1_free_of(x, type) \ + ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) + +# ifndef OPENSSL_NO_STDIO +void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); + +# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_fp_ex(const ASN1_ITEM *it, FILE *in, void *x, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, const void *x); + +# define ASN1_i2d_fp_of(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, const void *x); +int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); +# endif + +int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); + +void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); + +# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_bio_ex(const ASN1_ITEM *it, BIO *in, void *pval, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *pval); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, const void *x); + +# define ASN1_i2d_bio_of(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, const void *x); +BIO *ASN1_item_i2d_mem_bio(const ASN1_ITEM *it, const ASN1_VALUE *val); +int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); +int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); +int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm); +int ASN1_TIME_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); +int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); +int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); +int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); +int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, + unsigned char *buf, int off); +int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); +int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, + int dump); +const char *ASN1_tag2str(int tag); + +/* Used to load and write Netscape format cert */ + +int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); + +int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); +int ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, int max_len); +int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ASN1_TYPE_get_int_octetstring(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); + +ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, + ASN1_OCTET_STRING **oct); + +void ASN1_STRING_set_default_mask(unsigned long mask); +int ASN1_STRING_set_default_mask_asc(const char *p); +unsigned long ASN1_STRING_get_default_mask(void); +int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask); +int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask, + long minsize, long maxsize); + +ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, + const unsigned char *in, int inlen, + int inform, int nid); +ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); +int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); +void ASN1_STRING_TABLE_cleanup(void); + +/* ASN1 template functions */ + +/* Old API compatible functions */ +ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_new_ex(const ASN1_ITEM *it, OSSL_LIB_CTX *libctx, + const char *propq); +void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i_ex(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it); +int ASN1_item_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(const ASN1_VALUE *val, unsigned char **out, + const ASN1_ITEM *it); + +void ASN1_add_oid_module(void); +void ASN1_add_stable_module(void); + +ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); +ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); +int ASN1_str2mask(const char *str, unsigned long *pmask); + +/* ASN1 Print flags */ + +/* Indicate missing OPTIONAL fields */ +# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 +/* Mark start and end of SEQUENCE */ +# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 +/* Mark start and end of SEQUENCE/SET OF */ +# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 +/* Show the ASN1 type of primitives */ +# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 +/* Don't show ASN1 type of ANY */ +# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 +/* Don't show ASN1 type of MSTRINGs */ +# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 +/* Don't show field names in SEQUENCE */ +# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 +/* Show structure names of each SEQUENCE field */ +# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 +/* Don't show structure name even at top level */ +# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 + +int ASN1_item_print(BIO *out, const ASN1_VALUE *ifld, int indent, + const ASN1_ITEM *it, const ASN1_PCTX *pctx); +ASN1_PCTX *ASN1_PCTX_new(void); +void ASN1_PCTX_free(ASN1_PCTX *p); +unsigned long ASN1_PCTX_get_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); + +ASN1_SCTX *ASN1_SCTX_new(int (*scan_cb) (ASN1_SCTX *ctx)); +void ASN1_SCTX_free(ASN1_SCTX *p); +const ASN1_ITEM *ASN1_SCTX_get_item(ASN1_SCTX *p); +const ASN1_TEMPLATE *ASN1_SCTX_get_template(ASN1_SCTX *p); +unsigned long ASN1_SCTX_get_flags(ASN1_SCTX *p); +void ASN1_SCTX_set_app_data(ASN1_SCTX *p, void *data); +void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); + +const BIO_METHOD *BIO_f_asn1(void); + +/* cannot constify val because of CMS_stream() */ +BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); + +int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const ASN1_ITEM *it); +int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const char *hdr, const ASN1_ITEM *it); +/* cannot constify val because of CMS_dataFinal() */ +int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +int SMIME_write_ASN1_ex(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1_ex(BIO *bio, int flags, BIO **bcont, + const ASN1_ITEM *it, ASN1_VALUE **x, + OSSL_LIB_CTX *libctx, const char *propq); +int SMIME_crlf_copy(BIO *in, BIO *out, int flags); +int SMIME_text(BIO *in, BIO *out); + +const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); +const ASN1_ITEM *ASN1_ITEM_get(size_t i); + +/* Legacy compatibility */ +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_const(type) DECLARE_ASN1_FUNCTIONS(type) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name) +# define I2D_OF_const(type) I2D_OF(type) +# define ASN1_dup_of_const(type,i2d,d2i,x) ASN1_dup_of(type,i2d,d2i,x) +# define ASN1_i2d_fp_of_const(type,i2d,out,x) ASN1_i2d_fp_of(type,i2d,out,x) +# define ASN1_i2d_bio_of_const(type,i2d,out,x) ASN1_i2d_bio_of(type,i2d,out,x) + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1_mac.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1_mac.h index 7ac1782a..fdcb9836 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1_mac.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1_mac.h @@ -1,7 +1,7 @@ /* * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1err.h index e1ad1fef..d4276220 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1err.h @@ -1,140 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1ERR_H -# define HEADER_ASN1ERR_H +#ifndef OPENSSL_ASN1ERR_H +# define OPENSSL_ASN1ERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASN1_strings(void); -/* - * ASN1 function codes. - */ -# define ASN1_F_A2D_ASN1_OBJECT 100 -# define ASN1_F_A2I_ASN1_INTEGER 102 -# define ASN1_F_A2I_ASN1_STRING 103 -# define ASN1_F_APPEND_EXP 176 -# define ASN1_F_ASN1_BIO_INIT 113 -# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 -# define ASN1_F_ASN1_CB 177 -# define ASN1_F_ASN1_CHECK_TLEN 104 -# define ASN1_F_ASN1_COLLECT 106 -# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 -# define ASN1_F_ASN1_D2I_FP 109 -# define ASN1_F_ASN1_D2I_READ_BIO 107 -# define ASN1_F_ASN1_DIGEST 184 -# define ASN1_F_ASN1_DO_ADB 110 -# define ASN1_F_ASN1_DO_LOCK 233 -# define ASN1_F_ASN1_DUP 111 -# define ASN1_F_ASN1_ENC_SAVE 115 -# define ASN1_F_ASN1_EX_C2I 204 -# define ASN1_F_ASN1_FIND_END 190 -# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 -# define ASN1_F_ASN1_GENERATE_V3 178 -# define ASN1_F_ASN1_GET_INT64 224 -# define ASN1_F_ASN1_GET_OBJECT 114 -# define ASN1_F_ASN1_GET_UINT64 225 -# define ASN1_F_ASN1_I2D_BIO 116 -# define ASN1_F_ASN1_I2D_FP 117 -# define ASN1_F_ASN1_ITEM_D2I_FP 206 -# define ASN1_F_ASN1_ITEM_DUP 191 -# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 -# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 -# define ASN1_F_ASN1_ITEM_EX_I2D 144 -# define ASN1_F_ASN1_ITEM_FLAGS_I2D 118 -# define ASN1_F_ASN1_ITEM_I2D_BIO 192 -# define ASN1_F_ASN1_ITEM_I2D_FP 193 -# define ASN1_F_ASN1_ITEM_PACK 198 -# define ASN1_F_ASN1_ITEM_SIGN 195 -# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 -# define ASN1_F_ASN1_ITEM_UNPACK 199 -# define ASN1_F_ASN1_ITEM_VERIFY 197 -# define ASN1_F_ASN1_MBSTRING_NCOPY 122 -# define ASN1_F_ASN1_OBJECT_NEW 123 -# define ASN1_F_ASN1_OUTPUT_DATA 214 -# define ASN1_F_ASN1_PCTX_NEW 205 -# define ASN1_F_ASN1_PRIMITIVE_NEW 119 -# define ASN1_F_ASN1_SCTX_NEW 221 -# define ASN1_F_ASN1_SIGN 128 -# define ASN1_F_ASN1_STR2TYPE 179 -# define ASN1_F_ASN1_STRING_GET_INT64 227 -# define ASN1_F_ASN1_STRING_GET_UINT64 230 -# define ASN1_F_ASN1_STRING_SET 186 -# define ASN1_F_ASN1_STRING_TABLE_ADD 129 -# define ASN1_F_ASN1_STRING_TO_BN 228 -# define ASN1_F_ASN1_STRING_TYPE_NEW 130 -# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 -# define ASN1_F_ASN1_TEMPLATE_NEW 133 -# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 -# define ASN1_F_ASN1_TIME_ADJ 217 -# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 -# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 -# define ASN1_F_ASN1_UTCTIME_ADJ 218 -# define ASN1_F_ASN1_VERIFY 137 -# define ASN1_F_B64_READ_ASN1 209 -# define ASN1_F_B64_WRITE_ASN1 210 -# define ASN1_F_BIO_NEW_NDEF 208 -# define ASN1_F_BITSTR_CB 180 -# define ASN1_F_BN_TO_ASN1_STRING 229 -# define ASN1_F_C2I_ASN1_BIT_STRING 189 -# define ASN1_F_C2I_ASN1_INTEGER 194 -# define ASN1_F_C2I_ASN1_OBJECT 196 -# define ASN1_F_C2I_IBUF 226 -# define ASN1_F_C2I_UINT64_INT 101 -# define ASN1_F_COLLECT_DATA 140 -# define ASN1_F_D2I_ASN1_OBJECT 147 -# define ASN1_F_D2I_ASN1_UINTEGER 150 -# define ASN1_F_D2I_AUTOPRIVATEKEY 207 -# define ASN1_F_D2I_PRIVATEKEY 154 -# define ASN1_F_D2I_PUBLICKEY 155 -# define ASN1_F_DO_BUF 142 -# define ASN1_F_DO_CREATE 124 -# define ASN1_F_DO_DUMP 125 -# define ASN1_F_DO_TCREATE 222 -# define ASN1_F_I2A_ASN1_OBJECT 126 -# define ASN1_F_I2D_ASN1_BIO_STREAM 211 -# define ASN1_F_I2D_ASN1_OBJECT 143 -# define ASN1_F_I2D_DSA_PUBKEY 161 -# define ASN1_F_I2D_EC_PUBKEY 181 -# define ASN1_F_I2D_PRIVATEKEY 163 -# define ASN1_F_I2D_PUBLICKEY 164 -# define ASN1_F_I2D_RSA_PUBKEY 165 -# define ASN1_F_LONG_C2I 166 -# define ASN1_F_NDEF_PREFIX 127 -# define ASN1_F_NDEF_SUFFIX 136 -# define ASN1_F_OID_MODULE_INIT 174 -# define ASN1_F_PARSE_TAGGING 182 -# define ASN1_F_PKCS5_PBE2_SET_IV 167 -# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 231 -# define ASN1_F_PKCS5_PBE_SET 202 -# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 -# define ASN1_F_PKCS5_PBKDF2_SET 219 -# define ASN1_F_PKCS5_SCRYPT_SET 232 -# define ASN1_F_SMIME_READ_ASN1 212 -# define ASN1_F_SMIME_TEXT 213 -# define ASN1_F_STABLE_GET 138 -# define ASN1_F_STBL_MODULE_INIT 223 -# define ASN1_F_UINT32_C2I 105 -# define ASN1_F_UINT32_NEW 139 -# define ASN1_F_UINT64_C2I 112 -# define ASN1_F_UINT64_NEW 141 -# define ASN1_F_X509_CRL_ADD0_REVOKED 169 -# define ASN1_F_X509_INFO_NEW 170 -# define ASN1_F_X509_NAME_ENCODE 203 -# define ASN1_F_X509_NAME_EX_D2I 158 -# define ASN1_F_X509_NAME_EX_NEW 171 -# define ASN1_F_X509_PKEY_NEW 173 /* * ASN1 reason codes. @@ -199,6 +81,7 @@ int ERR_load_ASN1_strings(void); # define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 # define ASN1_R_INVALID_UTF8STRING 134 # define ASN1_R_INVALID_VALUE 219 +# define ASN1_R_LENGTH_TOO_LONG 231 # define ASN1_R_LIST_ERROR 188 # define ASN1_R_MIME_NO_CONTENT_TYPE 206 # define ASN1_R_MIME_PARSE_ERROR 207 @@ -239,6 +122,7 @@ int ERR_load_ASN1_strings(void); # define ASN1_R_TYPE_NOT_PRIMITIVE 195 # define ASN1_R_UNEXPECTED_EOC 159 # define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 +# define ASN1_R_UNKNOWN_DIGEST 229 # define ASN1_R_UNKNOWN_FORMAT 160 # define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 # define ASN1_R_UNKNOWN_OBJECT_TYPE 162 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h index a450ba0d..74ba47d0 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h @@ -1,14 +1,25 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/asn1t.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1T_H -# define HEADER_ASN1T_H + + +#ifndef OPENSSL_ASN1T_H +# define OPENSSL_ASN1T_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1T_H +# endif # include # include @@ -25,44 +36,73 @@ extern "C" { #endif -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION +/*- + * These are the possible values for the itype field of the + * ASN1_ITEM structure and determine how it is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application-specific + * data and functions. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 +# define ASN1_ITYPE_SEQUENCE 0x1 +# define ASN1_ITYPE_CHOICE 0x2 +/* unused value 0x3 */ +# define ASN1_ITYPE_EXTERN 0x4 +# define ASN1_ITYPE_MSTRING 0x5 +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 /* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) /* Macros for start and end of ASN1_ITEM definition */ -# define ASN1_ITEM_start(itname) \ - const ASN1_ITEM itname##_it = { - -# define static_ASN1_ITEM_start(itname) \ - static const ASN1_ITEM itname##_it = { - -# define ASN1_ITEM_end(itname) \ - }; - -# else - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ +# define ASN1_ITEM_start(itname) \ const ASN1_ITEM * itname##_it(void) \ { \ static const ASN1_ITEM local_it = { -# define static_ASN1_ITEM_start(itname) \ +# define static_ASN1_ITEM_start(itname) \ static ASN1_ITEM_start(itname) -# define ASN1_ITEM_end(itname) \ +# define ASN1_ITEM_end(itname) \ }; \ return &local_it; \ } -# endif - /* Macros to aid ASN1 template writing */ # define ASN1_ITEM_TEMPLATE(tname) \ @@ -152,19 +192,25 @@ extern "C" { ASN1_SEQUENCE_cb(tname, cb) # define ASN1_SEQUENCE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ ASN1_SEQUENCE(tname) -# define ASN1_BROKEN_SEQUENCE(tname) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ +# define ASN1_SEQUENCE_const_cb(tname, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, NULL, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_cb_const_cb(tname, cb, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, cb, 0, const_cb}; \ ASN1_SEQUENCE(tname) # define ASN1_SEQUENCE_ref(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0, NULL}; \ ASN1_SEQUENCE(tname) # define ASN1_SEQUENCE_enc(tname, enc, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc), NULL}; \ ASN1_SEQUENCE(tname) # define ASN1_NDEF_SEQUENCE_END(tname) \ @@ -190,9 +236,6 @@ extern "C" { #tname \ ASN1_ITEM_end(tname) -# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) -# define static_ASN1_BROKEN_SEQUENCE_END(stname) \ - static_ASN1_SEQUENCE_END_ref(stname, stname) # define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) @@ -261,7 +304,7 @@ extern "C" { static const ASN1_TEMPLATE tname##_ch_tt[] # define ASN1_CHOICE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ ASN1_CHOICE(tname) # define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) @@ -332,13 +375,9 @@ extern "C" { /* Any defined by macros: the field used is in the table itself */ -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# else -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } -# endif +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } + /* Plain simple type */ # define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) /* Embedded simple type */ @@ -418,23 +457,7 @@ extern "C" { # define ASN1_ADB(name) \ static const ASN1_ADB_TABLE name##_adbtbl[] -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ - ;\ - static const ASN1_ADB name##_adb = {\ - flags,\ - offsetof(name, field),\ - adb_cb,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - } - -# else - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ ;\ static const ASN1_ITEM *name##_adb(void) \ { \ @@ -452,8 +475,6 @@ extern "C" { } \ void dummy_function(void) -# endif - # define ADB_ENTRY(val, template) {val, template} # define ASN1_ADB_TEMPLATE(name) \ @@ -584,64 +605,12 @@ struct ASN1_ITEM_st { const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains * the contents */ long tcount; /* Number of templates if SEQUENCE or CHOICE */ - const void *funcs; /* functions that handle this type */ + const void *funcs; /* further data and type-specific functions */ + /* funcs can be ASN1_PRIMITIVE_FUNCS*, ASN1_EXTERN_FUNCS*, or ASN1_AUX* */ long size; /* Structure size (usually) */ const char *sname; /* Structure name */ }; -/*- - * These are values for the itype field and - * determine how the type is interpreted. - * - * For PRIMITIVE types the underlying type - * determines the behaviour if items is NULL. - * - * Otherwise templates must contain a single - * template and the type is treated in the - * same way as the type specified in the template. - * - * For SEQUENCE types the templates field points - * to the members, the size field is the - * structure size. - * - * For CHOICE types the templates field points - * to each possible member (typically a union) - * and the 'size' field is the offset of the - * selector. - * - * The 'funcs' field is used for application - * specific functions. - * - * The EXTERN type uses a new style d2i/i2d. - * The new style should be used where possible - * because it avoids things like the d2i IMPLICIT - * hack. - * - * MSTRING is a multiple string type, it is used - * for a CHOICE of character strings where the - * actual strings all occupy an ASN1_STRING - * structure. In this case the 'utype' field - * has a special meaning, it is used as a mask - * of acceptable types using the B_ASN1 constants. - * - * NDEF_SEQUENCE is the same as SEQUENCE except - * that it will use indefinite length constructed - * encoding if requested. - * - */ - -# define ASN1_ITYPE_PRIMITIVE 0x0 - -# define ASN1_ITYPE_SEQUENCE 0x1 - -# define ASN1_ITYPE_CHOICE 0x2 - -# define ASN1_ITYPE_EXTERN 0x4 - -# define ASN1_ITYPE_MSTRING 0x5 - -# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 - /* * Cache for ASN1 tag and length, so we don't keep re-reading it for things * like CHOICE @@ -661,21 +630,27 @@ typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx); -typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, +typedef int ASN1_ex_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx, OSSL_LIB_CTX *libctx, + const char *propq); +typedef int ASN1_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef int ASN1_ex_new_ex_func(ASN1_VALUE **pval, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); -typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, +typedef int ASN1_ex_print_func(BIO *out, const ASN1_VALUE **pval, int indent, const char *fname, const ASN1_PCTX *pctx); -typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, +typedef int ASN1_primitive_i2c(const ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); -typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, +typedef int ASN1_primitive_print(BIO *out, const ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx); @@ -687,6 +662,8 @@ typedef struct ASN1_EXTERN_FUNCS_st { ASN1_ex_d2i *asn1_ex_d2i; ASN1_ex_i2d *asn1_ex_i2d; ASN1_ex_print_func *asn1_ex_print; + ASN1_ex_new_ex_func *asn1_ex_new_ex; + ASN1_ex_d2i_ex *asn1_ex_d2i_ex; } ASN1_EXTERN_FUNCS; typedef struct ASN1_PRIMITIVE_FUNCS_st { @@ -711,18 +688,25 @@ typedef struct ASN1_PRIMITIVE_FUNCS_st { * error has occurred and the main operation should be abandoned. If major * changes in the default behaviour are required then an external type is * more appropriate. + * For the operations ASN1_OP_I2D_PRE, ASN1_OP_I2D_POST, ASN1_OP_PRINT_PRE, and + * ASN1_OP_PRINT_POST, meanwhile a variant of the callback with const parameter + * 'in' is provided to make clear statically that its input is not modified. If + * and only if this variant is in use the flag ASN1_AFLG_CONST_CB must be set. */ typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, void *exarg); +typedef int ASN1_aux_const_cb(int operation, const ASN1_VALUE **in, + const ASN1_ITEM *it, void *exarg); typedef struct ASN1_AUX_st { void *app_data; int flags; int ref_offset; /* Offset of reference value */ - int ref_lock; /* Lock type to use */ + int ref_lock; /* Offset of lock value */ ASN1_aux_cb *asn1_cb; int enc_offset; /* Offset of ASN1_ENCODING structure */ + ASN1_aux_const_cb *asn1_const_cb; /* for ASN1_OP_I2D_ and ASN1_OP_PRINT_ */ } ASN1_AUX; /* For print related callbacks exarg points to this structure */ @@ -750,6 +734,8 @@ typedef struct ASN1_STREAM_ARG_st { # define ASN1_AFLG_ENCODING 2 /* The Sequence length is invalid */ # define ASN1_AFLG_BROKEN 4 +/* Use the new asn1_const_cb */ +# define ASN1_AFLG_CONST_CB 8 /* operation values for asn1_cb */ @@ -767,6 +753,10 @@ typedef struct ASN1_STREAM_ARG_st { # define ASN1_OP_STREAM_POST 11 # define ASN1_OP_DETACHED_PRE 12 # define ASN1_OP_DETACHED_POST 13 +# define ASN1_OP_DUP_PRE 14 +# define ASN1_OP_DUP_POST 15 +# define ASN1_OP_GET0_LIBCTX 16 +# define ASN1_OP_GET0_PROPQ 17 /* Macro to implement a primitive type */ # define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) @@ -836,15 +826,15 @@ typedef struct ASN1_STREAM_ARG_st { { \ return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ } \ - int i2d_##fname(stname *a, unsigned char **out) \ + int i2d_##fname(const stname *a, unsigned char **out) \ { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ } # define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ - int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ + int i2d_##stname##_NDEF(const stname *a, unsigned char **out) \ { \ - return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + return ASN1_item_ndef_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ } # define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ @@ -854,28 +844,14 @@ typedef struct ASN1_STREAM_ARG_st { return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ ASN1_ITEM_rptr(stname)); \ } \ - static int i2d_##stname(stname *a, unsigned char **out) \ + static int i2d_##stname(const stname *a, unsigned char **out) \ { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, \ ASN1_ITEM_rptr(stname)); \ } -/* - * This includes evil casts to remove const: they will go away when full ASN1 - * constification is done. - */ -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(const stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - # define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ - stname * stname##_dup(stname *x) \ + stname * stname##_dup(const stname *x) \ { \ return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ } @@ -884,20 +860,13 @@ typedef struct ASN1_STREAM_ARG_st { IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) # define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ + int fname##_print_ctx(BIO *out, const stname *x, int indent, \ const ASN1_PCTX *pctx) \ { \ - return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ + return ASN1_item_print(out, (const ASN1_VALUE *)x, indent, \ ASN1_ITEM_rptr(itname), pctx); \ } -# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ - IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) - -# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - /* external definitions for primitive types */ DECLARE_ASN1_ITEM(ASN1_BOOLEAN) @@ -915,7 +884,7 @@ DECLARE_ASN1_ITEM(ZINT64) DECLARE_ASN1_ITEM(UINT64) DECLARE_ASN1_ITEM(ZUINT64) -# if OPENSSL_API_COMPAT < 0x10200000L +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * LONG and ZLONG are strongly discouraged for use as stored data, as the * underlying C type (long) differs in size depending on the architecture. @@ -925,7 +894,34 @@ DECLARE_ASN1_ITEM(LONG) DECLARE_ASN1_ITEM(ZLONG) # endif -DEFINE_STACK_OF(ASN1_VALUE) +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_VALUE, ASN1_VALUE, ASN1_VALUE) +#define sk_ASN1_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_value(sk, idx) ((ASN1_VALUE *)OPENSSL_sk_value(ossl_check_const_ASN1_VALUE_sk_type(sk), (idx))) +#define sk_ASN1_VALUE_new(cmp) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new(ossl_check_ASN1_VALUE_compfunc_type(cmp))) +#define sk_ASN1_VALUE_new_null() ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_VALUE_new_reserve(cmp, n) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_VALUE_compfunc_type(cmp), (n))) +#define sk_ASN1_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_VALUE_sk_type(sk), (n)) +#define sk_ASN1_VALUE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_delete(sk, i) ((ASN1_VALUE *)OPENSSL_sk_delete(ossl_check_ASN1_VALUE_sk_type(sk), (i))) +#define sk_ASN1_VALUE_delete_ptr(sk, ptr) ((ASN1_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr))) +#define sk_ASN1_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_pop(sk) ((ASN1_VALUE *)OPENSSL_sk_pop(ossl_check_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_shift(sk) ((ASN1_VALUE *)OPENSSL_sk_shift(ossl_check_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_VALUE_sk_type(sk),ossl_check_ASN1_VALUE_freefunc_type(freefunc)) +#define sk_ASN1_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), (idx)) +#define sk_ASN1_VALUE_set(sk, idx, ptr) ((ASN1_VALUE *)OPENSSL_sk_set(ossl_check_ASN1_VALUE_sk_type(sk), (idx), ossl_check_ASN1_VALUE_type(ptr))) +#define sk_ASN1_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), pnum) +#define sk_ASN1_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_dup(sk) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_copyfunc_type(copyfunc), ossl_check_ASN1_VALUE_freefunc_type(freefunc))) +#define sk_ASN1_VALUE_set_cmp_func(sk, cmp) ((sk_ASN1_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_compfunc_type(cmp))) + + /* Functions used internally by the ASN1 code */ @@ -936,9 +932,14 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx); -int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, +int ASN1_item_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); +/* Legacy compatibility */ +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) IMPLEMENT_ASN1_FUNCTIONS(name) +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) + #ifdef __cplusplus } #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h.in new file mode 100644 index 00000000..b536fe51 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h.in @@ -0,0 +1,923 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ASN1T_H +# define OPENSSL_ASN1T_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1T_H +# endif + +# include +# include +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +/* ASN1 template defines, structures and functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * These are the possible values for the itype field of the + * ASN1_ITEM structure and determine how it is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application-specific + * data and functions. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 +# define ASN1_ITYPE_SEQUENCE 0x1 +# define ASN1_ITYPE_CHOICE 0x2 +/* unused value 0x3 */ +# define ASN1_ITYPE_EXTERN 0x4 +# define ASN1_ITYPE_MSTRING 0x5 +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + const ASN1_ITEM * itname##_it(void) \ + { \ + static const ASN1_ITEM local_it = { + +# define static_ASN1_ITEM_start(itname) \ + static ASN1_ITEM_start(itname) + +# define ASN1_ITEM_end(itname) \ + }; \ + return &local_it; \ + } + +/* Macros to aid ASN1 template writing */ + +# define ASN1_ITEM_TEMPLATE(tname) \ + static const ASN1_TEMPLATE tname##_item_tt + +# define ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) + +/* This is a ASN1 type which just embeds a template */ + +/*- + * This pair helps declare a SEQUENCE. We can do: + * + * ASN1_SEQUENCE(stname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END(stname) + * + * This will produce an ASN1_ITEM called stname_it + * for a structure called stname. + * + * If you want the same structure but a different + * name then use: + * + * ASN1_SEQUENCE(itname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END_name(stname, itname) + * + * This will create an item called itname_it using + * a structure called stname. + */ + +# define ASN1_SEQUENCE(tname) \ + static const ASN1_TEMPLATE tname##_seq_tt[] + +# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) + +# define static_ASN1_SEQUENCE_END(stname) static_ASN1_SEQUENCE_END_name(stname, stname) + +# define ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE(tname) \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ + ASN1_SEQUENCE_cb(tname, cb) + +# define ASN1_SEQUENCE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_const_cb(tname, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, NULL, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_cb_const_cb(tname, cb, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, cb, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_ref(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0, NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_enc(tname, enc, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc), NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) + + +# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) +# define static_ASN1_SEQUENCE_END_cb(stname, tname) static_ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/*- + * This pair helps declare a CHOICE type. We can do: + * + * ASN1_CHOICE(chname) = { + * ... CHOICE options ... + * ASN1_CHOICE_END(chname) + * + * This will produce an ASN1_ITEM called chname_it + * for a structure called chname. The structure + * definition must look like this: + * typedef struct { + * int type; + * union { + * ASN1_SOMETHING *opt1; + * ASN1_SOMEOTHER *opt2; + * } value; + * } chname; + * + * the name of the selector must be 'type'. + * to use an alternative selector name use the + * ASN1_CHOICE_END_selector() version. + */ + +# define ASN1_CHOICE(tname) \ + static const ASN1_TEMPLATE tname##_ch_tt[] + +# define ASN1_CHOICE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ + ASN1_CHOICE(tname) + +# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) + +# define static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname) + +# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) + +# define static_ASN1_CHOICE_END_name(stname, tname) static_ASN1_CHOICE_END_selector(stname, tname, type) + +# define ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_CHOICE_END_cb(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/* This helps with the template wrapper form of ASN1_ITEM */ + +# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ + (flags), (tag), 0,\ + #name, ASN1_ITEM_ref(type) } + +/* These help with SEQUENCE or CHOICE components */ + +/* used to declare other types */ + +# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ + (flags), (tag), offsetof(stname, field),\ + #field, ASN1_ITEM_ref(type) } + +/* implicit and explicit helper macros */ + +# define ASN1_IMP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | (ex), tag, stname, field, type) + +# define ASN1_EXP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | (ex), tag, stname, field, type) + +/* Any defined by macros: the field used is in the table itself */ + +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } + +/* Plain simple type */ +# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) +/* Embedded simple type */ +# define ASN1_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_EMBED,0, stname, field, type) + +/* OPTIONAL simple type */ +# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) +# define ASN1_OPT_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED, 0, stname, field, type) + +/* IMPLICIT tagged simple type */ +# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) +# define ASN1_IMP_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) + +/* IMPLICIT tagged OPTIONAL simple type */ +# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_IMP_OPT_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* Same as above but EXPLICIT */ + +# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) +# define ASN1_EXP_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) +# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_EXP_OPT_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* SEQUENCE OF type */ +# define ASN1_SEQUENCE_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) + +/* OPTIONAL SEQUENCE OF */ +# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Same as above but for SET OF */ + +# define ASN1_SET_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) + +# define ASN1_SET_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ + +# define ASN1_IMP_SET_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_EXP_SET_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +/* EXPLICIT using indefinite length constructed form */ +# define ASN1_NDEF_EXP(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) + +/* EXPLICIT OPTIONAL using indefinite length constructed form */ +# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) + +/* Macros for the ASN1_ADB structure */ + +# define ASN1_ADB(name) \ + static const ASN1_ADB_TABLE name##_adbtbl[] + +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ + ;\ + static const ASN1_ITEM *name##_adb(void) \ + { \ + static const ASN1_ADB internal_adb = \ + {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + }; \ + return (const ASN1_ITEM *) &internal_adb; \ + } \ + void dummy_function(void) + +# define ADB_ENTRY(val, template) {val, template} + +# define ASN1_ADB_TEMPLATE(name) \ + static const ASN1_TEMPLATE name##_tt + +/* + * This is the ASN1 template structure that defines a wrapper round the + * actual type. It determines the actual position of the field in the value + * structure, various flags such as OPTIONAL and the field name. + */ + +struct ASN1_TEMPLATE_st { + unsigned long flags; /* Various flags */ + long tag; /* tag, not used if no tagging */ + unsigned long offset; /* Offset of this field in structure */ + const char *field_name; /* Field name */ + ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ +}; + +/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ + +# define ASN1_TEMPLATE_item(t) (t->item_ptr) +# define ASN1_TEMPLATE_adb(t) (t->item_ptr) + +typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; +typedef struct ASN1_ADB_st ASN1_ADB; + +struct ASN1_ADB_st { + unsigned long flags; /* Various flags */ + unsigned long offset; /* Offset of selector field */ + int (*adb_cb)(long *psel); /* Application callback */ + const ASN1_ADB_TABLE *tbl; /* Table of possible types */ + long tblcount; /* Number of entries in tbl */ + const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ + const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ +}; + +struct ASN1_ADB_TABLE_st { + long value; /* NID for an object or value for an int */ + const ASN1_TEMPLATE tt; /* item for this value */ +}; + +/* template flags */ + +/* Field is optional */ +# define ASN1_TFLG_OPTIONAL (0x1) + +/* Field is a SET OF */ +# define ASN1_TFLG_SET_OF (0x1 << 1) + +/* Field is a SEQUENCE OF */ +# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) + +/* + * Special case: this refers to a SET OF that will be sorted into DER order + * when encoded *and* the corresponding STACK will be modified to match the + * new order. + */ +# define ASN1_TFLG_SET_ORDER (0x3 << 1) + +/* Mask for SET OF or SEQUENCE OF */ +# define ASN1_TFLG_SK_MASK (0x3 << 1) + +/* + * These flags mean the tag should be taken from the tag field. If EXPLICIT + * then the underlying type is used for the inner tag. + */ + +/* IMPLICIT tagging */ +# define ASN1_TFLG_IMPTAG (0x1 << 3) + +/* EXPLICIT tagging, inner tag from underlying type */ +# define ASN1_TFLG_EXPTAG (0x2 << 3) + +# define ASN1_TFLG_TAG_MASK (0x3 << 3) + +/* context specific IMPLICIT */ +# define ASN1_TFLG_IMPLICIT (ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT) + +/* context specific EXPLICIT */ +# define ASN1_TFLG_EXPLICIT (ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT) + +/* + * If tagging is in force these determine the type of tag to use. Otherwise + * the tag is determined by the underlying type. These values reflect the + * actual octet format. + */ + +/* Universal tag */ +# define ASN1_TFLG_UNIVERSAL (0x0<<6) +/* Application tag */ +# define ASN1_TFLG_APPLICATION (0x1<<6) +/* Context specific tag */ +# define ASN1_TFLG_CONTEXT (0x2<<6) +/* Private tag */ +# define ASN1_TFLG_PRIVATE (0x3<<6) + +# define ASN1_TFLG_TAG_CLASS (0x3<<6) + +/* + * These are for ANY DEFINED BY type. In this case the 'item' field points to + * an ASN1_ADB structure which contains a table of values to decode the + * relevant type + */ + +# define ASN1_TFLG_ADB_MASK (0x3<<8) + +# define ASN1_TFLG_ADB_OID (0x1<<8) + +# define ASN1_TFLG_ADB_INT (0x1<<9) + +/* + * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes + * indefinite length constructed encoding to be used if required. + */ + +# define ASN1_TFLG_NDEF (0x1<<11) + +/* Field is embedded and not a pointer */ +# define ASN1_TFLG_EMBED (0x1 << 12) + +/* This is the actual ASN1 item itself */ + +struct ASN1_ITEM_st { + char itype; /* The item type, primitive, SEQUENCE, CHOICE + * or extern */ + long utype; /* underlying type */ + const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains + * the contents */ + long tcount; /* Number of templates if SEQUENCE or CHOICE */ + const void *funcs; /* further data and type-specific functions */ + /* funcs can be ASN1_PRIMITIVE_FUNCS*, ASN1_EXTERN_FUNCS*, or ASN1_AUX* */ + long size; /* Structure size (usually) */ + const char *sname; /* Structure name */ +}; + +/* + * Cache for ASN1 tag and length, so we don't keep re-reading it for things + * like CHOICE + */ + +struct ASN1_TLC_st { + char valid; /* Values below are valid */ + int ret; /* return value */ + long plen; /* length */ + int ptag; /* class value */ + int pclass; /* class value */ + int hdrlen; /* header length */ +}; + +/* Typedefs for ASN1 function pointers */ +typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +typedef int ASN1_ex_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx, OSSL_LIB_CTX *libctx, + const char *propq); +typedef int ASN1_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); +typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef int ASN1_ex_new_ex_func(ASN1_VALUE **pval, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); + +typedef int ASN1_ex_print_func(BIO *out, const ASN1_VALUE **pval, + int indent, const char *fname, + const ASN1_PCTX *pctx); + +typedef int ASN1_primitive_i2c(const ASN1_VALUE **pval, unsigned char *cont, + int *putype, const ASN1_ITEM *it); +typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, + int len, int utype, char *free_cont, + const ASN1_ITEM *it); +typedef int ASN1_primitive_print(BIO *out, const ASN1_VALUE **pval, + const ASN1_ITEM *it, int indent, + const ASN1_PCTX *pctx); + +typedef struct ASN1_EXTERN_FUNCS_st { + void *app_data; + ASN1_ex_new_func *asn1_ex_new; + ASN1_ex_free_func *asn1_ex_free; + ASN1_ex_free_func *asn1_ex_clear; + ASN1_ex_d2i *asn1_ex_d2i; + ASN1_ex_i2d *asn1_ex_i2d; + ASN1_ex_print_func *asn1_ex_print; + ASN1_ex_new_ex_func *asn1_ex_new_ex; + ASN1_ex_d2i_ex *asn1_ex_d2i_ex; +} ASN1_EXTERN_FUNCS; + +typedef struct ASN1_PRIMITIVE_FUNCS_st { + void *app_data; + unsigned long flags; + ASN1_ex_new_func *prim_new; + ASN1_ex_free_func *prim_free; + ASN1_ex_free_func *prim_clear; + ASN1_primitive_c2i *prim_c2i; + ASN1_primitive_i2c *prim_i2c; + ASN1_primitive_print *prim_print; +} ASN1_PRIMITIVE_FUNCS; + +/* + * This is the ASN1_AUX structure: it handles various miscellaneous + * requirements. For example the use of reference counts and an informational + * callback. The "informational callback" is called at various points during + * the ASN1 encoding and decoding. It can be used to provide minor + * customisation of the structures used. This is most useful where the + * supplied routines *almost* do the right thing but need some extra help at + * a few points. If the callback returns zero then it is assumed a fatal + * error has occurred and the main operation should be abandoned. If major + * changes in the default behaviour are required then an external type is + * more appropriate. + * For the operations ASN1_OP_I2D_PRE, ASN1_OP_I2D_POST, ASN1_OP_PRINT_PRE, and + * ASN1_OP_PRINT_POST, meanwhile a variant of the callback with const parameter + * 'in' is provided to make clear statically that its input is not modified. If + * and only if this variant is in use the flag ASN1_AFLG_CONST_CB must be set. + */ + +typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, + void *exarg); +typedef int ASN1_aux_const_cb(int operation, const ASN1_VALUE **in, + const ASN1_ITEM *it, void *exarg); + +typedef struct ASN1_AUX_st { + void *app_data; + int flags; + int ref_offset; /* Offset of reference value */ + int ref_lock; /* Offset of lock value */ + ASN1_aux_cb *asn1_cb; + int enc_offset; /* Offset of ASN1_ENCODING structure */ + ASN1_aux_const_cb *asn1_const_cb; /* for ASN1_OP_I2D_ and ASN1_OP_PRINT_ */ +} ASN1_AUX; + +/* For print related callbacks exarg points to this structure */ +typedef struct ASN1_PRINT_ARG_st { + BIO *out; + int indent; + const ASN1_PCTX *pctx; +} ASN1_PRINT_ARG; + +/* For streaming related callbacks exarg points to this structure */ +typedef struct ASN1_STREAM_ARG_st { + /* BIO to stream through */ + BIO *out; + /* BIO with filters appended */ + BIO *ndef_bio; + /* Streaming I/O boundary */ + unsigned char **boundary; +} ASN1_STREAM_ARG; + +/* Flags in ASN1_AUX */ + +/* Use a reference count */ +# define ASN1_AFLG_REFCOUNT 1 +/* Save the encoding of structure (useful for signatures) */ +# define ASN1_AFLG_ENCODING 2 +/* The Sequence length is invalid */ +# define ASN1_AFLG_BROKEN 4 +/* Use the new asn1_const_cb */ +# define ASN1_AFLG_CONST_CB 8 + +/* operation values for asn1_cb */ + +# define ASN1_OP_NEW_PRE 0 +# define ASN1_OP_NEW_POST 1 +# define ASN1_OP_FREE_PRE 2 +# define ASN1_OP_FREE_POST 3 +# define ASN1_OP_D2I_PRE 4 +# define ASN1_OP_D2I_POST 5 +# define ASN1_OP_I2D_PRE 6 +# define ASN1_OP_I2D_POST 7 +# define ASN1_OP_PRINT_PRE 8 +# define ASN1_OP_PRINT_POST 9 +# define ASN1_OP_STREAM_PRE 10 +# define ASN1_OP_STREAM_POST 11 +# define ASN1_OP_DETACHED_PRE 12 +# define ASN1_OP_DETACHED_POST 13 +# define ASN1_OP_DUP_PRE 14 +# define ASN1_OP_DUP_POST 15 +# define ASN1_OP_GET0_LIBCTX 16 +# define ASN1_OP_GET0_PROPQ 17 + +/* Macro to implement a primitive type */ +# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) +# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ + ASN1_ITEM_end(itname) + +/* Macro to implement a multi string type */ +# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ + ASN1_ITEM_end(itname) + +# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ + ASN1_ITEM_start(sname) \ + ASN1_ITYPE_EXTERN, \ + tag, \ + NULL, \ + 0, \ + &fptrs, \ + 0, \ + #sname \ + ASN1_ITEM_end(sname) + +/* Macro to implement standard functions in terms of ASN1_ITEM structures */ + +# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) + +# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ + IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) + +# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ + pre stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + pre void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ + stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ + int i2d_##stname##_NDEF(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_ndef_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + } + +# define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ + static stname *d2i_##stname(stname **a, \ + const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ + ASN1_ITEM_rptr(stname)); \ + } \ + static int i2d_##stname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, \ + ASN1_ITEM_rptr(stname)); \ + } + +# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ + stname * stname##_dup(const stname *x) \ + { \ + return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ + } + +# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ + IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ + int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx) \ + { \ + return ASN1_item_print(out, (const ASN1_VALUE *)x, indent, \ + ASN1_ITEM_rptr(itname), pctx); \ + } + +/* external definitions for primitive types */ + +DECLARE_ASN1_ITEM(ASN1_BOOLEAN) +DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_SEQUENCE) +DECLARE_ASN1_ITEM(CBIGNUM) +DECLARE_ASN1_ITEM(BIGNUM) +DECLARE_ASN1_ITEM(INT32) +DECLARE_ASN1_ITEM(ZINT32) +DECLARE_ASN1_ITEM(UINT32) +DECLARE_ASN1_ITEM(ZUINT32) +DECLARE_ASN1_ITEM(INT64) +DECLARE_ASN1_ITEM(ZINT64) +DECLARE_ASN1_ITEM(UINT64) +DECLARE_ASN1_ITEM(ZUINT64) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * LONG and ZLONG are strongly discouraged for use as stored data, as the + * underlying C type (long) differs in size depending on the architecture. + * They are designed with 32-bit longs in mind. + */ +DECLARE_ASN1_ITEM(LONG) +DECLARE_ASN1_ITEM(ZLONG) +# endif + +{- + generate_stack_macros("ASN1_VALUE"); +-} + + +/* Functions used internally by the ASN1 code */ + +int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); +void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); + +int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +int ASN1_item_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); + +/* Legacy compatibility */ +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) IMPLEMENT_ASN1_FUNCTIONS(name) +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/async.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/async.h index 7052b890..bc27d5db 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/async.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/async.h @@ -1,7 +1,7 @@ /* * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,8 +9,14 @@ #include -#ifndef HEADER_ASYNC_H -# define HEADER_ASYNC_H +#ifndef OPENSSL_ASYNC_H +# define OPENSSL_ASYNC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASYNC_H +# endif #if defined(_WIN32) # if defined(BASETYPES) || defined(_WINDEF_H) @@ -31,12 +37,18 @@ extern "C" { typedef struct async_job_st ASYNC_JOB; typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; +typedef int (*ASYNC_callback_fn)(void *arg); #define ASYNC_ERR 0 #define ASYNC_NO_JOBS 1 #define ASYNC_PAUSE 2 #define ASYNC_FINISH 3 +#define ASYNC_STATUS_UNSUPPORTED 0 +#define ASYNC_STATUS_ERR 1 +#define ASYNC_STATUS_OK 2 +#define ASYNC_STATUS_EAGAIN 3 + int ASYNC_init_thread(size_t max_size, size_t init_size); void ASYNC_cleanup_thread(void); @@ -52,6 +64,14 @@ int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, OSSL_ASYNC_FD *fd, void **custom_data); int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, size_t *numfds); +int ASYNC_WAIT_CTX_get_callback(ASYNC_WAIT_CTX *ctx, + ASYNC_callback_fn *callback, + void **callback_arg); +int ASYNC_WAIT_CTX_set_callback(ASYNC_WAIT_CTX *ctx, + ASYNC_callback_fn callback, + void *callback_arg); +int ASYNC_WAIT_CTX_set_status(ASYNC_WAIT_CTX *ctx, int status); +int ASYNC_WAIT_CTX_get_status(ASYNC_WAIT_CTX *ctx); int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, size_t *numaddfds, OSSL_ASYNC_FD *delfd, size_t *numdelfds); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asyncerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asyncerr.h index 91afbbb2..c093f7be 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asyncerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asyncerr.h @@ -1,35 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASYNCERR_H -# define HEADER_ASYNCERR_H +#ifndef OPENSSL_ASYNCERR_H +# define OPENSSL_ASYNCERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASYNC_strings(void); -/* - * ASYNC function codes. - */ -# define ASYNC_F_ASYNC_CTX_NEW 100 -# define ASYNC_F_ASYNC_INIT_THREAD 101 -# define ASYNC_F_ASYNC_JOB_NEW 102 -# define ASYNC_F_ASYNC_PAUSE_JOB 103 -# define ASYNC_F_ASYNC_START_FUNC 104 -# define ASYNC_F_ASYNC_START_JOB 105 -# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 106 /* * ASYNC reason codes. diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h index ae559a51..e16cf622 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h @@ -1,14 +1,24 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/bio.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BIO_H -# define HEADER_BIO_H + +#ifndef OPENSSL_BIO_H +# define OPENSSL_BIO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BIO_H +# endif # include @@ -19,6 +29,7 @@ # include # include +# include #ifdef __cplusplus extern "C" { @@ -55,6 +66,7 @@ extern "C" { # ifndef OPENSSL_NO_SCTP # define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) # endif +# define BIO_TYPE_CORE_TO_PROV (25|BIO_TYPE_SOURCE_SINK) #define BIO_TYPE_START 128 @@ -97,7 +109,7 @@ extern "C" { # define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ # define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ -# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation timed out */ /* #ifdef IP_MTU_DISCOVER */ # define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ @@ -141,6 +153,34 @@ extern "C" { # define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 +/* + * internal BIO: + * # define BIO_CTRL_SET_KTLS_SEND 72 + * # define BIO_CTRL_SET_KTLS_SEND_CTRL_MSG 74 + * # define BIO_CTRL_CLEAR_KTLS_CTRL_MSG 75 + */ + +# define BIO_CTRL_GET_KTLS_SEND 73 +# define BIO_CTRL_GET_KTLS_RECV 76 + +# define BIO_CTRL_DGRAM_SCTP_WAIT_FOR_DRY 77 +# define BIO_CTRL_DGRAM_SCTP_MSG_WAITING 78 + +/* BIO_f_prefix controls */ +# define BIO_CTRL_SET_PREFIX 79 +# define BIO_CTRL_SET_INDENT 80 +# define BIO_CTRL_GET_INDENT 81 + +# ifndef OPENSSL_NO_KTLS +# define BIO_get_ktls_send(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL) > 0) +# define BIO_get_ktls_recv(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL) > 0) +# else +# define BIO_get_ktls_send(b) (0) +# define BIO_get_ktls_recv(b) (0) +# endif + /* modifiers */ # define BIO_FP_READ 0x02 # define BIO_FP_WRITE 0x04 @@ -152,12 +192,9 @@ extern "C" { # define BIO_FLAGS_IO_SPECIAL 0x04 # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) # define BIO_FLAGS_SHOULD_RETRY 0x08 -# ifndef BIO_FLAGS_UPLINK -/* - * "UPLINK" flag denotes file descriptors provided by application. It - * defaults to 0, as most platforms don't require UPLINK interface. - */ -# define BIO_FLAGS_UPLINK 0 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* This #define was replaced by an internal constant and should not be used. */ +# define BIO_FLAGS_UPLINK 0 # endif # define BIO_FLAGS_BASE64_NO_NL 0x100 @@ -171,6 +208,8 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 +/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ + typedef union bio_addr_st BIO_ADDR; typedef struct bio_addrinfo_st BIO_ADDRINFO; @@ -233,16 +272,23 @@ void BIO_clear_flags(BIO *b, int flags); # define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) # define BIO_cb_post(a) ((a)&BIO_CB_RETURN) +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, long argl, long ret); +OSSL_DEPRECATEDIN_3_0 BIO_callback_fn BIO_get_callback(const BIO *b); +OSSL_DEPRECATEDIN_3_0 void BIO_set_callback(BIO *b, BIO_callback_fn callback); +OSSL_DEPRECATEDIN_3_0 long BIO_debug_callback(BIO *bio, int cmd, + const char *argp, int argi, + long argl, long ret); +# endif + typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, size_t len, int argi, long argl, int ret, size_t *processed); -BIO_callback_fn BIO_get_callback(const BIO *b); -void BIO_set_callback(BIO *b, BIO_callback_fn callback); - BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); +long BIO_debug_callback_ex(BIO *bio, int oper, const char *argp, size_t len, + int argi, long argl, int ret, size_t *processed); char *BIO_get_callback_arg(const BIO *b); void BIO_set_callback_arg(BIO *b, char *arg); @@ -255,12 +301,42 @@ int BIO_method_type(const BIO *b); typedef int BIO_info_cb(BIO *, int, int); typedef BIO_info_cb bio_info_cb; /* backward compatibility */ -DEFINE_STACK_OF(BIO) +SKM_DEFINE_STACK_OF_INTERNAL(BIO, BIO, BIO) +#define sk_BIO_num(sk) OPENSSL_sk_num(ossl_check_const_BIO_sk_type(sk)) +#define sk_BIO_value(sk, idx) ((BIO *)OPENSSL_sk_value(ossl_check_const_BIO_sk_type(sk), (idx))) +#define sk_BIO_new(cmp) ((STACK_OF(BIO) *)OPENSSL_sk_new(ossl_check_BIO_compfunc_type(cmp))) +#define sk_BIO_new_null() ((STACK_OF(BIO) *)OPENSSL_sk_new_null()) +#define sk_BIO_new_reserve(cmp, n) ((STACK_OF(BIO) *)OPENSSL_sk_new_reserve(ossl_check_BIO_compfunc_type(cmp), (n))) +#define sk_BIO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_BIO_sk_type(sk), (n)) +#define sk_BIO_free(sk) OPENSSL_sk_free(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_zero(sk) OPENSSL_sk_zero(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_delete(sk, i) ((BIO *)OPENSSL_sk_delete(ossl_check_BIO_sk_type(sk), (i))) +#define sk_BIO_delete_ptr(sk, ptr) ((BIO *)OPENSSL_sk_delete_ptr(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr))) +#define sk_BIO_push(sk, ptr) OPENSSL_sk_push(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_pop(sk) ((BIO *)OPENSSL_sk_pop(ossl_check_BIO_sk_type(sk))) +#define sk_BIO_shift(sk) ((BIO *)OPENSSL_sk_shift(ossl_check_BIO_sk_type(sk))) +#define sk_BIO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_BIO_sk_type(sk),ossl_check_BIO_freefunc_type(freefunc)) +#define sk_BIO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr), (idx)) +#define sk_BIO_set(sk, idx, ptr) ((BIO *)OPENSSL_sk_set(ossl_check_BIO_sk_type(sk), (idx), ossl_check_BIO_type(ptr))) +#define sk_BIO_find(sk, ptr) OPENSSL_sk_find(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr), pnum) +#define sk_BIO_sort(sk) OPENSSL_sk_sort(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_BIO_sk_type(sk)) +#define sk_BIO_dup(sk) ((STACK_OF(BIO) *)OPENSSL_sk_dup(ossl_check_const_BIO_sk_type(sk))) +#define sk_BIO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(BIO) *)OPENSSL_sk_deep_copy(ossl_check_const_BIO_sk_type(sk), ossl_check_BIO_copyfunc_type(copyfunc), ossl_check_BIO_freefunc_type(freefunc))) +#define sk_BIO_set_cmp_func(sk, cmp) ((sk_BIO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_BIO_sk_type(sk), ossl_check_BIO_compfunc_type(cmp))) + + /* Prefix and suffix callback in ASN1 BIO */ typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, void *parg); +typedef void (*BIO_dgram_sctp_notification_handler_fn) (BIO *b, + void *context, + void *buf); # ifndef OPENSSL_NO_SCTP /* SCTP parameter structs */ struct bio_dgram_sctp_sndinfo { @@ -400,12 +476,11 @@ struct bio_dgram_sctp_prinfo { # define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR # define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) # define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) - -/* BIO_s_accept() and BIO_s_connect() */ -# define BIO_do_connect(b) BIO_do_handshake(b) -# define BIO_do_accept(b) BIO_do_handshake(b) # endif /* OPENSSL_NO_SOCK */ +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) + # define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) /* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ @@ -524,10 +599,15 @@ int BIO_ctrl_reset_read_request(BIO *b); # define BIO_dgram_get_mtu_overhead(b) \ (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) +/* ctrl macros for BIO_f_prefix */ +# define BIO_set_prefix(b,p) BIO_ctrl((b), BIO_CTRL_SET_PREFIX, 0, (void *)(p)) +# define BIO_set_indent(b,i) BIO_ctrl((b), BIO_CTRL_SET_INDENT, (i), NULL) +# define BIO_get_indent(b) BIO_ctrl((b), BIO_CTRL_GET_INDENT, 0, NULL) + #define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) int BIO_set_ex_data(BIO *bio, int idx, void *data); -void *BIO_get_ex_data(BIO *bio, int idx); +void *BIO_get_ex_data(const BIO *bio, int idx); uint64_t BIO_number_read(BIO *bio); uint64_t BIO_number_written(BIO *bio); @@ -543,9 +623,11 @@ int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, const BIO_METHOD *BIO_s_file(void); BIO *BIO_new_file(const char *filename, const char *mode); +BIO *BIO_new_from_core_bio(OSSL_LIB_CTX *libctx, OSSL_CORE_BIO *corebio); # ifndef OPENSSL_NO_STDIO BIO *BIO_new_fp(FILE *stream, int close_flag); # endif +BIO *BIO_new_ex(OSSL_LIB_CTX *libctx, const BIO_METHOD *method); BIO *BIO_new(const BIO_METHOD *type); int BIO_free(BIO *a); void BIO_set_data(BIO *a, void *ptr); @@ -559,6 +641,7 @@ int BIO_up_ref(BIO *a); int BIO_read(BIO *b, void *data, int dlen); int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); int BIO_gets(BIO *bp, char *buf, int size); +int BIO_get_line(BIO *bio, char *buf, int size); int BIO_write(BIO *b, const void *data, int dlen); int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); int BIO_puts(BIO *bp, const char *buf); @@ -583,9 +666,6 @@ int BIO_nread(BIO *bio, char **buf, int num); int BIO_nwrite0(BIO *bio, char **buf); int BIO_nwrite(BIO *bio, char **buf, int num); -long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, - long argl, long ret); - const BIO_METHOD *BIO_s_mem(void); const BIO_METHOD *BIO_s_secmem(void); BIO *BIO_new_mem_buf(const void *buf, int len); @@ -600,8 +680,11 @@ const BIO_METHOD *BIO_s_bio(void); const BIO_METHOD *BIO_s_null(void); const BIO_METHOD *BIO_f_null(void); const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_readbuffer(void); const BIO_METHOD *BIO_f_linebuffer(void); const BIO_METHOD *BIO_f_nbio_test(void); +const BIO_METHOD *BIO_f_prefix(void); +const BIO_METHOD *BIO_s_core(void); # ifndef OPENSSL_NO_DGRAM const BIO_METHOD *BIO_s_datagram(void); int BIO_dgram_non_fatal_error(int error); @@ -611,10 +694,8 @@ const BIO_METHOD *BIO_s_datagram_sctp(void); BIO *BIO_new_dgram_sctp(int fd, int close_flag); int BIO_dgram_is_sctp(BIO *bio); int BIO_dgram_sctp_notification_cb(BIO *b, - void (*handle_notifications) (BIO *bio, - void *context, - void *buf), - void *context); + BIO_dgram_sctp_notification_handler_fn handle_notifications, + void *context); int BIO_dgram_sctp_wait_for_dry(BIO *b); int BIO_dgram_sctp_msg_waiting(BIO *b); # endif @@ -623,21 +704,24 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_socket_wait(int fd, int for_read, time_t max_time); # endif +int BIO_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds); +int BIO_do_connect_retry(BIO *bio, int timeout, int nap_milliseconds); int BIO_fd_should_retry(int i); int BIO_fd_non_fatal_error(int error); int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len); + void *u, const void *s, int len); int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len, int indent); -int BIO_dump(BIO *b, const char *bytes, int len); -int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); + void *u, const void *s, int len, int indent); +int BIO_dump(BIO *b, const void *bytes, int len); +int BIO_dump_indent(BIO *b, const void *bytes, int len, int indent); # ifndef OPENSSL_NO_STDIO -int BIO_dump_fp(FILE *fp, const char *s, int len); -int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); +int BIO_dump_fp(FILE *fp, const void *s, int len); +int BIO_dump_indent_fp(FILE *fp, const void *s, int len, int indent); # endif -int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, +int BIO_hex_string(BIO *out, int indent, int width, const void *data, int datalen); # ifndef OPENSSL_NO_SOCK @@ -678,16 +762,17 @@ int BIO_sock_error(int sock); int BIO_socket_ioctl(int fd, long type, void *arg); int BIO_socket_nbio(int fd, int mode); int BIO_sock_init(void); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define BIO_sock_cleanup() while(0) continue # endif int BIO_set_tcp_ndelay(int sock, int turn_on); - -DEPRECATEDIN_1_1_0(struct hostent *BIO_gethostbyname(const char *name)) -DEPRECATEDIN_1_1_0(int BIO_get_port(const char *str, unsigned short *port_ptr)) -DEPRECATEDIN_1_1_0(int BIO_get_host_ip(const char *str, unsigned char *ip)) -DEPRECATEDIN_1_1_0(int BIO_get_accept_socket(char *host_port, int mode)) -DEPRECATEDIN_1_1_0(int BIO_accept(int sock, char **ip_port)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 struct hostent *BIO_gethostbyname(const char *name); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_port(const char *str, unsigned short *port_ptr); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_host_ip(const char *str, unsigned char *ip); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_accept_socket(char *host_port, int mode); +OSSL_DEPRECATEDIN_1_1_0 int BIO_accept(int sock, char **ip_port); +# endif union BIO_sock_info_u { BIO_ADDR *addr; @@ -734,6 +819,7 @@ void BIO_copy_next_retry(BIO *b); # define ossl_bio__attr__(x) # if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__MINGW32__) && !defined(__MINGW64__) \ && !defined(__APPLE__) /* * Because we support the 'z' modifier, which made its appearance in C99, diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h.in new file mode 100644 index 00000000..c521e41e --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h.in @@ -0,0 +1,864 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_BIO_H +# define OPENSSL_BIO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BIO_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* There are the classes of BIOs */ +# define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */ +# define BIO_TYPE_FILTER 0x0200 +# define BIO_TYPE_SOURCE_SINK 0x0400 + +/* These are the 'types' of BIOs */ +# define BIO_TYPE_NONE 0 +# define BIO_TYPE_MEM ( 1|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_FILE ( 2|BIO_TYPE_SOURCE_SINK) + +# define BIO_TYPE_FD ( 4|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_SOCKET ( 5|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_NULL ( 6|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_SSL ( 7|BIO_TYPE_FILTER) +# define BIO_TYPE_MD ( 8|BIO_TYPE_FILTER) +# define BIO_TYPE_BUFFER ( 9|BIO_TYPE_FILTER) +# define BIO_TYPE_CIPHER (10|BIO_TYPE_FILTER) +# define BIO_TYPE_BASE64 (11|BIO_TYPE_FILTER) +# define BIO_TYPE_CONNECT (12|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ACCEPT (13|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) + +# define BIO_TYPE_NBIO_TEST (16|BIO_TYPE_FILTER)/* server proxy BIO */ +# define BIO_TYPE_NULL_FILTER (17|BIO_TYPE_FILTER) +# define BIO_TYPE_BIO (19|BIO_TYPE_SOURCE_SINK)/* half a BIO pair */ +# define BIO_TYPE_LINEBUFFER (20|BIO_TYPE_FILTER) +# define BIO_TYPE_DGRAM (21|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ASN1 (22|BIO_TYPE_FILTER) +# define BIO_TYPE_COMP (23|BIO_TYPE_FILTER) +# ifndef OPENSSL_NO_SCTP +# define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# endif +# define BIO_TYPE_CORE_TO_PROV (25|BIO_TYPE_SOURCE_SINK) + +#define BIO_TYPE_START 128 + +/* + * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. + * BIO_set_fp(in,stdin,BIO_NOCLOSE); + */ +# define BIO_NOCLOSE 0x00 +# define BIO_CLOSE 0x01 + +/* + * These are used in the following macros and are passed to BIO_ctrl() + */ +# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ +# define BIO_CTRL_EOF 2/* opt - are we at the eof */ +# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ +# define BIO_CTRL_SET 4/* man - set the 'IO' type */ +# define BIO_CTRL_GET 5/* man - get the 'IO' type */ +# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ +# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ +# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ +# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ +# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ +# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ +# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ +# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ +# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ +# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ + +# define BIO_CTRL_PEEK 29/* BIO_f_buffer special */ +# define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ + +/* dgram BIO stuff */ +# define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ +# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected + * socket to be passed in */ +# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ +# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ + +# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation timed out */ + +/* #ifdef IP_MTU_DISCOVER */ +# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ +/* #endif */ + +# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ +# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 +# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ +# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. + * want to use this if asking + * the kernel fails */ + +# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was + * exceed in the previous write + * operation */ + +# define BIO_CTRL_DGRAM_GET_PEER 46 +# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ + +# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout + * to adjust socket timeouts */ +# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 + +# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 + +/* Deliberately outside of OPENSSL_NO_SCTP - used in bss_dgram.c */ +# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 +# ifndef OPENSSL_NO_SCTP +/* SCTP stuff */ +# define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 +# define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 +# define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 +# define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 +# define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 +# define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 +# define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 +# define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 +# define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 +# define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 +# endif + +# define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 + +/* + * internal BIO: + * # define BIO_CTRL_SET_KTLS_SEND 72 + * # define BIO_CTRL_SET_KTLS_SEND_CTRL_MSG 74 + * # define BIO_CTRL_CLEAR_KTLS_CTRL_MSG 75 + */ + +# define BIO_CTRL_GET_KTLS_SEND 73 +# define BIO_CTRL_GET_KTLS_RECV 76 + +# define BIO_CTRL_DGRAM_SCTP_WAIT_FOR_DRY 77 +# define BIO_CTRL_DGRAM_SCTP_MSG_WAITING 78 + +/* BIO_f_prefix controls */ +# define BIO_CTRL_SET_PREFIX 79 +# define BIO_CTRL_SET_INDENT 80 +# define BIO_CTRL_GET_INDENT 81 + +# ifndef OPENSSL_NO_KTLS +# define BIO_get_ktls_send(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL) > 0) +# define BIO_get_ktls_recv(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL) > 0) +# else +# define BIO_get_ktls_send(b) (0) +# define BIO_get_ktls_recv(b) (0) +# endif + +/* modifiers */ +# define BIO_FP_READ 0x02 +# define BIO_FP_WRITE 0x04 +# define BIO_FP_APPEND 0x08 +# define BIO_FP_TEXT 0x10 + +# define BIO_FLAGS_READ 0x01 +# define BIO_FLAGS_WRITE 0x02 +# define BIO_FLAGS_IO_SPECIAL 0x04 +# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) +# define BIO_FLAGS_SHOULD_RETRY 0x08 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* This #define was replaced by an internal constant and should not be used. */ +# define BIO_FLAGS_UPLINK 0 +# endif + +# define BIO_FLAGS_BASE64_NO_NL 0x100 + +/* + * This is used with memory BIOs: + * BIO_FLAGS_MEM_RDONLY means we shouldn't free up or change the data in any way; + * BIO_FLAGS_NONCLEAR_RST means we shouldn't clear data on reset. + */ +# define BIO_FLAGS_MEM_RDONLY 0x200 +# define BIO_FLAGS_NONCLEAR_RST 0x400 +# define BIO_FLAGS_IN_EOF 0x800 + +/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ + +typedef union bio_addr_st BIO_ADDR; +typedef struct bio_addrinfo_st BIO_ADDRINFO; + +int BIO_get_new_index(void); +void BIO_set_flags(BIO *b, int flags); +int BIO_test_flags(const BIO *b, int flags); +void BIO_clear_flags(BIO *b, int flags); + +# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) +# define BIO_set_retry_special(b) \ + BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_read(b) \ + BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_write(b) \ + BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) + +/* These are normally used internally in BIOs */ +# define BIO_clear_retry_flags(b) \ + BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_get_retry_flags(b) \ + BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) + +/* These should be used by the application to tell why we should retry */ +# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) +# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) +# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) +# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) +# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) + +/* + * The next three are used in conjunction with the BIO_should_io_special() + * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int + * *reason); will walk the BIO stack and return the 'reason' for the special + * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return + * the code. + */ +/* + * Returned from the SSL bio when the certificate retrieval code had an error + */ +# define BIO_RR_SSL_X509_LOOKUP 0x01 +/* Returned from the connect BIO when a connect would have blocked */ +# define BIO_RR_CONNECT 0x02 +/* Returned from the accept BIO when an accept would have blocked */ +# define BIO_RR_ACCEPT 0x03 + +/* These are passed by the BIO callback */ +# define BIO_CB_FREE 0x01 +# define BIO_CB_READ 0x02 +# define BIO_CB_WRITE 0x03 +# define BIO_CB_PUTS 0x04 +# define BIO_CB_GETS 0x05 +# define BIO_CB_CTRL 0x06 + +/* + * The callback is called before and after the underling operation, The + * BIO_CB_RETURN flag indicates if it is after the call + */ +# define BIO_CB_RETURN 0x80 +# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) +# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) +# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, + long argl, long ret); +OSSL_DEPRECATEDIN_3_0 BIO_callback_fn BIO_get_callback(const BIO *b); +OSSL_DEPRECATEDIN_3_0 void BIO_set_callback(BIO *b, BIO_callback_fn callback); +OSSL_DEPRECATEDIN_3_0 long BIO_debug_callback(BIO *bio, int cmd, + const char *argp, int argi, + long argl, long ret); +# endif + +typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, + size_t len, int argi, + long argl, int ret, size_t *processed); +BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); +void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); +long BIO_debug_callback_ex(BIO *bio, int oper, const char *argp, size_t len, + int argi, long argl, int ret, size_t *processed); + +char *BIO_get_callback_arg(const BIO *b); +void BIO_set_callback_arg(BIO *b, char *arg); + +typedef struct bio_method_st BIO_METHOD; + +const char *BIO_method_name(const BIO *b); +int BIO_method_type(const BIO *b); + +typedef int BIO_info_cb(BIO *, int, int); +typedef BIO_info_cb bio_info_cb; /* backward compatibility */ + +{- + generate_stack_macros("BIO"); +-} + + +/* Prefix and suffix callback in ASN1 BIO */ +typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, + void *parg); + +typedef void (*BIO_dgram_sctp_notification_handler_fn) (BIO *b, + void *context, + void *buf); +# ifndef OPENSSL_NO_SCTP +/* SCTP parameter structs */ +struct bio_dgram_sctp_sndinfo { + uint16_t snd_sid; + uint16_t snd_flags; + uint32_t snd_ppid; + uint32_t snd_context; +}; + +struct bio_dgram_sctp_rcvinfo { + uint16_t rcv_sid; + uint16_t rcv_ssn; + uint16_t rcv_flags; + uint32_t rcv_ppid; + uint32_t rcv_tsn; + uint32_t rcv_cumtsn; + uint32_t rcv_context; +}; + +struct bio_dgram_sctp_prinfo { + uint16_t pr_policy; + uint32_t pr_value; +}; +# endif + +/* + * #define BIO_CONN_get_param_hostname BIO_ctrl + */ + +# define BIO_C_SET_CONNECT 100 +# define BIO_C_DO_STATE_MACHINE 101 +# define BIO_C_SET_NBIO 102 +/* # define BIO_C_SET_PROXY_PARAM 103 */ +# define BIO_C_SET_FD 104 +# define BIO_C_GET_FD 105 +# define BIO_C_SET_FILE_PTR 106 +# define BIO_C_GET_FILE_PTR 107 +# define BIO_C_SET_FILENAME 108 +# define BIO_C_SET_SSL 109 +# define BIO_C_GET_SSL 110 +# define BIO_C_SET_MD 111 +# define BIO_C_GET_MD 112 +# define BIO_C_GET_CIPHER_STATUS 113 +# define BIO_C_SET_BUF_MEM 114 +# define BIO_C_GET_BUF_MEM_PTR 115 +# define BIO_C_GET_BUFF_NUM_LINES 116 +# define BIO_C_SET_BUFF_SIZE 117 +# define BIO_C_SET_ACCEPT 118 +# define BIO_C_SSL_MODE 119 +# define BIO_C_GET_MD_CTX 120 +/* # define BIO_C_GET_PROXY_PARAM 121 */ +# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ +# define BIO_C_GET_CONNECT 123 +# define BIO_C_GET_ACCEPT 124 +# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 +# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 +# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 +# define BIO_C_FILE_SEEK 128 +# define BIO_C_GET_CIPHER_CTX 129 +# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input + * value */ +# define BIO_C_SET_BIND_MODE 131 +# define BIO_C_GET_BIND_MODE 132 +# define BIO_C_FILE_TELL 133 +# define BIO_C_GET_SOCKS 134 +# define BIO_C_SET_SOCKS 135 + +# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ +# define BIO_C_GET_WRITE_BUF_SIZE 137 +# define BIO_C_MAKE_BIO_PAIR 138 +# define BIO_C_DESTROY_BIO_PAIR 139 +# define BIO_C_GET_WRITE_GUARANTEE 140 +# define BIO_C_GET_READ_REQUEST 141 +# define BIO_C_SHUTDOWN_WR 142 +# define BIO_C_NREAD0 143 +# define BIO_C_NREAD 144 +# define BIO_C_NWRITE0 145 +# define BIO_C_NWRITE 146 +# define BIO_C_RESET_READ_REQUEST 147 +# define BIO_C_SET_MD_CTX 148 + +# define BIO_C_SET_PREFIX 149 +# define BIO_C_GET_PREFIX 150 +# define BIO_C_SET_SUFFIX 151 +# define BIO_C_GET_SUFFIX 152 + +# define BIO_C_SET_EX_ARG 153 +# define BIO_C_GET_EX_ARG 154 + +# define BIO_C_SET_CONNECT_MODE 155 + +# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) +# define BIO_get_app_data(s) BIO_get_ex_data(s,0) + +# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +# ifndef OPENSSL_NO_SOCK +/* IP families we support, for BIO_s_connect() and BIO_s_accept() */ +/* Note: the underlying operating system may not support some of them */ +# define BIO_FAMILY_IPV4 4 +# define BIO_FAMILY_IPV6 6 +# define BIO_FAMILY_IPANY 256 + +/* BIO_s_connect() */ +# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0, \ + (char *)(name)) +# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1, \ + (char *)(port)) +# define BIO_set_conn_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2, \ + (char *)(addr)) +# define BIO_set_conn_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f) +# define BIO_get_conn_hostname(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)) +# define BIO_get_conn_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)) +# define BIO_get_conn_address(b) ((const BIO_ADDR *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)) +# define BIO_get_conn_ip_family(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) +# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) + +/* BIO_s_accept() */ +# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \ + (char *)(name)) +# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1, \ + (char *)(port)) +# define BIO_get_accept_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)) +# define BIO_get_accept_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1)) +# define BIO_get_peer_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2)) +# define BIO_get_peer_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3)) +/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ +# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(n)?(void *)"a":NULL) +# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3, \ + (char *)(bio)) +# define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f) +# define BIO_get_accept_ip_family(b) BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL) + +/* Aliases kept for backward compatibility */ +# define BIO_BIND_NORMAL 0 +# define BIO_BIND_REUSEADDR BIO_SOCK_REUSEADDR +# define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR +# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) +# define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) +# endif /* OPENSSL_NO_SOCK */ + +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) + +# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ +# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) +# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)(c)) + +/* BIO_s_file() */ +# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)(fp)) +# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)(fpp)) + +/* BIO_s_fd() and BIO_s_file() */ +# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) +# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) + +/* + * name is cast to lose const, but might be better to route through a + * function so we can do it safely + */ +# ifdef CONST_STRICT +/* + * If you are wondering why this isn't defined, its because CONST_STRICT is + * purely a compile-time kludge to allow const to be checked. + */ +int BIO_read_filename(BIO *b, const char *name); +# else +# define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ,(char *)(name)) +# endif +# define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_WRITE,name) +# define BIO_append_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_APPEND,name) +# define BIO_rw_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) + +/* + * WARNING WARNING, this ups the reference count on the read bio of the SSL + * structure. This is because the ssl read BIO is now pointed to by the + * next_bio field in the bio. So when you free the BIO, make sure you are + * doing a BIO_free_all() to catch the underlying BIO. + */ +# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)(ssl)) +# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)(sslp)) +# define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) +# define BIO_set_ssl_renegotiate_bytes(b,num) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) +# define BIO_get_num_renegotiates(b) \ + BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) +# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) + +/* defined in evp.h */ +/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)(md)) */ + +# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)(pp)) +# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)(bm)) +# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0, \ + (char *)(pp)) +# define BIO_set_mem_eof_return(b,v) \ + BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) + +/* For the BIO_f_buffer() type */ +# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) +# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) +# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) +# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) +# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) + +/* Don't use the next one unless you know what you are doing :-) */ +# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) + +# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) +# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) +# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) +# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) +# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) +# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) +/* ...pending macros have inappropriate return type */ +size_t BIO_ctrl_pending(BIO *b); +size_t BIO_ctrl_wpending(BIO *b); +# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) +# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ + cbp) +# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) + +/* For the BIO_f_buffer() type */ +# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) +# define BIO_buffer_peek(b,s,l) BIO_ctrl(b,BIO_CTRL_PEEK,(l),(s)) + +/* For BIO_s_bio() */ +# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) +# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) +# define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) +# define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) +# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) +/* macros with inappropriate type -- but ...pending macros use int too: */ +# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) +# define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) +size_t BIO_ctrl_get_write_guarantee(BIO *b); +size_t BIO_ctrl_get_read_request(BIO *b); +int BIO_ctrl_reset_read_request(BIO *b); + +/* ctrl macros for dgram */ +# define BIO_ctrl_dgram_connect(b,peer) \ + (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)(peer)) +# define BIO_ctrl_set_connected(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (char *)(peer)) +# define BIO_dgram_recv_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) +# define BIO_dgram_send_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) +# define BIO_dgram_get_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)(peer)) +# define BIO_dgram_set_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)(peer)) +# define BIO_dgram_get_mtu_overhead(b) \ + (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) + +/* ctrl macros for BIO_f_prefix */ +# define BIO_set_prefix(b,p) BIO_ctrl((b), BIO_CTRL_SET_PREFIX, 0, (void *)(p)) +# define BIO_set_indent(b,i) BIO_ctrl((b), BIO_CTRL_SET_INDENT, (i), NULL) +# define BIO_get_indent(b) BIO_ctrl((b), BIO_CTRL_GET_INDENT, 0, NULL) + +#define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) +int BIO_set_ex_data(BIO *bio, int idx, void *data); +void *BIO_get_ex_data(const BIO *bio, int idx); +uint64_t BIO_number_read(BIO *bio); +uint64_t BIO_number_written(BIO *bio); + +/* For BIO_f_asn1() */ +int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, + asn1_ps_func *prefix_free); +int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, + asn1_ps_func **pprefix_free); +int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, + asn1_ps_func *suffix_free); +int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, + asn1_ps_func **psuffix_free); + +const BIO_METHOD *BIO_s_file(void); +BIO *BIO_new_file(const char *filename, const char *mode); +BIO *BIO_new_from_core_bio(OSSL_LIB_CTX *libctx, OSSL_CORE_BIO *corebio); +# ifndef OPENSSL_NO_STDIO +BIO *BIO_new_fp(FILE *stream, int close_flag); +# endif +BIO *BIO_new_ex(OSSL_LIB_CTX *libctx, const BIO_METHOD *method); +BIO *BIO_new(const BIO_METHOD *type); +int BIO_free(BIO *a); +void BIO_set_data(BIO *a, void *ptr); +void *BIO_get_data(BIO *a); +void BIO_set_init(BIO *a, int init); +int BIO_get_init(BIO *a); +void BIO_set_shutdown(BIO *a, int shut); +int BIO_get_shutdown(BIO *a); +void BIO_vfree(BIO *a); +int BIO_up_ref(BIO *a); +int BIO_read(BIO *b, void *data, int dlen); +int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); +int BIO_gets(BIO *bp, char *buf, int size); +int BIO_get_line(BIO *bio, char *buf, int size); +int BIO_write(BIO *b, const void *data, int dlen); +int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); +int BIO_puts(BIO *bp, const char *buf); +int BIO_indent(BIO *b, int indent, int max); +long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); +long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); +void *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); +long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); +BIO *BIO_push(BIO *b, BIO *append); +BIO *BIO_pop(BIO *b); +void BIO_free_all(BIO *a); +BIO *BIO_find_type(BIO *b, int bio_type); +BIO *BIO_next(BIO *b); +void BIO_set_next(BIO *b, BIO *next); +BIO *BIO_get_retry_BIO(BIO *bio, int *reason); +int BIO_get_retry_reason(BIO *bio); +void BIO_set_retry_reason(BIO *bio, int reason); +BIO *BIO_dup_chain(BIO *in); + +int BIO_nread0(BIO *bio, char **buf); +int BIO_nread(BIO *bio, char **buf, int num); +int BIO_nwrite0(BIO *bio, char **buf); +int BIO_nwrite(BIO *bio, char **buf, int num); + +const BIO_METHOD *BIO_s_mem(void); +const BIO_METHOD *BIO_s_secmem(void); +BIO *BIO_new_mem_buf(const void *buf, int len); +# ifndef OPENSSL_NO_SOCK +const BIO_METHOD *BIO_s_socket(void); +const BIO_METHOD *BIO_s_connect(void); +const BIO_METHOD *BIO_s_accept(void); +# endif +const BIO_METHOD *BIO_s_fd(void); +const BIO_METHOD *BIO_s_log(void); +const BIO_METHOD *BIO_s_bio(void); +const BIO_METHOD *BIO_s_null(void); +const BIO_METHOD *BIO_f_null(void); +const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_readbuffer(void); +const BIO_METHOD *BIO_f_linebuffer(void); +const BIO_METHOD *BIO_f_nbio_test(void); +const BIO_METHOD *BIO_f_prefix(void); +const BIO_METHOD *BIO_s_core(void); +# ifndef OPENSSL_NO_DGRAM +const BIO_METHOD *BIO_s_datagram(void); +int BIO_dgram_non_fatal_error(int error); +BIO *BIO_new_dgram(int fd, int close_flag); +# ifndef OPENSSL_NO_SCTP +const BIO_METHOD *BIO_s_datagram_sctp(void); +BIO *BIO_new_dgram_sctp(int fd, int close_flag); +int BIO_dgram_is_sctp(BIO *bio); +int BIO_dgram_sctp_notification_cb(BIO *b, + BIO_dgram_sctp_notification_handler_fn handle_notifications, + void *context); +int BIO_dgram_sctp_wait_for_dry(BIO *b); +int BIO_dgram_sctp_msg_waiting(BIO *b); +# endif +# endif + +# ifndef OPENSSL_NO_SOCK +int BIO_sock_should_retry(int i); +int BIO_sock_non_fatal_error(int error); +int BIO_socket_wait(int fd, int for_read, time_t max_time); +# endif +int BIO_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds); +int BIO_do_connect_retry(BIO *bio, int timeout, int nap_milliseconds); + +int BIO_fd_should_retry(int i); +int BIO_fd_non_fatal_error(int error); +int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const void *s, int len); +int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const void *s, int len, int indent); +int BIO_dump(BIO *b, const void *bytes, int len); +int BIO_dump_indent(BIO *b, const void *bytes, int len, int indent); +# ifndef OPENSSL_NO_STDIO +int BIO_dump_fp(FILE *fp, const void *s, int len); +int BIO_dump_indent_fp(FILE *fp, const void *s, int len, int indent); +# endif +int BIO_hex_string(BIO *out, int indent, int width, const void *data, + int datalen); + +# ifndef OPENSSL_NO_SOCK +BIO_ADDR *BIO_ADDR_new(void); +int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, + const void *where, size_t wherelen, unsigned short port); +void BIO_ADDR_free(BIO_ADDR *); +void BIO_ADDR_clear(BIO_ADDR *ap); +int BIO_ADDR_family(const BIO_ADDR *ap); +int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); +unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); +char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_path_string(const BIO_ADDR *ap); + +const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai); +const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai); +void BIO_ADDRINFO_free(BIO_ADDRINFO *bai); + +enum BIO_hostserv_priorities { + BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV +}; +int BIO_parse_hostserv(const char *hostserv, char **host, char **service, + enum BIO_hostserv_priorities hostserv_prio); +enum BIO_lookup_type { + BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER +}; +int BIO_lookup(const char *host, const char *service, + enum BIO_lookup_type lookup_type, + int family, int socktype, BIO_ADDRINFO **res); +int BIO_lookup_ex(const char *host, const char *service, + int lookup_type, int family, int socktype, int protocol, + BIO_ADDRINFO **res); +int BIO_sock_error(int sock); +int BIO_socket_ioctl(int fd, long type, void *arg); +int BIO_socket_nbio(int fd, int mode); +int BIO_sock_init(void); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define BIO_sock_cleanup() while(0) continue +# endif +int BIO_set_tcp_ndelay(int sock, int turn_on); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 struct hostent *BIO_gethostbyname(const char *name); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_port(const char *str, unsigned short *port_ptr); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_host_ip(const char *str, unsigned char *ip); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_accept_socket(char *host_port, int mode); +OSSL_DEPRECATEDIN_1_1_0 int BIO_accept(int sock, char **ip_port); +# endif + +union BIO_sock_info_u { + BIO_ADDR *addr; +}; +enum BIO_sock_info_type { + BIO_SOCK_INFO_ADDRESS +}; +int BIO_sock_info(int sock, + enum BIO_sock_info_type type, union BIO_sock_info_u *info); + +# define BIO_SOCK_REUSEADDR 0x01 +# define BIO_SOCK_V6_ONLY 0x02 +# define BIO_SOCK_KEEPALIVE 0x04 +# define BIO_SOCK_NONBLOCK 0x08 +# define BIO_SOCK_NODELAY 0x10 + +int BIO_socket(int domain, int socktype, int protocol, int options); +int BIO_connect(int sock, const BIO_ADDR *addr, int options); +int BIO_bind(int sock, const BIO_ADDR *addr, int options); +int BIO_listen(int sock, const BIO_ADDR *addr, int options); +int BIO_accept_ex(int accept_sock, BIO_ADDR *addr, int options); +int BIO_closesocket(int sock); + +BIO *BIO_new_socket(int sock, int close_flag); +BIO *BIO_new_connect(const char *host_port); +BIO *BIO_new_accept(const char *host_port); +# endif /* OPENSSL_NO_SOCK*/ + +BIO *BIO_new_fd(int fd, int close_flag); + +int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, + BIO **bio2, size_t writebuf2); +/* + * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. + * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default + * value. + */ + +void BIO_copy_next_retry(BIO *b); + +/* + * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); + */ + +# define ossl_bio__attr__(x) +# if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__MINGW32__) && !defined(__MINGW64__) \ + && !defined(__APPLE__) + /* + * Because we support the 'z' modifier, which made its appearance in C99, + * we can't use __attribute__ with pre C99 dialects. + */ +# if __STDC_VERSION__ >= 199901L +# undef ossl_bio__attr__ +# define ossl_bio__attr__ __attribute__ +# if __GNUC__*10 + __GNUC_MINOR__ >= 44 +# define ossl_bio__printf__ __gnu_printf__ +# else +# define ossl_bio__printf__ __printf__ +# endif +# endif +# endif +int BIO_printf(BIO *bio, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 3))); +int BIO_vprintf(BIO *bio, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 0))); +int BIO_snprintf(char *buf, size_t n, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 4))); +int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 0))); +# undef ossl_bio__attr__ +# undef ossl_bio__printf__ + + +BIO_METHOD *BIO_meth_new(int type, const char *name); +void BIO_meth_free(BIO_METHOD *biom); +int (*BIO_meth_get_write(const BIO_METHOD *biom)) (BIO *, const char *, int); +int (*BIO_meth_get_write_ex(const BIO_METHOD *biom)) (BIO *, const char *, size_t, + size_t *); +int BIO_meth_set_write(BIO_METHOD *biom, + int (*write) (BIO *, const char *, int)); +int BIO_meth_set_write_ex(BIO_METHOD *biom, + int (*bwrite) (BIO *, const char *, size_t, size_t *)); +int (*BIO_meth_get_read(const BIO_METHOD *biom)) (BIO *, char *, int); +int (*BIO_meth_get_read_ex(const BIO_METHOD *biom)) (BIO *, char *, size_t, size_t *); +int BIO_meth_set_read(BIO_METHOD *biom, + int (*read) (BIO *, char *, int)); +int BIO_meth_set_read_ex(BIO_METHOD *biom, + int (*bread) (BIO *, char *, size_t, size_t *)); +int (*BIO_meth_get_puts(const BIO_METHOD *biom)) (BIO *, const char *); +int BIO_meth_set_puts(BIO_METHOD *biom, + int (*puts) (BIO *, const char *)); +int (*BIO_meth_get_gets(const BIO_METHOD *biom)) (BIO *, char *, int); +int BIO_meth_set_gets(BIO_METHOD *biom, + int (*gets) (BIO *, char *, int)); +long (*BIO_meth_get_ctrl(const BIO_METHOD *biom)) (BIO *, int, long, void *); +int BIO_meth_set_ctrl(BIO_METHOD *biom, + long (*ctrl) (BIO *, int, long, void *)); +int (*BIO_meth_get_create(const BIO_METHOD *bion)) (BIO *); +int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); +int (*BIO_meth_get_destroy(const BIO_METHOD *biom)) (BIO *); +int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); +long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom)) + (BIO *, int, BIO_info_cb *); +int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, + long (*callback_ctrl) (BIO *, int, + BIO_info_cb *)); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bioerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bioerr.h index 46e2c96e..787b30af 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bioerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bioerr.h @@ -1,84 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BIOERR_H -# define HEADER_BIOERR_H +#ifndef OPENSSL_BIOERR_H +# define OPENSSL_BIOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BIO_strings(void); -/* - * BIO function codes. - */ -# define BIO_F_ACPT_STATE 100 -# define BIO_F_ADDRINFO_WRAP 148 -# define BIO_F_ADDR_STRINGS 134 -# define BIO_F_BIO_ACCEPT 101 -# define BIO_F_BIO_ACCEPT_EX 137 -# define BIO_F_BIO_ACCEPT_NEW 152 -# define BIO_F_BIO_ADDR_NEW 144 -# define BIO_F_BIO_BIND 147 -# define BIO_F_BIO_CALLBACK_CTRL 131 -# define BIO_F_BIO_CONNECT 138 -# define BIO_F_BIO_CONNECT_NEW 153 -# define BIO_F_BIO_CTRL 103 -# define BIO_F_BIO_GETS 104 -# define BIO_F_BIO_GET_HOST_IP 106 -# define BIO_F_BIO_GET_NEW_INDEX 102 -# define BIO_F_BIO_GET_PORT 107 -# define BIO_F_BIO_LISTEN 139 -# define BIO_F_BIO_LOOKUP 135 -# define BIO_F_BIO_LOOKUP_EX 143 -# define BIO_F_BIO_MAKE_PAIR 121 -# define BIO_F_BIO_METH_NEW 146 -# define BIO_F_BIO_NEW 108 -# define BIO_F_BIO_NEW_DGRAM_SCTP 145 -# define BIO_F_BIO_NEW_FILE 109 -# define BIO_F_BIO_NEW_MEM_BUF 126 -# define BIO_F_BIO_NREAD 123 -# define BIO_F_BIO_NREAD0 124 -# define BIO_F_BIO_NWRITE 125 -# define BIO_F_BIO_NWRITE0 122 -# define BIO_F_BIO_PARSE_HOSTSERV 136 -# define BIO_F_BIO_PUTS 110 -# define BIO_F_BIO_READ 111 -# define BIO_F_BIO_READ_EX 105 -# define BIO_F_BIO_READ_INTERN 120 -# define BIO_F_BIO_SOCKET 140 -# define BIO_F_BIO_SOCKET_NBIO 142 -# define BIO_F_BIO_SOCK_INFO 141 -# define BIO_F_BIO_SOCK_INIT 112 -# define BIO_F_BIO_WRITE 113 -# define BIO_F_BIO_WRITE_EX 119 -# define BIO_F_BIO_WRITE_INTERN 128 -# define BIO_F_BUFFER_CTRL 114 -# define BIO_F_CONN_CTRL 127 -# define BIO_F_CONN_STATE 115 -# define BIO_F_DGRAM_SCTP_NEW 149 -# define BIO_F_DGRAM_SCTP_READ 132 -# define BIO_F_DGRAM_SCTP_WRITE 133 -# define BIO_F_DOAPR_OUTCH 150 -# define BIO_F_FILE_CTRL 116 -# define BIO_F_FILE_READ 130 -# define BIO_F_LINEBUFFER_CTRL 129 -# define BIO_F_LINEBUFFER_NEW 151 -# define BIO_F_MEM_WRITE 117 -# define BIO_F_NBIOF_NEW 154 -# define BIO_F_SLG_WRITE 155 -# define BIO_F_SSL_NEW 118 /* * BIO reason codes. @@ -89,6 +27,7 @@ int ERR_load_BIO_strings(void); # define BIO_R_BAD_FOPEN_MODE 101 # define BIO_R_BROKEN_PIPE 124 # define BIO_R_CONNECT_ERROR 103 +# define BIO_R_CONNECT_TIMEOUT 147 # define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 # define BIO_R_GETSOCKNAME_ERROR 132 # define BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS 133 @@ -105,7 +44,9 @@ int ERR_load_BIO_strings(void); # define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 # define BIO_R_NO_PORT_DEFINED 113 # define BIO_R_NO_SUCH_FILE 128 -# define BIO_R_NULL_PARAMETER 115 +# define BIO_R_NULL_PARAMETER 115 /* unused */ +# define BIO_R_TRANSFER_ERROR 104 +# define BIO_R_TRANSFER_TIMEOUT 105 # define BIO_R_UNABLE_TO_BIND_SOCKET 117 # define BIO_R_UNABLE_TO_CREATE_SOCKET 118 # define BIO_R_UNABLE_TO_KEEPALIVE 137 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/blowfish.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/blowfish.h index cd3e460e..667d6423 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/blowfish.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/blowfish.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BLOWFISH_H -# define HEADER_BLOWFISH_H +#ifndef OPENSSL_BLOWFISH_H +# define OPENSSL_BLOWFISH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BLOWFISH_H +# endif # include @@ -18,40 +24,51 @@ extern "C" { # endif -# define BF_ENCRYPT 1 -# define BF_DECRYPT 0 +# define BF_BLOCK 8 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define BF_ENCRYPT 1 +# define BF_DECRYPT 0 /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! BF_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define BF_LONG unsigned int +# define BF_LONG unsigned int -# define BF_ROUNDS 16 -# define BF_BLOCK 8 +# define BF_ROUNDS 16 typedef struct bf_key_st { BF_LONG P[BF_ROUNDS + 2]; BF_LONG S[4 * 256]; } BF_KEY; -void BF_set_key(BF_KEY *key, int len, const unsigned char *data); - -void BF_encrypt(BF_LONG *data, const BF_KEY *key); -void BF_decrypt(BF_LONG *data, const BF_KEY *key); - -void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, - const BF_KEY *key, int enc); -void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - const BF_KEY *schedule, unsigned char *ivec, int enc); -void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num); -const char *BF_options(void); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void BF_set_key(BF_KEY *key, int len, + const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void BF_encrypt(BF_LONG *data, const BF_KEY *key); +OSSL_DEPRECATEDIN_3_0 void BF_decrypt(BF_LONG *data, const BF_KEY *key); +OSSL_DEPRECATEDIN_3_0 void BF_ecb_encrypt(const unsigned char *in, + unsigned char *out, const BF_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void BF_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + const BF_KEY *schedule, + unsigned char *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void BF_cfb64_encrypt(const unsigned char *in, + unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void BF_ofb64_encrypt(const unsigned char *in, + unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num); +OSSL_DEPRECATEDIN_3_0 const char *BF_options(void); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bn.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bn.h index d8776604..27b127a5 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bn.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bn.h @@ -1,22 +1,28 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BN_H -# define HEADER_BN_H +#ifndef OPENSSL_BN_H +# define OPENSSL_BN_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BN_H +# endif # include # ifndef OPENSSL_NO_STDIO # include # endif # include -# include +# include # include # include @@ -61,7 +67,7 @@ extern "C" { # define BN_FLG_CONSTTIME 0x04 # define BN_FLG_SECURE 0x08 -# if OPENSSL_API_COMPAT < 0x00908000L +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 /* deprecated name for the flag */ # define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME # define BN_FLG_FREE 0x8000 /* used for debugging */ @@ -103,8 +109,9 @@ void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), void *BN_GENCB_get_arg(BN_GENCB *cb); -# define BN_prime_checks 0 /* default: select number of iterations based - * on the size of the number */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define BN_prime_checks 0 /* default: select number of iterations based + * on the size of the number */ /* * BN_prime_checks_for_size() returns the number of Miller-Rabin iterations @@ -169,14 +176,15 @@ void *BN_GENCB_get_arg(BN_GENCB *cb); * (b) >= 6 | >= 12 | 34 | 64 bit */ -# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ - (b) >= 1345 ? 4 : \ - (b) >= 476 ? 5 : \ - (b) >= 400 ? 6 : \ - (b) >= 347 ? 7 : \ - (b) >= 308 ? 8 : \ - (b) >= 55 ? 27 : \ - /* b >= 6 */ 34) +# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ + (b) >= 1345 ? 4 : \ + (b) >= 476 ? 5 : \ + (b) >= 400 ? 6 : \ + (b) >= 347 ? 7 : \ + (b) >= 308 ? 8 : \ + (b) >= 55 ? 27 : \ + /* b >= 6 */ 34) +# endif # define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) @@ -190,7 +198,7 @@ int BN_is_odd(const BIGNUM *a); void BN_zero_ex(BIGNUM *a); -# if OPENSSL_API_COMPAT >= 0x00908000L +# if OPENSSL_API_LEVEL > 908 # define BN_zero(a) BN_zero_ex(a) # else # define BN_zero(a) (BN_set_word((a),0)) @@ -198,18 +206,32 @@ void BN_zero_ex(BIGNUM *a); const BIGNUM *BN_value_one(void); char *BN_options(void); +BN_CTX *BN_CTX_new_ex(OSSL_LIB_CTX *ctx); BN_CTX *BN_CTX_new(void); +BN_CTX *BN_CTX_secure_new_ex(OSSL_LIB_CTX *ctx); BN_CTX *BN_CTX_secure_new(void); void BN_CTX_free(BN_CTX *c); void BN_CTX_start(BN_CTX *ctx); BIGNUM *BN_CTX_get(BN_CTX *ctx); void BN_CTX_end(BN_CTX *ctx); +int BN_rand_ex(BIGNUM *rnd, int bits, int top, int bottom, + unsigned int strength, BN_CTX *ctx); int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_priv_rand_ex(BIGNUM *rnd, int bits, int top, int bottom, + unsigned int strength, BN_CTX *ctx); int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_rand_range_ex(BIGNUM *r, const BIGNUM *range, unsigned int strength, + BN_CTX *ctx); int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_priv_rand_range_ex(BIGNUM *r, const BIGNUM *range, + unsigned int strength, BN_CTX *ctx); int BN_priv_rand_range(BIGNUM *rnd, const BIGNUM *range); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); +OSSL_DEPRECATEDIN_3_0 int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); +# endif int BN_num_bits(const BIGNUM *a); int BN_num_bits_word(BN_ULONG l); int BN_security_bits(int L, int N); @@ -223,6 +245,8 @@ int BN_bn2bin(const BIGNUM *a, unsigned char *to); int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_native2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2nativepad(const BIGNUM *a, unsigned char *to, int tolen); BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); int BN_bn2mpi(const BIGNUM *a, unsigned char *to); int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); @@ -292,6 +316,11 @@ int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, BN_CTX *ctx, BN_MONT_CTX *m_ctx); int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_exp_mont_consttime_x2(BIGNUM *rr1, const BIGNUM *a1, const BIGNUM *p1, + const BIGNUM *m1, BN_MONT_CTX *in_mont1, + BIGNUM *rr2, const BIGNUM *a2, const BIGNUM *p2, + const BIGNUM *m2, BN_MONT_CTX *in_mont2, + BN_CTX *ctx); int BN_mask_bits(BIGNUM *a, int n); # ifndef OPENSSL_NO_STDIO @@ -315,6 +344,7 @@ int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns * -2 for * error */ +int BN_are_coprime(BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); BIGNUM *BN_mod_inverse(BIGNUM *ret, const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); BIGNUM *BN_mod_sqrt(BIGNUM *ret, @@ -323,38 +353,51 @@ BIGNUM *BN_mod_sqrt(BIGNUM *ret, void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); /* Deprecated versions */ -DEPRECATEDIN_0_9_8(BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, - const BIGNUM *add, - const BIGNUM *rem, - void (*callback) (int, int, - void *), - void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime_fasttest(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg, - int do_trial_division)) - -/* Newer versions */ -int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, - const BIGNUM *rem, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 +BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, const BIGNUM *rem, + void (*callback) (int, int, void *), + void *cb_arg); +OSSL_DEPRECATEDIN_0_9_8 +int BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg); +OSSL_DEPRECATEDIN_0_9_8 +int BN_is_prime_fasttest(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg, + int do_trial_division); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, int do_trial_division, BN_GENCB *cb); +# endif +/* Newer versions */ +int BN_generate_prime_ex2(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb, + BN_CTX *ctx); +int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, + const BIGNUM *rem, BN_GENCB *cb); +int BN_check_prime(const BIGNUM *p, BN_CTX *ctx, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, const BIGNUM *Xp, const BIGNUM *Xp1, const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb); +# endif BN_MONT_CTX *BN_MONT_CTX_new(void); int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, @@ -398,10 +441,12 @@ BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, BN_CTX *ctx, BN_MONT_CTX *m_ctx), BN_MONT_CTX *m_ctx); - -DEPRECATEDIN_0_9_8(void BN_set_params(int mul, int high, int low, int mont)) -DEPRECATEDIN_0_9_8(int BN_get_params(int which)) /* 0, mul, 1 high, 2 low, 3 - * mont */ +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 +void BN_set_params(int mul, int high, int low, int mont); +OSSL_DEPRECATEDIN_0_9_8 +int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */ +# endif BN_RECP_CTX *BN_RECP_CTX_new(void); void BN_RECP_CTX_free(BN_RECP_CTX *recp); @@ -519,16 +564,16 @@ BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); -# if OPENSSL_API_COMPAT < 0x10100000L -# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 -# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 -# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 -# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 -# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 -# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 -# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 -# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 -# endif +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 +# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 +# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 +# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 +# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 +# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 +# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 +# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 +# endif int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bnerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bnerr.h index 5c83777f..7c3f6ef3 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bnerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bnerr.h @@ -1,78 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BNERR_H -# define HEADER_BNERR_H +#ifndef OPENSSL_BNERR_H +# define OPENSSL_BNERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BN_strings(void); -/* - * BN function codes. - */ -# define BN_F_BNRAND 127 -# define BN_F_BNRAND_RANGE 138 -# define BN_F_BN_BLINDING_CONVERT_EX 100 -# define BN_F_BN_BLINDING_CREATE_PARAM 128 -# define BN_F_BN_BLINDING_INVERT_EX 101 -# define BN_F_BN_BLINDING_NEW 102 -# define BN_F_BN_BLINDING_UPDATE 103 -# define BN_F_BN_BN2DEC 104 -# define BN_F_BN_BN2HEX 105 -# define BN_F_BN_COMPUTE_WNAF 142 -# define BN_F_BN_CTX_GET 116 -# define BN_F_BN_CTX_NEW 106 -# define BN_F_BN_CTX_START 129 -# define BN_F_BN_DIV 107 -# define BN_F_BN_DIV_RECP 130 -# define BN_F_BN_EXP 123 -# define BN_F_BN_EXPAND_INTERNAL 120 -# define BN_F_BN_GENCB_NEW 143 -# define BN_F_BN_GENERATE_DSA_NONCE 140 -# define BN_F_BN_GENERATE_PRIME_EX 141 -# define BN_F_BN_GF2M_MOD 131 -# define BN_F_BN_GF2M_MOD_EXP 132 -# define BN_F_BN_GF2M_MOD_MUL 133 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 -# define BN_F_BN_GF2M_MOD_SQR 136 -# define BN_F_BN_GF2M_MOD_SQRT 137 -# define BN_F_BN_LSHIFT 145 -# define BN_F_BN_MOD_EXP2_MONT 118 -# define BN_F_BN_MOD_EXP_MONT 109 -# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 -# define BN_F_BN_MOD_EXP_MONT_WORD 117 -# define BN_F_BN_MOD_EXP_RECP 125 -# define BN_F_BN_MOD_EXP_SIMPLE 126 -# define BN_F_BN_MOD_INVERSE 110 -# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 -# define BN_F_BN_MOD_LSHIFT_QUICK 119 -# define BN_F_BN_MOD_SQRT 121 -# define BN_F_BN_MONT_CTX_NEW 149 -# define BN_F_BN_MPI2BN 112 -# define BN_F_BN_NEW 113 -# define BN_F_BN_POOL_GET 147 -# define BN_F_BN_RAND 114 -# define BN_F_BN_RAND_RANGE 122 -# define BN_F_BN_RECP_CTX_NEW 150 -# define BN_F_BN_RSHIFT 146 -# define BN_F_BN_SET_WORDS 144 -# define BN_F_BN_STACK_PUSH 148 -# define BN_F_BN_USUB 115 -# define BN_F_OSSL_BN_RSA_DO_UNBLIND 151 /* * BN reason codes. @@ -92,7 +36,9 @@ int ERR_load_BN_strings(void); # define BN_R_NOT_A_SQUARE 111 # define BN_R_NOT_INITIALIZED 107 # define BN_R_NO_INVERSE 108 +# define BN_R_NO_PRIME_CANDIDATE 121 # define BN_R_NO_SOLUTION 116 +# define BN_R_NO_SUITABLE_DIGEST 120 # define BN_R_PRIVATE_KEY_TOO_LARGE 117 # define BN_R_P_IS_NOT_PRIME 112 # define BN_R_TOO_MANY_ITERATIONS 113 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffer.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffer.h index d2765766..5773b986 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffer.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffer.h @@ -1,17 +1,23 @@ /* * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BUFFER_H -# define HEADER_BUFFER_H +#ifndef OPENSSL_BUFFER_H +# define OPENSSL_BUFFER_H +# pragma once -# include -# ifndef HEADER_CRYPTO_H +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BUFFER_H +# endif + +# include +# ifndef OPENSSL_CRYPTO_H # include # endif # include @@ -24,16 +30,14 @@ extern "C" { # include # include -/* - * These names are outdated as of OpenSSL 1.1; a future release - * will move them to be deprecated. - */ -# define BUF_strdup(s) OPENSSL_strdup(s) -# define BUF_strndup(s, size) OPENSSL_strndup(s, size) -# define BUF_memdup(data, size) OPENSSL_memdup(data, size) -# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) -# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) -# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define BUF_strdup(s) OPENSSL_strdup(s) +# define BUF_strndup(s, size) OPENSSL_strndup(s, size) +# define BUF_memdup(data, size) OPENSSL_memdup(data, size) +# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) +# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) +# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) +# endif struct buf_mem_st { size_t length; /* current number of bytes */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffererr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffererr.h index 04f6ff7a..d18b1f8f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffererr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffererr.h @@ -1,31 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BUFERR_H -# define HEADER_BUFERR_H +#ifndef OPENSSL_BUFFERERR_H +# define OPENSSL_BUFFERERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BUF_strings(void); -/* - * BUF function codes. - */ -# define BUF_F_BUF_MEM_GROW 100 -# define BUF_F_BUF_MEM_GROW_CLEAN 105 -# define BUF_F_BUF_MEM_NEW 101 /* * BUF reason codes. diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/camellia.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/camellia.h index 151f3c13..88c2279e 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/camellia.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/camellia.h @@ -1,14 +1,20 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CAMELLIA_H -# define HEADER_CAMELLIA_H +#ifndef OPENSSL_CAMELLIA_H +# define OPENSSL_CAMELLIA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CAMELLIA_H +# endif # include @@ -18,8 +24,12 @@ extern "C" { #endif -# define CAMELLIA_ENCRYPT 1 -# define CAMELLIA_DECRYPT 0 +# define CAMELLIA_BLOCK_SIZE 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define CAMELLIA_ENCRYPT 1 +# define CAMELLIA_DECRYPT 0 /* * Because array size can't be a const in C, the following two are macros. @@ -28,9 +38,8 @@ extern "C" { /* This should be a hidden type, but EVP requires that the size be known */ -# define CAMELLIA_BLOCK_SIZE 16 -# define CAMELLIA_TABLE_BYTE_LEN 272 -# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) +# define CAMELLIA_TABLE_BYTE_LEN 272 +# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match * with WORD */ @@ -44,36 +53,61 @@ struct camellia_key_st { }; typedef struct camellia_key_st CAMELLIA_KEY; -int Camellia_set_key(const unsigned char *userKey, const int bits, - CAMELLIA_KEY *key); - -void Camellia_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); -void Camellia_decrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); - -void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key, const int enc); -void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, const int enc); -void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int Camellia_set_key(const unsigned char *userKey, + const int bits, + CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_encrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_decrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_ecb_encrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb128_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb1_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb8_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_ofb128_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num); +OSSL_DEPRECATEDIN_3_0 void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const CAMELLIA_KEY *key, unsigned char ivec[CAMELLIA_BLOCK_SIZE], unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], unsigned int *num); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cast.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cast.h index 2cc89ae0..0bf217be 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cast.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cast.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CAST_H -# define HEADER_CAST_H +#ifndef OPENSSL_CAST_H +# define OPENSSL_CAST_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CAST_H +# endif # include @@ -17,33 +23,45 @@ extern "C" { # endif -# define CAST_ENCRYPT 1 -# define CAST_DECRYPT 0 - -# define CAST_LONG unsigned int - # define CAST_BLOCK 8 # define CAST_KEY_LENGTH 16 +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define CAST_ENCRYPT 1 +# define CAST_DECRYPT 0 + +# define CAST_LONG unsigned int + typedef struct cast_key_st { CAST_LONG data[32]; int short_key; /* Use reduced rounds for short key */ } CAST_KEY; +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, const CAST_KEY *key, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); +OSSL_DEPRECATEDIN_3_0 void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); +OSSL_DEPRECATEDIN_3_0 void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *ks, unsigned char *iv, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *schedule, unsigned char *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *schedule, unsigned char *ivec, int *num); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmac.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmac.h index 3535a9ab..f5086183 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmac.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmac.h @@ -1,41 +1,52 @@ /* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMAC_H -# define HEADER_CMAC_H +#ifndef OPENSSL_CMAC_H +# define OPENSSL_CMAC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMAC_H +# endif # ifndef OPENSSL_NO_CMAC -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -# include +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* Opaque */ typedef struct CMAC_CTX_st CMAC_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CMAC_CTX *CMAC_CTX_new(void); +OSSL_DEPRECATEDIN_3_0 void CMAC_CTX_cleanup(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void CMAC_CTX_free(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); +OSSL_DEPRECATEDIN_3_0 int CMAC_Init(CMAC_CTX *ctx, + const void *key, size_t keylen, + const EVP_CIPHER *cipher, ENGINE *impl); +OSSL_DEPRECATEDIN_3_0 int CMAC_Update(CMAC_CTX *ctx, + const void *data, size_t dlen); +OSSL_DEPRECATEDIN_3_0 int CMAC_Final(CMAC_CTX *ctx, + unsigned char *out, size_t *poutlen); +OSSL_DEPRECATEDIN_3_0 int CMAC_resume(CMAC_CTX *ctx); +# endif -CMAC_CTX *CMAC_CTX_new(void); -void CMAC_CTX_cleanup(CMAC_CTX *ctx); -void CMAC_CTX_free(CMAC_CTX *ctx); -EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); -int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); - -int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, - const EVP_CIPHER *cipher, ENGINE *impl); -int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); -int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); -int CMAC_resume(CMAC_CTX *ctx); - -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h new file mode 100644 index 00000000..49825570 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h @@ -0,0 +1,597 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/cmp.h.in + * + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +#ifndef OPENSSL_CMP_H +# define OPENSSL_CMP_H + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include +# include +# include + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CMP_PVNO 2 + +/*- + * PKIFailureInfo ::= BIT STRING { + * -- since we can fail in more than one way! + * -- More codes may be added in the future if/when required. + * badAlg (0), + * -- unrecognized or unsupported Algorithm Identifier + * badMessageCheck (1), + * -- integrity check failed (e.g., signature did not verify) + * badRequest (2), + * -- transaction not permitted or supported + * badTime (3), + * -- messageTime was not sufficiently close to the system time, + * -- as defined by local policy + * badCertId (4), + * -- no certificate could be found matching the provided criteria + * badDataFormat (5), + * -- the data submitted has the wrong format + * wrongAuthority (6), + * -- the authority indicated in the request is different from the + * -- one creating the response token + * incorrectData (7), + * -- the requester's data is incorrect (for notary services) + * missingTimeStamp (8), + * -- when the timestamp is missing but should be there + * -- (by policy) + * badPOP (9), + * -- the proof-of-possession failed + * certRevoked (10), + * -- the certificate has already been revoked + * certConfirmed (11), + * -- the certificate has already been confirmed + * wrongIntegrity (12), + * -- invalid integrity, password based instead of signature or + * -- vice versa + * badRecipientNonce (13), + * -- invalid recipient nonce, either missing or wrong value + * timeNotAvailable (14), + * -- the TSA's time source is not available + * unacceptedPolicy (15), + * -- the requested TSA policy is not supported by the TSA. + * unacceptedExtension (16), + * -- the requested extension is not supported by the TSA. + * addInfoNotAvailable (17), + * -- the additional information requested could not be + * -- understood or is not available + * badSenderNonce (18), + * -- invalid sender nonce, either missing or wrong size + * badCertTemplate (19), + * -- invalid cert. template or missing mandatory information + * signerNotTrusted (20), + * -- signer of the message unknown or not trusted + * transactionIdInUse (21), + * -- the transaction identifier is already in use + * unsupportedVersion (22), + * -- the version of the message is not supported + * notAuthorized (23), + * -- the sender was not authorized to make the preceding + * -- request or perform the preceding action + * systemUnavail (24), + * -- the request cannot be handled due to system unavailability + * systemFailure (25), + * -- the request cannot be handled due to system failure + * duplicateCertReq (26) + * -- certificate cannot be issued because a duplicate + * -- certificate already exists + * } + */ +# define OSSL_CMP_PKIFAILUREINFO_badAlg 0 +# define OSSL_CMP_PKIFAILUREINFO_badMessageCheck 1 +# define OSSL_CMP_PKIFAILUREINFO_badRequest 2 +# define OSSL_CMP_PKIFAILUREINFO_badTime 3 +# define OSSL_CMP_PKIFAILUREINFO_badCertId 4 +# define OSSL_CMP_PKIFAILUREINFO_badDataFormat 5 +# define OSSL_CMP_PKIFAILUREINFO_wrongAuthority 6 +# define OSSL_CMP_PKIFAILUREINFO_incorrectData 7 +# define OSSL_CMP_PKIFAILUREINFO_missingTimeStamp 8 +# define OSSL_CMP_PKIFAILUREINFO_badPOP 9 +# define OSSL_CMP_PKIFAILUREINFO_certRevoked 10 +# define OSSL_CMP_PKIFAILUREINFO_certConfirmed 11 +# define OSSL_CMP_PKIFAILUREINFO_wrongIntegrity 12 +# define OSSL_CMP_PKIFAILUREINFO_badRecipientNonce 13 +# define OSSL_CMP_PKIFAILUREINFO_timeNotAvailable 14 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedPolicy 15 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedExtension 16 +# define OSSL_CMP_PKIFAILUREINFO_addInfoNotAvailable 17 +# define OSSL_CMP_PKIFAILUREINFO_badSenderNonce 18 +# define OSSL_CMP_PKIFAILUREINFO_badCertTemplate 19 +# define OSSL_CMP_PKIFAILUREINFO_signerNotTrusted 20 +# define OSSL_CMP_PKIFAILUREINFO_transactionIdInUse 21 +# define OSSL_CMP_PKIFAILUREINFO_unsupportedVersion 22 +# define OSSL_CMP_PKIFAILUREINFO_notAuthorized 23 +# define OSSL_CMP_PKIFAILUREINFO_systemUnavail 24 +# define OSSL_CMP_PKIFAILUREINFO_systemFailure 25 +# define OSSL_CMP_PKIFAILUREINFO_duplicateCertReq 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN \ + ((1 << (OSSL_CMP_PKIFAILUREINFO_MAX + 1)) - 1) +# if OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN > INT_MAX +# error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int +# endif + +typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; + +# define OSSL_CMP_CTX_FAILINFO_badAlg (1 << 0) +# define OSSL_CMP_CTX_FAILINFO_badMessageCheck (1 << 1) +# define OSSL_CMP_CTX_FAILINFO_badRequest (1 << 2) +# define OSSL_CMP_CTX_FAILINFO_badTime (1 << 3) +# define OSSL_CMP_CTX_FAILINFO_badCertId (1 << 4) +# define OSSL_CMP_CTX_FAILINFO_badDataFormat (1 << 5) +# define OSSL_CMP_CTX_FAILINFO_wrongAuthority (1 << 6) +# define OSSL_CMP_CTX_FAILINFO_incorrectData (1 << 7) +# define OSSL_CMP_CTX_FAILINFO_missingTimeStamp (1 << 8) +# define OSSL_CMP_CTX_FAILINFO_badPOP (1 << 9) +# define OSSL_CMP_CTX_FAILINFO_certRevoked (1 << 10) +# define OSSL_CMP_CTX_FAILINFO_certConfirmed (1 << 11) +# define OSSL_CMP_CTX_FAILINFO_wrongIntegrity (1 << 12) +# define OSSL_CMP_CTX_FAILINFO_badRecipientNonce (1 << 13) +# define OSSL_CMP_CTX_FAILINFO_timeNotAvailable (1 << 14) +# define OSSL_CMP_CTX_FAILINFO_unacceptedPolicy (1 << 15) +# define OSSL_CMP_CTX_FAILINFO_unacceptedExtension (1 << 16) +# define OSSL_CMP_CTX_FAILINFO_addInfoNotAvailable (1 << 17) +# define OSSL_CMP_CTX_FAILINFO_badSenderNonce (1 << 18) +# define OSSL_CMP_CTX_FAILINFO_badCertTemplate (1 << 19) +# define OSSL_CMP_CTX_FAILINFO_signerNotTrusted (1 << 20) +# define OSSL_CMP_CTX_FAILINFO_transactionIdInUse (1 << 21) +# define OSSL_CMP_CTX_FAILINFO_unsupportedVersion (1 << 22) +# define OSSL_CMP_CTX_FAILINFO_notAuthorized (1 << 23) +# define OSSL_CMP_CTX_FAILINFO_systemUnavail (1 << 24) +# define OSSL_CMP_CTX_FAILINFO_systemFailure (1 << 25) +# define OSSL_CMP_CTX_FAILINFO_duplicateCertReq (1 << 26) + +/*- + * PKIStatus ::= INTEGER { + * accepted (0), + * -- you got exactly what you asked for + * grantedWithMods (1), + * -- you got something like what you asked for; the + * -- requester is responsible for ascertaining the differences + * rejection (2), + * -- you don't get it, more information elsewhere in the message + * waiting (3), + * -- the request body part has not yet been processed; expect to + * -- hear more later (note: proper handling of this status + * -- response MAY use the polling req/rep PKIMessages specified + * -- in Section 5.3.22; alternatively, polling in the underlying + * -- transport layer MAY have some utility in this regard) + * revocationWarning (4), + * -- this message contains a warning that a revocation is + * -- imminent + * revocationNotification (5), + * -- notification that a revocation has occurred + * keyUpdateWarning (6) + * -- update already done for the oldCertId specified in + * -- CertReqMsg + * } + */ +# define OSSL_CMP_PKISTATUS_request -3 +# define OSSL_CMP_PKISTATUS_trans -2 +# define OSSL_CMP_PKISTATUS_unspecified -1 +# define OSSL_CMP_PKISTATUS_accepted 0 +# define OSSL_CMP_PKISTATUS_grantedWithMods 1 +# define OSSL_CMP_PKISTATUS_rejection 2 +# define OSSL_CMP_PKISTATUS_waiting 3 +# define OSSL_CMP_PKISTATUS_revocationWarning 4 +# define OSSL_CMP_PKISTATUS_revocationNotification 5 +# define OSSL_CMP_PKISTATUS_keyUpdateWarning 6 + +typedef ASN1_INTEGER OSSL_CMP_PKISTATUS; +DECLARE_ASN1_ITEM(OSSL_CMP_PKISTATUS) + +# define OSSL_CMP_CERTORENCCERT_CERTIFICATE 0 +# define OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT 1 + +/* data type declarations */ +typedef struct ossl_cmp_ctx_st OSSL_CMP_CTX; +typedef struct ossl_cmp_pkiheader_st OSSL_CMP_PKIHEADER; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER) +typedef struct ossl_cmp_msg_st OSSL_CMP_MSG; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_MSG) +DECLARE_ASN1_ENCODE_FUNCTIONS(OSSL_CMP_MSG, OSSL_CMP_MSG, OSSL_CMP_MSG) +typedef struct ossl_cmp_certstatus_st OSSL_CMP_CERTSTATUS; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS) +#define sk_OSSL_CMP_CERTSTATUS_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_value(sk, idx) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTSTATUS_new(cmp) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTSTATUS_new_null() ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTSTATUS_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTSTATUS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTSTATUS_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_delete(sk, i) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTSTATUS_delete_ptr(sk, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))) +#define sk_OSSL_CMP_CERTSTATUS_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_pop(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_shift(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk),ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTSTATUS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTSTATUS_set(sk, idx, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))) +#define sk_OSSL_CMP_CERTSTATUS_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), pnum) +#define sk_OSSL_CMP_CERTSTATUS_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_dup(sk) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTSTATUS_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTSTATUS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp))) + +typedef struct ossl_cmp_itav_st OSSL_CMP_ITAV; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_ITAV, OSSL_CMP_ITAV, OSSL_CMP_ITAV) +#define sk_OSSL_CMP_ITAV_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_value(sk, idx) ((OSSL_CMP_ITAV *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), (idx))) +#define sk_OSSL_CMP_ITAV_new(cmp) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp))) +#define sk_OSSL_CMP_ITAV_new_null() ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_ITAV_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_ITAV_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (n)) +#define sk_OSSL_CMP_ITAV_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_delete(sk, i) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (i))) +#define sk_OSSL_CMP_ITAV_delete_ptr(sk, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr))) +#define sk_OSSL_CMP_ITAV_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_pop(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_shift(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk),ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc)) +#define sk_OSSL_CMP_ITAV_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), (idx)) +#define sk_OSSL_CMP_ITAV_set(sk, idx, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_set(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (idx), ossl_check_OSSL_CMP_ITAV_type(ptr))) +#define sk_OSSL_CMP_ITAV_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), pnum) +#define sk_OSSL_CMP_ITAV_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_dup(sk) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc))) +#define sk_OSSL_CMP_ITAV_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_ITAV_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp))) + +typedef struct ossl_cmp_revrepcontent_st OSSL_CMP_REVREPCONTENT; +typedef struct ossl_cmp_pkisi_st OSSL_CMP_PKISI; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKISI) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_PKISI, OSSL_CMP_PKISI, OSSL_CMP_PKISI) +#define sk_OSSL_CMP_PKISI_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_value(sk, idx) ((OSSL_CMP_PKISI *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), (idx))) +#define sk_OSSL_CMP_PKISI_new(cmp) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp))) +#define sk_OSSL_CMP_PKISI_new_null() ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_PKISI_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_PKISI_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (n)) +#define sk_OSSL_CMP_PKISI_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_delete(sk, i) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (i))) +#define sk_OSSL_CMP_PKISI_delete_ptr(sk, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr))) +#define sk_OSSL_CMP_PKISI_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_pop(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_shift(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk),ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc)) +#define sk_OSSL_CMP_PKISI_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), (idx)) +#define sk_OSSL_CMP_PKISI_set(sk, idx, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_set(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (idx), ossl_check_OSSL_CMP_PKISI_type(ptr))) +#define sk_OSSL_CMP_PKISI_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), pnum) +#define sk_OSSL_CMP_PKISI_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_dup(sk) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc))) +#define sk_OSSL_CMP_PKISI_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_PKISI_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp))) + +typedef struct ossl_cmp_certrepmessage_st OSSL_CMP_CERTREPMESSAGE; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE) +#define sk_OSSL_CMP_CERTREPMESSAGE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_value(sk, idx) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTREPMESSAGE_new(cmp) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_null() ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTREPMESSAGE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTREPMESSAGE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_delete(sk, i) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTREPMESSAGE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))) +#define sk_OSSL_CMP_CERTREPMESSAGE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_pop(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_shift(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk),ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTREPMESSAGE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTREPMESSAGE_set(sk, idx, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))) +#define sk_OSSL_CMP_CERTREPMESSAGE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), pnum) +#define sk_OSSL_CMP_CERTREPMESSAGE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_dup(sk) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTREPMESSAGE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTREPMESSAGE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp))) + +typedef struct ossl_cmp_pollrep_st OSSL_CMP_POLLREP; +typedef STACK_OF(OSSL_CMP_POLLREP) OSSL_CMP_POLLREPCONTENT; +typedef struct ossl_cmp_certresponse_st OSSL_CMP_CERTRESPONSE; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE) +#define sk_OSSL_CMP_CERTRESPONSE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_value(sk, idx) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTRESPONSE_new(cmp) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTRESPONSE_new_null() ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTRESPONSE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTRESPONSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTRESPONSE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_delete(sk, i) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTRESPONSE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))) +#define sk_OSSL_CMP_CERTRESPONSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_pop(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_shift(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk),ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTRESPONSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTRESPONSE_set(sk, idx, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))) +#define sk_OSSL_CMP_CERTRESPONSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), pnum) +#define sk_OSSL_CMP_CERTRESPONSE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_dup(sk) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTRESPONSE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTRESPONSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp))) + +typedef STACK_OF(ASN1_UTF8STRING) OSSL_CMP_PKIFREETEXT; + +/* + * function DECLARATIONS + */ + +/* from cmp_asn.c */ +OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value); +void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type, + ASN1_TYPE *value); +ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav); +ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav); +int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **itav_sk_p, + OSSL_CMP_ITAV *itav); +void OSSL_CMP_ITAV_free(OSSL_CMP_ITAV *itav); +void OSSL_CMP_MSG_free(OSSL_CMP_MSG *msg); + +/* from cmp_ctx.c */ +OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx); +/* CMP general options: */ +# define OSSL_CMP_OPT_LOG_VERBOSITY 0 +/* CMP transfer options: */ +# define OSSL_CMP_OPT_KEEP_ALIVE 10 +# define OSSL_CMP_OPT_MSG_TIMEOUT 11 +# define OSSL_CMP_OPT_TOTAL_TIMEOUT 12 +/* CMP request options: */ +# define OSSL_CMP_OPT_VALIDITY_DAYS 20 +# define OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT 21 +# define OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL 22 +# define OSSL_CMP_OPT_POLICIES_CRITICAL 23 +# define OSSL_CMP_OPT_POPO_METHOD 24 +# define OSSL_CMP_OPT_IMPLICIT_CONFIRM 25 +# define OSSL_CMP_OPT_DISABLE_CONFIRM 26 +# define OSSL_CMP_OPT_REVOCATION_REASON 27 +/* CMP protection options: */ +# define OSSL_CMP_OPT_UNPROTECTED_SEND 30 +# define OSSL_CMP_OPT_UNPROTECTED_ERRORS 31 +# define OSSL_CMP_OPT_OWF_ALGNID 32 +# define OSSL_CMP_OPT_MAC_ALGNID 33 +# define OSSL_CMP_OPT_DIGEST_ALGNID 34 +# define OSSL_CMP_OPT_IGNORE_KEYUSAGE 35 +# define OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR 36 +int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val); +int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt); +/* CMP-specific callback for logging and outputting the error queue: */ +int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb); +# define OSSL_CMP_CTX_set_log_verbosity(ctx, level) \ + OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_LOG_VERBOSITY, level) +void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx); +/* message transfer: */ +int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path); +int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address); +int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port); +int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name); +int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names); +int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, OSSL_HTTP_bio_cb_t cb); +int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx); +typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t) (OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); +int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_transfer_cb_t cb); +int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); +/* server authentication: */ +int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store); +X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs); +STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx); +/* client authentication: */ +int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted, + STACK_OF(X509) *candidates); +int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey); +int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx, + const unsigned char *ref, int len); +int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx, + const unsigned char *sec, int len); +/* CMP message header and extra certificates: */ +int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, + STACK_OF(X509) *extraCertsOut); +/* certificate template: */ +int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey); +EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv); +int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx, + const GENERAL_NAME *name); +int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts); +int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo); +int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr); +/* misc body contents: */ +int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +/* certificate confirmation: */ +typedef int (*OSSL_CMP_certConf_cb_t) (OSSL_CMP_CTX *ctx, X509 *cert, + int fail_info, const char **txt); +int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info, + const char **text); +int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb); +int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx); +/* result fetching: */ +int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx); +OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx); +# define OSSL_CMP_PKISI_BUFLEN 1024 +X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *id); +int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *nonce); + +/* from cmp_status.c */ +char *OSSL_CMP_CTX_snprint_PKIStatus(const OSSL_CMP_CTX *ctx, char *buf, + size_t bufsize); +char *OSSL_CMP_snprint_PKIStatusInfo(const OSSL_CMP_PKISI *statusInfo, + char *buf, size_t bufsize); +OSSL_CMP_PKISI * +OSSL_CMP_STATUSINFO_new(int status, int fail_info, const char *text); + +/* from cmp_hdr.c */ +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_transactionID(const + OSSL_CMP_PKIHEADER *hdr); +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_recipNonce(const OSSL_CMP_PKIHEADER *hdr); + +/* from cmp_msg.c */ +OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_recipNonce(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid); +OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg); +OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg); +int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg); + +/* from cmp_vfy.c */ +int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg); +int OSSL_CMP_validate_cert_path(const OSSL_CMP_CTX *ctx, + X509_STORE *trusted_store, X509 *cert); + +/* from cmp_http.c */ +OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); + +/* from cmp_server.c */ +typedef struct ossl_cmp_srv_ctx_st OSSL_CMP_SRV_CTX; +OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_MSG * OSSL_CMP_CTX_server_perform(OSSL_CMP_CTX *client_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_SRV_CTX *OSSL_CMP_SRV_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_SRV_CTX_free(OSSL_CMP_SRV_CTX *srv_ctx); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_cert_request_cb_t) + (OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *req, int certReqId, + const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr, + X509 **certOut, STACK_OF(X509) **chainOut, STACK_OF(X509) **caPubs); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_rr_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +typedef int (*OSSL_CMP_SRV_genm_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const STACK_OF(OSSL_CMP_ITAV) *in, + STACK_OF(OSSL_CMP_ITAV) **out); +typedef void (*OSSL_CMP_SRV_error_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const OSSL_CMP_PKISI *statusInfo, + const ASN1_INTEGER *errorCode, + const OSSL_CMP_PKIFREETEXT *errDetails); +typedef int (*OSSL_CMP_SRV_certConf_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + int certReqId, + const ASN1_OCTET_STRING *certHash, + const OSSL_CMP_PKISI *si); +typedef int (*OSSL_CMP_SRV_pollReq_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, int certReqId, + OSSL_CMP_MSG **certReq, + int64_t *check_after); +int OSSL_CMP_SRV_CTX_init(OSSL_CMP_SRV_CTX *srv_ctx, void *custom_ctx, + OSSL_CMP_SRV_cert_request_cb_t process_cert_request, + OSSL_CMP_SRV_rr_cb_t process_rr, + OSSL_CMP_SRV_genm_cb_t process_genm, + OSSL_CMP_SRV_error_cb_t process_error, + OSSL_CMP_SRV_certConf_cb_t process_certConf, + OSSL_CMP_SRV_pollReq_cb_t process_pollReq); +OSSL_CMP_CTX *OSSL_CMP_SRV_CTX_get0_cmp_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +void *OSSL_CMP_SRV_CTX_get0_custom_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +int OSSL_CMP_SRV_CTX_set_send_unprotected_errors(OSSL_CMP_SRV_CTX *srv_ctx, + int val); +int OSSL_CMP_SRV_CTX_set_accept_unprotected(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_accept_raverified(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(OSSL_CMP_SRV_CTX *srv_ctx, + int val); + +/* from cmp_client.c */ +X509 *OSSL_CMP_exec_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm); +# define OSSL_CMP_IR 0 +# define OSSL_CMP_CR 2 +# define OSSL_CMP_P10CR 4 +# define OSSL_CMP_KUR 7 +# define OSSL_CMP_exec_IR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_IR, NULL) +# define OSSL_CMP_exec_CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_CR, NULL) +# define OSSL_CMP_exec_P10CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_P10CR, NULL) +# define OSSL_CMP_exec_KUR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_KUR, NULL) +int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm, int *checkAfter); +int OSSL_CMP_exec_RR_ses(OSSL_CMP_CTX *ctx); +STACK_OF(OSSL_CMP_ITAV) *OSSL_CMP_exec_GENM_ses(OSSL_CMP_CTX *ctx); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_H) */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h.in new file mode 100644 index 00000000..fb5ae671 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h.in @@ -0,0 +1,478 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CMP_H +# define OPENSSL_CMP_H + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include +# include +# include + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CMP_PVNO 2 + +/*- + * PKIFailureInfo ::= BIT STRING { + * -- since we can fail in more than one way! + * -- More codes may be added in the future if/when required. + * badAlg (0), + * -- unrecognized or unsupported Algorithm Identifier + * badMessageCheck (1), + * -- integrity check failed (e.g., signature did not verify) + * badRequest (2), + * -- transaction not permitted or supported + * badTime (3), + * -- messageTime was not sufficiently close to the system time, + * -- as defined by local policy + * badCertId (4), + * -- no certificate could be found matching the provided criteria + * badDataFormat (5), + * -- the data submitted has the wrong format + * wrongAuthority (6), + * -- the authority indicated in the request is different from the + * -- one creating the response token + * incorrectData (7), + * -- the requester's data is incorrect (for notary services) + * missingTimeStamp (8), + * -- when the timestamp is missing but should be there + * -- (by policy) + * badPOP (9), + * -- the proof-of-possession failed + * certRevoked (10), + * -- the certificate has already been revoked + * certConfirmed (11), + * -- the certificate has already been confirmed + * wrongIntegrity (12), + * -- invalid integrity, password based instead of signature or + * -- vice versa + * badRecipientNonce (13), + * -- invalid recipient nonce, either missing or wrong value + * timeNotAvailable (14), + * -- the TSA's time source is not available + * unacceptedPolicy (15), + * -- the requested TSA policy is not supported by the TSA. + * unacceptedExtension (16), + * -- the requested extension is not supported by the TSA. + * addInfoNotAvailable (17), + * -- the additional information requested could not be + * -- understood or is not available + * badSenderNonce (18), + * -- invalid sender nonce, either missing or wrong size + * badCertTemplate (19), + * -- invalid cert. template or missing mandatory information + * signerNotTrusted (20), + * -- signer of the message unknown or not trusted + * transactionIdInUse (21), + * -- the transaction identifier is already in use + * unsupportedVersion (22), + * -- the version of the message is not supported + * notAuthorized (23), + * -- the sender was not authorized to make the preceding + * -- request or perform the preceding action + * systemUnavail (24), + * -- the request cannot be handled due to system unavailability + * systemFailure (25), + * -- the request cannot be handled due to system failure + * duplicateCertReq (26) + * -- certificate cannot be issued because a duplicate + * -- certificate already exists + * } + */ +# define OSSL_CMP_PKIFAILUREINFO_badAlg 0 +# define OSSL_CMP_PKIFAILUREINFO_badMessageCheck 1 +# define OSSL_CMP_PKIFAILUREINFO_badRequest 2 +# define OSSL_CMP_PKIFAILUREINFO_badTime 3 +# define OSSL_CMP_PKIFAILUREINFO_badCertId 4 +# define OSSL_CMP_PKIFAILUREINFO_badDataFormat 5 +# define OSSL_CMP_PKIFAILUREINFO_wrongAuthority 6 +# define OSSL_CMP_PKIFAILUREINFO_incorrectData 7 +# define OSSL_CMP_PKIFAILUREINFO_missingTimeStamp 8 +# define OSSL_CMP_PKIFAILUREINFO_badPOP 9 +# define OSSL_CMP_PKIFAILUREINFO_certRevoked 10 +# define OSSL_CMP_PKIFAILUREINFO_certConfirmed 11 +# define OSSL_CMP_PKIFAILUREINFO_wrongIntegrity 12 +# define OSSL_CMP_PKIFAILUREINFO_badRecipientNonce 13 +# define OSSL_CMP_PKIFAILUREINFO_timeNotAvailable 14 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedPolicy 15 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedExtension 16 +# define OSSL_CMP_PKIFAILUREINFO_addInfoNotAvailable 17 +# define OSSL_CMP_PKIFAILUREINFO_badSenderNonce 18 +# define OSSL_CMP_PKIFAILUREINFO_badCertTemplate 19 +# define OSSL_CMP_PKIFAILUREINFO_signerNotTrusted 20 +# define OSSL_CMP_PKIFAILUREINFO_transactionIdInUse 21 +# define OSSL_CMP_PKIFAILUREINFO_unsupportedVersion 22 +# define OSSL_CMP_PKIFAILUREINFO_notAuthorized 23 +# define OSSL_CMP_PKIFAILUREINFO_systemUnavail 24 +# define OSSL_CMP_PKIFAILUREINFO_systemFailure 25 +# define OSSL_CMP_PKIFAILUREINFO_duplicateCertReq 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN \ + ((1 << (OSSL_CMP_PKIFAILUREINFO_MAX + 1)) - 1) +# if OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN > INT_MAX +# error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int +# endif + +typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; + +# define OSSL_CMP_CTX_FAILINFO_badAlg (1 << 0) +# define OSSL_CMP_CTX_FAILINFO_badMessageCheck (1 << 1) +# define OSSL_CMP_CTX_FAILINFO_badRequest (1 << 2) +# define OSSL_CMP_CTX_FAILINFO_badTime (1 << 3) +# define OSSL_CMP_CTX_FAILINFO_badCertId (1 << 4) +# define OSSL_CMP_CTX_FAILINFO_badDataFormat (1 << 5) +# define OSSL_CMP_CTX_FAILINFO_wrongAuthority (1 << 6) +# define OSSL_CMP_CTX_FAILINFO_incorrectData (1 << 7) +# define OSSL_CMP_CTX_FAILINFO_missingTimeStamp (1 << 8) +# define OSSL_CMP_CTX_FAILINFO_badPOP (1 << 9) +# define OSSL_CMP_CTX_FAILINFO_certRevoked (1 << 10) +# define OSSL_CMP_CTX_FAILINFO_certConfirmed (1 << 11) +# define OSSL_CMP_CTX_FAILINFO_wrongIntegrity (1 << 12) +# define OSSL_CMP_CTX_FAILINFO_badRecipientNonce (1 << 13) +# define OSSL_CMP_CTX_FAILINFO_timeNotAvailable (1 << 14) +# define OSSL_CMP_CTX_FAILINFO_unacceptedPolicy (1 << 15) +# define OSSL_CMP_CTX_FAILINFO_unacceptedExtension (1 << 16) +# define OSSL_CMP_CTX_FAILINFO_addInfoNotAvailable (1 << 17) +# define OSSL_CMP_CTX_FAILINFO_badSenderNonce (1 << 18) +# define OSSL_CMP_CTX_FAILINFO_badCertTemplate (1 << 19) +# define OSSL_CMP_CTX_FAILINFO_signerNotTrusted (1 << 20) +# define OSSL_CMP_CTX_FAILINFO_transactionIdInUse (1 << 21) +# define OSSL_CMP_CTX_FAILINFO_unsupportedVersion (1 << 22) +# define OSSL_CMP_CTX_FAILINFO_notAuthorized (1 << 23) +# define OSSL_CMP_CTX_FAILINFO_systemUnavail (1 << 24) +# define OSSL_CMP_CTX_FAILINFO_systemFailure (1 << 25) +# define OSSL_CMP_CTX_FAILINFO_duplicateCertReq (1 << 26) + +/*- + * PKIStatus ::= INTEGER { + * accepted (0), + * -- you got exactly what you asked for + * grantedWithMods (1), + * -- you got something like what you asked for; the + * -- requester is responsible for ascertaining the differences + * rejection (2), + * -- you don't get it, more information elsewhere in the message + * waiting (3), + * -- the request body part has not yet been processed; expect to + * -- hear more later (note: proper handling of this status + * -- response MAY use the polling req/rep PKIMessages specified + * -- in Section 5.3.22; alternatively, polling in the underlying + * -- transport layer MAY have some utility in this regard) + * revocationWarning (4), + * -- this message contains a warning that a revocation is + * -- imminent + * revocationNotification (5), + * -- notification that a revocation has occurred + * keyUpdateWarning (6) + * -- update already done for the oldCertId specified in + * -- CertReqMsg + * } + */ +# define OSSL_CMP_PKISTATUS_request -3 +# define OSSL_CMP_PKISTATUS_trans -2 +# define OSSL_CMP_PKISTATUS_unspecified -1 +# define OSSL_CMP_PKISTATUS_accepted 0 +# define OSSL_CMP_PKISTATUS_grantedWithMods 1 +# define OSSL_CMP_PKISTATUS_rejection 2 +# define OSSL_CMP_PKISTATUS_waiting 3 +# define OSSL_CMP_PKISTATUS_revocationWarning 4 +# define OSSL_CMP_PKISTATUS_revocationNotification 5 +# define OSSL_CMP_PKISTATUS_keyUpdateWarning 6 + +typedef ASN1_INTEGER OSSL_CMP_PKISTATUS; +DECLARE_ASN1_ITEM(OSSL_CMP_PKISTATUS) + +# define OSSL_CMP_CERTORENCCERT_CERTIFICATE 0 +# define OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT 1 + +/* data type declarations */ +typedef struct ossl_cmp_ctx_st OSSL_CMP_CTX; +typedef struct ossl_cmp_pkiheader_st OSSL_CMP_PKIHEADER; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER) +typedef struct ossl_cmp_msg_st OSSL_CMP_MSG; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_MSG) +DECLARE_ASN1_ENCODE_FUNCTIONS(OSSL_CMP_MSG, OSSL_CMP_MSG, OSSL_CMP_MSG) +typedef struct ossl_cmp_certstatus_st OSSL_CMP_CERTSTATUS; +{- + generate_stack_macros("OSSL_CMP_CERTSTATUS"); +-} +typedef struct ossl_cmp_itav_st OSSL_CMP_ITAV; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV) +{- + generate_stack_macros("OSSL_CMP_ITAV"); +-} +typedef struct ossl_cmp_revrepcontent_st OSSL_CMP_REVREPCONTENT; +typedef struct ossl_cmp_pkisi_st OSSL_CMP_PKISI; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKISI) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI) +{- + generate_stack_macros("OSSL_CMP_PKISI"); +-} +typedef struct ossl_cmp_certrepmessage_st OSSL_CMP_CERTREPMESSAGE; +{- + generate_stack_macros("OSSL_CMP_CERTREPMESSAGE"); +-} +typedef struct ossl_cmp_pollrep_st OSSL_CMP_POLLREP; +typedef STACK_OF(OSSL_CMP_POLLREP) OSSL_CMP_POLLREPCONTENT; +typedef struct ossl_cmp_certresponse_st OSSL_CMP_CERTRESPONSE; +{- + generate_stack_macros("OSSL_CMP_CERTRESPONSE"); +-} +typedef STACK_OF(ASN1_UTF8STRING) OSSL_CMP_PKIFREETEXT; + +/* + * function DECLARATIONS + */ + +/* from cmp_asn.c */ +OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value); +void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type, + ASN1_TYPE *value); +ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav); +ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav); +int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **itav_sk_p, + OSSL_CMP_ITAV *itav); +void OSSL_CMP_ITAV_free(OSSL_CMP_ITAV *itav); +void OSSL_CMP_MSG_free(OSSL_CMP_MSG *msg); + +/* from cmp_ctx.c */ +OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx); +/* CMP general options: */ +# define OSSL_CMP_OPT_LOG_VERBOSITY 0 +/* CMP transfer options: */ +# define OSSL_CMP_OPT_KEEP_ALIVE 10 +# define OSSL_CMP_OPT_MSG_TIMEOUT 11 +# define OSSL_CMP_OPT_TOTAL_TIMEOUT 12 +/* CMP request options: */ +# define OSSL_CMP_OPT_VALIDITY_DAYS 20 +# define OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT 21 +# define OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL 22 +# define OSSL_CMP_OPT_POLICIES_CRITICAL 23 +# define OSSL_CMP_OPT_POPO_METHOD 24 +# define OSSL_CMP_OPT_IMPLICIT_CONFIRM 25 +# define OSSL_CMP_OPT_DISABLE_CONFIRM 26 +# define OSSL_CMP_OPT_REVOCATION_REASON 27 +/* CMP protection options: */ +# define OSSL_CMP_OPT_UNPROTECTED_SEND 30 +# define OSSL_CMP_OPT_UNPROTECTED_ERRORS 31 +# define OSSL_CMP_OPT_OWF_ALGNID 32 +# define OSSL_CMP_OPT_MAC_ALGNID 33 +# define OSSL_CMP_OPT_DIGEST_ALGNID 34 +# define OSSL_CMP_OPT_IGNORE_KEYUSAGE 35 +# define OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR 36 +int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val); +int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt); +/* CMP-specific callback for logging and outputting the error queue: */ +int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb); +# define OSSL_CMP_CTX_set_log_verbosity(ctx, level) \ + OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_LOG_VERBOSITY, level) +void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx); +/* message transfer: */ +int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path); +int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address); +int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port); +int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name); +int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names); +int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, OSSL_HTTP_bio_cb_t cb); +int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx); +typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t) (OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); +int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_transfer_cb_t cb); +int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); +/* server authentication: */ +int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store); +X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs); +STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx); +/* client authentication: */ +int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted, + STACK_OF(X509) *candidates); +int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey); +int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx, + const unsigned char *ref, int len); +int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx, + const unsigned char *sec, int len); +/* CMP message header and extra certificates: */ +int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, + STACK_OF(X509) *extraCertsOut); +/* certificate template: */ +int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey); +EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv); +int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx, + const GENERAL_NAME *name); +int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts); +int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo); +int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr); +/* misc body contents: */ +int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +/* certificate confirmation: */ +typedef int (*OSSL_CMP_certConf_cb_t) (OSSL_CMP_CTX *ctx, X509 *cert, + int fail_info, const char **txt); +int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info, + const char **text); +int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb); +int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx); +/* result fetching: */ +int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx); +OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx); +# define OSSL_CMP_PKISI_BUFLEN 1024 +X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *id); +int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *nonce); + +/* from cmp_status.c */ +char *OSSL_CMP_CTX_snprint_PKIStatus(const OSSL_CMP_CTX *ctx, char *buf, + size_t bufsize); +char *OSSL_CMP_snprint_PKIStatusInfo(const OSSL_CMP_PKISI *statusInfo, + char *buf, size_t bufsize); +OSSL_CMP_PKISI * +OSSL_CMP_STATUSINFO_new(int status, int fail_info, const char *text); + +/* from cmp_hdr.c */ +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_transactionID(const + OSSL_CMP_PKIHEADER *hdr); +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_recipNonce(const OSSL_CMP_PKIHEADER *hdr); + +/* from cmp_msg.c */ +OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_recipNonce(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid); +OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg); +OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg); +int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg); + +/* from cmp_vfy.c */ +int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg); +int OSSL_CMP_validate_cert_path(const OSSL_CMP_CTX *ctx, + X509_STORE *trusted_store, X509 *cert); + +/* from cmp_http.c */ +OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); + +/* from cmp_server.c */ +typedef struct ossl_cmp_srv_ctx_st OSSL_CMP_SRV_CTX; +OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_MSG * OSSL_CMP_CTX_server_perform(OSSL_CMP_CTX *client_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_SRV_CTX *OSSL_CMP_SRV_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_SRV_CTX_free(OSSL_CMP_SRV_CTX *srv_ctx); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_cert_request_cb_t) + (OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *req, int certReqId, + const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr, + X509 **certOut, STACK_OF(X509) **chainOut, STACK_OF(X509) **caPubs); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_rr_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +typedef int (*OSSL_CMP_SRV_genm_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const STACK_OF(OSSL_CMP_ITAV) *in, + STACK_OF(OSSL_CMP_ITAV) **out); +typedef void (*OSSL_CMP_SRV_error_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const OSSL_CMP_PKISI *statusInfo, + const ASN1_INTEGER *errorCode, + const OSSL_CMP_PKIFREETEXT *errDetails); +typedef int (*OSSL_CMP_SRV_certConf_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + int certReqId, + const ASN1_OCTET_STRING *certHash, + const OSSL_CMP_PKISI *si); +typedef int (*OSSL_CMP_SRV_pollReq_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, int certReqId, + OSSL_CMP_MSG **certReq, + int64_t *check_after); +int OSSL_CMP_SRV_CTX_init(OSSL_CMP_SRV_CTX *srv_ctx, void *custom_ctx, + OSSL_CMP_SRV_cert_request_cb_t process_cert_request, + OSSL_CMP_SRV_rr_cb_t process_rr, + OSSL_CMP_SRV_genm_cb_t process_genm, + OSSL_CMP_SRV_error_cb_t process_error, + OSSL_CMP_SRV_certConf_cb_t process_certConf, + OSSL_CMP_SRV_pollReq_cb_t process_pollReq); +OSSL_CMP_CTX *OSSL_CMP_SRV_CTX_get0_cmp_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +void *OSSL_CMP_SRV_CTX_get0_custom_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +int OSSL_CMP_SRV_CTX_set_send_unprotected_errors(OSSL_CMP_SRV_CTX *srv_ctx, + int val); +int OSSL_CMP_SRV_CTX_set_accept_unprotected(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_accept_raverified(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(OSSL_CMP_SRV_CTX *srv_ctx, + int val); + +/* from cmp_client.c */ +X509 *OSSL_CMP_exec_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm); +# define OSSL_CMP_IR 0 +# define OSSL_CMP_CR 2 +# define OSSL_CMP_P10CR 4 +# define OSSL_CMP_KUR 7 +# define OSSL_CMP_exec_IR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_IR, NULL) +# define OSSL_CMP_exec_CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_CR, NULL) +# define OSSL_CMP_exec_P10CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_P10CR, NULL) +# define OSSL_CMP_exec_KUR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_KUR, NULL) +int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm, int *checkAfter); +int OSSL_CMP_exec_RR_ses(OSSL_CMP_CTX *ctx); +STACK_OF(OSSL_CMP_ITAV) *OSSL_CMP_exec_GENM_ses(OSSL_CMP_CTX *ctx); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_H) */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp_util.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp_util.h new file mode 100644 index 00000000..9a168922 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp_util.h @@ -0,0 +1,56 @@ +/* + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CMP_UTIL_H +# define OPENSSL_CMP_UTIL_H +# pragma once + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int OSSL_CMP_log_open(void); +void OSSL_CMP_log_close(void); +# define OSSL_CMP_LOG_PREFIX "CMP " + +/* + * generalized logging/error callback mirroring the severity levels of syslog.h + */ +typedef int OSSL_CMP_severity; +# define OSSL_CMP_LOG_EMERG 0 +# define OSSL_CMP_LOG_ALERT 1 +# define OSSL_CMP_LOG_CRIT 2 +# define OSSL_CMP_LOG_ERR 3 +# define OSSL_CMP_LOG_WARNING 4 +# define OSSL_CMP_LOG_NOTICE 5 +# define OSSL_CMP_LOG_INFO 6 +# define OSSL_CMP_LOG_DEBUG 7 +# define OSSL_CMP_LOG_TRACE 8 +# define OSSL_CMP_LOG_MAX OSSL_CMP_LOG_TRACE +typedef int (*OSSL_CMP_log_cb_t)(const char *func, const char *file, int line, + OSSL_CMP_severity level, const char *msg); + +int OSSL_CMP_print_to_bio(BIO *bio, const char *component, const char *file, + int line, OSSL_CMP_severity level, const char *msg); +/* use of the logging callback for outputting error queue */ +void OSSL_CMP_print_errors_cb(OSSL_CMP_log_cb_t log_fn); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_UTIL_H) */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmperr.h new file mode 100644 index 00000000..49fd5e39 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmperr.h @@ -0,0 +1,116 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CMPERR_H +# define OPENSSL_CMPERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CMP + + +/* + * CMP reason codes. + */ +# define CMP_R_ALGORITHM_NOT_SUPPORTED 139 +# define CMP_R_BAD_CHECKAFTER_IN_POLLREP 167 +# define CMP_R_BAD_REQUEST_ID 108 +# define CMP_R_CERTHASH_UNMATCHED 156 +# define CMP_R_CERTID_NOT_FOUND 109 +# define CMP_R_CERTIFICATE_NOT_ACCEPTED 169 +# define CMP_R_CERTIFICATE_NOT_FOUND 112 +# define CMP_R_CERTREQMSG_NOT_FOUND 157 +# define CMP_R_CERTRESPONSE_NOT_FOUND 113 +# define CMP_R_CERT_AND_KEY_DO_NOT_MATCH 114 +# define CMP_R_CHECKAFTER_OUT_OF_RANGE 181 +# define CMP_R_ENCOUNTERED_KEYUPDATEWARNING 176 +# define CMP_R_ENCOUNTERED_WAITING 162 +# define CMP_R_ERROR_CALCULATING_PROTECTION 115 +# define CMP_R_ERROR_CREATING_CERTCONF 116 +# define CMP_R_ERROR_CREATING_CERTREP 117 +# define CMP_R_ERROR_CREATING_CERTREQ 163 +# define CMP_R_ERROR_CREATING_ERROR 118 +# define CMP_R_ERROR_CREATING_GENM 119 +# define CMP_R_ERROR_CREATING_GENP 120 +# define CMP_R_ERROR_CREATING_PKICONF 122 +# define CMP_R_ERROR_CREATING_POLLREP 123 +# define CMP_R_ERROR_CREATING_POLLREQ 124 +# define CMP_R_ERROR_CREATING_RP 125 +# define CMP_R_ERROR_CREATING_RR 126 +# define CMP_R_ERROR_PARSING_PKISTATUS 107 +# define CMP_R_ERROR_PROCESSING_MESSAGE 158 +# define CMP_R_ERROR_PROTECTING_MESSAGE 127 +# define CMP_R_ERROR_SETTING_CERTHASH 128 +# define CMP_R_ERROR_UNEXPECTED_CERTCONF 160 +# define CMP_R_ERROR_VALIDATING_PROTECTION 140 +# define CMP_R_ERROR_VALIDATING_SIGNATURE 171 +# define CMP_R_FAILED_BUILDING_OWN_CHAIN 164 +# define CMP_R_FAILED_EXTRACTING_PUBKEY 141 +# define CMP_R_FAILURE_OBTAINING_RANDOM 110 +# define CMP_R_FAIL_INFO_OUT_OF_RANGE 129 +# define CMP_R_INVALID_ARGS 100 +# define CMP_R_INVALID_OPTION 174 +# define CMP_R_MISSING_CERTID 165 +# define CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION 130 +# define CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE 142 +# define CMP_R_MISSING_P10CSR 121 +# define CMP_R_MISSING_PBM_SECRET 166 +# define CMP_R_MISSING_PRIVATE_KEY 131 +# define CMP_R_MISSING_PRIVATE_KEY_FOR_POPO 190 +# define CMP_R_MISSING_PROTECTION 143 +# define CMP_R_MISSING_PUBLIC_KEY 183 +# define CMP_R_MISSING_REFERENCE_CERT 168 +# define CMP_R_MISSING_SECRET 178 +# define CMP_R_MISSING_SENDER_IDENTIFICATION 111 +# define CMP_R_MISSING_TRUST_ANCHOR 179 +# define CMP_R_MISSING_TRUST_STORE 144 +# define CMP_R_MULTIPLE_REQUESTS_NOT_SUPPORTED 161 +# define CMP_R_MULTIPLE_RESPONSES_NOT_SUPPORTED 170 +# define CMP_R_MULTIPLE_SAN_SOURCES 102 +# define CMP_R_NO_STDIO 194 +# define CMP_R_NO_SUITABLE_SENDER_CERT 145 +# define CMP_R_NULL_ARGUMENT 103 +# define CMP_R_PKIBODY_ERROR 146 +# define CMP_R_PKISTATUSINFO_NOT_FOUND 132 +# define CMP_R_POLLING_FAILED 172 +# define CMP_R_POTENTIALLY_INVALID_CERTIFICATE 147 +# define CMP_R_RECEIVED_ERROR 180 +# define CMP_R_RECIPNONCE_UNMATCHED 148 +# define CMP_R_REQUEST_NOT_ACCEPTED 149 +# define CMP_R_REQUEST_REJECTED_BY_SERVER 182 +# define CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED 150 +# define CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG 151 +# define CMP_R_TOTAL_TIMEOUT 184 +# define CMP_R_TRANSACTIONID_UNMATCHED 152 +# define CMP_R_TRANSFER_ERROR 159 +# define CMP_R_UNEXPECTED_PKIBODY 133 +# define CMP_R_UNEXPECTED_PKISTATUS 185 +# define CMP_R_UNEXPECTED_PVNO 153 +# define CMP_R_UNKNOWN_ALGORITHM_ID 134 +# define CMP_R_UNKNOWN_CERT_TYPE 135 +# define CMP_R_UNKNOWN_PKISTATUS 186 +# define CMP_R_UNSUPPORTED_ALGORITHM 136 +# define CMP_R_UNSUPPORTED_KEY_TYPE 137 +# define CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC 154 +# define CMP_R_VALUE_TOO_LARGE 175 +# define CMP_R_VALUE_TOO_SMALL 177 +# define CMP_R_WRONG_ALGORITHM_OID 138 +# define CMP_R_WRONG_CERTID 189 +# define CMP_R_WRONG_CERTID_IN_RP 187 +# define CMP_R_WRONG_PBM_VALUE 155 +# define CMP_R_WRONG_RP_COMPONENT_COUNT 188 +# define CMP_R_WRONG_SERIAL_IN_RP 173 + +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h index c7627968..3b453e6a 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h @@ -1,14 +1,25 @@ /* - * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/cms.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMS_H -# define HEADER_CMS_H + + +#ifndef OPENSSL_CMS_H +# define OPENSSL_CMS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMS_H +# endif # include @@ -30,14 +41,118 @@ typedef struct CMS_Receipt_st CMS_Receipt; typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; -DEFINE_STACK_OF(CMS_SignerInfo) -DEFINE_STACK_OF(CMS_RecipientEncryptedKey) -DEFINE_STACK_OF(CMS_RecipientInfo) -DEFINE_STACK_OF(CMS_RevocationInfoChoice) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_SignerInfo, CMS_SignerInfo, CMS_SignerInfo) +#define sk_CMS_SignerInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_value(sk, idx) ((CMS_SignerInfo *)OPENSSL_sk_value(ossl_check_const_CMS_SignerInfo_sk_type(sk), (idx))) +#define sk_CMS_SignerInfo_new(cmp) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new(ossl_check_CMS_SignerInfo_compfunc_type(cmp))) +#define sk_CMS_SignerInfo_new_null() ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_null()) +#define sk_CMS_SignerInfo_new_reserve(cmp, n) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_SignerInfo_compfunc_type(cmp), (n))) +#define sk_CMS_SignerInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_SignerInfo_sk_type(sk), (n)) +#define sk_CMS_SignerInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_delete(sk, i) ((CMS_SignerInfo *)OPENSSL_sk_delete(ossl_check_CMS_SignerInfo_sk_type(sk), (i))) +#define sk_CMS_SignerInfo_delete_ptr(sk, ptr) ((CMS_SignerInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr))) +#define sk_CMS_SignerInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_pop(sk) ((CMS_SignerInfo *)OPENSSL_sk_pop(ossl_check_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_shift(sk) ((CMS_SignerInfo *)OPENSSL_sk_shift(ossl_check_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_SignerInfo_sk_type(sk),ossl_check_CMS_SignerInfo_freefunc_type(freefunc)) +#define sk_CMS_SignerInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), (idx)) +#define sk_CMS_SignerInfo_set(sk, idx, ptr) ((CMS_SignerInfo *)OPENSSL_sk_set(ossl_check_CMS_SignerInfo_sk_type(sk), (idx), ossl_check_CMS_SignerInfo_type(ptr))) +#define sk_CMS_SignerInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), pnum) +#define sk_CMS_SignerInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_dup(sk) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_copyfunc_type(copyfunc), ossl_check_CMS_SignerInfo_freefunc_type(freefunc))) +#define sk_CMS_SignerInfo_set_cmp_func(sk, cmp) ((sk_CMS_SignerInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey) +#define sk_CMS_RecipientEncryptedKey_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_value(sk, idx) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), (idx))) +#define sk_CMS_RecipientEncryptedKey_new(cmp) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp))) +#define sk_CMS_RecipientEncryptedKey_new_null() ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_null()) +#define sk_CMS_RecipientEncryptedKey_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientEncryptedKey_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (n)) +#define sk_CMS_RecipientEncryptedKey_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_delete(sk, i) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (i))) +#define sk_CMS_RecipientEncryptedKey_delete_ptr(sk, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr))) +#define sk_CMS_RecipientEncryptedKey_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_pop(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_pop(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_shift(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_shift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk),ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc)) +#define sk_CMS_RecipientEncryptedKey_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), (idx)) +#define sk_CMS_RecipientEncryptedKey_set(sk, idx, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_set(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (idx), ossl_check_CMS_RecipientEncryptedKey_type(ptr))) +#define sk_CMS_RecipientEncryptedKey_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), pnum) +#define sk_CMS_RecipientEncryptedKey_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_dup(sk) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_copyfunc_type(copyfunc), ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc))) +#define sk_CMS_RecipientEncryptedKey_set_cmp_func(sk, cmp) ((sk_CMS_RecipientEncryptedKey_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientInfo, CMS_RecipientInfo, CMS_RecipientInfo) +#define sk_CMS_RecipientInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_value(sk, idx) ((CMS_RecipientInfo *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientInfo_sk_type(sk), (idx))) +#define sk_CMS_RecipientInfo_new(cmp) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new(ossl_check_CMS_RecipientInfo_compfunc_type(cmp))) +#define sk_CMS_RecipientInfo_new_null() ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_null()) +#define sk_CMS_RecipientInfo_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientInfo_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientInfo_sk_type(sk), (n)) +#define sk_CMS_RecipientInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_delete(sk, i) ((CMS_RecipientInfo *)OPENSSL_sk_delete(ossl_check_CMS_RecipientInfo_sk_type(sk), (i))) +#define sk_CMS_RecipientInfo_delete_ptr(sk, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr))) +#define sk_CMS_RecipientInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_pop(sk) ((CMS_RecipientInfo *)OPENSSL_sk_pop(ossl_check_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_shift(sk) ((CMS_RecipientInfo *)OPENSSL_sk_shift(ossl_check_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientInfo_sk_type(sk),ossl_check_CMS_RecipientInfo_freefunc_type(freefunc)) +#define sk_CMS_RecipientInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), (idx)) +#define sk_CMS_RecipientInfo_set(sk, idx, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_set(ossl_check_CMS_RecipientInfo_sk_type(sk), (idx), ossl_check_CMS_RecipientInfo_type(ptr))) +#define sk_CMS_RecipientInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), pnum) +#define sk_CMS_RecipientInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_dup(sk) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_copyfunc_type(copyfunc), ossl_check_CMS_RecipientInfo_freefunc_type(freefunc))) +#define sk_CMS_RecipientInfo_set_cmp_func(sk, cmp) ((sk_CMS_RecipientInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RevocationInfoChoice, CMS_RevocationInfoChoice, CMS_RevocationInfoChoice) +#define sk_CMS_RevocationInfoChoice_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_value(sk, idx) ((CMS_RevocationInfoChoice *)OPENSSL_sk_value(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), (idx))) +#define sk_CMS_RevocationInfoChoice_new(cmp) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp))) +#define sk_CMS_RevocationInfoChoice_new_null() ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_null()) +#define sk_CMS_RevocationInfoChoice_new_reserve(cmp, n) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp), (n))) +#define sk_CMS_RevocationInfoChoice_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (n)) +#define sk_CMS_RevocationInfoChoice_free(sk) OPENSSL_sk_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_delete(sk, i) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (i))) +#define sk_CMS_RevocationInfoChoice_delete_ptr(sk, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr))) +#define sk_CMS_RevocationInfoChoice_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_pop(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_pop(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_shift(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_shift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk),ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc)) +#define sk_CMS_RevocationInfoChoice_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), (idx)) +#define sk_CMS_RevocationInfoChoice_set(sk, idx, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_set(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (idx), ossl_check_CMS_RevocationInfoChoice_type(ptr))) +#define sk_CMS_RevocationInfoChoice_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), pnum) +#define sk_CMS_RevocationInfoChoice_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_dup(sk) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_dup(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_copyfunc_type(copyfunc), ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc))) +#define sk_CMS_RevocationInfoChoice_set_cmp_func(sk, cmp) ((sk_CMS_RevocationInfoChoice_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) +CMS_ContentInfo *CMS_ContentInfo_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + # define CMS_SIGNERINFO_ISSUER_SERIAL 0 # define CMS_SIGNERINFO_KEYIDENTIFIER 1 @@ -73,6 +188,8 @@ DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) # define CMS_DEBUG_DECRYPT 0x20000 # define CMS_KEY_PARAM 0x40000 # define CMS_ASCIICRLF 0x80000 +# define CMS_CADES 0x100000 +# define CMS_USE_ORIGINATOR_KEYID 0x200000 const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); @@ -83,8 +200,8 @@ ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); int CMS_is_detached(CMS_ContentInfo *cms); int CMS_set_detached(CMS_ContentInfo *cms, int detached); -# ifdef HEADER_PEM_H -DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) +# ifdef OPENSSL_PEM_H +DECLARE_PEM_rw(CMS, CMS_ContentInfo) # endif int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); @@ -95,6 +212,7 @@ int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +CMS_ContentInfo *SMIME_read_CMS_ex(BIO *bio, int flags, BIO **bcont, CMS_ContentInfo **ci); int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, @@ -103,6 +221,10 @@ int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, unsigned int flags); +CMS_ContentInfo *CMS_sign_ex(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, X509 *signcert, EVP_PKEY *pkey, @@ -110,11 +232,16 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); +CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, unsigned int flags); +CMS_ContentInfo *CMS_digest_create_ex(BIO *in, const EVP_MD *md, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, const unsigned char *key, size_t keylen, @@ -123,6 +250,11 @@ int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, const unsigned char *key, size_t keylen, unsigned int flags); +CMS_ContentInfo *CMS_EncryptedData_encrypt_ex(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags, + OSSL_LIB_CTX *ctx, + const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, const unsigned char *key, size_t keylen); @@ -138,11 +270,16 @@ STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); +CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, BIO *dcont, BIO *out, unsigned int flags); int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms, EVP_PKEY *pk, + X509 *cert, X509 *peer); int CMS_decrypt_set1_key(CMS_ContentInfo *cms, unsigned char *key, size_t keylen, const unsigned char *id, size_t idlen); @@ -152,9 +289,19 @@ int CMS_decrypt_set1_password(CMS_ContentInfo *cms, STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo * +CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, + const char *propq); CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo *CMS_EnvelopedData_create_ex(const EVP_CIPHER *cipher, + OSSL_LIB_CTX *ctx, + const char *propq); + CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, X509 *recip, unsigned int flags); +CMS_RecipientInfo *CMS_add1_recipient(CMS_ContentInfo *cms, X509 *recip, + EVP_PKEY *originatorPrivKey, X509 * originator, unsigned int flags); int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, @@ -197,7 +344,7 @@ CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, const EVP_CIPHER *kekciph); int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); -int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(const CMS_ContentInfo *cms, CMS_RecipientInfo *ri); int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags); @@ -261,7 +408,8 @@ int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, const char *attrname, int type, const void *bytes, int len); -void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, const ASN1_OBJECT *oid, +void *CMS_signed_get0_data_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *oid, int lastpos, int type); int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); @@ -285,11 +433,16 @@ void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, int lastpos, int type); int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); -CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, - int allorfirst, - STACK_OF(GENERAL_NAMES) - *receiptList, STACK_OF(GENERAL_NAMES) - *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo, + OSSL_LIB_CTX *ctx); + int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, ASN1_STRING **pcid, @@ -319,6 +472,7 @@ int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, X509 *cert); int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +int CMS_RecipientInfo_kari_set0_pkey_and_peer(CMS_RecipientInfo *ri, EVP_PKEY *pk, X509 *peer); EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri, diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h.in new file mode 100644 index 00000000..da20ddf2 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h.in @@ -0,0 +1,395 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CMS_H +# define OPENSSL_CMS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMS_H +# endif + +# include + +# ifndef OPENSSL_NO_CMS +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct CMS_ContentInfo_st CMS_ContentInfo; +typedef struct CMS_SignerInfo_st CMS_SignerInfo; +typedef struct CMS_CertificateChoices CMS_CertificateChoices; +typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; +typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; +typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; +typedef struct CMS_Receipt_st CMS_Receipt; +typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; +typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; + +{- + generate_stack_macros("CMS_SignerInfo") + .generate_stack_macros("CMS_RecipientEncryptedKey") + .generate_stack_macros("CMS_RecipientInfo") + .generate_stack_macros("CMS_RevocationInfoChoice"); +-} + +DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) +DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) +DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) + +CMS_ContentInfo *CMS_ContentInfo_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +# define CMS_SIGNERINFO_ISSUER_SERIAL 0 +# define CMS_SIGNERINFO_KEYIDENTIFIER 1 + +# define CMS_RECIPINFO_NONE -1 +# define CMS_RECIPINFO_TRANS 0 +# define CMS_RECIPINFO_AGREE 1 +# define CMS_RECIPINFO_KEK 2 +# define CMS_RECIPINFO_PASS 3 +# define CMS_RECIPINFO_OTHER 4 + +/* S/MIME related flags */ + +# define CMS_TEXT 0x1 +# define CMS_NOCERTS 0x2 +# define CMS_NO_CONTENT_VERIFY 0x4 +# define CMS_NO_ATTR_VERIFY 0x8 +# define CMS_NOSIGS \ + (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) +# define CMS_NOINTERN 0x10 +# define CMS_NO_SIGNER_CERT_VERIFY 0x20 +# define CMS_NOVERIFY 0x20 +# define CMS_DETACHED 0x40 +# define CMS_BINARY 0x80 +# define CMS_NOATTR 0x100 +# define CMS_NOSMIMECAP 0x200 +# define CMS_NOOLDMIMETYPE 0x400 +# define CMS_CRLFEOL 0x800 +# define CMS_STREAM 0x1000 +# define CMS_NOCRL 0x2000 +# define CMS_PARTIAL 0x4000 +# define CMS_REUSE_DIGEST 0x8000 +# define CMS_USE_KEYID 0x10000 +# define CMS_DEBUG_DECRYPT 0x20000 +# define CMS_KEY_PARAM 0x40000 +# define CMS_ASCIICRLF 0x80000 +# define CMS_CADES 0x100000 +# define CMS_USE_ORIGINATOR_KEYID 0x200000 + +const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); + +BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); +int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); + +ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); +int CMS_is_detached(CMS_ContentInfo *cms); +int CMS_set_detached(CMS_ContentInfo *cms, int detached); + +# ifdef OPENSSL_PEM_H +DECLARE_PEM_rw(CMS, CMS_ContentInfo) +# endif +int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); +CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); +int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); + +BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); +int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); +int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, + int flags); +CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +CMS_ContentInfo *SMIME_read_CMS_ex(BIO *bio, int flags, BIO **bcont, CMS_ContentInfo **ci); +int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); + +int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, + unsigned int flags); + +CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags); +CMS_ContentInfo *CMS_sign_ex(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); + +CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, + X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, unsigned int flags); + +int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); +CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); +CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); + +int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create_ex(BIO *in, const EVP_MD *md, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); + +int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, + const unsigned char *key, size_t keylen, + BIO *dcont, BIO *out, unsigned int flags); + +CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags); +CMS_ContentInfo *CMS_EncryptedData_encrypt_ex(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags, + OSSL_LIB_CTX *ctx, + const char *propq); + +int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, + const unsigned char *key, size_t keylen); + +int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); + +int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, + STACK_OF(X509) *certs, + X509_STORE *store, unsigned int flags); + +STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); + +CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags); +CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); + +int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, + BIO *dcont, BIO *out, unsigned int flags); + +int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms, EVP_PKEY *pk, + X509 *cert, X509 *peer); +int CMS_decrypt_set1_key(CMS_ContentInfo *cms, + unsigned char *key, size_t keylen, + const unsigned char *id, size_t idlen); +int CMS_decrypt_set1_password(CMS_ContentInfo *cms, + unsigned char *pass, ossl_ssize_t passlen); + +STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); +int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); +EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo * +CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, + const char *propq); +CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo *CMS_EnvelopedData_create_ex(const EVP_CIPHER *cipher, + OSSL_LIB_CTX *ctx, + const char *propq); + +CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, + X509 *recip, unsigned int flags); +CMS_RecipientInfo *CMS_add1_recipient(CMS_ContentInfo *cms, X509 *recip, + EVP_PKEY *originatorPrivKey, X509 * originator, unsigned int flags); +int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); +int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); +int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, + EVP_PKEY **pk, X509 **recip, + X509_ALGOR **palg); +int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, + unsigned char *key, size_t keylen, + unsigned char *id, size_t idlen, + ASN1_GENERALIZEDTIME *date, + ASN1_OBJECT *otherTypeId, + ASN1_TYPE *otherType); + +int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pid, + ASN1_GENERALIZEDTIME **pdate, + ASN1_OBJECT **potherid, + ASN1_TYPE **pothertype); + +int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, + unsigned char *key, size_t keylen); + +int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, + const unsigned char *id, size_t idlen); + +int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, + unsigned char *pass, + ossl_ssize_t passlen); + +CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, + int iter, int wrap_nid, + int pbe_nid, + unsigned char *pass, + ossl_ssize_t passlen, + const EVP_CIPHER *kekciph); + +int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(const CMS_ContentInfo *cms, CMS_RecipientInfo *ri); + +int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); + +int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); +const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); + +CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); +int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); +int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); +STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); + +CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); +int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); +int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); +STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); + +int CMS_SignedData_init(CMS_ContentInfo *cms); +CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, + X509 *signer, EVP_PKEY *pk, const EVP_MD *md, + unsigned int flags); +EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); +EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); +STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); + +void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); +int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); +int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + unsigned int flags); +void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, + X509 **signer, X509_ALGOR **pdig, + X509_ALGOR **psig); +ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); +int CMS_SignerInfo_sign(CMS_SignerInfo *si); +int CMS_SignerInfo_verify(CMS_SignerInfo *si); +int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); + +int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); +int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, + int algnid, int keysize); +int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); + +int CMS_signed_get_attr_count(const CMS_SignerInfo *si); +int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_signed_get0_data_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); +int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo, + OSSL_LIB_CTX *ctx); + +int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); +void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, + ASN1_STRING **pcid, + int *pallorfirst, + STACK_OF(GENERAL_NAMES) **plist, + STACK_OF(GENERAL_NAMES) **prto); +int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pukm); +STACK_OF(CMS_RecipientEncryptedKey) +*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); + +int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, + X509_ALGOR **pubalg, + ASN1_BIT_STRING **pubkey, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); + +int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, + ASN1_OCTET_STRING **keyid, + ASN1_GENERALIZEDTIME **tm, + CMS_OtherKeyAttribute **other, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, + X509 *cert); +int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +int CMS_RecipientInfo_kari_set0_pkey_and_peer(CMS_RecipientInfo *ri, EVP_PKEY *pk, X509 *peer); +EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); +int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, + CMS_RecipientInfo *ri, + CMS_RecipientEncryptedKey *rek); + +int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, + ASN1_OCTET_STRING *ukm, int keylen); + +/* Backward compatibility for spelling errors. */ +# define CMS_R_UNKNOWN_DIGEST_ALGORITM CMS_R_UNKNOWN_DIGEST_ALGORITHM +# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE \ + CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmserr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmserr.h index d589f592..d48c2a4a 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmserr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmserr.h @@ -1,115 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMSERR_H -# define HEADER_CMSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_CMSERR_H +# define OPENSSL_CMSERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_CMS -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CMS_strings(void); - -/* - * CMS function codes. - */ -# define CMS_F_CHECK_CONTENT 99 -# define CMS_F_CMS_ADD0_CERT 164 -# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 -# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 -# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 -# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 -# define CMS_F_CMS_ADD1_SIGNER 102 -# define CMS_F_CMS_ADD1_SIGNINGTIME 103 -# define CMS_F_CMS_COMPRESS 104 -# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 -# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 -# define CMS_F_CMS_COPY_CONTENT 107 -# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 -# define CMS_F_CMS_DATA 109 -# define CMS_F_CMS_DATAFINAL 110 -# define CMS_F_CMS_DATAINIT 111 -# define CMS_F_CMS_DECRYPT 112 -# define CMS_F_CMS_DECRYPT_SET1_KEY 113 -# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 -# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 -# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 -# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 -# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 -# define CMS_F_CMS_DIGEST_VERIFY 118 -# define CMS_F_CMS_ENCODE_RECEIPT 161 -# define CMS_F_CMS_ENCRYPT 119 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 179 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 -# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 -# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 -# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 -# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 -# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 -# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 -# define CMS_F_CMS_ENV_ASN1_CTRL 171 -# define CMS_F_CMS_FINAL 127 -# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 -# define CMS_F_CMS_GET0_CONTENT 129 -# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 -# define CMS_F_CMS_GET0_ENVELOPED 131 -# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 -# define CMS_F_CMS_GET0_SIGNED 133 -# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 -# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 -# define CMS_F_CMS_RECEIPT_VERIFY 160 -# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 -# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 -# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 -# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 -# define CMS_F_CMS_SD_ASN1_CTRL 170 -# define CMS_F_CMS_SET1_IAS 176 -# define CMS_F_CMS_SET1_KEYID 177 -# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 -# define CMS_F_CMS_SET_DETACHED 147 -# define CMS_F_CMS_SIGN 148 -# define CMS_F_CMS_SIGNED_DATA_INIT 149 -# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 -# define CMS_F_CMS_SIGNERINFO_SIGN 151 -# define CMS_F_CMS_SIGNERINFO_VERIFY 152 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 -# define CMS_F_CMS_SIGN_RECEIPT 163 -# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 183 -# define CMS_F_CMS_STREAM 155 -# define CMS_F_CMS_UNCOMPRESS 156 -# define CMS_F_CMS_VERIFY 157 -# define CMS_F_KEK_UNWRAP_KEY 180 /* * CMS reason codes. @@ -119,6 +28,8 @@ int ERR_load_CMS_strings(void); # define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 # define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 # define CMS_R_CERTIFICATE_VERIFY_ERROR 100 +# define CMS_R_CIPHER_AEAD_SET_TAG_ERROR 184 +# define CMS_R_CIPHER_GET_TAG 185 # define CMS_R_CIPHER_INITIALISATION_ERROR 101 # define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 # define CMS_R_CMS_DATAFINAL_ERROR 103 @@ -132,14 +43,19 @@ int ERR_load_CMS_strings(void); # define CMS_R_CONTENT_VERIFY_ERROR 109 # define CMS_R_CTRL_ERROR 110 # define CMS_R_CTRL_FAILURE 111 +# define CMS_R_DECODE_ERROR 187 # define CMS_R_DECRYPT_ERROR 112 # define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 # define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 # define CMS_R_ERROR_SETTING_KEY 115 # define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 +# define CMS_R_ESS_SIGNING_CERTID_MISMATCH_ERROR 183 # define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 # define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 # define CMS_R_INVALID_KEY_LENGTH 118 +# define CMS_R_INVALID_LABEL 190 +# define CMS_R_INVALID_OAEP_PARAMETERS 191 +# define CMS_R_KDF_PARAMETER_ERROR 186 # define CMS_R_MD_BIO_INIT_ERROR 119 # define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 # define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 @@ -170,9 +86,11 @@ int ERR_load_CMS_strings(void); # define CMS_R_NO_PUBLIC_KEY 134 # define CMS_R_NO_RECEIPT_REQUEST 168 # define CMS_R_NO_SIGNERS 135 +# define CMS_R_PEER_KEY_ERROR 188 # define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 # define CMS_R_RECEIPT_DECODE_ERROR 169 # define CMS_R_RECIPIENT_ERROR 137 +# define CMS_R_SHARED_INFO_ERROR 189 # define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 # define CMS_R_SIGNFINAL_ERROR 139 # define CMS_R_SMIME_TEXT_ERROR 140 @@ -189,8 +107,10 @@ int ERR_load_CMS_strings(void); # define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 # define CMS_R_UNSUPPORTED_CONTENT_ENCRYPTION_ALGORITHM 194 # define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 +# define CMS_R_UNSUPPORTED_ENCRYPTION_TYPE 192 # define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 # define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 +# define CMS_R_UNSUPPORTED_LABEL_SOURCE 193 # define CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE 155 # define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 # define CMS_R_UNSUPPORTED_TYPE 156 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comp.h index d814d3cf..06ff5810 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comp.h @@ -1,14 +1,20 @@ /* * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_COMP_H -# define HEADER_COMP_H +#ifndef OPENSSL_COMP_H +# define OPENSSL_COMP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_COMP_H +# endif # include @@ -35,11 +41,11 @@ int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, COMP_METHOD *COMP_zlib(void); -#if OPENSSL_API_COMPAT < 0x10100000L -#define COMP_zlib_cleanup() while(0) continue +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define COMP_zlib_cleanup() while(0) continue #endif -# ifdef HEADER_BIO_H +# ifdef OPENSSL_BIO_H # ifdef ZLIB const BIO_METHOD *BIO_f_zlib(void); # endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comperr.h index 90231e9a..01dd3e6b 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comperr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comperr.h @@ -1,37 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_COMPERR_H -# define HEADER_COMPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_COMPERR_H +# define OPENSSL_COMPERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_COMP -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_COMP_strings(void); - -/* - * COMP function codes. - */ -# define COMP_F_BIO_ZLIB_FLUSH 99 -# define COMP_F_BIO_ZLIB_NEW 100 -# define COMP_F_BIO_ZLIB_READ 101 -# define COMP_F_BIO_ZLIB_WRITE 102 -# define COMP_F_COMP_CTX_NEW 103 /* * COMP reason codes. diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h index 7336cd2f..e8fcf315 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h @@ -1,21 +1,35 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/conf.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONF_H -# define HEADER_CONF_H + + +#ifndef OPENSSL_CONF_H +# define OPENSSL_CONF_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_H +# endif # include # include # include # include -# include +# include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -27,33 +41,63 @@ typedef struct { char *value; } CONF_VALUE; -DEFINE_STACK_OF(CONF_VALUE) -DEFINE_LHASH_OF(CONF_VALUE); +SKM_DEFINE_STACK_OF_INTERNAL(CONF_VALUE, CONF_VALUE, CONF_VALUE) +#define sk_CONF_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_value(sk, idx) ((CONF_VALUE *)OPENSSL_sk_value(ossl_check_const_CONF_VALUE_sk_type(sk), (idx))) +#define sk_CONF_VALUE_new(cmp) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new(ossl_check_CONF_VALUE_compfunc_type(cmp))) +#define sk_CONF_VALUE_new_null() ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_null()) +#define sk_CONF_VALUE_new_reserve(cmp, n) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_CONF_VALUE_compfunc_type(cmp), (n))) +#define sk_CONF_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CONF_VALUE_sk_type(sk), (n)) +#define sk_CONF_VALUE_free(sk) OPENSSL_sk_free(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_delete(sk, i) ((CONF_VALUE *)OPENSSL_sk_delete(ossl_check_CONF_VALUE_sk_type(sk), (i))) +#define sk_CONF_VALUE_delete_ptr(sk, ptr) ((CONF_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr))) +#define sk_CONF_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_pop(sk) ((CONF_VALUE *)OPENSSL_sk_pop(ossl_check_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_shift(sk) ((CONF_VALUE *)OPENSSL_sk_shift(ossl_check_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CONF_VALUE_sk_type(sk),ossl_check_CONF_VALUE_freefunc_type(freefunc)) +#define sk_CONF_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), (idx)) +#define sk_CONF_VALUE_set(sk, idx, ptr) ((CONF_VALUE *)OPENSSL_sk_set(ossl_check_CONF_VALUE_sk_type(sk), (idx), ossl_check_CONF_VALUE_type(ptr))) +#define sk_CONF_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), pnum) +#define sk_CONF_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_dup(sk) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_dup(ossl_check_const_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_copyfunc_type(copyfunc), ossl_check_CONF_VALUE_freefunc_type(freefunc))) +#define sk_CONF_VALUE_set_cmp_func(sk, cmp) ((sk_CONF_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_compfunc_type(cmp))) +DEFINE_LHASH_OF_INTERNAL(CONF_VALUE); +#define lh_CONF_VALUE_new(hfn, cmp) ((LHASH_OF(CONF_VALUE) *)OPENSSL_LH_new(ossl_check_CONF_VALUE_lh_hashfunc_type(hfn), ossl_check_CONF_VALUE_lh_compfunc_type(cmp))) +#define lh_CONF_VALUE_free(lh) OPENSSL_LH_free(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_flush(lh) OPENSSL_LH_flush(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_insert(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_insert(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_delete(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_delete(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_retrieve(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_retrieve(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_error(lh) OPENSSL_LH_error(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_num_items(lh) OPENSSL_LH_num_items(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_CONF_VALUE_lh_type(lh), dl) +#define lh_CONF_VALUE_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_doallfunc_type(dfn)) + struct conf_st; struct conf_method_st; typedef struct conf_method_st CONF_METHOD; -struct conf_method_st { - const char *name; - CONF *(*create) (CONF_METHOD *meth); - int (*init) (CONF *conf); - int (*destroy) (CONF *conf); - int (*destroy_data) (CONF *conf); - int (*load_bio) (CONF *conf, BIO *bp, long *eline); - int (*dump) (const CONF *conf, BIO *bp); - int (*is_number) (const CONF *conf, char c); - int (*to_int) (const CONF *conf, char c); - int (*load) (CONF *conf, const char *name, long *eline); -}; +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include +# endif /* Module definitions */ - typedef struct conf_imodule_st CONF_IMODULE; typedef struct conf_module_st CONF_MODULE; -DEFINE_STACK_OF(CONF_MODULE) -DEFINE_STACK_OF(CONF_IMODULE) +STACK_OF(CONF_MODULE); +STACK_OF(CONF_IMODULE); /* DSO module function typedefs */ typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); @@ -87,10 +131,11 @@ void CONF_free(LHASH_OF(CONF_VALUE) *conf); int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); #endif int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void OPENSSL_config(const char *config_name); +#endif -DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) - -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OPENSSL_no_config() \ OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) #endif @@ -100,15 +145,13 @@ DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) * that wasn't the case, the above functions would have been replaced */ -struct conf_st { - CONF_METHOD *meth; - void *meth_data; - LHASH_OF(CONF_VALUE) *data; -}; - +CONF *NCONF_new_ex(OSSL_LIB_CTX *libctx, CONF_METHOD *meth); +OSSL_LIB_CTX *NCONF_get0_libctx(const CONF *conf); CONF *NCONF_new(CONF_METHOD *meth); CONF_METHOD *NCONF_default(void); -CONF_METHOD *NCONF_WIN32(void); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CONF_METHOD *NCONF_WIN32(void); +#endif void NCONF_free(CONF *conf); void NCONF_free_data(CONF *conf); @@ -117,6 +160,7 @@ int NCONF_load(CONF *conf, const char *file, long *eline); int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); # endif int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(OPENSSL_CSTRING) *NCONF_get_section_names(const CONF *conf); STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, const char *section); char *NCONF_get_string(const CONF *conf, const char *group, const char *name); @@ -133,11 +177,13 @@ int NCONF_dump_bio(const CONF *conf, BIO *out); int CONF_modules_load(const CONF *cnf, const char *appname, unsigned long flags); +int CONF_modules_load_file_ex(OSSL_LIB_CTX *libctx, const char *filename, + const char *appname, unsigned long flags); int CONF_modules_load_file(const char *filename, const char *appname, unsigned long flags); void CONF_modules_unload(int all); void CONF_modules_finish(void); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define CONF_modules_free() while(0) continue #endif int CONF_module_add(const char *name, conf_init_func *ifunc, diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h.in new file mode 100644 index 00000000..044b3eb5 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h.in @@ -0,0 +1,177 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros generate_lhash_macros); +-} + +#ifndef OPENSSL_CONF_H +# define OPENSSL_CONF_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_H +# endif + +# include +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + char *section; + char *name; + char *value; +} CONF_VALUE; + +{- + generate_stack_macros("CONF_VALUE") + .generate_lhash_macros("CONF_VALUE"); +-} + +struct conf_st; +struct conf_method_st; +typedef struct conf_method_st CONF_METHOD; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include +# endif + +/* Module definitions */ +typedef struct conf_imodule_st CONF_IMODULE; +typedef struct conf_module_st CONF_MODULE; + +STACK_OF(CONF_MODULE); +STACK_OF(CONF_IMODULE); + +/* DSO module function typedefs */ +typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); +typedef void conf_finish_func (CONF_IMODULE *md); + +# define CONF_MFLAGS_IGNORE_ERRORS 0x1 +# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 +# define CONF_MFLAGS_SILENT 0x4 +# define CONF_MFLAGS_NO_DSO 0x8 +# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 +# define CONF_MFLAGS_DEFAULT_SECTION 0x20 + +int CONF_set_default_method(CONF_METHOD *meth); +void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); +LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, + long *eline); +# ifndef OPENSSL_NO_STDIO +LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, + long *eline); +# endif +LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, + long *eline); +STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, + const char *section); +char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +void CONF_free(LHASH_OF(CONF_VALUE) *conf); +#ifndef OPENSSL_NO_STDIO +int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); +#endif +int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void OPENSSL_config(const char *config_name); +#endif + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OPENSSL_no_config() \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) +#endif + +/* + * New conf code. The semantics are different from the functions above. If + * that wasn't the case, the above functions would have been replaced + */ + +CONF *NCONF_new_ex(OSSL_LIB_CTX *libctx, CONF_METHOD *meth); +OSSL_LIB_CTX *NCONF_get0_libctx(const CONF *conf); +CONF *NCONF_new(CONF_METHOD *meth); +CONF_METHOD *NCONF_default(void); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CONF_METHOD *NCONF_WIN32(void); +#endif +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf, const char *file, long *eline); +# ifndef OPENSSL_NO_STDIO +int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); +# endif +int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(OPENSSL_CSTRING) *NCONF_get_section_names(const CONF *conf); +STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, + const char *section); +char *NCONF_get_string(const CONF *conf, const char *group, const char *name); +int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, + long *result); +#ifndef OPENSSL_NO_STDIO +int NCONF_dump_fp(const CONF *conf, FILE *out); +#endif +int NCONF_dump_bio(const CONF *conf, BIO *out); + +#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) + +/* Module functions */ + +int CONF_modules_load(const CONF *cnf, const char *appname, + unsigned long flags); +int CONF_modules_load_file_ex(OSSL_LIB_CTX *libctx, const char *filename, + const char *appname, unsigned long flags); +int CONF_modules_load_file(const char *filename, const char *appname, + unsigned long flags); +void CONF_modules_unload(int all); +void CONF_modules_finish(void); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define CONF_modules_free() while(0) continue +#endif +int CONF_module_add(const char *name, conf_init_func *ifunc, + conf_finish_func *ffunc); + +const char *CONF_imodule_get_name(const CONF_IMODULE *md); +const char *CONF_imodule_get_value(const CONF_IMODULE *md); +void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); +void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); +CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); +unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); +void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); +void *CONF_module_get_usr_data(CONF_MODULE *pmod); +void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); + +char *CONF_get1_default_config_file(void); + +int CONF_parse_list(const char *list, int sep, int nospc, + int (*list_cb) (const char *elem, int len, void *usr), + void *arg); + +void OPENSSL_load_builtin_modules(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf_api.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf_api.h index a0275ad7..ed67d577 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf_api.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf_api.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONF_API_H -# define HEADER_CONF_API_H +#ifndef OPENSSL_CONF_API_H +# define OPENSSL_CONF_API_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_API_H +# endif # include # include diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conferr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conferr.h index 32b92291..496e2e1e 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conferr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conferr.h @@ -1,57 +1,30 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONFERR_H -# define HEADER_CONFERR_H +#ifndef OPENSSL_CONFERR_H +# define OPENSSL_CONFERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CONF_strings(void); -/* - * CONF function codes. - */ -# define CONF_F_CONF_DUMP_FP 104 -# define CONF_F_CONF_LOAD 100 -# define CONF_F_CONF_LOAD_FP 103 -# define CONF_F_CONF_PARSE_LIST 119 -# define CONF_F_DEF_LOAD 120 -# define CONF_F_DEF_LOAD_BIO 121 -# define CONF_F_GET_NEXT_FILE 107 -# define CONF_F_MODULE_ADD 122 -# define CONF_F_MODULE_INIT 115 -# define CONF_F_MODULE_LOAD_DSO 117 -# define CONF_F_MODULE_RUN 118 -# define CONF_F_NCONF_DUMP_BIO 105 -# define CONF_F_NCONF_DUMP_FP 106 -# define CONF_F_NCONF_GET_NUMBER_E 112 -# define CONF_F_NCONF_GET_SECTION 108 -# define CONF_F_NCONF_GET_STRING 109 -# define CONF_F_NCONF_LOAD 113 -# define CONF_F_NCONF_LOAD_BIO 110 -# define CONF_F_NCONF_LOAD_FP 114 -# define CONF_F_NCONF_NEW 111 -# define CONF_F_PROCESS_INCLUDE 116 -# define CONF_F_SSL_MODULE_INIT 123 -# define CONF_F_STR_COPY 101 /* * CONF reason codes. */ # define CONF_R_ERROR_LOADING_DSO 110 +# define CONF_R_INVALID_PRAGMA 122 # define CONF_R_LIST_CANNOT_BE_NULL 115 +# define CONF_R_MANDATORY_BRACES_IN_VARIABLE_EXPANSION 123 # define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 # define CONF_R_MISSING_EQUAL_SIGN 101 # define CONF_R_MISSING_INIT_FUNCTION 112 @@ -63,7 +36,9 @@ int ERR_load_CONF_strings(void); # define CONF_R_NO_SUCH_FILE 114 # define CONF_R_NO_VALUE 108 # define CONF_R_NUMBER_TOO_LARGE 121 +# define CONF_R_OPENSSL_CONF_REFERENCES_MISSING_SECTION 124 # define CONF_R_RECURSIVE_DIRECTORY_INCLUDE 111 +# define CONF_R_RELATIVE_PATH 125 # define CONF_R_SSL_COMMAND_SECTION_EMPTY 117 # define CONF_R_SSL_COMMAND_SECTION_NOT_FOUND 118 # define CONF_R_SSL_SECTION_EMPTY 119 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h new file mode 100644 index 00000000..cd21037c --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h @@ -0,0 +1,137 @@ +/* + * WARNING: do not edit! + * Generated by configdata.pm from Configurations/common0.tmpl, Configurations/unix-Makefile.tmpl + * via Makefile.in + * + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFIGURATION_H +# define OPENSSL_CONFIGURATION_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +# ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +# endif + +/* + * OpenSSL was configured with the following options: + */ + +# define OPENSSL_CONFIGURED_API 30100 +# ifndef OPENSSL_RAND_SEED_OS +# define OPENSSL_RAND_SEED_OS +# endif +# ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +# endif +# ifndef OPENSSL_NO_ACVP_TESTS +# define OPENSSL_NO_ACVP_TESTS +# endif +# ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +# endif +# ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +# endif +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +# endif +# ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# endif +# ifndef OPENSSL_NO_DEVCRYPTOENG +# define OPENSSL_NO_DEVCRYPTOENG +# endif +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +# endif +# ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +# endif +# ifndef OPENSSL_NO_EXTERNAL_TESTS +# define OPENSSL_NO_EXTERNAL_TESTS +# endif +# ifndef OPENSSL_NO_FIPS_SECURITYCHECKS +# define OPENSSL_NO_FIPS_SECURITYCHECKS +# endif +# ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +# endif +# ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +# endif +# ifndef OPENSSL_NO_KTLS +# define OPENSSL_NO_KTLS +# endif +# ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +# endif +# ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +# endif +# ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +# endif +# ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +# endif +# ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +# endif +# ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +# endif +# ifndef OPENSSL_NO_TESTS +# define OPENSSL_NO_TESTS +# endif +# ifndef OPENSSL_NO_TRACE +# define OPENSSL_NO_TRACE +# endif +# ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +# endif +# ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +# endif +# ifndef OPENSSL_NO_UPLINK +# define OPENSSL_NO_UPLINK +# endif +# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +# endif +# ifndef OPENSSL_NO_STATIC_ENGINE +# define OPENSSL_NO_STATIC_ENGINE +# endif + + +/* Generate 80386 code? */ +# undef I386_ONLY + +/* + * The following are cipher-specific, but are part of the public API. + */ +# if !defined(OPENSSL_SYS_UEFI) +# define BN_LLONG +/* Only one for the following should be defined */ +# undef SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# define THIRTY_TWO_BIT +# endif + +# define RC4_INT unsigned char + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_CONFIGURATION_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h.in new file mode 100644 index 00000000..b84dc1df --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h.in @@ -0,0 +1,69 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFIGURATION_H +# define OPENSSL_CONFIGURATION_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +# ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +# endif + +/* + * OpenSSL was configured with the following options: + */ + +{- if (@{$config{openssl_sys_defines}}) { + foreach (@{$config{openssl_sys_defines}}) { + $OUT .= "# ifndef $_\n"; + $OUT .= "# define $_ 1\n"; + $OUT .= "# endif\n"; + } + } + foreach (@{$config{openssl_api_defines}}) { + (my $macro, my $value) = $_ =~ /^(.*?)=(.*?)$/; + $OUT .= "# define $macro $value\n"; + } + if (@{$config{openssl_feature_defines}}) { + foreach (@{$config{openssl_feature_defines}}) { + $OUT .= "# ifndef $_\n"; + $OUT .= "# define $_\n"; + $OUT .= "# endif\n"; + } + } + ""; +-} + +/* Generate 80386 code? */ +{- $config{processor} eq "386" ? "# define" : "# undef" -} I386_ONLY + +/* + * The following are cipher-specific, but are part of the public API. + */ +# if !defined(OPENSSL_SYS_UEFI) +{- $config{bn_ll} ? "# define" : "# undef" -} BN_LLONG +/* Only one for the following should be defined */ +{- $config{b64l} ? "# define" : "# undef" -} SIXTY_FOUR_BIT_LONG +{- $config{b64} ? "# define" : "# undef" -} SIXTY_FOUR_BIT +{- $config{b32} ? "# define" : "# undef" -} THIRTY_TWO_BIT +# endif + +# define RC4_INT {- $config{rc4_int} -} + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_CONFIGURATION_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conftypes.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conftypes.h new file mode 100644 index 00000000..17cefaa4 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conftypes.h @@ -0,0 +1,44 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFTYPES_H +# define OPENSSL_CONFTYPES_H +# pragma once + +#ifndef OPENSSL_CONF_H +# include +#endif + +/* + * The contents of this file are deprecated and will be made opaque + */ +struct conf_method_st { + const char *name; + CONF *(*create) (CONF_METHOD *meth); + int (*init) (CONF *conf); + int (*destroy) (CONF *conf); + int (*destroy_data) (CONF *conf); + int (*load_bio) (CONF *conf, BIO *bp, long *eline); + int (*dump) (const CONF *conf, BIO *bp); + int (*is_number) (const CONF *conf, char c); + int (*to_int) (const CONF *conf, char c); + int (*load) (CONF *conf, const char *name, long *eline); +}; + +struct conf_st { + CONF_METHOD *meth; + void *meth_data; + LHASH_OF(CONF_VALUE) *data; + int flag_dollarid; + int flag_abspath; + char *includedir; + OSSL_LIB_CTX *libctx; +}; + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core.h new file mode 100644 index 00000000..9683ac70 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core.h @@ -0,0 +1,233 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_H +# define OPENSSL_CORE_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Base types + * ---------- + * + * These are the types that the OpenSSL core and providers have in common + * to communicate data between them. + */ + +/* Opaque handles to be used with core upcall functions from providers */ +typedef struct ossl_core_handle_st OSSL_CORE_HANDLE; +typedef struct openssl_core_ctx_st OPENSSL_CORE_CTX; +typedef struct ossl_core_bio_st OSSL_CORE_BIO; + +/* + * Dispatch table element. function_id numbers and the functions are defined + * in core_dispatch.h, see macros with 'OSSL_CORE_MAKE_FUNC' in their names. + * + * An array of these is always terminated by function_id == 0 + */ +struct ossl_dispatch_st { + int function_id; + void (*function)(void); +}; + +/* + * Other items, essentially an int<->pointer map element. + * + * We make this type distinct from OSSL_DISPATCH to ensure that dispatch + * tables remain tables with function pointers only. + * + * This is used whenever we need to pass things like a table of error reason + * codes <-> reason string maps, ... + * + * Usage determines which field works as key if any, rather than field order. + * + * An array of these is always terminated by id == 0 && ptr == NULL + */ +struct ossl_item_st { + unsigned int id; + void *ptr; +}; + +/* + * Type to tie together algorithm names, property definition string and + * the algorithm implementation in the form of a dispatch table. + * + * An array of these is always terminated by algorithm_names == NULL + */ +struct ossl_algorithm_st { + const char *algorithm_names; /* key */ + const char *property_definition; /* key */ + const OSSL_DISPATCH *implementation; + const char *algorithm_description; +}; + +/* + * Type to pass object data in a uniform way, without exposing the object + * structure. + * + * An array of these is always terminated by key == NULL + */ +struct ossl_param_st { + const char *key; /* the name of the parameter */ + unsigned int data_type; /* declare what kind of content is in buffer */ + void *data; /* value being passed in or out */ + size_t data_size; /* data size */ + size_t return_size; /* returned content size */ +}; + +/* Currently supported OSSL_PARAM data types */ +/* + * OSSL_PARAM_INTEGER and OSSL_PARAM_UNSIGNED_INTEGER + * are arbitrary length and therefore require an arbitrarily sized buffer, + * since they may be used to pass numbers larger than what is natively + * available. + * + * The number must be buffered in native form, i.e. MSB first on B_ENDIAN + * systems and LSB first on L_ENDIAN systems. This means that arbitrary + * native integers can be stored in the buffer, just make sure that the + * buffer size is correct and the buffer itself is properly aligned (for + * example by having the buffer field point at a C integer). + */ +# define OSSL_PARAM_INTEGER 1 +# define OSSL_PARAM_UNSIGNED_INTEGER 2 +/*- + * OSSL_PARAM_REAL + * is a C binary floating point values in native form and alignment. + */ +# define OSSL_PARAM_REAL 3 +/*- + * OSSL_PARAM_UTF8_STRING + * is a printable string. It is expected to be printed as it is. + */ +# define OSSL_PARAM_UTF8_STRING 4 +/*- + * OSSL_PARAM_OCTET_STRING + * is a string of bytes with no further specification. It is expected to be + * printed as a hexdump. + */ +# define OSSL_PARAM_OCTET_STRING 5 +/*- + * OSSL_PARAM_UTF8_PTR + * is a pointer to a printable string. It is expected to be printed as it is. + * + * The difference between this and OSSL_PARAM_UTF8_STRING is that only pointers + * are manipulated for this type. + * + * This is more relevant for parameter requests, where the responding + * function doesn't need to copy the data to the provided buffer, but + * sets the provided buffer to point at the actual data instead. + * + * WARNING! Using these is FRAGILE, as it assumes that the actual + * data and its location are constant. + * + * EXTRA WARNING! If you are not completely sure you most likely want + * to use the OSSL_PARAM_UTF8_STRING type. + */ +# define OSSL_PARAM_UTF8_PTR 6 +/*- + * OSSL_PARAM_OCTET_PTR + * is a pointer to a string of bytes with no further specification. It is + * expected to be printed as a hexdump. + * + * The difference between this and OSSL_PARAM_OCTET_STRING is that only pointers + * are manipulated for this type. + * + * This is more relevant for parameter requests, where the responding + * function doesn't need to copy the data to the provided buffer, but + * sets the provided buffer to point at the actual data instead. + * + * WARNING! Using these is FRAGILE, as it assumes that the actual + * data and its location are constant. + * + * EXTRA WARNING! If you are not completely sure you most likely want + * to use the OSSL_PARAM_OCTET_STRING type. + */ +# define OSSL_PARAM_OCTET_PTR 7 + +/* + * Typedef for the thread stop handling callback. Used both internally and by + * providers. + * + * Providers may register for notifications about threads stopping by + * registering a callback to hear about such events. Providers register the + * callback using the OSSL_FUNC_CORE_THREAD_START function in the |in| dispatch + * table passed to OSSL_provider_init(). The arg passed back to a provider will + * be the provider side context object. + */ +typedef void (*OSSL_thread_stop_handler_fn)(void *arg); + + +/*- + * Provider entry point + * -------------------- + * + * This function is expected to be present in any dynamically loadable + * provider module. By definition, if this function doesn't exist in a + * module, that module is not an OpenSSL provider module. + */ +/*- + * |handle| pointer to opaque type OSSL_CORE_HANDLE. This can be used + * together with some functions passed via |in| to query data. + * |in| is the array of functions that the Core passes to the provider. + * |out| will be the array of base functions that the provider passes + * back to the Core. + * |provctx| a provider side context object, optionally created if the + * provider needs it. This value is passed to other provider + * functions, notably other context constructors. + */ +typedef int (OSSL_provider_init_fn)(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in, + const OSSL_DISPATCH **out, + void **provctx); +# ifdef __VMS +# pragma names save +# pragma names uppercase,truncated +# endif +OPENSSL_EXPORT OSSL_provider_init_fn OSSL_provider_init; +# ifdef __VMS +# pragma names restore +# endif + +/* + * Generic callback function signature. + * + * The expectation is that any provider function that wants to offer + * a callback / hook can do so by taking an argument with this type, + * as well as a pointer to caller-specific data. When calling the + * callback, the provider function can populate an OSSL_PARAM array + * with data of its choice and pass that in the callback call, along + * with the caller data argument. + * + * libcrypto may use the OSSL_PARAM array to create arguments for an + * application callback it knows about. + */ +typedef int (OSSL_CALLBACK)(const OSSL_PARAM params[], void *arg); +typedef int (OSSL_INOUT_CALLBACK)(const OSSL_PARAM in_params[], + OSSL_PARAM out_params[], void *arg); +/* + * Passphrase callback function signature + * + * This is similar to the generic callback function above, but adds a + * result parameter. + */ +typedef int (OSSL_PASSPHRASE_CALLBACK)(char *pass, size_t pass_size, + size_t *pass_len, + const OSSL_PARAM params[], void *arg); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_dispatch.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_dispatch.h new file mode 100644 index 00000000..11e3c861 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_dispatch.h @@ -0,0 +1,943 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_NUMBERS_H +# define OPENSSL_CORE_NUMBERS_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Identities + * ---------- + * + * All series start with 1, to allow 0 to be an array terminator. + * For any FUNC identity, we also provide a function signature typedef + * and a static inline function to extract a function pointer from a + * OSSL_DISPATCH element in a type safe manner. + * + * Names: + * for any function base name 'foo' (uppercase form 'FOO'), we will have + * the following: + * - a macro for the identity with the name OSSL_FUNC_'FOO' or derivatives + * thereof (to be specified further down) + * - a function signature typedef with the name OSSL_FUNC_'foo'_fn + * - a function pointer extractor function with the name OSSL_FUNC_'foo' + */ + +/* + * Helper macro to create the function signature typedef and the extractor + * |type| is the return-type of the function, |name| is the name of the + * function to fetch, and |args| is a parenthesized list of parameters + * for the function (that is, it is |name|'s function signature). + * Note: This is considered a "reserved" internal macro. Applications should + * not use this or assume its existence. + */ +#define OSSL_CORE_MAKE_FUNC(type,name,args) \ + typedef type (OSSL_FUNC_##name##_fn)args; \ + static ossl_unused ossl_inline \ + OSSL_FUNC_##name##_fn *OSSL_FUNC_##name(const OSSL_DISPATCH *opf) \ + { \ + return (OSSL_FUNC_##name##_fn *)opf->function; \ + } + +/* + * Core function identities, for the two OSSL_DISPATCH tables being passed + * in the OSSL_provider_init call. + * + * 0 serves as a marker for the end of the OSSL_DISPATCH array, and must + * therefore NEVER be used as a function identity. + */ +/* Functions provided by the Core to the provider, reserved numbers 1-1023 */ +# define OSSL_FUNC_CORE_GETTABLE_PARAMS 1 +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + core_gettable_params,(const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_GET_PARAMS 2 +OSSL_CORE_MAKE_FUNC(int,core_get_params,(const OSSL_CORE_HANDLE *prov, + OSSL_PARAM params[])) +# define OSSL_FUNC_CORE_THREAD_START 3 +OSSL_CORE_MAKE_FUNC(int,core_thread_start,(const OSSL_CORE_HANDLE *prov, + OSSL_thread_stop_handler_fn handfn, + void *arg)) +# define OSSL_FUNC_CORE_GET_LIBCTX 4 +OSSL_CORE_MAKE_FUNC(OPENSSL_CORE_CTX *,core_get_libctx, + (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_NEW_ERROR 5 +OSSL_CORE_MAKE_FUNC(void,core_new_error,(const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_SET_ERROR_DEBUG 6 +OSSL_CORE_MAKE_FUNC(void,core_set_error_debug, + (const OSSL_CORE_HANDLE *prov, + const char *file, int line, const char *func)) +# define OSSL_FUNC_CORE_VSET_ERROR 7 +OSSL_CORE_MAKE_FUNC(void,core_vset_error, + (const OSSL_CORE_HANDLE *prov, + uint32_t reason, const char *fmt, va_list args)) +# define OSSL_FUNC_CORE_SET_ERROR_MARK 8 +OSSL_CORE_MAKE_FUNC(int, core_set_error_mark, (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK 9 +OSSL_CORE_MAKE_FUNC(int, core_clear_last_error_mark, + (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_POP_ERROR_TO_MARK 10 +OSSL_CORE_MAKE_FUNC(int, core_pop_error_to_mark, (const OSSL_CORE_HANDLE *prov)) + + +/* Functions to access the OBJ database */ + +#define OSSL_FUNC_CORE_OBJ_ADD_SIGID 11 +#define OSSL_FUNC_CORE_OBJ_CREATE 12 + +OSSL_CORE_MAKE_FUNC(int, core_obj_add_sigid, + (const OSSL_CORE_HANDLE *prov, const char *sign_name, + const char *digest_name, const char *pkey_name)) +OSSL_CORE_MAKE_FUNC(int, core_obj_create, + (const OSSL_CORE_HANDLE *prov, const char *oid, + const char *sn, const char *ln)) + +/* Memory allocation, freeing, clearing. */ +#define OSSL_FUNC_CRYPTO_MALLOC 20 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_malloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_ZALLOC 21 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_zalloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_FREE 22 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_free, (void *ptr, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_CLEAR_FREE 23 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_clear_free, (void *ptr, size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_REALLOC 24 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_realloc, (void *addr, size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_CLEAR_REALLOC 25 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_clear_realloc, (void *addr, size_t old_num, size_t num, + const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_MALLOC 26 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_secure_malloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_ZALLOC 27 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_secure_zalloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_FREE 28 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_secure_free, (void *ptr, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_CLEAR_FREE 29 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_secure_clear_free, (void *ptr, size_t num, const char *file, + int line)) +#define OSSL_FUNC_CRYPTO_SECURE_ALLOCATED 30 +OSSL_CORE_MAKE_FUNC(int, + CRYPTO_secure_allocated, (const void *ptr)) +#define OSSL_FUNC_OPENSSL_CLEANSE 31 +OSSL_CORE_MAKE_FUNC(void, + OPENSSL_cleanse, (void *ptr, size_t len)) + +/* Bio functions provided by the core */ +#define OSSL_FUNC_BIO_NEW_FILE 40 +#define OSSL_FUNC_BIO_NEW_MEMBUF 41 +#define OSSL_FUNC_BIO_READ_EX 42 +#define OSSL_FUNC_BIO_WRITE_EX 43 +#define OSSL_FUNC_BIO_UP_REF 44 +#define OSSL_FUNC_BIO_FREE 45 +#define OSSL_FUNC_BIO_VPRINTF 46 +#define OSSL_FUNC_BIO_VSNPRINTF 47 +#define OSSL_FUNC_BIO_PUTS 48 +#define OSSL_FUNC_BIO_GETS 49 +#define OSSL_FUNC_BIO_CTRL 50 + + +OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_file, (const char *filename, + const char *mode)) +OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_membuf, (const void *buf, int len)) +OSSL_CORE_MAKE_FUNC(int, BIO_read_ex, (OSSL_CORE_BIO *bio, void *data, + size_t data_len, size_t *bytes_read)) +OSSL_CORE_MAKE_FUNC(int, BIO_write_ex, (OSSL_CORE_BIO *bio, const void *data, + size_t data_len, size_t *written)) +OSSL_CORE_MAKE_FUNC(int, BIO_gets, (OSSL_CORE_BIO *bio, char *buf, int size)) +OSSL_CORE_MAKE_FUNC(int, BIO_puts, (OSSL_CORE_BIO *bio, const char *str)) +OSSL_CORE_MAKE_FUNC(int, BIO_up_ref, (OSSL_CORE_BIO *bio)) +OSSL_CORE_MAKE_FUNC(int, BIO_free, (OSSL_CORE_BIO *bio)) +OSSL_CORE_MAKE_FUNC(int, BIO_vprintf, (OSSL_CORE_BIO *bio, const char *format, + va_list args)) +OSSL_CORE_MAKE_FUNC(int, BIO_vsnprintf, + (char *buf, size_t n, const char *fmt, va_list args)) +OSSL_CORE_MAKE_FUNC(int, BIO_ctrl, (OSSL_CORE_BIO *bio, + int cmd, long num, void *ptr)) + +#define OSSL_FUNC_SELF_TEST_CB 100 +OSSL_CORE_MAKE_FUNC(void, self_test_cb, (OPENSSL_CORE_CTX *ctx, OSSL_CALLBACK **cb, + void **cbarg)) + +/* Functions to get seed material from the operating system */ +#define OSSL_FUNC_GET_ENTROPY 101 +#define OSSL_FUNC_CLEANUP_ENTROPY 102 +#define OSSL_FUNC_GET_NONCE 103 +#define OSSL_FUNC_CLEANUP_NONCE 104 +OSSL_CORE_MAKE_FUNC(size_t, get_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, int entropy, + size_t min_len, size_t max_len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) +OSSL_CORE_MAKE_FUNC(size_t, get_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, size_t min_len, + size_t max_len, const void *salt, + size_t salt_len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) + +/* Functions to access the core's providers */ +#define OSSL_FUNC_PROVIDER_REGISTER_CHILD_CB 105 +#define OSSL_FUNC_PROVIDER_DEREGISTER_CHILD_CB 106 +#define OSSL_FUNC_PROVIDER_NAME 107 +#define OSSL_FUNC_PROVIDER_GET0_PROVIDER_CTX 108 +#define OSSL_FUNC_PROVIDER_GET0_DISPATCH 109 +#define OSSL_FUNC_PROVIDER_UP_REF 110 +#define OSSL_FUNC_PROVIDER_FREE 111 + +OSSL_CORE_MAKE_FUNC(int, provider_register_child_cb, + (const OSSL_CORE_HANDLE *handle, + int (*create_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata), + int (*remove_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata), + int (*global_props_cb)(const char *props, void *cbdata), + void *cbdata)) +OSSL_CORE_MAKE_FUNC(void, provider_deregister_child_cb, + (const OSSL_CORE_HANDLE *handle)) +OSSL_CORE_MAKE_FUNC(const char *, provider_name, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(void *, provider_get0_provider_ctx, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(const OSSL_DISPATCH *, provider_get0_dispatch, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(int, provider_up_ref, + (const OSSL_CORE_HANDLE *prov, int activate)) +OSSL_CORE_MAKE_FUNC(int, provider_free, + (const OSSL_CORE_HANDLE *prov, int deactivate)) + +/* Functions provided by the provider to the Core, reserved numbers 1024-1535 */ +# define OSSL_FUNC_PROVIDER_TEARDOWN 1024 +OSSL_CORE_MAKE_FUNC(void,provider_teardown,(void *provctx)) +# define OSSL_FUNC_PROVIDER_GETTABLE_PARAMS 1025 +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + provider_gettable_params,(void *provctx)) +# define OSSL_FUNC_PROVIDER_GET_PARAMS 1026 +OSSL_CORE_MAKE_FUNC(int,provider_get_params,(void *provctx, + OSSL_PARAM params[])) +# define OSSL_FUNC_PROVIDER_QUERY_OPERATION 1027 +OSSL_CORE_MAKE_FUNC(const OSSL_ALGORITHM *,provider_query_operation, + (void *provctx, int operation_id, int *no_store)) +# define OSSL_FUNC_PROVIDER_UNQUERY_OPERATION 1028 +OSSL_CORE_MAKE_FUNC(void, provider_unquery_operation, + (void *provctx, int operation_id, const OSSL_ALGORITHM *)) +# define OSSL_FUNC_PROVIDER_GET_REASON_STRINGS 1029 +OSSL_CORE_MAKE_FUNC(const OSSL_ITEM *,provider_get_reason_strings, + (void *provctx)) +# define OSSL_FUNC_PROVIDER_GET_CAPABILITIES 1030 +OSSL_CORE_MAKE_FUNC(int, provider_get_capabilities, (void *provctx, + const char *capability, OSSL_CALLBACK *cb, void *arg)) +# define OSSL_FUNC_PROVIDER_SELF_TEST 1031 +OSSL_CORE_MAKE_FUNC(int, provider_self_test, (void *provctx)) + +/* Operations */ + +# define OSSL_OP_DIGEST 1 +# define OSSL_OP_CIPHER 2 /* Symmetric Ciphers */ +# define OSSL_OP_MAC 3 +# define OSSL_OP_KDF 4 +# define OSSL_OP_RAND 5 +# define OSSL_OP_KEYMGMT 10 +# define OSSL_OP_KEYEXCH 11 +# define OSSL_OP_SIGNATURE 12 +# define OSSL_OP_ASYM_CIPHER 13 +# define OSSL_OP_KEM 14 +/* New section for non-EVP operations */ +# define OSSL_OP_ENCODER 20 +# define OSSL_OP_DECODER 21 +# define OSSL_OP_STORE 22 +/* Highest known operation number */ +# define OSSL_OP__HIGHEST 22 + +/* Digests */ + +# define OSSL_FUNC_DIGEST_NEWCTX 1 +# define OSSL_FUNC_DIGEST_INIT 2 +# define OSSL_FUNC_DIGEST_UPDATE 3 +# define OSSL_FUNC_DIGEST_FINAL 4 +# define OSSL_FUNC_DIGEST_DIGEST 5 +# define OSSL_FUNC_DIGEST_FREECTX 6 +# define OSSL_FUNC_DIGEST_DUPCTX 7 +# define OSSL_FUNC_DIGEST_GET_PARAMS 8 +# define OSSL_FUNC_DIGEST_SET_CTX_PARAMS 9 +# define OSSL_FUNC_DIGEST_GET_CTX_PARAMS 10 +# define OSSL_FUNC_DIGEST_GETTABLE_PARAMS 11 +# define OSSL_FUNC_DIGEST_SETTABLE_CTX_PARAMS 12 +# define OSSL_FUNC_DIGEST_GETTABLE_CTX_PARAMS 13 + +OSSL_CORE_MAKE_FUNC(void *, digest_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, digest_init, (void *dctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_update, + (void *dctx, const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, digest_final, + (void *dctx, + unsigned char *out, size_t *outl, size_t outsz)) +OSSL_CORE_MAKE_FUNC(int, digest_digest, + (void *provctx, const unsigned char *in, size_t inl, + unsigned char *out, size_t *outl, size_t outsz)) + +OSSL_CORE_MAKE_FUNC(void, digest_freectx, (void *dctx)) +OSSL_CORE_MAKE_FUNC(void *, digest_dupctx, (void *dctx)) + +OSSL_CORE_MAKE_FUNC(int, digest_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_set_ctx_params, + (void *vctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_get_ctx_params, + (void *vctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_settable_ctx_params, + (void *dctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_ctx_params, + (void *dctx, void *provctx)) + +/* Symmetric Ciphers */ + +# define OSSL_FUNC_CIPHER_NEWCTX 1 +# define OSSL_FUNC_CIPHER_ENCRYPT_INIT 2 +# define OSSL_FUNC_CIPHER_DECRYPT_INIT 3 +# define OSSL_FUNC_CIPHER_UPDATE 4 +# define OSSL_FUNC_CIPHER_FINAL 5 +# define OSSL_FUNC_CIPHER_CIPHER 6 +# define OSSL_FUNC_CIPHER_FREECTX 7 +# define OSSL_FUNC_CIPHER_DUPCTX 8 +# define OSSL_FUNC_CIPHER_GET_PARAMS 9 +# define OSSL_FUNC_CIPHER_GET_CTX_PARAMS 10 +# define OSSL_FUNC_CIPHER_SET_CTX_PARAMS 11 +# define OSSL_FUNC_CIPHER_GETTABLE_PARAMS 12 +# define OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS 13 +# define OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS 14 + +OSSL_CORE_MAKE_FUNC(void *, cipher_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, cipher_encrypt_init, (void *cctx, + const unsigned char *key, + size_t keylen, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_decrypt_init, (void *cctx, + const unsigned char *key, + size_t keylen, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_update, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize, + const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, cipher_final, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize)) +OSSL_CORE_MAKE_FUNC(int, cipher_cipher, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize, + const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(void, cipher_freectx, (void *cctx)) +OSSL_CORE_MAKE_FUNC(void *, cipher_dupctx, (void *cctx)) +OSSL_CORE_MAKE_FUNC(int, cipher_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_get_ctx_params, (void *cctx, + OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_set_ctx_params, (void *cctx, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_settable_ctx_params, + (void *cctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_ctx_params, + (void *cctx, void *provctx)) + +/* MACs */ + +# define OSSL_FUNC_MAC_NEWCTX 1 +# define OSSL_FUNC_MAC_DUPCTX 2 +# define OSSL_FUNC_MAC_FREECTX 3 +# define OSSL_FUNC_MAC_INIT 4 +# define OSSL_FUNC_MAC_UPDATE 5 +# define OSSL_FUNC_MAC_FINAL 6 +# define OSSL_FUNC_MAC_GET_PARAMS 7 +# define OSSL_FUNC_MAC_GET_CTX_PARAMS 8 +# define OSSL_FUNC_MAC_SET_CTX_PARAMS 9 +# define OSSL_FUNC_MAC_GETTABLE_PARAMS 10 +# define OSSL_FUNC_MAC_GETTABLE_CTX_PARAMS 11 +# define OSSL_FUNC_MAC_SETTABLE_CTX_PARAMS 12 + +OSSL_CORE_MAKE_FUNC(void *, mac_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, mac_dupctx, (void *src)) +OSSL_CORE_MAKE_FUNC(void, mac_freectx, (void *mctx)) +OSSL_CORE_MAKE_FUNC(int, mac_init, (void *mctx, const unsigned char *key, + size_t keylen, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_update, + (void *mctx, const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, mac_final, + (void *mctx, + unsigned char *out, size_t *outl, size_t outsize)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_ctx_params, + (void *mctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_settable_ctx_params, + (void *mctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, mac_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_get_ctx_params, + (void *mctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_set_ctx_params, + (void *mctx, const OSSL_PARAM params[])) + +/* KDFs and PRFs */ + +# define OSSL_FUNC_KDF_NEWCTX 1 +# define OSSL_FUNC_KDF_DUPCTX 2 +# define OSSL_FUNC_KDF_FREECTX 3 +# define OSSL_FUNC_KDF_RESET 4 +# define OSSL_FUNC_KDF_DERIVE 5 +# define OSSL_FUNC_KDF_GETTABLE_PARAMS 6 +# define OSSL_FUNC_KDF_GETTABLE_CTX_PARAMS 7 +# define OSSL_FUNC_KDF_SETTABLE_CTX_PARAMS 8 +# define OSSL_FUNC_KDF_GET_PARAMS 9 +# define OSSL_FUNC_KDF_GET_CTX_PARAMS 10 +# define OSSL_FUNC_KDF_SET_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, kdf_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, kdf_dupctx, (void *src)) +OSSL_CORE_MAKE_FUNC(void, kdf_freectx, (void *kctx)) +OSSL_CORE_MAKE_FUNC(void, kdf_reset, (void *kctx)) +OSSL_CORE_MAKE_FUNC(int, kdf_derive, (void *kctx, unsigned char *key, + size_t keylen, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_ctx_params, + (void *kctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_settable_ctx_params, + (void *kctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kdf_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kdf_get_ctx_params, + (void *kctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kdf_set_ctx_params, + (void *kctx, const OSSL_PARAM params[])) + +/* RAND */ + +# define OSSL_FUNC_RAND_NEWCTX 1 +# define OSSL_FUNC_RAND_FREECTX 2 +# define OSSL_FUNC_RAND_INSTANTIATE 3 +# define OSSL_FUNC_RAND_UNINSTANTIATE 4 +# define OSSL_FUNC_RAND_GENERATE 5 +# define OSSL_FUNC_RAND_RESEED 6 +# define OSSL_FUNC_RAND_NONCE 7 +# define OSSL_FUNC_RAND_ENABLE_LOCKING 8 +# define OSSL_FUNC_RAND_LOCK 9 +# define OSSL_FUNC_RAND_UNLOCK 10 +# define OSSL_FUNC_RAND_GETTABLE_PARAMS 11 +# define OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS 12 +# define OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS 13 +# define OSSL_FUNC_RAND_GET_PARAMS 14 +# define OSSL_FUNC_RAND_GET_CTX_PARAMS 15 +# define OSSL_FUNC_RAND_SET_CTX_PARAMS 16 +# define OSSL_FUNC_RAND_VERIFY_ZEROIZATION 17 +# define OSSL_FUNC_RAND_GET_SEED 18 +# define OSSL_FUNC_RAND_CLEAR_SEED 19 + +OSSL_CORE_MAKE_FUNC(void *,rand_newctx, + (void *provctx, void *parent, + const OSSL_DISPATCH *parent_calls)) +OSSL_CORE_MAKE_FUNC(void,rand_freectx, (void *vctx)) +OSSL_CORE_MAKE_FUNC(int,rand_instantiate, + (void *vdrbg, unsigned int strength, + int prediction_resistance, + const unsigned char *pstr, size_t pstr_len, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_uninstantiate, (void *vdrbg)) +OSSL_CORE_MAKE_FUNC(int,rand_generate, + (void *vctx, unsigned char *out, size_t outlen, + unsigned int strength, int prediction_resistance, + const unsigned char *addin, size_t addin_len)) +OSSL_CORE_MAKE_FUNC(int,rand_reseed, + (void *vctx, int prediction_resistance, + const unsigned char *ent, size_t ent_len, + const unsigned char *addin, size_t addin_len)) +OSSL_CORE_MAKE_FUNC(size_t,rand_nonce, + (void *vctx, unsigned char *out, unsigned int strength, + size_t min_noncelen, size_t max_noncelen)) +OSSL_CORE_MAKE_FUNC(int,rand_enable_locking, (void *vctx)) +OSSL_CORE_MAKE_FUNC(int,rand_lock, (void *vctx)) +OSSL_CORE_MAKE_FUNC(void,rand_unlock, (void *vctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_ctx_params, + (void *vctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_settable_ctx_params, + (void *vctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int,rand_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_get_ctx_params, + (void *vctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_set_ctx_params, + (void *vctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(void,rand_set_callbacks, + (void *vctx, OSSL_INOUT_CALLBACK *get_entropy, + OSSL_CALLBACK *cleanup_entropy, + OSSL_INOUT_CALLBACK *get_nonce, + OSSL_CALLBACK *cleanup_nonce, void *arg)) +OSSL_CORE_MAKE_FUNC(int,rand_verify_zeroization, + (void *vctx)) +OSSL_CORE_MAKE_FUNC(size_t,rand_get_seed, + (void *vctx, unsigned char **buffer, + int entropy, size_t min_len, size_t max_len, + int prediction_resistance, + const unsigned char *adin, size_t adin_len)) +OSSL_CORE_MAKE_FUNC(void,rand_clear_seed, + (void *vctx, unsigned char *buffer, size_t b_len)) + +/*- + * Key management + * + * The Key Management takes care of provider side key objects, and includes + * all current functionality to create them, destroy them, set parameters + * and key material, etc, essentially everything that manipulates the keys + * themselves and their parameters. + * + * The key objects are commonly referred to as |keydata|, and it MUST be able + * to contain parameters if the key has any, the public key and the private + * key. All parts are optional, but their presence determines what can be + * done with the key object in terms of encryption, signature, and so on. + * The assumption from libcrypto is that the key object contains any of the + * following data combinations: + * + * - parameters only + * - public key only + * - public key + private key + * - parameters + public key + * - parameters + public key + private key + * + * What "parameters", "public key" and "private key" means in detail is left + * to the implementation. In the case of DH and DSA, they would typically + * include domain parameters, while for certain variants of RSA, they would + * typically include PSS or OAEP parameters. + * + * Key objects are created with OSSL_FUNC_keymgmt_new() and destroyed with + * OSSL_FUNC_keymgmt_free(). Key objects can have data filled in with + * OSSL_FUNC_keymgmt_import(). + * + * Three functions are made available to check what selection of data is + * present in a key object: OSSL_FUNC_keymgmt_has_parameters(), + * OSSL_FUNC_keymgmt_has_public_key(), and OSSL_FUNC_keymgmt_has_private_key(), + */ + +/* Key data subset selection - individual bits */ +# define OSSL_KEYMGMT_SELECT_PRIVATE_KEY 0x01 +# define OSSL_KEYMGMT_SELECT_PUBLIC_KEY 0x02 +# define OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS 0x04 +# define OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS 0x80 + +/* Key data subset selection - combinations */ +# define OSSL_KEYMGMT_SELECT_ALL_PARAMETERS \ + ( OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS \ + | OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS) +# define OSSL_KEYMGMT_SELECT_KEYPAIR \ + ( OSSL_KEYMGMT_SELECT_PRIVATE_KEY | OSSL_KEYMGMT_SELECT_PUBLIC_KEY ) +# define OSSL_KEYMGMT_SELECT_ALL \ + ( OSSL_KEYMGMT_SELECT_KEYPAIR | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS ) + +# define OSSL_KEYMGMT_VALIDATE_FULL_CHECK 0 +# define OSSL_KEYMGMT_VALIDATE_QUICK_CHECK 1 + +/* Basic key object creation */ +# define OSSL_FUNC_KEYMGMT_NEW 1 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_new, (void *provctx)) + +/* Generation, a more complex constructor */ +# define OSSL_FUNC_KEYMGMT_GEN_INIT 2 +# define OSSL_FUNC_KEYMGMT_GEN_SET_TEMPLATE 3 +# define OSSL_FUNC_KEYMGMT_GEN_SET_PARAMS 4 +# define OSSL_FUNC_KEYMGMT_GEN_SETTABLE_PARAMS 5 +# define OSSL_FUNC_KEYMGMT_GEN 6 +# define OSSL_FUNC_KEYMGMT_GEN_CLEANUP 7 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen_init, + (void *provctx, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_template, + (void *genctx, void *templ)) +OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_params, + (void *genctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + keymgmt_gen_settable_params, + (void *genctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen, + (void *genctx, OSSL_CALLBACK *cb, void *cbarg)) +OSSL_CORE_MAKE_FUNC(void, keymgmt_gen_cleanup, (void *genctx)) + +/* Key loading by object reference */ +# define OSSL_FUNC_KEYMGMT_LOAD 8 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_load, + (const void *reference, size_t reference_sz)) + +/* Basic key object destruction */ +# define OSSL_FUNC_KEYMGMT_FREE 10 +OSSL_CORE_MAKE_FUNC(void, keymgmt_free, (void *keydata)) + +/* Key object information, with discovery */ +#define OSSL_FUNC_KEYMGMT_GET_PARAMS 11 +#define OSSL_FUNC_KEYMGMT_GETTABLE_PARAMS 12 +OSSL_CORE_MAKE_FUNC(int, keymgmt_get_params, + (void *keydata, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_gettable_params, + (void *provctx)) + +#define OSSL_FUNC_KEYMGMT_SET_PARAMS 13 +#define OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS 14 +OSSL_CORE_MAKE_FUNC(int, keymgmt_set_params, + (void *keydata, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_settable_params, + (void *provctx)) + +/* Key checks - discovery of supported operations */ +# define OSSL_FUNC_KEYMGMT_QUERY_OPERATION_NAME 20 +OSSL_CORE_MAKE_FUNC(const char *, keymgmt_query_operation_name, + (int operation_id)) + +/* Key checks - key data content checks */ +# define OSSL_FUNC_KEYMGMT_HAS 21 +OSSL_CORE_MAKE_FUNC(int, keymgmt_has, (const void *keydata, int selection)) + +/* Key checks - validation */ +# define OSSL_FUNC_KEYMGMT_VALIDATE 22 +OSSL_CORE_MAKE_FUNC(int, keymgmt_validate, (const void *keydata, int selection, + int checktype)) + +/* Key checks - matching */ +# define OSSL_FUNC_KEYMGMT_MATCH 23 +OSSL_CORE_MAKE_FUNC(int, keymgmt_match, + (const void *keydata1, const void *keydata2, + int selection)) + +/* Import and export functions, with discovery */ +# define OSSL_FUNC_KEYMGMT_IMPORT 40 +# define OSSL_FUNC_KEYMGMT_IMPORT_TYPES 41 +# define OSSL_FUNC_KEYMGMT_EXPORT 42 +# define OSSL_FUNC_KEYMGMT_EXPORT_TYPES 43 +OSSL_CORE_MAKE_FUNC(int, keymgmt_import, + (void *keydata, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_import_types, + (int selection)) +OSSL_CORE_MAKE_FUNC(int, keymgmt_export, + (void *keydata, int selection, + OSSL_CALLBACK *param_cb, void *cbarg)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types, + (int selection)) + +/* Dup function, constructor */ +# define OSSL_FUNC_KEYMGMT_DUP 44 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_dup, + (const void *keydata_from, int selection)) + +/* Key Exchange */ + +# define OSSL_FUNC_KEYEXCH_NEWCTX 1 +# define OSSL_FUNC_KEYEXCH_INIT 2 +# define OSSL_FUNC_KEYEXCH_DERIVE 3 +# define OSSL_FUNC_KEYEXCH_SET_PEER 4 +# define OSSL_FUNC_KEYEXCH_FREECTX 5 +# define OSSL_FUNC_KEYEXCH_DUPCTX 6 +# define OSSL_FUNC_KEYEXCH_SET_CTX_PARAMS 7 +# define OSSL_FUNC_KEYEXCH_SETTABLE_CTX_PARAMS 8 +# define OSSL_FUNC_KEYEXCH_GET_CTX_PARAMS 9 +# define OSSL_FUNC_KEYEXCH_GETTABLE_CTX_PARAMS 10 + +OSSL_CORE_MAKE_FUNC(void *, keyexch_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, keyexch_derive, (void *ctx, unsigned char *secret, + size_t *secretlen, size_t outlen)) +OSSL_CORE_MAKE_FUNC(int, keyexch_set_peer, (void *ctx, void *provkey)) +OSSL_CORE_MAKE_FUNC(void, keyexch_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, keyexch_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_set_ctx_params, (void *ctx, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_settable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_get_ctx_params, (void *ctx, + OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_gettable_ctx_params, + (void *ctx, void *provctx)) + +/* Signature */ + +# define OSSL_FUNC_SIGNATURE_NEWCTX 1 +# define OSSL_FUNC_SIGNATURE_SIGN_INIT 2 +# define OSSL_FUNC_SIGNATURE_SIGN 3 +# define OSSL_FUNC_SIGNATURE_VERIFY_INIT 4 +# define OSSL_FUNC_SIGNATURE_VERIFY 5 +# define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER_INIT 6 +# define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER 7 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_INIT 8 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_UPDATE 9 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_FINAL 10 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN 11 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_INIT 12 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_UPDATE 13 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_FINAL 14 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY 15 +# define OSSL_FUNC_SIGNATURE_FREECTX 16 +# define OSSL_FUNC_SIGNATURE_DUPCTX 17 +# define OSSL_FUNC_SIGNATURE_GET_CTX_PARAMS 18 +# define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_PARAMS 19 +# define OSSL_FUNC_SIGNATURE_SET_CTX_PARAMS 20 +# define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_PARAMS 21 +# define OSSL_FUNC_SIGNATURE_GET_CTX_MD_PARAMS 22 +# define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_MD_PARAMS 23 +# define OSSL_FUNC_SIGNATURE_SET_CTX_MD_PARAMS 24 +# define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_MD_PARAMS 25 + +OSSL_CORE_MAKE_FUNC(void *, signature_newctx, (void *provctx, + const char *propq)) +OSSL_CORE_MAKE_FUNC(int, signature_sign_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_sign, (void *ctx, unsigned char *sig, + size_t *siglen, size_t sigsize, + const unsigned char *tbs, + size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_verify_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_verify, (void *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_verify_recover_init, + (void *ctx, void *provkey, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_verify_recover, + (void *ctx, unsigned char *rout, size_t *routlen, + size_t routsize, const unsigned char *sig, size_t siglen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_init, + (void *ctx, const char *mdname, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_update, + (void *ctx, const unsigned char *data, size_t datalen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_final, + (void *ctx, unsigned char *sig, size_t *siglen, + size_t sigsize)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign, + (void *ctx, unsigned char *sigret, size_t *siglen, + size_t sigsize, const unsigned char *tbs, size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_init, + (void *ctx, const char *mdname, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_update, + (void *ctx, const unsigned char *data, size_t datalen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_final, + (void *ctx, const unsigned char *sig, size_t siglen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify, + (void *ctx, const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen)) +OSSL_CORE_MAKE_FUNC(void, signature_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, signature_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_md_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_md_params, + (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_md_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_md_params, + (void *ctx)) + + +/* Asymmetric Ciphers */ + +# define OSSL_FUNC_ASYM_CIPHER_NEWCTX 1 +# define OSSL_FUNC_ASYM_CIPHER_ENCRYPT_INIT 2 +# define OSSL_FUNC_ASYM_CIPHER_ENCRYPT 3 +# define OSSL_FUNC_ASYM_CIPHER_DECRYPT_INIT 4 +# define OSSL_FUNC_ASYM_CIPHER_DECRYPT 5 +# define OSSL_FUNC_ASYM_CIPHER_FREECTX 6 +# define OSSL_FUNC_ASYM_CIPHER_DUPCTX 7 +# define OSSL_FUNC_ASYM_CIPHER_GET_CTX_PARAMS 8 +# define OSSL_FUNC_ASYM_CIPHER_GETTABLE_CTX_PARAMS 9 +# define OSSL_FUNC_ASYM_CIPHER_SET_CTX_PARAMS 10 +# define OSSL_FUNC_ASYM_CIPHER_SETTABLE_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, asym_cipher_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt, (void *ctx, unsigned char *out, + size_t *outlen, + size_t outsize, + const unsigned char *in, + size_t inlen)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt, (void *ctx, unsigned char *out, + size_t *outlen, + size_t outsize, + const unsigned char *in, + size_t inlen)) +OSSL_CORE_MAKE_FUNC(void, asym_cipher_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, asym_cipher_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_get_ctx_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_settable_ctx_params, + (void *ctx, void *provctx)) + +/* Asymmetric Key encapsulation */ +# define OSSL_FUNC_KEM_NEWCTX 1 +# define OSSL_FUNC_KEM_ENCAPSULATE_INIT 2 +# define OSSL_FUNC_KEM_ENCAPSULATE 3 +# define OSSL_FUNC_KEM_DECAPSULATE_INIT 4 +# define OSSL_FUNC_KEM_DECAPSULATE 5 +# define OSSL_FUNC_KEM_FREECTX 6 +# define OSSL_FUNC_KEM_DUPCTX 7 +# define OSSL_FUNC_KEM_GET_CTX_PARAMS 8 +# define OSSL_FUNC_KEM_GETTABLE_CTX_PARAMS 9 +# define OSSL_FUNC_KEM_SET_CTX_PARAMS 10 +# define OSSL_FUNC_KEM_SETTABLE_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, kem_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kem_encapsulate_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_encapsulate, (void *ctx, + unsigned char *out, size_t *outlen, + unsigned char *secret, + size_t *secretlen)) +OSSL_CORE_MAKE_FUNC(int, kem_decapsulate_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_decapsulate, (void *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)) +OSSL_CORE_MAKE_FUNC(void, kem_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, kem_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, kem_get_ctx_params, (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kem_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_settable_ctx_params, + (void *ctx, void *provctx)) + +/* Encoders and decoders */ +# define OSSL_FUNC_ENCODER_NEWCTX 1 +# define OSSL_FUNC_ENCODER_FREECTX 2 +# define OSSL_FUNC_ENCODER_GET_PARAMS 3 +# define OSSL_FUNC_ENCODER_GETTABLE_PARAMS 4 +# define OSSL_FUNC_ENCODER_SET_CTX_PARAMS 5 +# define OSSL_FUNC_ENCODER_SETTABLE_CTX_PARAMS 6 +# define OSSL_FUNC_ENCODER_DOES_SELECTION 10 +# define OSSL_FUNC_ENCODER_ENCODE 11 +# define OSSL_FUNC_ENCODER_IMPORT_OBJECT 20 +# define OSSL_FUNC_ENCODER_FREE_OBJECT 21 +OSSL_CORE_MAKE_FUNC(void *, encoder_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void, encoder_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, encoder_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, encoder_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_settable_ctx_params, + (void *provctx)) + +OSSL_CORE_MAKE_FUNC(int, encoder_does_selection, + (void *provctx, int selection)) +OSSL_CORE_MAKE_FUNC(int, encoder_encode, + (void *ctx, OSSL_CORE_BIO *out, + const void *obj_raw, const OSSL_PARAM obj_abstract[], + int selection, + OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg)) + +OSSL_CORE_MAKE_FUNC(void *, encoder_import_object, + (void *ctx, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(void, encoder_free_object, (void *obj)) + +# define OSSL_FUNC_DECODER_NEWCTX 1 +# define OSSL_FUNC_DECODER_FREECTX 2 +# define OSSL_FUNC_DECODER_GET_PARAMS 3 +# define OSSL_FUNC_DECODER_GETTABLE_PARAMS 4 +# define OSSL_FUNC_DECODER_SET_CTX_PARAMS 5 +# define OSSL_FUNC_DECODER_SETTABLE_CTX_PARAMS 6 +# define OSSL_FUNC_DECODER_DOES_SELECTION 10 +# define OSSL_FUNC_DECODER_DECODE 11 +# define OSSL_FUNC_DECODER_EXPORT_OBJECT 20 +OSSL_CORE_MAKE_FUNC(void *, decoder_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void, decoder_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, decoder_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, decoder_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_settable_ctx_params, + (void *provctx)) + +OSSL_CORE_MAKE_FUNC(int, decoder_does_selection, + (void *provctx, int selection)) +OSSL_CORE_MAKE_FUNC(int, decoder_decode, + (void *ctx, OSSL_CORE_BIO *in, int selection, + OSSL_CALLBACK *data_cb, void *data_cbarg, + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) +OSSL_CORE_MAKE_FUNC(int, decoder_export_object, + (void *ctx, const void *objref, size_t objref_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg)) + +/*- + * Store + * + * Objects are scanned by using the 'open', 'load', 'eof' and 'close' + * functions, which implement an OSSL_STORE loader. + * + * store_load() works in a way that's very similar to the decoders, in + * that they pass an abstract object through a callback, either as a DER + * octet string or as an object reference, which libcrypto will have to + * deal with. + */ + +#define OSSL_FUNC_STORE_OPEN 1 +#define OSSL_FUNC_STORE_ATTACH 2 +#define OSSL_FUNC_STORE_SETTABLE_CTX_PARAMS 3 +#define OSSL_FUNC_STORE_SET_CTX_PARAMS 4 +#define OSSL_FUNC_STORE_LOAD 5 +#define OSSL_FUNC_STORE_EOF 6 +#define OSSL_FUNC_STORE_CLOSE 7 +#define OSSL_FUNC_STORE_EXPORT_OBJECT 8 +OSSL_CORE_MAKE_FUNC(void *, store_open, (void *provctx, const char *uri)) +OSSL_CORE_MAKE_FUNC(void *, store_attach, (void *provctx, OSSL_CORE_BIO *in)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, store_settable_ctx_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, store_set_ctx_params, + (void *loaderctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, store_load, + (void *loaderctx, + OSSL_CALLBACK *object_cb, void *object_cbarg, + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) +OSSL_CORE_MAKE_FUNC(int, store_eof, (void *loaderctx)) +OSSL_CORE_MAKE_FUNC(int, store_close, (void *loaderctx)) +OSSL_CORE_MAKE_FUNC(int, store_export_object, + (void *loaderctx, const void *objref, size_t objref_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg)) + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h new file mode 100644 index 00000000..5e3c132f --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h @@ -0,0 +1,560 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_NAMES_H +# define OPENSSL_CORE_NAMES_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* Well known parameter names that core passes to providers */ +#define OSSL_PROV_PARAM_CORE_VERSION "openssl-version" /* utf8_ptr */ +#define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name" /* utf8_ptr */ +#define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename" /* utf8_ptr */ + +/* Well known parameter names that Providers can define */ +#define OSSL_PROV_PARAM_NAME "name" /* utf8_ptr */ +#define OSSL_PROV_PARAM_VERSION "version" /* utf8_ptr */ +#define OSSL_PROV_PARAM_BUILDINFO "buildinfo" /* utf8_ptr */ +#define OSSL_PROV_PARAM_STATUS "status" /* uint */ +#define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks" /* uint */ +#define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" /* uint */ +#define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" /* uint */ + +/* Self test callback parameters */ +#define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase" /* utf8_string */ +#define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type" /* utf8_string */ +#define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc" /* utf8_string */ + +/*- + * Provider-native object abstractions + * + * These are used when a provider wants to pass object data or an object + * reference back to libcrypto. This is only useful for provider functions + * that take a callback to which an OSSL_PARAM array with these parameters + * can be passed. + * + * This set of parameter names is explained in detail in provider-object(7) + * (doc/man7/provider-object.pod) + */ +#define OSSL_OBJECT_PARAM_TYPE "type" /* INTEGER */ +#define OSSL_OBJECT_PARAM_DATA_TYPE "data-type" /* UTF8_STRING */ +#define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure" /* UTF8_STRING */ +#define OSSL_OBJECT_PARAM_REFERENCE "reference" /* OCTET_STRING */ +#define OSSL_OBJECT_PARAM_DATA "data" /* OCTET_STRING or UTF8_STRING */ +#define OSSL_OBJECT_PARAM_DESC "desc" /* UTF8_STRING */ + +/* + * Algorithm parameters + * If "engine" or "properties" are specified, they should always be paired + * with the algorithm type. + * Note these are common names that are shared by many types (such as kdf, mac, + * and pkey) e.g: see OSSL_MAC_PARAM_DIGEST below. + */ +#define OSSL_ALG_PARAM_DIGEST "digest" /* utf8_string */ +#define OSSL_ALG_PARAM_CIPHER "cipher" /* utf8_string */ +#define OSSL_ALG_PARAM_ENGINE "engine" /* utf8_string */ +#define OSSL_ALG_PARAM_MAC "mac" /* utf8_string */ +#define OSSL_ALG_PARAM_PROPERTIES "properties"/* utf8_string */ + +/* cipher parameters */ +#define OSSL_CIPHER_PARAM_PADDING "padding" /* uint */ +#define OSSL_CIPHER_PARAM_USE_BITS "use-bits" /* uint */ +#define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version" /* uint */ +#define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac" /* octet_ptr */ +#define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size" /* size_t */ +#define OSSL_CIPHER_PARAM_MODE "mode" /* uint */ +#define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD "aead" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_CTS "cts" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_KEYLEN "keylen" /* size_t */ +#define OSSL_CIPHER_PARAM_IVLEN "ivlen" /* size_t */ +#define OSSL_CIPHER_PARAM_IV "iv" /* octet_string OR octet_ptr */ +#define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv" /* octet_string OR octet_ptr */ +#define OSSL_CIPHER_PARAM_NUM "num" /* uint */ +#define OSSL_CIPHER_PARAM_ROUNDS "rounds" /* uint */ +#define OSSL_CIPHER_PARAM_AEAD_TAG "tag" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN +#define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" /* octet_string */ +#define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" /* octet_string */ +#define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" /* size_t */ +#define OSSL_CIPHER_PARAM_SPEED "speed" /* uint */ +#define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" /* utf8_string */ +/* For passing the AlgorithmIdentifier parameter in DER form */ +#define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS "alg_id_param" /* octet_string */ + +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT \ + "tls1multi_maxsndfrag" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE \ + "tls1multi_maxbufsz" /* size_t */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE \ + "tls1multi_interleave" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD \ + "tls1multi_aad" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN \ + "tls1multi_aadpacklen" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC \ + "tls1multi_enc" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN \ + "tls1multi_encin" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN \ + "tls1multi_enclen" /* size_t */ + +/* OSSL_CIPHER_PARAM_CTS_MODE Values */ +#define OSSL_CIPHER_CTS_MODE_CS1 "CS1" +#define OSSL_CIPHER_CTS_MODE_CS2 "CS2" +#define OSSL_CIPHER_CTS_MODE_CS3 "CS3" + +/* digest parameters */ +#define OSSL_DIGEST_PARAM_XOFLEN "xoflen" /* size_t */ +#define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" /* octet string */ +#define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" /* uint */ +#define OSSL_DIGEST_PARAM_MICALG "micalg" /* utf8 string */ +#define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" /* size_t */ +#define OSSL_DIGEST_PARAM_SIZE "size" /* size_t */ +#define OSSL_DIGEST_PARAM_XOF "xof" /* int, 0 or 1 */ +#define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" /* int, 0 or 1 */ + +/* Known DIGEST names (not a complete list) */ +#define OSSL_DIGEST_NAME_MD5 "MD5" +#define OSSL_DIGEST_NAME_MD5_SHA1 "MD5-SHA1" +#define OSSL_DIGEST_NAME_SHA1 "SHA1" +#define OSSL_DIGEST_NAME_SHA2_224 "SHA2-224" +#define OSSL_DIGEST_NAME_SHA2_256 "SHA2-256" +#define OSSL_DIGEST_NAME_SHA2_384 "SHA2-384" +#define OSSL_DIGEST_NAME_SHA2_512 "SHA2-512" +#define OSSL_DIGEST_NAME_SHA2_512_224 "SHA2-512/224" +#define OSSL_DIGEST_NAME_SHA2_512_256 "SHA2-512/256" +#define OSSL_DIGEST_NAME_MD2 "MD2" +#define OSSL_DIGEST_NAME_MD4 "MD4" +#define OSSL_DIGEST_NAME_MDC2 "MDC2" +#define OSSL_DIGEST_NAME_RIPEMD160 "RIPEMD160" +#define OSSL_DIGEST_NAME_SHA3_224 "SHA3-224" +#define OSSL_DIGEST_NAME_SHA3_256 "SHA3-256" +#define OSSL_DIGEST_NAME_SHA3_384 "SHA3-384" +#define OSSL_DIGEST_NAME_SHA3_512 "SHA3-512" +#define OSSL_DIGEST_NAME_KECCAK_KMAC128 "KECCAK-KMAC-128" +#define OSSL_DIGEST_NAME_KECCAK_KMAC256 "KECCAK-KMAC-256" +#define OSSL_DIGEST_NAME_SM3 "SM3" + +/* MAC parameters */ +#define OSSL_MAC_PARAM_KEY "key" /* octet string */ +#define OSSL_MAC_PARAM_IV "iv" /* octet string */ +#define OSSL_MAC_PARAM_CUSTOM "custom" /* utf8 string */ +#define OSSL_MAC_PARAM_SALT "salt" /* octet string */ +#define OSSL_MAC_PARAM_XOF "xof" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_C_ROUNDS "c-rounds" /* unsigned int */ +#define OSSL_MAC_PARAM_D_ROUNDS "d-rounds" /* unsigned int */ + +/* + * If "engine" or "properties" are specified, they should always be paired + * with "cipher" or "digest". + */ +#define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ +#define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ +#define OSSL_MAC_PARAM_SIZE "size" /* size_t */ +#define OSSL_MAC_PARAM_BLOCK_SIZE "block-size" /* size_t */ +#define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size" /* size_t */ + +/* Known MAC names */ +#define OSSL_MAC_NAME_BLAKE2BMAC "BLAKE2BMAC" +#define OSSL_MAC_NAME_BLAKE2SMAC "BLAKE2SMAC" +#define OSSL_MAC_NAME_CMAC "CMAC" +#define OSSL_MAC_NAME_GMAC "GMAC" +#define OSSL_MAC_NAME_HMAC "HMAC" +#define OSSL_MAC_NAME_KMAC128 "KMAC128" +#define OSSL_MAC_NAME_KMAC256 "KMAC256" +#define OSSL_MAC_NAME_POLY1305 "POLY1305" +#define OSSL_MAC_NAME_SIPHASH "SIPHASH" + +/* KDF / PRF parameters */ +#define OSSL_KDF_PARAM_SECRET "secret" /* octet string */ +#define OSSL_KDF_PARAM_KEY "key" /* octet string */ +#define OSSL_KDF_PARAM_SALT "salt" /* octet string */ +#define OSSL_KDF_PARAM_PASSWORD "pass" /* octet string */ +#define OSSL_KDF_PARAM_PREFIX "prefix" /* octet string */ +#define OSSL_KDF_PARAM_LABEL "label" /* octet string */ +#define OSSL_KDF_PARAM_DATA "data" /* octet string */ +#define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ +#define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC /* utf8 string */ +#define OSSL_KDF_PARAM_MAC_SIZE "maclen" /* size_t */ +#define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ +#define OSSL_KDF_PARAM_ITER "iter" /* unsigned int */ +#define OSSL_KDF_PARAM_MODE "mode" /* utf8 string or int */ +#define OSSL_KDF_PARAM_PKCS5 "pkcs5" /* int */ +#define OSSL_KDF_PARAM_UKM "ukm" /* octet string */ +#define OSSL_KDF_PARAM_CEK_ALG "cekalg" /* utf8 string */ +#define OSSL_KDF_PARAM_SCRYPT_N "n" /* uint64_t */ +#define OSSL_KDF_PARAM_SCRYPT_R "r" /* uint32_t */ +#define OSSL_KDF_PARAM_SCRYPT_P "p" /* uint32_t */ +#define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes" /* uint64_t */ +#define OSSL_KDF_PARAM_INFO "info" /* octet string */ +#define OSSL_KDF_PARAM_SEED "seed" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_TYPE "type" /* int */ +#define OSSL_KDF_PARAM_SIZE "size" /* size_t */ +#define OSSL_KDF_PARAM_CONSTANT "constant" /* octet string */ +#define OSSL_KDF_PARAM_PKCS12_ID "id" /* int */ +#define OSSL_KDF_PARAM_KBKDF_USE_L "use-l" /* int */ +#define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator" /* int */ +#define OSSL_KDF_PARAM_KBKDF_R "r" /* int */ +#define OSSL_KDF_PARAM_X942_ACVPINFO "acvp-info" +#define OSSL_KDF_PARAM_X942_PARTYUINFO "partyu-info" +#define OSSL_KDF_PARAM_X942_PARTYVINFO "partyv-info" +#define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo" +#define OSSL_KDF_PARAM_X942_SUPP_PRIVINFO "supp-privinfo" +#define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits" + +/* Known KDF names */ +#define OSSL_KDF_NAME_HKDF "HKDF" +#define OSSL_KDF_NAME_TLS1_3_KDF "TLS13-KDF" +#define OSSL_KDF_NAME_PBKDF1 "PBKDF1" +#define OSSL_KDF_NAME_PBKDF2 "PBKDF2" +#define OSSL_KDF_NAME_SCRYPT "SCRYPT" +#define OSSL_KDF_NAME_SSHKDF "SSHKDF" +#define OSSL_KDF_NAME_SSKDF "SSKDF" +#define OSSL_KDF_NAME_TLS1_PRF "TLS1-PRF" +#define OSSL_KDF_NAME_X942KDF_ASN1 "X942KDF-ASN1" +#define OSSL_KDF_NAME_X942KDF_CONCAT "X942KDF-CONCAT" +#define OSSL_KDF_NAME_X963KDF "X963KDF" +#define OSSL_KDF_NAME_KBKDF "KBKDF" +#define OSSL_KDF_NAME_KRB5KDF "KRB5KDF" + +/* Known RAND names */ +#define OSSL_RAND_PARAM_STATE "state" +#define OSSL_RAND_PARAM_STRENGTH "strength" +#define OSSL_RAND_PARAM_MAX_REQUEST "max_request" +#define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy" +#define OSSL_RAND_PARAM_TEST_NONCE "test_nonce" + +/* RAND/DRBG names */ +#define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests" +#define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval" +#define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen" +#define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen" +#define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen" +#define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen" +#define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen" +#define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen" +#define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter" +#define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time" +#define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +#define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +#define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC +#define OSSL_DRBG_PARAM_USE_DF "use_derivation_function" + +/* DRBG call back parameters */ +#define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required" +#define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance" +#define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length" +#define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length" +#define OSSL_DRBG_PARAM_RANDOM_DATA "random_data" +#define OSSL_DRBG_PARAM_SIZE "size" + +/* PKEY parameters */ +/* Common PKEY parameters */ +#define OSSL_PKEY_PARAM_BITS "bits" /* integer */ +#define OSSL_PKEY_PARAM_MAX_SIZE "max-size" /* integer */ +#define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" /* integer */ +#define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE /* utf8 string */ +#define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +#define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" /* utf8 string */ +#define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" /* utf8 string */ +#define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" +#define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size" +#define OSSL_PKEY_PARAM_MASKGENFUNC "mgf" +#define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest" +#define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties" +#define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" +#define OSSL_PKEY_PARAM_GROUP_NAME "group" +#define OSSL_PKEY_PARAM_DIST_ID "distid" +#define OSSL_PKEY_PARAM_PUB_KEY "pub" +#define OSSL_PKEY_PARAM_PRIV_KEY "priv" + +/* Diffie-Hellman/DSA Parameters */ +#define OSSL_PKEY_PARAM_FFC_P "p" +#define OSSL_PKEY_PARAM_FFC_G "g" +#define OSSL_PKEY_PARAM_FFC_Q "q" +#define OSSL_PKEY_PARAM_FFC_GINDEX "gindex" +#define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter" +#define OSSL_PKEY_PARAM_FFC_SEED "seed" +#define OSSL_PKEY_PARAM_FFC_COFACTOR "j" +#define OSSL_PKEY_PARAM_FFC_H "hindex" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy" + +/* Diffie-Hellman params */ +#define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" +#define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len" + +/* Elliptic Curve Domain Parameters */ +#define OSSL_PKEY_PARAM_EC_PUB_X "qx" +#define OSSL_PKEY_PARAM_EC_PUB_Y "qy" + +/* Elliptic Curve Explicit Domain Parameters */ +#define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" +#define OSSL_PKEY_PARAM_EC_P "p" +#define OSSL_PKEY_PARAM_EC_A "a" +#define OSSL_PKEY_PARAM_EC_B "b" +#define OSSL_PKEY_PARAM_EC_GENERATOR "generator" +#define OSSL_PKEY_PARAM_EC_ORDER "order" +#define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" +#define OSSL_PKEY_PARAM_EC_SEED "seed" +#define OSSL_PKEY_PARAM_EC_CHAR2_M "m" +#define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type" +#define OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS "tp" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K1 "k1" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K2 "k2" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K3 "k3" +#define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" + +/* Elliptic Curve Key Parameters */ +#define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" +#define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH \ + OSSL_PKEY_PARAM_USE_COFACTOR_FLAG + +/* RSA Keys */ +/* + * n, e, d are the usual public and private key components + * + * rsa-num is the number of factors, including p and q + * rsa-factor is used for each factor: p, q, r_i (i = 3, ...) + * rsa-exponent is used for each exponent: dP, dQ, d_i (i = 3, ...) + * rsa-coefficient is used for each coefficient: qInv, t_i (i = 3, ...) + * + * The number of rsa-factor items must be equal to the number of rsa-exponent + * items, and the number of rsa-coefficients must be one less. + * (the base i for the coefficients is 2, not 1, at least as implied by + * RFC 8017) + */ +#define OSSL_PKEY_PARAM_RSA_N "n" +#define OSSL_PKEY_PARAM_RSA_E "e" +#define OSSL_PKEY_PARAM_RSA_D "d" +#define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor" +#define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" +#define OSSL_PKEY_PARAM_RSA_FACTOR1 OSSL_PKEY_PARAM_RSA_FACTOR"1" +#define OSSL_PKEY_PARAM_RSA_FACTOR2 OSSL_PKEY_PARAM_RSA_FACTOR"2" +#define OSSL_PKEY_PARAM_RSA_FACTOR3 OSSL_PKEY_PARAM_RSA_FACTOR"3" +#define OSSL_PKEY_PARAM_RSA_FACTOR4 OSSL_PKEY_PARAM_RSA_FACTOR"4" +#define OSSL_PKEY_PARAM_RSA_FACTOR5 OSSL_PKEY_PARAM_RSA_FACTOR"5" +#define OSSL_PKEY_PARAM_RSA_FACTOR6 OSSL_PKEY_PARAM_RSA_FACTOR"6" +#define OSSL_PKEY_PARAM_RSA_FACTOR7 OSSL_PKEY_PARAM_RSA_FACTOR"7" +#define OSSL_PKEY_PARAM_RSA_FACTOR8 OSSL_PKEY_PARAM_RSA_FACTOR"8" +#define OSSL_PKEY_PARAM_RSA_FACTOR9 OSSL_PKEY_PARAM_RSA_FACTOR"9" +#define OSSL_PKEY_PARAM_RSA_FACTOR10 OSSL_PKEY_PARAM_RSA_FACTOR"10" +#define OSSL_PKEY_PARAM_RSA_EXPONENT1 OSSL_PKEY_PARAM_RSA_EXPONENT"1" +#define OSSL_PKEY_PARAM_RSA_EXPONENT2 OSSL_PKEY_PARAM_RSA_EXPONENT"2" +#define OSSL_PKEY_PARAM_RSA_EXPONENT3 OSSL_PKEY_PARAM_RSA_EXPONENT"3" +#define OSSL_PKEY_PARAM_RSA_EXPONENT4 OSSL_PKEY_PARAM_RSA_EXPONENT"4" +#define OSSL_PKEY_PARAM_RSA_EXPONENT5 OSSL_PKEY_PARAM_RSA_EXPONENT"5" +#define OSSL_PKEY_PARAM_RSA_EXPONENT6 OSSL_PKEY_PARAM_RSA_EXPONENT"6" +#define OSSL_PKEY_PARAM_RSA_EXPONENT7 OSSL_PKEY_PARAM_RSA_EXPONENT"7" +#define OSSL_PKEY_PARAM_RSA_EXPONENT8 OSSL_PKEY_PARAM_RSA_EXPONENT"8" +#define OSSL_PKEY_PARAM_RSA_EXPONENT9 OSSL_PKEY_PARAM_RSA_EXPONENT"9" +#define OSSL_PKEY_PARAM_RSA_EXPONENT10 OSSL_PKEY_PARAM_RSA_EXPONENT"10" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 OSSL_PKEY_PARAM_RSA_COEFFICIENT"1" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 OSSL_PKEY_PARAM_RSA_COEFFICIENT"2" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 OSSL_PKEY_PARAM_RSA_COEFFICIENT"3" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 OSSL_PKEY_PARAM_RSA_COEFFICIENT"4" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 OSSL_PKEY_PARAM_RSA_COEFFICIENT"5" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 OSSL_PKEY_PARAM_RSA_COEFFICIENT"6" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 OSSL_PKEY_PARAM_RSA_COEFFICIENT"7" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 OSSL_PKEY_PARAM_RSA_COEFFICIENT"8" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 OSSL_PKEY_PARAM_RSA_COEFFICIENT"9" + +/* RSA padding modes */ +#define OSSL_PKEY_RSA_PAD_MODE_NONE "none" +#define OSSL_PKEY_RSA_PAD_MODE_PKCSV15 "pkcs1" +#define OSSL_PKEY_RSA_PAD_MODE_OAEP "oaep" +#define OSSL_PKEY_RSA_PAD_MODE_X931 "x931" +#define OSSL_PKEY_RSA_PAD_MODE_PSS "pss" + +/* RSA pss padding salt length */ +#define OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST "digest" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_MAX "max" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO "auto" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX "auto-digestmax" + +/* Key generation parameters */ +#define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS +#define OSSL_PKEY_PARAM_RSA_PRIMES "primes" +#define OSSL_PKEY_PARAM_RSA_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_PKEY_PARAM_RSA_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_PKEY_PARAM_RSA_MASKGENFUNC OSSL_PKEY_PARAM_MASKGENFUNC +#define OSSL_PKEY_PARAM_RSA_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen" + +/* Key generation parameters */ +#define OSSL_PKEY_PARAM_FFC_TYPE "type" +#define OSSL_PKEY_PARAM_FFC_PBITS "pbits" +#define OSSL_PKEY_PARAM_FFC_QBITS "qbits" +#define OSSL_PKEY_PARAM_FFC_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_PKEY_PARAM_FFC_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES + +#define OSSL_PKEY_PARAM_EC_ENCODING "encoding" /* utf8_string */ +#define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format" +#define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" +#define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public" + +/* OSSL_PKEY_PARAM_EC_ENCODING values */ +#define OSSL_PKEY_EC_ENCODING_EXPLICIT "explicit" +#define OSSL_PKEY_EC_ENCODING_GROUP "named_curve" + +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_UNCOMPRESSED "uncompressed" +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_COMPRESSED "compressed" +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_HYBRID "hybrid" + +#define OSSL_PKEY_EC_GROUP_CHECK_DEFAULT "default" +#define OSSL_PKEY_EC_GROUP_CHECK_NAMED "named" +#define OSSL_PKEY_EC_GROUP_CHECK_NAMED_NIST "named-nist" + +/* Key Exchange parameters */ +#define OSSL_EXCHANGE_PARAM_PAD "pad" /* uint */ +#define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode" /* int */ +#define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen" /* size_t */ +/* The following parameter is an octet_string on set and an octet_ptr on get */ +#define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm" + +/* Signature parameters */ +#define OSSL_SIGNATURE_PARAM_ALGORITHM_ID "algorithm-id" +#define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE +#define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" +#define OSSL_SIGNATURE_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES \ + OSSL_PKEY_PARAM_MGF1_PROPERTIES +#define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE + +/* Asym cipher parameters */ +#define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE +#define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE +#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST \ + OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS \ + OSSL_PKEY_PARAM_MGF1_PROPERTIES +#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS "digest-props" +/* The following parameter is an octet_string on set and an octet_ptr on get */ +#define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label" +#define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version" +#define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version" + +/* + * Encoder / decoder parameters + */ +#define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +#define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +/* Currently PVK only, but reusable for others as needed */ +#define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level" +#define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters" /* integer */ + +#define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES + +/* Passphrase callback parameters */ +#define OSSL_PASSPHRASE_PARAM_INFO "info" + +/* Keygen callback parameters, from provider to libcrypto */ +#define OSSL_GEN_PARAM_POTENTIAL "potential" /* integer */ +#define OSSL_GEN_PARAM_ITERATION "iteration" /* integer */ + +/* ACVP Test parameters : These should not be used normally */ +#define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1" +#define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2" +#define OSSL_PKEY_PARAM_RSA_TEST_XP "xp" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq" +#define OSSL_PKEY_PARAM_RSA_TEST_P1 "p1" +#define OSSL_PKEY_PARAM_RSA_TEST_P2 "p2" +#define OSSL_PKEY_PARAM_RSA_TEST_Q1 "q1" +#define OSSL_PKEY_PARAM_RSA_TEST_Q2 "q2" +#define OSSL_SIGNATURE_PARAM_KAT "kat" + +/* KEM parameters */ +#define OSSL_KEM_PARAM_OPERATION "operation" + +/* OSSL_KEM_PARAM_OPERATION values */ +#define OSSL_KEM_PARAM_OPERATION_RSASVE "RSASVE" + +/* Capabilities */ + +/* TLS-GROUP Capability */ +#define OSSL_CAPABILITY_TLS_GROUP_NAME "tls-group-name" +#define OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL "tls-group-name-internal" +#define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id" +#define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg" +#define OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS "tls-group-sec-bits" +#define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem" +#define OSSL_CAPABILITY_TLS_GROUP_MIN_TLS "tls-min-tls" +#define OSSL_CAPABILITY_TLS_GROUP_MAX_TLS "tls-max-tls" +#define OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS "tls-min-dtls" +#define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls" + +/*- + * storemgmt parameters + */ + +/* + * Used by storemgmt_ctx_set_params(): + * + * - OSSL_STORE_PARAM_EXPECT is an INTEGER, and the value is any of the + * OSSL_STORE_INFO numbers. This is used to set the expected type of + * object loaded. + * + * - OSSL_STORE_PARAM_SUBJECT, OSSL_STORE_PARAM_ISSUER, + * OSSL_STORE_PARAM_SERIAL, OSSL_STORE_PARAM_FINGERPRINT, + * OSSL_STORE_PARAM_DIGEST, OSSL_STORE_PARAM_ALIAS + * are used as search criteria. + * (OSSL_STORE_PARAM_DIGEST is used with OSSL_STORE_PARAM_FINGERPRINT) + */ +#define OSSL_STORE_PARAM_EXPECT "expect" /* INTEGER */ +#define OSSL_STORE_PARAM_SUBJECT "subject" /* DER blob => OCTET_STRING */ +#define OSSL_STORE_PARAM_ISSUER "name" /* DER blob => OCTET_STRING */ +#define OSSL_STORE_PARAM_SERIAL "serial" /* INTEGER */ +#define OSSL_STORE_PARAM_DIGEST "digest" /* UTF8_STRING */ +#define OSSL_STORE_PARAM_FINGERPRINT "fingerprint" /* OCTET_STRING */ +#define OSSL_STORE_PARAM_ALIAS "alias" /* UTF8_STRING */ + +/* You may want to pass properties for the provider implementation to use */ +#define OSSL_STORE_PARAM_PROPERTIES "properties" /* utf8_string */ +/* OSSL_DECODER input type if a decoder is used by the store */ +#define OSSL_STORE_PARAM_INPUT_TYPE "input-type" /* UTF8_STRING */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_object.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_object.h new file mode 100644 index 00000000..62ccf39d --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_object.h @@ -0,0 +1,41 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_OBJECT_H +# define OPENSSL_CORE_OBJECT_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Known object types + * + * These numbers are used as values for the OSSL_PARAM parameter + * OSSL_OBJECT_PARAM_TYPE. + * + * For most of these types, there's a corresponding libcrypto object type. + * The corresponding type is indicated with a comment after the number. + */ +# define OSSL_OBJECT_UNKNOWN 0 +# define OSSL_OBJECT_NAME 1 /* char * */ +# define OSSL_OBJECT_PKEY 2 /* EVP_PKEY * */ +# define OSSL_OBJECT_CERT 3 /* X509 * */ +# define OSSL_OBJECT_CRL 4 /* X509_CRL * */ + +/* + * The rest of the associated OSSL_PARAM elements is described in core_names.h + */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h new file mode 100644 index 00000000..71b747ed --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h @@ -0,0 +1,227 @@ +/*- + * WARNING: do not edit! + * Generated by Makefile from include/openssl/crmf.h.in + * + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * CRMF (RFC 4211) implementation by M. Peylo, M. Viljanen, and D. von Oheimb. + */ + + + +#ifndef OPENSSL_CRMF_H +# define OPENSSL_CRMF_H + +# include + +# ifndef OPENSSL_NO_CRMF +# include +# include +# include +# include /* for GENERAL_NAME etc. */ + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CRMF_POPOPRIVKEY_THISMESSAGE 0 +# define OSSL_CRMF_POPOPRIVKEY_SUBSEQUENTMESSAGE 1 +# define OSSL_CRMF_POPOPRIVKEY_DHMAC 2 +# define OSSL_CRMF_POPOPRIVKEY_AGREEMAC 3 +# define OSSL_CRMF_POPOPRIVKEY_ENCRYPTEDKEY 4 + +# define OSSL_CRMF_SUBSEQUENTMESSAGE_ENCRCERT 0 +# define OSSL_CRMF_SUBSEQUENTMESSAGE_CHALLENGERESP 1 + +typedef struct ossl_crmf_encryptedvalue_st OSSL_CRMF_ENCRYPTEDVALUE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDVALUE) +typedef struct ossl_crmf_msg_st OSSL_CRMF_MSG; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSG) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_MSG, OSSL_CRMF_MSG, OSSL_CRMF_MSG) +#define sk_OSSL_CRMF_MSG_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_value(sk, idx) ((OSSL_CRMF_MSG *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), (idx))) +#define sk_OSSL_CRMF_MSG_new(cmp) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp))) +#define sk_OSSL_CRMF_MSG_new_null() ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CRMF_MSG_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_MSG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (n)) +#define sk_OSSL_CRMF_MSG_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_delete(sk, i) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (i))) +#define sk_OSSL_CRMF_MSG_delete_ptr(sk, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr))) +#define sk_OSSL_CRMF_MSG_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_pop(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_shift(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk),ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_MSG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), (idx)) +#define sk_OSSL_CRMF_MSG_set(sk, idx, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (idx), ossl_check_OSSL_CRMF_MSG_type(ptr))) +#define sk_OSSL_CRMF_MSG_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), pnum) +#define sk_OSSL_CRMF_MSG_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_dup(sk) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc))) +#define sk_OSSL_CRMF_MSG_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_MSG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp))) + +typedef struct ossl_crmf_attributetypeandvalue_st OSSL_CRMF_ATTRIBUTETYPEANDVALUE; +typedef struct ossl_crmf_pbmparameter_st OSSL_CRMF_PBMPARAMETER; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PBMPARAMETER) +typedef struct ossl_crmf_poposigningkey_st OSSL_CRMF_POPOSIGNINGKEY; +typedef struct ossl_crmf_certrequest_st OSSL_CRMF_CERTREQUEST; +typedef struct ossl_crmf_certid_st OSSL_CRMF_CERTID; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTID) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_CERTID, OSSL_CRMF_CERTID, OSSL_CRMF_CERTID) +#define sk_OSSL_CRMF_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_value(sk, idx) ((OSSL_CRMF_CERTID *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), (idx))) +#define sk_OSSL_CRMF_CERTID_new(cmp) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp))) +#define sk_OSSL_CRMF_CERTID_new_null() ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CRMF_CERTID_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (n)) +#define sk_OSSL_CRMF_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_delete(sk, i) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (i))) +#define sk_OSSL_CRMF_CERTID_delete_ptr(sk, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr))) +#define sk_OSSL_CRMF_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_pop(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_shift(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk),ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), (idx)) +#define sk_OSSL_CRMF_CERTID_set(sk, idx, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (idx), ossl_check_OSSL_CRMF_CERTID_type(ptr))) +#define sk_OSSL_CRMF_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), pnum) +#define sk_OSSL_CRMF_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_dup(sk) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc))) +#define sk_OSSL_CRMF_CERTID_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp))) + + +typedef struct ossl_crmf_pkipublicationinfo_st OSSL_CRMF_PKIPUBLICATIONINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PKIPUBLICATIONINFO) +typedef struct ossl_crmf_singlepubinfo_st OSSL_CRMF_SINGLEPUBINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_SINGLEPUBINFO) +typedef struct ossl_crmf_certtemplate_st OSSL_CRMF_CERTTEMPLATE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTTEMPLATE) +typedef STACK_OF(OSSL_CRMF_MSG) OSSL_CRMF_MSGS; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSGS) + +typedef struct ossl_crmf_optionalvalidity_st OSSL_CRMF_OPTIONALVALIDITY; + +/* crmf_pbm.c */ +OSSL_CRMF_PBMPARAMETER *OSSL_CRMF_pbmp_new(OSSL_LIB_CTX *libctx, size_t slen, + int owfnid, size_t itercnt, + int macnid); +int OSSL_CRMF_pbm_new(OSSL_LIB_CTX *libctx, const char *propq, + const OSSL_CRMF_PBMPARAMETER *pbmp, + const unsigned char *msg, size_t msglen, + const unsigned char *sec, size_t seclen, + unsigned char **mac, size_t *maclen); + +/* crmf_lib.c */ +int OSSL_CRMF_MSG_set1_regCtrl_regToken(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *tok); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_regToken(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_authenticator(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *auth); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_authenticator(const OSSL_CRMF_MSG *msg); +int +OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + OSSL_CRMF_SINGLEPUBINFO *spi); +# define OSSL_CRMF_PUB_METHOD_DONTCARE 0 +# define OSSL_CRMF_PUB_METHOD_X500 1 +# define OSSL_CRMF_PUB_METHOD_WEB 2 +# define OSSL_CRMF_PUB_METHOD_LDAP 3 +int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi, + int method, GENERAL_NAME *nm); +# define OSSL_CRMF_PUB_ACTION_DONTPUBLISH 0 +# define OSSL_CRMF_PUB_ACTION_PLEASEPUBLISH 1 +int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + int action); +int OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_PKIPUBLICATIONINFO *pi); +OSSL_CRMF_PKIPUBLICATIONINFO +*OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey(OSSL_CRMF_MSG *msg, + const X509_PUBKEY *pubkey); +X509_PUBKEY +*OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_oldCertID(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTID *cid); +OSSL_CRMF_CERTID +*OSSL_CRMF_MSG_get0_regCtrl_oldCertID(const OSSL_CRMF_MSG *msg); +OSSL_CRMF_CERTID *OSSL_CRMF_CERTID_gen(const X509_NAME *issuer, + const ASN1_INTEGER *serial); + +int OSSL_CRMF_MSG_set1_regInfo_utf8Pairs(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *utf8pairs); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regInfo_utf8Pairs(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regInfo_certReq(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTREQUEST *cr); +OSSL_CRMF_CERTREQUEST +*OSSL_CRMF_MSG_get0_regInfo_certReq(const OSSL_CRMF_MSG *msg); + +int OSSL_CRMF_MSG_set0_validity(OSSL_CRMF_MSG *crm, + ASN1_TIME *notBefore, ASN1_TIME *notAfter); +int OSSL_CRMF_MSG_set_certReqId(OSSL_CRMF_MSG *crm, int rid); +int OSSL_CRMF_MSG_get_certReqId(const OSSL_CRMF_MSG *crm); +int OSSL_CRMF_MSG_set0_extensions(OSSL_CRMF_MSG *crm, X509_EXTENSIONS *exts); + +int OSSL_CRMF_MSG_push0_extension(OSSL_CRMF_MSG *crm, X509_EXTENSION *ext); +# define OSSL_CRMF_POPO_NONE -1 +# define OSSL_CRMF_POPO_RAVERIFIED 0 +# define OSSL_CRMF_POPO_SIGNATURE 1 +# define OSSL_CRMF_POPO_KEYENC 2 +# define OSSL_CRMF_POPO_KEYAGREE 3 +int OSSL_CRMF_MSG_create_popo(int meth, OSSL_CRMF_MSG *crm, + EVP_PKEY *pkey, const EVP_MD *digest, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, + int rid, int acceptRAVerified, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); +const ASN1_INTEGER +*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_subject(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_issuer(const OSSL_CRMF_CERTTEMPLATE *tmpl); +X509_EXTENSIONS +*OSSL_CRMF_CERTTEMPLATE_get0_extensions(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTID_get0_issuer(const OSSL_CRMF_CERTID *cid); +const ASN1_INTEGER +*OSSL_CRMF_CERTID_get0_serialNumber(const OSSL_CRMF_CERTID *cid); +int OSSL_CRMF_CERTTEMPLATE_fill(OSSL_CRMF_CERTTEMPLATE *tmpl, + EVP_PKEY *pubkey, + const X509_NAME *subject, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +X509 +*OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(const OSSL_CRMF_ENCRYPTEDVALUE *ecert, + OSSL_LIB_CTX *libctx, const char *propq, + EVP_PKEY *pkey); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CRMF) */ +#endif /* !defined(OPENSSL_CRMF_H) */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h.in new file mode 100644 index 00000000..4d37ea6d --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h.in @@ -0,0 +1,180 @@ +/*- + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * CRMF (RFC 4211) implementation by M. Peylo, M. Viljanen, and D. von Oheimb. + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CRMF_H +# define OPENSSL_CRMF_H + +# include + +# ifndef OPENSSL_NO_CRMF +# include +# include +# include +# include /* for GENERAL_NAME etc. */ + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CRMF_POPOPRIVKEY_THISMESSAGE 0 +# define OSSL_CRMF_POPOPRIVKEY_SUBSEQUENTMESSAGE 1 +# define OSSL_CRMF_POPOPRIVKEY_DHMAC 2 +# define OSSL_CRMF_POPOPRIVKEY_AGREEMAC 3 +# define OSSL_CRMF_POPOPRIVKEY_ENCRYPTEDKEY 4 + +# define OSSL_CRMF_SUBSEQUENTMESSAGE_ENCRCERT 0 +# define OSSL_CRMF_SUBSEQUENTMESSAGE_CHALLENGERESP 1 + +typedef struct ossl_crmf_encryptedvalue_st OSSL_CRMF_ENCRYPTEDVALUE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDVALUE) +typedef struct ossl_crmf_msg_st OSSL_CRMF_MSG; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSG) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG) +{- + generate_stack_macros("OSSL_CRMF_MSG"); +-} +typedef struct ossl_crmf_attributetypeandvalue_st OSSL_CRMF_ATTRIBUTETYPEANDVALUE; +typedef struct ossl_crmf_pbmparameter_st OSSL_CRMF_PBMPARAMETER; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PBMPARAMETER) +typedef struct ossl_crmf_poposigningkey_st OSSL_CRMF_POPOSIGNINGKEY; +typedef struct ossl_crmf_certrequest_st OSSL_CRMF_CERTREQUEST; +typedef struct ossl_crmf_certid_st OSSL_CRMF_CERTID; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTID) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID) +{- + generate_stack_macros("OSSL_CRMF_CERTID"); +-} + +typedef struct ossl_crmf_pkipublicationinfo_st OSSL_CRMF_PKIPUBLICATIONINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PKIPUBLICATIONINFO) +typedef struct ossl_crmf_singlepubinfo_st OSSL_CRMF_SINGLEPUBINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_SINGLEPUBINFO) +typedef struct ossl_crmf_certtemplate_st OSSL_CRMF_CERTTEMPLATE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTTEMPLATE) +typedef STACK_OF(OSSL_CRMF_MSG) OSSL_CRMF_MSGS; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSGS) + +typedef struct ossl_crmf_optionalvalidity_st OSSL_CRMF_OPTIONALVALIDITY; + +/* crmf_pbm.c */ +OSSL_CRMF_PBMPARAMETER *OSSL_CRMF_pbmp_new(OSSL_LIB_CTX *libctx, size_t slen, + int owfnid, size_t itercnt, + int macnid); +int OSSL_CRMF_pbm_new(OSSL_LIB_CTX *libctx, const char *propq, + const OSSL_CRMF_PBMPARAMETER *pbmp, + const unsigned char *msg, size_t msglen, + const unsigned char *sec, size_t seclen, + unsigned char **mac, size_t *maclen); + +/* crmf_lib.c */ +int OSSL_CRMF_MSG_set1_regCtrl_regToken(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *tok); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_regToken(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_authenticator(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *auth); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_authenticator(const OSSL_CRMF_MSG *msg); +int +OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + OSSL_CRMF_SINGLEPUBINFO *spi); +# define OSSL_CRMF_PUB_METHOD_DONTCARE 0 +# define OSSL_CRMF_PUB_METHOD_X500 1 +# define OSSL_CRMF_PUB_METHOD_WEB 2 +# define OSSL_CRMF_PUB_METHOD_LDAP 3 +int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi, + int method, GENERAL_NAME *nm); +# define OSSL_CRMF_PUB_ACTION_DONTPUBLISH 0 +# define OSSL_CRMF_PUB_ACTION_PLEASEPUBLISH 1 +int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + int action); +int OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_PKIPUBLICATIONINFO *pi); +OSSL_CRMF_PKIPUBLICATIONINFO +*OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey(OSSL_CRMF_MSG *msg, + const X509_PUBKEY *pubkey); +X509_PUBKEY +*OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_oldCertID(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTID *cid); +OSSL_CRMF_CERTID +*OSSL_CRMF_MSG_get0_regCtrl_oldCertID(const OSSL_CRMF_MSG *msg); +OSSL_CRMF_CERTID *OSSL_CRMF_CERTID_gen(const X509_NAME *issuer, + const ASN1_INTEGER *serial); + +int OSSL_CRMF_MSG_set1_regInfo_utf8Pairs(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *utf8pairs); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regInfo_utf8Pairs(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regInfo_certReq(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTREQUEST *cr); +OSSL_CRMF_CERTREQUEST +*OSSL_CRMF_MSG_get0_regInfo_certReq(const OSSL_CRMF_MSG *msg); + +int OSSL_CRMF_MSG_set0_validity(OSSL_CRMF_MSG *crm, + ASN1_TIME *notBefore, ASN1_TIME *notAfter); +int OSSL_CRMF_MSG_set_certReqId(OSSL_CRMF_MSG *crm, int rid); +int OSSL_CRMF_MSG_get_certReqId(const OSSL_CRMF_MSG *crm); +int OSSL_CRMF_MSG_set0_extensions(OSSL_CRMF_MSG *crm, X509_EXTENSIONS *exts); + +int OSSL_CRMF_MSG_push0_extension(OSSL_CRMF_MSG *crm, X509_EXTENSION *ext); +# define OSSL_CRMF_POPO_NONE -1 +# define OSSL_CRMF_POPO_RAVERIFIED 0 +# define OSSL_CRMF_POPO_SIGNATURE 1 +# define OSSL_CRMF_POPO_KEYENC 2 +# define OSSL_CRMF_POPO_KEYAGREE 3 +int OSSL_CRMF_MSG_create_popo(int meth, OSSL_CRMF_MSG *crm, + EVP_PKEY *pkey, const EVP_MD *digest, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, + int rid, int acceptRAVerified, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); +const ASN1_INTEGER +*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_subject(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_issuer(const OSSL_CRMF_CERTTEMPLATE *tmpl); +X509_EXTENSIONS +*OSSL_CRMF_CERTTEMPLATE_get0_extensions(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTID_get0_issuer(const OSSL_CRMF_CERTID *cid); +const ASN1_INTEGER +*OSSL_CRMF_CERTID_get0_serialNumber(const OSSL_CRMF_CERTID *cid); +int OSSL_CRMF_CERTTEMPLATE_fill(OSSL_CRMF_CERTTEMPLATE *tmpl, + EVP_PKEY *pubkey, + const X509_NAME *subject, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +X509 +*OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(const OSSL_CRMF_ENCRYPTEDVALUE *ecert, + OSSL_LIB_CTX *libctx, const char *propq, + EVP_PKEY *pkey); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CRMF) */ +#endif /* !defined(OPENSSL_CRMF_H) */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmferr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmferr.h new file mode 100644 index 00000000..b242b922 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmferr.h @@ -0,0 +1,50 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CRMFERR_H +# define OPENSSL_CRMFERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CRMF + + +/* + * CRMF reason codes. + */ +# define CRMF_R_BAD_PBM_ITERATIONCOUNT 100 +# define CRMF_R_CRMFERROR 102 +# define CRMF_R_ERROR 103 +# define CRMF_R_ERROR_DECODING_CERTIFICATE 104 +# define CRMF_R_ERROR_DECRYPTING_CERTIFICATE 105 +# define CRMF_R_ERROR_DECRYPTING_SYMMETRIC_KEY 106 +# define CRMF_R_FAILURE_OBTAINING_RANDOM 107 +# define CRMF_R_ITERATIONCOUNT_BELOW_100 108 +# define CRMF_R_MALFORMED_IV 101 +# define CRMF_R_NULL_ARGUMENT 109 +# define CRMF_R_POPOSKINPUT_NOT_SUPPORTED 113 +# define CRMF_R_POPO_INCONSISTENT_PUBLIC_KEY 117 +# define CRMF_R_POPO_MISSING 121 +# define CRMF_R_POPO_MISSING_PUBLIC_KEY 118 +# define CRMF_R_POPO_MISSING_SUBJECT 119 +# define CRMF_R_POPO_RAVERIFIED_NOT_ACCEPTED 120 +# define CRMF_R_SETTING_MAC_ALGOR_FAILURE 110 +# define CRMF_R_SETTING_OWF_ALGOR_FAILURE 111 +# define CRMF_R_UNSUPPORTED_ALGORITHM 112 +# define CRMF_R_UNSUPPORTED_CIPHER 114 +# define CRMF_R_UNSUPPORTED_METHOD_FOR_CREATING_POPO 115 +# define CRMF_R_UNSUPPORTED_POPO_METHOD 116 + +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h index 7d0b5262..ab01aae8 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h @@ -1,15 +1,26 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/crypto.h.in + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CRYPTO_H -# define HEADER_CRYPTO_H + + +#ifndef OPENSSL_CRYPTO_H +# define OPENSSL_CRYPTO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CRYPTO_H +# endif # include # include @@ -22,9 +33,10 @@ # include # include -# include +# include # include # include +# include # ifdef CHARSET_EBCDIC # include @@ -36,7 +48,7 @@ */ # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif @@ -44,7 +56,7 @@ extern "C" { #endif -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSLeay OpenSSL_version_num # define SSLeay_version OpenSSL_version # define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER @@ -62,58 +74,24 @@ typedef struct { int dummy; } CRYPTO_dynlock; -# endif /* OPENSSL_API_COMPAT */ +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ typedef void CRYPTO_RWLOCK; CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); -int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); -int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); - -/* - * The following can be used to detect memory leaks in the library. If - * used, it turns on malloc checking - */ -# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ -# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ - -struct crypto_ex_data_st { - STACK_OF(void) *sk; -}; -DEFINE_STACK_OF(void) - -/* - * Per class, we have a STACK of function pointers. - */ -# define CRYPTO_EX_INDEX_SSL 0 -# define CRYPTO_EX_INDEX_SSL_CTX 1 -# define CRYPTO_EX_INDEX_SSL_SESSION 2 -# define CRYPTO_EX_INDEX_X509 3 -# define CRYPTO_EX_INDEX_X509_STORE 4 -# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 -# define CRYPTO_EX_INDEX_DH 6 -# define CRYPTO_EX_INDEX_DSA 7 -# define CRYPTO_EX_INDEX_EC_KEY 8 -# define CRYPTO_EX_INDEX_RSA 9 -# define CRYPTO_EX_INDEX_ENGINE 10 -# define CRYPTO_EX_INDEX_UI 11 -# define CRYPTO_EX_INDEX_BIO 12 -# define CRYPTO_EX_INDEX_APP 13 -# define CRYPTO_EX_INDEX_UI_METHOD 14 -# define CRYPTO_EX_INDEX_DRBG 15 -# define CRYPTO_EX_INDEX__COUNT 16 +int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); /* No longer needed, so this is a no-op */ #define OPENSSL_malloc_init() while(0) continue -int CRYPTO_mem_ctrl(int mode); - # define OPENSSL_malloc(num) \ CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) # define OPENSSL_zalloc(num) \ @@ -146,32 +124,127 @@ int CRYPTO_mem_ctrl(int mode); size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); size_t OPENSSL_strnlen(const char *str, size_t maxlen); -char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); -unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); +int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength, + const unsigned char *buf, size_t buflen, + const char sep); +char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen); +int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, size_t *buflen, + const char *str, const char sep); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *buflen); int OPENSSL_hexchar2int(unsigned char c); +int OPENSSL_strcasecmp(const char *s1, const char *s2); +int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n); # define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) +/* + * These functions return the values of OPENSSL_VERSION_MAJOR, + * OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, OPENSSL_VERSION_PRE_RELEASE + * and OPENSSL_VERSION_BUILD_METADATA, respectively. + */ +unsigned int OPENSSL_version_major(void); +unsigned int OPENSSL_version_minor(void); +unsigned int OPENSSL_version_patch(void); +const char *OPENSSL_version_pre_release(void); +const char *OPENSSL_version_build_metadata(void); + unsigned long OpenSSL_version_num(void); const char *OpenSSL_version(int type); -# define OPENSSL_VERSION 0 -# define OPENSSL_CFLAGS 1 -# define OPENSSL_BUILT_ON 2 -# define OPENSSL_PLATFORM 3 -# define OPENSSL_DIR 4 -# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION_STRING 6 +# define OPENSSL_FULL_VERSION_STRING 7 +# define OPENSSL_MODULES_DIR 8 +# define OPENSSL_CPU_INFO 9 + +const char *OPENSSL_info(int type); +/* + * The series starts at 1001 to avoid confusion with the OpenSSL_version + * types. + */ +# define OPENSSL_INFO_CONFIG_DIR 1001 +# define OPENSSL_INFO_ENGINES_DIR 1002 +# define OPENSSL_INFO_MODULES_DIR 1003 +# define OPENSSL_INFO_DSO_EXTENSION 1004 +# define OPENSSL_INFO_DIR_FILENAME_SEPARATOR 1005 +# define OPENSSL_INFO_LIST_SEPARATOR 1006 +# define OPENSSL_INFO_SEED_SOURCE 1007 +# define OPENSSL_INFO_CPU_SETTINGS 1008 int OPENSSL_issetugid(void); +struct crypto_ex_data_st { + OSSL_LIB_CTX *ctx; + STACK_OF(void) *sk; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(void, void, void) +#define sk_void_num(sk) OPENSSL_sk_num(ossl_check_const_void_sk_type(sk)) +#define sk_void_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_void_sk_type(sk), (idx))) +#define sk_void_new(cmp) ((STACK_OF(void) *)OPENSSL_sk_new(ossl_check_void_compfunc_type(cmp))) +#define sk_void_new_null() ((STACK_OF(void) *)OPENSSL_sk_new_null()) +#define sk_void_new_reserve(cmp, n) ((STACK_OF(void) *)OPENSSL_sk_new_reserve(ossl_check_void_compfunc_type(cmp), (n))) +#define sk_void_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_void_sk_type(sk), (n)) +#define sk_void_free(sk) OPENSSL_sk_free(ossl_check_void_sk_type(sk)) +#define sk_void_zero(sk) OPENSSL_sk_zero(ossl_check_void_sk_type(sk)) +#define sk_void_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_void_sk_type(sk), (i))) +#define sk_void_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr))) +#define sk_void_push(sk, ptr) OPENSSL_sk_push(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_void_sk_type(sk))) +#define sk_void_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_void_sk_type(sk))) +#define sk_void_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_void_sk_type(sk),ossl_check_void_freefunc_type(freefunc)) +#define sk_void_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), (idx)) +#define sk_void_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_void_sk_type(sk), (idx), ossl_check_void_type(ptr))) +#define sk_void_find(sk, ptr) OPENSSL_sk_find(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), pnum) +#define sk_void_sort(sk) OPENSSL_sk_sort(ossl_check_void_sk_type(sk)) +#define sk_void_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_void_sk_type(sk)) +#define sk_void_dup(sk) ((STACK_OF(void) *)OPENSSL_sk_dup(ossl_check_const_void_sk_type(sk))) +#define sk_void_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(void) *)OPENSSL_sk_deep_copy(ossl_check_const_void_sk_type(sk), ossl_check_void_copyfunc_type(copyfunc), ossl_check_void_freefunc_type(freefunc))) +#define sk_void_set_cmp_func(sk, cmp) ((sk_void_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_void_sk_type(sk), ossl_check_void_compfunc_type(cmp))) + + + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX_UI_METHOD 14 +# define CRYPTO_EX_INDEX_RAND_DRBG 15 +# define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG +# define CRYPTO_EX_INDEX_OSSL_LIB_CTX 16 +# define CRYPTO_EX_INDEX_EVP_PKEY 17 +# define CRYPTO_EX_INDEX__COUNT 18 + typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, - void *from_d, int idx, long argl, void *argp); + void **from_d, int idx, long argl, void *argp); __owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, - CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); /* No longer use an index. */ int CRYPTO_free_ex_index(int class_index, int idx); @@ -185,6 +258,10 @@ int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +/* Allocate a single item in the CRYPTO_EX_DATA variable */ +int CRYPTO_alloc_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad, + int idx); + /* * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular * index (relative to the class type involved) @@ -192,7 +269,7 @@ void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * This function cleans up all "ex_data" state. It mustn't be called under * potential race-conditions. @@ -239,11 +316,11 @@ typedef struct crypto_threadid_st { # define CRYPTO_THREADID_cpy(dest, src) # define CRYPTO_THREADID_hash(id) (0UL) -# if OPENSSL_API_COMPAT < 0x10000000L +# ifndef OPENSSL_NO_DEPRECATED_1_0_0 # define CRYPTO_set_id_callback(func) # define CRYPTO_get_id_callback() (NULL) # define CRYPTO_thread_id() (0UL) -# endif /* OPENSSL_API_COMPAT < 0x10000000L */ +# endif /* OPENSSL_NO_DEPRECATED_1_0_0 */ # define CRYPTO_set_dynlock_create_callback(dyn_create_function) # define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) @@ -251,33 +328,34 @@ typedef struct crypto_threadid_st { # define CRYPTO_get_dynlock_create_callback() (NULL) # define CRYPTO_get_dynlock_lock_callback() (NULL) # define CRYPTO_get_dynlock_destroy_callback() (NULL) -# endif /* OPENSSL_API_COMPAT < 0x10100000L */ +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ -int CRYPTO_set_mem_functions( - void *(*m) (size_t, const char *, int), - void *(*r) (void *, size_t, const char *, int), - void (*f) (void *, const char *, int)); -int CRYPTO_set_mem_debug(int flag); -void CRYPTO_get_mem_functions( - void *(**m) (size_t, const char *, int), - void *(**r) (void *, size_t, const char *, int), - void (**f) (void *, const char *, int)); +typedef void *(*CRYPTO_malloc_fn)(size_t num, const char *file, int line); +typedef void *(*CRYPTO_realloc_fn)(void *addr, size_t num, const char *file, + int line); +typedef void (*CRYPTO_free_fn)(void *addr, const char *file, int line); +int CRYPTO_set_mem_functions(CRYPTO_malloc_fn malloc_fn, + CRYPTO_realloc_fn realloc_fn, + CRYPTO_free_fn free_fn); +void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn, + CRYPTO_realloc_fn *realloc_fn, + CRYPTO_free_fn *free_fn); -void *CRYPTO_malloc(size_t num, const char *file, int line); -void *CRYPTO_zalloc(size_t num, const char *file, int line); -void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); -char *CRYPTO_strdup(const char *str, const char *file, int line); -char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strdup(const char *str, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); void CRYPTO_free(void *ptr, const char *file, int line); void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, const char *file, int line); -int CRYPTO_secure_malloc_init(size_t sz, int minsize); +int CRYPTO_secure_malloc_init(size_t sz, size_t minsize); int CRYPTO_secure_malloc_done(void); -void *CRYPTO_secure_malloc(size_t num, const char *file, int line); -void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); void CRYPTO_secure_free(void *ptr, const char *file, int line); void CRYPTO_secure_clear_free(void *ptr, size_t num, const char *file, int line); @@ -289,38 +367,53 @@ size_t CRYPTO_secure_used(void); void OPENSSL_cleanse(void *ptr, size_t len); # ifndef OPENSSL_NO_CRYPTO_MDEBUG -# define OPENSSL_mem_debug_push(info) \ - CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_mem_debug_pop() \ - CRYPTO_mem_debug_pop() -int CRYPTO_mem_debug_push(const char *info, const char *file, int line); -int CRYPTO_mem_debug_pop(void); -void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); - -/*- - * Debugging functions (enabled by CRYPTO_set_mem_debug(1)) - * The flag argument has the following significance: - * 0: called before the actual memory allocation has taken place - * 1: called after the actual memory allocation has taken place +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking */ -void CRYPTO_mem_debug_malloc(void *addr, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_free(void *addr, int flag, - const char *file, int line); +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ -int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u), - void *u); -# ifndef OPENSSL_NO_STDIO -int CRYPTO_mem_leaks_fp(FILE *); +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() # endif -int CRYPTO_mem_leaks(BIO *bio); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_set_mem_debug(int flag); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_ctrl(int mode); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_push(const char *info, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_pop(void); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_malloc(void *addr, size_t num, + int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, + size_t num, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 +int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), + void *u); +# endif +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks_fp(FILE *); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks(BIO *bio); # endif +# endif /* OPENSSL_NO_CRYPTO_MDEBUG */ /* die if we have to */ ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) # endif # define OPENSSL_assert(e) \ @@ -328,14 +421,13 @@ ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line int OPENSSL_isservice(void); -int FIPS_mode(void); -int FIPS_mode_set(int r); - void OPENSSL_init(void); # ifdef OPENSSL_SYS_UNIX -void OPENSSL_fork_prepare(void); -void OPENSSL_fork_parent(void); -void OPENSSL_fork_child(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_prepare(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_parent(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_child(void); +# endif # endif struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); @@ -369,11 +461,17 @@ int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); # define OPENSSL_INIT_ENGINE_CAPI 0x00002000L # define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L # define OPENSSL_INIT_ENGINE_AFALG 0x00008000L -/* OPENSSL_INIT_ZLIB 0x00010000L */ +/* FREE: 0x00010000L */ # define OPENSSL_INIT_ATFORK 0x00020000L /* OPENSSL_INIT_BASE_ONLY 0x00040000L */ # define OPENSSL_INIT_NO_ATEXIT 0x00080000L -/* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */ +/* OPENSSL_INIT flag range 0x03f00000 reserved for OPENSSL_init_ssl() */ +/* FREE: 0x04000000L */ +/* FREE: 0x08000000L */ +/* FREE: 0x10000000L */ +/* FREE: 0x20000000L */ +/* FREE: 0x40000000L */ +/* FREE: 0x80000000L */ /* Max OPENSSL_INIT flag value is 0x80000000 */ /* openssl and dasync not counted as builtin */ @@ -382,12 +480,12 @@ int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ OPENSSL_INIT_ENGINE_PADLOCK) - /* Library initialisation functions */ void OPENSSL_cleanup(void); int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); int OPENSSL_atexit(void (*handler)(void)); void OPENSSL_thread_stop(void); +void OPENSSL_thread_stop_ex(OSSL_LIB_CTX *ctx); /* Low-level control of initialization */ OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); @@ -412,7 +510,13 @@ typedef LONG CRYPTO_ONCE; # define CRYPTO_ONCE_STATIC_INIT 0 # endif # else -# include +# if defined(__TANDEM) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# else +# include +# endif typedef pthread_once_t CRYPTO_ONCE; typedef pthread_key_t CRYPTO_THREAD_LOCAL; typedef pthread_t CRYPTO_THREAD_ID; @@ -438,6 +542,15 @@ int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); +OSSL_LIB_CTX *OSSL_LIB_CTX_new(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_from_dispatch(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_child(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file); +void OSSL_LIB_CTX_free(OSSL_LIB_CTX *); +OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx); # ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h.in new file mode 100644 index 00000000..fb0c7cbb --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h.in @@ -0,0 +1,535 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CRYPTO_H +# define OPENSSL_CRYPTO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CRYPTO_H +# endif + +# include +# include + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif + +# include +# include +# include +# include +# include +# include + +# ifdef CHARSET_EBCDIC +# include +# endif + +/* + * Resolve problems on some operating systems with symbol names that clash + * one way or another + */ +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSLeay OpenSSL_version_num +# define SSLeay_version OpenSSL_version +# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER +# define SSLEAY_VERSION OPENSSL_VERSION +# define SSLEAY_CFLAGS OPENSSL_CFLAGS +# define SSLEAY_BUILT_ON OPENSSL_BUILT_ON +# define SSLEAY_PLATFORM OPENSSL_PLATFORM +# define SSLEAY_DIR OPENSSL_DIR + +/* + * Old type for allocating dynamic locks. No longer used. Use the new thread + * API instead. + */ +typedef struct { + int dummy; +} CRYPTO_dynlock; + +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ + +typedef void CRYPTO_RWLOCK; + +CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); +__owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); +void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); + +int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); + +/* No longer needed, so this is a no-op */ +#define OPENSSL_malloc_init() while(0) continue + +# define OPENSSL_malloc(num) \ + CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_zalloc(num) \ + CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_realloc(addr, num) \ + CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_realloc(addr, old_num, num) \ + CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_free(addr, num) \ + CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_free(addr) \ + CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_memdup(str, s) \ + CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strdup(str) \ + CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strndup(str, n) \ + CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_malloc(num) \ + CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_zalloc(num) \ + CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_free(addr) \ + CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_clear_free(addr, num) \ + CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_actual_size(ptr) \ + CRYPTO_secure_actual_size(ptr) + +size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); +size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); +size_t OPENSSL_strnlen(const char *str, size_t maxlen); +int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength, + const unsigned char *buf, size_t buflen, + const char sep); +char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen); +int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, size_t *buflen, + const char *str, const char sep); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *buflen); +int OPENSSL_hexchar2int(unsigned char c); +int OPENSSL_strcasecmp(const char *s1, const char *s2); +int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n); + +# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) + +/* + * These functions return the values of OPENSSL_VERSION_MAJOR, + * OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, OPENSSL_VERSION_PRE_RELEASE + * and OPENSSL_VERSION_BUILD_METADATA, respectively. + */ +unsigned int OPENSSL_version_major(void); +unsigned int OPENSSL_version_minor(void); +unsigned int OPENSSL_version_patch(void); +const char *OPENSSL_version_pre_release(void); +const char *OPENSSL_version_build_metadata(void); + +unsigned long OpenSSL_version_num(void); +const char *OpenSSL_version(int type); +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION_STRING 6 +# define OPENSSL_FULL_VERSION_STRING 7 +# define OPENSSL_MODULES_DIR 8 +# define OPENSSL_CPU_INFO 9 + +const char *OPENSSL_info(int type); +/* + * The series starts at 1001 to avoid confusion with the OpenSSL_version + * types. + */ +# define OPENSSL_INFO_CONFIG_DIR 1001 +# define OPENSSL_INFO_ENGINES_DIR 1002 +# define OPENSSL_INFO_MODULES_DIR 1003 +# define OPENSSL_INFO_DSO_EXTENSION 1004 +# define OPENSSL_INFO_DIR_FILENAME_SEPARATOR 1005 +# define OPENSSL_INFO_LIST_SEPARATOR 1006 +# define OPENSSL_INFO_SEED_SOURCE 1007 +# define OPENSSL_INFO_CPU_SETTINGS 1008 + +int OPENSSL_issetugid(void); + +struct crypto_ex_data_st { + OSSL_LIB_CTX *ctx; + STACK_OF(void) *sk; +}; + +{- + generate_stack_macros("void"); +-} + + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX_UI_METHOD 14 +# define CRYPTO_EX_INDEX_RAND_DRBG 15 +# define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG +# define CRYPTO_EX_INDEX_OSSL_LIB_CTX 16 +# define CRYPTO_EX_INDEX_EVP_PKEY 17 +# define CRYPTO_EX_INDEX__COUNT 18 + +typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, + void **from_d, int idx, long argl, void *argp); +__owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +/* No longer use an index. */ +int CRYPTO_free_ex_index(int class_index, int idx); + +/* + * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a + * given class (invokes whatever per-class callbacks are applicable) + */ +int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, + const CRYPTO_EX_DATA *from); + +void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); + +/* Allocate a single item in the CRYPTO_EX_DATA variable */ +int CRYPTO_alloc_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad, + int idx); + +/* + * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular + * index (relative to the class type involved) + */ +int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); +void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * This function cleans up all "ex_data" state. It mustn't be called under + * potential race-conditions. + */ +# define CRYPTO_cleanup_all_ex_data() while(0) continue + +/* + * The old locking functions have been removed completely without compatibility + * macros. This is because the old functions either could not properly report + * errors, or the returned error values were not clearly documented. + * Replacing the locking functions with no-ops would cause race condition + * issues in the affected applications. It is far better for them to fail at + * compile time. + * On the other hand, the locking callbacks are no longer used. Consequently, + * the callback management functions can be safely replaced with no-op macros. + */ +# define CRYPTO_num_locks() (1) +# define CRYPTO_set_locking_callback(func) +# define CRYPTO_get_locking_callback() (NULL) +# define CRYPTO_set_add_lock_callback(func) +# define CRYPTO_get_add_lock_callback() (NULL) + +/* + * These defines where used in combination with the old locking callbacks, + * they are not called anymore, but old code that's not called might still + * use them. + */ +# define CRYPTO_LOCK 1 +# define CRYPTO_UNLOCK 2 +# define CRYPTO_READ 4 +# define CRYPTO_WRITE 8 + +/* This structure is no longer used */ +typedef struct crypto_threadid_st { + int dummy; +} CRYPTO_THREADID; +/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ +# define CRYPTO_THREADID_set_numeric(id, val) +# define CRYPTO_THREADID_set_pointer(id, ptr) +# define CRYPTO_THREADID_set_callback(threadid_func) (0) +# define CRYPTO_THREADID_get_callback() (NULL) +# define CRYPTO_THREADID_current(id) +# define CRYPTO_THREADID_cmp(a, b) (-1) +# define CRYPTO_THREADID_cpy(dest, src) +# define CRYPTO_THREADID_hash(id) (0UL) + +# ifndef OPENSSL_NO_DEPRECATED_1_0_0 +# define CRYPTO_set_id_callback(func) +# define CRYPTO_get_id_callback() (NULL) +# define CRYPTO_thread_id() (0UL) +# endif /* OPENSSL_NO_DEPRECATED_1_0_0 */ + +# define CRYPTO_set_dynlock_create_callback(dyn_create_function) +# define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) +# define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function) +# define CRYPTO_get_dynlock_create_callback() (NULL) +# define CRYPTO_get_dynlock_lock_callback() (NULL) +# define CRYPTO_get_dynlock_destroy_callback() (NULL) +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ + +typedef void *(*CRYPTO_malloc_fn)(size_t num, const char *file, int line); +typedef void *(*CRYPTO_realloc_fn)(void *addr, size_t num, const char *file, + int line); +typedef void (*CRYPTO_free_fn)(void *addr, const char *file, int line); +int CRYPTO_set_mem_functions(CRYPTO_malloc_fn malloc_fn, + CRYPTO_realloc_fn realloc_fn, + CRYPTO_free_fn free_fn); +void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn, + CRYPTO_realloc_fn *realloc_fn, + CRYPTO_free_fn *free_fn); + +OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strdup(const char *str, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +void CRYPTO_free(void *ptr, const char *file, int line); +void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); +void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); +void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, + const char *file, int line); + +int CRYPTO_secure_malloc_init(size_t sz, size_t minsize); +int CRYPTO_secure_malloc_done(void); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +void CRYPTO_secure_free(void *ptr, const char *file, int line); +void CRYPTO_secure_clear_free(void *ptr, size_t num, + const char *file, int line); +int CRYPTO_secure_allocated(const void *ptr); +int CRYPTO_secure_malloc_initialized(void); +size_t CRYPTO_secure_actual_size(void *ptr); +size_t CRYPTO_secure_used(void); + +void OPENSSL_cleanse(void *ptr, size_t len); + +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking + */ +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ + +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_set_mem_debug(int flag); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_ctrl(int mode); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_push(const char *info, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_pop(void); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_malloc(void *addr, size_t num, + int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, + size_t num, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 +int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), + void *u); +# endif +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks_fp(FILE *); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks(BIO *bio); +# endif +# endif /* OPENSSL_NO_CRYPTO_MDEBUG */ + +/* die if we have to */ +ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) +# endif +# define OPENSSL_assert(e) \ + (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1)) + +int OPENSSL_isservice(void); + +void OPENSSL_init(void); +# ifdef OPENSSL_SYS_UNIX +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_prepare(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_parent(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_child(void); +# endif +# endif + +struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); +int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec); +int OPENSSL_gmtime_diff(int *pday, int *psec, + const struct tm *from, const struct tm *to); + +/* + * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. + * It takes an amount of time dependent on |len|, but independent of the + * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements + * into a defined order as the return value when a != b is undefined, other + * than to be non-zero. + */ +int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); + +/* Standard initialisation options */ +# define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L +# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L +# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L +# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L +# define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L +# define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L +# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L +# define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L +# define OPENSSL_INIT_ASYNC 0x00000100L +# define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L +# define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L +# define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L +# define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L +# define OPENSSL_INIT_ENGINE_CAPI 0x00002000L +# define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L +# define OPENSSL_INIT_ENGINE_AFALG 0x00008000L +/* FREE: 0x00010000L */ +# define OPENSSL_INIT_ATFORK 0x00020000L +/* OPENSSL_INIT_BASE_ONLY 0x00040000L */ +# define OPENSSL_INIT_NO_ATEXIT 0x00080000L +/* OPENSSL_INIT flag range 0x03f00000 reserved for OPENSSL_init_ssl() */ +/* FREE: 0x04000000L */ +/* FREE: 0x08000000L */ +/* FREE: 0x10000000L */ +/* FREE: 0x20000000L */ +/* FREE: 0x40000000L */ +/* FREE: 0x80000000L */ +/* Max OPENSSL_INIT flag value is 0x80000000 */ + +/* openssl and dasync not counted as builtin */ +# define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ + (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ + | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ + OPENSSL_INIT_ENGINE_PADLOCK) + +/* Library initialisation functions */ +void OPENSSL_cleanup(void); +int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +int OPENSSL_atexit(void (*handler)(void)); +void OPENSSL_thread_stop(void); +void OPENSSL_thread_stop_ex(OSSL_LIB_CTX *ctx); + +/* Low-level control of initialization */ +OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); +# ifndef OPENSSL_NO_STDIO +int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings, + const char *config_filename); +void OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *settings, + unsigned long flags); +int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, + const char *config_appname); +# endif +void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings); + +# if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) +# if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include in order to use this */ +typedef DWORD CRYPTO_THREAD_LOCAL; +typedef DWORD CRYPTO_THREAD_ID; + +typedef LONG CRYPTO_ONCE; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif +# else +# if defined(__TANDEM) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# else +# include +# endif +typedef pthread_once_t CRYPTO_ONCE; +typedef pthread_key_t CRYPTO_THREAD_LOCAL; +typedef pthread_t CRYPTO_THREAD_ID; + +# define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT +# endif +# endif + +# if !defined(CRYPTO_ONCE_STATIC_INIT) +typedef unsigned int CRYPTO_ONCE; +typedef unsigned int CRYPTO_THREAD_LOCAL; +typedef unsigned int CRYPTO_THREAD_ID; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif + +int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); + +int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)); +void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key); +int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val); +int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); + +CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); +int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); + +OSSL_LIB_CTX *OSSL_LIB_CTX_new(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_from_dispatch(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_child(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file); +void OSSL_LIB_CTX_free(OSSL_LIB_CTX *); +OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr.h index 3db5a4ee..e84b12df 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr.h @@ -1,57 +1,55 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CRYPTOERR_H -# define HEADER_CRYPTOERR_H +#ifndef OPENSSL_CRYPTOERR_H +# define OPENSSL_CRYPTOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CRYPTO_strings(void); -/* - * CRYPTO function codes. - */ -# define CRYPTO_F_CMAC_CTX_NEW 120 -# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 -# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 -# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 -# define CRYPTO_F_CRYPTO_MEMDUP 115 -# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 -# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 121 -# define CRYPTO_F_CRYPTO_OCB128_INIT 122 -# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 -# define CRYPTO_F_FIPS_MODE_SET 109 -# define CRYPTO_F_GET_AND_LOCK 113 -# define CRYPTO_F_OPENSSL_ATEXIT 114 -# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 -# define CRYPTO_F_OPENSSL_FOPEN 119 -# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 -# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 -# define CRYPTO_F_OPENSSL_LH_NEW 126 -# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 127 -# define CRYPTO_F_OPENSSL_SK_DUP 128 -# define CRYPTO_F_PKEY_HMAC_INIT 123 -# define CRYPTO_F_PKEY_POLY1305_INIT 124 -# define CRYPTO_F_PKEY_SIPHASH_INIT 125 -# define CRYPTO_F_SK_RESERVE 129 /* * CRYPTO reason codes. */ -# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 +# define CRYPTO_R_BAD_ALGORITHM_NAME 117 +# define CRYPTO_R_CONFLICTING_NAMES 118 +# define CRYPTO_R_HEX_STRING_TOO_SHORT 121 # define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 +# define CRYPTO_R_INSUFFICIENT_DATA_SPACE 106 +# define CRYPTO_R_INSUFFICIENT_PARAM_SIZE 107 +# define CRYPTO_R_INSUFFICIENT_SECURE_DATA_SPACE 108 +# define CRYPTO_R_INTEGER_OVERFLOW 127 +# define CRYPTO_R_INVALID_NEGATIVE_VALUE 122 +# define CRYPTO_R_INVALID_NULL_ARGUMENT 109 +# define CRYPTO_R_INVALID_OSSL_PARAM_TYPE 110 +# define CRYPTO_R_NO_PARAMS_TO_MERGE 131 +# define CRYPTO_R_NO_SPACE_FOR_TERMINATING_NULL 128 # define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 +# define CRYPTO_R_PARAM_CANNOT_BE_REPRESENTED_EXACTLY 123 +# define CRYPTO_R_PARAM_NOT_INTEGER_TYPE 124 +# define CRYPTO_R_PARAM_OF_INCOMPATIBLE_TYPE 129 +# define CRYPTO_R_PARAM_UNSIGNED_INTEGER_NEGATIVE_VALUE_UNSUPPORTED 125 +# define CRYPTO_R_PARAM_UNSUPPORTED_FLOATING_POINT_FORMAT 130 +# define CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION 126 +# define CRYPTO_R_PROVIDER_ALREADY_EXISTS 104 +# define CRYPTO_R_PROVIDER_SECTION_ERROR 105 +# define CRYPTO_R_RANDOM_SECTION_ERROR 119 +# define CRYPTO_R_SECURE_MALLOC_FAILURE 111 +# define CRYPTO_R_STRING_TOO_LONG 112 +# define CRYPTO_R_TOO_MANY_BYTES 113 +# define CRYPTO_R_TOO_MANY_RECORDS 114 +# define CRYPTO_R_TOO_SMALL_BUFFER 116 +# define CRYPTO_R_UNKNOWN_NAME_IN_RANDOM_SECTION 120 +# define CRYPTO_R_ZERO_LENGTH_NUMBER 115 #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr_legacy.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr_legacy.h new file mode 100644 index 00000000..ccab33a5 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr_legacy.h @@ -0,0 +1,1466 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file preserves symbols from pre-3.0 OpenSSL. + * It should never be included directly, as it's already included + * by the public {lib}err.h headers, and since it will go away some + * time in the future. + */ + +#ifndef OPENSSL_CRYPTOERR_LEGACY_H +# define OPENSSL_CRYPTOERR_LEGACY_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ERR_load_ASN1_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_ASYNC_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BIO_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BN_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BUF_strings(void); +# ifndef OPENSSL_NO_CMS +OSSL_DEPRECATEDIN_3_0 int ERR_load_CMS_strings(void); +# endif +# ifndef OPENSSL_NO_COMP +OSSL_DEPRECATEDIN_3_0 int ERR_load_COMP_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_CONF_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_CRYPTO_strings(void); +# ifndef OPENSSL_NO_CT +OSSL_DEPRECATEDIN_3_0 int ERR_load_CT_strings(void); +# endif +# ifndef OPENSSL_NO_DH +OSSL_DEPRECATEDIN_3_0 int ERR_load_DH_strings(void); +# endif +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 int ERR_load_DSA_strings(void); +# endif +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 int ERR_load_EC_strings(void); +# endif +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int ERR_load_ENGINE_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_ERR_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_EVP_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_KDF_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_OBJ_strings(void); +# ifndef OPENSSL_NO_OCSP +OSSL_DEPRECATEDIN_3_0 int ERR_load_OCSP_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_PEM_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS12_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS7_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_RAND_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_RSA_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_OSSL_STORE_strings(void); +# ifndef OPENSSL_NO_TS +OSSL_DEPRECATEDIN_3_0 int ERR_load_TS_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_UI_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_X509_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_X509V3_strings(void); + +/* Collected _F_ macros from OpenSSL 1.1.1 */ + +/* + * ASN1 function codes. + */ +# define ASN1_F_A2D_ASN1_OBJECT 0 +# define ASN1_F_A2I_ASN1_INTEGER 0 +# define ASN1_F_A2I_ASN1_STRING 0 +# define ASN1_F_APPEND_EXP 0 +# define ASN1_F_ASN1_BIO_INIT 0 +# define ASN1_F_ASN1_BIT_STRING_SET_BIT 0 +# define ASN1_F_ASN1_CB 0 +# define ASN1_F_ASN1_CHECK_TLEN 0 +# define ASN1_F_ASN1_COLLECT 0 +# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 0 +# define ASN1_F_ASN1_D2I_FP 0 +# define ASN1_F_ASN1_D2I_READ_BIO 0 +# define ASN1_F_ASN1_DIGEST 0 +# define ASN1_F_ASN1_DO_ADB 0 +# define ASN1_F_ASN1_DO_LOCK 0 +# define ASN1_F_ASN1_DUP 0 +# define ASN1_F_ASN1_ENC_SAVE 0 +# define ASN1_F_ASN1_EX_C2I 0 +# define ASN1_F_ASN1_FIND_END 0 +# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 0 +# define ASN1_F_ASN1_GENERATE_V3 0 +# define ASN1_F_ASN1_GET_INT64 0 +# define ASN1_F_ASN1_GET_OBJECT 0 +# define ASN1_F_ASN1_GET_UINT64 0 +# define ASN1_F_ASN1_I2D_BIO 0 +# define ASN1_F_ASN1_I2D_FP 0 +# define ASN1_F_ASN1_ITEM_D2I_FP 0 +# define ASN1_F_ASN1_ITEM_DUP 0 +# define ASN1_F_ASN1_ITEM_EMBED_D2I 0 +# define ASN1_F_ASN1_ITEM_EMBED_NEW 0 +# define ASN1_F_ASN1_ITEM_FLAGS_I2D 0 +# define ASN1_F_ASN1_ITEM_I2D_BIO 0 +# define ASN1_F_ASN1_ITEM_I2D_FP 0 +# define ASN1_F_ASN1_ITEM_PACK 0 +# define ASN1_F_ASN1_ITEM_SIGN 0 +# define ASN1_F_ASN1_ITEM_SIGN_CTX 0 +# define ASN1_F_ASN1_ITEM_UNPACK 0 +# define ASN1_F_ASN1_ITEM_VERIFY 0 +# define ASN1_F_ASN1_MBSTRING_NCOPY 0 +# define ASN1_F_ASN1_OBJECT_NEW 0 +# define ASN1_F_ASN1_OUTPUT_DATA 0 +# define ASN1_F_ASN1_PCTX_NEW 0 +# define ASN1_F_ASN1_PRIMITIVE_NEW 0 +# define ASN1_F_ASN1_SCTX_NEW 0 +# define ASN1_F_ASN1_SIGN 0 +# define ASN1_F_ASN1_STR2TYPE 0 +# define ASN1_F_ASN1_STRING_GET_INT64 0 +# define ASN1_F_ASN1_STRING_GET_UINT64 0 +# define ASN1_F_ASN1_STRING_SET 0 +# define ASN1_F_ASN1_STRING_TABLE_ADD 0 +# define ASN1_F_ASN1_STRING_TO_BN 0 +# define ASN1_F_ASN1_STRING_TYPE_NEW 0 +# define ASN1_F_ASN1_TEMPLATE_EX_D2I 0 +# define ASN1_F_ASN1_TEMPLATE_NEW 0 +# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 0 +# define ASN1_F_ASN1_TIME_ADJ 0 +# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 0 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 0 +# define ASN1_F_ASN1_UTCTIME_ADJ 0 +# define ASN1_F_ASN1_VERIFY 0 +# define ASN1_F_B64_READ_ASN1 0 +# define ASN1_F_B64_WRITE_ASN1 0 +# define ASN1_F_BIO_NEW_NDEF 0 +# define ASN1_F_BITSTR_CB 0 +# define ASN1_F_BN_TO_ASN1_STRING 0 +# define ASN1_F_C2I_ASN1_BIT_STRING 0 +# define ASN1_F_C2I_ASN1_INTEGER 0 +# define ASN1_F_C2I_ASN1_OBJECT 0 +# define ASN1_F_C2I_IBUF 0 +# define ASN1_F_C2I_UINT64_INT 0 +# define ASN1_F_COLLECT_DATA 0 +# define ASN1_F_D2I_ASN1_OBJECT 0 +# define ASN1_F_D2I_ASN1_UINTEGER 0 +# define ASN1_F_D2I_AUTOPRIVATEKEY 0 +# define ASN1_F_D2I_PRIVATEKEY 0 +# define ASN1_F_D2I_PUBLICKEY 0 +# define ASN1_F_DO_BUF 0 +# define ASN1_F_DO_CREATE 0 +# define ASN1_F_DO_DUMP 0 +# define ASN1_F_DO_TCREATE 0 +# define ASN1_F_I2A_ASN1_OBJECT 0 +# define ASN1_F_I2D_ASN1_BIO_STREAM 0 +# define ASN1_F_I2D_ASN1_OBJECT 0 +# define ASN1_F_I2D_DSA_PUBKEY 0 +# define ASN1_F_I2D_EC_PUBKEY 0 +# define ASN1_F_I2D_PRIVATEKEY 0 +# define ASN1_F_I2D_PUBLICKEY 0 +# define ASN1_F_I2D_RSA_PUBKEY 0 +# define ASN1_F_LONG_C2I 0 +# define ASN1_F_NDEF_PREFIX 0 +# define ASN1_F_NDEF_SUFFIX 0 +# define ASN1_F_OID_MODULE_INIT 0 +# define ASN1_F_PARSE_TAGGING 0 +# define ASN1_F_PKCS5_PBE2_SET_IV 0 +# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 0 +# define ASN1_F_PKCS5_PBE_SET 0 +# define ASN1_F_PKCS5_PBE_SET0_ALGOR 0 +# define ASN1_F_PKCS5_PBKDF2_SET 0 +# define ASN1_F_PKCS5_SCRYPT_SET 0 +# define ASN1_F_SMIME_READ_ASN1 0 +# define ASN1_F_SMIME_TEXT 0 +# define ASN1_F_STABLE_GET 0 +# define ASN1_F_STBL_MODULE_INIT 0 +# define ASN1_F_UINT32_C2I 0 +# define ASN1_F_UINT32_NEW 0 +# define ASN1_F_UINT64_C2I 0 +# define ASN1_F_UINT64_NEW 0 +# define ASN1_F_X509_CRL_ADD0_REVOKED 0 +# define ASN1_F_X509_INFO_NEW 0 +# define ASN1_F_X509_NAME_ENCODE 0 +# define ASN1_F_X509_NAME_EX_D2I 0 +# define ASN1_F_X509_NAME_EX_NEW 0 +# define ASN1_F_X509_PKEY_NEW 0 + +/* + * ASYNC function codes. + */ +# define ASYNC_F_ASYNC_CTX_NEW 0 +# define ASYNC_F_ASYNC_INIT_THREAD 0 +# define ASYNC_F_ASYNC_JOB_NEW 0 +# define ASYNC_F_ASYNC_PAUSE_JOB 0 +# define ASYNC_F_ASYNC_START_FUNC 0 +# define ASYNC_F_ASYNC_START_JOB 0 +# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 0 + +/* + * BIO function codes. + */ +# define BIO_F_ACPT_STATE 0 +# define BIO_F_ADDRINFO_WRAP 0 +# define BIO_F_ADDR_STRINGS 0 +# define BIO_F_BIO_ACCEPT 0 +# define BIO_F_BIO_ACCEPT_EX 0 +# define BIO_F_BIO_ACCEPT_NEW 0 +# define BIO_F_BIO_ADDR_NEW 0 +# define BIO_F_BIO_BIND 0 +# define BIO_F_BIO_CALLBACK_CTRL 0 +# define BIO_F_BIO_CONNECT 0 +# define BIO_F_BIO_CONNECT_NEW 0 +# define BIO_F_BIO_CTRL 0 +# define BIO_F_BIO_GETS 0 +# define BIO_F_BIO_GET_HOST_IP 0 +# define BIO_F_BIO_GET_NEW_INDEX 0 +# define BIO_F_BIO_GET_PORT 0 +# define BIO_F_BIO_LISTEN 0 +# define BIO_F_BIO_LOOKUP 0 +# define BIO_F_BIO_LOOKUP_EX 0 +# define BIO_F_BIO_MAKE_PAIR 0 +# define BIO_F_BIO_METH_NEW 0 +# define BIO_F_BIO_NEW 0 +# define BIO_F_BIO_NEW_DGRAM_SCTP 0 +# define BIO_F_BIO_NEW_FILE 0 +# define BIO_F_BIO_NEW_MEM_BUF 0 +# define BIO_F_BIO_NREAD 0 +# define BIO_F_BIO_NREAD0 0 +# define BIO_F_BIO_NWRITE 0 +# define BIO_F_BIO_NWRITE0 0 +# define BIO_F_BIO_PARSE_HOSTSERV 0 +# define BIO_F_BIO_PUTS 0 +# define BIO_F_BIO_READ 0 +# define BIO_F_BIO_READ_EX 0 +# define BIO_F_BIO_READ_INTERN 0 +# define BIO_F_BIO_SOCKET 0 +# define BIO_F_BIO_SOCKET_NBIO 0 +# define BIO_F_BIO_SOCK_INFO 0 +# define BIO_F_BIO_SOCK_INIT 0 +# define BIO_F_BIO_WRITE 0 +# define BIO_F_BIO_WRITE_EX 0 +# define BIO_F_BIO_WRITE_INTERN 0 +# define BIO_F_BUFFER_CTRL 0 +# define BIO_F_CONN_CTRL 0 +# define BIO_F_CONN_STATE 0 +# define BIO_F_DGRAM_SCTP_NEW 0 +# define BIO_F_DGRAM_SCTP_READ 0 +# define BIO_F_DGRAM_SCTP_WRITE 0 +# define BIO_F_DOAPR_OUTCH 0 +# define BIO_F_FILE_CTRL 0 +# define BIO_F_FILE_READ 0 +# define BIO_F_LINEBUFFER_CTRL 0 +# define BIO_F_LINEBUFFER_NEW 0 +# define BIO_F_MEM_WRITE 0 +# define BIO_F_NBIOF_NEW 0 +# define BIO_F_SLG_WRITE 0 +# define BIO_F_SSL_NEW 0 + +/* + * BN function codes. + */ +# define BN_F_BNRAND 0 +# define BN_F_BNRAND_RANGE 0 +# define BN_F_BN_BLINDING_CONVERT_EX 0 +# define BN_F_BN_BLINDING_CREATE_PARAM 0 +# define BN_F_BN_BLINDING_INVERT_EX 0 +# define BN_F_BN_BLINDING_NEW 0 +# define BN_F_BN_BLINDING_UPDATE 0 +# define BN_F_BN_BN2DEC 0 +# define BN_F_BN_BN2HEX 0 +# define BN_F_BN_COMPUTE_WNAF 0 +# define BN_F_BN_CTX_GET 0 +# define BN_F_BN_CTX_NEW 0 +# define BN_F_BN_CTX_START 0 +# define BN_F_BN_DIV 0 +# define BN_F_BN_DIV_RECP 0 +# define BN_F_BN_EXP 0 +# define BN_F_BN_EXPAND_INTERNAL 0 +# define BN_F_BN_GENCB_NEW 0 +# define BN_F_BN_GENERATE_DSA_NONCE 0 +# define BN_F_BN_GENERATE_PRIME_EX 0 +# define BN_F_BN_GF2M_MOD 0 +# define BN_F_BN_GF2M_MOD_EXP 0 +# define BN_F_BN_GF2M_MOD_MUL 0 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 0 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 0 +# define BN_F_BN_GF2M_MOD_SQR 0 +# define BN_F_BN_GF2M_MOD_SQRT 0 +# define BN_F_BN_LSHIFT 0 +# define BN_F_BN_MOD_EXP2_MONT 0 +# define BN_F_BN_MOD_EXP_MONT 0 +# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 0 +# define BN_F_BN_MOD_EXP_MONT_WORD 0 +# define BN_F_BN_MOD_EXP_RECP 0 +# define BN_F_BN_MOD_EXP_SIMPLE 0 +# define BN_F_BN_MOD_INVERSE 0 +# define BN_F_BN_MOD_INVERSE_NO_BRANCH 0 +# define BN_F_BN_MOD_LSHIFT_QUICK 0 +# define BN_F_BN_MOD_SQRT 0 +# define BN_F_BN_MONT_CTX_NEW 0 +# define BN_F_BN_MPI2BN 0 +# define BN_F_BN_NEW 0 +# define BN_F_BN_POOL_GET 0 +# define BN_F_BN_RAND 0 +# define BN_F_BN_RAND_RANGE 0 +# define BN_F_BN_RECP_CTX_NEW 0 +# define BN_F_BN_RSHIFT 0 +# define BN_F_BN_SET_WORDS 0 +# define BN_F_BN_STACK_PUSH 0 +# define BN_F_BN_USUB 0 + +/* + * BUF function codes. + */ +# define BUF_F_BUF_MEM_GROW 0 +# define BUF_F_BUF_MEM_GROW_CLEAN 0 +# define BUF_F_BUF_MEM_NEW 0 + +# ifndef OPENSSL_NO_CMS +/* + * CMS function codes. + */ +# define CMS_F_CHECK_CONTENT 0 +# define CMS_F_CMS_ADD0_CERT 0 +# define CMS_F_CMS_ADD0_RECIPIENT_KEY 0 +# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 0 +# define CMS_F_CMS_ADD1_RECEIPTREQUEST 0 +# define CMS_F_CMS_ADD1_RECIPIENT_CERT 0 +# define CMS_F_CMS_ADD1_SIGNER 0 +# define CMS_F_CMS_ADD1_SIGNINGTIME 0 +# define CMS_F_CMS_COMPRESS 0 +# define CMS_F_CMS_COMPRESSEDDATA_CREATE 0 +# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 0 +# define CMS_F_CMS_COPY_CONTENT 0 +# define CMS_F_CMS_COPY_MESSAGEDIGEST 0 +# define CMS_F_CMS_DATA 0 +# define CMS_F_CMS_DATAFINAL 0 +# define CMS_F_CMS_DATAINIT 0 +# define CMS_F_CMS_DECRYPT 0 +# define CMS_F_CMS_DECRYPT_SET1_KEY 0 +# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 0 +# define CMS_F_CMS_DECRYPT_SET1_PKEY 0 +# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 0 +# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 0 +# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 0 +# define CMS_F_CMS_DIGEST_VERIFY 0 +# define CMS_F_CMS_ENCODE_RECEIPT 0 +# define CMS_F_CMS_ENCRYPT 0 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 0 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 0 +# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 0 +# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 0 +# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 0 +# define CMS_F_CMS_ENVELOPEDDATA_CREATE 0 +# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 0 +# define CMS_F_CMS_ENVELOPED_DATA_INIT 0 +# define CMS_F_CMS_ENV_ASN1_CTRL 0 +# define CMS_F_CMS_FINAL 0 +# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 0 +# define CMS_F_CMS_GET0_CONTENT 0 +# define CMS_F_CMS_GET0_ECONTENT_TYPE 0 +# define CMS_F_CMS_GET0_ENVELOPED 0 +# define CMS_F_CMS_GET0_REVOCATION_CHOICES 0 +# define CMS_F_CMS_GET0_SIGNED 0 +# define CMS_F_CMS_MSGSIGDIGEST_ADD1 0 +# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 0 +# define CMS_F_CMS_RECEIPT_VERIFY 0 +# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 0 +# define CMS_F_CMS_SD_ASN1_CTRL 0 +# define CMS_F_CMS_SET1_IAS 0 +# define CMS_F_CMS_SET1_KEYID 0 +# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 0 +# define CMS_F_CMS_SET_DETACHED 0 +# define CMS_F_CMS_SIGN 0 +# define CMS_F_CMS_SIGNED_DATA_INIT 0 +# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 0 +# define CMS_F_CMS_SIGNERINFO_SIGN 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 0 +# define CMS_F_CMS_SIGN_RECEIPT 0 +# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 0 +# define CMS_F_CMS_STREAM 0 +# define CMS_F_CMS_UNCOMPRESS 0 +# define CMS_F_CMS_VERIFY 0 +# define CMS_F_KEK_UNWRAP_KEY 0 +# endif + +# ifndef OPENSSL_NO_COMP +/* + * COMP function codes. + */ +# define COMP_F_BIO_ZLIB_FLUSH 0 +# define COMP_F_BIO_ZLIB_NEW 0 +# define COMP_F_BIO_ZLIB_READ 0 +# define COMP_F_BIO_ZLIB_WRITE 0 +# define COMP_F_COMP_CTX_NEW 0 +# endif + +/* + * CONF function codes. + */ +# define CONF_F_CONF_DUMP_FP 0 +# define CONF_F_CONF_LOAD 0 +# define CONF_F_CONF_LOAD_FP 0 +# define CONF_F_CONF_PARSE_LIST 0 +# define CONF_F_DEF_LOAD 0 +# define CONF_F_DEF_LOAD_BIO 0 +# define CONF_F_GET_NEXT_FILE 0 +# define CONF_F_MODULE_ADD 0 +# define CONF_F_MODULE_INIT 0 +# define CONF_F_MODULE_LOAD_DSO 0 +# define CONF_F_MODULE_RUN 0 +# define CONF_F_NCONF_DUMP_BIO 0 +# define CONF_F_NCONF_DUMP_FP 0 +# define CONF_F_NCONF_GET_NUMBER_E 0 +# define CONF_F_NCONF_GET_SECTION 0 +# define CONF_F_NCONF_GET_STRING 0 +# define CONF_F_NCONF_LOAD 0 +# define CONF_F_NCONF_LOAD_BIO 0 +# define CONF_F_NCONF_LOAD_FP 0 +# define CONF_F_NCONF_NEW 0 +# define CONF_F_PROCESS_INCLUDE 0 +# define CONF_F_SSL_MODULE_INIT 0 +# define CONF_F_STR_COPY 0 + +/* + * CRYPTO function codes. + */ +# define CRYPTO_F_CMAC_CTX_NEW 0 +# define CRYPTO_F_CRYPTO_DUP_EX_DATA 0 +# define CRYPTO_F_CRYPTO_FREE_EX_DATA 0 +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 0 +# define CRYPTO_F_CRYPTO_MEMDUP 0 +# define CRYPTO_F_CRYPTO_NEW_EX_DATA 0 +# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 0 +# define CRYPTO_F_CRYPTO_OCB128_INIT 0 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 0 +# define CRYPTO_F_GET_AND_LOCK 0 +# define CRYPTO_F_OPENSSL_ATEXIT 0 +# define CRYPTO_F_OPENSSL_BUF2HEXSTR 0 +# define CRYPTO_F_OPENSSL_FOPEN 0 +# define CRYPTO_F_OPENSSL_HEXSTR2BUF 0 +# define CRYPTO_F_OPENSSL_INIT_CRYPTO 0 +# define CRYPTO_F_OPENSSL_LH_NEW 0 +# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 0 +# define CRYPTO_F_OPENSSL_SK_DUP 0 +# define CRYPTO_F_PKEY_HMAC_INIT 0 +# define CRYPTO_F_PKEY_POLY1305_INIT 0 +# define CRYPTO_F_PKEY_SIPHASH_INIT 0 +# define CRYPTO_F_SK_RESERVE 0 + +# ifndef OPENSSL_NO_CT +/* + * CT function codes. + */ +# define CT_F_CTLOG_NEW 0 +# define CT_F_CTLOG_NEW_FROM_BASE64 0 +# define CT_F_CTLOG_NEW_FROM_CONF 0 +# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 0 +# define CT_F_CTLOG_STORE_LOAD_FILE 0 +# define CT_F_CTLOG_STORE_LOAD_LOG 0 +# define CT_F_CTLOG_STORE_NEW 0 +# define CT_F_CT_BASE64_DECODE 0 +# define CT_F_CT_POLICY_EVAL_CTX_NEW 0 +# define CT_F_CT_V1_LOG_ID_FROM_PKEY 0 +# define CT_F_I2O_SCT 0 +# define CT_F_I2O_SCT_LIST 0 +# define CT_F_I2O_SCT_SIGNATURE 0 +# define CT_F_O2I_SCT 0 +# define CT_F_O2I_SCT_LIST 0 +# define CT_F_O2I_SCT_SIGNATURE 0 +# define CT_F_SCT_CTX_NEW 0 +# define CT_F_SCT_CTX_VERIFY 0 +# define CT_F_SCT_NEW 0 +# define CT_F_SCT_NEW_FROM_BASE64 0 +# define CT_F_SCT_SET0_LOG_ID 0 +# define CT_F_SCT_SET1_EXTENSIONS 0 +# define CT_F_SCT_SET1_LOG_ID 0 +# define CT_F_SCT_SET1_SIGNATURE 0 +# define CT_F_SCT_SET_LOG_ENTRY_TYPE 0 +# define CT_F_SCT_SET_SIGNATURE_NID 0 +# define CT_F_SCT_SET_VERSION 0 +# endif + +# ifndef OPENSSL_NO_DH +/* + * DH function codes. + */ +# define DH_F_COMPUTE_KEY 0 +# define DH_F_DHPARAMS_PRINT_FP 0 +# define DH_F_DH_BUILTIN_GENPARAMS 0 +# define DH_F_DH_CHECK_EX 0 +# define DH_F_DH_CHECK_PARAMS_EX 0 +# define DH_F_DH_CHECK_PUB_KEY_EX 0 +# define DH_F_DH_CMS_DECRYPT 0 +# define DH_F_DH_CMS_SET_PEERKEY 0 +# define DH_F_DH_CMS_SET_SHARED_INFO 0 +# define DH_F_DH_METH_DUP 0 +# define DH_F_DH_METH_NEW 0 +# define DH_F_DH_METH_SET1_NAME 0 +# define DH_F_DH_NEW_BY_NID 0 +# define DH_F_DH_NEW_METHOD 0 +# define DH_F_DH_PARAM_DECODE 0 +# define DH_F_DH_PKEY_PUBLIC_CHECK 0 +# define DH_F_DH_PRIV_DECODE 0 +# define DH_F_DH_PRIV_ENCODE 0 +# define DH_F_DH_PUB_DECODE 0 +# define DH_F_DH_PUB_ENCODE 0 +# define DH_F_DO_DH_PRINT 0 +# define DH_F_GENERATE_KEY 0 +# define DH_F_PKEY_DH_CTRL_STR 0 +# define DH_F_PKEY_DH_DERIVE 0 +# define DH_F_PKEY_DH_INIT 0 +# define DH_F_PKEY_DH_KEYGEN 0 +# endif + +# ifndef OPENSSL_NO_DSA +/* + * DSA function codes. + */ +# define DSA_F_DSAPARAMS_PRINT 0 +# define DSA_F_DSAPARAMS_PRINT_FP 0 +# define DSA_F_DSA_BUILTIN_PARAMGEN 0 +# define DSA_F_DSA_BUILTIN_PARAMGEN2 0 +# define DSA_F_DSA_DO_SIGN 0 +# define DSA_F_DSA_DO_VERIFY 0 +# define DSA_F_DSA_METH_DUP 0 +# define DSA_F_DSA_METH_NEW 0 +# define DSA_F_DSA_METH_SET1_NAME 0 +# define DSA_F_DSA_NEW_METHOD 0 +# define DSA_F_DSA_PARAM_DECODE 0 +# define DSA_F_DSA_PRINT_FP 0 +# define DSA_F_DSA_PRIV_DECODE 0 +# define DSA_F_DSA_PRIV_ENCODE 0 +# define DSA_F_DSA_PUB_DECODE 0 +# define DSA_F_DSA_PUB_ENCODE 0 +# define DSA_F_DSA_SIGN 0 +# define DSA_F_DSA_SIGN_SETUP 0 +# define DSA_F_DSA_SIG_NEW 0 +# define DSA_F_OLD_DSA_PRIV_DECODE 0 +# define DSA_F_PKEY_DSA_CTRL 0 +# define DSA_F_PKEY_DSA_CTRL_STR 0 +# define DSA_F_PKEY_DSA_KEYGEN 0 +# endif + +# ifndef OPENSSL_NO_EC +/* + * EC function codes. + */ +# define EC_F_BN_TO_FELEM 0 +# define EC_F_D2I_ECPARAMETERS 0 +# define EC_F_D2I_ECPKPARAMETERS 0 +# define EC_F_D2I_ECPRIVATEKEY 0 +# define EC_F_DO_EC_KEY_PRINT 0 +# define EC_F_ECDH_CMS_DECRYPT 0 +# define EC_F_ECDH_CMS_SET_SHARED_INFO 0 +# define EC_F_ECDH_COMPUTE_KEY 0 +# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 0 +# define EC_F_ECDSA_DO_SIGN_EX 0 +# define EC_F_ECDSA_DO_VERIFY 0 +# define EC_F_ECDSA_SIGN_EX 0 +# define EC_F_ECDSA_SIGN_SETUP 0 +# define EC_F_ECDSA_SIG_NEW 0 +# define EC_F_ECDSA_VERIFY 0 +# define EC_F_ECD_ITEM_VERIFY 0 +# define EC_F_ECKEY_PARAM2TYPE 0 +# define EC_F_ECKEY_PARAM_DECODE 0 +# define EC_F_ECKEY_PRIV_DECODE 0 +# define EC_F_ECKEY_PRIV_ENCODE 0 +# define EC_F_ECKEY_PUB_DECODE 0 +# define EC_F_ECKEY_PUB_ENCODE 0 +# define EC_F_ECKEY_TYPE2PARAM 0 +# define EC_F_ECPARAMETERS_PRINT 0 +# define EC_F_ECPARAMETERS_PRINT_FP 0 +# define EC_F_ECPKPARAMETERS_PRINT 0 +# define EC_F_ECPKPARAMETERS_PRINT_FP 0 +# define EC_F_ECP_NISTZ256_GET_AFFINE 0 +# define EC_F_ECP_NISTZ256_INV_MOD_ORD 0 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 0 +# define EC_F_ECP_NISTZ256_POINTS_MUL 0 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 0 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 0 +# define EC_F_ECX_KEY_OP 0 +# define EC_F_ECX_PRIV_ENCODE 0 +# define EC_F_ECX_PUB_ENCODE 0 +# define EC_F_EC_ASN1_GROUP2CURVE 0 +# define EC_F_EC_ASN1_GROUP2FIELDID 0 +# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 0 +# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 0 +# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 0 +# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 0 +# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 0 +# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 0 +# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 0 +# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 0 +# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_GFP_MONT_FIELD_DECODE 0 +# define EC_F_EC_GFP_MONT_FIELD_ENCODE 0 +# define EC_F_EC_GFP_MONT_FIELD_INV 0 +# define EC_F_EC_GFP_MONT_FIELD_MUL 0 +# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 0 +# define EC_F_EC_GFP_MONT_FIELD_SQR 0 +# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP224_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP256_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP521_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NIST_FIELD_MUL 0 +# define EC_F_EC_GFP_NIST_FIELD_SQR 0 +# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_FIELD_INV 0 +# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 0 +# define EC_F_EC_GFP_SIMPLE_OCT2POINT 0 +# define EC_F_EC_GFP_SIMPLE_POINT2OCT 0 +# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 0 +# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_GROUP_CHECK 0 +# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GROUP_COPY 0 +# define EC_F_EC_GROUP_GET_CURVE 0 +# define EC_F_EC_GROUP_GET_CURVE_GF2M 0 +# define EC_F_EC_GROUP_GET_CURVE_GFP 0 +# define EC_F_EC_GROUP_GET_DEGREE 0 +# define EC_F_EC_GROUP_GET_ECPARAMETERS 0 +# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 0 +# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 0 +# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 0 +# define EC_F_EC_GROUP_NEW 0 +# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 0 +# define EC_F_EC_GROUP_NEW_FROM_DATA 0 +# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 0 +# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 0 +# define EC_F_EC_GROUP_SET_CURVE 0 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 0 +# define EC_F_EC_GROUP_SET_CURVE_GFP 0 +# define EC_F_EC_GROUP_SET_GENERATOR 0 +# define EC_F_EC_GROUP_SET_SEED 0 +# define EC_F_EC_KEY_CHECK_KEY 0 +# define EC_F_EC_KEY_COPY 0 +# define EC_F_EC_KEY_GENERATE_KEY 0 +# define EC_F_EC_KEY_NEW 0 +# define EC_F_EC_KEY_NEW_METHOD 0 +# define EC_F_EC_KEY_OCT2PRIV 0 +# define EC_F_EC_KEY_PRINT 0 +# define EC_F_EC_KEY_PRINT_FP 0 +# define EC_F_EC_KEY_PRIV2BUF 0 +# define EC_F_EC_KEY_PRIV2OCT 0 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 0 +# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 0 +# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 0 +# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 0 +# define EC_F_EC_PKEY_CHECK 0 +# define EC_F_EC_PKEY_PARAM_CHECK 0 +# define EC_F_EC_POINTS_MAKE_AFFINE 0 +# define EC_F_EC_POINTS_MUL 0 +# define EC_F_EC_POINT_ADD 0 +# define EC_F_EC_POINT_BN2POINT 0 +# define EC_F_EC_POINT_CMP 0 +# define EC_F_EC_POINT_COPY 0 +# define EC_F_EC_POINT_DBL 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_INVERT 0 +# define EC_F_EC_POINT_IS_AT_INFINITY 0 +# define EC_F_EC_POINT_IS_ON_CURVE 0 +# define EC_F_EC_POINT_MAKE_AFFINE 0 +# define EC_F_EC_POINT_NEW 0 +# define EC_F_EC_POINT_OCT2POINT 0 +# define EC_F_EC_POINT_POINT2BUF 0 +# define EC_F_EC_POINT_POINT2OCT 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_TO_INFINITY 0 +# define EC_F_EC_PRE_COMP_NEW 0 +# define EC_F_EC_SCALAR_MUL_LADDER 0 +# define EC_F_EC_WNAF_MUL 0 +# define EC_F_EC_WNAF_PRECOMPUTE_MULT 0 +# define EC_F_I2D_ECPARAMETERS 0 +# define EC_F_I2D_ECPKPARAMETERS 0 +# define EC_F_I2D_ECPRIVATEKEY 0 +# define EC_F_I2O_ECPUBLICKEY 0 +# define EC_F_NISTP224_PRE_COMP_NEW 0 +# define EC_F_NISTP256_PRE_COMP_NEW 0 +# define EC_F_NISTP521_PRE_COMP_NEW 0 +# define EC_F_O2I_ECPUBLICKEY 0 +# define EC_F_OLD_EC_PRIV_DECODE 0 +# define EC_F_OSSL_ECDH_COMPUTE_KEY 0 +# define EC_F_OSSL_ECDSA_SIGN_SIG 0 +# define EC_F_OSSL_ECDSA_VERIFY_SIG 0 +# define EC_F_PKEY_ECD_CTRL 0 +# define EC_F_PKEY_ECD_DIGESTSIGN 0 +# define EC_F_PKEY_ECD_DIGESTSIGN25519 0 +# define EC_F_PKEY_ECD_DIGESTSIGN448 0 +# define EC_F_PKEY_ECX_DERIVE 0 +# define EC_F_PKEY_EC_CTRL 0 +# define EC_F_PKEY_EC_CTRL_STR 0 +# define EC_F_PKEY_EC_DERIVE 0 +# define EC_F_PKEY_EC_INIT 0 +# define EC_F_PKEY_EC_KDF_DERIVE 0 +# define EC_F_PKEY_EC_KEYGEN 0 +# define EC_F_PKEY_EC_PARAMGEN 0 +# define EC_F_PKEY_EC_SIGN 0 +# define EC_F_VALIDATE_ECX_DERIVE 0 +# endif + +# ifndef OPENSSL_NO_ENGINE +/* + * ENGINE function codes. + */ +# define ENGINE_F_DIGEST_UPDATE 0 +# define ENGINE_F_DYNAMIC_CTRL 0 +# define ENGINE_F_DYNAMIC_GET_DATA_CTX 0 +# define ENGINE_F_DYNAMIC_LOAD 0 +# define ENGINE_F_DYNAMIC_SET_DATA_CTX 0 +# define ENGINE_F_ENGINE_ADD 0 +# define ENGINE_F_ENGINE_BY_ID 0 +# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 0 +# define ENGINE_F_ENGINE_CTRL 0 +# define ENGINE_F_ENGINE_CTRL_CMD 0 +# define ENGINE_F_ENGINE_CTRL_CMD_STRING 0 +# define ENGINE_F_ENGINE_FINISH 0 +# define ENGINE_F_ENGINE_GET_CIPHER 0 +# define ENGINE_F_ENGINE_GET_DIGEST 0 +# define ENGINE_F_ENGINE_GET_FIRST 0 +# define ENGINE_F_ENGINE_GET_LAST 0 +# define ENGINE_F_ENGINE_GET_NEXT 0 +# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 0 +# define ENGINE_F_ENGINE_GET_PKEY_METH 0 +# define ENGINE_F_ENGINE_GET_PREV 0 +# define ENGINE_F_ENGINE_INIT 0 +# define ENGINE_F_ENGINE_LIST_ADD 0 +# define ENGINE_F_ENGINE_LIST_REMOVE 0 +# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 0 +# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 0 +# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 0 +# define ENGINE_F_ENGINE_NEW 0 +# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 0 +# define ENGINE_F_ENGINE_REMOVE 0 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 0 +# define ENGINE_F_ENGINE_SET_ID 0 +# define ENGINE_F_ENGINE_SET_NAME 0 +# define ENGINE_F_ENGINE_TABLE_REGISTER 0 +# define ENGINE_F_ENGINE_UNLOCKED_FINISH 0 +# define ENGINE_F_ENGINE_UP_REF 0 +# define ENGINE_F_INT_CLEANUP_ITEM 0 +# define ENGINE_F_INT_CTRL_HELPER 0 +# define ENGINE_F_INT_ENGINE_CONFIGURE 0 +# define ENGINE_F_INT_ENGINE_MODULE_INIT 0 +# define ENGINE_F_OSSL_HMAC_INIT 0 +# endif + +/* + * EVP function codes. + */ +# define EVP_F_AESNI_INIT_KEY 0 +# define EVP_F_AESNI_XTS_INIT_KEY 0 +# define EVP_F_AES_GCM_CTRL 0 +# define EVP_F_AES_INIT_KEY 0 +# define EVP_F_AES_OCB_CIPHER 0 +# define EVP_F_AES_T4_INIT_KEY 0 +# define EVP_F_AES_T4_XTS_INIT_KEY 0 +# define EVP_F_AES_WRAP_CIPHER 0 +# define EVP_F_AES_XTS_INIT_KEY 0 +# define EVP_F_ALG_MODULE_INIT 0 +# define EVP_F_ARIA_CCM_INIT_KEY 0 +# define EVP_F_ARIA_GCM_CTRL 0 +# define EVP_F_ARIA_GCM_INIT_KEY 0 +# define EVP_F_ARIA_INIT_KEY 0 +# define EVP_F_B64_NEW 0 +# define EVP_F_CAMELLIA_INIT_KEY 0 +# define EVP_F_CHACHA20_POLY1305_CTRL 0 +# define EVP_F_CMLL_T4_INIT_KEY 0 +# define EVP_F_DES_EDE3_WRAP_CIPHER 0 +# define EVP_F_DO_SIGVER_INIT 0 +# define EVP_F_ENC_NEW 0 +# define EVP_F_EVP_CIPHERINIT_EX 0 +# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 0 +# define EVP_F_EVP_CIPHER_CTX_COPY 0 +# define EVP_F_EVP_CIPHER_CTX_CTRL 0 +# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 0 +# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 0 +# define EVP_F_EVP_DECRYPTFINAL_EX 0 +# define EVP_F_EVP_DECRYPTUPDATE 0 +# define EVP_F_EVP_DIGESTFINALXOF 0 +# define EVP_F_EVP_DIGESTINIT_EX 0 +# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 0 +# define EVP_F_EVP_ENCRYPTFINAL_EX 0 +# define EVP_F_EVP_ENCRYPTUPDATE 0 +# define EVP_F_EVP_MD_CTX_COPY_EX 0 +# define EVP_F_EVP_MD_SIZE 0 +# define EVP_F_EVP_OPENINIT 0 +# define EVP_F_EVP_PBE_ALG_ADD 0 +# define EVP_F_EVP_PBE_ALG_ADD_TYPE 0 +# define EVP_F_EVP_PBE_CIPHERINIT 0 +# define EVP_F_EVP_PBE_SCRYPT 0 +# define EVP_F_EVP_PKCS82PKEY 0 +# define EVP_F_EVP_PKEY2PKCS8 0 +# define EVP_F_EVP_PKEY_ASN1_ADD0 0 +# define EVP_F_EVP_PKEY_CHECK 0 +# define EVP_F_EVP_PKEY_COPY_PARAMETERS 0 +# define EVP_F_EVP_PKEY_CTX_CTRL 0 +# define EVP_F_EVP_PKEY_CTX_CTRL_STR 0 +# define EVP_F_EVP_PKEY_CTX_DUP 0 +# define EVP_F_EVP_PKEY_CTX_MD 0 +# define EVP_F_EVP_PKEY_DECRYPT 0 +# define EVP_F_EVP_PKEY_DECRYPT_INIT 0 +# define EVP_F_EVP_PKEY_DECRYPT_OLD 0 +# define EVP_F_EVP_PKEY_DERIVE 0 +# define EVP_F_EVP_PKEY_DERIVE_INIT 0 +# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 0 +# define EVP_F_EVP_PKEY_ENCRYPT 0 +# define EVP_F_EVP_PKEY_ENCRYPT_INIT 0 +# define EVP_F_EVP_PKEY_ENCRYPT_OLD 0 +# define EVP_F_EVP_PKEY_GET0_DH 0 +# define EVP_F_EVP_PKEY_GET0_DSA 0 +# define EVP_F_EVP_PKEY_GET0_EC_KEY 0 +# define EVP_F_EVP_PKEY_GET0_HMAC 0 +# define EVP_F_EVP_PKEY_GET0_POLY1305 0 +# define EVP_F_EVP_PKEY_GET0_RSA 0 +# define EVP_F_EVP_PKEY_GET0_SIPHASH 0 +# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 0 +# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 0 +# define EVP_F_EVP_PKEY_KEYGEN 0 +# define EVP_F_EVP_PKEY_KEYGEN_INIT 0 +# define EVP_F_EVP_PKEY_METH_ADD0 0 +# define EVP_F_EVP_PKEY_METH_NEW 0 +# define EVP_F_EVP_PKEY_NEW 0 +# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 0 +# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 0 +# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 0 +# define EVP_F_EVP_PKEY_PARAMGEN 0 +# define EVP_F_EVP_PKEY_PARAMGEN_INIT 0 +# define EVP_F_EVP_PKEY_PARAM_CHECK 0 +# define EVP_F_EVP_PKEY_PUBLIC_CHECK 0 +# define EVP_F_EVP_PKEY_SET1_ENGINE 0 +# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 0 +# define EVP_F_EVP_PKEY_SIGN 0 +# define EVP_F_EVP_PKEY_SIGN_INIT 0 +# define EVP_F_EVP_PKEY_VERIFY 0 +# define EVP_F_EVP_PKEY_VERIFY_INIT 0 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER 0 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 0 +# define EVP_F_EVP_SIGNFINAL 0 +# define EVP_F_EVP_VERIFYFINAL 0 +# define EVP_F_INT_CTX_NEW 0 +# define EVP_F_OK_NEW 0 +# define EVP_F_PKCS5_PBE_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 0 +# define EVP_F_PKEY_SET_TYPE 0 +# define EVP_F_RC2_MAGIC_TO_METH 0 +# define EVP_F_RC5_CTRL 0 +# define EVP_F_R_32_12_16_INIT_KEY 0 +# define EVP_F_S390X_AES_GCM_CTRL 0 +# define EVP_F_UPDATE 0 + +/* + * KDF function codes. + */ +# define KDF_F_PKEY_HKDF_CTRL_STR 0 +# define KDF_F_PKEY_HKDF_DERIVE 0 +# define KDF_F_PKEY_HKDF_INIT 0 +# define KDF_F_PKEY_SCRYPT_CTRL_STR 0 +# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 0 +# define KDF_F_PKEY_SCRYPT_DERIVE 0 +# define KDF_F_PKEY_SCRYPT_INIT 0 +# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 0 +# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 0 +# define KDF_F_PKEY_TLS1_PRF_DERIVE 0 +# define KDF_F_PKEY_TLS1_PRF_INIT 0 +# define KDF_F_TLS1_PRF_ALG 0 + +/* + * KDF reason codes. + */ +# define KDF_R_INVALID_DIGEST 0 +# define KDF_R_MISSING_ITERATION_COUNT 0 +# define KDF_R_MISSING_KEY 0 +# define KDF_R_MISSING_MESSAGE_DIGEST 0 +# define KDF_R_MISSING_PARAMETER 0 +# define KDF_R_MISSING_PASS 0 +# define KDF_R_MISSING_SALT 0 +# define KDF_R_MISSING_SECRET 0 +# define KDF_R_MISSING_SEED 0 +# define KDF_R_UNKNOWN_PARAMETER_TYPE 0 +# define KDF_R_VALUE_ERROR 0 +# define KDF_R_VALUE_MISSING 0 + +/* + * OBJ function codes. + */ +# define OBJ_F_OBJ_ADD_OBJECT 0 +# define OBJ_F_OBJ_ADD_SIGID 0 +# define OBJ_F_OBJ_CREATE 0 +# define OBJ_F_OBJ_DUP 0 +# define OBJ_F_OBJ_NAME_NEW_INDEX 0 +# define OBJ_F_OBJ_NID2LN 0 +# define OBJ_F_OBJ_NID2OBJ 0 +# define OBJ_F_OBJ_NID2SN 0 +# define OBJ_F_OBJ_TXT2OBJ 0 + +# ifndef OPENSSL_NO_OCSP +/* + * OCSP function codes. + */ +# define OCSP_F_D2I_OCSP_NONCE 0 +# define OCSP_F_OCSP_BASIC_ADD1_STATUS 0 +# define OCSP_F_OCSP_BASIC_SIGN 0 +# define OCSP_F_OCSP_BASIC_SIGN_CTX 0 +# define OCSP_F_OCSP_BASIC_VERIFY 0 +# define OCSP_F_OCSP_CERT_ID_NEW 0 +# define OCSP_F_OCSP_CHECK_DELEGATED 0 +# define OCSP_F_OCSP_CHECK_IDS 0 +# define OCSP_F_OCSP_CHECK_ISSUER 0 +# define OCSP_F_OCSP_CHECK_VALIDITY 0 +# define OCSP_F_OCSP_MATCH_ISSUERID 0 +# define OCSP_F_OCSP_PARSE_URL 0 +# define OCSP_F_OCSP_REQUEST_SIGN 0 +# define OCSP_F_OCSP_REQUEST_VERIFY 0 +# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 0 +# define OCSP_F_PARSE_HTTP_LINE1 0 +# endif + +/* + * PEM function codes. + */ +# define PEM_F_B2I_DSS 0 +# define PEM_F_B2I_PVK_BIO 0 +# define PEM_F_B2I_RSA 0 +# define PEM_F_CHECK_BITLEN_DSA 0 +# define PEM_F_CHECK_BITLEN_RSA 0 +# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 0 +# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 0 +# define PEM_F_DO_B2I 0 +# define PEM_F_DO_B2I_BIO 0 +# define PEM_F_DO_BLOB_HEADER 0 +# define PEM_F_DO_I2B 0 +# define PEM_F_DO_PK8PKEY 0 +# define PEM_F_DO_PK8PKEY_FP 0 +# define PEM_F_DO_PVK_BODY 0 +# define PEM_F_DO_PVK_HEADER 0 +# define PEM_F_GET_HEADER_AND_DATA 0 +# define PEM_F_GET_NAME 0 +# define PEM_F_I2B_PVK 0 +# define PEM_F_I2B_PVK_BIO 0 +# define PEM_F_LOAD_IV 0 +# define PEM_F_PEM_ASN1_READ 0 +# define PEM_F_PEM_ASN1_READ_BIO 0 +# define PEM_F_PEM_ASN1_WRITE 0 +# define PEM_F_PEM_ASN1_WRITE_BIO 0 +# define PEM_F_PEM_DEF_CALLBACK 0 +# define PEM_F_PEM_DO_HEADER 0 +# define PEM_F_PEM_GET_EVP_CIPHER_INFO 0 +# define PEM_F_PEM_READ 0 +# define PEM_F_PEM_READ_BIO 0 +# define PEM_F_PEM_READ_BIO_DHPARAMS 0 +# define PEM_F_PEM_READ_BIO_EX 0 +# define PEM_F_PEM_READ_BIO_PARAMETERS 0 +# define PEM_F_PEM_READ_BIO_PRIVATEKEY 0 +# define PEM_F_PEM_READ_DHPARAMS 0 +# define PEM_F_PEM_READ_PRIVATEKEY 0 +# define PEM_F_PEM_SIGNFINAL 0 +# define PEM_F_PEM_WRITE 0 +# define PEM_F_PEM_WRITE_BIO 0 +# define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL 0 +# define PEM_F_PEM_WRITE_PRIVATEKEY 0 +# define PEM_F_PEM_X509_INFO_READ 0 +# define PEM_F_PEM_X509_INFO_READ_BIO 0 +# define PEM_F_PEM_X509_INFO_WRITE_BIO 0 + +/* + * PKCS12 function codes. + */ +# define PKCS12_F_OPENSSL_ASC2UNI 0 +# define PKCS12_F_OPENSSL_UNI2ASC 0 +# define PKCS12_F_OPENSSL_UNI2UTF8 0 +# define PKCS12_F_OPENSSL_UTF82UNI 0 +# define PKCS12_F_PKCS12_CREATE 0 +# define PKCS12_F_PKCS12_GEN_MAC 0 +# define PKCS12_F_PKCS12_INIT 0 +# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 0 +# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 0 +# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 0 +# define PKCS12_F_PKCS12_KEY_GEN_ASC 0 +# define PKCS12_F_PKCS12_KEY_GEN_UNI 0 +# define PKCS12_F_PKCS12_KEY_GEN_UTF8 0 +# define PKCS12_F_PKCS12_NEWPASS 0 +# define PKCS12_F_PKCS12_PACK_P7DATA 0 +# define PKCS12_F_PKCS12_PACK_P7ENCDATA 0 +# define PKCS12_F_PKCS12_PARSE 0 +# define PKCS12_F_PKCS12_PBE_CRYPT 0 +# define PKCS12_F_PKCS12_PBE_KEYIVGEN 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 0 +# define PKCS12_F_PKCS12_SETUP_MAC 0 +# define PKCS12_F_PKCS12_SET_MAC 0 +# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 0 +# define PKCS12_F_PKCS12_UNPACK_P7DATA 0 +# define PKCS12_F_PKCS12_VERIFY_MAC 0 +# define PKCS12_F_PKCS8_ENCRYPT 0 +# define PKCS12_F_PKCS8_SET0_PBE 0 + +/* + * PKCS7 function codes. + */ +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 0 +# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 0 +# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 0 +# define PKCS7_F_PKCS7_ADD_CERTIFICATE 0 +# define PKCS7_F_PKCS7_ADD_CRL 0 +# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 0 +# define PKCS7_F_PKCS7_ADD_SIGNATURE 0 +# define PKCS7_F_PKCS7_ADD_SIGNER 0 +# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 0 +# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 0 +# define PKCS7_F_PKCS7_CTRL 0 +# define PKCS7_F_PKCS7_DATADECODE 0 +# define PKCS7_F_PKCS7_DATAFINAL 0 +# define PKCS7_F_PKCS7_DATAINIT 0 +# define PKCS7_F_PKCS7_DATAVERIFY 0 +# define PKCS7_F_PKCS7_DECRYPT 0 +# define PKCS7_F_PKCS7_DECRYPT_RINFO 0 +# define PKCS7_F_PKCS7_ENCODE_RINFO 0 +# define PKCS7_F_PKCS7_ENCRYPT 0 +# define PKCS7_F_PKCS7_FINAL 0 +# define PKCS7_F_PKCS7_FIND_DIGEST 0 +# define PKCS7_F_PKCS7_GET0_SIGNERS 0 +# define PKCS7_F_PKCS7_RECIP_INFO_SET 0 +# define PKCS7_F_PKCS7_SET_CIPHER 0 +# define PKCS7_F_PKCS7_SET_CONTENT 0 +# define PKCS7_F_PKCS7_SET_DIGEST 0 +# define PKCS7_F_PKCS7_SET_TYPE 0 +# define PKCS7_F_PKCS7_SIGN 0 +# define PKCS7_F_PKCS7_SIGNATUREVERIFY 0 +# define PKCS7_F_PKCS7_SIGNER_INFO_SET 0 +# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 0 +# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 0 +# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 0 +# define PKCS7_F_PKCS7_VERIFY 0 + +/* + * RAND function codes. + */ +# define RAND_F_DATA_COLLECT_METHOD 0 +# define RAND_F_DRBG_BYTES 0 +# define RAND_F_DRBG_GET_ENTROPY 0 +# define RAND_F_DRBG_SETUP 0 +# define RAND_F_GET_ENTROPY 0 +# define RAND_F_RAND_BYTES 0 +# define RAND_F_RAND_DRBG_ENABLE_LOCKING 0 +# define RAND_F_RAND_DRBG_GENERATE 0 +# define RAND_F_RAND_DRBG_GET_ENTROPY 0 +# define RAND_F_RAND_DRBG_GET_NONCE 0 +# define RAND_F_RAND_DRBG_INSTANTIATE 0 +# define RAND_F_RAND_DRBG_NEW 0 +# define RAND_F_RAND_DRBG_RESEED 0 +# define RAND_F_RAND_DRBG_RESTART 0 +# define RAND_F_RAND_DRBG_SET 0 +# define RAND_F_RAND_DRBG_SET_DEFAULTS 0 +# define RAND_F_RAND_DRBG_UNINSTANTIATE 0 +# define RAND_F_RAND_LOAD_FILE 0 +# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 0 +# define RAND_F_RAND_POOL_ADD 0 +# define RAND_F_RAND_POOL_ADD_BEGIN 0 +# define RAND_F_RAND_POOL_ADD_END 0 +# define RAND_F_RAND_POOL_ATTACH 0 +# define RAND_F_RAND_POOL_BYTES_NEEDED 0 +# define RAND_F_RAND_POOL_GROW 0 +# define RAND_F_RAND_POOL_NEW 0 +# define RAND_F_RAND_PSEUDO_BYTES 0 +# define RAND_F_RAND_WRITE_FILE 0 + +/* + * RSA function codes. + */ +# define RSA_F_CHECK_PADDING_MD 0 +# define RSA_F_ENCODE_PKCS1 0 +# define RSA_F_INT_RSA_VERIFY 0 +# define RSA_F_OLD_RSA_PRIV_DECODE 0 +# define RSA_F_PKEY_PSS_INIT 0 +# define RSA_F_PKEY_RSA_CTRL 0 +# define RSA_F_PKEY_RSA_CTRL_STR 0 +# define RSA_F_PKEY_RSA_SIGN 0 +# define RSA_F_PKEY_RSA_VERIFY 0 +# define RSA_F_PKEY_RSA_VERIFYRECOVER 0 +# define RSA_F_RSA_ALGOR_TO_MD 0 +# define RSA_F_RSA_BUILTIN_KEYGEN 0 +# define RSA_F_RSA_CHECK_KEY 0 +# define RSA_F_RSA_CHECK_KEY_EX 0 +# define RSA_F_RSA_CMS_DECRYPT 0 +# define RSA_F_RSA_CMS_VERIFY 0 +# define RSA_F_RSA_ITEM_VERIFY 0 +# define RSA_F_RSA_METH_DUP 0 +# define RSA_F_RSA_METH_NEW 0 +# define RSA_F_RSA_METH_SET1_NAME 0 +# define RSA_F_RSA_MGF1_TO_MD 0 +# define RSA_F_RSA_MULTIP_INFO_NEW 0 +# define RSA_F_RSA_NEW_METHOD 0 +# define RSA_F_RSA_NULL 0 +# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 0 +# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 0 +# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 0 +# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 0 +# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 0 +# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 0 +# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 0 +# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 0 +# define RSA_F_RSA_PADDING_ADD_NONE 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 0 +# define RSA_F_RSA_PADDING_ADD_SSLV23 0 +# define RSA_F_RSA_PADDING_ADD_X931 0 +# define RSA_F_RSA_PADDING_CHECK_NONE 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 0 +# define RSA_F_RSA_PADDING_CHECK_SSLV23 0 +# define RSA_F_RSA_PADDING_CHECK_X931 0 +# define RSA_F_RSA_PARAM_DECODE 0 +# define RSA_F_RSA_PRINT 0 +# define RSA_F_RSA_PRINT_FP 0 +# define RSA_F_RSA_PRIV_DECODE 0 +# define RSA_F_RSA_PRIV_ENCODE 0 +# define RSA_F_RSA_PSS_GET_PARAM 0 +# define RSA_F_RSA_PSS_TO_CTX 0 +# define RSA_F_RSA_PUB_DECODE 0 +# define RSA_F_RSA_SETUP_BLINDING 0 +# define RSA_F_RSA_SIGN 0 +# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 0 +# define RSA_F_RSA_VERIFY 0 +# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 0 +# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 0 +# define RSA_F_SETUP_TBUF 0 + +/* + * OSSL_STORE function codes. + */ +# define OSSL_STORE_F_FILE_CTRL 0 +# define OSSL_STORE_F_FILE_FIND 0 +# define OSSL_STORE_F_FILE_GET_PASS 0 +# define OSSL_STORE_F_FILE_LOAD 0 +# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 0 +# define OSSL_STORE_F_FILE_NAME_TO_URI 0 +# define OSSL_STORE_F_FILE_OPEN 0 +# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 0 +# define OSSL_STORE_F_OSSL_STORE_EXPECT 0 +# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 0 +# define OSSL_STORE_F_OSSL_STORE_FIND 0 +# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 0 +# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 0 +# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 0 +# define OSSL_STORE_F_OSSL_STORE_OPEN 0 +# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 0 +# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 0 +# define OSSL_STORE_F_TRY_DECODE_PARAMS 0 +# define OSSL_STORE_F_TRY_DECODE_PKCS12 0 +# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 0 + +# ifndef OPENSSL_NO_TS +/* + * TS function codes. + */ +# define TS_F_DEF_SERIAL_CB 0 +# define TS_F_DEF_TIME_CB 0 +# define TS_F_ESS_ADD_SIGNING_CERT 0 +# define TS_F_ESS_ADD_SIGNING_CERT_V2 0 +# define TS_F_ESS_CERT_ID_NEW_INIT 0 +# define TS_F_ESS_CERT_ID_V2_NEW_INIT 0 +# define TS_F_ESS_SIGNING_CERT_NEW_INIT 0 +# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 0 +# define TS_F_INT_TS_RESP_VERIFY_TOKEN 0 +# define TS_F_PKCS7_TO_TS_TST_INFO 0 +# define TS_F_TS_ACCURACY_SET_MICROS 0 +# define TS_F_TS_ACCURACY_SET_MILLIS 0 +# define TS_F_TS_ACCURACY_SET_SECONDS 0 +# define TS_F_TS_CHECK_IMPRINTS 0 +# define TS_F_TS_CHECK_NONCES 0 +# define TS_F_TS_CHECK_POLICY 0 +# define TS_F_TS_CHECK_SIGNING_CERTS 0 +# define TS_F_TS_CHECK_STATUS_INFO 0 +# define TS_F_TS_COMPUTE_IMPRINT 0 +# define TS_F_TS_CONF_INVALID 0 +# define TS_F_TS_CONF_LOAD_CERT 0 +# define TS_F_TS_CONF_LOAD_CERTS 0 +# define TS_F_TS_CONF_LOAD_KEY 0 +# define TS_F_TS_CONF_LOOKUP_FAIL 0 +# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 0 +# define TS_F_TS_GET_STATUS_TEXT 0 +# define TS_F_TS_MSG_IMPRINT_SET_ALGO 0 +# define TS_F_TS_REQ_SET_MSG_IMPRINT 0 +# define TS_F_TS_REQ_SET_NONCE 0 +# define TS_F_TS_REQ_SET_POLICY_ID 0 +# define TS_F_TS_RESP_CREATE_RESPONSE 0 +# define TS_F_TS_RESP_CREATE_TST_INFO 0 +# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 0 +# define TS_F_TS_RESP_CTX_ADD_MD 0 +# define TS_F_TS_RESP_CTX_ADD_POLICY 0 +# define TS_F_TS_RESP_CTX_NEW 0 +# define TS_F_TS_RESP_CTX_SET_ACCURACY 0 +# define TS_F_TS_RESP_CTX_SET_CERTS 0 +# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 0 +# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 0 +# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 0 +# define TS_F_TS_RESP_GET_POLICY 0 +# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 0 +# define TS_F_TS_RESP_SET_STATUS_INFO 0 +# define TS_F_TS_RESP_SET_TST_INFO 0 +# define TS_F_TS_RESP_SIGN 0 +# define TS_F_TS_RESP_VERIFY_SIGNATURE 0 +# define TS_F_TS_TST_INFO_SET_ACCURACY 0 +# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 0 +# define TS_F_TS_TST_INFO_SET_NONCE 0 +# define TS_F_TS_TST_INFO_SET_POLICY_ID 0 +# define TS_F_TS_TST_INFO_SET_SERIAL 0 +# define TS_F_TS_TST_INFO_SET_TIME 0 +# define TS_F_TS_TST_INFO_SET_TSA 0 +# define TS_F_TS_VERIFY 0 +# define TS_F_TS_VERIFY_CERT 0 +# define TS_F_TS_VERIFY_CTX_NEW 0 +# endif + +/* + * UI function codes. + */ +# define UI_F_CLOSE_CONSOLE 0 +# define UI_F_ECHO_CONSOLE 0 +# define UI_F_GENERAL_ALLOCATE_BOOLEAN 0 +# define UI_F_GENERAL_ALLOCATE_PROMPT 0 +# define UI_F_NOECHO_CONSOLE 0 +# define UI_F_OPEN_CONSOLE 0 +# define UI_F_UI_CONSTRUCT_PROMPT 0 +# define UI_F_UI_CREATE_METHOD 0 +# define UI_F_UI_CTRL 0 +# define UI_F_UI_DUP_ERROR_STRING 0 +# define UI_F_UI_DUP_INFO_STRING 0 +# define UI_F_UI_DUP_INPUT_BOOLEAN 0 +# define UI_F_UI_DUP_INPUT_STRING 0 +# define UI_F_UI_DUP_USER_DATA 0 +# define UI_F_UI_DUP_VERIFY_STRING 0 +# define UI_F_UI_GET0_RESULT 0 +# define UI_F_UI_GET_RESULT_LENGTH 0 +# define UI_F_UI_NEW_METHOD 0 +# define UI_F_UI_PROCESS 0 +# define UI_F_UI_SET_RESULT 0 +# define UI_F_UI_SET_RESULT_EX 0 + +/* + * X509 function codes. + */ +# define X509_F_ADD_CERT_DIR 0 +# define X509_F_BUILD_CHAIN 0 +# define X509_F_BY_FILE_CTRL 0 +# define X509_F_CHECK_NAME_CONSTRAINTS 0 +# define X509_F_CHECK_POLICY 0 +# define X509_F_DANE_I2D 0 +# define X509_F_DIR_CTRL 0 +# define X509_F_GET_CERT_BY_SUBJECT 0 +# define X509_F_I2D_X509_AUX 0 +# define X509_F_LOOKUP_CERTS_SK 0 +# define X509_F_NETSCAPE_SPKI_B64_DECODE 0 +# define X509_F_NETSCAPE_SPKI_B64_ENCODE 0 +# define X509_F_NEW_DIR 0 +# define X509_F_X509AT_ADD1_ATTR 0 +# define X509_F_X509V3_ADD_EXT 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 0 +# define X509_F_X509_ATTRIBUTE_GET0_DATA 0 +# define X509_F_X509_ATTRIBUTE_SET1_DATA 0 +# define X509_F_X509_CHECK_PRIVATE_KEY 0 +# define X509_F_X509_CRL_DIFF 0 +# define X509_F_X509_CRL_METHOD_NEW 0 +# define X509_F_X509_CRL_PRINT_FP 0 +# define X509_F_X509_EXTENSION_CREATE_BY_NID 0 +# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 0 +# define X509_F_X509_GET_PUBKEY_PARAMETERS 0 +# define X509_F_X509_LOAD_CERT_CRL_FILE 0 +# define X509_F_X509_LOAD_CERT_FILE 0 +# define X509_F_X509_LOAD_CRL_FILE 0 +# define X509_F_X509_LOOKUP_METH_NEW 0 +# define X509_F_X509_LOOKUP_NEW 0 +# define X509_F_X509_NAME_ADD_ENTRY 0 +# define X509_F_X509_NAME_CANON 0 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 0 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 0 +# define X509_F_X509_NAME_ENTRY_SET_OBJECT 0 +# define X509_F_X509_NAME_ONELINE 0 +# define X509_F_X509_NAME_PRINT 0 +# define X509_F_X509_OBJECT_NEW 0 +# define X509_F_X509_PRINT_EX_FP 0 +# define X509_F_X509_PUBKEY_DECODE 0 +# define X509_F_X509_PUBKEY_GET 0 +# define X509_F_X509_PUBKEY_GET0 0 +# define X509_F_X509_PUBKEY_SET 0 +# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 0 +# define X509_F_X509_REQ_PRINT_EX 0 +# define X509_F_X509_REQ_PRINT_FP 0 +# define X509_F_X509_REQ_TO_X509 0 +# define X509_F_X509_STORE_ADD_CERT 0 +# define X509_F_X509_STORE_ADD_CRL 0 +# define X509_F_X509_STORE_ADD_LOOKUP 0 +# define X509_F_X509_STORE_CTX_GET1_ISSUER 0 +# define X509_F_X509_STORE_CTX_INIT 0 +# define X509_F_X509_STORE_CTX_NEW 0 +# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 0 +# define X509_F_X509_STORE_NEW 0 +# define X509_F_X509_TO_X509_REQ 0 +# define X509_F_X509_TRUST_ADD 0 +# define X509_F_X509_TRUST_SET 0 +# define X509_F_X509_VERIFY_CERT 0 +# define X509_F_X509_VERIFY_PARAM_NEW 0 + +/* + * X509V3 function codes. + */ +# define X509V3_F_A2I_GENERAL_NAME 0 +# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 0 +# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 0 +# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 0 +# define X509V3_F_BIGNUM_TO_STRING 0 +# define X509V3_F_COPY_EMAIL 0 +# define X509V3_F_COPY_ISSUER 0 +# define X509V3_F_DO_DIRNAME 0 +# define X509V3_F_DO_EXT_I2D 0 +# define X509V3_F_DO_EXT_NCONF 0 +# define X509V3_F_GNAMES_FROM_SECTNAME 0 +# define X509V3_F_I2S_ASN1_ENUMERATED 0 +# define X509V3_F_I2S_ASN1_IA5STRING 0 +# define X509V3_F_I2S_ASN1_INTEGER 0 +# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 0 +# define X509V3_F_LEVEL_ADD_NODE 0 +# define X509V3_F_NOTICE_SECTION 0 +# define X509V3_F_NREF_NOS 0 +# define X509V3_F_POLICY_CACHE_CREATE 0 +# define X509V3_F_POLICY_CACHE_NEW 0 +# define X509V3_F_POLICY_DATA_NEW 0 +# define X509V3_F_POLICY_SECTION 0 +# define X509V3_F_PROCESS_PCI_VALUE 0 +# define X509V3_F_R2I_CERTPOL 0 +# define X509V3_F_R2I_PCI 0 +# define X509V3_F_S2I_ASN1_IA5STRING 0 +# define X509V3_F_S2I_ASN1_INTEGER 0 +# define X509V3_F_S2I_ASN1_OCTET_STRING 0 +# define X509V3_F_S2I_SKEY_ID 0 +# define X509V3_F_SET_DIST_POINT_NAME 0 +# define X509V3_F_SXNET_ADD_ID_ASC 0 +# define X509V3_F_SXNET_ADD_ID_INTEGER 0 +# define X509V3_F_SXNET_ADD_ID_ULONG 0 +# define X509V3_F_SXNET_GET_ID_ASC 0 +# define X509V3_F_SXNET_GET_ID_ULONG 0 +# define X509V3_F_TREE_INIT 0 +# define X509V3_F_V2I_ASIDENTIFIERS 0 +# define X509V3_F_V2I_ASN1_BIT_STRING 0 +# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 0 +# define X509V3_F_V2I_AUTHORITY_KEYID 0 +# define X509V3_F_V2I_BASIC_CONSTRAINTS 0 +# define X509V3_F_V2I_CRLD 0 +# define X509V3_F_V2I_EXTENDED_KEY_USAGE 0 +# define X509V3_F_V2I_GENERAL_NAMES 0 +# define X509V3_F_V2I_GENERAL_NAME_EX 0 +# define X509V3_F_V2I_IDP 0 +# define X509V3_F_V2I_IPADDRBLOCKS 0 +# define X509V3_F_V2I_ISSUER_ALT 0 +# define X509V3_F_V2I_NAME_CONSTRAINTS 0 +# define X509V3_F_V2I_POLICY_CONSTRAINTS 0 +# define X509V3_F_V2I_POLICY_MAPPINGS 0 +# define X509V3_F_V2I_SUBJECT_ALT 0 +# define X509V3_F_V2I_TLS_FEATURE 0 +# define X509V3_F_V3_GENERIC_EXTENSION 0 +# define X509V3_F_X509V3_ADD1_I2D 0 +# define X509V3_F_X509V3_ADD_VALUE 0 +# define X509V3_F_X509V3_EXT_ADD 0 +# define X509V3_F_X509V3_EXT_ADD_ALIAS 0 +# define X509V3_F_X509V3_EXT_I2D 0 +# define X509V3_F_X509V3_EXT_NCONF 0 +# define X509V3_F_X509V3_GET_SECTION 0 +# define X509V3_F_X509V3_GET_STRING 0 +# define X509V3_F_X509V3_GET_VALUE_BOOL 0 +# define X509V3_F_X509V3_PARSE_LIST 0 +# define X509V3_F_X509_PURPOSE_ADD 0 +# define X509V3_F_X509_PURPOSE_SET 0 + +/* + * Compatibility defines. + */ +# define EVP_R_OPERATON_NOT_INITIALIZED EVP_R_OPERATION_NOT_INITIALIZED + +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h index ebdba34d..b6dd8c35 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h @@ -1,19 +1,30 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ct.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CT_H -# define HEADER_CT_H + + +#ifndef OPENSSL_CT_H +# define OPENSSL_CT_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CT_H +# endif # include # ifndef OPENSSL_NO_CT -# include +# include # include # include # include @@ -28,6 +39,61 @@ extern "C" { /* All hashes are SHA256 in v1 of Certificate Transparency */ # define CT_V1_HASHLEN SHA256_DIGEST_LENGTH +SKM_DEFINE_STACK_OF_INTERNAL(SCT, SCT, SCT) +#define sk_SCT_num(sk) OPENSSL_sk_num(ossl_check_const_SCT_sk_type(sk)) +#define sk_SCT_value(sk, idx) ((SCT *)OPENSSL_sk_value(ossl_check_const_SCT_sk_type(sk), (idx))) +#define sk_SCT_new(cmp) ((STACK_OF(SCT) *)OPENSSL_sk_new(ossl_check_SCT_compfunc_type(cmp))) +#define sk_SCT_new_null() ((STACK_OF(SCT) *)OPENSSL_sk_new_null()) +#define sk_SCT_new_reserve(cmp, n) ((STACK_OF(SCT) *)OPENSSL_sk_new_reserve(ossl_check_SCT_compfunc_type(cmp), (n))) +#define sk_SCT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SCT_sk_type(sk), (n)) +#define sk_SCT_free(sk) OPENSSL_sk_free(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_zero(sk) OPENSSL_sk_zero(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_delete(sk, i) ((SCT *)OPENSSL_sk_delete(ossl_check_SCT_sk_type(sk), (i))) +#define sk_SCT_delete_ptr(sk, ptr) ((SCT *)OPENSSL_sk_delete_ptr(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr))) +#define sk_SCT_push(sk, ptr) OPENSSL_sk_push(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_pop(sk) ((SCT *)OPENSSL_sk_pop(ossl_check_SCT_sk_type(sk))) +#define sk_SCT_shift(sk) ((SCT *)OPENSSL_sk_shift(ossl_check_SCT_sk_type(sk))) +#define sk_SCT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SCT_sk_type(sk),ossl_check_SCT_freefunc_type(freefunc)) +#define sk_SCT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), (idx)) +#define sk_SCT_set(sk, idx, ptr) ((SCT *)OPENSSL_sk_set(ossl_check_SCT_sk_type(sk), (idx), ossl_check_SCT_type(ptr))) +#define sk_SCT_find(sk, ptr) OPENSSL_sk_find(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), pnum) +#define sk_SCT_sort(sk) OPENSSL_sk_sort(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SCT_sk_type(sk)) +#define sk_SCT_dup(sk) ((STACK_OF(SCT) *)OPENSSL_sk_dup(ossl_check_const_SCT_sk_type(sk))) +#define sk_SCT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SCT) *)OPENSSL_sk_deep_copy(ossl_check_const_SCT_sk_type(sk), ossl_check_SCT_copyfunc_type(copyfunc), ossl_check_SCT_freefunc_type(freefunc))) +#define sk_SCT_set_cmp_func(sk, cmp) ((sk_SCT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SCT_sk_type(sk), ossl_check_SCT_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CTLOG, CTLOG, CTLOG) +#define sk_CTLOG_num(sk) OPENSSL_sk_num(ossl_check_const_CTLOG_sk_type(sk)) +#define sk_CTLOG_value(sk, idx) ((CTLOG *)OPENSSL_sk_value(ossl_check_const_CTLOG_sk_type(sk), (idx))) +#define sk_CTLOG_new(cmp) ((STACK_OF(CTLOG) *)OPENSSL_sk_new(ossl_check_CTLOG_compfunc_type(cmp))) +#define sk_CTLOG_new_null() ((STACK_OF(CTLOG) *)OPENSSL_sk_new_null()) +#define sk_CTLOG_new_reserve(cmp, n) ((STACK_OF(CTLOG) *)OPENSSL_sk_new_reserve(ossl_check_CTLOG_compfunc_type(cmp), (n))) +#define sk_CTLOG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CTLOG_sk_type(sk), (n)) +#define sk_CTLOG_free(sk) OPENSSL_sk_free(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_zero(sk) OPENSSL_sk_zero(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_delete(sk, i) ((CTLOG *)OPENSSL_sk_delete(ossl_check_CTLOG_sk_type(sk), (i))) +#define sk_CTLOG_delete_ptr(sk, ptr) ((CTLOG *)OPENSSL_sk_delete_ptr(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr))) +#define sk_CTLOG_push(sk, ptr) OPENSSL_sk_push(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_pop(sk) ((CTLOG *)OPENSSL_sk_pop(ossl_check_CTLOG_sk_type(sk))) +#define sk_CTLOG_shift(sk) ((CTLOG *)OPENSSL_sk_shift(ossl_check_CTLOG_sk_type(sk))) +#define sk_CTLOG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CTLOG_sk_type(sk),ossl_check_CTLOG_freefunc_type(freefunc)) +#define sk_CTLOG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), (idx)) +#define sk_CTLOG_set(sk, idx, ptr) ((CTLOG *)OPENSSL_sk_set(ossl_check_CTLOG_sk_type(sk), (idx), ossl_check_CTLOG_type(ptr))) +#define sk_CTLOG_find(sk, ptr) OPENSSL_sk_find(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), pnum) +#define sk_CTLOG_sort(sk) OPENSSL_sk_sort(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CTLOG_sk_type(sk)) +#define sk_CTLOG_dup(sk) ((STACK_OF(CTLOG) *)OPENSSL_sk_dup(ossl_check_const_CTLOG_sk_type(sk))) +#define sk_CTLOG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CTLOG) *)OPENSSL_sk_deep_copy(ossl_check_const_CTLOG_sk_type(sk), ossl_check_CTLOG_copyfunc_type(copyfunc), ossl_check_CTLOG_freefunc_type(freefunc))) +#define sk_CTLOG_set_cmp_func(sk, cmp) ((sk_CTLOG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_compfunc_type(cmp))) + + + typedef enum { CT_LOG_ENTRY_TYPE_NOT_SET = -1, CT_LOG_ENTRY_TYPE_X509 = 0, @@ -55,18 +121,23 @@ typedef enum { SCT_VALIDATION_STATUS_UNKNOWN_VERSION } sct_validation_status_t; -DEFINE_STACK_OF(SCT) -DEFINE_STACK_OF(CTLOG) - /****************************************** * CT policy evaluation context functions * ******************************************/ /* - * Creates a new, empty policy evaluation context. + * Creates a new, empty policy evaluation context associated with the given + * library context and property query string. * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished * with the CT_POLICY_EVAL_CTX. */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new_ex(OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CT_POLICY_EVAL_CTX_new_ex() but the default library + * context and property query string is used. + */ CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); /* Deletes a policy evaluation context and anything it owns. */ @@ -317,7 +388,7 @@ __owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, /********************************* - * SCT parsing and serialisation * + * SCT parsing and serialization * *********************************/ /* @@ -403,19 +474,39 @@ SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); ********************/ /* - * Creates a new CT log instance with the given |public_key| and |name|. + * Creates a new CT log instance with the given |public_key| and |name| and + * associates it with the give library context |libctx| and property query + * string |propq|. * Takes ownership of |public_key| but copies |name|. * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. * Should be deleted by the caller using CTLOG_free when no longer needed. */ +CTLOG *CTLOG_new_ex(EVP_PKEY *public_key, const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_ex except that the default library context and + * property query string are used. + */ CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); /* * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER - * in |pkey_base64|. The |name| is a string to help users identify this log. + * in |pkey_base64| and associated with the given library context |libctx| and + * property query string |propq|. The |name| is a string to help users identify + * this log. * Returns 1 on success, 0 on failure. * Should be deleted by the caller using CTLOG_free when no longer needed. */ +int CTLOG_new_from_base64_ex(CTLOG **ct_log, const char *pkey_base64, + const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_from_base64_ex() except that the default + * library context and property query string are used. + * Returns 1 on success, 0 on failure. + */ int CTLOG_new_from_base64(CTLOG ** ct_log, const char *pkey_base64, const char *name); @@ -437,7 +528,15 @@ EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); **************************/ /* - * Creates a new CT log store. + * Creates a new CT log store and associates it with the given libctx and + * property query string. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +/* + * Same as CTLOG_STORE_new_ex except that the default libctx and + * property query string are used. * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. */ CTLOG_STORE *CTLOG_STORE_new(void); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h.in new file mode 100644 index 00000000..16086b33 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h.in @@ -0,0 +1,525 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CT_H +# define OPENSSL_CT_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CT_H +# endif + +# include + +# ifndef OPENSSL_NO_CT +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + + +/* Minimum RSA key size, from RFC6962 */ +# define SCT_MIN_RSA_BITS 2048 + +/* All hashes are SHA256 in v1 of Certificate Transparency */ +# define CT_V1_HASHLEN SHA256_DIGEST_LENGTH + +{- + generate_stack_macros("SCT") + .generate_stack_macros("CTLOG"); +-} + + +typedef enum { + CT_LOG_ENTRY_TYPE_NOT_SET = -1, + CT_LOG_ENTRY_TYPE_X509 = 0, + CT_LOG_ENTRY_TYPE_PRECERT = 1 +} ct_log_entry_type_t; + +typedef enum { + SCT_VERSION_NOT_SET = -1, + SCT_VERSION_V1 = 0 +} sct_version_t; + +typedef enum { + SCT_SOURCE_UNKNOWN, + SCT_SOURCE_TLS_EXTENSION, + SCT_SOURCE_X509V3_EXTENSION, + SCT_SOURCE_OCSP_STAPLED_RESPONSE +} sct_source_t; + +typedef enum { + SCT_VALIDATION_STATUS_NOT_SET, + SCT_VALIDATION_STATUS_UNKNOWN_LOG, + SCT_VALIDATION_STATUS_VALID, + SCT_VALIDATION_STATUS_INVALID, + SCT_VALIDATION_STATUS_UNVERIFIED, + SCT_VALIDATION_STATUS_UNKNOWN_VERSION +} sct_validation_status_t; + +/****************************************** + * CT policy evaluation context functions * + ******************************************/ + +/* + * Creates a new, empty policy evaluation context associated with the given + * library context and property query string. + * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished + * with the CT_POLICY_EVAL_CTX. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new_ex(OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CT_POLICY_EVAL_CTX_new_ex() but the default library + * context and property query string is used. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); + +/* Deletes a policy evaluation context and anything it owns. */ +void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx); + +/* Gets the peer certificate that the SCTs are for */ +X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the certificate associated with the received SCTs. + * Increments the reference count of cert. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert); + +/* Gets the issuer of the aforementioned certificate */ +X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the issuer of the certificate associated with the received SCTs. + * Increments the reference count of issuer. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer); + +/* Gets the CT logs that are trusted sources of SCTs */ +const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx); + +/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */ +void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx, + CTLOG_STORE *log_store); + +/* + * Gets the time, in milliseconds since the Unix epoch, that will be used as the + * current time when checking whether an SCT was issued in the future. + * Such SCTs will fail validation, as required by RFC6962. + */ +uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the time to evaluate SCTs against, in milliseconds since the Unix epoch. + * If an SCT's timestamp is after this time, it will be interpreted as having + * been issued in the future. RFC6962 states that "TLS clients MUST reject SCTs + * whose timestamp is in the future", so an SCT will not validate in this case. + */ +void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms); + +/***************** + * SCT functions * + *****************/ + +/* + * Creates a new, blank SCT. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new(void); + +/* + * Creates a new SCT from some base64-encoded strings. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new_from_base64(unsigned char version, + const char *logid_base64, + ct_log_entry_type_t entry_type, + uint64_t timestamp, + const char *extensions_base64, + const char *signature_base64); + +/* + * Frees the SCT and the underlying data structures. + */ +void SCT_free(SCT *sct); + +/* + * Free a stack of SCTs, and the underlying SCTs themselves. + * Intended to be compatible with X509V3_EXT_FREE. + */ +void SCT_LIST_free(STACK_OF(SCT) *a); + +/* + * Returns the version of the SCT. + */ +sct_version_t SCT_get_version(const SCT *sct); + +/* + * Set the version of an SCT. + * Returns 1 on success, 0 if the version is unrecognized. + */ +__owur int SCT_set_version(SCT *sct, sct_version_t version); + +/* + * Returns the log entry type of the SCT. + */ +ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct); + +/* + * Set the log entry type of an SCT. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type); + +/* + * Gets the ID of the log that an SCT came from. + * Ownership of the log ID remains with the SCT. + * Returns the length of the log ID. + */ +size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id); + +/* + * Set the log ID of an SCT to point directly to the *log_id specified. + * The SCT takes ownership of the specified pointer. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len); + +/* + * Set the log ID of an SCT. + * This makes a copy of the log_id. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_log_id(SCT *sct, const unsigned char *log_id, + size_t log_id_len); + +/* + * Returns the timestamp for the SCT (epoch time in milliseconds). + */ +uint64_t SCT_get_timestamp(const SCT *sct); + +/* + * Set the timestamp of an SCT (epoch time in milliseconds). + */ +void SCT_set_timestamp(SCT *sct, uint64_t timestamp); + +/* + * Return the NID for the signature used by the SCT. + * For CT v1, this will be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256 (or NID_undef if incorrect/unset). + */ +int SCT_get_signature_nid(const SCT *sct); + +/* + * Set the signature type of an SCT + * For CT v1, this should be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_signature_nid(SCT *sct, int nid); + +/* + * Set *ext to point to the extension data for the SCT. ext must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext); + +/* + * Set the extensions of an SCT to point directly to the *ext specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len); + +/* + * Set the extensions of an SCT. + * This takes a copy of the ext. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_extensions(SCT *sct, const unsigned char *ext, + size_t ext_len); + +/* + * Set *sig to point to the signature for the SCT. sig must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_signature(const SCT *sct, unsigned char **sig); + +/* + * Set the signature of an SCT to point directly to the *sig specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len); + +/* + * Set the signature of an SCT to be a copy of the *sig specified. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_signature(SCT *sct, const unsigned char *sig, + size_t sig_len); + +/* + * The origin of this SCT, e.g. TLS extension, OCSP response, etc. + */ +sct_source_t SCT_get_source(const SCT *sct); + +/* + * Set the origin of this SCT, e.g. TLS extension, OCSP response, etc. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_source(SCT *sct, sct_source_t source); + +/* + * Returns a text string describing the validation status of |sct|. + */ +const char *SCT_validation_status_string(const SCT *sct); + +/* + * Pretty-prints an |sct| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * If |logs| is not NULL, it will be used to lookup the CT log that the SCT came + * from, so that the log name can be printed. + */ +void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs); + +/* + * Pretty-prints an |sct_list| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * SCTs will be delimited by |separator|. + * If |logs| is not NULL, it will be used to lookup the CT log that each SCT + * came from, so that the log names can be printed. + */ +void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent, + const char *separator, const CTLOG_STORE *logs); + +/* + * Gets the last result of validating this SCT. + * If it has not been validated yet, returns SCT_VALIDATION_STATUS_NOT_SET. + */ +sct_validation_status_t SCT_get_validation_status(const SCT *sct); + +/* + * Validates the given SCT with the provided context. + * Sets the "validation_status" field of the SCT. + * Returns 1 if the SCT is valid and the signature verifies. + * Returns 0 if the SCT is invalid or could not be verified. + * Returns -1 if an error occurs. + */ +__owur int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx); + +/* + * Validates the given list of SCTs with the provided context. + * Sets the "validation_status" field of each SCT. + * Returns 1 if there are no invalid SCTs and all signatures verify. + * Returns 0 if at least one SCT is invalid or could not be verified. + * Returns a negative integer if an error occurs. + */ +__owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, + CT_POLICY_EVAL_CTX *ctx); + + +/********************************* + * SCT parsing and serialization * + *********************************/ + +/* + * Serialize (to TLS format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just return the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Convert TLS format SCT list to a stack of SCTs. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + size_t len); + +/* + * Serialize (to DER format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just returns the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Parses an SCT list in DER format and returns it. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + long len); + +/* + * Serialize (to TLS format) an |sct| and write it to |out|. + * If |out| is null, no SCT will be output but the length will still be returned. + * If |out| points to a null pointer, a string will be allocated to hold the + * TLS-format SCT. It is the responsibility of the caller to free it. + * If |out| points to an allocated string, the TLS-format SCT will be written + * to it. + * The length of the SCT in TLS format will be returned. + */ +__owur int i2o_SCT(const SCT *sct, unsigned char **out); + +/* + * Parses an SCT in TLS format and returns it. + * If |psct| is not null, it will end up pointing to the parsed SCT. If it + * already points to a non-null pointer, the pointer will be free'd. + * |in| should be a pointer to a string containing the TLS-format SCT. + * |in| will be advanced to the end of the SCT if parsing succeeds. + * |len| should be the length of the SCT in |in|. + * Returns NULL if an error occurs. + * If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len' + * fields will be populated (with |in| and |len| respectively). + */ +SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); + +/******************** + * CT log functions * + ********************/ + +/* + * Creates a new CT log instance with the given |public_key| and |name| and + * associates it with the give library context |libctx| and property query + * string |propq|. + * Takes ownership of |public_key| but copies |name|. + * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +CTLOG *CTLOG_new_ex(EVP_PKEY *public_key, const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_ex except that the default library context and + * property query string are used. + */ +CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); + +/* + * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER + * in |pkey_base64| and associated with the given library context |libctx| and + * property query string |propq|. The |name| is a string to help users identify + * this log. + * Returns 1 on success, 0 on failure. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +int CTLOG_new_from_base64_ex(CTLOG **ct_log, const char *pkey_base64, + const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_from_base64_ex() except that the default + * library context and property query string are used. + * Returns 1 on success, 0 on failure. + */ +int CTLOG_new_from_base64(CTLOG ** ct_log, + const char *pkey_base64, const char *name); + +/* + * Deletes a CT log instance and its fields. + */ +void CTLOG_free(CTLOG *log); + +/* Gets the name of the CT log */ +const char *CTLOG_get0_name(const CTLOG *log); +/* Gets the ID of the CT log */ +void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id, + size_t *log_id_len); +/* Gets the public key of the CT log */ +EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); + +/************************** + * CT log store functions * + **************************/ + +/* + * Creates a new CT log store and associates it with the given libctx and + * property query string. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +/* + * Same as CTLOG_STORE_new_ex except that the default libctx and + * property query string are used. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new(void); + +/* + * Deletes a CT log store and all of the CT log instances held within. + */ +void CTLOG_STORE_free(CTLOG_STORE *store); + +/* + * Finds a CT log in the store based on its log ID. + * Returns the CT log, or NULL if no match is found. + */ +const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store, + const uint8_t *log_id, + size_t log_id_len); + +/* + * Loads a CT log list into a |store| from a |file|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); + +/* + * Loads the default CT log list into a |store|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cterr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cterr.h index feb7bc56..935d32d8 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cterr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cterr.h @@ -1,59 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CTERR_H -# define HEADER_CTERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_CTERR_H +# define OPENSSL_CTERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_CT -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CT_strings(void); - -/* - * CT function codes. - */ -# define CT_F_CTLOG_NEW 117 -# define CT_F_CTLOG_NEW_FROM_BASE64 118 -# define CT_F_CTLOG_NEW_FROM_CONF 119 -# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 -# define CT_F_CTLOG_STORE_LOAD_FILE 123 -# define CT_F_CTLOG_STORE_LOAD_LOG 130 -# define CT_F_CTLOG_STORE_NEW 131 -# define CT_F_CT_BASE64_DECODE 124 -# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 -# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 -# define CT_F_I2O_SCT 107 -# define CT_F_I2O_SCT_LIST 108 -# define CT_F_I2O_SCT_SIGNATURE 109 -# define CT_F_O2I_SCT 110 -# define CT_F_O2I_SCT_LIST 111 -# define CT_F_O2I_SCT_SIGNATURE 112 -# define CT_F_SCT_CTX_NEW 126 -# define CT_F_SCT_CTX_VERIFY 128 -# define CT_F_SCT_NEW 100 -# define CT_F_SCT_NEW_FROM_BASE64 127 -# define CT_F_SCT_SET0_LOG_ID 101 -# define CT_F_SCT_SET1_EXTENSIONS 114 -# define CT_F_SCT_SET1_LOG_ID 115 -# define CT_F_SCT_SET1_SIGNATURE 116 -# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 -# define CT_F_SCT_SET_SIGNATURE_NID 103 -# define CT_F_SCT_SET_VERSION 104 /* * CT reason codes. diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decoder.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decoder.h new file mode 100644 index 00000000..d4ee2cf4 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decoder.h @@ -0,0 +1,133 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_DECODER_H +# define OPENSSL_DECODER_H +# pragma once + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_DECODER *OSSL_DECODER_fetch(OSSL_LIB_CTX *libctx, const char *name, + const char *properties); +int OSSL_DECODER_up_ref(OSSL_DECODER *encoder); +void OSSL_DECODER_free(OSSL_DECODER *encoder); + +const OSSL_PROVIDER *OSSL_DECODER_get0_provider(const OSSL_DECODER *encoder); +const char *OSSL_DECODER_get0_properties(const OSSL_DECODER *encoder); +const char *OSSL_DECODER_get0_name(const OSSL_DECODER *decoder); +const char *OSSL_DECODER_get0_description(const OSSL_DECODER *decoder); +int OSSL_DECODER_is_a(const OSSL_DECODER *encoder, const char *name); + +void OSSL_DECODER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_DECODER *encoder, void *arg), + void *arg); +int OSSL_DECODER_names_do_all(const OSSL_DECODER *encoder, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *OSSL_DECODER_gettable_params(OSSL_DECODER *decoder); +int OSSL_DECODER_get_params(OSSL_DECODER *decoder, OSSL_PARAM params[]); + +const OSSL_PARAM *OSSL_DECODER_settable_ctx_params(OSSL_DECODER *encoder); +OSSL_DECODER_CTX *OSSL_DECODER_CTX_new(void); +int OSSL_DECODER_CTX_set_params(OSSL_DECODER_CTX *ctx, + const OSSL_PARAM params[]); +void OSSL_DECODER_CTX_free(OSSL_DECODER_CTX *ctx); + +/* Utilities that help set specific parameters */ +int OSSL_DECODER_CTX_set_passphrase(OSSL_DECODER_CTX *ctx, + const unsigned char *kstr, size_t klen); +int OSSL_DECODER_CTX_set_pem_password_cb(OSSL_DECODER_CTX *ctx, + pem_password_cb *cb, void *cbarg); +int OSSL_DECODER_CTX_set_passphrase_cb(OSSL_DECODER_CTX *ctx, + OSSL_PASSPHRASE_CALLBACK *cb, + void *cbarg); +int OSSL_DECODER_CTX_set_passphrase_ui(OSSL_DECODER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); + +/* + * Utilities to read the object to decode, with the result sent to cb. + * These will discover all provided methods + */ + +int OSSL_DECODER_CTX_set_selection(OSSL_DECODER_CTX *ctx, int selection); +int OSSL_DECODER_CTX_set_input_type(OSSL_DECODER_CTX *ctx, + const char *input_type); +int OSSL_DECODER_CTX_set_input_structure(OSSL_DECODER_CTX *ctx, + const char *input_structure); +int OSSL_DECODER_CTX_add_decoder(OSSL_DECODER_CTX *ctx, OSSL_DECODER *decoder); +int OSSL_DECODER_CTX_add_extra(OSSL_DECODER_CTX *ctx, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_DECODER_CTX_get_num_decoders(OSSL_DECODER_CTX *ctx); + +typedef struct ossl_decoder_instance_st OSSL_DECODER_INSTANCE; +OSSL_DECODER * +OSSL_DECODER_INSTANCE_get_decoder(OSSL_DECODER_INSTANCE *decoder_inst); +void * +OSSL_DECODER_INSTANCE_get_decoder_ctx(OSSL_DECODER_INSTANCE *decoder_inst); +const char * +OSSL_DECODER_INSTANCE_get_input_type(OSSL_DECODER_INSTANCE *decoder_inst); +const char * +OSSL_DECODER_INSTANCE_get_input_structure(OSSL_DECODER_INSTANCE *decoder_inst, + int *was_set); + +typedef int OSSL_DECODER_CONSTRUCT(OSSL_DECODER_INSTANCE *decoder_inst, + const OSSL_PARAM *params, + void *construct_data); +typedef void OSSL_DECODER_CLEANUP(void *construct_data); + +int OSSL_DECODER_CTX_set_construct(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_CONSTRUCT *construct); +int OSSL_DECODER_CTX_set_construct_data(OSSL_DECODER_CTX *ctx, + void *construct_data); +int OSSL_DECODER_CTX_set_cleanup(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_CLEANUP *cleanup); +OSSL_DECODER_CONSTRUCT *OSSL_DECODER_CTX_get_construct(OSSL_DECODER_CTX *ctx); +void *OSSL_DECODER_CTX_get_construct_data(OSSL_DECODER_CTX *ctx); +OSSL_DECODER_CLEANUP *OSSL_DECODER_CTX_get_cleanup(OSSL_DECODER_CTX *ctx); + +int OSSL_DECODER_export(OSSL_DECODER_INSTANCE *decoder_inst, + void *reference, size_t reference_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg); + +int OSSL_DECODER_from_bio(OSSL_DECODER_CTX *ctx, BIO *in); +#ifndef OPENSSL_NO_STDIO +int OSSL_DECODER_from_fp(OSSL_DECODER_CTX *ctx, FILE *in); +#endif +int OSSL_DECODER_from_data(OSSL_DECODER_CTX *ctx, const unsigned char **pdata, + size_t *pdata_len); + +/* + * Create the OSSL_DECODER_CTX with an associated type. This will perform + * an implicit OSSL_DECODER_fetch(), suitable for the object of that type. + */ +OSSL_DECODER_CTX * +OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey, + const char *input_type, + const char *input_struct, + const char *keytype, int selection, + OSSL_LIB_CTX *libctx, const char *propquery); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decodererr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decodererr.h new file mode 100644 index 00000000..4212a38b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decodererr.h @@ -0,0 +1,28 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_DECODERERR_H +# define OPENSSL_DECODERERR_H +# pragma once + +# include +# include +# include + + + +/* + * OSSL_DECODER reason codes. + */ +# define OSSL_DECODER_R_COULD_NOT_DECODE_OBJECT 101 +# define OSSL_DECODER_R_DECODER_NOT_FOUND 102 +# define OSSL_DECODER_R_MISSING_GET_PARAMS 100 + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/des.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/des.h index be4abbdf..09798a61 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/des.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/des.h @@ -1,29 +1,36 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DES_H -# define HEADER_DES_H +#ifndef OPENSSL_DES_H +# define OPENSSL_DES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DES_H +# endif # include # ifndef OPENSSL_NO_DES -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif -# include +# endif +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int DES_LONG; -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif typedef unsigned char DES_cblock[8]; typedef /* const */ unsigned char const_DES_cblock[8]; @@ -42,53 +49,62 @@ typedef struct DES_ks { } ks[16]; } DES_key_schedule; -# define DES_KEY_SZ (sizeof(DES_cblock)) -# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) +# define DES_KEY_SZ (sizeof(DES_cblock)) +# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) -# define DES_ENCRYPT 1 -# define DES_DECRYPT 0 +# define DES_ENCRYPT 1 +# define DES_DECRYPT 0 -# define DES_CBC_MODE 0 -# define DES_PCBC_MODE 1 +# define DES_CBC_MODE 0 +# define DES_PCBC_MODE 1 -# define DES_ecb2_encrypt(i,o,k1,k2,e) \ +# define DES_ecb2_encrypt(i,o,k1,k2,e) \ DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) -# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ +# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) -# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ +# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) -# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ +# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) -OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ -# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) - -const char *DES_options(void); +# define DES_fixup_key_parity DES_set_odd_parity +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *DES_options(void); +OSSL_DEPRECATEDIN_3_0 void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, int enc); +OSSL_DEPRECATEDIN_3_0 DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, long length, DES_key_schedule *schedule, const_DES_cblock *ivec); +# endif /* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, const_DES_cblock *inw, - const_DES_cblock *outw, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + const_DES_cblock *inw, const_DES_cblock *outw, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks, int enc); +# endif /* * This is the DES encryption function that gets called by just about every @@ -100,7 +116,10 @@ void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, * long's and ks is the DES_key_schedule to use. enc, is non zero specifies * encryption, zero if decryption. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); +# endif /* * This functions is the same as DES_encrypt1() except that the DES initial @@ -110,65 +129,83 @@ void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() * DES_encrypt1() DES_encrypt1() except faster :-). */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); - -void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 +void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 +void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, DES_cblock *ivec, int enc); + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int *num); +OSSL_DEPRECATEDIN_3_0 char *DES_fcrypt(const char *buf, const char *salt, char *ret); +OSSL_DEPRECATEDIN_3_0 char *DES_crypt(const char *buf, const char *salt); +OSSL_DEPRECATEDIN_3_0 void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec); + long length, DES_key_schedule *schedule, DES_cblock *ivec); +OSSL_DEPRECATEDIN_3_0 void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], long length, int out_count, DES_cblock *seed); -int DES_random_key(DES_cblock *ret); -void DES_set_odd_parity(DES_cblock *key); -int DES_check_key_parity(const_DES_cblock *key); -int DES_is_weak_key(const_DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_random_key(DES_cblock *ret); +OSSL_DEPRECATEDIN_3_0 void DES_set_odd_parity(DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_check_key_parity(const_DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_is_weak_key(const_DES_cblock *key); +# endif /* * DES_set_key (= set_key = DES_key_sched = key_sched) calls - * DES_set_key_checked if global variable DES_check_key is set, - * DES_set_key_unchecked otherwise. + * DES_set_key_checked */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); -void DES_string_to_key(const char *str, DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 void DES_string_to_key(const char *str, DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); +OSSL_DEPRECATEDIN_3_0 void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec, int *num); +# endif -# define DES_fixup_key_parity DES_set_odd_parity - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dh.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dh.h index 6c6ff363..8bc17448 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dh.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dh.h @@ -1,316 +1,62 @@ /* * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DH_H -# define HEADER_DH_H +#ifndef OPENSSL_DH_H +# define OPENSSL_DH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DH_H +# endif # include - -# ifndef OPENSSL_NO_DH -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include +# include # ifdef __cplusplus extern "C" { # endif -# ifndef OPENSSL_DH_MAX_MODULUS_BITS -# define OPENSSL_DH_MAX_MODULUS_BITS 10000 -# endif -# ifndef OPENSSL_DH_CHECK_MAX_MODULUS_BITS -# define OPENSSL_DH_CHECK_MAX_MODULUS_BITS 32768 -# endif +#include -# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 +/* DH parameter generation types used by EVP_PKEY_CTX_set_dh_paramgen_type() */ +# define DH_PARAMGEN_TYPE_GENERATOR 0 /* Use a safe prime generator */ +# define DH_PARAMGEN_TYPE_FIPS_186_2 1 /* Use FIPS186-2 standard */ +# define DH_PARAMGEN_TYPE_FIPS_186_4 2 /* Use FIPS186-4 standard */ +# define DH_PARAMGEN_TYPE_GROUP 3 /* Use a named safe prime group */ -# define DH_FLAG_CACHE_MONT_P 0x01 +int EVP_PKEY_CTX_set_dh_paramgen_type(EVP_PKEY_CTX *ctx, int typ); +int EVP_PKEY_CTX_set_dh_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); +int EVP_PKEY_CTX_set_dh_paramgen_seed(EVP_PKEY_CTX *ctx, + const unsigned char *seed, + size_t seedlen); +int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int pbits); +int EVP_PKEY_CTX_set_dh_paramgen_subprime_len(EVP_PKEY_CTX *ctx, int qlen); +int EVP_PKEY_CTX_set_dh_paramgen_generator(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid); +int EVP_PKEY_CTX_set_dh_rfc5114(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dhx_rfc5114(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad); -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * Does nothing. Previously this switched off constant time behaviour. - */ -# define DH_FLAG_NO_EXP_CONSTTIME 0x00 -# endif - -/* - * If this flag is set the DH method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define DH_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DH_FLAG_NON_FIPS_ALLOW 0x0400 - -/* Already defined in ossl_typ.h */ -/* typedef struct dh_st DH; */ -/* typedef struct dh_method DH_METHOD; */ - -DECLARE_ASN1_ITEM(DHparams) - -# define DH_GENERATOR_2 2 -/* #define DH_GENERATOR_3 3 */ -# define DH_GENERATOR_5 5 - -/* DH_check error codes */ -# define DH_CHECK_P_NOT_PRIME 0x01 -# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 -# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 -# define DH_NOT_SUITABLE_GENERATOR 0x08 -# define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 -# define DH_CHECK_INVALID_J_VALUE 0x40 - -/* DH_check_pub_key error codes */ -# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 -# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 -# define DH_CHECK_PUBKEY_INVALID 0x04 - -/* - * primes p where (p-1)/2 is prime too are called "safe"; we define this for - * backward compatibility: - */ -# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME - -# define d2i_DHparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) -# define d2i_DHparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) -# define i2d_DHparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) - -# define d2i_DHxparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHxparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHxparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) -# define d2i_DHxparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) -# define i2d_DHxparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH, i2d_DHxparams, bp, x) - -DH *DHparams_dup(DH *); - -const DH_METHOD *DH_OpenSSL(void); - -void DH_set_default_method(const DH_METHOD *meth); -const DH_METHOD *DH_get_default_method(void); -int DH_set_method(DH *dh, const DH_METHOD *meth); -DH *DH_new_method(ENGINE *engine); - -DH *DH_new(void); -void DH_free(DH *dh); -int DH_up_ref(DH *dh); -int DH_bits(const DH *dh); -int DH_size(const DH *dh); -int DH_security_bits(const DH *dh); -#define DH_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) -int DH_set_ex_data(DH *d, int idx, void *arg); -void *DH_get_ex_data(DH *d, int idx); - -/* Deprecated version */ -DEPRECATEDIN_0_9_8(DH *DH_generate_parameters(int prime_len, int generator, - void (*callback) (int, int, - void *), - void *cb_arg)) - -/* New version */ -int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, - BN_GENCB *cb); - -int DH_check_params_ex(const DH *dh); -int DH_check_ex(const DH *dh); -int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); -int DH_check_params(const DH *dh, int *ret); -int DH_check(const DH *dh, int *codes); -int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); -int DH_generate_key(DH *dh); -int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); -DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); -int i2d_DHparams(const DH *a, unsigned char **pp); -DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); -int i2d_DHxparams(const DH *a, unsigned char **pp); -# ifndef OPENSSL_NO_STDIO -int DHparams_print_fp(FILE *fp, const DH *x); -# endif -int DHparams_print(BIO *bp, const DH *x); - -/* RFC 5114 parameters */ -DH *DH_get_1024_160(void); -DH *DH_get_2048_224(void); -DH *DH_get_2048_256(void); - -/* Named parameters, currently RFC7919 */ -DH *DH_new_by_nid(int nid); -int DH_get_nid(const DH *dh); - -# ifndef OPENSSL_NO_CMS -/* RFC2631 KDF */ -int DH_KDF_X9_42(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - ASN1_OBJECT *key_oid, - const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); -# endif - -void DH_get0_pqg(const DH *dh, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DH_get0_key(const DH *dh, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DH_get0_p(const DH *dh); -const BIGNUM *DH_get0_q(const DH *dh); -const BIGNUM *DH_get0_g(const DH *dh); -const BIGNUM *DH_get0_priv_key(const DH *dh); -const BIGNUM *DH_get0_pub_key(const DH *dh); -void DH_clear_flags(DH *dh, int flags); -int DH_test_flags(const DH *dh, int flags); -void DH_set_flags(DH *dh, int flags); -ENGINE *DH_get0_engine(DH *d); -long DH_get_length(const DH *dh); -int DH_set_length(DH *dh, long length); - -DH_METHOD *DH_meth_new(const char *name, int flags); -void DH_meth_free(DH_METHOD *dhm); -DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); -const char *DH_meth_get0_name(const DH_METHOD *dhm); -int DH_meth_set1_name(DH_METHOD *dhm, const char *name); -int DH_meth_get_flags(const DH_METHOD *dhm); -int DH_meth_set_flags(DH_METHOD *dhm, int flags); -void *DH_meth_get0_app_data(const DH_METHOD *dhm); -int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); -int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *)); -int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) - (unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_meth_set_compute_key(DH_METHOD *dhm, - int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh)); -int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) - (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *, BN_MONT_CTX *); -int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, - int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); -int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); -int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); -int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) - (DH *, int, int, BN_GENCB *); -int DH_meth_set_generate_params(DH_METHOD *dhm, - int (*generate_params) (DH *, int, int, BN_GENCB *)); - - -# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, \ - EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_DH_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_dh_pad(ctx, pad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_PAD, pad, NULL) - -# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)(oid)) - -# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)(poid)) - -# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)(plen)) - -# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)(p)) +int EVP_PKEY_CTX_set_dh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +int EVP_PKEY_CTX_get_dh_kdf_type(EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_set0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT *oid); +int EVP_PKEY_CTX_get0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT **oid); +int EVP_PKEY_CTX_set_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_get_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_set_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +int EVP_PKEY_CTX_get_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); +int EVP_PKEY_CTX_set0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_get0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); +#endif # define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) @@ -331,13 +77,259 @@ int DH_meth_set_generate_params(DH_METHOD *dhm, /* KDF types */ # define EVP_PKEY_DH_KDF_NONE 1 -# ifndef OPENSSL_NO_CMS # define EVP_PKEY_DH_KDF_X9_42 2 + +# ifndef OPENSSL_NO_STDIO +# include # endif - - -# ifdef __cplusplus -} +# ifndef OPENSSL_NO_DH +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include # endif +# include + +# ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +# endif + +# ifndef OPENSSL_DH_CHECK_MAX_MODULUS_BITS +# define OPENSSL_DH_CHECK_MAX_MODULUS_BITS 32768 +# endif + +# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 + +# define DH_FLAG_CACHE_MONT_P 0x01 + +# define DH_FLAG_TYPE_MASK 0xF000 +# define DH_FLAG_TYPE_DH 0x0000 +# define DH_FLAG_TYPE_DHX 0x1000 + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DH_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * If this flag is set the DH method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define DH_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DH_FLAG_NON_FIPS_ALLOW 0x0400 +# endif + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +DECLARE_ASN1_ITEM(DHparams) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DH_GENERATOR_2 2 +# define DH_GENERATOR_3 3 +# define DH_GENERATOR_5 5 + +/* DH_check error codes */ +/* + * NB: These values must align with the equivalently named macros in + * internal/ffc.h. + */ +# define DH_CHECK_P_NOT_PRIME 0x01 +# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 +# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 +# define DH_NOT_SUITABLE_GENERATOR 0x08 +# define DH_CHECK_Q_NOT_PRIME 0x10 +# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_J_VALUE 0x40 +# define DH_MODULUS_TOO_SMALL 0x80 +# define DH_MODULUS_TOO_LARGE 0x100 + +/* DH_check_pub_key error codes */ +# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 +# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 +# define DH_CHECK_PUBKEY_INVALID 0x04 + +/* + * primes p where (p-1)/2 is prime too are called "safe"; we define this for + * backward compatibility: + */ +# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME + +# define d2i_DHparams_fp(fp, x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) +# define d2i_DHparams_bio(bp, x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) +# define i2d_DHparams_bio(bp, x) \ + ASN1_i2d_bio_of(DH, i2d_DHparams, bp, x) + +# define d2i_DHxparams_fp(fp,x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHxparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHxparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) +# define d2i_DHxparams_bio(bp, x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) +# define i2d_DHxparams_bio(bp, x) \ + ASN1_i2d_bio_of(DH, i2d_DHxparams, bp, x) + +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, DH, DHparams) + +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *DH_OpenSSL(void); + +OSSL_DEPRECATEDIN_3_0 void DH_set_default_method(const DH_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *DH_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 int DH_set_method(DH *dh, const DH_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 DH *DH_new_method(ENGINE *engine); + +OSSL_DEPRECATEDIN_3_0 DH *DH_new(void); +OSSL_DEPRECATEDIN_3_0 void DH_free(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_up_ref(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_bits(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_size(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_security_bits(const DH *dh); + +# define DH_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) + +OSSL_DEPRECATEDIN_3_0 int DH_set_ex_data(DH *d, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *DH_get_ex_data(const DH *d, int idx); + +OSSL_DEPRECATEDIN_3_0 int DH_generate_parameters_ex(DH *dh, int prime_len, + int generator, + BN_GENCB *cb); + +OSSL_DEPRECATEDIN_3_0 int DH_check_params_ex(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_check_ex(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); +OSSL_DEPRECATEDIN_3_0 int DH_check_params(const DH *dh, int *ret); +OSSL_DEPRECATEDIN_3_0 int DH_check(const DH *dh, int *codes); +OSSL_DEPRECATEDIN_3_0 int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, + int *codes); +OSSL_DEPRECATEDIN_3_0 int DH_generate_key(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_compute_key(unsigned char *key, + const BIGNUM *pub_key, DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_compute_key_padded(unsigned char *key, + const BIGNUM *pub_key, DH *dh); + +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, DH, DHparams) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, DH, DHxparams) + +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int DHparams_print_fp(FILE *fp, const DH *x); +# endif +OSSL_DEPRECATEDIN_3_0 int DHparams_print(BIO *bp, const DH *x); + +/* RFC 5114 parameters */ +OSSL_DEPRECATEDIN_3_0 DH *DH_get_1024_160(void); +OSSL_DEPRECATEDIN_3_0 DH *DH_get_2048_224(void); +OSSL_DEPRECATEDIN_3_0 DH *DH_get_2048_256(void); + +/* Named parameters, currently RFC7919 and RFC3526 */ +OSSL_DEPRECATEDIN_3_0 DH *DH_new_by_nid(int nid); +OSSL_DEPRECATEDIN_3_0 int DH_get_nid(const DH *dh); + +/* RFC2631 KDF */ +OSSL_DEPRECATEDIN_3_0 int DH_KDF_X9_42(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + ASN1_OBJECT *key_oid, + const unsigned char *ukm, + size_t ukmlen, const EVP_MD *md); + +OSSL_DEPRECATEDIN_3_0 void DH_get0_pqg(const DH *dh, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +OSSL_DEPRECATEDIN_3_0 int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 void DH_get0_key(const DH *dh, const BIGNUM **pub_key, + const BIGNUM **priv_key); +OSSL_DEPRECATEDIN_3_0 int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_p(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_q(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_g(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_priv_key(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_pub_key(const DH *dh); +OSSL_DEPRECATEDIN_3_0 void DH_clear_flags(DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 int DH_test_flags(const DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 void DH_set_flags(DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 ENGINE *DH_get0_engine(DH *d); +OSSL_DEPRECATEDIN_3_0 long DH_get_length(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_set_length(DH *dh, long length); + +OSSL_DEPRECATEDIN_3_0 DH_METHOD *DH_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void DH_meth_free(DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 const char *DH_meth_get0_name(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set1_name(DH_METHOD *dhm, const char *name); +OSSL_DEPRECATEDIN_3_0 int DH_meth_get_flags(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_flags(DH_METHOD *dhm, int flags); +OSSL_DEPRECATEDIN_3_0 void *DH_meth_get0_app_data(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_generate_key(DH_METHOD *dhm, + int (*generate_key) (DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) + (unsigned char *key, + const BIGNUM *pub_key, + DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_compute_key(DH_METHOD *dhm, + int (*compute_key) + (unsigned char *key, + const BIGNUM *pub_key, + DH *dh)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) + (const DH *, BIGNUM *, + const BIGNUM *, + const BIGNUM *, + const BIGNUM *, BN_CTX *, + BN_MONT_CTX *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, + int (*bn_mod_exp) + (const DH *, BIGNUM *, + const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, + BN_MONT_CTX *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) + (DH *, int, int, + BN_GENCB *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_generate_params(DH_METHOD *dhm, + int (*generate_params) + (DH *, int, int, + BN_GENCB *)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 DH *DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, + void *), + void *cb_arg); +# endif + +# endif +# ifdef __cplusplus +} # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dherr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dherr.h index 528c8198..5d2a762a 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dherr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dherr.h @@ -1,63 +1,29 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DHERR_H -# define HEADER_DHERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_DHERR_H +# define OPENSSL_DHERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_DH -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DH_strings(void); - -/* - * DH function codes. - */ -# define DH_F_COMPUTE_KEY 102 -# define DH_F_DHPARAMS_PRINT_FP 101 -# define DH_F_DH_BUILTIN_GENPARAMS 106 -# define DH_F_DH_CHECK 126 -# define DH_F_DH_CHECK_EX 121 -# define DH_F_DH_CHECK_PARAMS_EX 122 -# define DH_F_DH_CHECK_PUB_KEY_EX 123 -# define DH_F_DH_CMS_DECRYPT 114 -# define DH_F_DH_CMS_SET_PEERKEY 115 -# define DH_F_DH_CMS_SET_SHARED_INFO 116 -# define DH_F_DH_METH_DUP 117 -# define DH_F_DH_METH_NEW 118 -# define DH_F_DH_METH_SET1_NAME 119 -# define DH_F_DH_NEW_BY_NID 104 -# define DH_F_DH_NEW_METHOD 105 -# define DH_F_DH_PARAM_DECODE 107 -# define DH_F_DH_PKEY_PUBLIC_CHECK 124 -# define DH_F_DH_PRIV_DECODE 110 -# define DH_F_DH_PRIV_ENCODE 111 -# define DH_F_DH_PUB_DECODE 108 -# define DH_F_DH_PUB_ENCODE 109 -# define DH_F_DO_DH_PRINT 100 -# define DH_F_GENERATE_KEY 103 -# define DH_F_PKEY_DH_CTRL_STR 120 -# define DH_F_PKEY_DH_DERIVE 112 -# define DH_F_PKEY_DH_INIT 125 -# define DH_F_PKEY_DH_KEYGEN 113 /* * DH reason codes. */ +# define DH_R_BAD_FFC_PARAMETERS 127 # define DH_R_BAD_GENERATOR 101 # define DH_R_BN_DECODE_ERROR 109 # define DH_R_BN_ERROR 106 @@ -73,10 +39,12 @@ int ERR_load_DH_strings(void); # define DH_R_INVALID_PARAMETER_NAME 110 # define DH_R_INVALID_PARAMETER_NID 114 # define DH_R_INVALID_PUBKEY 102 +# define DH_R_INVALID_SECRET 128 # define DH_R_KDF_PARAMETER_ERROR 112 # define DH_R_KEYS_NOT_SET 108 # define DH_R_MISSING_PUBKEY 125 # define DH_R_MODULUS_TOO_LARGE 103 +# define DH_R_MODULUS_TOO_SMALL 126 # define DH_R_NOT_SUITABLE_GENERATOR 120 # define DH_R_NO_PARAMETERS_SET 107 # define DH_R_NO_PRIVATE_VALUE 100 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsa.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsa.h index 6d8a18a4..160404cc 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsa.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsa.h @@ -1,44 +1,85 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DSA_H -# define HEADER_DSA_H +#ifndef OPENSSL_DSA_H +# define OPENSSL_DSA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DSA_H +# endif # include +# include + +# include # ifndef OPENSSL_NO_DSA +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif +# endif + # ifdef __cplusplus extern "C" { # endif -# include -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include -# ifndef OPENSSL_DSA_MAX_MODULUS_BITS -# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 -# endif +int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits); +int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx, int qbits); +int EVP_PKEY_CTX_set_dsa_paramgen_md_props(EVP_PKEY_CTX *ctx, + const char *md_name, + const char *md_properties); +int EVP_PKEY_CTX_set_dsa_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); +int EVP_PKEY_CTX_set_dsa_paramgen_type(EVP_PKEY_CTX *ctx, const char *name); +int EVP_PKEY_CTX_set_dsa_paramgen_seed(EVP_PKEY_CTX *ctx, + const unsigned char *seed, + size_t seedlen); +int EVP_PKEY_CTX_set_dsa_paramgen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 +# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) -# define DSA_FLAG_CACHE_MONT_P 0x01 -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DSA +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 + +typedef struct DSA_SIG_st DSA_SIG; +DSA_SIG *DSA_SIG_new(void); +void DSA_SIG_free(DSA_SIG *a); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(DSA_SIG, DSA_SIG) +void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); +int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); + + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * Does nothing. Previously this switched off constant time behaviour. */ -# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 -# endif +# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DSA_FLAG_CACHE_MONT_P 0x01 /* * If this flag is set the DSA method is FIPS compliant and can be used in @@ -47,7 +88,7 @@ extern "C" { * result is compliant. */ -# define DSA_FLAG_FIPS_METHOD 0x0400 +# define DSA_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are @@ -55,190 +96,185 @@ extern "C" { * usage is compliant. */ -# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 -# define DSA_FLAG_FIPS_CHECKED 0x0800 +# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 +# define DSA_FLAG_FIPS_CHECKED 0x0800 /* Already defined in ossl_typ.h */ /* typedef struct dsa_st DSA; */ /* typedef struct dsa_method DSA_METHOD; */ -typedef struct DSA_SIG_st DSA_SIG; +# define d2i_DSAparams_fp(fp, x) \ + (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ + (char *(*)())d2i_DSAparams, (fp), \ + (unsigned char **)(x)) +# define i2d_DSAparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DSAparams, (fp), (unsigned char *)(x)) +# define d2i_DSAparams_bio(bp, x) \ + ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSAparams, bp, x) +# define i2d_DSAparams_bio(bp, x) \ + ASN1_i2d_bio_of(DSA, i2d_DSAparams, bp, x) -# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ - (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) -# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ - (unsigned char *)(x)) -# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) -# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, DSA, DSAparams) +OSSL_DEPRECATEDIN_3_0 DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, + DSA *dsa); +OSSL_DEPRECATEDIN_3_0 int DSA_do_verify(const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); -DSA *DSAparams_dup(DSA *x); -DSA_SIG *DSA_SIG_new(void); -void DSA_SIG_free(DSA_SIG *a); -int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); -DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); -void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); -int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_OpenSSL(void); -DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); -int DSA_do_verify(const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); +OSSL_DEPRECATEDIN_3_0 void DSA_set_default_method(const DSA_METHOD *); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 int DSA_set_method(DSA *dsa, const DSA_METHOD *); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_get_method(DSA *d); -const DSA_METHOD *DSA_OpenSSL(void); - -void DSA_set_default_method(const DSA_METHOD *); -const DSA_METHOD *DSA_get_default_method(void); -int DSA_set_method(DSA *dsa, const DSA_METHOD *); -const DSA_METHOD *DSA_get_method(DSA *d); - -DSA *DSA_new(void); -DSA *DSA_new_method(ENGINE *engine); -void DSA_free(DSA *r); +OSSL_DEPRECATEDIN_3_0 DSA *DSA_new(void); +OSSL_DEPRECATEDIN_3_0 DSA *DSA_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 void DSA_free(DSA *r); /* "up" the DSA object's reference count */ -int DSA_up_ref(DSA *r); -int DSA_size(const DSA *); -int DSA_bits(const DSA *d); -int DSA_security_bits(const DSA *d); +OSSL_DEPRECATEDIN_3_0 int DSA_up_ref(DSA *r); +OSSL_DEPRECATEDIN_3_0 int DSA_size(const DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_bits(const DSA *d); +OSSL_DEPRECATEDIN_3_0 int DSA_security_bits(const DSA *d); /* next 4 return -1 on error */ -DEPRECATEDIN_1_2_0(int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)) -int DSA_sign(int type, const unsigned char *dgst, int dlen, - unsigned char *sig, unsigned int *siglen, DSA *dsa); -int DSA_verify(int type, const unsigned char *dgst, int dgst_len, - const unsigned char *sigbuf, int siglen, DSA *dsa); -#define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) -int DSA_set_ex_data(DSA *d, int idx, void *arg); -void *DSA_get_ex_data(DSA *d, int idx); +OSSL_DEPRECATEDIN_3_0 int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp); +OSSL_DEPRECATEDIN_3_0 int DSA_sign(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, DSA *dsa); +OSSL_DEPRECATEDIN_3_0 int DSA_verify(int type, const unsigned char *dgst, + int dgst_len, const unsigned char *sigbuf, + int siglen, DSA *dsa); -DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); +# define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) +OSSL_DEPRECATEDIN_3_0 int DSA_set_ex_data(DSA *d, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *DSA_get_ex_data(const DSA *d, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAPrivateKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAparams) +# endif + +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 /* Deprecated version */ -DEPRECATEDIN_0_9_8(DSA *DSA_generate_parameters(int bits, - unsigned char *seed, - int seed_len, - int *counter_ret, - unsigned long *h_ret, void - (*callback) (int, int, - void *), - void *cb_arg)) +OSSL_DEPRECATEDIN_0_9_8 +DSA *DSA_generate_parameters(int bits, unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, + void (*callback) (int, int, void *), + void *cb_arg); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* New version */ -int DSA_generate_parameters_ex(DSA *dsa, int bits, - const unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int DSA_generate_parameters_ex(DSA *dsa, int bits, + const unsigned char *seed, + int seed_len, + int *counter_ret, + unsigned long *h_ret, + BN_GENCB *cb); -int DSA_generate_key(DSA *a); -int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); -int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); -int i2d_DSAparams(const DSA *a, unsigned char **pp); +OSSL_DEPRECATEDIN_3_0 int DSA_generate_key(DSA *a); -int DSAparams_print(BIO *bp, const DSA *x); -int DSA_print(BIO *bp, const DSA *x, int off); -# ifndef OPENSSL_NO_STDIO -int DSAparams_print_fp(FILE *fp, const DSA *x); -int DSA_print_fp(FILE *bp, const DSA *x, int off); -# endif +OSSL_DEPRECATEDIN_3_0 int DSAparams_print(BIO *bp, const DSA *x); +OSSL_DEPRECATEDIN_3_0 int DSA_print(BIO *bp, const DSA *x, int off); +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int DSAparams_print_fp(FILE *fp, const DSA *x); +OSSL_DEPRECATEDIN_3_0 int DSA_print_fp(FILE *bp, const DSA *x, int off); +# endif -# define DSS_prime_checks 64 +# define DSS_prime_checks 64 /* * Primality test according to FIPS PUB 186-4, Appendix C.3. Since we only * have one value here we set the number of checks to 64 which is the 128 bit * security level that is the highest level and valid for creating a 3072 bit * DSA key. */ -# define DSA_is_prime(n, callback, cb_arg) \ - BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) +# define DSA_is_prime(n, callback, cb_arg) \ + BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) -# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DH /* * Convert DSA structure (key or just parameters) into DH structure (be * careful to avoid small subgroup attacks when using this!) */ -DH *DSA_dup_DH(const DSA *r); -# endif +OSSL_DEPRECATEDIN_3_0 DH *DSA_dup_DH(const DSA *r); +# endif -# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_q_bits(ctx, qbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, qbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_MD, 0, (void *)(md)) +OSSL_DEPRECATEDIN_3_0 void DSA_get0_pqg(const DSA *d, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +OSSL_DEPRECATEDIN_3_0 int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 void DSA_get0_key(const DSA *d, const BIGNUM **pub_key, + const BIGNUM **priv_key); +OSSL_DEPRECATEDIN_3_0 int DSA_set0_key(DSA *d, BIGNUM *pub_key, + BIGNUM *priv_key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_p(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_q(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_g(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_pub_key(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_priv_key(const DSA *d); +OSSL_DEPRECATEDIN_3_0 void DSA_clear_flags(DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 int DSA_test_flags(const DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 void DSA_set_flags(DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 ENGINE *DSA_get0_engine(DSA *d); -# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) - -void DSA_get0_pqg(const DSA *d, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DSA_get0_key(const DSA *d, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DSA_get0_p(const DSA *d); -const BIGNUM *DSA_get0_q(const DSA *d); -const BIGNUM *DSA_get0_g(const DSA *d); -const BIGNUM *DSA_get0_pub_key(const DSA *d); -const BIGNUM *DSA_get0_priv_key(const DSA *d); -void DSA_clear_flags(DSA *d, int flags); -int DSA_test_flags(const DSA *d, int flags); -void DSA_set_flags(DSA *d, int flags); -ENGINE *DSA_get0_engine(DSA *d); - -DSA_METHOD *DSA_meth_new(const char *name, int flags); -void DSA_meth_free(DSA_METHOD *dsam); -DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); -const char *DSA_meth_get0_name(const DSA_METHOD *dsam); -int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); -int DSA_meth_get_flags(const DSA_METHOD *dsam); -int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); -void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); -int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); -DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 DSA_METHOD *DSA_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void DSA_meth_free(DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 const char *DSA_meth_get0_name(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set1_name(DSA_METHOD *dsam, + const char *name); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_get_flags(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); +OSSL_DEPRECATEDIN_3_0 void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set0_app_data(DSA_METHOD *dsam, + void *app_data); +OSSL_DEPRECATEDIN_3_0 DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) (const unsigned char *, int, DSA *); -int DSA_meth_set_sign(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign(DSA_METHOD *dsam, DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); -int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); -int DSA_meth_set_sign_setup(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign_setup(DSA_METHOD *dsam, int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); -int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) (const unsigned char *, int, DSA_SIG *, DSA *); -int DSA_meth_set_verify(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_verify(DSA_METHOD *dsam, int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); -int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_mod_exp(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_mod_exp(DSA_METHOD *dsam, int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); -int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); -int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); -int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_init(DSA_METHOD *dsam, + int (*init)(DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_finish(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_finish(DSA_METHOD *dsam, + int (*finish)(DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) (DSA *, int, const unsigned char *, int, int *, unsigned long *, BN_GENCB *); -int DSA_meth_set_paramgen(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_paramgen(DSA_METHOD *dsam, int (*paramgen) (DSA *, int, const unsigned char *, int, int *, unsigned long *, BN_GENCB *)); -int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_keygen(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_keygen(DSA_METHOD *dsam, + int (*keygen) (DSA *)); - -# ifdef __cplusplus -} # endif # endif +# ifdef __cplusplus +} +# endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsaerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsaerr.h index 495a1ac8..26ada57d 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsaerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsaerr.h @@ -1,59 +1,29 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DSAERR_H -# define HEADER_DSAERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_DSAERR_H +# define OPENSSL_DSAERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_DSA -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DSA_strings(void); - -/* - * DSA function codes. - */ -# define DSA_F_DSAPARAMS_PRINT 100 -# define DSA_F_DSAPARAMS_PRINT_FP 101 -# define DSA_F_DSA_BUILTIN_PARAMGEN 125 -# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 -# define DSA_F_DSA_DO_SIGN 112 -# define DSA_F_DSA_DO_VERIFY 113 -# define DSA_F_DSA_METH_DUP 127 -# define DSA_F_DSA_METH_NEW 128 -# define DSA_F_DSA_METH_SET1_NAME 129 -# define DSA_F_DSA_NEW_METHOD 103 -# define DSA_F_DSA_PARAM_DECODE 119 -# define DSA_F_DSA_PRINT_FP 105 -# define DSA_F_DSA_PRIV_DECODE 115 -# define DSA_F_DSA_PRIV_ENCODE 116 -# define DSA_F_DSA_PUB_DECODE 117 -# define DSA_F_DSA_PUB_ENCODE 118 -# define DSA_F_DSA_SIGN 106 -# define DSA_F_DSA_SIGN_SETUP 107 -# define DSA_F_DSA_SIG_NEW 102 -# define DSA_F_OLD_DSA_PRIV_DECODE 122 -# define DSA_F_PKEY_DSA_CTRL 120 -# define DSA_F_PKEY_DSA_CTRL_STR 104 -# define DSA_F_PKEY_DSA_KEYGEN 121 /* * DSA reason codes. */ +# define DSA_R_BAD_FFC_PARAMETERS 114 # define DSA_R_BAD_Q_VALUE 102 # define DSA_R_BN_DECODE_ERROR 108 # define DSA_R_BN_ERROR 109 @@ -65,8 +35,10 @@ int ERR_load_DSA_strings(void); # define DSA_R_MODULUS_TOO_LARGE 103 # define DSA_R_NO_PARAMETERS_SET 107 # define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_P_NOT_PRIME 115 # define DSA_R_Q_NOT_PRIME 113 # define DSA_R_SEED_LEN_SMALL 110 +# define DSA_R_TOO_MANY_RETRIES 116 # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dtls1.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dtls1.h index d55ca9c3..5dc6b541 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dtls1.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dtls1.h @@ -1,36 +1,42 @@ /* - * Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DTLS1_H -# define HEADER_DTLS1_H +#ifndef OPENSSL_DTLS1_H +# define OPENSSL_DTLS1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DTLS1_H +# endif + +# include #ifdef __cplusplus extern "C" { #endif -# define DTLS1_VERSION 0xFEFF -# define DTLS1_2_VERSION 0xFEFD -# define DTLS_MIN_VERSION DTLS1_VERSION -# define DTLS_MAX_VERSION DTLS1_2_VERSION -# define DTLS1_VERSION_MAJOR 0xFE +#include -# define DTLS1_BAD_VER 0x0100 +/* DTLS*_VERSION constants are defined in prov_ssl.h */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DTLS_MIN_VERSION DTLS1_VERSION +# define DTLS_MAX_VERSION DTLS1_2_VERSION +# endif +# define DTLS1_VERSION_MAJOR 0xFE /* Special value for method supporting multiple versions */ # define DTLS_ANY_VERSION 0x1FFFF /* lengths of messages */ -/* - * Actually the max cookie length in DTLS is 255. But we can't change this now - * due to compatibility concerns. - */ -# define DTLS1_COOKIE_LENGTH 256 + +# define DTLS1_COOKIE_LENGTH 255 # define DTLS1_RT_HEADER_LENGTH 13 @@ -43,10 +49,6 @@ extern "C" { # define DTLS1_AL_HEADER_LENGTH 2 -/* Timeout multipliers */ -# define DTLS1_TMO_READ_COUNT 2 -# define DTLS1_TMO_WRITE_COUNT 2 - # define DTLS1_TMO_ALERT_COUNT 12 #ifdef __cplusplus diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_os2.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_os2.h index 5c88e519..32e142a9 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_os2.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_os2.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_E_OS2_H -# define HEADER_E_OS2_H +#ifndef OPENSSL_E_OS2_H +# define OPENSSL_E_OS2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_E_OS2_H +# endif # include @@ -96,11 +102,11 @@ extern "C" { # endif /* ------------------------------- OpenVMS -------------------------------- */ -# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYS_VMS) +# if defined(__VMS) || defined(VMS) # if !defined(OPENSSL_SYS_VMS) # undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_VMS # endif -# define OPENSSL_SYS_VMS # if defined(__DECC) # define OPENSSL_SYS_VMS_DECC # elif defined(__DECCXX) @@ -132,19 +138,25 @@ extern "C" { # endif # endif +/* ---------------------------- HP NonStop -------------------------------- */ +# ifdef __TANDEM +# ifdef _STRING +# include +# endif +# define OPENSSL_USE_BUILD_DATE +# if defined(OPENSSL_THREADS) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# elif defined(OPENSSL_THREADS) && defined(_PUT_MODEL_) +# include +# endif +# endif + /** * That's it for OS-specific stuff *****************************************************************************/ -/* Specials for I/O an exit */ -# ifdef OPENSSL_SYS_MSDOS -# define OPENSSL_UNISTD_IO -# define OPENSSL_DECLARE_EXIT extern void exit(int); -# else -# define OPENSSL_UNISTD_IO OPENSSL_UNISTD -# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ -# endif - /*- * OPENSSL_EXTERN is normally used to declare a symbol with possible extra * attributes to handle its presence in a shared library. @@ -172,29 +184,6 @@ extern "C" { # define OPENSSL_EXTERN extern # endif -/*- - * Macros to allow global variables to be reached through function calls when - * required (if a shared library version requires it, for example. - * The way it's done allows definitions like this: - * - * // in foobar.c - * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) - * // in foobar.h - * OPENSSL_DECLARE_GLOBAL(int,foobar); - * #define foobar OPENSSL_GLOBAL_REF(foobar) - */ -# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ - type *_shadow_##name(void) \ - { static type _hide_##name=value; return &_hide_##name; } -# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) -# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) -# else -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) type _shadow_##name=value; -# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name -# define OPENSSL_GLOBAL_REF(name) _shadow_##name -# endif - # ifdef _WIN32 # ifdef _WIN64 # define ossl_ssize_t __int64 @@ -221,13 +210,15 @@ extern "C" { # endif # endif -# ifdef DEBUG_UNUSED +# if defined(UNUSEDRESULT_DEBUG) # define __owur __attribute__((__warn_unused_result__)) # else # define __owur # endif /* Standard integer types */ +# define OPENSSL_NO_INTTYPES_H +# define OPENSSL_NO_STDINT_H # if defined(OPENSSL_SYS_UEFI) typedef INT8 int8_t; typedef UINT8 uint8_t; @@ -241,6 +232,9 @@ typedef UINT64 uint64_t; defined(__osf__) || defined(__sgi) || defined(__hpux) || \ defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) # include +# undef OPENSSL_NO_INTTYPES_H +/* Because the specs say that inttypes.h includes stdint.h if present */ +# undef OPENSSL_NO_STDINT_H # elif defined(_MSC_VER) && _MSC_VER<1600 /* * minimally required typdefs for systems not supporting inttypes.h or @@ -254,8 +248,21 @@ typedef int int32_t; typedef unsigned int uint32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; +# elif defined(OPENSSL_SYS_TANDEM) +# include +# include # else # include +# undef OPENSSL_NO_STDINT_H +# endif +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ + defined(INTMAX_MAX) && defined(UINTMAX_MAX) +typedef intmax_t ossl_intmax_t; +typedef uintmax_t ossl_uintmax_t; +# else +/* Fall back to the largest we know we require and can handle */ +typedef int64_t ossl_intmax_t; +typedef uint64_t ossl_uintmax_t; # endif /* ossl_inline: portable inline definition usable in public headers */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ebcdic.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ebcdic.h index aa012855..e0ae1aa8 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ebcdic.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ebcdic.h @@ -1,14 +1,20 @@ /* * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EBCDIC_H -# define HEADER_EBCDIC_H +#ifndef OPENSSL_EBCDIC_H +# define OPENSSL_EBCDIC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_EBCDIC_H +# endif # include diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ec.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ec.h index 24baf53c..be9fb2f0 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ec.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ec.h @@ -1,33 +1,78 @@ /* - * Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EC_H -# define HEADER_EC_H +#ifndef OPENSSL_EC_H +# define OPENSSL_EC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_EC_H +# endif # include +# include + +# include -# ifndef OPENSSL_NO_EC -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include # ifdef __cplusplus extern "C" { # endif -# ifndef OPENSSL_ECC_MAX_FIELD_BITS -# define OPENSSL_ECC_MAX_FIELD_BITS 661 +/* Values for EVP_PKEY_CTX_set_ec_param_enc() */ +# define OPENSSL_EC_EXPLICIT_CURVE 0x000 +# define OPENSSL_EC_NAMED_CURVE 0x001 + +int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid); +int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, int param_enc); +int EVP_PKEY_CTX_set_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx, int cofactor_mode); +int EVP_PKEY_CTX_get_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_set_ecdh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +int EVP_PKEY_CTX_get_ecdh_kdf_type(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_set_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_get_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); + +int EVP_PKEY_CTX_set_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +int EVP_PKEY_CTX_get_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); + +int EVP_PKEY_CTX_set0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, + int len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_get0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); # endif +# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) + +/* KDF types */ +# define EVP_PKEY_ECDH_KDF_NONE 1 +# define EVP_PKEY_ECDH_KDF_X9_63 2 +/* + * The old name for EVP_PKEY_ECDH_KDF_X9_63 + * The ECDH KDF specification has been mistakenly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility + */ +# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 + /** Enum for the point conversion form as defined in X9.62 (ECDSA) * for the encoding of a elliptic curve point (x,y) */ typedef enum { @@ -41,7 +86,27 @@ typedef enum { POINT_CONVERSION_HYBRID = 6 } point_conversion_form_t; +const char *OSSL_EC_curve_nid2name(int nid); + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# ifndef OPENSSL_NO_EC +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include + +# ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef struct ec_method_st EC_METHOD; +# endif typedef struct ec_group_st EC_GROUP; typedef struct ec_point_st EC_POINT; typedef struct ecpk_parameters_st ECPKPARAMETERS; @@ -51,40 +116,41 @@ typedef struct ec_parameters_st ECPARAMETERS; /* EC_METHODs for curves over GF(p) */ /********************************************************************/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Returns the basic GFp ec methods which provides the basis for the * optimized methods. * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_simple_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_simple_method(void); /** Returns GFp methods using montgomery multiplication. * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_mont_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_mont_method(void); /** Returns GFp methods using optimized methods for NIST recommended curves * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nist_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nist_method(void); -# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 /** Returns 64-bit optimized methods for nistp224 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp224_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp224_method(void); /** Returns 64-bit optimized methods for nistp256 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp256_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp256_method(void); /** Returns 64-bit optimized methods for nistp521 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp521_method(void); -# endif +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp521_method(void); +# endif /* OPENSSL_NO_EC_NISTP_64_GCC_128 */ -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /********************************************************************/ /* EC_METHOD for curves over GF(2^m) */ /********************************************************************/ @@ -92,30 +158,44 @@ const EC_METHOD *EC_GFp_nistp521_method(void); /** Returns the basic GF2m ec method * \return EC_METHOD object */ -const EC_METHOD *EC_GF2m_simple_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GF2m_simple_method(void); -# endif +# endif /********************************************************************/ /* EC_GROUP functions */ /********************************************************************/ -/** Creates a new EC_GROUP object - * \param meth EC_METHOD to use +/** + * Creates a new EC_GROUP object + * \param meth EC_METHOD to use * \return newly created EC_GROUP object or NULL in case of an error. */ -EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); + +/** Clears and frees a EC_GROUP object + * \param group EC_GROUP object to be cleared and freed. + */ +OSSL_DEPRECATEDIN_3_0 void EC_GROUP_clear_free(EC_GROUP *group); + +/** Returns the EC_METHOD of the EC_GROUP object. + * \param group EC_GROUP object + * \return EC_METHOD used in this EC_GROUP object. + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); + +/** Returns the field type of the EC_METHOD. + * \param meth EC_METHOD object + * \return NID of the underlying field type OID. + */ +OSSL_DEPRECATEDIN_3_0 int EC_METHOD_get_field_type(const EC_METHOD *meth); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Frees a EC_GROUP object * \param group EC_GROUP object to be freed. */ void EC_GROUP_free(EC_GROUP *group); -/** Clears and frees a EC_GROUP object - * \param group EC_GROUP object to be cleared and freed. - */ -void EC_GROUP_clear_free(EC_GROUP *group); - /** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. * \param dst destination EC_GROUP object * \param src source EC_GROUP object @@ -123,25 +203,13 @@ void EC_GROUP_clear_free(EC_GROUP *group); */ int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); -/** Creates a new EC_GROUP object and copies the copies the content +/** Creates a new EC_GROUP object and copies the content * form src to the newly created EC_KEY object * \param src source EC_GROUP object * \return newly created EC_GROUP object or NULL in case of an error. */ EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); -/** Returns the EC_METHOD of the EC_GROUP object. - * \param group EC_GROUP object - * \return EC_METHOD used in this EC_GROUP object. - */ -const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); - -/** Returns the field type of the EC_METHOD. - * \param meth EC_METHOD object - * \return NID of the underlying field type OID. - */ -int EC_METHOD_get_field_type(const EC_METHOD *meth); - /** Sets the generator and its order/cofactor of a EC_GROUP object. * \param group EC_GROUP object * \param generator EC_POINT object with the generator. @@ -212,6 +280,18 @@ void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); */ int EC_GROUP_get_curve_name(const EC_GROUP *group); +/** Gets the field of an EC_GROUP + * \param group EC_GROUP object + * \return the group field + */ +const BIGNUM *EC_GROUP_get0_field(const EC_GROUP *group); + +/** Returns the field type of the EC_GROUP. + * \param group EC_GROUP object + * \return NID of the underlying field type OID. + */ +int EC_GROUP_get_field_type(const EC_GROUP *group); + void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); int EC_GROUP_get_asn1_flag(const EC_GROUP *group); @@ -223,7 +303,7 @@ unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); size_t EC_GROUP_get_seed_len(const EC_GROUP *); size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); -/** Sets the parameters of a ec curve defined by y^2 = x^3 + a*x + b (for GFp) +/** Sets the parameters of an ec curve defined by y^2 = x^3 + a*x + b (for GFp) * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -249,6 +329,7 @@ int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the parameters of an ec curve. Synonym for EC_GROUP_set_curve * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -258,9 +339,11 @@ int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, - const BIGNUM *a, const BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_set_curve_GFp(EC_GROUP *group, + const BIGNUM *p, + const BIGNUM *a, + const BIGNUM *b, + BN_CTX *ctx); /** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve * \param group EC_GROUP object @@ -271,11 +354,12 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, - BIGNUM *a, BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_get_curve_GFp(const EC_GROUP *group, + BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /** Sets the parameter of an ec curve. Synonym for EC_GROUP_set_curve * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -285,9 +369,11 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, - const BIGNUM *a, const BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_set_curve_GF2m(EC_GROUP *group, + const BIGNUM *p, + const BIGNUM *a, + const BIGNUM *b, + BN_CTX *ctx); /** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve * \param group EC_GROUP object @@ -298,10 +384,13 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, - BIGNUM *a, BIGNUM *b, - BN_CTX *ctx)) -# endif +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, + BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); +# endif /* OPENSSL_NO_EC2M */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + /** Returns the number of bits needed to represent a field element * \param group EC_GROUP object * \return number of bits needed to represent a field element @@ -345,7 +434,7 @@ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); */ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /** Creates a new EC_GROUP object with the specified parameters defined * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) * \param p BIGNUM with the polynomial defining the underlying field @@ -356,10 +445,38 @@ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, */ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -# endif +# endif -/** Creates a EC_GROUP object with a curve specified by a NID - * \param nid NID of the OID of the curve name +/** + * Creates a EC_GROUP object with a curve specified by parameters. + * The parameters may be explicit or a named curve, + * \param params A list of parameters describing the group. + * \param libctx The associated library context or NULL for the default + * context + * \param propq A property query string + * \return newly created EC_GROUP object with specified parameters or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[], + OSSL_LIB_CTX *libctx, const char *propq); + +/** + * Creates a EC_GROUP object with a curve specified by a NID + * \param libctx The associated library context or NULL for the default + * context + * \param propq A property query string + * \param nid NID of the OID of the curve name + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_by_curve_name_ex(OSSL_LIB_CTX *libctx, const char *propq, + int nid); + +/** + * Creates a EC_GROUP object with a curve specified by a NID. Same as + * EC_GROUP_new_by_curve_name_ex but the libctx and propq are always + * NULL. + * \param nid NID of the OID of the curve name * \return newly created EC_GROUP object with specified curve or NULL * if an error occurred */ @@ -416,6 +533,8 @@ size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); const char *EC_curve_nid2nist(int nid); int EC_curve_nist2nid(const char *name); +int EC_GROUP_check_named_curve(const EC_GROUP *group, int nist_only, + BN_CTX *ctx); /********************************************************************/ /* EC_POINT functions */ @@ -452,12 +571,6 @@ int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); */ EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); -/** Returns the EC_METHOD used in EC_POINT object - * \param point EC_POINT object - * \return the EC_METHOD used - */ -const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); - /** Sets a point to infinity (neutral element) * \param group underlying EC_GROUP object * \param point EC_POINT to set to infinity @@ -465,6 +578,13 @@ const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); */ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** Returns the EC_METHOD used in EC_POINT object + * \param point EC_POINT object + * \return the EC_METHOD used + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); + /** Sets the jacobian projective coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object * \param p EC_POINT object @@ -474,10 +594,10 @@ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - const BIGNUM *y, const BIGNUM *z, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_Jprojective_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, + BN_CTX *ctx); /** Gets the jacobian projective coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object @@ -488,10 +608,10 @@ int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BIGNUM *z, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_Jprojective_coordinates_GFp + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Sets the affine coordinates of an EC_POINT * \param group underlying EC_GROUP object @@ -516,6 +636,7 @@ int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p, int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_set_affine_coordinates * \param group underlying EC_GROUP object @@ -525,11 +646,9 @@ int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - const BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_affine_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); /** Gets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_get_affine_coordinates @@ -540,11 +659,10 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, - BIGNUM *x, - BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_affine_coordinates_GFp + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Sets the x9.62 compressed coordinates of a EC_POINT * \param group underlying EC_GROUP object @@ -558,6 +676,7 @@ int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, const BIGNUM *x, int y_bit, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of * EC_POINT_set_compressed_coordinates * \param group underlying EC_GROUP object @@ -567,12 +686,10 @@ int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - int y_bit, - BN_CTX *ctx)) -# ifndef OPENSSL_NO_EC2M +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_compressed_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); +# ifndef OPENSSL_NO_EC2M /** Sets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_set_affine_coordinates * \param group underlying EC_GROUP object @@ -582,11 +699,9 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *g * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - const BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_affine_coordinates_GF2m + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); /** Gets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_get_affine_coordinates @@ -597,11 +712,9 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *grou * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, - const EC_POINT *p, - BIGNUM *x, - BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_affine_coordinates_GF2m + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); /** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of * EC_POINT_set_compressed_coordinates @@ -612,12 +725,12 @@ DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *grou * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - int y_bit, - BN_CTX *ctx)) -# endif +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_compressed_coordinates_GF2m + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + /** Encodes a EC_POINT object to a octet string * \param group underlying EC_GROUP object * \param p EC_POINT object @@ -656,10 +769,16 @@ size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point, unsigned char **pbuf, BN_CTX *ctx); /* other interfaces to point2oct/oct2point: */ -BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BIGNUM *, BN_CTX *); -EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, - EC_POINT *, BN_CTX *); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 BIGNUM *EC_POINT_point2bn(const EC_GROUP *, + const EC_POINT *, + point_conversion_form_t form, + BIGNUM *, BN_CTX *); +OSSL_DEPRECATEDIN_3_0 EC_POINT *EC_POINT_bn2point(const EC_GROUP *, + const BIGNUM *, + EC_POINT *, BN_CTX *); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, point_conversion_form_t form, BN_CTX *); EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, @@ -724,9 +843,11 @@ int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); -int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); -int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, - EC_POINT *points[], BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EC_POINT_make_affine(const EC_GROUP *group, + EC_POINT *point, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, + EC_POINT *points[], BN_CTX *ctx); /** Computes r = generator * n + sum_{i=0}^{num-1} p[i] * m[i] * \param group underlying EC_GROUP object @@ -738,9 +859,11 @@ int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - size_t num, const EC_POINT *p[], const BIGNUM *m[], - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, + const BIGNUM *n, size_t num, + const EC_POINT *p[], const BIGNUM *m[], + BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Computes r = generator * n + q * m * \param group underlying EC_GROUP object @@ -754,18 +877,20 @@ int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Stores multiples of generator for faster point multiplication * \param group EC_GROUP object * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); /** Reports whether a precomputation has been done * \param group EC_GROUP object * \return 1 if a pre-computation has been done and 0 otherwise */ -int EC_GROUP_have_precompute_mult(const EC_GROUP *group); +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_have_precompute_mult(const EC_GROUP *group); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /********************************************************************/ /* ASN1 stuff */ @@ -781,101 +906,135 @@ DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) * represent the field elements */ int EC_GROUP_get_basis_type(const EC_GROUP *); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, unsigned int *k2, unsigned int *k3); -# endif - -# define OPENSSL_EC_EXPLICIT_CURVE 0x000 -# define OPENSSL_EC_NAMED_CURVE 0x001 +# endif EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); -# define d2i_ECPKParameters_bio(bp,x) \ +# define d2i_ECPKParameters_bio(bp,x) \ ASN1_d2i_bio_of(EC_GROUP, NULL, d2i_ECPKParameters, bp, x) -# define i2d_ECPKParameters_bio(bp,x) \ - ASN1_i2d_bio_of_const(EC_GROUP, i2d_ECPKParameters, bp, x) -# define d2i_ECPKParameters_fp(fp,x) \ +# define i2d_ECPKParameters_bio(bp,x) \ + ASN1_i2d_bio_of(EC_GROUP, i2d_ECPKParameters, bp, x) +# define d2i_ECPKParameters_fp(fp,x) \ (EC_GROUP *)ASN1_d2i_fp(NULL, (d2i_of_void *)d2i_ECPKParameters, (fp), \ (void **)(x)) -# define i2d_ECPKParameters_fp(fp,x) \ +# define i2d_ECPKParameters_fp(fp,x) \ ASN1_i2d_fp((i2d_of_void *)i2d_ECPKParameters, (fp), (void *)(x)) -int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); -# ifndef OPENSSL_NO_STDIO -int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); -# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ECPKParameters_print(BIO *bp, const EC_GROUP *x, + int off); +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, + int off); +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /********************************************************************/ /* EC_KEY functions */ /********************************************************************/ /* some values for the encoding_flag */ -# define EC_PKEY_NO_PARAMETERS 0x001 -# define EC_PKEY_NO_PUBKEY 0x002 +# define EC_PKEY_NO_PARAMETERS 0x001 +# define EC_PKEY_NO_PUBKEY 0x002 /* some values for the flags field */ -# define EC_FLAG_NON_FIPS_ALLOW 0x1 -# define EC_FLAG_FIPS_CHECKED 0x2 -# define EC_FLAG_COFACTOR_ECDH 0x1000 +# define EC_FLAG_SM2_RANGE 0x0004 +# define EC_FLAG_COFACTOR_ECDH 0x1000 +# define EC_FLAG_CHECK_NAMED_GROUP 0x2000 +# define EC_FLAG_CHECK_NAMED_GROUP_NIST 0x4000 +# define EC_FLAG_CHECK_NAMED_GROUP_MASK \ + (EC_FLAG_CHECK_NAMED_GROUP | EC_FLAG_CHECK_NAMED_GROUP_NIST) -/** Creates a new EC_KEY object. +/* Deprecated flags - it was using 0x01..0x02 */ +# define EC_FLAG_NON_FIPS_ALLOW 0x0000 +# define EC_FLAG_FIPS_CHECKED 0x0000 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** + * Creates a new EC_KEY object. + * \param ctx The library context for to use for this EC_KEY. May be NULL in + * which case the default library context is used. * \return EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_new(void); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_ex(OSSL_LIB_CTX *ctx, const char *propq); -int EC_KEY_get_flags(const EC_KEY *key); +/** + * Creates a new EC_KEY object. Same as calling EC_KEY_new_ex with a + * NULL library context + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new(void); -void EC_KEY_set_flags(EC_KEY *key, int flags); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_get_flags(const EC_KEY *key); -void EC_KEY_clear_flags(EC_KEY *key, int flags); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_flags(EC_KEY *key, int flags); -int EC_KEY_decoded_from_explicit_params(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_clear_flags(EC_KEY *key, int flags); -/** Creates a new EC_KEY object using a named curve as underlying +OSSL_DEPRECATEDIN_3_0 int EC_KEY_decoded_from_explicit_params(const EC_KEY *key); + +/** + * Creates a new EC_KEY object using a named curve as underlying * EC_GROUP object. + * \param ctx The library context for to use for this EC_KEY. May be NULL in + * which case the default library context is used. + * \param propq Any property query string + * \param nid NID of the named curve. + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_by_curve_name_ex(OSSL_LIB_CTX *ctx, + const char *propq, + int nid); + +/** + * Creates a new EC_KEY object using a named curve as underlying + * EC_GROUP object. Same as calling EC_KEY_new_by_curve_name_ex with a NULL + * library context and property query string. * \param nid NID of the named curve. * \return EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_new_by_curve_name(int nid); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_by_curve_name(int nid); /** Frees a EC_KEY object. * \param key EC_KEY object to be freed. */ -void EC_KEY_free(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_free(EC_KEY *key); /** Copies a EC_KEY object. * \param dst destination EC_KEY object * \param src src EC_KEY object * \return dst or NULL if an error occurred. */ -EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); /** Creates a new EC_KEY object and copies the content from src to it. * \param src the source EC_KEY object * \return newly created EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_dup(const EC_KEY *src); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_dup(const EC_KEY *src); /** Increases the internal reference count of a EC_KEY object. * \param key EC_KEY object * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_up_ref(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_up_ref(EC_KEY *key); /** Returns the ENGINE object of a EC_KEY object * \param eckey EC_KEY object * \return the ENGINE object (possibly NULL). */ -ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); /** Returns the EC_GROUP object of a EC_KEY object * \param key EC_KEY object * \return the EC_GROUP object (possibly NULL). */ -const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); /** Sets the EC_GROUP of a EC_KEY object. * \param key EC_KEY object @@ -883,13 +1042,13 @@ const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); * object will use an own copy of the EC_GROUP). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); /** Returns the private key of a EC_KEY object. * \param key EC_KEY object * \return a BIGNUM with the private key (possibly NULL). */ -const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); /** Sets the private key of a EC_KEY object. * \param key EC_KEY object @@ -897,13 +1056,13 @@ const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); * will use an own copy of the BIGNUM). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); /** Returns the public key of a EC_KEY object. * \param key the EC_KEY object * \return a EC_POINT object with the public key (possibly NULL) */ -const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); /** Sets the public key of a EC_KEY object. * \param key EC_KEY object @@ -911,20 +1070,24 @@ const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); * will use an own copy of the EC_POINT object). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); -unsigned EC_KEY_get_enc_flags(const EC_KEY *key); -void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); -point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); -void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); +OSSL_DEPRECATEDIN_3_0 unsigned EC_KEY_get_enc_flags(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); +OSSL_DEPRECATEDIN_3_0 point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_conv_form(EC_KEY *eckey, + point_conversion_form_t cform); +# endif /*OPENSSL_NO_DEPRECATED_3_0 */ -#define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ +# define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) -int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); -void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); /* wrapper functions for the underlying EC_GROUP object */ -void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); /** Creates a table of pre-computed multiples of the generator to * accelerate further EC_KEY operations. @@ -932,25 +1095,25 @@ void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); /** Creates a new ec private (and optional a new public) key. * \param key EC_KEY object * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_generate_key(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_generate_key(EC_KEY *key); /** Verifies that a private and/or public key is valid. * \param key the EC_KEY object * \return 1 on success and 0 otherwise. */ -int EC_KEY_check_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_check_key(const EC_KEY *key); /** Indicates if an EC_KEY can be used for signing. * \param eckey the EC_KEY object * \return 1 if can can sign and 0 otherwise. */ -int EC_KEY_can_sign(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_can_sign(const EC_KEY *eckey); /** Sets a public key from affine coordinates performing * necessary NIST PKV tests. @@ -959,8 +1122,9 @@ int EC_KEY_can_sign(const EC_KEY *eckey); * \param y public key y coordinate * \return 1 on success and 0 otherwise. */ -int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, - BIGNUM *y); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, + BIGNUM *x, + BIGNUM *y); /** Encodes an EC_KEY public key to an allocated octet string * \param key key to encode @@ -969,8 +1133,9 @@ int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, * \param ctx BN_CTX object (optional) * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, - unsigned char **pbuf, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_key2buf(const EC_KEY *key, + point_conversion_form_t form, + unsigned char **pbuf, BN_CTX *ctx); /** Decodes a EC_KEY public key from a octet string * \param key key to decode @@ -980,8 +1145,8 @@ size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, * \return 1 on success and 0 if an error occurred */ -int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, + size_t len, BN_CTX *ctx); /** Decodes an EC_KEY private key from an octet string * \param key key to decode @@ -990,7 +1155,8 @@ int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, * \return 1 on success and 0 if an error occurred */ -int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, + size_t len); /** Encodes a EC_KEY private key to an octet string * \param key key to encode @@ -1000,14 +1166,16 @@ int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_priv2oct(const EC_KEY *key, unsigned char *buf, size_t len); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_priv2oct(const EC_KEY *key, + unsigned char *buf, size_t len); /** Encodes an EC_KEY private key to an allocated octet string * \param eckey key to encode * \param pbuf returns pointer to allocated buffer * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_priv2buf(const EC_KEY *eckey, + unsigned char **pbuf); /********************************************************************/ /* de- and encoding functions for SEC1 ECPrivateKey */ @@ -1019,7 +1187,9 @@ size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); * \param len length of the DER encoded private key * \return the decoded private key or NULL if an error occurred. */ -EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey(EC_KEY **key, + const unsigned char **in, + long len); /** Encodes a private key object and stores the result in a buffer. * \param key the EC_KEY object to encode @@ -1027,7 +1197,8 @@ EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); * of bytes needed). * \return 1 on success and 0 if an error occurred. */ -int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey(const EC_KEY *key, + unsigned char **out); /********************************************************************/ /* de- and encoding functions for EC parameters */ @@ -1040,7 +1211,9 @@ int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); * \return a EC_KEY object with the decoded parameters or NULL if an error * occurred. */ -EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECParameters(EC_KEY **key, + const unsigned char **in, + long len); /** Encodes ec parameter and stores the result in a buffer. * \param key the EC_KEY object with ec parameters to encode @@ -1048,36 +1221,38 @@ EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); * of bytes needed). * \return 1 on success and 0 if an error occurred. */ -int i2d_ECParameters(EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2d_ECParameters(const EC_KEY *key, + unsigned char **out); /********************************************************************/ /* de- and encoding functions for EC public key */ /* (octet string, not DER -- hence 'o2i' and 'i2o') */ /********************************************************************/ -/** Decodes a ec public key from a octet string. +/** Decodes an ec public key from a octet string. * \param key a pointer to a EC_KEY object which should be used * \param in memory buffer with the encoded public key * \param len length of the encoded public key * \return EC_KEY object with decoded public key or NULL if an error * occurred. */ -EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *o2i_ECPublicKey(EC_KEY **key, + const unsigned char **in, long len); -/** Encodes a ec public key in an octet string. +/** Encodes an ec public key in an octet string. * \param key the EC_KEY object with the public key * \param out the buffer for the result (if NULL the function returns number * of bytes needed). * \return 1 on success and 0 if an error occurred */ -int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); /** Prints out the ec parameters on human readable form. * \param bp BIO object to which the information is printed * \param key EC_KEY object * \return 1 on success and 0 if an error occurred */ -int ECParameters_print(BIO *bp, const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int ECParameters_print(BIO *bp, const EC_KEY *key); /** Prints out the contents of a EC_KEY object * \param bp BIO object to which the information is printed @@ -1085,15 +1260,15 @@ int ECParameters_print(BIO *bp, const EC_KEY *key); * \param off line offset * \return 1 on success and 0 if an error occurred */ -int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); -# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_STDIO /** Prints out the ec parameters on human readable form. * \param fp file descriptor to which the information is printed * \param key EC_KEY object * \return 1 on success and 0 if an error occurred */ -int ECParameters_print_fp(FILE *fp, const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int ECParameters_print_fp(FILE *fp, const EC_KEY *key); /** Prints out the contents of a EC_KEY object * \param fp file descriptor to which the information is printed @@ -1101,31 +1276,33 @@ int ECParameters_print_fp(FILE *fp, const EC_KEY *key); * \param off line offset * \return 1 on success and 0 if an error occurred */ -int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); +# endif /* OPENSSL_NO_STDIO */ -# endif - -const EC_KEY_METHOD *EC_KEY_OpenSSL(void); -const EC_KEY_METHOD *EC_KEY_get_default_method(void); -void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); -const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); -int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); -EC_KEY *EC_KEY_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_method(ENGINE *engine); /** The old name for ecdh_KDF_X9_63 * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, * it is actually specified in ANSI X9.63. * This identifier is retained for backwards compatibility */ -int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const unsigned char *sinfo, + size_t sinfolen, const EVP_MD *md); -int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, - const EC_KEY *ecdh, - void *(*KDF) (const void *in, size_t inlen, - void *out, size_t *outlen)); +OSSL_DEPRECATEDIN_3_0 int ECDH_compute_key(void *out, size_t outlen, + const EC_POINT *pub_key, + const EC_KEY *ecdh, + void *(*KDF)(const void *in, + size_t inlen, void *out, + size_t *outlen)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ typedef struct ECDSA_SIG_st ECDSA_SIG; @@ -1139,23 +1316,22 @@ ECDSA_SIG *ECDSA_SIG_new(void); */ void ECDSA_SIG_free(ECDSA_SIG *sig); -/** DER encode content of ECDSA_SIG object (note: this function modifies *pp +/** i2d_ECDSA_SIG encodes content of ECDSA_SIG (note: this function modifies *pp * (*pp += length of the DER encoded signature)). * \param sig pointer to the ECDSA_SIG object * \param pp pointer to a unsigned char pointer for the output or NULL * \return the length of the DER encoded ECDSA_SIG object or a negative value * on error */ -int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ECDSA_SIG, ECDSA_SIG) -/** Decodes a DER encoded ECDSA signature (note: this function changes *pp +/** d2i_ECDSA_SIG decodes an ECDSA signature (note: this function modifies *pp * (*pp += len)). * \param sig pointer to ECDSA_SIG pointer (may be NULL) * \param pp memory buffer with the DER encoded signature * \param len length of the buffer * \return pointer to the decoded ECDSA_SIG structure (or NULL) */ -ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); /** Accessor for r and s fields of ECDSA_SIG * \param sig pointer to ECDSA_SIG structure @@ -1176,11 +1352,12 @@ const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig); /** Setter for r and s fields of ECDSA_SIG * \param sig pointer to ECDSA_SIG structure - * \param r pointer to BIGNUM for r (may be NULL) - * \param s pointer to BIGNUM for s (may be NULL) + * \param r pointer to BIGNUM for r + * \param s pointer to BIGNUM for s */ int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Computes the ECDSA signature of the given hash value using * the supplied private key and returns the created signature. * \param dgst pointer to the hash value @@ -1188,8 +1365,8 @@ int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); * \param eckey EC_KEY object containing a private EC key * \return pointer to a ECDSA_SIG structure or NULL if an error occurred */ -ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, - EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, + int dgst_len, EC_KEY *eckey); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1201,9 +1378,9 @@ ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, * \param eckey EC_KEY object containing a private EC key * \return pointer to a ECDSA_SIG structure or NULL if an error occurred */ -ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, - const BIGNUM *kinv, const BIGNUM *rp, - EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, + int dgstlen, const BIGNUM *kinv, + const BIGNUM *rp, EC_KEY *eckey); /** Verifies that the supplied signature is a valid ECDSA * signature of the supplied hash value using the supplied public key. @@ -1214,8 +1391,8 @@ ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, * \return 1 if the signature is valid, 0 if the signature is invalid * and -1 on error */ -int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, + const ECDSA_SIG *sig, EC_KEY *eckey); /** Precompute parts of the signing operation * \param eckey EC_KEY object containing a private EC key @@ -1224,7 +1401,8 @@ int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, * \param rp BIGNUM pointer for x coordinate of k * generator * \return 1 on success and 0 otherwise */ -int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, + BIGNUM **kinv, BIGNUM **rp); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1236,8 +1414,9 @@ int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); * \param eckey EC_KEY object containing a private EC key * \return 1 on success and 0 otherwise */ -int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign(int type, const unsigned char *dgst, + int dgstlen, unsigned char *sig, + unsigned int *siglen, EC_KEY *eckey); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1252,9 +1431,10 @@ int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, * \param eckey EC_KEY object containing a private EC key * \return 1 on success and 0 otherwise */ -int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign_ex(int type, const unsigned char *dgst, + int dgstlen, unsigned char *sig, + unsigned int *siglen, const BIGNUM *kinv, + const BIGNUM *rp, EC_KEY *eckey); /** Verifies that the given signature is valid ECDSA signature * of the supplied hash value using the specified public key. @@ -1267,218 +1447,126 @@ int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, * \return 1 if the signature is valid, 0 if the signature is invalid * and -1 on error */ -int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_verify(int type, const unsigned char *dgst, + int dgstlen, const unsigned char *sig, + int siglen, EC_KEY *eckey); /** Returns the maximum length of the DER encoded signature * \param eckey EC_KEY object * \return numbers of bytes required for the DER encoded signature */ -int ECDSA_size(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_size(const EC_KEY *eckey); /********************************************************************/ /* EC_KEY_METHOD constructors, destructors, writers and accessors */ /********************************************************************/ -EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); -void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); -void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, - int (*init)(EC_KEY *key), - void (*finish)(EC_KEY *key), - int (*copy)(EC_KEY *dest, const EC_KEY *src), - int (*set_group)(EC_KEY *key, const EC_GROUP *grp), - int (*set_private)(EC_KEY *key, - const BIGNUM *priv_key), - int (*set_public)(EC_KEY *key, - const EC_POINT *pub_key)); +OSSL_DEPRECATEDIN_3_0 EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_init + (EC_KEY_METHOD *meth, + int (*init)(EC_KEY *key), + void (*finish)(EC_KEY *key), + int (*copy)(EC_KEY *dest, const EC_KEY *src), + int (*set_group)(EC_KEY *key, const EC_GROUP *grp), + int (*set_private)(EC_KEY *key, const BIGNUM *priv_key), + int (*set_public)(EC_KEY *key, const EC_POINT *pub_key)); -void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, - int (*keygen)(EC_KEY *key)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, + int (*keygen)(EC_KEY *key)); -void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, - int (*ckey)(unsigned char **psec, - size_t *pseclen, - const EC_POINT *pub_key, - const EC_KEY *ecdh)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_compute_key + (EC_KEY_METHOD *meth, + int (*ckey)(unsigned char **psec, size_t *pseclen, + const EC_POINT *pub_key, const EC_KEY *ecdh)); -void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, - int (*sign)(int type, const unsigned char *dgst, - int dlen, unsigned char *sig, - unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *r, - EC_KEY *eckey), - int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, - BIGNUM **kinvp, BIGNUM **rp), - ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, - int dgst_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_sign + (EC_KEY_METHOD *meth, + int (*sign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); -void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth, - int (*verify)(int type, const unsigned - char *dgst, int dgst_len, - const unsigned char *sigbuf, - int sig_len, EC_KEY *eckey), - int (*verify_sig)(const unsigned char *dgst, +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_verify + (EC_KEY_METHOD *meth, + int (*verify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (*verify_sig)(const unsigned char *dgst, + int dgst_len, const ECDSA_SIG *sig, + EC_KEY *eckey)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_init + (const EC_KEY_METHOD *meth, + int (**pinit)(EC_KEY *key), + void (**pfinish)(EC_KEY *key), + int (**pcopy)(EC_KEY *dest, const EC_KEY *src), + int (**pset_group)(EC_KEY *key, const EC_GROUP *grp), + int (**pset_private)(EC_KEY *key, const BIGNUM *priv_key), + int (**pset_public)(EC_KEY *key, const EC_POINT *pub_key)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_keygen + (const EC_KEY_METHOD *meth, int (**pkeygen)(EC_KEY *key)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_compute_key + (const EC_KEY_METHOD *meth, + int (**pck)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_sign + (const EC_KEY_METHOD *meth, + int (**psign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, + const BIGNUM *in_kinv, + const BIGNUM *in_r, EC_KEY *eckey)); -void EC_KEY_METHOD_get_init(const EC_KEY_METHOD *meth, - int (**pinit)(EC_KEY *key), - void (**pfinish)(EC_KEY *key), - int (**pcopy)(EC_KEY *dest, const EC_KEY *src), - int (**pset_group)(EC_KEY *key, - const EC_GROUP *grp), - int (**pset_private)(EC_KEY *key, - const BIGNUM *priv_key), - int (**pset_public)(EC_KEY *key, - const EC_POINT *pub_key)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_verify + (const EC_KEY_METHOD *meth, + int (**pverify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (**pverify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ -void EC_KEY_METHOD_get_keygen(const EC_KEY_METHOD *meth, - int (**pkeygen)(EC_KEY *key)); +# define EVP_EC_gen(curve) \ + EVP_PKEY_Q_keygen(NULL, NULL, "EC", (char *)(strstr(curve, ""))) + /* strstr is used to enable type checking for the variadic string arg */ +# define ECParameters_dup(x) ASN1_dup_of(EC_KEY, i2d_ECParameters, \ + d2i_ECParameters, x) -void EC_KEY_METHOD_get_compute_key(const EC_KEY_METHOD *meth, - int (**pck)(unsigned char **psec, - size_t *pseclen, - const EC_POINT *pub_key, - const EC_KEY *ecdh)); - -void EC_KEY_METHOD_get_sign(const EC_KEY_METHOD *meth, - int (**psign)(int type, const unsigned char *dgst, - int dlen, unsigned char *sig, - unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *r, - EC_KEY *eckey), - int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, - BIGNUM **kinvp, BIGNUM **rp), - ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, - int dgst_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); - -void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth, - int (**pverify)(int type, const unsigned - char *dgst, int dgst_len, - const unsigned char *sigbuf, - int sig_len, EC_KEY *eckey), - int (**pverify_sig)(const unsigned char *dgst, - int dgst_len, - const ECDSA_SIG *sig, - EC_KEY *eckey)); - -# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) - -# ifndef __cplusplus -# if defined(__SUNPRO_C) -# if __SUNPRO_C >= 0x520 -# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# ifndef __cplusplus +# if defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif # endif # endif + # endif - -# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) - -# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) - -# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, \ - (void *)(plen)) - -# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)(p)) - -/* SM2 will skip the operation check so no need to pass operation here */ -# define EVP_PKEY_CTX_set1_id(ctx, id, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_SET1_ID, (int)id_len, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id(ctx, id) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID, 0, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id_len(ctx, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID_LEN, 0, (void*)(id_len)) - -# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_SET1_ID (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET1_ID (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_GET1_ID_LEN (EVP_PKEY_ALG_CTRL + 13) -/* KDF types */ -# define EVP_PKEY_ECDH_KDF_NONE 1 -# define EVP_PKEY_ECDH_KDF_X9_63 2 -/** The old name for EVP_PKEY_ECDH_KDF_X9_63 - * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, - * it is actually specified in ANSI X9.63. - * This identifier is retained for backwards compatibility - */ -# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 - - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdh.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdh.h index 681f3d5e..56bd4cc2 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdh.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdh.h @@ -1,7 +1,7 @@ /* * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdsa.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdsa.h index 681f3d5e..56bd4cc2 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdsa.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdsa.h @@ -1,7 +1,7 @@ /* * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecerr.h index 51738113..f15f91f6 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecerr.h @@ -1,206 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ECERR_H -# define HEADER_ECERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_ECERR_H +# define OPENSSL_ECERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_EC -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EC_strings(void); - -/* - * EC function codes. - */ -# define EC_F_BN_TO_FELEM 224 -# define EC_F_D2I_ECPARAMETERS 144 -# define EC_F_D2I_ECPKPARAMETERS 145 -# define EC_F_D2I_ECPRIVATEKEY 146 -# define EC_F_DO_EC_KEY_PRINT 221 -# define EC_F_ECDH_CMS_DECRYPT 238 -# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 -# define EC_F_ECDH_COMPUTE_KEY 246 -# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 -# define EC_F_ECDSA_DO_SIGN_EX 251 -# define EC_F_ECDSA_DO_VERIFY 252 -# define EC_F_ECDSA_SIGN_EX 254 -# define EC_F_ECDSA_SIGN_SETUP 248 -# define EC_F_ECDSA_SIG_NEW 265 -# define EC_F_ECDSA_VERIFY 253 -# define EC_F_ECD_ITEM_VERIFY 270 -# define EC_F_ECKEY_PARAM2TYPE 223 -# define EC_F_ECKEY_PARAM_DECODE 212 -# define EC_F_ECKEY_PRIV_DECODE 213 -# define EC_F_ECKEY_PRIV_ENCODE 214 -# define EC_F_ECKEY_PUB_DECODE 215 -# define EC_F_ECKEY_PUB_ENCODE 216 -# define EC_F_ECKEY_TYPE2PARAM 220 -# define EC_F_ECPARAMETERS_PRINT 147 -# define EC_F_ECPARAMETERS_PRINT_FP 148 -# define EC_F_ECPKPARAMETERS_PRINT 149 -# define EC_F_ECPKPARAMETERS_PRINT_FP 150 -# define EC_F_ECP_NISTZ256_GET_AFFINE 240 -# define EC_F_ECP_NISTZ256_INV_MOD_ORD 275 -# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 -# define EC_F_ECP_NISTZ256_POINTS_MUL 241 -# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 -# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 -# define EC_F_ECX_KEY_OP 266 -# define EC_F_ECX_PRIV_ENCODE 267 -# define EC_F_ECX_PUB_ENCODE 268 -# define EC_F_EC_ASN1_GROUP2CURVE 153 -# define EC_F_EC_ASN1_GROUP2FIELDID 154 -# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 -# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 296 -# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 -# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 -# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 285 -# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 288 -# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 -# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 -# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 289 -# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 -# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 -# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 -# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 -# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 -# define EC_F_EC_GFP_MONT_FIELD_INV 297 -# define EC_F_EC_GFP_MONT_FIELD_MUL 131 -# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 -# define EC_F_EC_GFP_MONT_FIELD_SQR 132 -# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 -# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 -# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 -# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 -# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 -# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 -# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 -# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 -# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 -# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 -# define EC_F_EC_GFP_NIST_FIELD_MUL 200 -# define EC_F_EC_GFP_NIST_FIELD_SQR 201 -# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 -# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 287 -# define EC_F_EC_GFP_SIMPLE_FIELD_INV 298 -# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 -# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 -# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 -# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 -# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 -# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 -# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 -# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 -# define EC_F_EC_GROUP_CHECK 170 -# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 -# define EC_F_EC_GROUP_COPY 106 -# define EC_F_EC_GROUP_GET_CURVE 291 -# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 -# define EC_F_EC_GROUP_GET_CURVE_GFP 130 -# define EC_F_EC_GROUP_GET_DEGREE 173 -# define EC_F_EC_GROUP_GET_ECPARAMETERS 261 -# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 -# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 -# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 -# define EC_F_EC_GROUP_NEW 108 -# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 -# define EC_F_EC_GROUP_NEW_FROM_DATA 175 -# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 263 -# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 -# define EC_F_EC_GROUP_SET_CURVE 292 -# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 -# define EC_F_EC_GROUP_SET_CURVE_GFP 109 -# define EC_F_EC_GROUP_SET_GENERATOR 111 -# define EC_F_EC_GROUP_SET_SEED 286 -# define EC_F_EC_KEY_CHECK_KEY 177 -# define EC_F_EC_KEY_COPY 178 -# define EC_F_EC_KEY_GENERATE_KEY 179 -# define EC_F_EC_KEY_NEW 182 -# define EC_F_EC_KEY_NEW_METHOD 245 -# define EC_F_EC_KEY_OCT2PRIV 255 -# define EC_F_EC_KEY_PRINT 180 -# define EC_F_EC_KEY_PRINT_FP 181 -# define EC_F_EC_KEY_PRIV2BUF 279 -# define EC_F_EC_KEY_PRIV2OCT 256 -# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 -# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 -# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 -# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 -# define EC_F_EC_PKEY_CHECK 273 -# define EC_F_EC_PKEY_PARAM_CHECK 274 -# define EC_F_EC_POINTS_MAKE_AFFINE 136 -# define EC_F_EC_POINTS_MUL 290 -# define EC_F_EC_POINT_ADD 112 -# define EC_F_EC_POINT_BN2POINT 280 -# define EC_F_EC_POINT_CMP 113 -# define EC_F_EC_POINT_COPY 114 -# define EC_F_EC_POINT_DBL 115 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 293 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 -# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 -# define EC_F_EC_POINT_INVERT 210 -# define EC_F_EC_POINT_IS_AT_INFINITY 118 -# define EC_F_EC_POINT_IS_ON_CURVE 119 -# define EC_F_EC_POINT_MAKE_AFFINE 120 -# define EC_F_EC_POINT_NEW 121 -# define EC_F_EC_POINT_OCT2POINT 122 -# define EC_F_EC_POINT_POINT2BUF 281 -# define EC_F_EC_POINT_POINT2OCT 123 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 294 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 295 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 -# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 -# define EC_F_EC_POINT_SET_TO_INFINITY 127 -# define EC_F_EC_PRE_COMP_NEW 196 -# define EC_F_EC_SCALAR_MUL_LADDER 284 -# define EC_F_EC_WNAF_MUL 187 -# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 -# define EC_F_I2D_ECPARAMETERS 190 -# define EC_F_I2D_ECPKPARAMETERS 191 -# define EC_F_I2D_ECPRIVATEKEY 192 -# define EC_F_I2O_ECPUBLICKEY 151 -# define EC_F_NISTP224_PRE_COMP_NEW 227 -# define EC_F_NISTP256_PRE_COMP_NEW 236 -# define EC_F_NISTP521_PRE_COMP_NEW 237 -# define EC_F_O2I_ECPUBLICKEY 152 -# define EC_F_OLD_EC_PRIV_DECODE 222 -# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 -# define EC_F_OSSL_ECDSA_SIGN_SIG 249 -# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 -# define EC_F_PKEY_ECD_CTRL 271 -# define EC_F_PKEY_ECD_DIGESTSIGN 272 -# define EC_F_PKEY_ECD_DIGESTSIGN25519 276 -# define EC_F_PKEY_ECD_DIGESTSIGN448 277 -# define EC_F_PKEY_ECX_DERIVE 269 -# define EC_F_PKEY_EC_CTRL 197 -# define EC_F_PKEY_EC_CTRL_STR 198 -# define EC_F_PKEY_EC_DERIVE 217 -# define EC_F_PKEY_EC_INIT 282 -# define EC_F_PKEY_EC_KDF_DERIVE 283 -# define EC_F_PKEY_EC_KEYGEN 199 -# define EC_F_PKEY_EC_PARAMGEN 219 -# define EC_F_PKEY_EC_SIGN 218 -# define EC_F_VALIDATE_ECX_DERIVE 278 /* * EC reason codes. @@ -212,17 +30,22 @@ int ERR_load_EC_strings(void); # define EC_R_CANNOT_INVERT 165 # define EC_R_COORDINATES_OUT_OF_RANGE 146 # define EC_R_CURVE_DOES_NOT_SUPPORT_ECDH 160 +# define EC_R_CURVE_DOES_NOT_SUPPORT_ECDSA 170 # define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 -# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 # define EC_R_DECODE_ERROR 142 # define EC_R_DISCRIMINANT_IS_ZERO 118 # define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 +# define EC_R_EXPLICIT_PARAMS_NOT_SUPPORTED 127 +# define EC_R_FAILED_MAKING_PUBLIC_KEY 166 # define EC_R_FIELD_TOO_LARGE 143 # define EC_R_GF2M_NOT_SUPPORTED 147 # define EC_R_GROUP2PKPARAMETERS_FAILURE 120 # define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 # define EC_R_INCOMPATIBLE_OBJECTS 101 +# define EC_R_INVALID_A 168 # define EC_R_INVALID_ARGUMENT 112 +# define EC_R_INVALID_B 169 +# define EC_R_INVALID_COFACTOR 171 # define EC_R_INVALID_COMPRESSED_POINT 110 # define EC_R_INVALID_COMPRESSION_BIT 109 # define EC_R_INVALID_CURVE 141 @@ -231,12 +54,17 @@ int ERR_load_EC_strings(void); # define EC_R_INVALID_ENCODING 102 # define EC_R_INVALID_FIELD 103 # define EC_R_INVALID_FORM 104 +# define EC_R_INVALID_GENERATOR 173 # define EC_R_INVALID_GROUP_ORDER 122 # define EC_R_INVALID_KEY 116 +# define EC_R_INVALID_LENGTH 117 +# define EC_R_INVALID_NAMED_GROUP_CONVERSION 174 # define EC_R_INVALID_OUTPUT_LENGTH 161 +# define EC_R_INVALID_P 172 # define EC_R_INVALID_PEER_KEY 133 # define EC_R_INVALID_PENTANOMIAL_BASIS 132 # define EC_R_INVALID_PRIVATE_KEY 123 +# define EC_R_INVALID_SEED 175 # define EC_R_INVALID_TRINOMIAL_BASIS 137 # define EC_R_KDF_PARAMETER_ERROR 148 # define EC_R_KEYS_NOT_SET 140 @@ -255,7 +83,6 @@ int ERR_load_EC_strings(void); # define EC_R_OPERATION_NOT_SUPPORTED 152 # define EC_R_PASSED_NULL_PARAMETER 134 # define EC_R_PEER_KEY_ERROR 149 -# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 # define EC_R_POINT_ARITHMETIC_FAILURE 155 # define EC_R_POINT_AT_INFINITY 106 # define EC_R_POINT_COORDINATES_BLIND_FAILURE 163 @@ -263,6 +90,7 @@ int ERR_load_EC_strings(void); # define EC_R_RANDOM_NUMBER_GENERATION_FAILED 158 # define EC_R_SHARED_INFO_ERROR 150 # define EC_R_SLOT_FULL 108 +# define EC_R_TOO_MANY_RETRIES 176 # define EC_R_UNDEFINED_GENERATOR 113 # define EC_R_UNDEFINED_ORDER 128 # define EC_R_UNKNOWN_COFACTOR 164 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encoder.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encoder.h new file mode 100644 index 00000000..c37a6f16 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encoder.h @@ -0,0 +1,124 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ENCODER_H +# define OPENSSL_ENCODER_H +# pragma once + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_ENCODER *OSSL_ENCODER_fetch(OSSL_LIB_CTX *libctx, const char *name, + const char *properties); +int OSSL_ENCODER_up_ref(OSSL_ENCODER *encoder); +void OSSL_ENCODER_free(OSSL_ENCODER *encoder); + +const OSSL_PROVIDER *OSSL_ENCODER_get0_provider(const OSSL_ENCODER *encoder); +const char *OSSL_ENCODER_get0_properties(const OSSL_ENCODER *encoder); +const char *OSSL_ENCODER_get0_name(const OSSL_ENCODER *kdf); +const char *OSSL_ENCODER_get0_description(const OSSL_ENCODER *kdf); +int OSSL_ENCODER_is_a(const OSSL_ENCODER *encoder, const char *name); + +void OSSL_ENCODER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_ENCODER *encoder, void *arg), + void *arg); +int OSSL_ENCODER_names_do_all(const OSSL_ENCODER *encoder, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *OSSL_ENCODER_gettable_params(OSSL_ENCODER *encoder); +int OSSL_ENCODER_get_params(OSSL_ENCODER *encoder, OSSL_PARAM params[]); + +const OSSL_PARAM *OSSL_ENCODER_settable_ctx_params(OSSL_ENCODER *encoder); +OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new(void); +int OSSL_ENCODER_CTX_set_params(OSSL_ENCODER_CTX *ctx, + const OSSL_PARAM params[]); +void OSSL_ENCODER_CTX_free(OSSL_ENCODER_CTX *ctx); + +/* Utilities that help set specific parameters */ +int OSSL_ENCODER_CTX_set_passphrase(OSSL_ENCODER_CTX *ctx, + const unsigned char *kstr, size_t klen); +int OSSL_ENCODER_CTX_set_pem_password_cb(OSSL_ENCODER_CTX *ctx, + pem_password_cb *cb, void *cbarg); +int OSSL_ENCODER_CTX_set_passphrase_cb(OSSL_ENCODER_CTX *ctx, + OSSL_PASSPHRASE_CALLBACK *cb, + void *cbarg); +int OSSL_ENCODER_CTX_set_passphrase_ui(OSSL_ENCODER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); +int OSSL_ENCODER_CTX_set_cipher(OSSL_ENCODER_CTX *ctx, + const char *cipher_name, + const char *propquery); +int OSSL_ENCODER_CTX_set_selection(OSSL_ENCODER_CTX *ctx, int selection); +int OSSL_ENCODER_CTX_set_output_type(OSSL_ENCODER_CTX *ctx, + const char *output_type); +int OSSL_ENCODER_CTX_set_output_structure(OSSL_ENCODER_CTX *ctx, + const char *output_structure); + +/* Utilities to add encoders */ +int OSSL_ENCODER_CTX_add_encoder(OSSL_ENCODER_CTX *ctx, OSSL_ENCODER *encoder); +int OSSL_ENCODER_CTX_add_extra(OSSL_ENCODER_CTX *ctx, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_ENCODER_CTX_get_num_encoders(OSSL_ENCODER_CTX *ctx); + +typedef struct ossl_encoder_instance_st OSSL_ENCODER_INSTANCE; +OSSL_ENCODER * +OSSL_ENCODER_INSTANCE_get_encoder(OSSL_ENCODER_INSTANCE *encoder_inst); +void * +OSSL_ENCODER_INSTANCE_get_encoder_ctx(OSSL_ENCODER_INSTANCE *encoder_inst); +const char * +OSSL_ENCODER_INSTANCE_get_output_type(OSSL_ENCODER_INSTANCE *encoder_inst); +const char * +OSSL_ENCODER_INSTANCE_get_output_structure(OSSL_ENCODER_INSTANCE *encoder_inst); + +typedef const void *OSSL_ENCODER_CONSTRUCT(OSSL_ENCODER_INSTANCE *encoder_inst, + void *construct_data); +typedef void OSSL_ENCODER_CLEANUP(void *construct_data); + +int OSSL_ENCODER_CTX_set_construct(OSSL_ENCODER_CTX *ctx, + OSSL_ENCODER_CONSTRUCT *construct); +int OSSL_ENCODER_CTX_set_construct_data(OSSL_ENCODER_CTX *ctx, + void *construct_data); +int OSSL_ENCODER_CTX_set_cleanup(OSSL_ENCODER_CTX *ctx, + OSSL_ENCODER_CLEANUP *cleanup); + +/* Utilities to output the object to encode */ +int OSSL_ENCODER_to_bio(OSSL_ENCODER_CTX *ctx, BIO *out); +#ifndef OPENSSL_NO_STDIO +int OSSL_ENCODER_to_fp(OSSL_ENCODER_CTX *ctx, FILE *fp); +#endif +int OSSL_ENCODER_to_data(OSSL_ENCODER_CTX *ctx, unsigned char **pdata, + size_t *pdata_len); + +/* + * Create the OSSL_ENCODER_CTX with an associated type. This will perform + * an implicit OSSL_ENCODER_fetch(), suitable for the object of that type. + * This is more useful than calling OSSL_ENCODER_CTX_new(). + */ +OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new_for_pkey(const EVP_PKEY *pkey, + int selection, + const char *output_type, + const char *output_struct, + const char *propquery); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encodererr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encodererr.h new file mode 100644 index 00000000..5e318b14 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encodererr.h @@ -0,0 +1,28 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ENCODERERR_H +# define OPENSSL_ENCODERERR_H +# pragma once + +# include +# include +# include + + + +/* + * OSSL_ENCODER reason codes. + */ +# define OSSL_ENCODER_R_ENCODER_NOT_FOUND 101 +# define OSSL_ENCODER_R_INCORRECT_PROPERTY_QUERY 100 +# define OSSL_ENCODER_R_MISSING_GET_PARAMS 102 + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engine.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engine.h index d707eaeb..2fbc82c3 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engine.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engine.h @@ -2,52 +2,58 @@ * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENGINE_H -# define HEADER_ENGINE_H +#ifndef OPENSSL_ENGINE_H +# define OPENSSL_ENGINE_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ENGINE_H +# endif # include # ifndef OPENSSL_NO_ENGINE -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# include -# include -# include -# include -# include -# include -# include -# endif -# include -# include -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# include +# include +# include +# include +# include +# endif +# include +# include +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif /* * These flags are used to control combinations of algorithm (methods) by * bitwise "OR"ing. */ -# define ENGINE_METHOD_RSA (unsigned int)0x0001 -# define ENGINE_METHOD_DSA (unsigned int)0x0002 -# define ENGINE_METHOD_DH (unsigned int)0x0004 -# define ENGINE_METHOD_RAND (unsigned int)0x0008 -# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 -# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 -# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 -# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 -# define ENGINE_METHOD_EC (unsigned int)0x0800 +# define ENGINE_METHOD_RSA (unsigned int)0x0001 +# define ENGINE_METHOD_DSA (unsigned int)0x0002 +# define ENGINE_METHOD_DH (unsigned int)0x0004 +# define ENGINE_METHOD_RAND (unsigned int)0x0008 +# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 +# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 +# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 +# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 +# define ENGINE_METHOD_EC (unsigned int)0x0800 /* Obvious all-or-nothing cases. */ -# define ENGINE_METHOD_ALL (unsigned int)0xFFFF -# define ENGINE_METHOD_NONE (unsigned int)0x0000 +# define ENGINE_METHOD_ALL (unsigned int)0xFFFF +# define ENGINE_METHOD_NONE (unsigned int)0x0000 /* * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used @@ -55,7 +61,7 @@ extern "C" { * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to * initialise registered ENGINEs if they are not already initialised. */ -# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 +# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 /* ENGINE flags that can be set by ENGINE_set_flags(). */ /* Not used */ @@ -67,7 +73,7 @@ extern "C" { * these control commands on behalf of the ENGINE using their "cmd_defns" * data. */ -# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 +# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 /* * This flag is for ENGINEs who return new duplicate structures when found @@ -79,7 +85,7 @@ extern "C" { * ENGINE_by_id() just increments the existing ENGINE's structural reference * count. */ -# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 +# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 /* * This flag if for an ENGINE that does not want its methods registered as @@ -87,7 +93,7 @@ extern "C" { * usable as default methods. */ -# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 +# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 /* * ENGINEs can support their own command types, and these flags are used in @@ -102,23 +108,23 @@ extern "C" { */ /* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 +# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 /* * accepts string input (cast from 'void*' to 'const char *', 4th parameter * to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 +# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 /* * Indicates that the control command takes *no* input. Ie. the control * command is unparameterised. */ -# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 +# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 /* * Indicates that the control command is internal. This control command won't * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() * function. */ -# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 +# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 /* * NB: These 3 control commands are deprecated and should not be used. @@ -137,21 +143,21 @@ extern "C" { * sense to some engines. In such a case, they do nothing but return the * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. */ -# define ENGINE_CTRL_SET_LOGSTREAM 1 -# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 -# define ENGINE_CTRL_HUP 3/* Close and reinitialise +# define ENGINE_CTRL_SET_LOGSTREAM 1 +# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 +# define ENGINE_CTRL_HUP 3/* Close and reinitialise * any handles/connections * etc. */ -# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ -# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used +# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ +# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used * when calling the password * callback and the user * interface */ -# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, +# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, * given a string that * represents a file name * or so */ -# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given +# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given * section in the already * loaded configuration */ @@ -175,22 +181,22 @@ extern "C" { * worth checking this first if the caller is trying to "discover" the * engine's capabilities and doesn't want errors generated unnecessarily. */ -# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 +# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 /* * Returns a positive command number for the first command supported by the * engine. Returns zero if no ctrl commands are supported. */ -# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 +# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 /* * The 'long' argument specifies a command implemented by the engine, and the * return value is the next command supported, or zero if there are no more. */ -# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 +# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 /* * The 'void*' argument is a command name (cast from 'const char *'), and the * return value is the command that corresponds to it. */ -# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 +# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 /* * The next two allow a command to be converted into its corresponding string * form. In each case, the 'long' argument supplies the command. In the @@ -199,23 +205,23 @@ extern "C" { * string buffer large enough, and it will be populated with the name of the * command (WITH a trailing EOL). */ -# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 -# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 +# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 +# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 /* The next two are similar but give a "short description" of a command. */ -# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 -# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 +# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 +# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 /* * With this command, the return value is the OR'd combination of * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given * engine-specific ctrl command expects. */ -# define ENGINE_CTRL_GET_CMD_FLAGS 18 +# define ENGINE_CTRL_GET_CMD_FLAGS 18 /* * ENGINE implementations should start the numbering of their own control * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). */ -# define ENGINE_CMD_BASE 200 +# define ENGINE_CMD_BASE 200 /* * NB: These 2 nCipher "chil" control commands are deprecated, and their @@ -226,17 +232,17 @@ extern "C" { */ /* Flags specific to the nCipher "chil" engine */ -# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 - /* - * Depending on the value of the (long)i argument, this sets or - * unsets the SimpleForkCheck flag in the CHIL API to enable or - * disable checking and workarounds for applications that fork(). - */ -# define ENGINE_CTRL_CHIL_NO_LOCKING 101 - /* - * This prevents the initialisation function from providing mutex - * callbacks to the nCipher library. - */ +# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 + /* + * Depending on the value of the (long)i argument, this sets or + * unsets the SimpleForkCheck flag in the CHIL API to enable or + * disable checking and workarounds for applications that fork(). + */ +# define ENGINE_CTRL_CHIL_NO_LOCKING 101 + /* + * This prevents the initialisation function from providing mutex + * callbacks to the nCipher library. + */ /* * If an ENGINE supports its own specific control commands and wishes the @@ -308,44 +314,58 @@ typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, */ /* Get the first/last "ENGINE" type available. */ -ENGINE *ENGINE_get_first(void); -ENGINE *ENGINE_get_last(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_first(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_last(void); +# endif /* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ -ENGINE *ENGINE_get_next(ENGINE *e); -ENGINE *ENGINE_get_prev(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_next(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_prev(ENGINE *e); +# endif /* Add another "ENGINE" type into the array. */ -int ENGINE_add(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_add(ENGINE *e); +# endif /* Remove an existing "ENGINE" type from the array. */ -int ENGINE_remove(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_remove(ENGINE *e); +# endif /* Retrieve an engine from the list by its unique "id" value. */ -ENGINE *ENGINE_by_id(const char *id); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_by_id(const char *id); +# endif -#if OPENSSL_API_COMPAT < 0x10100000L -# define ENGINE_load_openssl() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) -# define ENGINE_load_dynamic() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) -# ifndef OPENSSL_NO_STATIC_ENGINE -# define ENGINE_load_padlock() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) -# define ENGINE_load_capi() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) -# define ENGINE_load_afalg() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) -# endif -# define ENGINE_load_cryptodev() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) -# define ENGINE_load_rdrand() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) -#endif -void ENGINE_load_builtin_engines(void); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define ENGINE_load_openssl() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) +# define ENGINE_load_dynamic() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) +# ifndef OPENSSL_NO_STATIC_ENGINE +# define ENGINE_load_padlock() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) +# define ENGINE_load_capi() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) +# define ENGINE_load_afalg() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) +# endif +# define ENGINE_load_cryptodev() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) +# define ENGINE_load_rdrand() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ENGINE_load_builtin_engines(void); +# endif /* * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation * "registry" handling. */ -unsigned int ENGINE_get_table_flags(void); -void ENGINE_set_table_flags(unsigned int flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned int ENGINE_get_table_flags(void); +OSSL_DEPRECATEDIN_3_0 void ENGINE_set_table_flags(unsigned int flags); +# endif /*- Manage registration of ENGINEs per "table". For each type, there are 3 * functions; @@ -354,42 +374,35 @@ void ENGINE_set_table_flags(unsigned int flags); * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list * Cleanup is automatically registered from each table when required. */ - -int ENGINE_register_RSA(ENGINE *e); -void ENGINE_unregister_RSA(ENGINE *e); -void ENGINE_register_all_RSA(void); - -int ENGINE_register_DSA(ENGINE *e); -void ENGINE_unregister_DSA(ENGINE *e); -void ENGINE_register_all_DSA(void); - -int ENGINE_register_EC(ENGINE *e); -void ENGINE_unregister_EC(ENGINE *e); -void ENGINE_register_all_EC(void); - -int ENGINE_register_DH(ENGINE *e); -void ENGINE_unregister_DH(ENGINE *e); -void ENGINE_register_all_DH(void); - -int ENGINE_register_RAND(ENGINE *e); -void ENGINE_unregister_RAND(ENGINE *e); -void ENGINE_register_all_RAND(void); - -int ENGINE_register_ciphers(ENGINE *e); -void ENGINE_unregister_ciphers(ENGINE *e); -void ENGINE_register_all_ciphers(void); - -int ENGINE_register_digests(ENGINE *e); -void ENGINE_unregister_digests(ENGINE *e); -void ENGINE_register_all_digests(void); - -int ENGINE_register_pkey_meths(ENGINE *e); -void ENGINE_unregister_pkey_meths(ENGINE *e); -void ENGINE_register_all_pkey_meths(void); - -int ENGINE_register_pkey_asn1_meths(ENGINE *e); -void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); -void ENGINE_register_all_pkey_asn1_meths(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_RSA(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_DSA(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_EC(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_DH(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_RAND(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_ciphers(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_digests(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_pkey_meths(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_pkey_asn1_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_pkey_asn1_meths(void); +# endif /* * These functions register all support from the above categories. Note, use @@ -397,8 +410,10 @@ void ENGINE_register_all_pkey_asn1_meths(void); * may not need. If you only need a subset of functionality, consider using * more selective initialisation. */ -int ENGINE_register_complete(ENGINE *e); -int ENGINE_register_all_complete(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_complete(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_all_complete(void); +# endif /* * Send parameterised control commands to the engine. The possibilities to @@ -410,7 +425,10 @@ int ENGINE_register_all_complete(void); * commands that require an operational ENGINE, and only use functional * references in such situations. */ -int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, + void (*f) (void)); +# endif /* * This function tests if an ENGINE-specific command is usable as a @@ -418,7 +436,9 @@ int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). */ -int ENGINE_cmd_is_executable(ENGINE *e, int cmd); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_cmd_is_executable(ENGINE *e, int cmd); +# endif /* * This function works like ENGINE_ctrl() with the exception of taking a @@ -426,8 +446,11 @@ int ENGINE_cmd_is_executable(ENGINE *e, int cmd); * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation * on how to use the cmd_name and cmd_optional. */ -int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, - long i, void *p, void (*f) (void), int cmd_optional); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, + long i, void *p, void (*f) (void), + int cmd_optional); +# endif /* * This function passes a command-name and argument to an ENGINE. The @@ -451,8 +474,11 @@ int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, * applications can work consistently with the same configuration for the * same ENGINE-enabled devices, across applications. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, int cmd_optional); +# endif /* * These functions are useful for manufacturing new ENGINE structures. They @@ -462,45 +488,59 @@ int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, * These are also here so that the ENGINE structure doesn't have to be * exposed and break binary compatibility! */ -ENGINE *ENGINE_new(void); -int ENGINE_free(ENGINE *e); -int ENGINE_up_ref(ENGINE *e); -int ENGINE_set_id(ENGINE *e, const char *id); -int ENGINE_set_name(ENGINE *e, const char *name); -int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); -int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); -int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); -int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); -int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); -int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_new(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_free(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_up_ref(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_id(ENGINE *e, const char *id); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_name(ENGINE *e, const char *name); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_destroy_function(ENGINE *e,ENGINE_GEN_INT_FUNC_PTR destroy_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); -int ENGINE_set_load_privkey_function(ENGINE *e, - ENGINE_LOAD_KEY_PTR loadpriv_f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_load_privkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpriv_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, - ENGINE_SSL_CLIENT_CERT_PTR - loadssl_f); + ENGINE_SSL_CLIENT_CERT_PTR loadssl_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); -int ENGINE_set_flags(ENGINE *e, int flags); -int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_flags(ENGINE *e, int flags); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_cmd_defns(ENGINE *e, + const ENGINE_CMD_DEFN *defns); +# endif /* These functions allow control over any per-structure ENGINE data. */ -#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ +# define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) -int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); -void *ENGINE_get_ex_data(const ENGINE *e, int idx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *ENGINE_get_ex_data(const ENGINE *e, int idx); +# endif -#if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * This function previously cleaned up anything that needs it. Auto-deinit will * now take care of it so it is no longer required to call this function. */ -# define ENGINE_cleanup() while(0) continue -#endif +# define ENGINE_cleanup() while(0) continue +# endif /* * These return values from within the ENGINE structure. These can be useful @@ -508,37 +548,55 @@ void *ENGINE_get_ex_data(const ENGINE *e, int idx); * which you obtained. Using the result for functional purposes if you only * obtained a structural reference may be problematic! */ -const char *ENGINE_get_id(const ENGINE *e); -const char *ENGINE_get_name(const ENGINE *e); -const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); -const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); -const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); -const DH_METHOD *ENGINE_get_DH(const ENGINE *e); -const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ENGINE_get_id(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const char *ENGINE_get_name(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); -ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE - *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, const char *str, int len); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, - const char *str, - int len); + const char *str, int len); +OSSL_DEPRECATEDIN_3_0 const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); -int ENGINE_get_flags(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_get_flags(const ENGINE *e); +# endif /* * FUNCTIONAL functions. These functions deal with ENGINE structures that @@ -554,31 +612,40 @@ int ENGINE_get_flags(const ENGINE *e); */ /* - * Initialise a engine type for use (or up its reference count if it's + * Initialise an engine type for use (or up its reference count if it's * already in use). This will fail if the engine is not currently operational * and cannot initialise. */ -int ENGINE_init(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_init(ENGINE *e); +# endif /* - * Free a functional reference to a engine type. This does not require a + * Free a functional reference to an engine type. This does not require a * corresponding call to ENGINE_free as it also releases a structural * reference. */ -int ENGINE_finish(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_finish(ENGINE *e); +# endif /* * The following functions handle keys that are stored in some secondary * location, handled by the engine. The storage may be on a card or * whatever. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data); +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data); -int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, - STACK_OF(X509_NAME) *ca_dn, X509 **pcert, - EVP_PKEY **ppkey, STACK_OF(X509) **pother, +OSSL_DEPRECATEDIN_3_0 +int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, STACK_OF(X509_NAME) *ca_dn, + X509 **pcert, EVP_PKEY **ppkey, + STACK_OF(X509) **pother, UI_METHOD *ui_method, void *callback_data); +# endif /* * This returns a pointer for the current ENGINE structure that is (by @@ -586,20 +653,26 @@ int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, * incremented reference, so it should be free'd (ENGINE_finish) before it is * discarded. */ -ENGINE *ENGINE_get_default_RSA(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RSA(void); +# endif /* Same for the other "methods" */ -ENGINE *ENGINE_get_default_DSA(void); -ENGINE *ENGINE_get_default_EC(void); -ENGINE *ENGINE_get_default_DH(void); -ENGINE *ENGINE_get_default_RAND(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_DSA(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_EC(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_DH(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RAND(void); +# endif /* * These functions can be used to get a functional reference to perform * ciphering or digesting corresponding to "nid". */ -ENGINE *ENGINE_get_cipher_engine(int nid); -ENGINE *ENGINE_get_digest_engine(int nid); -ENGINE *ENGINE_get_pkey_meth_engine(int nid); -ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_cipher_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_digest_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_pkey_meth_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); +# endif /* * This sets a new default ENGINE structure for performing RSA operations. If @@ -607,17 +680,22 @@ ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); * its reference count up'd so the caller should still free their own * reference 'e'. */ -int ENGINE_set_default_RSA(ENGINE *e); -int ENGINE_set_default_string(ENGINE *e, const char *def_list); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_string(ENGINE *e, + const char *def_list); +# endif /* Same for the other "methods" */ -int ENGINE_set_default_DSA(ENGINE *e); -int ENGINE_set_default_EC(ENGINE *e); -int ENGINE_set_default_DH(ENGINE *e); -int ENGINE_set_default_RAND(ENGINE *e); -int ENGINE_set_default_ciphers(ENGINE *e); -int ENGINE_set_default_digests(ENGINE *e); -int ENGINE_set_default_pkey_meths(ENGINE *e); -int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); +# endif /* * The combination "set" - the flags are bitwise "OR"d from the @@ -626,9 +704,10 @@ int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); * application requires only specific functionality, consider using more * selective functions. */ -int ENGINE_set_default(ENGINE *e, unsigned int flags); - -void ENGINE_add_conf_module(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default(ENGINE *e, unsigned int flags); +OSSL_DEPRECATEDIN_3_0 void ENGINE_add_conf_module(void); +# endif /* Deprecated functions ... */ /* int ENGINE_clear_defaults(void); */ @@ -638,12 +717,12 @@ void ENGINE_add_conf_module(void); /**************************/ /* Binary/behaviour compatibility levels */ -# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 +# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 /* * Binary versions older than this are too old for us (whether we're a loader * or a loadee) */ -# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 +# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 /* * When compiling an ENGINE entirely as an external shared library, loadable @@ -687,7 +766,7 @@ typedef struct st_dynamic_fns { * IMPLEMENT_DYNAMIC_CHECK_FN(). */ typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); -# define IMPLEMENT_DYNAMIC_CHECK_FN() \ +# define IMPLEMENT_DYNAMIC_CHECK_FN() \ OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ if (v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ @@ -713,7 +792,7 @@ typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); */ typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, const dynamic_fns *fns); -# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ +# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ OPENSSL_EXPORT \ int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ OPENSSL_EXPORT \ @@ -740,13 +819,15 @@ typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, */ void *ENGINE_get_static_state(void); -# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) -DEPRECATEDIN_1_1_0(void ENGINE_setup_bsd_cryptodev(void)) -# endif +# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ENGINE_setup_bsd_cryptodev(void); +# endif +# endif # ifdef __cplusplus } # endif -# endif -#endif +# endif /* OPENSSL_NO_ENGINE */ +#endif /* OPENSSL_ENGINE_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engineerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engineerr.h index 05e84bd2..d439b682 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engineerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engineerr.h @@ -1,72 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENGINEERR_H -# define HEADER_ENGINEERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_ENGINEERR_H +# define OPENSSL_ENGINEERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_ENGINE -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ENGINE_strings(void); - -/* - * ENGINE function codes. - */ -# define ENGINE_F_DIGEST_UPDATE 198 -# define ENGINE_F_DYNAMIC_CTRL 180 -# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 -# define ENGINE_F_DYNAMIC_LOAD 182 -# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 -# define ENGINE_F_ENGINE_ADD 105 -# define ENGINE_F_ENGINE_BY_ID 106 -# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 -# define ENGINE_F_ENGINE_CTRL 142 -# define ENGINE_F_ENGINE_CTRL_CMD 178 -# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 -# define ENGINE_F_ENGINE_FINISH 107 -# define ENGINE_F_ENGINE_GET_CIPHER 185 -# define ENGINE_F_ENGINE_GET_DIGEST 186 -# define ENGINE_F_ENGINE_GET_FIRST 195 -# define ENGINE_F_ENGINE_GET_LAST 196 -# define ENGINE_F_ENGINE_GET_NEXT 115 -# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 -# define ENGINE_F_ENGINE_GET_PKEY_METH 192 -# define ENGINE_F_ENGINE_GET_PREV 116 -# define ENGINE_F_ENGINE_INIT 119 -# define ENGINE_F_ENGINE_LIST_ADD 120 -# define ENGINE_F_ENGINE_LIST_REMOVE 121 -# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 -# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 -# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 -# define ENGINE_F_ENGINE_NEW 122 -# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 197 -# define ENGINE_F_ENGINE_REMOVE 123 -# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 -# define ENGINE_F_ENGINE_SET_ID 129 -# define ENGINE_F_ENGINE_SET_NAME 130 -# define ENGINE_F_ENGINE_TABLE_REGISTER 184 -# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 -# define ENGINE_F_ENGINE_UP_REF 190 -# define ENGINE_F_INT_CLEANUP_ITEM 199 -# define ENGINE_F_INT_CTRL_HELPER 172 -# define ENGINE_F_INT_ENGINE_CONFIGURE 188 -# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 -# define ENGINE_F_OSSL_HMAC_INIT 200 /* * ENGINE reason codes. diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h index b49f8812..2abf2483 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h @@ -1,14 +1,22 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ERR_H -# define HEADER_ERR_H + + +#ifndef OPENSSL_ERR_H +# define OPENSSL_ERR_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ERR_H +# endif # include @@ -17,38 +25,47 @@ # include # endif -# include +# include # include # include +# include #ifdef __cplusplus extern "C" { #endif -# ifndef OPENSSL_NO_ERR -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) -# else -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_FILENAMES +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,fn,ln) +# else +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,NULL,0) +# endif # endif +# include # include # define ERR_TXT_MALLOCED 0x01 # define ERR_TXT_STRING 0x02 -# define ERR_FLAG_MARK 0x01 -# define ERR_FLAG_CLEAR 0x02 +# if !defined(OPENSSL_NO_DEPRECATED_3_0) || defined(OSSL_FORCE_ERR_STATE) +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 -# define ERR_NUM_ERRORS 16 -typedef struct err_state_st { +# define ERR_NUM_ERRORS 16 +struct err_state_st { int err_flags[ERR_NUM_ERRORS]; + int err_marks[ERR_NUM_ERRORS]; unsigned long err_buffer[ERR_NUM_ERRORS]; char *err_data[ERR_NUM_ERRORS]; + size_t err_data_size[ERR_NUM_ERRORS]; int err_data_flags[ERR_NUM_ERRORS]; - const char *err_file[ERR_NUM_ERRORS]; + char *err_file[ERR_NUM_ERRORS]; int err_line[ERR_NUM_ERRORS]; + char *err_func[ERR_NUM_ERRORS]; int top, bottom; -} ERR_STATE; +}; +# endif /* library */ # define ERR_LIB_NONE 1 @@ -95,171 +112,384 @@ typedef struct err_state_st { # define ERR_LIB_ASYNC 51 # define ERR_LIB_KDF 52 # define ERR_LIB_SM2 53 +# define ERR_LIB_ESS 54 +# define ERR_LIB_PROP 55 +# define ERR_LIB_CRMF 56 +# define ERR_LIB_PROV 57 +# define ERR_LIB_CMP 58 +# define ERR_LIB_OSSL_ENCODER 59 +# define ERR_LIB_OSSL_DECODER 60 +# define ERR_LIB_HTTP 61 # define ERR_LIB_USER 128 -# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OSSL_STOREerr(f,r) ERR_PUT_error(ERR_LIB_OSSL_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SM2err(f,r) ERR_PUT_error(ERR_LIB_SM2,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define ASN1err(f, r) ERR_raise_data(ERR_LIB_ASN1, (r), NULL) +# define ASYNCerr(f, r) ERR_raise_data(ERR_LIB_ASYNC, (r), NULL) +# define BIOerr(f, r) ERR_raise_data(ERR_LIB_BIO, (r), NULL) +# define BNerr(f, r) ERR_raise_data(ERR_LIB_BN, (r), NULL) +# define BUFerr(f, r) ERR_raise_data(ERR_LIB_BUF, (r), NULL) +# define CMPerr(f, r) ERR_raise_data(ERR_LIB_CMP, (r), NULL) +# define CMSerr(f, r) ERR_raise_data(ERR_LIB_CMS, (r), NULL) +# define COMPerr(f, r) ERR_raise_data(ERR_LIB_COMP, (r), NULL) +# define CONFerr(f, r) ERR_raise_data(ERR_LIB_CONF, (r), NULL) +# define CRMFerr(f, r) ERR_raise_data(ERR_LIB_CRMF, (r), NULL) +# define CRYPTOerr(f, r) ERR_raise_data(ERR_LIB_CRYPTO, (r), NULL) +# define CTerr(f, r) ERR_raise_data(ERR_LIB_CT, (r), NULL) +# define DHerr(f, r) ERR_raise_data(ERR_LIB_DH, (r), NULL) +# define DSAerr(f, r) ERR_raise_data(ERR_LIB_DSA, (r), NULL) +# define DSOerr(f, r) ERR_raise_data(ERR_LIB_DSO, (r), NULL) +# define ECDHerr(f, r) ERR_raise_data(ERR_LIB_ECDH, (r), NULL) +# define ECDSAerr(f, r) ERR_raise_data(ERR_LIB_ECDSA, (r), NULL) +# define ECerr(f, r) ERR_raise_data(ERR_LIB_EC, (r), NULL) +# define ENGINEerr(f, r) ERR_raise_data(ERR_LIB_ENGINE, (r), NULL) +# define ESSerr(f, r) ERR_raise_data(ERR_LIB_ESS, (r), NULL) +# define EVPerr(f, r) ERR_raise_data(ERR_LIB_EVP, (r), NULL) +# define FIPSerr(f, r) ERR_raise_data(ERR_LIB_FIPS, (r), NULL) +# define HMACerr(f, r) ERR_raise_data(ERR_LIB_HMAC, (r), NULL) +# define HTTPerr(f, r) ERR_raise_data(ERR_LIB_HTTP, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define OBJerr(f, r) ERR_raise_data(ERR_LIB_OBJ, (r), NULL) +# define OCSPerr(f, r) ERR_raise_data(ERR_LIB_OCSP, (r), NULL) +# define OSSL_STOREerr(f, r) ERR_raise_data(ERR_LIB_OSSL_STORE, (r), NULL) +# define PEMerr(f, r) ERR_raise_data(ERR_LIB_PEM, (r), NULL) +# define PKCS12err(f, r) ERR_raise_data(ERR_LIB_PKCS12, (r), NULL) +# define PKCS7err(f, r) ERR_raise_data(ERR_LIB_PKCS7, (r), NULL) +# define PROPerr(f, r) ERR_raise_data(ERR_LIB_PROP, (r), NULL) +# define PROVerr(f, r) ERR_raise_data(ERR_LIB_PROV, (r), NULL) +# define RANDerr(f, r) ERR_raise_data(ERR_LIB_RAND, (r), NULL) +# define RSAerr(f, r) ERR_raise_data(ERR_LIB_RSA, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define SM2err(f, r) ERR_raise_data(ERR_LIB_SM2, (r), NULL) +# define SSLerr(f, r) ERR_raise_data(ERR_LIB_SSL, (r), NULL) +# define SYSerr(f, r) ERR_raise_data(ERR_LIB_SYS, (r), NULL) +# define TSerr(f, r) ERR_raise_data(ERR_LIB_TS, (r), NULL) +# define UIerr(f, r) ERR_raise_data(ERR_LIB_UI, (r), NULL) +# define X509V3err(f, r) ERR_raise_data(ERR_LIB_X509V3, (r), NULL) +# define X509err(f, r) ERR_raise_data(ERR_LIB_X509, (r), NULL) +# endif -# define ERR_PACK(l,f,r) ( \ - (((unsigned int)(l) & 0x0FF) << 24L) | \ - (((unsigned int)(f) & 0xFFF) << 12L) | \ - (((unsigned int)(r) & 0xFFF) ) ) -# define ERR_GET_LIB(l) (int)(((l) >> 24L) & 0x0FFL) -# define ERR_GET_FUNC(l) (int)(((l) >> 12L) & 0xFFFL) -# define ERR_GET_REASON(l) (int)( (l) & 0xFFFL) -# define ERR_FATAL_ERROR(l) (int)( (l) & ERR_R_FATAL) +/*- + * The error code packs differently depending on if it records a system + * error or an OpenSSL error. + * + * A system error packs like this (we follow POSIX and only allow positive + * numbers that fit in an |int|): + * + * +-+-------------------------------------------------------------+ + * |1| system error number | + * +-+-------------------------------------------------------------+ + * + * An OpenSSL error packs like this: + * + * <---------------------------- 32 bits --------------------------> + * <--- 8 bits ---><------------------ 23 bits -----------------> + * +-+---------------+---------------------------------------------+ + * |0| library | reason | + * +-+---------------+---------------------------------------------+ + * + * A few of the reason bits are reserved as flags with special meaning: + * + * <5 bits-<>--------- 19 bits -----------------> + * +-------+-+-----------------------------------+ + * | rflags| | reason | + * +-------+-+-----------------------------------+ + * ^ + * | + * ERR_RFLAG_FATAL = ERR_R_FATAL + * + * The reason flags are part of the overall reason code for practical + * reasons, as they provide an easy way to place different types of + * reason codes in different numeric ranges. + * + * The currently known reason flags are: + * + * ERR_RFLAG_FATAL Flags that the reason code is considered fatal. + * For backward compatibility reasons, this flag + * is also the code for ERR_R_FATAL (that reason + * code served the dual purpose of flag and reason + * code in one in pre-3.0 OpenSSL). + * ERR_RFLAG_COMMON Flags that the reason code is common to all + * libraries. All ERR_R_ macros must use this flag, + * and no other _R_ macro is allowed to use it. + */ -/* OS functions */ -# define SYS_F_FOPEN 1 -# define SYS_F_CONNECT 2 -# define SYS_F_GETSERVBYNAME 3 -# define SYS_F_SOCKET 4 -# define SYS_F_IOCTLSOCKET 5 -# define SYS_F_BIND 6 -# define SYS_F_LISTEN 7 -# define SYS_F_ACCEPT 8 -# define SYS_F_WSASTARTUP 9/* Winsock stuff */ -# define SYS_F_OPENDIR 10 -# define SYS_F_FREAD 11 -# define SYS_F_GETADDRINFO 12 -# define SYS_F_GETNAMEINFO 13 -# define SYS_F_SETSOCKOPT 14 -# define SYS_F_GETSOCKOPT 15 -# define SYS_F_GETSOCKNAME 16 -# define SYS_F_GETHOSTBYNAME 17 -# define SYS_F_FFLUSH 18 -# define SYS_F_OPEN 19 -# define SYS_F_CLOSE 20 -# define SYS_F_IOCTL 21 -# define SYS_F_STAT 22 -# define SYS_F_FCNTL 23 -# define SYS_F_FSTAT 24 - -/* reasons */ -# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ -# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ -# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ -# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ -# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ -# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ -# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ -# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ -# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ -# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ -# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ -# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ -# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ -# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ -# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ -# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ -# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ -# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ -# define ERR_R_OSSL_STORE_LIB ERR_LIB_OSSL_STORE/* 44 */ - -# define ERR_R_NESTED_ASN1_ERROR 58 -# define ERR_R_MISSING_ASN1_EOS 63 - -/* fatal error */ -# define ERR_R_FATAL 64 -# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) -# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) -# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) -# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) -# define ERR_R_DISABLED (5|ERR_R_FATAL) -# define ERR_R_INIT_FAIL (6|ERR_R_FATAL) -# define ERR_R_PASSED_INVALID_ARGUMENT (7) -# define ERR_R_OPERATION_FAIL (8|ERR_R_FATAL) +/* Macros to help decode recorded system errors */ +# define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1) +# define ERR_SYSTEM_MASK ((unsigned int)INT_MAX) /* - * 99 is the maximum possible ERR_R_... code, higher values are reserved for - * the individual libraries + * Macros to help decode recorded OpenSSL errors + * As expressed above, RFLAGS and REASON overlap by one bit to allow + * ERR_R_FATAL to use ERR_RFLAG_FATAL as its reason code. */ +# define ERR_LIB_OFFSET 23L +# define ERR_LIB_MASK 0xFF +# define ERR_RFLAGS_OFFSET 18L +# define ERR_RFLAGS_MASK 0x1F +# define ERR_REASON_MASK 0X7FFFFF + +/* + * Reason flags are defined pre-shifted to easily combine with the reason + * number. + */ +# define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET) +# define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET) + +# define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0) + +static ossl_unused ossl_inline int ERR_GET_LIB(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return ERR_LIB_SYS; + return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK; +} + +static ossl_unused ossl_inline int ERR_GET_RFLAGS(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return 0; + return errcode & (ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET); +} + +static ossl_unused ossl_inline int ERR_GET_REASON(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return errcode & ERR_SYSTEM_MASK; + return errcode & ERR_REASON_MASK; +} + +static ossl_unused ossl_inline int ERR_FATAL_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_FATAL) != 0; +} + +static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_COMMON) != 0; +} + +/* + * ERR_PACK is a helper macro to properly pack OpenSSL error codes and may + * only be used for that purpose. System errors are packed internally. + * ERR_PACK takes reason flags and reason code combined in |reason|. + * ERR_PACK ignores |func|, that parameter is just legacy from pre-3.0 OpenSSL. + */ +# define ERR_PACK(lib,func,reason) \ + ( (((unsigned long)(lib) & ERR_LIB_MASK ) << ERR_LIB_OFFSET) | \ + (((unsigned long)(reason) & ERR_REASON_MASK)) ) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SYS_F_FOPEN 0 +# define SYS_F_CONNECT 0 +# define SYS_F_GETSERVBYNAME 0 +# define SYS_F_SOCKET 0 +# define SYS_F_IOCTLSOCKET 0 +# define SYS_F_BIND 0 +# define SYS_F_LISTEN 0 +# define SYS_F_ACCEPT 0 +# define SYS_F_WSASTARTUP 0 +# define SYS_F_OPENDIR 0 +# define SYS_F_FREAD 0 +# define SYS_F_GETADDRINFO 0 +# define SYS_F_GETNAMEINFO 0 +# define SYS_F_SETSOCKOPT 0 +# define SYS_F_GETSOCKOPT 0 +# define SYS_F_GETSOCKNAME 0 +# define SYS_F_GETHOSTBYNAME 0 +# define SYS_F_FFLUSH 0 +# define SYS_F_OPEN 0 +# define SYS_F_CLOSE 0 +# define SYS_F_IOCTL 0 +# define SYS_F_STAT 0 +# define SYS_F_FCNTL 0 +# define SYS_F_FSTAT 0 +# define SYS_F_SENDFILE 0 +# endif + +/* + * All ERR_R_ codes must be combined with ERR_RFLAG_COMMON. + */ + +/* "we came from here" global reason codes, range 1..255 */ +# define ERR_R_SYS_LIB (ERR_LIB_SYS/* 2 */ | ERR_RFLAG_COMMON) +# define ERR_R_BN_LIB (ERR_LIB_BN/* 3 */ | ERR_RFLAG_COMMON) +# define ERR_R_RSA_LIB (ERR_LIB_RSA/* 4 */ | ERR_RFLAG_COMMON) +# define ERR_R_DH_LIB (ERR_LIB_DH/* 5 */ | ERR_RFLAG_COMMON) +# define ERR_R_EVP_LIB (ERR_LIB_EVP/* 6 */ | ERR_RFLAG_COMMON) +# define ERR_R_BUF_LIB (ERR_LIB_BUF/* 7 */ | ERR_RFLAG_COMMON) +# define ERR_R_OBJ_LIB (ERR_LIB_OBJ/* 8 */ | ERR_RFLAG_COMMON) +# define ERR_R_PEM_LIB (ERR_LIB_PEM/* 9 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSA_LIB (ERR_LIB_DSA/* 10 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509_LIB (ERR_LIB_X509/* 11 */ | ERR_RFLAG_COMMON) +# define ERR_R_ASN1_LIB (ERR_LIB_ASN1/* 13 */ | ERR_RFLAG_COMMON) +# define ERR_R_CONF_LIB (ERR_LIB_CONF/* 14 */ | ERR_RFLAG_COMMON) +# define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO/* 15 */ | ERR_RFLAG_COMMON) +# define ERR_R_EC_LIB (ERR_LIB_EC/* 16 */ | ERR_RFLAG_COMMON) +# define ERR_R_SSL_LIB (ERR_LIB_SSL/* 20 */ | ERR_RFLAG_COMMON) +# define ERR_R_BIO_LIB (ERR_LIB_BIO/* 32 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS7_LIB (ERR_LIB_PKCS7/* 33 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509V3_LIB (ERR_LIB_X509V3/* 34 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS12_LIB (ERR_LIB_PKCS12/* 35 */ | ERR_RFLAG_COMMON) +# define ERR_R_RAND_LIB (ERR_LIB_RAND/* 36 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSO_LIB (ERR_LIB_DSO/* 37 */ | ERR_RFLAG_COMMON) +# define ERR_R_ENGINE_LIB (ERR_LIB_ENGINE/* 38 */ | ERR_RFLAG_COMMON) +# define ERR_R_UI_LIB (ERR_LIB_UI/* 40 */ | ERR_RFLAG_COMMON) +# define ERR_R_ECDSA_LIB (ERR_LIB_ECDSA/* 42 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_STORE_LIB (ERR_LIB_OSSL_STORE/* 44 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMS_LIB (ERR_LIB_CMS/* 46 */ | ERR_RFLAG_COMMON) +# define ERR_R_TS_LIB (ERR_LIB_TS/* 47 */ | ERR_RFLAG_COMMON) +# define ERR_R_CT_LIB (ERR_LIB_CT/* 50 */ | ERR_RFLAG_COMMON) +# define ERR_R_PROV_LIB (ERR_LIB_PROV/* 57 */ | ERR_RFLAG_COMMON) +# define ERR_R_ESS_LIB (ERR_LIB_ESS/* 54 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMP_LIB (ERR_LIB_CMP/* 58 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_ENCODER_LIB (ERR_LIB_OSSL_ENCODER/* 59 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_DECODER_LIB (ERR_LIB_OSSL_DECODER/* 60 */ | ERR_RFLAG_COMMON) + +/* Other common error codes, range 256..2^ERR_RFLAGS_OFFSET-1 */ +# define ERR_R_FATAL (ERR_RFLAG_FATAL|ERR_RFLAG_COMMON) +# define ERR_R_MALLOC_FAILURE (256|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (257|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (258|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (259|ERR_R_FATAL) +# define ERR_R_DISABLED (260|ERR_R_FATAL) +# define ERR_R_INIT_FAIL (261|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (262|ERR_RFLAG_COMMON) +# define ERR_R_OPERATION_FAIL (263|ERR_R_FATAL) +# define ERR_R_INVALID_PROVIDER_FUNCTIONS (264|ERR_R_FATAL) +# define ERR_R_INTERRUPTED_OR_CANCELLED (265|ERR_RFLAG_COMMON) +# define ERR_R_NESTED_ASN1_ERROR (266|ERR_RFLAG_COMMON) +# define ERR_R_MISSING_ASN1_EOS (267|ERR_RFLAG_COMMON) +# define ERR_R_UNSUPPORTED (268|ERR_RFLAG_COMMON) +# define ERR_R_FETCH_FAILED (269|ERR_RFLAG_COMMON) +# define ERR_R_INVALID_PROPERTY_DEFINITION (270|ERR_RFLAG_COMMON) +# define ERR_R_UNABLE_TO_GET_READ_LOCK (271|ERR_R_FATAL) +# define ERR_R_UNABLE_TO_GET_WRITE_LOCK (272|ERR_R_FATAL) typedef struct ERR_string_data_st { unsigned long error; const char *string; } ERR_STRING_DATA; -DEFINE_LHASH_OF(ERR_STRING_DATA); +DEFINE_LHASH_OF_INTERNAL(ERR_STRING_DATA); +#define lh_ERR_STRING_DATA_new(hfn, cmp) ((LHASH_OF(ERR_STRING_DATA) *)OPENSSL_LH_new(ossl_check_ERR_STRING_DATA_lh_hashfunc_type(hfn), ossl_check_ERR_STRING_DATA_lh_compfunc_type(cmp))) +#define lh_ERR_STRING_DATA_free(lh) OPENSSL_LH_free(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_flush(lh) OPENSSL_LH_flush(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_insert(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_insert(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_delete(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_delete(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_retrieve(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_retrieve(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_error(lh) OPENSSL_LH_error(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_num_items(lh) OPENSSL_LH_num_items(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh), dl) +#define lh_ERR_STRING_DATA_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_doallfunc_type(dfn)) + + +/* 12 lines and some on an 80 column terminal */ +#define ERR_MAX_DATA_SIZE 1024 + +/* Building blocks */ +void ERR_new(void); +void ERR_set_debug(const char *file, int line, const char *func); +void ERR_set_error(int lib, int reason, const char *fmt, ...); +void ERR_vset_error(int lib, int reason, const char *fmt, va_list args); + +/* Main error raising functions */ +# define ERR_raise(lib, reason) ERR_raise_data((lib),(reason),NULL) +# define ERR_raise_data \ + (ERR_new(), \ + ERR_set_debug(OPENSSL_FILE,OPENSSL_LINE,OPENSSL_FUNC), \ + ERR_set_error) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* Backward compatibility */ +# define ERR_put_error(lib, func, reason, file, line) \ + (ERR_new(), \ + ERR_set_debug((file), (line), OPENSSL_FUNC), \ + ERR_set_error((lib), (reason), NULL)) +# endif -void ERR_put_error(int lib, int func, int reason, const char *file, int line); void ERR_set_error_data(char *data, int flags); unsigned long ERR_get_error(void); +unsigned long ERR_get_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_get_error_line(const char **file, int *line); +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_get_error_line_data(const char **file, int *line, const char **data, int *flags); +#endif unsigned long ERR_peek_error(void); unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_func(const char **func); +unsigned long ERR_peek_error_data(const char **data, int *flags); +unsigned long ERR_peek_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_peek_error_line_data(const char **file, int *line, const char **data, int *flags); +# endif unsigned long ERR_peek_last_error(void); unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_func(const char **func); +unsigned long ERR_peek_last_error_data(const char **data, int *flags); +unsigned long ERR_peek_last_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_peek_last_error_line_data(const char **file, int *line, const char **data, int *flags); +# endif + void ERR_clear_error(void); + char *ERR_error_string(unsigned long e, char *buf); void ERR_error_string_n(unsigned long e, char *buf, size_t len); const char *ERR_lib_error_string(unsigned long e); -const char *ERR_func_error_string(unsigned long e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ERR_func_error_string(unsigned long e); +# endif const char *ERR_reason_error_string(unsigned long e); + void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), void *u); # ifndef OPENSSL_NO_STDIO void ERR_print_errors_fp(FILE *fp); # endif void ERR_print_errors(BIO *bp); + void ERR_add_error_data(int num, ...); void ERR_add_error_vdata(int num, va_list args); +void ERR_add_error_txt(const char *sepr, const char *txt); +void ERR_add_error_mem_bio(const char *sep, BIO *bio); + int ERR_load_strings(int lib, ERR_STRING_DATA *str); int ERR_load_strings_const(const ERR_STRING_DATA *str); int ERR_unload_strings(int lib, ERR_STRING_DATA *str); -int ERR_load_ERR_strings(void); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define ERR_load_crypto_strings() \ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) # define ERR_free_strings() while(0) continue #endif - -DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) -DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid)) -ERR_STATE *ERR_get_state(void); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ERR_remove_thread_state(void *); +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_0_0 +OSSL_DEPRECATEDIN_1_0_0 void ERR_remove_state(unsigned long pid); +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ERR_STATE *ERR_get_state(void); +#endif int ERR_get_next_error_library(void); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h.in new file mode 100644 index 00000000..11dc2163 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h.in @@ -0,0 +1,493 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_lhash_macros); +-} + +#ifndef OPENSSL_ERR_H +# define OPENSSL_ERR_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ERR_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# include +# endif + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_FILENAMES +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,fn,ln) +# else +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,NULL,0) +# endif +# endif + +# include +# include + +# define ERR_TXT_MALLOCED 0x01 +# define ERR_TXT_STRING 0x02 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) || defined(OSSL_FORCE_ERR_STATE) +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 + +# define ERR_NUM_ERRORS 16 +struct err_state_st { + int err_flags[ERR_NUM_ERRORS]; + int err_marks[ERR_NUM_ERRORS]; + unsigned long err_buffer[ERR_NUM_ERRORS]; + char *err_data[ERR_NUM_ERRORS]; + size_t err_data_size[ERR_NUM_ERRORS]; + int err_data_flags[ERR_NUM_ERRORS]; + char *err_file[ERR_NUM_ERRORS]; + int err_line[ERR_NUM_ERRORS]; + char *err_func[ERR_NUM_ERRORS]; + int top, bottom; +}; +# endif + +/* library */ +# define ERR_LIB_NONE 1 +# define ERR_LIB_SYS 2 +# define ERR_LIB_BN 3 +# define ERR_LIB_RSA 4 +# define ERR_LIB_DH 5 +# define ERR_LIB_EVP 6 +# define ERR_LIB_BUF 7 +# define ERR_LIB_OBJ 8 +# define ERR_LIB_PEM 9 +# define ERR_LIB_DSA 10 +# define ERR_LIB_X509 11 +/* #define ERR_LIB_METH 12 */ +# define ERR_LIB_ASN1 13 +# define ERR_LIB_CONF 14 +# define ERR_LIB_CRYPTO 15 +# define ERR_LIB_EC 16 +# define ERR_LIB_SSL 20 +/* #define ERR_LIB_SSL23 21 */ +/* #define ERR_LIB_SSL2 22 */ +/* #define ERR_LIB_SSL3 23 */ +/* #define ERR_LIB_RSAREF 30 */ +/* #define ERR_LIB_PROXY 31 */ +# define ERR_LIB_BIO 32 +# define ERR_LIB_PKCS7 33 +# define ERR_LIB_X509V3 34 +# define ERR_LIB_PKCS12 35 +# define ERR_LIB_RAND 36 +# define ERR_LIB_DSO 37 +# define ERR_LIB_ENGINE 38 +# define ERR_LIB_OCSP 39 +# define ERR_LIB_UI 40 +# define ERR_LIB_COMP 41 +# define ERR_LIB_ECDSA 42 +# define ERR_LIB_ECDH 43 +# define ERR_LIB_OSSL_STORE 44 +# define ERR_LIB_FIPS 45 +# define ERR_LIB_CMS 46 +# define ERR_LIB_TS 47 +# define ERR_LIB_HMAC 48 +/* # define ERR_LIB_JPAKE 49 */ +# define ERR_LIB_CT 50 +# define ERR_LIB_ASYNC 51 +# define ERR_LIB_KDF 52 +# define ERR_LIB_SM2 53 +# define ERR_LIB_ESS 54 +# define ERR_LIB_PROP 55 +# define ERR_LIB_CRMF 56 +# define ERR_LIB_PROV 57 +# define ERR_LIB_CMP 58 +# define ERR_LIB_OSSL_ENCODER 59 +# define ERR_LIB_OSSL_DECODER 60 +# define ERR_LIB_HTTP 61 + +# define ERR_LIB_USER 128 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define ASN1err(f, r) ERR_raise_data(ERR_LIB_ASN1, (r), NULL) +# define ASYNCerr(f, r) ERR_raise_data(ERR_LIB_ASYNC, (r), NULL) +# define BIOerr(f, r) ERR_raise_data(ERR_LIB_BIO, (r), NULL) +# define BNerr(f, r) ERR_raise_data(ERR_LIB_BN, (r), NULL) +# define BUFerr(f, r) ERR_raise_data(ERR_LIB_BUF, (r), NULL) +# define CMPerr(f, r) ERR_raise_data(ERR_LIB_CMP, (r), NULL) +# define CMSerr(f, r) ERR_raise_data(ERR_LIB_CMS, (r), NULL) +# define COMPerr(f, r) ERR_raise_data(ERR_LIB_COMP, (r), NULL) +# define CONFerr(f, r) ERR_raise_data(ERR_LIB_CONF, (r), NULL) +# define CRMFerr(f, r) ERR_raise_data(ERR_LIB_CRMF, (r), NULL) +# define CRYPTOerr(f, r) ERR_raise_data(ERR_LIB_CRYPTO, (r), NULL) +# define CTerr(f, r) ERR_raise_data(ERR_LIB_CT, (r), NULL) +# define DHerr(f, r) ERR_raise_data(ERR_LIB_DH, (r), NULL) +# define DSAerr(f, r) ERR_raise_data(ERR_LIB_DSA, (r), NULL) +# define DSOerr(f, r) ERR_raise_data(ERR_LIB_DSO, (r), NULL) +# define ECDHerr(f, r) ERR_raise_data(ERR_LIB_ECDH, (r), NULL) +# define ECDSAerr(f, r) ERR_raise_data(ERR_LIB_ECDSA, (r), NULL) +# define ECerr(f, r) ERR_raise_data(ERR_LIB_EC, (r), NULL) +# define ENGINEerr(f, r) ERR_raise_data(ERR_LIB_ENGINE, (r), NULL) +# define ESSerr(f, r) ERR_raise_data(ERR_LIB_ESS, (r), NULL) +# define EVPerr(f, r) ERR_raise_data(ERR_LIB_EVP, (r), NULL) +# define FIPSerr(f, r) ERR_raise_data(ERR_LIB_FIPS, (r), NULL) +# define HMACerr(f, r) ERR_raise_data(ERR_LIB_HMAC, (r), NULL) +# define HTTPerr(f, r) ERR_raise_data(ERR_LIB_HTTP, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define OBJerr(f, r) ERR_raise_data(ERR_LIB_OBJ, (r), NULL) +# define OCSPerr(f, r) ERR_raise_data(ERR_LIB_OCSP, (r), NULL) +# define OSSL_STOREerr(f, r) ERR_raise_data(ERR_LIB_OSSL_STORE, (r), NULL) +# define PEMerr(f, r) ERR_raise_data(ERR_LIB_PEM, (r), NULL) +# define PKCS12err(f, r) ERR_raise_data(ERR_LIB_PKCS12, (r), NULL) +# define PKCS7err(f, r) ERR_raise_data(ERR_LIB_PKCS7, (r), NULL) +# define PROPerr(f, r) ERR_raise_data(ERR_LIB_PROP, (r), NULL) +# define PROVerr(f, r) ERR_raise_data(ERR_LIB_PROV, (r), NULL) +# define RANDerr(f, r) ERR_raise_data(ERR_LIB_RAND, (r), NULL) +# define RSAerr(f, r) ERR_raise_data(ERR_LIB_RSA, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define SM2err(f, r) ERR_raise_data(ERR_LIB_SM2, (r), NULL) +# define SSLerr(f, r) ERR_raise_data(ERR_LIB_SSL, (r), NULL) +# define SYSerr(f, r) ERR_raise_data(ERR_LIB_SYS, (r), NULL) +# define TSerr(f, r) ERR_raise_data(ERR_LIB_TS, (r), NULL) +# define UIerr(f, r) ERR_raise_data(ERR_LIB_UI, (r), NULL) +# define X509V3err(f, r) ERR_raise_data(ERR_LIB_X509V3, (r), NULL) +# define X509err(f, r) ERR_raise_data(ERR_LIB_X509, (r), NULL) +# endif + +/*- + * The error code packs differently depending on if it records a system + * error or an OpenSSL error. + * + * A system error packs like this (we follow POSIX and only allow positive + * numbers that fit in an |int|): + * + * +-+-------------------------------------------------------------+ + * |1| system error number | + * +-+-------------------------------------------------------------+ + * + * An OpenSSL error packs like this: + * + * <---------------------------- 32 bits --------------------------> + * <--- 8 bits ---><------------------ 23 bits -----------------> + * +-+---------------+---------------------------------------------+ + * |0| library | reason | + * +-+---------------+---------------------------------------------+ + * + * A few of the reason bits are reserved as flags with special meaning: + * + * <5 bits-<>--------- 19 bits -----------------> + * +-------+-+-----------------------------------+ + * | rflags| | reason | + * +-------+-+-----------------------------------+ + * ^ + * | + * ERR_RFLAG_FATAL = ERR_R_FATAL + * + * The reason flags are part of the overall reason code for practical + * reasons, as they provide an easy way to place different types of + * reason codes in different numeric ranges. + * + * The currently known reason flags are: + * + * ERR_RFLAG_FATAL Flags that the reason code is considered fatal. + * For backward compatibility reasons, this flag + * is also the code for ERR_R_FATAL (that reason + * code served the dual purpose of flag and reason + * code in one in pre-3.0 OpenSSL). + * ERR_RFLAG_COMMON Flags that the reason code is common to all + * libraries. All ERR_R_ macros must use this flag, + * and no other _R_ macro is allowed to use it. + */ + +/* Macros to help decode recorded system errors */ +# define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1) +# define ERR_SYSTEM_MASK ((unsigned int)INT_MAX) + +/* + * Macros to help decode recorded OpenSSL errors + * As expressed above, RFLAGS and REASON overlap by one bit to allow + * ERR_R_FATAL to use ERR_RFLAG_FATAL as its reason code. + */ +# define ERR_LIB_OFFSET 23L +# define ERR_LIB_MASK 0xFF +# define ERR_RFLAGS_OFFSET 18L +# define ERR_RFLAGS_MASK 0x1F +# define ERR_REASON_MASK 0X7FFFFF + +/* + * Reason flags are defined pre-shifted to easily combine with the reason + * number. + */ +# define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET) +# define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET) + +# define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0) + +static ossl_unused ossl_inline int ERR_GET_LIB(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return ERR_LIB_SYS; + return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK; +} + +static ossl_unused ossl_inline int ERR_GET_RFLAGS(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return 0; + return errcode & (ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET); +} + +static ossl_unused ossl_inline int ERR_GET_REASON(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return errcode & ERR_SYSTEM_MASK; + return errcode & ERR_REASON_MASK; +} + +static ossl_unused ossl_inline int ERR_FATAL_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_FATAL) != 0; +} + +static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_COMMON) != 0; +} + +/* + * ERR_PACK is a helper macro to properly pack OpenSSL error codes and may + * only be used for that purpose. System errors are packed internally. + * ERR_PACK takes reason flags and reason code combined in |reason|. + * ERR_PACK ignores |func|, that parameter is just legacy from pre-3.0 OpenSSL. + */ +# define ERR_PACK(lib,func,reason) \ + ( (((unsigned long)(lib) & ERR_LIB_MASK ) << ERR_LIB_OFFSET) | \ + (((unsigned long)(reason) & ERR_REASON_MASK)) ) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SYS_F_FOPEN 0 +# define SYS_F_CONNECT 0 +# define SYS_F_GETSERVBYNAME 0 +# define SYS_F_SOCKET 0 +# define SYS_F_IOCTLSOCKET 0 +# define SYS_F_BIND 0 +# define SYS_F_LISTEN 0 +# define SYS_F_ACCEPT 0 +# define SYS_F_WSASTARTUP 0 +# define SYS_F_OPENDIR 0 +# define SYS_F_FREAD 0 +# define SYS_F_GETADDRINFO 0 +# define SYS_F_GETNAMEINFO 0 +# define SYS_F_SETSOCKOPT 0 +# define SYS_F_GETSOCKOPT 0 +# define SYS_F_GETSOCKNAME 0 +# define SYS_F_GETHOSTBYNAME 0 +# define SYS_F_FFLUSH 0 +# define SYS_F_OPEN 0 +# define SYS_F_CLOSE 0 +# define SYS_F_IOCTL 0 +# define SYS_F_STAT 0 +# define SYS_F_FCNTL 0 +# define SYS_F_FSTAT 0 +# define SYS_F_SENDFILE 0 +# endif + +/* + * All ERR_R_ codes must be combined with ERR_RFLAG_COMMON. + */ + +/* "we came from here" global reason codes, range 1..255 */ +# define ERR_R_SYS_LIB (ERR_LIB_SYS/* 2 */ | ERR_RFLAG_COMMON) +# define ERR_R_BN_LIB (ERR_LIB_BN/* 3 */ | ERR_RFLAG_COMMON) +# define ERR_R_RSA_LIB (ERR_LIB_RSA/* 4 */ | ERR_RFLAG_COMMON) +# define ERR_R_DH_LIB (ERR_LIB_DH/* 5 */ | ERR_RFLAG_COMMON) +# define ERR_R_EVP_LIB (ERR_LIB_EVP/* 6 */ | ERR_RFLAG_COMMON) +# define ERR_R_BUF_LIB (ERR_LIB_BUF/* 7 */ | ERR_RFLAG_COMMON) +# define ERR_R_OBJ_LIB (ERR_LIB_OBJ/* 8 */ | ERR_RFLAG_COMMON) +# define ERR_R_PEM_LIB (ERR_LIB_PEM/* 9 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSA_LIB (ERR_LIB_DSA/* 10 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509_LIB (ERR_LIB_X509/* 11 */ | ERR_RFLAG_COMMON) +# define ERR_R_ASN1_LIB (ERR_LIB_ASN1/* 13 */ | ERR_RFLAG_COMMON) +# define ERR_R_CONF_LIB (ERR_LIB_CONF/* 14 */ | ERR_RFLAG_COMMON) +# define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO/* 15 */ | ERR_RFLAG_COMMON) +# define ERR_R_EC_LIB (ERR_LIB_EC/* 16 */ | ERR_RFLAG_COMMON) +# define ERR_R_SSL_LIB (ERR_LIB_SSL/* 20 */ | ERR_RFLAG_COMMON) +# define ERR_R_BIO_LIB (ERR_LIB_BIO/* 32 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS7_LIB (ERR_LIB_PKCS7/* 33 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509V3_LIB (ERR_LIB_X509V3/* 34 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS12_LIB (ERR_LIB_PKCS12/* 35 */ | ERR_RFLAG_COMMON) +# define ERR_R_RAND_LIB (ERR_LIB_RAND/* 36 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSO_LIB (ERR_LIB_DSO/* 37 */ | ERR_RFLAG_COMMON) +# define ERR_R_ENGINE_LIB (ERR_LIB_ENGINE/* 38 */ | ERR_RFLAG_COMMON) +# define ERR_R_UI_LIB (ERR_LIB_UI/* 40 */ | ERR_RFLAG_COMMON) +# define ERR_R_ECDSA_LIB (ERR_LIB_ECDSA/* 42 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_STORE_LIB (ERR_LIB_OSSL_STORE/* 44 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMS_LIB (ERR_LIB_CMS/* 46 */ | ERR_RFLAG_COMMON) +# define ERR_R_TS_LIB (ERR_LIB_TS/* 47 */ | ERR_RFLAG_COMMON) +# define ERR_R_CT_LIB (ERR_LIB_CT/* 50 */ | ERR_RFLAG_COMMON) +# define ERR_R_PROV_LIB (ERR_LIB_PROV/* 57 */ | ERR_RFLAG_COMMON) +# define ERR_R_ESS_LIB (ERR_LIB_ESS/* 54 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMP_LIB (ERR_LIB_CMP/* 58 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_ENCODER_LIB (ERR_LIB_OSSL_ENCODER/* 59 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_DECODER_LIB (ERR_LIB_OSSL_DECODER/* 60 */ | ERR_RFLAG_COMMON) + +/* Other common error codes, range 256..2^ERR_RFLAGS_OFFSET-1 */ +# define ERR_R_FATAL (ERR_RFLAG_FATAL|ERR_RFLAG_COMMON) +# define ERR_R_MALLOC_FAILURE (256|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (257|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (258|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (259|ERR_R_FATAL) +# define ERR_R_DISABLED (260|ERR_R_FATAL) +# define ERR_R_INIT_FAIL (261|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (262|ERR_RFLAG_COMMON) +# define ERR_R_OPERATION_FAIL (263|ERR_R_FATAL) +# define ERR_R_INVALID_PROVIDER_FUNCTIONS (264|ERR_R_FATAL) +# define ERR_R_INTERRUPTED_OR_CANCELLED (265|ERR_RFLAG_COMMON) +# define ERR_R_NESTED_ASN1_ERROR (266|ERR_RFLAG_COMMON) +# define ERR_R_MISSING_ASN1_EOS (267|ERR_RFLAG_COMMON) +# define ERR_R_UNSUPPORTED (268|ERR_RFLAG_COMMON) +# define ERR_R_FETCH_FAILED (269|ERR_RFLAG_COMMON) +# define ERR_R_INVALID_PROPERTY_DEFINITION (270|ERR_RFLAG_COMMON) +# define ERR_R_UNABLE_TO_GET_READ_LOCK (271|ERR_R_FATAL) +# define ERR_R_UNABLE_TO_GET_WRITE_LOCK (272|ERR_R_FATAL) + +typedef struct ERR_string_data_st { + unsigned long error; + const char *string; +} ERR_STRING_DATA; + +{- + generate_lhash_macros("ERR_STRING_DATA"); +-} + +/* 12 lines and some on an 80 column terminal */ +#define ERR_MAX_DATA_SIZE 1024 + +/* Building blocks */ +void ERR_new(void); +void ERR_set_debug(const char *file, int line, const char *func); +void ERR_set_error(int lib, int reason, const char *fmt, ...); +void ERR_vset_error(int lib, int reason, const char *fmt, va_list args); + +/* Main error raising functions */ +# define ERR_raise(lib, reason) ERR_raise_data((lib),(reason),NULL) +# define ERR_raise_data \ + (ERR_new(), \ + ERR_set_debug(OPENSSL_FILE,OPENSSL_LINE,OPENSSL_FUNC), \ + ERR_set_error) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* Backward compatibility */ +# define ERR_put_error(lib, func, reason, file, line) \ + (ERR_new(), \ + ERR_set_debug((file), (line), OPENSSL_FUNC), \ + ERR_set_error((lib), (reason), NULL)) +# endif + +void ERR_set_error_data(char *data, int flags); + +unsigned long ERR_get_error(void); +unsigned long ERR_get_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_get_error_line(const char **file, int *line); +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_get_error_line_data(const char **file, int *line, + const char **data, int *flags); +#endif +unsigned long ERR_peek_error(void); +unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_func(const char **func); +unsigned long ERR_peek_error_data(const char **data, int *flags); +unsigned long ERR_peek_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_peek_error_line_data(const char **file, int *line, + const char **data, int *flags); +# endif +unsigned long ERR_peek_last_error(void); +unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_func(const char **func); +unsigned long ERR_peek_last_error_data(const char **data, int *flags); +unsigned long ERR_peek_last_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_peek_last_error_line_data(const char **file, int *line, + const char **data, int *flags); +# endif + +void ERR_clear_error(void); + +char *ERR_error_string(unsigned long e, char *buf); +void ERR_error_string_n(unsigned long e, char *buf, size_t len); +const char *ERR_lib_error_string(unsigned long e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ERR_func_error_string(unsigned long e); +# endif +const char *ERR_reason_error_string(unsigned long e); + +void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), + void *u); +# ifndef OPENSSL_NO_STDIO +void ERR_print_errors_fp(FILE *fp); +# endif +void ERR_print_errors(BIO *bp); + +void ERR_add_error_data(int num, ...); +void ERR_add_error_vdata(int num, va_list args); +void ERR_add_error_txt(const char *sepr, const char *txt); +void ERR_add_error_mem_bio(const char *sep, BIO *bio); + +int ERR_load_strings(int lib, ERR_STRING_DATA *str); +int ERR_load_strings_const(const ERR_STRING_DATA *str); +int ERR_unload_strings(int lib, ERR_STRING_DATA *str); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define ERR_load_crypto_strings() \ + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# define ERR_free_strings() while(0) continue +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ERR_remove_thread_state(void *); +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_0_0 +OSSL_DEPRECATEDIN_1_0_0 void ERR_remove_state(unsigned long pid); +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ERR_STATE *ERR_get_state(void); +#endif + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); +int ERR_clear_last_mark(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h new file mode 100644 index 00000000..4055bebb --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h @@ -0,0 +1,128 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ess.h.in + * + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +#ifndef OPENSSL_ESS_H +# define OPENSSL_ESS_H +# pragma once + +# include + +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + + +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID, ESS_CERT_ID, ESS_CERT_ID) +#define sk_ESS_CERT_ID_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_value(sk, idx) ((ESS_CERT_ID *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_sk_type(sk), (idx))) +#define sk_ESS_CERT_ID_new(cmp) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_compfunc_type(cmp))) +#define sk_ESS_CERT_ID_new_null() ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_null()) +#define sk_ESS_CERT_ID_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_sk_type(sk), (n)) +#define sk_ESS_CERT_ID_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_delete(sk, i) ((ESS_CERT_ID *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_sk_type(sk), (i))) +#define sk_ESS_CERT_ID_delete_ptr(sk, ptr) ((ESS_CERT_ID *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr))) +#define sk_ESS_CERT_ID_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_pop(sk) ((ESS_CERT_ID *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_shift(sk) ((ESS_CERT_ID *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_sk_type(sk),ossl_check_ESS_CERT_ID_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), (idx)) +#define sk_ESS_CERT_ID_set(sk, idx, ptr) ((ESS_CERT_ID *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_type(ptr))) +#define sk_ESS_CERT_ID_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), pnum) +#define sk_ESS_CERT_ID_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_dup(sk) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_freefunc_type(freefunc))) +#define sk_ESS_CERT_ID_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_compfunc_type(cmp))) + + + +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; + +SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID_V2, ESS_CERT_ID_V2, ESS_CERT_ID_V2) +#define sk_ESS_CERT_ID_V2_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_value(sk, idx) ((ESS_CERT_ID_V2 *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), (idx))) +#define sk_ESS_CERT_ID_V2_new(cmp) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp))) +#define sk_ESS_CERT_ID_V2_new_null() ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_null()) +#define sk_ESS_CERT_ID_V2_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_V2_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (n)) +#define sk_ESS_CERT_ID_V2_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_delete(sk, i) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (i))) +#define sk_ESS_CERT_ID_V2_delete_ptr(sk, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr))) +#define sk_ESS_CERT_ID_V2_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_pop(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_shift(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk),ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_V2_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), (idx)) +#define sk_ESS_CERT_ID_V2_set(sk, idx, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_V2_type(ptr))) +#define sk_ESS_CERT_ID_V2_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), pnum) +#define sk_ESS_CERT_ID_V2_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_dup(sk) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc))) +#define sk_ESS_CERT_ID_V2_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_V2_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp))) + + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_ISSUER_SERIAL) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_ISSUER_SERIAL, ESS_ISSUER_SERIAL) +DECLARE_ASN1_DUP_FUNCTION(ESS_ISSUER_SERIAL) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID, ESS_CERT_ID) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID_V2) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID_V2, ESS_CERT_ID_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2) + +ESS_SIGNING_CERT *OSSL_ESS_signing_cert_new_init(const X509 *signcert, + const STACK_OF(X509) *certs, + int set_issuer_serial); +ESS_SIGNING_CERT_V2 *OSSL_ESS_signing_cert_v2_new_init(const EVP_MD *hash_alg, + const X509 *signcert, + const + STACK_OF(X509) *certs, + int set_issuer_serial); +int OSSL_ESS_check_signing_certs(const ESS_SIGNING_CERT *ss, + const ESS_SIGNING_CERT_V2 *ssv2, + const STACK_OF(X509) *chain, + int require_signing_cert); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h.in new file mode 100644 index 00000000..d1a685b9 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h.in @@ -0,0 +1,81 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ESS_H +# define OPENSSL_ESS_H +# pragma once + +# include + +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + + +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +{- + generate_stack_macros("ESS_CERT_ID"); +-} + + +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; + +{- + generate_stack_macros("ESS_CERT_ID_V2"); +-} + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_ISSUER_SERIAL) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_ISSUER_SERIAL, ESS_ISSUER_SERIAL) +DECLARE_ASN1_DUP_FUNCTION(ESS_ISSUER_SERIAL) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID, ESS_CERT_ID) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID_V2) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID_V2, ESS_CERT_ID_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2) + +ESS_SIGNING_CERT *OSSL_ESS_signing_cert_new_init(const X509 *signcert, + const STACK_OF(X509) *certs, + int set_issuer_serial); +ESS_SIGNING_CERT_V2 *OSSL_ESS_signing_cert_v2_new_init(const EVP_MD *hash_alg, + const X509 *signcert, + const + STACK_OF(X509) *certs, + int set_issuer_serial); +int OSSL_ESS_check_signing_certs(const ESS_SIGNING_CERT *ss, + const ESS_SIGNING_CERT_V2 *ssv2, + const STACK_OF(X509) *chain, + int require_signing_cert); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/esserr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/esserr.h new file mode 100644 index 00000000..165ce7c4 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/esserr.h @@ -0,0 +1,32 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ESSERR_H +# define OPENSSL_ESSERR_H +# pragma once + +# include +# include +# include + +/* + * ESS reason codes. + */ +# define ESS_R_EMPTY_ESS_CERT_ID_LIST 107 +# define ESS_R_ESS_CERT_DIGEST_ERROR 103 +# define ESS_R_ESS_CERT_ID_NOT_FOUND 104 +# define ESS_R_ESS_CERT_ID_WRONG_ORDER 105 +# define ESS_R_ESS_DIGEST_ALG_UNKNOWN 106 +# define ESS_R_ESS_SIGNING_CERTIFICATE_ERROR 102 +# define ESS_R_ESS_SIGNING_CERT_ADD_ERROR 100 +# define ESS_R_ESS_SIGNING_CERT_V2_ADD_ERROR 101 +# define ESS_R_MISSING_SIGNING_CERTIFICATE_ATTRIBUTE 108 + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evp.h index a411f3f2..86f4e22c 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evp.h @@ -1,20 +1,35 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENVELOPE_H -# define HEADER_ENVELOPE_H +#ifndef OPENSSL_EVP_H +# define OPENSSL_EVP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ENVELOPE_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif # include -# include +# include +# include +# include # include # include # include +# include # define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ # define EVP_MAX_KEY_LENGTH 64 @@ -27,16 +42,18 @@ # include -# define EVP_PK_RSA 0x0001 -# define EVP_PK_DSA 0x0002 -# define EVP_PK_DH 0x0004 -# define EVP_PK_EC 0x0008 -# define EVP_PKT_SIGN 0x0010 -# define EVP_PKT_ENC 0x0020 -# define EVP_PKT_EXCH 0x0040 -# define EVP_PKS_RSA 0x0100 -# define EVP_PKS_DSA 0x0200 -# define EVP_PKS_EC 0x0400 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define EVP_PK_RSA 0x0001 +# define EVP_PK_DSA 0x0002 +# define EVP_PK_DH 0x0004 +# define EVP_PK_EC 0x0008 +# define EVP_PKT_SIGN 0x0010 +# define EVP_PKT_ENC 0x0020 +# define EVP_PKT_EXCH 0x0040 +# define EVP_PKS_RSA 0x0100 +# define EVP_PKS_DSA 0x0200 +# define EVP_PKS_EC 0x0400 +# endif # define EVP_PKEY_NONE NID_undef # define EVP_PKEY_RSA NID_rsaEncryption @@ -62,53 +79,81 @@ # define EVP_PKEY_ED25519 NID_ED25519 # define EVP_PKEY_X448 NID_X448 # define EVP_PKEY_ED448 NID_ED448 +/* Special indicator that the object is uniquely provider side */ +# define EVP_PKEY_KEYMGMT -1 + +/* Easy to use macros for EVP_PKEY related selections */ +# define EVP_PKEY_KEY_PARAMETERS \ + ( OSSL_KEYMGMT_SELECT_ALL_PARAMETERS ) +# define EVP_PKEY_PUBLIC_KEY \ + ( EVP_PKEY_KEY_PARAMETERS | OSSL_KEYMGMT_SELECT_PUBLIC_KEY ) +# define EVP_PKEY_KEYPAIR \ + ( EVP_PKEY_PUBLIC_KEY | OSSL_KEYMGMT_SELECT_PRIVATE_KEY ) #ifdef __cplusplus extern "C" { #endif +int EVP_set_default_properties(OSSL_LIB_CTX *libctx, const char *propq); +int EVP_default_properties_is_fips_enabled(OSSL_LIB_CTX *libctx); +int EVP_default_properties_enable_fips(OSSL_LIB_CTX *libctx, int enable); + # define EVP_PKEY_MO_SIGN 0x0001 # define EVP_PKEY_MO_VERIFY 0x0002 # define EVP_PKEY_MO_ENCRYPT 0x0004 # define EVP_PKEY_MO_DECRYPT 0x0008 # ifndef EVP_MD -EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); -EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); -void EVP_MD_meth_free(EVP_MD *md); - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); +OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 void EVP_MD_meth_free(EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, const void *data, size_t count)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, unsigned char *md)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, const EVP_MD_CTX *from)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, int p1, void *p2)); - -int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); -int EVP_MD_meth_get_result_size(const EVP_MD *md); -int EVP_MD_meth_get_app_datasize(const EVP_MD *md); -unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_result_size(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_app_datasize(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, - const void *data, - size_t count); + const void *data, size_t count); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, unsigned char *md); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, const EVP_MD_CTX *from); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); - +# endif /* digest can only handle a single block */ # define EVP_MD_FLAG_ONESHOT 0x0001 @@ -139,6 +184,7 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, # define EVP_MD_CTRL_DIGALGID 0x1 # define EVP_MD_CTRL_MICALG 0x2 # define EVP_MD_CTRL_XOF_LEN 0x3 +# define EVP_MD_CTRL_TLSTREE 0x4 /* Minimum Algorithm specific ctrl value */ @@ -159,8 +205,8 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, * don't accidentally reuse the values for other purposes. */ -# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS - * digest in FIPS mode */ +/* This flag has no effect from openssl-3.0 onwards */ +# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008 /* * The following PAD options are also currently ignored in 1.0.0, digest @@ -181,52 +227,68 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, */ # define EVP_MD_CTX_FLAG_FINALISE 0x0200 /* NOTE: 0x0400 is reserved for internal usage */ - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); +OSSL_DEPRECATEDIN_3_0 void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); - +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher, int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher, int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, int (*cleanup) (EVP_CIPHER_CTX *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr)); - -int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - const unsigned char *key, - const unsigned char *iv, - int enc); -int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - unsigned char *out, - const unsigned char *in, - size_t inl); -int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); -int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - int type, int arg, - void *ptr); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, int type, + int arg, void *ptr); +# endif /* Values for cipher flags */ @@ -243,6 +305,7 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CIPH_XTS_MODE 0x10001 # define EVP_CIPH_WRAP_MODE 0x10002 # define EVP_CIPH_OCB_MODE 0x10003 +# define EVP_CIPH_SIV_MODE 0x10004 # define EVP_CIPH_MODE 0xF0007 /* Set if variable length cipher */ # define EVP_CIPH_VARIABLE_LENGTH 0x8 @@ -262,22 +325,32 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CIPH_CUSTOM_COPY 0x400 /* Don't use standard iv length function */ # define EVP_CIPH_CUSTOM_IV_LENGTH 0x800 -/* Allow use default ASN1 get/set iv */ -# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 +/* Legacy and no longer relevant: Allow use default ASN1 get/set iv */ +# define EVP_CIPH_FLAG_DEFAULT_ASN1 0 +/* Free: 0x1000 */ /* Buffer length in bits not bytes: CFB1 mode only */ # define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 -/* Note if suitable for use in FIPS mode */ -# define EVP_CIPH_FLAG_FIPS 0x4000 -/* Allow non FIPS cipher in FIPS mode */ -# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 +/* Deprecated FIPS flag: was 0x4000 */ +# define EVP_CIPH_FLAG_FIPS 0 +/* Deprecated FIPS flag: was 0x8000 */ +# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0 + /* * Cipher handles any and all padding logic as well as finalisation. */ +# define EVP_CIPH_FLAG_CTS 0x4000 # define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 # define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 # define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 /* Cipher can handle pipeline operations */ # define EVP_CIPH_FLAG_PIPELINE 0X800000 +/* For provider implementations that handle ASN1 get/set param themselves */ +# define EVP_CIPH_FLAG_CUSTOM_ASN1 0x1000000 +/* For ciphers generating unprotected CMS attributes */ +# define EVP_CIPH_FLAG_CIPHER_WITH_MAC 0x2000000 +/* For supplementary wrap cipher support */ +# define EVP_CIPH_FLAG_GET_WRAP_CIPHER 0x4000000 +# define EVP_CIPH_FLAG_INVERSE_CIPHER 0x8000000 /* * Cipher context flag to indicate we can handle wrap mode: if allowed in @@ -350,8 +423,17 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23 /* Set the input buffer lengths to use for a pipelined operation */ # define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24 - +/* Get the IV length used by the cipher */ # define EVP_CTRL_GET_IVLEN 0x25 +/* 0x26 is unused */ +/* Tell the cipher it's doing a speed test (SIV disallows multiple ops) */ +# define EVP_CTRL_SET_SPEED 0x27 +/* Get the unprotectedAttrs from cipher ctx */ +# define EVP_CTRL_PROCESS_UNPROTECTED 0x28 +/* Get the supplementary wrap cipher */ +#define EVP_CTRL_GET_WRAP_CIPHER 0x29 +/* TLSTREE key diversification */ +#define EVP_CTRL_TLSTREE 0x2A /* Padding modes */ #define EVP_PADDING_PKCS7 1 @@ -405,33 +487,39 @@ typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); -# ifndef OPENSSL_NO_RSA +typedef int (EVP_PBE_KEYGEN_EX) (EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *cipher, const EVP_MD *md, + int en_de, OSSL_LIB_CTX *libctx, const char *propq); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 # define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ - (char *)(rsa)) + (rsa)) # endif # ifndef OPENSSL_NO_DSA # define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ - (char *)(dsa)) + (dsa)) # endif -# ifndef OPENSSL_NO_DH -# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ - (char *)(dh)) +# if !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_DEPRECATED_3_0) +# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,(dh)) # endif -# ifndef OPENSSL_NO_EC -# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ - (char *)(eckey)) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +# define EVP_PKEY_assign_EC_KEY(pkey,eckey) \ + EVP_PKEY_assign((pkey), EVP_PKEY_EC, (eckey)) +# endif # endif # ifndef OPENSSL_NO_SIPHASH -# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),EVP_PKEY_SIPHASH,\ - (char *)(shkey)) +# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),\ + EVP_PKEY_SIPHASH,(shkey)) # endif # ifndef OPENSSL_NO_POLY1305 -# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),EVP_PKEY_POLY1305,\ - (char *)(polykey)) +# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),\ + EVP_PKEY_POLY1305,(polykey)) # endif /* Add some extra combinations */ @@ -440,58 +528,126 @@ typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, # define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) # define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) -int EVP_MD_type(const EVP_MD *md); -# define EVP_MD_nid(e) EVP_MD_type(e) -# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) -int EVP_MD_pkey_type(const EVP_MD *md); -int EVP_MD_size(const EVP_MD *md); -int EVP_MD_block_size(const EVP_MD *md); -unsigned long EVP_MD_flags(const EVP_MD *md); +int EVP_MD_get_type(const EVP_MD *md); +# define EVP_MD_type EVP_MD_get_type +# define EVP_MD_nid EVP_MD_get_type +const char *EVP_MD_get0_name(const EVP_MD *md); +# define EVP_MD_name EVP_MD_get0_name +const char *EVP_MD_get0_description(const EVP_MD *md); +int EVP_MD_is_a(const EVP_MD *md, const char *name); +int EVP_MD_names_do_all(const EVP_MD *md, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PROVIDER *EVP_MD_get0_provider(const EVP_MD *md); +int EVP_MD_get_pkey_type(const EVP_MD *md); +# define EVP_MD_pkey_type EVP_MD_get_pkey_type +int EVP_MD_get_size(const EVP_MD *md); +# define EVP_MD_size EVP_MD_get_size +int EVP_MD_get_block_size(const EVP_MD *md); +# define EVP_MD_block_size EVP_MD_get_block_size +unsigned long EVP_MD_get_flags(const EVP_MD *md); +# define EVP_MD_flags EVP_MD_get_flags +const EVP_MD *EVP_MD_CTX_get0_md(const EVP_MD_CTX *ctx); +EVP_MD *EVP_MD_CTX_get1_md(EVP_MD_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, const void *data, size_t count); +OSSL_DEPRECATEDIN_3_0 void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count)); -# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) -EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); +# endif +# define EVP_MD_CTX_get0_name(e) EVP_MD_get0_name(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_get_size(e) EVP_MD_get_size(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_size EVP_MD_CTX_get_size +# define EVP_MD_CTX_get_block_size(e) EVP_MD_get_block_size(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_block_size EVP_MD_CTX_get_block_size +# define EVP_MD_CTX_get_type(e) EVP_MD_get_type(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_type EVP_MD_CTX_get_type +EVP_PKEY_CTX *EVP_MD_CTX_get_pkey_ctx(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_pkey_ctx EVP_MD_CTX_get_pkey_ctx void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); -void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); +void *EVP_MD_CTX_get0_md_data(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_md_data EVP_MD_CTX_get0_md_data -int EVP_CIPHER_nid(const EVP_CIPHER *cipher); -# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) -int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); +int EVP_CIPHER_get_nid(const EVP_CIPHER *cipher); +# define EVP_CIPHER_nid EVP_CIPHER_get_nid +const char *EVP_CIPHER_get0_name(const EVP_CIPHER *cipher); +# define EVP_CIPHER_name EVP_CIPHER_get0_name +const char *EVP_CIPHER_get0_description(const EVP_CIPHER *cipher); +int EVP_CIPHER_is_a(const EVP_CIPHER *cipher, const char *name); +int EVP_CIPHER_names_do_all(const EVP_CIPHER *cipher, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PROVIDER *EVP_CIPHER_get0_provider(const EVP_CIPHER *cipher); +int EVP_CIPHER_get_block_size(const EVP_CIPHER *cipher); +# define EVP_CIPHER_block_size EVP_CIPHER_get_block_size +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher); -int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); -int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); -unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); -# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) +# endif +int EVP_CIPHER_get_key_length(const EVP_CIPHER *cipher); +# define EVP_CIPHER_key_length EVP_CIPHER_get_key_length +int EVP_CIPHER_get_iv_length(const EVP_CIPHER *cipher); +# define EVP_CIPHER_iv_length EVP_CIPHER_get_iv_length +unsigned long EVP_CIPHER_get_flags(const EVP_CIPHER *cipher); +# define EVP_CIPHER_flags EVP_CIPHER_get_flags +int EVP_CIPHER_get_mode(const EVP_CIPHER *cipher); +# define EVP_CIPHER_mode EVP_CIPHER_get_mode +int EVP_CIPHER_get_type(const EVP_CIPHER *cipher); +# define EVP_CIPHER_type EVP_CIPHER_get_type +EVP_CIPHER *EVP_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_CIPHER_up_ref(EVP_CIPHER *cipher); +void EVP_CIPHER_free(EVP_CIPHER *cipher); +const EVP_CIPHER *EVP_CIPHER_CTX_get0_cipher(const EVP_CIPHER_CTX *ctx); +EVP_CIPHER *EVP_CIPHER_CTX_get1_cipher(EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_is_encrypting(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_encrypting EVP_CIPHER_CTX_is_encrypting +int EVP_CIPHER_CTX_get_nid(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_nid EVP_CIPHER_CTX_get_nid +int EVP_CIPHER_CTX_get_block_size(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_block_size EVP_CIPHER_CTX_get_block_size +int EVP_CIPHER_CTX_get_key_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_key_length EVP_CIPHER_CTX_get_key_length +int EVP_CIPHER_CTX_get_iv_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_iv_length EVP_CIPHER_CTX_get_iv_length +int EVP_CIPHER_CTX_get_tag_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_tag_length EVP_CIPHER_CTX_get_tag_length +# ifndef OPENSSL_NO_DEPRECATED_3_0 const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); -unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +# endif +int EVP_CIPHER_CTX_get_updated_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len); +int EVP_CIPHER_CTX_get_original_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_num(const EVP_CIPHER_CTX *ctx); -void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +# endif +int EVP_CIPHER_CTX_get_num(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_num EVP_CIPHER_CTX_get_num +int EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +EVP_CIPHER_CTX *EVP_CIPHER_CTX_dup(const EVP_CIPHER_CTX *in); int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx); void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); -# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) -# if OPENSSL_API_COMPAT < 0x10100000L -# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c)) +# define EVP_CIPHER_CTX_get0_name(c) EVP_CIPHER_get0_name(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_get_type(c) EVP_CIPHER_get_type(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_type EVP_CIPHER_CTX_get_type +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_get_flags(EVP_CIPHER_CTX_get0_cipher(c)) # endif -# define EVP_CIPHER_CTX_mode(c) EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)) +# define EVP_CIPHER_CTX_get_mode(c) EVP_CIPHER_get_mode(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_mode EVP_CIPHER_CTX_get_mode # define EVP_ENCODE_LENGTH(l) ((((l)+2)/3*4)+((l)/48+1)*2+80) # define EVP_DECODE_LENGTH(l) (((l)+3)/4*3+80) @@ -504,22 +660,17 @@ void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); # define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) # define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) -# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # ifdef CONST_STRICT void BIO_set_md(BIO *, const EVP_MD *md); # else -# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)(md)) +# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(void *)(md)) # endif -# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)(mdp)) -# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0, \ - (char *)(mdcp)) -# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0, \ - (char *)(mdcp)) +# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(mdp)) +# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(mdcp)) +# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(mdcp)) # define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) -# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0, \ - (char *)(c_pp)) +# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(c_pp)) /*__owur*/ int EVP_Cipher(EVP_CIPHER_CTX *c, unsigned char *out, @@ -534,6 +685,14 @@ void BIO_set_md(BIO *, const EVP_MD *md); # define EVP_delete_digest_alias(alias) \ OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); +int EVP_MD_get_params(const EVP_MD *digest, OSSL_PARAM params[]); +int EVP_MD_CTX_set_params(EVP_MD_CTX *ctx, const OSSL_PARAM params[]); +int EVP_MD_CTX_get_params(EVP_MD_CTX *ctx, OSSL_PARAM params[]); +const OSSL_PARAM *EVP_MD_gettable_params(const EVP_MD *digest); +const OSSL_PARAM *EVP_MD_settable_ctx_params(const EVP_MD *md); +const OSSL_PARAM *EVP_MD_gettable_ctx_params(const EVP_MD *md); +const OSSL_PARAM *EVP_MD_CTX_settable_params(EVP_MD_CTX *ctx); +const OSSL_PARAM *EVP_MD_CTX_gettable_params(EVP_MD_CTX *ctx); int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); EVP_MD_CTX *EVP_MD_CTX_new(void); int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); @@ -541,10 +700,13 @@ void EVP_MD_CTX_free(EVP_MD_CTX *ctx); # define EVP_MD_CTX_create() EVP_MD_CTX_new() # define EVP_MD_CTX_init(ctx) EVP_MD_CTX_reset((ctx)) # define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx)) +__owur EVP_MD_CTX *EVP_MD_CTX_dup(const EVP_MD_CTX *in); __owur int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); +__owur int EVP_DigestInit_ex2(EVP_MD_CTX *ctx, const EVP_MD *type, + const OSSL_PARAM params[]); __owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); __owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, @@ -554,6 +716,9 @@ __owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, __owur int EVP_Digest(const void *data, size_t count, unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl); +__owur int EVP_Q_digest(OSSL_LIB_CTX *libctx, const char *name, + const char *propq, const void *data, size_t datalen, + unsigned char *md, size_t *mdlen); __owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); __owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); @@ -562,6 +727,12 @@ __owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, __owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t len); +__owur EVP_MD *EVP_MD_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); + +int EVP_MD_up_ref(EVP_MD *md); +void EVP_MD_free(EVP_MD *md); + int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, const char *prompt, int verify); @@ -583,6 +754,10 @@ __owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); +__owur int EVP_EncryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, + const unsigned char *iv, + const OSSL_PARAM params[]); /*__owur*/ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); /*__owur*/ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, @@ -596,6 +771,10 @@ __owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); +__owur int EVP_DecryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, + const unsigned char *iv, + const OSSL_PARAM params[]); /*__owur*/ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); __owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, @@ -610,6 +789,9 @@ __owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc); +__owur int EVP_CipherInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv, + int enc, const OSSL_PARAM params[]); __owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); __owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, @@ -619,6 +801,9 @@ __owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, __owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, EVP_PKEY *pkey); +__owur int EVP_SignFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, + EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, + const char *propq); __owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen, const unsigned char *tbs, @@ -626,24 +811,36 @@ __owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, __owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, unsigned int siglen, EVP_PKEY *pkey); +__owur int EVP_VerifyFinal_ex(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); __owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, size_t siglen, const unsigned char *tbs, size_t tbslen); +int EVP_DigestSignInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const char *mdname, OSSL_LIB_CTX *libctx, + const char *props, EVP_PKEY *pkey, + const OSSL_PARAM params[]); /*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen); +int EVP_DigestVerifyInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const char *mdname, OSSL_LIB_CTX *libctx, + const char *props, EVP_PKEY *pkey, + const OSSL_PARAM params[]); __owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, size_t siglen); -# ifndef OPENSSL_NO_RSA __owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *ek, int ekl, const unsigned char *iv, EVP_PKEY *priv); @@ -653,11 +850,10 @@ __owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek, int *ekl, unsigned char *iv, EVP_PKEY **pubk, int npubk); __owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); -# endif EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); -int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); +int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, const EVP_ENCODE_CTX *sctx); int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, @@ -672,7 +868,7 @@ int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c) # define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c) # endif @@ -683,6 +879,14 @@ int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); +int EVP_CIPHER_get_params(EVP_CIPHER *cipher, OSSL_PARAM params[]); +int EVP_CIPHER_CTX_set_params(EVP_CIPHER_CTX *ctx, const OSSL_PARAM params[]); +int EVP_CIPHER_CTX_get_params(EVP_CIPHER_CTX *ctx, OSSL_PARAM params[]); +const OSSL_PARAM *EVP_CIPHER_gettable_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_settable_ctx_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_gettable_ctx_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_CTX_settable_params(EVP_CIPHER_CTX *ctx); +const OSSL_PARAM *EVP_CIPHER_CTX_gettable_params(EVP_CIPHER_CTX *ctx); const BIO_METHOD *BIO_f_md(void); const BIO_METHOD *BIO_f_base64(void); @@ -719,6 +923,7 @@ const EVP_MD *EVP_sha3_384(void); const EVP_MD *EVP_sha3_512(void); const EVP_MD *EVP_shake128(void); const EVP_MD *EVP_shake256(void); + # ifndef OPENSSL_NO_MDC2 const EVP_MD *EVP_mdc2(void); # endif @@ -939,7 +1144,7 @@ const EVP_CIPHER *EVP_sm4_ofb(void); const EVP_CIPHER *EVP_sm4_ctr(void); # endif -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OPENSSL_add_all_algorithms_conf() \ OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ | OPENSSL_INIT_ADD_ALL_DIGESTS \ @@ -974,6 +1179,9 @@ void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, void EVP_CIPHER_do_all_sorted(void (*fn) (const EVP_CIPHER *ciph, const char *from, const char *to, void *x), void *arg); +void EVP_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_CIPHER *cipher, void *arg), + void *arg); void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, const char *from, const char *to, void *x), @@ -981,81 +1189,237 @@ void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, void EVP_MD_do_all_sorted(void (*fn) (const EVP_MD *ciph, const char *from, const char *to, void *x), void *arg); +void EVP_MD_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_MD *md, void *arg), + void *arg); -int EVP_PKEY_decrypt_old(unsigned char *dec_key, - const unsigned char *enc_key, int enc_key_len, - EVP_PKEY *private_key); -int EVP_PKEY_encrypt_old(unsigned char *enc_key, - const unsigned char *key, int key_len, - EVP_PKEY *pub_key); +/* MAC stuff */ + +EVP_MAC *EVP_MAC_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); +int EVP_MAC_up_ref(EVP_MAC *mac); +void EVP_MAC_free(EVP_MAC *mac); +const char *EVP_MAC_get0_name(const EVP_MAC *mac); +const char *EVP_MAC_get0_description(const EVP_MAC *mac); +int EVP_MAC_is_a(const EVP_MAC *mac, const char *name); +const OSSL_PROVIDER *EVP_MAC_get0_provider(const EVP_MAC *mac); +int EVP_MAC_get_params(EVP_MAC *mac, OSSL_PARAM params[]); + +EVP_MAC_CTX *EVP_MAC_CTX_new(EVP_MAC *mac); +void EVP_MAC_CTX_free(EVP_MAC_CTX *ctx); +EVP_MAC_CTX *EVP_MAC_CTX_dup(const EVP_MAC_CTX *src); +EVP_MAC *EVP_MAC_CTX_get0_mac(EVP_MAC_CTX *ctx); +int EVP_MAC_CTX_get_params(EVP_MAC_CTX *ctx, OSSL_PARAM params[]); +int EVP_MAC_CTX_set_params(EVP_MAC_CTX *ctx, const OSSL_PARAM params[]); + +size_t EVP_MAC_CTX_get_mac_size(EVP_MAC_CTX *ctx); +size_t EVP_MAC_CTX_get_block_size(EVP_MAC_CTX *ctx); +unsigned char *EVP_Q_mac(OSSL_LIB_CTX *libctx, const char *name, const char *propq, + const char *subalg, const OSSL_PARAM *params, + const void *key, size_t keylen, + const unsigned char *data, size_t datalen, + unsigned char *out, size_t outsize, size_t *outlen); +int EVP_MAC_init(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen, + const OSSL_PARAM params[]); +int EVP_MAC_update(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen); +int EVP_MAC_final(EVP_MAC_CTX *ctx, + unsigned char *out, size_t *outl, size_t outsize); +int EVP_MAC_finalXOF(EVP_MAC_CTX *ctx, unsigned char *out, size_t outsize); +const OSSL_PARAM *EVP_MAC_gettable_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_gettable_ctx_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_settable_ctx_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_CTX_gettable_params(EVP_MAC_CTX *ctx); +const OSSL_PARAM *EVP_MAC_CTX_settable_params(EVP_MAC_CTX *ctx); + +void EVP_MAC_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_MAC *mac, void *arg), + void *arg); +int EVP_MAC_names_do_all(const EVP_MAC *mac, + void (*fn)(const char *name, void *data), + void *data); + +/* RAND stuff */ +EVP_RAND *EVP_RAND_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); +int EVP_RAND_up_ref(EVP_RAND *rand); +void EVP_RAND_free(EVP_RAND *rand); +const char *EVP_RAND_get0_name(const EVP_RAND *rand); +const char *EVP_RAND_get0_description(const EVP_RAND *md); +int EVP_RAND_is_a(const EVP_RAND *rand, const char *name); +const OSSL_PROVIDER *EVP_RAND_get0_provider(const EVP_RAND *rand); +int EVP_RAND_get_params(EVP_RAND *rand, OSSL_PARAM params[]); + +EVP_RAND_CTX *EVP_RAND_CTX_new(EVP_RAND *rand, EVP_RAND_CTX *parent); +int EVP_RAND_CTX_up_ref(EVP_RAND_CTX *ctx); +void EVP_RAND_CTX_free(EVP_RAND_CTX *ctx); +EVP_RAND *EVP_RAND_CTX_get0_rand(EVP_RAND_CTX *ctx); +int EVP_RAND_CTX_get_params(EVP_RAND_CTX *ctx, OSSL_PARAM params[]); +int EVP_RAND_CTX_set_params(EVP_RAND_CTX *ctx, const OSSL_PARAM params[]); +const OSSL_PARAM *EVP_RAND_gettable_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_gettable_ctx_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_settable_ctx_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_CTX_gettable_params(EVP_RAND_CTX *ctx); +const OSSL_PARAM *EVP_RAND_CTX_settable_params(EVP_RAND_CTX *ctx); + +void EVP_RAND_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_RAND *rand, void *arg), + void *arg); +int EVP_RAND_names_do_all(const EVP_RAND *rand, + void (*fn)(const char *name, void *data), + void *data); + +__owur int EVP_RAND_instantiate(EVP_RAND_CTX *ctx, unsigned int strength, + int prediction_resistance, + const unsigned char *pstr, size_t pstr_len, + const OSSL_PARAM params[]); +int EVP_RAND_uninstantiate(EVP_RAND_CTX *ctx); +__owur int EVP_RAND_generate(EVP_RAND_CTX *ctx, unsigned char *out, + size_t outlen, unsigned int strength, + int prediction_resistance, + const unsigned char *addin, size_t addin_len); +int EVP_RAND_reseed(EVP_RAND_CTX *ctx, int prediction_resistance, + const unsigned char *ent, size_t ent_len, + const unsigned char *addin, size_t addin_len); +__owur int EVP_RAND_nonce(EVP_RAND_CTX *ctx, unsigned char *out, size_t outlen); +__owur int EVP_RAND_enable_locking(EVP_RAND_CTX *ctx); + +int EVP_RAND_verify_zeroization(EVP_RAND_CTX *ctx); +unsigned int EVP_RAND_get_strength(EVP_RAND_CTX *ctx); +int EVP_RAND_get_state(EVP_RAND_CTX *ctx); + +# define EVP_RAND_STATE_UNINITIALISED 0 +# define EVP_RAND_STATE_READY 1 +# define EVP_RAND_STATE_ERROR 2 + +/* PKEY stuff */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_decrypt_old(unsigned char *dec_key, + const unsigned char *enc_key, + int enc_key_len, + EVP_PKEY *private_key); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_encrypt_old(unsigned char *enc_key, + const unsigned char *key, + int key_len, EVP_PKEY *pub_key); +# endif +int EVP_PKEY_is_a(const EVP_PKEY *pkey, const char *name); +int EVP_PKEY_type_names_do_all(const EVP_PKEY *pkey, + void (*fn)(const char *name, void *data), + void *data); int EVP_PKEY_type(int type); -int EVP_PKEY_id(const EVP_PKEY *pkey); -int EVP_PKEY_base_id(const EVP_PKEY *pkey); -int EVP_PKEY_bits(const EVP_PKEY *pkey); -int EVP_PKEY_security_bits(const EVP_PKEY *pkey); -int EVP_PKEY_size(const EVP_PKEY *pkey); +int EVP_PKEY_get_id(const EVP_PKEY *pkey); +# define EVP_PKEY_id EVP_PKEY_get_id +int EVP_PKEY_get_base_id(const EVP_PKEY *pkey); +# define EVP_PKEY_base_id EVP_PKEY_get_base_id +int EVP_PKEY_get_bits(const EVP_PKEY *pkey); +# define EVP_PKEY_bits EVP_PKEY_get_bits +int EVP_PKEY_get_security_bits(const EVP_PKEY *pkey); +# define EVP_PKEY_security_bits EVP_PKEY_get_security_bits +int EVP_PKEY_get_size(const EVP_PKEY *pkey); +# define EVP_PKEY_size EVP_PKEY_get_size +int EVP_PKEY_can_sign(const EVP_PKEY *pkey); int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); -int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type); -# ifndef OPENSSL_NO_ENGINE +int EVP_PKEY_set_type_by_keymgmt(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); -# endif +# endif +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); +OSSL_DEPRECATEDIN_3_0 void *EVP_PKEY_get0(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); -# ifndef OPENSSL_NO_POLY1305 +# ifndef OPENSSL_NO_POLY1305 +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); -# endif -# ifndef OPENSSL_NO_SIPHASH +# endif +# ifndef OPENSSL_NO_SIPHASH +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); -# endif +# endif -# ifndef OPENSSL_NO_RSA struct rsa_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); -struct rsa_st *EVP_PKEY_get0_RSA(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct rsa_st *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DSA + +# ifndef OPENSSL_NO_DSA struct dsa_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); -struct dsa_st *EVP_PKEY_get0_DSA(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct dsa_st *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DH +# endif + +# ifndef OPENSSL_NO_DH struct dh_st; -int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); -struct dh_st *EVP_PKEY_get0_DH(EVP_PKEY *pkey); -struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); +OSSL_DEPRECATEDIN_3_0 const struct dh_st *EVP_PKEY_get0_DH(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); +# endif + +# ifndef OPENSSL_NO_EC struct ec_key_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); -struct ec_key_st *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct ec_key_st *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); -# endif +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ EVP_PKEY *EVP_PKEY_new(void); int EVP_PKEY_up_ref(EVP_PKEY *pkey); +EVP_PKEY *EVP_PKEY_dup(EVP_PKEY *pkey); void EVP_PKEY_free(EVP_PKEY *pkey); +const char *EVP_PKEY_get0_description(const EVP_PKEY *pkey); +const OSSL_PROVIDER *EVP_PKEY_get0_provider(const EVP_PKEY *key); EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, long length); -int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); +int i2d_PublicKey(const EVP_PKEY *a, unsigned char **pp); + +EVP_PKEY *d2i_PrivateKey_ex(int type, EVP_PKEY **a, const unsigned char **pp, + long length, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length); +EVP_PKEY *d2i_AutoPrivateKey_ex(EVP_PKEY **a, const unsigned char **pp, + long length, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, long length); -int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); +int i2d_PrivateKey(const EVP_PKEY *a, unsigned char **pp); + +int i2d_KeyParams(const EVP_PKEY *a, unsigned char **pp); +EVP_PKEY *d2i_KeyParams(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_KeyParams_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_KeyParams_bio(int type, EVP_PKEY **a, BIO *in); int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); -int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); +int EVP_PKEY_parameters_eq(const EVP_PKEY *a, const EVP_PKEY *b); +int EVP_PKEY_eq(const EVP_PKEY *a, const EVP_PKEY *b); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); +# endif int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); @@ -1063,14 +1427,43 @@ int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); +# ifndef OPENSSL_NO_STDIO +int EVP_PKEY_print_public_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_private_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_params_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +# endif int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); +int EVP_PKEY_get_default_digest_name(EVP_PKEY *pkey, + char *mdname, size_t mdname_sz); +int EVP_PKEY_digestsign_supports_digest(EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, + const char *name, const char *propq); -int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, - const unsigned char *pt, size_t ptlen); -size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *pkey, unsigned char **ppt); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * For backwards compatibility. Use EVP_PKEY_set1_encoded_public_key in + * preference + */ +# define EVP_PKEY_set1_tls_encodedpoint(pkey, pt, ptlen) \ + EVP_PKEY_set1_encoded_public_key((pkey), (pt), (ptlen)) +# endif -int EVP_CIPHER_type(const EVP_CIPHER *ctx); +int EVP_PKEY_set1_encoded_public_key(EVP_PKEY *pkey, + const unsigned char *pub, size_t publen); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * For backwards compatibility. Use EVP_PKEY_get1_encoded_public_key in + * preference + */ +# define EVP_PKEY_get1_tls_encodedpoint(pkey, ppt) \ + EVP_PKEY_get1_encoded_public_key((pkey), (ppt)) +# endif + +size_t EVP_PKEY_get1_encoded_public_key(EVP_PKEY *pkey, unsigned char **ppub); /* calls methods */ int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); @@ -1084,6 +1477,10 @@ int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); +int PKCS5_PBE_keyivgen_ex(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de, OSSL_LIB_CTX *libctx, + const char *propq); int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, const unsigned char *salt, int saltlen, int iter, int keylen, unsigned char *out); @@ -1093,16 +1490,29 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); +int PKCS5_v2_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); #ifndef OPENSSL_NO_SCRYPT int EVP_PBE_scrypt(const char *pass, size_t passlen, const unsigned char *salt, size_t saltlen, uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, unsigned char *key, size_t keylen); +int EVP_PBE_scrypt_ex(const char *pass, size_t passlen, + const unsigned char *salt, size_t saltlen, + uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, + unsigned char *key, size_t keylen, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *c, const EVP_MD *md, int en_de); +int PKCS5_v2_scrypt_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *c, const EVP_MD *md, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); #endif void PKCS5_PBE_add(void); @@ -1110,6 +1520,10 @@ void PKCS5_PBE_add(void); int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); +int EVP_PBE_CipherInit_ex(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, + ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); + /* PBE type */ /* Can appear as the outermost AlgorithmIdentifier */ @@ -1125,6 +1539,8 @@ int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, EVP_PBE_KEYGEN *keygen); int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, EVP_PBE_KEYGEN **pkeygen); +int EVP_PBE_find_ex(int type, int pbe_nid, int *pcnid, int *pmnid, + EVP_PBE_KEYGEN **pkeygen, EVP_PBE_KEYGEN_EX **pkeygen_ex); void EVP_PBE_cleanup(void); int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); @@ -1141,6 +1557,7 @@ int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); # define ASN1_PKEY_CTRL_SET1_TLS_ENCPT 0x9 # define ASN1_PKEY_CTRL_GET1_TLS_ENCPT 0xa +# define ASN1_PKEY_CTRL_CMS_IS_RI_TYPE_SUPPORTED 0xb int EVP_PKEY_asn1_get_count(void); const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); @@ -1163,7 +1580,7 @@ void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, int (*pub_decode) (EVP_PKEY *pk, - X509_PUBKEY *pub), + const X509_PUBKEY *pub), int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk), int (*pub_cmp) (const EVP_PKEY *a, @@ -1207,13 +1624,13 @@ void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, - void *asn, - X509_ALGOR *a, - ASN1_BIT_STRING *sig, + const void *data, + const X509_ALGOR *a, + const ASN1_BIT_STRING *sig, EVP_PKEY *pkey), int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, - void *asn, + const void *data, X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig)); @@ -1254,17 +1671,31 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, int (*pkey_security_bits) (const EVP_PKEY *pk)); +int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); + +int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, const void *id, int len); +int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id); +int EVP_PKEY_CTX_get1_id_len(EVP_PKEY_CTX *ctx, size_t *id_len); + +int EVP_PKEY_CTX_set_kem_op(EVP_PKEY_CTX *ctx, const char *op); + +const char *EVP_PKEY_get0_type_name(const EVP_PKEY *key); + # define EVP_PKEY_OP_UNDEFINED 0 # define EVP_PKEY_OP_PARAMGEN (1<<1) # define EVP_PKEY_OP_KEYGEN (1<<2) -# define EVP_PKEY_OP_SIGN (1<<3) -# define EVP_PKEY_OP_VERIFY (1<<4) -# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) -# define EVP_PKEY_OP_SIGNCTX (1<<6) -# define EVP_PKEY_OP_VERIFYCTX (1<<7) -# define EVP_PKEY_OP_ENCRYPT (1<<8) -# define EVP_PKEY_OP_DECRYPT (1<<9) -# define EVP_PKEY_OP_DERIVE (1<<10) +# define EVP_PKEY_OP_FROMDATA (1<<3) +# define EVP_PKEY_OP_SIGN (1<<4) +# define EVP_PKEY_OP_VERIFY (1<<5) +# define EVP_PKEY_OP_VERIFYRECOVER (1<<6) +# define EVP_PKEY_OP_SIGNCTX (1<<7) +# define EVP_PKEY_OP_VERIFYCTX (1<<8) +# define EVP_PKEY_OP_ENCRYPT (1<<9) +# define EVP_PKEY_OP_DECRYPT (1<<10) +# define EVP_PKEY_OP_DERIVE (1<<11) +# define EVP_PKEY_OP_ENCAPSULATE (1<<12) +# define EVP_PKEY_OP_DECAPSULATE (1<<13) # define EVP_PKEY_OP_TYPE_SIG \ (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ @@ -1277,44 +1708,32 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, (EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT | EVP_PKEY_OP_DERIVE) # define EVP_PKEY_OP_TYPE_GEN \ - (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) + (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) -# define EVP_PKEY_CTX_set_signature_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_MD, 0, (void *)(md)) -# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_GET_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_mac_key(ctx, key, len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)(key)) +int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, const unsigned char *key, + int keylen); # define EVP_PKEY_CTRL_MD 1 # define EVP_PKEY_CTRL_PEER_KEY 2 - -# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 -# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 - -# define EVP_PKEY_CTRL_PKCS7_SIGN 5 - # define EVP_PKEY_CTRL_SET_MAC_KEY 6 - # define EVP_PKEY_CTRL_DIGESTINIT 7 - /* Used by GOST key encryption in TLS */ # define EVP_PKEY_CTRL_SET_IV 8 - -# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 -# define EVP_PKEY_CTRL_CMS_DECRYPT 10 -# define EVP_PKEY_CTRL_CMS_SIGN 11 - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 +# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 +# define EVP_PKEY_CTRL_PKCS7_SIGN 5 +# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 +# define EVP_PKEY_CTRL_CMS_DECRYPT 10 +# define EVP_PKEY_CTRL_CMS_SIGN 11 +# endif # define EVP_PKEY_CTRL_CIPHER 12 - # define EVP_PKEY_CTRL_GET_MD 13 - # define EVP_PKEY_CTRL_SET_DIGEST_SIZE 14 +# define EVP_PKEY_CTRL_SET1_ID 15 +# define EVP_PKEY_CTRL_GET1_ID 16 +# define EVP_PKEY_CTRL_GET1_ID_LEN 17 # define EVP_PKEY_ALG_CTRL 0x1000 @@ -1323,23 +1742,53 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, * Method handles all operations: don't assume any digest related defaults. */ # define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); +OSSL_DEPRECATEDIN_3_0 EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, + const EVP_PKEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, + const EVP_PKEY_METHOD *src); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 size_t EVP_PKEY_meth_get_count(void); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); +# endif -const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); -EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); -void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, - const EVP_PKEY_METHOD *meth); -void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); -void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); -size_t EVP_PKEY_meth_get_count(void); -const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); +EVP_KEYMGMT *EVP_KEYMGMT_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_KEYMGMT_up_ref(EVP_KEYMGMT *keymgmt); +void EVP_KEYMGMT_free(EVP_KEYMGMT *keymgmt); +const OSSL_PROVIDER *EVP_KEYMGMT_get0_provider(const EVP_KEYMGMT *keymgmt); +const char *EVP_KEYMGMT_get0_name(const EVP_KEYMGMT *keymgmt); +const char *EVP_KEYMGMT_get0_description(const EVP_KEYMGMT *keymgmt); +int EVP_KEYMGMT_is_a(const EVP_KEYMGMT *keymgmt, const char *name); +void EVP_KEYMGMT_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEYMGMT *keymgmt, void *arg), + void *arg); +int EVP_KEYMGMT_names_do_all(const EVP_KEYMGMT *keymgmt, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_KEYMGMT_gettable_params(const EVP_KEYMGMT *keymgmt); +const OSSL_PARAM *EVP_KEYMGMT_settable_params(const EVP_KEYMGMT *keymgmt); +const OSSL_PARAM *EVP_KEYMGMT_gen_settable_params(const EVP_KEYMGMT *keymgmt); EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_from_name(OSSL_LIB_CTX *libctx, + const char *name, + const char *propquery); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_from_pkey(OSSL_LIB_CTX *libctx, + EVP_PKEY *pkey, const char *propquery); +EVP_PKEY_CTX *EVP_PKEY_CTX_dup(const EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_is_a(EVP_PKEY_CTX *ctx, const char *keytype); +int EVP_PKEY_CTX_get_params(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); +const OSSL_PARAM *EVP_PKEY_CTX_gettable_params(const EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_set_params(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params); +const OSSL_PARAM *EVP_PKEY_CTX_settable_params(const EVP_PKEY_CTX *ctx); int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, int cmd, int p1, void *p2); int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, @@ -1357,9 +1806,16 @@ void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key, int keylen); +EVP_PKEY *EVP_PKEY_new_raw_private_key_ex(OSSL_LIB_CTX *libctx, + const char *keytype, + const char *propq, + const unsigned char *priv, size_t len); EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e, const unsigned char *priv, size_t len); +EVP_PKEY *EVP_PKEY_new_raw_public_key_ex(OSSL_LIB_CTX *libctx, + const char *keytype, const char *propq, + const unsigned char *pub, size_t len); EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e, const unsigned char *pub, size_t len); @@ -1368,11 +1824,14 @@ int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, size_t *len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv, size_t len, const EVP_CIPHER *cipher); +# endif void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); +void *EVP_PKEY_CTX_get_data(const EVP_PKEY_CTX *ctx); EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); @@ -1380,285 +1839,333 @@ EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); +void EVP_SIGNATURE_free(EVP_SIGNATURE *signature); +int EVP_SIGNATURE_up_ref(EVP_SIGNATURE *signature); +OSSL_PROVIDER *EVP_SIGNATURE_get0_provider(const EVP_SIGNATURE *signature); +EVP_SIGNATURE *EVP_SIGNATURE_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_SIGNATURE_is_a(const EVP_SIGNATURE *signature, const char *name); +const char *EVP_SIGNATURE_get0_name(const EVP_SIGNATURE *signature); +const char *EVP_SIGNATURE_get0_description(const EVP_SIGNATURE *signature); +void EVP_SIGNATURE_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_SIGNATURE *signature, + void *data), + void *data); +int EVP_SIGNATURE_names_do_all(const EVP_SIGNATURE *signature, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_SIGNATURE_gettable_ctx_params(const EVP_SIGNATURE *sig); +const OSSL_PARAM *EVP_SIGNATURE_settable_ctx_params(const EVP_SIGNATURE *sig); + +void EVP_ASYM_CIPHER_free(EVP_ASYM_CIPHER *cipher); +int EVP_ASYM_CIPHER_up_ref(EVP_ASYM_CIPHER *cipher); +OSSL_PROVIDER *EVP_ASYM_CIPHER_get0_provider(const EVP_ASYM_CIPHER *cipher); +EVP_ASYM_CIPHER *EVP_ASYM_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_ASYM_CIPHER_is_a(const EVP_ASYM_CIPHER *cipher, const char *name); +const char *EVP_ASYM_CIPHER_get0_name(const EVP_ASYM_CIPHER *cipher); +const char *EVP_ASYM_CIPHER_get0_description(const EVP_ASYM_CIPHER *cipher); +void EVP_ASYM_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_ASYM_CIPHER *cipher, + void *arg), + void *arg); +int EVP_ASYM_CIPHER_names_do_all(const EVP_ASYM_CIPHER *cipher, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_ASYM_CIPHER_gettable_ctx_params(const EVP_ASYM_CIPHER *ciph); +const OSSL_PARAM *EVP_ASYM_CIPHER_settable_ctx_params(const EVP_ASYM_CIPHER *ciph); + +void EVP_KEM_free(EVP_KEM *wrap); +int EVP_KEM_up_ref(EVP_KEM *wrap); +OSSL_PROVIDER *EVP_KEM_get0_provider(const EVP_KEM *wrap); +EVP_KEM *EVP_KEM_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_KEM_is_a(const EVP_KEM *wrap, const char *name); +const char *EVP_KEM_get0_name(const EVP_KEM *wrap); +const char *EVP_KEM_get0_description(const EVP_KEM *wrap); +void EVP_KEM_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEM *wrap, void *arg), void *arg); +int EVP_KEM_names_do_all(const EVP_KEM *wrap, + void (*fn)(const char *name, void *data), void *data); +const OSSL_PARAM *EVP_KEM_gettable_ctx_params(const EVP_KEM *kem); +const OSSL_PARAM *EVP_KEM_settable_ctx_params(const EVP_KEM *kem); + int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_sign_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, const unsigned char *tbs, size_t tbslen); int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs, size_t tbslen); int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_recover_init_ex(EVP_PKEY_CTX *ctx, + const OSSL_PARAM params[]); int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, unsigned char *rout, size_t *routlen, const unsigned char *sig, size_t siglen); int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_encrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen); int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_decrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen); int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_derive_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_derive_set_peer_ex(EVP_PKEY_CTX *ctx, EVP_PKEY *peer, + int validate_peer); int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); +int EVP_PKEY_encapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_encapsulate(EVP_PKEY_CTX *ctx, + unsigned char *wrappedkey, size_t *wrappedkeylen, + unsigned char *genkey, size_t *genkeylen); +int EVP_PKEY_decapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_decapsulate(EVP_PKEY_CTX *ctx, + unsigned char *unwrapped, size_t *unwrappedlen, + const unsigned char *wrapped, size_t wrappedlen); + typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); +int EVP_PKEY_fromdata_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_fromdata(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey, int selection, + OSSL_PARAM param[]); +const OSSL_PARAM *EVP_PKEY_fromdata_settable(EVP_PKEY_CTX *ctx, int selection); + +int EVP_PKEY_todata(const EVP_PKEY *pkey, int selection, OSSL_PARAM **params); +int EVP_PKEY_export(const EVP_PKEY *pkey, int selection, + OSSL_CALLBACK *export_cb, void *export_cbarg); + +const OSSL_PARAM *EVP_PKEY_gettable_params(const EVP_PKEY *pkey); +int EVP_PKEY_get_params(const EVP_PKEY *pkey, OSSL_PARAM params[]); +int EVP_PKEY_get_int_param(const EVP_PKEY *pkey, const char *key_name, + int *out); +int EVP_PKEY_get_size_t_param(const EVP_PKEY *pkey, const char *key_name, + size_t *out); +int EVP_PKEY_get_bn_param(const EVP_PKEY *pkey, const char *key_name, + BIGNUM **bn); +int EVP_PKEY_get_utf8_string_param(const EVP_PKEY *pkey, const char *key_name, + char *str, size_t max_buf_sz, size_t *out_sz); +int EVP_PKEY_get_octet_string_param(const EVP_PKEY *pkey, const char *key_name, + unsigned char *buf, size_t max_buf_sz, + size_t *out_sz); + +const OSSL_PARAM *EVP_PKEY_settable_params(const EVP_PKEY *pkey); +int EVP_PKEY_set_params(EVP_PKEY *pkey, OSSL_PARAM params[]); +int EVP_PKEY_set_int_param(EVP_PKEY *pkey, const char *key_name, int in); +int EVP_PKEY_set_size_t_param(EVP_PKEY *pkey, const char *key_name, size_t in); +int EVP_PKEY_set_bn_param(EVP_PKEY *pkey, const char *key_name, + const BIGNUM *bn); +int EVP_PKEY_set_utf8_string_param(EVP_PKEY *pkey, const char *key_name, + const char *str); +int EVP_PKEY_set_octet_string_param(EVP_PKEY *pkey, const char *key_name, + const unsigned char *buf, size_t bsize); + +int EVP_PKEY_get_ec_point_conv_form(const EVP_PKEY *pkey); +int EVP_PKEY_get_field_type(const EVP_PKEY *pkey); + +EVP_PKEY *EVP_PKEY_Q_keygen(OSSL_LIB_CTX *libctx, const char *propq, + const char *type, ...); int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_generate(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_check(EVP_PKEY_CTX *ctx); int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_public_check_quick(EVP_PKEY_CTX *ctx); int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_param_check_quick(EVP_PKEY_CTX *ctx); +int EVP_PKEY_private_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_pairwise_check(EVP_PKEY_CTX *ctx); + +# define EVP_PKEY_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EVP_PKEY, l, p, newf, dupf, freef) +int EVP_PKEY_set_ex_data(EVP_PKEY *key, int idx, void *arg); +void *EVP_PKEY_get_ex_data(const EVP_PKEY *key, int idx); void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); - -void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, - int (*init) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, - int (*copy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, - void (*cleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, - int (*paramgen_init) (EVP_PKEY_CTX *ctx), - int (*paramgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, - int (*keygen_init) (EVP_PKEY_CTX *ctx), - int (*keygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, - int (*sign_init) (EVP_PKEY_CTX *ctx), - int (*sign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, - int (*verify_init) (EVP_PKEY_CTX *ctx), - int (*verify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, - int (*verify_recover_init) (EVP_PKEY_CTX - *ctx), - int (*verify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, - int (*signctx_init) (EVP_PKEY_CTX *ctx, +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, + int (*init) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_copy + (EVP_PKEY_METHOD *pmeth, int (*copy) (EVP_PKEY_CTX *dst, + const EVP_PKEY_CTX *src)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_cleanup + (EVP_PKEY_METHOD *pmeth, void (*cleanup) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_paramgen + (EVP_PKEY_METHOD *pmeth, int (*paramgen_init) (EVP_PKEY_CTX *ctx), + int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_keygen + (EVP_PKEY_METHOD *pmeth, int (*keygen_init) (EVP_PKEY_CTX *ctx), + int (*keygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_sign + (EVP_PKEY_METHOD *pmeth, int (*sign_init) (EVP_PKEY_CTX *ctx), + int (*sign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verify + (EVP_PKEY_METHOD *pmeth, int (*verify_init) (EVP_PKEY_CTX *ctx), + int (*verify) (EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verify_recover + (EVP_PKEY_METHOD *pmeth, int (*verify_recover_init) (EVP_PKEY_CTX *ctx), + int (*verify_recover) (EVP_PKEY_CTX *ctx, unsigned char *sig, + size_t *siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_signctx + (EVP_PKEY_METHOD *pmeth, int (*signctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*signctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verifyctx + (EVP_PKEY_METHOD *pmeth, int (*verifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), - int (*signctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, - int (*verifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*verifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, + int (*verifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_encrypt + (EVP_PKEY_METHOD *pmeth, int (*encrypt_init) (EVP_PKEY_CTX *ctx), + int (*encryptfn) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_decrypt + (EVP_PKEY_METHOD *pmeth, int (*decrypt_init) (EVP_PKEY_CTX *ctx), + int (*decrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_derive + (EVP_PKEY_METHOD *pmeth, int (*derive_init) (EVP_PKEY_CTX *ctx), + int (*derive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_ctrl + (EVP_PKEY_METHOD *pmeth, int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (*ctrl_str) (EVP_PKEY_CTX *ctx, const char *type, const char *value)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestsign + (EVP_PKEY_METHOD *pmeth, + int (*digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestverify + (EVP_PKEY_METHOD *pmeth, + int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_public_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_param_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digest_custom + (EVP_PKEY_METHOD *pmeth, int (*digest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_init + (const EVP_PKEY_METHOD *pmeth, int (**pinit) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_copy + (const EVP_PKEY_METHOD *pmeth, int (**pcopy) (EVP_PKEY_CTX *dst, + const EVP_PKEY_CTX *src)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_cleanup + (const EVP_PKEY_METHOD *pmeth, void (**pcleanup) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_paramgen + (const EVP_PKEY_METHOD *pmeth, int (**pparamgen_init) (EVP_PKEY_CTX *ctx), + int (**pparamgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_keygen + (const EVP_PKEY_METHOD *pmeth, int (**pkeygen_init) (EVP_PKEY_CTX *ctx), + int (**pkeygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_sign + (const EVP_PKEY_METHOD *pmeth, int (**psign_init) (EVP_PKEY_CTX *ctx), + int (**psign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify + (const EVP_PKEY_METHOD *pmeth, int (**pverify_init) (EVP_PKEY_CTX *ctx), + int (**pverify) (EVP_PKEY_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify_recover + (const EVP_PKEY_METHOD *pmeth, + int (**pverify_recover_init) (EVP_PKEY_CTX *ctx), + int (**pverify_recover) (EVP_PKEY_CTX *ctx, unsigned char *sig, + size_t *siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_signctx + (const EVP_PKEY_METHOD *pmeth, + int (**psignctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), + int (**psignctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verifyctx + (const EVP_PKEY_METHOD *pmeth, + int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), + int (**pverifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, + int siglen, EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_encrypt + (const EVP_PKEY_METHOD *pmeth, int (**pencrypt_init) (EVP_PKEY_CTX *ctx), + int (**pencryptfn) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_decrypt + (const EVP_PKEY_METHOD *pmeth, int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), + int (**pdecrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_derive + (const EVP_PKEY_METHOD *pmeth, int (**pderive_init) (EVP_PKEY_CTX *ctx), + int (**pderive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_ctrl + (const EVP_PKEY_METHOD *pmeth, + int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, void *p2), + int (**pctrl_str) (EVP_PKEY_CTX *ctx, const char *type, + const char *value)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestsign + (const EVP_PKEY_METHOD *pmeth, + int (**digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestverify + (const EVP_PKEY_METHOD *pmeth, + int (**digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_public_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_param_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digest_custom + (const EVP_PKEY_METHOD *pmeth, + int (**pdigest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)); +# endif -void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, - int (*encrypt_init) (EVP_PKEY_CTX *ctx), - int (*encryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); +void EVP_KEYEXCH_free(EVP_KEYEXCH *exchange); +int EVP_KEYEXCH_up_ref(EVP_KEYEXCH *exchange); +EVP_KEYEXCH *EVP_KEYEXCH_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +OSSL_PROVIDER *EVP_KEYEXCH_get0_provider(const EVP_KEYEXCH *exchange); +int EVP_KEYEXCH_is_a(const EVP_KEYEXCH *keyexch, const char *name); +const char *EVP_KEYEXCH_get0_name(const EVP_KEYEXCH *keyexch); +const char *EVP_KEYEXCH_get0_description(const EVP_KEYEXCH *keyexch); +void EVP_KEYEXCH_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEYEXCH *keyexch, void *data), + void *data); +int EVP_KEYEXCH_names_do_all(const EVP_KEYEXCH *keyexch, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_KEYEXCH_gettable_ctx_params(const EVP_KEYEXCH *keyexch); +const OSSL_PARAM *EVP_KEYEXCH_settable_ctx_params(const EVP_KEYEXCH *keyexch); -void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, - int (*decrypt_init) (EVP_PKEY_CTX *ctx), - int (*decrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, - int (*derive_init) (EVP_PKEY_CTX *ctx), - int (*derive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, - int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (*ctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_PKEY_meth_set_digestsign(EVP_PKEY_METHOD *pmeth, - int (*digestsign) (EVP_MD_CTX *ctx, - unsigned char *sig, - size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_digestverify(EVP_PKEY_METHOD *pmeth, - int (*digestverify) (EVP_MD_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth, - int (*digest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth, - int (**pinit) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth, - int (**pcopy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth, - void (**pcleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_get_paramgen(const EVP_PKEY_METHOD *pmeth, - int (**pparamgen_init) (EVP_PKEY_CTX *ctx), - int (**pparamgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_keygen(const EVP_PKEY_METHOD *pmeth, - int (**pkeygen_init) (EVP_PKEY_CTX *ctx), - int (**pkeygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_sign(const EVP_PKEY_METHOD *pmeth, - int (**psign_init) (EVP_PKEY_CTX *ctx), - int (**psign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_verify(const EVP_PKEY_METHOD *pmeth, - int (**pverify_init) (EVP_PKEY_CTX *ctx), - int (**pverify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_verify_recover(const EVP_PKEY_METHOD *pmeth, - int (**pverify_recover_init) (EVP_PKEY_CTX - *ctx), - int (**pverify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_signctx(const EVP_PKEY_METHOD *pmeth, - int (**psignctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (**psignctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_verifyctx(const EVP_PKEY_METHOD *pmeth, - int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (**pverifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_encrypt(const EVP_PKEY_METHOD *pmeth, - int (**pencrypt_init) (EVP_PKEY_CTX *ctx), - int (**pencryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_get_decrypt(const EVP_PKEY_METHOD *pmeth, - int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), - int (**pdecrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_get_derive(const EVP_PKEY_METHOD *pmeth, - int (**pderive_init) (EVP_PKEY_CTX *ctx), - int (**pderive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth, - int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (**pctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_PKEY_meth_get_digestsign(EVP_PKEY_METHOD *pmeth, - int (**digestsign) (EVP_MD_CTX *ctx, - unsigned char *sig, - size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_digestverify(EVP_PKEY_METHOD *pmeth, - int (**digestverify) (EVP_MD_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth, - int (**pdigest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); void EVP_add_alg_module(void); +int EVP_PKEY_CTX_set_group_name(EVP_PKEY_CTX *ctx, const char *name); +int EVP_PKEY_CTX_get_group_name(EVP_PKEY_CTX *ctx, char *name, size_t namelen); +int EVP_PKEY_get_group_name(const EVP_PKEY *pkey, char *name, size_t name_sz, + size_t *gname_len); + +OSSL_LIB_CTX *EVP_PKEY_CTX_get0_libctx(EVP_PKEY_CTX *ctx); +const char *EVP_PKEY_CTX_get0_propq(const EVP_PKEY_CTX *ctx); +const OSSL_PROVIDER *EVP_PKEY_CTX_get0_provider(const EVP_PKEY_CTX *ctx); # ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evperr.h index b4ea90ae..a5053f6c 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evperr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evperr.h @@ -2,190 +2,117 @@ * Generated by util/mkerr.pl DO NOT EDIT * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EVPERR_H -# define HEADER_EVPERR_H +#ifndef OPENSSL_EVPERR_H +# define OPENSSL_EVPERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EVP_strings(void); -/* - * EVP function codes. - */ -# define EVP_F_AESNI_INIT_KEY 165 -# define EVP_F_AESNI_XTS_INIT_KEY 207 -# define EVP_F_AES_GCM_CTRL 196 -# define EVP_F_AES_INIT_KEY 133 -# define EVP_F_AES_OCB_CIPHER 169 -# define EVP_F_AES_T4_INIT_KEY 178 -# define EVP_F_AES_T4_XTS_INIT_KEY 208 -# define EVP_F_AES_WRAP_CIPHER 170 -# define EVP_F_AES_XTS_INIT_KEY 209 -# define EVP_F_ALG_MODULE_INIT 177 -# define EVP_F_ARIA_CCM_INIT_KEY 175 -# define EVP_F_ARIA_GCM_CTRL 197 -# define EVP_F_ARIA_GCM_INIT_KEY 176 -# define EVP_F_ARIA_INIT_KEY 185 -# define EVP_F_B64_NEW 198 -# define EVP_F_CAMELLIA_INIT_KEY 159 -# define EVP_F_CHACHA20_POLY1305_CTRL 182 -# define EVP_F_CMLL_T4_INIT_KEY 179 -# define EVP_F_DES_EDE3_WRAP_CIPHER 171 -# define EVP_F_DO_SIGVER_INIT 161 -# define EVP_F_ENC_NEW 199 -# define EVP_F_EVP_CIPHERINIT_EX 123 -# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 204 -# define EVP_F_EVP_CIPHER_CTX_COPY 163 -# define EVP_F_EVP_CIPHER_CTX_CTRL 124 -# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 -# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 205 -# define EVP_F_EVP_DECRYPTFINAL_EX 101 -# define EVP_F_EVP_DECRYPTUPDATE 166 -# define EVP_F_EVP_DIGESTFINALXOF 174 -# define EVP_F_EVP_DIGESTINIT_EX 128 -# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 219 -# define EVP_F_EVP_ENCRYPTFINAL_EX 127 -# define EVP_F_EVP_ENCRYPTUPDATE 167 -# define EVP_F_EVP_MD_CTX_COPY_EX 110 -# define EVP_F_EVP_MD_SIZE 162 -# define EVP_F_EVP_OPENINIT 102 -# define EVP_F_EVP_PBE_ALG_ADD 115 -# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 -# define EVP_F_EVP_PBE_CIPHERINIT 116 -# define EVP_F_EVP_PBE_SCRYPT 181 -# define EVP_F_EVP_PKCS82PKEY 111 -# define EVP_F_EVP_PKEY2PKCS8 113 -# define EVP_F_EVP_PKEY_ASN1_ADD0 188 -# define EVP_F_EVP_PKEY_CHECK 186 -# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 -# define EVP_F_EVP_PKEY_CTX_CTRL 137 -# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 -# define EVP_F_EVP_PKEY_CTX_DUP 156 -# define EVP_F_EVP_PKEY_CTX_MD 168 -# define EVP_F_EVP_PKEY_DECRYPT 104 -# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 -# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 -# define EVP_F_EVP_PKEY_DERIVE 153 -# define EVP_F_EVP_PKEY_DERIVE_INIT 154 -# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 -# define EVP_F_EVP_PKEY_ENCRYPT 105 -# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 -# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 -# define EVP_F_EVP_PKEY_GET0_DH 119 -# define EVP_F_EVP_PKEY_GET0_DSA 120 -# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 -# define EVP_F_EVP_PKEY_GET0_HMAC 183 -# define EVP_F_EVP_PKEY_GET0_POLY1305 184 -# define EVP_F_EVP_PKEY_GET0_RSA 121 -# define EVP_F_EVP_PKEY_GET0_SIPHASH 172 -# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 202 -# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 203 -# define EVP_F_EVP_PKEY_KEYGEN 146 -# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 -# define EVP_F_EVP_PKEY_METH_ADD0 194 -# define EVP_F_EVP_PKEY_METH_NEW 195 -# define EVP_F_EVP_PKEY_NEW 106 -# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 193 -# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 191 -# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 192 -# define EVP_F_EVP_PKEY_PARAMGEN 148 -# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 -# define EVP_F_EVP_PKEY_PARAM_CHECK 189 -# define EVP_F_EVP_PKEY_PUBLIC_CHECK 190 -# define EVP_F_EVP_PKEY_SET1_ENGINE 187 -# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 206 -# define EVP_F_EVP_PKEY_SIGN 140 -# define EVP_F_EVP_PKEY_SIGN_INIT 141 -# define EVP_F_EVP_PKEY_VERIFY 142 -# define EVP_F_EVP_PKEY_VERIFY_INIT 143 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 -# define EVP_F_EVP_SIGNFINAL 107 -# define EVP_F_EVP_VERIFYFINAL 108 -# define EVP_F_INT_CTX_NEW 157 -# define EVP_F_OK_NEW 200 -# define EVP_F_PKCS5_PBE_KEYIVGEN 117 -# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 -# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 -# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 180 -# define EVP_F_PKEY_SET_TYPE 158 -# define EVP_F_RC2_MAGIC_TO_METH 109 -# define EVP_F_RC5_CTRL 125 -# define EVP_F_R_32_12_16_INIT_KEY 242 -# define EVP_F_S390X_AES_GCM_CTRL 201 -# define EVP_F_UPDATE 173 /* * EVP reason codes. */ # define EVP_R_AES_KEY_SETUP_FAILED 143 # define EVP_R_ARIA_KEY_SETUP_FAILED 176 +# define EVP_R_BAD_ALGORITHM_NAME 200 # define EVP_R_BAD_DECRYPT 100 # define EVP_R_BAD_KEY_LENGTH 195 # define EVP_R_BUFFER_TOO_SMALL 155 +# define EVP_R_CACHE_CONSTANTS_FAILED 225 # define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 +# define EVP_R_CANNOT_GET_PARAMETERS 197 +# define EVP_R_CANNOT_SET_PARAMETERS 198 +# define EVP_R_CIPHER_NOT_GCM_MODE 184 # define EVP_R_CIPHER_PARAMETER_ERROR 122 # define EVP_R_COMMAND_NOT_SUPPORTED 147 +# define EVP_R_CONFLICTING_ALGORITHM_NAME 201 # define EVP_R_COPY_ERROR 173 # define EVP_R_CTRL_NOT_IMPLEMENTED 132 # define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 # define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 # define EVP_R_DECODE_ERROR 114 +# define EVP_R_DEFAULT_QUERY_PARSE_ERROR 210 # define EVP_R_DIFFERENT_KEY_TYPES 101 # define EVP_R_DIFFERENT_PARAMETERS 153 # define EVP_R_ERROR_LOADING_SECTION 165 -# define EVP_R_ERROR_SETTING_FIPS_MODE 166 # define EVP_R_EXPECTING_AN_HMAC_KEY 174 # define EVP_R_EXPECTING_AN_RSA_KEY 127 # define EVP_R_EXPECTING_A_DH_KEY 128 # define EVP_R_EXPECTING_A_DSA_KEY 129 +# define EVP_R_EXPECTING_A_ECX_KEY 219 # define EVP_R_EXPECTING_A_EC_KEY 142 # define EVP_R_EXPECTING_A_POLY1305_KEY 164 # define EVP_R_EXPECTING_A_SIPHASH_KEY 175 -# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 +# define EVP_R_FINAL_ERROR 188 +# define EVP_R_GENERATE_ERROR 214 # define EVP_R_GET_RAW_KEY_FAILED 182 # define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 +# define EVP_R_INACCESSIBLE_DOMAIN_PARAMETERS 204 +# define EVP_R_INACCESSIBLE_KEY 203 # define EVP_R_INITIALIZATION_ERROR 134 # define EVP_R_INPUT_NOT_INITIALIZED 111 +# define EVP_R_INVALID_CUSTOM_LENGTH 185 # define EVP_R_INVALID_DIGEST 152 -# define EVP_R_INVALID_FIPS_MODE 168 # define EVP_R_INVALID_IV_LENGTH 194 # define EVP_R_INVALID_KEY 163 # define EVP_R_INVALID_KEY_LENGTH 130 +# define EVP_R_INVALID_LENGTH 221 +# define EVP_R_INVALID_NULL_ALGORITHM 218 # define EVP_R_INVALID_OPERATION 148 -# define EVP_R_KEYGEN_FAILURE 120 +# define EVP_R_INVALID_PROVIDER_FUNCTIONS 193 +# define EVP_R_INVALID_SALT_LENGTH 186 +# define EVP_R_INVALID_SECRET_LENGTH 223 +# define EVP_R_INVALID_SEED_LENGTH 220 +# define EVP_R_INVALID_VALUE 222 +# define EVP_R_KEYMGMT_EXPORT_FAILURE 205 # define EVP_R_KEY_SETUP_FAILED 180 +# define EVP_R_LOCKING_NOT_SUPPORTED 213 # define EVP_R_MEMORY_LIMIT_EXCEEDED 172 # define EVP_R_MESSAGE_DIGEST_IS_NULL 159 # define EVP_R_METHOD_NOT_SUPPORTED 144 # define EVP_R_MISSING_PARAMETERS 103 +# define EVP_R_NOT_ABLE_TO_COPY_CTX 190 # define EVP_R_NOT_XOF_OR_INVALID_LENGTH 178 # define EVP_R_NO_CIPHER_SET 131 # define EVP_R_NO_DEFAULT_DIGEST 158 # define EVP_R_NO_DIGEST_SET 139 +# define EVP_R_NO_IMPORT_FUNCTION 206 +# define EVP_R_NO_KEYMGMT_AVAILABLE 199 +# define EVP_R_NO_KEYMGMT_PRESENT 196 # define EVP_R_NO_KEY_SET 154 # define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_NULL_MAC_PKEY_CTX 208 # define EVP_R_ONLY_ONESHOT_SUPPORTED 177 +# define EVP_R_OPERATION_NOT_INITIALIZED 151 # define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 -# define EVP_R_OPERATON_NOT_INITIALIZED 151 -# define EVP_R_OUTPUT_WOULD_OVERFLOW 184 +# define EVP_R_OUTPUT_WOULD_OVERFLOW 202 +# define EVP_R_PARAMETER_TOO_LARGE 187 # define EVP_R_PARTIALLY_OVERLAPPING 162 # define EVP_R_PBKDF2_ERROR 181 # define EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 179 # define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 # define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 # define EVP_R_PUBLIC_KEY_NOT_RSA 106 +# define EVP_R_SETTING_XOF_FAILED 227 +# define EVP_R_SET_DEFAULT_PROPERTY_FAILURE 209 +# define EVP_R_TOO_MANY_RECORDS 183 +# define EVP_R_UNABLE_TO_ENABLE_LOCKING 212 +# define EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE 215 +# define EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH 216 +# define EVP_R_UNABLE_TO_LOCK_CONTEXT 211 +# define EVP_R_UNABLE_TO_SET_CALLBACKS 217 # define EVP_R_UNKNOWN_CIPHER 160 # define EVP_R_UNKNOWN_DIGEST 161 +# define EVP_R_UNKNOWN_KEY_TYPE 207 # define EVP_R_UNKNOWN_OPTION 169 # define EVP_R_UNKNOWN_PBE_ALGORITHM 121 # define EVP_R_UNSUPPORTED_ALGORITHM 156 @@ -193,12 +120,15 @@ int ERR_load_EVP_strings(void); # define EVP_R_UNSUPPORTED_KEYLENGTH 123 # define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 # define EVP_R_UNSUPPORTED_KEY_SIZE 108 +# define EVP_R_UNSUPPORTED_KEY_TYPE 224 # define EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS 135 # define EVP_R_UNSUPPORTED_PRF 125 # define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 # define EVP_R_UNSUPPORTED_SALT_TYPE 126 +# define EVP_R_UPDATE_ERROR 189 # define EVP_R_WRAP_MODE_NOT_ALLOWED 170 # define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 -# define EVP_R_XTS_DUPLICATED_KEYS 183 +# define EVP_R_XTS_DATA_UNIT_IS_TOO_LARGE 191 +# define EVP_R_XTS_DUPLICATED_KEYS 192 #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fips_names.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fips_names.h new file mode 100644 index 00000000..5c77f6d6 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fips_names.h @@ -0,0 +1,77 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPS_NAMES_H +# define OPENSSL_FIPS_NAMES_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Parameter names that the FIPS Provider defines + */ + +/* + * The calculated MAC of the module file (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_MODULE_MAC "module-mac" +/* + * A version number for the fips install process (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_VERSION "install-version" +/* + * The calculated MAC of the install status indicator (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_MAC "install-mac" +/* + * The install status indicator (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_STATUS "install-status" + +/* + * A boolean that determines if the FIPS conditional test errors result in + * the module entering an error state. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_CONDITIONAL_ERRORS "conditional-errors" + +/* + * A boolean that determines if the runtime FIPS security checks are performed. + * This is enabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_SECURITY_CHECKS "security-checks" + +/* + * A boolean that determines if the runtime FIPS check for TLS1_PRF EMS is performed. + * This is disabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" + +/* + * A boolean that determines if truncated digests can be used with Hash and HMAC + * DRBGs. FIPS 140-3 IG D.R disallows such use for efficiency rather than + * security reasons. + * This is disabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_FIPS_NAMES_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h new file mode 100644 index 00000000..42ba014b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h @@ -0,0 +1,36 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/fipskey.h.in + * + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPSKEY_H +# define OPENSSL_FIPSKEY_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * The FIPS validation HMAC key, usable as an array initializer. + */ +#define FIPS_KEY_ELEMENTS \ + 0xf4, 0x55, 0x66, 0x50, 0xac, 0x31, 0xd3, 0x54, 0x61, 0x61, 0x0b, 0xac, 0x4e, 0xd8, 0x1b, 0x1a, 0x18, 0x1b, 0x2d, 0x8a, 0x43, 0xea, 0x28, 0x54, 0xcb, 0xae, 0x22, 0xca, 0x74, 0x56, 0x08, 0x13 + +/* + * The FIPS validation key, as a string. + */ +#define FIPS_KEY_STRING "f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h.in new file mode 100644 index 00000000..56b947e8 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h.in @@ -0,0 +1,35 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPSKEY_H +# define OPENSSL_FIPSKEY_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * The FIPS validation HMAC key, usable as an array initializer. + */ +#define FIPS_KEY_ELEMENTS \ + {- join(', ', map { "0x$_" } unpack("(A2)*", $config{FIPSKEY})) -} + +/* + * The FIPS validation key, as a string. + */ +#define FIPS_KEY_STRING "{- $config{FIPSKEY} -}" + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hmac.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hmac.h index 458efc1d..f9e1bff3 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hmac.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hmac.h @@ -1,51 +1,62 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_HMAC_H -# define HEADER_HMAC_H +#ifndef OPENSSL_HMAC_H +# define OPENSSL_HMAC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_HMAC_H +# endif # include # include -# if OPENSSL_API_COMPAT < 0x10200000L -# define HMAC_MAX_MD_CBLOCK 128 /* Deprecated */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HMAC_MAX_MD_CBLOCK 200 /* Deprecated */ # endif -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -size_t HMAC_size(const HMAC_CTX *e); -HMAC_CTX *HMAC_CTX_new(void); -int HMAC_CTX_reset(HMAC_CTX *ctx); -void HMAC_CTX_free(HMAC_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 size_t HMAC_size(const HMAC_CTX *e); +OSSL_DEPRECATEDIN_3_0 HMAC_CTX *HMAC_CTX_new(void); +OSSL_DEPRECATEDIN_3_0 int HMAC_CTX_reset(HMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void HMAC_CTX_free(HMAC_CTX *ctx); +# endif +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur int HMAC_Init(HMAC_CTX *ctx, + const void *key, int len, + const EVP_MD *md); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +OSSL_DEPRECATEDIN_3_0 int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, + unsigned int *len); +OSSL_DEPRECATEDIN_3_0 __owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); +OSSL_DEPRECATEDIN_3_0 void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); +# endif -DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md)) - -/*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md, ENGINE *impl); -/*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, - size_t len); -/*__owur*/ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, - unsigned int *len); unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, - const unsigned char *d, size_t n, unsigned char *md, - unsigned int *md_len); -__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); + const unsigned char *data, size_t data_len, + unsigned char *md, unsigned int *md_len); -void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); -const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); - -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/http.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/http.h new file mode 100644 index 00000000..f7ab2142 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/http.h @@ -0,0 +1,109 @@ +/* + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Siemens AG 2018-2020 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_HTTP_H +# define OPENSSL_HTTP_H +# pragma once + +# include + +# include +# include +# include + + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_HTTP_NAME "http" +# define OSSL_HTTPS_NAME "https" +# define OSSL_HTTP_PREFIX OSSL_HTTP_NAME"://" +# define OSSL_HTTPS_PREFIX OSSL_HTTPS_NAME"://" +# define OSSL_HTTP_PORT "80" +# define OSSL_HTTPS_PORT "443" +# define OPENSSL_NO_PROXY "NO_PROXY" +# define OPENSSL_HTTP_PROXY "HTTP_PROXY" +# define OPENSSL_HTTPS_PROXY "HTTPS_PROXY" + +#define OSSL_HTTP_DEFAULT_MAX_LINE_LEN (4 * 1024) +#define OSSL_HTTP_DEFAULT_MAX_RESP_LEN (100 * 1024) + +/* Low-level HTTP API */ +OSSL_HTTP_REQ_CTX *OSSL_HTTP_REQ_CTX_new(BIO *wbio, BIO *rbio, int buf_size); +void OSSL_HTTP_REQ_CTX_free(OSSL_HTTP_REQ_CTX *rctx); +int OSSL_HTTP_REQ_CTX_set_request_line(OSSL_HTTP_REQ_CTX *rctx, int method_POST, + const char *server, const char *port, + const char *path); +int OSSL_HTTP_REQ_CTX_add1_header(OSSL_HTTP_REQ_CTX *rctx, + const char *name, const char *value); +int OSSL_HTTP_REQ_CTX_set_expected(OSSL_HTTP_REQ_CTX *rctx, + const char *content_type, int asn1, + int timeout, int keep_alive); +int OSSL_HTTP_REQ_CTX_set1_req(OSSL_HTTP_REQ_CTX *rctx, const char *content_type, + const ASN1_ITEM *it, const ASN1_VALUE *req); +int OSSL_HTTP_REQ_CTX_nbio(OSSL_HTTP_REQ_CTX *rctx); +int OSSL_HTTP_REQ_CTX_nbio_d2i(OSSL_HTTP_REQ_CTX *rctx, + ASN1_VALUE **pval, const ASN1_ITEM *it); +BIO *OSSL_HTTP_REQ_CTX_exchange(OSSL_HTTP_REQ_CTX *rctx); +BIO *OSSL_HTTP_REQ_CTX_get0_mem_bio(const OSSL_HTTP_REQ_CTX *rctx); +size_t OSSL_HTTP_REQ_CTX_get_resp_len(const OSSL_HTTP_REQ_CTX *rctx); +void OSSL_HTTP_REQ_CTX_set_max_response_length(OSSL_HTTP_REQ_CTX *rctx, + unsigned long len); +int OSSL_HTTP_is_alive(const OSSL_HTTP_REQ_CTX *rctx); + +/* High-level HTTP API */ +typedef BIO *(*OSSL_HTTP_bio_cb_t)(BIO *bio, void *arg, int connect, int detail); +OSSL_HTTP_REQ_CTX *OSSL_HTTP_open(const char *server, const char *port, + const char *proxy, const char *no_proxy, + int use_ssl, BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, int overall_timeout); +int OSSL_HTTP_proxy_connect(BIO *bio, const char *server, const char *port, + const char *proxyuser, const char *proxypass, + int timeout, BIO *bio_err, const char *prog); +int OSSL_HTTP_set1_request(OSSL_HTTP_REQ_CTX *rctx, const char *path, + const STACK_OF(CONF_VALUE) *headers, + const char *content_type, BIO *req, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout, int keep_alive); +BIO *OSSL_HTTP_exchange(OSSL_HTTP_REQ_CTX *rctx, char **redirection_url); +BIO *OSSL_HTTP_get(const char *url, const char *proxy, const char *no_proxy, + BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, const STACK_OF(CONF_VALUE) *headers, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout); +BIO *OSSL_HTTP_transfer(OSSL_HTTP_REQ_CTX **prctx, + const char *server, const char *port, + const char *path, int use_ssl, + const char *proxy, const char *no_proxy, + BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, const STACK_OF(CONF_VALUE) *headers, + const char *content_type, BIO *req, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout, int keep_alive); +int OSSL_HTTP_close(OSSL_HTTP_REQ_CTX *rctx, int ok); + +/* Auxiliary functions */ +int OSSL_parse_url(const char *url, char **pscheme, char **puser, char **phost, + char **pport, int *pport_num, + char **ppath, char **pquery, char **pfrag); +int OSSL_HTTP_parse_url(const char *url, int *pssl, char **puser, char **phost, + char **pport, int *pport_num, + char **ppath, char **pquery, char **pfrag); +const char *OSSL_HTTP_adapt_proxy(const char *proxy, const char *no_proxy, + const char *server, int use_ssl); + +# ifdef __cplusplus +} +# endif +#endif /* !defined(OPENSSL_HTTP_H) */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/httperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/httperr.h new file mode 100644 index 00000000..ee089592 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/httperr.h @@ -0,0 +1,55 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_HTTPERR_H +# define OPENSSL_HTTPERR_H +# pragma once + +# include +# include +# include + + + +/* + * HTTP reason codes. + */ +# define HTTP_R_ASN1_LEN_EXCEEDS_MAX_RESP_LEN 108 +# define HTTP_R_CONNECT_FAILURE 100 +# define HTTP_R_ERROR_PARSING_ASN1_LENGTH 109 +# define HTTP_R_ERROR_PARSING_CONTENT_LENGTH 119 +# define HTTP_R_ERROR_PARSING_URL 101 +# define HTTP_R_ERROR_RECEIVING 103 +# define HTTP_R_ERROR_SENDING 102 +# define HTTP_R_FAILED_READING_DATA 128 +# define HTTP_R_HEADER_PARSE_ERROR 126 +# define HTTP_R_INCONSISTENT_CONTENT_LENGTH 120 +# define HTTP_R_INVALID_PORT_NUMBER 123 +# define HTTP_R_INVALID_URL_PATH 125 +# define HTTP_R_INVALID_URL_SCHEME 124 +# define HTTP_R_MAX_RESP_LEN_EXCEEDED 117 +# define HTTP_R_MISSING_ASN1_ENCODING 110 +# define HTTP_R_MISSING_CONTENT_TYPE 121 +# define HTTP_R_MISSING_REDIRECT_LOCATION 111 +# define HTTP_R_RECEIVED_ERROR 105 +# define HTTP_R_RECEIVED_WRONG_HTTP_VERSION 106 +# define HTTP_R_REDIRECTION_FROM_HTTPS_TO_HTTP 112 +# define HTTP_R_REDIRECTION_NOT_ENABLED 116 +# define HTTP_R_RESPONSE_LINE_TOO_LONG 113 +# define HTTP_R_RESPONSE_PARSE_ERROR 104 +# define HTTP_R_RETRY_TIMEOUT 129 +# define HTTP_R_SERVER_CANCELED_CONNECTION 127 +# define HTTP_R_SOCK_NOT_SUPPORTED 122 +# define HTTP_R_STATUS_CODE_UNSUPPORTED 114 +# define HTTP_R_TLS_NOT_ENABLED 107 +# define HTTP_R_TOO_MANY_REDIRECTIONS 115 +# define HTTP_R_UNEXPECTED_CONTENT_TYPE 118 + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/idea.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/idea.h index 4334f3ea..1f9bb3b3 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/idea.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/idea.h @@ -1,64 +1,82 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_IDEA_H -# define HEADER_IDEA_H +#ifndef OPENSSL_IDEA_H +# define OPENSSL_IDEA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_IDEA_H +# endif # include # ifndef OPENSSL_NO_IDEA -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define IDEA_BLOCK 8 +# define IDEA_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int IDEA_INT; -# define IDEA_ENCRYPT 1 -# define IDEA_DECRYPT 0 - -# define IDEA_BLOCK 8 -# define IDEA_KEY_LENGTH 16 +# define IDEA_ENCRYPT 1 +# define IDEA_DECRYPT 0 typedef struct idea_key_st { IDEA_INT data[9][6]; } IDEA_KEY_SCHEDULE; +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *IDEA_options(void); +OSSL_DEPRECATEDIN_3_0 void IDEA_ecb_encrypt(const unsigned char *in, + unsigned char *out, + IDEA_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void IDEA_set_encrypt_key(const unsigned char *key, + IDEA_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, + IDEA_KEY_SCHEDULE *dk); +OSSL_DEPRECATEDIN_3_0 void IDEA_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int enc); +OSSL_DEPRECATEDIN_3_0 void IDEA_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void IDEA_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int *num); +OSSL_DEPRECATEDIN_3_0 void IDEA_encrypt(unsigned long *in, + IDEA_KEY_SCHEDULE *ks); +#endif -const char *IDEA_options(void); -void IDEA_ecb_encrypt(const unsigned char *in, unsigned char *out, - IDEA_KEY_SCHEDULE *ks); -void IDEA_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); -void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); -void IDEA_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int enc); -void IDEA_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num, int enc); -void IDEA_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num); -void IDEA_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define idea_options IDEA_options +# define idea_ecb_encrypt IDEA_ecb_encrypt +# define idea_set_encrypt_key IDEA_set_encrypt_key +# define idea_set_decrypt_key IDEA_set_decrypt_key +# define idea_cbc_encrypt IDEA_cbc_encrypt +# define idea_cfb64_encrypt IDEA_cfb64_encrypt +# define idea_ofb64_encrypt IDEA_ofb64_encrypt +# define idea_encrypt IDEA_encrypt +# endif -# if OPENSSL_API_COMPAT < 0x10100000L -# define idea_options IDEA_options -# define idea_ecb_encrypt IDEA_ecb_encrypt -# define idea_set_encrypt_key IDEA_set_encrypt_key -# define idea_set_decrypt_key IDEA_set_decrypt_key -# define idea_cbc_encrypt IDEA_cbc_encrypt -# define idea_cfb64_encrypt IDEA_cfb64_encrypt -# define idea_ofb64_encrypt IDEA_ofb64_encrypt -# define idea_encrypt IDEA_encrypt -# endif - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdf.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdf.h index 5abd4c37..0983230a 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdf.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdf.h @@ -1,19 +1,76 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_KDF_H -# define HEADER_KDF_H +#ifndef OPENSSL_KDF_H +# define OPENSSL_KDF_H +# pragma once -# include -#ifdef __cplusplus +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_KDF_H +# endif + +# include +# include +# include +# include + +# ifdef __cplusplus extern "C" { -#endif +# endif + +int EVP_KDF_up_ref(EVP_KDF *kdf); +void EVP_KDF_free(EVP_KDF *kdf); +EVP_KDF *EVP_KDF_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); + +EVP_KDF_CTX *EVP_KDF_CTX_new(EVP_KDF *kdf); +void EVP_KDF_CTX_free(EVP_KDF_CTX *ctx); +EVP_KDF_CTX *EVP_KDF_CTX_dup(const EVP_KDF_CTX *src); +const char *EVP_KDF_get0_description(const EVP_KDF *kdf); +int EVP_KDF_is_a(const EVP_KDF *kdf, const char *name); +const char *EVP_KDF_get0_name(const EVP_KDF *kdf); +const OSSL_PROVIDER *EVP_KDF_get0_provider(const EVP_KDF *kdf); +const EVP_KDF *EVP_KDF_CTX_kdf(EVP_KDF_CTX *ctx); + +void EVP_KDF_CTX_reset(EVP_KDF_CTX *ctx); +size_t EVP_KDF_CTX_get_kdf_size(EVP_KDF_CTX *ctx); +int EVP_KDF_derive(EVP_KDF_CTX *ctx, unsigned char *key, size_t keylen, + const OSSL_PARAM params[]); +int EVP_KDF_get_params(EVP_KDF *kdf, OSSL_PARAM params[]); +int EVP_KDF_CTX_get_params(EVP_KDF_CTX *ctx, OSSL_PARAM params[]); +int EVP_KDF_CTX_set_params(EVP_KDF_CTX *ctx, const OSSL_PARAM params[]); +const OSSL_PARAM *EVP_KDF_gettable_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_gettable_ctx_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_settable_ctx_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_CTX_gettable_params(EVP_KDF_CTX *ctx); +const OSSL_PARAM *EVP_KDF_CTX_settable_params(EVP_KDF_CTX *ctx); + +void EVP_KDF_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KDF *kdf, void *arg), + void *arg); +int EVP_KDF_names_do_all(const EVP_KDF *kdf, + void (*fn)(const char *name, void *data), + void *data); + +# define EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND 0 +# define EVP_KDF_HKDF_MODE_EXTRACT_ONLY 1 +# define EVP_KDF_HKDF_MODE_EXPAND_ONLY 2 + +#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_CLI_TO_SRV 65 +#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_SRV_TO_CLI 66 +#define EVP_KDF_SSHKDF_TYPE_ENCRYPTION_KEY_CLI_TO_SRV 67 +#define EVP_KDF_SSHKDF_TYPE_ENCRYPTION_KEY_SRV_TO_CLI 68 +#define EVP_KDF_SSHKDF_TYPE_INTEGRITY_KEY_CLI_TO_SRV 69 +#define EVP_KDF_SSHKDF_TYPE_INTEGRITY_KEY_SRV_TO_CLI 70 + +/**** The legacy PKEY-based KDF API follows. ****/ # define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) # define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) @@ -30,68 +87,52 @@ extern "C" { # define EVP_PKEY_CTRL_SCRYPT_P (EVP_PKEY_ALG_CTRL + 12) # define EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES (EVP_PKEY_ALG_CTRL + 13) -# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND 0 -# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 1 -# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY 2 +# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND \ + EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND +# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY \ + EVP_KDF_HKDF_MODE_EXTRACT_ONLY +# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY \ + EVP_KDF_HKDF_MODE_EXPAND_ONLY -# define EVP_PKEY_CTX_set_tls1_prf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_MD, 0, (void *)(md)) +int EVP_PKEY_CTX_set_tls1_prf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, sec, seclen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)(sec)) +int EVP_PKEY_CTX_set1_tls1_prf_secret(EVP_PKEY_CTX *pctx, + const unsigned char *sec, int seclen); -# define EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed, seedlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)(seed)) +int EVP_PKEY_CTX_add1_tls1_prf_seed(EVP_PKEY_CTX *pctx, + const unsigned char *seed, int seedlen); -# define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MD, 0, (void *)(md)) +int EVP_PKEY_CTX_set_hkdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)(salt)) +int EVP_PKEY_CTX_set1_hkdf_salt(EVP_PKEY_CTX *ctx, + const unsigned char *salt, int saltlen); -# define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)(key)) +int EVP_PKEY_CTX_set1_hkdf_key(EVP_PKEY_CTX *ctx, + const unsigned char *key, int keylen); -# define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)(info)) +int EVP_PKEY_CTX_add1_hkdf_info(EVP_PKEY_CTX *ctx, + const unsigned char *info, int infolen); -# define EVP_PKEY_CTX_hkdf_mode(pctx, mode) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MODE, mode, NULL) +int EVP_PKEY_CTX_set_hkdf_mode(EVP_PKEY_CTX *ctx, int mode); +# define EVP_PKEY_CTX_hkdf_mode EVP_PKEY_CTX_set_hkdf_mode -# define EVP_PKEY_CTX_set1_pbe_pass(pctx, pass, passlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_PASS, passlen, (void *)(pass)) +int EVP_PKEY_CTX_set1_pbe_pass(EVP_PKEY_CTX *ctx, const char *pass, + int passlen); -# define EVP_PKEY_CTX_set1_scrypt_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_SALT, saltlen, (void *)(salt)) +int EVP_PKEY_CTX_set1_scrypt_salt(EVP_PKEY_CTX *ctx, + const unsigned char *salt, int saltlen); -# define EVP_PKEY_CTX_set_scrypt_N(pctx, n) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_N, n) +int EVP_PKEY_CTX_set_scrypt_N(EVP_PKEY_CTX *ctx, uint64_t n); -# define EVP_PKEY_CTX_set_scrypt_r(pctx, r) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_R, r) +int EVP_PKEY_CTX_set_scrypt_r(EVP_PKEY_CTX *ctx, uint64_t r); -# define EVP_PKEY_CTX_set_scrypt_p(pctx, p) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_P, p) +int EVP_PKEY_CTX_set_scrypt_p(EVP_PKEY_CTX *ctx, uint64_t p); -# define EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx, maxmem_bytes) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES, maxmem_bytes) +int EVP_PKEY_CTX_set_scrypt_maxmem_bytes(EVP_PKEY_CTX *ctx, + uint64_t maxmem_bytes); -# ifdef __cplusplus +# ifdef __cplusplus } # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdferr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdferr.h index 3f51bd02..963d766d 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdferr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdferr.h @@ -1,55 +1,16 @@ /* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_KDFERR_H -# define HEADER_KDFERR_H +#ifndef OPENSSL_KDFERR_H +# define OPENSSL_KDFERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +#include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_KDF_strings(void); - -/* - * KDF function codes. - */ -# define KDF_F_PKEY_HKDF_CTRL_STR 103 -# define KDF_F_PKEY_HKDF_DERIVE 102 -# define KDF_F_PKEY_HKDF_INIT 108 -# define KDF_F_PKEY_SCRYPT_CTRL_STR 104 -# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 105 -# define KDF_F_PKEY_SCRYPT_DERIVE 109 -# define KDF_F_PKEY_SCRYPT_INIT 106 -# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 107 -# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 -# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 -# define KDF_F_PKEY_TLS1_PRF_INIT 110 -# define KDF_F_TLS1_PRF_ALG 111 - -/* - * KDF reason codes. - */ -# define KDF_R_INVALID_DIGEST 100 -# define KDF_R_MISSING_ITERATION_COUNT 109 -# define KDF_R_MISSING_KEY 104 -# define KDF_R_MISSING_MESSAGE_DIGEST 105 -# define KDF_R_MISSING_PARAMETER 101 -# define KDF_R_MISSING_PASS 110 -# define KDF_R_MISSING_SALT 111 -# define KDF_R_MISSING_SECRET 107 -# define KDF_R_MISSING_SEED 106 -# define KDF_R_UNKNOWN_PARAMETER_TYPE 103 -# define KDF_R_VALUE_ERROR 108 -# define KDF_R_VALUE_MISSING 102 - -#endif +#endif /* !defined(OPENSSL_KDFERR_H) */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h index 2e42d727..f4155df1 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h @@ -1,21 +1,32 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ + + /* * Header for dynamic hash table routines Author - Eric Young */ -#ifndef HEADER_LHASH_H -# define HEADER_LHASH_H +#ifndef OPENSSL_LHASH_H +# define OPENSSL_LHASH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_LHASH_H +# endif # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -72,6 +83,7 @@ typedef struct lhash_st OPENSSL_LHASH; int OPENSSL_LH_error(OPENSSL_LHASH *lh); OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void OPENSSL_LH_flush(OPENSSL_LHASH *lh); void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); @@ -83,15 +95,19 @@ unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); # ifndef OPENSSL_NO_STDIO -void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); # endif -void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define _LHASH OPENSSL_LHASH # define LHASH_NODE OPENSSL_LH_NODE # define lh_error OPENSSL_LH_error @@ -118,63 +134,145 @@ void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); # define LHASH_OF(type) struct lhash_st_##type -# define DEFINE_LHASH_OF(type) \ - LHASH_OF(type) { union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; }; \ - static ossl_unused ossl_inline LHASH_OF(type) *lh_##type##_new(unsigned long (*hfn)(const type *), \ - int (*cfn)(const type *, const type *)) \ +/* Helper macro for internal use */ +# define DEFINE_LHASH_OF_INTERNAL(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + typedef int (*lh_##type##_compfunc)(const type *a, const type *b); \ + typedef unsigned long (*lh_##type##_hashfunc)(const type *a); \ + typedef void (*lh_##type##_doallfunc)(type *a); \ + static ossl_unused ossl_inline type *\ + ossl_check_##type##_lh_plain_type(type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const type * \ + ossl_check_const_##type##_lh_plain_type(const type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_LHASH * \ + ossl_check_const_##type##_lh_type(const LHASH_OF(type) *lh) \ + { \ + return (const OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LHASH * \ + ossl_check_##type##_lh_type(LHASH_OF(type) *lh) \ + { \ + return (OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_COMPFUNC \ + ossl_check_##type##_lh_compfunc_type(lh_##type##_compfunc cmp) \ + { \ + return (OPENSSL_LH_COMPFUNC)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_HASHFUNC \ + ossl_check_##type##_lh_hashfunc_type(lh_##type##_hashfunc hfn) \ + { \ + return (OPENSSL_LH_HASHFUNC)hfn; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_DOALL_FUNC \ + ossl_check_##type##_lh_doallfunc_type(lh_##type##_doallfunc dfn) \ + { \ + return (OPENSSL_LH_DOALL_FUNC)dfn; \ + } \ + LHASH_OF(type) + +# ifndef OPENSSL_NO_DEPRECATED_3_1 +# define DEFINE_LHASH_OF_DEPRECATED(type) \ + static ossl_unused ossl_inline void \ + lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } +# else +# define DEFINE_LHASH_OF_DEPRECATED(type) +# endif + +# define DEFINE_LHASH_OF_EX(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + static ossl_unused ossl_inline LHASH_OF(type) * \ + lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ { \ return (LHASH_OF(type) *) \ OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ } \ - static ossl_unused ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline void \ + lh_##type##_free(LHASH_OF(type) *lh) \ { \ OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline type *lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + static ossl_unused ossl_inline void \ + lh_##type##_flush(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_flush((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ { \ return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline type *lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + static ossl_unused ossl_inline type * \ + lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ { \ return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline type *lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + static ossl_unused ossl_inline type * \ + lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ { \ return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline int lh_##type##_error(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline int \ + lh_##type##_error(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline unsigned long lh_##type##_num_items(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_num_items(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline void lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline void lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline void lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline unsigned long lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_get_down_load(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline void lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + static ossl_unused ossl_inline void \ + lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ { \ OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ } \ - static ossl_unused ossl_inline void lh_##type##_doall(LHASH_OF(type) *lh, \ - void (*doall)(type *)) \ + static ossl_unused ossl_inline void \ + lh_##type##_doall(LHASH_OF(type) *lh, void (*doall)(type *)) \ { \ OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_arg(LHASH_OF(type) *lh, \ + void (*doallarg)(type *, void *), void *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)doallarg, arg); \ + } \ + LHASH_OF(type) + +# define DEFINE_LHASH_OF(type) \ + DEFINE_LHASH_OF_EX(type); \ + DEFINE_LHASH_OF_DEPRECATED(type) \ LHASH_OF(type) #define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ @@ -189,50 +287,42 @@ void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); void (*fn)(cbargtype *, argtype *), \ argtype *arg) \ { \ - OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ } \ LHASH_OF(type) -DEFINE_LHASH_OF(OPENSSL_STRING); -# ifdef _MSC_VER -/* - * push and pop this warning: - * warning C4090: 'function': different 'const' qualifiers - */ -# pragma warning (push) -# pragma warning (disable: 4090) -# endif +DEFINE_LHASH_OF_INTERNAL(OPENSSL_STRING); +#define lh_OPENSSL_STRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_STRING) *)OPENSSL_LH_new(ossl_check_OPENSSL_STRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_STRING_lh_compfunc_type(cmp))) +#define lh_OPENSSL_STRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_insert(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_delete(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_retrieve(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_STRING_lh_type(lh), dl) +#define lh_OPENSSL_STRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_doallfunc_type(dfn)) +DEFINE_LHASH_OF_INTERNAL(OPENSSL_CSTRING); +#define lh_OPENSSL_CSTRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_CSTRING) *)OPENSSL_LH_new(ossl_check_OPENSSL_CSTRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_CSTRING_lh_compfunc_type(cmp))) +#define lh_OPENSSL_CSTRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_insert(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_delete(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_retrieve(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh), dl) +#define lh_OPENSSL_CSTRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_doallfunc_type(dfn)) -DEFINE_LHASH_OF(OPENSSL_CSTRING); - -# ifdef _MSC_VER -# pragma warning (pop) -# endif - -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_LH_new -# pragma weak OPENSSL_LH_free -# pragma weak OPENSSL_LH_insert -# pragma weak OPENSSL_LH_delete -# pragma weak OPENSSL_LH_retrieve -# pragma weak OPENSSL_LH_error -# pragma weak OPENSSL_LH_num_items -# pragma weak OPENSSL_LH_node_stats_bio -# pragma weak OPENSSL_LH_node_usage_stats_bio -# pragma weak OPENSSL_LH_stats_bio -# pragma weak OPENSSL_LH_get_down_load -# pragma weak OPENSSL_LH_set_down_load -# pragma weak OPENSSL_LH_doall -# pragma weak OPENSSL_LH_doall_arg -# endif /* __SUNPRO_C */ #ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h.in new file mode 100644 index 00000000..dc344a54 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h.in @@ -0,0 +1,306 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_lhash_macros); +-} + +/* + * Header for dynamic hash table routines Author - Eric Young + */ + +#ifndef OPENSSL_LHASH_H +# define OPENSSL_LHASH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_LHASH_H +# endif + +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st OPENSSL_LH_NODE; +typedef int (*OPENSSL_LH_COMPFUNC) (const void *, const void *); +typedef unsigned long (*OPENSSL_LH_HASHFUNC) (const void *); +typedef void (*OPENSSL_LH_DOALL_FUNC) (void *); +typedef void (*OPENSSL_LH_DOALL_FUNCARG) (void *, void *); +typedef struct lhash_st OPENSSL_LHASH; + +/* + * Macros for declaring and implementing type-safe wrappers for LHASH + * callbacks. This way, callbacks can be provided to LHASH structures without + * function pointer casting and the macro-defined callbacks provide + * per-variable casting before deferring to the underlying type-specific + * callbacks. NB: It is possible to place a "static" in front of both the + * DECLARE and IMPLEMENT macros if the functions are strictly internal. + */ + +/* First: "hash" functions */ +# define DECLARE_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *); +# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *arg) { \ + const o_type *a = arg; \ + return name##_hash(a); } +# define LHASH_HASH_FN(name) name##_LHASH_HASH + +/* Second: "compare" functions */ +# define DECLARE_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *, const void *); +# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ + const o_type *a = arg1; \ + const o_type *b = arg2; \ + return name##_cmp(a,b); } +# define LHASH_COMP_FN(name) name##_LHASH_COMP + +/* Fourth: "doall_arg" functions */ +# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *, void *); +# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ + o_type *a = arg1; \ + a_type *b = arg2; \ + name##_doall_arg(a, b); } +# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG + + +# define LH_LOAD_MULT 256 + +int OPENSSL_LH_error(OPENSSL_LHASH *lh); +OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); +void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void OPENSSL_LH_flush(OPENSSL_LHASH *lh); +void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); +void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); +void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); +void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func); +void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg); +unsigned long OPENSSL_LH_strhash(const char *c); +unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh); +unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); +void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); + +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define _LHASH OPENSSL_LHASH +# define LHASH_NODE OPENSSL_LH_NODE +# define lh_error OPENSSL_LH_error +# define lh_new OPENSSL_LH_new +# define lh_free OPENSSL_LH_free +# define lh_insert OPENSSL_LH_insert +# define lh_delete OPENSSL_LH_delete +# define lh_retrieve OPENSSL_LH_retrieve +# define lh_doall OPENSSL_LH_doall +# define lh_doall_arg OPENSSL_LH_doall_arg +# define lh_strhash OPENSSL_LH_strhash +# define lh_num_items OPENSSL_LH_num_items +# ifndef OPENSSL_NO_STDIO +# define lh_stats OPENSSL_LH_stats +# define lh_node_stats OPENSSL_LH_node_stats +# define lh_node_usage_stats OPENSSL_LH_node_usage_stats +# endif +# define lh_stats_bio OPENSSL_LH_stats_bio +# define lh_node_stats_bio OPENSSL_LH_node_stats_bio +# define lh_node_usage_stats_bio OPENSSL_LH_node_usage_stats_bio +# endif + +/* Type checking... */ + +# define LHASH_OF(type) struct lhash_st_##type + +/* Helper macro for internal use */ +# define DEFINE_LHASH_OF_INTERNAL(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + typedef int (*lh_##type##_compfunc)(const type *a, const type *b); \ + typedef unsigned long (*lh_##type##_hashfunc)(const type *a); \ + typedef void (*lh_##type##_doallfunc)(type *a); \ + static ossl_unused ossl_inline type *\ + ossl_check_##type##_lh_plain_type(type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const type * \ + ossl_check_const_##type##_lh_plain_type(const type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_LHASH * \ + ossl_check_const_##type##_lh_type(const LHASH_OF(type) *lh) \ + { \ + return (const OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LHASH * \ + ossl_check_##type##_lh_type(LHASH_OF(type) *lh) \ + { \ + return (OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_COMPFUNC \ + ossl_check_##type##_lh_compfunc_type(lh_##type##_compfunc cmp) \ + { \ + return (OPENSSL_LH_COMPFUNC)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_HASHFUNC \ + ossl_check_##type##_lh_hashfunc_type(lh_##type##_hashfunc hfn) \ + { \ + return (OPENSSL_LH_HASHFUNC)hfn; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_DOALL_FUNC \ + ossl_check_##type##_lh_doallfunc_type(lh_##type##_doallfunc dfn) \ + { \ + return (OPENSSL_LH_DOALL_FUNC)dfn; \ + } \ + LHASH_OF(type) + +# ifndef OPENSSL_NO_DEPRECATED_3_1 +# define DEFINE_LHASH_OF_DEPRECATED(type) \ + static ossl_unused ossl_inline void \ + lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } +# else +# define DEFINE_LHASH_OF_DEPRECATED(type) +# endif + +# define DEFINE_LHASH_OF_EX(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + static ossl_unused ossl_inline LHASH_OF(type) * \ + lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ + { \ + return (LHASH_OF(type) *) \ + OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_free(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_flush(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_flush((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + { \ + return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline int \ + lh_##type##_error(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_num_items(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + { \ + OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall(LHASH_OF(type) *lh, void (*doall)(type *)) \ + { \ + OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_arg(LHASH_OF(type) *lh, \ + void (*doallarg)(type *, void *), void *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)doallarg, arg); \ + } \ + LHASH_OF(type) + +# define DEFINE_LHASH_OF(type) \ + DEFINE_LHASH_OF_EX(type); \ + DEFINE_LHASH_OF_DEPRECATED(type) \ + LHASH_OF(type) + +#define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ + int_implement_lhash_doall(type, argtype, const type) + +#define IMPLEMENT_LHASH_DOALL_ARG(type, argtype) \ + int_implement_lhash_doall(type, argtype, type) + +#define int_implement_lhash_doall(type, argtype, cbargtype) \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ + void (*fn)(cbargtype *, argtype *), \ + argtype *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + } \ + LHASH_OF(type) + +{- + generate_lhash_macros("OPENSSL_STRING") + .generate_lhash_macros("OPENSSL_CSTRING"); +-} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/macros.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/macros.h new file mode 100644 index 00000000..a614cd66 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/macros.h @@ -0,0 +1,325 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_MACROS_H +# define OPENSSL_MACROS_H +# pragma once + +#include +#include + + +/* Helper macros for CPP string composition */ +# define OPENSSL_MSTR_HELPER(x) #x +# define OPENSSL_MSTR(x) OPENSSL_MSTR_HELPER(x) + +/* + * Sometimes OPENSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +# define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Generic deprecation macro + * + * If OPENSSL_SUPPRESS_DEPRECATED is defined, then OSSL_DEPRECATED and + * OSSL_DEPRECATED_FOR become no-ops + */ +# ifndef OSSL_DEPRECATED +# undef OSSL_DEPRECATED_FOR +# ifndef OPENSSL_SUPPRESS_DEPRECATED +# if defined(_MSC_VER) + /* + * MSVC supports __declspec(deprecated) since MSVC 2003 (13.10), + * and __declspec(deprecated(message)) since MSVC 2005 (14.00) + */ +# if _MSC_VER >= 1400 +# define OSSL_DEPRECATED(since) \ + __declspec(deprecated("Since OpenSSL " # since)) +# define OSSL_DEPRECATED_FOR(since, message) \ + __declspec(deprecated("Since OpenSSL " # since ";" message)) +# elif _MSC_VER >= 1310 +# define OSSL_DEPRECATED(since) __declspec(deprecated) +# define OSSL_DEPRECATED_FOR(since, message) __declspec(deprecated) +# endif +# elif defined(__GNUC__) + /* + * According to GCC documentation, deprecations with message appeared in + * GCC 4.5.0 + */ +# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# define OSSL_DEPRECATED(since) \ + __attribute__((deprecated("Since OpenSSL " # since))) +# define OSSL_DEPRECATED_FOR(since, message) \ + __attribute__((deprecated("Since OpenSSL " # since ";" message))) +# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define OSSL_DEPRECATED(since) __attribute__((deprecated)) +# define OSSL_DEPRECATED_FOR(since, message) __attribute__((deprecated)) +# endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# define OSSL_DEPRECATED(since) __attribute__ ((deprecated)) +# define OSSL_DEPRECATED_FOR(since, message) __attribute__ ((deprecated)) +# endif +# endif +# endif +# endif + +/* + * Still not defined? Then define no-op macros. This means these macros + * are unsuitable for use in a typedef. + */ +# ifndef OSSL_DEPRECATED +# define OSSL_DEPRECATED(since) extern +# define OSSL_DEPRECATED_FOR(since, message) extern +# endif + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . If this is + * undefined, the value of the macro OPENSSL_CONFIGURED_API (defined in + * ) is the default. + * + * For any version number up until version 1.1.x, is expected to be + * the calculated version number 0xMNNFFPPSL. + * For version numbers 3.0 and on, is expected to be a computation + * of the major and minor numbers in decimal using this formula: + * + * MAJOR * 10000 + MINOR * 100 + * + * So version 3.0 becomes 30000, version 3.2 becomes 30200, etc. + */ + +/* + * We use the OPENSSL_API_COMPAT value to define API level macros. These + * macros are used to enable or disable features at that API version boundary. + */ + +# ifdef OPENSSL_API_LEVEL +# error "OPENSSL_API_LEVEL must not be defined by application" +# endif + +/* + * We figure out what API level was intended by simple numeric comparison. + * The lowest old style number we recognise is 0x00908000L, so we take some + * safety margin and assume that anything below 0x00900000L is a new style + * number. This allows new versions up to and including v943.71.83. + */ +# ifdef OPENSSL_API_COMPAT +# if OPENSSL_API_COMPAT < 0x900000L +# define OPENSSL_API_LEVEL (OPENSSL_API_COMPAT) +# else +# define OPENSSL_API_LEVEL \ + (((OPENSSL_API_COMPAT >> 28) & 0xF) * 10000 \ + + ((OPENSSL_API_COMPAT >> 20) & 0xFF) * 100 \ + + ((OPENSSL_API_COMPAT >> 12) & 0xFF)) +# endif +# endif + +/* + * If OPENSSL_API_COMPAT wasn't given, we use default numbers to set + * the API compatibility level. + */ +# ifndef OPENSSL_API_LEVEL +# if OPENSSL_CONFIGURED_API > 0 +# define OPENSSL_API_LEVEL (OPENSSL_CONFIGURED_API) +# else +# define OPENSSL_API_LEVEL \ + (OPENSSL_VERSION_MAJOR * 10000 + OPENSSL_VERSION_MINOR * 100) +# endif +# endif + +# if OPENSSL_API_LEVEL > OPENSSL_CONFIGURED_API +# error "The requested API level higher than the configured API compatibility level" +# endif + +/* + * Check of sane values. + */ +/* Can't go higher than the current version. */ +# if OPENSSL_API_LEVEL > (OPENSSL_VERSION_MAJOR * 10000 + OPENSSL_VERSION_MINOR * 100) +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif +/* OpenSSL will have no version 2.y.z */ +# if OPENSSL_API_LEVEL < 30000 && OPENSSL_API_LEVEL >= 20000 +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif +/* Below 0.9.8 is unacceptably low */ +# if OPENSSL_API_LEVEL < 908 +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif + +/* + * Define macros for deprecation and simulated removal purposes. + * + * The macros OSSL_DEPRECATED_{major}_{minor} are always defined for + * all OpenSSL versions we care for. They can be used as attributes + * in function declarations where appropriate. + * + * The macros OPENSSL_NO_DEPRECATED_{major}_{minor} are defined for + * all OpenSSL versions up to or equal to the version given with + * OPENSSL_API_COMPAT. They are used as guards around anything that's + * deprecated up to that version, as an effect of the developer option + * 'no-deprecated'. + */ + +# undef OPENSSL_NO_DEPRECATED_3_0 +# undef OPENSSL_NO_DEPRECATED_1_1_1 +# undef OPENSSL_NO_DEPRECATED_1_1_0 +# undef OPENSSL_NO_DEPRECATED_1_0_2 +# undef OPENSSL_NO_DEPRECATED_1_0_1 +# undef OPENSSL_NO_DEPRECATED_1_0_0 +# undef OPENSSL_NO_DEPRECATED_0_9_8 + +# if OPENSSL_API_LEVEL >= 30100 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_1 OSSL_DEPRECATED(3.1) +# define OSSL_DEPRECATEDIN_3_1_FOR(msg) OSSL_DEPRECATED_FOR(3.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_1 +# endif +# else +# define OSSL_DEPRECATEDIN_3_1 +# define OSSL_DEPRECATEDIN_3_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 30000 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_0 OSSL_DEPRECATED(3.0) +# define OSSL_DEPRECATEDIN_3_0_FOR(msg) OSSL_DEPRECATED_FOR(3.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_0 +# endif +# else +# define OSSL_DEPRECATEDIN_3_0 +# define OSSL_DEPRECATEDIN_3_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10101 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_1_1 OSSL_DEPRECATED(1.1.1) +# define OSSL_DEPRECATEDIN_1_1_1_FOR(msg) OSSL_DEPRECATED_FOR(1.1.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_1_1 +# endif +# else +# define OSSL_DEPRECATEDIN_1_1_1 +# define OSSL_DEPRECATEDIN_1_1_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10100 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_1_0 OSSL_DEPRECATED(1.1.0) +# define OSSL_DEPRECATEDIN_1_1_0_FOR(msg) OSSL_DEPRECATED_FOR(1.1.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_1_0 +# endif +# else +# define OSSL_DEPRECATEDIN_1_1_0 +# define OSSL_DEPRECATEDIN_1_1_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10002 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_2 OSSL_DEPRECATED(1.0.2) +# define OSSL_DEPRECATEDIN_1_0_2_FOR(msg) OSSL_DEPRECATED_FOR(1.0.2, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_2 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_2 +# define OSSL_DEPRECATEDIN_1_0_2_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10001 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_1 OSSL_DEPRECATED(1.0.1) +# define OSSL_DEPRECATEDIN_1_0_1_FOR(msg) OSSL_DEPRECATED_FOR(1.0.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_1 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_1 +# define OSSL_DEPRECATEDIN_1_0_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10000 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_0 OSSL_DEPRECATED(1.0.0) +# define OSSL_DEPRECATEDIN_1_0_0_FOR(msg) OSSL_DEPRECATED_FOR(1.0.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_0 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_0 +# define OSSL_DEPRECATEDIN_1_0_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 908 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_0_9_8 OSSL_DEPRECATED(0.9.8) +# define OSSL_DEPRECATEDIN_0_9_8_FOR(msg) OSSL_DEPRECATED_FOR(0.9.8, msg) +# else +# define OPENSSL_NO_DEPRECATED_0_9_8 +# endif +# else +# define OSSL_DEPRECATEDIN_0_9_8 +# define OSSL_DEPRECATEDIN_0_9_8_FOR(msg) +# endif + +/* + * Make our own variants of __FILE__ and __LINE__, depending on configuration + */ + +# ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +# endif + +/* + * __func__ was standardized in C99, so for any compiler that claims + * to implement that language level or newer, we assume we can safely + * use that symbol. + * + * GNU C also provides __FUNCTION__ since version 2, which predates + * C99. We can, however, only use this if __STDC_VERSION__ exists, + * as it's otherwise not allowed according to ISO C standards (C90). + * (compiling with GNU C's -pedantic tells us so) + * + * If none of the above applies, we check if the compiler is MSVC, + * and use __FUNCTION__ if that's the case. + */ +# ifndef OPENSSL_FUNC +# if defined(__STDC_VERSION__) +# if __STDC_VERSION__ >= 199901L +# define OPENSSL_FUNC __func__ +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define OPENSSL_FUNC __FUNCTION__ +# endif +# elif defined(_MSC_VER) +# define OPENSSL_FUNC __FUNCTION__ +# endif +/* + * If all these possibilities are exhausted, we give up and use a + * static string. + */ +# ifndef OPENSSL_FUNC +# define OPENSSL_FUNC "(unknown function)" +# endif +# endif + +# ifndef OSSL_CRYPTO_ALLOC +# if defined(__GNUC__) +# define OSSL_CRYPTO_ALLOC __attribute__((__malloc__)) +# elif defined(_MSC_VER) +# define OSSL_CRYPTO_ALLOC __declspec(restrict) +# else +# define OSSL_CRYPTO_ALLOC +# endif +# endif + +#endif /* OPENSSL_MACROS_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md2.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md2.h index 7faf8e3d..5d4cb77e 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md2.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md2.h @@ -1,27 +1,36 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD2_H -# define HEADER_MD2_H +#ifndef OPENSSL_MD2_H +# define OPENSSL_MD2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD2_H +# endif # include # ifndef OPENSSL_NO_MD2 -# include -# ifdef __cplusplus +# include +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define MD2_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) typedef unsigned char MD2_INT; -# define MD2_DIGEST_LENGTH 16 -# define MD2_BLOCK 16 +# define MD2_BLOCK 16 typedef struct MD2state_st { unsigned int num; @@ -29,16 +38,19 @@ typedef struct MD2state_st { MD2_INT cksm[MD2_BLOCK]; MD2_INT state[MD2_BLOCK]; } MD2_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *MD2_options(void); +OSSL_DEPRECATEDIN_3_0 int MD2_Init(MD2_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD2_Update(MD2_CTX *c, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int MD2_Final(unsigned char *md, MD2_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD2(const unsigned char *d, size_t n, + unsigned char *md); +# endif -const char *MD2_options(void); -int MD2_Init(MD2_CTX *c); -int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len); -int MD2_Final(unsigned char *md, MD2_CTX *c); -unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } +# endif # endif -# endif - #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md4.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md4.h index 940e29db..6c150a6c 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md4.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md4.h @@ -1,34 +1,43 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD4_H -# define HEADER_MD4_H +#ifndef OPENSSL_MD4_H +# define OPENSSL_MD4_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD4_H +# endif # include # ifndef OPENSSL_NO_MD4 -# include -# include -# ifdef __cplusplus +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define MD4_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! MD4_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define MD4_LONG unsigned int +# define MD4_LONG unsigned int -# define MD4_CBLOCK 64 -# define MD4_LBLOCK (MD4_CBLOCK/4) -# define MD4_DIGEST_LENGTH 16 +# define MD4_CBLOCK 64 +# define MD4_LBLOCK (MD4_CBLOCK/4) typedef struct MD4state_st { MD4_LONG A, B, C, D; @@ -36,16 +45,19 @@ typedef struct MD4state_st { MD4_LONG data[MD4_LBLOCK]; unsigned int num; } MD4_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MD4_Init(MD4_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD4_Update(MD4_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int MD4_Final(unsigned char *md, MD4_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD4(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void MD4_Transform(MD4_CTX *c, const unsigned char *b); +# endif -int MD4_Init(MD4_CTX *c); -int MD4_Update(MD4_CTX *c, const void *data, size_t len); -int MD4_Final(unsigned char *md, MD4_CTX *c); -unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); -void MD4_Transform(MD4_CTX *c, const unsigned char *b); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md5.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md5.h index 2deb7721..77a57734 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md5.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md5.h @@ -1,34 +1,42 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD5_H -# define HEADER_MD5_H +#ifndef OPENSSL_MD5_H +# define OPENSSL_MD5_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD5_H +# endif # include # ifndef OPENSSL_NO_MD5 -# include -# include -# ifdef __cplusplus +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif +# define MD5_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) /* * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! MD5_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define MD5_LONG unsigned int +# define MD5_LONG unsigned int -# define MD5_CBLOCK 64 -# define MD5_LBLOCK (MD5_CBLOCK/4) -# define MD5_DIGEST_LENGTH 16 +# define MD5_CBLOCK 64 +# define MD5_LBLOCK (MD5_CBLOCK/4) typedef struct MD5state_st { MD5_LONG A, B, C, D; @@ -36,15 +44,19 @@ typedef struct MD5state_st { MD5_LONG data[MD5_LBLOCK]; unsigned int num; } MD5_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MD5_Init(MD5_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD5_Update(MD5_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int MD5_Final(unsigned char *md, MD5_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD5(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void MD5_Transform(MD5_CTX *c, const unsigned char *b); +# endif -int MD5_Init(MD5_CTX *c); -int MD5_Update(MD5_CTX *c, const void *data, size_t len); -int MD5_Final(unsigned char *md, MD5_CTX *c); -unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); -void MD5_Transform(MD5_CTX *c, const unsigned char *b); -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/mdc2.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/mdc2.h index aabd2bfa..5a7ee289 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/mdc2.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/mdc2.h @@ -1,42 +1,55 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MDC2_H -# define HEADER_MDC2_H +#ifndef OPENSSL_MDC2_H +# define OPENSSL_MDC2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MDC2_H +# endif # include -#ifndef OPENSSL_NO_MDC2 -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_MDC2 +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif -# define MDC2_BLOCK 8 -# define MDC2_DIGEST_LENGTH 16 +# define MDC2_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +# define MDC2_BLOCK 8 typedef struct mdc2_ctx_st { unsigned int num; unsigned char data[MDC2_BLOCK]; DES_cblock h, hh; - int pad_type; /* either 1 or 2, default 1 */ + unsigned int pad_type; /* either 1 or 2, default 1 */ } MDC2_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MDC2_Init(MDC2_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MDC2_Update(MDC2_CTX *c, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int MDC2_Final(unsigned char *md, MDC2_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MDC2(const unsigned char *d, size_t n, + unsigned char *md); +# endif -int MDC2_Init(MDC2_CTX *c); -int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); -int MDC2_Final(unsigned char *md, MDC2_CTX *c); -unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/modes.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/modes.h index d544f98d..e1907991 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/modes.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/modes.h @@ -1,16 +1,23 @@ /* * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MODES_H -# define HEADER_MODES_H +#ifndef OPENSSL_MODES_H +# define OPENSSL_MODES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MODES_H +# endif # include +# include # ifdef __cplusplus extern "C" { @@ -22,6 +29,10 @@ typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], int enc); +typedef void (*ecb128_f) (const unsigned char *in, unsigned char *out, + size_t len, const void *key, + int enc); + typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, size_t blocks, const void *key, const unsigned char ivec[16]); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/obj_mac.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/obj_mac.h index 53516a06..0e860276 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/obj_mac.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/obj_mac.h @@ -2,13 +2,17 @@ * WARNING: do not edit! * Generated by crypto/objects/objects.pl * - * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OPENSSL_OBJ_MAC_H +# define OPENSSL_OBJ_MAC_H +# pragma once + #define SN_undef "UNDEF" #define LN_undef "undefined" #define NID_undef 0 @@ -44,6 +48,11 @@ #define NID_identified_organization 676 #define OBJ_identified_organization OBJ_iso,3L +#define SN_gmac "GMAC" +#define LN_gmac "gmac" +#define NID_gmac 1195 +#define OBJ_gmac OBJ_iso,0L,9797L,3L,4L + #define SN_hmac_md5 "HMAC-MD5" #define LN_hmac_md5 "hmac-md5" #define NID_hmac_md5 780 @@ -845,6 +854,14 @@ #define NID_id_smime_ct_authEnvelopedData 1059 #define OBJ_id_smime_ct_authEnvelopedData OBJ_id_smime_ct,23L +#define SN_id_ct_routeOriginAuthz "id-ct-routeOriginAuthz" +#define NID_id_ct_routeOriginAuthz 1234 +#define OBJ_id_ct_routeOriginAuthz OBJ_id_smime_ct,24L + +#define SN_id_ct_rpkiManifest "id-ct-rpkiManifest" +#define NID_id_ct_rpkiManifest 1235 +#define OBJ_id_ct_rpkiManifest OBJ_id_smime_ct,26L + #define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" #define NID_id_ct_asciiTextWithCRLF 787 #define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L @@ -853,6 +870,22 @@ #define NID_id_ct_xml 1060 #define OBJ_id_ct_xml OBJ_id_smime_ct,28L +#define SN_id_ct_rpkiGhostbusters "id-ct-rpkiGhostbusters" +#define NID_id_ct_rpkiGhostbusters 1236 +#define OBJ_id_ct_rpkiGhostbusters OBJ_id_smime_ct,35L + +#define SN_id_ct_resourceTaggedAttest "id-ct-resourceTaggedAttest" +#define NID_id_ct_resourceTaggedAttest 1237 +#define OBJ_id_ct_resourceTaggedAttest OBJ_id_smime_ct,36L + +#define SN_id_ct_geofeedCSVwithCRLF "id-ct-geofeedCSVwithCRLF" +#define NID_id_ct_geofeedCSVwithCRLF 1246 +#define OBJ_id_ct_geofeedCSVwithCRLF OBJ_id_smime_ct,47L + +#define SN_id_ct_signedChecklist "id-ct-signedChecklist" +#define NID_id_ct_signedChecklist 1247 +#define OBJ_id_ct_signedChecklist OBJ_id_smime_ct,48L + #define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" #define NID_id_smime_aa_receiptRequest 212 #define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L @@ -1179,6 +1212,11 @@ #define NID_sm3WithRSAEncryption 1144 #define OBJ_sm3WithRSAEncryption OBJ_sm_scheme,504L +#define SN_SM2_with_SM3 "SM2-SM3" +#define LN_SM2_with_SM3 "SM2-with-SM3" +#define NID_SM2_with_SM3 1204 +#define OBJ_SM2_with_SM3 OBJ_sm_scheme,501L + #define LN_hmacWithSHA224 "hmacWithSHA224" #define NID_hmacWithSHA224 798 #define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L @@ -1385,6 +1423,10 @@ #define NID_id_qcs 267 #define OBJ_id_qcs OBJ_id_pkix,11L +#define SN_id_cp "id-cp" +#define NID_id_cp 1238 +#define OBJ_id_cp OBJ_id_pkix,14L + #define SN_id_cct "id-cct" #define NID_id_cct 268 #define OBJ_id_cct OBJ_id_pkix,12L @@ -1518,6 +1560,14 @@ #define NID_tlsfeature 1020 #define OBJ_tlsfeature OBJ_id_pe,24L +#define SN_sbgp_ipAddrBlockv2 "sbgp-ipAddrBlockv2" +#define NID_sbgp_ipAddrBlockv2 1239 +#define OBJ_sbgp_ipAddrBlockv2 OBJ_id_pe,28L + +#define SN_sbgp_autonomousSysNumv2 "sbgp-autonomousSysNumv2" +#define NID_sbgp_autonomousSysNumv2 1240 +#define OBJ_sbgp_autonomousSysNumv2 OBJ_id_pe,29L + #define SN_id_qt_cps "id-qt-cps" #define LN_id_qt_cps "Policy Qualifier CPS" #define NID_id_qt_cps 164 @@ -1637,6 +1687,26 @@ #define NID_cmcRA 1132 #define OBJ_cmcRA OBJ_id_kp,28L +#define SN_cmcArchive "cmcArchive" +#define LN_cmcArchive "CMC Archive Server" +#define NID_cmcArchive 1219 +#define OBJ_cmcArchive OBJ_id_kp,29L + +#define SN_id_kp_bgpsec_router "id-kp-bgpsec-router" +#define LN_id_kp_bgpsec_router "BGPsec Router" +#define NID_id_kp_bgpsec_router 1220 +#define OBJ_id_kp_bgpsec_router OBJ_id_kp,30L + +#define SN_id_kp_BrandIndicatorforMessageIdentification "id-kp-BrandIndicatorforMessageIdentification" +#define LN_id_kp_BrandIndicatorforMessageIdentification "Brand Indicator for Message Identification" +#define NID_id_kp_BrandIndicatorforMessageIdentification 1221 +#define OBJ_id_kp_BrandIndicatorforMessageIdentification OBJ_id_kp,31L + +#define SN_cmKGA "cmKGA" +#define LN_cmKGA "Certificate Management Key Generation Authority" +#define NID_cmKGA 1222 +#define OBJ_cmKGA OBJ_id_kp,32L + #define SN_id_it_caProtEncCert "id-it-caProtEncCert" #define NID_id_it_caProtEncCert 298 #define OBJ_id_it_caProtEncCert OBJ_id_it,1L @@ -1701,6 +1771,18 @@ #define NID_id_it_suppLangTags 784 #define OBJ_id_it_suppLangTags OBJ_id_it,16L +#define SN_id_it_caCerts "id-it-caCerts" +#define NID_id_it_caCerts 1223 +#define OBJ_id_it_caCerts OBJ_id_it,17L + +#define SN_id_it_rootCaKeyUpdate "id-it-rootCaKeyUpdate" +#define NID_id_it_rootCaKeyUpdate 1224 +#define OBJ_id_it_rootCaKeyUpdate OBJ_id_it,18L + +#define SN_id_it_certReqTemplate "id-it-certReqTemplate" +#define NID_id_it_certReqTemplate 1225 +#define OBJ_id_it_certReqTemplate OBJ_id_it,19L + #define SN_id_regCtrl "id-regCtrl" #define NID_id_regCtrl 313 #define OBJ_id_regCtrl OBJ_id_pkip,1L @@ -1846,6 +1928,26 @@ #define NID_id_on_permanentIdentifier 858 #define OBJ_id_on_permanentIdentifier OBJ_id_on,3L +#define SN_XmppAddr "id-on-xmppAddr" +#define LN_XmppAddr "XmppAddr" +#define NID_XmppAddr 1209 +#define OBJ_XmppAddr OBJ_id_on,5L + +#define SN_SRVName "id-on-dnsSRV" +#define LN_SRVName "SRVName" +#define NID_SRVName 1210 +#define OBJ_SRVName OBJ_id_on,7L + +#define SN_NAIRealm "id-on-NAIRealm" +#define LN_NAIRealm "NAIRealm" +#define NID_NAIRealm 1211 +#define OBJ_NAIRealm OBJ_id_on,8L + +#define SN_id_on_SmtpUTF8Mailbox "id-on-SmtpUTF8Mailbox" +#define LN_id_on_SmtpUTF8Mailbox "Smtp UTF8 Mailbox" +#define NID_id_on_SmtpUTF8Mailbox 1208 +#define OBJ_id_on_SmtpUTF8Mailbox OBJ_id_on,9L + #define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" #define NID_id_pda_dateOfBirth 348 #define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L @@ -1894,6 +1996,14 @@ #define NID_id_qcs_pkixQCSyntax_v1 359 #define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L +#define SN_ipAddr_asNumber "ipAddr-asNumber" +#define NID_ipAddr_asNumber 1241 +#define OBJ_ipAddr_asNumber OBJ_id_cp,2L + +#define SN_ipAddr_asNumberv2 "ipAddr-asNumberv2" +#define NID_ipAddr_asNumberv2 1242 +#define OBJ_ipAddr_asNumberv2 OBJ_id_cp,3L + #define SN_id_cct_crs "id-cct-crs" #define NID_id_cct_crs 360 #define OBJ_id_cct_crs OBJ_id_cct,1L @@ -1946,6 +2056,21 @@ #define NID_caRepository 785 #define OBJ_caRepository OBJ_id_ad,5L +#define SN_rpkiManifest "rpkiManifest" +#define LN_rpkiManifest "RPKI Manifest" +#define NID_rpkiManifest 1243 +#define OBJ_rpkiManifest OBJ_id_ad,10L + +#define SN_signedObject "signedObject" +#define LN_signedObject "Signed Object" +#define NID_signedObject 1244 +#define OBJ_signedObject OBJ_id_ad,11L + +#define SN_rpkiNotify "rpkiNotify" +#define LN_rpkiNotify "RPKI Notify" +#define NID_rpkiNotify 1245 +#define OBJ_rpkiNotify OBJ_id_ad,13L + #define OBJ_id_pkix_OCSP OBJ_ad_OCSP #define SN_id_pkix_OCSP_basic "basicOCSPResponse" @@ -2113,15 +2238,25 @@ #define NID_ripemd160WithRSA 119 #define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L +#define SN_blake2bmac "BLAKE2BMAC" +#define LN_blake2bmac "blake2bmac" +#define NID_blake2bmac 1201 +#define OBJ_blake2bmac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L + +#define SN_blake2smac "BLAKE2SMAC" +#define LN_blake2smac "blake2smac" +#define NID_blake2smac 1202 +#define OBJ_blake2smac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L + #define SN_blake2b512 "BLAKE2b512" #define LN_blake2b512 "blake2b512" #define NID_blake2b512 1056 -#define OBJ_blake2b512 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L,16L +#define OBJ_blake2b512 OBJ_blake2bmac,16L #define SN_blake2s256 "BLAKE2s256" #define LN_blake2s256 "blake2s256" #define NID_blake2s256 1057 -#define OBJ_blake2s256 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L,8L +#define OBJ_blake2s256 OBJ_blake2smac,8L #define SN_sxnet "SXNetID" #define LN_sxnet "Strong Extranet ID" @@ -2971,6 +3106,16 @@ #define NID_hmac_sha3_512 1105 #define OBJ_hmac_sha3_512 OBJ_nist_hashalgs,16L +#define SN_kmac128 "KMAC128" +#define LN_kmac128 "kmac128" +#define NID_kmac128 1196 +#define OBJ_kmac128 OBJ_nist_hashalgs,19L + +#define SN_kmac256 "KMAC256" +#define LN_kmac256 "kmac256" +#define NID_kmac256 1197 +#define OBJ_kmac256 OBJ_nist_hashalgs,20L + #define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L #define SN_dsa_with_SHA224 "dsa_with_SHA224" @@ -4230,25 +4375,25 @@ #define NID_id_tc26_cipher_gostr3412_2015_magma 1173 #define OBJ_id_tc26_cipher_gostr3412_2015_magma OBJ_id_tc26_cipher,1L -#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm "id-tc26-cipher-gostr3412-2015-magma-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm 1174 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L +#define SN_magma_ctr_acpkm "magma-ctr-acpkm" +#define NID_magma_ctr_acpkm 1174 +#define OBJ_magma_ctr_acpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L -#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac 1175 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L +#define SN_magma_ctr_acpkm_omac "magma-ctr-acpkm-omac" +#define NID_magma_ctr_acpkm_omac 1175 +#define OBJ_magma_ctr_acpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L #define SN_id_tc26_cipher_gostr3412_2015_kuznyechik "id-tc26-cipher-gostr3412-2015-kuznyechik" #define NID_id_tc26_cipher_gostr3412_2015_kuznyechik 1176 #define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik OBJ_id_tc26_cipher,2L -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm 1177 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L +#define SN_kuznyechik_ctr_acpkm "kuznyechik-ctr-acpkm" +#define NID_kuznyechik_ctr_acpkm 1177 +#define OBJ_kuznyechik_ctr_acpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac 1178 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L +#define SN_kuznyechik_ctr_acpkm_omac "kuznyechik-ctr-acpkm-omac" +#define NID_kuznyechik_ctr_acpkm_omac 1178 +#define OBJ_kuznyechik_ctr_acpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L #define SN_id_tc26_agreement "id-tc26-agreement" #define NID_id_tc26_agreement 991 @@ -4270,17 +4415,17 @@ #define NID_id_tc26_wrap_gostr3412_2015_magma 1180 #define OBJ_id_tc26_wrap_gostr3412_2015_magma OBJ_id_tc26_wrap,1L -#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 "id-tc26-wrap-gostr3412-2015-magma-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 1181 -#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L +#define SN_magma_kexp15 "magma-kexp15" +#define NID_magma_kexp15 1181 +#define OBJ_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L #define SN_id_tc26_wrap_gostr3412_2015_kuznyechik "id-tc26-wrap-gostr3412-2015-kuznyechik" #define NID_id_tc26_wrap_gostr3412_2015_kuznyechik 1182 #define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik OBJ_id_tc26_wrap,2L -#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 "id-tc26-wrap-gostr3412-2015-kuznyechik-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 1183 -#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L +#define SN_kuznyechik_kexp15 "kuznyechik-kexp15" +#define NID_kuznyechik_kexp15 1183 +#define OBJ_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L #define SN_id_tc26_constants "id-tc26-constants" #define NID_id_tc26_constants 994 @@ -4370,6 +4515,11 @@ #define NID_SNILS 1006 #define OBJ_SNILS OBJ_member_body,643L,100L,3L +#define SN_OGRNIP "OGRNIP" +#define LN_OGRNIP "OGRNIP" +#define NID_OGRNIP 1226 +#define OBJ_OGRNIP OBJ_member_body,643L,100L,5L + #define SN_subjectSignTool "subjectSignTool" #define LN_subjectSignTool "Signing Tool of Subject" #define NID_subjectSignTool 1007 @@ -4380,23 +4530,58 @@ #define NID_issuerSignTool 1008 #define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L -#define SN_grasshopper_ecb "grasshopper-ecb" -#define NID_grasshopper_ecb 1012 +#define SN_classSignTool "classSignTool" +#define LN_classSignTool "Class of Signing Tool" +#define NID_classSignTool 1227 +#define OBJ_classSignTool OBJ_member_body,643L,100L,113L -#define SN_grasshopper_ctr "grasshopper-ctr" -#define NID_grasshopper_ctr 1013 +#define SN_classSignToolKC1 "classSignToolKC1" +#define LN_classSignToolKC1 "Class of Signing Tool KC1" +#define NID_classSignToolKC1 1228 +#define OBJ_classSignToolKC1 OBJ_member_body,643L,100L,113L,1L -#define SN_grasshopper_ofb "grasshopper-ofb" -#define NID_grasshopper_ofb 1014 +#define SN_classSignToolKC2 "classSignToolKC2" +#define LN_classSignToolKC2 "Class of Signing Tool KC2" +#define NID_classSignToolKC2 1229 +#define OBJ_classSignToolKC2 OBJ_member_body,643L,100L,113L,2L -#define SN_grasshopper_cbc "grasshopper-cbc" -#define NID_grasshopper_cbc 1015 +#define SN_classSignToolKC3 "classSignToolKC3" +#define LN_classSignToolKC3 "Class of Signing Tool KC3" +#define NID_classSignToolKC3 1230 +#define OBJ_classSignToolKC3 OBJ_member_body,643L,100L,113L,3L -#define SN_grasshopper_cfb "grasshopper-cfb" -#define NID_grasshopper_cfb 1016 +#define SN_classSignToolKB1 "classSignToolKB1" +#define LN_classSignToolKB1 "Class of Signing Tool KB1" +#define NID_classSignToolKB1 1231 +#define OBJ_classSignToolKB1 OBJ_member_body,643L,100L,113L,4L -#define SN_grasshopper_mac "grasshopper-mac" -#define NID_grasshopper_mac 1017 +#define SN_classSignToolKB2 "classSignToolKB2" +#define LN_classSignToolKB2 "Class of Signing Tool KB2" +#define NID_classSignToolKB2 1232 +#define OBJ_classSignToolKB2 OBJ_member_body,643L,100L,113L,5L + +#define SN_classSignToolKA1 "classSignToolKA1" +#define LN_classSignToolKA1 "Class of Signing Tool KA1" +#define NID_classSignToolKA1 1233 +#define OBJ_classSignToolKA1 OBJ_member_body,643L,100L,113L,6L + +#define SN_kuznyechik_ecb "kuznyechik-ecb" +#define NID_kuznyechik_ecb 1012 + +#define SN_kuznyechik_ctr "kuznyechik-ctr" +#define NID_kuznyechik_ctr 1013 + +#define SN_kuznyechik_ofb "kuznyechik-ofb" +#define NID_kuznyechik_ofb 1014 + +#define SN_kuznyechik_cbc "kuznyechik-cbc" +#define NID_kuznyechik_cbc 1015 + +#define SN_kuznyechik_cfb "kuznyechik-cfb" +#define NID_kuznyechik_cfb 1016 + +#define SN_kuznyechik_mac "kuznyechik-mac" +#define NID_kuznyechik_mac 1017 #define SN_magma_ecb "magma-ecb" #define NID_magma_ecb 1187 @@ -4970,6 +5155,22 @@ #define LN_hkdf "hkdf" #define NID_hkdf 1036 +#define SN_sshkdf "SSHKDF" +#define LN_sshkdf "sshkdf" +#define NID_sshkdf 1203 + +#define SN_sskdf "SSKDF" +#define LN_sskdf "sskdf" +#define NID_sskdf 1205 + +#define SN_x942kdf "X942KDF" +#define LN_x942kdf "x942kdf" +#define NID_x942kdf 1207 + +#define SN_x963kdf "X963KDF" +#define LN_x963kdf "x963kdf" +#define NID_x963kdf 1206 + #define SN_id_pkinit "id-pkinit" #define NID_id_pkinit 1031 #define OBJ_id_pkinit 1L,3L,6L,1L,5L,2L,3L @@ -5036,6 +5237,10 @@ #define LN_kx_gost "kx-gost" #define NID_kx_gost 1045 +#define SN_kx_gost18 "KxGOST18" +#define LN_kx_gost18 "kx-gost18" +#define NID_kx_gost18 1218 + #define SN_kx_any "KxANY" #define LN_kx_any "kx-any" #define NID_kx_any 1063 @@ -5099,6 +5304,24 @@ #define SN_ffdhe8192 "ffdhe8192" #define NID_ffdhe8192 1130 +#define SN_modp_1536 "modp_1536" +#define NID_modp_1536 1212 + +#define SN_modp_2048 "modp_2048" +#define NID_modp_2048 1213 + +#define SN_modp_3072 "modp_3072" +#define NID_modp_3072 1214 + +#define SN_modp_4096 "modp_4096" +#define NID_modp_4096 1215 + +#define SN_modp_6144 "modp_6144" +#define NID_modp_6144 1216 + +#define SN_modp_8192 "modp_8192" +#define NID_modp_8192 1217 + #define SN_ISO_UA "ISO-UA" #define NID_ISO_UA 1150 #define OBJ_ISO_UA OBJ_member_body,804L @@ -5196,3 +5419,63 @@ #define LN_uacurve9 "DSTU curve 9" #define NID_uacurve9 1169 #define OBJ_uacurve9 OBJ_dstu4145le,2L,9L + +#define SN_aes_128_siv "AES-128-SIV" +#define LN_aes_128_siv "aes-128-siv" +#define NID_aes_128_siv 1198 + +#define SN_aes_192_siv "AES-192-SIV" +#define LN_aes_192_siv "aes-192-siv" +#define NID_aes_192_siv 1199 + +#define SN_aes_256_siv "AES-256-SIV" +#define LN_aes_256_siv "aes-256-siv" +#define NID_aes_256_siv 1200 + +#endif /* OPENSSL_OBJ_MAC_H */ + +#ifndef OPENSSL_NO_DEPRECATED_3_0 + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm SN_magma_ctr_acpkm +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm NID_magma_ctr_acpkm +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_magma_ctr_acpkm + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac SN_magma_ctr_acpkm_omac +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac NID_magma_ctr_acpkm_omac +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_magma_ctr_acpkm_omac + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm SN_kuznyechik_ctr_acpkm +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm NID_kuznyechik_ctr_acpkm +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_kuznyechik_ctr_acpkm + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac SN_kuznyechik_ctr_acpkm_omac +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac NID_kuznyechik_ctr_acpkm_omac +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_kuznyechik_ctr_acpkm_omac + +#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 SN_magma_kexp15 +#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 NID_magma_kexp15 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_magma_kexp15 + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 SN_kuznyechik_kexp15 +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 NID_kuznyechik_kexp15 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_kuznyechik_kexp15 + +#define SN_grasshopper_ecb SN_kuznyechik_ecb +#define NID_grasshopper_ecb NID_kuznyechik_ecb + +#define SN_grasshopper_ctr SN_kuznyechik_ctr +#define NID_grasshopper_ctr NID_kuznyechik_ctr + +#define SN_grasshopper_ofb SN_kuznyechik_ofb +#define NID_grasshopper_ofb NID_kuznyechik_ofb + +#define SN_grasshopper_cbc SN_kuznyechik_cbc +#define NID_grasshopper_cbc NID_kuznyechik_cbc + +#define SN_grasshopper_cfb SN_kuznyechik_cfb +#define NID_grasshopper_cfb NID_kuznyechik_cfb + +#define SN_grasshopper_mac SN_kuznyechik_mac +#define NID_grasshopper_mac NID_kuznyechik_mac + +#endif /* OPENSSL_NO_DEPRECATED_3_0 */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objects.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objects.h index 5e8b5762..9ea91c27 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objects.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objects.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OBJECTS_H -# define HEADER_OBJECTS_H +#ifndef OPENSSL_OBJECTS_H +# define OPENSSL_OBJECTS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OBJECTS_H +# endif # include # include @@ -20,7 +26,9 @@ # define OBJ_NAME_TYPE_CIPHER_METH 0x02 # define OBJ_NAME_TYPE_PKEY_METH 0x03 # define OBJ_NAME_TYPE_COMP_METH 0x04 -# define OBJ_NAME_TYPE_NUM 0x05 +# define OBJ_NAME_TYPE_MAC_METH 0x05 +# define OBJ_NAME_TYPE_KDF_METH 0x06 +# define OBJ_NAME_TYPE_NUM 0x07 # define OBJ_NAME_ALIAS 0x8000 @@ -55,7 +63,7 @@ void OBJ_NAME_do_all_sorted(int type, void (*fn) (const OBJ_NAME *, void *arg), void *arg); -ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); +DECLARE_ASN1_DUP_FUNCTION_name(ASN1_OBJECT, OBJ) ASN1_OBJECT *OBJ_nid2obj(int n); const char *OBJ_nid2ln(int n); const char *OBJ_nid2sn(int n); @@ -155,7 +163,7 @@ const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, int OBJ_new_nid(int num); int OBJ_add_object(const ASN1_OBJECT *obj); int OBJ_create(const char *oid, const char *sn, const char *ln); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OBJ_cleanup() while(0) continue #endif int OBJ_create_objects(BIO *in); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objectserr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objectserr.h index 02e166f1..585217f6 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objectserr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objectserr.h @@ -1,42 +1,28 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OBJERR_H -# define HEADER_OBJERR_H +#ifndef OPENSSL_OBJECTSERR_H +# define OPENSSL_OBJECTSERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OBJ_strings(void); -/* - * OBJ function codes. - */ -# define OBJ_F_OBJ_ADD_OBJECT 105 -# define OBJ_F_OBJ_ADD_SIGID 107 -# define OBJ_F_OBJ_CREATE 100 -# define OBJ_F_OBJ_DUP 101 -# define OBJ_F_OBJ_NAME_NEW_INDEX 106 -# define OBJ_F_OBJ_NID2LN 102 -# define OBJ_F_OBJ_NID2OBJ 103 -# define OBJ_F_OBJ_NID2SN 104 -# define OBJ_F_OBJ_TXT2OBJ 108 /* * OBJ reason codes. */ # define OBJ_R_OID_EXISTS 102 # define OBJ_R_UNKNOWN_NID 101 +# define OBJ_R_UNKNOWN_OBJECT_NAME 103 #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h index 4d759a49..142b1831 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h @@ -1,16 +1,29 @@ /* - * Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ocsp.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OCSP_H -# define HEADER_OCSP_H -#include + +#ifndef OPENSSL_OCSP_H +# define OPENSSL_OCSP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OCSP_H +# endif + +# include +# include +# include /* * These definitions are outside the OPENSSL_NO_OCSP guard because although for @@ -26,30 +39,34 @@ * superseded (4), * cessationOfOperation (5), * certificateHold (6), - * removeFromCRL (8) } + * -- value 7 is not used + * removeFromCRL (8), + * privilegeWithdrawn (9), + * aACompromise (10) } */ -# define OCSP_REVOKED_STATUS_NOSTATUS -1 -# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 -# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 -# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 -# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 -# define OCSP_REVOKED_STATUS_SUPERSEDED 4 -# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 -# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 -# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9 +# define OCSP_REVOKED_STATUS_AACOMPROMISE 10 # ifndef OPENSSL_NO_OCSP -# include # include # include # include # include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif /* Various flags and values */ @@ -67,19 +84,68 @@ extern "C" { # define OCSP_TRUSTOTHER 0x200 # define OCSP_RESPID_KEY 0x400 # define OCSP_NOTIME 0x800 +# define OCSP_PARTIAL_CHAIN 0x1000 typedef struct ocsp_cert_id_st OCSP_CERTID; - -DEFINE_STACK_OF(OCSP_CERTID) - typedef struct ocsp_one_request_st OCSP_ONEREQ; - -DEFINE_STACK_OF(OCSP_ONEREQ) - typedef struct ocsp_req_info_st OCSP_REQINFO; typedef struct ocsp_signature_st OCSP_SIGNATURE; typedef struct ocsp_request_st OCSP_REQUEST; +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_CERTID, OCSP_CERTID, OCSP_CERTID) +#define sk_OCSP_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_value(sk, idx) ((OCSP_CERTID *)OPENSSL_sk_value(ossl_check_const_OCSP_CERTID_sk_type(sk), (idx))) +#define sk_OCSP_CERTID_new(cmp) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new(ossl_check_OCSP_CERTID_compfunc_type(cmp))) +#define sk_OCSP_CERTID_new_null() ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_null()) +#define sk_OCSP_CERTID_new_reserve(cmp, n) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_CERTID_compfunc_type(cmp), (n))) +#define sk_OCSP_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_CERTID_sk_type(sk), (n)) +#define sk_OCSP_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_delete(sk, i) ((OCSP_CERTID *)OPENSSL_sk_delete(ossl_check_OCSP_CERTID_sk_type(sk), (i))) +#define sk_OCSP_CERTID_delete_ptr(sk, ptr) ((OCSP_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr))) +#define sk_OCSP_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_pop(sk) ((OCSP_CERTID *)OPENSSL_sk_pop(ossl_check_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_shift(sk) ((OCSP_CERTID *)OPENSSL_sk_shift(ossl_check_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_CERTID_sk_type(sk),ossl_check_OCSP_CERTID_freefunc_type(freefunc)) +#define sk_OCSP_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), (idx)) +#define sk_OCSP_CERTID_set(sk, idx, ptr) ((OCSP_CERTID *)OPENSSL_sk_set(ossl_check_OCSP_CERTID_sk_type(sk), (idx), ossl_check_OCSP_CERTID_type(ptr))) +#define sk_OCSP_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), pnum) +#define sk_OCSP_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_dup(sk) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_copyfunc_type(copyfunc), ossl_check_OCSP_CERTID_freefunc_type(freefunc))) +#define sk_OCSP_CERTID_set_cmp_func(sk, cmp) ((sk_OCSP_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_ONEREQ, OCSP_ONEREQ, OCSP_ONEREQ) +#define sk_OCSP_ONEREQ_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_value(sk, idx) ((OCSP_ONEREQ *)OPENSSL_sk_value(ossl_check_const_OCSP_ONEREQ_sk_type(sk), (idx))) +#define sk_OCSP_ONEREQ_new(cmp) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new(ossl_check_OCSP_ONEREQ_compfunc_type(cmp))) +#define sk_OCSP_ONEREQ_new_null() ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_null()) +#define sk_OCSP_ONEREQ_new_reserve(cmp, n) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_ONEREQ_compfunc_type(cmp), (n))) +#define sk_OCSP_ONEREQ_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_ONEREQ_sk_type(sk), (n)) +#define sk_OCSP_ONEREQ_free(sk) OPENSSL_sk_free(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_delete(sk, i) ((OCSP_ONEREQ *)OPENSSL_sk_delete(ossl_check_OCSP_ONEREQ_sk_type(sk), (i))) +#define sk_OCSP_ONEREQ_delete_ptr(sk, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr))) +#define sk_OCSP_ONEREQ_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_pop(sk) ((OCSP_ONEREQ *)OPENSSL_sk_pop(ossl_check_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_shift(sk) ((OCSP_ONEREQ *)OPENSSL_sk_shift(ossl_check_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_ONEREQ_sk_type(sk),ossl_check_OCSP_ONEREQ_freefunc_type(freefunc)) +#define sk_OCSP_ONEREQ_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), (idx)) +#define sk_OCSP_ONEREQ_set(sk, idx, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_set(ossl_check_OCSP_ONEREQ_sk_type(sk), (idx), ossl_check_OCSP_ONEREQ_type(ptr))) +#define sk_OCSP_ONEREQ_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), pnum) +#define sk_OCSP_ONEREQ_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_dup(sk) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_dup(ossl_check_const_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_copyfunc_type(copyfunc), ossl_check_OCSP_ONEREQ_freefunc_type(freefunc))) +#define sk_OCSP_ONEREQ_set_cmp_func(sk, cmp) ((sk_OCSP_ONEREQ_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_compfunc_type(cmp))) + + # define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 # define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 # define OCSP_RESPONSE_STATUS_INTERNALERROR 2 @@ -92,7 +158,33 @@ typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; # define V_OCSP_RESPID_NAME 0 # define V_OCSP_RESPID_KEY 1 -DEFINE_STACK_OF(OCSP_RESPID) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_RESPID, OCSP_RESPID, OCSP_RESPID) +#define sk_OCSP_RESPID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_value(sk, idx) ((OCSP_RESPID *)OPENSSL_sk_value(ossl_check_const_OCSP_RESPID_sk_type(sk), (idx))) +#define sk_OCSP_RESPID_new(cmp) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new(ossl_check_OCSP_RESPID_compfunc_type(cmp))) +#define sk_OCSP_RESPID_new_null() ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_null()) +#define sk_OCSP_RESPID_new_reserve(cmp, n) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_RESPID_compfunc_type(cmp), (n))) +#define sk_OCSP_RESPID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_RESPID_sk_type(sk), (n)) +#define sk_OCSP_RESPID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_delete(sk, i) ((OCSP_RESPID *)OPENSSL_sk_delete(ossl_check_OCSP_RESPID_sk_type(sk), (i))) +#define sk_OCSP_RESPID_delete_ptr(sk, ptr) ((OCSP_RESPID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr))) +#define sk_OCSP_RESPID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_pop(sk) ((OCSP_RESPID *)OPENSSL_sk_pop(ossl_check_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_shift(sk) ((OCSP_RESPID *)OPENSSL_sk_shift(ossl_check_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_RESPID_sk_type(sk),ossl_check_OCSP_RESPID_freefunc_type(freefunc)) +#define sk_OCSP_RESPID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), (idx)) +#define sk_OCSP_RESPID_set(sk, idx, ptr) ((OCSP_RESPID *)OPENSSL_sk_set(ossl_check_OCSP_RESPID_sk_type(sk), (idx), ossl_check_OCSP_RESPID_type(ptr))) +#define sk_OCSP_RESPID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), pnum) +#define sk_OCSP_RESPID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_dup(sk) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_copyfunc_type(copyfunc), ossl_check_OCSP_RESPID_freefunc_type(freefunc))) +#define sk_OCSP_RESPID_set_cmp_func(sk, cmp) ((sk_OCSP_RESPID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_compfunc_type(cmp))) + typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; @@ -103,7 +195,33 @@ typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; typedef struct ocsp_single_response_st OCSP_SINGLERESP; -DEFINE_STACK_OF(OCSP_SINGLERESP) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_SINGLERESP, OCSP_SINGLERESP, OCSP_SINGLERESP) +#define sk_OCSP_SINGLERESP_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_value(sk, idx) ((OCSP_SINGLERESP *)OPENSSL_sk_value(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), (idx))) +#define sk_OCSP_SINGLERESP_new(cmp) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp))) +#define sk_OCSP_SINGLERESP_new_null() ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_null()) +#define sk_OCSP_SINGLERESP_new_reserve(cmp, n) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp), (n))) +#define sk_OCSP_SINGLERESP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_SINGLERESP_sk_type(sk), (n)) +#define sk_OCSP_SINGLERESP_free(sk) OPENSSL_sk_free(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_delete(sk, i) ((OCSP_SINGLERESP *)OPENSSL_sk_delete(ossl_check_OCSP_SINGLERESP_sk_type(sk), (i))) +#define sk_OCSP_SINGLERESP_delete_ptr(sk, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr))) +#define sk_OCSP_SINGLERESP_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_pop(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_pop(ossl_check_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_shift(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_shift(ossl_check_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_SINGLERESP_sk_type(sk),ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc)) +#define sk_OCSP_SINGLERESP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), (idx)) +#define sk_OCSP_SINGLERESP_set(sk, idx, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_set(ossl_check_OCSP_SINGLERESP_sk_type(sk), (idx), ossl_check_OCSP_SINGLERESP_type(ptr))) +#define sk_OCSP_SINGLERESP_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), pnum) +#define sk_OCSP_SINGLERESP_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_dup(sk) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_dup(ossl_check_const_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_copyfunc_type(copyfunc), ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc))) +#define sk_OCSP_SINGLERESP_set_cmp_func(sk, cmp) ((sk_OCSP_SINGLERESP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_compfunc_type(cmp))) + typedef struct ocsp_response_data_st OCSP_RESPDATA; @@ -143,28 +261,37 @@ typedef struct ocsp_service_locator_st OCSP_SERVICELOC; ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) # define OCSP_CERTSTATUS_dup(cs)\ - (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ - (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) + (OCSP_CERTSTATUS*)ASN1_dup((i2d_of_void *)i2d_OCSP_CERTSTATUS,\ + (d2i_of_void *)d2i_OCSP_CERTSTATUS,(char *)(cs)) -OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); +DECLARE_ASN1_DUP_FUNCTION(OCSP_CERTID) +OSSL_HTTP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, + const OCSP_REQUEST *req, int buf_size); OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); -OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, - int maxline); -int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); -int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); -OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); -void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); -void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); -int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, - ASN1_VALUE *val); -int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, - const ASN1_ITEM *it); -BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); -int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); -int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); -int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, - const char *name, const char *value); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef OSSL_HTTP_REQ_CTX OCSP_REQ_CTX; +# define OCSP_REQ_CTX_new(io, buf_size) \ + OSSL_HTTP_REQ_CTX_new(io, io, buf_size) +# define OCSP_REQ_CTX_free OSSL_HTTP_REQ_CTX_free +# define OCSP_REQ_CTX_http(rctx, op, path) \ + (OSSL_HTTP_REQ_CTX_set_expected(rctx, NULL, 1 /* asn1 */, 0, 0) && \ + OSSL_HTTP_REQ_CTX_set_request_line(rctx, strcmp(op, "POST") == 0, \ + NULL, NULL, path)) +# define OCSP_REQ_CTX_add1_header OSSL_HTTP_REQ_CTX_add1_header +# define OCSP_REQ_CTX_i2d(r, it, req) \ + OSSL_HTTP_REQ_CTX_set1_req(r, "application/ocsp-request", it, req) +# define OCSP_REQ_CTX_set1_req(r, req) \ + OCSP_REQ_CTX_i2d(r, ASN1_ITEM_rptr(OCSP_REQUEST), (ASN1_VALUE *)(req)) +# define OCSP_REQ_CTX_nbio OSSL_HTTP_REQ_CTX_nbio +# define OCSP_REQ_CTX_nbio_d2i OSSL_HTTP_REQ_CTX_nbio_d2i +# define OCSP_sendreq_nbio(p, r) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(r, (ASN1_VALUE **)(p), \ + ASN1_ITEM_rptr(OCSP_RESPONSE)) +# define OCSP_REQ_CTX_get0_mem_bio OSSL_HTTP_REQ_CTX_get0_mem_bio +# define OCSP_set_max_response_length OSSL_HTTP_REQ_CTX_set_max_response_length +# endif OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, const X509 *issuer); @@ -181,7 +308,7 @@ int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); -int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); +int OCSP_request_set1_name(OCSP_REQUEST *req, const X509_NAME *nm); int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); int OCSP_request_sign(OCSP_REQUEST *req, @@ -226,8 +353,8 @@ int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, X509_STORE *store, unsigned long flags); -int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, - int *pssl); +# define OCSP_parse_url(url, host, port, path, ssl) \ + OSSL_HTTP_parse_url(url, ssl, NULL, host, port, NULL, path, NULL, NULL) int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); @@ -254,7 +381,11 @@ int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, X509 *signer, EVP_MD_CTX *ctx, STACK_OF(X509) *certs, unsigned long flags); int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key_ex(OCSP_RESPID *respid, X509 *cert, + OSSL_LIB_CTX *libctx, const char *propq); int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match_ex(OCSP_RESPID *respid, X509 *cert, OSSL_LIB_CTX *libctx, + const char *propq); int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); @@ -263,7 +394,7 @@ X509_EXTENSION *OCSP_accept_responses_new(char **oids); X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); -X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, const char **urls); +X509_EXTENSION *OCSP_url_svcloc_new(const X509_NAME *issuer, const char **urls); int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); @@ -348,5 +479,5 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, # ifdef __cplusplus } # endif -# endif +# endif /* !defined(OPENSSL_NO_OCSP) */ #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h.in new file mode 100644 index 00000000..e2cc2716 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h.in @@ -0,0 +1,387 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_OCSP_H +# define OPENSSL_OCSP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OCSP_H +# endif + +# include +# include +# include + +/* + * These definitions are outside the OPENSSL_NO_OCSP guard because although for + * historical reasons they have OCSP_* names, they can actually be used + * independently of OCSP. E.g. see RFC5280 + */ +/*- + * CRLReason ::= ENUMERATED { + * unspecified (0), + * keyCompromise (1), + * cACompromise (2), + * affiliationChanged (3), + * superseded (4), + * cessationOfOperation (5), + * certificateHold (6), + * -- value 7 is not used + * removeFromCRL (8), + * privilegeWithdrawn (9), + * aACompromise (10) } + */ +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9 +# define OCSP_REVOKED_STATUS_AACOMPROMISE 10 + + +# ifndef OPENSSL_NO_OCSP + +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Various flags and values */ + +# define OCSP_DEFAULT_NONCE_LENGTH 16 + +# define OCSP_NOCERTS 0x1 +# define OCSP_NOINTERN 0x2 +# define OCSP_NOSIGS 0x4 +# define OCSP_NOCHAIN 0x8 +# define OCSP_NOVERIFY 0x10 +# define OCSP_NOEXPLICIT 0x20 +# define OCSP_NOCASIGN 0x40 +# define OCSP_NODELEGATED 0x80 +# define OCSP_NOCHECKS 0x100 +# define OCSP_TRUSTOTHER 0x200 +# define OCSP_RESPID_KEY 0x400 +# define OCSP_NOTIME 0x800 +# define OCSP_PARTIAL_CHAIN 0x1000 + +typedef struct ocsp_cert_id_st OCSP_CERTID; +typedef struct ocsp_one_request_st OCSP_ONEREQ; +typedef struct ocsp_req_info_st OCSP_REQINFO; +typedef struct ocsp_signature_st OCSP_SIGNATURE; +typedef struct ocsp_request_st OCSP_REQUEST; + +{- + generate_stack_macros("OCSP_CERTID") + .generate_stack_macros("OCSP_ONEREQ"); +-} + +# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 +# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 +# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 +# define OCSP_RESPONSE_STATUS_TRYLATER 3 +# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 +# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 + +typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; + +# define V_OCSP_RESPID_NAME 0 +# define V_OCSP_RESPID_KEY 1 + +{- + generate_stack_macros("OCSP_RESPID"); +-} + +typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; + +# define V_OCSP_CERTSTATUS_GOOD 0 +# define V_OCSP_CERTSTATUS_REVOKED 1 +# define V_OCSP_CERTSTATUS_UNKNOWN 2 + +typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; +typedef struct ocsp_single_response_st OCSP_SINGLERESP; + +{- + generate_stack_macros("OCSP_SINGLERESP"); +-} + +typedef struct ocsp_response_data_st OCSP_RESPDATA; + +typedef struct ocsp_basic_response_st OCSP_BASICRESP; + +typedef struct ocsp_crl_id_st OCSP_CRLID; +typedef struct ocsp_service_locator_st OCSP_SERVICELOC; + +# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" +# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" + +# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) + +# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) + +# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ + (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST, \ + bp,(char **)(x),cb,NULL) + +# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb) (OCSP_RESPONSE *)PEM_ASN1_read_bio(\ + (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE, \ + bp,(char **)(x),cb,NULL) + +# define PEM_write_bio_OCSP_REQUEST(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define PEM_write_bio_OCSP_RESPONSE(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) + +# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) + +# define ASN1_BIT_STRING_digest(data,type,md,len) \ + ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) + +# define OCSP_CERTSTATUS_dup(cs)\ + (OCSP_CERTSTATUS*)ASN1_dup((i2d_of_void *)i2d_OCSP_CERTSTATUS,\ + (d2i_of_void *)d2i_OCSP_CERTSTATUS,(char *)(cs)) + +DECLARE_ASN1_DUP_FUNCTION(OCSP_CERTID) + +OSSL_HTTP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, + const OCSP_REQUEST *req, int buf_size); +OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef OSSL_HTTP_REQ_CTX OCSP_REQ_CTX; +# define OCSP_REQ_CTX_new(io, buf_size) \ + OSSL_HTTP_REQ_CTX_new(io, io, buf_size) +# define OCSP_REQ_CTX_free OSSL_HTTP_REQ_CTX_free +# define OCSP_REQ_CTX_http(rctx, op, path) \ + (OSSL_HTTP_REQ_CTX_set_expected(rctx, NULL, 1 /* asn1 */, 0, 0) && \ + OSSL_HTTP_REQ_CTX_set_request_line(rctx, strcmp(op, "POST") == 0, \ + NULL, NULL, path)) +# define OCSP_REQ_CTX_add1_header OSSL_HTTP_REQ_CTX_add1_header +# define OCSP_REQ_CTX_i2d(r, it, req) \ + OSSL_HTTP_REQ_CTX_set1_req(r, "application/ocsp-request", it, req) +# define OCSP_REQ_CTX_set1_req(r, req) \ + OCSP_REQ_CTX_i2d(r, ASN1_ITEM_rptr(OCSP_REQUEST), (ASN1_VALUE *)(req)) +# define OCSP_REQ_CTX_nbio OSSL_HTTP_REQ_CTX_nbio +# define OCSP_REQ_CTX_nbio_d2i OSSL_HTTP_REQ_CTX_nbio_d2i +# define OCSP_sendreq_nbio(p, r) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(r, (ASN1_VALUE **)(p), \ + ASN1_ITEM_rptr(OCSP_RESPONSE)) +# define OCSP_REQ_CTX_get0_mem_bio OSSL_HTTP_REQ_CTX_get0_mem_bio +# define OCSP_set_max_response_length OSSL_HTTP_REQ_CTX_set_max_response_length +# endif + +OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, + const X509 *issuer); + +OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, + const X509_NAME *issuerName, + const ASN1_BIT_STRING *issuerKey, + const ASN1_INTEGER *serialNumber); + +OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); + +int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); +int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); +int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); +int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); + +int OCSP_request_set1_name(OCSP_REQUEST *req, const X509_NAME *nm); +int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); + +int OCSP_request_sign(OCSP_REQUEST *req, + X509 *signer, + EVP_PKEY *key, + const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); + +int OCSP_response_status(OCSP_RESPONSE *resp); +OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); + +const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); +const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs); +const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer, + STACK_OF(X509) *extra_certs); + +int OCSP_resp_count(OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); +const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(const OCSP_BASICRESP* bs); +const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, + const ASN1_OCTET_STRING **pid, + const X509_NAME **pname); +int OCSP_resp_get1_id(const OCSP_BASICRESP *bs, + ASN1_OCTET_STRING **pid, + X509_NAME **pname); + +int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); +int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, + int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, + ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); + +int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, + X509_STORE *store, unsigned long flags); + +# define OCSP_parse_url(url, host, port, path, ssl) \ + OSSL_HTTP_parse_url(url, ssl, NULL, host, port, NULL, path, NULL, NULL) + +int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); +int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); + +int OCSP_request_onereq_count(OCSP_REQUEST *req); +OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); +OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); +int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, + ASN1_OCTET_STRING **pikeyHash, + ASN1_INTEGER **pserial, OCSP_CERTID *cid); +int OCSP_request_is_signed(OCSP_REQUEST *req); +OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, + OCSP_CERTID *cid, + int status, int reason, + ASN1_TIME *revtime, + ASN1_TIME *thisupd, + ASN1_TIME *nextupd); +int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); +int OCSP_basic_sign(OCSP_BASICRESP *brsp, + X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, + X509 *signer, EVP_MD_CTX *ctx, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key_ex(OCSP_RESPID *respid, X509 *cert, + OSSL_LIB_CTX *libctx, const char *propq); +int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match_ex(OCSP_RESPID *respid, X509 *cert, OSSL_LIB_CTX *libctx, + const char *propq); +int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); + +X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); + +X509_EXTENSION *OCSP_accept_responses_new(char **oids); + +X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); + +X509_EXTENSION *OCSP_url_svcloc_new(const X509_NAME *issuer, const char **urls); + +int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); +int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); +int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); +X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); +X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); +void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, + int *idx); +int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); + +int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); +int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); +int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, const ASN1_OBJECT *obj, int lastpos); +int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); +X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); +X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); +void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); +int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); + +int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); +int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); +int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); +X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); +void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, + int *idx); +int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); + +int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); +int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); +int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); +X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); +void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, + int *idx); +int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); +const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x); + +DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) +DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) +DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) +DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) +DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) +DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) +DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) + +const char *OCSP_response_status_str(long s); +const char *OCSP_cert_status_str(long s); +const char *OCSP_crl_reason_str(long s); + +int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); +int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); + +int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, + X509_STORE *st, unsigned long flags); + + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_OCSP) */ +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsperr.h index 8dd9e01a..46a0523c 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsperr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsperr.h @@ -1,57 +1,34 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OCSPERR_H -# define HEADER_OCSPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_OCSPERR_H +# define OPENSSL_OCSPERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_OCSP -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OCSP_strings(void); - -/* - * OCSP function codes. - */ -# define OCSP_F_D2I_OCSP_NONCE 102 -# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 -# define OCSP_F_OCSP_BASIC_SIGN 104 -# define OCSP_F_OCSP_BASIC_SIGN_CTX 119 -# define OCSP_F_OCSP_BASIC_VERIFY 105 -# define OCSP_F_OCSP_CERT_ID_NEW 101 -# define OCSP_F_OCSP_CHECK_DELEGATED 106 -# define OCSP_F_OCSP_CHECK_IDS 107 -# define OCSP_F_OCSP_CHECK_ISSUER 108 -# define OCSP_F_OCSP_CHECK_VALIDITY 115 -# define OCSP_F_OCSP_MATCH_ISSUERID 109 -# define OCSP_F_OCSP_PARSE_URL 114 -# define OCSP_F_OCSP_REQUEST_SIGN 110 -# define OCSP_F_OCSP_REQUEST_VERIFY 116 -# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 -# define OCSP_F_PARSE_HTTP_LINE1 118 /* * OCSP reason codes. */ # define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 # define OCSP_R_DIGEST_ERR 102 +# define OCSP_R_DIGEST_NAME_ERR 106 +# define OCSP_R_DIGEST_SIZE_ERR 107 # define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 # define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 -# define OCSP_R_ERROR_PARSING_URL 121 # define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 # define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 # define OCSP_R_NOT_BASIC_RESPONSE 104 @@ -63,8 +40,6 @@ int ERR_load_OCSP_strings(void); # define OCSP_R_REQUEST_NOT_SIGNED 128 # define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 # define OCSP_R_ROOT_CA_NOT_TRUSTED 112 -# define OCSP_R_SERVER_RESPONSE_ERROR 114 -# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 # define OCSP_R_SIGNATURE_FAILURE 117 # define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 # define OCSP_R_STATUS_EXPIRED 125 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslconf.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslconf.h index 2b8850ca..1e83371f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslconf.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslconf.h @@ -1,203 +1,17 @@ /* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/opensslconf.h.in + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OPENSSL_OPENSSLCONF_H +# define OPENSSL_OPENSSLCONF_H +# pragma once -#ifdef __cplusplus -extern "C" { -#endif +# include +# include -#ifdef OPENSSL_ALGORITHM_DEFINES -# error OPENSSL_ALGORITHM_DEFINES no longer supported -#endif - -/* - * OpenSSL was configured with the following options: - */ - -#ifndef OPENSSL_NO_MD2 -# define OPENSSL_NO_MD2 -#endif -#ifndef OPENSSL_NO_RC5 -# define OPENSSL_NO_RC5 -#endif -#ifndef OPENSSL_THREADS -# define OPENSSL_THREADS -#endif -#ifndef OPENSSL_RAND_SEED_OS -# define OPENSSL_RAND_SEED_OS -#endif -#ifndef OPENSSL_NO_AFALGENG -# define OPENSSL_NO_AFALGENG -#endif -#ifndef OPENSSL_NO_ASAN -# define OPENSSL_NO_ASAN -#endif -#ifndef OPENSSL_NO_CRYPTO_MDEBUG -# define OPENSSL_NO_CRYPTO_MDEBUG -#endif -#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -#endif -#ifndef OPENSSL_NO_DEVCRYPTOENG -# define OPENSSL_NO_DEVCRYPTOENG -#endif -#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -# define OPENSSL_NO_EC_NISTP_64_GCC_128 -#endif -#ifndef OPENSSL_NO_EGD -# define OPENSSL_NO_EGD -#endif -#ifndef OPENSSL_NO_EXTERNAL_TESTS -# define OPENSSL_NO_EXTERNAL_TESTS -#endif -#ifndef OPENSSL_NO_FUZZ_AFL -# define OPENSSL_NO_FUZZ_AFL -#endif -#ifndef OPENSSL_NO_FUZZ_LIBFUZZER -# define OPENSSL_NO_FUZZ_LIBFUZZER -#endif -#ifndef OPENSSL_NO_HEARTBEATS -# define OPENSSL_NO_HEARTBEATS -#endif -#ifndef OPENSSL_NO_MSAN -# define OPENSSL_NO_MSAN -#endif -#ifndef OPENSSL_NO_SCTP -# define OPENSSL_NO_SCTP -#endif -#ifndef OPENSSL_NO_SSL_TRACE -# define OPENSSL_NO_SSL_TRACE -#endif -#ifndef OPENSSL_NO_SSL3 -# define OPENSSL_NO_SSL3 -#endif -#ifndef OPENSSL_NO_SSL3_METHOD -# define OPENSSL_NO_SSL3_METHOD -#endif -#ifndef OPENSSL_NO_TESTS -# define OPENSSL_NO_TESTS -#endif -#ifndef OPENSSL_NO_UBSAN -# define OPENSSL_NO_UBSAN -#endif -#ifndef OPENSSL_NO_UNIT_TEST -# define OPENSSL_NO_UNIT_TEST -#endif -#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS -# define OPENSSL_NO_WEAK_SSL_CIPHERS -#endif -#ifndef OPENSSL_NO_STATIC_ENGINE -# define OPENSSL_NO_STATIC_ENGINE -#endif - - -/* - * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers - * don't like that. This will hopefully silence them. - */ -#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; - -/* - * Applications should use -DOPENSSL_API_COMPAT= to suppress the - * declarations of functions deprecated in or before . Otherwise, they - * still won't see them if the library has been built to disable deprecated - * functions. - */ -#ifndef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# elif defined(__SUNPRO_C) -# if (__SUNPRO_C >= 0x5130) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# endif -#endif - -#ifndef OPENSSL_FILE -# ifdef OPENSSL_NO_FILENAMES -# define OPENSSL_FILE "" -# define OPENSSL_LINE 0 -# else -# define OPENSSL_FILE __FILE__ -# define OPENSSL_LINE __LINE__ -# endif -#endif - -#ifndef OPENSSL_MIN_API -# define OPENSSL_MIN_API 0 -#endif - -#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API -# undef OPENSSL_API_COMPAT -# define OPENSSL_API_COMPAT OPENSSL_MIN_API -#endif - -/* - * Do not deprecate things to be deprecated in version 1.2.0 before the - * OpenSSL version number matches. - */ -#if OPENSSL_VERSION_NUMBER < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) f; -#elif OPENSSL_API_COMPAT < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_2_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10100000L -# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_1_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10000000L -# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_0_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x00908000L -# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_0_9_8(f) -#endif - -/* Generate 80386 code? */ -#undef I386_ONLY - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD - -#undef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* - * The following are cipher-specific, but are part of the public API. - */ -#if !defined(OPENSSL_SYS_UEFI) -# define BN_LLONG -/* Only one for the following should be defined */ -# undef SIXTY_FOUR_BIT_LONG -# undef SIXTY_FOUR_BIT -# define THIRTY_TWO_BIT -#endif - -#define RC4_INT unsigned char - -#ifdef __cplusplus -} -#endif +#endif /* OPENSSL_OPENSSLCONF_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslconf.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslconf.h.in deleted file mode 100644 index 06270922..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslconf.h.in +++ /dev/null @@ -1,160 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef OPENSSL_ALGORITHM_DEFINES -# error OPENSSL_ALGORITHM_DEFINES no longer supported -#endif - -/* - * OpenSSL was configured with the following options: - */ - -{- if (@{$config{openssl_sys_defines}}) { - foreach (@{$config{openssl_sys_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_ 1\n"; - $OUT .= "#endif\n"; - } - } - foreach (@{$config{openssl_api_defines}}) { - (my $macro, my $value) = $_ =~ /^(.*?)=(.*?)$/; - $OUT .= "#define $macro $value\n"; - } - if (@{$config{openssl_algorithm_defines}}) { - foreach (@{$config{openssl_algorithm_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - if (@{$config{openssl_thread_defines}}) { - foreach (@{$config{openssl_thread_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - if (@{$config{openssl_other_defines}}) { - foreach (@{$config{openssl_other_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - ""; --} - -/* - * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers - * don't like that. This will hopefully silence them. - */ -#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; - -/* - * Applications should use -DOPENSSL_API_COMPAT= to suppress the - * declarations of functions deprecated in or before . Otherwise, they - * still won't see them if the library has been built to disable deprecated - * functions. - */ -#ifndef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# elif defined(__SUNPRO_C) -# if (__SUNPRO_C >= 0x5130) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# endif -#endif - -#ifndef OPENSSL_FILE -# ifdef OPENSSL_NO_FILENAMES -# define OPENSSL_FILE "" -# define OPENSSL_LINE 0 -# else -# define OPENSSL_FILE __FILE__ -# define OPENSSL_LINE __LINE__ -# endif -#endif - -#ifndef OPENSSL_MIN_API -# define OPENSSL_MIN_API 0 -#endif - -#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API -# undef OPENSSL_API_COMPAT -# define OPENSSL_API_COMPAT OPENSSL_MIN_API -#endif - -/* - * Do not deprecate things to be deprecated in version 1.2.0 before the - * OpenSSL version number matches. - */ -#if OPENSSL_VERSION_NUMBER < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) f; -#elif OPENSSL_API_COMPAT < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_2_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10100000L -# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_1_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10000000L -# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_0_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x00908000L -# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_0_9_8(f) -#endif - -/* Generate 80386 code? */ -{- $config{processor} eq "386" ? "#define" : "#undef" -} I386_ONLY - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD {- $target{unistd} -} - -{- $config{export_var_as_fn} ? "#define" : "#undef" -} OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* - * The following are cipher-specific, but are part of the public API. - */ -#if !defined(OPENSSL_SYS_UEFI) -{- $config{bn_ll} ? "# define" : "# undef" -} BN_LLONG -/* Only one for the following should be defined */ -{- $config{b64l} ? "# define" : "# undef" -} SIXTY_FOUR_BIT_LONG -{- $config{b64} ? "# define" : "# undef" -} SIXTY_FOUR_BIT -{- $config{b32} ? "# define" : "# undef" -} THIRTY_TWO_BIT -#endif - -#define RC4_INT {- $config{rc4_int} -} - -#ifdef __cplusplus -} -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h index 5667d471..6b7364f4 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h @@ -1,101 +1,114 @@ /* - * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslv.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OPENSSLV_H -# define HEADER_OPENSSLV_H +#ifndef OPENSSL_OPENSSLV_H +# define OPENSSL_OPENSSLV_H +# pragma once -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -/*- - * Numeric release version identifier: - * MNNFFPPS: major minor fix patch status - * The status nibble has one of the values 0 for development, 1 to e for betas - * 1 to 14, and f for release. The patch level is exactly that. - * For example: - * 0.9.3-dev 0x00903000 - * 0.9.3-beta1 0x00903001 - * 0.9.3-beta2-dev 0x00903002 - * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) - * 0.9.3 0x0090300f - * 0.9.3a 0x0090301f - * 0.9.4 0x0090400f - * 1.2.3z 0x102031af - * - * For continuity reasons (because 0.9.5 is already out, and is coded - * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level - * part is slightly different, by setting the highest bit. This means - * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start - * with 0x0090600S... - * - * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) - * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for - * major minor fix final patch/beta) +/* + * SECTION 1: VERSION DATA. These will change for each release */ -# define OPENSSL_VERSION_NUMBER 0x1010117fL -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1w 11 Sep 2023" -/*- - * The macros below are to be used for shared library (.so, .dll, ...) - * versioning. That kind of versioning works a bit differently between - * operating systems. The most usual scheme is to set a major and a minor - * number, and have the runtime loader check that the major number is equal - * to what it was at application link time, while the minor number has to - * be greater or equal to what it was at application link time. With this - * scheme, the version number is usually part of the file name, like this: +/* + * Base version macros * - * libcrypto.so.0.9 - * - * Some unixen also make a softlink with the major version number only: - * - * libcrypto.so.0 - * - * On Tru64 and IRIX 6.x it works a little bit differently. There, the - * shared library version is stored in the file, and is actually a series - * of versions, separated by colons. The rightmost version present in the - * library when linking an application is stored in the application to be - * matched at run time. When the application is run, a check is done to - * see if the library version stored in the application matches any of the - * versions in the version string of the library itself. - * This version string can be constructed in any way, depending on what - * kind of matching is desired. However, to implement the same scheme as - * the one used in the other unixen, all compatible versions, from lowest - * to highest, should be part of the string. Consecutive builds would - * give the following versions strings: - * - * 3.0 - * 3.0:3.1 - * 3.0:3.1:3.2 - * 4.0 - * 4.0:4.1 - * - * Notice how version 4 is completely incompatible with version, and - * therefore give the breach you can see. - * - * There may be other schemes as well that I haven't yet discovered. - * - * So, here's the way it works here: first of all, the library version - * number doesn't need at all to match the overall OpenSSL version. - * However, it's nice and more understandable if it actually does. - * The current library version is stored in the macro SHLIB_VERSION_NUMBER, - * which is just a piece of text in the format "M.m.e" (Major, minor, edit). - * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, - * we need to keep a history of version numbers, which is done in the - * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and - * should only keep the versions that are binary compatible with the current. + * These macros express version number MAJOR.MINOR.PATCH exactly */ -# define SHLIB_VERSION_HISTORY "" -# define SHLIB_VERSION_NUMBER "1.1" +# define OPENSSL_VERSION_MAJOR 3 +# define OPENSSL_VERSION_MINOR 1 +# define OPENSSL_VERSION_PATCH 3 +/* + * Additional version information + * + * These are also part of the new version scheme, but aren't part + * of the version number itself. + */ -#ifdef __cplusplus +/* Could be: #define OPENSSL_VERSION_PRE_RELEASE "-alpha.1" */ +# define OPENSSL_VERSION_PRE_RELEASE "" +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+fips" */ +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+vendor.1" */ +# define OPENSSL_VERSION_BUILD_METADATA "" + +/* + * Note: The OpenSSL Project will never define OPENSSL_VERSION_BUILD_METADATA + * to be anything but the empty string. Its use is entirely reserved for + * others + */ + +/* + * Shared library version + * + * This is strictly to express ABI version, which may or may not + * be related to the API version expressed with the macros above. + * This is defined in free form. + */ +# define OPENSSL_SHLIB_VERSION 3 + +/* + * SECTION 2: USEFUL MACROS + */ + +/* For checking general API compatibility when preprocessing */ +# define OPENSSL_VERSION_PREREQ(maj,min) \ + ((OPENSSL_VERSION_MAJOR << 16) + OPENSSL_VERSION_MINOR >= ((maj) << 16) + (min)) + +/* + * Macros to get the version in easily digested string form, both the short + * "MAJOR.MINOR.PATCH" variant (where MAJOR, MINOR and PATCH are replaced + * with the values from the corresponding OPENSSL_VERSION_ macros) and the + * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and + * OPENSSL_VERSION_BUILD_METADATA_STR appended. + */ +# define OPENSSL_VERSION_STR "3.1.3" +# define OPENSSL_FULL_VERSION_STR "3.1.3" + +/* + * SECTION 3: ADDITIONAL METADATA + * + * These strings are defined separately to allow them to be parsable. + */ +# define OPENSSL_RELEASE_DATE "19 Sep 2023" + +/* + * SECTION 4: BACKWARD COMPATIBILITY + */ + +# define OPENSSL_VERSION_TEXT "OpenSSL 3.1.3 19 Sep 2023" + +/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ +# ifdef OPENSSL_VERSION_PRE_RELEASE +# define _OPENSSL_VERSION_PRE_RELEASE 0x0L +# else +# define _OPENSSL_VERSION_PRE_RELEASE 0xfL +# endif +# define OPENSSL_VERSION_NUMBER \ + ( (OPENSSL_VERSION_MAJOR<<28) \ + |(OPENSSL_VERSION_MINOR<<20) \ + |(OPENSSL_VERSION_PATCH<<4) \ + |_OPENSSL_VERSION_PRE_RELEASE ) + +# ifdef __cplusplus } -#endif -#endif /* HEADER_OPENSSLV_H */ +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OPENSSLV_H +# endif + +#endif /* OPENSSL_OPENSSLV_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h.in new file mode 100644 index 00000000..3f47a2ac --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h.in @@ -0,0 +1,113 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_OPENSSLV_H +# define OPENSSL_OPENSSLV_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * SECTION 1: VERSION DATA. These will change for each release + */ + +/* + * Base version macros + * + * These macros express version number MAJOR.MINOR.PATCH exactly + */ +# define OPENSSL_VERSION_MAJOR {- $config{major} -} +# define OPENSSL_VERSION_MINOR {- $config{minor} -} +# define OPENSSL_VERSION_PATCH {- $config{patch} -} + +/* + * Additional version information + * + * These are also part of the new version scheme, but aren't part + * of the version number itself. + */ + +/* Could be: #define OPENSSL_VERSION_PRE_RELEASE "-alpha.1" */ +# define OPENSSL_VERSION_PRE_RELEASE "{- $config{prerelease} -}" +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+fips" */ +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+vendor.1" */ +# define OPENSSL_VERSION_BUILD_METADATA "{- $config{build_metadata} -}" + +/* + * Note: The OpenSSL Project will never define OPENSSL_VERSION_BUILD_METADATA + * to be anything but the empty string. Its use is entirely reserved for + * others + */ + +/* + * Shared library version + * + * This is strictly to express ABI version, which may or may not + * be related to the API version expressed with the macros above. + * This is defined in free form. + */ +# define OPENSSL_SHLIB_VERSION {- $config{shlib_version} -} + +/* + * SECTION 2: USEFUL MACROS + */ + +/* For checking general API compatibility when preprocessing */ +# define OPENSSL_VERSION_PREREQ(maj,min) \ + ((OPENSSL_VERSION_MAJOR << 16) + OPENSSL_VERSION_MINOR >= ((maj) << 16) + (min)) + +/* + * Macros to get the version in easily digested string form, both the short + * "MAJOR.MINOR.PATCH" variant (where MAJOR, MINOR and PATCH are replaced + * with the values from the corresponding OPENSSL_VERSION_ macros) and the + * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and + * OPENSSL_VERSION_BUILD_METADATA_STR appended. + */ +# define OPENSSL_VERSION_STR "{- $config{version} -}" +# define OPENSSL_FULL_VERSION_STR "{- $config{full_version} -}" + +/* + * SECTION 3: ADDITIONAL METADATA + * + * These strings are defined separately to allow them to be parsable. + */ +# define OPENSSL_RELEASE_DATE "{- $config{release_date} -}" + +/* + * SECTION 4: BACKWARD COMPATIBILITY + */ + +# define OPENSSL_VERSION_TEXT "OpenSSL {- "$config{full_version} $config{release_date}" -}" + +/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ +# ifdef OPENSSL_VERSION_PRE_RELEASE +# define _OPENSSL_VERSION_PRE_RELEASE 0x0L +# else +# define _OPENSSL_VERSION_PRE_RELEASE 0xfL +# endif +# define OPENSSL_VERSION_NUMBER \ + ( (OPENSSL_VERSION_MAJOR<<28) \ + |(OPENSSL_VERSION_MINOR<<20) \ + |(OPENSSL_VERSION_PATCH<<4) \ + |_OPENSSL_VERSION_PRE_RELEASE ) + +# ifdef __cplusplus +} +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OPENSSLV_H +# endif + +#endif /* OPENSSL_OPENSSLV_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ossl_typ.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ossl_typ.h index e0edfaaf..82a58988 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ossl_typ.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ossl_typ.h @@ -1,197 +1,16 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OPENSSL_TYPES_H -# define HEADER_OPENSSL_TYPES_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# ifdef NO_ASN1_TYPEDEFS -# define ASN1_INTEGER ASN1_STRING -# define ASN1_ENUMERATED ASN1_STRING -# define ASN1_BIT_STRING ASN1_STRING -# define ASN1_OCTET_STRING ASN1_STRING -# define ASN1_PRINTABLESTRING ASN1_STRING -# define ASN1_T61STRING ASN1_STRING -# define ASN1_IA5STRING ASN1_STRING -# define ASN1_UTCTIME ASN1_STRING -# define ASN1_GENERALIZEDTIME ASN1_STRING -# define ASN1_TIME ASN1_STRING -# define ASN1_GENERALSTRING ASN1_STRING -# define ASN1_UNIVERSALSTRING ASN1_STRING -# define ASN1_BMPSTRING ASN1_STRING -# define ASN1_VISIBLESTRING ASN1_STRING -# define ASN1_UTF8STRING ASN1_STRING -# define ASN1_BOOLEAN int -# define ASN1_NULL int -# else -typedef struct asn1_string_st ASN1_INTEGER; -typedef struct asn1_string_st ASN1_ENUMERATED; -typedef struct asn1_string_st ASN1_BIT_STRING; -typedef struct asn1_string_st ASN1_OCTET_STRING; -typedef struct asn1_string_st ASN1_PRINTABLESTRING; -typedef struct asn1_string_st ASN1_T61STRING; -typedef struct asn1_string_st ASN1_IA5STRING; -typedef struct asn1_string_st ASN1_GENERALSTRING; -typedef struct asn1_string_st ASN1_UNIVERSALSTRING; -typedef struct asn1_string_st ASN1_BMPSTRING; -typedef struct asn1_string_st ASN1_UTCTIME; -typedef struct asn1_string_st ASN1_TIME; -typedef struct asn1_string_st ASN1_GENERALIZEDTIME; -typedef struct asn1_string_st ASN1_VISIBLESTRING; -typedef struct asn1_string_st ASN1_UTF8STRING; -typedef struct asn1_string_st ASN1_STRING; -typedef int ASN1_BOOLEAN; -typedef int ASN1_NULL; -# endif - -typedef struct asn1_object_st ASN1_OBJECT; - -typedef struct ASN1_ITEM_st ASN1_ITEM; -typedef struct asn1_pctx_st ASN1_PCTX; -typedef struct asn1_sctx_st ASN1_SCTX; - -# ifdef _WIN32 -# undef X509_NAME -# undef X509_EXTENSIONS -# undef PKCS7_ISSUER_AND_SERIAL -# undef PKCS7_SIGNER_INFO -# undef OCSP_REQUEST -# undef OCSP_RESPONSE -# endif - -# ifdef BIGNUM -# undef BIGNUM -# endif -struct dane_st; -typedef struct bio_st BIO; -typedef struct bignum_st BIGNUM; -typedef struct bignum_ctx BN_CTX; -typedef struct bn_blinding_st BN_BLINDING; -typedef struct bn_mont_ctx_st BN_MONT_CTX; -typedef struct bn_recp_ctx_st BN_RECP_CTX; -typedef struct bn_gencb_st BN_GENCB; - -typedef struct buf_mem_st BUF_MEM; - -typedef struct evp_cipher_st EVP_CIPHER; -typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; -typedef struct evp_md_st EVP_MD; -typedef struct evp_md_ctx_st EVP_MD_CTX; -typedef struct evp_pkey_st EVP_PKEY; - -typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; - -typedef struct evp_pkey_method_st EVP_PKEY_METHOD; -typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; - -typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; - -typedef struct hmac_ctx_st HMAC_CTX; - -typedef struct dh_st DH; -typedef struct dh_method DH_METHOD; - -typedef struct dsa_st DSA; -typedef struct dsa_method DSA_METHOD; - -typedef struct rsa_st RSA; -typedef struct rsa_meth_st RSA_METHOD; -typedef struct rsa_pss_params_st RSA_PSS_PARAMS; - -typedef struct ec_key_st EC_KEY; -typedef struct ec_key_method_st EC_KEY_METHOD; - -typedef struct rand_meth_st RAND_METHOD; -typedef struct rand_drbg_st RAND_DRBG; - -typedef struct ssl_dane_st SSL_DANE; -typedef struct x509_st X509; -typedef struct X509_algor_st X509_ALGOR; -typedef struct X509_crl_st X509_CRL; -typedef struct x509_crl_method_st X509_CRL_METHOD; -typedef struct x509_revoked_st X509_REVOKED; -typedef struct X509_name_st X509_NAME; -typedef struct X509_pubkey_st X509_PUBKEY; -typedef struct x509_store_st X509_STORE; -typedef struct x509_store_ctx_st X509_STORE_CTX; - -typedef struct x509_object_st X509_OBJECT; -typedef struct x509_lookup_st X509_LOOKUP; -typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; -typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; - -typedef struct x509_sig_info_st X509_SIG_INFO; - -typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; - -typedef struct v3_ext_ctx X509V3_CTX; -typedef struct conf_st CONF; -typedef struct ossl_init_settings_st OPENSSL_INIT_SETTINGS; - -typedef struct ui_st UI; -typedef struct ui_method_st UI_METHOD; - -typedef struct engine_st ENGINE; -typedef struct ssl_st SSL; -typedef struct ssl_ctx_st SSL_CTX; - -typedef struct comp_ctx_st COMP_CTX; -typedef struct comp_method_st COMP_METHOD; - -typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; -typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; -typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; -typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; - -typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; -typedef struct DIST_POINT_st DIST_POINT; -typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; -typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; - -typedef struct crypto_ex_data_st CRYPTO_EX_DATA; - -typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; -typedef struct ocsp_response_st OCSP_RESPONSE; -typedef struct ocsp_responder_id_st OCSP_RESPID; - -typedef struct sct_st SCT; -typedef struct sct_ctx_st SCT_CTX; -typedef struct ctlog_st CTLOG; -typedef struct ctlog_store_st CTLOG_STORE; -typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; - -typedef struct ossl_store_info_st OSSL_STORE_INFO; -typedef struct ossl_store_search_st OSSL_STORE_SEARCH; - -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ - defined(INTMAX_MAX) && defined(UINTMAX_MAX) -typedef intmax_t ossl_intmax_t; -typedef uintmax_t ossl_uintmax_t; -#else /* - * Not long long, because the C-library can only be expected to provide - * strtoll(), strtoull() at the same time as intmax_t and strtoimax(), - * strtoumax(). Since we use these for parsing arguments, we need the - * conversion functions, not just the sizes. + * The original was renamed to + * + * This header file only exists for compatibility reasons with older + * applications which #include . */ -typedef long ossl_intmax_t; -typedef unsigned long ossl_uintmax_t; -#endif - -#ifdef __cplusplus -} -#endif -#endif /* def HEADER_OPENSSL_TYPES_H */ +# include diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/param_build.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/param_build.h new file mode 100644 index 00000000..f29fdb29 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/param_build.h @@ -0,0 +1,63 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PARAM_BUILD_H +# define OPENSSL_PARAM_BUILD_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_PARAM_BLD *OSSL_PARAM_BLD_new(void); +OSSL_PARAM *OSSL_PARAM_BLD_to_param(OSSL_PARAM_BLD *bld); +void OSSL_PARAM_BLD_free(OSSL_PARAM_BLD *bld); + +int OSSL_PARAM_BLD_push_int(OSSL_PARAM_BLD *bld, const char *key, int val); +int OSSL_PARAM_BLD_push_uint(OSSL_PARAM_BLD *bld, const char *key, + unsigned int val); +int OSSL_PARAM_BLD_push_long(OSSL_PARAM_BLD *bld, const char *key, + long int val); +int OSSL_PARAM_BLD_push_ulong(OSSL_PARAM_BLD *bld, const char *key, + unsigned long int val); +int OSSL_PARAM_BLD_push_int32(OSSL_PARAM_BLD *bld, const char *key, + int32_t val); +int OSSL_PARAM_BLD_push_uint32(OSSL_PARAM_BLD *bld, const char *key, + uint32_t val); +int OSSL_PARAM_BLD_push_int64(OSSL_PARAM_BLD *bld, const char *key, + int64_t val); +int OSSL_PARAM_BLD_push_uint64(OSSL_PARAM_BLD *bld, const char *key, + uint64_t val); +int OSSL_PARAM_BLD_push_size_t(OSSL_PARAM_BLD *bld, const char *key, + size_t val); +int OSSL_PARAM_BLD_push_time_t(OSSL_PARAM_BLD *bld, const char *key, + time_t val); +int OSSL_PARAM_BLD_push_double(OSSL_PARAM_BLD *bld, const char *key, + double val); +int OSSL_PARAM_BLD_push_BN(OSSL_PARAM_BLD *bld, const char *key, + const BIGNUM *bn); +int OSSL_PARAM_BLD_push_BN_pad(OSSL_PARAM_BLD *bld, const char *key, + const BIGNUM *bn, size_t sz); +int OSSL_PARAM_BLD_push_utf8_string(OSSL_PARAM_BLD *bld, const char *key, + const char *buf, size_t bsize); +int OSSL_PARAM_BLD_push_utf8_ptr(OSSL_PARAM_BLD *bld, const char *key, + char *buf, size_t bsize); +int OSSL_PARAM_BLD_push_octet_string(OSSL_PARAM_BLD *bld, const char *key, + const void *buf, size_t bsize); +int OSSL_PARAM_BLD_push_octet_ptr(OSSL_PARAM_BLD *bld, const char *key, + void *buf, size_t bsize); + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_PARAM_BUILD_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/params.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/params.h new file mode 100644 index 00000000..d75eab07 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/params.h @@ -0,0 +1,160 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PARAMS_H +# define OPENSSL_PARAMS_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_PARAM_UNMODIFIED ((size_t)-1) + +# define OSSL_PARAM_END \ + { NULL, 0, NULL, 0, 0 } + +# define OSSL_PARAM_DEFN(key, type, addr, sz) \ + { (key), (type), (addr), (sz), OSSL_PARAM_UNMODIFIED } + +/* Basic parameter types without return sizes */ +# define OSSL_PARAM_int(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int)) +# define OSSL_PARAM_uint(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(unsigned int)) +# define OSSL_PARAM_long(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(long int)) +# define OSSL_PARAM_ulong(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(unsigned long int)) +# define OSSL_PARAM_int32(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int32_t)) +# define OSSL_PARAM_uint32(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(uint32_t)) +# define OSSL_PARAM_int64(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int64_t)) +# define OSSL_PARAM_uint64(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(uint64_t)) +# define OSSL_PARAM_size_t(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), sizeof(size_t)) +# define OSSL_PARAM_time_t(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(time_t)) +# define OSSL_PARAM_double(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_REAL, (addr), sizeof(double)) + +# define OSSL_PARAM_BN(key, bn, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (bn), (sz)) +# define OSSL_PARAM_utf8_string(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UTF8_STRING, (addr), sz) +# define OSSL_PARAM_octet_string(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_OCTET_STRING, (addr), sz) + +# define OSSL_PARAM_utf8_ptr(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UTF8_PTR, (addr), sz) +# define OSSL_PARAM_octet_ptr(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_OCTET_PTR, (addr), sz) + +/* Search an OSSL_PARAM array for a matching name */ +OSSL_PARAM *OSSL_PARAM_locate(OSSL_PARAM *p, const char *key); +const OSSL_PARAM *OSSL_PARAM_locate_const(const OSSL_PARAM *p, const char *key); + +/* Basic parameter type run-time construction */ +OSSL_PARAM OSSL_PARAM_construct_int(const char *key, int *buf); +OSSL_PARAM OSSL_PARAM_construct_uint(const char *key, unsigned int *buf); +OSSL_PARAM OSSL_PARAM_construct_long(const char *key, long int *buf); +OSSL_PARAM OSSL_PARAM_construct_ulong(const char *key, unsigned long int *buf); +OSSL_PARAM OSSL_PARAM_construct_int32(const char *key, int32_t *buf); +OSSL_PARAM OSSL_PARAM_construct_uint32(const char *key, uint32_t *buf); +OSSL_PARAM OSSL_PARAM_construct_int64(const char *key, int64_t *buf); +OSSL_PARAM OSSL_PARAM_construct_uint64(const char *key, uint64_t *buf); +OSSL_PARAM OSSL_PARAM_construct_size_t(const char *key, size_t *buf); +OSSL_PARAM OSSL_PARAM_construct_time_t(const char *key, time_t *buf); +OSSL_PARAM OSSL_PARAM_construct_BN(const char *key, unsigned char *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_double(const char *key, double *buf); +OSSL_PARAM OSSL_PARAM_construct_utf8_string(const char *key, char *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_utf8_ptr(const char *key, char **buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_octet_string(const char *key, void *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_end(void); + +int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, + const OSSL_PARAM *paramdefs, + const char *key, const char *value, + size_t value_n, int *found); + +int OSSL_PARAM_get_int(const OSSL_PARAM *p, int *val); +int OSSL_PARAM_get_uint(const OSSL_PARAM *p, unsigned int *val); +int OSSL_PARAM_get_long(const OSSL_PARAM *p, long int *val); +int OSSL_PARAM_get_ulong(const OSSL_PARAM *p, unsigned long int *val); +int OSSL_PARAM_get_int32(const OSSL_PARAM *p, int32_t *val); +int OSSL_PARAM_get_uint32(const OSSL_PARAM *p, uint32_t *val); +int OSSL_PARAM_get_int64(const OSSL_PARAM *p, int64_t *val); +int OSSL_PARAM_get_uint64(const OSSL_PARAM *p, uint64_t *val); +int OSSL_PARAM_get_size_t(const OSSL_PARAM *p, size_t *val); +int OSSL_PARAM_get_time_t(const OSSL_PARAM *p, time_t *val); + +int OSSL_PARAM_set_int(OSSL_PARAM *p, int val); +int OSSL_PARAM_set_uint(OSSL_PARAM *p, unsigned int val); +int OSSL_PARAM_set_long(OSSL_PARAM *p, long int val); +int OSSL_PARAM_set_ulong(OSSL_PARAM *p, unsigned long int val); +int OSSL_PARAM_set_int32(OSSL_PARAM *p, int32_t val); +int OSSL_PARAM_set_uint32(OSSL_PARAM *p, uint32_t val); +int OSSL_PARAM_set_int64(OSSL_PARAM *p, int64_t val); +int OSSL_PARAM_set_uint64(OSSL_PARAM *p, uint64_t val); +int OSSL_PARAM_set_size_t(OSSL_PARAM *p, size_t val); +int OSSL_PARAM_set_time_t(OSSL_PARAM *p, time_t val); + +int OSSL_PARAM_get_double(const OSSL_PARAM *p, double *val); +int OSSL_PARAM_set_double(OSSL_PARAM *p, double val); + +int OSSL_PARAM_get_BN(const OSSL_PARAM *p, BIGNUM **val); +int OSSL_PARAM_set_BN(OSSL_PARAM *p, const BIGNUM *val); + +int OSSL_PARAM_get_utf8_string(const OSSL_PARAM *p, char **val, size_t max_len); +int OSSL_PARAM_set_utf8_string(OSSL_PARAM *p, const char *val); + +int OSSL_PARAM_get_octet_string(const OSSL_PARAM *p, void **val, size_t max_len, + size_t *used_len); +int OSSL_PARAM_set_octet_string(OSSL_PARAM *p, const void *val, size_t len); + +int OSSL_PARAM_get_utf8_ptr(const OSSL_PARAM *p, const char **val); +int OSSL_PARAM_set_utf8_ptr(OSSL_PARAM *p, const char *val); + +int OSSL_PARAM_get_octet_ptr(const OSSL_PARAM *p, const void **val, + size_t *used_len); +int OSSL_PARAM_set_octet_ptr(OSSL_PARAM *p, const void *val, + size_t used_len); + +int OSSL_PARAM_get_utf8_string_ptr(const OSSL_PARAM *p, const char **val); +int OSSL_PARAM_get_octet_string_ptr(const OSSL_PARAM *p, const void **val, + size_t *used_len); + +int OSSL_PARAM_modified(const OSSL_PARAM *p); +void OSSL_PARAM_set_all_unmodified(OSSL_PARAM *p); + +OSSL_PARAM *OSSL_PARAM_dup(const OSSL_PARAM *p); +OSSL_PARAM *OSSL_PARAM_merge(const OSSL_PARAM *p1, const OSSL_PARAM *p2); +void OSSL_PARAM_free(OSSL_PARAM *p); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem.h index 2ef5b5d0..000d9c89 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEM_H -# define HEADER_PEM_H +#ifndef OPENSSL_PEM_H +# define OPENSSL_PEM_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PEM_H +# endif # include # include @@ -16,6 +22,9 @@ # include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -60,98 +69,130 @@ extern "C" { * IMPLEMENT_PEM_rw_cb(...) */ +# define PEM_read_cb_fnsig(name, type, INTYPE, readname) \ + type *PEM_##readname##_##name(INTYPE *out, type **x, \ + pem_password_cb *cb, void *u) +# define PEM_read_cb_ex_fnsig(name, type, INTYPE, readname) \ + type *PEM_##readname##_##name##_ex(INTYPE *out, type **x, \ + pem_password_cb *cb, void *u, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) + +# define PEM_write_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name(OUTTYPE *out, const type *x) +# define PEM_write_cb_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name(OUTTYPE *out, const type *x, \ + const EVP_CIPHER *enc, \ + const unsigned char *kstr, int klen, \ + pem_password_cb *cb, void *u) +# define PEM_write_ex_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name##_ex(OUTTYPE *out, const type *x, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) +# define PEM_write_cb_ex_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name##_ex(OUTTYPE *out, const type *x, \ + const EVP_CIPHER *enc, \ + const unsigned char *kstr, int klen, \ + pem_password_cb *cb, void *u, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) + # ifdef OPENSSL_NO_STDIO # define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ # define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# endif # define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# endif # else -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ -type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ -} +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ + type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str, fp, \ + (void **)x, cb, u); \ + } -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ -} +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ + PEM_write_fnsig(name, type, FILE, write) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1, str, out, \ + x, NULL, NULL, 0, NULL, NULL); \ + } -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, const type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp(name, type, str, asn1) +# endif -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ + PEM_write_cb_fnsig(name, type, FILE, write) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1, str, out, \ + x, enc, kstr, klen, cb, u); \ + } +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) +# endif # endif -# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ -type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ -} +# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ + type *PEM_read_bio_##name(BIO *bp, type **x, \ + pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str, bp, \ + (void **)x, cb, u); \ + } -# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ -} +# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ + PEM_write_fnsig(name, type, BIO, write_bio) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1, str, out, \ + x, NULL,NULL,0,NULL,NULL); \ + } -# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, const type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio(name, type, str, asn1) +# endif -# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ - } +# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ + PEM_write_cb_fnsig(name, type, BIO, write_bio) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1, str, out, \ + x, enc, kstr, klen, cb, u); \ + } -# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ - } +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_write(name, type, str, asn1) \ IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ IMPLEMENT_PEM_write_fp(name, type, str, asn1) -# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) -# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ @@ -161,9 +202,11 @@ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_write(name, type, str, asn1) -# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_write_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ IMPLEMENT_PEM_read(name, type, str, asn1) \ @@ -171,64 +214,160 @@ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ /* These are the same except they are for the declarations */ +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ # if defined(OPENSSL_NO_STDIO) -# define DECLARE_PEM_read_fp(name, type) /**/ -# define DECLARE_PEM_write_fp(name, type) /**/ -# define DECLARE_PEM_write_fp_const(name, type) /**/ -# define DECLARE_PEM_write_cb_fp(name, type) /**/ +# define DECLARE_PEM_read_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_read_fp_ex_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_fp_ex_attr(attr, name, type) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const_attr(attr, name, type) /**/ +# endif +# define DECLARE_PEM_write_cb_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) /**/ + # else -# define DECLARE_PEM_read_fp(name, type) \ - type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); +# define DECLARE_PEM_read_fp_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, FILE, read); +# define DECLARE_PEM_read_fp_ex_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, FILE, read); \ + attr PEM_read_cb_ex_fnsig(name, type, FILE, read); -# define DECLARE_PEM_write_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x); - -# define DECLARE_PEM_write_fp_const(name, type) \ - int PEM_write_##name(FILE *fp, const type *x); - -# define DECLARE_PEM_write_cb_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); +# define DECLARE_PEM_write_fp_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); +# define DECLARE_PEM_write_fp_ex_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); \ + attr PEM_write_ex_fnsig(name, type, FILE, write); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); +# endif +# define DECLARE_PEM_write_cb_fp_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, FILE, write); +# define DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, FILE, write); \ + attr PEM_write_cb_ex_fnsig(name, type, FILE, write); # endif -# define DECLARE_PEM_read_bio(name, type) \ - type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); +# define DECLARE_PEM_read_fp(name, type) \ + DECLARE_PEM_read_fp_attr(extern, name, type) +# define DECLARE_PEM_write_fp(name, type) \ + DECLARE_PEM_write_fp_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const(name, type) \ + DECLARE_PEM_write_fp_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_fp(name, type) \ + DECLARE_PEM_write_cb_fp_attr(extern, name, type) -# define DECLARE_PEM_write_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x); +# define DECLARE_PEM_read_bio_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, BIO, read_bio); +# define DECLARE_PEM_read_bio_ex_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, BIO, read_bio); \ + attr PEM_read_cb_ex_fnsig(name, type, BIO, read_bio); +# define DECLARE_PEM_read_bio(name, type) \ + DECLARE_PEM_read_bio_attr(extern, name, type) +# define DECLARE_PEM_read_bio_ex(name, type) \ + DECLARE_PEM_read_bio_ex_attr(extern, name, type) -# define DECLARE_PEM_write_bio_const(name, type) \ - int PEM_write_bio_##name(BIO *bp, const type *x); +# define DECLARE_PEM_write_bio_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio_ex_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); \ + attr PEM_write_ex_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio(name, type) \ + DECLARE_PEM_write_bio_attr(extern, name, type) +# define DECLARE_PEM_write_bio_ex(name, type) \ + DECLARE_PEM_write_bio_ex_attr(extern, name, type) -# define DECLARE_PEM_write_cb_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_bio_const_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio_const(name, type) \ + DECLARE_PEM_write_bio_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_bio_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_cb_bio_ex_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, BIO, write_bio); \ + attr PEM_write_cb_ex_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_cb_bio(name, type) \ + DECLARE_PEM_write_cb_bio_attr(extern, name, type) +# define DECLARE_PEM_write_cb_ex_bio(name, type) \ + DECLARE_PEM_write_cb_bio_ex_attr(extern, name, type) + +# define DECLARE_PEM_write_attr(attr, name, type) \ + DECLARE_PEM_write_bio_attr(attr, name, type) \ + DECLARE_PEM_write_fp_attr(attr, name, type) +# define DECLARE_PEM_write_ex_attr(attr, name, type) \ + DECLARE_PEM_write_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_write_fp_ex_attr(attr, name, type) # define DECLARE_PEM_write(name, type) \ - DECLARE_PEM_write_bio(name, type) \ - DECLARE_PEM_write_fp(name, type) -# define DECLARE_PEM_write_const(name, type) \ - DECLARE_PEM_write_bio_const(name, type) \ - DECLARE_PEM_write_fp_const(name, type) -# define DECLARE_PEM_write_cb(name, type) \ - DECLARE_PEM_write_cb_bio(name, type) \ - DECLARE_PEM_write_cb_fp(name, type) -# define DECLARE_PEM_read(name, type) \ - DECLARE_PEM_read_bio(name, type) \ - DECLARE_PEM_read_fp(name, type) + DECLARE_PEM_write_attr(extern, name, type) +# define DECLARE_PEM_write_ex(name, type) \ + DECLARE_PEM_write_ex_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_const_attr(attr, name, type) \ + DECLARE_PEM_write_bio_const_attr(attr, name, type) \ + DECLARE_PEM_write_fp_const_attr(attr, name, type) +# define DECLARE_PEM_write_const(name, type) \ + DECLARE_PEM_write_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_attr(attr, name, type) \ + DECLARE_PEM_write_cb_bio_attr(attr, name, type) \ + DECLARE_PEM_write_cb_fp_attr(attr, name, type) +# define DECLARE_PEM_write_cb_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) +# define DECLARE_PEM_write_cb(name, type) \ + DECLARE_PEM_write_cb_attr(extern, name, type) +# define DECLARE_PEM_write_cb_ex(name, type) \ + DECLARE_PEM_write_cb_ex_attr(extern, name, type) +# define DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_read_bio_attr(attr, name, type) \ + DECLARE_PEM_read_fp_attr(attr, name, type) +# define DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_read_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_read_fp_ex_attr(attr, name, type) +# define DECLARE_PEM_read(name, type) \ + DECLARE_PEM_read_attr(extern, name, type) +# define DECLARE_PEM_read_ex(name, type) \ + DECLARE_PEM_read_ex_attr(extern, name, type) +# define DECLARE_PEM_rw_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_attr(attr, name, type) +# define DECLARE_PEM_rw_ex_attr(attr, name, type) \ + DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_write_ex_attr(attr, name, type) # define DECLARE_PEM_rw(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write(name, type) -# define DECLARE_PEM_rw_const(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_const(name, type) + DECLARE_PEM_rw_attr(extern, name, type) +# define DECLARE_PEM_rw_ex(name, type) \ + DECLARE_PEM_rw_ex_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_rw_const_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_const_attr(attr, name, type) +# define DECLARE_PEM_rw_const(name, type) \ + DECLARE_PEM_rw_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_rw_cb_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_cb_attr(attr, name, type) +# define DECLARE_PEM_rw_cb_ex_attr(attr, name, type) \ + DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_ex_attr(attr, name, type) # define DECLARE_PEM_rw_cb(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_cb(name, type) -typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + DECLARE_PEM_rw_cb_attr(extern, name, type) +# define DECLARE_PEM_rw_cb_ex(name, type) \ + DECLARE_PEM_rw_cb_ex_attr(extern, name, type) int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, @@ -251,14 +390,20 @@ int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, void *u); void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, pem_password_cb *cb, void *u); -int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, - const EVP_CIPHER *enc, unsigned char *kstr, int klen, +int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, + const void *x, const EVP_CIPHER *enc, + const unsigned char *kstr, int klen, pem_password_cb *cb, void *u); STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); -int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, - unsigned char *kstr, int klen, +STACK_OF(X509_INFO) +*PEM_X509_INFO_read_bio_ex(BIO *bp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u, OSSL_LIB_CTX *libctx, + const char *propq); + +int PEM_X509_INFO_write_bio(BIO *bp, const X509_INFO *xi, EVP_CIPHER *enc, + const unsigned char *kstr, int klen, pem_password_cb *cd, void *u); #ifndef OPENSSL_NO_STDIO @@ -269,21 +414,25 @@ int PEM_write(FILE *fp, const char *name, const char *hdr, void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, pem_password_cb *cb, void *u); int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, - void *x, const EVP_CIPHER *enc, unsigned char *kstr, - int klen, pem_password_cb *callback, void *u); + const void *x, const EVP_CIPHER *enc, + const unsigned char *kstr, int klen, + pem_password_cb *callback, void *u); STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); +STACK_OF(X509_INFO) +*PEM_X509_INFO_read_ex(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, + void *u, OSSL_LIB_CTX *libctx, const char *propq); #endif int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); -int PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); +int PEM_SignUpdate(EVP_MD_CTX *ctx, const unsigned char *d, unsigned int cnt); int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, unsigned int *siglen, EVP_PKEY *pkey); /* The default pem_password_cb that's used internally */ int PEM_def_callback(char *buf, int num, int rwflag, void *userdata); void PEM_proc_type(char *buf, int type); -void PEM_dek_info(char *buf, const char *type, int len, char *str); +void PEM_dek_info(char *buf, const char *type, int len, const char *str); # include @@ -292,85 +441,99 @@ DECLARE_PEM_rw(X509_AUX, X509) DECLARE_PEM_rw(X509_REQ, X509_REQ) DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) DECLARE_PEM_rw(X509_CRL, X509_CRL) +DECLARE_PEM_rw(X509_PUBKEY, X509_PUBKEY) DECLARE_PEM_rw(PKCS7, PKCS7) DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) DECLARE_PEM_rw(PKCS8, X509_SIG) DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) -# ifndef OPENSSL_NO_RSA -DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) -DECLARE_PEM_rw_const(RSAPublicKey, RSA) -DECLARE_PEM_rw(RSA_PUBKEY, RSA) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, RSAPrivateKey, RSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, RSAPublicKey, RSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, RSA_PUBKEY, RSA) # endif -# ifndef OPENSSL_NO_DSA -DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) -DECLARE_PEM_rw(DSA_PUBKEY, DSA) -DECLARE_PEM_rw_const(DSAparams, DSA) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, DSAPrivateKey, DSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DSA_PUBKEY, DSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DSAparams, DSA) +# endif # endif -# ifndef OPENSSL_NO_EC -DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) -DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) -DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) -# endif -# ifndef OPENSSL_NO_DH -DECLARE_PEM_rw_const(DHparams, DH) -DECLARE_PEM_write_const(DHxparams, DH) -# endif -DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) -DECLARE_PEM_rw(PUBKEY, EVP_PKEY) -int PEM_write_bio_PrivateKey_traditional(BIO *bp, EVP_PKEY *x, +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, ECPKParameters, EC_GROUP) +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, ECPrivateKey, EC_KEY) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, EC_PUBKEY, EC_KEY) +# endif +# endif + +# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DHparams, DH) +DECLARE_PEM_write_attr(OSSL_DEPRECATEDIN_3_0, DHxparams, DH) +# endif +# endif +DECLARE_PEM_rw_cb_ex(PrivateKey, EVP_PKEY) +DECLARE_PEM_rw_ex(PUBKEY, EVP_PKEY) + +int PEM_write_bio_PrivateKey_traditional(BIO *bp, const EVP_PKEY *x, const EVP_CIPHER *enc, - unsigned char *kstr, int klen, + const unsigned char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, +/* Why do these take a signed char *kstr? */ +int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, - char *, int, pem_password_cb *, void *); -int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, +int PEM_write_bio_PKCS8PrivateKey(BIO *, const EVP_PKEY *, const EVP_CIPHER *, + const char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_bio(BIO *bp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u); # ifndef OPENSSL_NO_STDIO -int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_fp(FILE *fp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int PEM_write_PKCS8PrivateKey_nid(FILE *fp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, pem_password_cb *cd, - void *u); +int PEM_write_PKCS8PrivateKey(FILE *fp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, + pem_password_cb *cd, void *u); # endif +EVP_PKEY *PEM_read_bio_Parameters_ex(BIO *bp, EVP_PKEY **x, + OSSL_LIB_CTX *libctx, const char *propq); EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); -int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); +int PEM_write_bio_Parameters(BIO *bp, const EVP_PKEY *x); -# ifndef OPENSSL_NO_DSA EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); EVP_PKEY *b2i_PrivateKey_bio(BIO *in); EVP_PKEY *b2i_PublicKey_bio(BIO *in); -int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); -int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); -# ifndef OPENSSL_NO_RC4 +int i2b_PrivateKey_bio(BIO *out, const EVP_PKEY *pk); +int i2b_PublicKey_bio(BIO *out, const EVP_PKEY *pk); EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); -int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, +EVP_PKEY *b2i_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +int i2b_PVK_bio(BIO *out, const EVP_PKEY *pk, int enclevel, pem_password_cb *cb, void *u); -# endif -# endif +int i2b_PVK_bio_ex(BIO *out, const EVP_PKEY *pk, int enclevel, + pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); # ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem2.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem2.h index 038fe790..a8a5325b 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem2.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem2.h @@ -1,13 +1,19 @@ /* * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEM2_H -# define HEADER_PEM2_H +#ifndef OPENSSL_PEM2_H +# define OPENSSL_PEM2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PEM2_H +# endif # include #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pemerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pemerr.h index 4f7e3574..18f6d9ef 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pemerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pemerr.h @@ -1,71 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEMERR_H -# define HEADER_PEMERR_H +#ifndef OPENSSL_PEMERR_H +# define OPENSSL_PEMERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PEM_strings(void); -/* - * PEM function codes. - */ -# define PEM_F_B2I_DSS 127 -# define PEM_F_B2I_PVK_BIO 128 -# define PEM_F_B2I_RSA 129 -# define PEM_F_CHECK_BITLEN_DSA 130 -# define PEM_F_CHECK_BITLEN_RSA 131 -# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 -# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 -# define PEM_F_DO_B2I 132 -# define PEM_F_DO_B2I_BIO 133 -# define PEM_F_DO_BLOB_HEADER 134 -# define PEM_F_DO_I2B 146 -# define PEM_F_DO_PK8PKEY 126 -# define PEM_F_DO_PK8PKEY_FP 125 -# define PEM_F_DO_PVK_BODY 135 -# define PEM_F_DO_PVK_HEADER 136 -# define PEM_F_GET_HEADER_AND_DATA 143 -# define PEM_F_GET_NAME 144 -# define PEM_F_I2B_PVK 137 -# define PEM_F_I2B_PVK_BIO 138 -# define PEM_F_LOAD_IV 101 -# define PEM_F_PEM_ASN1_READ 102 -# define PEM_F_PEM_ASN1_READ_BIO 103 -# define PEM_F_PEM_ASN1_WRITE 104 -# define PEM_F_PEM_ASN1_WRITE_BIO 105 -# define PEM_F_PEM_DEF_CALLBACK 100 -# define PEM_F_PEM_DO_HEADER 106 -# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 -# define PEM_F_PEM_READ 108 -# define PEM_F_PEM_READ_BIO 109 -# define PEM_F_PEM_READ_BIO_DHPARAMS 141 -# define PEM_F_PEM_READ_BIO_EX 145 -# define PEM_F_PEM_READ_BIO_PARAMETERS 140 -# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 -# define PEM_F_PEM_READ_DHPARAMS 142 -# define PEM_F_PEM_READ_PRIVATEKEY 124 -# define PEM_F_PEM_SIGNFINAL 112 -# define PEM_F_PEM_WRITE 113 -# define PEM_F_PEM_WRITE_BIO 114 -# define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL 147 -# define PEM_F_PEM_WRITE_PRIVATEKEY 139 -# define PEM_F_PEM_X509_INFO_READ 115 -# define PEM_F_PEM_X509_INFO_READ_BIO 116 -# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 /* * PEM reason codes. @@ -80,8 +31,10 @@ int ERR_load_PEM_strings(void); # define PEM_R_BIO_WRITE_FAILURE 118 # define PEM_R_CIPHER_IS_NULL 127 # define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 +# define PEM_R_EXPECTING_DSS_KEY_BLOB 131 # define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 # define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_EXPECTING_RSA_KEY_BLOB 132 # define PEM_R_HEADER_TOO_LONG 128 # define PEM_R_INCONSISTENT_HEADER 121 # define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h index 3f43dad6..9e20fc1a 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h @@ -1,18 +1,33 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/pkcs12.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS12_H -# define HEADER_PKCS12_H + + +#ifndef OPENSSL_PKCS12_H +# define OPENSSL_PKCS12_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS12_H +# endif # include +# include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -46,7 +61,33 @@ typedef struct PKCS12_st PKCS12; typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; -DEFINE_STACK_OF(PKCS12_SAFEBAG) +SKM_DEFINE_STACK_OF_INTERNAL(PKCS12_SAFEBAG, PKCS12_SAFEBAG, PKCS12_SAFEBAG) +#define sk_PKCS12_SAFEBAG_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_value(sk, idx) ((PKCS12_SAFEBAG *)OPENSSL_sk_value(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), (idx))) +#define sk_PKCS12_SAFEBAG_new(cmp) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp))) +#define sk_PKCS12_SAFEBAG_new_null() ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_null()) +#define sk_PKCS12_SAFEBAG_new_reserve(cmp, n) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_reserve(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp), (n))) +#define sk_PKCS12_SAFEBAG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (n)) +#define sk_PKCS12_SAFEBAG_free(sk) OPENSSL_sk_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_delete(sk, i) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (i))) +#define sk_PKCS12_SAFEBAG_delete_ptr(sk, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete_ptr(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr))) +#define sk_PKCS12_SAFEBAG_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_pop(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_pop(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_shift(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_shift(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk),ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc)) +#define sk_PKCS12_SAFEBAG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), (idx)) +#define sk_PKCS12_SAFEBAG_set(sk, idx, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_set(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (idx), ossl_check_PKCS12_SAFEBAG_type(ptr))) +#define sk_PKCS12_SAFEBAG_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), pnum) +#define sk_PKCS12_SAFEBAG_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_dup(sk) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_dup(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_copyfunc_type(copyfunc), ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc))) +#define sk_PKCS12_SAFEBAG_set_cmp_func(sk, cmp) ((sk_PKCS12_SAFEBAG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp))) + typedef struct pkcs12_bag_st PKCS12_BAGS; @@ -55,7 +96,7 @@ typedef struct pkcs12_bag_st PKCS12_BAGS; /* Compatibility macros */ -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define M_PKCS12_bag_type PKCS12_bag_type # define M_PKCS12_cert_bag_type PKCS12_cert_bag_type @@ -71,8 +112,10 @@ typedef struct pkcs12_bag_st PKCS12_BAGS; # define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt #endif - -DEPRECATEDIN_1_1_0(ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, int attr_nid)) +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +#endif ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); int PKCS12_mac_present(const PKCS12 *p12); @@ -87,6 +130,8 @@ const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); +const ASN1_TYPE *PKCS12_SAFEBAG_get0_bag_obj(const PKCS12_SAFEBAG *bag); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_bag_type(const PKCS12_SAFEBAG *bag); X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); @@ -97,6 +142,7 @@ const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_secret(int type, int vtype, const unsigned char *value, int len); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, @@ -105,23 +151,50 @@ PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8inf); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt_ex(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *ctx, + const char *propq); PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, int nid1, int nid2); PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt_ex(const X509_SIG *p8, const char *pass, + int passlen, OSSL_LIB_CTX *ctx, + const char *propq); PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey_ex(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen, + OSSL_LIB_CTX *ctx, + const char *propq); X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +X509_SIG *PKCS8_encrypt_ex(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8, + OSSL_LIB_CTX *ctx, const char *propq); X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +X509_SIG *PKCS8_set0_pbe_ex(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe, + OSSL_LIB_CTX *ctx, const char *propq); PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, STACK_OF(PKCS12_SAFEBAG) *bags); +PKCS7 *PKCS12_pack_p7encdata_ex(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags, + OSSL_LIB_CTX *ctx, const char *propq); + STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, int passlen); @@ -138,6 +211,10 @@ int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, int namelen); int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, const unsigned char *name, int namelen); +int PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type, + const unsigned char *bytes, int len); +int PKCS12_add1_attr_by_txt(PKCS12_SAFEBAG *bag, const char *attrname, int type, + const unsigned char *bytes, int len); int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid); @@ -149,26 +226,62 @@ unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, const unsigned char *in, int inlen, unsigned char **data, int *datalen, int en_de); +unsigned char *PKCS12_pbe_crypt_ex(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de, OSSL_LIB_CTX *libctx, + const char *propq); void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, const char *pass, int passlen, const ASN1_OCTET_STRING *oct, int zbuf); +void *PKCS12_item_decrypt_d2i_ex(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf, + OSSL_LIB_CTX *libctx, + const char *propq); ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, const ASN1_ITEM *it, const char *pass, int passlen, void *obj, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt_ex(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf, + OSSL_LIB_CTX *ctx, + const char *propq); PKCS12 *PKCS12_init(int mode); +PKCS12 *PKCS12_init_ex(int mode, OSSL_LIB_CTX *ctx, const char *propq); + int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_asc_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni_ex(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_utf8_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); + int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md_type, int en_de); +int PKCS12_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, unsigned char *mac, unsigned int *maclen); int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); @@ -198,18 +311,35 @@ int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, int mac_iter, int keytype); +PKCS12 *PKCS12_create_ex(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype, + OSSL_LIB_CTX *ctx, const char *propq); PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, EVP_PKEY *key, int key_usage, int iter, int key_nid, const char *pass); +PKCS12_SAFEBAG *PKCS12_add_key_ex(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_secret(STACK_OF(PKCS12_SAFEBAG) **pbags, + int nid_type, const unsigned char *value, int len); int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, int safe_nid, int iter, const char *pass); -PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +int PKCS12_add_safe_ex(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); -int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +PKCS12 *PKCS12_add_safes_ex(STACK_OF(PKCS7) *safes, int p7_nid, + OSSL_LIB_CTX *ctx, const char *propq); + +int i2d_PKCS12_bio(BIO *bp, const PKCS12 *p12); # ifndef OPENSSL_NO_STDIO -int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); +int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12); # endif PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); # ifndef OPENSSL_NO_STDIO diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h.in new file mode 100644 index 00000000..cf956b41 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h.in @@ -0,0 +1,330 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_PKCS12_H +# define OPENSSL_PKCS12_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS12_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define PKCS12_KEY_ID 1 +# define PKCS12_IV_ID 2 +# define PKCS12_MAC_ID 3 + +/* Default iteration count */ +# ifndef PKCS12_DEFAULT_ITER +# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER +# endif + +# define PKCS12_MAC_KEY_LENGTH 20 + +# define PKCS12_SALT_LEN 8 + +/* It's not clear if these are actually needed... */ +# define PKCS12_key_gen PKCS12_key_gen_utf8 +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_utf8 + +/* MS key usage constants */ + +# define KEY_EX 0x10 +# define KEY_SIG 0x80 + +typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA; + +typedef struct PKCS12_st PKCS12; + +typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; + +{- + generate_stack_macros("PKCS12_SAFEBAG"); +-} + +typedef struct pkcs12_bag_st PKCS12_BAGS; + +# define PKCS12_ERROR 0 +# define PKCS12_OK 1 + +/* Compatibility macros */ + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 + +# define M_PKCS12_bag_type PKCS12_bag_type +# define M_PKCS12_cert_bag_type PKCS12_cert_bag_type +# define M_PKCS12_crl_bag_type PKCS12_cert_bag_type + +# define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert +# define PKCS12_certbag2scrl PKCS12_SAFEBAG_get1_crl +# define PKCS12_bag_type PKCS12_SAFEBAG_get_nid +# define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid +# define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert +# define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl +# define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf +# define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt + +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +#endif + +ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); +int PKCS12_mac_present(const PKCS12 *p12); +void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, + const X509_ALGOR **pmacalg, + const ASN1_OCTET_STRING **psalt, + const ASN1_INTEGER **piter, + const PKCS12 *p12); + +const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); +const ASN1_TYPE *PKCS12_SAFEBAG_get0_bag_obj(const PKCS12_SAFEBAG *bag); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_bag_type(const PKCS12_SAFEBAG *bag); + +X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); +X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); +const STACK_OF(PKCS12_SAFEBAG) * +PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); +const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); +const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); + +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_secret(int type, int vtype, const unsigned char *value, int len); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt_ex(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *ctx, + const char *propq); + +PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, + int nid1, int nid2); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, + int passlen); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt_ex(const X509_SIG *p8, const char *pass, + int passlen, OSSL_LIB_CTX *ctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey_ex(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen, + OSSL_LIB_CTX *ctx, + const char *propq); +X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +X509_SIG *PKCS8_encrypt_ex(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8, + OSSL_LIB_CTX *ctx, const char *propq); +X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +X509_SIG *PKCS8_set0_pbe_ex(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe, + OSSL_LIB_CTX *ctx, const char *propq); +PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); +PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags); +PKCS7 *PKCS12_pack_p7encdata_ex(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags, + OSSL_LIB_CTX *ctx, const char *propq); + +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, + int passlen); + +int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); +STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12); + +int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, + int namelen); +int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_utf8(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, + const unsigned char *name, int namelen); +int PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type, + const unsigned char *bytes, int len); +int PKCS12_add1_attr_by_txt(PKCS12_SAFEBAG *bag, const char *attrname, int type, + const unsigned char *bytes, int len); +int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); +ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, + int attr_nid); +char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); +const STACK_OF(X509_ATTRIBUTE) * +PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag); +unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de); +unsigned char *PKCS12_pbe_crypt_ex(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de, OSSL_LIB_CTX *libctx, + const char *propq); +void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf); +void *PKCS12_item_decrypt_d2i_ex(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf, + OSSL_LIB_CTX *libctx, + const char *propq); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt_ex(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf, + OSSL_LIB_CTX *ctx, + const char *propq); +PKCS12 *PKCS12_init(int mode); +PKCS12 *PKCS12_init_ex(int mode, OSSL_LIB_CTX *ctx, const char *propq); + +int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_asc_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); +int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni_ex(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); +int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_utf8_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); + +int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de); +int PKCS12_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); +int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *mac, unsigned int *maclen); +int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); +int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + const EVP_MD *md_type); +int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, + int saltlen, const EVP_MD *md_type); +unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2asc(const unsigned char *uni, int unilen); +unsigned char *OPENSSL_utf82uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2utf8(const unsigned char *uni, int unilen); + +DECLARE_ASN1_FUNCTIONS(PKCS12) +DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) +DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) +DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) + +DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) +DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) + +void PKCS12_PBE_add(void); +int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, + STACK_OF(X509) **ca); +PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype); +PKCS12 *PKCS12_create_ex(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); +PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass); +PKCS12_SAFEBAG *PKCS12_add_key_ex(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_secret(STACK_OF(PKCS12_SAFEBAG) **pbags, + int nid_type, const unsigned char *value, int len); +int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass); +int PKCS12_add_safe_ex(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +PKCS12 *PKCS12_add_safes_ex(STACK_OF(PKCS7) *safes, int p7_nid, + OSSL_LIB_CTX *ctx, const char *propq); + +int i2d_PKCS12_bio(BIO *bp, const PKCS12 *p12); +# ifndef OPENSSL_NO_STDIO +int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12); +# endif +PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); +# ifndef OPENSSL_NO_STDIO +PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); +# endif +int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12err.h index eff5eb26..933c8329 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12err.h @@ -1,57 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS12ERR_H -# define HEADER_PKCS12ERR_H +#ifndef OPENSSL_PKCS12ERR_H +# define OPENSSL_PKCS12ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS12_strings(void); -/* - * PKCS12 function codes. - */ -# define PKCS12_F_OPENSSL_ASC2UNI 121 -# define PKCS12_F_OPENSSL_UNI2ASC 124 -# define PKCS12_F_OPENSSL_UNI2UTF8 127 -# define PKCS12_F_OPENSSL_UTF82UNI 129 -# define PKCS12_F_PKCS12_CREATE 105 -# define PKCS12_F_PKCS12_GEN_MAC 107 -# define PKCS12_F_PKCS12_INIT 109 -# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 -# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 -# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 -# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 -# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 -# define PKCS12_F_PKCS12_KEY_GEN_UTF8 116 -# define PKCS12_F_PKCS12_NEWPASS 128 -# define PKCS12_F_PKCS12_PACK_P7DATA 114 -# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 -# define PKCS12_F_PKCS12_PARSE 118 -# define PKCS12_F_PKCS12_PBE_CRYPT 119 -# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 112 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 -# define PKCS12_F_PKCS12_SETUP_MAC 122 -# define PKCS12_F_PKCS12_SET_MAC 123 -# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 -# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 -# define PKCS12_F_PKCS12_VERIFY_MAC 126 -# define PKCS12_F_PKCS8_ENCRYPT 125 -# define PKCS12_F_PKCS8_SET0_PBE 132 /* * PKCS12 reason codes. @@ -64,6 +29,7 @@ int ERR_load_PKCS12_strings(void); # define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 # define PKCS12_R_INVALID_NULL_ARGUMENT 104 # define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 +# define PKCS12_R_INVALID_TYPE 112 # define PKCS12_R_IV_GEN_ERROR 106 # define PKCS12_R_KEY_GEN_ERROR 107 # define PKCS12_R_MAC_ABSENT 108 @@ -72,9 +38,7 @@ int ERR_load_PKCS12_strings(void); # define PKCS12_R_MAC_STRING_SET_ERROR 111 # define PKCS12_R_MAC_VERIFY_FAILURE 113 # define PKCS12_R_PARSE_ERROR 114 -# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 # define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 -# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 # define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 # define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h index 9b66e002..543c80cb 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h @@ -1,27 +1,42 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/pkcs7.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS7_H -# define HEADER_PKCS7_H + + +#ifndef OPENSSL_PKCS7_H +# define OPENSSL_PKCS7_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS7_H +# endif # include # include # include # include -# include +# include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { #endif + /*- Encryption_ID DES-CBC Digest_ID MD5 @@ -29,6 +44,11 @@ Digest_Encryption_ID rsaEncryption Key_Encryption_ID rsaEncryption */ +typedef struct PKCS7_CTX_st { + OSSL_LIB_CTX *libctx; + char *propq; +} PKCS7_CTX; + typedef struct pkcs7_issuer_and_serial_st { X509_NAME *issuer; ASN1_INTEGER *serial; @@ -44,9 +64,35 @@ typedef struct pkcs7_signer_info_st { STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ /* The private key to sign with */ EVP_PKEY *pkey; + const PKCS7_CTX *ctx; } PKCS7_SIGNER_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO) +#define sk_PKCS7_SIGNER_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_value(sk, idx) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), (idx))) +#define sk_PKCS7_SIGNER_INFO_new(cmp) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp))) +#define sk_PKCS7_SIGNER_INFO_new_null() ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_SIGNER_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_SIGNER_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (n)) +#define sk_PKCS7_SIGNER_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_delete(sk, i) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (i))) +#define sk_PKCS7_SIGNER_INFO_delete_ptr(sk, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr))) +#define sk_PKCS7_SIGNER_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_pop(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_shift(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk),ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_SIGNER_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), (idx)) +#define sk_PKCS7_SIGNER_INFO_set(sk, idx, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (idx), ossl_check_PKCS7_SIGNER_INFO_type(ptr))) +#define sk_PKCS7_SIGNER_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), pnum) +#define sk_PKCS7_SIGNER_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_dup(sk) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc))) +#define sk_PKCS7_SIGNER_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_SIGNER_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp))) -DEFINE_STACK_OF(PKCS7_SIGNER_INFO) typedef struct pkcs7_recip_info_st { ASN1_INTEGER *version; /* version 0 */ @@ -54,9 +100,36 @@ typedef struct pkcs7_recip_info_st { X509_ALGOR *key_enc_algor; ASN1_OCTET_STRING *enc_key; X509 *cert; /* get the pub-key from this */ + const PKCS7_CTX *ctx; } PKCS7_RECIP_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO, PKCS7_RECIP_INFO) +#define sk_PKCS7_RECIP_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_value(sk, idx) ((PKCS7_RECIP_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), (idx))) +#define sk_PKCS7_RECIP_INFO_new(cmp) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp))) +#define sk_PKCS7_RECIP_INFO_new_null() ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_RECIP_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_RECIP_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (n)) +#define sk_PKCS7_RECIP_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_delete(sk, i) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (i))) +#define sk_PKCS7_RECIP_INFO_delete_ptr(sk, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr))) +#define sk_PKCS7_RECIP_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_pop(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_shift(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk),ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_RECIP_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), (idx)) +#define sk_PKCS7_RECIP_INFO_set(sk, idx, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (idx), ossl_check_PKCS7_RECIP_INFO_type(ptr))) +#define sk_PKCS7_RECIP_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), pnum) +#define sk_PKCS7_RECIP_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_dup(sk) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc))) +#define sk_PKCS7_RECIP_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_RECIP_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp))) + -DEFINE_STACK_OF(PKCS7_RECIP_INFO) typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ @@ -76,6 +149,7 @@ typedef struct pkcs7_enc_content_st { X509_ALGOR *algorithm; ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ const EVP_CIPHER *cipher; + const PKCS7_CTX *ctx; } PKCS7_ENC_CONTENT; typedef struct pkcs7_enveloped_st { @@ -141,9 +215,36 @@ typedef struct pkcs7_st { /* Anything else */ ASN1_TYPE *other; } d; + PKCS7_CTX ctx; } PKCS7; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7, PKCS7, PKCS7) +#define sk_PKCS7_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_sk_type(sk)) +#define sk_PKCS7_value(sk, idx) ((PKCS7 *)OPENSSL_sk_value(ossl_check_const_PKCS7_sk_type(sk), (idx))) +#define sk_PKCS7_new(cmp) ((STACK_OF(PKCS7) *)OPENSSL_sk_new(ossl_check_PKCS7_compfunc_type(cmp))) +#define sk_PKCS7_new_null() ((STACK_OF(PKCS7) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_new_reserve(cmp, n) ((STACK_OF(PKCS7) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_compfunc_type(cmp), (n))) +#define sk_PKCS7_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_sk_type(sk), (n)) +#define sk_PKCS7_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_delete(sk, i) ((PKCS7 *)OPENSSL_sk_delete(ossl_check_PKCS7_sk_type(sk), (i))) +#define sk_PKCS7_delete_ptr(sk, ptr) ((PKCS7 *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr))) +#define sk_PKCS7_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_pop(sk) ((PKCS7 *)OPENSSL_sk_pop(ossl_check_PKCS7_sk_type(sk))) +#define sk_PKCS7_shift(sk) ((PKCS7 *)OPENSSL_sk_shift(ossl_check_PKCS7_sk_type(sk))) +#define sk_PKCS7_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_sk_type(sk),ossl_check_PKCS7_freefunc_type(freefunc)) +#define sk_PKCS7_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), (idx)) +#define sk_PKCS7_set(sk, idx, ptr) ((PKCS7 *)OPENSSL_sk_set(ossl_check_PKCS7_sk_type(sk), (idx), ossl_check_PKCS7_type(ptr))) +#define sk_PKCS7_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), pnum) +#define sk_PKCS7_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_sk_type(sk)) +#define sk_PKCS7_dup(sk) ((STACK_OF(PKCS7) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_sk_type(sk))) +#define sk_PKCS7_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_sk_type(sk), ossl_check_PKCS7_copyfunc_type(copyfunc), ossl_check_PKCS7_freefunc_type(freefunc))) +#define sk_PKCS7_set_cmp_func(sk, cmp) ((sk_PKCS7_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_compfunc_type(cmp))) + -DEFINE_STACK_OF(PKCS7) # define PKCS7_OP_SET_DETACHED_SIGNATURE 1 # define PKCS7_OP_GET_DETACHED_SIGNATURE 2 @@ -208,11 +309,11 @@ int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, unsigned int *len); # ifndef OPENSSL_NO_STDIO PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); -int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); +int i2d_PKCS7_fp(FILE *fp, const PKCS7 *p7); # endif -PKCS7 *PKCS7_dup(PKCS7 *p7); +DECLARE_ASN1_DUP_FUNCTION(PKCS7) PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); -int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); +int i2d_PKCS7_bio(BIO *bp, const PKCS7 *p7); int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); @@ -225,6 +326,7 @@ DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) DECLARE_ASN1_FUNCTIONS(PKCS7) +PKCS7 *PKCS7_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) @@ -234,6 +336,7 @@ DECLARE_ASN1_PRINT_FUNCTION(PKCS7) long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); +int PKCS7_type_is_other(PKCS7 *p7); int PKCS7_set_type(PKCS7 *p7, int type); int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); @@ -269,13 +372,14 @@ int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7); ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, void *data); int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, void *value); -ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); -ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_attribute(const PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(const PKCS7_SIGNER_INFO *si, int nid); int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, @@ -283,6 +387,9 @@ int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, int flags); +PKCS7 *PKCS7_sign_ex(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags, OSSL_LIB_CTX *libctx, + const char *propq); PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, X509 *signcert, EVP_PKEY *pkey, @@ -295,6 +402,9 @@ STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags); PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, int flags); +PKCS7 *PKCS7_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, int flags, + OSSL_LIB_CTX *libctx, const char *propq); int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags); @@ -309,6 +419,7 @@ int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, const unsigned char *md, int mdlen); int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7_ex(BIO *bio, BIO **bcont, PKCS7 **p7); PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h.in new file mode 100644 index 00000000..0a0c415b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h.in @@ -0,0 +1,359 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_PKCS7_H +# define OPENSSL_PKCS7_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS7_H +# endif + +# include +# include +# include + +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/*- +Encryption_ID DES-CBC +Digest_ID MD5 +Digest_Encryption_ID rsaEncryption +Key_Encryption_ID rsaEncryption +*/ + +typedef struct PKCS7_CTX_st { + OSSL_LIB_CTX *libctx; + char *propq; +} PKCS7_CTX; + +typedef struct pkcs7_issuer_and_serial_st { + X509_NAME *issuer; + ASN1_INTEGER *serial; +} PKCS7_ISSUER_AND_SERIAL; + +typedef struct pkcs7_signer_info_st { + ASN1_INTEGER *version; /* version 1 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *digest_alg; + STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ + X509_ALGOR *digest_enc_alg; + ASN1_OCTET_STRING *enc_digest; + STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ + /* The private key to sign with */ + EVP_PKEY *pkey; + const PKCS7_CTX *ctx; +} PKCS7_SIGNER_INFO; +{- + generate_stack_macros("PKCS7_SIGNER_INFO"); +-} + +typedef struct pkcs7_recip_info_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *key_enc_algor; + ASN1_OCTET_STRING *enc_key; + X509 *cert; /* get the pub-key from this */ + const PKCS7_CTX *ctx; +} PKCS7_RECIP_INFO; +{- + generate_stack_macros("PKCS7_RECIP_INFO"); +-} + + +typedef struct pkcs7_signed_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + struct pkcs7_st *contents; +} PKCS7_SIGNED; +/* + * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about + * merging the two + */ + +typedef struct pkcs7_enc_content_st { + ASN1_OBJECT *content_type; + X509_ALGOR *algorithm; + ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ + const EVP_CIPHER *cipher; + const PKCS7_CTX *ctx; +} PKCS7_ENC_CONTENT; + +typedef struct pkcs7_enveloped_st { + ASN1_INTEGER *version; /* version 0 */ + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENVELOPE; + +typedef struct pkcs7_signedandenveloped_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + PKCS7_ENC_CONTENT *enc_data; + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; +} PKCS7_SIGN_ENVELOPE; + +typedef struct pkcs7_digest_st { + ASN1_INTEGER *version; /* version 0 */ + X509_ALGOR *md; /* md used */ + struct pkcs7_st *contents; + ASN1_OCTET_STRING *digest; +} PKCS7_DIGEST; + +typedef struct pkcs7_encrypted_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENCRYPT; + +typedef struct pkcs7_st { + /* + * The following is non NULL if it contains ASN1 encoding of this + * structure + */ + unsigned char *asn1; + long length; +# define PKCS7_S_HEADER 0 +# define PKCS7_S_BODY 1 +# define PKCS7_S_TAIL 2 + int state; /* used during processing */ + int detached; + ASN1_OBJECT *type; + /* content as defined by the type */ + /* + * all encryption/message digests are applied to the 'contents', leaving + * out the 'type' field. + */ + union { + char *ptr; + /* NID_pkcs7_data */ + ASN1_OCTET_STRING *data; + /* NID_pkcs7_signed */ + PKCS7_SIGNED *sign; + /* NID_pkcs7_enveloped */ + PKCS7_ENVELOPE *enveloped; + /* NID_pkcs7_signedAndEnveloped */ + PKCS7_SIGN_ENVELOPE *signed_and_enveloped; + /* NID_pkcs7_digest */ + PKCS7_DIGEST *digest; + /* NID_pkcs7_encrypted */ + PKCS7_ENCRYPT *encrypted; + /* Anything else */ + ASN1_TYPE *other; + } d; + PKCS7_CTX ctx; +} PKCS7; +{- + generate_stack_macros("PKCS7"); +-} + + +# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 +# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 + +# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) +# define PKCS7_get_attributes(si) ((si)->unauth_attr) + +# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) +# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) +# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) +# define PKCS7_type_is_signedAndEnveloped(a) \ + (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) +# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) +# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) + +# define PKCS7_set_detached(p,v) \ + PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) +# define PKCS7_get_detached(p) \ + PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) + +# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) + +/* S/MIME related flags */ + +# define PKCS7_TEXT 0x1 +# define PKCS7_NOCERTS 0x2 +# define PKCS7_NOSIGS 0x4 +# define PKCS7_NOCHAIN 0x8 +# define PKCS7_NOINTERN 0x10 +# define PKCS7_NOVERIFY 0x20 +# define PKCS7_DETACHED 0x40 +# define PKCS7_BINARY 0x80 +# define PKCS7_NOATTR 0x100 +# define PKCS7_NOSMIMECAP 0x200 +# define PKCS7_NOOLDMIMETYPE 0x400 +# define PKCS7_CRLFEOL 0x800 +# define PKCS7_STREAM 0x1000 +# define PKCS7_NOCRL 0x2000 +# define PKCS7_PARTIAL 0x4000 +# define PKCS7_REUSE_DIGEST 0x8000 +# define PKCS7_NO_DUAL_CONTENT 0x10000 + +/* Flags: for compatibility with older code */ + +# define SMIME_TEXT PKCS7_TEXT +# define SMIME_NOCERTS PKCS7_NOCERTS +# define SMIME_NOSIGS PKCS7_NOSIGS +# define SMIME_NOCHAIN PKCS7_NOCHAIN +# define SMIME_NOINTERN PKCS7_NOINTERN +# define SMIME_NOVERIFY PKCS7_NOVERIFY +# define SMIME_DETACHED PKCS7_DETACHED +# define SMIME_BINARY PKCS7_BINARY +# define SMIME_NOATTR PKCS7_NOATTR + +/* CRLF ASCII canonicalisation */ +# define SMIME_ASCIICRLF 0x80000 + +DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) + +int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, + const EVP_MD *type, unsigned char *md, + unsigned int *len); +# ifndef OPENSSL_NO_STDIO +PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); +int i2d_PKCS7_fp(FILE *fp, const PKCS7 *p7); +# endif +DECLARE_ASN1_DUP_FUNCTION(PKCS7) +PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); +int i2d_PKCS7_bio(BIO *bp, const PKCS7 *p7); +int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); +int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); + +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) +DECLARE_ASN1_FUNCTIONS(PKCS7) +PKCS7 *PKCS7_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) +DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) + +DECLARE_ASN1_NDEF_FUNCTION(PKCS7) +DECLARE_ASN1_PRINT_FUNCTION(PKCS7) + +long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); + +int PKCS7_type_is_other(PKCS7 *p7); +int PKCS7_set_type(PKCS7 *p7, int type); +int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); +int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); +int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, + const EVP_MD *dgst); +int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); +int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); +int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); +int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_content_new(PKCS7 *p7, int nid); +int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, + BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, + X509 *x509); + +BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); +int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); +BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); + +PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, + EVP_PKEY *pkey, const EVP_MD *dgst); +X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); +STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); + +PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); +void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, + X509_ALGOR **pdig, X509_ALGOR **psig); +void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); +int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); +int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); +int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); +int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); + +PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7); +ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, + void *data); +int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, + void *value); +ASN1_TYPE *PKCS7_get_attribute(const PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(const PKCS7_SIGNER_INFO *si, int nid); +int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); + +PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags); +PKCS7 *PKCS7_sign_ex(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags, OSSL_LIB_CTX *libctx, + const char *propq); + +PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, + X509 *signcert, EVP_PKEY *pkey, + const EVP_MD *md, int flags); + +int PKCS7_final(PKCS7 *p7, BIO *data, int flags); +int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, + BIO *indata, BIO *out, int flags); +STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, + int flags); +PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, + int flags); +PKCS7 *PKCS7_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, int flags, + OSSL_LIB_CTX *libctx, const char *propq); +int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, + int flags); + +int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, + STACK_OF(X509_ALGOR) *cap); +STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); +int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); + +int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); +int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); +int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, + const unsigned char *md, int mdlen); + +int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7_ex(BIO *bio, BIO **bcont, PKCS7 **p7); +PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); + +BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7err.h index 02e0299a..ceb1a501 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7err.h @@ -1,62 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS7ERR_H -# define HEADER_PKCS7ERR_H +#ifndef OPENSSL_PKCS7ERR_H +# define OPENSSL_PKCS7ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS7_strings(void); -/* - * PKCS7 function codes. - */ -# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 -# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 -# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 -# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 -# define PKCS7_F_PKCS7_ADD_CRL 101 -# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 -# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 -# define PKCS7_F_PKCS7_ADD_SIGNER 103 -# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 -# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 -# define PKCS7_F_PKCS7_CTRL 104 -# define PKCS7_F_PKCS7_DATADECODE 112 -# define PKCS7_F_PKCS7_DATAFINAL 128 -# define PKCS7_F_PKCS7_DATAINIT 105 -# define PKCS7_F_PKCS7_DATAVERIFY 107 -# define PKCS7_F_PKCS7_DECRYPT 114 -# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 -# define PKCS7_F_PKCS7_ENCODE_RINFO 132 -# define PKCS7_F_PKCS7_ENCRYPT 115 -# define PKCS7_F_PKCS7_FINAL 134 -# define PKCS7_F_PKCS7_FIND_DIGEST 127 -# define PKCS7_F_PKCS7_GET0_SIGNERS 124 -# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 -# define PKCS7_F_PKCS7_SET_CIPHER 108 -# define PKCS7_F_PKCS7_SET_CONTENT 109 -# define PKCS7_F_PKCS7_SET_DIGEST 126 -# define PKCS7_F_PKCS7_SET_TYPE 110 -# define PKCS7_F_PKCS7_SIGN 116 -# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 -# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 -# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 -# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 -# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 -# define PKCS7_F_PKCS7_VERIFY 117 /* * PKCS7 reason codes. diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/prov_ssl.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/prov_ssl.h new file mode 100644 index 00000000..d3e0896c --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/prov_ssl.h @@ -0,0 +1,34 @@ +/* + * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROV_SSL_H +# define OPENSSL_PROV_SSL_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* SSL/TLS related defines useful to providers */ + +# define SSL_MAX_MASTER_KEY_LENGTH 48 + +# define SSL3_VERSION 0x0300 +# define TLS1_VERSION 0x0301 +# define TLS1_1_VERSION 0x0302 +# define TLS1_2_VERSION 0x0303 +# define TLS1_3_VERSION 0x0304 +# define DTLS1_VERSION 0xFEFF +# define DTLS1_2_VERSION 0xFEFD +# define DTLS1_BAD_VER 0x0100 + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_PROV_SSL_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/proverr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/proverr.h new file mode 100644 index 00000000..5d5c16d9 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/proverr.h @@ -0,0 +1,149 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROVERR_H +# define OPENSSL_PROVERR_H +# pragma once + +# include +# include +# include + + + +/* + * PROV reason codes. + */ +# define PROV_R_ADDITIONAL_INPUT_TOO_LONG 184 +# define PROV_R_ALGORITHM_MISMATCH 173 +# define PROV_R_ALREADY_INSTANTIATED 185 +# define PROV_R_BAD_DECRYPT 100 +# define PROV_R_BAD_ENCODING 141 +# define PROV_R_BAD_LENGTH 142 +# define PROV_R_BAD_TLS_CLIENT_VERSION 161 +# define PROV_R_BN_ERROR 160 +# define PROV_R_CIPHER_OPERATION_FAILED 102 +# define PROV_R_DERIVATION_FUNCTION_INIT_FAILED 205 +# define PROV_R_DIGEST_NOT_ALLOWED 174 +# define PROV_R_EMS_NOT_ENABLED 233 +# define PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK 186 +# define PROV_R_ERROR_INSTANTIATING_DRBG 188 +# define PROV_R_ERROR_RETRIEVING_ENTROPY 189 +# define PROV_R_ERROR_RETRIEVING_NONCE 190 +# define PROV_R_FAILED_DURING_DERIVATION 164 +# define PROV_R_FAILED_TO_CREATE_LOCK 180 +# define PROV_R_FAILED_TO_DECRYPT 162 +# define PROV_R_FAILED_TO_GENERATE_KEY 121 +# define PROV_R_FAILED_TO_GET_PARAMETER 103 +# define PROV_R_FAILED_TO_SET_PARAMETER 104 +# define PROV_R_FAILED_TO_SIGN 175 +# define PROV_R_FIPS_MODULE_CONDITIONAL_ERROR 227 +# define PROV_R_FIPS_MODULE_ENTERING_ERROR_STATE 224 +# define PROV_R_FIPS_MODULE_IN_ERROR_STATE 225 +# define PROV_R_GENERATE_ERROR 191 +# define PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 165 +# define PROV_R_INDICATOR_INTEGRITY_FAILURE 210 +# define PROV_R_INSUFFICIENT_DRBG_STRENGTH 181 +# define PROV_R_INVALID_AAD 108 +# define PROV_R_INVALID_CONFIG_DATA 211 +# define PROV_R_INVALID_CONSTANT_LENGTH 157 +# define PROV_R_INVALID_CURVE 176 +# define PROV_R_INVALID_CUSTOM_LENGTH 111 +# define PROV_R_INVALID_DATA 115 +# define PROV_R_INVALID_DIGEST 122 +# define PROV_R_INVALID_DIGEST_LENGTH 166 +# define PROV_R_INVALID_DIGEST_SIZE 218 +# define PROV_R_INVALID_INPUT_LENGTH 230 +# define PROV_R_INVALID_ITERATION_COUNT 123 +# define PROV_R_INVALID_IV_LENGTH 109 +# define PROV_R_INVALID_KEY 158 +# define PROV_R_INVALID_KEY_LENGTH 105 +# define PROV_R_INVALID_MAC 151 +# define PROV_R_INVALID_MGF1_MD 167 +# define PROV_R_INVALID_MODE 125 +# define PROV_R_INVALID_OUTPUT_LENGTH 217 +# define PROV_R_INVALID_PADDING_MODE 168 +# define PROV_R_INVALID_PUBINFO 198 +# define PROV_R_INVALID_SALT_LENGTH 112 +# define PROV_R_INVALID_SEED_LENGTH 154 +# define PROV_R_INVALID_SIGNATURE_SIZE 179 +# define PROV_R_INVALID_STATE 212 +# define PROV_R_INVALID_TAG 110 +# define PROV_R_INVALID_TAG_LENGTH 118 +# define PROV_R_INVALID_UKM_LENGTH 200 +# define PROV_R_INVALID_X931_DIGEST 170 +# define PROV_R_IN_ERROR_STATE 192 +# define PROV_R_KEY_SETUP_FAILED 101 +# define PROV_R_KEY_SIZE_TOO_SMALL 171 +# define PROV_R_LENGTH_TOO_LARGE 202 +# define PROV_R_MISMATCHING_DOMAIN_PARAMETERS 203 +# define PROV_R_MISSING_CEK_ALG 144 +# define PROV_R_MISSING_CIPHER 155 +# define PROV_R_MISSING_CONFIG_DATA 213 +# define PROV_R_MISSING_CONSTANT 156 +# define PROV_R_MISSING_KEY 128 +# define PROV_R_MISSING_MAC 150 +# define PROV_R_MISSING_MESSAGE_DIGEST 129 +# define PROV_R_MISSING_OID 209 +# define PROV_R_MISSING_PASS 130 +# define PROV_R_MISSING_SALT 131 +# define PROV_R_MISSING_SECRET 132 +# define PROV_R_MISSING_SEED 140 +# define PROV_R_MISSING_SESSION_ID 133 +# define PROV_R_MISSING_TYPE 134 +# define PROV_R_MISSING_XCGHASH 135 +# define PROV_R_MODULE_INTEGRITY_FAILURE 214 +# define PROV_R_NOT_A_PRIVATE_KEY 221 +# define PROV_R_NOT_A_PUBLIC_KEY 220 +# define PROV_R_NOT_INSTANTIATED 193 +# define PROV_R_NOT_PARAMETERS 226 +# define PROV_R_NOT_SUPPORTED 136 +# define PROV_R_NOT_XOF_OR_INVALID_LENGTH 113 +# define PROV_R_NO_KEY_SET 114 +# define PROV_R_NO_PARAMETERS_SET 177 +# define PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 178 +# define PROV_R_OUTPUT_BUFFER_TOO_SMALL 106 +# define PROV_R_PARENT_CANNOT_GENERATE_RANDOM_NUMBERS 228 +# define PROV_R_PARENT_CANNOT_SUPPLY_ENTROPY_SEED 187 +# define PROV_R_PARENT_LOCKING_NOT_ENABLED 182 +# define PROV_R_PARENT_STRENGTH_TOO_WEAK 194 +# define PROV_R_PATH_MUST_BE_ABSOLUTE 219 +# define PROV_R_PERSONALISATION_STRING_TOO_LONG 195 +# define PROV_R_PSS_SALTLEN_TOO_SMALL 172 +# define PROV_R_REQUEST_TOO_LARGE_FOR_DRBG 196 +# define PROV_R_REQUIRE_CTR_MODE_CIPHER 206 +# define PROV_R_RESEED_ERROR 197 +# define PROV_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 222 +# define PROV_R_SEED_SOURCES_MUST_NOT_HAVE_A_PARENT 229 +# define PROV_R_SELF_TEST_KAT_FAILURE 215 +# define PROV_R_SELF_TEST_POST_FAILURE 216 +# define PROV_R_TAG_NOT_NEEDED 120 +# define PROV_R_TAG_NOT_SET 119 +# define PROV_R_TOO_MANY_RECORDS 126 +# define PROV_R_UNABLE_TO_FIND_CIPHERS 207 +# define PROV_R_UNABLE_TO_GET_PARENT_STRENGTH 199 +# define PROV_R_UNABLE_TO_GET_PASSPHRASE 159 +# define PROV_R_UNABLE_TO_INITIALISE_CIPHERS 208 +# define PROV_R_UNABLE_TO_LOAD_SHA256 147 +# define PROV_R_UNABLE_TO_LOCK_PARENT 201 +# define PROV_R_UNABLE_TO_RESEED 204 +# define PROV_R_UNSUPPORTED_CEK_ALG 145 +# define PROV_R_UNSUPPORTED_KEY_SIZE 153 +# define PROV_R_UNSUPPORTED_MAC_TYPE 137 +# define PROV_R_UNSUPPORTED_NUMBER_OF_ROUNDS 152 +# define PROV_R_URI_AUTHORITY_UNSUPPORTED 223 +# define PROV_R_VALUE_ERROR 138 +# define PROV_R_WRONG_FINAL_BLOCK_LENGTH 107 +# define PROV_R_WRONG_OUTPUT_BUFFER_SIZE 139 +# define PROV_R_XOF_DIGESTS_NOT_ALLOWED 183 +# define PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE 148 +# define PROV_R_XTS_DUPLICATED_KEYS 149 + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/provider.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/provider.h new file mode 100644 index 00000000..dc86ff58 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/provider.h @@ -0,0 +1,60 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROVIDER_H +# define OPENSSL_PROVIDER_H +# pragma once + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Set the default provider search path */ +int OSSL_PROVIDER_set_default_search_path(OSSL_LIB_CTX *, const char *path); + +/* Load and unload a provider */ +OSSL_PROVIDER *OSSL_PROVIDER_load(OSSL_LIB_CTX *, const char *name); +OSSL_PROVIDER *OSSL_PROVIDER_try_load(OSSL_LIB_CTX *, const char *name, + int retain_fallbacks); +int OSSL_PROVIDER_unload(OSSL_PROVIDER *prov); +int OSSL_PROVIDER_available(OSSL_LIB_CTX *, const char *name); +int OSSL_PROVIDER_do_all(OSSL_LIB_CTX *ctx, + int (*cb)(OSSL_PROVIDER *provider, void *cbdata), + void *cbdata); + +const OSSL_PARAM *OSSL_PROVIDER_gettable_params(const OSSL_PROVIDER *prov); +int OSSL_PROVIDER_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]); +int OSSL_PROVIDER_self_test(const OSSL_PROVIDER *prov); +int OSSL_PROVIDER_get_capabilities(const OSSL_PROVIDER *prov, + const char *capability, + OSSL_CALLBACK *cb, + void *arg); + +const OSSL_ALGORITHM *OSSL_PROVIDER_query_operation(const OSSL_PROVIDER *prov, + int operation_id, + int *no_cache); +void OSSL_PROVIDER_unquery_operation(const OSSL_PROVIDER *prov, + int operation_id, const OSSL_ALGORITHM *algs); +void *OSSL_PROVIDER_get0_provider_ctx(const OSSL_PROVIDER *prov); +const OSSL_DISPATCH *OSSL_PROVIDER_get0_dispatch(const OSSL_PROVIDER *prov); + +/* Add a built in providers */ +int OSSL_PROVIDER_add_builtin(OSSL_LIB_CTX *, const char *name, + OSSL_provider_init_fn *init_fn); + +/* Information */ +const char *OSSL_PROVIDER_get0_name(const OSSL_PROVIDER *prov); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand.h index 38a2a271..90e0f0a0 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand.h @@ -1,24 +1,42 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RAND_H -# define HEADER_RAND_H +#ifndef OPENSSL_RAND_H +# define OPENSSL_RAND_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RAND_H +# endif # include -# include +# include # include # include +# include #ifdef __cplusplus extern "C" { #endif +/* + * Default security strength (in the sense of [NIST SP 800-90Ar1]) + * + * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that + * of the cipher by collecting less entropy. The current DRBG implementation + * does not take RAND_DRBG_STRENGTH into account and sets the strength of the + * DRBG to that of the cipher. + */ +# define RAND_DRBG_STRENGTH 256 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 struct rand_meth_st { int (*seed) (const void *buf, int num); int (*bytes) (unsigned char *buf, int num); @@ -28,26 +46,55 @@ struct rand_meth_st { int (*status) (void); }; -int RAND_set_rand_method(const RAND_METHOD *meth); -const RAND_METHOD *RAND_get_rand_method(void); -# ifndef OPENSSL_NO_ENGINE -int RAND_set_rand_engine(ENGINE *engine); -# endif +OSSL_DEPRECATEDIN_3_0 int RAND_set_rand_method(const RAND_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const RAND_METHOD *RAND_get_rand_method(void); +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int RAND_set_rand_engine(ENGINE *engine); +# endif -RAND_METHOD *RAND_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 RAND_METHOD *RAND_OpenSSL(void); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define RAND_cleanup() while(0) continue # endif int RAND_bytes(unsigned char *buf, int num); int RAND_priv_bytes(unsigned char *buf, int num); -DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) + +/* + * Equivalent of RAND_priv_bytes() but additionally taking an OSSL_LIB_CTX and + * a strength. + */ +int RAND_priv_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num, + unsigned int strength); + +/* + * Equivalent of RAND_bytes() but additionally taking an OSSL_LIB_CTX and + * a strength. + */ +int RAND_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num, + unsigned int strength); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 int RAND_pseudo_bytes(unsigned char *buf, int num); +# endif + +EVP_RAND_CTX *RAND_get0_primary(OSSL_LIB_CTX *ctx); +EVP_RAND_CTX *RAND_get0_public(OSSL_LIB_CTX *ctx); +EVP_RAND_CTX *RAND_get0_private(OSSL_LIB_CTX *ctx); +int RAND_set0_public(OSSL_LIB_CTX *ctx, EVP_RAND_CTX *rand); +int RAND_set0_private(OSSL_LIB_CTX *ctx, EVP_RAND_CTX *rand); + +int RAND_set_DRBG_type(OSSL_LIB_CTX *ctx, const char *drbg, const char *propq, + const char *cipher, const char *digest); +int RAND_set_seed_source_type(OSSL_LIB_CTX *ctx, const char *seed, + const char *propq); void RAND_seed(const void *buf, int num); void RAND_keep_random_devices_open(int keep); # if defined(__ANDROID__) && defined(__NDK_FPABI__) -__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ +__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ # endif void RAND_add(const void *buf, int num, double randomness); int RAND_load_file(const char *file, long max_bytes); @@ -65,11 +112,12 @@ int RAND_poll(void); # if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) /* application has to include in order to use these */ -DEPRECATEDIN_1_1_0(void RAND_screen(void)) -DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void RAND_screen(void); +OSSL_DEPRECATEDIN_1_1_0 int RAND_event(UINT, WPARAM, LPARAM); +# endif # endif - #ifdef __cplusplus } #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand_drbg.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand_drbg.h deleted file mode 100644 index 45b731b7..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand_drbg.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DRBG_RAND_H -# define HEADER_DRBG_RAND_H - -# include -# include -# include - -/* - * RAND_DRBG flags - * - * Note: if new flags are added, the constant `rand_drbg_used_flags` - * in drbg_lib.c needs to be updated accordingly. - */ - -/* In CTR mode, disable derivation function ctr_df */ -# define RAND_DRBG_FLAG_CTR_NO_DF 0x1 - - -# if OPENSSL_API_COMPAT < 0x10200000L -/* This #define was replaced by an internal constant and should not be used. */ -# define RAND_DRBG_USED_FLAGS (RAND_DRBG_FLAG_CTR_NO_DF) -# endif - -/* - * Default security strength (in the sense of [NIST SP 800-90Ar1]) - * - * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that - * of the cipher by collecting less entropy. The current DRBG implementation - * does not take RAND_DRBG_STRENGTH into account and sets the strength of the - * DRBG to that of the cipher. - * - * RAND_DRBG_STRENGTH is currently only used for the legacy RAND - * implementation. - * - * Currently supported ciphers are: NID_aes_128_ctr, NID_aes_192_ctr and - * NID_aes_256_ctr - */ -# define RAND_DRBG_STRENGTH 256 -/* Default drbg type */ -# define RAND_DRBG_TYPE NID_aes_256_ctr -/* Default drbg flags */ -# define RAND_DRBG_FLAGS 0 - - -# ifdef __cplusplus -extern "C" { -# endif - -/* - * Object lifetime functions. - */ -RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent); -RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent); -int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags); -int RAND_DRBG_set_defaults(int type, unsigned int flags); -int RAND_DRBG_instantiate(RAND_DRBG *drbg, - const unsigned char *pers, size_t perslen); -int RAND_DRBG_uninstantiate(RAND_DRBG *drbg); -void RAND_DRBG_free(RAND_DRBG *drbg); - -/* - * Object "use" functions. - */ -int RAND_DRBG_reseed(RAND_DRBG *drbg, - const unsigned char *adin, size_t adinlen, - int prediction_resistance); -int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen, - int prediction_resistance, - const unsigned char *adin, size_t adinlen); -int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen); - -int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval); -int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval); - -int RAND_DRBG_set_reseed_defaults( - unsigned int master_reseed_interval, - unsigned int slave_reseed_interval, - time_t master_reseed_time_interval, - time_t slave_reseed_time_interval - ); - -RAND_DRBG *RAND_DRBG_get0_master(void); -RAND_DRBG *RAND_DRBG_get0_public(void); -RAND_DRBG *RAND_DRBG_get0_private(void); - -/* - * EXDATA - */ -# define RAND_DRBG_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG, l, p, newf, dupf, freef) -int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *arg); -void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx); - -/* - * Callback function typedefs - */ -typedef size_t (*RAND_DRBG_get_entropy_fn)(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, - size_t max_len, - int prediction_resistance); -typedef void (*RAND_DRBG_cleanup_entropy_fn)(RAND_DRBG *ctx, - unsigned char *out, size_t outlen); -typedef size_t (*RAND_DRBG_get_nonce_fn)(RAND_DRBG *drbg, unsigned char **pout, - int entropy, size_t min_len, - size_t max_len); -typedef void (*RAND_DRBG_cleanup_nonce_fn)(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); - -int RAND_DRBG_set_callbacks(RAND_DRBG *drbg, - RAND_DRBG_get_entropy_fn get_entropy, - RAND_DRBG_cleanup_entropy_fn cleanup_entropy, - RAND_DRBG_get_nonce_fn get_nonce, - RAND_DRBG_cleanup_nonce_fn cleanup_nonce); - - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/randerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/randerr.h index 79d57905..b5e08e43 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/randerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/randerr.h @@ -1,54 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RANDERR_H -# define HEADER_RANDERR_H +#ifndef OPENSSL_RANDERR_H +# define OPENSSL_RANDERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RAND_strings(void); -/* - * RAND function codes. - */ -# define RAND_F_DATA_COLLECT_METHOD 127 -# define RAND_F_DRBG_BYTES 101 -# define RAND_F_DRBG_GET_ENTROPY 105 -# define RAND_F_DRBG_SETUP 117 -# define RAND_F_GET_ENTROPY 106 -# define RAND_F_RAND_BYTES 100 -# define RAND_F_RAND_DRBG_ENABLE_LOCKING 119 -# define RAND_F_RAND_DRBG_GENERATE 107 -# define RAND_F_RAND_DRBG_GET_ENTROPY 120 -# define RAND_F_RAND_DRBG_GET_NONCE 123 -# define RAND_F_RAND_DRBG_INSTANTIATE 108 -# define RAND_F_RAND_DRBG_NEW 109 -# define RAND_F_RAND_DRBG_RESEED 110 -# define RAND_F_RAND_DRBG_RESTART 102 -# define RAND_F_RAND_DRBG_SET 104 -# define RAND_F_RAND_DRBG_SET_DEFAULTS 121 -# define RAND_F_RAND_DRBG_UNINSTANTIATE 118 -# define RAND_F_RAND_LOAD_FILE 111 -# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 122 -# define RAND_F_RAND_POOL_ADD 103 -# define RAND_F_RAND_POOL_ADD_BEGIN 113 -# define RAND_F_RAND_POOL_ADD_END 114 -# define RAND_F_RAND_POOL_ATTACH 124 -# define RAND_F_RAND_POOL_BYTES_NEEDED 115 -# define RAND_F_RAND_POOL_GROW 125 -# define RAND_F_RAND_POOL_NEW 116 -# define RAND_F_RAND_PSEUDO_BYTES 126 -# define RAND_F_RAND_WRITE_FILE 112 /* * RAND reason codes. @@ -71,6 +39,7 @@ int ERR_load_RAND_strings(void); # define RAND_R_FUNC_NOT_IMPLEMENTED 101 # define RAND_R_FWRITE_ERROR 123 # define RAND_R_GENERATE_ERROR 112 +# define RAND_R_INSUFFICIENT_DRBG_STRENGTH 139 # define RAND_R_INTERNAL_ERROR 113 # define RAND_R_IN_ERROR_STATE 114 # define RAND_R_NOT_A_REGULAR_FILE 122 @@ -88,6 +57,11 @@ int ERR_load_RAND_strings(void); # define RAND_R_SELFTEST_FAILURE 119 # define RAND_R_TOO_LITTLE_NONCE_REQUESTED 135 # define RAND_R_TOO_MUCH_NONCE_REQUESTED 136 +# define RAND_R_UNABLE_TO_CREATE_DRBG 143 +# define RAND_R_UNABLE_TO_FETCH_DRBG 144 +# define RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER 141 +# define RAND_R_UNABLE_TO_GET_PARENT_STRENGTH 138 +# define RAND_R_UNABLE_TO_LOCK_PARENT 140 # define RAND_R_UNSUPPORTED_DRBG_FLAGS 132 # define RAND_R_UNSUPPORTED_DRBG_TYPE 120 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc2.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc2.h index 585f9e4c..ff633fd8 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc2.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc2.h @@ -1,51 +1,68 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC2_H -# define HEADER_RC2_H +#ifndef OPENSSL_RC2_H +# define OPENSSL_RC2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC2_H +# endif # include # ifndef OPENSSL_NO_RC2 -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif +# define RC2_BLOCK 8 +# define RC2_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int RC2_INT; -# define RC2_ENCRYPT 1 -# define RC2_DECRYPT 0 - -# define RC2_BLOCK 8 -# define RC2_KEY_LENGTH 16 +# define RC2_ENCRYPT 1 +# define RC2_DECRYPT 0 typedef struct rc2_key_st { RC2_INT data[64]; } RC2_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void RC2_set_key(RC2_KEY *key, int len, + const unsigned char *data, int bits); +OSSL_DEPRECATEDIN_3_0 void RC2_ecb_encrypt(const unsigned char *in, + unsigned char *out, RC2_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_encrypt(unsigned long *data, RC2_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC2_decrypt(unsigned long *data, RC2_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC2_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *ks, unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *schedule, + unsigned char *ivec, + int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *schedule, + unsigned char *ivec, + int *num); +# endif -void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); -void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC2_KEY *key, int enc); -void RC2_encrypt(unsigned long *data, RC2_KEY *key); -void RC2_decrypt(unsigned long *data, RC2_KEY *key); -void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - RC2_KEY *ks, unsigned char *iv, int enc); -void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num, int enc); -void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc4.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc4.h index 86803b37..600b2885 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc4.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc4.h @@ -1,36 +1,47 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC4_H -# define HEADER_RC4_H +#ifndef OPENSSL_RC4_H +# define OPENSSL_RC4_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC4_H +# endif # include # ifndef OPENSSL_NO_RC4 -# include -#ifdef __cplusplus +# include +# ifdef __cplusplus extern "C" { -#endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef struct rc4_key_st { RC4_INT x, y; RC4_INT data[256]; } RC4_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *RC4_options(void); +OSSL_DEPRECATEDIN_3_0 void RC4_set_key(RC4_KEY *key, int len, + const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void RC4(RC4_KEY *key, size_t len, + const unsigned char *indata, + unsigned char *outdata); +# endif -const char *RC4_options(void); -void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, - unsigned char *outdata); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc5.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc5.h index 793f88e4..de833523 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc5.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc5.h @@ -1,63 +1,79 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC5_H -# define HEADER_RC5_H +#ifndef OPENSSL_RC5_H +# define OPENSSL_RC5_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC5_H +# endif # include # ifndef OPENSSL_NO_RC5 -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif -# define RC5_ENCRYPT 1 -# define RC5_DECRYPT 0 +# define RC5_32_BLOCK 8 +# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ -# define RC5_32_INT unsigned int +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define RC5_ENCRYPT 1 +# define RC5_DECRYPT 0 -# define RC5_32_BLOCK 8 -# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ +# define RC5_32_INT unsigned int /* * This are the only values supported. Tweak the code if you want more The * most supported modes will be RC5-32/12/16 RC5-32/16/8 */ -# define RC5_8_ROUNDS 8 -# define RC5_12_ROUNDS 12 -# define RC5_16_ROUNDS 16 +# define RC5_8_ROUNDS 8 +# define RC5_12_ROUNDS 12 +# define RC5_16_ROUNDS 16 typedef struct rc5_key_st { /* Number of rounds */ int rounds; RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)]; } RC5_32_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RC5_32_set_key(RC5_32_KEY *key, int len, + const unsigned char *data, + int rounds); +OSSL_DEPRECATEDIN_3_0 void RC5_32_ecb_encrypt(const unsigned char *in, + unsigned char *out, + RC5_32_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC5_32_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *ks, unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *schedule, + unsigned char *ivec, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *schedule, + unsigned char *ivec, int *num); +# endif -void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, - int rounds); -void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC5_32_KEY *key, int enc); -void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *ks, unsigned char *iv, - int enc); -void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ripemd.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ripemd.h index c42026aa..900ee317 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ripemd.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ripemd.h @@ -1,29 +1,38 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RIPEMD_H -# define HEADER_RIPEMD_H +#ifndef OPENSSL_RIPEMD_H +# define OPENSSL_RIPEMD_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RIPEMD_H +# endif # include -#ifndef OPENSSL_NO_RMD160 -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_RMD160 +# include +# include + +# define RIPEMD160_DIGEST_LENGTH 20 + +# ifdef __cplusplus extern "C" { -# endif +# endif +# if !defined(OPENSSL_NO_DEPRECATED_3_0) -# define RIPEMD160_LONG unsigned int +# define RIPEMD160_LONG unsigned int -# define RIPEMD160_CBLOCK 64 -# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) -# define RIPEMD160_DIGEST_LENGTH 20 +# define RIPEMD160_CBLOCK 64 +# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) typedef struct RIPEMD160state_st { RIPEMD160_LONG A, B, C, D, E; @@ -31,17 +40,20 @@ typedef struct RIPEMD160state_st { RIPEMD160_LONG data[RIPEMD160_LBLOCK]; unsigned int num; } RIPEMD160_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Init(RIPEMD160_CTX *c); +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *RIPEMD160(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void RIPEMD160_Transform(RIPEMD160_CTX *c, + const unsigned char *b); +# endif -int RIPEMD160_Init(RIPEMD160_CTX *c); -int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); -int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); -unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); -void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); - -# ifdef __cplusplus +# ifdef __cplusplus } +# endif # endif -# endif - - #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsa.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsa.h index 5e76365c..d0c95992 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsa.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsa.h @@ -1,70 +1,78 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RSA_H -# define HEADER_RSA_H +#ifndef OPENSSL_RSA_H +# define OPENSSL_RSA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RSA_H +# endif # include -# ifndef OPENSSL_NO_RSA # include # include # include -# include -# if OPENSSL_API_COMPAT < 0x10100000L +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif # include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + # ifdef __cplusplus extern "C" { # endif -/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ - # ifndef OPENSSL_RSA_MAX_MODULUS_BITS # define OPENSSL_RSA_MAX_MODULUS_BITS 16384 # endif -# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024 - -# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS -# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 -# endif -# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS - -/* exponent limit enforced for "large" modulus only */ -# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 -# endif - # define RSA_3 0x3L # define RSA_F4 0x10001L +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ + +# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 2048 + +# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS +# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 +# endif + +/* exponent limit enforced for "large" modulus only */ +# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS +# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 +# endif /* based on RFC 8017 appendix A.1.2 */ -# define RSA_ASN1_VERSION_DEFAULT 0 -# define RSA_ASN1_VERSION_MULTI 1 +# define RSA_ASN1_VERSION_DEFAULT 0 +# define RSA_ASN1_VERSION_MULTI 1 -# define RSA_DEFAULT_PRIME_NUM 2 +# define RSA_DEFAULT_PRIME_NUM 2 -# define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private - * match */ - -# define RSA_FLAG_CACHE_PUBLIC 0x0002 -# define RSA_FLAG_CACHE_PRIVATE 0x0004 -# define RSA_FLAG_BLINDING 0x0008 -# define RSA_FLAG_THREAD_SAFE 0x0010 +# define RSA_METHOD_FLAG_NO_CHECK 0x0001 +# define RSA_FLAG_CACHE_PUBLIC 0x0002 +# define RSA_FLAG_CACHE_PRIVATE 0x0004 +# define RSA_FLAG_BLINDING 0x0008 +# define RSA_FLAG_THREAD_SAFE 0x0010 /* * This flag means the private key operations will be handled by rsa_mod_exp * and that they do not depend on the private key components being present: * for example a key stored in external hardware. Without this flag * bn_mod_exp gets called when private key components are absent. */ -# define RSA_FLAG_EXT_PKEY 0x0020 +# define RSA_FLAG_EXT_PKEY 0x0020 /* * new with 0.9.6j and 0.9.7b; the built-in @@ -72,14 +80,14 @@ extern "C" { * default (ignoring RSA_FLAG_BLINDING), * but other engines might not need it */ -# define RSA_FLAG_NO_BLINDING 0x0080 -# if OPENSSL_API_COMPAT < 0x10100000L +# define RSA_FLAG_NO_BLINDING 0x0080 +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /* * Does nothing. Previously this switched off constant time behaviour. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define RSA_FLAG_NO_CONSTTIME 0x0000 # endif -# if OPENSSL_API_COMPAT < 0x00908000L /* deprecated name for the flag*/ /* * new with 0.9.7h; the built-in RSA @@ -89,79 +97,78 @@ extern "C" { * faster variable sliding window method to * be used for all exponents. */ +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 # define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME # endif -# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_RSA_PADDING, pad, NULL) +/*- + * New with 3.0: use part of the flags to denote exact type of RSA key, + * some of which are limited to specific signature and encryption schemes. + * These different types share the same RSA structure, but indicate the + * use of certain fields in that structure. + * Currently known are: + * RSA - this is the "normal" unlimited RSA structure (typenum 0) + * RSASSA-PSS - indicates that the PSS parameters are used. + * RSAES-OAEP - no specific field used for the moment, but OAEP padding + * is expected. (currently unused) + * + * 4 bits allow for 16 types + */ +# define RSA_FLAG_TYPE_MASK 0xF000 +# define RSA_FLAG_TYPE_RSA 0x0000 +# define RSA_FLAG_TYPE_RSASSAPSS 0x1000 +# define RSA_FLAG_TYPE_RSAESOAEP 0x2000 -# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) +int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad_mode); +int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad_mode); + +int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int saltlen); +int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *saltlen); + +int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int bits); +int EVP_PKEY_CTX_set1_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); +int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes); +int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *ctx, int saltlen); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); +# endif -# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) /* Salt length matches digest */ # define RSA_PSS_SALTLEN_DIGEST -1 /* Verify only: auto detect salt length */ # define RSA_PSS_SALTLEN_AUTO -2 /* Set salt length to maximum possible */ # define RSA_PSS_SALTLEN_MAX -3 +/* Auto-detect on verify, set salt length to min(maximum possible, digest + * length) on sign */ +# define RSA_PSS_SALTLEN_AUTO_DIGEST_MAX -4 /* Old compatible max salt length for sign only */ # define RSA_PSS_SALTLEN_MAX_SIGN -2 -# define EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) +int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); +int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_get_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, char *name, + size_t namelen); +int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md_name(EVP_PKEY_CTX *ctx, + const char *mdname); -# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, plen) +int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_pss_keygen_md_name(EVP_PKEY_CTX *ctx, + const char *mdname, + const char *mdprops); -# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) - -# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) - -# define EVP_PKEY_CTX_set_rsa_keygen_primes(ctx, primes) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES, primes, NULL) - -# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)(l)) - -# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)(l)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, \ - EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_MD, \ - 0, (void *)(md)) +int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); +int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_get_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, char *name, + size_t namelen); +int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, void *label, int llen); +int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) @@ -182,104 +189,135 @@ extern "C" { # define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) -# define RSA_PKCS1_PADDING 1 -# define RSA_SSLV23_PADDING 2 -# define RSA_NO_PADDING 3 -# define RSA_PKCS1_OAEP_PADDING 4 -# define RSA_X931_PADDING 5 -/* EVP_PKEY_ only */ -# define RSA_PKCS1_PSS_PADDING 6 +# define RSA_PKCS1_PADDING 1 +# define RSA_NO_PADDING 3 +# define RSA_PKCS1_OAEP_PADDING 4 +# define RSA_X931_PADDING 5 -# define RSA_PKCS1_PADDING_SIZE 11 +/* EVP_PKEY_ only */ +# define RSA_PKCS1_PSS_PADDING 6 +# define RSA_PKCS1_WITH_TLS_PADDING 7 + +# define RSA_PKCS1_PADDING_SIZE 11 # define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) # define RSA_get_app_data(s) RSA_get_ex_data(s,0) -RSA *RSA_new(void); -RSA *RSA_new_method(ENGINE *engine); -int RSA_bits(const RSA *rsa); -int RSA_size(const RSA *rsa); -int RSA_security_bits(const RSA *rsa); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *RSA_new(void); +OSSL_DEPRECATEDIN_3_0 RSA *RSA_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 int RSA_bits(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_size(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_security_bits(const RSA *rsa); -int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); -int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); -int RSA_set0_crt_params(RSA *r,BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); -int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], - BIGNUM *coeffs[], int pnum); -void RSA_get0_key(const RSA *r, - const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); -void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); -int RSA_get_multi_prime_extra_count(const RSA *r); -int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]); -void RSA_get0_crt_params(const RSA *r, - const BIGNUM **dmp1, const BIGNUM **dmq1, - const BIGNUM **iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_crt_params(RSA *r, + BIGNUM *dmp1, BIGNUM *dmq1, + BIGNUM *iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_multi_prime_params(RSA *r, + BIGNUM *primes[], + BIGNUM *exps[], + BIGNUM *coeffs[], + int pnum); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_key(const RSA *r, + const BIGNUM **n, const BIGNUM **e, + const BIGNUM **d); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_factors(const RSA *r, + const BIGNUM **p, const BIGNUM **q); +OSSL_DEPRECATEDIN_3_0 int RSA_get_multi_prime_extra_count(const RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_get0_multi_prime_factors(const RSA *r, + const BIGNUM *primes[]); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_crt_params(const RSA *r, + const BIGNUM **dmp1, + const BIGNUM **dmq1, + const BIGNUM **iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], const BIGNUM *coeffs[]); -const BIGNUM *RSA_get0_n(const RSA *d); -const BIGNUM *RSA_get0_e(const RSA *d); -const BIGNUM *RSA_get0_d(const RSA *d); -const BIGNUM *RSA_get0_p(const RSA *d); -const BIGNUM *RSA_get0_q(const RSA *d); -const BIGNUM *RSA_get0_dmp1(const RSA *r); -const BIGNUM *RSA_get0_dmq1(const RSA *r); -const BIGNUM *RSA_get0_iqmp(const RSA *r); -const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); -void RSA_clear_flags(RSA *r, int flags); -int RSA_test_flags(const RSA *r, int flags); -void RSA_set_flags(RSA *r, int flags); -int RSA_get_version(RSA *r); -ENGINE *RSA_get0_engine(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_n(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_e(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_d(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_p(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_q(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmp1(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmq1(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_iqmp(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); +OSSL_DEPRECATEDIN_3_0 void RSA_clear_flags(RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 int RSA_test_flags(const RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 void RSA_set_flags(RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 int RSA_get_version(RSA *r); +OSSL_DEPRECATEDIN_3_0 ENGINE *RSA_get0_engine(const RSA *r); +# endif /* !OPENSSL_NO_DEPRECATED_3_0 */ + +# define EVP_RSA_gen(bits) \ + EVP_PKEY_Q_keygen(NULL, NULL, "RSA", (size_t)(0 + (bits))) /* Deprecated version */ -DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void - (*callback) (int, int, void *), - void *cb_arg)) +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 RSA *RSA_generate_key(int bits, unsigned long e, void + (*callback) (int, int, void *), + void *cb_arg); +# endif /* New version */ -int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, + BN_GENCB *cb); /* Multi-prime version */ -int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, - BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_generate_multi_prime_key(RSA *rsa, int bits, + int primes, BIGNUM *e, + BN_GENCB *cb); -int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, - BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2, - const BIGNUM *Xp, const BIGNUM *Xq1, const BIGNUM *Xq2, - const BIGNUM *Xq, const BIGNUM *e, BN_GENCB *cb); -int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, - BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, + BIGNUM *q1, BIGNUM *q2, + const BIGNUM *Xp1, const BIGNUM *Xp2, + const BIGNUM *Xp, const BIGNUM *Xq1, + const BIGNUM *Xq2, const BIGNUM *Xq, + const BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_X931_generate_key_ex(RSA *rsa, int bits, + const BIGNUM *e, + BN_GENCB *cb); -int RSA_check_key(const RSA *); -int RSA_check_key_ex(const RSA *, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_check_key(const RSA *); +OSSL_DEPRECATEDIN_3_0 int RSA_check_key_ex(const RSA *, BN_GENCB *cb); /* next 4 return -1 on error */ -int RSA_public_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_public_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -void RSA_free(RSA *r); +OSSL_DEPRECATEDIN_3_0 +int RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r); /* "up" the RSA object's reference count */ -int RSA_up_ref(RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_up_ref(RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_flags(const RSA *r); -int RSA_flags(const RSA *r); - -void RSA_set_default_method(const RSA_METHOD *meth); -const RSA_METHOD *RSA_get_default_method(void); -const RSA_METHOD *RSA_null_method(void); -const RSA_METHOD *RSA_get_method(const RSA *rsa); -int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void RSA_set_default_method(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_null_method(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_method(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); /* these are the actual RSA functions */ -const RSA_METHOD *RSA_PKCS1_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_PKCS1_OpenSSL(void); + +DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, + RSA, RSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, + RSA, RSAPrivateKey) +# endif /* !OPENSSL_NO_DEPRECATED_3_0 */ int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2); -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) - struct rsa_pss_params_st { X509_ALGOR *hashAlgorithm; X509_ALGOR *maskGenAlgorithm; @@ -290,6 +328,7 @@ struct rsa_pss_params_st { }; DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) +DECLARE_ASN1_DUP_FUNCTION(RSA_PSS_PARAMS) typedef struct rsa_oaep_params_st { X509_ALGOR *hashFunc; @@ -301,101 +340,119 @@ typedef struct rsa_oaep_params_st { DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) -# ifndef OPENSSL_NO_STDIO -int RSA_print_fp(FILE *fp, const RSA *r, int offset); -# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int RSA_print_fp(FILE *fp, const RSA *r, int offset); +# endif -int RSA_print(BIO *bp, const RSA *r, int offset); +OSSL_DEPRECATEDIN_3_0 int RSA_print(BIO *bp, const RSA *r, int offset); /* * The following 2 functions sign and verify a X509_SIG ASN1 object inside * PKCS#1 padded RSA encryption */ -int RSA_sign(int type, const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify(int type, const unsigned char *m, unsigned int m_length, - const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_sign(int type, const unsigned char *m, + unsigned int m_length, unsigned char *sigret, + unsigned int *siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_verify(int type, const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, RSA *rsa); /* * The following 2 function sign and verify a ASN1_OCTET_STRING object inside * PKCS#1 padded RSA encryption */ +OSSL_DEPRECATEDIN_3_0 int RSA_sign_ASN1_OCTET_STRING(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, - unsigned int m_length, unsigned char *sigbuf, - unsigned int siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int RSA_verify_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigbuf, unsigned int siglen, + RSA *rsa); -int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); -void RSA_blinding_off(RSA *rsa); -BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void RSA_blinding_off(RSA *rsa); +OSSL_DEPRECATEDIN_3_0 BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); -int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, - long seedlen, const EVP_MD *dgst); +OSSL_DEPRECATEDIN_3_0 int PKCS1_MGF1(unsigned char *mask, long len, + const unsigned char *seed, long seedlen, + const EVP_MD *dgst); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *f, int fl, const unsigned char *p, int pl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len, const unsigned char *p, int pl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, const unsigned char *from, int flen, const unsigned char *param, int plen, const EVP_MD *md, const EVP_MD *mgf1md); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, const unsigned char *from, int flen, - int num, const unsigned char *param, - int plen, const EVP_MD *md, - const EVP_MD *mgf1md); -int RSA_padding_add_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_none(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_X931(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_X931_hash_id(int nid); + int num, + const unsigned char *param, int plen, + const EVP_MD *md, const EVP_MD *mgf1md); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_none(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_none(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_X931_hash_id(int nid); +OSSL_DEPRECATEDIN_3_0 int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, const EVP_MD *Hash, const unsigned char *EM, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, const unsigned char *mHash, const EVP_MD *Hash, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, const EVP_MD *Hash, const EVP_MD *mgf1Hash, const unsigned char *EM, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, const unsigned char *mHash, const EVP_MD *Hash, const EVP_MD *mgf1Hash, int sLen); -#define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ +# define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) -int RSA_set_ex_data(RSA *r, int idx, void *arg); -void *RSA_get_ex_data(const RSA *r, int idx); +OSSL_DEPRECATEDIN_3_0 int RSA_set_ex_data(RSA *r, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *RSA_get_ex_data(const RSA *r, int idx); -RSA *RSAPublicKey_dup(RSA *rsa); -RSA *RSAPrivateKey_dup(RSA *rsa); +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPublicKey) +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPrivateKey) /* * If this flag is set the RSA method is FIPS compliant and can be used in @@ -404,7 +461,7 @@ RSA *RSAPrivateKey_dup(RSA *rsa); * result is compliant. */ -# define RSA_FLAG_FIPS_METHOD 0x0400 +# define RSA_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are @@ -412,58 +469,80 @@ RSA *RSAPrivateKey_dup(RSA *rsa); * usage is compliant. */ -# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 +# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 /* * Application has decided PRNG is good enough to generate a key: don't * check. */ -# define RSA_FLAG_CHECKED 0x0800 +# define RSA_FLAG_CHECKED 0x0800 -RSA_METHOD *RSA_meth_new(const char *name, int flags); -void RSA_meth_free(RSA_METHOD *meth); -RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); -const char *RSA_meth_get0_name(const RSA_METHOD *meth); -int RSA_meth_set1_name(RSA_METHOD *meth, const char *name); -int RSA_meth_get_flags(const RSA_METHOD *meth); -int RSA_meth_set_flags(RSA_METHOD *meth, int flags); -void *RSA_meth_get0_app_data(const RSA_METHOD *meth); -int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data); -int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void RSA_meth_free(RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const char *RSA_meth_get0_name(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set1_name(RSA_METHOD *meth, + const char *name); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_get_flags(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_flags(RSA_METHOD *meth, int flags); +OSSL_DEPRECATEDIN_3_0 void *RSA_meth_get0_app_data(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set0_app_data(RSA_METHOD *meth, + void *app_data); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_pub_enc(RSA_METHOD *rsa, int (*pub_enc) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_pub_dec(RSA_METHOD *rsa, int (*pub_dec) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_priv_enc(RSA_METHOD *rsa, int (*priv_enc) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_priv_dec(RSA_METHOD *rsa, int (*priv_dec) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) (BIGNUM *r0, + const BIGNUM *i, + RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_mod_exp(RSA_METHOD *rsa, int (*mod_exp) (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx)); -int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, @@ -471,43 +550,61 @@ int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)); +OSSL_DEPRECATEDIN_3_0 int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); +OSSL_DEPRECATEDIN_3_0 int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); -int (*RSA_meth_get_sign(const RSA_METHOD *meth)) - (int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_sign(const RSA_METHOD *meth)) (int type, + const unsigned char *m, + unsigned int m_length, + unsigned char *sigret, + unsigned int *siglen, + const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_sign(RSA_METHOD *rsa, int (*sign) (int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, const RSA *rsa)); -int (*RSA_meth_get_verify(const RSA_METHOD *meth)) - (int dtype, const unsigned char *m, - unsigned int m_length, const unsigned char *sigbuf, - unsigned int siglen, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_verify(const RSA_METHOD *meth)) (int dtype, + const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, + const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_verify(RSA_METHOD *rsa, int (*verify) (int dtype, const unsigned char *m, unsigned int m_length, const unsigned char *sigbuf, unsigned int siglen, const RSA *rsa)); -int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) (RSA *rsa, int bits, + BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_keygen(RSA_METHOD *rsa, int (*keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb)); -int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) (RSA *rsa, + int bits, + int primes, + BIGNUM *e, + BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, int (*keygen) (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb)); +#endif /* !OPENSSL_NO_DEPRECATED_3_0 */ -# ifdef __cplusplus +# ifdef __cplusplus } -# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsaerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsaerr.h index 59b15e13..c58463c7 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsaerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsaerr.h @@ -1,91 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RSAERR_H -# define HEADER_RSAERR_H +#ifndef OPENSSL_RSAERR_H +# define OPENSSL_RSAERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RSA_strings(void); -/* - * RSA function codes. - */ -# define RSA_F_CHECK_PADDING_MD 140 -# define RSA_F_ENCODE_PKCS1 146 -# define RSA_F_INT_RSA_VERIFY 145 -# define RSA_F_OLD_RSA_PRIV_DECODE 147 -# define RSA_F_PKEY_PSS_INIT 165 -# define RSA_F_PKEY_RSA_CTRL 143 -# define RSA_F_PKEY_RSA_CTRL_STR 144 -# define RSA_F_PKEY_RSA_SIGN 142 -# define RSA_F_PKEY_RSA_VERIFY 149 -# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 -# define RSA_F_RSA_ALGOR_TO_MD 156 -# define RSA_F_RSA_BUILTIN_KEYGEN 129 -# define RSA_F_RSA_CHECK_KEY 123 -# define RSA_F_RSA_CHECK_KEY_EX 160 -# define RSA_F_RSA_CMS_DECRYPT 159 -# define RSA_F_RSA_CMS_VERIFY 158 -# define RSA_F_RSA_ITEM_VERIFY 148 -# define RSA_F_RSA_METH_DUP 161 -# define RSA_F_RSA_METH_NEW 162 -# define RSA_F_RSA_METH_SET1_NAME 163 -# define RSA_F_RSA_MGF1_TO_MD 157 -# define RSA_F_RSA_MULTIP_INFO_NEW 166 -# define RSA_F_RSA_NEW_METHOD 106 -# define RSA_F_RSA_NULL 124 -# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 -# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 -# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 -# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 -# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 101 -# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 -# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 -# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 -# define RSA_F_RSA_PADDING_ADD_NONE 107 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 154 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 -# define RSA_F_RSA_PADDING_ADD_SSLV23 110 -# define RSA_F_RSA_PADDING_ADD_X931 127 -# define RSA_F_RSA_PADDING_CHECK_NONE 111 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 153 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 -# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 -# define RSA_F_RSA_PADDING_CHECK_X931 128 -# define RSA_F_RSA_PARAM_DECODE 164 -# define RSA_F_RSA_PRINT 115 -# define RSA_F_RSA_PRINT_FP 116 -# define RSA_F_RSA_PRIV_DECODE 150 -# define RSA_F_RSA_PRIV_ENCODE 138 -# define RSA_F_RSA_PSS_GET_PARAM 151 -# define RSA_F_RSA_PSS_TO_CTX 155 -# define RSA_F_RSA_PUB_DECODE 139 -# define RSA_F_RSA_SETUP_BLINDING 136 -# define RSA_F_RSA_SIGN 117 -# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 -# define RSA_F_RSA_VERIFY 119 -# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 -# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 126 -# define RSA_F_SETUP_TBUF 167 /* * RSA reason codes. @@ -114,24 +45,30 @@ int ERR_load_RSA_strings(void); # define RSA_R_INVALID_DIGEST 157 # define RSA_R_INVALID_DIGEST_LENGTH 143 # define RSA_R_INVALID_HEADER 137 +# define RSA_R_INVALID_KEYPAIR 171 +# define RSA_R_INVALID_KEY_LENGTH 173 # define RSA_R_INVALID_LABEL 160 +# define RSA_R_INVALID_LENGTH 181 # define RSA_R_INVALID_MESSAGE_LENGTH 131 # define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_MODULUS 174 # define RSA_R_INVALID_MULTI_PRIME_KEY 167 # define RSA_R_INVALID_OAEP_PARAMETERS 161 # define RSA_R_INVALID_PADDING 138 # define RSA_R_INVALID_PADDING_MODE 141 # define RSA_R_INVALID_PSS_PARAMETERS 149 # define RSA_R_INVALID_PSS_SALTLEN 146 +# define RSA_R_INVALID_REQUEST 175 # define RSA_R_INVALID_SALT_LENGTH 150 +# define RSA_R_INVALID_STRENGTH 176 # define RSA_R_INVALID_TRAILER 139 # define RSA_R_INVALID_X931_DIGEST 142 # define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 # define RSA_R_KEY_PRIME_NUM_INVALID 165 # define RSA_R_KEY_SIZE_TOO_SMALL 120 # define RSA_R_LAST_OCTET_INVALID 134 -# define RSA_R_MISSING_PRIVATE_KEY 179 # define RSA_R_MGF1_DIGEST_NOT_ALLOWED 152 +# define RSA_R_MISSING_PRIVATE_KEY 179 # define RSA_R_MODULUS_TOO_LARGE 105 # define RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R 168 # define RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D 169 @@ -143,10 +80,13 @@ int ERR_load_RSA_strings(void); # define RSA_R_OAEP_DECODING_ERROR 121 # define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 # define RSA_R_PADDING_CHECK_FAILED 114 +# define RSA_R_PAIRWISE_TEST_FAILURE 177 # define RSA_R_PKCS_DECODING_ERROR 159 # define RSA_R_PSS_SALTLEN_TOO_SMALL 164 +# define RSA_R_PUB_EXPONENT_OUT_OF_RANGE 178 # define RSA_R_P_NOT_PRIME 128 # define RSA_R_Q_NOT_PRIME 129 +# define RSA_R_RANDOMNESS_SOURCE_STRENGTH_INSUFFICIENT 180 # define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 # define RSA_R_SLEN_CHECK_FAILED 136 # define RSA_R_SLEN_RECOVERY_FAILED 135 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h index 38b55789..0499700b 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h @@ -1,14 +1,25 @@ /* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/safestack.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SAFESTACK_H -# define HEADER_SAFESTACK_H + + +#ifndef OPENSSL_SAFESTACK_H +# define OPENSSL_SAFESTACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SAFESTACK_H +# endif # include # include @@ -19,6 +30,37 @@ extern "C" { # define STACK_OF(type) struct stack_st_##type +/* Helper macro for internal use */ +# define SKM_DEFINE_STACK_OF_INTERNAL(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ + { \ + return (const OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ + { \ + return (OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ + { \ + return (OPENSSL_sk_compfunc)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ + { \ + return (OPENSSL_sk_copyfunc)cpy; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ + { \ + return (OPENSSL_sk_freefunc)fr; \ + } + # define SKM_DEFINE_STACK_OF(t1, t2, t3) \ STACK_OF(t1); \ typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ @@ -101,6 +143,10 @@ extern "C" { { \ return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ } \ + static ossl_unused ossl_inline int sk_##t1##_find_all(STACK_OF(t1) *sk, t2 *ptr, int *pnum) \ + { \ + return OPENSSL_sk_find_all((OPENSSL_STACK *)sk, (const void *)ptr, pnum); \ + } \ static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ { \ OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ @@ -126,11 +172,11 @@ extern "C" { return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ } -# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) # define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) # define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ SKM_DEFINE_STACK_OF(t1, const t2, t2) -# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) /*- * Strings are special: normally an lhash entry will point to a single @@ -156,50 +202,94 @@ typedef const char *OPENSSL_CSTRING; * chars. So, we have to implement STRING specially for STACK_OF. This is * dealt with in the autogenerated macros below. */ -DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char) -DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_STRING, char, char) +#define sk_OPENSSL_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_value(sk, idx) ((char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_STRING_sk_type(sk), (idx))) +#define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_STRING_compfunc_type(cmp))) +#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_STRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_STRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_STRING_sk_type(sk), (n)) +#define sk_OPENSSL_STRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_delete(sk, i) ((char *)OPENSSL_sk_delete(ossl_check_OPENSSL_STRING_sk_type(sk), (i))) +#define sk_OPENSSL_STRING_delete_ptr(sk, ptr) ((char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr))) +#define sk_OPENSSL_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_pop(sk) ((char *)OPENSSL_sk_pop(ossl_check_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_shift(sk) ((char *)OPENSSL_sk_shift(ossl_check_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_STRING_sk_type(sk),ossl_check_OPENSSL_STRING_freefunc_type(freefunc)) +#define sk_OPENSSL_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), (idx)) +#define sk_OPENSSL_STRING_set(sk, idx, ptr) ((char *)OPENSSL_sk_set(ossl_check_OPENSSL_STRING_sk_type(sk), (idx), ossl_check_OPENSSL_STRING_type(ptr))) +#define sk_OPENSSL_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), pnum) +#define sk_OPENSSL_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_dup(sk) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_STRING_freefunc_type(freefunc))) +#define sk_OPENSSL_STRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_CSTRING, const char, char) +#define sk_OPENSSL_CSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_value(sk, idx) ((const char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), (idx))) +#define sk_OPENSSL_CSTRING_new(cmp) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp))) +#define sk_OPENSSL_CSTRING_new_null() ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_CSTRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_CSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_CSTRING_sk_type(sk), (n)) +#define sk_OPENSSL_CSTRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_delete(sk, i) ((const char *)OPENSSL_sk_delete(ossl_check_OPENSSL_CSTRING_sk_type(sk), (i))) +#define sk_OPENSSL_CSTRING_delete_ptr(sk, ptr) ((const char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr))) +#define sk_OPENSSL_CSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_pop(sk) ((const char *)OPENSSL_sk_pop(ossl_check_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_shift(sk) ((const char *)OPENSSL_sk_shift(ossl_check_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_CSTRING_sk_type(sk),ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc)) +#define sk_OPENSSL_CSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), (idx)) +#define sk_OPENSSL_CSTRING_set(sk, idx, ptr) ((const char *)OPENSSL_sk_set(ossl_check_OPENSSL_CSTRING_sk_type(sk), (idx), ossl_check_OPENSSL_CSTRING_type(ptr))) +#define sk_OPENSSL_CSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), pnum) +#define sk_OPENSSL_CSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_dup(sk) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc))) +#define sk_OPENSSL_CSTRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_CSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_compfunc_type(cmp))) + +#if !defined(OPENSSL_NO_DEPRECATED_3_0) /* - * Similarly, we sometimes use a block of characters, NOT nul-terminated. + * This is not used by OpenSSL. A block of bytes, NOT nul-terminated. * These should also be distinguished from "normal" stacks. */ typedef void *OPENSSL_BLOCK; -DEFINE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_BLOCK, void, void) +#define sk_OPENSSL_BLOCK_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), (idx))) +#define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp))) +#define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_BLOCK_new_reserve(cmp, n) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp), (n))) +#define sk_OPENSSL_BLOCK_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_BLOCK_sk_type(sk), (n)) +#define sk_OPENSSL_BLOCK_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_OPENSSL_BLOCK_sk_type(sk), (i))) +#define sk_OPENSSL_BLOCK_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr))) +#define sk_OPENSSL_BLOCK_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_BLOCK_sk_type(sk),ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc)) +#define sk_OPENSSL_BLOCK_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), (idx)) +#define sk_OPENSSL_BLOCK_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_OPENSSL_BLOCK_sk_type(sk), (idx), ossl_check_OPENSSL_BLOCK_type(ptr))) +#define sk_OPENSSL_BLOCK_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), pnum) +#define sk_OPENSSL_BLOCK_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_dup(sk) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_copyfunc_type(copyfunc), ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc))) +#define sk_OPENSSL_BLOCK_set_cmp_func(sk, cmp) ((sk_OPENSSL_BLOCK_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_compfunc_type(cmp))) -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_sk_num -# pragma weak OPENSSL_sk_value -# pragma weak OPENSSL_sk_new -# pragma weak OPENSSL_sk_new_null -# pragma weak OPENSSL_sk_new_reserve -# pragma weak OPENSSL_sk_reserve -# pragma weak OPENSSL_sk_free -# pragma weak OPENSSL_sk_zero -# pragma weak OPENSSL_sk_delete -# pragma weak OPENSSL_sk_delete_ptr -# pragma weak OPENSSL_sk_push -# pragma weak OPENSSL_sk_unshift -# pragma weak OPENSSL_sk_pop -# pragma weak OPENSSL_sk_shift -# pragma weak OPENSSL_sk_pop_free -# pragma weak OPENSSL_sk_insert -# pragma weak OPENSSL_sk_set -# pragma weak OPENSSL_sk_find -# pragma weak OPENSSL_sk_find_ex -# pragma weak OPENSSL_sk_sort -# pragma weak OPENSSL_sk_is_sorted -# pragma weak OPENSSL_sk_dup -# pragma weak OPENSSL_sk_deep_copy -# pragma weak OPENSSL_sk_set_cmp_func -# endif /* __SUNPRO_C */ +#endif # ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h.in new file mode 100644 index 00000000..6b366079 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h.in @@ -0,0 +1,227 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_string_macros + generate_stack_const_string_macros + generate_stack_block_macros); +-} + +#ifndef OPENSSL_SAFESTACK_H +# define OPENSSL_SAFESTACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SAFESTACK_H +# endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define STACK_OF(type) struct stack_st_##type + +/* Helper macro for internal use */ +# define SKM_DEFINE_STACK_OF_INTERNAL(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ + { \ + return (const OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ + { \ + return (OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ + { \ + return (OPENSSL_sk_compfunc)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ + { \ + return (OPENSSL_sk_copyfunc)cpy; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ + { \ + return (OPENSSL_sk_freefunc)fr; \ + } + +# define SKM_DEFINE_STACK_OF(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ + { \ + return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_reserve(sk_##t1##_compfunc compare, int n) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \ + { \ + return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_free((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ + { \ + return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \ + (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ + { \ + OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ + { \ + return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find_all(STACK_OF(t1) *sk, t2 *ptr, int *pnum) \ + { \ + return OPENSSL_sk_find_all((OPENSSL_STACK *)sk, (const void *)ptr, pnum); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) * sk_##t1##_dup(const STACK_OF(t1) *sk) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \ + sk_##t1##_copyfunc copyfunc, \ + sk_##t1##_freefunc freefunc) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, \ + (OPENSSL_sk_copyfunc)copyfunc, \ + (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \ + { \ + return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ + } + +# define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) +# define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ + SKM_DEFINE_STACK_OF(t1, const t2, t2) + +/*- + * Strings are special: normally an lhash entry will point to a single + * (somewhat) mutable object. In the case of strings: + * + * a) Instead of a single char, there is an array of chars, NUL-terminated. + * b) The string may have be immutable. + * + * So, they need their own declarations. Especially important for + * type-checking tools, such as Deputy. + * + * In practice, however, it appears to be hard to have a const + * string. For now, I'm settling for dealing with the fact it is a + * string at all. + */ +typedef char *OPENSSL_STRING; +typedef const char *OPENSSL_CSTRING; + +/*- + * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but + * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned + * above, instead of a single char each entry is a NUL-terminated array of + * chars. So, we have to implement STRING specially for STACK_OF. This is + * dealt with in the autogenerated macros below. + */ +{- + generate_stack_string_macros() + .generate_stack_const_string_macros(); +-} + +#if !defined(OPENSSL_NO_DEPRECATED_3_0) +/* + * This is not used by OpenSSL. A block of bytes, NOT nul-terminated. + * These should also be distinguished from "normal" stacks. + */ +typedef void *OPENSSL_BLOCK; +{- + generate_stack_block_macros(); +-} +#endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/seed.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/seed.h index de10b085..edb218ae 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/seed.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/seed.h @@ -1,7 +1,7 @@ /* - * Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -32,65 +32,82 @@ * SUCH DAMAGE. */ -#ifndef HEADER_SEED_H -# define HEADER_SEED_H +#ifndef OPENSSL_SEED_H +# define OPENSSL_SEED_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SEED_H +# endif # include # ifndef OPENSSL_NO_SEED -# include -# include +# include +# include +# include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif - -/* look whether we need 'long' to get 32 bits */ -# ifdef AES_LONG -# ifndef SEED_LONG -# define SEED_LONG 1 # endif -# endif -# include +# define SEED_BLOCK_SIZE 16 +# define SEED_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* look whether we need 'long' to get 32 bits */ +# ifdef AES_LONG +# ifndef SEED_LONG +# define SEED_LONG 1 +# endif +# endif -# define SEED_BLOCK_SIZE 16 -# define SEED_KEY_LENGTH 16 typedef struct seed_key_st { -# ifdef SEED_LONG +# ifdef SEED_LONG unsigned long data[32]; -# else +# else unsigned int data[32]; -# endif +# endif } SEED_KEY_SCHEDULE; - +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], SEED_KEY_SCHEDULE *ks); - +OSSL_DEPRECATEDIN_3_0 void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks); - -void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, +OSSL_DEPRECATEDIN_3_0 +void SEED_ecb_encrypt(const unsigned char *in, + unsigned char *out, const SEED_KEY_SCHEDULE *ks, int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int enc); + unsigned char ivec[SEED_BLOCK_SIZE], + int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num, - int enc); + unsigned char ivec[SEED_BLOCK_SIZE], + int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num); + unsigned char ivec[SEED_BLOCK_SIZE], + int *num); +# endif -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/self_test.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/self_test.h new file mode 100644 index 00000000..337a3190 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/self_test.h @@ -0,0 +1,94 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_SELF_TEST_H +# define OPENSSL_SELF_TEST_H +# pragma once + +# include /* OSSL_CALLBACK */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* The test event phases */ +# define OSSL_SELF_TEST_PHASE_NONE "None" +# define OSSL_SELF_TEST_PHASE_START "Start" +# define OSSL_SELF_TEST_PHASE_CORRUPT "Corrupt" +# define OSSL_SELF_TEST_PHASE_PASS "Pass" +# define OSSL_SELF_TEST_PHASE_FAIL "Fail" + +/* Test event categories */ +# define OSSL_SELF_TEST_TYPE_NONE "None" +# define OSSL_SELF_TEST_TYPE_MODULE_INTEGRITY "Module_Integrity" +# define OSSL_SELF_TEST_TYPE_INSTALL_INTEGRITY "Install_Integrity" +# define OSSL_SELF_TEST_TYPE_CRNG "Continuous_RNG_Test" +# define OSSL_SELF_TEST_TYPE_PCT "Conditional_PCT" +# define OSSL_SELF_TEST_TYPE_PCT_KAT "Conditional_KAT" +# define OSSL_SELF_TEST_TYPE_KAT_INTEGRITY "KAT_Integrity" +# define OSSL_SELF_TEST_TYPE_KAT_CIPHER "KAT_Cipher" +# define OSSL_SELF_TEST_TYPE_KAT_ASYM_CIPHER "KAT_AsymmetricCipher" +# define OSSL_SELF_TEST_TYPE_KAT_DIGEST "KAT_Digest" +# define OSSL_SELF_TEST_TYPE_KAT_SIGNATURE "KAT_Signature" +# define OSSL_SELF_TEST_TYPE_PCT_SIGNATURE "PCT_Signature" +# define OSSL_SELF_TEST_TYPE_KAT_KDF "KAT_KDF" +# define OSSL_SELF_TEST_TYPE_KAT_KA "KAT_KA" +# define OSSL_SELF_TEST_TYPE_DRBG "DRBG" + +/* Test event sub categories */ +# define OSSL_SELF_TEST_DESC_NONE "None" +# define OSSL_SELF_TEST_DESC_INTEGRITY_HMAC "HMAC" +# define OSSL_SELF_TEST_DESC_PCT_RSA_PKCS1 "RSA" +# define OSSL_SELF_TEST_DESC_PCT_ECDSA "ECDSA" +# define OSSL_SELF_TEST_DESC_PCT_DSA "DSA" +# define OSSL_SELF_TEST_DESC_CIPHER_AES_GCM "AES_GCM" +# define OSSL_SELF_TEST_DESC_CIPHER_AES_ECB "AES_ECB_Decrypt" +# define OSSL_SELF_TEST_DESC_CIPHER_TDES "TDES" +# define OSSL_SELF_TEST_DESC_ASYM_RSA_ENC "RSA_Encrypt" +# define OSSL_SELF_TEST_DESC_ASYM_RSA_DEC "RSA_Decrypt" +# define OSSL_SELF_TEST_DESC_MD_SHA1 "SHA1" +# define OSSL_SELF_TEST_DESC_MD_SHA2 "SHA2" +# define OSSL_SELF_TEST_DESC_MD_SHA3 "SHA3" +# define OSSL_SELF_TEST_DESC_SIGN_DSA "DSA" +# define OSSL_SELF_TEST_DESC_SIGN_RSA "RSA" +# define OSSL_SELF_TEST_DESC_SIGN_ECDSA "ECDSA" +# define OSSL_SELF_TEST_DESC_DRBG_CTR "CTR" +# define OSSL_SELF_TEST_DESC_DRBG_HASH "HASH" +# define OSSL_SELF_TEST_DESC_DRBG_HMAC "HMAC" +# define OSSL_SELF_TEST_DESC_KA_DH "DH" +# define OSSL_SELF_TEST_DESC_KA_ECDH "ECDH" +# define OSSL_SELF_TEST_DESC_KDF_HKDF "HKDF" +# define OSSL_SELF_TEST_DESC_KDF_SSKDF "SSKDF" +# define OSSL_SELF_TEST_DESC_KDF_X963KDF "X963KDF" +# define OSSL_SELF_TEST_DESC_KDF_X942KDF "X942KDF" +# define OSSL_SELF_TEST_DESC_KDF_PBKDF2 "PBKDF2" +# define OSSL_SELF_TEST_DESC_KDF_SSHKDF "SSHKDF" +# define OSSL_SELF_TEST_DESC_KDF_TLS12_PRF "TLS12_PRF" +# define OSSL_SELF_TEST_DESC_KDF_KBKDF "KBKDF" +# define OSSL_SELF_TEST_DESC_KDF_TLS13_EXTRACT "TLS13_KDF_EXTRACT" +# define OSSL_SELF_TEST_DESC_KDF_TLS13_EXPAND "TLS13_KDF_EXPAND" +# define OSSL_SELF_TEST_DESC_RNG "RNG" + +void OSSL_SELF_TEST_set_callback(OSSL_LIB_CTX *libctx, OSSL_CALLBACK *cb, + void *cbarg); +void OSSL_SELF_TEST_get_callback(OSSL_LIB_CTX *libctx, OSSL_CALLBACK **cb, + void **cbarg); + +OSSL_SELF_TEST *OSSL_SELF_TEST_new(OSSL_CALLBACK *cb, void *cbarg); +void OSSL_SELF_TEST_free(OSSL_SELF_TEST *st); + +void OSSL_SELF_TEST_onbegin(OSSL_SELF_TEST *st, const char *type, + const char *desc); +int OSSL_SELF_TEST_oncorrupt_byte(OSSL_SELF_TEST *st, unsigned char *bytes); +void OSSL_SELF_TEST_onend(OSSL_SELF_TEST *st, int ret); + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_SELF_TEST_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sha.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sha.h index 6a1eb0de..6e65a040 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sha.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sha.h @@ -1,35 +1,43 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SHA_H -# define HEADER_SHA_H +#ifndef OPENSSL_SHA_H +# define OPENSSL_SHA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SHA_H +# endif # include # include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif +# define SHA_DIGEST_LENGTH 20 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! SHA_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define SHA_LONG unsigned int +# define SHA_LONG unsigned int -# define SHA_LBLOCK 16 -# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ -# define SHA_LAST_BLOCK (SHA_CBLOCK-8) -# define SHA_DIGEST_LENGTH 20 +# define SHA_LBLOCK 16 +# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA_LAST_BLOCK (SHA_CBLOCK-8) typedef struct SHAstate_st { SHA_LONG h0, h1, h2, h3, h4; @@ -38,13 +46,16 @@ typedef struct SHAstate_st { unsigned int num; } SHA_CTX; -int SHA1_Init(SHA_CTX *c); -int SHA1_Update(SHA_CTX *c, const void *data, size_t len); -int SHA1_Final(unsigned char *md, SHA_CTX *c); -unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); -void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 int SHA1_Init(SHA_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA1_Update(SHA_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA1_Final(unsigned char *md, SHA_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +# endif -# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a +unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a * contiguous array of 32 bit wide * big-endian values. */ @@ -55,21 +66,27 @@ typedef struct SHA256state_st { unsigned int num, md_len; } SHA256_CTX; -int SHA224_Init(SHA256_CTX *c); -int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA224_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA224_Init(SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA224_Update(SHA256_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA224_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA256_Init(SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA256_Update(SHA256_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA256_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA256_Transform(SHA256_CTX *c, + const unsigned char *data); +# endif + unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); -int SHA256_Init(SHA256_CTX *c); -int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA256_Final(unsigned char *md, SHA256_CTX *c); unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); -void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); # define SHA224_DIGEST_LENGTH 28 # define SHA256_DIGEST_LENGTH 32 # define SHA384_DIGEST_LENGTH 48 # define SHA512_DIGEST_LENGTH 64 +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 * being exactly 64-bit wide. See Implementation Notes in sha512.c @@ -80,17 +97,14 @@ void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); * contiguous array of 64 bit * wide big-endian values. */ -# define SHA512_CBLOCK (SHA_LBLOCK*8) -# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) -# define SHA_LONG64 unsigned __int64 -# define U64(C) C##UI64 -# elif defined(__arch64__) -# define SHA_LONG64 unsigned long -# define U64(C) C##UL -# else -# define SHA_LONG64 unsigned long long -# define U64(C) C##ULL -# endif +# define SHA512_CBLOCK (SHA_LBLOCK*8) +# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +# define SHA_LONG64 unsigned __int64 +# elif defined(__arch64__) +# define SHA_LONG64 unsigned long +# else +# define SHA_LONG64 unsigned long long +# endif typedef struct SHA512state_st { SHA_LONG64 h[8]; @@ -102,18 +116,23 @@ typedef struct SHA512state_st { unsigned int num, md_len; } SHA512_CTX; -int SHA384_Init(SHA512_CTX *c); -int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA384_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA384_Init(SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA384_Update(SHA512_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA384_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA512_Init(SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA512_Update(SHA512_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA512_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA512_Transform(SHA512_CTX *c, + const unsigned char *data); +# endif + unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); -int SHA512_Init(SHA512_CTX *c); -int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA512_Final(unsigned char *md, SHA512_CTX *c); unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); -void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h index aaf13558..a48766c6 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h @@ -1,8 +1,11 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/srp.h.in + * + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2004, EdelKey Project. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,8 +14,16 @@ * for the EdelKey project. */ -#ifndef HEADER_SRP_H -# define HEADER_SRP_H + + +#ifndef OPENSSL_SRP_H +# define OPENSSL_SRP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SRP_H +# endif #include @@ -27,13 +38,40 @@ extern "C" { # endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 + typedef struct SRP_gN_cache_st { char *b64_bn; BIGNUM *bn; } SRP_gN_cache; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN_cache, SRP_gN_cache, SRP_gN_cache) +#define sk_SRP_gN_cache_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_value(sk, idx) ((SRP_gN_cache *)OPENSSL_sk_value(ossl_check_const_SRP_gN_cache_sk_type(sk), (idx))) +#define sk_SRP_gN_cache_new(cmp) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new(ossl_check_SRP_gN_cache_compfunc_type(cmp))) +#define sk_SRP_gN_cache_new_null() ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_null()) +#define sk_SRP_gN_cache_new_reserve(cmp, n) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_cache_compfunc_type(cmp), (n))) +#define sk_SRP_gN_cache_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_cache_sk_type(sk), (n)) +#define sk_SRP_gN_cache_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_delete(sk, i) ((SRP_gN_cache *)OPENSSL_sk_delete(ossl_check_SRP_gN_cache_sk_type(sk), (i))) +#define sk_SRP_gN_cache_delete_ptr(sk, ptr) ((SRP_gN_cache *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr))) +#define sk_SRP_gN_cache_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_pop(sk) ((SRP_gN_cache *)OPENSSL_sk_pop(ossl_check_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_shift(sk) ((SRP_gN_cache *)OPENSSL_sk_shift(ossl_check_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_cache_sk_type(sk),ossl_check_SRP_gN_cache_freefunc_type(freefunc)) +#define sk_SRP_gN_cache_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), (idx)) +#define sk_SRP_gN_cache_set(sk, idx, ptr) ((SRP_gN_cache *)OPENSSL_sk_set(ossl_check_SRP_gN_cache_sk_type(sk), (idx), ossl_check_SRP_gN_cache_type(ptr))) +#define sk_SRP_gN_cache_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), pnum) +#define sk_SRP_gN_cache_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_dup(sk) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_copyfunc_type(copyfunc), ossl_check_SRP_gN_cache_freefunc_type(freefunc))) +#define sk_SRP_gN_cache_set_cmp_func(sk, cmp) ((sk_SRP_gN_cache_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_compfunc_type(cmp))) -DEFINE_STACK_OF(SRP_gN_cache) typedef struct SRP_user_pwd_st { /* Owned by us. */ @@ -46,10 +84,47 @@ typedef struct SRP_user_pwd_st { /* Owned by us. */ char *info; } SRP_user_pwd; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_user_pwd, SRP_user_pwd, SRP_user_pwd) +#define sk_SRP_user_pwd_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_value(sk, idx) ((SRP_user_pwd *)OPENSSL_sk_value(ossl_check_const_SRP_user_pwd_sk_type(sk), (idx))) +#define sk_SRP_user_pwd_new(cmp) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new(ossl_check_SRP_user_pwd_compfunc_type(cmp))) +#define sk_SRP_user_pwd_new_null() ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_null()) +#define sk_SRP_user_pwd_new_reserve(cmp, n) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_reserve(ossl_check_SRP_user_pwd_compfunc_type(cmp), (n))) +#define sk_SRP_user_pwd_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_user_pwd_sk_type(sk), (n)) +#define sk_SRP_user_pwd_free(sk) OPENSSL_sk_free(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_delete(sk, i) ((SRP_user_pwd *)OPENSSL_sk_delete(ossl_check_SRP_user_pwd_sk_type(sk), (i))) +#define sk_SRP_user_pwd_delete_ptr(sk, ptr) ((SRP_user_pwd *)OPENSSL_sk_delete_ptr(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr))) +#define sk_SRP_user_pwd_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_pop(sk) ((SRP_user_pwd *)OPENSSL_sk_pop(ossl_check_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_shift(sk) ((SRP_user_pwd *)OPENSSL_sk_shift(ossl_check_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_user_pwd_sk_type(sk),ossl_check_SRP_user_pwd_freefunc_type(freefunc)) +#define sk_SRP_user_pwd_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), (idx)) +#define sk_SRP_user_pwd_set(sk, idx, ptr) ((SRP_user_pwd *)OPENSSL_sk_set(ossl_check_SRP_user_pwd_sk_type(sk), (idx), ossl_check_SRP_user_pwd_type(ptr))) +#define sk_SRP_user_pwd_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), pnum) +#define sk_SRP_user_pwd_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_dup(sk) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_dup(ossl_check_const_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_copyfunc_type(copyfunc), ossl_check_SRP_user_pwd_freefunc_type(freefunc))) +#define sk_SRP_user_pwd_set_cmp_func(sk, cmp) ((sk_SRP_user_pwd_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_compfunc_type(cmp))) + +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_user_pwd_new(void); +OSSL_DEPRECATEDIN_3_0 void SRP_user_pwd_free(SRP_user_pwd *user_pwd); -DEFINE_STACK_OF(SRP_user_pwd) +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_set_gN(SRP_user_pwd *user_pwd, const BIGNUM *g, + const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set1_ids(SRP_user_pwd *user_pwd, const char *id, + const char *info); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set0_sv(SRP_user_pwd *user_pwd, BIGNUM *s, BIGNUM *v); typedef struct SRP_VBASE_st { STACK_OF(SRP_user_pwd) *users_pwd; @@ -68,64 +143,139 @@ typedef struct SRP_gN_st { const BIGNUM *g; const BIGNUM *N; } SRP_gN; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN, SRP_gN, SRP_gN) +#define sk_SRP_gN_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_value(sk, idx) ((SRP_gN *)OPENSSL_sk_value(ossl_check_const_SRP_gN_sk_type(sk), (idx))) +#define sk_SRP_gN_new(cmp) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new(ossl_check_SRP_gN_compfunc_type(cmp))) +#define sk_SRP_gN_new_null() ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_null()) +#define sk_SRP_gN_new_reserve(cmp, n) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_compfunc_type(cmp), (n))) +#define sk_SRP_gN_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_sk_type(sk), (n)) +#define sk_SRP_gN_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_delete(sk, i) ((SRP_gN *)OPENSSL_sk_delete(ossl_check_SRP_gN_sk_type(sk), (i))) +#define sk_SRP_gN_delete_ptr(sk, ptr) ((SRP_gN *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr))) +#define sk_SRP_gN_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_pop(sk) ((SRP_gN *)OPENSSL_sk_pop(ossl_check_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_shift(sk) ((SRP_gN *)OPENSSL_sk_shift(ossl_check_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_sk_type(sk),ossl_check_SRP_gN_freefunc_type(freefunc)) +#define sk_SRP_gN_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), (idx)) +#define sk_SRP_gN_set(sk, idx, ptr) ((SRP_gN *)OPENSSL_sk_set(ossl_check_SRP_gN_sk_type(sk), (idx), ossl_check_SRP_gN_type(ptr))) +#define sk_SRP_gN_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), pnum) +#define sk_SRP_gN_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_dup(sk) ((STACK_OF(SRP_gN) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_sk_type(sk), ossl_check_SRP_gN_copyfunc_type(copyfunc), ossl_check_SRP_gN_freefunc_type(freefunc))) +#define sk_SRP_gN_set_cmp_func(sk, cmp) ((sk_SRP_gN_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_compfunc_type(cmp))) -DEFINE_STACK_OF(SRP_gN) + +OSSL_DEPRECATEDIN_3_0 SRP_VBASE *SRP_VBASE_new(char *seed_key); +OSSL_DEPRECATEDIN_3_0 void SRP_VBASE_free(SRP_VBASE *vb); +OSSL_DEPRECATEDIN_3_0 int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); -/* This method ignores the configured seed and fails for an unknown user. */ -DEPRECATEDIN_1_1_0(SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)) +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_add0_user(SRP_VBASE *vb, SRP_user_pwd *user_pwd); + /* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +OSSL_DEPRECATEDIN_3_0 SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier_ex(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 char *SRP_create_verifier(const char *user, const char *pass, char **salt, char **verifier, const char *N, const char *g); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN_ex(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g, OSSL_LIB_CTX *libctx, + const char *propq); +OSSL_DEPRECATEDIN_3_0 int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, const BIGNUM *N, const BIGNUM *g); -# define SRP_NO_ERROR 0 -# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 -# define SRP_ERR_VBASE_BN_LIB 2 -# define SRP_ERR_OPEN_FILE 3 -# define SRP_ERR_MEMORY 4 +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 -# define DB_srptype 0 -# define DB_srpverifier 1 -# define DB_srpsalt 2 -# define DB_srpid 3 -# define DB_srpgN 4 -# define DB_srpinfo 5 -# undef DB_NUMBER -# define DB_NUMBER 6 +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 -# define DB_SRP_INDEX 'I' -# define DB_SRP_VALID 'V' -# define DB_SRP_REVOKED 'R' -# define DB_SRP_MODIF 'v' +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' /* see srp.c */ +OSSL_DEPRECATEDIN_3_0 char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 SRP_gN *SRP_get_default_gN(const char *id); /* server side .... */ +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, const BIGNUM *b, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B_ex(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v, OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, const BIGNUM *v); + +OSSL_DEPRECATEDIN_3_0 int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u_ex(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); /* client side .... */ + +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x_ex(const BIGNUM *s, const char *user, const char *pass, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key_ex(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +OSSL_DEPRECATEDIN_3_0 int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); -# define SRP_MINIMAL_N 1024 +# define SRP_MINIMAL_N 1024 + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/* This method ignores the configured seed and fails for an unknown user. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 +SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h.in new file mode 100644 index 00000000..dfbe845b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h.in @@ -0,0 +1,214 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2004, EdelKey Project. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * Originally written by Christophe Renou and Peter Sylvester, + * for the EdelKey project. + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_SRP_H +# define OPENSSL_SRP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SRP_H +# endif + +#include + +#ifndef OPENSSL_NO_SRP +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +typedef struct SRP_gN_cache_st { + char *b64_bn; + BIGNUM *bn; +} SRP_gN_cache; +{- + generate_stack_macros("SRP_gN_cache"); +-} + + +typedef struct SRP_user_pwd_st { + /* Owned by us. */ + char *id; + BIGNUM *s; + BIGNUM *v; + /* Not owned by us. */ + const BIGNUM *g; + const BIGNUM *N; + /* Owned by us. */ + char *info; +} SRP_user_pwd; +{- + generate_stack_macros("SRP_user_pwd"); +-} + +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_user_pwd_new(void); +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_free(SRP_user_pwd *user_pwd); + +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_set_gN(SRP_user_pwd *user_pwd, const BIGNUM *g, + const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set1_ids(SRP_user_pwd *user_pwd, const char *id, + const char *info); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set0_sv(SRP_user_pwd *user_pwd, BIGNUM *s, BIGNUM *v); + +typedef struct SRP_VBASE_st { + STACK_OF(SRP_user_pwd) *users_pwd; + STACK_OF(SRP_gN_cache) *gN_cache; +/* to simulate a user */ + char *seed_key; + const BIGNUM *default_g; + const BIGNUM *default_N; +} SRP_VBASE; + +/* + * Internal structure storing N and g pair + */ +typedef struct SRP_gN_st { + char *id; + const BIGNUM *g; + const BIGNUM *N; +} SRP_gN; +{- + generate_stack_macros("SRP_gN"); +-} + + +OSSL_DEPRECATEDIN_3_0 +SRP_VBASE *SRP_VBASE_new(char *seed_key); +OSSL_DEPRECATEDIN_3_0 +void SRP_VBASE_free(SRP_VBASE *vb); +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); + +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_add0_user(SRP_VBASE *vb, SRP_user_pwd *user_pwd); + +/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); + +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier_ex(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN_ex(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g, OSSL_LIB_CTX *libctx, + const char *propq); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g); + +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 + +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 + +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' + +/* see srp.c */ +OSSL_DEPRECATEDIN_3_0 +char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +SRP_gN *SRP_get_default_gN(const char *id); + +/* server side .... */ +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, + const BIGNUM *b, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B_ex(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v, OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v); + +OSSL_DEPRECATEDIN_3_0 +int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u_ex(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); + +/* client side .... */ + +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x_ex(const BIGNUM *s, const char *user, const char *pass, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key_ex(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +OSSL_DEPRECATEDIN_3_0 +int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); + +# define SRP_MINIMAL_N 1024 + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/* This method ignores the configured seed and fails for an unknown user. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 +SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srtp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srtp.h index 0b57c235..d64606e5 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srtp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srtp.h @@ -1,7 +1,7 @@ /* * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -13,8 +13,14 @@ * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. */ -#ifndef HEADER_D1_SRTP_H -# define HEADER_D1_SRTP_H +#ifndef OPENSSL_SRTP_H +# define OPENSSL_SRTP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_D1_SRTP_H +# endif # include diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h index 9af0c899..942f20e6 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h @@ -1,22 +1,33 @@ /* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ssl.h.in + * * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL_H -# define HEADER_SSL_H + + +#ifndef OPENSSL_SSL_H +# define OPENSSL_SSL_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL_H +# endif # include # include # include # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # include # include @@ -30,6 +41,10 @@ # include # include # include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -47,7 +62,7 @@ extern "C" { # define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) # define SSL_MAX_KEY_ARG_LENGTH 8 -# define SSL_MAX_MASTER_KEY_LENGTH 48 +/* SSL_MAX_MASTER_KEY_LENGTH is defined in prov_ssl.h */ /* The maximum number of encrypt/decrypt pipelines we can support */ # define SSL_MAX_PIPELINES 32 @@ -81,6 +96,7 @@ extern "C" { # define SSL_TXT_kECDHEPSK "kECDHEPSK" # define SSL_TXT_kDHEPSK "kDHEPSK" # define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kGOST18 "kGOST18" # define SSL_TXT_kSRP "kSRP" # define SSL_TXT_aRSA "aRSA" @@ -130,6 +146,8 @@ extern "C" { # define SSL_TXT_ARIA_GCM "ARIAGCM" # define SSL_TXT_ARIA128 "ARIA128" # define SSL_TXT_ARIA256 "ARIA256" +# define SSL_TXT_GOST2012_GOST8912_GOST8912 "GOST2012-GOST8912-GOST8912" +# define SSL_TXT_CBC "CBC" # define SSL_TXT_MD5 "MD5" # define SSL_TXT_SHA1 "SHA1" @@ -169,17 +187,20 @@ extern "C" { * The following cipher list is used by default. It also is substituted when * an application-defined cipher list string starts with 'DEFAULT'. * This applies to ciphersuites for TLSv1.2 and below. + * DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list() + * Update both macro and function simultaneously + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* + * This is the default set of TLSv1.3 ciphersuites + * DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites() + * Update both macro and function simultaneously */ -# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" -/* This is the default set of TLSv1.3 ciphersuites */ -# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) # define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ "TLS_CHACHA20_POLY1305_SHA256:" \ "TLS_AES_128_GCM_SHA256" -# else -# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ - "TLS_AES_128_GCM_SHA256" -#endif +# endif /* * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always * starts with a reasonable order, and all we have to do for DEFAULT is @@ -223,8 +244,34 @@ typedef struct srtp_protection_profile_st { const char *name; unsigned long id; } SRTP_PROTECTION_PROFILE; +SKM_DEFINE_STACK_OF_INTERNAL(SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE) +#define sk_SRTP_PROTECTION_PROFILE_num(sk) OPENSSL_sk_num(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_value(sk, idx) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_value(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx))) +#define sk_SRTP_PROTECTION_PROFILE_new(cmp) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp))) +#define sk_SRTP_PROTECTION_PROFILE_new_null() ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_null()) +#define sk_SRTP_PROTECTION_PROFILE_new_reserve(cmp, n) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_reserve(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp), (n))) +#define sk_SRTP_PROTECTION_PROFILE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (n)) +#define sk_SRTP_PROTECTION_PROFILE_free(sk) OPENSSL_sk_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_zero(sk) OPENSSL_sk_zero(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_delete(sk, i) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (i))) +#define sk_SRTP_PROTECTION_PROFILE_delete_ptr(sk, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete_ptr(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))) +#define sk_SRTP_PROTECTION_PROFILE_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_pop(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_pop(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_shift(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_shift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk),ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc)) +#define sk_SRTP_PROTECTION_PROFILE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), (idx)) +#define sk_SRTP_PROTECTION_PROFILE_set(sk, idx, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_set(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))) +#define sk_SRTP_PROTECTION_PROFILE_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), pnum) +#define sk_SRTP_PROTECTION_PROFILE_sort(sk) OPENSSL_sk_sort(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_dup(sk) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_dup(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_deep_copy(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_copyfunc_type(copyfunc), ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc))) +#define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(sk, cmp) ((sk_SRTP_PROTECTION_PROFILE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp))) + -DEFINE_STACK_OF(SRTP_PROTECTION_PROFILE) typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, int len, void *arg); @@ -293,161 +340,134 @@ typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, /* Typedef for verification callback */ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); -/* - * Some values are reserved until OpenSSL 1.2.0 because they were previously - * included in SSL_OP_ALL in a 1.1.x release. - * - * Reserved value (until OpenSSL 1.2.0) 0x00000001U - * Reserved value (until OpenSSL 1.2.0) 0x00000002U - */ -/* Allow initial connection to servers that don't support RI */ -# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U +/* Typedef for SSL async callback */ +typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); -/* Reserved value (until OpenSSL 1.2.0) 0x00000008U */ -# define SSL_OP_TLSEXT_PADDING 0x00000010U -/* Reserved value (until OpenSSL 1.2.0) 0x00000020U */ -# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U -/* - * Reserved value (until OpenSSL 1.2.0) 0x00000080U - * Reserved value (until OpenSSL 1.2.0) 0x00000100U - * Reserved value (until OpenSSL 1.2.0) 0x00000200U - */ - -/* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ -# define SSL_OP_ALLOW_NO_DHE_KEX 0x00000400U +#define SSL_OP_BIT(n) ((uint64_t)1 << (uint64_t)n) /* - * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in - * OpenSSL 0.9.6d. Usually (depending on the application protocol) the - * workaround is not needed. Unfortunately some broken SSL/TLS - * implementations cannot handle it at all, which is why we include it in - * SSL_OP_ALL. Added in 0.9.6e + * SSL/TLS connection options. */ -# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800U - -/* DTLS options */ -# define SSL_OP_NO_QUERY_MTU 0x00001000U -/* Turn on Cookie Exchange (on relevant for servers) */ -# define SSL_OP_COOKIE_EXCHANGE 0x00002000U -/* Don't use RFC4507 ticket extension */ -# define SSL_OP_NO_TICKET 0x00004000U + /* Disable Extended master secret */ +# define SSL_OP_NO_EXTENDED_MASTER_SECRET SSL_OP_BIT(0) + /* Cleanse plaintext copies of data delivered to the application */ +# define SSL_OP_CLEANSE_PLAINTEXT SSL_OP_BIT(1) + /* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT SSL_OP_BIT(2) + /* Enable support for Kernel TLS */ +# define SSL_OP_ENABLE_KTLS SSL_OP_BIT(3) +# define SSL_OP_TLSEXT_PADDING SSL_OP_BIT(4) +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG SSL_OP_BIT(6) +# define SSL_OP_IGNORE_UNEXPECTED_EOF SSL_OP_BIT(7) +# define SSL_OP_ALLOW_CLIENT_RENEGOTIATION SSL_OP_BIT(8) +# define SSL_OP_DISABLE_TLSEXT_CA_NAMES SSL_OP_BIT(9) + /* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX SSL_OP_BIT(10) + /* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added + * in OpenSSL 0.9.6d. Usually (depending on the application protocol) + * the workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it + * in SSL_OP_ALL. Added in 0.9.6e + */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS SSL_OP_BIT(11) + /* DTLS options */ +# define SSL_OP_NO_QUERY_MTU SSL_OP_BIT(12) + /* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE SSL_OP_BIT(13) + /* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET SSL_OP_BIT(14) # ifndef OPENSSL_NO_DTLS1_METHOD -/* Use Cisco's "speshul" version of DTLS_BAD_VER - * (only with deprecated DTLSv1_client_method()) */ -# define SSL_OP_CISCO_ANYCONNECT 0x00008000U + /* + * Use Cisco's version identifier of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) + */ +# define SSL_OP_CISCO_ANYCONNECT SSL_OP_BIT(15) # endif - -/* As server, disallow session resumption on renegotiation */ -# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000U -/* Don't use compression even if supported */ -# define SSL_OP_NO_COMPRESSION 0x00020000U -/* Permit unsafe legacy renegotiation */ -# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U -/* Disable encrypt-then-mac */ -# define SSL_OP_NO_ENCRYPT_THEN_MAC 0x00080000U + /* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_BIT(16) + /* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION SSL_OP_BIT(17) + /* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_BIT(18) + /* Disable encrypt-then-mac */ +# define SSL_OP_NO_ENCRYPT_THEN_MAC SSL_OP_BIT(19) + /* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future + * version of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT SSL_OP_BIT(20) + /* + * Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE + */ +# define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21) + /* + * Set on servers to choose the cipher according to server's preferences. + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_BIT(22) + /* + * If set, a server will allow a client to issue a SSLv3.0 version + * number as latest version supported in the premaster secret, even when + * TLSv1.0 (version 3.1) was announced in the client hello. Normally + * this is forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG SSL_OP_BIT(23) + /* + * Switches off automatic TLSv1.3 anti-replay protection for early data. + * This is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY SSL_OP_BIT(24) +# define SSL_OP_NO_SSLv3 SSL_OP_BIT(25) +# define SSL_OP_NO_TLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_TLSv1_2 SSL_OP_BIT(27) +# define SSL_OP_NO_TLSv1_1 SSL_OP_BIT(28) +# define SSL_OP_NO_TLSv1_3 SSL_OP_BIT(29) +# define SSL_OP_NO_DTLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_DTLSv1_2 SSL_OP_BIT(27) + /* Disallow all renegotiation */ +# define SSL_OP_NO_RENEGOTIATION SSL_OP_BIT(30) + /* + * Make server add server-hello extension from early version of + * cryptopro draft, when GOST ciphersuite is negotiated. Required for + * interoperability with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG SSL_OP_BIT(31) /* - * Enable TLSv1.3 Compatibility mode. This is on by default. A future version - * of OpenSSL may have this disabled by default. + * Option "collections." */ -# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT 0x00100000U +# define SSL_OP_NO_SSL_MASK \ + ( SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 \ + | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 ) +# define SSL_OP_NO_DTLS_MASK \ + ( SSL_OP_NO_DTLSv1 | SSL_OP_NO_DTLSv1_2 ) -/* Prioritize Chacha20Poly1305 when client does. - * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE */ -# define SSL_OP_PRIORITIZE_CHACHA 0x00200000U +/* Various bug workarounds that should be rather harmless. */ +# define SSL_OP_ALL \ + ( SSL_OP_CRYPTOPRO_TLSEXT_BUG | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS \ + | SSL_OP_TLSEXT_PADDING | SSL_OP_SAFARI_ECDHE_ECDSA_BUG ) /* - * Set on servers to choose the cipher according to the server's preferences + * OBSOLETE OPTIONS retained for compatibility */ -# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000U -/* - * If set, a server will allow a client to issue a SSLv3.0 version number as - * latest version supported in the premaster secret, even when TLSv1.0 - * (version 3.1) was announced in the client hello. Normally this is - * forbidden to prevent version rollback attacks. - */ -# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000U -/* - * Switches off automatic TLSv1.3 anti-replay protection for early data. This - * is a server-side option only (no effect on the client). - */ -# define SSL_OP_NO_ANTI_REPLAY 0x01000000U - -# define SSL_OP_NO_SSLv3 0x02000000U -# define SSL_OP_NO_TLSv1 0x04000000U -# define SSL_OP_NO_TLSv1_2 0x08000000U -# define SSL_OP_NO_TLSv1_1 0x10000000U -# define SSL_OP_NO_TLSv1_3 0x20000000U - -# define SSL_OP_NO_DTLSv1 0x04000000U -# define SSL_OP_NO_DTLSv1_2 0x08000000U - -# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\ - SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2|SSL_OP_NO_TLSv1_3) -# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2) - -/* Disallow all renegotiation */ -# define SSL_OP_NO_RENEGOTIATION 0x40000000U - -/* - * Make server add server-hello extension from early version of cryptopro - * draft, when GOST ciphersuite is negotiated. Required for interoperability - * with CryptoPro CSP 3.x - */ -# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000U - -/* - * SSL_OP_ALL: various bug workarounds that should be rather harmless. - * This used to be 0x000FFFFFL before 0.9.7. - * This used to be 0x80000BFFU before 1.1.1. - */ -# define SSL_OP_ALL (SSL_OP_CRYPTOPRO_TLSEXT_BUG|\ - SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS|\ - SSL_OP_LEGACY_SERVER_CONNECT|\ - SSL_OP_TLSEXT_PADDING|\ - SSL_OP_SAFARI_ECDHE_ECDSA_BUG) - -/* OBSOLETE OPTIONS: retained for compatibility */ - -/* Removed from OpenSSL 1.1.0. Was 0x00000001L */ -/* Related to removed SSLv2. */ # define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000002L */ -/* Related to removed SSLv2. */ # define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 -/* Removed from OpenSSL 0.9.8q and 1.0.0c. Was 0x00000008L */ -/* Dead forever, see CVE-2010-4180 */ # define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 -/* Removed from OpenSSL 1.0.1h and 1.0.2. Was 0x00000010L */ -/* Refers to ancient SSLREF and SSLv2. */ # define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000020 */ # define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 -/* Removed from OpenSSL 0.9.7h and 0.9.8b. Was 0x00000040L */ # define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000080 */ -/* Ancient SSLeay version. */ # define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000100L */ # define SSL_OP_TLS_D5_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000200L */ # define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00080000L */ # define SSL_OP_SINGLE_ECDH_USE 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00100000L */ # define SSL_OP_SINGLE_DH_USE 0x0 -/* Removed from OpenSSL 1.0.1k and 1.0.2. Was 0x00200000L */ # define SSL_OP_EPHEMERAL_RSA 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x01000000L */ # define SSL_OP_NO_SSLv2 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x08000000L */ # define SSL_OP_PKCS1_CHECK_1 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x10000000L */ # define SSL_OP_PKCS1_CHECK_2 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x20000000L */ # define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x40000000L */ # define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 /* @@ -571,6 +591,7 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); # define SSL_CONF_TYPE_FILE 0x2 # define SSL_CONF_TYPE_DIR 0x3 # define SSL_CONF_TYPE_NONE 0x4 +# define SSL_CONF_TYPE_STORE 0x5 /* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ # define SSL_COOKIE_LENGTH 4096 @@ -580,12 +601,12 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); * cannot be used to clear bits. */ -unsigned long SSL_CTX_get_options(const SSL_CTX *ctx); -unsigned long SSL_get_options(const SSL *s); -unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_clear_options(SSL *s, unsigned long op); -unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_set_options(SSL *s, unsigned long op); +uint64_t SSL_CTX_get_options(const SSL_CTX *ctx); +uint64_t SSL_get_options(const SSL *s); +uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_clear_options(SSL *s, uint64_t op); +uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_set_options(SSL *s, uint64_t op); # define SSL_CTX_set_mode(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) @@ -609,11 +630,6 @@ unsigned long SSL_set_options(SSL *s, unsigned long op); # define SSL_get_secure_renegotiation_support(ssl) \ SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_heartbeat(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT,0,NULL) -# endif - # define SSL_CTX_set_cert_flags(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) # define SSL_set_cert_flags(s,op) \ @@ -638,19 +654,20 @@ void SSL_set_msg_callback(SSL *ssl, SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) # ifndef OPENSSL_NO_SRP - /* see tls_srp.c */ -__owur int SSL_SRP_CTX_init(SSL *s); -__owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); -int SSL_SRP_CTX_free(SSL *ctx); -int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); -__owur int SSL_srp_server_param_with_username(SSL *s, int *ad); -__owur int SRP_Calc_A_param(SSL *s); - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_SRP_CTX_init(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_SRP_CTX_free(SSL *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_srp_server_param_with_username(SSL *s, + int *ad); +OSSL_DEPRECATEDIN_3_0 __owur int SRP_Calc_A_param(SSL *s); +# endif # endif /* 100k max cert list */ -# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 +# define SSL_MAX_CERT_LIST_DEFAULT (1024*100) # define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) @@ -679,6 +696,7 @@ typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, # define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 # define SSL_SESS_CACHE_NO_INTERNAL \ (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) +# define SSL_SESS_CACHE_UPDATE_TIME 0x0400 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); # define SSL_CTX_sess_number(ctx) \ @@ -818,8 +836,8 @@ void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, * the maximum length of the buffer given to callbacks containing the * resulting identity/psk */ -# define PSK_MAX_IDENTITY_LEN 128 -# define PSK_MAX_PSK_LEN 256 +# define PSK_MAX_IDENTITY_LEN 256 +# define PSK_MAX_PSK_LEN 512 typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, const char *hint, char *identity, @@ -896,18 +914,22 @@ __owur int SSL_extension_supported(unsigned int ext_type); # define SSL_ASYNC_PAUSED 5 # define SSL_ASYNC_NO_JOBS 6 # define SSL_CLIENT_HELLO_CB 7 +# define SSL_RETRY_VERIFY 8 /* These will only be used when doing non-blocking IO */ # define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) # define SSL_want_read(s) (SSL_want(s) == SSL_READING) # define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) # define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) +# define SSL_want_retry_verify(s) (SSL_want(s) == SSL_RETRY_VERIFY) # define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) # define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) # define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) # define SSL_MAC_FLAG_READ_MAC_STREAM 1 # define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 +# define SSL_MAC_FLAG_READ_MAC_TLSTREE 4 +# define SSL_MAC_FLAG_WRITE_MAC_TLSTREE 8 /* * A callback for logging out TLS key material. This callback should log out @@ -955,8 +977,59 @@ extern "C" { * These need to be after the above set of includes due to a compiler bug * in VisualStudio 2015 */ -DEFINE_STACK_OF_CONST(SSL_CIPHER) -DEFINE_STACK_OF(SSL_COMP) +SKM_DEFINE_STACK_OF_INTERNAL(SSL_CIPHER, const SSL_CIPHER, SSL_CIPHER) +#define sk_SSL_CIPHER_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_value(sk, idx) ((const SSL_CIPHER *)OPENSSL_sk_value(ossl_check_const_SSL_CIPHER_sk_type(sk), (idx))) +#define sk_SSL_CIPHER_new(cmp) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new(ossl_check_SSL_CIPHER_compfunc_type(cmp))) +#define sk_SSL_CIPHER_new_null() ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_null()) +#define sk_SSL_CIPHER_new_reserve(cmp, n) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_reserve(ossl_check_SSL_CIPHER_compfunc_type(cmp), (n))) +#define sk_SSL_CIPHER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_CIPHER_sk_type(sk), (n)) +#define sk_SSL_CIPHER_free(sk) OPENSSL_sk_free(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_delete(sk, i) ((const SSL_CIPHER *)OPENSSL_sk_delete(ossl_check_SSL_CIPHER_sk_type(sk), (i))) +#define sk_SSL_CIPHER_delete_ptr(sk, ptr) ((const SSL_CIPHER *)OPENSSL_sk_delete_ptr(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))) +#define sk_SSL_CIPHER_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_pop(sk) ((const SSL_CIPHER *)OPENSSL_sk_pop(ossl_check_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_shift(sk) ((const SSL_CIPHER *)OPENSSL_sk_shift(ossl_check_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_CIPHER_sk_type(sk),ossl_check_SSL_CIPHER_freefunc_type(freefunc)) +#define sk_SSL_CIPHER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), (idx)) +#define sk_SSL_CIPHER_set(sk, idx, ptr) ((const SSL_CIPHER *)OPENSSL_sk_set(ossl_check_SSL_CIPHER_sk_type(sk), (idx), ossl_check_SSL_CIPHER_type(ptr))) +#define sk_SSL_CIPHER_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), pnum) +#define sk_SSL_CIPHER_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_dup(sk) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_dup(ossl_check_const_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_copyfunc_type(copyfunc), ossl_check_SSL_CIPHER_freefunc_type(freefunc))) +#define sk_SSL_CIPHER_set_cmp_func(sk, cmp) ((sk_SSL_CIPHER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(SSL_COMP, SSL_COMP, SSL_COMP) +#define sk_SSL_COMP_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_value(sk, idx) ((SSL_COMP *)OPENSSL_sk_value(ossl_check_const_SSL_COMP_sk_type(sk), (idx))) +#define sk_SSL_COMP_new(cmp) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new(ossl_check_SSL_COMP_compfunc_type(cmp))) +#define sk_SSL_COMP_new_null() ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_null()) +#define sk_SSL_COMP_new_reserve(cmp, n) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_reserve(ossl_check_SSL_COMP_compfunc_type(cmp), (n))) +#define sk_SSL_COMP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_COMP_sk_type(sk), (n)) +#define sk_SSL_COMP_free(sk) OPENSSL_sk_free(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_delete(sk, i) ((SSL_COMP *)OPENSSL_sk_delete(ossl_check_SSL_COMP_sk_type(sk), (i))) +#define sk_SSL_COMP_delete_ptr(sk, ptr) ((SSL_COMP *)OPENSSL_sk_delete_ptr(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))) +#define sk_SSL_COMP_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_pop(sk) ((SSL_COMP *)OPENSSL_sk_pop(ossl_check_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_shift(sk) ((SSL_COMP *)OPENSSL_sk_shift(ossl_check_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_COMP_sk_type(sk),ossl_check_SSL_COMP_freefunc_type(freefunc)) +#define sk_SSL_COMP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), (idx)) +#define sk_SSL_COMP_set(sk, idx, ptr) ((SSL_COMP *)OPENSSL_sk_set(ossl_check_SSL_COMP_sk_type(sk), (idx), ossl_check_SSL_COMP_type(ptr))) +#define sk_SSL_COMP_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), pnum) +#define sk_SSL_COMP_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_dup(sk) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_dup(ossl_check_const_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_copyfunc_type(copyfunc), ossl_check_SSL_COMP_freefunc_type(freefunc))) +#define sk_SSL_COMP_set_cmp_func(sk, cmp) ((sk_SSL_COMP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_compfunc_type(cmp))) + /* compatibility */ # define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) @@ -967,7 +1040,9 @@ DEFINE_STACK_OF(SSL_COMP) # define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) # define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ (char *)(arg))) -DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void SSL_set_debug(SSL *s, int debug); +# endif /* TLSv1.3 KeyUpdate message types */ /* -1 used so that this is an invalid value for the on-the-wire protocol */ @@ -1102,7 +1177,7 @@ size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); # define SSL_VERIFY_CLIENT_ONCE 0x04 # define SSL_VERIFY_POST_HANDSHAKE 0x08 -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OpenSSL_add_ssl_algorithms() SSL_library_init() # define SSLeay_add_ssl_algorithms() SSL_library_init() # endif @@ -1190,9 +1265,14 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_ERROR_WANT_ASYNC 9 # define SSL_ERROR_WANT_ASYNC_JOB 10 # define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 -# define SSL_CTRL_SET_TMP_DH 3 -# define SSL_CTRL_SET_TMP_ECDH 4 -# define SSL_CTRL_SET_TMP_DH_CB 6 +# define SSL_ERROR_WANT_RETRY_VERIFY 12 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# endif + # define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 # define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 # define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 @@ -1246,7 +1326,9 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 # define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# endif # define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 # define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 # define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 @@ -1254,11 +1336,6 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 # define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 # define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT 85 -# define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING 86 -# define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS 87 -# endif # define DTLS_CTRL_GET_TIMEOUT 73 # define DTLS_CTRL_HANDLE_TIMEOUT 74 # define SSL_CTRL_GET_RI_SUPPORT 76 @@ -1305,6 +1382,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_GET_MAX_PROTO_VERSION 131 # define SSL_CTRL_GET_SIGNATURE_NID 132 # define SSL_CTRL_GET_TMP_KEY 133 +# define SSL_CTRL_GET_NEGOTIATED_GROUP 134 +# define SSL_CTRL_SET_RETRY_VERIFY 136 # define SSL_CTRL_GET_VERIFY_CERT_STORE 137 # define SSL_CTRL_GET_CHAIN_CERT_STORE 138 # define SSL_CERT_SET_FIRST 1 @@ -1320,18 +1399,24 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) # define SSL_total_renegotiations(ssl) \ SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) -# define SSL_CTX_set_tmp_dh(ctx,dh) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_dh(ctx,dh) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif # define SSL_CTX_set_dh_auto(ctx, onoff) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) # define SSL_set_dh_auto(s, onoff) \ SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) -# define SSL_set_tmp_dh(ssl,dh) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_set_tmp_dh(ssl,dh) \ SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_set_tmp_ecdh(ssl,ecdh) \ +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif # define SSL_CTX_add_extra_chain_cert(ctx,x509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) # define SSL_CTX_get_extra_chain_certs(ctx,px509) \ @@ -1400,6 +1485,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) #define SSL_get0_chain_cert_store(s,st) \ SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) + # define SSL_get1_groups(s, glist) \ SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) # define SSL_CTX_set1_groups(ctx, glist, glistlen) \ @@ -1412,6 +1498,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) # define SSL_get_shared_group(s, n) \ SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) +# define SSL_get_negotiated_group(s) \ + SSL_ctrl(s,SSL_CTRL_GET_NEGOTIATED_GROUP,0,NULL) # define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) # define SSL_CTX_set1_sigalgs_list(ctx, s) \ @@ -1464,12 +1552,17 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_group_to_name(SSL *s, int id); + /* Backwards compatibility, original 1.1.0 names */ # define SSL_CTRL_GET_SERVER_TMP_KEY \ SSL_CTRL_GET_PEER_TMP_KEY # define SSL_get_server_tmp_key(s, pk) \ SSL_get_peer_tmp_key(s, pk) +int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey); +int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey); + /* * The following symbol names are old and obsolete. They are kept * for compatibility reasons only and should not be used anymore. @@ -1487,7 +1580,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_shared_curve SSL_get_shared_group -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* Provide some compatibility macros for removed functionality. */ # define SSL_CTX_need_tmp_RSA(ctx) 0 # define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 @@ -1511,6 +1604,8 @@ void BIO_ssl_shutdown(BIO *ssl_bio); __owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); __owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +__owur SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq, + const SSL_METHOD *meth); int SSL_CTX_up_ref(SSL_CTX *ctx); void SSL_CTX_free(SSL_CTX *); __owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); @@ -1565,10 +1660,11 @@ __owur SSL_verify_cb SSL_get_verify_callback(const SSL *s); void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); void SSL_set_verify_depth(SSL *s, int depth); void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); -# ifndef OPENSSL_NO_RSA -__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); -__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, - long len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, + const unsigned char *d, long len); # endif __owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); __owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, @@ -1591,14 +1687,16 @@ __owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, size_t serverinfo_length); __owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); -#ifndef OPENSSL_NO_RSA +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); #endif __owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); __owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); -#ifndef OPENSSL_NO_RSA +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); #endif @@ -1610,12 +1708,17 @@ __owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, __owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); __owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); __owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur STACK_OF(X509_NAME) +*SSL_load_client_CA_file_ex(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); __owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *file); int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *dir); +int SSL_add_store_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *uri); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_load_error_strings() \ OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) @@ -1659,7 +1762,7 @@ __owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, __owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); __owur SSL_SESSION *SSL_SESSION_new(void); -__owur SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src); +__owur SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src); const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len); const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, @@ -1672,7 +1775,7 @@ int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); int SSL_SESSION_up_ref(SSL_SESSION *ses); void SSL_SESSION_free(SSL_SESSION *ses); -__owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); +__owur int i2d_SSL_SESSION(const SSL_SESSION *in, unsigned char **pp); __owur int SSL_set_session(SSL *to, SSL_SESSION *session); int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); @@ -1684,8 +1787,13 @@ __owur int SSL_has_matching_session_id(const SSL *s, SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length); -# ifdef HEADER_X509_H -__owur X509 *SSL_get_peer_certificate(const SSL *s); +# ifdef OPENSSL_X509_H +__owur X509 *SSL_get0_peer_certificate(const SSL *s); +__owur X509 *SSL_get1_peer_certificate(const SSL *s); +/* Deprecated in 3.0.0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_get_peer_certificate SSL_get1_peer_certificate +# endif # endif __owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); @@ -1700,8 +1808,10 @@ void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, void *arg); void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg); -# ifndef OPENSSL_NO_RSA +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len); # endif @@ -1751,10 +1861,10 @@ __owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, uint8_t mtype, uint8_t ord); __owur int SSL_dane_enable(SSL *s, const char *basedomain); __owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, - uint8_t mtype, unsigned const char *data, size_t dlen); + uint8_t mtype, const unsigned char *data, size_t dlen); __owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); __owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, - uint8_t *mtype, unsigned const char **data, + uint8_t *mtype, const unsigned char **data, size_t *dlen); /* * Bridge opacity barrier between libcrypt and libssl, also needed to support @@ -1776,27 +1886,34 @@ __owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); __owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); # ifndef OPENSSL_NO_SRP -int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); -int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); -int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, char *(*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, int (*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, int (*cb) (SSL *, int *, void *)); -int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); +OSSL_DEPRECATEDIN_3_0 int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, BIGNUM *sa, BIGNUM *v, char *info); +OSSL_DEPRECATEDIN_3_0 int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, const char *grp); -__owur BIGNUM *SSL_get_srp_g(SSL *s); -__owur BIGNUM *SSL_get_srp_N(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_g(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_N(SSL *s); -__owur char *SSL_get_srp_username(SSL *s); -__owur char *SSL_get_srp_userinfo(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_username(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_userinfo(SSL *s); +# endif # endif /* @@ -1832,6 +1949,12 @@ __owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); __owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds, OSSL_ASYNC_FD *delfd, size_t *numdelfds); +__owur int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback); +__owur int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg); +__owur int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback); +__owur int SSL_set_async_callback_arg(SSL *s, void *arg); +__owur int SSL_get_async_status(SSL *s, int *status); + # endif __owur int SSL_accept(SSL *ssl); __owur int SSL_stateless(SSL *s); @@ -1847,6 +1970,8 @@ __owur int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes); __owur int SSL_peek(SSL *ssl, void *buf, int num); __owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +__owur ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, + int flags); __owur int SSL_write(SSL *ssl, const void *buf, int num); __owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); __owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, @@ -1866,12 +1991,17 @@ __owur int SSL_get_error(const SSL *s, int ret_code); __owur const char *SSL_get_version(const SSL *s); /* This sets the 'default' SSL version that SSL_new() will create */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); +# endif # ifndef OPENSSL_NO_SSL3_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_client_method(void); +# endif # endif #define SSLv23_method TLS_method @@ -1884,34 +2014,44 @@ __owur const SSL_METHOD *TLS_server_method(void); __owur const SSL_METHOD *TLS_client_method(void); # ifndef OPENSSL_NO_TLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_TLS1_1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_TLS1_2_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_client_method(void); +# endif # endif # ifndef OPENSSL_NO_DTLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_DTLS1_2_METHOD /* DTLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_client_method(void); +# endif # endif __owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ @@ -1931,6 +2071,7 @@ int SSL_get_key_update_type(const SSL *s); int SSL_renegotiate(SSL *s); int SSL_renegotiate_abbreviated(SSL *s); __owur int SSL_renegotiate_pending(const SSL *s); +int SSL_new_session_ticket(SSL *s); int SSL_shutdown(SSL *s); __owur int SSL_verify_client_post_handshake(SSL *s); void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); @@ -1964,7 +2105,7 @@ void SSL_set_accept_state(SSL *s); __owur long SSL_get_default_timeout(const SSL *s); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_library_init() OPENSSL_init_ssl(0, NULL) # endif @@ -1993,8 +2134,13 @@ __owur int SSL_client_version(const SSL *s); __owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); __owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); __owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); -__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, - const char *CApath); +__owur int SSL_CTX_set_default_verify_store(SSL_CTX *ctx); +__owur int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile); +__owur int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath); +__owur int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore); +__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, + const char *CAfile, + const char *CApath); # define SSL_get0_session SSL_get_session/* just peek at pointer */ __owur SSL_SESSION *SSL_get_session(const SSL *ssl); __owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ @@ -2071,18 +2217,24 @@ __owur int SSL_get_ex_data_X509_STORE_CTX_idx(void); SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) # define SSL_set_max_pipelines(ssl,m) \ SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_retry_verify(ssl) \ + (SSL_ctrl(ssl,SSL_CTRL_SET_RETRY_VERIFY,0,NULL) > 0) void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); void SSL_set_default_read_buffer_len(SSL *s, size_t len); # ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* NB: the |keylength| is only applicable when is_export is true */ +OSSL_DEPRECATEDIN_3_0 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*dh) (SSL *ssl, int is_export, int keylength)); +OSSL_DEPRECATEDIN_3_0 void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export, int keylength)); +# endif # endif __owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); @@ -2093,7 +2245,7 @@ __owur int SSL_COMP_get_id(const SSL_COMP *comp); STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); __owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) *meths); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_COMP_free_compression_methods() while(0) continue # endif __owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); @@ -2133,7 +2285,7 @@ void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); -void SSL_set_record_padding_callback(SSL *ssl, +int SSL_set_record_padding_callback(SSL *ssl, size_t (*cb) (SSL *ssl, int type, size_t len, void *arg)); void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); @@ -2145,7 +2297,7 @@ size_t SSL_get_num_tickets(const SSL *s); int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_cache_hit(s) SSL_session_reused(s) # endif @@ -2427,8 +2579,6 @@ int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); -extern const char SSL_version_str[]; - typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); @@ -2442,6 +2592,10 @@ void SSL_set_allow_early_data_cb(SSL *s, SSL_allow_early_data_cb_fn cb, void *arg); +/* store the default cipher strings inside the library */ +const char *OSSL_default_cipher_list(void); +const char *OSSL_default_ciphersuites(void); + # ifdef __cplusplus } # endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h.in new file mode 100644 index 00000000..f03f52fb --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h.in @@ -0,0 +1,2530 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros generate_const_stack_macros); +-} + +#ifndef OPENSSL_SSL_H +# define OPENSSL_SSL_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# endif +# include +# include +# include +# include + +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* OpenSSL version number for ASN.1 encoding of the session information */ +/*- + * Version 0 - initial version + * Version 1 - added the optional peer certificate + */ +# define SSL_SESSION_ASN1_VERSION 0x0001 + +# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 +# define SSL_MAX_SID_CTX_LENGTH 32 + +# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) +# define SSL_MAX_KEY_ARG_LENGTH 8 +/* SSL_MAX_MASTER_KEY_LENGTH is defined in prov_ssl.h */ + +/* The maximum number of encrypt/decrypt pipelines we can support */ +# define SSL_MAX_PIPELINES 32 + +/* text strings for the ciphers */ + +/* These are used to specify which ciphers to use and not to use */ + +# define SSL_TXT_LOW "LOW" +# define SSL_TXT_MEDIUM "MEDIUM" +# define SSL_TXT_HIGH "HIGH" +# define SSL_TXT_FIPS "FIPS" + +# define SSL_TXT_aNULL "aNULL" +# define SSL_TXT_eNULL "eNULL" +# define SSL_TXT_NULL "NULL" + +# define SSL_TXT_kRSA "kRSA" +# define SSL_TXT_kDHr "kDHr"/* this cipher class has been removed */ +# define SSL_TXT_kDHd "kDHd"/* this cipher class has been removed */ +# define SSL_TXT_kDH "kDH"/* this cipher class has been removed */ +# define SSL_TXT_kEDH "kEDH"/* alias for kDHE */ +# define SSL_TXT_kDHE "kDHE" +# define SSL_TXT_kECDHr "kECDHr"/* this cipher class has been removed */ +# define SSL_TXT_kECDHe "kECDHe"/* this cipher class has been removed */ +# define SSL_TXT_kECDH "kECDH"/* this cipher class has been removed */ +# define SSL_TXT_kEECDH "kEECDH"/* alias for kECDHE */ +# define SSL_TXT_kECDHE "kECDHE" +# define SSL_TXT_kPSK "kPSK" +# define SSL_TXT_kRSAPSK "kRSAPSK" +# define SSL_TXT_kECDHEPSK "kECDHEPSK" +# define SSL_TXT_kDHEPSK "kDHEPSK" +# define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kGOST18 "kGOST18" +# define SSL_TXT_kSRP "kSRP" + +# define SSL_TXT_aRSA "aRSA" +# define SSL_TXT_aDSS "aDSS" +# define SSL_TXT_aDH "aDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDH "aECDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDSA "aECDSA" +# define SSL_TXT_aPSK "aPSK" +# define SSL_TXT_aGOST94 "aGOST94" +# define SSL_TXT_aGOST01 "aGOST01" +# define SSL_TXT_aGOST12 "aGOST12" +# define SSL_TXT_aGOST "aGOST" +# define SSL_TXT_aSRP "aSRP" + +# define SSL_TXT_DSS "DSS" +# define SSL_TXT_DH "DH" +# define SSL_TXT_DHE "DHE"/* same as "kDHE:-ADH" */ +# define SSL_TXT_EDH "EDH"/* alias for DHE */ +# define SSL_TXT_ADH "ADH" +# define SSL_TXT_RSA "RSA" +# define SSL_TXT_ECDH "ECDH" +# define SSL_TXT_EECDH "EECDH"/* alias for ECDHE" */ +# define SSL_TXT_ECDHE "ECDHE"/* same as "kECDHE:-AECDH" */ +# define SSL_TXT_AECDH "AECDH" +# define SSL_TXT_ECDSA "ECDSA" +# define SSL_TXT_PSK "PSK" +# define SSL_TXT_SRP "SRP" + +# define SSL_TXT_DES "DES" +# define SSL_TXT_3DES "3DES" +# define SSL_TXT_RC4 "RC4" +# define SSL_TXT_RC2 "RC2" +# define SSL_TXT_IDEA "IDEA" +# define SSL_TXT_SEED "SEED" +# define SSL_TXT_AES128 "AES128" +# define SSL_TXT_AES256 "AES256" +# define SSL_TXT_AES "AES" +# define SSL_TXT_AES_GCM "AESGCM" +# define SSL_TXT_AES_CCM "AESCCM" +# define SSL_TXT_AES_CCM_8 "AESCCM8" +# define SSL_TXT_CAMELLIA128 "CAMELLIA128" +# define SSL_TXT_CAMELLIA256 "CAMELLIA256" +# define SSL_TXT_CAMELLIA "CAMELLIA" +# define SSL_TXT_CHACHA20 "CHACHA20" +# define SSL_TXT_GOST "GOST89" +# define SSL_TXT_ARIA "ARIA" +# define SSL_TXT_ARIA_GCM "ARIAGCM" +# define SSL_TXT_ARIA128 "ARIA128" +# define SSL_TXT_ARIA256 "ARIA256" +# define SSL_TXT_GOST2012_GOST8912_GOST8912 "GOST2012-GOST8912-GOST8912" +# define SSL_TXT_CBC "CBC" + +# define SSL_TXT_MD5 "MD5" +# define SSL_TXT_SHA1 "SHA1" +# define SSL_TXT_SHA "SHA"/* same as "SHA1" */ +# define SSL_TXT_GOST94 "GOST94" +# define SSL_TXT_GOST89MAC "GOST89MAC" +# define SSL_TXT_GOST12 "GOST12" +# define SSL_TXT_GOST89MAC12 "GOST89MAC12" +# define SSL_TXT_SHA256 "SHA256" +# define SSL_TXT_SHA384 "SHA384" + +# define SSL_TXT_SSLV3 "SSLv3" +# define SSL_TXT_TLSV1 "TLSv1" +# define SSL_TXT_TLSV1_1 "TLSv1.1" +# define SSL_TXT_TLSV1_2 "TLSv1.2" + +# define SSL_TXT_ALL "ALL" + +/*- + * COMPLEMENTOF* definitions. These identifiers are used to (de-select) + * ciphers normally not being used. + * Example: "RC4" will activate all ciphers using RC4 including ciphers + * without authentication, which would normally disabled by DEFAULT (due + * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" + * will make sure that it is also disabled in the specific selection. + * COMPLEMENTOF* identifiers are portable between version, as adjustments + * to the default cipher setup will also be included here. + * + * COMPLEMENTOFDEFAULT does not experience the same special treatment that + * DEFAULT gets, as only selection is being done and no sorting as needed + * for DEFAULT. + */ +# define SSL_TXT_CMPALL "COMPLEMENTOFALL" +# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" + +/* + * The following cipher list is used by default. It also is substituted when + * an application-defined cipher list string starts with 'DEFAULT'. + * This applies to ciphersuites for TLSv1.2 and below. + * DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list() + * Update both macro and function simultaneously + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* + * This is the default set of TLSv1.3 ciphersuites + * DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites() + * Update both macro and function simultaneously + */ +# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ + "TLS_CHACHA20_POLY1305_SHA256:" \ + "TLS_AES_128_GCM_SHA256" +# endif +/* + * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always + * starts with a reasonable order, and all we have to do for DEFAULT is + * throwing out anonymous and unencrypted ciphersuites! (The latter are not + * actually enabled by ALL, but "ALL:RSA" would enable some of them.) + */ + +/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ +# define SSL_SENT_SHUTDOWN 1 +# define SSL_RECEIVED_SHUTDOWN 2 + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 +# define SSL_FILETYPE_PEM X509_FILETYPE_PEM + +/* + * This is needed to stop compilers complaining about the 'struct ssl_st *' + * function parameters used to prototype callbacks in SSL_CTX. + */ +typedef struct ssl_st *ssl_crock_st; +typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; +typedef struct ssl_method_st SSL_METHOD; +typedef struct ssl_cipher_st SSL_CIPHER; +typedef struct ssl_session_st SSL_SESSION; +typedef struct tls_sigalgs_st TLS_SIGALGS; +typedef struct ssl_conf_ctx_st SSL_CONF_CTX; +typedef struct ssl_comp_st SSL_COMP; + +STACK_OF(SSL_CIPHER); +STACK_OF(SSL_COMP); + +/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ +typedef struct srtp_protection_profile_st { + const char *name; + unsigned long id; +} SRTP_PROTECTION_PROFILE; +{- + generate_stack_macros("SRTP_PROTECTION_PROFILE"); +-} + + +typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, + int len, void *arg); +typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, + STACK_OF(SSL_CIPHER) *peer_ciphers, + const SSL_CIPHER **cipher, void *arg); + +/* Extension context codes */ +/* This extension is only allowed in TLS */ +#define SSL_EXT_TLS_ONLY 0x0001 +/* This extension is only allowed in DTLS */ +#define SSL_EXT_DTLS_ONLY 0x0002 +/* Some extensions may be allowed in DTLS but we don't implement them for it */ +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x0004 +/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ +#define SSL_EXT_SSL3_ALLOWED 0x0008 +/* Extension is only defined for TLS1.2 and below */ +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +/* Extension is only defined for TLS1.3 and above */ +#define SSL_EXT_TLS1_3_ONLY 0x0020 +/* Ignore this extension during parsing if we are resuming */ +#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 +#define SSL_EXT_CLIENT_HELLO 0x0080 +/* Really means TLS1.2 or below */ +#define SSL_EXT_TLS1_2_SERVER_HELLO 0x0100 +#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 +#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 +#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 +#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 +#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 +#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 + +/* Typedefs for handling custom extensions */ + +typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type, + const unsigned char **out, size_t *outlen, + int *al, void *add_arg); + +typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type, + const unsigned char *out, void *add_arg); + +typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type, + const unsigned char *in, size_t inlen, + int *al, void *parse_arg); + + +typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char **out, + size_t *outlen, X509 *x, + size_t chainidx, + int *al, void *add_arg); + +typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *out, + void *add_arg); + +typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *in, + size_t inlen, X509 *x, + size_t chainidx, + int *al, void *parse_arg); + +/* Typedef for verification callback */ +typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); + +/* Typedef for SSL async callback */ +typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); + +#define SSL_OP_BIT(n) ((uint64_t)1 << (uint64_t)n) + +/* + * SSL/TLS connection options. + */ + /* Disable Extended master secret */ +# define SSL_OP_NO_EXTENDED_MASTER_SECRET SSL_OP_BIT(0) + /* Cleanse plaintext copies of data delivered to the application */ +# define SSL_OP_CLEANSE_PLAINTEXT SSL_OP_BIT(1) + /* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT SSL_OP_BIT(2) + /* Enable support for Kernel TLS */ +# define SSL_OP_ENABLE_KTLS SSL_OP_BIT(3) +# define SSL_OP_TLSEXT_PADDING SSL_OP_BIT(4) +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG SSL_OP_BIT(6) +# define SSL_OP_IGNORE_UNEXPECTED_EOF SSL_OP_BIT(7) +# define SSL_OP_ALLOW_CLIENT_RENEGOTIATION SSL_OP_BIT(8) +# define SSL_OP_DISABLE_TLSEXT_CA_NAMES SSL_OP_BIT(9) + /* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX SSL_OP_BIT(10) + /* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added + * in OpenSSL 0.9.6d. Usually (depending on the application protocol) + * the workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it + * in SSL_OP_ALL. Added in 0.9.6e + */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS SSL_OP_BIT(11) + /* DTLS options */ +# define SSL_OP_NO_QUERY_MTU SSL_OP_BIT(12) + /* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE SSL_OP_BIT(13) + /* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET SSL_OP_BIT(14) +# ifndef OPENSSL_NO_DTLS1_METHOD + /* + * Use Cisco's version identifier of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) + */ +# define SSL_OP_CISCO_ANYCONNECT SSL_OP_BIT(15) +# endif + /* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_BIT(16) + /* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION SSL_OP_BIT(17) + /* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_BIT(18) + /* Disable encrypt-then-mac */ +# define SSL_OP_NO_ENCRYPT_THEN_MAC SSL_OP_BIT(19) + /* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future + * version of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT SSL_OP_BIT(20) + /* + * Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE + */ +# define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21) + /* + * Set on servers to choose the cipher according to server's preferences. + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_BIT(22) + /* + * If set, a server will allow a client to issue a SSLv3.0 version + * number as latest version supported in the premaster secret, even when + * TLSv1.0 (version 3.1) was announced in the client hello. Normally + * this is forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG SSL_OP_BIT(23) + /* + * Switches off automatic TLSv1.3 anti-replay protection for early data. + * This is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY SSL_OP_BIT(24) +# define SSL_OP_NO_SSLv3 SSL_OP_BIT(25) +# define SSL_OP_NO_TLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_TLSv1_2 SSL_OP_BIT(27) +# define SSL_OP_NO_TLSv1_1 SSL_OP_BIT(28) +# define SSL_OP_NO_TLSv1_3 SSL_OP_BIT(29) +# define SSL_OP_NO_DTLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_DTLSv1_2 SSL_OP_BIT(27) + /* Disallow all renegotiation */ +# define SSL_OP_NO_RENEGOTIATION SSL_OP_BIT(30) + /* + * Make server add server-hello extension from early version of + * cryptopro draft, when GOST ciphersuite is negotiated. Required for + * interoperability with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG SSL_OP_BIT(31) + +/* + * Option "collections." + */ +# define SSL_OP_NO_SSL_MASK \ + ( SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 \ + | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 ) +# define SSL_OP_NO_DTLS_MASK \ + ( SSL_OP_NO_DTLSv1 | SSL_OP_NO_DTLSv1_2 ) + +/* Various bug workarounds that should be rather harmless. */ +# define SSL_OP_ALL \ + ( SSL_OP_CRYPTOPRO_TLSEXT_BUG | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS \ + | SSL_OP_TLSEXT_PADDING | SSL_OP_SAFARI_ECDHE_ECDSA_BUG ) + +/* + * OBSOLETE OPTIONS retained for compatibility + */ + +# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 +# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 +# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 +# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 +# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 +# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 +# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 +# define SSL_OP_TLS_D5_BUG 0x0 +# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 +# define SSL_OP_SINGLE_ECDH_USE 0x0 +# define SSL_OP_SINGLE_DH_USE 0x0 +# define SSL_OP_EPHEMERAL_RSA 0x0 +# define SSL_OP_NO_SSLv2 0x0 +# define SSL_OP_PKCS1_CHECK_1 0x0 +# define SSL_OP_PKCS1_CHECK_2 0x0 +# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 +# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 + +/* + * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success + * when just a single record has been written): + */ +# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001U +/* + * Make it possible to retry SSL_write() with changed buffer location (buffer + * contents must stay the same!); this is not the default to avoid the + * misconception that non-blocking SSL_write() behaves like non-blocking + * write(): + */ +# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U +/* + * Never bother the application with retries if the transport is blocking: + */ +# define SSL_MODE_AUTO_RETRY 0x00000004U +/* Don't attempt to automatically build certificate chain */ +# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U +/* + * Save RAM by releasing read and write buffers when they're empty. (SSL3 and + * TLS only.) Released buffers are freed. + */ +# define SSL_MODE_RELEASE_BUFFERS 0x00000010U +/* + * Send the current time in the Random fields of the ClientHello and + * ServerHello records for compatibility with hypothetical implementations + * that require it. + */ +# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U +# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U +/* + * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications + * that reconnect with a downgraded protocol version; see + * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your + * application attempts a normal handshake. Only use this in explicit + * fallback retries, following the guidance in + * draft-ietf-tls-downgrade-scsv-00. + */ +# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U +/* + * Support Asynchronous operation + */ +# define SSL_MODE_ASYNC 0x00000100U + +/* + * When using DTLS/SCTP, include the terminating zero in the label + * used for computing the endpoint-pair shared secret. Required for + * interoperability with implementations having this bug like these + * older version of OpenSSL: + * - OpenSSL 1.0.0 series + * - OpenSSL 1.0.1 series + * - OpenSSL 1.0.2 series + * - OpenSSL 1.1.0 series + * - OpenSSL 1.1.1 and 1.1.1a + */ +# define SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG 0x00000400U + +/* Cert related flags */ +/* + * Many implementations ignore some aspects of the TLS standards such as + * enforcing certificate chain algorithms. When this is set we enforce them. + */ +# define SSL_CERT_FLAG_TLS_STRICT 0x00000001U + +/* Suite B modes, takes same values as certificate verify flags */ +# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 + +/* Perform all sorts of protocol violations for testing purposes */ +# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 + +/* Flags for building certificate chains */ +/* Treat any existing certificates as untrusted CAs */ +# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 +/* Don't include root CA in chain */ +# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 +/* Just check certificates already there */ +# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 +/* Ignore verification errors */ +# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 +/* Clear verification errors from queue */ +# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 + +/* Flags returned by SSL_check_chain */ +/* Certificate can be used with this session */ +# define CERT_PKEY_VALID 0x1 +/* Certificate can also be used for signing */ +# define CERT_PKEY_SIGN 0x2 +/* EE certificate signing algorithm OK */ +# define CERT_PKEY_EE_SIGNATURE 0x10 +/* CA signature algorithms OK */ +# define CERT_PKEY_CA_SIGNATURE 0x20 +/* EE certificate parameters OK */ +# define CERT_PKEY_EE_PARAM 0x40 +/* CA certificate parameters OK */ +# define CERT_PKEY_CA_PARAM 0x80 +/* Signing explicitly allowed as opposed to SHA1 fallback */ +# define CERT_PKEY_EXPLICIT_SIGN 0x100 +/* Client CA issuer names match (always set for server cert) */ +# define CERT_PKEY_ISSUER_NAME 0x200 +/* Cert type matches client types (always set for server cert) */ +# define CERT_PKEY_CERT_TYPE 0x400 +/* Cert chain suitable to Suite B */ +# define CERT_PKEY_SUITEB 0x800 + +# define SSL_CONF_FLAG_CMDLINE 0x1 +# define SSL_CONF_FLAG_FILE 0x2 +# define SSL_CONF_FLAG_CLIENT 0x4 +# define SSL_CONF_FLAG_SERVER 0x8 +# define SSL_CONF_FLAG_SHOW_ERRORS 0x10 +# define SSL_CONF_FLAG_CERTIFICATE 0x20 +# define SSL_CONF_FLAG_REQUIRE_PRIVATE 0x40 +/* Configuration value types */ +# define SSL_CONF_TYPE_UNKNOWN 0x0 +# define SSL_CONF_TYPE_STRING 0x1 +# define SSL_CONF_TYPE_FILE 0x2 +# define SSL_CONF_TYPE_DIR 0x3 +# define SSL_CONF_TYPE_NONE 0x4 +# define SSL_CONF_TYPE_STORE 0x5 + +/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ +# define SSL_COOKIE_LENGTH 4096 + +/* + * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they + * cannot be used to clear bits. + */ + +uint64_t SSL_CTX_get_options(const SSL_CTX *ctx); +uint64_t SSL_get_options(const SSL *s); +uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_clear_options(SSL *s, uint64_t op); +uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_set_options(SSL *s, uint64_t op); + +# define SSL_CTX_set_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) +# define SSL_CTX_clear_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_CTX_get_mode(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) +# define SSL_clear_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_set_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) +# define SSL_get_mode(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) +# define SSL_set_mtu(ssl, mtu) \ + SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) +# define DTLS_set_link_mtu(ssl, mtu) \ + SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) +# define DTLS_get_link_min_mtu(ssl) \ + SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) + +# define SSL_get_secure_renegotiation_support(ssl) \ + SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) + +# define SSL_CTX_set_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_set_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_CTX_clear_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) +# define SSL_clear_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) + +void SSL_CTX_set_msg_callback(SSL_CTX *ctx, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +void SSL_set_msg_callback(SSL *ssl, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) +# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) + +# define SSL_get_extms_support(s) \ + SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) + +# ifndef OPENSSL_NO_SRP +/* see tls_srp.c */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_SRP_CTX_init(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_SRP_CTX_free(SSL *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_srp_server_param_with_username(SSL *s, + int *ad); +OSSL_DEPRECATEDIN_3_0 __owur int SRP_Calc_A_param(SSL *s); +# endif +# endif + +/* 100k max cert list */ +# define SSL_MAX_CERT_LIST_DEFAULT (1024*100) + +# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) + +/* + * This callback type is used inside SSL_CTX, SSL, and in the functions that + * set them. It is used to override the generation of SSL/TLS session IDs in + * a server. Return value should be zero on an error, non-zero to proceed. + * Also, callbacks should themselves check if the id they generate is unique + * otherwise the SSL handshake will fail with an error - callbacks can do + * this using the 'ssl' value they're passed by; + * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in + * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32 + * bytes. The callback can alter this length to be less if desired. It is + * also an error for the callback to set the size to zero. + */ +typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, + unsigned int *id_len); + +# define SSL_SESS_CACHE_OFF 0x0000 +# define SSL_SESS_CACHE_CLIENT 0x0001 +# define SSL_SESS_CACHE_SERVER 0x0002 +# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) +# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 +/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ +# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 +# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 +# define SSL_SESS_CACHE_NO_INTERNAL \ + (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) +# define SSL_SESS_CACHE_UPDATE_TIME 0x0400 + +LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); +# define SSL_CTX_sess_number(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) +# define SSL_CTX_sess_connect(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) +# define SSL_CTX_sess_connect_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) +# define SSL_CTX_sess_connect_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) +# define SSL_CTX_sess_accept_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) +# define SSL_CTX_sess_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) +# define SSL_CTX_sess_cb_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) +# define SSL_CTX_sess_misses(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) +# define SSL_CTX_sess_timeouts(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) +# define SSL_CTX_sess_cache_full(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) + +void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, + int (*new_session_cb) (struct ssl_st *ssl, + SSL_SESSION *sess)); +int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + SSL_SESSION *sess); +void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, + void (*remove_session_cb) (struct ssl_ctx_st + *ctx, + SSL_SESSION *sess)); +void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, + SSL_SESSION *sess); +void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, + SSL_SESSION *(*get_session_cb) (struct ssl_st + *ssl, + const unsigned char + *data, int len, + int *copy)); +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + const unsigned char *data, + int len, int *copy); +void SSL_CTX_set_info_callback(SSL_CTX *ctx, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, + int val); +void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, + int (*client_cert_cb) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey)); +int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey); +# ifndef OPENSSL_NO_ENGINE +__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); +# endif +void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, + int (*app_gen_cookie_cb) (SSL *ssl, + unsigned char + *cookie, + unsigned int + *cookie_len)); +void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, + int (*app_verify_cookie_cb) (SSL *ssl, + const unsigned + char *cookie, + unsigned int + cookie_len)); + +void SSL_CTX_set_stateless_cookie_generate_cb( + SSL_CTX *ctx, + int (*gen_stateless_cookie_cb) (SSL *ssl, + unsigned char *cookie, + size_t *cookie_len)); +void SSL_CTX_set_stateless_cookie_verify_cb( + SSL_CTX *ctx, + int (*verify_stateless_cookie_cb) (SSL *ssl, + const unsigned char *cookie, + size_t cookie_len)); +# ifndef OPENSSL_NO_NEXTPROTONEG + +typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned int *outlen, + void *arg); +void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, + SSL_CTX_npn_advertised_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb + +typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s, + unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, + SSL_CTX_npn_select_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb + +void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, + unsigned *len); +# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated +# endif + +__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, + const unsigned char *in, unsigned int inlen, + const unsigned char *client, + unsigned int client_len); + +# define OPENSSL_NPN_UNSUPPORTED 0 +# define OPENSSL_NPN_NEGOTIATED 1 +# define OPENSSL_NPN_NO_OVERLAP 2 + +__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, + unsigned int protos_len); +__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, + unsigned int protos_len); +typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, + SSL_CTX_alpn_select_cb_func cb, + void *arg); +void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, + unsigned int *len); + +# ifndef OPENSSL_NO_PSK +/* + * the maximum length of the buffer given to callbacks containing the + * resulting identity/psk + */ +# define PSK_MAX_IDENTITY_LEN 256 +# define PSK_MAX_PSK_LEN 512 +typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, + const char *hint, + char *identity, + unsigned int max_identity_len, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb); +void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb); + +typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl, + const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb); +void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb); + +__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); +__owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); +const char *SSL_get_psk_identity_hint(const SSL *s); +const char *SSL_get_psk_identity(const SSL *s); +# endif + +typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl, + const unsigned char *identity, + size_t identity_len, + SSL_SESSION **sess); +typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md, + const unsigned char **id, + size_t *idlen, + SSL_SESSION **sess); + +void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb); +void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx, + SSL_psk_find_session_cb_func cb); +void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb); +void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx, + SSL_psk_use_session_cb_func cb); + +/* Register callbacks to handle custom TLS Extensions for client or server. */ + +__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, + unsigned int ext_type); + +__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type, + unsigned int context, + SSL_custom_ext_add_cb_ex add_cb, + SSL_custom_ext_free_cb_ex free_cb, + void *add_arg, + SSL_custom_ext_parse_cb_ex parse_cb, + void *parse_arg); + +__owur int SSL_extension_supported(unsigned int ext_type); + +# define SSL_NOTHING 1 +# define SSL_WRITING 2 +# define SSL_READING 3 +# define SSL_X509_LOOKUP 4 +# define SSL_ASYNC_PAUSED 5 +# define SSL_ASYNC_NO_JOBS 6 +# define SSL_CLIENT_HELLO_CB 7 +# define SSL_RETRY_VERIFY 8 + +/* These will only be used when doing non-blocking IO */ +# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) +# define SSL_want_read(s) (SSL_want(s) == SSL_READING) +# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) +# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) +# define SSL_want_retry_verify(s) (SSL_want(s) == SSL_RETRY_VERIFY) +# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) +# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) +# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) + +# define SSL_MAC_FLAG_READ_MAC_STREAM 1 +# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 +# define SSL_MAC_FLAG_READ_MAC_TLSTREE 4 +# define SSL_MAC_FLAG_WRITE_MAC_TLSTREE 8 + +/* + * A callback for logging out TLS key material. This callback should log out + * |line| followed by a newline. + */ +typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line); + +/* + * SSL_CTX_set_keylog_callback configures a callback to log key material. This + * is intended for debugging use with tools like Wireshark. The cb function + * should log line followed by a newline. + */ +void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb); + +/* + * SSL_CTX_get_keylog_callback returns the callback configured by + * SSL_CTX_set_keylog_callback. + */ +SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx); + +int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data); +uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx); +int SSL_set_max_early_data(SSL *s, uint32_t max_early_data); +uint32_t SSL_get_max_early_data(const SSL *s); +int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data); +uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx); +int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data); +uint32_t SSL_get_recv_max_early_data(const SSL *s); + +#ifdef __cplusplus +} +#endif + +# include +# include +# include /* This is mostly sslv3 with a few tweaks */ +# include /* Datagram TLS */ +# include /* Support for the use_srtp extension */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These need to be after the above set of includes due to a compiler bug + * in VisualStudio 2015 + */ +{- + generate_const_stack_macros("SSL_CIPHER") + .generate_stack_macros("SSL_COMP"); +-} + +/* compatibility */ +# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) +# define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) +# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0, \ + (char *)(a))) +# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) +# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) +# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ + (char *)(arg))) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void SSL_set_debug(SSL *s, int debug); +# endif + +/* TLSv1.3 KeyUpdate message types */ +/* -1 used so that this is an invalid value for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NONE -1 +/* Values as defined for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NOT_REQUESTED 0 +#define SSL_KEY_UPDATE_REQUESTED 1 + +/* + * The valid handshake states (one for each type message sent and one for each + * type of message received). There are also two "special" states: + * TLS = TLS or DTLS state + * DTLS = DTLS specific state + * CR/SR = Client Read/Server Read + * CW/SW = Client Write/Server Write + * + * The "special" states are: + * TLS_ST_BEFORE = No handshake has been initiated yet + * TLS_ST_OK = A handshake has been successfully completed + */ +typedef enum { + TLS_ST_BEFORE, + TLS_ST_OK, + DTLS_ST_CR_HELLO_VERIFY_REQUEST, + TLS_ST_CR_SRVR_HELLO, + TLS_ST_CR_CERT, + TLS_ST_CR_CERT_STATUS, + TLS_ST_CR_KEY_EXCH, + TLS_ST_CR_CERT_REQ, + TLS_ST_CR_SRVR_DONE, + TLS_ST_CR_SESSION_TICKET, + TLS_ST_CR_CHANGE, + TLS_ST_CR_FINISHED, + TLS_ST_CW_CLNT_HELLO, + TLS_ST_CW_CERT, + TLS_ST_CW_KEY_EXCH, + TLS_ST_CW_CERT_VRFY, + TLS_ST_CW_CHANGE, + TLS_ST_CW_NEXT_PROTO, + TLS_ST_CW_FINISHED, + TLS_ST_SW_HELLO_REQ, + TLS_ST_SR_CLNT_HELLO, + DTLS_ST_SW_HELLO_VERIFY_REQUEST, + TLS_ST_SW_SRVR_HELLO, + TLS_ST_SW_CERT, + TLS_ST_SW_KEY_EXCH, + TLS_ST_SW_CERT_REQ, + TLS_ST_SW_SRVR_DONE, + TLS_ST_SR_CERT, + TLS_ST_SR_KEY_EXCH, + TLS_ST_SR_CERT_VRFY, + TLS_ST_SR_NEXT_PROTO, + TLS_ST_SR_CHANGE, + TLS_ST_SR_FINISHED, + TLS_ST_SW_SESSION_TICKET, + TLS_ST_SW_CERT_STATUS, + TLS_ST_SW_CHANGE, + TLS_ST_SW_FINISHED, + TLS_ST_SW_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_CERT_VRFY, + TLS_ST_SW_CERT_VRFY, + TLS_ST_CR_HELLO_REQ, + TLS_ST_SW_KEY_UPDATE, + TLS_ST_CW_KEY_UPDATE, + TLS_ST_SR_KEY_UPDATE, + TLS_ST_CR_KEY_UPDATE, + TLS_ST_EARLY_DATA, + TLS_ST_PENDING_EARLY_DATA_END, + TLS_ST_CW_END_OF_EARLY_DATA, + TLS_ST_SR_END_OF_EARLY_DATA +} OSSL_HANDSHAKE_STATE; + +/* + * Most of the following state values are no longer used and are defined to be + * the closest equivalent value in the current state machine code. Not all + * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT + * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP, + * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT. + */ + +# define SSL_ST_CONNECT 0x1000 +# define SSL_ST_ACCEPT 0x2000 + +# define SSL_ST_MASK 0x0FFF + +# define SSL_CB_LOOP 0x01 +# define SSL_CB_EXIT 0x02 +# define SSL_CB_READ 0x04 +# define SSL_CB_WRITE 0x08 +# define SSL_CB_ALERT 0x4000/* used in callback */ +# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) +# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) +# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) +# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) +# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) +# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) +# define SSL_CB_HANDSHAKE_START 0x10 +# define SSL_CB_HANDSHAKE_DONE 0x20 + +/* Is the SSL_connection established? */ +# define SSL_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a)) +# define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a)) +int SSL_in_init(const SSL *s); +int SSL_in_before(const SSL *s); +int SSL_is_init_finished(const SSL *s); + +/* + * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you + * should not need these + */ +# define SSL_ST_READ_HEADER 0xF0 +# define SSL_ST_READ_BODY 0xF1 +# define SSL_ST_READ_DONE 0xF2 + +/*- + * Obtain latest Finished message + * -- that we sent (SSL_get_finished) + * -- that we expected from peer (SSL_get_peer_finished). + * Returns length (0 == no Finished so far), copies up to 'count' bytes. + */ +size_t SSL_get_finished(const SSL *s, void *buf, size_t count); +size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); + +/* + * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are + * 'ored' with SSL_VERIFY_PEER if they are desired + */ +# define SSL_VERIFY_NONE 0x00 +# define SSL_VERIFY_PEER 0x01 +# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 +# define SSL_VERIFY_CLIENT_ONCE 0x04 +# define SSL_VERIFY_POST_HANDSHAKE 0x08 + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OpenSSL_add_ssl_algorithms() SSL_library_init() +# define SSLeay_add_ssl_algorithms() SSL_library_init() +# endif + +/* More backward compatibility */ +# define SSL_get_cipher(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_cipher_bits(s,np) \ + SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) +# define SSL_get_cipher_version(s) \ + SSL_CIPHER_get_version(SSL_get_current_cipher(s)) +# define SSL_get_cipher_name(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_time(a) SSL_SESSION_get_time(a) +# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) +# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) +# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) + +# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) +# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) + +DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) +# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value + * from SSL_AD_... */ +/* These alert types are for SSLv3 and TLSv1 */ +# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY +/* fatal */ +# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE +/* fatal */ +# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC +# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED +# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW +/* fatal */ +# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE +/* fatal */ +# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE +/* Not for TLS */ +# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE +# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE +# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE +# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED +# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED +# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN +/* fatal */ +# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER +/* fatal */ +# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA +/* fatal */ +# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED +/* fatal */ +# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR +# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR +/* fatal */ +# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION +/* fatal */ +# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION +/* fatal */ +# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY +/* fatal */ +# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR +# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED +# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION +# define SSL_AD_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION +# define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED +# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION +# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE +# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME +# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE +# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE +/* fatal */ +# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY +/* fatal */ +# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK +# define SSL_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL +# define SSL_ERROR_NONE 0 +# define SSL_ERROR_SSL 1 +# define SSL_ERROR_WANT_READ 2 +# define SSL_ERROR_WANT_WRITE 3 +# define SSL_ERROR_WANT_X509_LOOKUP 4 +# define SSL_ERROR_SYSCALL 5/* look at error stack/return + * value/errno */ +# define SSL_ERROR_ZERO_RETURN 6 +# define SSL_ERROR_WANT_CONNECT 7 +# define SSL_ERROR_WANT_ACCEPT 8 +# define SSL_ERROR_WANT_ASYNC 9 +# define SSL_ERROR_WANT_ASYNC_JOB 10 +# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 +# define SSL_ERROR_WANT_RETRY_VERIFY 12 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# endif + +# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 +# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 +# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 +# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 +# define SSL_CTRL_GET_FLAGS 13 +# define SSL_CTRL_EXTRA_CHAIN_CERT 14 +# define SSL_CTRL_SET_MSG_CALLBACK 15 +# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 +/* only applies to datagram connections */ +# define SSL_CTRL_SET_MTU 17 +/* Stats */ +# define SSL_CTRL_SESS_NUMBER 20 +# define SSL_CTRL_SESS_CONNECT 21 +# define SSL_CTRL_SESS_CONNECT_GOOD 22 +# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 +# define SSL_CTRL_SESS_ACCEPT 24 +# define SSL_CTRL_SESS_ACCEPT_GOOD 25 +# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 +# define SSL_CTRL_SESS_HIT 27 +# define SSL_CTRL_SESS_CB_HIT 28 +# define SSL_CTRL_SESS_MISSES 29 +# define SSL_CTRL_SESS_TIMEOUTS 30 +# define SSL_CTRL_SESS_CACHE_FULL 31 +# define SSL_CTRL_MODE 33 +# define SSL_CTRL_GET_READ_AHEAD 40 +# define SSL_CTRL_SET_READ_AHEAD 41 +# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 +# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 +# define SSL_CTRL_SET_SESS_CACHE_MODE 44 +# define SSL_CTRL_GET_SESS_CACHE_MODE 45 +# define SSL_CTRL_GET_MAX_CERT_LIST 50 +# define SSL_CTRL_SET_MAX_CERT_LIST 51 +# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 +/* see tls1.h for macros based on these */ +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 +# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 +# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 +# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 +# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 */ +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# endif +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 +# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 +# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 +# define SSL_CTRL_SET_SRP_ARG 78 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 +# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 +# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 +# define DTLS_CTRL_GET_TIMEOUT 73 +# define DTLS_CTRL_HANDLE_TIMEOUT 74 +# define SSL_CTRL_GET_RI_SUPPORT 76 +# define SSL_CTRL_CLEAR_MODE 78 +# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB 79 +# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 +# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 +# define SSL_CTRL_CHAIN 88 +# define SSL_CTRL_CHAIN_CERT 89 +# define SSL_CTRL_GET_GROUPS 90 +# define SSL_CTRL_SET_GROUPS 91 +# define SSL_CTRL_SET_GROUPS_LIST 92 +# define SSL_CTRL_GET_SHARED_GROUP 93 +# define SSL_CTRL_SET_SIGALGS 97 +# define SSL_CTRL_SET_SIGALGS_LIST 98 +# define SSL_CTRL_CERT_FLAGS 99 +# define SSL_CTRL_CLEAR_CERT_FLAGS 100 +# define SSL_CTRL_SET_CLIENT_SIGALGS 101 +# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 +# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 +# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 +# define SSL_CTRL_BUILD_CERT_CHAIN 105 +# define SSL_CTRL_SET_VERIFY_CERT_STORE 106 +# define SSL_CTRL_SET_CHAIN_CERT_STORE 107 +# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 +# define SSL_CTRL_GET_PEER_TMP_KEY 109 +# define SSL_CTRL_GET_RAW_CIPHERLIST 110 +# define SSL_CTRL_GET_EC_POINT_FORMATS 111 +# define SSL_CTRL_GET_CHAIN_CERTS 115 +# define SSL_CTRL_SELECT_CURRENT_CERT 116 +# define SSL_CTRL_SET_CURRENT_CERT 117 +# define SSL_CTRL_SET_DH_AUTO 118 +# define DTLS_CTRL_SET_LINK_MTU 120 +# define DTLS_CTRL_GET_LINK_MIN_MTU 121 +# define SSL_CTRL_GET_EXTMS_SUPPORT 122 +# define SSL_CTRL_SET_MIN_PROTO_VERSION 123 +# define SSL_CTRL_SET_MAX_PROTO_VERSION 124 +# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT 125 +# define SSL_CTRL_SET_MAX_PIPELINES 126 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE 127 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB 128 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG 129 +# define SSL_CTRL_GET_MIN_PROTO_VERSION 130 +# define SSL_CTRL_GET_MAX_PROTO_VERSION 131 +# define SSL_CTRL_GET_SIGNATURE_NID 132 +# define SSL_CTRL_GET_TMP_KEY 133 +# define SSL_CTRL_GET_NEGOTIATED_GROUP 134 +# define SSL_CTRL_SET_RETRY_VERIFY 136 +# define SSL_CTRL_GET_VERIFY_CERT_STORE 137 +# define SSL_CTRL_GET_CHAIN_CERT_STORE 138 +# define SSL_CERT_SET_FIRST 1 +# define SSL_CERT_SET_NEXT 2 +# define SSL_CERT_SET_SERVER 3 +# define DTLSv1_get_timeout(ssl, arg) \ + SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg)) +# define DTLSv1_handle_timeout(ssl) \ + SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) +# define SSL_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_clear_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_total_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_dh(ctx,dh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# endif +# define SSL_CTX_set_dh_auto(ctx, onoff) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# define SSL_set_dh_auto(s, onoff) \ + SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_set_tmp_dh(ssl,dh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif +# define SSL_CTX_add_extra_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_get_extra_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) +# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) +# define SSL_CTX_clear_extra_chain_certs(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) +# define SSL_CTX_set0_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_CTX_set1_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_CTX_add0_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_add1_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_CTX_get0_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_CTX_clear_chain_certs(ctx) \ + SSL_CTX_set0_chain(ctx,NULL) +# define SSL_CTX_build_cert_chain(ctx, flags) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_CTX_select_current_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_CTX_set_current_cert(ctx, op) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_CTX_set0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +# define SSL_CTX_get0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +# define SSL_CTX_get0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set0_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_set1_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_add0_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_add1_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_get0_chain_certs(s,px509) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_clear_chain_certs(s) \ + SSL_set0_chain(s,NULL) +# define SSL_build_cert_chain(s, flags) \ + SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_select_current_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_set_current_cert(s,op) \ + SSL_ctrl(s,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_set0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_set1_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +#define SSL_get0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_set0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set1_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +#define SSL_get0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) + +# define SSL_get1_groups(s, glist) \ + SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) +# define SSL_CTX_set1_groups(ctx, glist, glistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(int *)(glist)) +# define SSL_CTX_set1_groups_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s)) +# define SSL_set1_groups(s, glist, glistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) +# define SSL_set1_groups_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) +# define SSL_get_shared_group(s, n) \ + SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) +# define SSL_get_negotiated_group(s) \ + SSL_ctrl(s,SSL_CTRL_GET_NEGOTIATED_GROUP,0,NULL) +# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(str)) +# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_client_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_client_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(str)) +# define SSL_get0_certificate_types(s, clist) \ + SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)(clist)) +# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen, \ + (char *)(clist)) +# define SSL_set1_client_certificate_types(s, clist, clistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)(clist)) +# define SSL_get_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NID,0,pn) +# define SSL_get_peer_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) +# define SSL_get_peer_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_TMP_KEY,0,pk) +# define SSL_get_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_TMP_KEY,0,pk) +# define SSL_get0_raw_cipherlist(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,plst) +# define SSL_get0_ec_point_formats(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst) +# define SSL_CTX_set_min_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_CTX_set_max_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_CTX_get_min_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_CTX_get_max_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +# define SSL_set_min_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_set_max_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_get_min_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_get_max_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) + +const char *SSL_group_to_name(SSL *s, int id); + +/* Backwards compatibility, original 1.1.0 names */ +# define SSL_CTRL_GET_SERVER_TMP_KEY \ + SSL_CTRL_GET_PEER_TMP_KEY +# define SSL_get_server_tmp_key(s, pk) \ + SSL_get_peer_tmp_key(s, pk) + +int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey); +int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey); + +/* + * The following symbol names are old and obsolete. They are kept + * for compatibility reasons only and should not be used anymore. + */ +# define SSL_CTRL_GET_CURVES SSL_CTRL_GET_GROUPS +# define SSL_CTRL_SET_CURVES SSL_CTRL_SET_GROUPS +# define SSL_CTRL_SET_CURVES_LIST SSL_CTRL_SET_GROUPS_LIST +# define SSL_CTRL_GET_SHARED_CURVE SSL_CTRL_GET_SHARED_GROUP + +# define SSL_get1_curves SSL_get1_groups +# define SSL_CTX_set1_curves SSL_CTX_set1_groups +# define SSL_CTX_set1_curves_list SSL_CTX_set1_groups_list +# define SSL_set1_curves SSL_set1_groups +# define SSL_set1_curves_list SSL_set1_groups_list +# define SSL_get_shared_curve SSL_get_shared_group + + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* Provide some compatibility macros for removed functionality. */ +# define SSL_CTX_need_tmp_RSA(ctx) 0 +# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 +# define SSL_need_tmp_RSA(ssl) 0 +# define SSL_set_tmp_rsa(ssl,rsa) 1 +# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +/* + * We "pretend" to call the callback to avoid warnings about unused static + * functions. + */ +# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) +# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) +# endif +__owur const BIO_METHOD *BIO_f_ssl(void); +__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client); +__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from); +void BIO_ssl_shutdown(BIO *ssl_bio); + +__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); +__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +__owur SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq, + const SSL_METHOD *meth); +int SSL_CTX_up_ref(SSL_CTX *ctx); +void SSL_CTX_free(SSL_CTX *); +__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); +__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx); +__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); +void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); +void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *); +__owur int SSL_want(const SSL *s); +__owur int SSL_clear(SSL *s); + +void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); + +__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +__owur const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s); +__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); +__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +__owur const char *OPENSSL_cipher_name(const char *rfc_name); +__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); +__owur uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); +__owur const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c); +__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c); + +__owur int SSL_get_fd(const SSL *s); +__owur int SSL_get_rfd(const SSL *s); +__owur int SSL_get_wfd(const SSL *s); +__owur const char *SSL_get_cipher_list(const SSL *s, int n); +__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size); +__owur int SSL_get_read_ahead(const SSL *s); +__owur int SSL_pending(const SSL *s); +__owur int SSL_has_pending(const SSL *s); +# ifndef OPENSSL_NO_SOCK +__owur int SSL_set_fd(SSL *s, int fd); +__owur int SSL_set_rfd(SSL *s, int fd); +__owur int SSL_set_wfd(SSL *s, int fd); +# endif +void SSL_set0_rbio(SSL *s, BIO *rbio); +void SSL_set0_wbio(SSL *s, BIO *wbio); +void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); +__owur BIO *SSL_get_rbio(const SSL *s); +__owur BIO *SSL_get_wbio(const SSL *s); +__owur int SSL_set_cipher_list(SSL *s, const char *str); +__owur int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str); +__owur int SSL_set_ciphersuites(SSL *s, const char *str); +void SSL_set_read_ahead(SSL *s, int yes); +__owur int SSL_get_verify_mode(const SSL *s); +__owur int SSL_get_verify_depth(const SSL *s); +__owur SSL_verify_cb SSL_get_verify_callback(const SSL *s); +void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); +void SSL_set_verify_depth(SSL *s, int depth); +void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, + const unsigned char *d, long len); +# endif +__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, + long len); +__owur int SSL_use_certificate(SSL *ssl, X509 *x); +__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); +__owur int SSL_use_cert_and_key(SSL *ssl, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + + +/* serverinfo file format versions */ +# define SSL_SERVERINFOV1 1 +# define SSL_SERVERINFOV2 2 + +/* Set serverinfo data for the current active cert. */ +__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, + const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +#endif + +__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +#endif +__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, + int type); +/* PEM type */ +__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); +__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); +__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur STACK_OF(X509_NAME) +*SSL_load_client_CA_file_ex(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *file); +int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *dir); +int SSL_add_store_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *uri); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_load_error_strings() \ + OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# endif + +__owur const char *SSL_state_string(const SSL *s); +__owur const char *SSL_rstate_string(const SSL *s); +__owur const char *SSL_state_string_long(const SSL *s); +__owur const char *SSL_rstate_string_long(const SSL *s); +__owur long SSL_SESSION_get_time(const SSL_SESSION *s); +__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); +__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s); +__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); +__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); +__owur int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); + +__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); +__owur int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname); +void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s, + const unsigned char **alpn, + size_t *len); +__owur int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, + const unsigned char *alpn, + size_t len); +__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); +__owur int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher); +__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s); +__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s); +void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick, + size_t *len); +__owur uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s); +__owur int SSL_SESSION_set_max_early_data(SSL_SESSION *s, + uint32_t max_early_data); +__owur int SSL_copy_session_id(SSL *to, const SSL *from); +__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); +__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, + unsigned int sid_len); +__owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); + +__owur SSL_SESSION *SSL_SESSION_new(void); +__owur SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src); +const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, + unsigned int *len); +const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, + unsigned int *len); +__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); +# ifndef OPENSSL_NO_STDIO +int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); +# endif +int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); +int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); +int SSL_SESSION_up_ref(SSL_SESSION *ses); +void SSL_SESSION_free(SSL_SESSION *ses); +__owur int i2d_SSL_SESSION(const SSL_SESSION *in, unsigned char **pp); +__owur int SSL_set_session(SSL *to, SSL_SESSION *session); +int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); +int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); +__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb); +__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb); +__owur int SSL_has_matching_session_id(const SSL *s, + const unsigned char *id, + unsigned int id_len); +SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, + long length); + +# ifdef OPENSSL_X509_H +__owur X509 *SSL_get0_peer_certificate(const SSL *s); +__owur X509 *SSL_get1_peer_certificate(const SSL *s); +/* Deprecated in 3.0.0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_get_peer_certificate SSL_get1_peer_certificate +# endif +# endif + +__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); + +__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +__owur SSL_verify_cb SSL_CTX_get_verify_callback(const SSL_CTX *ctx); +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb callback); +void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); +void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, + int (*cb) (X509_STORE_CTX *, void *), + void *arg); +void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), + void *arg); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, + long len); +# endif +__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, + const unsigned char *d, long len); +__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +__owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, + const unsigned char *d); +__owur int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + +void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); +void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); +pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx); +void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx); +void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb); +void SSL_set_default_passwd_cb_userdata(SSL *s, void *u); +pem_password_cb *SSL_get_default_passwd_cb(SSL *s); +void *SSL_get_default_passwd_cb_userdata(SSL *s); + +__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx); +__owur int SSL_check_private_key(const SSL *ctx); + +__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +SSL *SSL_new(SSL_CTX *ctx); +int SSL_up_ref(SSL *s); +int SSL_is_dtls(const SSL *s); +__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +__owur int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose); +__owur int SSL_set_purpose(SSL *ssl, int purpose); +__owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust); +__owur int SSL_set_trust(SSL *ssl, int trust); + +__owur int SSL_set1_host(SSL *s, const char *hostname); +__owur int SSL_add1_host(SSL *s, const char *hostname); +__owur const char *SSL_get0_peername(SSL *s); +void SSL_set_hostflags(SSL *s, unsigned int flags); + +__owur int SSL_CTX_dane_enable(SSL_CTX *ctx); +__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, + uint8_t mtype, uint8_t ord); +__owur int SSL_dane_enable(SSL *s, const char *basedomain); +__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, + uint8_t mtype, const unsigned char *data, size_t dlen); +__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); +__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, + uint8_t *mtype, const unsigned char **data, + size_t *dlen); +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +SSL_DANE *SSL_get0_dane(SSL *ssl); +/* + * DANE flags + */ +unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags); +unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags); + +__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); +__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); + +__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); +__owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); + +# ifndef OPENSSL_NO_SRP +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, + char *(*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, + int (*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, + int (*cb) (SSL *, int *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); + +OSSL_DEPRECATEDIN_3_0 +int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, + BIGNUM *sa, BIGNUM *v, char *info); +OSSL_DEPRECATEDIN_3_0 +int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, + const char *grp); + +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_g(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_N(SSL *s); + +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_username(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_userinfo(SSL *s); +# endif +# endif + +/* + * ClientHello callback and helpers. + */ + +# define SSL_CLIENT_HELLO_SUCCESS 1 +# define SSL_CLIENT_HELLO_ERROR 0 +# define SSL_CLIENT_HELLO_RETRY (-1) + +typedef int (*SSL_client_hello_cb_fn) (SSL *s, int *al, void *arg); +void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb, + void *arg); +int SSL_client_hello_isv2(SSL *s); +unsigned int SSL_client_hello_get0_legacy_version(SSL *s); +size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_compression_methods(SSL *s, + const unsigned char **out); +int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen); +int SSL_client_hello_get0_ext(SSL *s, unsigned int type, + const unsigned char **out, size_t *outlen); + +void SSL_certs_clear(SSL *s); +void SSL_free(SSL *ssl); +# ifdef OSSL_ASYNC_FD +/* + * Windows application developer has to include windows.h to use these. + */ +__owur int SSL_waiting_for_async(SSL *s); +__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); +__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +__owur int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback); +__owur int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg); +__owur int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback); +__owur int SSL_set_async_callback_arg(SSL *s, void *arg); +__owur int SSL_get_async_status(SSL *s, int *status); + +# endif +__owur int SSL_accept(SSL *ssl); +__owur int SSL_stateless(SSL *s); +__owur int SSL_connect(SSL *ssl); +__owur int SSL_read(SSL *ssl, void *buf, int num); +__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); + +# define SSL_READ_EARLY_DATA_ERROR 0 +# define SSL_READ_EARLY_DATA_SUCCESS 1 +# define SSL_READ_EARLY_DATA_FINISH 2 + +__owur int SSL_read_early_data(SSL *s, void *buf, size_t num, + size_t *readbytes); +__owur int SSL_peek(SSL *ssl, void *buf, int num); +__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +__owur ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, + int flags); +__owur int SSL_write(SSL *ssl, const void *buf, int num); +__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); +__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, + size_t *written); +long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); +long SSL_callback_ctrl(SSL *, int, void (*)(void)); +long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); +long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); + +# define SSL_EARLY_DATA_NOT_SENT 0 +# define SSL_EARLY_DATA_REJECTED 1 +# define SSL_EARLY_DATA_ACCEPTED 2 + +__owur int SSL_get_early_data_status(const SSL *s); + +__owur int SSL_get_error(const SSL *s, int ret_code); +__owur const char *SSL_get_version(const SSL *s); + +/* This sets the 'default' SSL version that SSL_new() will create */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); +# endif + +# ifndef OPENSSL_NO_SSL3_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_client_method(void); +# endif +# endif + +#define SSLv23_method TLS_method +#define SSLv23_server_method TLS_server_method +#define SSLv23_client_method TLS_client_method + +/* Negotiate highest available SSL/TLS version */ +__owur const SSL_METHOD *TLS_method(void); +__owur const SSL_METHOD *TLS_server_method(void); +__owur const SSL_METHOD *TLS_client_method(void); + +# ifndef OPENSSL_NO_TLS1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_TLS1_1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_TLS1_2_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_DTLS1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_DTLS1_2_METHOD +/* DTLSv1.2 */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_client_method(void); +# endif +# endif + +__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ + +__owur size_t DTLS_get_data_mtu(const SSL *s); + +__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); +__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s); + +__owur int SSL_do_handshake(SSL *s); +int SSL_key_update(SSL *s, int updatetype); +int SSL_get_key_update_type(const SSL *s); +int SSL_renegotiate(SSL *s); +int SSL_renegotiate_abbreviated(SSL *s); +__owur int SSL_renegotiate_pending(const SSL *s); +int SSL_new_session_ticket(SSL *s); +int SSL_shutdown(SSL *s); +__owur int SSL_verify_client_post_handshake(SSL *s); +void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); +void SSL_set_post_handshake_auth(SSL *s, int val); + +__owur const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx); +__owur const SSL_METHOD *SSL_get_ssl_method(const SSL *s); +__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +__owur const char *SSL_alert_type_string_long(int value); +__owur const char *SSL_alert_type_string(int value); +__owur const char *SSL_alert_desc_string_long(int value); +__owur const char *SSL_alert_desc_string(int value); + +void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s); +__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx); +__owur int SSL_add1_to_CA_list(SSL *ssl, const X509 *x); +__owur int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x); +__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s); + +void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); +__owur int SSL_add_client_CA(SSL *ssl, X509 *x); +__owur int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); + +void SSL_set_connect_state(SSL *s); +void SSL_set_accept_state(SSL *s); + +__owur long SSL_get_default_timeout(const SSL *s); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_library_init() OPENSSL_init_ssl(0, NULL) +# endif + +__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); +__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk); + +__owur SSL *SSL_dup(SSL *ssl); + +__owur X509 *SSL_get_certificate(const SSL *ssl); +/* + * EVP_PKEY + */ +struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); + +__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); +__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); + +void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); +__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +void SSL_set_quiet_shutdown(SSL *ssl, int mode); +__owur int SSL_get_quiet_shutdown(const SSL *ssl); +void SSL_set_shutdown(SSL *ssl, int mode); +__owur int SSL_get_shutdown(const SSL *ssl); +__owur int SSL_version(const SSL *ssl); +__owur int SSL_client_version(const SSL *s); +__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_store(SSL_CTX *ctx); +__owur int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile); +__owur int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath); +__owur int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore); +__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, + const char *CAfile, + const char *CApath); +# define SSL_get0_session SSL_get_session/* just peek at pointer */ +__owur SSL_SESSION *SSL_get_session(const SSL *ssl); +__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ +__owur SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); +SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); +void SSL_set_info_callback(SSL *ssl, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, + int val); +__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); + +void SSL_set_verify_result(SSL *ssl, long v); +__owur long SSL_get_verify_result(const SSL *ssl); +__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s); + +__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *sess, + unsigned char *out, size_t outlen); +__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess, + const unsigned char *in, size_t len); +uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *sess); + +#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) +__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data); +void *SSL_get_ex_data(const SSL *ssl, int idx); +#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef) +__owur int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); +void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); +#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef) +__owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); +void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); + +__owur int SSL_get_ex_data_X509_STORE_CTX_idx(void); + +# define SSL_CTX_sess_set_cache_size(ctx,t) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) +# define SSL_CTX_sess_get_cache_size(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) +# define SSL_CTX_set_session_cache_mode(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) +# define SSL_CTX_get_session_cache_mode(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) + +# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) +# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) +# define SSL_CTX_get_read_ahead(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) +# define SSL_CTX_set_read_ahead(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) +# define SSL_CTX_get_max_cert_list(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_CTX_set_max_cert_list(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) +# define SSL_get_max_cert_list(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_set_max_cert_list(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) + +# define SSL_CTX_set_max_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_set_max_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_split_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_set_split_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_max_pipelines(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_max_pipelines(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_retry_verify(ssl) \ + (SSL_ctrl(ssl,SSL_CTRL_SET_RETRY_VERIFY,0,NULL) > 0) + +void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); +void SSL_set_default_read_buffer_len(SSL *s, size_t len); + +# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* NB: the |keylength| is only applicable when is_export is true */ +OSSL_DEPRECATEDIN_3_0 +void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +OSSL_DEPRECATEDIN_3_0 +void SSL_set_tmp_dh_callback(SSL *ssl, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +# endif +# endif + +__owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); +__owur const COMP_METHOD *SSL_get_current_expansion(const SSL *s); +__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp); +__owur const char *SSL_COMP_get0_name(const SSL_COMP *comp); +__owur int SSL_COMP_get_id(const SSL_COMP *comp); +STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) + *meths); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_COMP_free_compression_methods() while(0) continue +# endif +__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); + +const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); +int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); +int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); +int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len, + int isv2format, STACK_OF(SSL_CIPHER) **sk, + STACK_OF(SSL_CIPHER) **scsvs); + +/* TLS extensions functions */ +__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); + +__owur int SSL_set_session_ticket_ext_cb(SSL *s, + tls_session_ticket_ext_cb_fn cb, + void *arg); + +/* Pre-shared secret session resumption functions */ +__owur int SSL_set_session_secret_cb(SSL *s, + tls_session_secret_cb_fn session_secret_cb, + void *arg); + +void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, + int (*cb) (SSL *ssl, + int + is_forward_secure)); + +void SSL_set_not_resumable_session_callback(SSL *ssl, + int (*cb) (SSL *ssl, + int is_forward_secure)); + +void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); +void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); +int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); + +int SSL_set_record_padding_callback(SSL *ssl, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); +void *SSL_get_record_padding_callback_arg(const SSL *ssl); +int SSL_set_block_padding(SSL *ssl, size_t block_size); + +int SSL_set_num_tickets(SSL *s, size_t num_tickets); +size_t SSL_get_num_tickets(const SSL *s); +int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); +size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_cache_hit(s) SSL_session_reused(s) +# endif + +__owur int SSL_session_reused(const SSL *s); +__owur int SSL_is_server(const SSL *s); + +__owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void); +int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); +void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); +unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); +__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, + unsigned int flags); +__owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); + +void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); +void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); + +__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); +__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); +__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); + +void SSL_add_ssl_module(void); +int SSL_config(SSL *s, const char *name); +int SSL_CTX_config(SSL_CTX *ctx, const char *name); + +# ifndef OPENSSL_NO_SSL_TRACE +void SSL_trace(int write_p, int version, int content_type, + const void *buf, size_t len, SSL *ssl, void *arg); +# endif + +# ifndef OPENSSL_NO_SOCK +int DTLSv1_listen(SSL *s, BIO_ADDR *client); +# endif + +# ifndef OPENSSL_NO_CT + +/* + * A callback for verifying that the received SCTs are sufficient. + * Expected to return 1 if they are sufficient, otherwise 0. + * May return a negative integer if an error occurs. + * A connection should be aborted if the SCTs are deemed insufficient. + */ +typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, + const STACK_OF(SCT) *scts, void *arg); + +/* + * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate + * the received SCTs. + * If the callback returns a non-positive result, the connection is terminated. + * Call this function before beginning a handshake. + * If a NULL |callback| is provided, SCT validation is disabled. + * |arg| is arbitrary userdata that will be passed to the callback whenever it + * is invoked. Ownership of |arg| remains with the caller. + * + * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response + * will be requested. + */ +int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback, + void *arg); +int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, + ssl_ct_validation_cb callback, + void *arg); +#define SSL_disable_ct(s) \ + ((void) SSL_set_validation_callback((s), NULL, NULL)) +#define SSL_CTX_disable_ct(ctx) \ + ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL)) + +/* + * The validation type enumerates the available behaviours of the built-in SSL + * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct(). + * The underlying callback is a static function in libssl. + */ +enum { + SSL_CT_VALIDATION_PERMISSIVE = 0, + SSL_CT_VALIDATION_STRICT +}; + +/* + * Enable CT by setting up a callback that implements one of the built-in + * validation variants. The SSL_CT_VALIDATION_PERMISSIVE variant always + * continues the handshake, the application can make appropriate decisions at + * handshake completion. The SSL_CT_VALIDATION_STRICT variant requires at + * least one valid SCT, or else handshake termination will be requested. The + * handshake may continue anyway if SSL_VERIFY_NONE is in effect. + */ +int SSL_enable_ct(SSL *s, int validation_mode); +int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode); + +/* + * Report whether a non-NULL callback is enabled. + */ +int SSL_ct_is_enabled(const SSL *s); +int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx); + +/* Gets the SCTs received from a connection */ +const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s); + +/* + * Loads the CT log list from the default location. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx); + +/* + * Loads the CT log list from the specified file path. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path); + +/* + * Sets the CT log list used by all SSL connections created from this SSL_CTX. + * Ownership of the CTLOG_STORE is transferred to the SSL_CTX. + */ +void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs); + +/* + * Gets the CT log list used by all SSL connections created from this SSL_CTX. + * This will be NULL unless one of the following functions has been called: + * - SSL_CTX_set_default_ctlog_list_file + * - SSL_CTX_set_ctlog_list_file + * - SSL_CTX_set_ctlog_store + */ +const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx); + +# endif /* OPENSSL_NO_CT */ + +/* What the "other" parameter contains in security callback */ +/* Mask for type */ +# define SSL_SECOP_OTHER_TYPE 0xffff0000 +# define SSL_SECOP_OTHER_NONE 0 +# define SSL_SECOP_OTHER_CIPHER (1 << 16) +# define SSL_SECOP_OTHER_CURVE (2 << 16) +# define SSL_SECOP_OTHER_DH (3 << 16) +# define SSL_SECOP_OTHER_PKEY (4 << 16) +# define SSL_SECOP_OTHER_SIGALG (5 << 16) +# define SSL_SECOP_OTHER_CERT (6 << 16) + +/* Indicated operation refers to peer key or certificate */ +# define SSL_SECOP_PEER 0x1000 + +/* Values for "op" parameter in security callback */ + +/* Called to filter ciphers */ +/* Ciphers client supports */ +# define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER) +/* Cipher shared by client/server */ +# define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER) +/* Sanity check of cipher server selects */ +# define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER) +/* Curves supported by client */ +# define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE) +/* Curves shared by client/server */ +# define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE) +/* Sanity check of curve server selects */ +# define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE) +/* Temporary DH key */ +# define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_PKEY) +/* SSL/TLS version */ +# define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE) +/* Session tickets */ +# define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE) +/* Supported signature algorithms sent to peer */ +# define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG) +/* Shared signature algorithm */ +# define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG) +/* Sanity check signature algorithm allowed */ +# define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG) +/* Used to get mask of supported public key signature algorithms */ +# define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG) +/* Use to see if compression is allowed */ +# define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE) +/* EE key in certificate */ +# define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT) +/* CA key in certificate */ +# define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT) +/* CA digest algorithm in certificate */ +# define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT) +/* Peer EE key in certificate */ +# define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER) +/* Peer CA key in certificate */ +# define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER) +/* Peer CA digest algorithm in certificate */ +# define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER) + +void SSL_set_security_level(SSL *s, int level); +__owur int SSL_get_security_level(const SSL *s); +void SSL_set_security_callback(SSL *s, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, + const SSL_CTX *ctx, int op, + int bits, int nid, void *other, + void *ex); +void SSL_set0_security_ex_data(SSL *s, void *ex); +__owur void *SSL_get0_security_ex_data(const SSL *s); + +void SSL_CTX_set_security_level(SSL_CTX *ctx, int level); +__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx); +void SSL_CTX_set_security_callback(SSL_CTX *ctx, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s, + const SSL_CTX *ctx, + int op, int bits, + int nid, + void *other, + void *ex); +void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex); +__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx); + +/* OPENSSL_INIT flag 0x010000 reserved for internal use */ +# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L +# define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L + +# define OPENSSL_INIT_SSL_DEFAULT \ + (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS) + +int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); + +# ifndef OPENSSL_NO_UNIT_TEST +__owur const struct openssl_ssl_test_functions *SSL_test_functions(void); +# endif + +__owur int SSL_free_buffers(SSL *ssl); +__owur int SSL_alloc_buffers(SSL *ssl); + +/* Status codes passed to the decrypt session ticket callback. Some of these + * are for internal use only and are never passed to the callback. */ +typedef int SSL_TICKET_STATUS; + +/* Support for ticket appdata */ +/* fatal error, malloc failure */ +# define SSL_TICKET_FATAL_ERR_MALLOC 0 +/* fatal error, either from parsing or decrypting the ticket */ +# define SSL_TICKET_FATAL_ERR_OTHER 1 +/* No ticket present */ +# define SSL_TICKET_NONE 2 +/* Empty ticket present */ +# define SSL_TICKET_EMPTY 3 +/* the ticket couldn't be decrypted */ +# define SSL_TICKET_NO_DECRYPT 4 +/* a ticket was successfully decrypted */ +# define SSL_TICKET_SUCCESS 5 +/* same as above but the ticket needs to be renewed */ +# define SSL_TICKET_SUCCESS_RENEW 6 + +/* Return codes for the decrypt session ticket callback */ +typedef int SSL_TICKET_RETURN; + +/* An error occurred */ +#define SSL_TICKET_RETURN_ABORT 0 +/* Do not use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE 1 +/* Do not use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE_RENEW 2 +/* Use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE 3 +/* Use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE_RENEW 4 + +typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg); +typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss, + const unsigned char *keyname, + size_t keyname_length, + SSL_TICKET_STATUS status, + void *arg); +int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, + SSL_CTX_generate_session_ticket_fn gen_cb, + SSL_CTX_decrypt_session_ticket_fn dec_cb, + void *arg); +int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); +int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); + +typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); + +void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); + + +typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg); +void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx, + SSL_allow_early_data_cb_fn cb, + void *arg); +void SSL_set_allow_early_data_cb(SSL *s, + SSL_allow_early_data_cb_fn cb, + void *arg); + +/* store the default cipher strings inside the library */ +const char *OSSL_default_cipher_list(void); +const char *OSSL_default_ciphersuites(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl2.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl2.h index 5321bd27..428ead05 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl2.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl2.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL2_H -# define HEADER_SSL2_H +#ifndef OPENSSL_SSL2_H +# define OPENSSL_SSL2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL2_H +# endif #ifdef __cplusplus extern "C" { diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl3.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl3.h index 07effba2..49bd51f2 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl3.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl3.h @@ -1,15 +1,21 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL3_H -# define HEADER_SSL3_H +#ifndef OPENSSL_SSL3_H +# define OPENSSL_SSL3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL3_H +# endif # include # include @@ -206,7 +212,7 @@ extern "C" { # define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" # define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" -# define SSL3_VERSION 0x0300 +/* SSL3_VERSION is defined in prov_ssl.h */ # define SSL3_VERSION_MAJOR 0x03 # define SSL3_VERSION_MINOR 0x00 @@ -214,7 +220,6 @@ extern "C" { # define SSL3_RT_ALERT 21 # define SSL3_RT_HANDSHAKE 22 # define SSL3_RT_APPLICATION_DATA 23 -# define DTLS1_RT_HEARTBEAT 24 /* Pseudo content types to indicate additional parameters */ # define TLS1_RT_CRYPTO 0x1000 @@ -265,7 +270,7 @@ extern "C" { * SSL3_CT_NUMBER is used to size arrays and it must be large enough to * contain all of the cert types defined for *either* SSLv3 and TLSv1. */ -# define SSL3_CT_NUMBER 10 +# define SSL3_CT_NUMBER 12 # if defined(TLS_CT_NUMBER) # if TLS_CT_NUMBER != SSL3_CT_NUMBER diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr.h index 701d61c6..f1882558 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr.h @@ -1,456 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSLERR_H -# define HEADER_SSLERR_H +#ifndef OPENSSL_SSLERR_H +# define OPENSSL_SSLERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_SSL_strings(void); -/* - * SSL function codes. - */ -# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 438 -# define SSL_F_ADD_KEY_SHARE 512 -# define SSL_F_BYTES_TO_CIPHER_LIST 519 -# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 -# define SSL_F_CIPHERSUITE_CB 622 -# define SSL_F_CONSTRUCT_CA_NAMES 552 -# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 553 -# define SSL_F_CONSTRUCT_STATEFUL_TICKET 636 -# define SSL_F_CONSTRUCT_STATELESS_TICKET 637 -# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 539 -# define SSL_F_CREATE_TICKET_PREQUEL 638 -# define SSL_F_CT_MOVE_SCTS 345 -# define SSL_F_CT_STRICT 349 -# define SSL_F_CUSTOM_EXT_ADD 554 -# define SSL_F_CUSTOM_EXT_PARSE 555 -# define SSL_F_D2I_SSL_SESSION 103 -# define SSL_F_DANE_CTX_ENABLE 347 -# define SSL_F_DANE_MTYPE_SET 393 -# define SSL_F_DANE_TLSA_ADD 394 -# define SSL_F_DERIVE_SECRET_KEY_AND_IV 514 -# define SSL_F_DO_DTLS1_WRITE 245 -# define SSL_F_DO_SSL3_WRITE 104 -# define SSL_F_DTLS1_BUFFER_RECORD 247 -# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 -# define SSL_F_DTLS1_HEARTBEAT 305 -# define SSL_F_DTLS1_HM_FRAGMENT_NEW 623 -# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 -# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 -# define SSL_F_DTLS1_PROCESS_RECORD 257 -# define SSL_F_DTLS1_READ_BYTES 258 -# define SSL_F_DTLS1_READ_FAILED 339 -# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 -# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 -# define SSL_F_DTLS1_WRITE_BYTES 545 -# define SSL_F_DTLSV1_LISTEN 350 -# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 -# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 -# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 -# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 -# define SSL_F_DTLS_RECORD_LAYER_NEW 635 -# define SSL_F_DTLS_WAIT_FOR_DRY 592 -# define SSL_F_EARLY_DATA_COUNT_OK 532 -# define SSL_F_FINAL_EARLY_DATA 556 -# define SSL_F_FINAL_EC_PT_FORMATS 485 -# define SSL_F_FINAL_EMS 486 -# define SSL_F_FINAL_KEY_SHARE 503 -# define SSL_F_FINAL_MAXFRAGMENTLEN 557 -# define SSL_F_FINAL_PSK 639 -# define SSL_F_FINAL_RENEGOTIATE 483 -# define SSL_F_FINAL_SERVER_NAME 558 -# define SSL_F_FINAL_SIG_ALGS 497 -# define SSL_F_GET_CERT_VERIFY_TBS_DATA 588 -# define SSL_F_NSS_KEYLOG_INT 500 -# define SSL_F_OPENSSL_INIT_SSL 342 -# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 436 -# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 598 -# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 430 -# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 593 -# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 594 -# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 -# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 599 -# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 437 -# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 600 -# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 431 -# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 601 -# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 602 -# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 640 -# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 603 -# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 -# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 604 -# define SSL_F_PARSE_CA_NAMES 541 -# define SSL_F_PITEM_NEW 624 -# define SSL_F_PQUEUE_NEW 625 -# define SSL_F_PROCESS_KEY_SHARE_EXT 439 -# define SSL_F_READ_STATE_MACHINE 352 -# define SSL_F_SET_CLIENT_CIPHERSUITE 540 -# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 595 -# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 589 -# define SSL_F_SRP_VERIFY_SERVER_PARAM 596 -# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 -# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 -# define SSL_F_SSL3_CTRL 213 -# define SSL_F_SSL3_CTX_CTRL 133 -# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 -# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 -# define SSL_F_SSL3_ENC 608 -# define SSL_F_SSL3_FINAL_FINISH_MAC 285 -# define SSL_F_SSL3_FINISH_MAC 587 -# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 -# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 -# define SSL_F_SSL3_GET_RECORD 143 -# define SSL_F_SSL3_INIT_FINISHED_MAC 397 -# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 -# define SSL_F_SSL3_READ_BYTES 148 -# define SSL_F_SSL3_READ_N 149 -# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 -# define SSL_F_SSL3_SETUP_READ_BUFFER 156 -# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 -# define SSL_F_SSL3_WRITE_BYTES 158 -# define SSL_F_SSL3_WRITE_PENDING 159 -# define SSL_F_SSL_ADD_CERT_CHAIN 316 -# define SSL_F_SSL_ADD_CERT_TO_BUF 319 -# define SSL_F_SSL_ADD_CERT_TO_WPACKET 493 -# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 -# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 -# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 -# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 -# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 -# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 -# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 -# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 -# define SSL_F_SSL_BAD_METHOD 160 -# define SSL_F_SSL_BUILD_CERT_CHAIN 332 -# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 -# define SSL_F_SSL_CACHE_CIPHERLIST 520 -# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 346 -# define SSL_F_SSL_CERT_DUP 221 -# define SSL_F_SSL_CERT_NEW 162 -# define SSL_F_SSL_CERT_SET0_CHAIN 340 -# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 -# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 -# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 606 -# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 -# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 607 -# define SSL_F_SSL_CIPHER_DESCRIPTION 626 -# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 425 -# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 -# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 -# define SSL_F_SSL_CLEAR 164 -# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 627 -# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 -# define SSL_F_SSL_CONF_CMD 334 -# define SSL_F_SSL_CREATE_CIPHER_LIST 166 -# define SSL_F_SSL_CTRL 232 -# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 -# define SSL_F_SSL_CTX_ENABLE_CT 398 -# define SSL_F_SSL_CTX_MAKE_PROFILES 309 -# define SSL_F_SSL_CTX_NEW 169 -# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 -# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 -# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 -# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 396 -# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 -# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 -# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 551 -# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 -# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 -# define SSL_F_SSL_CTX_USE_SERVERINFO 336 -# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 543 -# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 -# define SSL_F_SSL_DANE_DUP 403 -# define SSL_F_SSL_DANE_ENABLE 395 -# define SSL_F_SSL_DERIVE 590 -# define SSL_F_SSL_DO_CONFIG 391 -# define SSL_F_SSL_DO_HANDSHAKE 180 -# define SSL_F_SSL_DUP_CA_LIST 408 -# define SSL_F_SSL_ENABLE_CT 402 -# define SSL_F_SSL_GENERATE_PKEY_GROUP 559 -# define SSL_F_SSL_GENERATE_SESSION_ID 547 -# define SSL_F_SSL_GET_NEW_SESSION 181 -# define SSL_F_SSL_GET_PREV_SESSION 217 -# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 -# define SSL_F_SSL_GET_SIGN_PKEY 183 -# define SSL_F_SSL_HANDSHAKE_HASH 560 -# define SSL_F_SSL_INIT_WBIO_BUFFER 184 -# define SSL_F_SSL_KEY_UPDATE 515 -# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 -# define SSL_F_SSL_LOG_MASTER_SECRET 498 -# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 499 -# define SSL_F_SSL_MODULE_INIT 392 -# define SSL_F_SSL_NEW 186 -# define SSL_F_SSL_NEXT_PROTO_VALIDATE 565 -# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 -# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 -# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 -# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 -# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 -# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 -# define SSL_F_SSL_PEEK 270 -# define SSL_F_SSL_PEEK_EX 432 -# define SSL_F_SSL_PEEK_INTERNAL 522 -# define SSL_F_SSL_READ 223 -# define SSL_F_SSL_READ_EARLY_DATA 529 -# define SSL_F_SSL_READ_EX 434 -# define SSL_F_SSL_READ_INTERNAL 523 -# define SSL_F_SSL_RENEGOTIATE 516 -# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 546 -# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 -# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 -# define SSL_F_SSL_SESSION_DUP 348 -# define SSL_F_SSL_SESSION_NEW 189 -# define SSL_F_SSL_SESSION_PRINT_FP 190 -# define SSL_F_SSL_SESSION_SET1_ID 423 -# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 -# define SSL_F_SSL_SET_ALPN_PROTOS 344 -# define SSL_F_SSL_SET_CERT 191 -# define SSL_F_SSL_SET_CERT_AND_KEY 621 -# define SSL_F_SSL_SET_CIPHER_LIST 271 -# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 -# define SSL_F_SSL_SET_FD 192 -# define SSL_F_SSL_SET_PKEY 193 -# define SSL_F_SSL_SET_RFD 194 -# define SSL_F_SSL_SET_SESSION 195 -# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 -# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 -# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 550 -# define SSL_F_SSL_SET_WFD 196 -# define SSL_F_SSL_SHUTDOWN 224 -# define SSL_F_SSL_SRP_CTX_INIT 313 -# define SSL_F_SSL_START_ASYNC_JOB 389 -# define SSL_F_SSL_UNDEFINED_FUNCTION 197 -# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 -# define SSL_F_SSL_USE_CERTIFICATE 198 -# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 -# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 -# define SSL_F_SSL_USE_PRIVATEKEY 201 -# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 -# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 -# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 -# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 -# define SSL_F_SSL_VALIDATE_CT 400 -# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 -# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 616 -# define SSL_F_SSL_WRITE 208 -# define SSL_F_SSL_WRITE_EARLY_DATA 526 -# define SSL_F_SSL_WRITE_EARLY_FINISH 527 -# define SSL_F_SSL_WRITE_EX 433 -# define SSL_F_SSL_WRITE_INTERNAL 524 -# define SSL_F_STATE_MACHINE 353 -# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 -# define SSL_F_TLS12_COPY_SIGALGS 533 -# define SSL_F_TLS13_CHANGE_CIPHER_STATE 440 -# define SSL_F_TLS13_ENC 609 -# define SSL_F_TLS13_FINAL_FINISH_MAC 605 -# define SSL_F_TLS13_GENERATE_SECRET 591 -# define SSL_F_TLS13_HKDF_EXPAND 561 -# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 617 -# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 618 -# define SSL_F_TLS13_SETUP_KEY_BLOCK 441 -# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 -# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 -# define SSL_F_TLS1_ENC 401 -# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 -# define SSL_F_TLS1_GET_CURVELIST 338 -# define SSL_F_TLS1_PRF 284 -# define SSL_F_TLS1_SAVE_U16 628 -# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 -# define SSL_F_TLS1_SET_GROUPS 629 -# define SSL_F_TLS1_SET_RAW_SIGALGS 630 -# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 -# define SSL_F_TLS1_SET_SHARED_SIGALGS 631 -# define SSL_F_TLS1_SET_SIGALGS 632 -# define SSL_F_TLS_CHOOSE_SIGALG 513 -# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 -# define SSL_F_TLS_COLLECT_EXTENSIONS 435 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 542 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 429 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 494 -# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 496 -# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 427 -# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 -# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 -# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 -# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 -# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 -# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 -# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 484 -# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 487 -# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 488 -# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 489 -# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 466 -# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 355 -# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 535 -# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 530 -# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 467 -# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 468 -# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 469 -# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 356 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 357 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 470 -# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 549 -# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 471 -# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 472 -# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 619 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 501 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 509 -# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 473 -# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 474 -# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 475 -# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 476 -# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 477 -# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 478 -# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 479 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 480 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 481 -# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 482 -# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 358 -# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 443 -# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 536 -# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 447 -# define SSL_F_TLS_CONSTRUCT_FINISHED 359 -# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 -# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 510 -# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 517 -# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 -# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 426 -# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 490 -# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 491 -# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 492 -# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 451 -# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 374 -# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 613 -# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 452 -# define SSL_F_TLS_CONSTRUCT_STOC_DONE 375 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 531 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 525 -# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 453 -# define SSL_F_TLS_CONSTRUCT_STOC_EMS 454 -# define SSL_F_TLS_CONSTRUCT_STOC_ETM 455 -# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 376 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 377 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 456 -# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 548 -# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 457 -# define SSL_F_TLS_CONSTRUCT_STOC_PSK 504 -# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 458 -# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 459 -# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 460 -# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 461 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 544 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 611 -# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 462 -# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 521 -# define SSL_F_TLS_FINISH_HANDSHAKE 597 -# define SSL_F_TLS_GET_MESSAGE_BODY 351 -# define SSL_F_TLS_GET_MESSAGE_HEADER 387 -# define SSL_F_TLS_HANDLE_ALPN 562 -# define SSL_F_TLS_HANDLE_STATUS_REQUEST 563 -# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 566 -# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 449 -# define SSL_F_TLS_PARSE_CTOS_ALPN 567 -# define SSL_F_TLS_PARSE_CTOS_COOKIE 614 -# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 568 -# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 569 -# define SSL_F_TLS_PARSE_CTOS_EMS 570 -# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 463 -# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 571 -# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 620 -# define SSL_F_TLS_PARSE_CTOS_PSK 505 -# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 572 -# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 464 -# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 573 -# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 574 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 575 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 615 -# define SSL_F_TLS_PARSE_CTOS_SRP 576 -# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 577 -# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 578 -# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 465 -# define SSL_F_TLS_PARSE_STOC_ALPN 579 -# define SSL_F_TLS_PARSE_STOC_COOKIE 534 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 538 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 528 -# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 580 -# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 445 -# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 581 -# define SSL_F_TLS_PARSE_STOC_NPN 582 -# define SSL_F_TLS_PARSE_STOC_PSK 502 -# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 448 -# define SSL_F_TLS_PARSE_STOC_SCT 564 -# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 583 -# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 584 -# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 585 -# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 612 -# define SSL_F_TLS_PARSE_STOC_USE_SRTP 446 -# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 -# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 -# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 -# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 610 -# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 -# define SSL_F_TLS_PROCESS_CERT_STATUS 362 -# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 495 -# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 -# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 -# define SSL_F_TLS_PROCESS_CKE_DHE 411 -# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 -# define SSL_F_TLS_PROCESS_CKE_GOST 413 -# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 -# define SSL_F_TLS_PROCESS_CKE_RSA 415 -# define SSL_F_TLS_PROCESS_CKE_SRP 416 -# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 -# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 -# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 -# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 444 -# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 537 -# define SSL_F_TLS_PROCESS_FINISHED 364 -# define SSL_F_TLS_PROCESS_HELLO_REQ 507 -# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 511 -# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 442 -# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 -# define SSL_F_TLS_PROCESS_KEY_UPDATE 518 -# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 -# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 -# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 -# define SSL_F_TLS_PROCESS_SERVER_DONE 368 -# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 -# define SSL_F_TLS_PROCESS_SKE_DHE 419 -# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 -# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 -# define SSL_F_TLS_PROCESS_SKE_SRP 422 -# define SSL_F_TLS_PSK_DO_BINDER 506 -# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 450 -# define SSL_F_TLS_SETUP_HANDSHAKE 508 -# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 -# define SSL_F_WPACKET_INTERN_INIT_LEN 633 -# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 634 -# define SSL_F_WRITE_STATE_MACHINE 586 /* * SSL reason codes. @@ -458,7 +24,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY 291 # define SSL_R_APP_DATA_IN_HANDSHAKE 100 # define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 -# define SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE 143 # define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 # define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 # define SSL_R_BAD_CIPHER 186 @@ -500,6 +65,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_BN_LIB 130 # define SSL_R_CALLBACK_FAILED 234 # define SSL_R_CANNOT_CHANGE_CIPHER 109 +# define SSL_R_CANNOT_GET_GROUP_NAME 299 # define SSL_R_CA_DN_LENGTH_MISMATCH 131 # define SSL_R_CA_KEY_TOO_SMALL 397 # define SSL_R_CA_MD_TOO_WEAK 398 @@ -509,7 +75,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_CERT_LENGTH_MISMATCH 135 # define SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED 218 # define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 -# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 # define SSL_R_CLIENTHELLO_TLSEXT 226 # define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 # define SSL_R_COMPRESSION_DISABLED 343 @@ -520,6 +85,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 # define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 # define SSL_R_COOKIE_MISMATCH 308 +# define SSL_R_COPY_PARAMETERS_FAILED 296 # define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 # define SSL_R_DANE_ALREADY_ENABLED 172 # define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 @@ -584,6 +150,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_INVALID_SRP_USERNAME 357 # define SSL_R_INVALID_STATUS_RESPONSE 328 # define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 +# define SSL_R_LEGACY_SIGALG_DISALLOWED_OR_UNSUPPORTED 333 # define SSL_R_LENGTH_MISMATCH 159 # define SSL_R_LENGTH_TOO_LONG 404 # define SSL_R_LENGTH_TOO_SHORT 160 @@ -629,13 +196,15 @@ int ERR_load_SSL_strings(void); # define SSL_R_NO_SHARED_GROUPS 410 # define SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS 376 # define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_SUITABLE_DIGEST_ALGORITHM 297 +# define SSL_R_NO_SUITABLE_GROUPS 295 # define SSL_R_NO_SUITABLE_KEY_SHARE 101 # define SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM 118 # define SSL_R_NO_VALID_SCTS 216 # define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 # define SSL_R_NULL_SSL_CTX 195 # define SSL_R_NULL_SSL_METHOD_PASSED 196 -# define SSL_R_OCSP_CALLBACK_FAILURE 294 +# define SSL_R_OCSP_CALLBACK_FAILURE 305 # define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 # define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 # define SSL_R_OVERFLOW_ERROR 237 @@ -724,8 +293,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 # define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 # define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 -# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 -# define SSL_R_TLS_HEARTBEAT_PENDING 366 # define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 # define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 # define SSL_R_TOO_MANY_KEY_UPDATES 132 @@ -737,6 +304,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 # define SSL_R_UNEXPECTED_CCS_MESSAGE 262 # define SSL_R_UNEXPECTED_END_OF_EARLY_DATA 178 +# define SSL_R_UNEXPECTED_EOF_WHILE_READING 294 # define SSL_R_UNEXPECTED_MESSAGE 244 # define SSL_R_UNEXPECTED_RECORD 245 # define SSL_R_UNINITIALIZED 276 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr_legacy.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr_legacy.h new file mode 100644 index 00000000..ccf6d3b3 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr_legacy.h @@ -0,0 +1,468 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file preserves symbols from pre-3.0 OpenSSL. + * It should never be included directly, as it's already included + * by the public sslerr.h headers, and since it will go away some + * time in the future. + */ + +#ifndef OPENSSL_SSLERR_LEGACY_H +# define OPENSSL_SSLERR_LEGACY_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ERR_load_SSL_strings(void); + +/* Collected _F_ macros from OpenSSL 1.1.1 */ + +/* + * SSL function codes. + */ +# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 0 +# define SSL_F_ADD_KEY_SHARE 0 +# define SSL_F_BYTES_TO_CIPHER_LIST 0 +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 0 +# define SSL_F_CIPHERSUITE_CB 0 +# define SSL_F_CONSTRUCT_CA_NAMES 0 +# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 0 +# define SSL_F_CONSTRUCT_STATEFUL_TICKET 0 +# define SSL_F_CONSTRUCT_STATELESS_TICKET 0 +# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 0 +# define SSL_F_CREATE_TICKET_PREQUEL 0 +# define SSL_F_CT_MOVE_SCTS 0 +# define SSL_F_CT_STRICT 0 +# define SSL_F_CUSTOM_EXT_ADD 0 +# define SSL_F_CUSTOM_EXT_PARSE 0 +# define SSL_F_D2I_SSL_SESSION 0 +# define SSL_F_DANE_CTX_ENABLE 0 +# define SSL_F_DANE_MTYPE_SET 0 +# define SSL_F_DANE_TLSA_ADD 0 +# define SSL_F_DERIVE_SECRET_KEY_AND_IV 0 +# define SSL_F_DO_DTLS1_WRITE 0 +# define SSL_F_DO_SSL3_WRITE 0 +# define SSL_F_DTLS1_BUFFER_RECORD 0 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 0 +# define SSL_F_DTLS1_HEARTBEAT 0 +# define SSL_F_DTLS1_HM_FRAGMENT_NEW 0 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 0 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 0 +# define SSL_F_DTLS1_PROCESS_RECORD 0 +# define SSL_F_DTLS1_READ_BYTES 0 +# define SSL_F_DTLS1_READ_FAILED 0 +# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 0 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 0 +# define SSL_F_DTLS1_WRITE_BYTES 0 +# define SSL_F_DTLSV1_LISTEN 0 +# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 0 +# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 0 +# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 0 +# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 0 +# define SSL_F_DTLS_RECORD_LAYER_NEW 0 +# define SSL_F_DTLS_WAIT_FOR_DRY 0 +# define SSL_F_EARLY_DATA_COUNT_OK 0 +# define SSL_F_FINAL_EARLY_DATA 0 +# define SSL_F_FINAL_EC_PT_FORMATS 0 +# define SSL_F_FINAL_EMS 0 +# define SSL_F_FINAL_KEY_SHARE 0 +# define SSL_F_FINAL_MAXFRAGMENTLEN 0 +# define SSL_F_FINAL_RENEGOTIATE 0 +# define SSL_F_FINAL_SERVER_NAME 0 +# define SSL_F_FINAL_SIG_ALGS 0 +# define SSL_F_GET_CERT_VERIFY_TBS_DATA 0 +# define SSL_F_NSS_KEYLOG_INT 0 +# define SSL_F_OPENSSL_INIT_SSL 0 +# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 0 +# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 0 +# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 0 +# define SSL_F_PARSE_CA_NAMES 0 +# define SSL_F_PITEM_NEW 0 +# define SSL_F_PQUEUE_NEW 0 +# define SSL_F_PROCESS_KEY_SHARE_EXT 0 +# define SSL_F_READ_STATE_MACHINE 0 +# define SSL_F_SET_CLIENT_CIPHERSUITE 0 +# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 0 +# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 0 +# define SSL_F_SRP_VERIFY_SERVER_PARAM 0 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 0 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 0 +# define SSL_F_SSL3_CTRL 0 +# define SSL_F_SSL3_CTX_CTRL 0 +# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 0 +# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 0 +# define SSL_F_SSL3_ENC 0 +# define SSL_F_SSL3_FINAL_FINISH_MAC 0 +# define SSL_F_SSL3_FINISH_MAC 0 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 0 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 0 +# define SSL_F_SSL3_GET_RECORD 0 +# define SSL_F_SSL3_INIT_FINISHED_MAC 0 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 0 +# define SSL_F_SSL3_READ_BYTES 0 +# define SSL_F_SSL3_READ_N 0 +# define SSL_F_SSL3_SETUP_KEY_BLOCK 0 +# define SSL_F_SSL3_SETUP_READ_BUFFER 0 +# define SSL_F_SSL3_SETUP_WRITE_BUFFER 0 +# define SSL_F_SSL3_WRITE_BYTES 0 +# define SSL_F_SSL3_WRITE_PENDING 0 +# define SSL_F_SSL_ADD_CERT_CHAIN 0 +# define SSL_F_SSL_ADD_CERT_TO_BUF 0 +# define SSL_F_SSL_ADD_CERT_TO_WPACKET 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 0 +# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 0 +# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_BAD_METHOD 0 +# define SSL_F_SSL_BUILD_CERT_CHAIN 0 +# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 0 +# define SSL_F_SSL_CACHE_CIPHERLIST 0 +# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 0 +# define SSL_F_SSL_CERT_DUP 0 +# define SSL_F_SSL_CERT_NEW 0 +# define SSL_F_SSL_CERT_SET0_CHAIN 0 +# define SSL_F_SSL_CHECK_PRIVATE_KEY 0 +# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 0 +# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 0 +# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 0 +# define SSL_F_SSL_CIPHER_DESCRIPTION 0 +# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 0 +# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 0 +# define SSL_F_SSL_CIPHER_STRENGTH_SORT 0 +# define SSL_F_SSL_CLEAR 0 +# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 0 +# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 0 +# define SSL_F_SSL_CONF_CMD 0 +# define SSL_F_SSL_CREATE_CIPHER_LIST 0 +# define SSL_F_SSL_CTRL 0 +# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 0 +# define SSL_F_SSL_CTX_ENABLE_CT 0 +# define SSL_F_SSL_CTX_MAKE_PROFILES 0 +# define SSL_F_SSL_CTX_NEW 0 +# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 0 +# define SSL_F_SSL_CTX_SET_CIPHER_LIST 0 +# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 0 +# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 0 +# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 0 +# define SSL_F_SSL_CTX_SET_SSL_VERSION 0 +# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 0 +# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 0 +# define SSL_F_SSL_DANE_DUP 0 +# define SSL_F_SSL_DANE_ENABLE 0 +# define SSL_F_SSL_DERIVE 0 +# define SSL_F_SSL_DO_CONFIG 0 +# define SSL_F_SSL_DO_HANDSHAKE 0 +# define SSL_F_SSL_DUP_CA_LIST 0 +# define SSL_F_SSL_ENABLE_CT 0 +# define SSL_F_SSL_GENERATE_PKEY_GROUP 0 +# define SSL_F_SSL_GENERATE_SESSION_ID 0 +# define SSL_F_SSL_GET_NEW_SESSION 0 +# define SSL_F_SSL_GET_PREV_SESSION 0 +# define SSL_F_SSL_GET_SERVER_CERT_INDEX 0 +# define SSL_F_SSL_GET_SIGN_PKEY 0 +# define SSL_F_SSL_HANDSHAKE_HASH 0 +# define SSL_F_SSL_INIT_WBIO_BUFFER 0 +# define SSL_F_SSL_KEY_UPDATE 0 +# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 0 +# define SSL_F_SSL_LOG_MASTER_SECRET 0 +# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_SSL_MODULE_INIT 0 +# define SSL_F_SSL_NEW 0 +# define SSL_F_SSL_NEXT_PROTO_VALIDATE 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_PEEK 0 +# define SSL_F_SSL_PEEK_EX 0 +# define SSL_F_SSL_PEEK_INTERNAL 0 +# define SSL_F_SSL_READ 0 +# define SSL_F_SSL_READ_EARLY_DATA 0 +# define SSL_F_SSL_READ_EX 0 +# define SSL_F_SSL_READ_INTERNAL 0 +# define SSL_F_SSL_RENEGOTIATE 0 +# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 0 +# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_SESSION_DUP 0 +# define SSL_F_SSL_SESSION_NEW 0 +# define SSL_F_SSL_SESSION_PRINT_FP 0 +# define SSL_F_SSL_SESSION_SET1_ID 0 +# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 0 +# define SSL_F_SSL_SET_ALPN_PROTOS 0 +# define SSL_F_SSL_SET_CERT 0 +# define SSL_F_SSL_SET_CERT_AND_KEY 0 +# define SSL_F_SSL_SET_CIPHER_LIST 0 +# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 0 +# define SSL_F_SSL_SET_FD 0 +# define SSL_F_SSL_SET_PKEY 0 +# define SSL_F_SSL_SET_RFD 0 +# define SSL_F_SSL_SET_SESSION 0 +# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 0 +# define SSL_F_SSL_SET_SESSION_TICKET_EXT 0 +# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 0 +# define SSL_F_SSL_SET_WFD 0 +# define SSL_F_SSL_SHUTDOWN 0 +# define SSL_F_SSL_SRP_CTX_INIT 0 +# define SSL_F_SSL_START_ASYNC_JOB 0 +# define SSL_F_SSL_UNDEFINED_FUNCTION 0 +# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 0 +# define SSL_F_SSL_USE_CERTIFICATE 0 +# define SSL_F_SSL_USE_CERTIFICATE_ASN1 0 +# define SSL_F_SSL_USE_CERTIFICATE_FILE 0 +# define SSL_F_SSL_USE_PRIVATEKEY 0 +# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 0 +# define SSL_F_SSL_USE_PRIVATEKEY_FILE 0 +# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 0 +# define SSL_F_SSL_VALIDATE_CT 0 +# define SSL_F_SSL_VERIFY_CERT_CHAIN 0 +# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 0 +# define SSL_F_SSL_WRITE 0 +# define SSL_F_SSL_WRITE_EARLY_DATA 0 +# define SSL_F_SSL_WRITE_EARLY_FINISH 0 +# define SSL_F_SSL_WRITE_EX 0 +# define SSL_F_SSL_WRITE_INTERNAL 0 +# define SSL_F_STATE_MACHINE 0 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 0 +# define SSL_F_TLS12_COPY_SIGALGS 0 +# define SSL_F_TLS13_CHANGE_CIPHER_STATE 0 +# define SSL_F_TLS13_ENC 0 +# define SSL_F_TLS13_FINAL_FINISH_MAC 0 +# define SSL_F_TLS13_GENERATE_SECRET 0 +# define SSL_F_TLS13_HKDF_EXPAND 0 +# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 0 +# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 0 +# define SSL_F_TLS13_SETUP_KEY_BLOCK 0 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 0 +# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 0 +# define SSL_F_TLS1_ENC 0 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 0 +# define SSL_F_TLS1_GET_CURVELIST 0 +# define SSL_F_TLS1_PRF 0 +# define SSL_F_TLS1_SAVE_U16 0 +# define SSL_F_TLS1_SETUP_KEY_BLOCK 0 +# define SSL_F_TLS1_SET_GROUPS 0 +# define SSL_F_TLS1_SET_RAW_SIGALGS 0 +# define SSL_F_TLS1_SET_SERVER_SIGALGS 0 +# define SSL_F_TLS1_SET_SHARED_SIGALGS 0 +# define SSL_F_TLS1_SET_SIGALGS 0 +# define SSL_F_TLS_CHOOSE_SIGALG 0 +# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 0 +# define SSL_F_TLS_COLLECT_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 0 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 0 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 0 +# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 0 +# define SSL_F_TLS_CONSTRUCT_CKE_DHE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_GOST 0 +# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_RSA 0 +# define SSL_F_TLS_CONSTRUCT_CKE_SRP 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_FINISHED 0 +# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 0 +# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 0 +# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 0 +# define SSL_F_TLS_CONSTRUCT_STOC_DONE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EMS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_ETM 0 +# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 0 +# define SSL_F_TLS_CONSTRUCT_STOC_PSK 0 +# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 0 +# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_FINISH_HANDSHAKE 0 +# define SSL_F_TLS_GET_MESSAGE_BODY 0 +# define SSL_F_TLS_GET_MESSAGE_HEADER 0 +# define SSL_F_TLS_HANDLE_ALPN 0 +# define SSL_F_TLS_HANDLE_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 0 +# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 0 +# define SSL_F_TLS_PARSE_CTOS_ALPN 0 +# define SSL_F_TLS_PARSE_CTOS_COOKIE 0 +# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 0 +# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 0 +# define SSL_F_TLS_PARSE_CTOS_EMS 0 +# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 0 +# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 0 +# define SSL_F_TLS_PARSE_CTOS_PSK 0 +# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 0 +# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 0 +# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 0 +# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 0 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 0 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 0 +# define SSL_F_TLS_PARSE_CTOS_SRP 0 +# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 0 +# define SSL_F_TLS_PARSE_STOC_ALPN 0 +# define SSL_F_TLS_PARSE_STOC_COOKIE 0 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 0 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 0 +# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 0 +# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 0 +# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_PARSE_STOC_NPN 0 +# define SSL_F_TLS_PARSE_STOC_PSK 0 +# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 0 +# define SSL_F_TLS_PARSE_STOC_SCT 0 +# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 0 +# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 0 +# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_PARSE_STOC_USE_SRTP 0 +# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 0 +# define SSL_F_TLS_PROCESS_CERT_STATUS 0 +# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 0 +# define SSL_F_TLS_PROCESS_CERT_VERIFY 0 +# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 0 +# define SSL_F_TLS_PROCESS_CKE_DHE 0 +# define SSL_F_TLS_PROCESS_CKE_ECDHE 0 +# define SSL_F_TLS_PROCESS_CKE_GOST 0 +# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_PROCESS_CKE_RSA 0 +# define SSL_F_TLS_PROCESS_CKE_SRP 0 +# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 0 +# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 0 +# define SSL_F_TLS_PROCESS_FINISHED 0 +# define SSL_F_TLS_PROCESS_HELLO_REQ 0 +# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 0 +# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 0 +# define SSL_F_TLS_PROCESS_KEY_UPDATE 0 +# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 0 +# define SSL_F_TLS_PROCESS_NEXT_PROTO 0 +# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_SERVER_DONE 0 +# define SSL_F_TLS_PROCESS_SERVER_HELLO 0 +# define SSL_F_TLS_PROCESS_SKE_DHE 0 +# define SSL_F_TLS_PROCESS_SKE_ECDHE 0 +# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_PROCESS_SKE_SRP 0 +# define SSL_F_TLS_PSK_DO_BINDER 0 +# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 0 +# define SSL_F_TLS_SETUP_HANDSHAKE 0 +# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 0 +# define SSL_F_WPACKET_INTERN_INIT_LEN 0 +# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 0 +# define SSL_F_WRITE_STATE_MACHINE 0 +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/stack.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/stack.h index cfc07505..f0c5c547 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/stack.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/stack.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_STACK_H -# define HEADER_STACK_H +#ifndef OPENSSL_STACK_H +# define OPENSSL_STACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_STACK_H +# endif #ifdef __cplusplus extern "C" { @@ -39,6 +45,7 @@ void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc); void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p); int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data); int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_find_all(OPENSSL_STACK *st, const void *data, int *pnum); int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data); int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data); void *OPENSSL_sk_shift(OPENSSL_STACK *st); @@ -50,7 +57,7 @@ OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *st); void OPENSSL_sk_sort(OPENSSL_STACK *st); int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define _STACK OPENSSL_STACK # define sk_num OPENSSL_sk_num # define sk_value OPENSSL_sk_value diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/store.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/store.h index a40a7339..3c1445e0 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/store.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/store.h @@ -1,17 +1,23 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OSSL_STORE_H -# define HEADER_OSSL_STORE_H +#ifndef OPENSSL_STORE_H +# define OPENSSL_STORE_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OSSL_STORE_H +# endif # include -# include +# include # include # include @@ -46,10 +52,16 @@ typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, * Returns a context reference which represents the channel to communicate * through. */ -OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, - void *ui_data, - OSSL_STORE_post_process_info_fn post_process, - void *post_process_data); +OSSL_STORE_CTX * +OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, void *ui_data, + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); +OSSL_STORE_CTX * +OSSL_STORE_open_ex(const char *uri, OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data, + const OSSL_PARAM params[], + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); /* * Control / fine tune the OSSL_STORE channel. |cmd| determines what is to be @@ -57,8 +69,14 @@ OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, * determine which loader is used), except for common commands (see below). * Each command takes different arguments. */ -int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); -int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, + ... /* args */); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, + va_list args); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * Common ctrl commands that different loaders may choose to support. @@ -68,6 +86,8 @@ int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); /* Where custom commands start */ # define OSSL_STORE_C_CUSTOM_START 100 +# endif + /* * Read one data item (a key, a cert, a CRL) that is supported by the OSSL_STORE * functionality, given a context. @@ -96,6 +116,25 @@ int OSSL_STORE_error(OSSL_STORE_CTX *ctx); */ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); +/* + * Attach to a BIO. This works like OSSL_STORE_open() except it takes a + * BIO instead of a uri, along with a scheme to use when reading. + * The given UI method will be used any time the loader needs extra input, + * for example when a password or pin is needed, and will be passed the + * same user data every time it's needed in this context. + * + * Returns a context reference which represents the channel to communicate + * through. + * + * Note that this function is considered unsafe, all depending on what the + * BIO actually reads. + */ +OSSL_STORE_CTX *OSSL_STORE_attach(BIO *bio, const char *scheme, + OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data, + const OSSL_PARAM params[], + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); /*- * Extracting OpenSSL types from and creating new OSSL_STORE_INFOs @@ -109,9 +148,10 @@ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); */ # define OSSL_STORE_INFO_NAME 1 /* char * */ # define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ -# define OSSL_STORE_INFO_PKEY 3 /* EVP_PKEY * */ -# define OSSL_STORE_INFO_CERT 4 /* X509 * */ -# define OSSL_STORE_INFO_CRL 5 /* X509_CRL * */ +# define OSSL_STORE_INFO_PUBKEY 3 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_PKEY 4 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_CERT 5 /* X509 * */ +# define OSSL_STORE_INFO_CRL 6 /* X509_CRL * */ /* * Functions to generate OSSL_STORE_INFOs, one function for each type we @@ -120,9 +160,11 @@ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); * In all cases, ownership of the object is transferred to the OSSL_STORE_INFO * and will therefore be freed when the OSSL_STORE_INFO is freed. */ +OSSL_STORE_INFO *OSSL_STORE_INFO_new(int type, void *data); OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PUBKEY(EVP_PKEY *pubkey); OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); @@ -131,12 +173,15 @@ OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); * Functions to try to extract data from a OSSL_STORE_INFO. */ int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info); +void *OSSL_STORE_INFO_get0_data(int type, const OSSL_STORE_INFO *info); const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info); char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info); const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info); char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PUBKEY(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PUBKEY(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info); X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info); @@ -185,7 +230,7 @@ void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search); /* Search term accessors */ int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion); -X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion); +X509_NAME *OSSL_STORE_SEARCH_get0_name(const OSSL_STORE_SEARCH *criterion); const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH *criterion); const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH @@ -198,9 +243,35 @@ const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); * to the loading channel. This MUST happen before the first OSSL_STORE_load(). */ int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type); -int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); +int OSSL_STORE_find(OSSL_STORE_CTX *ctx, const OSSL_STORE_SEARCH *search); +/*- + * Function to fetch a loader and extract data from it + * --------------------------------------------------- + */ + +typedef struct ossl_store_loader_st OSSL_STORE_LOADER; + +OSSL_STORE_LOADER *OSSL_STORE_LOADER_fetch(OSSL_LIB_CTX *libctx, + const char *scheme, + const char *properties); +int OSSL_STORE_LOADER_up_ref(OSSL_STORE_LOADER *loader); +void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); +const OSSL_PROVIDER *OSSL_STORE_LOADER_get0_provider(const OSSL_STORE_LOADER * + loader); +const char *OSSL_STORE_LOADER_get0_properties(const OSSL_STORE_LOADER *loader); +const char *OSSL_STORE_LOADER_get0_description(const OSSL_STORE_LOADER *loader); +int OSSL_STORE_LOADER_is_a(const OSSL_STORE_LOADER *loader, + const char *scheme); +void OSSL_STORE_LOADER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_STORE_LOADER *loader, + void *arg), + void *arg); +int OSSL_STORE_LOADER_names_do_all(const OSSL_STORE_LOADER *loader, + void (*fn)(const char *name, void *data), + void *data); + /*- * Function to register a loader for the given URI scheme. * ------------------------------------------------------- @@ -209,56 +280,88 @@ int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); * scheme. */ -typedef struct ossl_store_loader_st OSSL_STORE_LOADER; -OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); -const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); -const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +# ifndef OPENSSL_NO_DEPRECATED_3_0 + /* struct ossl_store_loader_ctx_st is defined differently by each loader */ typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; -typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const OSSL_STORE_LOADER - *loader, - const char *uri, - const UI_METHOD *ui_method, - void *ui_data); +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn) + (const OSSL_STORE_LOADER *loader, const char *uri, + const UI_METHOD *ui_method, void *ui_data); +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_ex_fn) + (const OSSL_STORE_LOADER *loader, + const char *uri, OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data); + +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_attach_fn) + (const OSSL_STORE_LOADER *loader, BIO *bio, + OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data); +typedef int (*OSSL_STORE_ctrl_fn) + (OSSL_STORE_LOADER_CTX *ctx, int cmd, va_list args); +typedef int (*OSSL_STORE_expect_fn) + (OSSL_STORE_LOADER_CTX *ctx, int expected); +typedef int (*OSSL_STORE_find_fn) + (OSSL_STORE_LOADER_CTX *ctx, const OSSL_STORE_SEARCH *criteria); +typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn) + (OSSL_STORE_LOADER_CTX *ctx, const UI_METHOD *ui_method, void *ui_data); +typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); + +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, OSSL_STORE_open_fn open_function); -typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd, - va_list args); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_open_ex(OSSL_STORE_LOADER *loader, + OSSL_STORE_open_ex_fn open_ex_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_attach(OSSL_STORE_LOADER *loader, + OSSL_STORE_attach_fn attach_function); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, OSSL_STORE_ctrl_fn ctrl_function); -typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, OSSL_STORE_expect_fn expect_function); -typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx, - OSSL_STORE_SEARCH *criteria); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, OSSL_STORE_find_fn find_function); -typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx, - const UI_METHOD *ui_method, - void *ui_data); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, OSSL_STORE_load_fn load_function); -typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, OSSL_STORE_eof_fn eof_function); -typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, OSSL_STORE_error_fn error_function); -typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, OSSL_STORE_close_fn close_function); -void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); - +OSSL_DEPRECATEDIN_3_0 +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 +const char * OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); +# endif /*- * Functions to list STORE loaders * ------------------------------- */ -int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER - *loader, void *do_arg), +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_do_all_loaders(void (*do_function)(const OSSL_STORE_LOADER *loader, + void *do_arg), void *do_arg); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/storeerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/storeerr.h index 190eab07..00529c88 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/storeerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/storeerr.h @@ -1,66 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OSSL_STOREERR_H -# define HEADER_OSSL_STOREERR_H +#ifndef OPENSSL_STOREERR_H +# define OPENSSL_STOREERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OSSL_STORE_strings(void); -/* - * OSSL_STORE function codes. - */ -# define OSSL_STORE_F_FILE_CTRL 129 -# define OSSL_STORE_F_FILE_FIND 138 -# define OSSL_STORE_F_FILE_GET_PASS 118 -# define OSSL_STORE_F_FILE_LOAD 119 -# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 124 -# define OSSL_STORE_F_FILE_NAME_TO_URI 126 -# define OSSL_STORE_F_FILE_OPEN 120 -# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 127 -# define OSSL_STORE_F_OSSL_STORE_EXPECT 130 -# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 128 -# define OSSL_STORE_F_OSSL_STORE_FIND 131 -# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 100 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 101 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 102 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 103 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 135 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 104 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 105 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 106 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 107 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 123 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 109 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 110 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 111 -# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 134 -# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 112 -# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 113 -# define OSSL_STORE_F_OSSL_STORE_OPEN 114 -# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 115 -# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 117 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 132 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 133 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 136 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 137 -# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 116 -# define OSSL_STORE_F_TRY_DECODE_PARAMS 121 -# define OSSL_STORE_F_TRY_DECODE_PKCS12 122 -# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 125 /* * OSSL_STORE reason codes. @@ -75,9 +31,11 @@ int ERR_load_OSSL_STORE_strings(void); # define OSSL_STORE_R_LOADING_STARTED 117 # define OSSL_STORE_R_NOT_A_CERTIFICATE 100 # define OSSL_STORE_R_NOT_A_CRL 101 -# define OSSL_STORE_R_NOT_A_KEY 102 # define OSSL_STORE_R_NOT_A_NAME 103 +# define OSSL_STORE_R_NOT_A_PRIVATE_KEY 102 +# define OSSL_STORE_R_NOT_A_PUBLIC_KEY 122 # define OSSL_STORE_R_NOT_PARAMETERS 104 +# define OSSL_STORE_R_NO_LOADERS_FOUND 123 # define OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR 114 # define OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE 108 # define OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 119 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/symhacks.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/symhacks.h index 156ea6e4..816f8f99 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/symhacks.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/symhacks.h @@ -1,14 +1,20 @@ /* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SYMHACKS_H -# define HEADER_SYMHACKS_H +#ifndef OPENSSL_SYMHACKS_H +# define OPENSSL_SYMHACKS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SYMHACKS_H +# endif # include @@ -28,10 +34,6 @@ # undef i2d_ECPKPARAMETERS # define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS -/* This one clashes with CMS_data_create */ -# undef cms_Data_create -# define cms_Data_create priv_cms_Data_create - # endif #endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tls1.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tls1.h index 76d9fda4..793155e1 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tls1.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tls1.h @@ -1,19 +1,26 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TLS1_H -# define HEADER_TLS1_H +#ifndef OPENSSL_TLS1_H +# define OPENSSL_TLS1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TLS1_H +# endif # include # include +# include #ifdef __cplusplus extern "C" { @@ -24,11 +31,10 @@ extern "C" { # define OPENSSL_TLS_SECURITY_LEVEL 1 # endif -# define TLS1_VERSION 0x0301 -# define TLS1_1_VERSION 0x0302 -# define TLS1_2_VERSION 0x0303 -# define TLS1_3_VERSION 0x0304 -# define TLS_MAX_VERSION TLS1_3_VERSION +/* TLS*_VERSION constants are defined in prov_ssl.h */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TLS_MAX_VERSION TLS1_3_VERSION +# endif /* Special value for method supporting multiple versions */ # define TLS_ANY_VERSION 0x10000 @@ -107,9 +113,6 @@ extern "C" { /* ExtensionType value from RFC5764 */ # define TLSEXT_TYPE_use_srtp 14 -/* ExtensionType value from RFC5620 */ -# define TLSEXT_TYPE_heartbeat 15 - /* ExtensionType value from RFC7301 */ # define TLSEXT_TYPE_application_layer_protocol_negotiation 16 @@ -322,38 +325,14 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define SSL_CTX_get_tlsext_status_type(ssl) \ SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) -# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,\ (void (*)(void))cb) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_DTLSEXT_HB_ENABLED 0x01 -# define SSL_DTLSEXT_HB_DONT_SEND_REQUESTS 0x02 -# define SSL_DTLSEXT_HB_DONT_RECV_REQUESTS 0x04 -# define SSL_get_dtlsext_heartbeat_pending(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) -# define SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT \ - SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT -# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING \ - SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING -# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS \ - SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS -# define SSL_TLSEXT_HB_ENABLED \ - SSL_DTLSEXT_HB_ENABLED -# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS \ - SSL_DTLSEXT_HB_DONT_SEND_REQUESTS -# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS \ - SSL_DTLSEXT_HB_DONT_RECV_REQUESTS -# define SSL_get_tlsext_heartbeat_pending(ssl) \ - SSL_get_dtlsext_heartbeat_pending(ssl) -# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ - SSL_set_dtlsext_heartbeat_no_requests(ssl,arg) -# endif # endif +int SSL_CTX_set_tlsext_ticket_key_evp_cb + (SSL_CTX *ctx, int (*fp)(SSL *, unsigned char *, unsigned char *, + EVP_CIPHER_CTX *, EVP_MAC_CTX *, int)); /* PSK ciphersuites from 4279 */ # define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A @@ -1135,14 +1114,21 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define TLS_CT_RSA_FIXED_ECDH 65 # define TLS_CT_ECDSA_FIXED_ECDH 66 # define TLS_CT_GOST01_SIGN 22 -# define TLS_CT_GOST12_SIGN 238 -# define TLS_CT_GOST12_512_SIGN 239 +# define TLS_CT_GOST12_IANA_SIGN 67 +# define TLS_CT_GOST12_IANA_512_SIGN 68 +# define TLS_CT_GOST12_LEGACY_SIGN 238 +# define TLS_CT_GOST12_LEGACY_512_SIGN 239 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TLS_CT_GOST12_SIGN TLS_CT_GOST12_LEGACY_SIGN +# define TLS_CT_GOST12_512_SIGN TLS_CT_GOST12_LEGACY_512_SIGN +# endif /* * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see * comment there) */ -# define TLS_CT_NUMBER 10 +# define TLS_CT_NUMBER 12 # if defined(SSL3_CT_NUMBER) # if TLS_CT_NUMBER != SSL3_CT_NUMBER @@ -1152,78 +1138,35 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define TLS1_FINISH_MAC_LENGTH 12 -# define TLS_MD_MAX_CONST_SIZE 22 -# define TLS_MD_CLIENT_FINISH_CONST "client finished" -# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 -# define TLS_MD_SERVER_FINISH_CONST "server finished" -# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 -# define TLS_MD_KEY_EXPANSION_CONST "key expansion" -# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 -# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" -# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" -# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_IV_BLOCK_CONST "IV block" -# define TLS_MD_IV_BLOCK_CONST_SIZE 8 -# define TLS_MD_MASTER_SECRET_CONST "master secret" -# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "extended master secret" -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 +# define TLS_MD_MAX_CONST_SIZE 22 -# ifdef CHARSET_EBCDIC -# undef TLS_MD_CLIENT_FINISH_CONST -/* - * client finished - */ -# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_FINISH_CONST -/* - * server finished - */ -# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_KEY_EXPANSION_CONST -/* - * key expansion - */ -# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" - -# undef TLS_MD_CLIENT_WRITE_KEY_CONST -/* - * client write key - */ -# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_IV_BLOCK_CONST -/* - * IV block - */ -# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" - -# undef TLS_MD_MASTER_SECRET_CONST -/* - * master secret - */ -# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# undef TLS_MD_EXTENDED_MASTER_SECRET_CONST -/* - * extended master secret - */ -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# endif +/* ASCII: "client finished", in hex for EBCDIC compatibility */ +# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" +# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 +/* ASCII: "server finished", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" +# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 +/* ASCII: "server write key", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "key expansion", in hex for EBCDIC compatibility */ +# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" +# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 +/* ASCII: "client write key", in hex for EBCDIC compatibility */ +# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "server write key", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "IV block", in hex for EBCDIC compatibility */ +# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" +# define TLS_MD_IV_BLOCK_CONST_SIZE 8 +/* ASCII: "master secret", in hex for EBCDIC compatibility */ +# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 +/* ASCII: "extended master secret", in hex for EBCDIC compatibility */ +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 /* TLS Session Ticket extension struct */ struct tls_session_ticket_ext_st { diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/trace.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/trace.h new file mode 100644 index 00000000..97e13857 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/trace.h @@ -0,0 +1,312 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_TRACE_H +# define OPENSSL_TRACE_H +# pragma once + +# include + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * TRACE CATEGORIES + */ + +/* + * The trace messages of the OpenSSL libraries are organized into different + * categories. For every trace category, the application can register a separate + * tracer callback. When a callback is registered, a so called trace channel is + * created for this category. This channel consists essentially of an internal + * BIO which sends all trace output it receives to the registered application + * callback. + * + * The ALL category can be used as a fallback category to register a single + * channel which receives the output from all categories. However, if the + * application intends to print the trace channel name in the line prefix, + * it is better to register channels for all categories separately. + * (This is how the openssl application does it.) + */ +# define OSSL_TRACE_CATEGORY_ALL 0 /* The fallback */ +# define OSSL_TRACE_CATEGORY_TRACE 1 +# define OSSL_TRACE_CATEGORY_INIT 2 +# define OSSL_TRACE_CATEGORY_TLS 3 +# define OSSL_TRACE_CATEGORY_TLS_CIPHER 4 +# define OSSL_TRACE_CATEGORY_CONF 5 +# define OSSL_TRACE_CATEGORY_ENGINE_TABLE 6 +# define OSSL_TRACE_CATEGORY_ENGINE_REF_COUNT 7 +# define OSSL_TRACE_CATEGORY_PKCS5V2 8 +# define OSSL_TRACE_CATEGORY_PKCS12_KEYGEN 9 +# define OSSL_TRACE_CATEGORY_PKCS12_DECRYPT 10 +# define OSSL_TRACE_CATEGORY_X509V3_POLICY 11 +# define OSSL_TRACE_CATEGORY_BN_CTX 12 +# define OSSL_TRACE_CATEGORY_CMP 13 +# define OSSL_TRACE_CATEGORY_STORE 14 +# define OSSL_TRACE_CATEGORY_DECODER 15 +# define OSSL_TRACE_CATEGORY_ENCODER 16 +# define OSSL_TRACE_CATEGORY_REF_COUNT 17 +# define OSSL_TRACE_CATEGORY_HTTP 18 +/* Count of available categories. */ +# define OSSL_TRACE_CATEGORY_NUM 19 +/* KEEP THIS LIST IN SYNC with trace_categories[] in crypto/trace.c */ + +/* Returns the trace category number for the given |name| */ +int OSSL_trace_get_category_num(const char *name); + +/* Returns the trace category name for the given |num| */ +const char *OSSL_trace_get_category_name(int num); + +/* + * TRACE CONSUMERS + */ + +/* + * Enables tracing for the given |category| by providing a BIO sink + * as |channel|. If a null pointer is passed as |channel|, an existing + * trace channel is removed and tracing for the category is disabled. + * + * Returns 1 on success and 0 on failure + */ +int OSSL_trace_set_channel(int category, BIO* channel); + +/* + * Attach a prefix and a suffix to the given |category|, to be printed at the + * beginning and at the end of each trace output group, i.e. when + * OSSL_trace_begin() and OSSL_trace_end() are called. + * If a null pointer is passed as argument, the existing prefix or suffix is + * removed. + * + * They return 1 on success and 0 on failure + */ +int OSSL_trace_set_prefix(int category, const char *prefix); +int OSSL_trace_set_suffix(int category, const char *suffix); + +/* + * OSSL_trace_cb is the type tracing callback provided by the application. + * It MUST return the number of bytes written, or 0 on error (in other words, + * it can never write zero bytes). + * + * The |buffer| will always contain text, which may consist of several lines. + * The |data| argument points to whatever data was provided by the application + * when registering the tracer function. + * + * The |category| number is given, as well as a |cmd| number, described below. + */ +typedef size_t (*OSSL_trace_cb)(const char *buffer, size_t count, + int category, int cmd, void *data); +/* + * Possible |cmd| numbers. + */ +# define OSSL_TRACE_CTRL_BEGIN 0 +# define OSSL_TRACE_CTRL_WRITE 1 +# define OSSL_TRACE_CTRL_END 2 + +/* + * Enables tracing for the given |category| by creating an internal + * trace channel which sends the output to the given |callback|. + * If a null pointer is passed as callback, an existing trace channel + * is removed and tracing for the category is disabled. + * + * NOTE: OSSL_trace_set_channel() and OSSL_trace_set_callback() are mutually + * exclusive. + * + * Returns 1 on success and 0 on failure + */ +int OSSL_trace_set_callback(int category, OSSL_trace_cb callback, void *data); + +/* + * TRACE PRODUCERS + */ + +/* + * Returns 1 if tracing for the specified category is enabled, otherwise 0 + */ +int OSSL_trace_enabled(int category); + +/* + * Wrap a group of tracing output calls. OSSL_trace_begin() locks tracing and + * returns the trace channel associated with the given category, or NULL if no + * channel is associated with the category. OSSL_trace_end() unlocks tracing. + * + * Usage: + * + * BIO *out; + * if ((out = OSSL_trace_begin(category)) != NULL) { + * ... + * BIO_fprintf(out, ...); + * ... + * OSSL_trace_end(category, out); + * } + * + * See also the convenience macros OSSL_TRACE_BEGIN and OSSL_TRACE_END below. + */ +BIO *OSSL_trace_begin(int category); +void OSSL_trace_end(int category, BIO *channel); + +/* + * OSSL_TRACE* Convenience Macros + */ + +/* + * When the tracing feature is disabled, these macros are defined to + * produce dead code, which a good compiler should eliminate. + */ + +/* + * OSSL_TRACE_BEGIN, OSSL_TRACE_END - Define a Trace Group + * + * These two macros can be used to create a block which is executed only + * if the corresponding trace category is enabled. Inside this block, a + * local variable named |trc_out| is defined, which points to the channel + * associated with the given trace category. + * + * Usage: (using 'TLS' as an example category) + * + * OSSL_TRACE_BEGIN(TLS) { + * + * BIO_fprintf(trc_out, ... ); + * + * } OSSL_TRACE_END(TLS); + * + * + * This expands to the following code + * + * do { + * BIO *trc_out = OSSL_trace_begin(OSSL_TRACE_CATEGORY_TLS); + * if (trc_out != NULL) { + * ... + * BIO_fprintf(trc_out, ...); + * } + * OSSL_trace_end(OSSL_TRACE_CATEGORY_TLS, trc_out); + * } while (0); + * + * The use of the inner '{...}' group and the trailing ';' is enforced + * by the definition of the macros in order to make the code look as much + * like C code as possible. + * + * Before returning from inside the trace block, it is necessary to + * call OSSL_TRACE_CANCEL(category). + */ + +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACE_BEGIN(category) \ + do { \ + BIO *trc_out = OSSL_trace_begin(OSSL_TRACE_CATEGORY_##category); \ + \ + if (trc_out != NULL) + +# define OSSL_TRACE_END(category) \ + OSSL_trace_end(OSSL_TRACE_CATEGORY_##category, trc_out); \ + } while (0) + +# define OSSL_TRACE_CANCEL(category) \ + OSSL_trace_end(OSSL_TRACE_CATEGORY_##category, trc_out) \ + +# else + +# define OSSL_TRACE_BEGIN(category) \ + do { \ + BIO *trc_out = NULL; \ + if (0) + +# define OSSL_TRACE_END(category) \ + } while(0) + +# define OSSL_TRACE_CANCEL(category) \ + ((void)0) + +# endif + +/* + * OSSL_TRACE_ENABLED() - Check whether tracing is enabled for |category| + * + * Usage: + * + * if (OSSL_TRACE_ENABLED(TLS)) { + * ... + * } + */ +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACE_ENABLED(category) \ + OSSL_trace_enabled(OSSL_TRACE_CATEGORY_##category) + +# else + +# define OSSL_TRACE_ENABLED(category) (0) + +# endif + +/* + * OSSL_TRACE*() - OneShot Trace Macros + * + * These macros are intended to produce a simple printf-style trace output. + * Unfortunately, C90 macros don't support variable arguments, so the + * "vararg" OSSL_TRACEV() macro has a rather weird usage pattern: + * + * OSSL_TRACEV(category, (trc_out, "format string", ...args...)); + * + * Where 'channel' is the literal symbol of this name, not a variable. + * For that reason, it is currently not intended to be used directly, + * but only as helper macro for the other oneshot trace macros + * OSSL_TRACE(), OSSL_TRACE1(), OSSL_TRACE2(), ... + * + * Usage: + * + * OSSL_TRACE(INIT, "Hello world!\n"); + * OSSL_TRACE1(TLS, "The answer is %d\n", 42); + * OSSL_TRACE2(TLS, "The ultimate question to answer %d is '%s'\n", + * 42, "What do you get when you multiply six by nine?"); + */ + +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACEV(category, args) \ + OSSL_TRACE_BEGIN(category) \ + BIO_printf args; \ + OSSL_TRACE_END(category) + +# else + +# define OSSL_TRACEV(category, args) ((void)0) + +# endif + +# define OSSL_TRACE(category, text) \ + OSSL_TRACEV(category, (trc_out, "%s", text)) + +# define OSSL_TRACE1(category, format, arg1) \ + OSSL_TRACEV(category, (trc_out, format, arg1)) +# define OSSL_TRACE2(category, format, arg1, arg2) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2)) +# define OSSL_TRACE3(category, format, arg1, arg2, arg3) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3)) +# define OSSL_TRACE4(category, format, arg1, arg2, arg3, arg4) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4)) +# define OSSL_TRACE5(category, format, arg1, arg2, arg3, arg4, arg5) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5)) +# define OSSL_TRACE6(category, format, arg1, arg2, arg3, arg4, arg5, arg6) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6)) +# define OSSL_TRACE7(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7)) +# define OSSL_TRACE8(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)) +# define OSSL_TRACE9(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)) + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ts.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ts.h index 3b58aa52..8ff67332 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ts.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ts.h @@ -1,14 +1,20 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TS_H -# define HEADER_TS_H +#ifndef OPENSSL_TS_H +# define OPENSSL_TS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TS_H +# endif # include @@ -23,13 +29,16 @@ # include # include # include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif # ifdef __cplusplus extern "C" { # endif -# include -# include - typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; typedef struct TS_req_st TS_REQ; typedef struct TS_accuracy_st TS_ACCURACY; @@ -55,126 +64,61 @@ typedef struct TS_tst_info_st TS_TST_INFO; typedef struct TS_status_info_st TS_STATUS_INFO; -typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; -typedef struct ESS_cert_id ESS_CERT_ID; -typedef struct ESS_signing_cert ESS_SIGNING_CERT; - -DEFINE_STACK_OF(ESS_CERT_ID) - -typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; -typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; - -DEFINE_STACK_OF(ESS_CERT_ID_V2) typedef struct TS_resp_st TS_RESP; -TS_REQ *TS_REQ_new(void); -void TS_REQ_free(TS_REQ *a); -int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); -TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); - -TS_REQ *TS_REQ_dup(TS_REQ *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_REQ) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_REQ, TS_REQ) +DECLARE_ASN1_DUP_FUNCTION(TS_REQ) #ifndef OPENSSL_NO_STDIO TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); -int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); +int i2d_TS_REQ_fp(FILE *fp, const TS_REQ *a); #endif TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); -int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); +int i2d_TS_REQ_bio(BIO *fp, const TS_REQ *a); -TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); -void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); -int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, - const unsigned char **pp, long length); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_MSG_IMPRINT) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_MSG_IMPRINT, TS_MSG_IMPRINT) +DECLARE_ASN1_DUP_FUNCTION(TS_MSG_IMPRINT) #ifndef OPENSSL_NO_STDIO TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT_fp(FILE *fp, const TS_MSG_IMPRINT *a); #endif TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT_bio(BIO *bio, const TS_MSG_IMPRINT *a); -TS_RESP *TS_RESP_new(void); -void TS_RESP_free(TS_RESP *a); -int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); -TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); -TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); -TS_RESP *TS_RESP_dup(TS_RESP *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_RESP) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_RESP, TS_RESP) +DECLARE_ASN1_DUP_FUNCTION(TS_RESP) #ifndef OPENSSL_NO_STDIO TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); -int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); +int i2d_TS_RESP_fp(FILE *fp, const TS_RESP *a); #endif TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); -int i2d_TS_RESP_bio(BIO *bio, TS_RESP *a); +int i2d_TS_RESP_bio(BIO *bio, const TS_RESP *a); -TS_STATUS_INFO *TS_STATUS_INFO_new(void); -void TS_STATUS_INFO_free(TS_STATUS_INFO *a); -int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); -TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, - const unsigned char **pp, long length); -TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_STATUS_INFO) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_STATUS_INFO, TS_STATUS_INFO) +DECLARE_ASN1_DUP_FUNCTION(TS_STATUS_INFO) -TS_TST_INFO *TS_TST_INFO_new(void); -void TS_TST_INFO_free(TS_TST_INFO *a); -int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); -TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, - long length); -TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_TST_INFO) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_TST_INFO, TS_TST_INFO) +DECLARE_ASN1_DUP_FUNCTION(TS_TST_INFO) +TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); #ifndef OPENSSL_NO_STDIO TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); -int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); +int i2d_TS_TST_INFO_fp(FILE *fp, const TS_TST_INFO *a); #endif TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO **a); -int i2d_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO *a); +int i2d_TS_TST_INFO_bio(BIO *bio, const TS_TST_INFO *a); -TS_ACCURACY *TS_ACCURACY_new(void); -void TS_ACCURACY_free(TS_ACCURACY *a); -int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); -TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, - long length); -TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); - -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); -void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); -int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); -ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, - const unsigned char **pp, - long length); -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); - -ESS_CERT_ID *ESS_CERT_ID_new(void); -void ESS_CERT_ID_free(ESS_CERT_ID *a); -int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); -ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, - long length); -ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); - -ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); -void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); -int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); -ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, - const unsigned char **pp, long length); -ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); - -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_new(void); -void ESS_CERT_ID_V2_free(ESS_CERT_ID_V2 *a); -int i2d_ESS_CERT_ID_V2(const ESS_CERT_ID_V2 *a, unsigned char **pp); -ESS_CERT_ID_V2 *d2i_ESS_CERT_ID_V2(ESS_CERT_ID_V2 **a, - const unsigned char **pp, long length); -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_dup(ESS_CERT_ID_V2 *a); - -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_new(void); -void ESS_SIGNING_CERT_V2_free(ESS_SIGNING_CERT_V2 *a); -int i2d_ESS_SIGNING_CERT_V2(const ESS_SIGNING_CERT_V2 *a, unsigned char **pp); -ESS_SIGNING_CERT_V2 *d2i_ESS_SIGNING_CERT_V2(ESS_SIGNING_CERT_V2 **a, - const unsigned char **pp, - long length); -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_dup(ESS_SIGNING_CERT_V2 *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_ACCURACY) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_ACCURACY, TS_ACCURACY) +DECLARE_ASN1_DUP_FUNCTION(TS_ACCURACY) int TS_REQ_set_version(TS_REQ *a, long version); long TS_REQ_get_version(const TS_REQ *a); @@ -322,10 +266,9 @@ typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, typedef struct TS_resp_ctx TS_RESP_CTX; -DEFINE_STACK_OF_CONST(EVP_MD) - /* Creates a response context that can be used for generating responses. */ TS_RESP_CTX *TS_RESP_CTX_new(void); +TS_RESP_CTX *TS_RESP_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); void TS_RESP_CTX_free(TS_RESP_CTX *ctx); /* This parameter must be set. */ @@ -479,7 +422,10 @@ BIO *TS_VERIFY_CTX_set_data(TS_VERIFY_CTX *ctx, BIO *b); unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, unsigned char *hexstr, long len); X509_STORE *TS_VERIFY_CTX_set_store(TS_VERIFY_CTX *ctx, X509_STORE *s); -STACK_OF(X509) *TS_VERIFY_CTS_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TS_VERIFY_CTS_set_certs(ctx, cert) TS_VERIFY_CTX_set_certs(ctx,cert) +# endif +STACK_OF(X509) *TS_VERIFY_CTX_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); /*- * If ctx is NULL, it allocates and returns a new object, otherwise @@ -543,7 +489,7 @@ int TS_CONF_set_def_policy(CONF *conf, const char *section, int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, +int TS_CONF_set_clock_precision_digits(const CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tserr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tserr.h index 07f23339..e1b943e4 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tserr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tserr.h @@ -1,89 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TSERR_H -# define HEADER_TSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_TSERR_H +# define OPENSSL_TSERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_TS -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_TS_strings(void); - -/* - * TS function codes. - */ -# define TS_F_DEF_SERIAL_CB 110 -# define TS_F_DEF_TIME_CB 111 -# define TS_F_ESS_ADD_SIGNING_CERT 112 -# define TS_F_ESS_ADD_SIGNING_CERT_V2 147 -# define TS_F_ESS_CERT_ID_NEW_INIT 113 -# define TS_F_ESS_CERT_ID_V2_NEW_INIT 156 -# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 -# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 157 -# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 -# define TS_F_PKCS7_TO_TS_TST_INFO 148 -# define TS_F_TS_ACCURACY_SET_MICROS 115 -# define TS_F_TS_ACCURACY_SET_MILLIS 116 -# define TS_F_TS_ACCURACY_SET_SECONDS 117 -# define TS_F_TS_CHECK_IMPRINTS 100 -# define TS_F_TS_CHECK_NONCES 101 -# define TS_F_TS_CHECK_POLICY 102 -# define TS_F_TS_CHECK_SIGNING_CERTS 103 -# define TS_F_TS_CHECK_STATUS_INFO 104 -# define TS_F_TS_COMPUTE_IMPRINT 145 -# define TS_F_TS_CONF_INVALID 151 -# define TS_F_TS_CONF_LOAD_CERT 153 -# define TS_F_TS_CONF_LOAD_CERTS 154 -# define TS_F_TS_CONF_LOAD_KEY 155 -# define TS_F_TS_CONF_LOOKUP_FAIL 152 -# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 -# define TS_F_TS_GET_STATUS_TEXT 105 -# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 -# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 -# define TS_F_TS_REQ_SET_NONCE 120 -# define TS_F_TS_REQ_SET_POLICY_ID 121 -# define TS_F_TS_RESP_CREATE_RESPONSE 122 -# define TS_F_TS_RESP_CREATE_TST_INFO 123 -# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 -# define TS_F_TS_RESP_CTX_ADD_MD 125 -# define TS_F_TS_RESP_CTX_ADD_POLICY 126 -# define TS_F_TS_RESP_CTX_NEW 127 -# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 -# define TS_F_TS_RESP_CTX_SET_CERTS 129 -# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 -# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 -# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 -# define TS_F_TS_RESP_GET_POLICY 133 -# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 -# define TS_F_TS_RESP_SET_STATUS_INFO 135 -# define TS_F_TS_RESP_SET_TST_INFO 150 -# define TS_F_TS_RESP_SIGN 136 -# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 -# define TS_F_TS_TST_INFO_SET_ACCURACY 137 -# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 -# define TS_F_TS_TST_INFO_SET_NONCE 139 -# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 -# define TS_F_TS_TST_INFO_SET_SERIAL 141 -# define TS_F_TS_TST_INFO_SET_TIME 142 -# define TS_F_TS_TST_INFO_SET_TSA 143 -# define TS_F_TS_VERIFY 108 -# define TS_F_TS_VERIFY_CERT 109 -# define TS_F_TS_VERIFY_CTX_NEW 144 /* * TS reason codes. diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/txt_db.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/txt_db.h index ec981a43..af169a30 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/txt_db.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/txt_db.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TXT_DB_H -# define HEADER_TXT_DB_H +#ifndef OPENSSL_TXT_DB_H +# define OPENSSL_TXT_DB_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TXT_DB_H +# endif # include # include diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/types.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/types.h new file mode 100644 index 00000000..5f9d8c23 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/types.h @@ -0,0 +1,239 @@ +/* + * Copyright 2001-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Unfortunate workaround to avoid symbol conflict with wincrypt.h + * See https://github.com/openssl/openssl/issues/9981 + */ +#ifdef _WIN32 +# define WINCRYPT_USE_SYMBOL_PREFIX +# undef X509_NAME +# undef X509_EXTENSIONS +# undef PKCS7_SIGNER_INFO +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +#endif + +#ifndef OPENSSL_TYPES_H +# define OPENSSL_TYPES_H + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# include +# include +# include + +typedef struct ossl_provider_st OSSL_PROVIDER; /* Provider Object */ + +# ifdef NO_ASN1_TYPEDEFS +# define ASN1_INTEGER ASN1_STRING +# define ASN1_ENUMERATED ASN1_STRING +# define ASN1_BIT_STRING ASN1_STRING +# define ASN1_OCTET_STRING ASN1_STRING +# define ASN1_PRINTABLESTRING ASN1_STRING +# define ASN1_T61STRING ASN1_STRING +# define ASN1_IA5STRING ASN1_STRING +# define ASN1_UTCTIME ASN1_STRING +# define ASN1_GENERALIZEDTIME ASN1_STRING +# define ASN1_TIME ASN1_STRING +# define ASN1_GENERALSTRING ASN1_STRING +# define ASN1_UNIVERSALSTRING ASN1_STRING +# define ASN1_BMPSTRING ASN1_STRING +# define ASN1_VISIBLESTRING ASN1_STRING +# define ASN1_UTF8STRING ASN1_STRING +# define ASN1_BOOLEAN int +# define ASN1_NULL int +# else +typedef struct asn1_string_st ASN1_INTEGER; +typedef struct asn1_string_st ASN1_ENUMERATED; +typedef struct asn1_string_st ASN1_BIT_STRING; +typedef struct asn1_string_st ASN1_OCTET_STRING; +typedef struct asn1_string_st ASN1_PRINTABLESTRING; +typedef struct asn1_string_st ASN1_T61STRING; +typedef struct asn1_string_st ASN1_IA5STRING; +typedef struct asn1_string_st ASN1_GENERALSTRING; +typedef struct asn1_string_st ASN1_UNIVERSALSTRING; +typedef struct asn1_string_st ASN1_BMPSTRING; +typedef struct asn1_string_st ASN1_UTCTIME; +typedef struct asn1_string_st ASN1_TIME; +typedef struct asn1_string_st ASN1_GENERALIZEDTIME; +typedef struct asn1_string_st ASN1_VISIBLESTRING; +typedef struct asn1_string_st ASN1_UTF8STRING; +typedef struct asn1_string_st ASN1_STRING; +typedef int ASN1_BOOLEAN; +typedef int ASN1_NULL; +# endif + +typedef struct asn1_type_st ASN1_TYPE; +typedef struct asn1_object_st ASN1_OBJECT; +typedef struct asn1_string_table_st ASN1_STRING_TABLE; + +typedef struct ASN1_ITEM_st ASN1_ITEM; +typedef struct asn1_pctx_st ASN1_PCTX; +typedef struct asn1_sctx_st ASN1_SCTX; + +# ifdef BIGNUM +# undef BIGNUM +# endif + +typedef struct bio_st BIO; +typedef struct bignum_st BIGNUM; +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; + +typedef struct buf_mem_st BUF_MEM; + +STACK_OF(BIGNUM); +STACK_OF(BIGNUM_const); + +typedef struct err_state_st ERR_STATE; + +typedef struct evp_cipher_st EVP_CIPHER; +typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; +typedef struct evp_md_st EVP_MD; +typedef struct evp_md_ctx_st EVP_MD_CTX; +typedef struct evp_mac_st EVP_MAC; +typedef struct evp_mac_ctx_st EVP_MAC_CTX; +typedef struct evp_pkey_st EVP_PKEY; + +typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; + +typedef struct evp_pkey_method_st EVP_PKEY_METHOD; +typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; + +typedef struct evp_keymgmt_st EVP_KEYMGMT; + +typedef struct evp_kdf_st EVP_KDF; +typedef struct evp_kdf_ctx_st EVP_KDF_CTX; + +typedef struct evp_rand_st EVP_RAND; +typedef struct evp_rand_ctx_st EVP_RAND_CTX; + +typedef struct evp_keyexch_st EVP_KEYEXCH; + +typedef struct evp_signature_st EVP_SIGNATURE; + +typedef struct evp_asym_cipher_st EVP_ASYM_CIPHER; + +typedef struct evp_kem_st EVP_KEM; + +typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; + +typedef struct hmac_ctx_st HMAC_CTX; + +typedef struct dh_st DH; +typedef struct dh_method DH_METHOD; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct dsa_st DSA; +typedef struct dsa_method DSA_METHOD; +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; +# endif +typedef struct rsa_pss_params_st RSA_PSS_PARAMS; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; +# endif + +typedef struct rand_meth_st RAND_METHOD; +typedef struct rand_drbg_st RAND_DRBG; + +typedef struct ssl_dane_st SSL_DANE; +typedef struct x509_st X509; +typedef struct X509_algor_st X509_ALGOR; +typedef struct X509_crl_st X509_CRL; +typedef struct x509_crl_method_st X509_CRL_METHOD; +typedef struct x509_revoked_st X509_REVOKED; +typedef struct X509_name_st X509_NAME; +typedef struct X509_pubkey_st X509_PUBKEY; +typedef struct x509_store_st X509_STORE; +typedef struct x509_store_ctx_st X509_STORE_CTX; + +typedef struct x509_object_st X509_OBJECT; +typedef struct x509_lookup_st X509_LOOKUP; +typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; +typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; + +typedef struct x509_sig_info_st X509_SIG_INFO; + +typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; + +typedef struct v3_ext_ctx X509V3_CTX; +typedef struct conf_st CONF; +typedef struct ossl_init_settings_st OPENSSL_INIT_SETTINGS; + +typedef struct ui_st UI; +typedef struct ui_method_st UI_METHOD; + +typedef struct engine_st ENGINE; +typedef struct ssl_st SSL; +typedef struct ssl_ctx_st SSL_CTX; + +typedef struct comp_ctx_st COMP_CTX; +typedef struct comp_method_st COMP_METHOD; + +typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; +typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; +typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; +typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; + +typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; +typedef struct DIST_POINT_st DIST_POINT; +typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; +typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; + +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; + +typedef struct ossl_http_req_ctx_st OSSL_HTTP_REQ_CTX; +typedef struct ocsp_response_st OCSP_RESPONSE; +typedef struct ocsp_responder_id_st OCSP_RESPID; + +typedef struct sct_st SCT; +typedef struct sct_ctx_st SCT_CTX; +typedef struct ctlog_st CTLOG; +typedef struct ctlog_store_st CTLOG_STORE; +typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; + +typedef struct ossl_store_info_st OSSL_STORE_INFO; +typedef struct ossl_store_search_st OSSL_STORE_SEARCH; + +typedef struct ossl_lib_ctx_st OSSL_LIB_CTX; + +typedef struct ossl_dispatch_st OSSL_DISPATCH; +typedef struct ossl_item_st OSSL_ITEM; +typedef struct ossl_algorithm_st OSSL_ALGORITHM; +typedef struct ossl_param_st OSSL_PARAM; +typedef struct ossl_param_bld_st OSSL_PARAM_BLD; + +typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + +typedef struct ossl_encoder_st OSSL_ENCODER; +typedef struct ossl_encoder_ctx_st OSSL_ENCODER_CTX; +typedef struct ossl_decoder_st OSSL_DECODER; +typedef struct ossl_decoder_ctx_st OSSL_DECODER_CTX; + +typedef struct ossl_self_test_st OSSL_SELF_TEST; + +#ifdef __cplusplus +} +#endif + +#endif /* OPENSSL_TYPES_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h index 7c721ec8..e64ec3b3 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h @@ -1,27 +1,38 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ui.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_UI_H -# define HEADER_UI_H + + +#ifndef OPENSSL_UI_H +# define OPENSSL_UI_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_UI_H +# endif # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif # include # include -# include +# include # include /* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ -# if OPENSSL_API_COMPAT < 0x10200000L +# ifndef OPENSSL_NO_DEPRECATED_3_0 # ifdef OPENSSL_NO_UI_CONSOLE # define OPENSSL_NO_UI # endif @@ -132,25 +143,26 @@ int UI_dup_error_string(UI *ui, const char *text); # define UI_INPUT_FLAG_USER_BASE 16 /*- - * The following function helps construct a prompt. object_desc is a - * textual short description of the object, for example "pass phrase", - * and object_name is the name of the object (might be a card name or - * a file name. + * The following function helps construct a prompt. + * phrase_desc is a textual short description of the phrase to enter, + * for example "pass phrase", and + * object_name is the name of the object + * (which might be a card name or a file name) or NULL. * The returned string shall always be allocated on the heap with * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). * * If the ui_method doesn't contain a pointer to a user-defined prompt * constructor, a default string is built, looking like this: * - * "Enter {object_desc} for {object_name}:" + * "Enter {phrase_desc} for {object_name}:" * - * So, if object_desc has the value "pass phrase" and object_name has + * So, if phrase_desc has the value "pass phrase" and object_name has * the value "foo.key", the resulting string is: * * "Enter pass phrase for foo.key:" */ char *UI_construct_prompt(UI *ui_method, - const char *object_desc, const char *object_name); + const char *phrase_desc, const char *object_name); /* * The following function is used to store a pointer to user-specific data. @@ -208,7 +220,7 @@ int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); # define UI_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) int UI_set_ex_data(UI *r, int idx, void *arg); -void *UI_get_ex_data(UI *r, int idx); +void *UI_get_ex_data(const UI *r, int idx); /* Use specific methods instead of the built-in one */ void UI_set_default_method(const UI_METHOD *meth); @@ -277,7 +289,34 @@ const UI_METHOD *UI_null(void); * about a string or a prompt, including test data for a verification prompt. */ typedef struct ui_string_st UI_STRING; -DEFINE_STACK_OF(UI_STRING) + +SKM_DEFINE_STACK_OF_INTERNAL(UI_STRING, UI_STRING, UI_STRING) +#define sk_UI_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_value(sk, idx) ((UI_STRING *)OPENSSL_sk_value(ossl_check_const_UI_STRING_sk_type(sk), (idx))) +#define sk_UI_STRING_new(cmp) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new(ossl_check_UI_STRING_compfunc_type(cmp))) +#define sk_UI_STRING_new_null() ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_null()) +#define sk_UI_STRING_new_reserve(cmp, n) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_reserve(ossl_check_UI_STRING_compfunc_type(cmp), (n))) +#define sk_UI_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_UI_STRING_sk_type(sk), (n)) +#define sk_UI_STRING_free(sk) OPENSSL_sk_free(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_delete(sk, i) ((UI_STRING *)OPENSSL_sk_delete(ossl_check_UI_STRING_sk_type(sk), (i))) +#define sk_UI_STRING_delete_ptr(sk, ptr) ((UI_STRING *)OPENSSL_sk_delete_ptr(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr))) +#define sk_UI_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_pop(sk) ((UI_STRING *)OPENSSL_sk_pop(ossl_check_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_shift(sk) ((UI_STRING *)OPENSSL_sk_shift(ossl_check_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_UI_STRING_sk_type(sk),ossl_check_UI_STRING_freefunc_type(freefunc)) +#define sk_UI_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), (idx)) +#define sk_UI_STRING_set(sk, idx, ptr) ((UI_STRING *)OPENSSL_sk_set(ossl_check_UI_STRING_sk_type(sk), (idx), ossl_check_UI_STRING_type(ptr))) +#define sk_UI_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), pnum) +#define sk_UI_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_dup(sk) ((STACK_OF(UI_STRING) *)OPENSSL_sk_dup(ossl_check_const_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(UI_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_UI_STRING_sk_type(sk), ossl_check_UI_STRING_copyfunc_type(copyfunc), ossl_check_UI_STRING_freefunc_type(freefunc))) +#define sk_UI_STRING_set_cmp_func(sk, cmp) ((sk_UI_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_compfunc_type(cmp))) + /* * The different types of strings that are currently supported. This is only @@ -308,7 +347,7 @@ int UI_method_set_data_duplicator(UI_METHOD *method, int UI_method_set_prompt_constructor(UI_METHOD *method, char *(*prompt_constructor) (UI *ui, const char - *object_desc, + *phrase_desc, const char *object_name)); int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h.in new file mode 100644 index 00000000..eb9a580f --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h.in @@ -0,0 +1,384 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_UI_H +# define OPENSSL_UI_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_UI_H +# endif + +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include +# include +# include +# include + +/* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifdef OPENSSL_NO_UI_CONSOLE +# define OPENSSL_NO_UI +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * All the following functions return -1 or NULL on error and in some cases + * (UI_process()) -2 if interrupted or in some other way cancelled. When + * everything is fine, they return 0, a positive value or a non-NULL pointer, + * all depending on their purpose. + */ + +/* Creators and destructor. */ +UI *UI_new(void); +UI *UI_new_method(const UI_METHOD *method); +void UI_free(UI *ui); + +/*- + The following functions are used to add strings to be printed and prompt + strings to prompt for data. The names are UI_{add,dup}__string + and UI_{add,dup}_input_boolean. + + UI_{add,dup}__string have the following meanings: + add add a text or prompt string. The pointers given to these + functions are used verbatim, no copying is done. + dup make a copy of the text or prompt string, then add the copy + to the collection of strings in the user interface. + + The function is a name for the functionality that the given + string shall be used for. It can be one of: + input use the string as data prompt. + verify use the string as verification prompt. This + is used to verify a previous input. + info use the string for informational output. + error use the string for error output. + Honestly, there's currently no difference between info and error for the + moment. + + UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", + and are typically used when one wants to prompt for a yes/no response. + + All of the functions in this group take a UI and a prompt string. + The string input and verify addition functions also take a flag argument, + a buffer for the result to end up with, a minimum input size and a maximum + input size (the result buffer MUST be large enough to be able to contain + the maximum number of characters). Additionally, the verify addition + functions takes another buffer to compare the result against. + The boolean input functions take an action description string (which should + be safe to ignore if the expected user action is obvious, for example with + a dialog box with an OK button and a Cancel button), a string of acceptable + characters to mean OK and to mean Cancel. The two last strings are checked + to make sure they don't have common characters. Additionally, the same + flag argument as for the string input is taken, as well as a result buffer. + The result buffer is required to be at least one byte long. Depending on + the answer, the first character from the OK or the Cancel character strings + will be stored in the first byte of the result buffer. No NUL will be + added, so the result is *not* a string. + + On success, the all return an index of the added information. That index + is useful when retrieving results with UI_get0_result(). */ +int UI_add_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_dup_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_add_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_dup_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_add_info_string(UI *ui, const char *text); +int UI_dup_info_string(UI *ui, const char *text); +int UI_add_error_string(UI *ui, const char *text); +int UI_dup_error_string(UI *ui, const char *text); + +/* These are the possible flags. They can be or'ed together. */ +/* Use to have echoing of input */ +# define UI_INPUT_FLAG_ECHO 0x01 +/* + * Use a default password. Where that password is found is completely up to + * the application, it might for example be in the user data set with + * UI_add_user_data(). It is not recommended to have more than one input in + * each UI being marked with this flag, or the application might get + * confused. + */ +# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 + +/*- + * The user of these routines may want to define flags of their own. The core + * UI won't look at those, but will pass them on to the method routines. They + * must use higher bits so they don't get confused with the UI bits above. + * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good + * example of use is this: + * + * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) + * +*/ +# define UI_INPUT_FLAG_USER_BASE 16 + +/*- + * The following function helps construct a prompt. + * phrase_desc is a textual short description of the phrase to enter, + * for example "pass phrase", and + * object_name is the name of the object + * (which might be a card name or a file name) or NULL. + * The returned string shall always be allocated on the heap with + * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). + * + * If the ui_method doesn't contain a pointer to a user-defined prompt + * constructor, a default string is built, looking like this: + * + * "Enter {phrase_desc} for {object_name}:" + * + * So, if phrase_desc has the value "pass phrase" and object_name has + * the value "foo.key", the resulting string is: + * + * "Enter pass phrase for foo.key:" +*/ +char *UI_construct_prompt(UI *ui_method, + const char *phrase_desc, const char *object_name); + +/* + * The following function is used to store a pointer to user-specific data. + * Any previous such pointer will be returned and replaced. + * + * For callback purposes, this function makes a lot more sense than using + * ex_data, since the latter requires that different parts of OpenSSL or + * applications share the same ex_data index. + * + * Note that the UI_OpenSSL() method completely ignores the user data. Other + * methods may not, however. + */ +void *UI_add_user_data(UI *ui, void *user_data); +/* + * Alternatively, this function is used to duplicate the user data. + * This uses the duplicator method function. The destroy function will + * be used to free the user data in this case. + */ +int UI_dup_user_data(UI *ui, void *user_data); +/* We need a user data retrieving function as well. */ +void *UI_get0_user_data(UI *ui); + +/* Return the result associated with a prompt given with the index i. */ +const char *UI_get0_result(UI *ui, int i); +int UI_get_result_length(UI *ui, int i); + +/* When all strings have been added, process the whole thing. */ +int UI_process(UI *ui); + +/* + * Give a user interface parameterised control commands. This can be used to + * send down an integer, a data pointer or a function pointer, as well as be + * used to get information from a UI. + */ +int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); + +/* The commands */ +/* + * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the + * OpenSSL error stack before printing any info or added error messages and + * before any prompting. + */ +# define UI_CTRL_PRINT_ERRORS 1 +/* + * Check if a UI_process() is possible to do again with the same instance of + * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 + * if not. + */ +# define UI_CTRL_IS_REDOABLE 2 + +/* Some methods may use extra data */ +# define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) +# define UI_get_app_data(s) UI_get_ex_data(s,0) + +# define UI_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) +int UI_set_ex_data(UI *r, int idx, void *arg); +void *UI_get_ex_data(const UI *r, int idx); + +/* Use specific methods instead of the built-in one */ +void UI_set_default_method(const UI_METHOD *meth); +const UI_METHOD *UI_get_default_method(void); +const UI_METHOD *UI_get_method(UI *ui); +const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); + +# ifndef OPENSSL_NO_UI_CONSOLE + +/* The method with all the built-in thingies */ +UI_METHOD *UI_OpenSSL(void); + +# endif + +/* + * NULL method. Literally does nothing, but may serve as a placeholder + * to avoid internal default. + */ +const UI_METHOD *UI_null(void); + +/* ---------- For method writers ---------- */ +/*- + A method contains a number of functions that implement the low level + of the User Interface. The functions are: + + an opener This function starts a session, maybe by opening + a channel to a tty, or by opening a window. + a writer This function is called to write a given string, + maybe to the tty, maybe as a field label in a + window. + a flusher This function is called to flush everything that + has been output so far. It can be used to actually + display a dialog box after it has been built. + a reader This function is called to read a given prompt, + maybe from the tty, maybe from a field in a + window. Note that it's called with all string + structures, not only the prompt ones, so it must + check such things itself. + a closer This function closes the session, maybe by closing + the channel to the tty, or closing the window. + + All these functions are expected to return: + + 0 on error. + 1 on success. + -1 on out-of-band events, for example if some prompting has + been canceled (by pressing Ctrl-C, for example). This is + only checked when returned by the flusher or the reader. + + The way this is used, the opener is first called, then the writer for all + strings, then the flusher, then the reader for all strings and finally the + closer. Note that if you want to prompt from a terminal or other command + line interface, the best is to have the reader also write the prompts + instead of having the writer do it. If you want to prompt from a dialog + box, the writer can be used to build up the contents of the box, and the + flusher to actually display the box and run the event loop until all data + has been given, after which the reader only grabs the given data and puts + them back into the UI strings. + + All method functions take a UI as argument. Additionally, the writer and + the reader take a UI_STRING. +*/ + +/* + * The UI_STRING type is the data structure that contains all the needed info + * about a string or a prompt, including test data for a verification prompt. + */ +typedef struct ui_string_st UI_STRING; + +{- + generate_stack_macros("UI_STRING"); +-} + +/* + * The different types of strings that are currently supported. This is only + * needed by method authors. + */ +enum UI_string_types { + UIT_NONE = 0, + UIT_PROMPT, /* Prompt for a string */ + UIT_VERIFY, /* Prompt for a string and verify */ + UIT_BOOLEAN, /* Prompt for a yes/no response */ + UIT_INFO, /* Send info to the user */ + UIT_ERROR /* Send an error message to the user */ +}; + +/* Create and manipulate methods */ +UI_METHOD *UI_create_method(const char *name); +void UI_destroy_method(UI_METHOD *ui_method); +int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); +int UI_method_set_writer(UI_METHOD *method, + int (*writer) (UI *ui, UI_STRING *uis)); +int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); +int UI_method_set_reader(UI_METHOD *method, + int (*reader) (UI *ui, UI_STRING *uis)); +int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); +int UI_method_set_data_duplicator(UI_METHOD *method, + void *(*duplicator) (UI *ui, void *ui_data), + void (*destructor)(UI *ui, void *ui_data)); +int UI_method_set_prompt_constructor(UI_METHOD *method, + char *(*prompt_constructor) (UI *ui, + const char + *phrase_desc, + const char + *object_name)); +int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); +int (*UI_method_get_opener(const UI_METHOD *method)) (UI *); +int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *); +int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_closer(const UI_METHOD *method)) (UI *); +char *(*UI_method_get_prompt_constructor(const UI_METHOD *method)) + (UI *, const char *, const char *); +void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *); +void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *); +const void *UI_method_get_ex_data(const UI_METHOD *method, int idx); + +/* + * The following functions are helpers for method writers to access relevant + * data from a UI_STRING. + */ + +/* Return type of the UI_STRING */ +enum UI_string_types UI_get_string_type(UI_STRING *uis); +/* Return input flags of the UI_STRING */ +int UI_get_input_flags(UI_STRING *uis); +/* Return the actual string to output (the prompt, info or error) */ +const char *UI_get0_output_string(UI_STRING *uis); +/* + * Return the optional action string to output (the boolean prompt + * instruction) + */ +const char *UI_get0_action_string(UI_STRING *uis); +/* Return the result of a prompt */ +const char *UI_get0_result_string(UI_STRING *uis); +int UI_get_result_string_length(UI_STRING *uis); +/* + * Return the string to test the result against. Only useful with verifies. + */ +const char *UI_get0_test_string(UI_STRING *uis); +/* Return the required minimum size of the result */ +int UI_get_result_minsize(UI_STRING *uis); +/* Return the required maximum size of the result */ +int UI_get_result_maxsize(UI_STRING *uis); +/* Set the result of a UI_STRING. */ +int UI_set_result(UI *ui, UI_STRING *uis, const char *result); +int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len); + +/* A couple of popular utility functions */ +int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, + int verify); +int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, + int verify); +UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/uierr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/uierr.h index bd68864d..473b04ed 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/uierr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/uierr.h @@ -1,49 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_UIERR_H -# define HEADER_UIERR_H +#ifndef OPENSSL_UIERR_H +# define OPENSSL_UIERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_UI_strings(void); -/* - * UI function codes. - */ -# define UI_F_CLOSE_CONSOLE 115 -# define UI_F_ECHO_CONSOLE 116 -# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 -# define UI_F_GENERAL_ALLOCATE_PROMPT 109 -# define UI_F_NOECHO_CONSOLE 117 -# define UI_F_OPEN_CONSOLE 114 -# define UI_F_UI_CONSTRUCT_PROMPT 121 -# define UI_F_UI_CREATE_METHOD 112 -# define UI_F_UI_CTRL 111 -# define UI_F_UI_DUP_ERROR_STRING 101 -# define UI_F_UI_DUP_INFO_STRING 102 -# define UI_F_UI_DUP_INPUT_BOOLEAN 110 -# define UI_F_UI_DUP_INPUT_STRING 103 -# define UI_F_UI_DUP_USER_DATA 118 -# define UI_F_UI_DUP_VERIFY_STRING 106 -# define UI_F_UI_GET0_RESULT 107 -# define UI_F_UI_GET_RESULT_LENGTH 119 -# define UI_F_UI_NEW_METHOD 104 -# define UI_F_UI_PROCESS 113 -# define UI_F_UI_SET_RESULT 105 -# define UI_F_UI_SET_RESULT_EX 120 /* * UI reason codes. diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/whrlpool.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/whrlpool.h index 20ea3503..05ba4632 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/whrlpool.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/whrlpool.h @@ -1,27 +1,36 @@ /* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_WHRLPOOL_H -# define HEADER_WHRLPOOL_H +#ifndef OPENSSL_WHRLPOOL_H +# define OPENSSL_WHRLPOOL_H +# pragma once -#include - -# ifndef OPENSSL_NO_WHIRLPOOL -# include -# include -# ifdef __cplusplus -extern "C" { +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_WHRLPOOL_H # endif -# define WHIRLPOOL_DIGEST_LENGTH (512/8) -# define WHIRLPOOL_BBLOCK 512 -# define WHIRLPOOL_COUNTER (256/8) +# include + +# ifndef OPENSSL_NO_WHIRLPOOL +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define WHIRLPOOL_DIGEST_LENGTH (512/8) + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +# define WHIRLPOOL_BBLOCK 512 +# define WHIRLPOOL_COUNTER (256/8) typedef struct { union { @@ -33,16 +42,21 @@ typedef struct { unsigned int bitoff; size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; } WHIRLPOOL_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, + const void *inp, size_t bytes); +OSSL_DEPRECATEDIN_3_0 void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, + const void *inp, size_t bits); +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *WHIRLPOOL(const void *inp, size_t bytes, + unsigned char *md); +# endif -int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); -int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); -void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); -int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); -unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h index 3ff86ec7..483cb9d5 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h @@ -1,18 +1,29 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509.h.in + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509_H -# define HEADER_X509_H + + +#ifndef OPENSSL_X509_H +# define OPENSSL_X509_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_H +# endif # include -# include +# include # include # include # include @@ -21,7 +32,7 @@ # include # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # include # include @@ -29,11 +40,120 @@ # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { #endif +/* Needed stacks for types defined in other headers */ +SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME) +#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx))) +#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp))) +#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null()) +#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n))) +#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n)) +#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i))) +#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))) +#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc)) +#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx)) +#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr))) +#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum) +#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc))) +#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509) +#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk)) +#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx))) +#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp))) +#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null()) +#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n))) +#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n)) +#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk)) +#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk)) +#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i))) +#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))) +#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk))) +#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk))) +#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc)) +#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx)) +#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr))) +#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum) +#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk)) +#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk)) +#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk))) +#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc))) +#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED) +#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx))) +#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp))) +#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null()) +#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n))) +#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n)) +#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i))) +#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))) +#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc)) +#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx)) +#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr))) +#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum) +#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc))) +#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL) +#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx))) +#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp))) +#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null()) +#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n))) +#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n)) +#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i))) +#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))) +#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc)) +#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx)) +#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr))) +#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum) +#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc))) +#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp))) + /* Flags for X509_get_signature_info() */ /* Signature info is valid */ @@ -72,78 +192,98 @@ typedef struct X509_sig_st X509_SIG; typedef struct X509_name_entry_st X509_NAME_ENTRY; -DEFINE_STACK_OF(X509_NAME_ENTRY) +SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY) +#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx))) +#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp))) +#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null()) +#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n))) +#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n)) +#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i))) +#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))) +#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)) +#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx)) +#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr))) +#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum) +#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))) +#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp))) -DEFINE_STACK_OF(X509_NAME) # define X509_EX_V_NETSCAPE_HACK 0x8000 # define X509_EX_V_INIT 0x0001 typedef struct X509_extension_st X509_EXTENSION; +SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION) +#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx))) +#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp))) +#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null()) +#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n))) +#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n)) +#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i))) +#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))) +#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc)) +#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx)) +#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr))) +#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum) +#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc))) +#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp))) typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; - -DEFINE_STACK_OF(X509_EXTENSION) - typedef struct x509_attributes_st X509_ATTRIBUTE; - -DEFINE_STACK_OF(X509_ATTRIBUTE) +SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE) +#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx))) +#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp))) +#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null()) +#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n))) +#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n)) +#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i))) +#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))) +#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)) +#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx)) +#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr))) +#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum) +#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))) +#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp))) typedef struct X509_req_info_st X509_REQ_INFO; - typedef struct X509_req_st X509_REQ; - typedef struct x509_cert_aux_st X509_CERT_AUX; - typedef struct x509_cinf_st X509_CINF; -DEFINE_STACK_OF(X509) - -/* This is used for a table of trust checking functions */ - -typedef struct x509_trust_st { - int trust; - int flags; - int (*check_trust) (struct x509_trust_st *, X509 *, int); - char *name; - int arg1; - void *arg2; -} X509_TRUST; - -DEFINE_STACK_OF(X509_TRUST) - -/* standard trust ids */ - -# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ - -# define X509_TRUST_COMPAT 1 -# define X509_TRUST_SSL_CLIENT 2 -# define X509_TRUST_SSL_SERVER 3 -# define X509_TRUST_EMAIL 4 -# define X509_TRUST_OBJECT_SIGN 5 -# define X509_TRUST_OCSP_SIGN 6 -# define X509_TRUST_OCSP_REQUEST 7 -# define X509_TRUST_TSA 8 - -/* Keep these up to date! */ -# define X509_TRUST_MIN 1 -# define X509_TRUST_MAX 8 - -/* trust_flags values */ -# define X509_TRUST_DYNAMIC (1U << 0) -# define X509_TRUST_DYNAMIC_NAME (1U << 1) -/* No compat trust if self-signed, preempts "DO_SS" */ -# define X509_TRUST_NO_SS_COMPAT (1U << 2) -/* Compat trust if no explicit accepted trust EKUs */ -# define X509_TRUST_DO_SS_COMPAT (1U << 3) -/* Accept "anyEKU" as a wildcard trust OID */ -# define X509_TRUST_OK_ANY_EKU (1U << 4) - -/* check_trust return codes */ - -# define X509_TRUST_TRUSTED 1 -# define X509_TRUST_REJECTED 2 -# define X509_TRUST_UNTRUSTED 3 - /* Flags for X509_print_ex() */ # define X509_FLAG_COMPAT 0 @@ -160,6 +300,7 @@ DEFINE_STACK_OF(X509_TRUST) # define X509_FLAG_NO_AUX (1L << 10) # define X509_FLAG_NO_ATTRIBUTES (1L << 11) # define X509_FLAG_NO_IDS (1L << 12) +# define X509_FLAG_EXTENSIONS_ONLY_KID (1L << 13) /* Flags specific to X509_NAME_print_ex() */ @@ -221,12 +362,8 @@ DEFINE_STACK_OF(X509_TRUST) XN_FLAG_FN_LN | \ XN_FLAG_FN_ALIGN) -DEFINE_STACK_OF(X509_REVOKED) - typedef struct X509_crl_info_st X509_CRL_INFO; -DEFINE_STACK_OF(X509_CRL) - typedef struct private_key_st { int version; /* The PKCS#8 data types */ @@ -250,8 +387,33 @@ typedef struct X509_info_st { int enc_len; char *enc_data; } X509_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO) +#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx))) +#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp))) +#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null()) +#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n))) +#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n)) +#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i))) +#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))) +#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc)) +#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx)) +#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr))) +#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum) +#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc))) +#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp))) -DEFINE_STACK_OF(X509_INFO) /* * The next 2 structures and their 8 routines are used to manipulate Netscape's @@ -336,7 +498,9 @@ X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), int (*crl_free) (X509_CRL *crl), int (*crl_lookup) (X509_CRL *crl, X509_REVOKED **ret, - ASN1_INTEGER *ser, + const + ASN1_INTEGER *serial, + const X509_NAME *issuer), int (*crl_verify) (X509_CRL *crl, EVP_PKEY *pk)); @@ -348,7 +512,10 @@ void *X509_CRL_get_meth_data(X509_CRL *crl); const char *X509_verify_cert_error_string(long n); int X509_verify(X509 *a, EVP_PKEY *r); +int X509_self_signed(X509 *cert, int verify_signature); +int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx, + const char *propq); int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); @@ -366,22 +533,18 @@ int X509_signature_print(BIO *bp, const X509_ALGOR *alg, int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); -# endif int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); -# endif int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len); +ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert, + EVP_MD **md_used, int *md_is_fallback); int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, @@ -389,89 +552,118 @@ int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, unsigned char *md, unsigned int *len); +X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include /* OSSL_HTTP_REQ_CTX_nbio_d2i */ +# define X509_http_nbio(rctx, pcert) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509)) +# define X509_CRL_http_nbio(rctx, pcrl) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL)) +# endif + # ifndef OPENSSL_NO_STDIO X509 *d2i_X509_fp(FILE *fp, X509 **x509); -int i2d_X509_fp(FILE *fp, X509 *x509); +int i2d_X509_fp(FILE *fp, const X509 *x509); X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); -int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); +int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl); X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); -int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); -int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); +int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa); # endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); -int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); -DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); -int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); -int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); -int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa); +# endif # endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); -int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); +int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk); PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); -int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); -int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); +int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey); EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); # endif X509 *d2i_X509_bio(BIO *bp, X509 **x509); -int i2d_X509_bio(BIO *bp, X509 *x509); +int i2d_X509_bio(BIO *bp, const X509 *x509); X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); -int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); +int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl); X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); -int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); -int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); +int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa); # endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); -int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); -DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); -int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); -int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); -int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa); +# endif # endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); -int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); +int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk); PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); -int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); -int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); +int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey); EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); -X509 *X509_dup(X509 *x509); -X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); -X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); -X509_CRL *X509_CRL_dup(X509_CRL *crl); -X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); -X509_REQ *X509_REQ_dup(X509_REQ *req); -X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); +DECLARE_ASN1_DUP_FUNCTION(X509) +DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR) +DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) +DECLARE_ASN1_DUP_FUNCTION(X509_CRL) +DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION) +DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY) +DECLARE_ASN1_DUP_FUNCTION(X509_REQ) +DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED) int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval); void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, @@ -480,11 +672,13 @@ void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); -X509_NAME *X509_NAME_dup(X509_NAME *xn); -X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); +DECLARE_ASN1_DUP_FUNCTION(X509_NAME) +DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) int X509_cmp_time(const ASN1_TIME *s, time_t *t); int X509_cmp_current_time(const ASN1_TIME *s); +int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm, + const ASN1_TIME *start, const ASN1_TIME *end); ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, int offset_day, long offset_sec, time_t *t); @@ -506,24 +700,27 @@ DECLARE_ASN1_FUNCTIONS(X509_VAL) DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) +X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq); int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); -EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key); -EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key); int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); long X509_get_pathlen(X509 *x); -int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); -EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); -# ifndef OPENSSL_NO_RSA -int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); -RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY) +EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY) # endif -# ifndef OPENSSL_NO_DSA -int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); -DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY) +# endif # endif -# ifndef OPENSSL_NO_EC -int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); -EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY) +# endif # endif DECLARE_ASN1_FUNCTIONS(X509_SIG) @@ -534,6 +731,7 @@ void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) DECLARE_ASN1_FUNCTIONS(X509_REQ) +X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); @@ -545,19 +743,18 @@ DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) DECLARE_ASN1_FUNCTIONS(X509_NAME) -int X509_NAME_set(X509_NAME **xn, X509_NAME *name); +int X509_NAME_set(X509_NAME **xn, const X509_NAME *name); DECLARE_ASN1_FUNCTIONS(X509_CINF) - DECLARE_ASN1_FUNCTIONS(X509) +X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) #define X509_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) int X509_set_ex_data(X509 *r, int idx, void *arg); -void *X509_get_ex_data(X509 *r, int idx); -int i2d_X509_AUX(X509 *a, unsigned char **pp); -X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); +void *X509_get_ex_data(const X509 *r, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX) int i2d_re_X509_tbs(X509 *x, unsigned char **pp); @@ -573,29 +770,24 @@ void X509_get0_signature(const ASN1_BIT_STRING **psig, const X509_ALGOR **palg, const X509 *x); int X509_get_signature_nid(const X509 *x); -int X509_trusted(const X509 *x); +void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x); +void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x); + int X509_alias_set1(X509 *x, const unsigned char *name, int len); int X509_keyid_set1(X509 *x, const unsigned char *id, int len); unsigned char *X509_alias_get0(X509 *x, int *len); unsigned char *X509_keyid_get0(X509 *x, int *len); -int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, - int); -int X509_TRUST_set(int *t, int trust); -int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); -int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); -void X509_trust_clear(X509 *x); -void X509_reject_clear(X509 *x); - -STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); -STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); DECLARE_ASN1_FUNCTIONS(X509_REVOKED) DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) DECLARE_ASN1_FUNCTIONS(X509_CRL) +X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq); int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); int X509_CRL_get0_by_serial(X509_CRL *crl, - X509_REVOKED **ret, ASN1_INTEGER *serial); + X509_REVOKED **ret, const ASN1_INTEGER *serial); int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); X509_PKEY *X509_PKEY_new(void); @@ -609,37 +801,45 @@ X509_INFO *X509_INFO_new(void); void X509_INFO_free(X509_INFO *a); char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); - +OSSL_DEPRECATEDIN_3_0 int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, unsigned char *md, unsigned int *len); - -int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - char *data, EVP_PKEY *pkey, const EVP_MD *type); - +OSSL_DEPRECATEDIN_3_0 +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey, + const EVP_MD *type); +#endif int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, unsigned char *md, unsigned int *len); - -int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); - -int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, - EVP_PKEY *pkey, const EVP_MD *type); +int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey); +int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_MD_CTX *ctx); +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey, const EVP_MD *md); int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - void *asn, EVP_MD_CTX *ctx); + const void *data, EVP_MD_CTX *ctx); + +#define X509_VERSION_1 0 +#define X509_VERSION_2 1 +#define X509_VERSION_3 2 long X509_get_version(const X509 *x); int X509_set_version(X509 *x, long version); int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); ASN1_INTEGER *X509_get_serialNumber(X509 *x); const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); -int X509_set_issuer_name(X509 *x, X509_NAME *name); +int X509_set_issuer_name(X509 *x, const X509_NAME *name); X509_NAME *X509_get_issuer_name(const X509 *a); -int X509_set_subject_name(X509 *x, X509_NAME *name); +int X509_set_subject_name(X509 *x, const X509_NAME *name); X509_NAME *X509_get_subject_name(const X509 *a); const ASN1_TIME * X509_get0_notBefore(const X509 *x); ASN1_TIME *X509_getm_notBefore(const X509 *x); @@ -651,7 +851,7 @@ int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); int X509_up_ref(X509 *x); int X509_get_signature_type(const X509 *x); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_get_notBefore X509_getm_notBefore # define X509_get_notAfter X509_getm_notAfter # define X509_set_notBefore X509_set1_notBefore @@ -672,12 +872,13 @@ const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); EVP_PKEY *X509_get0_pubkey(const X509 *x); EVP_PKEY *X509_get_pubkey(X509 *x); ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); -int X509_certificate_type(const X509 *x, const EVP_PKEY *pubkey); + +#define X509_REQ_VERSION_1 0 long X509_REQ_get_version(const X509_REQ *req); int X509_REQ_set_version(X509_REQ *x, long version); X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); -int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); +int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name); void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, const X509_ALGOR **palg); void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig); @@ -692,9 +893,9 @@ int X509_REQ_extension_nid(int nid); int *X509_REQ_get_extension_nids(void); void X509_REQ_set_extension_nids(int *nids); STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); -int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, - int nid); -int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); +int X509_REQ_add_extensions_nid(X509_REQ *req, + const STACK_OF(X509_EXTENSION) *exts, int nid); +int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext); int X509_REQ_get_attr_count(const X509_REQ *req); int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, @@ -712,14 +913,17 @@ int X509_REQ_add1_attr_by_txt(X509_REQ *req, const char *attrname, int type, const unsigned char *bytes, int len); +#define X509_CRL_VERSION_1 0 +#define X509_CRL_VERSION_2 1 + int X509_CRL_set_version(X509_CRL *x, long version); -int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); +int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name); int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); int X509_CRL_sort(X509_CRL *crl); int X509_CRL_up_ref(X509_CRL *crl); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate # define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate #endif @@ -727,8 +931,10 @@ int X509_CRL_up_ref(X509_CRL *crl); long X509_CRL_get_version(const X509_CRL *crl); const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)) -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)) +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl); +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl); +#endif X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); @@ -770,10 +976,24 @@ unsigned long X509_issuer_name_hash_old(X509 *a); unsigned long X509_subject_name_hash_old(X509 *x); # endif +# define X509_ADD_FLAG_DEFAULT 0 +# define X509_ADD_FLAG_UP_REF 0x1 +# define X509_ADD_FLAG_PREPEND 0x2 +# define X509_ADD_FLAG_NO_DUP 0x4 +# define X509_ADD_FLAG_NO_SS 0x8 +int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags); +int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags); + int X509_cmp(const X509 *a, const X509 *b); int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); -unsigned long X509_NAME_hash(X509_NAME *x); -unsigned long X509_NAME_hash_old(X509_NAME *x); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL) +OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x, + const EVP_PKEY *pubkey); +#endif +unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx, + const char *propq, int *ok); +unsigned long X509_NAME_hash_old(const X509_NAME *x); int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); @@ -802,16 +1022,17 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, int X509_REQ_print(BIO *bp, X509_REQ *req); int X509_NAME_entry_count(const X509_NAME *name); -int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); -int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, +int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid, + char *buf, int len); +int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, char *buf, int len); /* * NOTE: you should be passing -1, not 0 as lastpos. The functions that use * lastpos, search after that position on. */ -int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); -int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, +int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, int lastpos); X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); @@ -845,7 +1066,7 @@ ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); -int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder, +int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder, size_t *pderlen); int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); @@ -972,12 +1193,10 @@ int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, const char *attrname, int type, const unsigned char *bytes, int len); -int X509_verify_cert(X509_STORE_CTX *ctx); - /* lookup a cert from a X509 STACK */ -X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, - ASN1_INTEGER *serial); -X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name, + const ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name); DECLARE_ASN1_FUNCTIONS(PBEPARAM) DECLARE_ASN1_FUNCTIONS(PBE2PARAM) @@ -988,14 +1207,25 @@ DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, const unsigned char *salt, int saltlen); +int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); X509_ALGOR *PKCS5_pbe_set(int alg, int iter, const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, unsigned char *salt, int saltlen); X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, unsigned char *salt, int saltlen, unsigned char *aiv, int prf_nid); +X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid, + OSSL_LIB_CTX *libctx); #ifndef OPENSSL_NO_SCRYPT X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, @@ -1006,13 +1236,18 @@ X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, int prf_nid, int keylen); +X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen, + OSSL_LIB_CTX *libctx); /* PKCS#8 utilities */ DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); -PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); +EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey); int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, int version, int ptype, void *pval, @@ -1023,26 +1258,20 @@ int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, const STACK_OF(X509_ATTRIBUTE) * PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr); int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, const unsigned char *bytes, int len); +int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj, + int type, const unsigned char *bytes, int len); + int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, int ptype, void *pval, unsigned char *penc, int penclen); int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, const unsigned char **pk, int *ppklen, - X509_ALGOR **pa, X509_PUBKEY *pub); - -int X509_check_trust(X509 *x, int id, int flags); -int X509_TRUST_get_count(void); -X509_TRUST *X509_TRUST_get0(int idx); -int X509_TRUST_get_by_id(int id); -int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), - const char *name, int arg1, void *arg2); -void X509_TRUST_cleanup(void); -int X509_TRUST_get_flags(const X509_TRUST *xp); -char *X509_TRUST_get0_name(const X509_TRUST *xp); -int X509_TRUST_get_trust(const X509_TRUST *xp); + X509_ALGOR **pa, const X509_PUBKEY *pub); +int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b); # ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h.in new file mode 100644 index 00000000..d4df2adc --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h.in @@ -0,0 +1,1085 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509_H +# define OPENSSL_X509_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_H +# endif + +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# endif + +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Needed stacks for types defined in other headers */ +{- + generate_stack_macros("X509_NAME") + .generate_stack_macros("X509") + .generate_stack_macros("X509_REVOKED") + .generate_stack_macros("X509_CRL"); +-} + +/* Flags for X509_get_signature_info() */ +/* Signature info is valid */ +# define X509_SIG_INFO_VALID 0x1 +/* Signature is suitable for TLS use */ +# define X509_SIG_INFO_TLS 0x2 + +# define X509_FILETYPE_PEM 1 +# define X509_FILETYPE_ASN1 2 +# define X509_FILETYPE_DEFAULT 3 + +# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 +# define X509v3_KU_NON_REPUDIATION 0x0040 +# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 +# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 +# define X509v3_KU_KEY_AGREEMENT 0x0008 +# define X509v3_KU_KEY_CERT_SIGN 0x0004 +# define X509v3_KU_CRL_SIGN 0x0002 +# define X509v3_KU_ENCIPHER_ONLY 0x0001 +# define X509v3_KU_DECIPHER_ONLY 0x8000 +# define X509v3_KU_UNDEF 0xffff + +struct X509_algor_st { + ASN1_OBJECT *algorithm; + ASN1_TYPE *parameter; +} /* X509_ALGOR */ ; + +typedef STACK_OF(X509_ALGOR) X509_ALGORS; + +typedef struct X509_val_st { + ASN1_TIME *notBefore; + ASN1_TIME *notAfter; +} X509_VAL; + +typedef struct X509_sig_st X509_SIG; + +typedef struct X509_name_entry_st X509_NAME_ENTRY; + +{- + generate_stack_macros("X509_NAME_ENTRY"); +-} + +# define X509_EX_V_NETSCAPE_HACK 0x8000 +# define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st X509_EXTENSION; +{- + generate_stack_macros("X509_EXTENSION"); +-} +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; +typedef struct x509_attributes_st X509_ATTRIBUTE; +{- + generate_stack_macros("X509_ATTRIBUTE"); +-} +typedef struct X509_req_info_st X509_REQ_INFO; +typedef struct X509_req_st X509_REQ; +typedef struct x509_cert_aux_st X509_CERT_AUX; +typedef struct x509_cinf_st X509_CINF; + +/* Flags for X509_print_ex() */ + +# define X509_FLAG_COMPAT 0 +# define X509_FLAG_NO_HEADER 1L +# define X509_FLAG_NO_VERSION (1L << 1) +# define X509_FLAG_NO_SERIAL (1L << 2) +# define X509_FLAG_NO_SIGNAME (1L << 3) +# define X509_FLAG_NO_ISSUER (1L << 4) +# define X509_FLAG_NO_VALIDITY (1L << 5) +# define X509_FLAG_NO_SUBJECT (1L << 6) +# define X509_FLAG_NO_PUBKEY (1L << 7) +# define X509_FLAG_NO_EXTENSIONS (1L << 8) +# define X509_FLAG_NO_SIGDUMP (1L << 9) +# define X509_FLAG_NO_AUX (1L << 10) +# define X509_FLAG_NO_ATTRIBUTES (1L << 11) +# define X509_FLAG_NO_IDS (1L << 12) +# define X509_FLAG_EXTENSIONS_ONLY_KID (1L << 13) + +/* Flags specific to X509_NAME_print_ex() */ + +/* The field separator information */ + +# define XN_FLAG_SEP_MASK (0xf << 16) + +# define XN_FLAG_COMPAT 0/* Traditional; use old X509_NAME_print */ +# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ +# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ +# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ +# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ + +# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ + +/* How the field name is shown */ + +# define XN_FLAG_FN_MASK (0x3 << 21) + +# define XN_FLAG_FN_SN 0/* Object short name */ +# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ +# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ +# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ + +# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ + +/* + * This determines if we dump fields we don't recognise: RFC2253 requires + * this. + */ + +# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) + +# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 + * characters */ + +/* Complete set of RFC2253 flags */ + +# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ + XN_FLAG_SEP_COMMA_PLUS | \ + XN_FLAG_DN_REV | \ + XN_FLAG_FN_SN | \ + XN_FLAG_DUMP_UNKNOWN_FIELDS) + +/* readable oneline form */ + +# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ + ASN1_STRFLGS_ESC_QUOTE | \ + XN_FLAG_SEP_CPLUS_SPC | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_SN) + +/* readable multiline form */ + +# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + XN_FLAG_SEP_MULTILINE | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_LN | \ + XN_FLAG_FN_ALIGN) + +typedef struct X509_crl_info_st X509_CRL_INFO; + +typedef struct private_key_st { + int version; + /* The PKCS#8 data types */ + X509_ALGOR *enc_algor; + ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ + /* When decrypted, the following will not be NULL */ + EVP_PKEY *dec_pkey; + /* used to encrypt and decrypt */ + int key_length; + char *key_data; + int key_free; /* true if we should auto free key_data */ + /* expanded version of 'enc_algor' */ + EVP_CIPHER_INFO cipher; +} X509_PKEY; + +typedef struct X509_info_st { + X509 *x509; + X509_CRL *crl; + X509_PKEY *x_pkey; + EVP_CIPHER_INFO enc_cipher; + int enc_len; + char *enc_data; +} X509_INFO; +{- + generate_stack_macros("X509_INFO"); +-} + +/* + * The next 2 structures and their 8 routines are used to manipulate Netscape's + * spki structures - useful if you are writing a CA web page + */ +typedef struct Netscape_spkac_st { + X509_PUBKEY *pubkey; + ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ +} NETSCAPE_SPKAC; + +typedef struct Netscape_spki_st { + NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ + X509_ALGOR sig_algor; + ASN1_BIT_STRING *signature; +} NETSCAPE_SPKI; + +/* Netscape certificate sequence structure */ +typedef struct Netscape_certificate_sequence { + ASN1_OBJECT *type; + STACK_OF(X509) *certs; +} NETSCAPE_CERT_SEQUENCE; + +/*- Unused (and iv length is wrong) +typedef struct CBCParameter_st + { + unsigned char iv[8]; + } CBC_PARAM; +*/ + +/* Password based encryption structure */ + +typedef struct PBEPARAM_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *iter; +} PBEPARAM; + +/* Password based encryption V2 structures */ + +typedef struct PBE2PARAM_st { + X509_ALGOR *keyfunc; + X509_ALGOR *encryption; +} PBE2PARAM; + +typedef struct PBKDF2PARAM_st { +/* Usually OCTET STRING but could be anything */ + ASN1_TYPE *salt; + ASN1_INTEGER *iter; + ASN1_INTEGER *keylength; + X509_ALGOR *prf; +} PBKDF2PARAM; + +#ifndef OPENSSL_NO_SCRYPT +typedef struct SCRYPT_PARAMS_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *costParameter; + ASN1_INTEGER *blockSize; + ASN1_INTEGER *parallelizationParameter; + ASN1_INTEGER *keyLength; +} SCRYPT_PARAMS; +#endif + +#ifdef __cplusplus +} +#endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define X509_EXT_PACK_UNKNOWN 1 +# define X509_EXT_PACK_STRING 2 + +# define X509_extract_key(x) X509_get_pubkey(x)/*****/ +# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) +# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) + +void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); +X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), + int (*crl_free) (X509_CRL *crl), + int (*crl_lookup) (X509_CRL *crl, + X509_REVOKED **ret, + const + ASN1_INTEGER *serial, + const + X509_NAME *issuer), + int (*crl_verify) (X509_CRL *crl, + EVP_PKEY *pk)); +void X509_CRL_METHOD_free(X509_CRL_METHOD *m); + +void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); +void *X509_CRL_get_meth_data(X509_CRL *crl); + +const char *X509_verify_cert_error_string(long n); + +int X509_verify(X509 *a, EVP_PKEY *r); +int X509_self_signed(X509 *cert, int verify_signature); + +int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); +int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); +int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); + +NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); +char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); +EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); +int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); + +int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); + +int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); +int X509_signature_print(BIO *bp, const X509_ALGOR *alg, + const ASN1_STRING *sig); + +int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); +int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); +int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); +int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); + +int X509_pubkey_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert, + EVP_MD **md_used, int *md_is_fallback); +int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); + +X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include /* OSSL_HTTP_REQ_CTX_nbio_d2i */ +# define X509_http_nbio(rctx, pcert) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509)) +# define X509_CRL_http_nbio(rctx, pcrl) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL)) +# endif + +# ifndef OPENSSL_NO_STDIO +X509 *d2i_X509_fp(FILE *fp, X509 **x509); +int i2d_X509_fp(FILE *fp, const X509 *x509); +X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); +int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl); +X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); +int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); +int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); +int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); +# endif + +X509 *d2i_X509_bio(BIO *bp, X509 **x509); +int i2d_X509_bio(BIO *bp, const X509 *x509); +X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); +int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl); +X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); +int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa); +# endif +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); +int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); +int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); + +DECLARE_ASN1_DUP_FUNCTION(X509) +DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR) +DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) +DECLARE_ASN1_DUP_FUNCTION(X509_CRL) +DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION) +DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY) +DECLARE_ASN1_DUP_FUNCTION(X509_REQ) +DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED) +int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, + void *pval); +void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, + const void **ppval, const X509_ALGOR *algor); +void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); +int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); +int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); + +DECLARE_ASN1_DUP_FUNCTION(X509_NAME) +DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) + +int X509_cmp_time(const ASN1_TIME *s, time_t *t); +int X509_cmp_current_time(const ASN1_TIME *s); +int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm, + const ASN1_TIME *start, const ASN1_TIME *end); +ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); +ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, + int offset_day, long offset_sec, time_t *t); +ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); + +const char *X509_get_default_cert_area(void); +const char *X509_get_default_cert_dir(void); +const char *X509_get_default_cert_file(void); +const char *X509_get_default_cert_dir_env(void); +const char *X509_get_default_cert_file_env(void); +const char *X509_get_default_private_dir(void); + +X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); + +DECLARE_ASN1_FUNCTIONS(X509_ALGOR) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) +DECLARE_ASN1_FUNCTIONS(X509_VAL) + +DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) + +X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); +EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); +long X509_get_pathlen(X509 *x); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY) +EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY) +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY) +# endif +# endif + +DECLARE_ASN1_FUNCTIONS(X509_SIG) +void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg, + const ASN1_OCTET_STRING **pdigest); +void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, + ASN1_OCTET_STRING **pdigest); + +DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) +DECLARE_ASN1_FUNCTIONS(X509_REQ) +X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) +X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); + +DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) + +DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) + +DECLARE_ASN1_FUNCTIONS(X509_NAME) + +int X509_NAME_set(X509_NAME **xn, const X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(X509_CINF) +DECLARE_ASN1_FUNCTIONS(X509) +X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) + +#define X509_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) +int X509_set_ex_data(X509 *r, int idx, void *arg); +void *X509_get_ex_data(const X509 *r, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX) + +int i2d_re_X509_tbs(X509 *x, unsigned char **pp); + +int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, + int *secbits, uint32_t *flags); +void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, + int secbits, uint32_t flags); + +int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, + uint32_t *flags); + +void X509_get0_signature(const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg, const X509 *x); +int X509_get_signature_nid(const X509 *x); + +void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x); +void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x); + +int X509_alias_set1(X509 *x, const unsigned char *name, int len); +int X509_keyid_set1(X509 *x, const unsigned char *id, int len); +unsigned char *X509_alias_get0(X509 *x, int *len); +unsigned char *X509_keyid_get0(X509 *x, int *len); + +DECLARE_ASN1_FUNCTIONS(X509_REVOKED) +DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) +DECLARE_ASN1_FUNCTIONS(X509_CRL) +X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +int X509_CRL_get0_by_serial(X509_CRL *crl, + X509_REVOKED **ret, const ASN1_INTEGER *serial); +int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); + +X509_PKEY *X509_PKEY_new(void); +void X509_PKEY_free(X509_PKEY *a); + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) + +X509_INFO *X509_INFO_new(void); +void X509_INFO_free(X509_INFO *a); +char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, + unsigned char *md, unsigned int *len); +OSSL_DEPRECATEDIN_3_0 +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey, + const EVP_MD *type); +#endif +int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, + unsigned char *md, unsigned int *len); +int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey); +int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_MD_CTX *ctx); +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey, const EVP_MD *md); +int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, EVP_MD_CTX *ctx); + +#define X509_VERSION_1 0 +#define X509_VERSION_2 1 +#define X509_VERSION_3 2 + +long X509_get_version(const X509 *x); +int X509_set_version(X509 *x, long version); +int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +ASN1_INTEGER *X509_get_serialNumber(X509 *x); +const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); +int X509_set_issuer_name(X509 *x, const X509_NAME *name); +X509_NAME *X509_get_issuer_name(const X509 *a); +int X509_set_subject_name(X509 *x, const X509_NAME *name); +X509_NAME *X509_get_subject_name(const X509 *a); +const ASN1_TIME * X509_get0_notBefore(const X509 *x); +ASN1_TIME *X509_getm_notBefore(const X509 *x); +int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); +const ASN1_TIME *X509_get0_notAfter(const X509 *x); +ASN1_TIME *X509_getm_notAfter(const X509 *x); +int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +int X509_up_ref(X509 *x); +int X509_get_signature_type(const X509 *x); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_get_notBefore X509_getm_notBefore +# define X509_get_notAfter X509_getm_notAfter +# define X509_set_notBefore X509_set1_notBefore +# define X509_set_notAfter X509_set1_notAfter +#endif + + +/* + * This one is only used so that a binary form can output, as in + * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf) + */ +X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); +const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); +void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid, + const ASN1_BIT_STRING **psuid); +const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); + +EVP_PKEY *X509_get0_pubkey(const X509 *x); +EVP_PKEY *X509_get_pubkey(X509 *x); +ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); + +#define X509_REQ_VERSION_1 0 + +long X509_REQ_get_version(const X509_REQ *req); +int X509_REQ_set_version(X509_REQ *x, long version); +X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); +int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name); +void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig); +int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg); +int X509_REQ_get_signature_nid(const X509_REQ *req); +int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); +int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req); +int X509_REQ_extension_nid(int nid); +int *X509_REQ_get_extension_nids(void); +void X509_REQ_set_extension_nids(int *nids); +STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); +int X509_REQ_add_extensions_nid(X509_REQ *req, + const STACK_OF(X509_EXTENSION) *exts, int nid); +int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext); +int X509_REQ_get_attr_count(const X509_REQ *req); +int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); +int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); +X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); +int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); +int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_NID(X509_REQ *req, + int nid, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_txt(X509_REQ *req, + const char *attrname, int type, + const unsigned char *bytes, int len); + +#define X509_CRL_VERSION_1 0 +#define X509_CRL_VERSION_2 1 + +int X509_CRL_set_version(X509_CRL *x, long version); +int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name); +int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_sort(X509_CRL *crl); +int X509_CRL_up_ref(X509_CRL *crl); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate +# define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate +#endif + +long X509_CRL_get_version(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl); +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl); +#endif +X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); +const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); +STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); +void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_CRL_get_signature_nid(const X509_CRL *crl); +int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp); + +const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x); +int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x); +int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); +const STACK_OF(X509_EXTENSION) * +X509_REVOKED_get0_extensions(const X509_REVOKED *r); + +X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, + EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); + +int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); + +int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey); +int X509_chain_check_suiteb(int *perror_depth, + X509 *x, STACK_OF(X509) *chain, + unsigned long flags); +int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); +STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); + +int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_and_serial_hash(X509 *a); + +int X509_issuer_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_name_hash(X509 *a); + +int X509_subject_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_subject_name_hash(X509 *x); + +# ifndef OPENSSL_NO_MD5 +unsigned long X509_issuer_name_hash_old(X509 *a); +unsigned long X509_subject_name_hash_old(X509 *x); +# endif + +# define X509_ADD_FLAG_DEFAULT 0 +# define X509_ADD_FLAG_UP_REF 0x1 +# define X509_ADD_FLAG_PREPEND 0x2 +# define X509_ADD_FLAG_NO_DUP 0x4 +# define X509_ADD_FLAG_NO_SS 0x8 +int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags); +int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags); + +int X509_cmp(const X509 *a, const X509 *b); +int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL) +OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x, + const EVP_PKEY *pubkey); +#endif +unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx, + const char *propq, int *ok); +unsigned long X509_NAME_hash_old(const X509_NAME *x); + +int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); +int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); +int X509_aux_print(BIO *out, X509 *x, int indent); +# ifndef OPENSSL_NO_STDIO +int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print_fp(FILE *bp, X509 *x); +int X509_CRL_print_fp(FILE *bp, X509_CRL *x); +int X509_REQ_print_fp(FILE *bp, X509_REQ *req); +int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, + unsigned long flags); +# endif + +int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); +int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, + unsigned long flags); +int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print(BIO *bp, X509 *x); +int X509_ocspid_print(BIO *bp, X509 *x); +int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag); +int X509_CRL_print(BIO *bp, X509_CRL *x); +int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, + unsigned long cflag); +int X509_REQ_print(BIO *bp, X509_REQ *req); + +int X509_NAME_entry_count(const X509_NAME *name); +int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid, + char *buf, int len); +int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, + char *buf, int len); + +/* + * NOTE: you should be passing -1, not 0 as lastpos. The functions that use + * lastpos, search after that position on. + */ +int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, + int lastpos); +X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); +X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); +int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, + int loc, int set); +int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len, int loc, + int set); +int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, + const char *field, int type, + const unsigned char *bytes, + int len); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, + int type, + const unsigned char *bytes, + int len); +int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, + int len); +int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj); +int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, + const unsigned char *bytes, int len); +ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); +ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); +int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); + +int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder, + size_t *pderlen); + +int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); +int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, + int nid, int lastpos); +int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, + const ASN1_OBJECT *obj, int lastpos); +int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, + int crit, int lastpos); +X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); +X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); +STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, + X509_EXTENSION *ex, int loc); + +int X509_get_ext_count(const X509 *x); +int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); +int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); +int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); +X509_EXTENSION *X509_get_ext(const X509 *x, int loc); +X509_EXTENSION *X509_delete_ext(X509 *x, int loc); +int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); +void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx); +int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_CRL_get_ext_count(const X509_CRL *x); +int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); +int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); +X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc); +X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); +int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); +void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx); +int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_REVOKED_get_ext_count(const X509_REVOKED *x); +int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos); +int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, + int lastpos); +X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc); +X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); +int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); +void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit, + int *idx); +int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, + unsigned long flags); + +X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, + int nid, int crit, + ASN1_OCTET_STRING *data); +X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, + const ASN1_OBJECT *obj, int crit, + ASN1_OCTET_STRING *data); +int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj); +int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); +int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); +ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); +ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); +int X509_EXTENSION_get_critical(const X509_EXTENSION *ex); + +int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); +int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, + int lastpos); +int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); +X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, + X509_ATTRIBUTE *attr); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) + **x, const ASN1_OBJECT *obj, + int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) + **x, int nid, int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) + **x, const char *attrname, + int type, + const unsigned char *bytes, + int len); +void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x, + const ASN1_OBJECT *obj, int lastpos, int type); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, + const ASN1_OBJECT *obj, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, + const char *atrname, int type, + const unsigned char *bytes, + int len); +int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); +int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, + const void *data, int len); +void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, + void *data); +int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr); +ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); +ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); + +int EVP_PKEY_get_attr_count(const EVP_PKEY *key); +int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); +int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); +X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); +int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); +int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, + int nid, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, + const char *attrname, int type, + const unsigned char *bytes, int len); + +/* lookup a cert from a X509 STACK */ +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name, + const ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(PBEPARAM) +DECLARE_ASN1_FUNCTIONS(PBE2PARAM) +DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) +#ifndef OPENSSL_NO_SCRYPT +DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) +#endif + +int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen); +int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + +X509_ALGOR *PKCS5_pbe_set(int alg, int iter, + const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + +X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid); +X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid, + OSSL_LIB_CTX *libctx); + +#ifndef OPENSSL_NO_SCRYPT +X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, + const unsigned char *salt, int saltlen, + unsigned char *aiv, uint64_t N, uint64_t r, + uint64_t p); +#endif + +X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen); +X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen, + OSSL_LIB_CTX *libctx); + +/* PKCS#8 utilities */ + +DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) + +EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); +EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey); + +int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, + int version, int ptype, void *pval, + unsigned char *penc, int penclen); +int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8); + +const STACK_OF(X509_ATTRIBUTE) * +PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr); +int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, + const unsigned char *bytes, int len); +int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj, + int type, const unsigned char *bytes, int len); + + +int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, + int ptype, void *pval, + unsigned char *penc, int penclen); +int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, const X509_PUBKEY *pub); +int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h index 25c79f1b..29b0e147 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h @@ -1,19 +1,30 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509_vfy.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509_VFY_H -# define HEADER_X509_VFY_H + + +#ifndef OPENSSL_X509_VFY_H +# define OPENSSL_X509_VFY_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_VFY_H +# endif /* * Protect against recursion, x509.h and x509_vfy.h each include the other. */ -# ifndef HEADER_X509_H +# ifndef OPENSSL_X509_H # include # endif @@ -49,18 +60,190 @@ typedef enum { X509_LU_X509, X509_LU_CRL } X509_LOOKUP_TYPE; -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 #define X509_LU_RETRY -1 #define X509_LU_FAIL 0 #endif -DEFINE_STACK_OF(X509_LOOKUP) -DEFINE_STACK_OF(X509_OBJECT) -DEFINE_STACK_OF(X509_VERIFY_PARAM) +SKM_DEFINE_STACK_OF_INTERNAL(X509_LOOKUP, X509_LOOKUP, X509_LOOKUP) +#define sk_X509_LOOKUP_num(sk) OPENSSL_sk_num(ossl_check_const_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_value(sk, idx) ((X509_LOOKUP *)OPENSSL_sk_value(ossl_check_const_X509_LOOKUP_sk_type(sk), (idx))) +#define sk_X509_LOOKUP_new(cmp) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new(ossl_check_X509_LOOKUP_compfunc_type(cmp))) +#define sk_X509_LOOKUP_new_null() ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_null()) +#define sk_X509_LOOKUP_new_reserve(cmp, n) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_reserve(ossl_check_X509_LOOKUP_compfunc_type(cmp), (n))) +#define sk_X509_LOOKUP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_LOOKUP_sk_type(sk), (n)) +#define sk_X509_LOOKUP_free(sk) OPENSSL_sk_free(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_zero(sk) OPENSSL_sk_zero(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_delete(sk, i) ((X509_LOOKUP *)OPENSSL_sk_delete(ossl_check_X509_LOOKUP_sk_type(sk), (i))) +#define sk_X509_LOOKUP_delete_ptr(sk, ptr) ((X509_LOOKUP *)OPENSSL_sk_delete_ptr(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr))) +#define sk_X509_LOOKUP_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_pop(sk) ((X509_LOOKUP *)OPENSSL_sk_pop(ossl_check_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_shift(sk) ((X509_LOOKUP *)OPENSSL_sk_shift(ossl_check_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_LOOKUP_sk_type(sk),ossl_check_X509_LOOKUP_freefunc_type(freefunc)) +#define sk_X509_LOOKUP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), (idx)) +#define sk_X509_LOOKUP_set(sk, idx, ptr) ((X509_LOOKUP *)OPENSSL_sk_set(ossl_check_X509_LOOKUP_sk_type(sk), (idx), ossl_check_X509_LOOKUP_type(ptr))) +#define sk_X509_LOOKUP_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), pnum) +#define sk_X509_LOOKUP_sort(sk) OPENSSL_sk_sort(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_dup(sk) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_dup(ossl_check_const_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_copyfunc_type(copyfunc), ossl_check_X509_LOOKUP_freefunc_type(freefunc))) +#define sk_X509_LOOKUP_set_cmp_func(sk, cmp) ((sk_X509_LOOKUP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_OBJECT, X509_OBJECT, X509_OBJECT) +#define sk_X509_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_value(sk, idx) ((X509_OBJECT *)OPENSSL_sk_value(ossl_check_const_X509_OBJECT_sk_type(sk), (idx))) +#define sk_X509_OBJECT_new(cmp) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new(ossl_check_X509_OBJECT_compfunc_type(cmp))) +#define sk_X509_OBJECT_new_null() ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_null()) +#define sk_X509_OBJECT_new_reserve(cmp, n) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_X509_OBJECT_compfunc_type(cmp), (n))) +#define sk_X509_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_OBJECT_sk_type(sk), (n)) +#define sk_X509_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_delete(sk, i) ((X509_OBJECT *)OPENSSL_sk_delete(ossl_check_X509_OBJECT_sk_type(sk), (i))) +#define sk_X509_OBJECT_delete_ptr(sk, ptr) ((X509_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr))) +#define sk_X509_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_pop(sk) ((X509_OBJECT *)OPENSSL_sk_pop(ossl_check_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_shift(sk) ((X509_OBJECT *)OPENSSL_sk_shift(ossl_check_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_OBJECT_sk_type(sk),ossl_check_X509_OBJECT_freefunc_type(freefunc)) +#define sk_X509_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), (idx)) +#define sk_X509_OBJECT_set(sk, idx, ptr) ((X509_OBJECT *)OPENSSL_sk_set(ossl_check_X509_OBJECT_sk_type(sk), (idx), ossl_check_X509_OBJECT_type(ptr))) +#define sk_X509_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), pnum) +#define sk_X509_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_dup(sk) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_copyfunc_type(copyfunc), ossl_check_X509_OBJECT_freefunc_type(freefunc))) +#define sk_X509_OBJECT_set_cmp_func(sk, cmp) ((sk_X509_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_VERIFY_PARAM, X509_VERIFY_PARAM, X509_VERIFY_PARAM) +#define sk_X509_VERIFY_PARAM_num(sk) OPENSSL_sk_num(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_value(sk, idx) ((X509_VERIFY_PARAM *)OPENSSL_sk_value(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), (idx))) +#define sk_X509_VERIFY_PARAM_new(cmp) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) +#define sk_X509_VERIFY_PARAM_new_null() ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_null()) +#define sk_X509_VERIFY_PARAM_new_reserve(cmp, n) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_reserve(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp), (n))) +#define sk_X509_VERIFY_PARAM_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (n)) +#define sk_X509_VERIFY_PARAM_free(sk) OPENSSL_sk_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_zero(sk) OPENSSL_sk_zero(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_delete(sk, i) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (i))) +#define sk_X509_VERIFY_PARAM_delete_ptr(sk, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete_ptr(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr))) +#define sk_X509_VERIFY_PARAM_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_pop(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_pop(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_shift(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_shift(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk),ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc)) +#define sk_X509_VERIFY_PARAM_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), (idx)) +#define sk_X509_VERIFY_PARAM_set(sk, idx, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_set(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (idx), ossl_check_X509_VERIFY_PARAM_type(ptr))) +#define sk_X509_VERIFY_PARAM_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), pnum) +#define sk_X509_VERIFY_PARAM_sort(sk) OPENSSL_sk_sort(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_dup(sk) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_dup(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_copyfunc_type(copyfunc), ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc))) +#define sk_X509_VERIFY_PARAM_set_cmp_func(sk, cmp) ((sk_X509_VERIFY_PARAM_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) + + +/* This is used for a table of trust checking functions */ +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; +SKM_DEFINE_STACK_OF_INTERNAL(X509_TRUST, X509_TRUST, X509_TRUST) +#define sk_X509_TRUST_num(sk) OPENSSL_sk_num(ossl_check_const_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_value(sk, idx) ((X509_TRUST *)OPENSSL_sk_value(ossl_check_const_X509_TRUST_sk_type(sk), (idx))) +#define sk_X509_TRUST_new(cmp) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new(ossl_check_X509_TRUST_compfunc_type(cmp))) +#define sk_X509_TRUST_new_null() ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_null()) +#define sk_X509_TRUST_new_reserve(cmp, n) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_reserve(ossl_check_X509_TRUST_compfunc_type(cmp), (n))) +#define sk_X509_TRUST_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_TRUST_sk_type(sk), (n)) +#define sk_X509_TRUST_free(sk) OPENSSL_sk_free(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_zero(sk) OPENSSL_sk_zero(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_delete(sk, i) ((X509_TRUST *)OPENSSL_sk_delete(ossl_check_X509_TRUST_sk_type(sk), (i))) +#define sk_X509_TRUST_delete_ptr(sk, ptr) ((X509_TRUST *)OPENSSL_sk_delete_ptr(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr))) +#define sk_X509_TRUST_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_pop(sk) ((X509_TRUST *)OPENSSL_sk_pop(ossl_check_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_shift(sk) ((X509_TRUST *)OPENSSL_sk_shift(ossl_check_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_TRUST_sk_type(sk),ossl_check_X509_TRUST_freefunc_type(freefunc)) +#define sk_X509_TRUST_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), (idx)) +#define sk_X509_TRUST_set(sk, idx, ptr) ((X509_TRUST *)OPENSSL_sk_set(ossl_check_X509_TRUST_sk_type(sk), (idx), ossl_check_X509_TRUST_type(ptr))) +#define sk_X509_TRUST_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), pnum) +#define sk_X509_TRUST_sort(sk) OPENSSL_sk_sort(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_dup(sk) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_dup(ossl_check_const_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_copyfunc_type(copyfunc), ossl_check_X509_TRUST_freefunc_type(freefunc))) +#define sk_X509_TRUST_set_cmp_func(sk, cmp) ((sk_X509_TRUST_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_compfunc_type(cmp))) + + +/* standard trust ids */ +# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard rejection OID and as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* check_trust return codes */ +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +int X509_TRUST_set(int *t, int trust); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const X509_TRUST *xp); + +int X509_trusted(const X509 *x); +int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); + +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_check_trust(X509 *x, int id, int flags); + +int X509_verify_cert(X509_STORE_CTX *ctx); +int X509_STORE_CTX_verify(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs, + X509_STORE *store, int with_self_signed, + OSSL_LIB_CTX *libctx, const char *propq); int X509_STORE_set_depth(X509_STORE *store, int depth); typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); @@ -73,13 +256,14 @@ typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); -typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); -typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); +typedef STACK_OF(X509) + *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef STACK_OF(X509_CRL) + *(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx, + const X509_NAME *nm); typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); - void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_STORE_CTX_set_app_data(ctx,data) \ @@ -89,6 +273,8 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_L_FILE_LOAD 1 # define X509_L_ADD_DIR 2 +# define X509_L_ADD_STORE 3 +# define X509_L_LOAD_STORE 4 # define X509_LOOKUP_load_file(x,name,type) \ X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) @@ -96,102 +282,138 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_LOOKUP_add_dir(x,name,type) \ X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) -# define X509_V_OK 0 -# define X509_V_ERR_UNSPECIFIED 1 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 -# define X509_V_ERR_UNABLE_TO_GET_CRL 3 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 -# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 -# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 -# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 -# define X509_V_ERR_CERT_NOT_YET_VALID 9 -# define X509_V_ERR_CERT_HAS_EXPIRED 10 -# define X509_V_ERR_CRL_NOT_YET_VALID 11 -# define X509_V_ERR_CRL_HAS_EXPIRED 12 -# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 -# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 -# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 -# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 -# define X509_V_ERR_OUT_OF_MEM 17 -# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 -# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 -# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 -# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 -# define X509_V_ERR_CERT_REVOKED 23 -# define X509_V_ERR_INVALID_CA 24 -# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 -# define X509_V_ERR_INVALID_PURPOSE 26 -# define X509_V_ERR_CERT_UNTRUSTED 27 -# define X509_V_ERR_CERT_REJECTED 28 -/* These are 'informational' when looking for issuer cert */ -# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 -# define X509_V_ERR_AKID_SKID_MISMATCH 30 -# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 -# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 -# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 -# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 -# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 -# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 -# define X509_V_ERR_INVALID_NON_CA 37 -# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 -# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 -# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 -# define X509_V_ERR_INVALID_EXTENSION 41 -# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 -# define X509_V_ERR_NO_EXPLICIT_POLICY 43 -# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 -# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 -# define X509_V_ERR_UNNESTED_RESOURCE 46 -# define X509_V_ERR_PERMITTED_VIOLATION 47 -# define X509_V_ERR_EXCLUDED_VIOLATION 48 -# define X509_V_ERR_SUBTREE_MINMAX 49 -/* The application is not happy */ -# define X509_V_ERR_APPLICATION_VERIFICATION 50 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 -# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 -# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 -/* Another issuer check debug option */ -# define X509_V_ERR_PATH_LOOP 55 -/* Suite B mode algorithm violation */ -# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 -# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 -# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 -# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 -# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 -# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 -/* Host, email and IP check errors */ -# define X509_V_ERR_HOSTNAME_MISMATCH 62 -# define X509_V_ERR_EMAIL_MISMATCH 63 -# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 -/* DANE TLSA errors */ -# define X509_V_ERR_DANE_NO_MATCH 65 -/* security level errors */ -# define X509_V_ERR_EE_KEY_TOO_SMALL 66 -# define X509_V_ERR_CA_KEY_TOO_SMALL 67 -# define X509_V_ERR_CA_MD_TOO_WEAK 68 -/* Caller error */ -# define X509_V_ERR_INVALID_CALL 69 -/* Issuer lookup error */ -# define X509_V_ERR_STORE_LOOKUP 70 -/* Certificate transparency */ -# define X509_V_ERR_NO_VALID_SCTS 71 +# define X509_LOOKUP_add_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_STORE,(name),0,NULL) -# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 +# define X509_LOOKUP_load_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_LOAD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_file_ex(x, name, type, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_FILE_LOAD, (name), (long)(type), NULL,\ + (libctx), (propq)) + +# define X509_LOOKUP_load_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_LOAD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_LOOKUP_add_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 + +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 /* OCSP status errors */ -# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ -# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ -# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ -# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 76 -# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 77 -# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 78 -# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 79 +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ + +# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 76 +# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 77 + +/* Errors in case a check in X509_V_FLAG_X509_STRICT mode fails */ +# define X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY 78 +# define X509_V_ERR_INVALID_CA 79 +# define X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA 80 +# define X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN 81 +# define X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA 82 +# define X509_V_ERR_ISSUER_NAME_EMPTY 83 +# define X509_V_ERR_SUBJECT_NAME_EMPTY 84 +# define X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER 85 +# define X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER 86 +# define X509_V_ERR_EMPTY_SUBJECT_ALT_NAME 87 +# define X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL 88 +# define X509_V_ERR_CA_BCONS_NOT_CRITICAL 89 +# define X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL 90 +# define X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL 91 +# define X509_V_ERR_CA_CERT_MISSING_KEY_USAGE 92 +# define X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3 93 +# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94 /* Certificate verify flags */ - -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ # endif /* Use check time instead of current time */ @@ -254,10 +476,10 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); | X509_V_FLAG_INHIBIT_MAP) int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, X509_OBJECT *x); int X509_OBJECT_up_ref_count(X509_OBJECT *a); @@ -266,102 +488,106 @@ void X509_OBJECT_free(X509_OBJECT *a); X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); -X509_CRL *X509_OBJECT_get0_X509_CRL(X509_OBJECT *a); +X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); void X509_STORE_free(X509_STORE *v); int X509_STORE_lock(X509_STORE *ctx); int X509_STORE_unlock(X509_STORE *ctx); int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); - -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); -STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); +STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, + const X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st, + const X509_NAME *nm); int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); +int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); +X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); #define X509_STORE_set_verify_func(ctx, func) \ X509_STORE_set_verify((ctx),(func)) void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_fn verify); -X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(const X509_STORE *ctx); void X509_STORE_set_verify_cb(X509_STORE *ctx, X509_STORE_CTX_verify_cb verify_cb); # define X509_STORE_set_verify_cb_func(ctx,func) \ X509_STORE_set_verify_cb((ctx),(func)) -X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE *ctx); +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(const X509_STORE *ctx); void X509_STORE_set_get_issuer(X509_STORE *ctx, X509_STORE_CTX_get_issuer_fn get_issuer); -X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *ctx); void X509_STORE_set_check_issued(X509_STORE *ctx, X509_STORE_CTX_check_issued_fn check_issued); -X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *ctx); void X509_STORE_set_check_revocation(X509_STORE *ctx, X509_STORE_CTX_check_revocation_fn check_revocation); -X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE *ctx); +X509_STORE_CTX_check_revocation_fn + X509_STORE_get_check_revocation(const X509_STORE *ctx); void X509_STORE_set_get_crl(X509_STORE *ctx, X509_STORE_CTX_get_crl_fn get_crl); -X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *ctx); void X509_STORE_set_check_crl(X509_STORE *ctx, X509_STORE_CTX_check_crl_fn check_crl); -X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *ctx); void X509_STORE_set_cert_crl(X509_STORE *ctx, X509_STORE_CTX_cert_crl_fn cert_crl); -X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *ctx); void X509_STORE_set_check_policy(X509_STORE *ctx, X509_STORE_CTX_check_policy_fn check_policy); -X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *ctx); void X509_STORE_set_lookup_certs(X509_STORE *ctx, X509_STORE_CTX_lookup_certs_fn lookup_certs); -X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *ctx); void X509_STORE_set_lookup_crls(X509_STORE *ctx, X509_STORE_CTX_lookup_crls_fn lookup_crls); #define X509_STORE_set_lookup_crls_cb(ctx, func) \ X509_STORE_set_lookup_crls((ctx), (func)) -X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(const X509_STORE *ctx); void X509_STORE_set_cleanup(X509_STORE *ctx, X509_STORE_CTX_cleanup_fn cleanup); -X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *ctx); #define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(X509_STORE *ctx, int idx); +void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); X509_STORE_CTX *X509_STORE_CTX_new(void); int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); void X509_STORE_CTX_free(X509_STORE_CTX *ctx); -int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, - X509 *x509, STACK_OF(X509) *chain); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store, + X509 *target, STACK_OF(X509) *untrusted); void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); -X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); -X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); -STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx); +X509_STORE *X509_STORE_CTX_get0_store(const X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_cb verify); -X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); -X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); -X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(const X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain # define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted # define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack @@ -377,17 +603,28 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); X509_LOOKUP_METHOD *X509_LOOKUP_file(void); +X509_LOOKUP_METHOD *X509_LOOKUP_store(void); typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret); +typedef int (*X509_LOOKUP_ctrl_ex_fn)( + X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret, + OSSL_LIB_CTX *libctx, const char *propq); + typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, + const X509_NAME *name, X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_subject_ex_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, + const char *propq); typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, - ASN1_INTEGER *serial, + const X509_NAME *name, + const ASN1_INTEGER *serial, X509_OBJECT *ret); typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, @@ -451,26 +688,37 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); -int X509_STORE_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); +int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret); +int X509_LOOKUP_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, + char **ret, OSSL_LIB_CTX *libctx, const char *propq); int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); void X509_LOOKUP_free(X509_LOOKUP *ctx); int X509_LOOKUP_init(X509_LOOKUP *ctx); int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); + const X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_subject_ex(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, const char *propq); int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, ASN1_INTEGER *serial, + const X509_NAME *name, + const ASN1_INTEGER *serial, X509_OBJECT *ret); int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, const unsigned char *bytes, int len, @@ -482,28 +730,42 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); +int X509_STORE_load_file(X509_STORE *ctx, const char *file); +int X509_STORE_load_path(X509_STORE *ctx, const char *path); +int X509_STORE_load_store(X509_STORE *ctx, const char *store); int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, const char *dir); + const char *file, + const char *dir); int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file_ex(X509_STORE *ctx, const char *file, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_store_ex(X509_STORE *ctx, const char *store, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_locations_ex(X509_STORE *ctx, const char *file, + const char *dir, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, + const char *propq); + #define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); -void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); -int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); +void *X509_STORE_CTX_get_ex_data(const X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); -int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); -X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); -X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); -X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); +X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target); void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); -void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, @@ -512,11 +774,11 @@ void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, time_t t); -X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_num_untrusted(X509_STORE_CTX *ctx); +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx); -X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); @@ -540,7 +802,7 @@ int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, unsigned long flags); int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, unsigned long flags); -unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); +unsigned long X509_VERIFY_PARAM_get_flags(const X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); @@ -556,6 +818,7 @@ int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, uint32_t flags); uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); +char *X509_VERIFY_PARAM_get0_host(X509_VERIFY_PARAM *param, int idx); int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen); int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, @@ -563,10 +826,12 @@ int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned int flags); unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); -char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_peername(const X509_VERIFY_PARAM *param); void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_email(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, const char *email, size_t emaillen); +char *X509_VERIFY_PARAM_get1_ip_asc(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, const unsigned char *ip, size_t iplen); int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, @@ -605,26 +870,23 @@ int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, int i); -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const - X509_POLICY_TREE - *tree); +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree); -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const - X509_POLICY_TREE - *tree); +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree); int X509_policy_level_node_count(X509_POLICY_LEVEL *level); -X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, +X509_POLICY_NODE *X509_policy_level_get0_node(const X509_POLICY_LEVEL *level, int i); const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); -STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const - X509_POLICY_NODE - *node); -const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE - *node); +STACK_OF(POLICYQUALINFO) + *X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node); +const X509_POLICY_NODE + *X509_policy_node_get0_parent(const X509_POLICY_NODE *node); #ifdef __cplusplus } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h.in new file mode 100644 index 00000000..80f18bd7 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h.in @@ -0,0 +1,797 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509_VFY_H +# define OPENSSL_X509_VFY_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_VFY_H +# endif + +/* + * Protect against recursion, x509.h and x509_vfy.h each include the other. + */ +# ifndef OPENSSL_X509_H +# include +# endif + +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- +SSL_CTX -> X509_STORE + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + +SSL -> X509_STORE_CTX + ->X509_STORE + +The X509_STORE holds the tables etc for verification stuff. +A X509_STORE_CTX is used while validating a single certificate. +The X509_STORE has X509_LOOKUPs for looking up certs. +The X509_STORE then calls a function to actually verify the +certificate chain. +*/ + +typedef enum { + X509_LU_NONE = 0, + X509_LU_X509, X509_LU_CRL +} X509_LOOKUP_TYPE; + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +#define X509_LU_RETRY -1 +#define X509_LU_FAIL 0 +#endif + +{- + generate_stack_macros("X509_LOOKUP") + .generate_stack_macros("X509_OBJECT") + .generate_stack_macros("X509_VERIFY_PARAM"); +-} + +/* This is used for a table of trust checking functions */ +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; +{- + generate_stack_macros("X509_TRUST"); +-} + +/* standard trust ids */ +# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard rejection OID and as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* check_trust return codes */ +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +int X509_TRUST_set(int *t, int trust); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const X509_TRUST *xp); + +int X509_trusted(const X509 *x); +int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); + +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_check_trust(X509 *x, int id, int flags); + +int X509_verify_cert(X509_STORE_CTX *ctx); +int X509_STORE_CTX_verify(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs, + X509_STORE *store, int with_self_signed, + OSSL_LIB_CTX *libctx, const char *propq); + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, + X509_STORE_CTX *ctx, X509 *x); +typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, + X509 *x, X509 *issuer); +typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL **crl, X509 *x); +typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); +typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL *crl, X509 *x); +typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); +typedef STACK_OF(X509) + *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef STACK_OF(X509_CRL) + *(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); + +void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); + +# define X509_STORE_CTX_set_app_data(ctx,data) \ + X509_STORE_CTX_set_ex_data(ctx,0,data) +# define X509_STORE_CTX_get_app_data(ctx) \ + X509_STORE_CTX_get_ex_data(ctx,0) + +# define X509_L_FILE_LOAD 1 +# define X509_L_ADD_DIR 2 +# define X509_L_ADD_STORE 3 +# define X509_L_LOAD_STORE 4 + +# define X509_LOOKUP_load_file(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_dir(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_LOAD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_file_ex(x, name, type, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_FILE_LOAD, (name), (long)(type), NULL,\ + (libctx), (propq)) + +# define X509_LOOKUP_load_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_LOAD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_LOOKUP_add_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 + +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 +/* OCSP status errors */ +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ + +# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 76 +# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 77 + +/* Errors in case a check in X509_V_FLAG_X509_STRICT mode fails */ +# define X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY 78 +# define X509_V_ERR_INVALID_CA 79 +# define X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA 80 +# define X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN 81 +# define X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA 82 +# define X509_V_ERR_ISSUER_NAME_EMPTY 83 +# define X509_V_ERR_SUBJECT_NAME_EMPTY 84 +# define X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER 85 +# define X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER 86 +# define X509_V_ERR_EMPTY_SUBJECT_ALT_NAME 87 +# define X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL 88 +# define X509_V_ERR_CA_BCONS_NOT_CRITICAL 89 +# define X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL 90 +# define X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL 91 +# define X509_V_ERR_CA_CERT_MISSING_KEY_USAGE 92 +# define X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3 93 +# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94 + +/* Certificate verify flags */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ +# endif +/* Use check time instead of current time */ +# define X509_V_FLAG_USE_CHECK_TIME 0x2 +/* Lookup CRLs */ +# define X509_V_FLAG_CRL_CHECK 0x4 +/* Lookup CRLs for whole chain */ +# define X509_V_FLAG_CRL_CHECK_ALL 0x8 +/* Ignore unhandled critical extensions */ +# define X509_V_FLAG_IGNORE_CRITICAL 0x10 +/* Disable workarounds for broken certificates */ +# define X509_V_FLAG_X509_STRICT 0x20 +/* Enable proxy certificate validation */ +# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 +/* Enable policy checking */ +# define X509_V_FLAG_POLICY_CHECK 0x80 +/* Policy variable require-explicit-policy */ +# define X509_V_FLAG_EXPLICIT_POLICY 0x100 +/* Policy variable inhibit-any-policy */ +# define X509_V_FLAG_INHIBIT_ANY 0x200 +/* Policy variable inhibit-policy-mapping */ +# define X509_V_FLAG_INHIBIT_MAP 0x400 +/* Notify callback that policy is OK */ +# define X509_V_FLAG_NOTIFY_POLICY 0x800 +/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ +# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 +/* Delta CRL support */ +# define X509_V_FLAG_USE_DELTAS 0x2000 +/* Check self-signed CA signature */ +# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 +/* Use trusted store first */ +# define X509_V_FLAG_TRUSTED_FIRST 0x8000 +/* Suite B 128 bit only mode: not normally used */ +# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define X509_V_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define X509_V_FLAG_SUITEB_128_LOS 0x30000 +/* Allow partial chains if at least one certificate is in trusted store */ +# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 +/* + * If the initial chain is not trusted, do not attempt to build an alternative + * chain. Alternate chain checking was introduced in 1.1.0. Setting this flag + * will force the behaviour to match that of previous versions. + */ +# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 +/* Do not check certificate/CRL validity against current time */ +# define X509_V_FLAG_NO_CHECK_TIME 0x200000 + +# define X509_VP_FLAG_DEFAULT 0x1 +# define X509_VP_FLAG_OVERWRITE 0x2 +# define X509_VP_FLAG_RESET_FLAGS 0x4 +# define X509_VP_FLAG_LOCKED 0x8 +# define X509_VP_FLAG_ONCE 0x10 + +/* Internal use: mask of policy related options */ +# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ + | X509_V_FLAG_EXPLICIT_POLICY \ + | X509_V_FLAG_INHIBIT_ANY \ + | X509_V_FLAG_INHIBIT_MAP) + +int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, + const X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, + X509_LOOKUP_TYPE type, + const X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, + X509_OBJECT *x); +int X509_OBJECT_up_ref_count(X509_OBJECT *a); +X509_OBJECT *X509_OBJECT_new(void); +void X509_OBJECT_free(X509_OBJECT *a); +X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); +X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); +int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); +X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); +int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *v); +int X509_STORE_lock(X509_STORE *ctx); +int X509_STORE_unlock(X509_STORE *ctx); +int X509_STORE_up_ref(X509_STORE *v); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); +STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, + const X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st, + const X509_NAME *nm); +int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); +int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); +int X509_STORE_set_trust(X509_STORE *ctx, int trust); +int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); +X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); + +void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); +#define X509_STORE_set_verify_func(ctx, func) \ + X509_STORE_set_verify((ctx),(func)) +void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_fn verify); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(const X509_STORE *ctx); +void X509_STORE_set_verify_cb(X509_STORE *ctx, + X509_STORE_CTX_verify_cb verify_cb); +# define X509_STORE_set_verify_cb_func(ctx,func) \ + X509_STORE_set_verify_cb((ctx),(func)) +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(const X509_STORE *ctx); +void X509_STORE_set_get_issuer(X509_STORE *ctx, + X509_STORE_CTX_get_issuer_fn get_issuer); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *ctx); +void X509_STORE_set_check_issued(X509_STORE *ctx, + X509_STORE_CTX_check_issued_fn check_issued); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *ctx); +void X509_STORE_set_check_revocation(X509_STORE *ctx, + X509_STORE_CTX_check_revocation_fn check_revocation); +X509_STORE_CTX_check_revocation_fn + X509_STORE_get_check_revocation(const X509_STORE *ctx); +void X509_STORE_set_get_crl(X509_STORE *ctx, + X509_STORE_CTX_get_crl_fn get_crl); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *ctx); +void X509_STORE_set_check_crl(X509_STORE *ctx, + X509_STORE_CTX_check_crl_fn check_crl); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *ctx); +void X509_STORE_set_cert_crl(X509_STORE *ctx, + X509_STORE_CTX_cert_crl_fn cert_crl); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *ctx); +void X509_STORE_set_check_policy(X509_STORE *ctx, + X509_STORE_CTX_check_policy_fn check_policy); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *ctx); +void X509_STORE_set_lookup_certs(X509_STORE *ctx, + X509_STORE_CTX_lookup_certs_fn lookup_certs); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *ctx); +void X509_STORE_set_lookup_crls(X509_STORE *ctx, + X509_STORE_CTX_lookup_crls_fn lookup_crls); +#define X509_STORE_set_lookup_crls_cb(ctx, func) \ + X509_STORE_set_lookup_crls((ctx), (func)) +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(const X509_STORE *ctx); +void X509_STORE_set_cleanup(X509_STORE *ctx, + X509_STORE_CTX_cleanup_fn cleanup); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *ctx); + +#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) +int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); +void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); + +X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +X509_STORE_CTX *X509_STORE_CTX_new(void); + +int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + +void X509_STORE_CTX_free(X509_STORE_CTX *ctx); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store, + X509 *target, STACK_OF(X509) *untrusted); +void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); + +X509_STORE *X509_STORE_CTX_get0_store(const X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_cb verify); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(const X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain +# define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted +# define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack +# define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject +# define X509_STORE_get1_certs X509_STORE_CTX_get1_certs +# define X509_STORE_get1_crls X509_STORE_CTX_get1_crls +/* the following macro is misspelled; use X509_STORE_get1_certs instead */ +# define X509_STORE_get1_cert X509_STORE_CTX_get1_certs +/* the following macro is misspelled; use X509_STORE_get1_crls instead */ +# define X509_STORE_get1_crl X509_STORE_CTX_get1_crls +#endif + +X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); +X509_LOOKUP_METHOD *X509_LOOKUP_file(void); +X509_LOOKUP_METHOD *X509_LOOKUP_store(void); + +typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +typedef int (*X509_LOOKUP_ctrl_ex_fn)( + X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret, + OSSL_LIB_CTX *libctx, const char *propq); + +typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_subject_ex_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, + const char *propq); +typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + const ASN1_INTEGER *serial, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const unsigned char* bytes, + int len, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const char *str, + int len, + X509_OBJECT *ret); + +X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name); +void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method, + int (*new_item) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method, + void (*free_fn) (X509_LOOKUP *ctx)); +void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method, + int (*init) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method, + int (*shutdown) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method, + X509_LOOKUP_ctrl_fn ctrl_fn); +X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_subject_fn fn); +X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_issuer_serial(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_issuer_serial_fn fn); +X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_fingerprint_fn fn); +X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_alias_fn fn); +X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( + const X509_LOOKUP_METHOD *method); + + +int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); +int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); + +int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); +X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +int X509_LOOKUP_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, + char **ret, OSSL_LIB_CTX *libctx, const char *propq); + +int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); + +X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); +void X509_LOOKUP_free(X509_LOOKUP *ctx); +int X509_LOOKUP_init(X509_LOOKUP *ctx); +int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_subject_ex(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, + const ASN1_INTEGER *serial, + X509_OBJECT *ret); +int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const unsigned char *bytes, int len, + X509_OBJECT *ret); +int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const char *str, int len, X509_OBJECT *ret); +int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data); +void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); +X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +int X509_STORE_load_file(X509_STORE *ctx, const char *file); +int X509_STORE_load_path(X509_STORE *ctx, const char *path); +int X509_STORE_load_store(X509_STORE *ctx, const char *store); +int X509_STORE_load_locations(X509_STORE *ctx, + const char *file, + const char *dir); +int X509_STORE_set_default_paths(X509_STORE *ctx); + +int X509_STORE_load_file_ex(X509_STORE *ctx, const char *file, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_store_ex(X509_STORE *ctx, const char *store, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_locations_ex(X509_STORE *ctx, const char *file, + const char *dir, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, + const char *propq); + +#define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) +int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); +void *X509_STORE_CTX_get_ex_data(const X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); +int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); +X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); +X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target); +void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); +int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); +int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); +int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, + int purpose, int trust); +void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); +void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, + time_t t); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx); + +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); +int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); + +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane); +#define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0) + +/* X509_VERIFY_PARAM functions */ + +X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); +void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); +int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +unsigned long X509_VERIFY_PARAM_get_flags(const X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); +int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); +void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); +void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, int auth_level); +time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param); +void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); +int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, + ASN1_OBJECT *policy); +int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, + STACK_OF(ASN1_OBJECT) *policies); + +int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, + uint32_t flags); +uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); + +char *X509_VERIFY_PARAM_get0_host(X509_VERIFY_PARAM *param, int idx); +int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, + unsigned int flags); +unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); +char *X509_VERIFY_PARAM_get0_peername(const X509_VERIFY_PARAM *param); +void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_email(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, + const char *email, size_t emaillen); +char *X509_VERIFY_PARAM_get1_ip_asc(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, + const unsigned char *ip, size_t iplen); +int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, + const char *ipasc); + +int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); +const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); + +int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_count(void); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); +void X509_VERIFY_PARAM_table_cleanup(void); + +/* Non positive return values are errors */ +#define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */ +#define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */ +#define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */ + +/* + * Positive return values form a bit mask, all but the first are internal to + * the library and don't appear in results from X509_policy_check(). + */ +#define X509_PCY_TREE_VALID 1 /* The policy tree is valid */ +#define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */ +#define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */ + +int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, + STACK_OF(X509) *certs, + STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); + +void X509_policy_tree_free(X509_POLICY_TREE *tree); + +int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); +X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, + int i); + +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree); + +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree); + +int X509_policy_level_node_count(X509_POLICY_LEVEL *level); + +X509_POLICY_NODE *X509_policy_level_get0_node(const X509_POLICY_LEVEL *level, + int i); + +const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); + +STACK_OF(POLICYQUALINFO) + *X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node); +const X509_POLICY_NODE + *X509_policy_node_get0_parent(const X509_POLICY_NODE *node); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509err.h index cd08673f..34ead4b8 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509err.h @@ -1,88 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509ERR_H -# define HEADER_X509ERR_H +#ifndef OPENSSL_X509ERR_H +# define OPENSSL_X509ERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509_strings(void); -/* - * X509 function codes. - */ -# define X509_F_ADD_CERT_DIR 100 -# define X509_F_BUILD_CHAIN 106 -# define X509_F_BY_FILE_CTRL 101 -# define X509_F_CHECK_NAME_CONSTRAINTS 149 -# define X509_F_CHECK_POLICY 145 -# define X509_F_DANE_I2D 107 -# define X509_F_DIR_CTRL 102 -# define X509_F_GET_CERT_BY_SUBJECT 103 -# define X509_F_I2D_X509_AUX 151 -# define X509_F_LOOKUP_CERTS_SK 152 -# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 -# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 -# define X509_F_NEW_DIR 153 -# define X509_F_X509AT_ADD1_ATTR 135 -# define X509_F_X509V3_ADD_EXT 104 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 -# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 -# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 -# define X509_F_X509_CHECK_PRIVATE_KEY 128 -# define X509_F_X509_CRL_DIFF 105 -# define X509_F_X509_CRL_METHOD_NEW 154 -# define X509_F_X509_CRL_PRINT_FP 147 -# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 -# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 -# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 -# define X509_F_X509_LOAD_CERT_CRL_FILE 132 -# define X509_F_X509_LOAD_CERT_FILE 111 -# define X509_F_X509_LOAD_CRL_FILE 112 -# define X509_F_X509_LOOKUP_METH_NEW 160 -# define X509_F_X509_LOOKUP_NEW 155 -# define X509_F_X509_NAME_ADD_ENTRY 113 -# define X509_F_X509_NAME_CANON 156 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 -# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 -# define X509_F_X509_NAME_ONELINE 116 -# define X509_F_X509_NAME_PRINT 117 -# define X509_F_X509_OBJECT_NEW 150 -# define X509_F_X509_PRINT_EX_FP 118 -# define X509_F_X509_PUBKEY_DECODE 148 -# define X509_F_X509_PUBKEY_GET 161 -# define X509_F_X509_PUBKEY_GET0 119 -# define X509_F_X509_PUBKEY_SET 120 -# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 -# define X509_F_X509_REQ_PRINT_EX 121 -# define X509_F_X509_REQ_PRINT_FP 122 -# define X509_F_X509_REQ_TO_X509 123 -# define X509_F_X509_STORE_ADD_CERT 124 -# define X509_F_X509_STORE_ADD_CRL 125 -# define X509_F_X509_STORE_ADD_LOOKUP 157 -# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 -# define X509_F_X509_STORE_CTX_INIT 143 -# define X509_F_X509_STORE_CTX_NEW 142 -# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 -# define X509_F_X509_STORE_NEW 158 -# define X509_F_X509_TO_X509_REQ 126 -# define X509_F_X509_TRUST_ADD 133 -# define X509_F_X509_TRUST_SET 141 -# define X509_F_X509_VERIFY_CERT 127 -# define X509_F_X509_VERIFY_PARAM_NEW 159 /* * X509 reason codes. @@ -92,12 +26,17 @@ int ERR_load_X509_strings(void); # define X509_R_BAD_X509_FILETYPE 100 # define X509_R_BASE64_DECODE_ERROR 118 # define X509_R_CANT_CHECK_DH_KEY 114 +# define X509_R_CERTIFICATE_VERIFICATION_FAILED 139 # define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 # define X509_R_CRL_ALREADY_DELTA 127 # define X509_R_CRL_VERIFY_FAILURE 131 +# define X509_R_DUPLICATE_ATTRIBUTE 140 +# define X509_R_ERROR_GETTING_MD_BY_NID 141 +# define X509_R_ERROR_USING_SIGINF_SET 142 # define X509_R_IDP_MISMATCH 128 # define X509_R_INVALID_ATTRIBUTES 138 # define X509_R_INVALID_DIRECTORY 113 +# define X509_R_INVALID_DISTPOINT 143 # define X509_R_INVALID_FIELD_NAME 119 # define X509_R_INVALID_TRUST 123 # define X509_R_ISSUER_MISMATCH 129 @@ -121,6 +60,7 @@ int ERR_load_X509_strings(void); # define X509_R_UNKNOWN_KEY_TYPE 117 # define X509_R_UNKNOWN_NID 109 # define X509_R_UNKNOWN_PURPOSE_ID 121 +# define X509_R_UNKNOWN_SIGID_ALGS 144 # define X509_R_UNKNOWN_TRUST_ID 120 # define X509_R_UNSUPPORTED_ALGORITHM 111 # define X509_R_WRONG_LOOKUP_TYPE 112 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h index 3a4f04c1..75016354 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h @@ -1,19 +1,33 @@ /* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509v3.h.in + * * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509V3_H -# define HEADER_X509V3_H + + +#ifndef OPENSSL_X509V3_H +# define OPENSSL_X509V3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509V3_H +# endif # include # include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -28,7 +42,7 @@ struct v3_ext_ctx; typedef void *(*X509V3_EXT_NEW)(void); typedef void (*X509V3_EXT_FREE) (void *); typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); -typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); +typedef int (*X509V3_EXT_I2D) (const void *, unsigned char **); typedef STACK_OF(CONF_VALUE) * (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, STACK_OF(CONF_VALUE) *extlist); @@ -75,9 +89,12 @@ typedef struct X509V3_CONF_METHOD_st { void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); } X509V3_CONF_METHOD; -/* Context specific info */ +/* Context specific info for producing X509 v3 extensions*/ struct v3_ext_ctx { -# define CTX_TEST 0x1 +# define X509V3_CTX_TEST 0x1 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define CTX_TEST X509V3_CTX_TEST +# endif # define X509V3_CTX_REPLACE 0x2 int flags; X509 *issuer_cert; @@ -86,12 +103,39 @@ struct v3_ext_ctx { X509_CRL *crl; X509V3_CONF_METHOD *db_meth; void *db; + EVP_PKEY *issuer_pkey; /* Maybe more here */ }; typedef struct v3_ext_method X509V3_EXT_METHOD; -DEFINE_STACK_OF(X509V3_EXT_METHOD) +SKM_DEFINE_STACK_OF_INTERNAL(X509V3_EXT_METHOD, X509V3_EXT_METHOD, X509V3_EXT_METHOD) +#define sk_X509V3_EXT_METHOD_num(sk) OPENSSL_sk_num(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_value(sk, idx) ((X509V3_EXT_METHOD *)OPENSSL_sk_value(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), (idx))) +#define sk_X509V3_EXT_METHOD_new(cmp) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp))) +#define sk_X509V3_EXT_METHOD_new_null() ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_null()) +#define sk_X509V3_EXT_METHOD_new_reserve(cmp, n) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_reserve(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp), (n))) +#define sk_X509V3_EXT_METHOD_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (n)) +#define sk_X509V3_EXT_METHOD_free(sk) OPENSSL_sk_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_zero(sk) OPENSSL_sk_zero(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_delete(sk, i) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (i))) +#define sk_X509V3_EXT_METHOD_delete_ptr(sk, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete_ptr(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))) +#define sk_X509V3_EXT_METHOD_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_pop(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_pop(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_shift(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_shift(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk),ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc)) +#define sk_X509V3_EXT_METHOD_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), (idx)) +#define sk_X509V3_EXT_METHOD_set(sk, idx, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_set(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (idx), ossl_check_X509V3_EXT_METHOD_type(ptr))) +#define sk_X509V3_EXT_METHOD_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), pnum) +#define sk_X509V3_EXT_METHOD_sort(sk) OPENSSL_sk_sort(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_dup(sk) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_dup(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_deep_copy(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_copyfunc_type(copyfunc), ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc))) +#define sk_X509V3_EXT_METHOD_set_cmp_func(sk, cmp) ((sk_X509V3_EXT_METHOD_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp))) + /* ext_flags values */ # define X509V3_EXT_DYNAMIC 0x1 @@ -157,17 +201,92 @@ typedef struct ACCESS_DESCRIPTION_st { GENERAL_NAME *location; } ACCESS_DESCRIPTION; +SKM_DEFINE_STACK_OF_INTERNAL(ACCESS_DESCRIPTION, ACCESS_DESCRIPTION, ACCESS_DESCRIPTION) +#define sk_ACCESS_DESCRIPTION_num(sk) OPENSSL_sk_num(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_value(sk, idx) ((ACCESS_DESCRIPTION *)OPENSSL_sk_value(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), (idx))) +#define sk_ACCESS_DESCRIPTION_new(cmp) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp))) +#define sk_ACCESS_DESCRIPTION_new_null() ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_null()) +#define sk_ACCESS_DESCRIPTION_new_reserve(cmp, n) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_reserve(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp), (n))) +#define sk_ACCESS_DESCRIPTION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (n)) +#define sk_ACCESS_DESCRIPTION_free(sk) OPENSSL_sk_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_zero(sk) OPENSSL_sk_zero(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_delete(sk, i) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (i))) +#define sk_ACCESS_DESCRIPTION_delete_ptr(sk, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete_ptr(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))) +#define sk_ACCESS_DESCRIPTION_push(sk, ptr) OPENSSL_sk_push(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_pop(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_pop(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_shift(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_shift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk),ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc)) +#define sk_ACCESS_DESCRIPTION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), (idx)) +#define sk_ACCESS_DESCRIPTION_set(sk, idx, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_set(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (idx), ossl_check_ACCESS_DESCRIPTION_type(ptr))) +#define sk_ACCESS_DESCRIPTION_find(sk, ptr) OPENSSL_sk_find(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), pnum) +#define sk_ACCESS_DESCRIPTION_sort(sk) OPENSSL_sk_sort(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_dup(sk) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_dup(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_deep_copy(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_copyfunc_type(copyfunc), ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc))) +#define sk_ACCESS_DESCRIPTION_set_cmp_func(sk, cmp) ((sk_ACCESS_DESCRIPTION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAME, GENERAL_NAME, GENERAL_NAME) +#define sk_GENERAL_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_value(sk, idx) ((GENERAL_NAME *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAME_sk_type(sk), (idx))) +#define sk_GENERAL_NAME_new(cmp) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new(ossl_check_GENERAL_NAME_compfunc_type(cmp))) +#define sk_GENERAL_NAME_new_null() ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_NAME_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAME_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAME_sk_type(sk), (n)) +#define sk_GENERAL_NAME_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_delete(sk, i) ((GENERAL_NAME *)OPENSSL_sk_delete(ossl_check_GENERAL_NAME_sk_type(sk), (i))) +#define sk_GENERAL_NAME_delete_ptr(sk, ptr) ((GENERAL_NAME *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))) +#define sk_GENERAL_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_pop(sk) ((GENERAL_NAME *)OPENSSL_sk_pop(ossl_check_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_shift(sk) ((GENERAL_NAME *)OPENSSL_sk_shift(ossl_check_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAME_sk_type(sk),ossl_check_GENERAL_NAME_freefunc_type(freefunc)) +#define sk_GENERAL_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), (idx)) +#define sk_GENERAL_NAME_set(sk, idx, ptr) ((GENERAL_NAME *)OPENSSL_sk_set(ossl_check_GENERAL_NAME_sk_type(sk), (idx), ossl_check_GENERAL_NAME_type(ptr))) +#define sk_GENERAL_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), pnum) +#define sk_GENERAL_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_dup(sk) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_copyfunc_type(copyfunc), ossl_check_GENERAL_NAME_freefunc_type(freefunc))) +#define sk_GENERAL_NAME_set_cmp_func(sk, cmp) ((sk_GENERAL_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_compfunc_type(cmp))) + + typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; - typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; - typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; - -DEFINE_STACK_OF(GENERAL_NAME) typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; -DEFINE_STACK_OF(GENERAL_NAMES) -DEFINE_STACK_OF(ACCESS_DESCRIPTION) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAMES, GENERAL_NAMES, GENERAL_NAMES) +#define sk_GENERAL_NAMES_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_value(sk, idx) ((GENERAL_NAMES *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAMES_sk_type(sk), (idx))) +#define sk_GENERAL_NAMES_new(cmp) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new(ossl_check_GENERAL_NAMES_compfunc_type(cmp))) +#define sk_GENERAL_NAMES_new_null() ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_NAMES_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAMES_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAMES_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAMES_sk_type(sk), (n)) +#define sk_GENERAL_NAMES_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_delete(sk, i) ((GENERAL_NAMES *)OPENSSL_sk_delete(ossl_check_GENERAL_NAMES_sk_type(sk), (i))) +#define sk_GENERAL_NAMES_delete_ptr(sk, ptr) ((GENERAL_NAMES *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))) +#define sk_GENERAL_NAMES_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_pop(sk) ((GENERAL_NAMES *)OPENSSL_sk_pop(ossl_check_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_shift(sk) ((GENERAL_NAMES *)OPENSSL_sk_shift(ossl_check_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAMES_sk_type(sk),ossl_check_GENERAL_NAMES_freefunc_type(freefunc)) +#define sk_GENERAL_NAMES_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), (idx)) +#define sk_GENERAL_NAMES_set(sk, idx, ptr) ((GENERAL_NAMES *)OPENSSL_sk_set(ossl_check_GENERAL_NAMES_sk_type(sk), (idx), ossl_check_GENERAL_NAMES_type(ptr))) +#define sk_GENERAL_NAMES_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), pnum) +#define sk_GENERAL_NAMES_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_dup(sk) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_copyfunc_type(copyfunc), ossl_check_GENERAL_NAMES_freefunc_type(freefunc))) +#define sk_GENERAL_NAMES_set_cmp_func(sk, cmp) ((sk_GENERAL_NAMES_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_compfunc_type(cmp))) + typedef struct DIST_POINT_NAME_st { int type; @@ -200,9 +319,35 @@ struct DIST_POINT_st { int dp_reasons; }; -typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; +SKM_DEFINE_STACK_OF_INTERNAL(DIST_POINT, DIST_POINT, DIST_POINT) +#define sk_DIST_POINT_num(sk) OPENSSL_sk_num(ossl_check_const_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_value(sk, idx) ((DIST_POINT *)OPENSSL_sk_value(ossl_check_const_DIST_POINT_sk_type(sk), (idx))) +#define sk_DIST_POINT_new(cmp) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new(ossl_check_DIST_POINT_compfunc_type(cmp))) +#define sk_DIST_POINT_new_null() ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_null()) +#define sk_DIST_POINT_new_reserve(cmp, n) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_reserve(ossl_check_DIST_POINT_compfunc_type(cmp), (n))) +#define sk_DIST_POINT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_DIST_POINT_sk_type(sk), (n)) +#define sk_DIST_POINT_free(sk) OPENSSL_sk_free(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_zero(sk) OPENSSL_sk_zero(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_delete(sk, i) ((DIST_POINT *)OPENSSL_sk_delete(ossl_check_DIST_POINT_sk_type(sk), (i))) +#define sk_DIST_POINT_delete_ptr(sk, ptr) ((DIST_POINT *)OPENSSL_sk_delete_ptr(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))) +#define sk_DIST_POINT_push(sk, ptr) OPENSSL_sk_push(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_pop(sk) ((DIST_POINT *)OPENSSL_sk_pop(ossl_check_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_shift(sk) ((DIST_POINT *)OPENSSL_sk_shift(ossl_check_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_DIST_POINT_sk_type(sk),ossl_check_DIST_POINT_freefunc_type(freefunc)) +#define sk_DIST_POINT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), (idx)) +#define sk_DIST_POINT_set(sk, idx, ptr) ((DIST_POINT *)OPENSSL_sk_set(ossl_check_DIST_POINT_sk_type(sk), (idx), ossl_check_DIST_POINT_type(ptr))) +#define sk_DIST_POINT_find(sk, ptr) OPENSSL_sk_find(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), pnum) +#define sk_DIST_POINT_sort(sk) OPENSSL_sk_sort(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_dup(sk) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_dup(ossl_check_const_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_deep_copy(ossl_check_const_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_copyfunc_type(copyfunc), ossl_check_DIST_POINT_freefunc_type(freefunc))) +#define sk_DIST_POINT_set_cmp_func(sk, cmp) ((sk_DIST_POINT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_compfunc_type(cmp))) -DEFINE_STACK_OF(DIST_POINT) + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; struct AUTHORITY_KEYID_st { ASN1_OCTET_STRING *keyid; @@ -217,13 +362,47 @@ typedef struct SXNET_ID_st { ASN1_OCTET_STRING *user; } SXNETID; -DEFINE_STACK_OF(SXNETID) +SKM_DEFINE_STACK_OF_INTERNAL(SXNETID, SXNETID, SXNETID) +#define sk_SXNETID_num(sk) OPENSSL_sk_num(ossl_check_const_SXNETID_sk_type(sk)) +#define sk_SXNETID_value(sk, idx) ((SXNETID *)OPENSSL_sk_value(ossl_check_const_SXNETID_sk_type(sk), (idx))) +#define sk_SXNETID_new(cmp) ((STACK_OF(SXNETID) *)OPENSSL_sk_new(ossl_check_SXNETID_compfunc_type(cmp))) +#define sk_SXNETID_new_null() ((STACK_OF(SXNETID) *)OPENSSL_sk_new_null()) +#define sk_SXNETID_new_reserve(cmp, n) ((STACK_OF(SXNETID) *)OPENSSL_sk_new_reserve(ossl_check_SXNETID_compfunc_type(cmp), (n))) +#define sk_SXNETID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SXNETID_sk_type(sk), (n)) +#define sk_SXNETID_free(sk) OPENSSL_sk_free(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_zero(sk) OPENSSL_sk_zero(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_delete(sk, i) ((SXNETID *)OPENSSL_sk_delete(ossl_check_SXNETID_sk_type(sk), (i))) +#define sk_SXNETID_delete_ptr(sk, ptr) ((SXNETID *)OPENSSL_sk_delete_ptr(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))) +#define sk_SXNETID_push(sk, ptr) OPENSSL_sk_push(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_pop(sk) ((SXNETID *)OPENSSL_sk_pop(ossl_check_SXNETID_sk_type(sk))) +#define sk_SXNETID_shift(sk) ((SXNETID *)OPENSSL_sk_shift(ossl_check_SXNETID_sk_type(sk))) +#define sk_SXNETID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SXNETID_sk_type(sk),ossl_check_SXNETID_freefunc_type(freefunc)) +#define sk_SXNETID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), (idx)) +#define sk_SXNETID_set(sk, idx, ptr) ((SXNETID *)OPENSSL_sk_set(ossl_check_SXNETID_sk_type(sk), (idx), ossl_check_SXNETID_type(ptr))) +#define sk_SXNETID_find(sk, ptr) OPENSSL_sk_find(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), pnum) +#define sk_SXNETID_sort(sk) OPENSSL_sk_sort(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SXNETID_sk_type(sk)) +#define sk_SXNETID_dup(sk) ((STACK_OF(SXNETID) *)OPENSSL_sk_dup(ossl_check_const_SXNETID_sk_type(sk))) +#define sk_SXNETID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SXNETID) *)OPENSSL_sk_deep_copy(ossl_check_const_SXNETID_sk_type(sk), ossl_check_SXNETID_copyfunc_type(copyfunc), ossl_check_SXNETID_freefunc_type(freefunc))) +#define sk_SXNETID_set_cmp_func(sk, cmp) ((sk_SXNETID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_compfunc_type(cmp))) + + typedef struct SXNET_st { ASN1_INTEGER *version; STACK_OF(SXNETID) *ids; } SXNET; +typedef struct ISSUER_SIGN_TOOL_st { + ASN1_UTF8STRING *signTool; + ASN1_UTF8STRING *cATool; + ASN1_UTF8STRING *signToolCert; + ASN1_UTF8STRING *cAToolCert; +} ISSUER_SIGN_TOOL; + typedef struct NOTICEREF_st { ASN1_STRING *organization; STACK_OF(ASN1_INTEGER) *noticenos; @@ -243,23 +422,102 @@ typedef struct POLICYQUALINFO_st { } d; } POLICYQUALINFO; -DEFINE_STACK_OF(POLICYQUALINFO) +SKM_DEFINE_STACK_OF_INTERNAL(POLICYQUALINFO, POLICYQUALINFO, POLICYQUALINFO) +#define sk_POLICYQUALINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_value(sk, idx) ((POLICYQUALINFO *)OPENSSL_sk_value(ossl_check_const_POLICYQUALINFO_sk_type(sk), (idx))) +#define sk_POLICYQUALINFO_new(cmp) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new(ossl_check_POLICYQUALINFO_compfunc_type(cmp))) +#define sk_POLICYQUALINFO_new_null() ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_null()) +#define sk_POLICYQUALINFO_new_reserve(cmp, n) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYQUALINFO_compfunc_type(cmp), (n))) +#define sk_POLICYQUALINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYQUALINFO_sk_type(sk), (n)) +#define sk_POLICYQUALINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_delete(sk, i) ((POLICYQUALINFO *)OPENSSL_sk_delete(ossl_check_POLICYQUALINFO_sk_type(sk), (i))) +#define sk_POLICYQUALINFO_delete_ptr(sk, ptr) ((POLICYQUALINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))) +#define sk_POLICYQUALINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_pop(sk) ((POLICYQUALINFO *)OPENSSL_sk_pop(ossl_check_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_shift(sk) ((POLICYQUALINFO *)OPENSSL_sk_shift(ossl_check_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYQUALINFO_sk_type(sk),ossl_check_POLICYQUALINFO_freefunc_type(freefunc)) +#define sk_POLICYQUALINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), (idx)) +#define sk_POLICYQUALINFO_set(sk, idx, ptr) ((POLICYQUALINFO *)OPENSSL_sk_set(ossl_check_POLICYQUALINFO_sk_type(sk), (idx), ossl_check_POLICYQUALINFO_type(ptr))) +#define sk_POLICYQUALINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), pnum) +#define sk_POLICYQUALINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_dup(sk) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_copyfunc_type(copyfunc), ossl_check_POLICYQUALINFO_freefunc_type(freefunc))) +#define sk_POLICYQUALINFO_set_cmp_func(sk, cmp) ((sk_POLICYQUALINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_compfunc_type(cmp))) + + typedef struct POLICYINFO_st { ASN1_OBJECT *policyid; STACK_OF(POLICYQUALINFO) *qualifiers; } POLICYINFO; -typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; +SKM_DEFINE_STACK_OF_INTERNAL(POLICYINFO, POLICYINFO, POLICYINFO) +#define sk_POLICYINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_value(sk, idx) ((POLICYINFO *)OPENSSL_sk_value(ossl_check_const_POLICYINFO_sk_type(sk), (idx))) +#define sk_POLICYINFO_new(cmp) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new(ossl_check_POLICYINFO_compfunc_type(cmp))) +#define sk_POLICYINFO_new_null() ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_null()) +#define sk_POLICYINFO_new_reserve(cmp, n) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYINFO_compfunc_type(cmp), (n))) +#define sk_POLICYINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYINFO_sk_type(sk), (n)) +#define sk_POLICYINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_delete(sk, i) ((POLICYINFO *)OPENSSL_sk_delete(ossl_check_POLICYINFO_sk_type(sk), (i))) +#define sk_POLICYINFO_delete_ptr(sk, ptr) ((POLICYINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))) +#define sk_POLICYINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_pop(sk) ((POLICYINFO *)OPENSSL_sk_pop(ossl_check_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_shift(sk) ((POLICYINFO *)OPENSSL_sk_shift(ossl_check_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYINFO_sk_type(sk),ossl_check_POLICYINFO_freefunc_type(freefunc)) +#define sk_POLICYINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), (idx)) +#define sk_POLICYINFO_set(sk, idx, ptr) ((POLICYINFO *)OPENSSL_sk_set(ossl_check_POLICYINFO_sk_type(sk), (idx), ossl_check_POLICYINFO_type(ptr))) +#define sk_POLICYINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), pnum) +#define sk_POLICYINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_dup(sk) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_copyfunc_type(copyfunc), ossl_check_POLICYINFO_freefunc_type(freefunc))) +#define sk_POLICYINFO_set_cmp_func(sk, cmp) ((sk_POLICYINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_compfunc_type(cmp))) -DEFINE_STACK_OF(POLICYINFO) + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; typedef struct POLICY_MAPPING_st { ASN1_OBJECT *issuerDomainPolicy; ASN1_OBJECT *subjectDomainPolicy; } POLICY_MAPPING; -DEFINE_STACK_OF(POLICY_MAPPING) +SKM_DEFINE_STACK_OF_INTERNAL(POLICY_MAPPING, POLICY_MAPPING, POLICY_MAPPING) +#define sk_POLICY_MAPPING_num(sk) OPENSSL_sk_num(ossl_check_const_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_value(sk, idx) ((POLICY_MAPPING *)OPENSSL_sk_value(ossl_check_const_POLICY_MAPPING_sk_type(sk), (idx))) +#define sk_POLICY_MAPPING_new(cmp) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new(ossl_check_POLICY_MAPPING_compfunc_type(cmp))) +#define sk_POLICY_MAPPING_new_null() ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_null()) +#define sk_POLICY_MAPPING_new_reserve(cmp, n) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_reserve(ossl_check_POLICY_MAPPING_compfunc_type(cmp), (n))) +#define sk_POLICY_MAPPING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICY_MAPPING_sk_type(sk), (n)) +#define sk_POLICY_MAPPING_free(sk) OPENSSL_sk_free(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_zero(sk) OPENSSL_sk_zero(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_delete(sk, i) ((POLICY_MAPPING *)OPENSSL_sk_delete(ossl_check_POLICY_MAPPING_sk_type(sk), (i))) +#define sk_POLICY_MAPPING_delete_ptr(sk, ptr) ((POLICY_MAPPING *)OPENSSL_sk_delete_ptr(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))) +#define sk_POLICY_MAPPING_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_pop(sk) ((POLICY_MAPPING *)OPENSSL_sk_pop(ossl_check_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_shift(sk) ((POLICY_MAPPING *)OPENSSL_sk_shift(ossl_check_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICY_MAPPING_sk_type(sk),ossl_check_POLICY_MAPPING_freefunc_type(freefunc)) +#define sk_POLICY_MAPPING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), (idx)) +#define sk_POLICY_MAPPING_set(sk, idx, ptr) ((POLICY_MAPPING *)OPENSSL_sk_set(ossl_check_POLICY_MAPPING_sk_type(sk), (idx), ossl_check_POLICY_MAPPING_type(ptr))) +#define sk_POLICY_MAPPING_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), pnum) +#define sk_POLICY_MAPPING_sort(sk) OPENSSL_sk_sort(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_dup(sk) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_dup(ossl_check_const_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_copyfunc_type(copyfunc), ossl_check_POLICY_MAPPING_freefunc_type(freefunc))) +#define sk_POLICY_MAPPING_set_cmp_func(sk, cmp) ((sk_POLICY_MAPPING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_compfunc_type(cmp))) + typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; @@ -269,7 +527,33 @@ typedef struct GENERAL_SUBTREE_st { ASN1_INTEGER *maximum; } GENERAL_SUBTREE; -DEFINE_STACK_OF(GENERAL_SUBTREE) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_SUBTREE, GENERAL_SUBTREE, GENERAL_SUBTREE) +#define sk_GENERAL_SUBTREE_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_value(sk, idx) ((GENERAL_SUBTREE *)OPENSSL_sk_value(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), (idx))) +#define sk_GENERAL_SUBTREE_new(cmp) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp))) +#define sk_GENERAL_SUBTREE_new_null() ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_SUBTREE_new_reserve(cmp, n) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp), (n))) +#define sk_GENERAL_SUBTREE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_SUBTREE_sk_type(sk), (n)) +#define sk_GENERAL_SUBTREE_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_delete(sk, i) ((GENERAL_SUBTREE *)OPENSSL_sk_delete(ossl_check_GENERAL_SUBTREE_sk_type(sk), (i))) +#define sk_GENERAL_SUBTREE_delete_ptr(sk, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))) +#define sk_GENERAL_SUBTREE_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_pop(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_pop(ossl_check_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_shift(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_shift(ossl_check_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_SUBTREE_sk_type(sk),ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc)) +#define sk_GENERAL_SUBTREE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), (idx)) +#define sk_GENERAL_SUBTREE_set(sk, idx, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_set(ossl_check_GENERAL_SUBTREE_sk_type(sk), (idx), ossl_check_GENERAL_SUBTREE_type(ptr))) +#define sk_GENERAL_SUBTREE_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), pnum) +#define sk_GENERAL_SUBTREE_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_dup(sk) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_copyfunc_type(copyfunc), ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc))) +#define sk_GENERAL_SUBTREE_set_cmp_func(sk, cmp) ((sk_GENERAL_SUBTREE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_compfunc_type(cmp))) + struct NAME_CONSTRAINTS_st { STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; @@ -325,7 +609,7 @@ struct ISSUING_DIST_POINT_st { ",name:", (val)->name, ",value:", (val)->value) # define X509V3_set_ctx_test(ctx) \ - X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, X509V3_CTX_TEST) # define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; # define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ @@ -343,6 +627,13 @@ struct ISSUING_DIST_POINT_st { 0,0,0,0, \ NULL} +#define EXT_UTF8STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_UTF8STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_UTF8STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_UTF8STRING, \ + 0,0,0,0, \ + NULL} + # define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} /* X509_PURPOSE stuff */ @@ -353,8 +644,7 @@ struct ISSUING_DIST_POINT_st { # define EXFLAG_NSCERT 0x8 # define EXFLAG_CA 0x10 -/* Really self issued not necessarily self signed */ -# define EXFLAG_SI 0x20 +# define EXFLAG_SI 0x20 /* self-issued, maybe not self-signed */ # define EXFLAG_V1 0x40 # define EXFLAG_INVALID 0x80 /* EXFLAG_SET is set to indicate that some values have been precomputed */ @@ -366,6 +656,10 @@ struct ISSUING_DIST_POINT_st { # define EXFLAG_FRESHEST 0x1000 # define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ +# define EXFLAG_BCONS_CRITICAL 0x10000 +# define EXFLAG_AKID_CRITICAL 0x20000 +# define EXFLAG_SKID_CRITICAL 0x40000 +# define EXFLAG_SAN_CRITICAL 0x80000 # define EXFLAG_NO_FINGERPRINT 0x100000 # define KU_DIGITAL_SIGNATURE 0x0080 @@ -391,7 +685,7 @@ struct ISSUING_DIST_POINT_st { # define XKU_SSL_CLIENT 0x2 # define XKU_SMIME 0x4 # define XKU_CODE_SIGN 0x8 -# define XKU_SGC 0x10 +# define XKU_SGC 0x10 /* Netscape or MS Server-Gated Crypto */ # define XKU_OCSP_SIGN 0x20 # define XKU_TIMESTAMP 0x40 # define XKU_DVCS 0x80 @@ -410,6 +704,35 @@ typedef struct x509_purpose_st { void *usr_data; } X509_PURPOSE; +SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE) +#define sk_X509_PURPOSE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_value(sk, idx) ((X509_PURPOSE *)OPENSSL_sk_value(ossl_check_const_X509_PURPOSE_sk_type(sk), (idx))) +#define sk_X509_PURPOSE_new(cmp) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new(ossl_check_X509_PURPOSE_compfunc_type(cmp))) +#define sk_X509_PURPOSE_new_null() ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_null()) +#define sk_X509_PURPOSE_new_reserve(cmp, n) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_reserve(ossl_check_X509_PURPOSE_compfunc_type(cmp), (n))) +#define sk_X509_PURPOSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_PURPOSE_sk_type(sk), (n)) +#define sk_X509_PURPOSE_free(sk) OPENSSL_sk_free(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_delete(sk, i) ((X509_PURPOSE *)OPENSSL_sk_delete(ossl_check_X509_PURPOSE_sk_type(sk), (i))) +#define sk_X509_PURPOSE_delete_ptr(sk, ptr) ((X509_PURPOSE *)OPENSSL_sk_delete_ptr(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))) +#define sk_X509_PURPOSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_pop(sk) ((X509_PURPOSE *)OPENSSL_sk_pop(ossl_check_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_shift(sk) ((X509_PURPOSE *)OPENSSL_sk_shift(ossl_check_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_PURPOSE_sk_type(sk),ossl_check_X509_PURPOSE_freefunc_type(freefunc)) +#define sk_X509_PURPOSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), (idx)) +#define sk_X509_PURPOSE_set(sk, idx, ptr) ((X509_PURPOSE *)OPENSSL_sk_set(ossl_check_X509_PURPOSE_sk_type(sk), (idx), ossl_check_X509_PURPOSE_type(ptr))) +#define sk_X509_PURPOSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), pnum) +#define sk_X509_PURPOSE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_dup(sk) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_dup(ossl_check_const_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_copyfunc_type(copyfunc), ossl_check_X509_PURPOSE_freefunc_type(freefunc))) +#define sk_X509_PURPOSE_set_cmp_func(sk, cmp) ((sk_X509_PURPOSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_compfunc_type(cmp))) + + + # define X509_PURPOSE_SSL_CLIENT 1 # define X509_PURPOSE_SSL_SERVER 2 # define X509_PURPOSE_NS_SSL_SERVER 3 @@ -446,13 +769,13 @@ typedef struct x509_purpose_st { # define X509V3_ADD_DELETE 5L # define X509V3_ADD_SILENT 0x10 -DEFINE_STACK_OF(X509_PURPOSE) - DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) DECLARE_ASN1_FUNCTIONS(SXNET) DECLARE_ASN1_FUNCTIONS(SXNETID) +DECLARE_ASN1_FUNCTIONS(ISSUER_SIGN_TOOL) + int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, int userlen); @@ -468,7 +791,7 @@ DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) -GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); +DECLARE_ASN1_DUP_FUNCTION(GENERAL_NAME) int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, @@ -480,6 +803,9 @@ STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *str); +char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, ASN1_UTF8STRING *utf8); +ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen, @@ -525,7 +851,7 @@ DECLARE_ASN1_FUNCTIONS(DIST_POINT) DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) -int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, const X509_NAME *iname); int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); @@ -551,13 +877,14 @@ GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, X509V3_CTX *ctx, int gen_type, const char *value, int is_nc); -# ifdef HEADER_CONF_H +# ifdef OPENSSL_CONF_H GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf); GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc); + void X509V3_conf_free(CONF_VALUE *val); X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, @@ -599,6 +926,8 @@ void X509V3_string_free(X509V3_CTX *ctx, char *str); void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, X509_REQ *req, X509_CRL *crl, int flags); +/* For API backward compatibility, this is separate from X509V3_set_ctx(): */ +int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey); int X509V3_add_value(const char *name, const char *value, STACK_OF(CONF_VALUE) **extlist); @@ -630,7 +959,7 @@ X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, int crit, unsigned long flags); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* The new declarations are in crypto.h, but the old ones were here. */ # define hex_to_string OPENSSL_buf2hexstr # define string_to_hex OPENSSL_hexstr2buf @@ -652,7 +981,7 @@ int X509_check_purpose(X509 *x, int id, int ca); int X509_supported_extension(X509_EXTENSION *ex); int X509_PURPOSE_set(int *p, int purpose); int X509_check_issued(X509 *issuer, X509 *subject); -int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); +int X509_check_akid(const X509 *issuer, const AUTHORITY_KEYID *akid); void X509_set_proxy_flag(X509 *x); void X509_set_proxy_pathlen(X509 *x, long l); long X509_get_proxy_pathlen(X509 *x); @@ -719,7 +1048,34 @@ int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, unsigned long chtype); void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); -DEFINE_STACK_OF(X509_POLICY_NODE) +SKM_DEFINE_STACK_OF_INTERNAL(X509_POLICY_NODE, X509_POLICY_NODE, X509_POLICY_NODE) +#define sk_X509_POLICY_NODE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_value(sk, idx) ((X509_POLICY_NODE *)OPENSSL_sk_value(ossl_check_const_X509_POLICY_NODE_sk_type(sk), (idx))) +#define sk_X509_POLICY_NODE_new(cmp) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new(ossl_check_X509_POLICY_NODE_compfunc_type(cmp))) +#define sk_X509_POLICY_NODE_new_null() ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_null()) +#define sk_X509_POLICY_NODE_new_reserve(cmp, n) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_reserve(ossl_check_X509_POLICY_NODE_compfunc_type(cmp), (n))) +#define sk_X509_POLICY_NODE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_POLICY_NODE_sk_type(sk), (n)) +#define sk_X509_POLICY_NODE_free(sk) OPENSSL_sk_free(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_delete(sk, i) ((X509_POLICY_NODE *)OPENSSL_sk_delete(ossl_check_X509_POLICY_NODE_sk_type(sk), (i))) +#define sk_X509_POLICY_NODE_delete_ptr(sk, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_delete_ptr(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))) +#define sk_X509_POLICY_NODE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_pop(sk) ((X509_POLICY_NODE *)OPENSSL_sk_pop(ossl_check_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_shift(sk) ((X509_POLICY_NODE *)OPENSSL_sk_shift(ossl_check_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_POLICY_NODE_sk_type(sk),ossl_check_X509_POLICY_NODE_freefunc_type(freefunc)) +#define sk_X509_POLICY_NODE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), (idx)) +#define sk_X509_POLICY_NODE_set(sk, idx, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_set(ossl_check_X509_POLICY_NODE_sk_type(sk), (idx), ossl_check_X509_POLICY_NODE_type(ptr))) +#define sk_X509_POLICY_NODE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), pnum) +#define sk_X509_POLICY_NODE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_dup(sk) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_dup(ossl_check_const_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_copyfunc_type(copyfunc), ossl_check_X509_POLICY_NODE_freefunc_type(freefunc))) +#define sk_X509_POLICY_NODE_set_cmp_func(sk, cmp) ((sk_X509_POLICY_NODE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_compfunc_type(cmp))) + + #ifndef OPENSSL_NO_RFC3779 typedef struct ASRange_st { @@ -737,8 +1093,35 @@ typedef struct ASIdOrRange_st { } u; } ASIdOrRange; +SKM_DEFINE_STACK_OF_INTERNAL(ASIdOrRange, ASIdOrRange, ASIdOrRange) +#define sk_ASIdOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_value(sk, idx) ((ASIdOrRange *)OPENSSL_sk_value(ossl_check_const_ASIdOrRange_sk_type(sk), (idx))) +#define sk_ASIdOrRange_new(cmp) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new(ossl_check_ASIdOrRange_compfunc_type(cmp))) +#define sk_ASIdOrRange_new_null() ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_null()) +#define sk_ASIdOrRange_new_reserve(cmp, n) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_reserve(ossl_check_ASIdOrRange_compfunc_type(cmp), (n))) +#define sk_ASIdOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASIdOrRange_sk_type(sk), (n)) +#define sk_ASIdOrRange_free(sk) OPENSSL_sk_free(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_delete(sk, i) ((ASIdOrRange *)OPENSSL_sk_delete(ossl_check_ASIdOrRange_sk_type(sk), (i))) +#define sk_ASIdOrRange_delete_ptr(sk, ptr) ((ASIdOrRange *)OPENSSL_sk_delete_ptr(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))) +#define sk_ASIdOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_pop(sk) ((ASIdOrRange *)OPENSSL_sk_pop(ossl_check_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_shift(sk) ((ASIdOrRange *)OPENSSL_sk_shift(ossl_check_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASIdOrRange_sk_type(sk),ossl_check_ASIdOrRange_freefunc_type(freefunc)) +#define sk_ASIdOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), (idx)) +#define sk_ASIdOrRange_set(sk, idx, ptr) ((ASIdOrRange *)OPENSSL_sk_set(ossl_check_ASIdOrRange_sk_type(sk), (idx), ossl_check_ASIdOrRange_type(ptr))) +#define sk_ASIdOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), pnum) +#define sk_ASIdOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_dup(sk) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_dup(ossl_check_const_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_copyfunc_type(copyfunc), ossl_check_ASIdOrRange_freefunc_type(freefunc))) +#define sk_ASIdOrRange_set_cmp_func(sk, cmp) ((sk_ASIdOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_compfunc_type(cmp))) + + typedef STACK_OF(ASIdOrRange) ASIdOrRanges; -DEFINE_STACK_OF(ASIdOrRange) # define ASIdentifierChoice_inherit 0 # define ASIdentifierChoice_asIdsOrRanges 1 @@ -775,8 +1158,35 @@ typedef struct IPAddressOrRange_st { } u; } IPAddressOrRange; +SKM_DEFINE_STACK_OF_INTERNAL(IPAddressOrRange, IPAddressOrRange, IPAddressOrRange) +#define sk_IPAddressOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_value(sk, idx) ((IPAddressOrRange *)OPENSSL_sk_value(ossl_check_const_IPAddressOrRange_sk_type(sk), (idx))) +#define sk_IPAddressOrRange_new(cmp) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new(ossl_check_IPAddressOrRange_compfunc_type(cmp))) +#define sk_IPAddressOrRange_new_null() ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_null()) +#define sk_IPAddressOrRange_new_reserve(cmp, n) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressOrRange_compfunc_type(cmp), (n))) +#define sk_IPAddressOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressOrRange_sk_type(sk), (n)) +#define sk_IPAddressOrRange_free(sk) OPENSSL_sk_free(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_delete(sk, i) ((IPAddressOrRange *)OPENSSL_sk_delete(ossl_check_IPAddressOrRange_sk_type(sk), (i))) +#define sk_IPAddressOrRange_delete_ptr(sk, ptr) ((IPAddressOrRange *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))) +#define sk_IPAddressOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_pop(sk) ((IPAddressOrRange *)OPENSSL_sk_pop(ossl_check_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_shift(sk) ((IPAddressOrRange *)OPENSSL_sk_shift(ossl_check_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressOrRange_sk_type(sk),ossl_check_IPAddressOrRange_freefunc_type(freefunc)) +#define sk_IPAddressOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), (idx)) +#define sk_IPAddressOrRange_set(sk, idx, ptr) ((IPAddressOrRange *)OPENSSL_sk_set(ossl_check_IPAddressOrRange_sk_type(sk), (idx), ossl_check_IPAddressOrRange_type(ptr))) +#define sk_IPAddressOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), pnum) +#define sk_IPAddressOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_dup(sk) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_dup(ossl_check_const_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_copyfunc_type(copyfunc), ossl_check_IPAddressOrRange_freefunc_type(freefunc))) +#define sk_IPAddressOrRange_set_cmp_func(sk, cmp) ((sk_IPAddressOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_compfunc_type(cmp))) + + typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; -DEFINE_STACK_OF(IPAddressOrRange) # define IPAddressChoice_inherit 0 # define IPAddressChoice_addressesOrRanges 1 @@ -794,8 +1204,36 @@ typedef struct IPAddressFamily_st { IPAddressChoice *ipAddressChoice; } IPAddressFamily; +SKM_DEFINE_STACK_OF_INTERNAL(IPAddressFamily, IPAddressFamily, IPAddressFamily) +#define sk_IPAddressFamily_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_value(sk, idx) ((IPAddressFamily *)OPENSSL_sk_value(ossl_check_const_IPAddressFamily_sk_type(sk), (idx))) +#define sk_IPAddressFamily_new(cmp) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new(ossl_check_IPAddressFamily_compfunc_type(cmp))) +#define sk_IPAddressFamily_new_null() ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_null()) +#define sk_IPAddressFamily_new_reserve(cmp, n) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressFamily_compfunc_type(cmp), (n))) +#define sk_IPAddressFamily_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressFamily_sk_type(sk), (n)) +#define sk_IPAddressFamily_free(sk) OPENSSL_sk_free(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_delete(sk, i) ((IPAddressFamily *)OPENSSL_sk_delete(ossl_check_IPAddressFamily_sk_type(sk), (i))) +#define sk_IPAddressFamily_delete_ptr(sk, ptr) ((IPAddressFamily *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))) +#define sk_IPAddressFamily_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_pop(sk) ((IPAddressFamily *)OPENSSL_sk_pop(ossl_check_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_shift(sk) ((IPAddressFamily *)OPENSSL_sk_shift(ossl_check_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressFamily_sk_type(sk),ossl_check_IPAddressFamily_freefunc_type(freefunc)) +#define sk_IPAddressFamily_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), (idx)) +#define sk_IPAddressFamily_set(sk, idx, ptr) ((IPAddressFamily *)OPENSSL_sk_set(ossl_check_IPAddressFamily_sk_type(sk), (idx), ossl_check_IPAddressFamily_type(ptr))) +#define sk_IPAddressFamily_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), pnum) +#define sk_IPAddressFamily_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_dup(sk) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_dup(ossl_check_const_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_copyfunc_type(copyfunc), ossl_check_IPAddressFamily_freefunc_type(freefunc))) +#define sk_IPAddressFamily_set_cmp_func(sk, cmp) ((sk_IPAddressFamily_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_compfunc_type(cmp))) + + + typedef STACK_OF(IPAddressFamily) IPAddrBlocks; -DEFINE_STACK_OF(IPAddressFamily) DECLARE_ASN1_FUNCTIONS(IPAddressRange) DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) @@ -867,7 +1305,33 @@ int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, #endif /* OPENSSL_NO_RFC3779 */ -DEFINE_STACK_OF(ASN1_STRING) +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING, ASN1_STRING, ASN1_STRING) +#define sk_ASN1_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_value(sk, idx) ((ASN1_STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_sk_type(sk), (idx))) +#define sk_ASN1_STRING_new(cmp) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_compfunc_type(cmp))) +#define sk_ASN1_STRING_new_null() ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_sk_type(sk), (n)) +#define sk_ASN1_STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_delete(sk, i) ((ASN1_STRING *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_sk_type(sk), (i))) +#define sk_ASN1_STRING_delete_ptr(sk, ptr) ((ASN1_STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))) +#define sk_ASN1_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_pop(sk) ((ASN1_STRING *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_shift(sk) ((ASN1_STRING *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_sk_type(sk),ossl_check_ASN1_STRING_freefunc_type(freefunc)) +#define sk_ASN1_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), (idx)) +#define sk_ASN1_STRING_set(sk, idx, ptr) ((ASN1_STRING *)OPENSSL_sk_set(ossl_check_ASN1_STRING_sk_type(sk), (idx), ossl_check_ASN1_STRING_type(ptr))) +#define sk_ASN1_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), pnum) +#define sk_ASN1_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_dup(sk) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_freefunc_type(freefunc))) +#define sk_ASN1_STRING_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_compfunc_type(cmp))) + /* * Admission Syntax @@ -880,8 +1344,59 @@ DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) DECLARE_ASN1_FUNCTIONS(ADMISSIONS) DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) -DEFINE_STACK_OF(ADMISSIONS) -DEFINE_STACK_OF(PROFESSION_INFO) +SKM_DEFINE_STACK_OF_INTERNAL(PROFESSION_INFO, PROFESSION_INFO, PROFESSION_INFO) +#define sk_PROFESSION_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_value(sk, idx) ((PROFESSION_INFO *)OPENSSL_sk_value(ossl_check_const_PROFESSION_INFO_sk_type(sk), (idx))) +#define sk_PROFESSION_INFO_new(cmp) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new(ossl_check_PROFESSION_INFO_compfunc_type(cmp))) +#define sk_PROFESSION_INFO_new_null() ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_null()) +#define sk_PROFESSION_INFO_new_reserve(cmp, n) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PROFESSION_INFO_compfunc_type(cmp), (n))) +#define sk_PROFESSION_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PROFESSION_INFO_sk_type(sk), (n)) +#define sk_PROFESSION_INFO_free(sk) OPENSSL_sk_free(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_delete(sk, i) ((PROFESSION_INFO *)OPENSSL_sk_delete(ossl_check_PROFESSION_INFO_sk_type(sk), (i))) +#define sk_PROFESSION_INFO_delete_ptr(sk, ptr) ((PROFESSION_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))) +#define sk_PROFESSION_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_pop(sk) ((PROFESSION_INFO *)OPENSSL_sk_pop(ossl_check_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_shift(sk) ((PROFESSION_INFO *)OPENSSL_sk_shift(ossl_check_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PROFESSION_INFO_sk_type(sk),ossl_check_PROFESSION_INFO_freefunc_type(freefunc)) +#define sk_PROFESSION_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), (idx)) +#define sk_PROFESSION_INFO_set(sk, idx, ptr) ((PROFESSION_INFO *)OPENSSL_sk_set(ossl_check_PROFESSION_INFO_sk_type(sk), (idx), ossl_check_PROFESSION_INFO_type(ptr))) +#define sk_PROFESSION_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), pnum) +#define sk_PROFESSION_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_dup(sk) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_dup(ossl_check_const_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_copyfunc_type(copyfunc), ossl_check_PROFESSION_INFO_freefunc_type(freefunc))) +#define sk_PROFESSION_INFO_set_cmp_func(sk, cmp) ((sk_PROFESSION_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(ADMISSIONS, ADMISSIONS, ADMISSIONS) +#define sk_ADMISSIONS_num(sk) OPENSSL_sk_num(ossl_check_const_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_value(sk, idx) ((ADMISSIONS *)OPENSSL_sk_value(ossl_check_const_ADMISSIONS_sk_type(sk), (idx))) +#define sk_ADMISSIONS_new(cmp) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new(ossl_check_ADMISSIONS_compfunc_type(cmp))) +#define sk_ADMISSIONS_new_null() ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_null()) +#define sk_ADMISSIONS_new_reserve(cmp, n) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_reserve(ossl_check_ADMISSIONS_compfunc_type(cmp), (n))) +#define sk_ADMISSIONS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ADMISSIONS_sk_type(sk), (n)) +#define sk_ADMISSIONS_free(sk) OPENSSL_sk_free(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_zero(sk) OPENSSL_sk_zero(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_delete(sk, i) ((ADMISSIONS *)OPENSSL_sk_delete(ossl_check_ADMISSIONS_sk_type(sk), (i))) +#define sk_ADMISSIONS_delete_ptr(sk, ptr) ((ADMISSIONS *)OPENSSL_sk_delete_ptr(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))) +#define sk_ADMISSIONS_push(sk, ptr) OPENSSL_sk_push(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_pop(sk) ((ADMISSIONS *)OPENSSL_sk_pop(ossl_check_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_shift(sk) ((ADMISSIONS *)OPENSSL_sk_shift(ossl_check_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ADMISSIONS_sk_type(sk),ossl_check_ADMISSIONS_freefunc_type(freefunc)) +#define sk_ADMISSIONS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), (idx)) +#define sk_ADMISSIONS_set(sk, idx, ptr) ((ADMISSIONS *)OPENSSL_sk_set(ossl_check_ADMISSIONS_sk_type(sk), (idx), ossl_check_ADMISSIONS_type(ptr))) +#define sk_ADMISSIONS_find(sk, ptr) OPENSSL_sk_find(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), pnum) +#define sk_ADMISSIONS_sort(sk) OPENSSL_sk_sort(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_dup(sk) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_dup(ossl_check_const_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_deep_copy(ossl_check_const_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_copyfunc_type(copyfunc), ossl_check_ADMISSIONS_freefunc_type(freefunc))) +#define sk_ADMISSIONS_set_cmp_func(sk, cmp) ((sk_ADMISSIONS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_compfunc_type(cmp))) + typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h.in new file mode 100644 index 00000000..e33c9d30 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h.in @@ -0,0 +1,1020 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509V3_H +# define OPENSSL_X509V3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509V3_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward reference */ +struct v3_ext_method; +struct v3_ext_ctx; + +/* Useful typedefs */ + +typedef void *(*X509V3_EXT_NEW)(void); +typedef void (*X509V3_EXT_FREE) (void *); +typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); +typedef int (*X509V3_EXT_I2D) (const void *, unsigned char **); +typedef STACK_OF(CONF_VALUE) * + (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, + STACK_OF(CONF_VALUE) *extlist); +typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, + STACK_OF(CONF_VALUE) *values); +typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, + void *ext); +typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); +typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, + BIO *out, int indent); +typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); + +/* V3 extension structure */ + +struct v3_ext_method { + int ext_nid; + int ext_flags; +/* If this is set the following four fields are ignored */ + ASN1_ITEM_EXP *it; +/* Old style ASN1 calls */ + X509V3_EXT_NEW ext_new; + X509V3_EXT_FREE ext_free; + X509V3_EXT_D2I d2i; + X509V3_EXT_I2D i2d; +/* The following pair is used for string extensions */ + X509V3_EXT_I2S i2s; + X509V3_EXT_S2I s2i; +/* The following pair is used for multi-valued extensions */ + X509V3_EXT_I2V i2v; + X509V3_EXT_V2I v2i; +/* The following are used for raw extensions */ + X509V3_EXT_I2R i2r; + X509V3_EXT_R2I r2i; + void *usr_data; /* Any extension specific data */ +}; + +typedef struct X509V3_CONF_METHOD_st { + char *(*get_string) (void *db, const char *section, const char *value); + STACK_OF(CONF_VALUE) *(*get_section) (void *db, const char *section); + void (*free_string) (void *db, char *string); + void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); +} X509V3_CONF_METHOD; + +/* Context specific info for producing X509 v3 extensions*/ +struct v3_ext_ctx { +# define X509V3_CTX_TEST 0x1 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define CTX_TEST X509V3_CTX_TEST +# endif +# define X509V3_CTX_REPLACE 0x2 + int flags; + X509 *issuer_cert; + X509 *subject_cert; + X509_REQ *subject_req; + X509_CRL *crl; + X509V3_CONF_METHOD *db_meth; + void *db; + EVP_PKEY *issuer_pkey; +/* Maybe more here */ +}; + +typedef struct v3_ext_method X509V3_EXT_METHOD; + +{- + generate_stack_macros("X509V3_EXT_METHOD"); +-} + +/* ext_flags values */ +# define X509V3_EXT_DYNAMIC 0x1 +# define X509V3_EXT_CTX_DEP 0x2 +# define X509V3_EXT_MULTILINE 0x4 + +typedef BIT_STRING_BITNAME ENUMERATED_NAMES; + +typedef struct BASIC_CONSTRAINTS_st { + int ca; + ASN1_INTEGER *pathlen; +} BASIC_CONSTRAINTS; + +typedef struct PKEY_USAGE_PERIOD_st { + ASN1_GENERALIZEDTIME *notBefore; + ASN1_GENERALIZEDTIME *notAfter; +} PKEY_USAGE_PERIOD; + +typedef struct otherName_st { + ASN1_OBJECT *type_id; + ASN1_TYPE *value; +} OTHERNAME; + +typedef struct EDIPartyName_st { + ASN1_STRING *nameAssigner; + ASN1_STRING *partyName; +} EDIPARTYNAME; + +typedef struct GENERAL_NAME_st { +# define GEN_OTHERNAME 0 +# define GEN_EMAIL 1 +# define GEN_DNS 2 +# define GEN_X400 3 +# define GEN_DIRNAME 4 +# define GEN_EDIPARTY 5 +# define GEN_URI 6 +# define GEN_IPADD 7 +# define GEN_RID 8 + int type; + union { + char *ptr; + OTHERNAME *otherName; /* otherName */ + ASN1_IA5STRING *rfc822Name; + ASN1_IA5STRING *dNSName; + ASN1_STRING *x400Address; + X509_NAME *directoryName; + EDIPARTYNAME *ediPartyName; + ASN1_IA5STRING *uniformResourceIdentifier; + ASN1_OCTET_STRING *iPAddress; + ASN1_OBJECT *registeredID; + /* Old names */ + ASN1_OCTET_STRING *ip; /* iPAddress */ + X509_NAME *dirn; /* dirn */ + ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, + * uniformResourceIdentifier */ + ASN1_OBJECT *rid; /* registeredID */ + ASN1_TYPE *other; /* x400Address */ + } d; +} GENERAL_NAME; + +typedef struct ACCESS_DESCRIPTION_st { + ASN1_OBJECT *method; + GENERAL_NAME *location; +} ACCESS_DESCRIPTION; + +{- + generate_stack_macros("ACCESS_DESCRIPTION") + .generate_stack_macros("GENERAL_NAME"); +-} + +typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; +typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; +typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; +typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; + +{- + generate_stack_macros("GENERAL_NAMES"); +-} + +typedef struct DIST_POINT_NAME_st { + int type; + union { + GENERAL_NAMES *fullname; + STACK_OF(X509_NAME_ENTRY) *relativename; + } name; +/* If relativename then this contains the full distribution point name */ + X509_NAME *dpname; +} DIST_POINT_NAME; +/* All existing reasons */ +# define CRLDP_ALL_REASONS 0x807f + +# define CRL_REASON_NONE -1 +# define CRL_REASON_UNSPECIFIED 0 +# define CRL_REASON_KEY_COMPROMISE 1 +# define CRL_REASON_CA_COMPROMISE 2 +# define CRL_REASON_AFFILIATION_CHANGED 3 +# define CRL_REASON_SUPERSEDED 4 +# define CRL_REASON_CESSATION_OF_OPERATION 5 +# define CRL_REASON_CERTIFICATE_HOLD 6 +# define CRL_REASON_REMOVE_FROM_CRL 8 +# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 +# define CRL_REASON_AA_COMPROMISE 10 + +struct DIST_POINT_st { + DIST_POINT_NAME *distpoint; + ASN1_BIT_STRING *reasons; + GENERAL_NAMES *CRLissuer; + int dp_reasons; +}; + +{- + generate_stack_macros("DIST_POINT"); +-} + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; + +struct AUTHORITY_KEYID_st { + ASN1_OCTET_STRING *keyid; + GENERAL_NAMES *issuer; + ASN1_INTEGER *serial; +}; + +/* Strong extranet structures */ + +typedef struct SXNET_ID_st { + ASN1_INTEGER *zone; + ASN1_OCTET_STRING *user; +} SXNETID; + +{- + generate_stack_macros("SXNETID"); +-} + + +typedef struct SXNET_st { + ASN1_INTEGER *version; + STACK_OF(SXNETID) *ids; +} SXNET; + +typedef struct ISSUER_SIGN_TOOL_st { + ASN1_UTF8STRING *signTool; + ASN1_UTF8STRING *cATool; + ASN1_UTF8STRING *signToolCert; + ASN1_UTF8STRING *cAToolCert; +} ISSUER_SIGN_TOOL; + +typedef struct NOTICEREF_st { + ASN1_STRING *organization; + STACK_OF(ASN1_INTEGER) *noticenos; +} NOTICEREF; + +typedef struct USERNOTICE_st { + NOTICEREF *noticeref; + ASN1_STRING *exptext; +} USERNOTICE; + +typedef struct POLICYQUALINFO_st { + ASN1_OBJECT *pqualid; + union { + ASN1_IA5STRING *cpsuri; + USERNOTICE *usernotice; + ASN1_TYPE *other; + } d; +} POLICYQUALINFO; + +{- + generate_stack_macros("POLICYQUALINFO"); +-} + + +typedef struct POLICYINFO_st { + ASN1_OBJECT *policyid; + STACK_OF(POLICYQUALINFO) *qualifiers; +} POLICYINFO; + +{- + generate_stack_macros("POLICYINFO"); +-} + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; + +typedef struct POLICY_MAPPING_st { + ASN1_OBJECT *issuerDomainPolicy; + ASN1_OBJECT *subjectDomainPolicy; +} POLICY_MAPPING; + +{- + generate_stack_macros("POLICY_MAPPING"); +-} + +typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; + +typedef struct GENERAL_SUBTREE_st { + GENERAL_NAME *base; + ASN1_INTEGER *minimum; + ASN1_INTEGER *maximum; +} GENERAL_SUBTREE; + +{- + generate_stack_macros("GENERAL_SUBTREE"); +-} + +struct NAME_CONSTRAINTS_st { + STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; + STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; +}; + +typedef struct POLICY_CONSTRAINTS_st { + ASN1_INTEGER *requireExplicitPolicy; + ASN1_INTEGER *inhibitPolicyMapping; +} POLICY_CONSTRAINTS; + +/* Proxy certificate structures, see RFC 3820 */ +typedef struct PROXY_POLICY_st { + ASN1_OBJECT *policyLanguage; + ASN1_OCTET_STRING *policy; +} PROXY_POLICY; + +typedef struct PROXY_CERT_INFO_EXTENSION_st { + ASN1_INTEGER *pcPathLengthConstraint; + PROXY_POLICY *proxyPolicy; +} PROXY_CERT_INFO_EXTENSION; + +DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) +DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) + +struct ISSUING_DIST_POINT_st { + DIST_POINT_NAME *distpoint; + int onlyuser; + int onlyCA; + ASN1_BIT_STRING *onlysomereasons; + int indirectCRL; + int onlyattr; +}; + +/* Values in idp_flags field */ +/* IDP present */ +# define IDP_PRESENT 0x1 +/* IDP values inconsistent */ +# define IDP_INVALID 0x2 +/* onlyuser true */ +# define IDP_ONLYUSER 0x4 +/* onlyCA true */ +# define IDP_ONLYCA 0x8 +/* onlyattr true */ +# define IDP_ONLYATTR 0x10 +/* indirectCRL true */ +# define IDP_INDIRECT 0x20 +/* onlysomereasons present */ +# define IDP_REASONS 0x40 + +# define X509V3_conf_err(val) ERR_add_error_data(6, \ + "section:", (val)->section, \ + ",name:", (val)->name, ",value:", (val)->value) + +# define X509V3_set_ctx_test(ctx) \ + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, X509V3_CTX_TEST) +# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; + +# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ + 0,0,0,0, \ + 0,0, \ + (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ + (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ + NULL, NULL, \ + table} + +# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ + 0,0,0,0, \ + NULL} + +#define EXT_UTF8STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_UTF8STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_UTF8STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_UTF8STRING, \ + 0,0,0,0, \ + NULL} + +# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + +/* X509_PURPOSE stuff */ + +# define EXFLAG_BCONS 0x1 +# define EXFLAG_KUSAGE 0x2 +# define EXFLAG_XKUSAGE 0x4 +# define EXFLAG_NSCERT 0x8 + +# define EXFLAG_CA 0x10 +# define EXFLAG_SI 0x20 /* self-issued, maybe not self-signed */ +# define EXFLAG_V1 0x40 +# define EXFLAG_INVALID 0x80 +/* EXFLAG_SET is set to indicate that some values have been precomputed */ +# define EXFLAG_SET 0x100 +# define EXFLAG_CRITICAL 0x200 +# define EXFLAG_PROXY 0x400 + +# define EXFLAG_INVALID_POLICY 0x800 +# define EXFLAG_FRESHEST 0x1000 +# define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ + +# define EXFLAG_BCONS_CRITICAL 0x10000 +# define EXFLAG_AKID_CRITICAL 0x20000 +# define EXFLAG_SKID_CRITICAL 0x40000 +# define EXFLAG_SAN_CRITICAL 0x80000 +# define EXFLAG_NO_FINGERPRINT 0x100000 + +# define KU_DIGITAL_SIGNATURE 0x0080 +# define KU_NON_REPUDIATION 0x0040 +# define KU_KEY_ENCIPHERMENT 0x0020 +# define KU_DATA_ENCIPHERMENT 0x0010 +# define KU_KEY_AGREEMENT 0x0008 +# define KU_KEY_CERT_SIGN 0x0004 +# define KU_CRL_SIGN 0x0002 +# define KU_ENCIPHER_ONLY 0x0001 +# define KU_DECIPHER_ONLY 0x8000 + +# define NS_SSL_CLIENT 0x80 +# define NS_SSL_SERVER 0x40 +# define NS_SMIME 0x20 +# define NS_OBJSIGN 0x10 +# define NS_SSL_CA 0x04 +# define NS_SMIME_CA 0x02 +# define NS_OBJSIGN_CA 0x01 +# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) + +# define XKU_SSL_SERVER 0x1 +# define XKU_SSL_CLIENT 0x2 +# define XKU_SMIME 0x4 +# define XKU_CODE_SIGN 0x8 +# define XKU_SGC 0x10 /* Netscape or MS Server-Gated Crypto */ +# define XKU_OCSP_SIGN 0x20 +# define XKU_TIMESTAMP 0x40 +# define XKU_DVCS 0x80 +# define XKU_ANYEKU 0x100 + +# define X509_PURPOSE_DYNAMIC 0x1 +# define X509_PURPOSE_DYNAMIC_NAME 0x2 + +typedef struct x509_purpose_st { + int purpose; + int trust; /* Default trust ID */ + int flags; + int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); + char *name; + char *sname; + void *usr_data; +} X509_PURPOSE; + +{- + generate_stack_macros("X509_PURPOSE"); +-} + + +# define X509_PURPOSE_SSL_CLIENT 1 +# define X509_PURPOSE_SSL_SERVER 2 +# define X509_PURPOSE_NS_SSL_SERVER 3 +# define X509_PURPOSE_SMIME_SIGN 4 +# define X509_PURPOSE_SMIME_ENCRYPT 5 +# define X509_PURPOSE_CRL_SIGN 6 +# define X509_PURPOSE_ANY 7 +# define X509_PURPOSE_OCSP_HELPER 8 +# define X509_PURPOSE_TIMESTAMP_SIGN 9 + +# define X509_PURPOSE_MIN 1 +# define X509_PURPOSE_MAX 9 + +/* Flags for X509V3_EXT_print() */ + +# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) +/* Return error for unknown extensions */ +# define X509V3_EXT_DEFAULT 0 +/* Print error for unknown extensions */ +# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) +/* ASN1 parse unknown extensions */ +# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) +/* BIO_dump unknown extensions */ +# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) + +/* Flags for X509V3_add1_i2d */ + +# define X509V3_ADD_OP_MASK 0xfL +# define X509V3_ADD_DEFAULT 0L +# define X509V3_ADD_APPEND 1L +# define X509V3_ADD_REPLACE 2L +# define X509V3_ADD_REPLACE_EXISTING 3L +# define X509V3_ADD_KEEP_EXISTING 4L +# define X509V3_ADD_DELETE 5L +# define X509V3_ADD_SILENT 0x10 + +DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) + +DECLARE_ASN1_FUNCTIONS(SXNET) +DECLARE_ASN1_FUNCTIONS(SXNETID) + +DECLARE_ASN1_FUNCTIONS(ISSUER_SIGN_TOOL) + +int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); +int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, + int userlen); +int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user, + int userlen); + +ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const char *zone); +ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); +ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); + +DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) + +DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) +DECLARE_ASN1_DUP_FUNCTION(GENERAL_NAME) +int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); + +ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, + STACK_OF(CONF_VALUE) *nval); +STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + ASN1_BIT_STRING *bits, + STACK_OF(CONF_VALUE) *extlist); +char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); +ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); +char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, ASN1_UTF8STRING *utf8); +ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, + GENERAL_NAME *gen, + STACK_OF(CONF_VALUE) *ret); +int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, + GENERAL_NAMES *gen, + STACK_OF(CONF_VALUE) *extlist); +GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); + +DECLARE_ASN1_FUNCTIONS(OTHERNAME) +DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) +int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); +void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); +void *GENERAL_NAME_get0_value(const GENERAL_NAME *a, int *ptype); +int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, + ASN1_OBJECT *oid, ASN1_TYPE *value); +int GENERAL_NAME_get0_otherName(const GENERAL_NAME *gen, + ASN1_OBJECT **poid, ASN1_TYPE **pvalue); + +char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + const ASN1_OCTET_STRING *ia5); +ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) +int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE) + +DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) +DECLARE_ASN1_FUNCTIONS(POLICYINFO) +DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) +DECLARE_ASN1_FUNCTIONS(USERNOTICE) +DECLARE_ASN1_FUNCTIONS(NOTICEREF) + +DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) +DECLARE_ASN1_FUNCTIONS(DIST_POINT) +DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) +DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) + +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, const X509_NAME *iname); + +int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); +int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); + +DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) +DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) + +DECLARE_ASN1_ITEM(POLICY_MAPPING) +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) +DECLARE_ASN1_ITEM(POLICY_MAPPINGS) + +DECLARE_ASN1_ITEM(GENERAL_SUBTREE) +DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) + +DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) +DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) + +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) +DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) + +GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, int gen_type, + const char *value, int is_nc); + +# ifdef OPENSSL_CONF_H +GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf); +GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf, + int is_nc); + +void X509V3_conf_free(CONF_VALUE *val); + +X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, + const char *value); +int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, + STACK_OF(X509_EXTENSION) **sk); +int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509 *cert); +int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_REQ *req); +int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_CRL *crl); + +X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, + X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *name, const char *value); +int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509 *cert); +int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_REQ *req); +int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_CRL *crl); + +int X509V3_add_value_bool_nf(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool); +int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint); +void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); +void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); +# endif + +char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section); +STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section); +void X509V3_string_free(X509V3_CTX *ctx, char *str); +void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); +void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, + X509_REQ *req, X509_CRL *crl, int flags); +/* For API backward compatibility, this is separate from X509V3_set_ctx(): */ +int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey); + +int X509V3_add_value(const char *name, const char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_uchar(const char *name, const unsigned char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_bool(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint, + STACK_OF(CONF_VALUE) **extlist); +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, + const ASN1_ENUMERATED *aint); +int X509V3_EXT_add(X509V3_EXT_METHOD *ext); +int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); +int X509V3_EXT_add_alias(int nid_to, int nid_from); +void X509V3_EXT_cleanup(void); + +const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); +const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); +int X509V3_add_standard_extensions(void); +STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); +void *X509V3_EXT_d2i(X509_EXTENSION *ext); +void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, + int *idx); + +X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); +int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, + int crit, unsigned long flags); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* The new declarations are in crypto.h, but the old ones were here. */ +# define hex_to_string OPENSSL_buf2hexstr +# define string_to_hex OPENSSL_hexstr2buf +#endif + +void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, + int ml); +int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, + int indent); +#ifndef OPENSSL_NO_STDIO +int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); +#endif +int X509V3_extensions_print(BIO *out, const char *title, + const STACK_OF(X509_EXTENSION) *exts, + unsigned long flag, int indent); + +int X509_check_ca(X509 *x); +int X509_check_purpose(X509 *x, int id, int ca); +int X509_supported_extension(X509_EXTENSION *ex); +int X509_PURPOSE_set(int *p, int purpose); +int X509_check_issued(X509 *issuer, X509 *subject); +int X509_check_akid(const X509 *issuer, const AUTHORITY_KEYID *akid); +void X509_set_proxy_flag(X509 *x); +void X509_set_proxy_pathlen(X509 *x, long l); +long X509_get_proxy_pathlen(X509 *x); + +uint32_t X509_get_extension_flags(X509 *x); +uint32_t X509_get_key_usage(X509 *x); +uint32_t X509_get_extended_key_usage(X509 *x); +const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); +const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x); +const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x); +const ASN1_INTEGER *X509_get0_authority_serial(X509 *x); + +int X509_PURPOSE_get_count(void); +X509_PURPOSE *X509_PURPOSE_get0(int idx); +int X509_PURPOSE_get_by_sname(const char *sname); +int X509_PURPOSE_get_by_id(int id); +int X509_PURPOSE_add(int id, int trust, int flags, + int (*ck) (const X509_PURPOSE *, const X509 *, int), + const char *name, const char *sname, void *arg); +char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp); +char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); +int X509_PURPOSE_get_trust(const X509_PURPOSE *xp); +void X509_PURPOSE_cleanup(void); +int X509_PURPOSE_get_id(const X509_PURPOSE *); + +STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); +STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); +void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); +STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); +/* Flags for X509_check_* functions */ + +/* + * Always check subject name for host match even if subject alt names present + */ +# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 +/* Disable wildcard matching for dnsName fields and common name. */ +# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 +/* Wildcards must not match a partial label. */ +# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 +/* Allow (non-partial) wildcards to match multiple labels. */ +# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 +/* Constraint verifier subdomain patterns to match a single labels. */ +# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 +/* Never check the subject CN */ +# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20 +/* + * Match reference identifiers starting with "." to any sub-domain. + * This is a non-public flag, turned on implicitly when the subject + * reference identity is a DNS name. + */ +# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 + +int X509_check_host(X509 *x, const char *chk, size_t chklen, + unsigned int flags, char **peername); +int X509_check_email(X509 *x, const char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); + +ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); +ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); +int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, + unsigned long chtype); + +void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); +{- + generate_stack_macros("X509_POLICY_NODE"); +-} + + +#ifndef OPENSSL_NO_RFC3779 +typedef struct ASRange_st { + ASN1_INTEGER *min, *max; +} ASRange; + +# define ASIdOrRange_id 0 +# define ASIdOrRange_range 1 + +typedef struct ASIdOrRange_st { + int type; + union { + ASN1_INTEGER *id; + ASRange *range; + } u; +} ASIdOrRange; + +{- + generate_stack_macros("ASIdOrRange"); +-} + +typedef STACK_OF(ASIdOrRange) ASIdOrRanges; + +# define ASIdentifierChoice_inherit 0 +# define ASIdentifierChoice_asIdsOrRanges 1 + +typedef struct ASIdentifierChoice_st { + int type; + union { + ASN1_NULL *inherit; + ASIdOrRanges *asIdsOrRanges; + } u; +} ASIdentifierChoice; + +typedef struct ASIdentifiers_st { + ASIdentifierChoice *asnum, *rdi; +} ASIdentifiers; + +DECLARE_ASN1_FUNCTIONS(ASRange) +DECLARE_ASN1_FUNCTIONS(ASIdOrRange) +DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) +DECLARE_ASN1_FUNCTIONS(ASIdentifiers) + +typedef struct IPAddressRange_st { + ASN1_BIT_STRING *min, *max; +} IPAddressRange; + +# define IPAddressOrRange_addressPrefix 0 +# define IPAddressOrRange_addressRange 1 + +typedef struct IPAddressOrRange_st { + int type; + union { + ASN1_BIT_STRING *addressPrefix; + IPAddressRange *addressRange; + } u; +} IPAddressOrRange; + +{- + generate_stack_macros("IPAddressOrRange"); +-} + +typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; + +# define IPAddressChoice_inherit 0 +# define IPAddressChoice_addressesOrRanges 1 + +typedef struct IPAddressChoice_st { + int type; + union { + ASN1_NULL *inherit; + IPAddressOrRanges *addressesOrRanges; + } u; +} IPAddressChoice; + +typedef struct IPAddressFamily_st { + ASN1_OCTET_STRING *addressFamily; + IPAddressChoice *ipAddressChoice; +} IPAddressFamily; + +{- + generate_stack_macros("IPAddressFamily"); +-} + + +typedef STACK_OF(IPAddressFamily) IPAddrBlocks; + +DECLARE_ASN1_FUNCTIONS(IPAddressRange) +DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) +DECLARE_ASN1_FUNCTIONS(IPAddressChoice) +DECLARE_ASN1_FUNCTIONS(IPAddressFamily) + +/* + * API tag for elements of the ASIdentifer SEQUENCE. + */ +# define V3_ASID_ASNUM 0 +# define V3_ASID_RDI 1 + +/* + * AFI values, assigned by IANA. It'd be nice to make the AFI + * handling code totally generic, but there are too many little things + * that would need to be defined for other address families for it to + * be worth the trouble. + */ +# define IANA_AFI_IPV4 1 +# define IANA_AFI_IPV6 2 + +/* + * Utilities to construct and extract values from RFC3779 extensions, + * since some of the encodings (particularly for IP address prefixes + * and ranges) are a bit tedious to work with directly. + */ +int X509v3_asid_add_inherit(ASIdentifiers *asid, int which); +int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, + ASN1_INTEGER *min, ASN1_INTEGER *max); +int X509v3_addr_add_inherit(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi); +int X509v3_addr_add_prefix(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *a, const int prefixlen); +int X509v3_addr_add_range(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *min, unsigned char *max); +unsigned X509v3_addr_get_afi(const IPAddressFamily *f); +int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, + unsigned char *min, unsigned char *max, + const int length); + +/* + * Canonical forms. + */ +int X509v3_asid_is_canonical(ASIdentifiers *asid); +int X509v3_addr_is_canonical(IPAddrBlocks *addr); +int X509v3_asid_canonize(ASIdentifiers *asid); +int X509v3_addr_canonize(IPAddrBlocks *addr); + +/* + * Tests for inheritance and containment. + */ +int X509v3_asid_inherits(ASIdentifiers *asid); +int X509v3_addr_inherits(IPAddrBlocks *addr); +int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); +int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); + +/* + * Check whether RFC 3779 extensions nest properly in chains. + */ +int X509v3_asid_validate_path(X509_STORE_CTX *); +int X509v3_addr_validate_path(X509_STORE_CTX *); +int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, + ASIdentifiers *ext, + int allow_inheritance); +int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, + IPAddrBlocks *ext, int allow_inheritance); + +#endif /* OPENSSL_NO_RFC3779 */ + +{- + generate_stack_macros("ASN1_STRING"); +-} + +/* + * Admission Syntax + */ +typedef struct NamingAuthority_st NAMING_AUTHORITY; +typedef struct ProfessionInfo_st PROFESSION_INFO; +typedef struct Admissions_st ADMISSIONS; +typedef struct AdmissionSyntax_st ADMISSION_SYNTAX; +DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) +DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) +DECLARE_ASN1_FUNCTIONS(ADMISSIONS) +DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) +{- + generate_stack_macros("PROFESSION_INFO") + .generate_stack_macros("ADMISSIONS"); +-} +typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; + +const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( + const NAMING_AUTHORITY *n); +const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL( + const NAMING_AUTHORITY *n); +const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText( + const NAMING_AUTHORITY *n); +void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n, + ASN1_OBJECT* namingAuthorityId); +void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n, + ASN1_IA5STRING* namingAuthorityUrl); +void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n, + ASN1_STRING* namingAuthorityText); + +const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_admissionAuthority( + ADMISSION_SYNTAX *as, GENERAL_NAME *aa); +const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_contentsOfAdmissions( + ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a); +const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa); +const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na); +const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a); +void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi); +const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_addProfessionInfo( + PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos); +const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_namingAuthority( + PROFESSION_INFO *pi, NAMING_AUTHORITY *na); +const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionItems( + PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as); +const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionOIDs( + PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po); +const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_registrationNumber( + PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3err.h index 3b9f7139..1ae3a562 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3err.h @@ -2,95 +2,21 @@ * Generated by util/mkerr.pl DO NOT EDIT * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509V3ERR_H -# define HEADER_X509V3ERR_H +#ifndef OPENSSL_X509V3ERR_H +# define OPENSSL_X509V3ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509V3_strings(void); -/* - * X509V3 function codes. - */ -# define X509V3_F_A2I_GENERAL_NAME 164 -# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 -# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 -# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 -# define X509V3_F_BIGNUM_TO_STRING 167 -# define X509V3_F_COPY_EMAIL 122 -# define X509V3_F_COPY_ISSUER 123 -# define X509V3_F_DO_DIRNAME 144 -# define X509V3_F_DO_EXT_I2D 135 -# define X509V3_F_DO_EXT_NCONF 151 -# define X509V3_F_GNAMES_FROM_SECTNAME 156 -# define X509V3_F_I2S_ASN1_ENUMERATED 121 -# define X509V3_F_I2S_ASN1_IA5STRING 149 -# define X509V3_F_I2S_ASN1_INTEGER 120 -# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 -# define X509V3_F_I2V_AUTHORITY_KEYID 173 -# define X509V3_F_LEVEL_ADD_NODE 168 -# define X509V3_F_NOTICE_SECTION 132 -# define X509V3_F_NREF_NOS 133 -# define X509V3_F_POLICY_CACHE_CREATE 169 -# define X509V3_F_POLICY_CACHE_NEW 170 -# define X509V3_F_POLICY_DATA_NEW 171 -# define X509V3_F_POLICY_SECTION 131 -# define X509V3_F_PROCESS_PCI_VALUE 150 -# define X509V3_F_R2I_CERTPOL 130 -# define X509V3_F_R2I_PCI 155 -# define X509V3_F_S2I_ASN1_IA5STRING 100 -# define X509V3_F_S2I_ASN1_INTEGER 108 -# define X509V3_F_S2I_ASN1_OCTET_STRING 112 -# define X509V3_F_S2I_SKEY_ID 115 -# define X509V3_F_SET_DIST_POINT_NAME 158 -# define X509V3_F_SXNET_ADD_ID_ASC 125 -# define X509V3_F_SXNET_ADD_ID_INTEGER 126 -# define X509V3_F_SXNET_ADD_ID_ULONG 127 -# define X509V3_F_SXNET_GET_ID_ASC 128 -# define X509V3_F_SXNET_GET_ID_ULONG 129 -# define X509V3_F_TREE_INIT 172 -# define X509V3_F_V2I_ASIDENTIFIERS 163 -# define X509V3_F_V2I_ASN1_BIT_STRING 101 -# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 -# define X509V3_F_V2I_AUTHORITY_KEYID 119 -# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 -# define X509V3_F_V2I_CRLD 134 -# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 -# define X509V3_F_V2I_GENERAL_NAMES 118 -# define X509V3_F_V2I_GENERAL_NAME_EX 117 -# define X509V3_F_V2I_IDP 157 -# define X509V3_F_V2I_IPADDRBLOCKS 159 -# define X509V3_F_V2I_ISSUER_ALT 153 -# define X509V3_F_V2I_NAME_CONSTRAINTS 147 -# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 -# define X509V3_F_V2I_POLICY_MAPPINGS 145 -# define X509V3_F_V2I_SUBJECT_ALT 154 -# define X509V3_F_V2I_TLS_FEATURE 165 -# define X509V3_F_V3_GENERIC_EXTENSION 116 -# define X509V3_F_X509V3_ADD1_I2D 140 -# define X509V3_F_X509V3_ADD_LEN_VALUE 174 -# define X509V3_F_X509V3_ADD_VALUE 105 -# define X509V3_F_X509V3_EXT_ADD 104 -# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 -# define X509V3_F_X509V3_EXT_I2D 136 -# define X509V3_F_X509V3_EXT_NCONF 152 -# define X509V3_F_X509V3_GET_SECTION 142 -# define X509V3_F_X509V3_GET_STRING 143 -# define X509V3_F_X509V3_GET_VALUE_BOOL 110 -# define X509V3_F_X509V3_PARSE_LIST 109 -# define X509V3_F_X509_PURPOSE_ADD 137 -# define X509V3_F_X509_PURPOSE_SET 141 /* * X509V3 reason codes. @@ -102,6 +28,7 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_DIRNAME_ERROR 149 # define X509V3_R_DISTPOINT_ALREADY_SET 160 # define X509V3_R_DUPLICATE_ZONE_ID 133 +# define X509V3_R_EMPTY_KEY_USAGE 169 # define X509V3_R_ERROR_CONVERTING_ZONE 131 # define X509V3_R_ERROR_CREATING_EXTENSION 144 # define X509V3_R_ERROR_IN_EXTENSION 128 @@ -116,13 +43,14 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_INVALID_ASNUMBER 162 # define X509V3_R_INVALID_ASRANGE 163 # define X509V3_R_INVALID_BOOLEAN_STRING 104 +# define X509V3_R_INVALID_CERTIFICATE 158 +# define X509V3_R_INVALID_EMPTY_NAME 108 # define X509V3_R_INVALID_EXTENSION_STRING 105 # define X509V3_R_INVALID_INHERITANCE 165 # define X509V3_R_INVALID_IPADDRESS 166 # define X509V3_R_INVALID_MULTIPLE_RDNS 161 # define X509V3_R_INVALID_NAME 106 # define X509V3_R_INVALID_NULL_ARGUMENT 107 -# define X509V3_R_INVALID_NULL_NAME 108 # define X509V3_R_INVALID_NULL_VALUE 109 # define X509V3_R_INVALID_NUMBER 140 # define X509V3_R_INVALID_NUMBERS 141 @@ -137,6 +65,7 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_ISSUER_DECODE_ERROR 126 # define X509V3_R_MISSING_VALUE 124 # define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 +# define X509V3_R_NEGATIVE_PATHLEN 168 # define X509V3_R_NO_CONFIG_DATABASE 136 # define X509V3_R_NO_ISSUER_CERTIFICATE 121 # define X509V3_R_NO_ISSUER_DETAILS 127 diff --git a/deps/openssl/android/x86/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H b/deps/openssl/android/x86/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H index c350018a..e57c0eab 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H +++ b/deps/openssl/android/x86/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H b/deps/openssl/android/x86/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H index 9a9c777f..a0139575 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H +++ b/deps/openssl/android/x86/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86/usr/local/include/crypto/aes_platform.h b/deps/openssl/android/x86/usr/local/include/crypto/aes_platform.h new file mode 100644 index 00000000..87c35255 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/aes_platform.h @@ -0,0 +1,517 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_AES_PLATFORM_H +# define OSSL_AES_PLATFORM_H +# pragma once + +# include + +# ifdef VPAES_ASM +int vpaes_set_encrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +int vpaes_set_decrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +void vpaes_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void vpaes_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void vpaes_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key, unsigned char *ivec, int enc); +# endif /* VPAES_ASM */ + +# ifdef BSAES_ASM +void ossl_bsaes_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char ivec[16], int enc); +void ossl_bsaes_ctr32_encrypt_blocks(const unsigned char *in, + unsigned char *out, size_t len, + const AES_KEY *key, + const unsigned char ivec[16]); +void ossl_bsaes_xts_encrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +void ossl_bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +# endif /* BSAES_ASM */ + +# ifdef AES_CTR_ASM +void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + const unsigned char ivec[AES_BLOCK_SIZE]); +# endif /* AES_CTR_ASM */ + +# ifdef AES_XTS_ASM +void AES_xts_encrypt(const unsigned char *inp, unsigned char *out, size_t len, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); +void AES_xts_decrypt(const unsigned char *inp, unsigned char *out, size_t len, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); +# endif /* AES_XTS_ASM */ + +# if defined(OPENSSL_CPUID_OBJ) +# if (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC)) +# include "crypto/ppc_arch.h" +# ifdef VPAES_ASM +# define VPAES_CAPABLE (OPENSSL_ppccap_P & PPC_ALTIVEC) +# endif +# define HWAES_CAPABLE (OPENSSL_ppccap_P & PPC_CRYPTO207) +# define HWAES_set_encrypt_key aes_p8_set_encrypt_key +# define HWAES_set_decrypt_key aes_p8_set_decrypt_key +# define HWAES_encrypt aes_p8_encrypt +# define HWAES_decrypt aes_p8_decrypt +# define HWAES_cbc_encrypt aes_p8_cbc_encrypt +# define HWAES_ctr32_encrypt_blocks aes_p8_ctr32_encrypt_blocks +# define HWAES_xts_encrypt aes_p8_xts_encrypt +# define HWAES_xts_decrypt aes_p8_xts_decrypt +# if !defined(OPENSSL_SYS_AIX) && !defined(OPENSSL_SYS_MACOSX) +# define PPC_AES_GCM_CAPABLE (OPENSSL_ppccap_P & PPC_MADD300) +# define AES_GCM_ENC_BYTES 128 +# define AES_GCM_DEC_BYTES 128 +size_t ppc_aes_gcm_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, unsigned char ivec[16], + u64 *Xi); +size_t ppc_aes_gcm_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, unsigned char ivec[16], + u64 *Xi); +# define AES_GCM_ASM_PPC(gctx) ((gctx)->ctr==aes_p8_ctr32_encrypt_blocks && \ + (gctx)->gcm.funcs.ghash==gcm_ghash_p8) +void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); +# endif /* OPENSSL_SYS_AIX || OPENSSL_SYS_MACOSX */ +# endif /* PPC */ + +# if (defined(__arm__) || defined(__arm) || defined(__aarch64__)) +# include "arm_arch.h" +# if __ARM_MAX_ARCH__>=7 +# if defined(BSAES_ASM) +# define BSAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON) +# endif +# if defined(VPAES_ASM) +# define VPAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON) +# endif +# define HWAES_CAPABLE (OPENSSL_armcap_P & ARMV8_AES) +# define HWAES_set_encrypt_key aes_v8_set_encrypt_key +# define HWAES_set_decrypt_key aes_v8_set_decrypt_key +# define HWAES_encrypt aes_v8_encrypt +# define HWAES_decrypt aes_v8_decrypt +# define HWAES_cbc_encrypt aes_v8_cbc_encrypt +# define HWAES_ecb_encrypt aes_v8_ecb_encrypt +# if __ARM_MAX_ARCH__>=8 && defined(__aarch64__) +# define HWAES_xts_encrypt aes_v8_xts_encrypt +# define HWAES_xts_decrypt aes_v8_xts_decrypt +# endif +# define HWAES_ctr32_encrypt_blocks aes_v8_ctr32_encrypt_blocks +# define AES_PMULL_CAPABLE ((OPENSSL_armcap_P & ARMV8_PMULL) && (OPENSSL_armcap_P & ARMV8_AES)) +# define AES_GCM_ENC_BYTES 512 +# define AES_GCM_DEC_BYTES 512 +# if __ARM_MAX_ARCH__>=8 && defined(__aarch64__) +# define AES_gcm_encrypt armv8_aes_gcm_encrypt +# define AES_gcm_decrypt armv8_aes_gcm_decrypt +# define AES_GCM_ASM(gctx) ((gctx)->ctr==aes_v8_ctr32_encrypt_blocks && \ + (gctx)->gcm.funcs.ghash==gcm_ghash_v8) +/* The [unroll8_eor3_]aes_gcm_(enc|dec)_(128|192|256)_kernel() functions + * take input length in BITS and return number of BYTES processed */ +size_t aes_gcm_enc_128_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_enc_192_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_enc_256_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_128_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_192_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_256_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_128_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_192_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_256_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_128_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_192_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_256_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t armv8_aes_gcm_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, + unsigned char ivec[16], u64 *Xi); +size_t armv8_aes_gcm_decrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, + unsigned char ivec[16], u64 *Xi); +void gcm_ghash_v8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); +# endif +# endif +# endif +# endif /* OPENSSL_CPUID_OBJ */ + +# if defined(AES_ASM) && ( \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) ) +# define AES_CBC_HMAC_SHA_CAPABLE 1 +# define AESNI_CBC_HMAC_SHA_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32))) +# endif + +# if defined(__loongarch__) || defined(__loongarch64) +# include "loongarch_arch.h" +# if defined(VPAES_ASM) +# define VPAES_CAPABLE (OPENSSL_loongarch_hwcap_P & LOONGARCH_HWCAP_LSX) +# endif +# endif + +# if defined(AES_ASM) && !defined(I386_ONLY) && ( \ + ((defined(__i386) || defined(__i386__) || \ + defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) ) + +/* AES-NI section */ + +# define AESNI_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32))) +# ifdef VPAES_ASM +# define VPAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32))) +# endif +# ifdef BSAES_ASM +# define BSAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32))) +# endif + +# define AES_GCM_ENC_BYTES 32 +# define AES_GCM_DEC_BYTES 16 + +int aesni_set_encrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +int aesni_set_decrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); + +void aesni_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void aesni_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); + +void aesni_ecb_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, const AES_KEY *key, int enc); +void aesni_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key, unsigned char *ivec, int enc); +# ifndef OPENSSL_NO_OCB +void aesni_ocb_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +void aesni_ocb_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# endif /* OPENSSL_NO_OCB */ + +void aesni_ctr32_encrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, const unsigned char *ivec); + +void aesni_xts_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); + +void aesni_xts_decrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); + +void aesni_ccm64_encrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +void aesni_ccm64_decrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +# if defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) +size_t aesni_gcm_encrypt(const unsigned char *in, unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], u64 *Xi); +size_t aesni_gcm_decrypt(const unsigned char *in, unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], u64 *Xi); +void gcm_ghash_avx(u64 Xi[2], const u128 Htable[16], const u8 *in, size_t len); + +# define AES_gcm_encrypt aesni_gcm_encrypt +# define AES_gcm_decrypt aesni_gcm_decrypt +# define AES_GCM_ASM(ctx) (ctx->ctr == aesni_ctr32_encrypt_blocks && \ + ctx->gcm.funcs.ghash == gcm_ghash_avx) +# endif + + +# elif defined(AES_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# define SPARC_AES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_AES) +# define HWAES_CAPABLE (OPENSSL_sparcv9cap_P[0] & SPARCV9_FJAESX) +# define HWAES_set_encrypt_key aes_fx_set_encrypt_key +# define HWAES_set_decrypt_key aes_fx_set_decrypt_key +# define HWAES_encrypt aes_fx_encrypt +# define HWAES_decrypt aes_fx_decrypt +# define HWAES_cbc_encrypt aes_fx_cbc_encrypt +# define HWAES_ctr32_encrypt_blocks aes_fx_ctr32_encrypt_blocks + +void aes_t4_set_encrypt_key(const unsigned char *key, int bits, AES_KEY *ks); +void aes_t4_set_decrypt_key(const unsigned char *key, int bits, AES_KEY *ks); +void aes_t4_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void aes_t4_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +/* + * Key-length specific subroutines were chosen for following reason. + * Each SPARC T4 core can execute up to 8 threads which share core's + * resources. Loading as much key material to registers allows to + * minimize references to shared memory interface, as well as amount + * of instructions in inner loops [much needed on T4]. But then having + * non-key-length specific routines would require conditional branches + * either in inner loops or on subroutines' entries. Former is hardly + * acceptable, while latter means code size increase to size occupied + * by multiple key-length specific subroutines, so why fight? + */ +void aes128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes192_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes192_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes192_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes128_t4_xts_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes128_t4_xts_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes256_t4_xts_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); + +# elif defined(OPENSSL_CPUID_OBJ) && defined(__s390__) +/* IBM S390X support */ +# include "s390x_arch.h" + + +/* Convert key size to function code: [16,24,32] -> [18,19,20]. */ +# define S390X_AES_FC(keylen) (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6)) + +/* Most modes of operation need km for partial block processing. */ +# define S390X_aes_128_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_128)) +# define S390X_aes_192_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_192)) +# define S390X_aes_256_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_256)) + +# define S390X_aes_128_cbc_CAPABLE 1 /* checked by callee */ +# define S390X_aes_192_cbc_CAPABLE 1 +# define S390X_aes_256_cbc_CAPABLE 1 + +# define S390X_aes_128_ecb_CAPABLE S390X_aes_128_CAPABLE +# define S390X_aes_192_ecb_CAPABLE S390X_aes_192_CAPABLE +# define S390X_aes_256_ecb_CAPABLE S390X_aes_256_CAPABLE + +# define S390X_aes_128_ofb_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_ofb_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_ofb_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_256))) + +# define S390X_aes_128_cfb_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_cfb_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_cfb_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_256))) +# define S390X_aes_128_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_128)) +# define S390X_aes_192_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_192)) +# define S390X_aes_256_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_256)) +# define S390X_aes_128_cfb1_CAPABLE 0 +# define S390X_aes_192_cfb1_CAPABLE 0 +# define S390X_aes_256_cfb1_CAPABLE 0 + +# define S390X_aes_128_ctr_CAPABLE 1 /* checked by callee */ +# define S390X_aes_192_ctr_CAPABLE 1 +# define S390X_aes_256_ctr_CAPABLE 1 + +# define S390X_aes_128_xts_CAPABLE 1 /* checked by callee */ +# define S390X_aes_256_xts_CAPABLE 1 + +# define S390X_aes_128_gcm_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_gcm_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_gcm_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_256))) + +# define S390X_aes_128_ccm_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_ccm_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_ccm_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_256))) +# define S390X_CCM_AAD_FLAG 0x40 + +# ifndef OPENSSL_NO_OCB +# define S390X_aes_128_ocb_CAPABLE 0 +# define S390X_aes_192_ocb_CAPABLE 0 +# define S390X_aes_256_ocb_CAPABLE 0 +# endif /* OPENSSL_NO_OCB */ + +# ifndef OPENSSL_NO_SIV +# define S390X_aes_128_siv_CAPABLE 0 +# define S390X_aes_192_siv_CAPABLE 0 +# define S390X_aes_256_siv_CAPABLE 0 +# endif /* OPENSSL_NO_SIV */ + +/* Convert key size to function code: [16,24,32] -> [18,19,20]. */ +# define S390X_AES_FC(keylen) (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6)) +# elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 64 +/* RISC-V 64 support */ +# include "riscv_arch.h" +# define RV64I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) + +int rv64i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv64i_zknd_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void rv64i_zkne_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void rv64i_zknd_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +# elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 32 +/* RISC-V 32 support */ +# include "riscv_arch.h" +# define RV32I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) +# define RV32I_ZBKB_ZKND_ZKNE_CAPABLE (RV32I_ZKND_ZKNE_CAPABLE && RISCV_HAS_ZBKB()) + +int rv32i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +/* set_decrypt_key needs both zknd and zkne */ +int rv32i_zknd_zkne_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv32i_zbkb_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv32i_zbkb_zknd_zkne_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void rv32i_zkne_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void rv32i_zknd_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +# endif + +# if defined(HWAES_CAPABLE) +int HWAES_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int HWAES_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void HWAES_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void HWAES_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void HWAES_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +void HWAES_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + const int enc); +void HWAES_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +void HWAES_xts_encrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +void HWAES_xts_decrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +# ifndef OPENSSL_NO_OCB +# ifdef HWAES_ocb_encrypt +void HWAES_ocb_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# else +# define HWAES_ocb_encrypt ((ocb128_f)NULL) +# endif +# ifdef HWAES_ocb_decrypt +void HWAES_ocb_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# else +# define HWAES_ocb_decrypt ((ocb128_f)NULL) +# endif +# endif /* OPENSSL_NO_OCB */ + +# endif /* HWAES_CAPABLE */ + +#endif /* OSSL_AES_PLATFORM_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/aria.h b/deps/openssl/android/x86/usr/local/include/crypto/aria.h index 03a62950..21a9932e 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/aria.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/aria.h @@ -1,8 +1,8 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -12,6 +12,7 @@ #ifndef OSSL_CRYPTO_ARIA_H # define OSSL_CRYPTO_ARIA_H +# pragma once # include @@ -39,12 +40,12 @@ struct aria_key_st { typedef struct aria_key_st ARIA_KEY; -int aria_set_encrypt_key(const unsigned char *userKey, const int bits, - ARIA_KEY *key); -int aria_set_decrypt_key(const unsigned char *userKey, const int bits, - ARIA_KEY *key); +int ossl_aria_set_encrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); +int ossl_aria_set_decrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); -void aria_encrypt(const unsigned char *in, unsigned char *out, - const ARIA_KEY *key); +void ossl_aria_encrypt(const unsigned char *in, unsigned char *out, + const ARIA_KEY *key); #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/asn1.h b/deps/openssl/android/x86/usr/local/include/crypto/asn1.h index 9c9b4d89..ec76ae6f 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/asn1.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/asn1.h @@ -1,23 +1,32 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OSSL_CRYPTO_ASN1_H +# define OSSL_CRYPTO_ASN1_H +# pragma once + +# include +# include /* OSSL_FUNC_keymgmt_import() */ + /* Internal ASN1 structures and functions: not for application use */ /* ASN1 public key method structure */ +#include + struct evp_pkey_asn1_method_st { int pkey_id; int pkey_base_id; unsigned long pkey_flags; char *pem_str; char *info; - int (*pub_decode) (EVP_PKEY *pk, X509_PUBKEY *pub); + int (*pub_decode) (EVP_PKEY *pk, const X509_PUBKEY *pub); int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk); int (*pub_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); int (*pub_print) (BIO *out, const EVP_PKEY *pkey, int indent, @@ -47,9 +56,10 @@ struct evp_pkey_asn1_method_st { const unsigned char **pder, int derlen); int (*old_priv_encode) (const EVP_PKEY *pkey, unsigned char **pder); /* Custom ASN1 signature verification */ - int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, - X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey); - int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, + int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, const void *data, + const X509_ALGOR *a, const ASN1_BIT_STRING *sig, + EVP_PKEY *pkey); + int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, const void *data, X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig); int (*siginf_set) (X509_SIG_INFO *siginf, const X509_ALGOR *alg, @@ -63,26 +73,35 @@ struct evp_pkey_asn1_method_st { int (*set_pub_key) (EVP_PKEY *pk, const unsigned char *pub, size_t len); int (*get_priv_key) (const EVP_PKEY *pk, unsigned char *priv, size_t *len); int (*get_pub_key) (const EVP_PKEY *pk, unsigned char *pub, size_t *len); + + /* Exports and imports to / from providers */ + size_t (*dirty_cnt) (const EVP_PKEY *pk); + int (*export_to) (const EVP_PKEY *pk, void *to_keydata, + OSSL_FUNC_keymgmt_import_fn *importer, + OSSL_LIB_CTX *libctx, const char *propq); + OSSL_CALLBACK *import_from; + int (*copy) (EVP_PKEY *to, EVP_PKEY *from); + + int (*priv_decode_ex) (EVP_PKEY *pk, + const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, + const char *propq); } /* EVP_PKEY_ASN1_METHOD */ ; DEFINE_STACK_OF_CONST(EVP_PKEY_ASN1_METHOD) -extern const EVP_PKEY_ASN1_METHOD cmac_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dh_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dhx_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meths[5]; -extern const EVP_PKEY_ASN1_METHOD eckey_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ecx25519_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ecx448_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ed448_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD sm2_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD poly1305_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dh_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dhx_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dsa_asn1_meths[5]; +extern const EVP_PKEY_ASN1_METHOD ossl_eckey_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ecx25519_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ecx448_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ed25519_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ed448_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_sm2_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD hmac_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[2]; -extern const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD siphash_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_rsa_asn1_meths[2]; +extern const EVP_PKEY_ASN1_METHOD ossl_rsa_pss_asn1_meth; /* * These are used internally in the ASN1_OBJECT to keep track of whether the @@ -110,4 +129,21 @@ struct asn1_pctx_st { unsigned long str_flags; } /* ASN1_PCTX */ ; -int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb); +/* ASN1 type functions */ + +int ossl_asn1_type_set_octetstring_int(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ossl_asn1_type_get_octetstring_int(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +int ossl_x509_algor_new_from_md(X509_ALGOR **palg, const EVP_MD *md); +const EVP_MD *ossl_x509_algor_get_md(X509_ALGOR *alg); +X509_ALGOR *ossl_x509_algor_mgf1_decode(X509_ALGOR *alg); +int ossl_x509_algor_md_to_mgf1(X509_ALGOR **palg, const EVP_MD *mgf1md); +int ossl_asn1_time_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); + +EVP_PKEY * ossl_d2i_PrivateKey_legacy(int keytype, EVP_PKEY **a, + const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); + +#endif /* ndef OSSL_CRYPTO_ASN1_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/asn1_dsa.h b/deps/openssl/android/x86/usr/local/include/crypto/asn1_dsa.h new file mode 100644 index 00000000..3eadb9ec --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/asn1_dsa.h @@ -0,0 +1,24 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASN1_DSA_H +# define OSSL_CRYPTO_ASN1_DSA_H +# pragma once + +#include "internal/packet.h" + +int ossl_encode_der_length(WPACKET *pkt, size_t cont_len); +int ossl_encode_der_integer(WPACKET *pkt, const BIGNUM *n); +int ossl_encode_der_dsa_sig(WPACKET *pkt, const BIGNUM *r, const BIGNUM *s); +int ossl_decode_der_length(PACKET *pkt, PACKET *subpkt); +int ossl_decode_der_integer(PACKET *pkt, BIGNUM *n); +size_t ossl_decode_der_dsa_sig(BIGNUM *r, BIGNUM *s, const unsigned char **ppin, + size_t len); + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/asn1err.h b/deps/openssl/android/x86/usr/local/include/crypto/asn1err.h new file mode 100644 index 00000000..6441386b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/asn1err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASN1ERR_H +# define OSSL_CRYPTO_ASN1ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ASN1_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/async.h b/deps/openssl/android/x86/usr/local/include/crypto/async.h index dc8e937b..7bc0dbb6 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/async.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/async.h @@ -1,15 +1,19 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_CRYPTO_ASYNC_H +# define OSSL_CRYPTO_ASYNC_H +# pragma once + +# include int async_init(void); void async_deinit(void); -void async_delete_thread_state(void); +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/asyncerr.h b/deps/openssl/android/x86/usr/local/include/crypto/asyncerr.h new file mode 100644 index 00000000..574e0af7 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/asyncerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASYNCERR_H +# define OSSL_CRYPTO_ASYNCERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ASYNC_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/bioerr.h b/deps/openssl/android/x86/usr/local/include/crypto/bioerr.h new file mode 100644 index 00000000..a0c06099 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/bioerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BIOERR_H +# define OSSL_CRYPTO_BIOERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BIO_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/bn.h b/deps/openssl/android/x86/usr/local/include/crypto/bn.h index 250914c4..00544d9d 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/bn.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/bn.h @@ -1,7 +1,7 @@ /* * Copyright 2014-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_CRYPTO_BN_H # define OSSL_CRYPTO_BN_H +# pragma once # include # include @@ -87,4 +88,32 @@ int bn_rshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); int bn_div_fixed_top(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); +#define BN_PRIMETEST_COMPOSITE 0 +#define BN_PRIMETEST_COMPOSITE_WITH_FACTOR 1 +#define BN_PRIMETEST_COMPOSITE_NOT_POWER_OF_PRIME 2 +#define BN_PRIMETEST_PROBABLY_PRIME 3 + +int ossl_bn_miller_rabin_is_prime(const BIGNUM *w, int iterations, BN_CTX *ctx, + BN_GENCB *cb, int enhanced, int *status); +int ossl_bn_check_generated_prime(const BIGNUM *w, int checks, BN_CTX *ctx, + BN_GENCB *cb); + +const BIGNUM *ossl_bn_get0_small_factors(void); + +int ossl_bn_rsa_fips186_4_gen_prob_primes(BIGNUM *p, BIGNUM *Xpout, + BIGNUM *p1, BIGNUM *p2, + const BIGNUM *Xp, const BIGNUM *Xp1, + const BIGNUM *Xp2, int nlen, + const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); + +int ossl_bn_rsa_fips186_4_derive_prime(BIGNUM *Y, BIGNUM *X, const BIGNUM *Xin, + const BIGNUM *r1, const BIGNUM *r2, + int nlen, const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); + +OSSL_LIB_CTX *ossl_bn_get_libctx(BN_CTX *ctx); + +extern const BIGNUM ossl_bn_inv_sqrt_2; + #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/bn_conf.h b/deps/openssl/android/x86/usr/local/include/crypto/bn_conf.h index 459055c9..f3a8a8af 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/bn_conf.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/bn_conf.h @@ -1,9 +1,9 @@ /* WARNING: do not edit! */ /* Generated by Makefile from include/crypto/bn_conf.h.in */ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,6 +11,7 @@ #ifndef OSSL_CRYPTO_BN_CONF_H # define OSSL_CRYPTO_BN_CONF_H +# pragma once /* * The contents of this file are not used in the UEFI build, as diff --git a/deps/openssl/android/x86/usr/local/include/crypto/bn_conf.h.in b/deps/openssl/android/x86/usr/local/include/crypto/bn_conf.h.in index b6b9eb74..dbc901b1 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/bn_conf.h.in +++ b/deps/openssl/android/x86/usr/local/include/crypto/bn_conf.h.in @@ -1,8 +1,8 @@ {- join("\n",map { "/* $_ */" } @autowarntext) -} /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,7 @@ #ifndef OSSL_CRYPTO_BN_CONF_H # define OSSL_CRYPTO_BN_CONF_H +# pragma once /* * The contents of this file are not used in the UEFI build, as diff --git a/deps/openssl/android/x86/usr/local/include/crypto/bn_dh.h b/deps/openssl/android/x86/usr/local/include/crypto/bn_dh.h index 70ebca28..6d12c20e 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/bn_dh.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/bn_dh.h @@ -1,24 +1,43 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #define declare_dh_bn(x) \ - extern const BIGNUM _bignum_dh##x##_p; \ - extern const BIGNUM _bignum_dh##x##_g; \ - extern const BIGNUM _bignum_dh##x##_q; + extern const BIGNUM ossl_bignum_dh##x##_p; \ + extern const BIGNUM ossl_bignum_dh##x##_q; \ + extern const BIGNUM ossl_bignum_dh##x##_g; \ declare_dh_bn(1024_160) declare_dh_bn(2048_224) declare_dh_bn(2048_256) -extern const BIGNUM _bignum_ffdhe2048_p; -extern const BIGNUM _bignum_ffdhe3072_p; -extern const BIGNUM _bignum_ffdhe4096_p; -extern const BIGNUM _bignum_ffdhe6144_p; -extern const BIGNUM _bignum_ffdhe8192_p; -extern const BIGNUM _bignum_const_2; +extern const BIGNUM ossl_bignum_const_2; + +extern const BIGNUM ossl_bignum_ffdhe2048_p; +extern const BIGNUM ossl_bignum_ffdhe3072_p; +extern const BIGNUM ossl_bignum_ffdhe4096_p; +extern const BIGNUM ossl_bignum_ffdhe6144_p; +extern const BIGNUM ossl_bignum_ffdhe8192_p; +extern const BIGNUM ossl_bignum_ffdhe2048_q; +extern const BIGNUM ossl_bignum_ffdhe3072_q; +extern const BIGNUM ossl_bignum_ffdhe4096_q; +extern const BIGNUM ossl_bignum_ffdhe6144_q; +extern const BIGNUM ossl_bignum_ffdhe8192_q; + +extern const BIGNUM ossl_bignum_modp_1536_p; +extern const BIGNUM ossl_bignum_modp_2048_p; +extern const BIGNUM ossl_bignum_modp_3072_p; +extern const BIGNUM ossl_bignum_modp_4096_p; +extern const BIGNUM ossl_bignum_modp_6144_p; +extern const BIGNUM ossl_bignum_modp_8192_p; +extern const BIGNUM ossl_bignum_modp_1536_q; +extern const BIGNUM ossl_bignum_modp_2048_q; +extern const BIGNUM ossl_bignum_modp_3072_q; +extern const BIGNUM ossl_bignum_modp_4096_q; +extern const BIGNUM ossl_bignum_modp_6144_q; +extern const BIGNUM ossl_bignum_modp_8192_q; diff --git a/deps/openssl/android/x86/usr/local/include/crypto/bn_srp.h b/deps/openssl/android/x86/usr/local/include/crypto/bn_srp.h index d4b282a6..00b160aa 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/bn_srp.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/bn_srp.h @@ -1,7 +1,7 @@ /* - * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,24 +9,24 @@ #ifndef OPENSSL_NO_SRP -extern const BIGNUM bn_group_1024; +extern const BIGNUM ossl_bn_group_1024; -extern const BIGNUM bn_group_1536; +extern const BIGNUM ossl_bn_group_1536; -extern const BIGNUM bn_group_2048; +extern const BIGNUM ossl_bn_group_2048; -extern const BIGNUM bn_group_3072; +extern const BIGNUM ossl_bn_group_3072; -extern const BIGNUM bn_group_4096; +extern const BIGNUM ossl_bn_group_4096; -extern const BIGNUM bn_group_6144; +extern const BIGNUM ossl_bn_group_6144; -extern const BIGNUM bn_group_8192; +extern const BIGNUM ossl_bn_group_8192; -extern const BIGNUM bn_generator_19; +extern const BIGNUM ossl_bn_generator_19; -extern const BIGNUM bn_generator_5; +extern const BIGNUM ossl_bn_generator_5; -extern const BIGNUM bn_generator_2; +extern const BIGNUM ossl_bn_generator_2; #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/bnerr.h b/deps/openssl/android/x86/usr/local/include/crypto/bnerr.h new file mode 100644 index 00000000..131e30fa --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/bnerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BNERR_H +# define OSSL_CRYPTO_BNERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BN_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/buffererr.h b/deps/openssl/android/x86/usr/local/include/crypto/buffererr.h new file mode 100644 index 00000000..54976d95 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/buffererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BUFFERERR_H +# define OSSL_CRYPTO_BUFFERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BUF_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/chacha.h b/deps/openssl/android/x86/usr/local/include/crypto/chacha.h index 4029400a..d29998ff 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/chacha.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/chacha.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_CRYPTO_CHACHA_H #define OSSL_CRYPTO_CHACHA_H +# pragma once #include @@ -35,8 +36,8 @@ void ChaCha20_ctr32(unsigned char *out, const unsigned char *inp, ((unsigned int)(p)[0]) | ((unsigned int)(p)[1]<<8) | \ ((unsigned int)(p)[2]<<16) | ((unsigned int)(p)[3]<<24) ) -#define CHACHA_KEY_SIZE 32 -#define CHACHA_CTR_SIZE 16 -#define CHACHA_BLK_SIZE 64 +#define CHACHA_KEY_SIZE 32 +#define CHACHA_CTR_SIZE 16 +#define CHACHA_BLK_SIZE 64 #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/cmll_platform.h b/deps/openssl/android/x86/usr/local/include/crypto/cmll_platform.h new file mode 100644 index 00000000..8cadadf6 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/cmll_platform.h @@ -0,0 +1,51 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CMLL_PLATFORM_H +# define OSSL_CMLL_PLATFORM_H +# pragma once + +# if defined(CMLL_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# ifndef OPENSSL_NO_CAMELLIA +# define SPARC_CMLL_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_CAMELLIA) +# include + +void cmll_t4_set_key(const unsigned char *key, int bits, CAMELLIA_KEY *ks); +void cmll_t4_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); +void cmll_t4_decrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); + +void cmll128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const CAMELLIA_KEY *key, + unsigned char *ivec); +void cmll256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const CAMELLIA_KEY *key, + unsigned char *ivec); +# endif /* OPENSSL_NO_CAMELLIA */ + +# endif /* CMLL_ASM && sparc */ + +#endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/cmperr.h b/deps/openssl/android/x86/usr/local/include/crypto/cmperr.h new file mode 100644 index 00000000..2bd16373 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/cmperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CMPERR_H +# define OSSL_CRYPTO_CMPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CMP + +int ossl_err_load_CMP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/cmserr.h b/deps/openssl/android/x86/usr/local/include/crypto/cmserr.h new file mode 100644 index 00000000..1de2f9c7 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/cmserr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CMSERR_H +# define OSSL_CRYPTO_CMSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CMS + +int ossl_err_load_CMS_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/comperr.h b/deps/openssl/android/x86/usr/local/include/crypto/comperr.h new file mode 100644 index 00000000..0fd9c6de --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/comperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_COMPERR_H +# define OSSL_CRYPTO_COMPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_COMP + +int ossl_err_load_COMP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/conferr.h b/deps/openssl/android/x86/usr/local/include/crypto/conferr.h new file mode 100644 index 00000000..cb367e4f --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/conferr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CONFERR_H +# define OSSL_CRYPTO_CONFERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_CONF_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/context.h b/deps/openssl/android/x86/usr/local/include/crypto/context.h new file mode 100644 index 00000000..cc06c71b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/context.h @@ -0,0 +1,41 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +void *ossl_provider_store_new(OSSL_LIB_CTX *); +void *ossl_property_string_data_new(OSSL_LIB_CTX *); +void *ossl_stored_namemap_new(OSSL_LIB_CTX *); +void *ossl_property_defns_new(OSSL_LIB_CTX *); +void *ossl_ctx_global_properties_new(OSSL_LIB_CTX *); +void *ossl_rand_ctx_new(OSSL_LIB_CTX *); +void *ossl_prov_conf_ctx_new(OSSL_LIB_CTX *); +void *ossl_bio_core_globals_new(OSSL_LIB_CTX *); +void *ossl_child_prov_ctx_new(OSSL_LIB_CTX *); +void *ossl_prov_drbg_nonce_ctx_new(OSSL_LIB_CTX *); +void *ossl_self_test_set_callback_new(OSSL_LIB_CTX *); +void *ossl_rand_crng_ctx_new(OSSL_LIB_CTX *); +void *ossl_thread_event_ctx_new(OSSL_LIB_CTX *); +void *ossl_fips_prov_ossl_ctx_new(OSSL_LIB_CTX *); + +void ossl_provider_store_free(void *); +void ossl_property_string_data_free(void *); +void ossl_stored_namemap_free(void *); +void ossl_property_defns_free(void *); +void ossl_ctx_global_properties_free(void *); +void ossl_rand_ctx_free(void *); +void ossl_prov_conf_ctx_free(void *); +void ossl_bio_core_globals_free(void *); +void ossl_child_prov_ctx_free(void *); +void ossl_prov_drbg_nonce_ctx_free(void *); +void ossl_self_test_set_callback_free(void *); +void ossl_rand_crng_ctx_free(void *); +void ossl_thread_event_ctx_free(void *); +void ossl_fips_prov_ossl_ctx_free(void *); +void ossl_release_default_drbg_ctx(void); diff --git a/deps/openssl/android/x86/usr/local/include/crypto/crmferr.h b/deps/openssl/android/x86/usr/local/include/crypto/crmferr.h new file mode 100644 index 00000000..f1a27e04 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/crmferr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CRMFERR_H +# define OSSL_CRYPTO_CRMFERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CRMF + +int ossl_err_load_CRMF_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/cryptlib.h b/deps/openssl/android/x86/usr/local/include/crypto/cryptlib.h index 38b5dac9..39a956bf 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/cryptlib.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/cryptlib.h @@ -1,35 +1,39 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include "internal/cryptlib.h" +#ifndef OSSL_CRYPTO_CRYPTLIB_H +# define OSSL_CRYPTO_CRYPTLIB_H +# pragma once + +# include +# include "internal/cryptlib.h" /* This file is not scanned by mkdef.pl, whereas cryptlib.h is */ -struct thread_local_inits_st { - int async; - int err_state; - int rand; -}; - -int ossl_init_thread_start(uint64_t opts); +int ossl_init_thread_start(const void *index, void *arg, + OSSL_thread_stop_handler_fn handfn); +int ossl_init_thread_deregister(void *index); +int ossl_init_thread(void); +void ossl_cleanup_thread(void); +void ossl_ctx_thread_stop(OSSL_LIB_CTX *ctx); /* * OPENSSL_INIT flags. The primary list of these is in crypto.h. Flags below * are those omitted from crypto.h because they are "reserved for internal * use". */ -# define OPENSSL_INIT_ZLIB 0x00010000L # define OPENSSL_INIT_BASE_ONLY 0x00040000L -/* OPENSSL_INIT_THREAD flags */ -# define OPENSSL_INIT_THREAD_ASYNC 0x01 -# define OPENSSL_INIT_THREAD_ERR_STATE 0x02 -# define OPENSSL_INIT_THREAD_RAND 0x04 - +void ossl_trace_cleanup(void); void ossl_malloc_setup_failures(void); + +int ossl_crypto_alloc_ex_data_intern(int class_index, void *obj, + CRYPTO_EX_DATA *ad, int idx); + +#endif /* OSSL_CRYPTO_CRYPTLIB_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/cryptoerr.h b/deps/openssl/android/x86/usr/local/include/crypto/cryptoerr.h new file mode 100644 index 00000000..1b6192e3 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/cryptoerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CRYPTOERR_H +# define OSSL_CRYPTO_CRYPTOERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_CRYPTO_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/cterr.h b/deps/openssl/android/x86/usr/local/include/crypto/cterr.h new file mode 100644 index 00000000..760bc796 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/cterr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CTERR_H +# define OSSL_CRYPTO_CTERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CT + +int ossl_err_load_CT_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/ctype.h b/deps/openssl/android/x86/usr/local/include/crypto/ctype.h index 81ef8f5c..22f69221 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/ctype.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/ctype.h @@ -1,7 +1,7 @@ /* - * Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -20,6 +20,9 @@ */ #ifndef OSSL_CRYPTO_CTYPE_H # define OSSL_CRYPTO_CTYPE_H +# pragma once + +# include # define CTYPE_MASK_lower 0x1 # define CTYPE_MASK_upper 0x2 @@ -54,10 +57,15 @@ int ossl_fromascii(int c); # define ossl_fromascii(c) (c) # endif int ossl_ctype_check(int c, unsigned int mask); + int ossl_tolower(int c); int ossl_toupper(int c); -int ascii_isdigit(const char inchar); +int ossl_isdigit(int c); +int ossl_islower(int c); +int ossl_isupper(int c); + +int ossl_ascii_isdigit(int c); # define ossl_isalnum(c) (ossl_ctype_check((c), CTYPE_MASK_alnum)) # define ossl_isalpha(c) (ossl_ctype_check((c), CTYPE_MASK_alpha)) @@ -68,15 +76,11 @@ int ascii_isdigit(const char inchar); # endif # define ossl_isblank(c) (ossl_ctype_check((c), CTYPE_MASK_blank)) # define ossl_iscntrl(c) (ossl_ctype_check((c), CTYPE_MASK_cntrl)) -# define ossl_isdigit(c) (ossl_ctype_check((c), CTYPE_MASK_digit)) # define ossl_isgraph(c) (ossl_ctype_check((c), CTYPE_MASK_graph)) -# define ossl_islower(c) (ossl_ctype_check((c), CTYPE_MASK_lower)) # define ossl_isprint(c) (ossl_ctype_check((c), CTYPE_MASK_print)) # define ossl_ispunct(c) (ossl_ctype_check((c), CTYPE_MASK_punct)) # define ossl_isspace(c) (ossl_ctype_check((c), CTYPE_MASK_space)) -# define ossl_isupper(c) (ossl_ctype_check((c), CTYPE_MASK_upper)) # define ossl_isxdigit(c) (ossl_ctype_check((c), CTYPE_MASK_xdigit)) # define ossl_isbase64(c) (ossl_ctype_check((c), CTYPE_MASK_base64)) # define ossl_isasn1print(c) (ossl_ctype_check((c), CTYPE_MASK_asn1print)) - #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/decoder.h b/deps/openssl/android/x86/usr/local/include/crypto/decoder.h new file mode 100644 index 00000000..6b5ee56a --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/decoder.h @@ -0,0 +1,40 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DECODER_H +# define OSSL_CRYPTO_DECODER_H +# pragma once + +# include + +/* + * These are specially made for the 'file:' provider-native loader, which + * uses this to install a DER to anything decoder, which doesn't do much + * except read a DER blob and pass it on as a provider object abstraction + * (provider-object(7)). + */ +void *ossl_decoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef, + OSSL_PROVIDER *prov); + +OSSL_DECODER_INSTANCE * +ossl_decoder_instance_new(OSSL_DECODER *decoder, void *decoderctx); +void ossl_decoder_instance_free(OSSL_DECODER_INSTANCE *decoder_inst); +int ossl_decoder_ctx_add_decoder_inst(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_INSTANCE *di); + +int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, + EVP_PKEY **pkey, const char *keytype, + OSSL_LIB_CTX *libctx, + const char *propquery); + +int ossl_decoder_get_number(const OSSL_DECODER *encoder); +int ossl_decoder_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_decoder_store_remove_all_provided(const OSSL_PROVIDER *prov); + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/decodererr.h b/deps/openssl/android/x86/usr/local/include/crypto/decodererr.h new file mode 100644 index 00000000..d7badc43 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/decodererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DECODERERR_H +# define OSSL_CRYPTO_DECODERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_DECODER_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/des_platform.h b/deps/openssl/android/x86/usr/local/include/crypto/des_platform.h new file mode 100644 index 00000000..07ea1ddd --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/des_platform.h @@ -0,0 +1,35 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_DES_PLATFORM_H +# define OSSL_DES_PLATFORM_H +# pragma once + +# if defined(DES_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# ifndef OPENSSL_NO_DES +# define SPARC_DES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_DES) +# include +void des_t4_key_expand(const void *key, DES_key_schedule *ks); +void des_t4_ede3_cbc_encrypt(const void *inp, void *out, size_t len, + const DES_key_schedule ks[3], unsigned char iv[8]); +void des_t4_ede3_cbc_decrypt(const void *inp, void *out, size_t len, + const DES_key_schedule ks[3], unsigned char iv[8]); +void des_t4_cbc_encrypt(const void *inp, void *out, size_t len, + const DES_key_schedule *ks, unsigned char iv[8]); +void des_t4_cbc_decrypt(const void *inp, void *out, size_t len, + const DES_key_schedule *ks, unsigned char iv[8]); +# endif /* OPENSSL_NO_DES */ + +# endif /* DES_ASM && sparc */ + +#endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/dh.h b/deps/openssl/android/x86/usr/local/include/crypto/dh.h new file mode 100644 index 00000000..51232d18 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/dh.h @@ -0,0 +1,62 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DH_H +# define OSSL_CRYPTO_DH_H +# pragma once + +# include +# include +# include +# include "internal/ffc.h" + +DH *ossl_dh_new_by_nid_ex(OSSL_LIB_CTX *libctx, int nid); +DH *ossl_dh_new_ex(OSSL_LIB_CTX *libctx); +void ossl_dh_set0_libctx(DH *d, OSSL_LIB_CTX *libctx); +int ossl_dh_generate_ffc_parameters(DH *dh, int type, int pbits, int qbits, + BN_GENCB *cb); +int ossl_dh_generate_public_key(BN_CTX *ctx, const DH *dh, + const BIGNUM *priv_key, BIGNUM *pub_key); +int ossl_dh_get_named_group_uid_from_size(int pbits); +const char *ossl_dh_gen_type_id2name(int id); +int ossl_dh_gen_type_name2id(const char *name, int type); +void ossl_dh_cache_named_group(DH *dh); +int ossl_dh_is_named_safe_prime_group(const DH *dh); + +FFC_PARAMS *ossl_dh_get0_params(DH *dh); +int ossl_dh_get0_nid(const DH *dh); +int ossl_dh_params_fromdata(DH *dh, const OSSL_PARAM params[]); +int ossl_dh_key_fromdata(DH *dh, const OSSL_PARAM params[], int include_private); +int ossl_dh_params_todata(DH *dh, OSSL_PARAM_BLD *bld, OSSL_PARAM params[]); +int ossl_dh_key_todata(DH *dh, OSSL_PARAM_BLD *bld, OSSL_PARAM params[], + int include_private); +DH *ossl_dh_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_dh_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); + +int ossl_dh_check_pub_key_partial(const DH *dh, const BIGNUM *pub_key, int *ret); +int ossl_dh_check_priv_key(const DH *dh, const BIGNUM *priv_key, int *ret); +int ossl_dh_check_pairwise(const DH *dh); + +const DH_METHOD *ossl_dh_get_method(const DH *dh); + +int ossl_dh_buf2key(DH *key, const unsigned char *buf, size_t len); +size_t ossl_dh_key2buf(const DH *dh, unsigned char **pbuf, size_t size, + int alloc); + +int ossl_dh_kdf_X9_42_asn1(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const char *cek_alg, + const unsigned char *ukm, size_t ukmlen, + const EVP_MD *md, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_dh_is_foreign(const DH *dh); +DH *ossl_dh_dup(const DH *dh, int selection); + +#endif /* OSSL_CRYPTO_DH_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/dherr.h b/deps/openssl/android/x86/usr/local/include/crypto/dherr.h new file mode 100644 index 00000000..bb24d131 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/dherr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DHERR_H +# define OSSL_CRYPTO_DHERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DH + +int ossl_err_load_DH_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/dsa.h b/deps/openssl/android/x86/usr/local/include/crypto/dsa.h new file mode 100644 index 00000000..260c30fa --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/dsa.h @@ -0,0 +1,49 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DSA_H +# define OSSL_CRYPTO_DSA_H +# pragma once + +# include +# include +# include "internal/ffc.h" + +#define DSA_PARAMGEN_TYPE_FIPS_186_4 0 /* Use FIPS186-4 standard */ +#define DSA_PARAMGEN_TYPE_FIPS_186_2 1 /* Use legacy FIPS186-2 standard */ +#define DSA_PARAMGEN_TYPE_FIPS_DEFAULT 2 + +DSA *ossl_dsa_new(OSSL_LIB_CTX *libctx); +void ossl_dsa_set0_libctx(DSA *d, OSSL_LIB_CTX *libctx); + +int ossl_dsa_generate_ffc_parameters(DSA *dsa, int type, int pbits, int qbits, + BN_GENCB *cb); + +int ossl_dsa_sign_int(int type, const unsigned char *dgst, int dlen, + unsigned char *sig, unsigned int *siglen, DSA *dsa); + +FFC_PARAMS *ossl_dsa_get0_params(DSA *dsa); +int ossl_dsa_ffc_params_fromdata(DSA *dsa, const OSSL_PARAM params[]); +int ossl_dsa_key_fromdata(DSA *dsa, const OSSL_PARAM params[], + int include_private); +DSA *ossl_dsa_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_dsa_generate_public_key(BN_CTX *ctx, const DSA *dsa, + const BIGNUM *priv_key, BIGNUM *pub_key); +int ossl_dsa_check_params(const DSA *dsa, int checktype, int *ret); +int ossl_dsa_check_pub_key(const DSA *dsa, const BIGNUM *pub_key, int *ret); +int ossl_dsa_check_pub_key_partial(const DSA *dsa, const BIGNUM *pub_key, + int *ret); +int ossl_dsa_check_priv_key(const DSA *dsa, const BIGNUM *priv_key, int *ret); +int ossl_dsa_check_pairwise(const DSA *dsa); +int ossl_dsa_is_foreign(const DSA *dsa); +DSA *ossl_dsa_dup(const DSA *dsa, int selection); + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/dsaerr.h b/deps/openssl/android/x86/usr/local/include/crypto/dsaerr.h new file mode 100644 index 00000000..fde8358f --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/dsaerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DSAERR_H +# define OSSL_CRYPTO_DSAERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DSA + +int ossl_err_load_DSA_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/dso_conf.h b/deps/openssl/android/x86/usr/local/include/crypto/dso_conf.h index 4b1167c3..795dfa0f 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/dso_conf.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/dso_conf.h @@ -1,9 +1,9 @@ /* WARNING: do not edit! */ /* Generated by Makefile from include/crypto/dso_conf.h.in */ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,6 +11,8 @@ #ifndef OSSL_CRYPTO_DSO_CONF_H # define OSSL_CRYPTO_DSO_CONF_H +# pragma once + # define DSO_DLFCN # define HAVE_DLFCN_H # define DSO_EXTENSION ".so" diff --git a/deps/openssl/android/x86/usr/local/include/crypto/dso_conf.h.in b/deps/openssl/android/x86/usr/local/include/crypto/dso_conf.h.in index 57a09b10..12de11ad 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/dso_conf.h.in +++ b/deps/openssl/android/x86/usr/local/include/crypto/dso_conf.h.in @@ -1,8 +1,8 @@ {- join("\n",map { "/* $_ */" } @autowarntext) -} /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,8 @@ #ifndef OSSL_CRYPTO_DSO_CONF_H # define OSSL_CRYPTO_DSO_CONF_H +# pragma once + {- # The DSO code currently always implements all functions so that no # applications will have to worry about that from a compilation point # of view. However, the "method"s may return zero unless that platform @@ -27,5 +29,5 @@ @macros = ( "DSO_DLFCN" ); } join("\n", map { "# define $_" } @macros); -} -# define DSO_EXTENSION "{- $target{dso_extension} -}" +# define DSO_EXTENSION "{- platform->dsoext() -}" #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/ec.h b/deps/openssl/android/x86/usr/local/include/crypto/ec.h index fe52ae70..62163b31 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/ec.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/ec.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,11 +11,20 @@ #ifndef OSSL_CRYPTO_EC_H # define OSSL_CRYPTO_EC_H +# pragma once + # include +# include + +int ossl_ec_curve_name2nid(const char *name); +const char *ossl_ec_curve_nid2nist_int(int nid); +int ossl_ec_curve_nist2nid_int(const char *name); +int evp_pkey_ctx_set_ec_param_enc_prov(EVP_PKEY_CTX *ctx, int param_enc); # ifndef OPENSSL_NO_EC - +# include # include +# include "crypto/types.h" /*- * Computes the multiplicative inverse of x in the range @@ -38,16 +47,54 @@ * reduction round on the input can be omitted by the underlying * implementations for better SCA properties on regular input values). */ -__owur int ec_group_do_inverse_ord(const EC_GROUP *group, BIGNUM *res, - const BIGNUM *x, BN_CTX *ctx); +__owur int ossl_ec_group_do_inverse_ord(const EC_GROUP *group, BIGNUM *res, + const BIGNUM *x, BN_CTX *ctx); /*- * ECDH Key Derivation Function as defined in ANSI X9.63 */ -int ecdh_KDF_X9_63(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); +int ossl_ecdh_kdf_X9_63(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const unsigned char *sinfo, size_t sinfolen, + const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); + +int ossl_ec_key_public_check(const EC_KEY *eckey, BN_CTX *ctx); +int ossl_ec_key_public_check_quick(const EC_KEY *eckey, BN_CTX *ctx); +int ossl_ec_key_private_check(const EC_KEY *eckey); +int ossl_ec_key_pairwise_check(const EC_KEY *eckey, BN_CTX *ctx); +OSSL_LIB_CTX *ossl_ec_key_get_libctx(const EC_KEY *eckey); +const char *ossl_ec_key_get0_propq(const EC_KEY *eckey); +void ossl_ec_key_set0_libctx(EC_KEY *key, OSSL_LIB_CTX *libctx); + +/* Backend support */ +int ossl_ec_group_todata(const EC_GROUP *group, OSSL_PARAM_BLD *tmpl, + OSSL_PARAM params[], OSSL_LIB_CTX *libctx, + const char *propq, + BN_CTX *bnctx, unsigned char **genbuf); +int ossl_ec_group_fromdata(EC_KEY *ec, const OSSL_PARAM params[]); +int ossl_ec_group_set_params(EC_GROUP *group, const OSSL_PARAM params[]); +int ossl_ec_key_fromdata(EC_KEY *ecx, const OSSL_PARAM params[], + int include_private); +int ossl_ec_key_otherparams_fromdata(EC_KEY *ec, const OSSL_PARAM params[]); +int ossl_ec_key_is_foreign(const EC_KEY *ec); +EC_KEY *ossl_ec_key_dup(const EC_KEY *key, int selection); +int ossl_x509_algor_is_sm2(const X509_ALGOR *palg); +EC_KEY *ossl_ec_key_param_from_x509_algor(const X509_ALGOR *palg, + OSSL_LIB_CTX *libctx, + const char *propq); +EC_KEY *ossl_ec_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_ec_set_ecdh_cofactor_mode(EC_KEY *ec, int mode); +int ossl_ec_encoding_name2id(const char *name); +int ossl_ec_encoding_param2id(const OSSL_PARAM *p, int *id); +int ossl_ec_pt_format_name2id(const char *name); +int ossl_ec_pt_format_param2id(const OSSL_PARAM *p, int *id); +char *ossl_ec_pt_format_id2name(int id); + +char *ossl_ec_check_group_type_id2name(int flags); +int ossl_ec_set_check_group_type_from_name(EC_KEY *ec, const char *name); # endif /* OPENSSL_NO_EC */ #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/ecerr.h b/deps/openssl/android/x86/usr/local/include/crypto/ecerr.h new file mode 100644 index 00000000..782526bf --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/ecerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ECERR_H +# define OSSL_CRYPTO_ECERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_EC + +int ossl_err_load_EC_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/ecx.h b/deps/openssl/android/x86/usr/local/include/crypto/ecx.h new file mode 100644 index 00000000..48b95fa5 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/ecx.h @@ -0,0 +1,150 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* Internal EC functions for other submodules: not for application use */ + +#ifndef OSSL_CRYPTO_ECX_H +# define OSSL_CRYPTO_ECX_H +# pragma once + +# include + +# ifndef OPENSSL_NO_EC + +# include +# include +# include +# include "internal/refcount.h" +# include "crypto/types.h" + +# define X25519_KEYLEN 32 +# define X448_KEYLEN 56 +# define ED25519_KEYLEN 32 +# define ED448_KEYLEN 57 + +# define MAX_KEYLEN ED448_KEYLEN + +# define X25519_BITS 253 +# define X25519_SECURITY_BITS 128 + +# define X448_BITS 448 +# define X448_SECURITY_BITS 224 + +# define ED25519_BITS 256 +/* RFC8032 Section 8.5 */ +# define ED25519_SECURITY_BITS 128 +# define ED25519_SIGSIZE 64 + +# define ED448_BITS 456 +/* RFC8032 Section 8.5 */ +# define ED448_SECURITY_BITS 224 +# define ED448_SIGSIZE 114 + + +typedef enum { + ECX_KEY_TYPE_X25519, + ECX_KEY_TYPE_X448, + ECX_KEY_TYPE_ED25519, + ECX_KEY_TYPE_ED448 +} ECX_KEY_TYPE; + +#define KEYTYPE2NID(type) \ + ((type) == ECX_KEY_TYPE_X25519 \ + ? EVP_PKEY_X25519 \ + : ((type) == ECX_KEY_TYPE_X448 \ + ? EVP_PKEY_X448 \ + : ((type) == ECX_KEY_TYPE_ED25519 \ + ? EVP_PKEY_ED25519 \ + : EVP_PKEY_ED448))) + +struct ecx_key_st { + OSSL_LIB_CTX *libctx; + char *propq; + unsigned int haspubkey:1; + unsigned char pubkey[MAX_KEYLEN]; + unsigned char *privkey; + size_t keylen; + ECX_KEY_TYPE type; + CRYPTO_REF_COUNT references; + CRYPTO_RWLOCK *lock; +}; + +size_t ossl_ecx_key_length(ECX_KEY_TYPE type); +ECX_KEY *ossl_ecx_key_new(OSSL_LIB_CTX *libctx, ECX_KEY_TYPE type, + int haspubkey, const char *propq); +void ossl_ecx_key_set0_libctx(ECX_KEY *key, OSSL_LIB_CTX *libctx); +unsigned char *ossl_ecx_key_allocate_privkey(ECX_KEY *key); +void ossl_ecx_key_free(ECX_KEY *key); +int ossl_ecx_key_up_ref(ECX_KEY *key); +ECX_KEY *ossl_ecx_key_dup(const ECX_KEY *key, int selection); + +int ossl_x25519(uint8_t out_shared_key[32], const uint8_t private_key[32], + const uint8_t peer_public_value[32]); +void ossl_x25519_public_from_private(uint8_t out_public_value[32], + const uint8_t private_key[32]); + +int +ossl_ed25519_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[32], + const uint8_t private_key[32], + const char *propq); +int +ossl_ed25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, + const uint8_t public_key[32], const uint8_t private_key[32], + OSSL_LIB_CTX *libctx, const char *propq); +int +ossl_ed25519_verify(const uint8_t *message, size_t message_len, + const uint8_t signature[64], const uint8_t public_key[32], + OSSL_LIB_CTX *libctx, const char *propq); + +int +ossl_ed448_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[57], + const uint8_t private_key[57], const char *propq); +int +ossl_ed448_sign(OSSL_LIB_CTX *ctx, uint8_t *out_sig, const uint8_t *message, + size_t message_len, const uint8_t public_key[57], + const uint8_t private_key[57], const uint8_t *context, + size_t context_len, const char *propq); + +int +ossl_ed448_verify(OSSL_LIB_CTX *ctx, const uint8_t *message, size_t message_len, + const uint8_t signature[114], const uint8_t public_key[57], + const uint8_t *context, size_t context_len, const char *propq); + +int +ossl_x448(uint8_t out_shared_key[56], const uint8_t private_key[56], + const uint8_t peer_public_value[56]); +void +ossl_x448_public_from_private(uint8_t out_public_value[56], + const uint8_t private_key[56]); + + +/* Backend support */ +typedef enum { + KEY_OP_PUBLIC, + KEY_OP_PRIVATE, + KEY_OP_KEYGEN +} ecx_key_op_t; + +ECX_KEY *ossl_ecx_key_op(const X509_ALGOR *palg, + const unsigned char *p, int plen, + int pkey_id, ecx_key_op_t op, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_ecx_public_from_private(ECX_KEY *key); +int ossl_ecx_key_fromdata(ECX_KEY *ecx, const OSSL_PARAM params[], + int include_private); +ECX_KEY *ossl_ecx_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +ECX_KEY *ossl_evp_pkey_get1_X25519(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_X448(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_ED25519(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_ED448(EVP_PKEY *pkey); +# endif /* OPENSSL_NO_EC */ +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/encoder.h b/deps/openssl/android/x86/usr/local/include/crypto/encoder.h new file mode 100644 index 00000000..5c53bbea --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/encoder.h @@ -0,0 +1,20 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENCODER_H +# define OSSL_CRYPTO_ENCODER_H +# pragma once + +# include + +int ossl_encoder_get_number(const OSSL_ENCODER *encoder); +int ossl_encoder_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_encoder_store_remove_all_provided(const OSSL_PROVIDER *prov); + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/encodererr.h b/deps/openssl/android/x86/usr/local/include/crypto/encodererr.h new file mode 100644 index 00000000..56c45823 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/encodererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENCODERERR_H +# define OSSL_CRYPTO_ENCODERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_ENCODER_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/engine.h b/deps/openssl/android/x86/usr/local/include/crypto/engine.h index f80ae3ec..fac6ed09 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/engine.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/engine.h @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86/usr/local/include/crypto/engineerr.h b/deps/openssl/android/x86/usr/local/include/crypto/engineerr.h new file mode 100644 index 00000000..737c841d --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/engineerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENGINEERR_H +# define OSSL_CRYPTO_ENGINEERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_ENGINE + +int ossl_err_load_ENGINE_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/err.h b/deps/openssl/android/x86/usr/local/include/crypto/err.h index 8ab0e5ba..15ec6fd0 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/err.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/err.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,10 +9,11 @@ #ifndef OSSL_CRYPTO_ERR_H # define OSSL_CRYPTO_ERR_H +# pragma once -int err_load_crypto_strings_int(void); +int ossl_err_load_ERR_strings(void); +int ossl_err_load_crypto_strings(void); void err_cleanup(void); -void err_delete_thread_state(void); int err_shelve_state(void **); void err_unshelve_state(void *); diff --git a/deps/openssl/android/x86/usr/local/include/crypto/ess.h b/deps/openssl/android/x86/usr/local/include/crypto/ess.h new file mode 100644 index 00000000..7acde5f8 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/ess.h @@ -0,0 +1,76 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ESS_H +# define OSSL_CRYPTO_ESS_H +# pragma once + +/*- + * IssuerSerial ::= SEQUENCE { + * issuer GeneralNames, + * serialNumber CertificateSerialNumber + * } + */ + +struct ESS_issuer_serial { + STACK_OF(GENERAL_NAME) *issuer; + ASN1_INTEGER *serial; +}; + +/*- + * ESSCertID ::= SEQUENCE { + * certHash Hash, + * issuerSerial IssuerSerial OPTIONAL + * } + */ + +struct ESS_cert_id { + ASN1_OCTET_STRING *hash; /* Always SHA-1 digest. */ + ESS_ISSUER_SERIAL *issuer_serial; +}; + +/*- + * SigningCertificate ::= SEQUENCE { + * certs SEQUENCE OF ESSCertID, + * policies SEQUENCE OF PolicyInformation OPTIONAL + * } + */ + +struct ESS_signing_cert { + STACK_OF(ESS_CERT_ID) *cert_ids; + STACK_OF(POLICYINFO) *policy_info; +}; + +/*- + * ESSCertIDv2 ::= SEQUENCE { + * hashAlgorithm AlgorithmIdentifier DEFAULT id-sha256, + * certHash Hash, + * issuerSerial IssuerSerial OPTIONAL + * } + */ + +struct ESS_cert_id_v2_st { + X509_ALGOR *hash_alg; /* Default: SHA-256 */ + ASN1_OCTET_STRING *hash; + ESS_ISSUER_SERIAL *issuer_serial; +}; + +/*- + * SigningCertificateV2 ::= SEQUENCE { + * certs SEQUENCE OF ESSCertIDv2, + * policies SEQUENCE OF PolicyInformation OPTIONAL + * } + */ + +struct ESS_signing_cert_v2_st { + STACK_OF(ESS_CERT_ID_V2) *cert_ids; + STACK_OF(POLICYINFO) *policy_info; +}; + +#endif /* OSSL_CRYPTO_ESS_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/esserr.h b/deps/openssl/android/x86/usr/local/include/crypto/esserr.h new file mode 100644 index 00000000..8df2df11 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/esserr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ESSERR_H +# define OSSL_CRYPTO_ESSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ESS_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/evp.h b/deps/openssl/android/x86/usr/local/include/crypto/evp.h index d86aed36..dbbdcccb 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/evp.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/evp.h @@ -1,14 +1,20 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include -#include "internal/refcount.h" +#ifndef OSSL_CRYPTO_EVP_H +# define OSSL_CRYPTO_EVP_H +# pragma once + +# include +# include +# include "internal/refcount.h" +# include "crypto/ecx.h" /* * Don't free up md_ctx->pctx in EVP_MD_CTX_reset, use the reserved flag @@ -16,7 +22,93 @@ */ #define EVP_MD_CTX_FLAG_KEEP_PKEY_CTX 0x0400 +#define evp_pkey_ctx_is_legacy(ctx) \ + ((ctx)->keymgmt == NULL) +#define evp_pkey_ctx_is_provided(ctx) \ + (!evp_pkey_ctx_is_legacy(ctx)) + struct evp_pkey_ctx_st { + /* Actual operation */ + int operation; + + /* + * Library context, property query, keytype and keymgmt associated with + * this context + */ + OSSL_LIB_CTX *libctx; + char *propquery; + const char *keytype; + /* If |pkey| below is set, this field is always a reference to its keymgmt */ + EVP_KEYMGMT *keymgmt; + + union { + struct { + void *genctx; + } keymgmt; + + struct { + EVP_KEYEXCH *exchange; + /* + * Opaque ctx returned from a providers exchange algorithm + * implementation OSSL_FUNC_keyexch_newctx() + */ + void *algctx; + } kex; + + struct { + EVP_SIGNATURE *signature; + /* + * Opaque ctx returned from a providers signature algorithm + * implementation OSSL_FUNC_signature_newctx() + */ + void *algctx; + } sig; + + struct { + EVP_ASYM_CIPHER *cipher; + /* + * Opaque ctx returned from a providers asymmetric cipher algorithm + * implementation OSSL_FUNC_asym_cipher_newctx() + */ + void *algctx; + } ciph; + struct { + EVP_KEM *kem; + /* + * Opaque ctx returned from a providers KEM algorithm + * implementation OSSL_FUNC_kem_newctx() + */ + void *algctx; + } encap; + } op; + + /* + * Cached parameters. Inits of operations that depend on these should + * call evp_pkey_ctx_use_delayed_data() when the operation has been set + * up properly. + */ + struct { + /* Distinguishing Identifier, ISO/IEC 15946-3, FIPS 196 */ + char *dist_id_name; /* The name used with EVP_PKEY_CTX_ctrl_str() */ + void *dist_id; /* The distinguishing ID itself */ + size_t dist_id_len; /* The length of the distinguishing ID */ + + /* Indicators of what has been set. Keep them together! */ + unsigned int dist_id_set : 1; + } cached_parameters; + + /* Application specific data, usually used by the callback */ + void *app_data; + /* Keygen callback */ + EVP_PKEY_gen_cb *pkey_gencb; + /* implementation specific keygen data */ + int *keygen_info; + int keygen_info_count; + + /* Legacy fields below */ + + /* EVP_PKEY identity */ + int legacy_keytype; /* Method associated with this operation */ const EVP_PKEY_METHOD *pmeth; /* Engine that implements this method or NULL if builtin */ @@ -25,17 +117,17 @@ struct evp_pkey_ctx_st { EVP_PKEY *pkey; /* Peer key for key agreement, may be NULL */ EVP_PKEY *peerkey; - /* Actual operation */ - int operation; /* Algorithm specific data */ void *data; - /* Application specific data */ - void *app_data; - /* Keygen callback */ - EVP_PKEY_gen_cb *pkey_gencb; - /* implementation specific keygen data */ - int *keygen_info; - int keygen_info_count; + /* Indicator if digest_custom needs to be called */ + unsigned int flag_call_digest_custom:1; + /* + * Used to support taking custody of memory in the case of a provider being + * used with the deprecated EVP_PKEY_CTX_set_rsa_keygen_pubexp() API. This + * member should NOT be used for any other purpose and should be removed + * when said deprecated API is excised completely. + */ + BIGNUM *rsa_pubexp; } /* EVP_PKEY_CTX */ ; #define EVP_PKEY_FLAG_DYNAMIC 1 @@ -44,7 +136,7 @@ struct evp_pkey_method_st { int pkey_id; int flags; int (*init) (EVP_PKEY_CTX *ctx); - int (*copy) (EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src); + int (*copy) (EVP_PKEY_CTX *dst, const EVP_PKEY_CTX *src); void (*cleanup) (EVP_PKEY_CTX *ctx); int (*paramgen_init) (EVP_PKEY_CTX *ctx); int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); @@ -93,30 +185,74 @@ DEFINE_STACK_OF_CONST(EVP_PKEY_METHOD) void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx); -extern const EVP_PKEY_METHOD cmac_pkey_meth; -extern const EVP_PKEY_METHOD dh_pkey_meth; -extern const EVP_PKEY_METHOD dhx_pkey_meth; -extern const EVP_PKEY_METHOD dsa_pkey_meth; -extern const EVP_PKEY_METHOD ec_pkey_meth; -extern const EVP_PKEY_METHOD sm2_pkey_meth; -extern const EVP_PKEY_METHOD ecx25519_pkey_meth; -extern const EVP_PKEY_METHOD ecx448_pkey_meth; -extern const EVP_PKEY_METHOD ed25519_pkey_meth; -extern const EVP_PKEY_METHOD ed448_pkey_meth; -extern const EVP_PKEY_METHOD hmac_pkey_meth; -extern const EVP_PKEY_METHOD rsa_pkey_meth; -extern const EVP_PKEY_METHOD rsa_pss_pkey_meth; -extern const EVP_PKEY_METHOD scrypt_pkey_meth; -extern const EVP_PKEY_METHOD tls1_prf_pkey_meth; -extern const EVP_PKEY_METHOD hkdf_pkey_meth; -extern const EVP_PKEY_METHOD poly1305_pkey_meth; -extern const EVP_PKEY_METHOD siphash_pkey_meth; +const EVP_PKEY_METHOD *ossl_dh_pkey_method(void); +const EVP_PKEY_METHOD *ossl_dhx_pkey_method(void); +const EVP_PKEY_METHOD *ossl_dsa_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ec_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ecx25519_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ecx448_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ed25519_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ed448_pkey_method(void); +const EVP_PKEY_METHOD *ossl_rsa_pkey_method(void); +const EVP_PKEY_METHOD *ossl_rsa_pss_pkey_method(void); + +struct evp_mac_st { + OSSL_PROVIDER *prov; + int name_id; + char *type_name; + const char *description; + + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + + OSSL_FUNC_mac_newctx_fn *newctx; + OSSL_FUNC_mac_dupctx_fn *dupctx; + OSSL_FUNC_mac_freectx_fn *freectx; + OSSL_FUNC_mac_init_fn *init; + OSSL_FUNC_mac_update_fn *update; + OSSL_FUNC_mac_final_fn *final; + OSSL_FUNC_mac_gettable_params_fn *gettable_params; + OSSL_FUNC_mac_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_mac_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_mac_get_params_fn *get_params; + OSSL_FUNC_mac_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_mac_set_ctx_params_fn *set_ctx_params; +}; + +struct evp_kdf_st { + OSSL_PROVIDER *prov; + int name_id; + char *type_name; + const char *description; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + + OSSL_FUNC_kdf_newctx_fn *newctx; + OSSL_FUNC_kdf_dupctx_fn *dupctx; + OSSL_FUNC_kdf_freectx_fn *freectx; + OSSL_FUNC_kdf_reset_fn *reset; + OSSL_FUNC_kdf_derive_fn *derive; + OSSL_FUNC_kdf_gettable_params_fn *gettable_params; + OSSL_FUNC_kdf_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_kdf_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_kdf_get_params_fn *get_params; + OSSL_FUNC_kdf_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_kdf_set_ctx_params_fn *set_ctx_params; +}; + +#define EVP_ORIG_DYNAMIC 0 +#define EVP_ORIG_GLOBAL 1 +#define EVP_ORIG_METH 2 struct evp_md_st { + /* nid */ int type; + + /* Legacy structure members */ int pkey_type; int md_size; unsigned long flags; + int origin; int (*init) (EVP_MD_CTX *ctx); int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); int (*final) (EVP_MD_CTX *ctx, unsigned char *md); @@ -126,16 +262,44 @@ struct evp_md_st { int ctx_size; /* how big does the ctx->md_data need to be */ /* control function */ int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, void *p2); + + /* New structure members */ + /* Above comment to be removed when legacy has gone */ + int name_id; + char *type_name; + const char *description; + OSSL_PROVIDER *prov; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + OSSL_FUNC_digest_newctx_fn *newctx; + OSSL_FUNC_digest_init_fn *dinit; + OSSL_FUNC_digest_update_fn *dupdate; + OSSL_FUNC_digest_final_fn *dfinal; + OSSL_FUNC_digest_digest_fn *digest; + OSSL_FUNC_digest_freectx_fn *freectx; + OSSL_FUNC_digest_dupctx_fn *dupctx; + OSSL_FUNC_digest_get_params_fn *get_params; + OSSL_FUNC_digest_set_ctx_params_fn *set_ctx_params; + OSSL_FUNC_digest_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_digest_gettable_params_fn *gettable_params; + OSSL_FUNC_digest_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_digest_gettable_ctx_params_fn *gettable_ctx_params; + } /* EVP_MD */ ; struct evp_cipher_st { int nid; + int block_size; /* Default value for variable length ciphers */ int key_len; int iv_len; + + /* Legacy structure members */ /* Various flags */ unsigned long flags; + /* How the EVP_CIPHER was created. */ + int origin; /* init key */ int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); @@ -154,6 +318,29 @@ struct evp_cipher_st { int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr); /* Application data */ void *app_data; + + /* New structure members */ + /* Above comment to be removed when legacy has gone */ + int name_id; + char *type_name; + const char *description; + OSSL_PROVIDER *prov; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + OSSL_FUNC_cipher_newctx_fn *newctx; + OSSL_FUNC_cipher_encrypt_init_fn *einit; + OSSL_FUNC_cipher_decrypt_init_fn *dinit; + OSSL_FUNC_cipher_update_fn *cupdate; + OSSL_FUNC_cipher_final_fn *cfinal; + OSSL_FUNC_cipher_cipher_fn *ccipher; + OSSL_FUNC_cipher_freectx_fn *freectx; + OSSL_FUNC_cipher_dupctx_fn *dupctx; + OSSL_FUNC_cipher_get_params_fn *get_params; + OSSL_FUNC_cipher_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_cipher_set_ctx_params_fn *set_ctx_params; + OSSL_FUNC_cipher_gettable_params_fn *gettable_params; + OSSL_FUNC_cipher_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_cipher_settable_ctx_params_fn *settable_ctx_params; } /* EVP_CIPHER */ ; /* Macros to code block cipher wrappers */ @@ -165,7 +352,7 @@ struct evp_cipher_st { #define BLOCK_CIPHER_ecb_loop() \ size_t i, bl; \ - bl = EVP_CIPHER_CTX_cipher(ctx)->block_size; \ + bl = EVP_CIPHER_CTX_get0_cipher(ctx)->block_size; \ if (inl < bl) return 1;\ inl -= bl; \ for (i=0; i <= inl; i+=bl) @@ -174,26 +361,26 @@ struct evp_cipher_st { static int cname##_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ {\ BLOCK_CIPHER_ecb_loop() \ - cprefix##_ecb_encrypt(in + i, out + i, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_encrypting(ctx)); \ + cprefix##_ecb_encrypt(in + i, out + i, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_is_encrypting(ctx)); \ return 1;\ } -#define EVP_MAXCHUNK ((size_t)1<<(sizeof(long)*8-2)) +#define EVP_MAXCHUNK ((size_t)1 << 30) #define BLOCK_CIPHER_func_ofb(cname, cprefix, cbits, kstruct, ksched) \ static int cname##_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ {\ while(inl>=EVP_MAXCHUNK) {\ - int num = EVP_CIPHER_CTX_num(ctx);\ - cprefix##_ofb##cbits##_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), &num); \ + int num = EVP_CIPHER_CTX_get_num(ctx);\ + cprefix##_ofb##cbits##_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, &num); \ EVP_CIPHER_CTX_set_num(ctx, num);\ inl-=EVP_MAXCHUNK;\ in +=EVP_MAXCHUNK;\ out+=EVP_MAXCHUNK;\ }\ if (inl) {\ - int num = EVP_CIPHER_CTX_num(ctx);\ - cprefix##_ofb##cbits##_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), &num); \ + int num = EVP_CIPHER_CTX_get_num(ctx);\ + cprefix##_ofb##cbits##_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, &num); \ EVP_CIPHER_CTX_set_num(ctx, num);\ }\ return 1;\ @@ -204,13 +391,13 @@ static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const uns {\ while(inl>=EVP_MAXCHUNK) \ {\ - cprefix##_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_encrypting(ctx));\ + cprefix##_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ inl-=EVP_MAXCHUNK;\ in +=EVP_MAXCHUNK;\ out+=EVP_MAXCHUNK;\ }\ if (inl)\ - cprefix##_cbc_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_encrypting(ctx));\ + cprefix##_cbc_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ return 1;\ } @@ -222,13 +409,13 @@ static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, if (inl < chunk) chunk = inl;\ while (inl && inl >= chunk)\ {\ - int num = EVP_CIPHER_CTX_num(ctx);\ + int num = EVP_CIPHER_CTX_get_num(ctx);\ cprefix##_cfb##cbits##_encrypt(in, out, (long) \ ((cbits == 1) \ && !EVP_CIPHER_CTX_test_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS) \ ? chunk*8 : chunk), \ - &EVP_C_DATA(kstruct, ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx),\ - &num, EVP_CIPHER_CTX_encrypting(ctx));\ + &EVP_C_DATA(kstruct, ctx)->ksched, ctx->iv,\ + &num, EVP_CIPHER_CTX_is_encrypting(ctx));\ EVP_CIPHER_CTX_set_num(ctx, num);\ inl -= chunk;\ in += chunk;\ @@ -250,6 +437,7 @@ static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, static const EVP_CIPHER cname##_##mode = { \ nid##_##nmode, block_size, key_len, iv_len, \ flags | EVP_CIPH_##MODE##_MODE, \ + EVP_ORIG_GLOBAL, \ init_key, \ cname##_##mode##_cipher, \ cleanup, \ @@ -305,6 +493,7 @@ BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, flags, \ static const EVP_CIPHER cname##_cbc = {\ nid##_cbc, block_size, key_len, iv_len, \ flags | EVP_CIPH_CBC_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_cbc_cipher,\ cleanup,\ @@ -318,6 +507,7 @@ const EVP_CIPHER *EVP_##cname##_cbc(void) { return &cname##_cbc; }\ static const EVP_CIPHER cname##_cfb = {\ nid##_cfb64, 1, key_len, iv_len, \ flags | EVP_CIPH_CFB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_cfb_cipher,\ cleanup,\ @@ -331,6 +521,7 @@ const EVP_CIPHER *EVP_##cname##_cfb(void) { return &cname##_cfb; }\ static const EVP_CIPHER cname##_ofb = {\ nid##_ofb64, 1, key_len, iv_len, \ flags | EVP_CIPH_OFB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_ofb_cipher,\ cleanup,\ @@ -344,6 +535,7 @@ const EVP_CIPHER *EVP_##cname##_ofb(void) { return &cname##_ofb; }\ static const EVP_CIPHER cname##_ecb = {\ nid##_ecb, block_size, key_len, iv_len, \ flags | EVP_CIPH_ECB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_ecb_cipher,\ cleanup,\ @@ -372,66 +564,293 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; } (fl)|EVP_CIPH_FLAG_DEFAULT_ASN1, \ cipher##_init_key, NULL, NULL, NULL, NULL) - -# ifndef OPENSSL_NO_EC - -#define X25519_KEYLEN 32 -#define X448_KEYLEN 56 -#define ED448_KEYLEN 57 - -#define MAX_KEYLEN ED448_KEYLEN - typedef struct { - unsigned char pubkey[MAX_KEYLEN]; - unsigned char *privkey; -} ECX_KEY; + unsigned char iv[EVP_MAX_IV_LENGTH]; + unsigned int iv_len; + unsigned int tag_len; +} evp_cipher_aead_asn1_params; -#endif +int evp_cipher_param_to_asn1_ex(EVP_CIPHER_CTX *c, ASN1_TYPE *type, + evp_cipher_aead_asn1_params *params); + +int evp_cipher_asn1_to_param_ex(EVP_CIPHER_CTX *c, ASN1_TYPE *type, + evp_cipher_aead_asn1_params *params); /* - * Type needs to be a bit field Sub-type needs to be for variations on the - * method, as in, can it do arbitrary encryption.... + * To support transparent execution of operation in backends other + * than the "origin" key, we support transparent export/import to + * those providers, and maintain a cache of the imported keydata, + * so we don't need to redo the export/import every time we perform + * the same operation in that same provider. + * This requires that the "origin" backend (whether it's a legacy or a + * provider "origin") implements exports, and that the target provider + * has an EVP_KEYMGMT that implements import. */ +typedef struct { + EVP_KEYMGMT *keymgmt; + void *keydata; + int selection; +} OP_CACHE_ELEM; + +DEFINE_STACK_OF(OP_CACHE_ELEM) + +/* + * An EVP_PKEY can have the following states: + * + * untyped & empty: + * + * type == EVP_PKEY_NONE && keymgmt == NULL + * + * typed & empty: + * + * (type != EVP_PKEY_NONE && pkey.ptr == NULL) ## legacy (libcrypto only) + * || (keymgmt != NULL && keydata == NULL) ## provider side + * + * fully assigned: + * + * (type != EVP_PKEY_NONE && pkey.ptr != NULL) ## legacy (libcrypto only) + * || (keymgmt != NULL && keydata != NULL) ## provider side + * + * The easiest way to detect a legacy key is: + * + * keymgmt == NULL && type != EVP_PKEY_NONE + * + * The easiest way to detect a provider side key is: + * + * keymgmt != NULL + */ +#define evp_pkey_is_blank(pk) \ + ((pk)->type == EVP_PKEY_NONE && (pk)->keymgmt == NULL) +#define evp_pkey_is_typed(pk) \ + ((pk)->type != EVP_PKEY_NONE || (pk)->keymgmt != NULL) +#ifndef FIPS_MODULE +# define evp_pkey_is_assigned(pk) \ + ((pk)->pkey.ptr != NULL || (pk)->keydata != NULL) +#else +# define evp_pkey_is_assigned(pk) \ + ((pk)->keydata != NULL) +#endif +#define evp_pkey_is_legacy(pk) \ + ((pk)->type != EVP_PKEY_NONE && (pk)->keymgmt == NULL) +#define evp_pkey_is_provided(pk) \ + ((pk)->keymgmt != NULL) + +union legacy_pkey_st { + void *ptr; + struct rsa_st *rsa; /* RSA */ +# ifndef OPENSSL_NO_DSA + struct dsa_st *dsa; /* DSA */ +# endif +# ifndef OPENSSL_NO_DH + struct dh_st *dh; /* DH */ +# endif +# ifndef OPENSSL_NO_EC + struct ec_key_st *ec; /* ECC */ + ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ +# endif +}; + struct evp_pkey_st { + /* == Legacy attributes == */ int type; int save_type; - CRYPTO_REF_COUNT references; + +# ifndef FIPS_MODULE + /* + * Legacy key "origin" is composed of a pointer to an EVP_PKEY_ASN1_METHOD, + * a pointer to a low level key and possibly a pointer to an engine. + */ const EVP_PKEY_ASN1_METHOD *ameth; ENGINE *engine; ENGINE *pmeth_engine; /* If not NULL public key ENGINE to use */ - union { - void *ptr; -# ifndef OPENSSL_NO_RSA - struct rsa_st *rsa; /* RSA */ + + /* Union to store the reference to an origin legacy key */ + union legacy_pkey_st pkey; + + /* Union to store the reference to a non-origin legacy key */ + union legacy_pkey_st legacy_cache_pkey; # endif -# ifndef OPENSSL_NO_DSA - struct dsa_st *dsa; /* DSA */ -# endif -# ifndef OPENSSL_NO_DH - struct dh_st *dh; /* DH */ -# endif -# ifndef OPENSSL_NO_EC - struct ec_key_st *ec; /* ECC */ - ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ -# endif - } pkey; - int save_parameters; - STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ + + /* == Common attributes == */ + CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; +#ifndef FIPS_MODULE + STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ + int save_parameters; + unsigned int foreign:1; /* the low-level key is using an engine or an app-method */ + CRYPTO_EX_DATA ex_data; +#endif + + /* == Provider attributes == */ + + /* + * Provider keydata "origin" is composed of a pointer to an EVP_KEYMGMT + * and a pointer to the provider side key data. This is never used at + * the same time as the legacy key data above. + */ + EVP_KEYMGMT *keymgmt; + void *keydata; + /* + * If any libcrypto code does anything that may modify the keydata + * contents, this dirty counter must be incremented. + */ + size_t dirty_cnt; + + /* + * To support transparent execution of operation in backends other + * than the "origin" key, we support transparent export/import to + * those providers, and maintain a cache of the imported keydata, + * so we don't need to redo the export/import every time we perform + * the same operation in that same provider. + */ + STACK_OF(OP_CACHE_ELEM) *operation_cache; + + /* + * We keep a copy of that "origin"'s dirty count, so we know if the + * operation cache needs flushing. + */ + size_t dirty_cnt_copy; + + /* Cache of key object information */ + struct { + int bits; + int security_bits; + int size; + } cache; } /* EVP_PKEY */ ; +#define EVP_PKEY_CTX_IS_SIGNATURE_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_SIGN \ + || (ctx)->operation == EVP_PKEY_OP_SIGNCTX \ + || (ctx)->operation == EVP_PKEY_OP_VERIFY \ + || (ctx)->operation == EVP_PKEY_OP_VERIFYCTX \ + || (ctx)->operation == EVP_PKEY_OP_VERIFYRECOVER) + +#define EVP_PKEY_CTX_IS_DERIVE_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_DERIVE) + +#define EVP_PKEY_CTX_IS_ASYM_CIPHER_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_ENCRYPT \ + || (ctx)->operation == EVP_PKEY_OP_DECRYPT) + +#define EVP_PKEY_CTX_IS_GEN_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_PARAMGEN \ + || (ctx)->operation == EVP_PKEY_OP_KEYGEN) + +#define EVP_PKEY_CTX_IS_FROMDATA_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_FROMDATA) + +#define EVP_PKEY_CTX_IS_KEM_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_ENCAPSULATE \ + || (ctx)->operation == EVP_PKEY_OP_DECAPSULATE) void openssl_add_all_ciphers_int(void); void openssl_add_all_digests_int(void); void evp_cleanup_int(void); void evp_app_cleanup_int(void); +void *evp_pkey_export_to_provider(EVP_PKEY *pk, OSSL_LIB_CTX *libctx, + EVP_KEYMGMT **keymgmt, + const char *propquery); +#ifndef FIPS_MODULE +int evp_pkey_copy_downgraded(EVP_PKEY **dest, const EVP_PKEY *src); +void *evp_pkey_get_legacy(EVP_PKEY *pk); +void evp_pkey_free_legacy(EVP_PKEY *x); +EVP_PKEY *evp_pkcs82pkey_legacy(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); +#endif + +/* + * KEYMGMT utility functions + */ + +/* + * Key import structure and helper function, to be used as an export callback + */ +struct evp_keymgmt_util_try_import_data_st { + EVP_KEYMGMT *keymgmt; + void *keydata; + + int selection; +}; +int evp_keymgmt_util_try_import(const OSSL_PARAM params[], void *arg); +int evp_keymgmt_util_assign_pkey(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt, + void *keydata); +EVP_PKEY *evp_keymgmt_util_make_pkey(EVP_KEYMGMT *keymgmt, void *keydata); + +int evp_keymgmt_util_export(const EVP_PKEY *pk, int selection, + OSSL_CALLBACK *export_cb, void *export_cbarg); +void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, + int selection); +OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk, + EVP_KEYMGMT *keymgmt, + int selection); +int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk, int locking); +int evp_keymgmt_util_cache_keydata(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, + void *keydata, int selection); +void evp_keymgmt_util_cache_keyinfo(EVP_PKEY *pk); +void *evp_keymgmt_util_fromdata(EVP_PKEY *target, EVP_KEYMGMT *keymgmt, + int selection, const OSSL_PARAM params[]); +int evp_keymgmt_util_has(EVP_PKEY *pk, int selection); +int evp_keymgmt_util_match(EVP_PKEY *pk1, EVP_PKEY *pk2, int selection); +int evp_keymgmt_util_copy(EVP_PKEY *to, EVP_PKEY *from, int selection); +void *evp_keymgmt_util_gen(EVP_PKEY *target, EVP_KEYMGMT *keymgmt, + void *genctx, OSSL_CALLBACK *cb, void *cbarg); +int evp_keymgmt_util_get_deflt_digest_name(EVP_KEYMGMT *keymgmt, + void *keydata, + char *mdname, size_t mdname_sz); +const char *evp_keymgmt_util_query_operation_name(EVP_KEYMGMT *keymgmt, + int op_id); + +/* + * KEYMGMT provider interface functions + */ +void *evp_keymgmt_newdata(const EVP_KEYMGMT *keymgmt); +void evp_keymgmt_freedata(const EVP_KEYMGMT *keymgmt, void *keyddata); +int evp_keymgmt_get_params(const EVP_KEYMGMT *keymgmt, + void *keydata, OSSL_PARAM params[]); +int evp_keymgmt_set_params(const EVP_KEYMGMT *keymgmt, + void *keydata, const OSSL_PARAM params[]); +void *evp_keymgmt_gen_init(const EVP_KEYMGMT *keymgmt, int selection, + const OSSL_PARAM params[]); +int evp_keymgmt_gen_set_template(const EVP_KEYMGMT *keymgmt, void *genctx, + void *template); +int evp_keymgmt_gen_set_params(const EVP_KEYMGMT *keymgmt, void *genctx, + const OSSL_PARAM params[]); +void *evp_keymgmt_gen(const EVP_KEYMGMT *keymgmt, void *genctx, + OSSL_CALLBACK *cb, void *cbarg); +void evp_keymgmt_gen_cleanup(const EVP_KEYMGMT *keymgmt, void *genctx); + +int evp_keymgmt_has_load(const EVP_KEYMGMT *keymgmt); +void *evp_keymgmt_load(const EVP_KEYMGMT *keymgmt, + const void *objref, size_t objref_sz); + +int evp_keymgmt_has(const EVP_KEYMGMT *keymgmt, void *keyddata, int selection); +int evp_keymgmt_validate(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, int checktype); +int evp_keymgmt_match(const EVP_KEYMGMT *keymgmt, + const void *keydata1, const void *keydata2, + int selection); + +int evp_keymgmt_import(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, const OSSL_PARAM params[]); +const OSSL_PARAM *evp_keymgmt_import_types(const EVP_KEYMGMT *keymgmt, + int selection); +int evp_keymgmt_export(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, OSSL_CALLBACK *param_cb, void *cbarg); +const OSSL_PARAM *evp_keymgmt_export_types(const EVP_KEYMGMT *keymgmt, + int selection); +void *evp_keymgmt_dup(const EVP_KEYMGMT *keymgmt, + const void *keydata_from, int selection); +EVP_KEYMGMT *evp_keymgmt_fetch_from_prov(OSSL_PROVIDER *prov, + const char *name, + const char *properties); /* Pulling defines out of C source files */ -#define EVP_RC4_KEY_SIZE 16 -#ifndef TLS1_1_VERSION -# define TLS1_1_VERSION 0x0302 -#endif +# define EVP_RC4_KEY_SIZE 16 +# ifndef TLS1_1_VERSION +# define TLS1_1_VERSION 0x0302 +# endif void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags); @@ -440,3 +859,96 @@ void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags); #define EVP_ENCODE_CTX_NO_NEWLINES 1 /* Use the SRP base64 alphabet instead of the standard one */ #define EVP_ENCODE_CTX_USE_SRP_ALPHABET 2 + +const EVP_CIPHER *evp_get_cipherbyname_ex(OSSL_LIB_CTX *libctx, + const char *name); +const EVP_MD *evp_get_digestbyname_ex(OSSL_LIB_CTX *libctx, + const char *name); + +int ossl_pkcs5_pbkdf2_hmac_ex(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + const EVP_MD *digest, int keylen, + unsigned char *out, + OSSL_LIB_CTX *libctx, const char *propq); + +# ifndef FIPS_MODULE +/* + * Internal helpers for stricter EVP_PKEY_CTX_{set,get}_params(). + * + * Return 1 on success, 0 or negative for errors. + * + * In particular they return -2 if any of the params is not supported. + * + * They are not available in FIPS_MODULE as they depend on + * - EVP_PKEY_CTX_{get,set}_params() + * - EVP_PKEY_CTX_{gettable,settable}_params() + * + */ +int evp_pkey_ctx_set_params_strict(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); +int evp_pkey_ctx_get_params_strict(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); + +EVP_MD_CTX *evp_md_ctx_new_ex(EVP_PKEY *pkey, const ASN1_OCTET_STRING *id, + OSSL_LIB_CTX *libctx, const char *propq); +int evp_pkey_name2type(const char *name); +const char *evp_pkey_type2name(int type); + +int evp_pkey_ctx_set1_id_prov(EVP_PKEY_CTX *ctx, const void *id, int len); +int evp_pkey_ctx_get1_id_prov(EVP_PKEY_CTX *ctx, void *id); +int evp_pkey_ctx_get1_id_len_prov(EVP_PKEY_CTX *ctx, size_t *id_len); + +int evp_pkey_ctx_use_cached_data(EVP_PKEY_CTX *ctx); +# endif /* !defined(FIPS_MODULE) */ + +int evp_method_store_cache_flush(OSSL_LIB_CTX *libctx); +int evp_method_store_remove_all_provided(const OSSL_PROVIDER *prov); + +int evp_default_properties_enable_fips_int(OSSL_LIB_CTX *libctx, int enable, + int loadconfig); +int evp_set_default_properties_int(OSSL_LIB_CTX *libctx, const char *propq, + int loadconfig, int mirrored); +char *evp_get_global_properties_str(OSSL_LIB_CTX *libctx, int loadconfig); + +void evp_md_ctx_clear_digest(EVP_MD_CTX *ctx, int force, int keep_digest); +/* just free the algctx if set, returns 0 on inconsistent state of ctx */ +int evp_md_ctx_free_algctx(EVP_MD_CTX *ctx); + +/* Three possible states: */ +# define EVP_PKEY_STATE_UNKNOWN 0 +# define EVP_PKEY_STATE_LEGACY 1 +# define EVP_PKEY_STATE_PROVIDER 2 +int evp_pkey_ctx_state(const EVP_PKEY_CTX *ctx); + +/* These two must ONLY be called for provider side operations */ +int evp_pkey_ctx_ctrl_to_param(EVP_PKEY_CTX *ctx, + int keytype, int optype, + int cmd, int p1, void *p2); +int evp_pkey_ctx_ctrl_str_to_param(EVP_PKEY_CTX *ctx, + const char *name, const char *value); + +/* These two must ONLY be called for legacy operations */ +int evp_pkey_ctx_set_params_to_ctrl(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params); +int evp_pkey_ctx_get_params_to_ctrl(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); + +/* This must ONLY be called for legacy EVP_PKEYs */ +int evp_pkey_get_params_to_ctrl(const EVP_PKEY *pkey, OSSL_PARAM *params); + +/* Same as the public get0 functions but are not const */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DH *evp_pkey_get0_DH_int(const EVP_PKEY *pkey); +EC_KEY *evp_pkey_get0_EC_KEY_int(const EVP_PKEY *pkey); +RSA *evp_pkey_get0_RSA_int(const EVP_PKEY *pkey); +# endif + +/* Get internal identification number routines */ +int evp_asym_cipher_get_number(const EVP_ASYM_CIPHER *cipher); +int evp_cipher_get_number(const EVP_CIPHER *cipher); +int evp_kdf_get_number(const EVP_KDF *kdf); +int evp_kem_get_number(const EVP_KEM *wrap); +int evp_keyexch_get_number(const EVP_KEYEXCH *keyexch); +int evp_keymgmt_get_number(const EVP_KEYMGMT *keymgmt); +int evp_mac_get_number(const EVP_MAC *mac); +int evp_md_get_number(const EVP_MD *md); +int evp_rand_get_number(const EVP_RAND *rand); +int evp_signature_get_number(const EVP_SIGNATURE *signature); + +#endif /* OSSL_CRYPTO_EVP_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/evperr.h b/deps/openssl/android/x86/usr/local/include/crypto/evperr.h new file mode 100644 index 00000000..d90ba83f --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/evperr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_EVPERR_H +# define OSSL_CRYPTO_EVPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_EVP_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/httperr.h b/deps/openssl/android/x86/usr/local/include/crypto/httperr.h new file mode 100644 index 00000000..969df17b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/httperr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_HTTPERR_H +# define OSSL_CRYPTO_HTTPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_HTTP_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/lhash.h b/deps/openssl/android/x86/usr/local/include/crypto/lhash.h index ab060cce..0f64869f 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/lhash.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/lhash.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,7 +9,8 @@ #ifndef OSSL_CRYPTO_LHASH_H # define OSSL_CRYPTO_LHASH_H +# pragma once -unsigned long openssl_lh_strcasehash(const char *); +unsigned long ossl_lh_strcasehash(const char *); -#endif +#endif /* OSSL_CRYPTO_LHASH_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/md32_common.h b/deps/openssl/android/x86/usr/local/include/crypto/md32_common.h index 1124e9c2..966e2684 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/md32_common.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/md32_common.h @@ -1,7 +1,7 @@ /* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -95,6 +95,28 @@ #define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n)))) +#ifndef PEDANTIC +# if defined(__GNUC__) && __GNUC__>=2 && \ + !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) +# if defined(__riscv_zbb) || defined(__riscv_zbkb) +# if __riscv_xlen == 64 +# undef ROTATE +# define ROTATE(x, n) ({ MD32_REG_T ret; \ + asm ("roriw %0, %1, %2" \ + : "=r"(ret) \ + : "r"(x), "i"(32 - (n))); ret;}) +# endif +# if __riscv_xlen == 32 +# undef ROTATE +# define ROTATE(x, n) ({ MD32_REG_T ret; \ + asm ("rori %0, %1, %2" \ + : "=r"(ret) \ + : "r"(x), "i"(32 - (n))); ret;}) +# endif +# endif +# endif +#endif + #if defined(DATA_ORDER_IS_BIG_ENDIAN) # define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/modes.h b/deps/openssl/android/x86/usr/local/include/crypto/modes.h new file mode 100644 index 00000000..573e1197 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/modes.h @@ -0,0 +1,224 @@ +/* + * Copyright 2010-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* This header can move into provider when legacy support is removed */ +#include + +#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +typedef __int64 i64; +typedef unsigned __int64 u64; +# define U64(C) C##UI64 +#elif defined(__arch64__) +typedef long i64; +typedef unsigned long u64; +# define U64(C) C##UL +#else +typedef long long i64; +typedef unsigned long long u64; +# define U64(C) C##ULL +#endif + +typedef unsigned int u32; +typedef unsigned char u8; + +#define STRICT_ALIGNMENT 1 +#ifndef PEDANTIC +# if defined(__i386) || defined(__i386__) || \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \ + defined(__aarch64__) || \ + defined(__s390__) || defined(__s390x__) +# undef STRICT_ALIGNMENT +# endif +#endif + +#if !defined(PEDANTIC) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) +# if defined(__GNUC__) && __GNUC__>=2 +# if defined(__x86_64) || defined(__x86_64__) +# define BSWAP8(x) ({ u64 ret_=(x); \ + asm ("bswapq %0" \ + : "+r"(ret_)); ret_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("bswapl %0" \ + : "+r"(ret_)); ret_; }) +# elif (defined(__i386) || defined(__i386__)) && !defined(I386_ONLY) +# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \ + asm ("bswapl %0; bswapl %1" \ + : "+r"(hi_),"+r"(lo_)); \ + (u64)hi_<<32|lo_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("bswapl %0" \ + : "+r"(ret_)); ret_; }) +# elif defined(__aarch64__) +# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \ + __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ +# define BSWAP8(x) ({ u64 ret_; \ + asm ("rev %0,%1" \ + : "=r"(ret_) : "r"(x)); ret_; }) +# define BSWAP4(x) ({ u32 ret_; \ + asm ("rev %w0,%w1" \ + : "=r"(ret_) : "r"(x)); ret_; }) +# endif +# elif (defined(__arm__) || defined(__arm)) && !defined(STRICT_ALIGNMENT) +# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \ + asm ("rev %0,%0; rev %1,%1" \ + : "+r"(hi_),"+r"(lo_)); \ + (u64)hi_<<32|lo_; }) +# define BSWAP4(x) ({ u32 ret_; \ + asm ("rev %0,%1" \ + : "=r"(ret_) : "r"((u32)(x))); \ + ret_; }) +# elif (defined(__riscv_zbb) || defined(__riscv_zbkb)) && __riscv_xlen == 64 +# define BSWAP8(x) ({ u64 ret_=(x); \ + asm ("rev8 %0,%0" \ + : "+r"(ret_)); ret_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("rev8 %0,%0; srli %0,%0,32"\ + : "+&r"(ret_)); ret_; }) +# endif +# elif defined(_MSC_VER) +# if _MSC_VER>=1300 +# include +# pragma intrinsic(_byteswap_uint64,_byteswap_ulong) +# define BSWAP8(x) _byteswap_uint64((u64)(x)) +# define BSWAP4(x) _byteswap_ulong((u32)(x)) +# elif defined(_M_IX86) +__inline u32 _bswap4(u32 val) +{ +_asm mov eax, val _asm bswap eax} +# define BSWAP4(x) _bswap4(x) +# endif +# endif +#endif +#if defined(BSWAP4) && !defined(STRICT_ALIGNMENT) +# define GETU32(p) BSWAP4(*(const u32 *)(p)) +# define PUTU32(p,v) *(u32 *)(p) = BSWAP4(v) +#else +# define GETU32(p) ((u32)(p)[0]<<24|(u32)(p)[1]<<16|(u32)(p)[2]<<8|(u32)(p)[3]) +# define PUTU32(p,v) ((p)[0]=(u8)((v)>>24),(p)[1]=(u8)((v)>>16),(p)[2]=(u8)((v)>>8),(p)[3]=(u8)(v)) +#endif +/*- GCM definitions */ typedef struct { + u64 hi, lo; +} u128; + +typedef void (*gcm_init_fn)(u128 Htable[16], const u64 H[2]); +typedef void (*gcm_ghash_fn)(u64 Xi[2], const u128 Htable[16], const u8 *inp, size_t len); +typedef void (*gcm_gmult_fn)(u64 Xi[2], const u128 Htable[16]); +struct gcm_funcs_st { + gcm_init_fn ginit; + gcm_ghash_fn ghash; + gcm_gmult_fn gmult; +}; + +struct gcm128_context { + /* Following 6 names follow names in GCM specification */ + union { + u64 u[2]; + u32 d[4]; + u8 c[16]; + size_t t[16 / sizeof(size_t)]; + } Yi, EKi, EK0, len, Xi, H; + /* + * Relative position of Yi, EKi, EK0, len, Xi, H and pre-computed Htable is + * used in some assembler modules, i.e. don't change the order! + */ + u128 Htable[16]; + struct gcm_funcs_st funcs; + unsigned int mres, ares; + block128_f block; + void *key; +#if !defined(OPENSSL_SMALL_FOOTPRINT) + unsigned char Xn[48]; +#endif +}; + +/* + * The maximum permitted number of cipher blocks per data unit in XTS mode. + * Reference IEEE Std 1619-2018. + */ +#define XTS_MAX_BLOCKS_PER_DATA_UNIT (1<<20) + +struct xts128_context { + void *key1, *key2; + block128_f block1, block2; +}; + +struct ccm128_context { + union { + u64 u[2]; + u8 c[16]; + } nonce, cmac; + u64 blocks; + block128_f block; + void *key; +}; + +#ifndef OPENSSL_NO_OCB + +typedef union { + u64 a[2]; + unsigned char c[16]; +} OCB_BLOCK; +# define ocb_block16_xor(in1,in2,out) \ + ( (out)->a[0]=(in1)->a[0]^(in2)->a[0], \ + (out)->a[1]=(in1)->a[1]^(in2)->a[1] ) +# if STRICT_ALIGNMENT +# define ocb_block16_xor_misaligned(in1,in2,out) \ + ocb_block_xor((in1)->c,(in2)->c,16,(out)->c) +# else +# define ocb_block16_xor_misaligned ocb_block16_xor +# endif + +struct ocb128_context { + /* Need both encrypt and decrypt key schedules for decryption */ + block128_f encrypt; + block128_f decrypt; + void *keyenc; + void *keydec; + ocb128_f stream; /* direction dependent */ + /* Key dependent variables. Can be reused if key remains the same */ + size_t l_index; + size_t max_l_index; + OCB_BLOCK l_star; + OCB_BLOCK l_dollar; + OCB_BLOCK *l; + /* Must be reset for each session */ + struct { + u64 blocks_hashed; + u64 blocks_processed; + OCB_BLOCK offset_aad; + OCB_BLOCK sum; + OCB_BLOCK offset; + OCB_BLOCK checksum; + } sess; +}; +#endif /* OPENSSL_NO_OCB */ + +#ifndef OPENSSL_NO_SIV + +#define SIV_LEN 16 + +typedef union siv_block_u { + uint64_t word[SIV_LEN/sizeof(uint64_t)]; + unsigned char byte[SIV_LEN]; +} SIV_BLOCK; + +struct siv128_context { + /* d stores intermediate results of S2V; it corresponds to D from the + pseudocode in section 2.4 of RFC 5297. */ + SIV_BLOCK d; + SIV_BLOCK tag; + EVP_CIPHER_CTX *cipher_ctx; + EVP_MAC *mac; + EVP_MAC_CTX *mac_ctx_init; + int final_ret; + int crypto_ok; +}; + +#endif /* OPENSSL_NO_SIV */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/objects.h b/deps/openssl/android/x86/usr/local/include/crypto/objects.h index 76e1b4d9..f22e9287 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/objects.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/objects.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,4 +9,4 @@ #include -void obj_cleanup_int(void); +void ossl_obj_cleanup_int(void); diff --git a/deps/openssl/android/x86/usr/local/include/crypto/objectserr.h b/deps/openssl/android/x86/usr/local/include/crypto/objectserr.h new file mode 100644 index 00000000..ec994824 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/objectserr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_OBJECTSERR_H +# define OSSL_CRYPTO_OBJECTSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OBJ_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/ocsperr.h b/deps/openssl/android/x86/usr/local/include/crypto/ocsperr.h new file mode 100644 index 00000000..f9529b2a --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/ocsperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_OCSPERR_H +# define OSSL_CRYPTO_OCSPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_OCSP + +int ossl_err_load_OCSP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/pem.h b/deps/openssl/android/x86/usr/local/include/crypto/pem.h new file mode 100644 index 00000000..2cb4253d --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/pem.h @@ -0,0 +1,51 @@ +/* + * Copyright 2018-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PEM_H +# define OSSL_INTERNAL_PEM_H +# pragma once + +# include +# include "crypto/types.h" + +/* Found in crypto/pem/pvkfmt.c */ + +/* Maximum length of a blob after header */ +# define BLOB_MAX_LENGTH 102400 + +int ossl_do_blob_header(const unsigned char **in, unsigned int length, + unsigned int *pmagic, unsigned int *pbitlen, + int *pisdss, int *pispub); +unsigned int ossl_blob_length(unsigned bitlen, int isdss, int ispub); +int ossl_do_PVK_header(const unsigned char **in, unsigned int length, + int skip_magic, + unsigned int *psaltlen, unsigned int *pkeylen); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DSA *ossl_b2i_DSA_after_header(const unsigned char **in, unsigned int bitlen, + int ispub); +# endif +RSA *ossl_b2i_RSA_after_header(const unsigned char **in, unsigned int bitlen, + int ispub); +# endif +EVP_PKEY *ossl_b2i(const unsigned char **in, unsigned int length, int *ispub); +EVP_PKEY *ossl_b2i_bio(BIO *in, int *ispub); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DSA *b2i_DSA_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +DSA *b2i_DSA_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +# endif +RSA *b2i_RSA_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +RSA *b2i_RSA_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/pemerr.h b/deps/openssl/android/x86/usr/local/include/crypto/pemerr.h new file mode 100644 index 00000000..b255ff5c --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/pemerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PEMERR_H +# define OSSL_CRYPTO_PEMERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PEM_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/pkcs12err.h b/deps/openssl/android/x86/usr/local/include/crypto/pkcs12err.h new file mode 100644 index 00000000..662f412e --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/pkcs12err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS12ERR_H +# define OSSL_CRYPTO_PKCS12ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PKCS12_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/pkcs7.h b/deps/openssl/android/x86/usr/local/include/crypto/pkcs7.h new file mode 100644 index 00000000..9caa9af4 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/pkcs7.h @@ -0,0 +1,19 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS7_H +# define OSSL_CRYPTO_PKCS7_H +# pragma once + +void ossl_pkcs7_resolve_libctx(PKCS7 *p7); + +void ossl_pkcs7_set0_libctx(PKCS7 *p7, OSSL_LIB_CTX *ctx); +int ossl_pkcs7_set1_propq(PKCS7 *p7, const char *propq); + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/pkcs7err.h b/deps/openssl/android/x86/usr/local/include/crypto/pkcs7err.h new file mode 100644 index 00000000..c195190b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/pkcs7err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS7ERR_H +# define OSSL_CRYPTO_PKCS7ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PKCS7_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/poly1305.h b/deps/openssl/android/x86/usr/local/include/crypto/poly1305.h index 5fef239d..ba54f3bd 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/poly1305.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/poly1305.h @@ -1,12 +1,16 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OSSL_CRYPTO_POLY1305_H +# define OSSL_CRYPTO_POLY1305_H +# pragma once + #include #define POLY1305_BLOCK_SIZE 16 @@ -15,7 +19,28 @@ typedef struct poly1305_context POLY1305; +typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp, + size_t len, unsigned int padbit); +typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16], + const unsigned int nonce[4]); + +struct poly1305_context { + double opaque[24]; /* large enough to hold internal state, declared + * 'double' to ensure at least 64-bit invariant + * alignment across all platforms and + * configurations */ + unsigned int nonce[4]; + unsigned char data[POLY1305_BLOCK_SIZE]; + size_t num; + struct { + poly1305_blocks_f blocks; + poly1305_emit_f emit; + } func; +}; + size_t Poly1305_ctx_size(void); void Poly1305_Init(POLY1305 *ctx, const unsigned char key[32]); void Poly1305_Update(POLY1305 *ctx, const unsigned char *inp, size_t len); void Poly1305_Final(POLY1305 *ctx, unsigned char mac[16]); + +#endif /* OSSL_CRYPTO_POLY1305_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/ppc_arch.h b/deps/openssl/android/x86/usr/local/include/crypto/ppc_arch.h new file mode 100644 index 00000000..d999396a --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/ppc_arch.h @@ -0,0 +1,29 @@ +/* + * Copyright 2014-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PPC_ARCH_H +# define OSSL_CRYPTO_PPC_ARCH_H + +extern unsigned int OPENSSL_ppccap_P; + +/* + * Flags' usage can appear ambiguous, because they are set rather + * to reflect OpenSSL performance preferences than actual processor + * capabilities. + */ +# define PPC_FPU64 (1<<0) +# define PPC_ALTIVEC (1<<1) +# define PPC_CRYPTO207 (1<<2) +# define PPC_FPU (1<<3) +# define PPC_MADD300 (1<<4) +# define PPC_MFTB (1<<5) +# define PPC_MFSPR268 (1<<6) +# define PPC_BRD31 (1<<7) + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/punycode.h b/deps/openssl/android/x86/usr/local/include/crypto/punycode.h new file mode 100644 index 00000000..4c6e49f5 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/punycode.h @@ -0,0 +1,27 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PUNYCODE_H +# define OSSL_CRYPTO_PUNYCODE_H +# pragma once + +# include /* for size_t */ + +int ossl_punycode_decode ( + const char *pEncoded, + const size_t enc_len, + unsigned int *pDecoded, + unsigned int *pout_length +); + +int ossl_a2ulabel(const char *in, char *out, size_t outlen); + +int ossl_a2ucompare(const char *a, const char *u); + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/rand.h b/deps/openssl/android/x86/usr/local/include/crypto/rand.h index 9e02bb0e..6a71a339 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/rand.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/rand.h @@ -1,14 +1,14 @@ /* - * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ /* - * Licensed under the OpenSSL licenses, (the "License"); + * Licensed under the Apache License 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * https://www.openssl.org/source/license.html @@ -17,8 +17,10 @@ #ifndef OSSL_CRYPTO_RAND_H # define OSSL_CRYPTO_RAND_H +# pragma once # include +# include "crypto/rand_pool.h" # if defined(__APPLE__) && !defined(OPENSSL_NO_APPLE_CRYPTO_RANDOM) # include @@ -30,115 +32,97 @@ # endif # endif -/* forward declaration */ -typedef struct rand_pool_st RAND_POOL; - -void rand_cleanup_int(void); -void rand_drbg_cleanup_int(void); -void drbg_delete_thread_state(void); - -/* Hardware-based seeding functions. */ -size_t rand_acquire_entropy_from_tsc(RAND_POOL *pool); -size_t rand_acquire_entropy_from_cpu(RAND_POOL *pool); - -/* DRBG entropy callbacks. */ -size_t rand_drbg_get_entropy(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, size_t max_len, - int prediction_resistance); -void rand_drbg_cleanup_entropy(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); -size_t rand_drbg_get_nonce(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, size_t max_len); -void rand_drbg_cleanup_nonce(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); - -size_t rand_drbg_get_additional_data(RAND_POOL *pool, unsigned char **pout); - -void rand_drbg_cleanup_additional_data(RAND_POOL *pool, unsigned char *out); - /* - * RAND_POOL functions + * Defines related to seed sources */ -RAND_POOL *rand_pool_new(int entropy_requested, int secure, - size_t min_len, size_t max_len); -RAND_POOL *rand_pool_attach(const unsigned char *buffer, size_t len, - size_t entropy); -void rand_pool_free(RAND_POOL *pool); - -const unsigned char *rand_pool_buffer(RAND_POOL *pool); -unsigned char *rand_pool_detach(RAND_POOL *pool); -void rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer); - -size_t rand_pool_entropy(RAND_POOL *pool); -size_t rand_pool_length(RAND_POOL *pool); - -size_t rand_pool_entropy_available(RAND_POOL *pool); -size_t rand_pool_entropy_needed(RAND_POOL *pool); -/* |entropy_factor| expresses how many bits of data contain 1 bit of entropy */ -size_t rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor); -size_t rand_pool_bytes_remaining(RAND_POOL *pool); - -int rand_pool_add(RAND_POOL *pool, - const unsigned char *buffer, size_t len, size_t entropy); -unsigned char *rand_pool_add_begin(RAND_POOL *pool, size_t len); -int rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy); - - +#ifndef DEVRANDOM /* - * Add random bytes to the pool to acquire requested amount of entropy - * - * This function is platform specific and tries to acquire the requested - * amount of entropy by polling platform specific entropy sources. - * - * If the function succeeds in acquiring at least |entropy_requested| bits - * of entropy, the total entropy count is returned. If it fails, it returns - * an entropy count of 0. + * set this to a comma-separated list of 'random' device files to try out. By + * default, we will try to read at least one of these files */ -size_t rand_pool_acquire_entropy(RAND_POOL *pool); - +# define DEVRANDOM "/dev/urandom", "/dev/random", "/dev/hwrng", "/dev/srandom" +# if defined(__linux) && !defined(__ANDROID__) +# ifndef DEVRANDOM_WAIT +# define DEVRANDOM_WAIT "/dev/random" +# endif /* - * Add some application specific nonce data - * - * This function is platform specific and adds some application specific - * data to the nonce used for instantiating the drbg. - * - * This data currently consists of the process and thread id, and a high - * resolution timestamp. The data does not include an atomic counter, - * because that is added by the calling function rand_drbg_get_nonce(). - * - * Returns 1 on success and 0 on failure. + * Linux kernels 4.8 and later changes how their random device works and there + * is no reliable way to tell that /dev/urandom has been seeded -- getentropy(2) + * should be used instead. */ -int rand_pool_add_nonce_data(RAND_POOL *pool); - - +# ifndef DEVRANDOM_SAFE_KERNEL +# define DEVRANDOM_SAFE_KERNEL 4, 8 +# endif /* - * Add some platform specific additional data - * - * This function is platform specific and adds some random noise to the - * additional data used for generating random bytes and for reseeding - * the drbg. - * - * Returns 1 on success and 0 on failure. + * Some operating systems do not permit select(2) on their random devices, + * defining this to zero will force the use of read(2) to extract one byte + * from /dev/random. */ -int rand_pool_add_additional_data(RAND_POOL *pool); +# ifndef DEVRANDM_WAIT_USE_SELECT +# define DEVRANDM_WAIT_USE_SELECT 1 +# endif +/* + * Define the shared memory identifier used to indicate if the operating + * system has properly seeded the DEVRANDOM source. + */ +# ifndef OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID +# define OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID 114 +# endif + +# endif +#endif + +#if !defined(OPENSSL_NO_EGD) && !defined(DEVRANDOM_EGD) +/* + * set this to a comma-separated list of 'egd' sockets to try out. These + * sockets will be tried in the order listed in case accessing the device + * files listed in DEVRANDOM did not return enough randomness. + */ +# define DEVRANDOM_EGD "/var/run/egd-pool", "/dev/egd-pool", "/etc/egd-pool", "/etc/entropy" +#endif + +void ossl_rand_cleanup_int(void); /* * Initialise the random pool reseeding sources. * * Returns 1 on success and 0 on failure. */ -int rand_pool_init(void); +int ossl_rand_pool_init(void); /* * Finalise the random pool reseeding sources. */ -void rand_pool_cleanup(void); +void ossl_rand_pool_cleanup(void); /* * Control the random pool use of open file descriptors. */ -void rand_pool_keep_random_devices_open(int keep); +void ossl_rand_pool_keep_random_devices_open(int keep); + +/* + * Configuration + */ +void ossl_random_add_conf_module(void); + +/* + * Get and cleanup random seed material. + */ +size_t ossl_rand_get_entropy(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char **pout, int entropy, + size_t min_len, size_t max_len); +void ossl_rand_cleanup_entropy(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len); +size_t ossl_rand_get_nonce(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char **pout, size_t min_len, size_t max_len, + const void *salt, size_t salt_len); +void ossl_rand_cleanup_nonce(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len); + +/* + * Get seeding material from the operating system sources. + */ +size_t ossl_pool_acquire_entropy(RAND_POOL *pool); +int ossl_pool_add_nonce_data(RAND_POOL *pool); #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/rand_pool.h b/deps/openssl/android/x86/usr/local/include/crypto/rand_pool.h new file mode 100644 index 00000000..f4d1d954 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/rand_pool.h @@ -0,0 +1,109 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_PROVIDER_RAND_POOL_H +# define OSSL_PROVIDER_RAND_POOL_H +# pragma once + +# include +# include + +/* + * Maximum allocation size for RANDOM_POOL buffers + * + * The max_len value for the buffer provided to the rand_drbg_get_entropy() + * callback is currently 2^31 bytes (2 gigabytes), if a derivation function + * is used. Since this is much too large to be allocated, the ossl_rand_pool_new() + * function chooses more modest values as default pool length, bounded + * by RAND_POOL_MIN_LENGTH and RAND_POOL_MAX_LENGTH + * + * The choice of the RAND_POOL_FACTOR is large enough such that the + * RAND_POOL can store a random input which has a lousy entropy rate of + * 8/256 (= 0.03125) bits per byte. This input will be sent through the + * derivation function which 'compresses' the low quality input into a + * high quality output. + * + * The factor 1.5 below is the pessimistic estimate for the extra amount + * of entropy required when no get_nonce() callback is defined. + */ +# define RAND_POOL_FACTOR 256 +# define RAND_POOL_MAX_LENGTH (RAND_POOL_FACTOR * \ + 3 * (RAND_DRBG_STRENGTH / 16)) +/* + * = (RAND_POOL_FACTOR * \ + * 1.5 * (RAND_DRBG_STRENGTH / 8)) + */ + +/* + * Initial allocation minimum. + * + * There is a distinction between the secure and normal allocation minimums. + * Ideally, the secure allocation size should be a power of two. The normal + * allocation size doesn't have any such restriction. + * + * The secure value is based on 128 bits of secure material, which is 16 bytes. + * Typically, the DRBGs will set a minimum larger than this so optimal + * allocation ought to take place (for full quality seed material). + * + * The normal value has been chosen by noticing that the rand_drbg_get_nonce + * function is usually the largest of the built in allocation (twenty four + * bytes and then appending another sixteen bytes). This means the buffer ends + * with 40 bytes. The value of forty eight is comfortably above this which + * allows some slack in the platform specific values used. + */ +# define RAND_POOL_MIN_ALLOCATION(secure) ((secure) ? 16 : 48) + +/* + * The 'random pool' acts as a dumb container for collecting random + * input from various entropy sources. It is the callers duty to 1) initialize + * the random pool, 2) pass it to the polling callbacks, 3) seed the RNG, and + * 4) cleanup the random pool again. + * + * The random pool contains no locking mechanism because its scope and + * lifetime is intended to be restricted to a single stack frame. + */ +typedef struct rand_pool_st { + unsigned char *buffer; /* points to the beginning of the random pool */ + size_t len; /* current number of random bytes contained in the pool */ + + int attached; /* true pool was attached to existing buffer */ + int secure; /* 1: allocated on the secure heap, 0: otherwise */ + + size_t min_len; /* minimum number of random bytes requested */ + size_t max_len; /* maximum number of random bytes (allocated buffer size) */ + size_t alloc_len; /* current number of bytes allocated */ + size_t entropy; /* current entropy count in bits */ + size_t entropy_requested; /* requested entropy count in bits */ +} RAND_POOL; + +RAND_POOL *ossl_rand_pool_new(int entropy_requested, int secure, + size_t min_len, size_t max_len); +RAND_POOL *ossl_rand_pool_attach(const unsigned char *buffer, size_t len, + size_t entropy); +void ossl_rand_pool_free(RAND_POOL *pool); + +const unsigned char *ossl_rand_pool_buffer(RAND_POOL *pool); +unsigned char *ossl_rand_pool_detach(RAND_POOL *pool); +void ossl_rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer); + +size_t ossl_rand_pool_entropy(RAND_POOL *pool); +size_t ossl_rand_pool_length(RAND_POOL *pool); + +size_t ossl_rand_pool_entropy_available(RAND_POOL *pool); +size_t ossl_rand_pool_entropy_needed(RAND_POOL *pool); +/* |entropy_factor| expresses how many bits of data contain 1 bit of entropy */ +size_t ossl_rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor); +size_t ossl_rand_pool_bytes_remaining(RAND_POOL *pool); + +int ossl_rand_pool_add(RAND_POOL *pool, + const unsigned char *buffer, size_t len, size_t entropy); +unsigned char *ossl_rand_pool_add_begin(RAND_POOL *pool, size_t len); +int ossl_rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy); + +#endif /* OSSL_PROVIDER_RAND_POOL_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/randerr.h b/deps/openssl/android/x86/usr/local/include/crypto/randerr.h new file mode 100644 index 00000000..832a8b7d --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/randerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RANDERR_H +# define OSSL_CRYPTO_RANDERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_RAND_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.def b/deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.def new file mode 100644 index 00000000..6c26dbf4 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.def @@ -0,0 +1,43 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* X Macro Definitions for Specification of RISC-V Arch Capabilities */ + +/* + * Each RISC-V capability ends up encoded as a single set bit in an array of + * words. When specifying a new capability, write a new RISCV_DEFINE_CAP + * statement, with an argument as the extension name in all-caps, + * second argument as the index in the array where the capability will be stored + * and third argument as the index of the bit to be used to encode the + * capability. + * RISCV_DEFINE_CAP(EXTENSION NAME, array index, bit index) */ + +RISCV_DEFINE_CAP(ZBA, 0, 0) +RISCV_DEFINE_CAP(ZBB, 0, 1) +RISCV_DEFINE_CAP(ZBC, 0, 2) +RISCV_DEFINE_CAP(ZBS, 0, 3) +RISCV_DEFINE_CAP(ZBKB, 0, 4) +RISCV_DEFINE_CAP(ZBKC, 0, 5) +RISCV_DEFINE_CAP(ZBKX, 0, 6) +RISCV_DEFINE_CAP(ZKND, 0, 7) +RISCV_DEFINE_CAP(ZKNE, 0, 8) +RISCV_DEFINE_CAP(ZKNH, 0, 9) +RISCV_DEFINE_CAP(ZKSED, 0, 10) +RISCV_DEFINE_CAP(ZKSH, 0, 11) +RISCV_DEFINE_CAP(ZKR, 0, 12) +RISCV_DEFINE_CAP(ZKT, 0, 13) + +/* + * In the future ... + * RISCV_DEFINE_CAP(ZFOO, 0, 31) + * RISCV_DEFINE_CAP(ZBAR, 1, 0) + * ... and so on. + */ + +#undef RISCV_DEFINE_CAP diff --git a/deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.h b/deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.h new file mode 100644 index 00000000..89a40bea --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.h @@ -0,0 +1,59 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RISCV_ARCH_H +# define OSSL_CRYPTO_RISCV_ARCH_H + +# include +# include + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +extern uint32_t OPENSSL_riscvcap_P[ (( +# include "riscv_arch.def" +) + sizeof(uint32_t) - 1) / sizeof(uint32_t) ]; + +# ifdef OPENSSL_RISCVCAP_IMPL +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +uint32_t OPENSSL_riscvcap_P[ (( +# include "riscv_arch.def" +) + sizeof(uint32_t) - 1) / sizeof(uint32_t) ]; +# endif + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) \ + static inline int RISCV_HAS_##NAME(void) \ + { \ + return (OPENSSL_riscvcap_P[INDEX] & (1 << BIT_INDEX)) != 0; \ + } +# include "riscv_arch.def" + +struct RISCV_capability_s { + const char *name; + size_t index; + size_t bit_offset; +}; + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +extern const struct RISCV_capability_s RISCV_capabilities[ +# include "riscv_arch.def" +]; + +# ifdef OPENSSL_RISCVCAP_IMPL +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) \ + { #NAME, INDEX, BIT_INDEX }, +const struct RISCV_capability_s RISCV_capabilities[] = { +# include "riscv_arch.def" +}; +# endif + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +static const size_t kRISCVNumCaps = +# include "riscv_arch.def" +; + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/rsa.h b/deps/openssl/android/x86/usr/local/include/crypto/rsa.h new file mode 100644 index 00000000..949873d0 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/rsa.h @@ -0,0 +1,130 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_RSA_H +# define OSSL_INTERNAL_RSA_H +# pragma once + +# include +# include +# include "crypto/types.h" + +#define RSA_MIN_MODULUS_BITS 512 + +typedef struct rsa_pss_params_30_st { + int hash_algorithm_nid; + struct { + int algorithm_nid; /* Currently always NID_mgf1 */ + int hash_algorithm_nid; + } mask_gen; + int salt_len; + int trailer_field; +} RSA_PSS_PARAMS_30; + +RSA_PSS_PARAMS_30 *ossl_rsa_get0_pss_params_30(RSA *r); +int ossl_rsa_pss_params_30_set_defaults(RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_copy(RSA_PSS_PARAMS_30 *to, + const RSA_PSS_PARAMS_30 *from); +int ossl_rsa_pss_params_30_is_unrestricted(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_set_hashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int hashalg_nid); +int ossl_rsa_pss_params_30_set_maskgenalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int maskgenalg_nid); +int ossl_rsa_pss_params_30_set_maskgenhashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int maskgenhashalg_nid); +int ossl_rsa_pss_params_30_set_saltlen(RSA_PSS_PARAMS_30 *rsa_pss_params, + int saltlen); +int ossl_rsa_pss_params_30_set_trailerfield(RSA_PSS_PARAMS_30 *rsa_pss_params, + int trailerfield); +int ossl_rsa_pss_params_30_hashalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_maskgenalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_maskgenhashalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_saltlen(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_trailerfield(const RSA_PSS_PARAMS_30 *rsa_pss_params); + +const char *ossl_rsa_mgf_nid2name(int mgf); +int ossl_rsa_oaeppss_md2nid(const EVP_MD *md); +const char *ossl_rsa_oaeppss_nid2name(int md); + +RSA *ossl_rsa_new_with_ctx(OSSL_LIB_CTX *libctx); +OSSL_LIB_CTX *ossl_rsa_get0_libctx(RSA *r); +void ossl_rsa_set0_libctx(RSA *r, OSSL_LIB_CTX *libctx); + +int ossl_rsa_set0_all_params(RSA *r, const STACK_OF(BIGNUM) *primes, + const STACK_OF(BIGNUM) *exps, + const STACK_OF(BIGNUM) *coeffs); +int ossl_rsa_get0_all_params(RSA *r, STACK_OF(BIGNUM_const) *primes, + STACK_OF(BIGNUM_const) *exps, + STACK_OF(BIGNUM_const) *coeffs); +int ossl_rsa_is_foreign(const RSA *rsa); +RSA *ossl_rsa_dup(const RSA *rsa, int selection); + +int ossl_rsa_todata(RSA *rsa, OSSL_PARAM_BLD *bld, OSSL_PARAM params[], + int include_private); +int ossl_rsa_fromdata(RSA *rsa, const OSSL_PARAM params[], int include_private); +int ossl_rsa_pss_params_30_todata(const RSA_PSS_PARAMS_30 *pss, + OSSL_PARAM_BLD *bld, OSSL_PARAM params[]); +int ossl_rsa_pss_params_30_fromdata(RSA_PSS_PARAMS_30 *pss_params, + int *defaults_set, + const OSSL_PARAM params[], + OSSL_LIB_CTX *libctx); +int ossl_rsa_set0_pss_params(RSA *r, RSA_PSS_PARAMS *pss); +int ossl_rsa_pss_get_param_unverified(const RSA_PSS_PARAMS *pss, + const EVP_MD **pmd, const EVP_MD **pmgf1md, + int *psaltlen, int *ptrailerField); +RSA_PSS_PARAMS *ossl_rsa_pss_decode(const X509_ALGOR *alg); +int ossl_rsa_param_decode(RSA *rsa, const X509_ALGOR *alg); +RSA *ossl_rsa_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_rsa_padding_check_PKCS1_type_2_TLS(OSSL_LIB_CTX *ctx, unsigned char *to, + size_t tlen, + const unsigned char *from, + size_t flen, int client_version, + int alt_version); +int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx, + unsigned char *to, int tlen, + const unsigned char *from, int flen, + const unsigned char *param, + int plen, const EVP_MD *md, + const EVP_MD *mgf1md); + +int ossl_rsa_validate_public(const RSA *key); +int ossl_rsa_validate_private(const RSA *key); +int ossl_rsa_validate_pairwise(const RSA *key); + +int ossl_rsa_verify(int dtype, const unsigned char *m, + unsigned int m_len, unsigned char *rm, + size_t *prm_len, const unsigned char *sigbuf, + size_t siglen, RSA *rsa); + +const unsigned char *ossl_rsa_digestinfo_encoding(int md_nid, size_t *len); + +extern const char *ossl_rsa_mp_factor_names[]; +extern const char *ossl_rsa_mp_exp_names[]; +extern const char *ossl_rsa_mp_coeff_names[]; + +ASN1_STRING *ossl_rsa_ctx_to_pss_string(EVP_PKEY_CTX *pkctx); +int ossl_rsa_pss_to_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pkctx, + const X509_ALGOR *sigalg, EVP_PKEY *pkey); + +# if defined(FIPS_MODULE) && !defined(OPENSSL_NO_ACVP_TESTS) +int ossl_rsa_acvp_test_gen_params_new(OSSL_PARAM **dst, const OSSL_PARAM src[]); +void ossl_rsa_acvp_test_gen_params_free(OSSL_PARAM *dst); + +int ossl_rsa_acvp_test_set_params(RSA *r, const OSSL_PARAM params[]); +int ossl_rsa_acvp_test_get_params(RSA *r, OSSL_PARAM params[]); +typedef struct rsa_acvp_test_st RSA_ACVP_TEST; +void ossl_rsa_acvp_test_free(RSA_ACVP_TEST *t); +# else +# define RSA_ACVP_TEST void +# endif + +RSA *evp_pkey_get1_RSA_PSS(EVP_PKEY *pkey); +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/rsaerr.h b/deps/openssl/android/x86/usr/local/include/crypto/rsaerr.h new file mode 100644 index 00000000..9b23500b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/rsaerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RSAERR_H +# define OSSL_CRYPTO_RSAERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_RSA_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/security_bits.h b/deps/openssl/android/x86/usr/local/include/crypto/security_bits.h new file mode 100644 index 00000000..58f49681 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/security_bits.h @@ -0,0 +1,16 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_SECURITY_BITS_H +# define OSSL_SECURITY_BITS_H +# pragma once + +uint16_t ossl_ifc_ffc_compute_security_bits(int n); + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/sha.h b/deps/openssl/android/x86/usr/local/include/crypto/sha.h index 6d15edb9..64305d17 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/sha.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/sha.h @@ -1,8 +1,8 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,10 +10,13 @@ #ifndef OSSL_CRYPTO_SHA_H # define OSSL_CRYPTO_SHA_H +# pragma once -# include +# include int sha512_224_init(SHA512_CTX *); int sha512_256_init(SHA512_CTX *); +int ossl_sha1_ctrl(SHA_CTX *ctx, int cmd, int mslen, void *ms); +unsigned char *ossl_sha1(const unsigned char *d, size_t n, unsigned char *md); #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/siphash.h b/deps/openssl/android/x86/usr/local/include/crypto/siphash.h index 9573680f..0d0767fc 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/siphash.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/siphash.h @@ -1,18 +1,22 @@ /* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_CRYPTO_SIPHASH_H +# define OSSL_CRYPTO_SIPHASH_H +# pragma once -#define SIPHASH_BLOCK_SIZE 8 -#define SIPHASH_KEY_SIZE 16 -#define SIPHASH_MIN_DIGEST_SIZE 8 -#define SIPHASH_MAX_DIGEST_SIZE 16 +# include + +# define SIPHASH_BLOCK_SIZE 8 +# define SIPHASH_KEY_SIZE 16 +# define SIPHASH_MIN_DIGEST_SIZE 8 +# define SIPHASH_MAX_DIGEST_SIZE 16 typedef struct siphash_st SIPHASH; @@ -23,3 +27,24 @@ int SipHash_Init(SIPHASH *ctx, const unsigned char *k, int crounds, int drounds); void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen); int SipHash_Final(SIPHASH *ctx, unsigned char *out, size_t outlen); + +/* Based on https://131002.net/siphash C reference implementation */ + +struct siphash_st { + uint64_t total_inlen; + uint64_t v0; + uint64_t v1; + uint64_t v2; + uint64_t v3; + unsigned int len; + unsigned int hash_size; + unsigned int crounds; + unsigned int drounds; + unsigned char leavings[SIPHASH_BLOCK_SIZE]; +}; + +/* default: SipHash-2-4 */ +# define SIPHASH_C_ROUNDS 2 +# define SIPHASH_D_ROUNDS 4 + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/siv.h b/deps/openssl/android/x86/usr/local/include/crypto/siv.h new file mode 100644 index 00000000..8dc58bd3 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/siv.h @@ -0,0 +1,33 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_NO_SIV + +typedef struct siv128_context SIV128_CONTEXT; + +SIV128_CONTEXT *ossl_siv128_new(const unsigned char *key, int klen, + EVP_CIPHER *cbc, EVP_CIPHER *ctr, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_siv128_init(SIV128_CONTEXT *ctx, const unsigned char *key, int klen, + const EVP_CIPHER *cbc, const EVP_CIPHER *ctr, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_siv128_copy_ctx(SIV128_CONTEXT *dest, SIV128_CONTEXT *src); +int ossl_siv128_aad(SIV128_CONTEXT *ctx, const unsigned char *aad, size_t len); +int ossl_siv128_encrypt(SIV128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, size_t len); +int ossl_siv128_decrypt(SIV128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, size_t len); +int ossl_siv128_finish(SIV128_CONTEXT *ctx); +int ossl_siv128_set_tag(SIV128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +int ossl_siv128_get_tag(SIV128_CONTEXT *ctx, unsigned char *tag, size_t len); +int ossl_siv128_cleanup(SIV128_CONTEXT *ctx); +int ossl_siv128_speed(SIV128_CONTEXT *ctx, int arg); + +#endif /* OPENSSL_NO_SIV */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/sm2.h b/deps/openssl/android/x86/usr/local/include/crypto/sm2.h index a7f5548c..9ab6c0b7 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/sm2.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/sm2.h @@ -3,7 +3,7 @@ * Copyright 2017 Ribose Inc. All Rights Reserved. * Ported from Ribose contributions from Botan. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,67 +11,76 @@ #ifndef OSSL_CRYPTO_SM2_H # define OSSL_CRYPTO_SM2_H +# pragma once + # include -# ifndef OPENSSL_NO_SM2 +# if !defined(OPENSSL_NO_SM2) && !defined(FIPS_MODULE) # include +# include "crypto/types.h" + +int ossl_sm2_key_private_check(const EC_KEY *eckey); /* The default user id as specified in GM/T 0009-2012 */ # define SM2_DEFAULT_USERID "1234567812345678" -int sm2_compute_z_digest(uint8_t *out, - const EVP_MD *digest, - const uint8_t *id, - const size_t id_len, - const EC_KEY *key); +int ossl_sm2_compute_z_digest(uint8_t *out, + const EVP_MD *digest, + const uint8_t *id, + const size_t id_len, + const EC_KEY *key); /* * SM2 signature operation. Computes Z and then signs H(Z || msg) using SM2 */ -ECDSA_SIG *sm2_do_sign(const EC_KEY *key, +ECDSA_SIG *ossl_sm2_do_sign(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *id, + const size_t id_len, + const uint8_t *msg, size_t msg_len); + +int ossl_sm2_do_verify(const EC_KEY *key, const EVP_MD *digest, + const ECDSA_SIG *signature, const uint8_t *id, const size_t id_len, const uint8_t *msg, size_t msg_len); -int sm2_do_verify(const EC_KEY *key, - const EVP_MD *digest, - const ECDSA_SIG *signature, - const uint8_t *id, - const size_t id_len, - const uint8_t *msg, size_t msg_len); - /* * SM2 signature generation. */ -int sm2_sign(const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); +int ossl_sm2_internal_sign(const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, + EC_KEY *eckey); /* * SM2 signature verification. */ -int sm2_verify(const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); +int ossl_sm2_internal_verify(const unsigned char *dgst, int dgstlen, + const unsigned char *sig, int siglen, + EC_KEY *eckey); /* * SM2 encryption */ -int sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len, - size_t *ct_size); +int ossl_sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, + size_t msg_len, size_t *ct_size); -int sm2_plaintext_size(const unsigned char *ct, size_t ct_size, size_t *pt_size); +int ossl_sm2_plaintext_size(const unsigned char *ct, size_t ct_size, + size_t *pt_size); -int sm2_encrypt(const EC_KEY *key, - const EVP_MD *digest, - const uint8_t *msg, - size_t msg_len, - uint8_t *ciphertext_buf, size_t *ciphertext_len); +int ossl_sm2_encrypt(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *msg, size_t msg_len, + uint8_t *ciphertext_buf, size_t *ciphertext_len); -int sm2_decrypt(const EC_KEY *key, - const EVP_MD *digest, - const uint8_t *ciphertext, - size_t ciphertext_len, uint8_t *ptext_buf, size_t *ptext_len); +int ossl_sm2_decrypt(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *ciphertext, size_t ciphertext_len, + uint8_t *ptext_buf, size_t *ptext_len); +const unsigned char *ossl_sm2_algorithmidentifier_encoding(int md_nid, + size_t *len); # endif /* OPENSSL_NO_SM2 */ #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/sm2err.h b/deps/openssl/android/x86/usr/local/include/crypto/sm2err.h index d1c0ee25..706f4d69 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/sm2err.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/sm2err.h @@ -1,8 +1,8 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,39 +10,18 @@ #ifndef OSSL_CRYPTO_SM2ERR_H # define OSSL_CRYPTO_SM2ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +# pragma once # include +# include + +# ifdef __cplusplus +extern "C" { +# endif # ifndef OPENSSL_NO_SM2 -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_SM2_strings(void); - -/* - * SM2 function codes. - */ -# define SM2_F_PKEY_SM2_COPY 115 -# define SM2_F_PKEY_SM2_CTRL 109 -# define SM2_F_PKEY_SM2_CTRL_STR 110 -# define SM2_F_PKEY_SM2_DIGEST_CUSTOM 114 -# define SM2_F_PKEY_SM2_INIT 111 -# define SM2_F_PKEY_SM2_SIGN 112 -# define SM2_F_SM2_COMPUTE_MSG_HASH 100 -# define SM2_F_SM2_COMPUTE_USERID_DIGEST 101 -# define SM2_F_SM2_COMPUTE_Z_DIGEST 113 -# define SM2_F_SM2_DECRYPT 102 -# define SM2_F_SM2_ENCRYPT 103 -# define SM2_F_SM2_PLAINTEXT_SIZE 104 -# define SM2_F_SM2_SIGN 105 -# define SM2_F_SM2_SIG_GEN 106 -# define SM2_F_SM2_SIG_VERIFY 107 -# define SM2_F_SM2_VERIFY 108 +int ossl_err_load_SM2_strings(void); /* * SM2 reason codes. @@ -58,8 +37,13 @@ int ERR_load_SM2_strings(void); # define SM2_R_INVALID_DIGEST_TYPE 103 # define SM2_R_INVALID_ENCODING 104 # define SM2_R_INVALID_FIELD 105 +# define SM2_R_INVALID_PRIVATE_KEY 113 # define SM2_R_NO_PARAMETERS_SET 109 # define SM2_R_USER_ID_TOO_LARGE 106 +# endif + +# ifdef __cplusplus +} # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/sm4.h b/deps/openssl/android/x86/usr/local/include/crypto/sm4.h index abe28f38..e21ec81c 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/sm4.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/sm4.h @@ -1,8 +1,8 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2017 Ribose Inc. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,7 @@ #ifndef OSSL_CRYPTO_SM4_H # define OSSL_CRYPTO_SM4_H +# pragma once # include # include @@ -28,10 +29,10 @@ typedef struct SM4_KEY_st { uint32_t rk[SM4_KEY_SCHEDULE]; } SM4_KEY; -int SM4_set_key(const uint8_t *key, SM4_KEY *ks); +int ossl_sm4_set_key(const uint8_t *key, SM4_KEY *ks); -void SM4_encrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); +void ossl_sm4_encrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); -void SM4_decrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); +void ossl_sm4_decrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/sm4_platform.h b/deps/openssl/android/x86/usr/local/include/crypto/sm4_platform.h new file mode 100644 index 00000000..6cc1dfa5 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/sm4_platform.h @@ -0,0 +1,75 @@ +/* + * Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_SM4_PLATFORM_H +# define OSSL_SM4_PLATFORM_H +# pragma once + +# if defined(OPENSSL_CPUID_OBJ) +# if defined(__aarch64__) +# include "arm_arch.h" +extern unsigned int OPENSSL_arm_midr; +static inline int vpsm4_capable(void) +{ + return (OPENSSL_armcap_P & ARMV8_CPUID) && + (MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_V1) || + MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_N1)); +} +# if defined(VPSM4_ASM) +# define VPSM4_CAPABLE vpsm4_capable() +# endif +# define HWSM4_CAPABLE (OPENSSL_armcap_P & ARMV8_SM4) +# define HWSM4_set_encrypt_key sm4_v8_set_encrypt_key +# define HWSM4_set_decrypt_key sm4_v8_set_decrypt_key +# define HWSM4_encrypt sm4_v8_encrypt +# define HWSM4_decrypt sm4_v8_decrypt +# define HWSM4_cbc_encrypt sm4_v8_cbc_encrypt +# define HWSM4_ecb_encrypt sm4_v8_ecb_encrypt +# define HWSM4_ctr32_encrypt_blocks sm4_v8_ctr32_encrypt_blocks +# endif +# endif /* OPENSSL_CPUID_OBJ */ + +# if defined(HWSM4_CAPABLE) +int HWSM4_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); +int HWSM4_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); +void HWSM4_encrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void HWSM4_decrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void HWSM4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + unsigned char *ivec, const int enc); +void HWSM4_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + const int enc); +void HWSM4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +# endif /* HWSM4_CAPABLE */ + +#ifdef VPSM4_CAPABLE +int vpsm4_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); +int vpsm4_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); +void vpsm4_encrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void vpsm4_decrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void vpsm4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + unsigned char *ivec, const int enc); +void vpsm4_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + const int enc); +void vpsm4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +# endif /* VPSM4_CAPABLE */ + + +#endif /* OSSL_SM4_PLATFORM_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/sparc_arch.h b/deps/openssl/android/x86/usr/local/include/crypto/sparc_arch.h new file mode 100644 index 00000000..447e715b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/sparc_arch.h @@ -0,0 +1,122 @@ +/* + * Copyright 2012-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_SPARC_ARCH_H +# define OSSL_CRYPTO_SPARC_ARCH_H + +# define SPARCV9_TICK_PRIVILEGED (1<<0) +# define SPARCV9_PREFER_FPU (1<<1) +# define SPARCV9_VIS1 (1<<2) +# define SPARCV9_VIS2 (1<<3)/* reserved */ +# define SPARCV9_FMADD (1<<4) +# define SPARCV9_BLK (1<<5)/* VIS1 block copy */ +# define SPARCV9_VIS3 (1<<6) +# define SPARCV9_RANDOM (1<<7) +# define SPARCV9_64BIT_STACK (1<<8) +# define SPARCV9_FJAESX (1<<9)/* Fujitsu SPARC64 X AES */ +# define SPARCV9_FJDESX (1<<10)/* Fujitsu SPARC64 X DES, reserved */ +# define SPARCV9_FJHPCACE (1<<11)/* Fujitsu HPC-ACE, reserved */ +# define SPARCV9_IMA (1<<13)/* reserved */ +# define SPARCV9_VIS4 (1<<14)/* reserved */ + +/* + * OPENSSL_sparcv9cap_P[1] is copy of Compatibility Feature Register, + * %asr26, SPARC-T4 and later. There is no SPARCV9_CFR bit in + * OPENSSL_sparcv9cap_P[0], as %cfr copy is sufficient... + */ +# define CFR_AES 0x00000001/* Supports AES opcodes */ +# define CFR_DES 0x00000002/* Supports DES opcodes */ +# define CFR_KASUMI 0x00000004/* Supports KASUMI opcodes */ +# define CFR_CAMELLIA 0x00000008/* Supports CAMELLIA opcodes */ +# define CFR_MD5 0x00000010/* Supports MD5 opcodes */ +# define CFR_SHA1 0x00000020/* Supports SHA1 opcodes */ +# define CFR_SHA256 0x00000040/* Supports SHA256 opcodes */ +# define CFR_SHA512 0x00000080/* Supports SHA512 opcodes */ +# define CFR_MPMUL 0x00000100/* Supports MPMUL opcodes */ +# define CFR_MONTMUL 0x00000200/* Supports MONTMUL opcodes */ +# define CFR_MONTSQR 0x00000400/* Supports MONTSQR opcodes */ +# define CFR_CRC32C 0x00000800/* Supports CRC32C opcodes */ +# define CFR_XMPMUL 0x00001000/* Supports XMPMUL opcodes */ +# define CFR_XMONTMUL 0x00002000/* Supports XMONTMUL opcodes */ +# define CFR_XMONTSQR 0x00004000/* Supports XMONTSQR opcodes */ + +# if defined(OPENSSL_PIC) && !defined(__PIC__) +# define __PIC__ +# endif + +# if defined(__SUNPRO_C) && defined(__sparcv9) && !defined(__arch64__) +# define __arch64__ +# endif + +# define SPARC_PIC_THUNK(reg) \ + .align 32; \ +.Lpic_thunk: \ + jmp %o7 + 8; \ + add %o7, reg, reg; + +# define SPARC_PIC_THUNK_CALL(reg) \ + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), reg; \ + call .Lpic_thunk; \ + or reg, %lo(_GLOBAL_OFFSET_TABLE_+4), reg; + +# if 1 +# define SPARC_SETUP_GOT_REG(reg) SPARC_PIC_THUNK_CALL(reg) +# else +# define SPARC_SETUP_GOT_REG(reg) \ + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), reg; \ + call .+8; \ + or reg,%lo(_GLOBAL_OFFSET_TABLE_+4), reg; \ + add %o7, reg, reg +# endif + +# if defined(__arch64__) + +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + setx SYM, %o7, reg; +# define LDPTR ldx +# define SIZE_T_CC %xcc +# define STACK_FRAME 192 +# define STACK_BIAS 2047 +# define STACK_7thARG (STACK_BIAS+176) + +# else + +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + set SYM, reg; +# define LDPTR ld +# define SIZE_T_CC %icc +# define STACK_FRAME 112 +# define STACK_BIAS 0 +# define STACK_7thARG 92 +# define SPARC_LOAD_ADDRESS_LEAF(SYM,reg,tmp) SPARC_LOAD_ADDRESS(SYM,reg) + +# endif + +# ifdef __PIC__ +# undef SPARC_LOAD_ADDRESS +# undef SPARC_LOAD_ADDRESS_LEAF +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + SPARC_SETUP_GOT_REG(reg); \ + sethi %hi(SYM), %o7; \ + or %o7, %lo(SYM), %o7; \ + LDPTR [reg + %o7], reg; +# endif + +# ifndef SPARC_LOAD_ADDRESS_LEAF +# define SPARC_LOAD_ADDRESS_LEAF(SYM, reg, tmp) \ + mov %o7, tmp; \ + SPARC_LOAD_ADDRESS(SYM, reg) \ + mov tmp, %o7; +# endif + +# ifndef __ASSEMBLER__ +extern unsigned int OPENSSL_sparcv9cap_P[2]; +# endif + +#endif /* OSSL_CRYPTO_SPARC_ARCH_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/sparse_array.h b/deps/openssl/android/x86/usr/local/include/crypto/sparse_array.h new file mode 100644 index 00000000..7ef74283 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/sparse_array.h @@ -0,0 +1,92 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_SPARSE_ARRAY_H +# define OSSL_CRYPTO_SPARSE_ARRAY_H +# pragma once + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define SPARSE_ARRAY_OF(type) struct sparse_array_st_ ## type + +# define DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, ctype) \ + SPARSE_ARRAY_OF(type); \ + static ossl_unused ossl_inline SPARSE_ARRAY_OF(type) * \ + ossl_sa_##type##_new(void) \ + { \ + return (SPARSE_ARRAY_OF(type) *)ossl_sa_new(); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_free(SPARSE_ARRAY_OF(type) *sa) \ + { \ + ossl_sa_free((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_free_leaves(SPARSE_ARRAY_OF(type) *sa) \ + { \ + ossl_sa_free_leaves((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline size_t \ + ossl_sa_##type##_num(const SPARSE_ARRAY_OF(type) *sa) \ + { \ + return ossl_sa_num((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_doall(const SPARSE_ARRAY_OF(type) *sa, \ + void (*leaf)(ossl_uintmax_t, type *)) \ + { \ + ossl_sa_doall((OPENSSL_SA *)sa, \ + (void (*)(ossl_uintmax_t, void *))leaf); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_doall_arg(const SPARSE_ARRAY_OF(type) *sa, \ + void (*leaf)(ossl_uintmax_t, type *, void *), \ + void *arg) \ + { \ + ossl_sa_doall_arg((OPENSSL_SA *)sa, \ + (void (*)(ossl_uintmax_t, void *, void *))leaf, arg); \ + } \ + static ossl_unused ossl_inline ctype \ + *ossl_sa_##type##_get(const SPARSE_ARRAY_OF(type) *sa, ossl_uintmax_t n) \ + { \ + return (type *)ossl_sa_get((OPENSSL_SA *)sa, n); \ + } \ + static ossl_unused ossl_inline int \ + ossl_sa_##type##_set(SPARSE_ARRAY_OF(type) *sa, \ + ossl_uintmax_t n, ctype *val) \ + { \ + return ossl_sa_set((OPENSSL_SA *)sa, n, (void *)val); \ + } \ + SPARSE_ARRAY_OF(type) + +# define DEFINE_SPARSE_ARRAY_OF(type) \ + DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, type) +# define DEFINE_SPARSE_ARRAY_OF_CONST(type) \ + DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, const type) + +typedef struct sparse_array_st OPENSSL_SA; +OPENSSL_SA *ossl_sa_new(void); +void ossl_sa_free(OPENSSL_SA *sa); +void ossl_sa_free_leaves(OPENSSL_SA *sa); +size_t ossl_sa_num(const OPENSSL_SA *sa); +void ossl_sa_doall(const OPENSSL_SA *sa, void (*leaf)(ossl_uintmax_t, void *)); +void ossl_sa_doall_arg(const OPENSSL_SA *sa, + void (*leaf)(ossl_uintmax_t, void *, void *), void *); +void *ossl_sa_get(const OPENSSL_SA *sa, ossl_uintmax_t n); +int ossl_sa_set(OPENSSL_SA *sa, ossl_uintmax_t n, void *val); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/store.h b/deps/openssl/android/x86/usr/local/include/crypto/store.h index 428d3c60..5645fc92 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/store.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/store.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,20 +9,15 @@ #ifndef OSSL_CRYPTO_STORE_H # define OSSL_CRYPTO_STORE_H +# pragma once # include # include # include -/* - * Two functions to read PEM data off an already opened BIO. To be used - * instead of OSSLSTORE_open() and OSSLSTORE_close(). Everything is done - * as usual with OSSLSTORE_load() and OSSLSTORE_eof(). - */ -OSSL_STORE_CTX *ossl_store_attach_pem_bio(BIO *bp, const UI_METHOD *ui_method, - void *ui_data); -int ossl_store_detach_pem_bio(OSSL_STORE_CTX *ctx); - void ossl_store_cleanup_int(void); +int ossl_store_loader_get_number(const OSSL_STORE_LOADER *loader); +int ossl_store_loader_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_store_loader_store_remove_all_provided(const OSSL_PROVIDER *prov); #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/storeerr.h b/deps/openssl/android/x86/usr/local/include/crypto/storeerr.h new file mode 100644 index 00000000..c46d845f --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/storeerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_STOREERR_H +# define OSSL_CRYPTO_STOREERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_STORE_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/tserr.h b/deps/openssl/android/x86/usr/local/include/crypto/tserr.h new file mode 100644 index 00000000..2f34ba31 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/tserr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_TSERR_H +# define OSSL_CRYPTO_TSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_TS + +int ossl_err_load_TS_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/types.h b/deps/openssl/android/x86/usr/local/include/crypto/types.h new file mode 100644 index 00000000..ad17f052 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/types.h @@ -0,0 +1,32 @@ +/* + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* When removal is simulated, we still need the type internally */ + +#ifndef OSSL_CRYPTO_TYPES_H +# define OSSL_CRYPTO_TYPES_H +# pragma once + +# ifdef OPENSSL_NO_DEPRECATED_3_0 +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; +# ifndef OPENSSL_NO_EC +typedef struct ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; +# endif +# ifndef OPENSSL_NO_DSA +typedef struct dsa_st DSA; +# endif +# endif + +# ifndef OPENSSL_NO_EC +typedef struct ecx_key_st ECX_KEY; +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/uierr.h b/deps/openssl/android/x86/usr/local/include/crypto/uierr.h new file mode 100644 index 00000000..789077a8 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/uierr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_UIERR_H +# define OSSL_CRYPTO_UIERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_UI_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/x509.h b/deps/openssl/android/x86/usr/local/include/crypto/x509.h index 243ea74f..631150b7 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/x509.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/x509.h @@ -1,15 +1,21 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include "internal/refcount.h" -#include -#include +#ifndef OSSL_CRYPTO_X509_H +# define OSSL_CRYPTO_X509_H +# pragma once + +# include "internal/refcount.h" +# include +# include +# include +# include "crypto/types.h" /* Internal X509 structures and functions: not for application use */ @@ -73,6 +79,11 @@ struct X509_req_st { ASN1_BIT_STRING *signature; /* signature */ CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; + + /* Set on live certificates for authentication purposes */ + ASN1_OCTET_STRING *distinguishing_id; + OSSL_LIB_CTX *libctx; + char *propq; }; struct X509_crl_info_st { @@ -111,6 +122,9 @@ struct X509_crl_st { const X509_CRL_METHOD *meth; void *meth_data; CRYPTO_RWLOCK *lock; + + OSSL_LIB_CTX *libctx; + char *propq; }; struct x509_revoked_st { @@ -177,7 +191,7 @@ struct x509_st { STACK_OF(DIST_POINT) *crldp; STACK_OF(GENERAL_NAME) *altname; NAME_CONSTRAINTS *nc; -#ifndef OPENSSL_NO_RFC3779 +# ifndef OPENSSL_NO_RFC3779 STACK_OF(IPAddressFamily) *rfc3779_addr; struct ASIdentifiers_st *rfc3779_asid; # endif @@ -185,6 +199,12 @@ struct x509_st { X509_CERT_AUX *aux; CRYPTO_RWLOCK *lock; volatile int ex_cached; + + /* Set on live certificates for authentication purposes */ + ASN1_OCTET_STRING *distinguishing_id; + + OSSL_LIB_CTX *libctx; + char *propq; } /* X509 */ ; /* @@ -193,7 +213,7 @@ struct x509_st { * kept and passed around. */ struct x509_store_ctx_st { /* X509_STORE_CTX */ - X509_STORE *ctx; + X509_STORE *store; /* The following are set by the caller */ /* The cert to check */ X509 *cert; @@ -223,8 +243,11 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check policy status of the chain */ int (*check_policy) (X509_STORE_CTX *ctx); - STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); - STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); + STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, + const X509_NAME *nm); + /* cannot constify 'ctx' param due to lookup_certs_sk() in x509_vfy.c */ + STACK_OF(X509_CRL) *(*lookup_crls) (const X509_STORE_CTX *ctx, + const X509_NAME *nm); int (*cleanup) (X509_STORE_CTX *ctx); /* The following is built up */ /* if 0, rebuild chain */ @@ -255,6 +278,9 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ SSL_DANE *dane; /* signed via bare TA public key, rather than CA certificate */ int bare_ta_signed; + + OSSL_LIB_CTX *libctx; + char *propq; }; /* PKCS#8 private key info structure */ @@ -282,10 +308,63 @@ struct x509_object_st { } data; }; -int a2i_ipadd(unsigned char *ipout, const char *ipasc); -int x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_a2i_ipadd(unsigned char *ipout, const char *ipasc); +int ossl_x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_x509_print_ex_brief(BIO *bio, X509 *cert, unsigned long neg_cflags); +int ossl_x509v3_cache_extensions(X509 *x); +int ossl_x509_init_sig_info(X509 *x); -void x509_init_sig_info(X509 *x); +int ossl_x509_set0_libctx(X509 *x, OSSL_LIB_CTX *libctx, const char *propq); +int ossl_x509_crl_set0_libctx(X509_CRL *x, OSSL_LIB_CTX *libctx, + const char *propq); +int ossl_x509_req_set0_libctx(X509_REQ *x, OSSL_LIB_CTX *libctx, + const char *propq); +int ossl_asn1_item_digest_ex(const ASN1_ITEM *it, const EVP_MD *type, + void *data, unsigned char *md, unsigned int *len, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_x509_add_cert_new(STACK_OF(X509) **sk, X509 *cert, int flags); +int ossl_x509_add_certs_new(STACK_OF(X509) **p_sk, STACK_OF(X509) *certs, + int flags); + +STACK_OF(X509_ATTRIBUTE) *ossl_x509at_dup(const STACK_OF(X509_ATTRIBUTE) *x); + +int ossl_x509_PUBKEY_get0_libctx(OSSL_LIB_CTX **plibctx, const char **ppropq, + const X509_PUBKEY *key); +/* Calculate default key identifier according to RFC 5280 section 4.2.1.2 (1) */ +ASN1_OCTET_STRING *ossl_x509_pubkey_hash(X509_PUBKEY *pubkey); + +X509_PUBKEY *ossl_d2i_X509_PUBKEY_INTERNAL(const unsigned char **pp, + long len, OSSL_LIB_CTX *libctx); +void ossl_X509_PUBKEY_INTERNAL_free(X509_PUBKEY *xpub); + +RSA *ossl_d2i_RSA_PSS_PUBKEY(RSA **a, const unsigned char **pp, long length); +int ossl_i2d_RSA_PSS_PUBKEY(const RSA *a, unsigned char **pp); +# ifndef OPENSSL_NO_DSA +DSA *ossl_d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# endif /* OPENSSL_NO_DSA */ +# ifndef OPENSSL_NO_DH +DH *ossl_d2i_DH_PUBKEY(DH **a, const unsigned char **pp, long length); +int ossl_i2d_DH_PUBKEY(const DH *a, unsigned char **pp); +DH *ossl_d2i_DHx_PUBKEY(DH **a, const unsigned char **pp, long length); +int ossl_i2d_DHx_PUBKEY(const DH *a, unsigned char **pp); +# endif /* OPENSSL_NO_DH */ +# ifndef OPENSSL_NO_EC +ECX_KEY *ossl_d2i_ED25519_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_ED25519_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_ED448_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_ED448_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_X25519_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_X25519_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_X448_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_X448_PUBKEY(const ECX_KEY *a, unsigned char **pp); +# endif /* OPENSSL_NO_EC */ +EVP_PKEY *ossl_d2i_PUBKEY_legacy(EVP_PKEY **a, const unsigned char **pp, + long length); int x509v3_add_len_value_uchar(const char *name, const unsigned char *value, size_t vallen, STACK_OF(CONF_VALUE) **extlist); +#endif /* OSSL_CRYPTO_X509_H */ diff --git a/deps/openssl/android/x86/usr/local/include/crypto/x509err.h b/deps/openssl/android/x86/usr/local/include/crypto/x509err.h new file mode 100644 index 00000000..0a67975b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/x509err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_X509ERR_H +# define OSSL_CRYPTO_X509ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_X509_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/x509v3err.h b/deps/openssl/android/x86/usr/local/include/crypto/x509v3err.h new file mode 100644 index 00000000..66d3ad92 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/crypto/x509v3err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_X509V3ERR_H +# define OSSL_CRYPTO_X509V3ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_X509V3_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H b/deps/openssl/android/x86/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H index c350018a..e57c0eab 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H +++ b/deps/openssl/android/x86/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H b/deps/openssl/android/x86/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H index 9a9c777f..a0139575 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H +++ b/deps/openssl/android/x86/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86/usr/local/include/internal/asn1.h b/deps/openssl/android/x86/usr/local/include/internal/asn1.h new file mode 100644 index 00000000..3143e340 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/asn1.h @@ -0,0 +1,16 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_ASN1_H +# define OSSL_INTERNAL_ASN1_H +# pragma once + +int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb); + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/bio.h b/deps/openssl/android/x86/usr/local/include/internal/bio.h index c343b276..547a73d0 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/bio.h +++ b/deps/openssl/android/x86/usr/local/include/internal/bio.h @@ -1,13 +1,18 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_INTERNAL_BIO_H +# define OSSL_INTERNAL_BIO_H +# pragma once + +# include +# include struct bio_method_st { int type; @@ -31,3 +36,56 @@ void bio_cleanup(void); /* Old style to new style BIO_METHOD conversion functions */ int bwrite_conv(BIO *bio, const char *data, size_t datal, size_t *written); int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); + +/* Changes to these internal BIOs must also update include/openssl/bio.h */ +# define BIO_CTRL_SET_KTLS 72 +# define BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG 74 +# define BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG 75 + +/* + * This is used with socket BIOs: + * BIO_FLAGS_KTLS_TX means we are using ktls with this BIO for sending. + * BIO_FLAGS_KTLS_TX_CTRL_MSG means we are about to send a ctrl message next. + * BIO_FLAGS_KTLS_RX means we are using ktls with this BIO for receiving. + */ +# define BIO_FLAGS_KTLS_TX_CTRL_MSG 0x1000 +# define BIO_FLAGS_KTLS_RX 0x2000 +# define BIO_FLAGS_KTLS_TX 0x4000 + +/* KTLS related controls and flags */ +# define BIO_set_ktls_flag(b, is_tx) \ + BIO_set_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX) +# define BIO_should_ktls_flag(b, is_tx) \ + BIO_test_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX) +# define BIO_set_ktls_ctrl_msg_flag(b) \ + BIO_set_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) +# define BIO_should_ktls_ctrl_msg_flag(b) \ + BIO_test_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) +# define BIO_clear_ktls_ctrl_msg_flag(b) \ + BIO_clear_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) + +# define BIO_set_ktls(b, keyblob, is_tx) \ + BIO_ctrl(b, BIO_CTRL_SET_KTLS, is_tx, keyblob) +# define BIO_set_ktls_ctrl_msg(b, record_type) \ + BIO_ctrl(b, BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG, record_type, NULL) +# define BIO_clear_ktls_ctrl_msg(b) \ + BIO_ctrl(b, BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG, 0, NULL) + +/* Functions to allow the core to offer the CORE_BIO type to providers */ +OSSL_CORE_BIO *ossl_core_bio_new_from_bio(BIO *bio); +OSSL_CORE_BIO *ossl_core_bio_new_file(const char *filename, const char *mode); +OSSL_CORE_BIO *ossl_core_bio_new_mem_buf(const void *buf, int len); +int ossl_core_bio_read_ex(OSSL_CORE_BIO *cb, void *data, size_t dlen, + size_t *readbytes); +int ossl_core_bio_write_ex(OSSL_CORE_BIO *cb, const void *data, size_t dlen, + size_t *written); +int ossl_core_bio_gets(OSSL_CORE_BIO *cb, char *buf, int size); +int ossl_core_bio_puts(OSSL_CORE_BIO *cb, const char *buf); +long ossl_core_bio_ctrl(OSSL_CORE_BIO *cb, int cmd, long larg, void *parg); +int ossl_core_bio_up_ref(OSSL_CORE_BIO *cb); +int ossl_core_bio_free(OSSL_CORE_BIO *cb); +int ossl_core_bio_vprintf(OSSL_CORE_BIO *cb, const char *format, va_list args); + +int ossl_bio_init_core(OSSL_LIB_CTX *libctx, const OSSL_DISPATCH *fns); + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/comp.h b/deps/openssl/android/x86/usr/local/include/internal/comp.h index ac6e38b4..3ad86fc7 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/comp.h +++ b/deps/openssl/android/x86/usr/local/include/internal/comp.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,4 +9,4 @@ #include -void comp_zlib_cleanup_int(void); +void ossl_comp_zlib_cleanup(void); diff --git a/deps/openssl/android/x86/usr/local/include/internal/conf.h b/deps/openssl/android/x86/usr/local/include/internal/conf.h index 163fea8d..8c6c29cd 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/conf.h +++ b/deps/openssl/android/x86/usr/local/include/internal/conf.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,10 +9,11 @@ #ifndef OSSL_INTERNAL_CONF_H # define OSSL_INTERNAL_CONF_H +# pragma once -#include +# include -#define DEFAULT_CONF_MFLAGS \ +# define DEFAULT_CONF_MFLAGS \ (CONF_MFLAGS_DEFAULT_SECTION | \ CONF_MFLAGS_IGNORE_MISSING_FILE | \ CONF_MFLAGS_IGNORE_RETURN_CODES) @@ -23,8 +24,8 @@ struct ossl_init_settings_st { unsigned long flags; }; -int openssl_config_int(const OPENSSL_INIT_SETTINGS *); -void openssl_no_config_int(void); -void conf_modules_free_int(void); +int ossl_config_int(const OPENSSL_INIT_SETTINGS *); +void ossl_no_config_int(void); +void ossl_config_modules_free(void); #endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/constant_time.h b/deps/openssl/android/x86/usr/local/include/internal/constant_time.h index 6600a1d7..0ed6f823 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/constant_time.h +++ b/deps/openssl/android/x86/usr/local/include/internal/constant_time.h @@ -1,7 +1,7 @@ /* - * Copyright 2014-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_CONSTANT_TIME_H # define OSSL_INTERNAL_CONSTANT_TIME_H +# pragma once # include # include @@ -181,6 +182,11 @@ static ossl_inline uint32_t constant_time_is_zero_32(uint32_t a) return constant_time_msb_32(~a & (a - 1)); } +static ossl_inline uint64_t constant_time_is_zero_64(uint64_t a) +{ + return constant_time_msb_64(~a & (a - 1)); +} + static ossl_inline unsigned int constant_time_eq(unsigned int a, unsigned int b) { @@ -352,6 +358,34 @@ static ossl_inline void constant_time_cond_swap_64(uint64_t mask, uint64_t *a, *b ^= xor; } +/* + * mask must be 0xFF or 0x00. + * "constant time" is per len. + * + * if (mask) { + * unsigned char tmp[len]; + * + * memcpy(tmp, a, len); + * memcpy(a, b); + * memcpy(b, tmp); + * } + */ +static ossl_inline void constant_time_cond_swap_buff(unsigned char mask, + unsigned char *a, + unsigned char *b, + size_t len) +{ + size_t i; + unsigned char tmp; + + for (i = 0; i < len; i++) { + tmp = a[i] ^ b[i]; + tmp &= mask; + a[i] ^= tmp; + b[i] ^= tmp; + } +} + /* * table is a two dimensional array of bytes. Each row has rowsize elements. * Copies row number idx into out. rowsize and numrows are not considered diff --git a/deps/openssl/android/x86/usr/local/include/internal/core.h b/deps/openssl/android/x86/usr/local/include/internal/core.h new file mode 100644 index 00000000..03adb66b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/core.h @@ -0,0 +1,71 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_CORE_H +# define OSSL_INTERNAL_CORE_H +# pragma once + +/* + * namespaces: + * + * ossl_method_ Core Method API + */ + +/* + * construct an arbitrary method from a dispatch table found by looking + * up a match for the < operation_id, name, property > combination. + * constructor and destructor are the constructor and destructor for that + * arbitrary object. + * + * These objects are normally cached, unless the provider says not to cache. + * However, force_cache can be used to force caching whatever the provider + * says (for example, because the application knows better). + */ +typedef struct ossl_method_construct_method_st { + /* Get a temporary store */ + void *(*get_tmp_store)(void *data); + /* Reserve the appropriate method store */ + int (*lock_store)(void *store, void *data); + /* Unreserve the appropriate method store */ + int (*unlock_store)(void *store, void *data); + /* Get an already existing method from a store */ + void *(*get)(void *store, const OSSL_PROVIDER **prov, void *data); + /* Store a method in a store */ + int (*put)(void *store, void *method, const OSSL_PROVIDER *prov, + const char *name, const char *propdef, void *data); + /* Construct a new method */ + void *(*construct)(const OSSL_ALGORITHM *algodef, OSSL_PROVIDER *prov, + void *data); + /* Destruct a method */ + void (*destruct)(void *method, void *data); +} OSSL_METHOD_CONSTRUCT_METHOD; + +void *ossl_method_construct(OSSL_LIB_CTX *ctx, int operation_id, + OSSL_PROVIDER **provider_rw, int force_cache, + OSSL_METHOD_CONSTRUCT_METHOD *mcm, void *mcm_data); + +void ossl_algorithm_do_all(OSSL_LIB_CTX *libctx, int operation_id, + OSSL_PROVIDER *provider, + int (*pre)(OSSL_PROVIDER *, int operation_id, + int no_store, void *data, int *result), + int (*reserve_store)(int no_store, void *data), + void (*fn)(OSSL_PROVIDER *provider, + const OSSL_ALGORITHM *algo, + int no_store, void *data), + int (*unreserve_store)(void *data), + int (*post)(OSSL_PROVIDER *, int operation_id, + int no_store, void *data, int *result), + void *data); +char *ossl_algorithm_get1_first_name(const OSSL_ALGORITHM *algo); + +__owur int ossl_lib_ctx_write_lock(OSSL_LIB_CTX *ctx); +__owur int ossl_lib_ctx_read_lock(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_unlock(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_child(OSSL_LIB_CTX *ctx); +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/cryptlib.h b/deps/openssl/android/x86/usr/local/include/internal/cryptlib.h index 6e7291ae..ac50eb3b 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/cryptlib.h +++ b/deps/openssl/android/x86/usr/local/include/internal/cryptlib.h @@ -1,7 +1,7 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,19 +9,22 @@ #ifndef OSSL_INTERNAL_CRYPTLIB_H # define OSSL_INTERNAL_CRYPTLIB_H +# pragma once # include # include # ifdef OPENSSL_USE_APPLINK -# undef BIO_FLAGS_UPLINK -# define BIO_FLAGS_UPLINK 0x8000 +# define BIO_FLAGS_UPLINK_INTERNAL 0x8000 # include "ms/uplink.h" +# else +# define BIO_FLAGS_UPLINK_INTERNAL 0 # endif # include # include # include +# include # include # include "internal/nelem.h" @@ -42,14 +45,21 @@ __owur static ossl_inline int ossl_assert_int(int expr, const char *exprstr, #endif -typedef struct ex_callback_st EX_CALLBACK; +/* + * Use this inside a union with the field that needs to be aligned to a + * reasonable boundary for the platform. The most pessimistic alignment + * of the listed types will be used by the compiler. + */ +# define OSSL_UNION_ALIGN \ + double align; \ + ossl_uintmax_t align_int; \ + void *align_ptr +typedef struct ex_callback_st EX_CALLBACK; DEFINE_STACK_OF(EX_CALLBACK) -typedef struct app_mem_info_st APP_INFO; - typedef struct mem_st MEM; -DEFINE_LHASH_OF(MEM); +DEFINE_LHASH_OF_EX(MEM); # define OPENSSL_CONF "openssl.cnf" @@ -76,9 +86,14 @@ DEFINE_LHASH_OF(MEM); # define HEX_SIZE(type) (sizeof(type)*2) void OPENSSL_cpuid_setup(void); +#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) extern unsigned int OPENSSL_ia32cap_P[]; +#endif void OPENSSL_showfatal(const char *fmta, ...); -void crypto_cleanup_all_ex_data_int(void); +int ossl_do_ex_data_init(OSSL_LIB_CTX *ctx); +void ossl_crypto_cleanup_all_ex_data_int(OSSL_LIB_CTX *ctx); int openssl_init_fork_handlers(void); int openssl_get_fork_id(void); @@ -96,4 +111,134 @@ uint32_t OPENSSL_rdtsc(void); size_t OPENSSL_instrument_bus(unsigned int *, size_t); size_t OPENSSL_instrument_bus2(unsigned int *, size_t, size_t); +/* ex_data structures */ + +/* + * Each structure type (sometimes called a class), that supports + * exdata has a stack of callbacks for each instance. + */ +struct ex_callback_st { + long argl; /* Arbitrary long */ + void *argp; /* Arbitrary void * */ + int priority; /* Priority ordering for freeing */ + CRYPTO_EX_new *new_func; + CRYPTO_EX_free *free_func; + CRYPTO_EX_dup *dup_func; +}; + +/* + * The state for each class. This could just be a typedef, but + * a structure allows future changes. + */ +typedef struct ex_callbacks_st { + STACK_OF(EX_CALLBACK) *meth; +} EX_CALLBACKS; + +typedef struct ossl_ex_data_global_st { + CRYPTO_RWLOCK *ex_data_lock; + EX_CALLBACKS ex_data[CRYPTO_EX_INDEX__COUNT]; +} OSSL_EX_DATA_GLOBAL; + + +/* OSSL_LIB_CTX */ + +# define OSSL_LIB_CTX_PROVIDER_STORE_RUN_ONCE_INDEX 0 +# define OSSL_LIB_CTX_DEFAULT_METHOD_STORE_RUN_ONCE_INDEX 1 +# define OSSL_LIB_CTX_METHOD_STORE_RUN_ONCE_INDEX 2 +# define OSSL_LIB_CTX_MAX_RUN_ONCE 3 + +# define OSSL_LIB_CTX_EVP_METHOD_STORE_INDEX 0 +# define OSSL_LIB_CTX_PROVIDER_STORE_INDEX 1 +# define OSSL_LIB_CTX_PROPERTY_DEFN_INDEX 2 +# define OSSL_LIB_CTX_PROPERTY_STRING_INDEX 3 +# define OSSL_LIB_CTX_NAMEMAP_INDEX 4 +# define OSSL_LIB_CTX_DRBG_INDEX 5 +# define OSSL_LIB_CTX_DRBG_NONCE_INDEX 6 +# define OSSL_LIB_CTX_RAND_CRNGT_INDEX 7 +# ifdef FIPS_MODULE +# define OSSL_LIB_CTX_THREAD_EVENT_HANDLER_INDEX 8 +# endif +# define OSSL_LIB_CTX_FIPS_PROV_INDEX 9 +# define OSSL_LIB_CTX_ENCODER_STORE_INDEX 10 +# define OSSL_LIB_CTX_DECODER_STORE_INDEX 11 +# define OSSL_LIB_CTX_SELF_TEST_CB_INDEX 12 +# define OSSL_LIB_CTX_BIO_PROV_INDEX 13 +# define OSSL_LIB_CTX_GLOBAL_PROPERTIES 14 +# define OSSL_LIB_CTX_STORE_LOADER_STORE_INDEX 15 +# define OSSL_LIB_CTX_PROVIDER_CONF_INDEX 16 +# define OSSL_LIB_CTX_BIO_CORE_INDEX 17 +# define OSSL_LIB_CTX_CHILD_PROVIDER_INDEX 18 +# define OSSL_LIB_CTX_MAX_INDEXES 19 + +OSSL_LIB_CTX *ossl_lib_ctx_get_concrete(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_default(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_global_default(OSSL_LIB_CTX *ctx); + +/* Functions to retrieve pointers to data by index */ +void *ossl_lib_ctx_get_data(OSSL_LIB_CTX *, int /* index */); + +void ossl_lib_ctx_default_deinit(void); +OSSL_EX_DATA_GLOBAL *ossl_lib_ctx_get_ex_data_global(OSSL_LIB_CTX *ctx); + +const char *ossl_lib_ctx_get_descriptor(OSSL_LIB_CTX *libctx); + +OSSL_LIB_CTX *ossl_crypto_ex_data_get_ossl_lib_ctx(const CRYPTO_EX_DATA *ad); +int ossl_crypto_new_ex_data_ex(OSSL_LIB_CTX *ctx, int class_index, void *obj, + CRYPTO_EX_DATA *ad); +int ossl_crypto_get_ex_new_index_ex(OSSL_LIB_CTX *ctx, int class_index, + long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func, + int priority); +int ossl_crypto_free_ex_index_ex(OSSL_LIB_CTX *ctx, int class_index, int idx); + +/* Function for simple binary search */ + +/* Flags */ +# define OSSL_BSEARCH_VALUE_ON_NOMATCH 0x01 +# define OSSL_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 + +const void *ossl_bsearch(const void *key, const void *base, int num, + int size, int (*cmp) (const void *, const void *), + int flags); + +char *ossl_sk_ASN1_UTF8STRING2text(STACK_OF(ASN1_UTF8STRING) *text, + const char *sep, size_t max_len); +char *ossl_ipaddr_to_asc(unsigned char *p, int len); + +char *ossl_buf2hexstr_sep(const unsigned char *buf, long buflen, char sep); +unsigned char *ossl_hexstr2buf_sep(const char *str, long *buflen, + const char sep); + +static ossl_inline int ossl_ends_with_dirsep(const char *path) +{ + if (*path != '\0') + path += strlen(path) - 1; +# if defined __VMS + if (*path == ']' || *path == '>' || *path == ':') + return 1; +# elif defined _WIN32 + if (*path == '\\') + return 1; +# endif + return *path == '/'; +} + +static ossl_inline int ossl_is_absolute_path(const char *path) +{ +# if defined __VMS + if (strchr(path, ':') != NULL + || ((path[0] == '[' || path[0] == '<') + && path[1] != '.' && path[1] != '-' + && path[1] != ']' && path[1] != '>')) + return 1; +# elif defined _WIN32 + if (path[0] == '\\' + || (path[0] != '\0' && path[1] == ':')) + return 1; +# endif + return path[0] == '/'; +} + #endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/dane.h b/deps/openssl/android/x86/usr/local/include/internal/dane.h index 7a39bd7d..a3d78a7f 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/dane.h +++ b/deps/openssl/android/x86/usr/local/include/internal/dane.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,8 +9,9 @@ #ifndef OSSL_INTERNAL_DANE_H #define OSSL_INTERNAL_DANE_H +# pragma once -#include +# include /*- * Certificate usages: diff --git a/deps/openssl/android/x86/usr/local/include/internal/deprecated.h b/deps/openssl/android/x86/usr/local/include/internal/deprecated.h new file mode 100644 index 00000000..a313a015 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/deprecated.h @@ -0,0 +1,30 @@ +/* + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file should be included by internal code that needs to use APIs + * that have been deprecated for public use, but where those symbols will still + * be available internally. For example the EVP and provider code needs to use + * low level APIs that are otherwise deprecated. + * + * This header *must* be the first OpenSSL header included by a source file. + */ + +#ifndef OSSL_INTERNAL_DEPRECATED_H +# define OSSL_INTERNAL_DEPRECATED_H +# pragma once + +# include + +# undef OPENSSL_NO_DEPRECATED +# define OPENSSL_SUPPRESS_DEPRECATED + +# include + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/der.h b/deps/openssl/android/x86/usr/local/include/internal/der.h new file mode 100644 index 00000000..f23fabc2 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/der.h @@ -0,0 +1,88 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include +#include "internal/packet.h" + +/* + * NOTE: X.690 numbers the identifier octet bits 1 to 8. + * We use the same numbering in comments here. + */ + +/* Well known primitive tags */ + +/* + * DER UNIVERSAL tags, occupying bits 1-5 in the DER identifier byte + * These are only valid for the UNIVERSAL class. With the other classes, + * these bits have a different meaning. + */ +#define DER_P_EOC 0 /* BER End Of Contents tag */ +#define DER_P_BOOLEAN 1 +#define DER_P_INTEGER 2 +#define DER_P_BIT_STRING 3 +#define DER_P_OCTET_STRING 4 +#define DER_P_NULL 5 +#define DER_P_OBJECT 6 +#define DER_P_OBJECT_DESCRIPTOR 7 +#define DER_P_EXTERNAL 8 +#define DER_P_REAL 9 +#define DER_P_ENUMERATED 10 +#define DER_P_UTF8STRING 12 +#define DER_P_SEQUENCE 16 +#define DER_P_SET 17 +#define DER_P_NUMERICSTRING 18 +#define DER_P_PRINTABLESTRING 19 +#define DER_P_T61STRING 20 +#define DER_P_VIDEOTEXSTRING 21 +#define DER_P_IA5STRING 22 +#define DER_P_UTCTIME 23 +#define DER_P_GENERALIZEDTIME 24 +#define DER_P_GRAPHICSTRING 25 +#define DER_P_ISO64STRING 26 +#define DER_P_GENERALSTRING 27 +#define DER_P_UNIVERSALSTRING 28 +#define DER_P_BMPSTRING 30 + +/* DER Flags, occupying bit 6 in the DER identifier byte */ +#define DER_F_PRIMITIVE 0x00 +#define DER_F_CONSTRUCTED 0x20 + +/* DER classes tags, occupying bits 7-8 in the DER identifier byte */ +#define DER_C_UNIVERSAL 0x00 +#define DER_C_APPLICATION 0x40 +#define DER_C_CONTEXT 0x80 +#define DER_C_PRIVATE 0xC0 + +/* + * Run-time constructors. + * + * They all construct DER backwards, so care should be taken to use them + * that way. + */ + +/* This can be used for all items that don't have a context */ +#define DER_NO_CONTEXT -1 + +int ossl_DER_w_precompiled(WPACKET *pkt, int tag, + const unsigned char *precompiled, + size_t precompiled_n); + +int ossl_DER_w_boolean(WPACKET *pkt, int tag, int b); +int ossl_DER_w_uint32(WPACKET *pkt, int tag, uint32_t v); +int ossl_DER_w_bn(WPACKET *pkt, int tag, const BIGNUM *v); +int ossl_DER_w_null(WPACKET *pkt, int tag); +int ossl_DER_w_octet_string(WPACKET *pkt, int tag, + const unsigned char *data, size_t data_n); +int ossl_DER_w_octet_string_uint32(WPACKET *pkt, int tag, uint32_t value); + +/* + * All constructors for constructed elements have a begin and a end function + */ +int ossl_DER_w_begin_sequence(WPACKET *pkt, int tag); +int ossl_DER_w_end_sequence(WPACKET *pkt, int tag); diff --git a/deps/openssl/android/x86/usr/local/include/internal/dso.h b/deps/openssl/android/x86/usr/local/include/internal/dso.h index c57c0c40..160ddb98 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/dso.h +++ b/deps/openssl/android/x86/usr/local/include/internal/dso.h @@ -1,7 +1,7 @@ /* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_DSO_H # define OSSL_INTERNAL_DSO_H +# pragma once # include # include "internal/dsoerr.h" @@ -160,6 +161,4 @@ DSO *DSO_dsobyaddr(void *addr, int flags); */ void *DSO_global_lookup(const char *name); -int ERR_load_DSO_strings(void); - #endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/dsoerr.h b/deps/openssl/android/x86/usr/local/include/internal/dsoerr.h index 94d642a2..b1719e83 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/dsoerr.h +++ b/deps/openssl/android/x86/usr/local/include/internal/dsoerr.h @@ -1,8 +1,8 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,73 +10,39 @@ #ifndef OSSL_INTERNAL_DSOERR_H # define OSSL_INTERNAL_DSOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include # ifdef __cplusplus -extern "C" +extern "C" { # endif -int ERR_load_DSO_strings(void); -/* - * DSO function codes. - */ -# define DSO_F_DLFCN_BIND_FUNC 100 -# define DSO_F_DLFCN_LOAD 102 -# define DSO_F_DLFCN_MERGER 130 -# define DSO_F_DLFCN_NAME_CONVERTER 123 -# define DSO_F_DLFCN_UNLOAD 103 -# define DSO_F_DL_BIND_FUNC 104 -# define DSO_F_DL_LOAD 106 -# define DSO_F_DL_MERGER 131 -# define DSO_F_DL_NAME_CONVERTER 124 -# define DSO_F_DL_UNLOAD 107 -# define DSO_F_DSO_BIND_FUNC 108 -# define DSO_F_DSO_CONVERT_FILENAME 126 -# define DSO_F_DSO_CTRL 110 -# define DSO_F_DSO_FREE 111 -# define DSO_F_DSO_GET_FILENAME 127 -# define DSO_F_DSO_GLOBAL_LOOKUP 139 -# define DSO_F_DSO_LOAD 112 -# define DSO_F_DSO_MERGE 132 -# define DSO_F_DSO_NEW_METHOD 113 -# define DSO_F_DSO_PATHBYADDR 105 -# define DSO_F_DSO_SET_FILENAME 129 -# define DSO_F_DSO_UP_REF 114 -# define DSO_F_VMS_BIND_SYM 115 -# define DSO_F_VMS_LOAD 116 -# define DSO_F_VMS_MERGER 133 -# define DSO_F_VMS_UNLOAD 117 -# define DSO_F_WIN32_BIND_FUNC 101 -# define DSO_F_WIN32_GLOBALLOOKUP 142 -# define DSO_F_WIN32_JOINER 135 -# define DSO_F_WIN32_LOAD 120 -# define DSO_F_WIN32_MERGER 134 -# define DSO_F_WIN32_NAME_CONVERTER 125 -# define DSO_F_WIN32_PATHBYADDR 109 -# define DSO_F_WIN32_SPLITTER 136 -# define DSO_F_WIN32_UNLOAD 121 +int ossl_err_load_DSO_strings(void); /* * DSO reason codes. */ -# define DSO_R_CTRL_FAILED 100 -# define DSO_R_DSO_ALREADY_LOADED 110 -# define DSO_R_EMPTY_FILE_STRUCTURE 113 -# define DSO_R_FAILURE 114 -# define DSO_R_FILENAME_TOO_BIG 101 -# define DSO_R_FINISH_FAILED 102 -# define DSO_R_INCORRECT_FILE_SYNTAX 115 -# define DSO_R_LOAD_FAILED 103 -# define DSO_R_NAME_TRANSLATION_FAILED 109 -# define DSO_R_NO_FILENAME 111 -# define DSO_R_NULL_HANDLE 104 -# define DSO_R_SET_FILENAME_FAILED 112 -# define DSO_R_STACK_ERROR 105 -# define DSO_R_SYM_FAILURE 106 -# define DSO_R_UNLOAD_FAILED 107 -# define DSO_R_UNSUPPORTED 108 +# define DSO_R_CTRL_FAILED 100 +# define DSO_R_DSO_ALREADY_LOADED 110 +# define DSO_R_EMPTY_FILE_STRUCTURE 113 +# define DSO_R_FAILURE 114 +# define DSO_R_FILENAME_TOO_BIG 101 +# define DSO_R_FINISH_FAILED 102 +# define DSO_R_INCORRECT_FILE_SYNTAX 115 +# define DSO_R_LOAD_FAILED 103 +# define DSO_R_NAME_TRANSLATION_FAILED 109 +# define DSO_R_NO_FILENAME 111 +# define DSO_R_NULL_HANDLE 104 +# define DSO_R_SET_FILENAME_FAILED 112 +# define DSO_R_STACK_ERROR 105 +# define DSO_R_SYM_FAILURE 106 +# define DSO_R_UNLOAD_FAILED 107 +# define DSO_R_UNSUPPORTED 108 + +# ifdef __cplusplus +} +# endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/e_os.h b/deps/openssl/android/x86/usr/local/include/internal/e_os.h new file mode 100644 index 00000000..7fdc3899 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/e_os.h @@ -0,0 +1,432 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_E_OS_H +# define OSSL_E_OS_H + +# include +# include + +# include +# include +# include "internal/numbers.h" /* Ensure the definition of SIZE_MAX */ + +/* + * contains what we can justify to make visible to the + * outside; this file e_os.h is not part of the exported interface. + */ + +# if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) +# define NO_CHMOD +# define NO_SYSLOG +# endif + +# define get_last_sys_error() errno +# define clear_sys_error() errno=0 +# define set_sys_error(e) errno=(e) + +/******************************************************************** + The Microsoft section + ********************************************************************/ +# if defined(OPENSSL_SYS_WIN32) && !defined(WIN32) +# define WIN32 +# endif +# if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +# endif +# if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS) +# define MSDOS +# endif + +# ifdef WIN32 +# undef get_last_sys_error +# undef clear_sys_error +# undef set_sys_error +# define get_last_sys_error() GetLastError() +# define clear_sys_error() SetLastError(0) +# define set_sys_error(e) SetLastError(e) +# if !defined(WINNT) +# define WIN_CONSOLE_BUG +# endif +# else +# endif + +# if (defined(WINDOWS) || defined(MSDOS)) + +# ifdef __DJGPP__ +# include +# include +# define _setmode setmode +# define _O_TEXT O_TEXT +# define _O_BINARY O_BINARY +# undef DEVRANDOM_EGD /* Neither MS-DOS nor FreeDOS provide 'egd' sockets. */ +# undef DEVRANDOM +# define DEVRANDOM "/dev/urandom\x24" +# endif /* __DJGPP__ */ + +# ifndef S_IFDIR +# define S_IFDIR _S_IFDIR +# endif + +# ifndef S_IFMT +# define S_IFMT _S_IFMT +# endif + +# if !defined(WINNT) && !defined(__DJGPP__) +# define NO_SYSLOG +# endif + +# ifdef WINDOWS +# if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT) + /* + * Defining _WIN32_WINNT here in e_os.h implies certain "discipline." + * Most notably we ought to check for availability of each specific + * routine that was introduced after denoted _WIN32_WINNT with + * GetProcAddress(). Normally newer functions are masked with higher + * _WIN32_WINNT in SDK headers. So that if you wish to use them in + * some module, you'd need to override _WIN32_WINNT definition in + * the target module in order to "reach for" prototypes, but replace + * calls to new functions with indirect calls. Alternatively it + * might be possible to achieve the goal by /DELAYLOAD-ing .DLLs + * and check for current OS version instead. + */ +# define _WIN32_WINNT 0x0501 +# endif +# if defined(_WIN32_WINNT) || defined(_WIN32_WCE) + /* + * Just like defining _WIN32_WINNT including winsock2.h implies + * certain "discipline" for maintaining [broad] binary compatibility. + * As long as structures are invariant among Winsock versions, + * it's sufficient to check for specific Winsock2 API availability + * at run-time [DSO_global_lookup is recommended]... + */ +# include +# include + /* + * Clang-based C++Builder 10.3.3 toolchains cannot find C inline + * definitions at link-time. This header defines WspiapiLoad() as an + * __inline function. https://quality.embarcadero.com/browse/RSP-33806 + */ +# if !defined(__BORLANDC__) || !defined(__clang__) +# include +# endif + /* yes, they have to be #included prior to */ +# endif +# include +# include +# include +# include +# if defined(_WIN32_WCE) && !defined(EACCES) +# define EACCES 13 +# endif +# include +# ifdef _WIN64 +# define strlen(s) _strlen31(s) +/* cut strings to 2GB */ +static __inline unsigned int _strlen31(const char *str) +{ + unsigned int len = 0; + while (*str && len < 0x80000000U) + str++, len++; + return len & 0x7FFFFFFF; +} +# endif +# include +# if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin) +# if _MSC_VER>=1300 && _MSC_VER<1600 +# undef stdin +# undef stdout +# undef stderr +FILE *__iob_func(); +# define stdin (&__iob_func()[0]) +# define stdout (&__iob_func()[1]) +# define stderr (&__iob_func()[2]) +# endif +# endif +# endif +# include +# include + +# ifdef OPENSSL_SYS_WINCE +# define OPENSSL_NO_POSIX_IO +# endif + +# define EXIT(n) exit(n) +# define LIST_SEPARATOR_CHAR ';' +# ifndef W_OK +# define W_OK 2 +# endif +# ifndef R_OK +# define R_OK 4 +# endif +# ifdef OPENSSL_SYS_WINCE +# define DEFAULT_HOME "" +# else +# define DEFAULT_HOME "C:" +# endif + +/* Avoid Visual Studio 13 GetVersion deprecated problems */ +# if defined(_MSC_VER) && _MSC_VER>=1800 +# define check_winnt() (1) +# define check_win_minplat(x) (1) +# else +# define check_winnt() (GetVersion() < 0x80000000) +# define check_win_minplat(x) (LOBYTE(LOWORD(GetVersion())) >= (x)) +# endif + +# else /* The non-microsoft world */ + +# if defined(OPENSSL_SYS_VXWORKS) +# include +# else +# include +# endif + +# ifdef OPENSSL_SYS_VMS +# define VMS 1 + /* + * some programs don't include stdlib, so exit() and others give implicit + * function warnings + */ +# include +# if defined(__DECC) +# include +# else +# include +# endif +# define LIST_SEPARATOR_CHAR ',' + /* We don't have any well-defined random devices on VMS, yet... */ +# undef DEVRANDOM + /*- + We need to do this since VMS has the following coding on status codes: + + Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ... + The important thing to know is that odd numbers are considered + good, while even ones are considered errors. + Bits 3-15: actual status number + Bits 16-27: facility number. 0 is considered "unknown" + Bits 28-31: control bits. If bit 28 is set, the shell won't try to + output the message (which, for random codes, just looks ugly) + + So, what we do here is to change 0 to 1 to get the default success status, + and everything else is shifted up to fit into the status number field, and + the status is tagged as an error, which is what is wanted here. + + Finally, we add the VMS C facility code 0x35a000, because there are some + programs, such as Perl, that will reinterpret the code back to something + POSIX. 'man perlvms' explains it further. + + NOTE: the perlvms manual wants to turn all codes 2 to 255 into success + codes (status type = 1). I couldn't disagree more. Fortunately, the + status type doesn't seem to bother Perl. + -- Richard Levitte + */ +# define EXIT(n) exit((n) ? (((n) << 3) | 2 | 0x10000000 | 0x35a000) : 1) + +# define DEFAULT_HOME "SYS$LOGIN:" + +# else + /* !defined VMS */ +# include +# include +# ifdef OPENSSL_SYS_WIN32_CYGWIN +# include +# include +# endif + +# define LIST_SEPARATOR_CHAR ':' +# define EXIT(n) exit(n) +# endif + +# endif + +/***********************************************/ + +# if defined(OPENSSL_SYS_WINDOWS) +# if (_MSC_VER >= 1310) && !defined(_WIN32_WCE) +# define open _open +# define fdopen _fdopen +# define close _close +# ifndef strdup +# define strdup _strdup +# endif +# define unlink _unlink +# define fileno _fileno +# endif +# else +# include +# endif + +/* vxworks */ +# if defined(OPENSSL_SYS_VXWORKS) +# include +# include +# include +# include +# include +# include + +# define TTY_STRUCT int +# define sleep(a) taskDelay((a) * sysClkRateGet()) + +/* + * NOTE: these are implemented by helpers in database app! if the database is + * not linked, we need to implement them elsewhere + */ +struct hostent *gethostbyname(const char *name); +struct hostent *gethostbyaddr(const char *addr, int length, int type); +struct servent *getservbyname(const char *name, const char *proto); + +# endif +/* end vxworks */ + +/* system-specific variants defining ossl_sleep() */ +#if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__) +# include +static ossl_inline void ossl_sleep(unsigned long millis) +{ +# ifdef OPENSSL_SYS_VXWORKS + struct timespec ts; + ts.tv_sec = (long int) (millis / 1000); + ts.tv_nsec = (long int) (millis % 1000) * 1000000ul; + nanosleep(&ts, NULL); +# elif defined(__TANDEM) +# if !defined(_REENTRANT) +# include + /* HPNS does not support usleep for non threaded apps */ + PROCESS_DELAY_(millis * 1000); +# elif defined(_SPT_MODEL_) +# include +# include + usleep(millis * 1000); +# else + usleep(millis * 1000); +# endif +# else + usleep(millis * 1000); +# endif +} +#elif defined(_WIN32) +# include +static ossl_inline void ossl_sleep(unsigned long millis) +{ + Sleep(millis); +} +#else +/* Fallback to a busy wait */ +static ossl_inline void ossl_sleep(unsigned long millis) +{ + struct timeval start, now; + unsigned long elapsedms; + + gettimeofday(&start, NULL); + do { + gettimeofday(&now, NULL); + elapsedms = (((now.tv_sec - start.tv_sec) * 1000000) + + now.tv_usec - start.tv_usec) / 1000; + } while (elapsedms < millis); +} +#endif /* defined OPENSSL_SYS_UNIX */ + +/* ----------------------------- HP NonStop -------------------------------- */ +/* Required to support platform variant without getpid() and pid_t. */ +# if defined(__TANDEM) && defined(_GUARDIAN_TARGET) +# include +# include +# define getservbyname(name,proto) getservbyname((char*)name,proto) +# define gethostbyname(name) gethostbyname((char*)name) +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# ifdef NO_GETPID +inline int nssgetpid(); +# ifndef NSSGETPID_MACRO +# define NSSGETPID_MACRO +# include +# include + inline int nssgetpid() + { + short phandle[10]={0}; + union pseudo_pid { + struct { + short cpu; + short pin; + } cpu_pin ; + int ppid; + } ppid = { 0 }; + PROCESSHANDLE_GETMINE_(phandle); + PROCESSHANDLE_DECOMPOSE_(phandle, &ppid.cpu_pin.cpu, &ppid.cpu_pin.pin); + return ppid.ppid; + } +# define getpid(a) nssgetpid(a) +# endif /* NSSGETPID_MACRO */ +# endif /* NO_GETPID */ +/*# define setsockopt(a,b,c,d,f) setsockopt(a,b,c,(char*)d,f)*/ +/*# define getsockopt(a,b,c,d,f) getsockopt(a,b,c,(char*)d,f)*/ +/*# define connect(a,b,c) connect(a,(struct sockaddr *)b,c)*/ +/*# define bind(a,b,c) bind(a,(struct sockaddr *)b,c)*/ +/*# define sendto(a,b,c,d,e,f) sendto(a,(char*)b,c,d,(struct sockaddr *)e,f)*/ +# if defined(OPENSSL_THREADS) && !defined(_PUT_MODEL_) + /* + * HPNS SPT threads + */ +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# undef close +# define close spt_close +/* +# define get_last_socket_error() errno +# define clear_socket_error() errno=0 +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# define closesocket(s) close(s) +# define readsocket(s,b,n) read((s),(char*)(b),(n)) +# define writesocket(s,b,n) write((s),(char*)(b),(n) +*/ +# define accept(a,b,c) accept(a,(struct sockaddr *)b,c) +# define recvfrom(a,b,c,d,e,f) recvfrom(a,b,(socklen_t)c,d,e,f) +# endif +# endif + +# ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION +# define CRYPTO_memcmp memcmp +# endif + +# ifndef OPENSSL_NO_SECURE_MEMORY + /* unistd.h defines _POSIX_VERSION */ +# if (defined(OPENSSL_SYS_UNIX) \ + && ( (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) \ + || defined(__sun) || defined(__hpux) || defined(__sgi) \ + || defined(__osf__) )) \ + || defined(_WIN32) + /* secure memory is implemented */ +# else +# define OPENSSL_NO_SECURE_MEMORY +# endif +# endif + +/* + * str[n]casecmp_l is defined in POSIX 2008-01. Value is taken accordingly + * https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html + * There are also equivalent functions on Windows. + * There is no locale_t on NONSTOP. + */ +# if defined(OPENSSL_SYS_WINDOWS) +# define locale_t _locale_t +# define freelocale _free_locale +# define strcasecmp_l _stricmp_l +# define strncasecmp_l _strnicmp_l +# define strcasecmp _stricmp +# define strncasecmp _strnicmp +# elif !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200809L \ + || defined(OPENSSL_SYS_TANDEM) +# ifndef OPENSSL_NO_LOCALE +# define OPENSSL_NO_LOCALE +# endif +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/endian.h b/deps/openssl/android/x86/usr/local/include/internal/endian.h new file mode 100644 index 00000000..8b34e03e --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/endian.h @@ -0,0 +1,51 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_ENDIAN_H +# define OSSL_INTERNAL_ENDIAN_H +# pragma once + +/* + * IS_LITTLE_ENDIAN and IS_BIG_ENDIAN can be used to detect the endiannes + * at compile time. To use it, DECLARE_IS_ENDIAN must be used to declare + * a variable. + * + * L_ENDIAN and B_ENDIAN can be used at preprocessor time. They can be set + * in the configarion using the lib_cppflags variable. If neither is + * set, it will fall back to code works with either endianness. + */ + +# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) +# define DECLARE_IS_ENDIAN const int ossl_is_little_endian = __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +# define IS_LITTLE_ENDIAN (ossl_is_little_endian) +# define IS_BIG_ENDIAN (!ossl_is_little_endian) +# if defined(L_ENDIAN) && (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) +# error "L_ENDIAN defined on a big endian machine" +# endif +# if defined(B_ENDIAN) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +# error "B_ENDIAN defined on a little endian machine" +# endif +# if !defined(L_ENDIAN) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +# define L_ENDIAN +# endif +# if !defined(B_ENDIAN) && (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) +# define B_ENDIAN +# endif +# else +# define DECLARE_IS_ENDIAN \ + const union { \ + long one; \ + char little; \ + } ossl_is_endian = { 1 } + +# define IS_LITTLE_ENDIAN (ossl_is_endian.little != 0) +# define IS_BIG_ENDIAN (ossl_is_endian.little == 0) +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/err.h b/deps/openssl/android/x86/usr/local/include/internal/err.h index 88dde705..d8a308f0 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/err.h +++ b/deps/openssl/android/x86/usr/local/include/internal/err.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_ERR_H # define OSSL_INTERNAL_ERR_H +# pragma once void err_free_strings_int(void); diff --git a/deps/openssl/android/x86/usr/local/include/internal/ffc.h b/deps/openssl/android/x86/usr/local/include/internal/ffc.h new file mode 100644 index 00000000..c4f09087 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/ffc.h @@ -0,0 +1,216 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_FFC_H +# define OSSL_INTERNAL_FFC_H +# pragma once + +# include +# include +# include +# include /* Uses Error codes from DH */ +# include +# include +# include "internal/sizes.h" + +/* Default value for gindex when canonical generation of g is not used */ +# define FFC_UNVERIFIABLE_GINDEX -1 + +/* The different types of FFC keys */ +# define FFC_PARAM_TYPE_DSA 0 +# define FFC_PARAM_TYPE_DH 1 + +/* + * The mode used by functions that share code for both generation and + * verification. See ossl_ffc_params_FIPS186_4_gen_verify(). + */ +#define FFC_PARAM_MODE_VERIFY 0 +#define FFC_PARAM_MODE_GENERATE 1 + +/* Return codes for generation and validation of FFC parameters */ +#define FFC_PARAM_RET_STATUS_FAILED 0 +#define FFC_PARAM_RET_STATUS_SUCCESS 1 +/* Returned if validating and g is only partially verifiable */ +#define FFC_PARAM_RET_STATUS_UNVERIFIABLE_G 2 + +/* Validation flags */ +# define FFC_PARAM_FLAG_VALIDATE_PQ 0x01 +# define FFC_PARAM_FLAG_VALIDATE_G 0x02 +# define FFC_PARAM_FLAG_VALIDATE_PQG \ + (FFC_PARAM_FLAG_VALIDATE_PQ | FFC_PARAM_FLAG_VALIDATE_G) +#define FFC_PARAM_FLAG_VALIDATE_LEGACY 0x04 + +/* + * NB: These values must align with the equivalently named macros in + * openssl/dh.h. We cannot use those macros here in case DH has been disabled. + */ +# define FFC_CHECK_P_NOT_PRIME 0x00001 +# define FFC_CHECK_P_NOT_SAFE_PRIME 0x00002 +# define FFC_CHECK_UNKNOWN_GENERATOR 0x00004 +# define FFC_CHECK_NOT_SUITABLE_GENERATOR 0x00008 +# define FFC_CHECK_Q_NOT_PRIME 0x00010 +# define FFC_CHECK_INVALID_Q_VALUE 0x00020 +# define FFC_CHECK_INVALID_J_VALUE 0x00040 + +# define FFC_CHECK_BAD_LN_PAIR 0x00080 +# define FFC_CHECK_INVALID_SEED_SIZE 0x00100 +# define FFC_CHECK_MISSING_SEED_OR_COUNTER 0x00200 +# define FFC_CHECK_INVALID_G 0x00400 +# define FFC_CHECK_INVALID_PQ 0x00800 +# define FFC_CHECK_INVALID_COUNTER 0x01000 +# define FFC_CHECK_P_MISMATCH 0x02000 +# define FFC_CHECK_Q_MISMATCH 0x04000 +# define FFC_CHECK_G_MISMATCH 0x08000 +# define FFC_CHECK_COUNTER_MISMATCH 0x10000 + +/* Validation Return codes */ +# define FFC_ERROR_PUBKEY_TOO_SMALL 0x01 +# define FFC_ERROR_PUBKEY_TOO_LARGE 0x02 +# define FFC_ERROR_PUBKEY_INVALID 0x04 +# define FFC_ERROR_NOT_SUITABLE_GENERATOR 0x08 +# define FFC_ERROR_PRIVKEY_TOO_SMALL 0x10 +# define FFC_ERROR_PRIVKEY_TOO_LARGE 0x20 +# define FFC_ERROR_PASSED_NULL_PARAM 0x40 + +/* + * Finite field cryptography (FFC) domain parameters are used by DH and DSA. + * Refer to FIPS186_4 Appendix A & B. + */ +typedef struct ffc_params_st { + /* Primes */ + BIGNUM *p; + BIGNUM *q; + /* Generator */ + BIGNUM *g; + /* DH X9.42 Optional Subgroup factor j >= 2 where p = j * q + 1 */ + BIGNUM *j; + + /* Required for FIPS186_4 validation of p, q and optionally canonical g */ + unsigned char *seed; + /* If this value is zero the hash size is used as the seed length */ + size_t seedlen; + /* Required for FIPS186_4 validation of p and q */ + int pcounter; + int nid; /* The identity of a named group */ + + /* + * Required for FIPS186_4 generation & validation of canonical g. + * It uses unverifiable g if this value is -1. + */ + int gindex; + int h; /* loop counter for unverifiable g */ + + unsigned int flags; + /* + * The digest to use for generation or validation. If this value is NULL, + * then the digest is chosen using the value of N. + */ + const char *mdname; + const char *mdprops; + /* Default key length for known named groups according to RFC7919 */ + int keylength; +} FFC_PARAMS; + +void ossl_ffc_params_init(FFC_PARAMS *params); +void ossl_ffc_params_cleanup(FFC_PARAMS *params); +void ossl_ffc_params_set0_pqg(FFC_PARAMS *params, BIGNUM *p, BIGNUM *q, + BIGNUM *g); +void ossl_ffc_params_get0_pqg(const FFC_PARAMS *params, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +void ossl_ffc_params_set0_j(FFC_PARAMS *d, BIGNUM *j); +int ossl_ffc_params_set_seed(FFC_PARAMS *params, + const unsigned char *seed, size_t seedlen); +void ossl_ffc_params_set_gindex(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_pcounter(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_h(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_flags(FFC_PARAMS *params, unsigned int flags); +void ossl_ffc_params_enable_flags(FFC_PARAMS *params, unsigned int flags, + int enable); +int ossl_ffc_set_digest(FFC_PARAMS *params, const char *alg, const char *props); + +int ossl_ffc_params_set_validate_params(FFC_PARAMS *params, + const unsigned char *seed, + size_t seedlen, int counter); +void ossl_ffc_params_get_validate_params(const FFC_PARAMS *params, + unsigned char **seed, size_t *seedlen, + int *pcounter); + +int ossl_ffc_params_copy(FFC_PARAMS *dst, const FFC_PARAMS *src); +int ossl_ffc_params_cmp(const FFC_PARAMS *a, const FFC_PARAMS *b, int ignore_q); + +#ifndef FIPS_MODULE +int ossl_ffc_params_print(BIO *bp, const FFC_PARAMS *ffc, int indent); +#endif /* FIPS_MODULE */ + + +int ossl_ffc_params_FIPS186_4_generate(OSSL_LIB_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + int *res, BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_generate(OSSL_LIB_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + int *res, BN_GENCB *cb); + +int ossl_ffc_params_FIPS186_4_gen_verify(OSSL_LIB_CTX *libctx, + FFC_PARAMS *params, int mode, int type, + size_t L, size_t N, int *res, + BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_gen_verify(OSSL_LIB_CTX *libctx, + FFC_PARAMS *params, int mode, int type, + size_t L, size_t N, int *res, + BN_GENCB *cb); + +int ossl_ffc_params_simple_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int paramstype, int *res); +int ossl_ffc_params_full_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int paramstype, int *res); +int ossl_ffc_params_FIPS186_4_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int type, int *res, BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int type, int *res, BN_GENCB *cb); + +int ossl_ffc_generate_private_key(BN_CTX *ctx, const FFC_PARAMS *params, + int N, int s, BIGNUM *priv); + +int ossl_ffc_params_validate_unverifiable_g(BN_CTX *ctx, BN_MONT_CTX *mont, + const BIGNUM *p, const BIGNUM *q, + const BIGNUM *g, BIGNUM *tmp, + int *ret); + +int ossl_ffc_validate_public_key(const FFC_PARAMS *params, + const BIGNUM *pub_key, int *ret); +int ossl_ffc_validate_public_key_partial(const FFC_PARAMS *params, + const BIGNUM *pub_key, int *ret); +int ossl_ffc_validate_private_key(const BIGNUM *upper, const BIGNUM *priv_key, + int *ret); + +int ossl_ffc_params_todata(const FFC_PARAMS *ffc, OSSL_PARAM_BLD *tmpl, + OSSL_PARAM params[]); +int ossl_ffc_params_fromdata(FFC_PARAMS *ffc, const OSSL_PARAM params[]); + +typedef struct dh_named_group_st DH_NAMED_GROUP; +const DH_NAMED_GROUP *ossl_ffc_name_to_dh_named_group(const char *name); +const DH_NAMED_GROUP *ossl_ffc_uid_to_dh_named_group(int uid); +#ifndef OPENSSL_NO_DH +const DH_NAMED_GROUP *ossl_ffc_numbers_to_dh_named_group(const BIGNUM *p, + const BIGNUM *q, + const BIGNUM *g); +#endif +int ossl_ffc_named_group_get_uid(const DH_NAMED_GROUP *group); +const char *ossl_ffc_named_group_get_name(const DH_NAMED_GROUP *); +#ifndef OPENSSL_NO_DH +int ossl_ffc_named_group_get_keylength(const DH_NAMED_GROUP *group); +const BIGNUM *ossl_ffc_named_group_get_q(const DH_NAMED_GROUP *group); +int ossl_ffc_named_group_set(FFC_PARAMS *ffc, const DH_NAMED_GROUP *group); +#endif + +#endif /* OSSL_INTERNAL_FFC_H */ diff --git a/deps/openssl/android/x86/usr/local/include/internal/ktls.h b/deps/openssl/android/x86/usr/local/include/internal/ktls.h new file mode 100644 index 00000000..95492fd0 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/ktls.h @@ -0,0 +1,404 @@ +/* + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#if defined(OPENSSL_SYS_LINUX) +# ifndef OPENSSL_NO_KTLS +# include +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) +# define OPENSSL_NO_KTLS +# ifndef PEDANTIC +# warning "KTLS requires Kernel Headers >= 4.13.0" +# warning "Skipping Compilation of KTLS" +# endif +# endif +# endif +#endif + +#ifndef HEADER_INTERNAL_KTLS +# define HEADER_INTERNAL_KTLS +# pragma once + +# ifndef OPENSSL_NO_KTLS + +# if defined(__FreeBSD__) +# include +# include +# include +# include +# include +# include + +# ifndef TCP_RXTLS_ENABLE +# define OPENSSL_NO_KTLS_RX +# endif +# define OPENSSL_KTLS_AES_GCM_128 +# define OPENSSL_KTLS_AES_GCM_256 +# define OPENSSL_KTLS_TLS13 + +typedef struct tls_enable ktls_crypto_info_t; + +/* + * FreeBSD does not require any additional steps to enable KTLS before + * setting keys. + */ +static ossl_inline int ktls_enable(int fd) +{ + return 1; +} + +/* + * The TCP_TXTLS_ENABLE socket option marks the outgoing socket buffer + * as using TLS. If successful, then data sent using this socket will + * be encrypted and encapsulated in TLS records using the tls_en + * provided here. + * + * The TCP_RXTLS_ENABLE socket option marks the incoming socket buffer + * as using TLS. If successful, then data received for this socket will + * be authenticated and decrypted using the tls_en provided here. + */ +static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *tls_en, int is_tx) +{ + if (is_tx) + return setsockopt(fd, IPPROTO_TCP, TCP_TXTLS_ENABLE, + tls_en, sizeof(*tls_en)) ? 0 : 1; +# ifndef OPENSSL_NO_KTLS_RX + return setsockopt(fd, IPPROTO_TCP, TCP_RXTLS_ENABLE, tls_en, + sizeof(*tls_en)) ? 0 : 1; +# else + return 0; +# endif +} + +/* + * Send a TLS record using the tls_en provided in ktls_start and use + * record_type instead of the default SSL3_RT_APPLICATION_DATA. + * When the socket is non-blocking, then this call either returns EAGAIN or + * the entire record is pushed to TCP. It is impossible to send a partial + * record using this control message. + */ +static ossl_inline int ktls_send_ctrl_message(int fd, unsigned char record_type, + const void *data, size_t length) +{ + struct msghdr msg = { 0 }; + int cmsg_len = sizeof(record_type); + struct cmsghdr *cmsg; + char buf[CMSG_SPACE(cmsg_len)]; + struct iovec msg_iov; /* Vector of data to send/receive into */ + + msg.msg_control = buf; + msg.msg_controllen = sizeof(buf); + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_level = IPPROTO_TCP; + cmsg->cmsg_type = TLS_SET_RECORD_TYPE; + cmsg->cmsg_len = CMSG_LEN(cmsg_len); + *((unsigned char *)CMSG_DATA(cmsg)) = record_type; + msg.msg_controllen = cmsg->cmsg_len; + + msg_iov.iov_base = (void *)data; + msg_iov.iov_len = length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + return sendmsg(fd, &msg, 0); +} + +# ifdef OPENSSL_NO_KTLS_RX + +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + return -1; +} + +# else /* !defined(OPENSSL_NO_KTLS_RX) */ + +/* + * Receive a TLS record using the tls_en provided in ktls_start. The + * kernel strips any explicit IV and authentication tag, but provides + * the TLS record header via a control message. If there is an error + * with the TLS record such as an invalid header, invalid padding, or + * authentication failure recvmsg() will fail with an error. + */ +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + struct msghdr msg = { 0 }; + int cmsg_len = sizeof(struct tls_get_record); + struct tls_get_record *tgr; + struct cmsghdr *cmsg; + char buf[CMSG_SPACE(cmsg_len)]; + struct iovec msg_iov; /* Vector of data to send/receive into */ + int ret; + unsigned char *p = data; + const size_t prepend_length = SSL3_RT_HEADER_LENGTH; + + if (length <= prepend_length) { + errno = EINVAL; + return -1; + } + + msg.msg_control = buf; + msg.msg_controllen = sizeof(buf); + + msg_iov.iov_base = p + prepend_length; + msg_iov.iov_len = length - prepend_length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + ret = recvmsg(fd, &msg, 0); + if (ret <= 0) + return ret; + + if ((msg.msg_flags & (MSG_EOR | MSG_CTRUNC)) != MSG_EOR) { + errno = EMSGSIZE; + return -1; + } + + if (msg.msg_controllen == 0) { + errno = EBADMSG; + return -1; + } + + cmsg = CMSG_FIRSTHDR(&msg); + if (cmsg->cmsg_level != IPPROTO_TCP || cmsg->cmsg_type != TLS_GET_RECORD + || cmsg->cmsg_len != CMSG_LEN(cmsg_len)) { + errno = EBADMSG; + return -1; + } + + tgr = (struct tls_get_record *)CMSG_DATA(cmsg); + p[0] = tgr->tls_type; + p[1] = tgr->tls_vmajor; + p[2] = tgr->tls_vminor; + *(uint16_t *)(p + 3) = htons(ret); + + return ret + prepend_length; +} + +# endif /* OPENSSL_NO_KTLS_RX */ + +/* + * KTLS enables the sendfile system call to send data from a file over + * TLS. + */ +static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, + size_t size, int flags) +{ + off_t sbytes = 0; + int ret; + + ret = sendfile(fd, s, off, size, NULL, &sbytes, flags); + if (ret == -1 && sbytes == 0) + return -1; + return sbytes; +} + +# endif /* __FreeBSD__ */ + +# if defined(OPENSSL_SYS_LINUX) + +# include +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0) +# define OPENSSL_NO_KTLS_RX +# ifndef PEDANTIC +# warning "KTLS requires Kernel Headers >= 4.17.0 for receiving" +# warning "Skipping Compilation of KTLS receive data path" +# endif +# endif +# define OPENSSL_KTLS_AES_GCM_128 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) +# define OPENSSL_KTLS_AES_GCM_256 +# define OPENSSL_KTLS_TLS13 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0) +# define OPENSSL_KTLS_AES_CCM_128 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0) +# ifndef OPENSSL_NO_CHACHA +# define OPENSSL_KTLS_CHACHA20_POLY1305 +# endif +# endif +# endif +# endif + +# include +# include +# include +# include +# include +# include + +# ifndef SOL_TLS +# define SOL_TLS 282 +# endif + +# ifndef TCP_ULP +# define TCP_ULP 31 +# endif + +# ifndef TLS_RX +# define TLS_RX 2 +# endif + +struct tls_crypto_info_all { + union { +# ifdef OPENSSL_KTLS_AES_GCM_128 + struct tls12_crypto_info_aes_gcm_128 gcm128; +# endif +# ifdef OPENSSL_KTLS_AES_GCM_256 + struct tls12_crypto_info_aes_gcm_256 gcm256; +# endif +# ifdef OPENSSL_KTLS_AES_CCM_128 + struct tls12_crypto_info_aes_ccm_128 ccm128; +# endif +# ifdef OPENSSL_KTLS_CHACHA20_POLY1305 + struct tls12_crypto_info_chacha20_poly1305 chacha20poly1305; +# endif + }; + size_t tls_crypto_info_len; +}; + +typedef struct tls_crypto_info_all ktls_crypto_info_t; + +/* + * When successful, this socket option doesn't change the behaviour of the + * TCP socket, except changing the TCP setsockopt handler to enable the + * processing of SOL_TLS socket options. All other functionality remains the + * same. + */ +static ossl_inline int ktls_enable(int fd) +{ + return setsockopt(fd, SOL_TCP, TCP_ULP, "tls", sizeof("tls")) ? 0 : 1; +} + +/* + * The TLS_TX socket option changes the send/sendmsg handlers of the TCP socket. + * If successful, then data sent using this socket will be encrypted and + * encapsulated in TLS records using the crypto_info provided here. + * The TLS_RX socket option changes the recv/recvmsg handlers of the TCP socket. + * If successful, then data received using this socket will be decrypted, + * authenticated and decapsulated using the crypto_info provided here. + */ +static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *crypto_info, + int is_tx) +{ + return setsockopt(fd, SOL_TLS, is_tx ? TLS_TX : TLS_RX, + crypto_info, crypto_info->tls_crypto_info_len) ? 0 : 1; +} + +/* + * Send a TLS record using the crypto_info provided in ktls_start and use + * record_type instead of the default SSL3_RT_APPLICATION_DATA. + * When the socket is non-blocking, then this call either returns EAGAIN or + * the entire record is pushed to TCP. It is impossible to send a partial + * record using this control message. + */ +static ossl_inline int ktls_send_ctrl_message(int fd, unsigned char record_type, + const void *data, size_t length) +{ + struct msghdr msg; + int cmsg_len = sizeof(record_type); + struct cmsghdr *cmsg; + union { + struct cmsghdr hdr; + char buf[CMSG_SPACE(sizeof(unsigned char))]; + } cmsgbuf; + struct iovec msg_iov; /* Vector of data to send/receive into */ + + memset(&msg, 0, sizeof(msg)); + msg.msg_control = cmsgbuf.buf; + msg.msg_controllen = sizeof(cmsgbuf.buf); + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_level = SOL_TLS; + cmsg->cmsg_type = TLS_SET_RECORD_TYPE; + cmsg->cmsg_len = CMSG_LEN(cmsg_len); + *((unsigned char *)CMSG_DATA(cmsg)) = record_type; + msg.msg_controllen = cmsg->cmsg_len; + + msg_iov.iov_base = (void *)data; + msg_iov.iov_len = length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + return sendmsg(fd, &msg, 0); +} + +/* + * KTLS enables the sendfile system call to send data from a file over TLS. + * @flags are ignored on Linux. (placeholder for FreeBSD sendfile) + * */ +static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, size_t size, int flags) +{ + return sendfile(s, fd, &off, size); +} + +# ifdef OPENSSL_NO_KTLS_RX + + +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + return -1; +} + +# else /* !defined(OPENSSL_NO_KTLS_RX) */ + +/* + * Receive a TLS record using the crypto_info provided in ktls_start. + * The kernel strips the TLS record header, IV and authentication tag, + * returning only the plaintext data or an error on failure. + * We add the TLS record header here to satisfy routines in rec_layer_s3.c + */ +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + struct msghdr msg; + struct cmsghdr *cmsg; + union { + struct cmsghdr hdr; + char buf[CMSG_SPACE(sizeof(unsigned char))]; + } cmsgbuf; + struct iovec msg_iov; + int ret; + unsigned char *p = data; + const size_t prepend_length = SSL3_RT_HEADER_LENGTH; + + if (length < prepend_length + EVP_GCM_TLS_TAG_LEN) { + errno = EINVAL; + return -1; + } + + memset(&msg, 0, sizeof(msg)); + msg.msg_control = cmsgbuf.buf; + msg.msg_controllen = sizeof(cmsgbuf.buf); + + msg_iov.iov_base = p + prepend_length; + msg_iov.iov_len = length - prepend_length - EVP_GCM_TLS_TAG_LEN; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + ret = recvmsg(fd, &msg, 0); + if (ret < 0) + return ret; + + if (msg.msg_controllen > 0) { + cmsg = CMSG_FIRSTHDR(&msg); + if (cmsg->cmsg_type == TLS_GET_RECORD_TYPE) { + p[0] = *((unsigned char *)CMSG_DATA(cmsg)); + p[1] = TLS1_2_VERSION_MAJOR; + p[2] = TLS1_2_VERSION_MINOR; + /* returned length is limited to msg_iov.iov_len above */ + p[3] = (ret >> 8) & 0xff; + p[4] = ret & 0xff; + ret += prepend_length; + } + } + + return ret; +} + +# endif /* OPENSSL_NO_KTLS_RX */ + +# endif /* OPENSSL_SYS_LINUX */ +# endif /* OPENSSL_NO_KTLS */ +#endif /* HEADER_INTERNAL_KTLS */ diff --git a/deps/openssl/android/x86/usr/local/include/internal/namemap.h b/deps/openssl/android/x86/usr/local/include/internal/namemap.h new file mode 100644 index 00000000..fd36883f --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/namemap.h @@ -0,0 +1,41 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "internal/cryptlib.h" + +typedef struct ossl_namemap_st OSSL_NAMEMAP; + +OSSL_NAMEMAP *ossl_namemap_stored(OSSL_LIB_CTX *libctx); + +OSSL_NAMEMAP *ossl_namemap_new(void); +void ossl_namemap_free(OSSL_NAMEMAP *namemap); +int ossl_namemap_empty(OSSL_NAMEMAP *namemap); + +int ossl_namemap_add_name(OSSL_NAMEMAP *namemap, int number, const char *name); + +/* + * The number<->name relationship is 1<->many + * Therefore, the name->number mapping is a simple function, while the + * number->name mapping is an iterator. + */ +int ossl_namemap_name2num(const OSSL_NAMEMAP *namemap, const char *name); +int ossl_namemap_name2num_n(const OSSL_NAMEMAP *namemap, + const char *name, size_t name_len); +const char *ossl_namemap_num2name(const OSSL_NAMEMAP *namemap, int number, + size_t idx); +int ossl_namemap_doall_names(const OSSL_NAMEMAP *namemap, int number, + void (*fn)(const char *name, void *data), + void *data); + +/* + * A utility that handles several names in a string, divided by a given + * separator. + */ +int ossl_namemap_add_names(OSSL_NAMEMAP *namemap, int number, + const char *names, const char separator); diff --git a/deps/openssl/android/x86/usr/local/include/internal/nelem.h b/deps/openssl/android/x86/usr/local/include/internal/nelem.h index 699ef88e..b758513b 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/nelem.h +++ b/deps/openssl/android/x86/usr/local/include/internal/nelem.h @@ -1,7 +1,7 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_NELEM_H # define OSSL_INTERNAL_NELEM_H +# pragma once # define OSSL_NELEM(x) (sizeof(x)/sizeof((x)[0])) #endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/numbers.h b/deps/openssl/android/x86/usr/local/include/internal/numbers.h index f5ade522..4f4d3306 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/numbers.h +++ b/deps/openssl/android/x86/usr/local/include/internal/numbers.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,22 +9,23 @@ #ifndef OSSL_INTERNAL_NUMBERS_H # define OSSL_INTERNAL_NUMBERS_H +# pragma once # include -# if (-1 & 3) == 0x03 /* Two's complement */ +# if (-1 & 3) == 0x03 /* Two's complement */ # define __MAXUINT__(T) ((T) -1) # define __MAXINT__(T) ((T) ((((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)) ^ __MAXUINT__(T))) # define __MININT__(T) (-__MAXINT__(T) - 1) -# elif (-1 & 3) == 0x02 /* One's complement */ +# elif (-1 & 3) == 0x02 /* One's complement */ # define __MAXUINT__(T) (((T) -1) + 1) # define __MAXINT__(T) ((T) ((((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)) ^ __MAXUINT__(T))) # define __MININT__(T) (-__MAXINT__(T)) -# elif (-1 & 3) == 0x01 /* Sign/magnitude */ +# elif (-1 & 3) == 0x01 /* Sign/magnitude */ # define __MAXINT__(T) ((T) (((((T) 1) << ((sizeof(T) * CHAR_BIT) - 2)) - 1) | (((T) 1) << ((sizeof(T) * CHAR_BIT) - 2)))) # define __MAXUINT__(T) ((T) (__MAXINT__(T) | (((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)))) @@ -60,9 +61,25 @@ # define UINT64_MAX __MAXUINT__(uint64_t) # endif +# ifndef INT128_MAX +# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16 +typedef __int128_t int128_t; +typedef __uint128_t uint128_t; +# define INT128_MIN __MININT__(int128_t) +# define INT128_MAX __MAXINT__(int128_t) +# define UINT128_MAX __MAXUINT__(uint128_t) +# endif +# endif + # ifndef SIZE_MAX # define SIZE_MAX __MAXUINT__(size_t) # endif +# ifndef OSSL_INTMAX_MAX +# define OSSL_INTMAX_MIN __MININT__(ossl_intmax_t) +# define OSSL_INTMAX_MAX __MAXINT__(ossl_intmax_t) +# define OSSL_UINTMAX_MAX __MAXUINT__(ossl_uintmax_t) +# endif + #endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/o_dir.h b/deps/openssl/android/x86/usr/local/include/internal/o_dir.h index dafc8dd2..add34d14 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/o_dir.h +++ b/deps/openssl/android/x86/usr/local/include/internal/o_dir.h @@ -1,7 +1,7 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -38,6 +38,7 @@ #ifndef OSSL_INTERNAL_O_DIR_H # define OSSL_INTERNAL_O_DIR_H +# pragma once typedef struct OPENSSL_dir_context_st OPENSSL_DIR_CTX; diff --git a/deps/openssl/android/x86/usr/local/include/internal/o_str.h b/deps/openssl/android/x86/usr/local/include/internal/o_str.h deleted file mode 100644 index 15c12e82..00000000 --- a/deps/openssl/android/x86/usr/local/include/internal/o_str.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef OSSL_INTERNAL_O_STR_H -# define OSSL_INTERNAL_O_STR_H - -# include /* to get size_t */ - -int OPENSSL_memcmp(const void *p1, const void *p2, size_t n); - -#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/packet.h b/deps/openssl/android/x86/usr/local/include/internal/packet.h new file mode 100644 index 00000000..ed761720 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/packet.h @@ -0,0 +1,937 @@ +/* + * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PACKET_H +# define OSSL_INTERNAL_PACKET_H +# pragma once + +# include +# include +# include +# include +# include + +# include "internal/numbers.h" + +typedef struct { + /* Pointer to where we are currently reading from */ + const unsigned char *curr; + /* Number of bytes remaining */ + size_t remaining; +} PACKET; + +/* Internal unchecked shorthand; don't use outside this file. */ +static ossl_inline void packet_forward(PACKET *pkt, size_t len) +{ + pkt->curr += len; + pkt->remaining -= len; +} + +/* + * Returns the number of bytes remaining to be read in the PACKET + */ +static ossl_inline size_t PACKET_remaining(const PACKET *pkt) +{ + return pkt->remaining; +} + +/* + * Returns a pointer to the first byte after the packet data. + * Useful for integrating with non-PACKET parsing code. + * Specifically, we use PACKET_end() to verify that a d2i_... call + * has consumed the entire packet contents. + */ +static ossl_inline const unsigned char *PACKET_end(const PACKET *pkt) +{ + return pkt->curr + pkt->remaining; +} + +/* + * Returns a pointer to the PACKET's current position. + * For use in non-PACKETized APIs. + */ +static ossl_inline const unsigned char *PACKET_data(const PACKET *pkt) +{ + return pkt->curr; +} + +/* + * Initialise a PACKET with |len| bytes held in |buf|. This does not make a + * copy of the data so |buf| must be present for the whole time that the PACKET + * is being used. + */ +__owur static ossl_inline int PACKET_buf_init(PACKET *pkt, + const unsigned char *buf, + size_t len) +{ + /* Sanity check for negative values. */ + if (len > (size_t)(SIZE_MAX / 2)) + return 0; + + pkt->curr = buf; + pkt->remaining = len; + return 1; +} + +/* Initialize a PACKET to hold zero bytes. */ +static ossl_inline void PACKET_null_init(PACKET *pkt) +{ + pkt->curr = NULL; + pkt->remaining = 0; +} + +/* + * Returns 1 if the packet has length |num| and its contents equal the |num| + * bytes read from |ptr|. Returns 0 otherwise (lengths or contents not equal). + * If lengths are equal, performs the comparison in constant time. + */ +__owur static ossl_inline int PACKET_equal(const PACKET *pkt, const void *ptr, + size_t num) +{ + if (PACKET_remaining(pkt) != num) + return 0; + return CRYPTO_memcmp(pkt->curr, ptr, num) == 0; +} + +/* + * Peek ahead and initialize |subpkt| with the next |len| bytes read from |pkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + */ +__owur static ossl_inline int PACKET_peek_sub_packet(const PACKET *pkt, + PACKET *subpkt, size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + return PACKET_buf_init(subpkt, pkt->curr, len); +} + +/* + * Initialize |subpkt| with the next |len| bytes read from |pkt|. Data is not + * copied: the |subpkt| packet will share its underlying buffer with the + * original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + */ +__owur static ossl_inline int PACKET_get_sub_packet(PACKET *pkt, + PACKET *subpkt, size_t len) +{ + if (!PACKET_peek_sub_packet(pkt, subpkt, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Peek ahead at 2 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_2(const PACKET *pkt, + unsigned int *data) +{ + if (PACKET_remaining(pkt) < 2) + return 0; + + *data = ((unsigned int)(*pkt->curr)) << 8; + *data |= *(pkt->curr + 1); + + return 1; +} + +/* Equivalent of n2s */ +/* Get 2 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_2(PACKET *pkt, unsigned int *data) +{ + if (!PACKET_peek_net_2(pkt, data)) + return 0; + + packet_forward(pkt, 2); + + return 1; +} + +/* Same as PACKET_get_net_2() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_2_len(PACKET *pkt, size_t *data) +{ + unsigned int i; + int ret = PACKET_get_net_2(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 3 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_3(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 3) + return 0; + + *data = ((unsigned long)(*pkt->curr)) << 16; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 8; + *data |= *(pkt->curr + 2); + + return 1; +} + +/* Equivalent of n2l3 */ +/* Get 3 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_3(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_net_3(pkt, data)) + return 0; + + packet_forward(pkt, 3); + + return 1; +} + +/* Same as PACKET_get_net_3() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_3_len(PACKET *pkt, size_t *data) +{ + unsigned long i; + int ret = PACKET_get_net_3(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 4 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_4(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 4) + return 0; + + *data = ((unsigned long)(*pkt->curr)) << 24; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 16; + *data |= ((unsigned long)(*(pkt->curr + 2))) << 8; + *data |= *(pkt->curr + 3); + + return 1; +} + +/* + * Peek ahead at 8 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_8(const PACKET *pkt, + uint64_t *data) +{ + if (PACKET_remaining(pkt) < 8) + return 0; + + *data = ((uint64_t)(*pkt->curr)) << 56; + *data |= ((uint64_t)(*(pkt->curr + 1))) << 48; + *data |= ((uint64_t)(*(pkt->curr + 2))) << 40; + *data |= ((uint64_t)(*(pkt->curr + 3))) << 32; + *data |= ((uint64_t)(*(pkt->curr + 4))) << 24; + *data |= ((uint64_t)(*(pkt->curr + 5))) << 16; + *data |= ((uint64_t)(*(pkt->curr + 6))) << 8; + *data |= *(pkt->curr + 7); + + return 1; +} + +/* Equivalent of n2l */ +/* Get 4 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_4(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_net_4(pkt, data)) + return 0; + + packet_forward(pkt, 4); + + return 1; +} + +/* Same as PACKET_get_net_4() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_4_len(PACKET *pkt, size_t *data) +{ + unsigned long i; + int ret = PACKET_get_net_4(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* Get 8 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_8(PACKET *pkt, uint64_t *data) +{ + if (!PACKET_peek_net_8(pkt, data)) + return 0; + + packet_forward(pkt, 8); + + return 1; +} + +/* Peek ahead at 1 byte from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_peek_1(const PACKET *pkt, + unsigned int *data) +{ + if (!PACKET_remaining(pkt)) + return 0; + + *data = *pkt->curr; + + return 1; +} + +/* Get 1 byte from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_1(PACKET *pkt, unsigned int *data) +{ + if (!PACKET_peek_1(pkt, data)) + return 0; + + packet_forward(pkt, 1); + + return 1; +} + +/* Same as PACKET_get_1() but for a size_t */ +__owur static ossl_inline int PACKET_get_1_len(PACKET *pkt, size_t *data) +{ + unsigned int i; + int ret = PACKET_get_1(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 4 bytes in reverse network order from |pkt| and store the value + * in |*data| + */ +__owur static ossl_inline int PACKET_peek_4(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 4) + return 0; + + *data = *pkt->curr; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 8; + *data |= ((unsigned long)(*(pkt->curr + 2))) << 16; + *data |= ((unsigned long)(*(pkt->curr + 3))) << 24; + + return 1; +} + +/* Equivalent of c2l */ +/* + * Get 4 bytes in reverse network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_get_4(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_4(pkt, data)) + return 0; + + packet_forward(pkt, 4); + + return 1; +} + +/* + * Peek ahead at |len| bytes from the |pkt| and store a pointer to them in + * |*data|. This just points at the underlying buffer that |pkt| is using. The + * caller should not free this data directly (it will be freed when the + * underlying buffer gets freed + */ +__owur static ossl_inline int PACKET_peek_bytes(const PACKET *pkt, + const unsigned char **data, + size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + *data = pkt->curr; + + return 1; +} + +/* + * Read |len| bytes from the |pkt| and store a pointer to them in |*data|. This + * just points at the underlying buffer that |pkt| is using. The caller should + * not free this data directly (it will be freed when the underlying buffer gets + * freed + */ +__owur static ossl_inline int PACKET_get_bytes(PACKET *pkt, + const unsigned char **data, + size_t len) +{ + if (!PACKET_peek_bytes(pkt, data, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* Peek ahead at |len| bytes from |pkt| and copy them to |data| */ +__owur static ossl_inline int PACKET_peek_copy_bytes(const PACKET *pkt, + unsigned char *data, + size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + memcpy(data, pkt->curr, len); + + return 1; +} + +/* + * Read |len| bytes from |pkt| and copy them to |data|. + * The caller is responsible for ensuring that |data| can hold |len| bytes. + */ +__owur static ossl_inline int PACKET_copy_bytes(PACKET *pkt, + unsigned char *data, size_t len) +{ + if (!PACKET_peek_copy_bytes(pkt, data, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Copy packet data to |dest|, and set |len| to the number of copied bytes. + * If the packet has more than |dest_len| bytes, nothing is copied. + * Returns 1 if the packet data fits in |dest_len| bytes, 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing + * done with a given PACKET). + */ +__owur static ossl_inline int PACKET_copy_all(const PACKET *pkt, + unsigned char *dest, + size_t dest_len, size_t *len) +{ + if (PACKET_remaining(pkt) > dest_len) { + *len = 0; + return 0; + } + *len = pkt->remaining; + memcpy(dest, pkt->curr, pkt->remaining); + return 1; +} + +/* + * Copy |pkt| bytes to a newly allocated buffer and store a pointer to the + * result in |*data|, and the length in |len|. + * If |*data| is not NULL, the old data is OPENSSL_free'd. + * If the packet is empty, or malloc fails, |*data| will be set to NULL. + * Returns 1 if the malloc succeeds and 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing + * done with a given PACKET). + */ +__owur static ossl_inline int PACKET_memdup(const PACKET *pkt, + unsigned char **data, size_t *len) +{ + size_t length; + + OPENSSL_free(*data); + *data = NULL; + *len = 0; + + length = PACKET_remaining(pkt); + + if (length == 0) + return 1; + + *data = OPENSSL_memdup(pkt->curr, length); + if (*data == NULL) + return 0; + + *len = length; + return 1; +} + +/* + * Read a C string from |pkt| and copy to a newly allocated, NUL-terminated + * buffer. Store a pointer to the result in |*data|. + * If |*data| is not NULL, the old data is OPENSSL_free'd. + * If the data in |pkt| does not contain a NUL-byte, the entire data is + * copied and NUL-terminated. + * Returns 1 if the malloc succeeds and 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing done + * with a given PACKET). + */ +__owur static ossl_inline int PACKET_strndup(const PACKET *pkt, char **data) +{ + OPENSSL_free(*data); + + /* This will succeed on an empty packet, unless pkt->curr == NULL. */ + *data = OPENSSL_strndup((const char *)pkt->curr, PACKET_remaining(pkt)); + return (*data != NULL); +} + +/* Returns 1 if |pkt| contains at least one 0-byte, 0 otherwise. */ +static ossl_inline int PACKET_contains_zero_byte(const PACKET *pkt) +{ + return memchr(pkt->curr, 0, pkt->remaining) != NULL; +} + +/* Move the current reading position forward |len| bytes */ +__owur static ossl_inline int PACKET_forward(PACKET *pkt, size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a one-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_1(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_1(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Like PACKET_get_length_prefixed_1, but additionally, fails when there are + * leftover bytes in |pkt|. + */ +__owur static ossl_inline int PACKET_as_length_prefixed_1(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_1(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length) || + PACKET_remaining(&tmp) != 0) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a two-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_2(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + + if (!PACKET_get_net_2(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Like PACKET_get_length_prefixed_2, but additionally, fails when there are + * leftover bytes in |pkt|. + */ +__owur static ossl_inline int PACKET_as_length_prefixed_2(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + + if (!PACKET_get_net_2(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length) || + PACKET_remaining(&tmp) != 0) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a three-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_3(PACKET *pkt, + PACKET *subpkt) +{ + unsigned long length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_net_3(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* Writeable packets */ + +typedef struct wpacket_sub WPACKET_SUB; +struct wpacket_sub { + /* The parent WPACKET_SUB if we have one or NULL otherwise */ + WPACKET_SUB *parent; + + /* + * Offset into the buffer where the length of this WPACKET goes. We use an + * offset in case the buffer grows and gets reallocated. + */ + size_t packet_len; + + /* Number of bytes in the packet_len or 0 if we don't write the length */ + size_t lenbytes; + + /* Number of bytes written to the buf prior to this packet starting */ + size_t pwritten; + + /* Flags for this sub-packet */ + unsigned int flags; +}; + +typedef struct wpacket_st WPACKET; +struct wpacket_st { + /* The buffer where we store the output data */ + BUF_MEM *buf; + + /* Fixed sized buffer which can be used as an alternative to buf */ + unsigned char *staticbuf; + + /* + * Offset into the buffer where we are currently writing. We use an offset + * in case the buffer grows and gets reallocated. + */ + size_t curr; + + /* Number of bytes written so far */ + size_t written; + + /* Maximum number of bytes we will allow to be written to this WPACKET */ + size_t maxsize; + + /* Our sub-packets (always at least one if not finished) */ + WPACKET_SUB *subs; + + /* Writing from the end first? */ + unsigned int endfirst : 1; +}; + +/* Flags */ + +/* Default */ +#define WPACKET_FLAGS_NONE 0 + +/* Error on WPACKET_close() if no data written to the WPACKET */ +#define WPACKET_FLAGS_NON_ZERO_LENGTH 1 + +/* + * Abandon all changes on WPACKET_close() if no data written to the WPACKET, + * i.e. this does not write out a zero packet length + */ +#define WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH 2 + + +/* + * Initialise a WPACKET with the buffer in |buf|. The buffer must exist + * for the whole time that the WPACKET is being used. Additionally |lenbytes| of + * data is preallocated at the start of the buffer to store the length of the + * WPACKET once we know it. + */ +int WPACKET_init_len(WPACKET *pkt, BUF_MEM *buf, size_t lenbytes); + +/* + * Same as WPACKET_init_len except there is no preallocation of the WPACKET + * length. + */ +int WPACKET_init(WPACKET *pkt, BUF_MEM *buf); + +/* + * Same as WPACKET_init_len except there is no underlying buffer. No data is + * ever actually written. We just keep track of how much data would have been + * written if a buffer was there. + */ +int WPACKET_init_null(WPACKET *pkt, size_t lenbytes); + +/* + * Same as WPACKET_init_null except we set the WPACKET to assume DER length + * encoding for sub-packets. + */ +int WPACKET_init_null_der(WPACKET *pkt); + +/* + * Same as WPACKET_init_len except we do not use a growable BUF_MEM structure. + * A fixed buffer of memory |buf| of size |len| is used instead. A failure will + * occur if you attempt to write beyond the end of the buffer + */ +int WPACKET_init_static_len(WPACKET *pkt, unsigned char *buf, size_t len, + size_t lenbytes); + +/* + * Same as WPACKET_init_static_len except lenbytes is always 0, and we set the + * WPACKET to write to the end of the buffer moving towards the start and use + * DER length encoding for sub-packets. + */ +int WPACKET_init_der(WPACKET *pkt, unsigned char *buf, size_t len); + +/* + * Set the flags to be applied to the current sub-packet + */ +int WPACKET_set_flags(WPACKET *pkt, unsigned int flags); + +/* + * Closes the most recent sub-packet. It also writes out the length of the + * packet to the required location (normally the start of the WPACKET) if + * appropriate. The top level WPACKET should be closed using WPACKET_finish() + * instead of this function. + */ +int WPACKET_close(WPACKET *pkt); + +/* + * The same as WPACKET_close() but only for the top most WPACKET. Additionally + * frees memory resources for this WPACKET. + */ +int WPACKET_finish(WPACKET *pkt); + +/* + * Iterate through all the sub-packets and write out their lengths as if they + * were being closed. The lengths will be overwritten with the final lengths + * when the sub-packets are eventually closed (which may be different if more + * data is added to the WPACKET). This function fails if a sub-packet is of 0 + * length and WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH is set. + */ +int WPACKET_fill_lengths(WPACKET *pkt); + +/* + * Initialise a new sub-packet. Additionally |lenbytes| of data is preallocated + * at the start of the sub-packet to store its length once we know it. Don't + * call this directly. Use the convenience macros below instead. + */ +int WPACKET_start_sub_packet_len__(WPACKET *pkt, size_t lenbytes); + +/* + * Convenience macros for calling WPACKET_start_sub_packet_len with different + * lengths + */ +#define WPACKET_start_sub_packet_u8(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 1) +#define WPACKET_start_sub_packet_u16(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 2) +#define WPACKET_start_sub_packet_u24(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 3) +#define WPACKET_start_sub_packet_u32(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 4) + +/* + * Same as WPACKET_start_sub_packet_len__() except no bytes are pre-allocated + * for the sub-packet length. + */ +int WPACKET_start_sub_packet(WPACKET *pkt); + +/* + * Allocate bytes in the WPACKET for the output. This reserves the bytes + * and counts them as "written", but doesn't actually do the writing. A pointer + * to the allocated bytes is stored in |*allocbytes|. |allocbytes| may be NULL. + * WARNING: the allocated bytes must be filled in immediately, without further + * WPACKET_* calls. If not then the underlying buffer may be realloc'd and + * change its location. + */ +int WPACKET_allocate_bytes(WPACKET *pkt, size_t len, + unsigned char **allocbytes); + +/* + * The same as WPACKET_allocate_bytes() except additionally a new sub-packet is + * started for the allocated bytes, and then closed immediately afterwards. The + * number of length bytes for the sub-packet is in |lenbytes|. Don't call this + * directly. Use the convenience macros below instead. + */ +int WPACKET_sub_allocate_bytes__(WPACKET *pkt, size_t len, + unsigned char **allocbytes, size_t lenbytes); + +/* + * Convenience macros for calling WPACKET_sub_allocate_bytes with different + * lengths + */ +#define WPACKET_sub_allocate_bytes_u8(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 1) +#define WPACKET_sub_allocate_bytes_u16(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 2) +#define WPACKET_sub_allocate_bytes_u24(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 3) +#define WPACKET_sub_allocate_bytes_u32(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 4) + +/* + * The same as WPACKET_allocate_bytes() except the reserved bytes are not + * actually counted as written. Typically this will be for when we don't know + * how big arbitrary data is going to be up front, but we do know what the + * maximum size will be. If this function is used, then it should be immediately + * followed by a WPACKET_allocate_bytes() call before any other WPACKET + * functions are called (unless the write to the allocated bytes is abandoned). + * + * For example: If we are generating a signature, then the size of that + * signature may not be known in advance. We can use WPACKET_reserve_bytes() to + * handle this: + * + * if (!WPACKET_sub_reserve_bytes_u16(&pkt, EVP_PKEY_get_size(pkey), &sigbytes1) + * || EVP_SignFinal(md_ctx, sigbytes1, &siglen, pkey) <= 0 + * || !WPACKET_sub_allocate_bytes_u16(&pkt, siglen, &sigbytes2) + * || sigbytes1 != sigbytes2) + * goto err; + */ +int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes); + +/* + * The "reserve_bytes" equivalent of WPACKET_sub_allocate_bytes__() + */ +int WPACKET_sub_reserve_bytes__(WPACKET *pkt, size_t len, + unsigned char **allocbytes, size_t lenbytes); + +/* + * Convenience macros for WPACKET_sub_reserve_bytes with different lengths + */ +#define WPACKET_sub_reserve_bytes_u8(pkt, len, bytes) \ + WPACKET_reserve_bytes__((pkt), (len), (bytes), 1) +#define WPACKET_sub_reserve_bytes_u16(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 2) +#define WPACKET_sub_reserve_bytes_u24(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 3) +#define WPACKET_sub_reserve_bytes_u32(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 4) + +/* + * Write the value stored in |val| into the WPACKET. The value will consume + * |bytes| amount of storage. An error will occur if |val| cannot be + * accommodated in |bytes| storage, e.g. attempting to write the value 256 into + * 1 byte will fail. Don't call this directly. Use the convenience macros below + * instead. + */ +int WPACKET_put_bytes__(WPACKET *pkt, uint64_t val, size_t bytes); + +/* + * Convenience macros for calling WPACKET_put_bytes with different + * lengths + */ +#define WPACKET_put_bytes_u8(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 1) +#define WPACKET_put_bytes_u16(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 2) +#define WPACKET_put_bytes_u24(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 3) +#define WPACKET_put_bytes_u32(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 4) +#define WPACKET_put_bytes_u64(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 8) + +/* Set a maximum size that we will not allow the WPACKET to grow beyond */ +int WPACKET_set_max_size(WPACKET *pkt, size_t maxsize); + +/* Copy |len| bytes of data from |*src| into the WPACKET. */ +int WPACKET_memcpy(WPACKET *pkt, const void *src, size_t len); + +/* Set |len| bytes of data to |ch| into the WPACKET. */ +int WPACKET_memset(WPACKET *pkt, int ch, size_t len); + +/* + * Copy |len| bytes of data from |*src| into the WPACKET and prefix with its + * length (consuming |lenbytes| of data for the length). Don't call this + * directly. Use the convenience macros below instead. + */ +int WPACKET_sub_memcpy__(WPACKET *pkt, const void *src, size_t len, + size_t lenbytes); + +/* Convenience macros for calling WPACKET_sub_memcpy with different lengths */ +#define WPACKET_sub_memcpy_u8(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 1) +#define WPACKET_sub_memcpy_u16(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 2) +#define WPACKET_sub_memcpy_u24(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 3) +#define WPACKET_sub_memcpy_u32(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 4) + +/* + * Return the total number of bytes written so far to the underlying buffer + * including any storage allocated for length bytes + */ +int WPACKET_get_total_written(WPACKET *pkt, size_t *written); + +/* + * Returns the length of the current sub-packet. This excludes any bytes + * allocated for the length itself. + */ +int WPACKET_get_length(WPACKET *pkt, size_t *len); + +/* + * Returns a pointer to the current write location, but does not allocate any + * bytes. + */ +unsigned char *WPACKET_get_curr(WPACKET *pkt); + +/* Returns true if the underlying buffer is actually NULL */ +int WPACKET_is_null_buf(WPACKET *pkt); + +/* Release resources in a WPACKET if a failure has occurred. */ +void WPACKET_cleanup(WPACKET *pkt); + +#endif /* OSSL_INTERNAL_PACKET_H */ diff --git a/deps/openssl/android/x86/usr/local/include/internal/param_build_set.h b/deps/openssl/android/x86/usr/local/include/internal/param_build_set.h new file mode 100644 index 00000000..126211b7 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/param_build_set.h @@ -0,0 +1,46 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PARAM_BUILD_SET_H +# define OSSL_INTERNAL_PARAM_BUILD_SET_H +# pragma once + +# include +# include +# include "internal/cryptlib.h" + +typedef union { + OSSL_UNION_ALIGN; +} OSSL_PARAM_ALIGNED_BLOCK; + +# define OSSL_PARAM_ALIGN_SIZE sizeof(OSSL_PARAM_ALIGNED_BLOCK) + +size_t ossl_param_bytes_to_blocks(size_t bytes); +void ossl_param_set_secure_block(OSSL_PARAM *last, void *secure_buffer, + size_t secure_buffer_sz); + +int ossl_param_build_set_int(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, int num); +int ossl_param_build_set_long(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, long num); +int ossl_param_build_set_utf8_string(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const char *buf); +int ossl_param_build_set_octet_string(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, + const unsigned char *data, + size_t data_len); +int ossl_param_build_set_bn(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const BIGNUM *bn); +int ossl_param_build_set_bn_pad(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const BIGNUM *bn, size_t sz); +int ossl_param_build_set_multi_key_bn(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *names[], + STACK_OF(BIGNUM_const) *stk); + +#endif /* OSSL_INTERNAL_PARAM_BUILD_SET_H */ diff --git a/deps/openssl/android/x86/usr/local/include/internal/passphrase.h b/deps/openssl/android/x86/usr/local/include/internal/passphrase.h new file mode 100644 index 00000000..54d997b0 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/passphrase.h @@ -0,0 +1,122 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PASSPHRASE_H +# define OSSL_INTERNAL_PASSPHRASE_H +# pragma once + +/* + * This is a passphrase reader bridge with bells and whistles. + * + * On one hand, an API may wish to offer all sorts of passphrase callback + * possibilities to users, or may have to do so for historical reasons. + * On the other hand, that same API may have demands from other interfaces, + * notably from the libcrypto <-> provider interface, which uses + * OSSL_PASSPHRASE_CALLBACK consistently. + * + * The structure and functions below are the fundaments for bridging one + * passphrase callback form to another. + * + * In addition, extra features are included (this may be a growing list): + * + * - password caching. This is to be used by APIs where it's likely + * that the same passphrase may be asked for more than once, but the + * user shouldn't get prompted more than once. For example, this is + * useful for OSSL_DECODER, which may have to use a passphrase while + * trying to find out what input it has. + */ + +/* + * Structure to hold whatever the calling user may specify. This structure + * is intended to be integrated into API specific structures or to be used + * as a local on-stack variable type. Therefore, no functions to allocate + * or freed it on the heap is offered. + */ +struct ossl_passphrase_data_st { + enum { + is_expl_passphrase = 1, /* Explicit passphrase given by user */ + is_pem_password, /* pem_password_cb given by user */ + is_ossl_passphrase, /* OSSL_PASSPHRASE_CALLBACK given by user */ + is_ui_method /* UI_METHOD given by user */ + } type; + union { + struct { + char *passphrase_copy; + size_t passphrase_len; + } expl_passphrase; + + struct { + pem_password_cb *password_cb; + void *password_cbarg; + } pem_password; + + struct { + OSSL_PASSPHRASE_CALLBACK *passphrase_cb; + void *passphrase_cbarg; + } ossl_passphrase; + + struct { + const UI_METHOD *ui_method; + void *ui_method_data; + } ui_method; + } _; + + /*- + * Flags section + */ + + /* Set to indicate that caching should be done */ + unsigned int flag_cache_passphrase:1; + + /*- + * Misc section: caches and other + */ + + char *cached_passphrase; + size_t cached_passphrase_len; +}; + +/* Structure manipulation */ + +void ossl_pw_clear_passphrase_data(struct ossl_passphrase_data_st *data); +void ossl_pw_clear_passphrase_cache(struct ossl_passphrase_data_st *data); + +int ossl_pw_set_passphrase(struct ossl_passphrase_data_st *data, + const unsigned char *passphrase, + size_t passphrase_len); +int ossl_pw_set_pem_password_cb(struct ossl_passphrase_data_st *data, + pem_password_cb *cb, void *cbarg); +int ossl_pw_set_ossl_passphrase_cb(struct ossl_passphrase_data_st *data, + OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg); +int ossl_pw_set_ui_method(struct ossl_passphrase_data_st *data, + const UI_METHOD *ui_method, void *ui_data); + +int ossl_pw_enable_passphrase_caching(struct ossl_passphrase_data_st *data); +int ossl_pw_disable_passphrase_caching(struct ossl_passphrase_data_st *data); + +/* Central function for direct calls */ + +int ossl_pw_get_passphrase(char *pass, size_t pass_size, size_t *pass_len, + const OSSL_PARAM params[], int verify, + struct ossl_passphrase_data_st *data); + +/* Callback functions */ + +/* + * All of these callback expect that the callback argument is a + * struct ossl_passphrase_data_st + */ + +pem_password_cb ossl_pw_pem_password; +pem_password_cb ossl_pw_pvk_password; +/* One callback for encoding (verification prompt) and one for decoding */ +OSSL_PASSPHRASE_CALLBACK ossl_pw_passphrase_callback_enc; +OSSL_PASSPHRASE_CALLBACK ossl_pw_passphrase_callback_dec; + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/property.h b/deps/openssl/android/x86/usr/local/include/internal/property.h new file mode 100644 index 00000000..d09274d0 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/property.h @@ -0,0 +1,99 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROPERTY_H +# define OSSL_INTERNAL_PROPERTY_H +# pragma once + +# include "internal/cryptlib.h" + +typedef struct ossl_method_store_st OSSL_METHOD_STORE; +typedef struct ossl_property_list_st OSSL_PROPERTY_LIST; + +typedef enum { + OSSL_PROPERTY_TYPE_STRING, OSSL_PROPERTY_TYPE_NUMBER, + OSSL_PROPERTY_TYPE_VALUE_UNDEFINED +} OSSL_PROPERTY_TYPE; +typedef struct ossl_property_definition_st OSSL_PROPERTY_DEFINITION; + +/* Initialisation */ +int ossl_property_parse_init(OSSL_LIB_CTX *ctx); + +/* Property definition parser */ +OSSL_PROPERTY_LIST *ossl_parse_property(OSSL_LIB_CTX *ctx, const char *defn); +/* Property query parser */ +OSSL_PROPERTY_LIST *ossl_parse_query(OSSL_LIB_CTX *ctx, const char *s, + int create_values); +/* Property checker of query vs definition */ +int ossl_property_match_count(const OSSL_PROPERTY_LIST *query, + const OSSL_PROPERTY_LIST *defn); +int ossl_property_is_enabled(OSSL_LIB_CTX *ctx, const char *property_name, + const OSSL_PROPERTY_LIST *prop_list); +/* Free a parsed property list */ +void ossl_property_free(OSSL_PROPERTY_LIST *p); + +/* Get a property from a property list */ +const OSSL_PROPERTY_DEFINITION * +ossl_property_find_property(const OSSL_PROPERTY_LIST *list, + OSSL_LIB_CTX *libctx, const char *name); +OSSL_PROPERTY_TYPE ossl_property_get_type(const OSSL_PROPERTY_DEFINITION *prop); +const char *ossl_property_get_string_value(OSSL_LIB_CTX *libctx, + const OSSL_PROPERTY_DEFINITION *prop); +int64_t ossl_property_get_number_value(const OSSL_PROPERTY_DEFINITION *prop); + + +/* Implementation store functions */ +OSSL_METHOD_STORE *ossl_method_store_new(OSSL_LIB_CTX *ctx); +void ossl_method_store_free(OSSL_METHOD_STORE *store); + +int ossl_method_lock_store(OSSL_METHOD_STORE *store); +int ossl_method_unlock_store(OSSL_METHOD_STORE *store); + +int ossl_method_store_add(OSSL_METHOD_STORE *store, const OSSL_PROVIDER *prov, + int nid, const char *properties, void *method, + int (*method_up_ref)(void *), + void (*method_destruct)(void *)); +int ossl_method_store_remove(OSSL_METHOD_STORE *store, int nid, + const void *method); +void ossl_method_store_do_all(OSSL_METHOD_STORE *store, + void (*fn)(int id, void *method, void *fnarg), + void *fnarg); +int ossl_method_store_fetch(OSSL_METHOD_STORE *store, + int nid, const char *prop_query, + const OSSL_PROVIDER **prov, void **method); +int ossl_method_store_remove_all_provided(OSSL_METHOD_STORE *store, + const OSSL_PROVIDER *prov); + +/* Get the global properties associate with the specified library context */ +OSSL_PROPERTY_LIST **ossl_ctx_global_properties(OSSL_LIB_CTX *ctx, + int loadconfig); + +/* property query cache functions */ +int ossl_method_store_cache_get(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov, + int nid, const char *prop_query, void **result); +int ossl_method_store_cache_set(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov, + int nid, const char *prop_query, void *result, + int (*method_up_ref)(void *), + void (*method_destruct)(void *)); + +__owur int ossl_method_store_cache_flush_all(OSSL_METHOD_STORE *store); + +/* Merge two property queries together */ +OSSL_PROPERTY_LIST *ossl_property_merge(const OSSL_PROPERTY_LIST *a, + const OSSL_PROPERTY_LIST *b); + +size_t ossl_property_list_to_string(OSSL_LIB_CTX *ctx, + const OSSL_PROPERTY_LIST *list, char *buf, + size_t bufsize); + +int ossl_global_properties_no_mirrored(OSSL_LIB_CTX *libctx); +void ossl_global_properties_stop_mirroring(OSSL_LIB_CTX *libctx); + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/propertyerr.h b/deps/openssl/android/x86/usr/local/include/internal/propertyerr.h new file mode 100644 index 00000000..fbee53f1 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/propertyerr.h @@ -0,0 +1,43 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROPERTYERR_H +# define OSSL_INTERNAL_PROPERTYERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PROP_strings(void); + +/* + * PROP reason codes. + */ +# define PROP_R_NAME_TOO_LONG 100 +# define PROP_R_NOT_AN_ASCII_CHARACTER 101 +# define PROP_R_NOT_AN_HEXADECIMAL_DIGIT 102 +# define PROP_R_NOT_AN_IDENTIFIER 103 +# define PROP_R_NOT_AN_OCTAL_DIGIT 104 +# define PROP_R_NOT_A_DECIMAL_DIGIT 105 +# define PROP_R_NO_MATCHING_STRING_DELIMITER 106 +# define PROP_R_NO_VALUE 107 +# define PROP_R_PARSE_FAILED 108 +# define PROP_R_STRING_TOO_LONG 109 +# define PROP_R_TRAILING_CHARACTERS 110 + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/provider.h b/deps/openssl/android/x86/usr/local/include/internal/provider.h new file mode 100644 index 00000000..18937f84 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/provider.h @@ -0,0 +1,119 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROVIDER_H +# define OSSL_INTERNAL_PROVIDER_H +# pragma once + +# include +# include +# include "internal/dso.h" +# include "internal/symhacks.h" + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * namespaces: + * + * ossl_provider_ Provider Object internal API + * OSSL_PROVIDER Provider Object + */ + +/* Provider Object finder, constructor and destructor */ +OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name, + int noconfig); +OSSL_PROVIDER *ossl_provider_new(OSSL_LIB_CTX *libctx, const char *name, + OSSL_provider_init_fn *init_function, + int noconfig); +int ossl_provider_up_ref(OSSL_PROVIDER *prov); +void ossl_provider_free(OSSL_PROVIDER *prov); + +/* Setters */ +int ossl_provider_set_module_path(OSSL_PROVIDER *prov, const char *module_path); +int ossl_provider_add_parameter(OSSL_PROVIDER *prov, const char *name, + const char *value); + +int ossl_provider_is_child(const OSSL_PROVIDER *prov); +int ossl_provider_set_child(OSSL_PROVIDER *prov, const OSSL_CORE_HANDLE *handle); +const OSSL_CORE_HANDLE *ossl_provider_get_parent(OSSL_PROVIDER *prov); +int ossl_provider_up_ref_parent(OSSL_PROVIDER *prov, int activate); +int ossl_provider_free_parent(OSSL_PROVIDER *prov, int deactivate); +int ossl_provider_default_props_update(OSSL_LIB_CTX *libctx, const char *props); + +/* Disable fallback loading */ +int ossl_provider_disable_fallback_loading(OSSL_LIB_CTX *libctx); + +/* + * Activate the Provider + * If the Provider is a module, the module will be loaded + */ +int ossl_provider_activate(OSSL_PROVIDER *prov, int upcalls, int aschild); +int ossl_provider_deactivate(OSSL_PROVIDER *prov, int removechildren); +int ossl_provider_add_to_store(OSSL_PROVIDER *prov, OSSL_PROVIDER **actualprov, + int retain_fallbacks); + +/* Return pointer to the provider's context */ +void *ossl_provider_ctx(const OSSL_PROVIDER *prov); + +/* Iterate over all loaded providers */ +int ossl_provider_doall_activated(OSSL_LIB_CTX *, + int (*cb)(OSSL_PROVIDER *provider, + void *cbdata), + void *cbdata); + +/* Getters for other library functions */ +const char *ossl_provider_name(const OSSL_PROVIDER *prov); +const DSO *ossl_provider_dso(const OSSL_PROVIDER *prov); +const char *ossl_provider_module_name(const OSSL_PROVIDER *prov); +const char *ossl_provider_module_path(const OSSL_PROVIDER *prov); +void *ossl_provider_prov_ctx(const OSSL_PROVIDER *prov); +const OSSL_DISPATCH *ossl_provider_get0_dispatch(const OSSL_PROVIDER *prov); +OSSL_LIB_CTX *ossl_provider_libctx(const OSSL_PROVIDER *prov); + +/* Thin wrappers around calls to the provider */ +void ossl_provider_teardown(const OSSL_PROVIDER *prov); +const OSSL_PARAM *ossl_provider_gettable_params(const OSSL_PROVIDER *prov); +int ossl_provider_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]); +int ossl_provider_get_capabilities(const OSSL_PROVIDER *prov, + const char *capability, + OSSL_CALLBACK *cb, + void *arg); +int ossl_provider_self_test(const OSSL_PROVIDER *prov); +const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov, + int operation_id, + int *no_cache); +void ossl_provider_unquery_operation(const OSSL_PROVIDER *prov, + int operation_id, + const OSSL_ALGORITHM *algs); + +/* + * Cache of bits to see if we already added methods for an operation in + * the "permanent" method store. + * They should never be called for temporary method stores! + */ +int ossl_provider_set_operation_bit(OSSL_PROVIDER *provider, size_t bitnum); +int ossl_provider_test_operation_bit(OSSL_PROVIDER *provider, size_t bitnum, + int *result); + +/* Configuration */ +void ossl_provider_add_conf_module(void); + +/* Child providers */ +int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx, + const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +void ossl_provider_deinit_child(OSSL_LIB_CTX *ctx); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/refcount.h b/deps/openssl/android/x86/usr/local/include/internal/refcount.h index 8fb536ea..3392d3b4 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/refcount.h +++ b/deps/openssl/android/x86/usr/local/include/internal/refcount.h @@ -1,35 +1,34 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #ifndef OSSL_INTERNAL_REFCOUNT_H # define OSSL_INTERNAL_REFCOUNT_H +# pragma once -/* Used to checking reference counts, most while doing perl5 stuff :-) */ -# if defined(OPENSSL_NO_STDIO) -# if defined(REF_PRINT) -# error "REF_PRINT requires stdio" +# include +# include + +# if defined(OPENSSL_THREADS) && !defined(OPENSSL_DEV_NO_ATOMICS) +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ + && !defined(__STDC_NO_ATOMICS__) +# include +# define HAVE_C11_ATOMICS # endif -# endif -# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ - && !defined(__STDC_NO_ATOMICS__) -# include -# define HAVE_C11_ATOMICS -# endif +# if defined(HAVE_C11_ATOMICS) && defined(ATOMIC_INT_LOCK_FREE) \ + && ATOMIC_INT_LOCK_FREE > 0 -# if defined(HAVE_C11_ATOMICS) && defined(ATOMIC_INT_LOCK_FREE) \ - && ATOMIC_INT_LOCK_FREE > 0 - -# define HAVE_ATOMICS 1 +# define HAVE_ATOMICS 1 typedef _Atomic int CRYPTO_REF_COUNT; -static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, void *lock) +static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, + ossl_unused void *lock) { *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1; return 1; @@ -45,7 +44,8 @@ static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, void *lock) * to mutable members doesn't have to be serialized anymore, which would * otherwise imply an acquire fence. Hence conditional acquire fence... */ -static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, void *lock) +static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, + ossl_unused void *lock) { *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1; if (*ret == 0) @@ -53,78 +53,108 @@ static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, void *lock) return 1; } -# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) && __GCC_ATOMIC_INT_LOCK_FREE > 0 +# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) && __GCC_ATOMIC_INT_LOCK_FREE > 0 -# define HAVE_ATOMICS 1 +# define HAVE_ATOMICS 1 typedef int CRYPTO_REF_COUNT; -static __inline__ int CRYPTO_UP_REF(int *val, int *ret, void *lock) +static __inline__ int CRYPTO_UP_REF(int *val, int *ret, ossl_unused void *lock) { *ret = __atomic_fetch_add(val, 1, __ATOMIC_RELAXED) + 1; return 1; } -static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, void *lock) +static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, + ossl_unused void *lock) { *ret = __atomic_fetch_sub(val, 1, __ATOMIC_RELAXED) - 1; if (*ret == 0) __atomic_thread_fence(__ATOMIC_ACQUIRE); return 1; } +# elif defined(__ICL) && defined(_WIN32) +# define HAVE_ATOMICS 1 +typedef volatile int CRYPTO_REF_COUNT; -# elif defined(_MSC_VER) && _MSC_VER>=1200 +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) +{ + *ret = _InterlockedExchangeAdd((void *)val, 1) + 1; + return 1; +} -# define HAVE_ATOMICS 1 +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) +{ + *ret = _InterlockedExchangeAdd((void *)val, -1) - 1; + return 1; +} + +# elif defined(_MSC_VER) && _MSC_VER>=1200 + +# define HAVE_ATOMICS 1 typedef volatile int CRYPTO_REF_COUNT; -# if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) -# include -# if defined(_M_ARM64) && !defined(_ARM_BARRIER_ISH) -# define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH -# endif +# if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) +# include +# if defined(_M_ARM64) && !defined(_ARM_BARRIER_ISH) +# define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH +# endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd_nf(val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd_nf(val, -1) - 1; if (*ret == 0) __dmb(_ARM_BARRIER_ISH); return 1; } -# else -# if !defined(_WIN32_WCE) -# pragma intrinsic(_InterlockedExchangeAdd) # else -# if _WIN32_WCE >= 0x600 - extern long __cdecl _InterlockedExchangeAdd(long volatile*, long); +# if !defined(_WIN32_WCE) +# pragma intrinsic(_InterlockedExchangeAdd) # else - /* under Windows CE we still have old-style Interlocked* functions */ - extern long __cdecl InterlockedExchangeAdd(long volatile*, long); -# define _InterlockedExchangeAdd InterlockedExchangeAdd +# if _WIN32_WCE >= 0x600 + extern long __cdecl _InterlockedExchangeAdd(long volatile*, long); +# else + /* under Windows CE we still have old-style Interlocked* functions */ + extern long __cdecl InterlockedExchangeAdd(long volatile*, long); +# define _InterlockedExchangeAdd InterlockedExchangeAdd +# endif # endif -# endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd(val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd(val, -1) - 1; return 1; } -# endif +# endif -# else +# endif +# endif /* !OPENSSL_DEV_NO_ATOMICS */ + +/* + * All the refcounting implementations above define HAVE_ATOMICS, so if it's + * still undefined here (such as when OPENSSL_DEV_NO_ATOMICS is defined), it + * means we need to implement a fallback. This fallback uses locks. + */ +# ifndef HAVE_ATOMICS typedef int CRYPTO_REF_COUNT; @@ -140,11 +170,9 @@ typedef int CRYPTO_REF_COUNT; # define REF_ASSERT_ISNT(i) # endif -# ifdef REF_PRINT -# define REF_PRINT_COUNT(a, b) \ - fprintf(stderr, "%p:%4d:%s\n", b, b->references, a) -# else -# define REF_PRINT_COUNT(a, b) -# endif +# define REF_PRINT_EX(text, count, object) \ + OSSL_TRACE3(REF_COUNT, "%p:%4d:%s\n", (object), (count), (text)); +# define REF_PRINT_COUNT(text, object) \ + REF_PRINT_EX(text, object->references, (void *)object) #endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/sha3.h b/deps/openssl/android/x86/usr/local/include/internal/sha3.h new file mode 100644 index 00000000..80ad86e5 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/sha3.h @@ -0,0 +1,54 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* This header can move into provider when legacy support is removed */ +#ifndef OSSL_INTERNAL_SHA3_H +# define OSSL_INTERNAL_SHA3_H +# pragma once + +# include +# include + +# define KECCAK1600_WIDTH 1600 +# define SHA3_MDSIZE(bitlen) (bitlen / 8) +# define KMAC_MDSIZE(bitlen) 2 * (bitlen / 8) +# define SHA3_BLOCKSIZE(bitlen) (KECCAK1600_WIDTH - bitlen * 2) / 8 + +typedef struct keccak_st KECCAK1600_CTX; + +typedef size_t (sha3_absorb_fn)(void *vctx, const void *inp, size_t len); +typedef int (sha3_final_fn)(unsigned char *md, void *vctx); + +typedef struct prov_sha3_meth_st +{ + sha3_absorb_fn *absorb; + sha3_final_fn *final; +} PROV_SHA3_METHOD; + +struct keccak_st { + uint64_t A[5][5]; + size_t block_size; /* cached ctx->digest->block_size */ + size_t md_size; /* output length, variable in XOF */ + size_t bufsz; /* used bytes in below buffer */ + unsigned char buf[KECCAK1600_WIDTH / 8 - 32]; + unsigned char pad; + PROV_SHA3_METHOD meth; +}; + +void ossl_sha3_reset(KECCAK1600_CTX *ctx); +int ossl_sha3_init(KECCAK1600_CTX *ctx, unsigned char pad, size_t bitlen); +int ossl_keccak_kmac_init(KECCAK1600_CTX *ctx, unsigned char pad, + size_t bitlen); +int ossl_sha3_update(KECCAK1600_CTX *ctx, const void *_inp, size_t len); +int ossl_sha3_final(unsigned char *md, KECCAK1600_CTX *ctx); + +size_t SHA3_absorb(uint64_t A[5][5], const unsigned char *inp, size_t len, + size_t r); + +#endif /* OSSL_INTERNAL_SHA3_H */ diff --git a/deps/openssl/android/x86/usr/local/include/internal/sizes.h b/deps/openssl/android/x86/usr/local/include/internal/sizes.h new file mode 100644 index 00000000..f6496c81 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/sizes.h @@ -0,0 +1,22 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_SIZES_H +# define OSSL_INTERNAL_SIZES_H +# pragma once + +/* + * Max sizes used to allocate buffers with a fixed sizes, for example for + * stack allocations, structure fields, ... + */ +# define OSSL_MAX_NAME_SIZE 50 /* Algorithm name */ +# define OSSL_MAX_PROPQUERY_SIZE 256 /* Property query strings */ +# define OSSL_MAX_ALGORITHM_ID_SIZE 256 /* AlgorithmIdentifier DER */ + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/sm3.h b/deps/openssl/android/x86/usr/local/include/internal/sm3.h similarity index 56% rename from deps/openssl/android/x86/usr/local/include/crypto/sm3.h rename to deps/openssl/android/x86/usr/local/include/internal/sm3.h index 97e74603..db1d61f0 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/sm3.h +++ b/deps/openssl/android/x86/usr/local/include/internal/sm3.h @@ -1,15 +1,17 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2017 Ribose Inc. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef OSSL_CRYPTO_SM3_H -# define OSSL_CRYPTO_SM3_H +/* This header can move into provider when legacy support is removed */ +#ifndef OSSL_INTERNAL_SM3_H +# define OSSL_INTERNAL_SM3_H +# pragma once # include @@ -30,10 +32,8 @@ typedef struct SM3state_st { unsigned int num; } SM3_CTX; -int sm3_init(SM3_CTX *c); -int sm3_update(SM3_CTX *c, const void *data, size_t len); -int sm3_final(unsigned char *md, SM3_CTX *c); +int ossl_sm3_init(SM3_CTX *c); +int ossl_sm3_update(SM3_CTX *c, const void *data, size_t len); +int ossl_sm3_final(unsigned char *md, SM3_CTX *c); -void sm3_block_data_order(SM3_CTX *c, const void *p, size_t num); - -#endif +#endif /* OSSL_INTERNAL_SM3_H */ diff --git a/deps/openssl/android/x86/usr/local/include/internal/sockets.h b/deps/openssl/android/x86/usr/local/include/internal/sockets.h index 4fc1aecd..1f5fefcc 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/sockets.h +++ b/deps/openssl/android/x86/usr/local/include/internal/sockets.h @@ -1,15 +1,17 @@ /* * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ - #ifndef OSSL_INTERNAL_SOCKETS_H # define OSSL_INTERNAL_SOCKETS_H +# pragma once + +# include # if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) # define NO_SYS_PARAM_H @@ -26,6 +28,8 @@ # elif defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) # if defined(__DJGPP__) +# define WATT32 +# define WATT32_NO_OLDIES # include # include # include @@ -73,7 +77,7 @@ struct servent *PASCAL getservbyname(const char *, const char *); # include # else # include -# ifndef NO_SYS_UN_H +# if !defined(NO_SYS_UN_H) && defined(AF_UNIX) && !defined(OPENSSL_NO_UNIX_SOCK) # include # ifndef UNIX_PATH_MAX # define UNIX_PATH_MAX sizeof(((struct sockaddr_un *)NULL)->sun_path) @@ -121,6 +125,15 @@ struct servent *PASCAL getservbyname(const char *, const char *); # endif # endif +/* + * Some platforms define AF_UNIX, but don't support it + */ +# if !defined(OPENSSL_NO_UNIX_SOCK) +# if !defined(AF_UNIX) || defined(NO_SYS_UN_H) +# define OPENSSL_NO_UNIX_SOCK +# endif +# endif + # define get_last_socket_error() errno # define clear_socket_error() errno=0 @@ -132,8 +145,6 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define readsocket(s,b,n) recv((s),(b),(n),0) # define writesocket(s,b,n) send((s),(b),(n),0) # elif defined(__DJGPP__) -# define WATT32 -# define WATT32_NO_OLDIES # define closesocket(s) close_s(s) # define readsocket(s,b,n) read_s(s,b,n) # define writesocket(s,b,n) send(s,b,n,0) @@ -147,6 +158,17 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define closesocket(s) close(s) # define readsocket(s,b,n) read((s),(b),(n)) # define writesocket(s,b,n) write((s),(char *)(b),(n)) +# elif defined(OPENSSL_SYS_TANDEM) +# if defined(OPENSSL_TANDEM_FLOSS) +# include +# define readsocket(s,b,n) floss_read((s),(b),(n)) +# define writesocket(s,b,n) floss_write((s),(b),(n)) +# else +# define readsocket(s,b,n) read((s),(b),(n)) +# define writesocket(s,b,n) write((s),(b),(n)) +# endif +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# define closesocket(s) close(s) # else # define ioctlsocket(a,b,c) ioctl(a,b,c) # define closesocket(s) close(s) @@ -154,4 +176,11 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define writesocket(s,b,n) write((s),(b),(n)) # endif +/* also in apps/include/apps.h */ +# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINCE) +# define openssl_fdset(a, b) FD_SET((unsigned int)(a), b) +# else +# define openssl_fdset(a, b) FD_SET(a, b) +# endif + #endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/sslconf.h b/deps/openssl/android/x86/usr/local/include/internal/sslconf.h index 92c8941d..fd7f7e33 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/sslconf.h +++ b/deps/openssl/android/x86/usr/local/include/internal/sslconf.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_SSLCONF_H # define OSSL_INTERNAL_SSLCONF_H +# pragma once typedef struct ssl_conf_cmd_st SSL_CONF_CMD; diff --git a/deps/openssl/android/x86/usr/local/include/internal/symhacks.h b/deps/openssl/android/x86/usr/local/include/internal/symhacks.h new file mode 100644 index 00000000..33bae51e --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/symhacks.h @@ -0,0 +1,27 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_SYMHACKS_H +# define OSSL_INTERNAL_SYMHACKS_H +# pragma once + +# include + +# if defined(OPENSSL_SYS_VMS) + +/* ossl_provider_gettable_params vs OSSL_PROVIDER_gettable_params */ +# undef ossl_provider_gettable_params +# define ossl_provider_gettable_params ossl_int_prov_gettable_params +/* ossl_provider_get_params vs OSSL_PROVIDER_get_params */ +# undef ossl_provider_get_params +# define ossl_provider_get_params ossl_int_prov_get_params + +# endif + +#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/deps/openssl/android/x86/usr/local/include/internal/thread_once.h b/deps/openssl/android/x86/usr/local/include/internal/thread_once.h index 8f8aa6e1..d6cb2eee 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/thread_once.h +++ b/deps/openssl/android/x86/usr/local/include/internal/thread_once.h @@ -1,17 +1,28 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_INTERNAL_THREAD_ONCE_H +# define OSSL_INTERNAL_THREAD_ONCE_H +# pragma once + +# include +/* + * Initialisation of global data should never happen via "RUN_ONCE" inside the + * FIPS module. Global data should instead always be associated with a specific + * OSSL_LIB_CTX object. In this way data will get cleaned up correctly when the + * module gets unloaded. + */ +# if !defined(FIPS_MODULE) || defined(ALLOW_RUN_ONCE_IN_FIPS) /* * DEFINE_RUN_ONCE: Define an initialiser function that should be run exactly - * once. It takes no arguments and returns and int result (1 for success or + * once. It takes no arguments and returns an int result (1 for success or * 0 for failure). Typical usage might be: * * DEFINE_RUN_ONCE(myinitfunc) @@ -23,7 +34,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE(init) \ +# define DEFINE_RUN_ONCE(init) \ static int init(void); \ int init##_ossl_ret_ = 0; \ void init##_ossl_(void) \ @@ -36,14 +47,14 @@ * DECLARE_RUN_ONCE: Declare an initialiser function that should be run exactly * once that has been defined in another file via DEFINE_RUN_ONCE(). */ -#define DECLARE_RUN_ONCE(init) \ +# define DECLARE_RUN_ONCE(init) \ extern int init##_ossl_ret_; \ void init##_ossl_(void); /* * DEFINE_RUN_ONCE_STATIC: Define an initialiser function that should be run * exactly once. This function will be declared as static within the file. It - * takes no arguments and returns and int result (1 for success or 0 for + * takes no arguments and returns an int result (1 for success or 0 for * failure). Typical usage might be: * * DEFINE_RUN_ONCE_STATIC(myinitfunc) @@ -55,7 +66,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE_STATIC(init) \ +# define DEFINE_RUN_ONCE_STATIC(init) \ static int init(void); \ static int init##_ossl_ret_ = 0; \ static void init##_ossl_(void) \ @@ -96,7 +107,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE_STATIC_ALT(initalt, init) \ +# define DEFINE_RUN_ONCE_STATIC_ALT(initalt, init) \ static int initalt(void); \ static void initalt##_ossl_(void) \ { \ @@ -115,7 +126,7 @@ * * (*) by convention, since the init function must return 1 on success. */ -#define RUN_ONCE(once, init) \ +# define RUN_ONCE(once, init) \ (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0) /* @@ -133,5 +144,8 @@ * * (*) by convention, since the init function must return 1 on success. */ -#define RUN_ONCE_ALT(once, initalt, init) \ +# define RUN_ONCE_ALT(once, initalt, init) \ (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0) + +# endif /* FIPS_MODULE */ +#endif /* OSSL_INTERNAL_THREAD_ONCE_H */ diff --git a/deps/openssl/android/x86/usr/local/include/internal/tlsgroups.h b/deps/openssl/android/x86/usr/local/include/internal/tlsgroups.h new file mode 100644 index 00000000..8a35ced1 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/tlsgroups.h @@ -0,0 +1,50 @@ +/* + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_TLSGROUPS_H +# define OSSL_INTERNAL_TLSGROUPS_H +# pragma once + +# define OSSL_TLS_GROUP_ID_sect163k1 0x0001 +# define OSSL_TLS_GROUP_ID_sect163r1 0x0002 +# define OSSL_TLS_GROUP_ID_sect163r2 0x0003 +# define OSSL_TLS_GROUP_ID_sect193r1 0x0004 +# define OSSL_TLS_GROUP_ID_sect193r2 0x0005 +# define OSSL_TLS_GROUP_ID_sect233k1 0x0006 +# define OSSL_TLS_GROUP_ID_sect233r1 0x0007 +# define OSSL_TLS_GROUP_ID_sect239k1 0x0008 +# define OSSL_TLS_GROUP_ID_sect283k1 0x0009 +# define OSSL_TLS_GROUP_ID_sect283r1 0x000A +# define OSSL_TLS_GROUP_ID_sect409k1 0x000B +# define OSSL_TLS_GROUP_ID_sect409r1 0x000C +# define OSSL_TLS_GROUP_ID_sect571k1 0x000D +# define OSSL_TLS_GROUP_ID_sect571r1 0x000E +# define OSSL_TLS_GROUP_ID_secp160k1 0x000F +# define OSSL_TLS_GROUP_ID_secp160r1 0x0010 +# define OSSL_TLS_GROUP_ID_secp160r2 0x0011 +# define OSSL_TLS_GROUP_ID_secp192k1 0x0012 +# define OSSL_TLS_GROUP_ID_secp192r1 0x0013 +# define OSSL_TLS_GROUP_ID_secp224k1 0x0014 +# define OSSL_TLS_GROUP_ID_secp224r1 0x0015 +# define OSSL_TLS_GROUP_ID_secp256k1 0x0016 +# define OSSL_TLS_GROUP_ID_secp256r1 0x0017 +# define OSSL_TLS_GROUP_ID_secp384r1 0x0018 +# define OSSL_TLS_GROUP_ID_secp521r1 0x0019 +# define OSSL_TLS_GROUP_ID_brainpoolP256r1 0x001A +# define OSSL_TLS_GROUP_ID_brainpoolP384r1 0x001B +# define OSSL_TLS_GROUP_ID_brainpoolP512r1 0x001C +# define OSSL_TLS_GROUP_ID_x25519 0x001D +# define OSSL_TLS_GROUP_ID_x448 0x001E +# define OSSL_TLS_GROUP_ID_ffdhe2048 0x0100 +# define OSSL_TLS_GROUP_ID_ffdhe3072 0x0101 +# define OSSL_TLS_GROUP_ID_ffdhe4096 0x0102 +# define OSSL_TLS_GROUP_ID_ffdhe6144 0x0103 +# define OSSL_TLS_GROUP_ID_ffdhe8192 0x0104 + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/tsan_assist.h b/deps/openssl/android/x86/usr/local/include/internal/tsan_assist.h index cc30162e..17205d10 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/tsan_assist.h +++ b/deps/openssl/android/x86/usr/local/include/internal/tsan_assist.h @@ -1,7 +1,7 @@ /* - * Copyright 2018-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -56,8 +56,7 @@ # define TSAN_QUALIFIER _Atomic # define tsan_load(ptr) atomic_load_explicit((ptr), memory_order_relaxed) # define tsan_store(ptr, val) atomic_store_explicit((ptr), (val), memory_order_relaxed) -# define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed) -# define tsan_decr(ptr) atomic_fetch_add_explicit((ptr), -1, memory_order_relaxed) +# define tsan_add(ptr, n) atomic_fetch_add_explicit((ptr), (n), memory_order_relaxed) # define tsan_ld_acq(ptr) atomic_load_explicit((ptr), memory_order_acquire) # define tsan_st_rel(ptr, val) atomic_store_explicit((ptr), (val), memory_order_release) # endif @@ -69,8 +68,7 @@ # define TSAN_QUALIFIER volatile # define tsan_load(ptr) __atomic_load_n((ptr), __ATOMIC_RELAXED) # define tsan_store(ptr, val) __atomic_store_n((ptr), (val), __ATOMIC_RELAXED) -# define tsan_counter(ptr) __atomic_fetch_add((ptr), 1, __ATOMIC_RELAXED) -# define tsan_decr(ptr) __atomic_fetch_add((ptr), -1, __ATOMIC_RELAXED) +# define tsan_add(ptr, n) __atomic_fetch_add((ptr), (n), __ATOMIC_RELAXED) # define tsan_ld_acq(ptr) __atomic_load_n((ptr), __ATOMIC_ACQUIRE) # define tsan_st_rel(ptr, val) __atomic_store_n((ptr), (val), __ATOMIC_RELEASE) # endif @@ -113,13 +111,10 @@ # pragma intrinsic(_InterlockedExchangeAdd) # ifdef _WIN64 # pragma intrinsic(_InterlockedExchangeAdd64) -# define tsan_counter(ptr) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), 1) \ - : _InterlockedExchangeAdd((ptr), 1)) -# define tsan_decr(ptr) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), -1) \ - : _InterlockedExchangeAdd((ptr), -1)) +# define tsan_add(ptr, n) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), (n)) \ + : _InterlockedExchangeAdd((ptr), (n))) # else -# define tsan_counter(ptr) _InterlockedExchangeAdd((ptr), 1) -# define tsan_decr(ptr) _InterlockedExchangeAdd((ptr), -1) +# define tsan_add(ptr, n) _InterlockedExchangeAdd((ptr), (n)) # endif # if !defined(_ISO_VOLATILE) # define tsan_ld_acq(ptr) (*(ptr)) @@ -130,11 +125,16 @@ #ifndef TSAN_QUALIFIER -# define TSAN_QUALIFIER volatile +# ifdef OPENSSL_THREADS +# define TSAN_QUALIFIER volatile +# define TSAN_REQUIRES_LOCKING +# else /* OPENSSL_THREADS */ +# define TSAN_QUALIFIER +# endif /* OPENSSL_THREADS */ + # define tsan_load(ptr) (*(ptr)) # define tsan_store(ptr, val) (*(ptr) = (val)) -# define tsan_counter(ptr) ((*(ptr))++) -# define tsan_decr(ptr) ((*(ptr))--) +# define tsan_add(ptr, n) (*(ptr) += (n)) /* * Lack of tsan_ld_acq and tsan_ld_rel means that compiler support is not * sophisticated enough to support them. Code that relies on them should be @@ -142,3 +142,7 @@ */ #endif + +#define tsan_counter(ptr) tsan_add((ptr), 1) +#define tsan_decr(ptr) tsan_add((ptr), -1) + diff --git a/deps/openssl/android/x86/usr/local/include/internal/unicode.h b/deps/openssl/android/x86/usr/local/include/internal/unicode.h new file mode 100644 index 00000000..a6de8352 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/unicode.h @@ -0,0 +1,31 @@ +/* + * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_UNICODE_H +# define OSSL_INTERNAL_UNICODE_H +# pragma once + +typedef enum { + SURROGATE_MIN = 0xd800UL, + SURROGATE_MAX = 0xdfffUL, + UNICODE_MAX = 0x10ffffUL, + UNICODE_LIMIT +} UNICODE_CONSTANTS; + +static ossl_unused ossl_inline int is_unicode_surrogate(unsigned long value) +{ + return value >= SURROGATE_MIN && value <= SURROGATE_MAX; +} + +static ossl_unused ossl_inline int is_unicode_valid(unsigned long value) +{ + return value <= UNICODE_MAX && !is_unicode_surrogate(value); +} + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H b/deps/openssl/android/x86/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H index ad0a5f56..d251d0a0 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H +++ b/deps/openssl/android/x86/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H b/deps/openssl/android/x86/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H index 5f5513e8..91ac6b33 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H +++ b/deps/openssl/android/x86/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86/usr/local/include/openssl/aes.h b/deps/openssl/android/x86/usr/local/include/openssl/aes.h index 245c552a..d0f9dfc6 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/aes.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/aes.h @@ -1,14 +1,20 @@ /* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_AES_H -# define HEADER_AES_H +#ifndef OPENSSL_AES_H +# define OPENSSL_AES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_AES_H +# endif # include @@ -17,72 +23,85 @@ extern "C" { # endif -# define AES_ENCRYPT 1 -# define AES_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ -# define AES_MAXNR 14 # define AES_BLOCK_SIZE 16 +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define AES_ENCRYPT 1 +# define AES_DECRYPT 0 + +# define AES_MAXNR 14 + + /* This should be a hidden type, but EVP requires that the size be known */ struct aes_key_st { -# ifdef AES_LONG +# ifdef AES_LONG unsigned long rd_key[4 * (AES_MAXNR + 1)]; -# else +# else unsigned int rd_key[4 * (AES_MAXNR + 1)]; -# endif +# endif int rounds; }; typedef struct aes_key_st AES_KEY; -const char *AES_options(void); - +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *AES_options(void); +OSSL_DEPRECATEDIN_3_0 int AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 int AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); - +OSSL_DEPRECATEDIN_3_0 void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); - +OSSL_DEPRECATEDIN_3_0 void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num); + /* NB: the IV is _two_ blocks long */ +OSSL_DEPRECATEDIN_3_0 void AES_ige_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); /* NB: the IV is _four_ blocks long */ +OSSL_DEPRECATEDIN_3_0 void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - const AES_KEY *key2, const unsigned char *ivec, - const int enc); - + size_t length, const AES_KEY *key, const AES_KEY *key2, + const unsigned char *ivec, const int enc); +OSSL_DEPRECATEDIN_3_0 int AES_wrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); + unsigned char *out, const unsigned char *in, + unsigned int inlen); +OSSL_DEPRECATEDIN_3_0 int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); + unsigned char *out, const unsigned char *in, + unsigned int inlen); +# endif # ifdef __cplusplus diff --git a/deps/openssl/android/x86/usr/local/include/openssl/asn1.h b/deps/openssl/android/x86/usr/local/include/openssl/asn1.h index 9522eec1..85ae8d58 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/asn1.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/asn1.h @@ -1,15 +1,29 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/asn1.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1_H -# define HEADER_ASN1_H + +#ifndef OPENSSL_ASN1_H +# define OPENSSL_ASN1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1_H +# endif + +# ifndef OPENSSL_NO_STDIO +# include +# endif # include # include # include @@ -18,10 +32,8 @@ # include # include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif +# include +# include # ifdef OPENSSL_BUILD_SHLIBCRYPTO # undef OPENSSL_EXTERN @@ -115,8 +127,36 @@ extern "C" { # define SMIME_OLDMIME 0x400 # define SMIME_CRLFEOL 0x800 # define SMIME_STREAM 0x1000 - struct X509_algor_st; -DEFINE_STACK_OF(X509_ALGOR) + +/* Stacks for types not otherwise defined in this header */ +SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) +#define sk_X509_ALGOR_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_value(sk, idx) ((X509_ALGOR *)OPENSSL_sk_value(ossl_check_const_X509_ALGOR_sk_type(sk), (idx))) +#define sk_X509_ALGOR_new(cmp) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new(ossl_check_X509_ALGOR_compfunc_type(cmp))) +#define sk_X509_ALGOR_new_null() ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_null()) +#define sk_X509_ALGOR_new_reserve(cmp, n) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_reserve(ossl_check_X509_ALGOR_compfunc_type(cmp), (n))) +#define sk_X509_ALGOR_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ALGOR_sk_type(sk), (n)) +#define sk_X509_ALGOR_free(sk) OPENSSL_sk_free(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_delete(sk, i) ((X509_ALGOR *)OPENSSL_sk_delete(ossl_check_X509_ALGOR_sk_type(sk), (i))) +#define sk_X509_ALGOR_delete_ptr(sk, ptr) ((X509_ALGOR *)OPENSSL_sk_delete_ptr(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr))) +#define sk_X509_ALGOR_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_pop(sk) ((X509_ALGOR *)OPENSSL_sk_pop(ossl_check_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_shift(sk) ((X509_ALGOR *)OPENSSL_sk_shift(ossl_check_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ALGOR_sk_type(sk),ossl_check_X509_ALGOR_freefunc_type(freefunc)) +#define sk_X509_ALGOR_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), (idx)) +#define sk_X509_ALGOR_set(sk, idx, ptr) ((X509_ALGOR *)OPENSSL_sk_set(ossl_check_X509_ALGOR_sk_type(sk), (idx), ossl_check_X509_ALGOR_type(ptr))) +#define sk_X509_ALGOR_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), pnum) +#define sk_X509_ALGOR_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_dup(sk) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_dup(ossl_check_const_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_copyfunc_type(copyfunc), ossl_check_X509_ALGOR_freefunc_type(freefunc))) +#define sk_X509_ALGOR_set_cmp_func(sk, cmp) ((sk_X509_ALGOR_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_compfunc_type(cmp))) + + # define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ /* @@ -183,15 +223,41 @@ typedef struct ASN1_ENCODING_st { (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) # define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) -typedef struct asn1_string_table_st { +struct asn1_string_table_st { int nid; long minsize; long maxsize; unsigned long mask; unsigned long flags; -} ASN1_STRING_TABLE; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING_TABLE, ASN1_STRING_TABLE, ASN1_STRING_TABLE) +#define sk_ASN1_STRING_TABLE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_value(sk, idx) ((ASN1_STRING_TABLE *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), (idx))) +#define sk_ASN1_STRING_TABLE_new(cmp) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp))) +#define sk_ASN1_STRING_TABLE_new_null() ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_STRING_TABLE_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_TABLE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (n)) +#define sk_ASN1_STRING_TABLE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_delete(sk, i) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (i))) +#define sk_ASN1_STRING_TABLE_delete_ptr(sk, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr))) +#define sk_ASN1_STRING_TABLE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_pop(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_shift(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk),ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc)) +#define sk_ASN1_STRING_TABLE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), (idx)) +#define sk_ASN1_STRING_TABLE_set(sk, idx, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_set(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (idx), ossl_check_ASN1_STRING_TABLE_type(ptr))) +#define sk_ASN1_STRING_TABLE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), pnum) +#define sk_ASN1_STRING_TABLE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_dup(sk) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc))) +#define sk_ASN1_STRING_TABLE_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_TABLE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp))) -DEFINE_STACK_OF(ASN1_STRING_TABLE) /* size limits: this stuff is taken straight from RFC2459 */ @@ -214,50 +280,79 @@ typedef struct ASN1_VALUE_st ASN1_VALUE; /* Declare ASN1 functions: the implement macro in in asn1t.h */ -# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ -# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) +# define DECLARE_ASN1_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_FUNCTIONS(type) \ + DECLARE_ASN1_FUNCTIONS_attr(extern, type) -# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) +# define DECLARE_ASN1_ALLOC_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_attr(extern, type) -# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + DECLARE_ASN1_ITEM_attr(attr, itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(extern, type, itname, name) -# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(const type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, name, name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_NDEF_FUNCTION(name) \ - int i2d_##name##_NDEF(name *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + attr type *d2i_##name(type **a, const unsigned char **in, long len); \ + attr int i2d_##name(const type *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(extern, type, name) -# define DECLARE_ASN1_FUNCTIONS_const(name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) +# define DECLARE_ASN1_NDEF_FUNCTION_attr(attr, name) \ + attr int i2d_##name##_NDEF(const name *a, unsigned char **out); +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + DECLARE_ASN1_NDEF_FUNCTION_attr(extern, name) -# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - type *name##_new(void); \ - void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + attr type *name##_new(void); \ + attr void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ - DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) +# define DECLARE_ASN1_DUP_FUNCTION_attr(attr, type) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, type) +# define DECLARE_ASN1_DUP_FUNCTION(type) \ + DECLARE_ASN1_DUP_FUNCTION_attr(extern, type) -# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx); +# define DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, name) \ + attr type *name##_dup(const type *a); +# define DECLARE_ASN1_DUP_FUNCTION_name(type, name) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(extern, type, name) + +# define DECLARE_ASN1_PRINT_FUNCTION_attr(attr, stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, stname) +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_attr(extern, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, fname) \ + attr int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx); +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(extern, stname, fname) # define D2I_OF(type) type *(*)(type **,const unsigned char **,long) -# define I2D_OF(type) int (*)(type *,unsigned char **) -# define I2D_OF_const(type) int (*)(const type *,unsigned char **) +# define I2D_OF(type) int (*)(const type *,unsigned char **) # define CHECKED_D2I_OF(type, d2i) \ ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) @@ -271,10 +366,11 @@ typedef struct ASN1_VALUE_st ASN1_VALUE; ((void**) (1 ? p : (type**)0)) # define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) -# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(const type *,unsigned char **) # define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) -TYPEDEF_D2I2D_OF(void); +typedef void *d2i_of_void(void **, const unsigned char **, long); +typedef int i2d_of_void(const void *, unsigned char **); /*- * The following macros and typedefs allow an ASN1_ITEM @@ -312,23 +408,6 @@ TYPEDEF_D2I2D_OF(void); * */ -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM ASN1_ITEM_EXP; - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) - -# define ASN1_ITEM_rptr(ref) (&(ref##_it)) - -# define DECLARE_ASN1_ITEM(name) \ - OPENSSL_EXTERN const ASN1_ITEM name##_it; - -# else /* * Platforms that can't easily handle shared global variables are declared as @@ -339,17 +418,17 @@ typedef const ASN1_ITEM ASN1_ITEM_EXP; typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); /* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr()) +# define ASN1_ITEM_ptr(iptr) (iptr()) /* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (iptr##_it) +# define ASN1_ITEM_ref(iptr) (iptr##_it) -# define ASN1_ITEM_rptr(ref) (ref##_it()) +# define ASN1_ITEM_rptr(ref) (ref##_it()) -# define DECLARE_ASN1_ITEM(name) \ - const ASN1_ITEM * name##_it(void); - -# endif +# define DECLARE_ASN1_ITEM_attr(attr, name) \ + attr const ASN1_ITEM * name##_it(void); +# define DECLARE_ASN1_ITEM(name) \ + DECLARE_ASN1_ITEM_attr(extern, name) /* Parameters used by ASN1_STRING_print_ex() */ @@ -362,6 +441,11 @@ typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); # define ASN1_STRFLGS_ESC_CTRL 2 # define ASN1_STRFLGS_ESC_MSB 4 +/* Lower 8 bits are reserved as an output type specifier */ +# define ASN1_DTFLGS_TYPE_MASK 0x0FUL +# define ASN1_DTFLGS_RFC822 0x00UL +# define ASN1_DTFLGS_ISO8601 0x01UL + /* * This flag determines how we do escaping: normally RC2253 backslash only, * set this to use backslash and quote. @@ -435,13 +519,8 @@ typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); ASN1_STRFLGS_DUMP_UNKNOWN | \ ASN1_STRFLGS_DUMP_DER) -DEFINE_STACK_OF(ASN1_INTEGER) -DEFINE_STACK_OF(ASN1_GENERALSTRING) - -DEFINE_STACK_OF(ASN1_UTF8STRING) - -typedef struct asn1_type_st { +struct asn1_type_st { int type; union { char *ptr; @@ -470,14 +549,40 @@ typedef struct asn1_type_st { ASN1_STRING *sequence; ASN1_VALUE *asn1_value; } value; -} ASN1_TYPE; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_TYPE, ASN1_TYPE, ASN1_TYPE) +#define sk_ASN1_TYPE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_value(sk, idx) ((ASN1_TYPE *)OPENSSL_sk_value(ossl_check_const_ASN1_TYPE_sk_type(sk), (idx))) +#define sk_ASN1_TYPE_new(cmp) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new(ossl_check_ASN1_TYPE_compfunc_type(cmp))) +#define sk_ASN1_TYPE_new_null() ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_TYPE_new_reserve(cmp, n) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_TYPE_compfunc_type(cmp), (n))) +#define sk_ASN1_TYPE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_TYPE_sk_type(sk), (n)) +#define sk_ASN1_TYPE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_delete(sk, i) ((ASN1_TYPE *)OPENSSL_sk_delete(ossl_check_ASN1_TYPE_sk_type(sk), (i))) +#define sk_ASN1_TYPE_delete_ptr(sk, ptr) ((ASN1_TYPE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr))) +#define sk_ASN1_TYPE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_pop(sk) ((ASN1_TYPE *)OPENSSL_sk_pop(ossl_check_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_shift(sk) ((ASN1_TYPE *)OPENSSL_sk_shift(ossl_check_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_TYPE_sk_type(sk),ossl_check_ASN1_TYPE_freefunc_type(freefunc)) +#define sk_ASN1_TYPE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), (idx)) +#define sk_ASN1_TYPE_set(sk, idx, ptr) ((ASN1_TYPE *)OPENSSL_sk_set(ossl_check_ASN1_TYPE_sk_type(sk), (idx), ossl_check_ASN1_TYPE_type(ptr))) +#define sk_ASN1_TYPE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), pnum) +#define sk_ASN1_TYPE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_dup(sk) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_copyfunc_type(copyfunc), ossl_check_ASN1_TYPE_freefunc_type(freefunc))) +#define sk_ASN1_TYPE_set_cmp_func(sk, cmp) ((sk_ASN1_TYPE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_compfunc_type(cmp))) -DEFINE_STACK_OF(ASN1_TYPE) typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) /* This is used to contain a list of bit names */ typedef struct BIT_STRING_BITNAME_st { @@ -515,7 +620,8 @@ typedef struct BIT_STRING_BITNAME_st { B_ASN1_BMPSTRING|\ B_ASN1_UTF8STRING -DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) +DECLARE_ASN1_ALLOC_FUNCTIONS_name(ASN1_TYPE, ASN1_TYPE) +DECLARE_ASN1_ENCODE_FUNCTIONS(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) int ASN1_TYPE_get(const ASN1_TYPE *a); void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); @@ -525,21 +631,41 @@ int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); -ASN1_OBJECT *ASN1_OBJECT_new(void); -void ASN1_OBJECT_free(ASN1_OBJECT *a); -int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); -ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, - long length); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_OBJECT, ASN1_OBJECT, ASN1_OBJECT) +#define sk_ASN1_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_value(sk, idx) ((ASN1_OBJECT *)OPENSSL_sk_value(ossl_check_const_ASN1_OBJECT_sk_type(sk), (idx))) +#define sk_ASN1_OBJECT_new(cmp) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new(ossl_check_ASN1_OBJECT_compfunc_type(cmp))) +#define sk_ASN1_OBJECT_new_null() ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_null()) +#define sk_ASN1_OBJECT_new_reserve(cmp, n) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_OBJECT_compfunc_type(cmp), (n))) +#define sk_ASN1_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_OBJECT_sk_type(sk), (n)) +#define sk_ASN1_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_delete(sk, i) ((ASN1_OBJECT *)OPENSSL_sk_delete(ossl_check_ASN1_OBJECT_sk_type(sk), (i))) +#define sk_ASN1_OBJECT_delete_ptr(sk, ptr) ((ASN1_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr))) +#define sk_ASN1_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_pop(sk) ((ASN1_OBJECT *)OPENSSL_sk_pop(ossl_check_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_shift(sk) ((ASN1_OBJECT *)OPENSSL_sk_shift(ossl_check_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_OBJECT_sk_type(sk),ossl_check_ASN1_OBJECT_freefunc_type(freefunc)) +#define sk_ASN1_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), (idx)) +#define sk_ASN1_OBJECT_set(sk, idx, ptr) ((ASN1_OBJECT *)OPENSSL_sk_set(ossl_check_ASN1_OBJECT_sk_type(sk), (idx), ossl_check_ASN1_OBJECT_type(ptr))) +#define sk_ASN1_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), pnum) +#define sk_ASN1_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_dup(sk) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_copyfunc_type(copyfunc), ossl_check_ASN1_OBJECT_freefunc_type(freefunc))) +#define sk_ASN1_OBJECT_set_cmp_func(sk, cmp) ((sk_ASN1_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_compfunc_type(cmp))) -DECLARE_ASN1_ITEM(ASN1_OBJECT) -DEFINE_STACK_OF(ASN1_OBJECT) +DECLARE_ASN1_FUNCTIONS(ASN1_OBJECT) ASN1_STRING *ASN1_STRING_new(void); void ASN1_STRING_free(ASN1_STRING *a); void ASN1_STRING_clear_free(ASN1_STRING *a); int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); -ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); +DECLARE_ASN1_DUP_FUNCTION(ASN1_STRING) ASN1_STRING *ASN1_STRING_type_new(int type); int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); /* @@ -549,9 +675,13 @@ int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); int ASN1_STRING_length(const ASN1_STRING *x); -void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# endif int ASN1_STRING_type(const ASN1_STRING *x); -DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 unsigned char *ASN1_STRING_data(ASN1_STRING *x); +# endif const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) @@ -567,10 +697,39 @@ int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, BIT_STRING_BITNAME *tbl); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_INTEGER, ASN1_INTEGER, ASN1_INTEGER) +#define sk_ASN1_INTEGER_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_value(sk, idx) ((ASN1_INTEGER *)OPENSSL_sk_value(ossl_check_const_ASN1_INTEGER_sk_type(sk), (idx))) +#define sk_ASN1_INTEGER_new(cmp) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new(ossl_check_ASN1_INTEGER_compfunc_type(cmp))) +#define sk_ASN1_INTEGER_new_null() ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_null()) +#define sk_ASN1_INTEGER_new_reserve(cmp, n) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_INTEGER_compfunc_type(cmp), (n))) +#define sk_ASN1_INTEGER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_INTEGER_sk_type(sk), (n)) +#define sk_ASN1_INTEGER_free(sk) OPENSSL_sk_free(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_delete(sk, i) ((ASN1_INTEGER *)OPENSSL_sk_delete(ossl_check_ASN1_INTEGER_sk_type(sk), (i))) +#define sk_ASN1_INTEGER_delete_ptr(sk, ptr) ((ASN1_INTEGER *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr))) +#define sk_ASN1_INTEGER_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_pop(sk) ((ASN1_INTEGER *)OPENSSL_sk_pop(ossl_check_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_shift(sk) ((ASN1_INTEGER *)OPENSSL_sk_shift(ossl_check_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_INTEGER_sk_type(sk),ossl_check_ASN1_INTEGER_freefunc_type(freefunc)) +#define sk_ASN1_INTEGER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), (idx)) +#define sk_ASN1_INTEGER_set(sk, idx, ptr) ((ASN1_INTEGER *)OPENSSL_sk_set(ossl_check_ASN1_INTEGER_sk_type(sk), (idx), ossl_check_ASN1_INTEGER_type(ptr))) +#define sk_ASN1_INTEGER_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), pnum) +#define sk_ASN1_INTEGER_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_dup(sk) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_dup(ossl_check_const_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_copyfunc_type(copyfunc), ossl_check_ASN1_INTEGER_freefunc_type(freefunc))) +#define sk_ASN1_INTEGER_set_cmp_func(sk, cmp) ((sk_ASN1_INTEGER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_compfunc_type(cmp))) + + + DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, long length); -ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); +DECLARE_ASN1_DUP_FUNCTION(ASN1_INTEGER) int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) @@ -594,12 +753,40 @@ int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, const ASN1_TIME *to); DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) -ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); +DECLARE_ASN1_DUP_FUNCTION(ASN1_OCTET_STRING) int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, const ASN1_OCTET_STRING *b); int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, int len); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_UTF8STRING, ASN1_UTF8STRING, ASN1_UTF8STRING) +#define sk_ASN1_UTF8STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_value(sk, idx) ((ASN1_UTF8STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), (idx))) +#define sk_ASN1_UTF8STRING_new(cmp) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp))) +#define sk_ASN1_UTF8STRING_new_null() ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_UTF8STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_UTF8STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_UTF8STRING_sk_type(sk), (n)) +#define sk_ASN1_UTF8STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_delete(sk, i) ((ASN1_UTF8STRING *)OPENSSL_sk_delete(ossl_check_ASN1_UTF8STRING_sk_type(sk), (i))) +#define sk_ASN1_UTF8STRING_delete_ptr(sk, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr))) +#define sk_ASN1_UTF8STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_pop(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_pop(ossl_check_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_shift(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_shift(ossl_check_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_UTF8STRING_sk_type(sk),ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc)) +#define sk_ASN1_UTF8STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), (idx)) +#define sk_ASN1_UTF8STRING_set(sk, idx, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_set(ossl_check_ASN1_UTF8STRING_sk_type(sk), (idx), ossl_check_ASN1_UTF8STRING_type(ptr))) +#define sk_ASN1_UTF8STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), pnum) +#define sk_ASN1_UTF8STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_dup(sk) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_copyfunc_type(copyfunc), ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc))) +#define sk_ASN1_UTF8STRING_set_cmp_func(sk, cmp) ((sk_ASN1_UTF8STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) @@ -609,6 +796,34 @@ DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) int UTF8_getc(const unsigned char *str, int len, unsigned long *val); int UTF8_putc(unsigned char *str, int len, unsigned long value); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_GENERALSTRING, ASN1_GENERALSTRING, ASN1_GENERALSTRING) +#define sk_ASN1_GENERALSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_value(sk, idx) ((ASN1_GENERALSTRING *)OPENSSL_sk_value(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), (idx))) +#define sk_ASN1_GENERALSTRING_new(cmp) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp))) +#define sk_ASN1_GENERALSTRING_new_null() ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_GENERALSTRING_new_reserve(cmp, n) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp), (n))) +#define sk_ASN1_GENERALSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (n)) +#define sk_ASN1_GENERALSTRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_delete(sk, i) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (i))) +#define sk_ASN1_GENERALSTRING_delete_ptr(sk, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr))) +#define sk_ASN1_GENERALSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_pop(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_pop(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_shift(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_shift(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk),ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc)) +#define sk_ASN1_GENERALSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), (idx)) +#define sk_ASN1_GENERALSTRING_set(sk, idx, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_set(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (idx), ossl_check_ASN1_GENERALSTRING_type(ptr))) +#define sk_ASN1_GENERALSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), pnum) +#define sk_ASN1_GENERALSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_dup(sk) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_copyfunc_type(copyfunc), ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc))) +#define sk_ASN1_GENERALSTRING_set_cmp_func(sk, cmp) ((sk_ASN1_GENERALSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) @@ -621,6 +836,10 @@ DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) DECLARE_ASN1_FUNCTIONS(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_UTCTIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_GENERALIZEDTIME) + DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); @@ -685,19 +904,23 @@ int ASN1_put_eoc(unsigned char **pp); int ASN1_object_size(int constructed, int length, int tag); /* Used to implement other functions */ -void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, const void *x); # define ASN1_dup_of(type,i2d,d2i,x) \ ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_dup_of_const(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ CHECKED_D2I_OF(type, d2i), \ CHECKED_PTR_OF(const type, x))) -void *ASN1_item_dup(const ASN1_ITEM *it, void *x); +void *ASN1_item_dup(const ASN1_ITEM *it, const void *x); +int ASN1_item_sign_ex(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, const ASN1_OCTET_STRING *id, + EVP_PKEY *pkey, const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); +int ASN1_item_verify_ex(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + const ASN1_OCTET_STRING *id, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); /* ASN1 alloc/free macros for when a type is only used internally */ @@ -714,20 +937,17 @@ void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); in, \ CHECKED_PPTR_OF(type, x))) +void *ASN1_item_d2i_fp_ex(const ASN1_ITEM *it, FILE *in, void *x, + OSSL_LIB_CTX *libctx, const char *propq); void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); -int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, const void *x); # define ASN1_i2d_fp_of(type,i2d,out,x) \ (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ out, \ CHECKED_PTR_OF(const type, x))) -int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, const void *x); int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); # endif @@ -741,23 +961,22 @@ void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); in, \ CHECKED_PPTR_OF(type, x))) -void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); -int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); +void *ASN1_item_d2i_bio_ex(const ASN1_ITEM *it, BIO *in, void *pval, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *pval); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, const void *x); # define ASN1_i2d_bio_of(type,i2d,out,x) \ (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ out, \ CHECKED_PTR_OF(const type, x))) -int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, const void *x); +BIO *ASN1_item_i2d_mem_bio(const ASN1_ITEM *it, const ASN1_VALUE *val); int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); -int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); +int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm); +int ASN1_TIME_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); @@ -804,11 +1023,16 @@ void ASN1_STRING_TABLE_cleanup(void); /* Old API compatible functions */ ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_new_ex(const ASN1_ITEM *it, OSSL_LIB_CTX *libctx, + const char *propq); void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i_ex(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it); -int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); -int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, +int ASN1_item_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); void ASN1_add_oid_module(void); @@ -839,7 +1063,7 @@ int ASN1_str2mask(const char *str, unsigned long *pmask); /* Don't show structure name even at top level */ # define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 -int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, +int ASN1_item_print(BIO *out, const ASN1_VALUE *ifld, int indent, const ASN1_ITEM *it, const ASN1_PCTX *pctx); ASN1_PCTX *ASN1_PCTX_new(void); void ASN1_PCTX_free(ASN1_PCTX *p); @@ -864,22 +1088,43 @@ void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); const BIO_METHOD *BIO_f_asn1(void); +/* cannot constify val because of CMS_stream() */ BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const ASN1_ITEM *it); int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const char *hdr, const ASN1_ITEM *it); +/* cannot constify val because of CMS_dataFinal() */ int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, int ctype_nid, int econt_nid, STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +int SMIME_write_ASN1_ex(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1_ex(BIO *bio, int flags, BIO **bcont, + const ASN1_ITEM *it, ASN1_VALUE **x, + OSSL_LIB_CTX *libctx, const char *propq); int SMIME_crlf_copy(BIO *in, BIO *out, int flags); int SMIME_text(BIO *in, BIO *out); const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); const ASN1_ITEM *ASN1_ITEM_get(size_t i); +/* Legacy compatibility */ +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_const(type) DECLARE_ASN1_FUNCTIONS(type) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name) +# define I2D_OF_const(type) I2D_OF(type) +# define ASN1_dup_of_const(type,i2d,d2i,x) ASN1_dup_of(type,i2d,d2i,x) +# define ASN1_i2d_fp_of_const(type,i2d,out,x) ASN1_i2d_fp_of(type,i2d,out,x) +# define ASN1_i2d_bio_of_const(type,i2d,out,x) ASN1_i2d_bio_of(type,i2d,out,x) + # ifdef __cplusplus } # endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/asn1.h.in b/deps/openssl/android/x86/usr/local/include/openssl/asn1.h.in new file mode 100644 index 00000000..d478bc96 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/asn1.h.in @@ -0,0 +1,964 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ASN1_H +# define OPENSSL_ASN1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1_H +# endif + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include +# include +# include + +# include +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define V_ASN1_UNIVERSAL 0x00 +# define V_ASN1_APPLICATION 0x40 +# define V_ASN1_CONTEXT_SPECIFIC 0x80 +# define V_ASN1_PRIVATE 0xc0 + +# define V_ASN1_CONSTRUCTED 0x20 +# define V_ASN1_PRIMITIVE_TAG 0x1f +# define V_ASN1_PRIMATIVE_TAG /*compat*/ V_ASN1_PRIMITIVE_TAG + +# define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ +# define V_ASN1_OTHER -3/* used in ASN1_TYPE */ +# define V_ASN1_ANY -4/* used in ASN1 template code */ + +# define V_ASN1_UNDEF -1 +/* ASN.1 tag values */ +# define V_ASN1_EOC 0 +# define V_ASN1_BOOLEAN 1 /**/ +# define V_ASN1_INTEGER 2 +# define V_ASN1_BIT_STRING 3 +# define V_ASN1_OCTET_STRING 4 +# define V_ASN1_NULL 5 +# define V_ASN1_OBJECT 6 +# define V_ASN1_OBJECT_DESCRIPTOR 7 +# define V_ASN1_EXTERNAL 8 +# define V_ASN1_REAL 9 +# define V_ASN1_ENUMERATED 10 +# define V_ASN1_UTF8STRING 12 +# define V_ASN1_SEQUENCE 16 +# define V_ASN1_SET 17 +# define V_ASN1_NUMERICSTRING 18 /**/ +# define V_ASN1_PRINTABLESTRING 19 +# define V_ASN1_T61STRING 20 +# define V_ASN1_TELETEXSTRING 20/* alias */ +# define V_ASN1_VIDEOTEXSTRING 21 /**/ +# define V_ASN1_IA5STRING 22 +# define V_ASN1_UTCTIME 23 +# define V_ASN1_GENERALIZEDTIME 24 /**/ +# define V_ASN1_GRAPHICSTRING 25 /**/ +# define V_ASN1_ISO64STRING 26 /**/ +# define V_ASN1_VISIBLESTRING 26/* alias */ +# define V_ASN1_GENERALSTRING 27 /**/ +# define V_ASN1_UNIVERSALSTRING 28 /**/ +# define V_ASN1_BMPSTRING 30 + +/* + * NB the constants below are used internally by ASN1_INTEGER + * and ASN1_ENUMERATED to indicate the sign. They are *not* on + * the wire tag values. + */ + +# define V_ASN1_NEG 0x100 +# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) +# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) + +/* For use with d2i_ASN1_type_bytes() */ +# define B_ASN1_NUMERICSTRING 0x0001 +# define B_ASN1_PRINTABLESTRING 0x0002 +# define B_ASN1_T61STRING 0x0004 +# define B_ASN1_TELETEXSTRING 0x0004 +# define B_ASN1_VIDEOTEXSTRING 0x0008 +# define B_ASN1_IA5STRING 0x0010 +# define B_ASN1_GRAPHICSTRING 0x0020 +# define B_ASN1_ISO64STRING 0x0040 +# define B_ASN1_VISIBLESTRING 0x0040 +# define B_ASN1_GENERALSTRING 0x0080 +# define B_ASN1_UNIVERSALSTRING 0x0100 +# define B_ASN1_OCTET_STRING 0x0200 +# define B_ASN1_BIT_STRING 0x0400 +# define B_ASN1_BMPSTRING 0x0800 +# define B_ASN1_UNKNOWN 0x1000 +# define B_ASN1_UTF8STRING 0x2000 +# define B_ASN1_UTCTIME 0x4000 +# define B_ASN1_GENERALIZEDTIME 0x8000 +# define B_ASN1_SEQUENCE 0x10000 +/* For use with ASN1_mbstring_copy() */ +# define MBSTRING_FLAG 0x1000 +# define MBSTRING_UTF8 (MBSTRING_FLAG) +# define MBSTRING_ASC (MBSTRING_FLAG|1) +# define MBSTRING_BMP (MBSTRING_FLAG|2) +# define MBSTRING_UNIV (MBSTRING_FLAG|4) +# define SMIME_OLDMIME 0x400 +# define SMIME_CRLFEOL 0x800 +# define SMIME_STREAM 0x1000 + +/* Stacks for types not otherwise defined in this header */ +{- + generate_stack_macros("X509_ALGOR"); +-} + + +# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +/* + * This indicates that the ASN1_STRING is not a real value but just a place + * holder for the location where indefinite length constructed data should be + * inserted in the memory buffer + */ +# define ASN1_STRING_FLAG_NDEF 0x010 + +/* + * This flag is used by the CMS code to indicate that a string is not + * complete and is a place holder for content when it had all been accessed. + * The flag will be reset when content has been written to it. + */ + +# define ASN1_STRING_FLAG_CONT 0x020 +/* + * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING + * type. + */ +# define ASN1_STRING_FLAG_MSTRING 0x040 +/* String is embedded and only content should be freed */ +# define ASN1_STRING_FLAG_EMBED 0x080 +/* String should be parsed in RFC 5280's time format */ +# define ASN1_STRING_FLAG_X509_TIME 0x100 +/* This is the base type that holds just about everything :-) */ +struct asn1_string_st { + int length; + int type; + unsigned char *data; + /* + * The value of the following field depends on the type being held. It + * is mostly being used for BIT_STRING so if the input data has a + * non-zero 'unused bits' value, it will be handled correctly + */ + long flags; +}; + +/* + * ASN1_ENCODING structure: this is used to save the received encoding of an + * ASN1 type. This is useful to get round problems with invalid encodings + * which can break signatures. + */ + +typedef struct ASN1_ENCODING_st { + unsigned char *enc; /* DER encoding */ + long len; /* Length of encoding */ + int modified; /* set to 1 if 'enc' is invalid */ +} ASN1_ENCODING; + +/* Used with ASN1 LONG type: if a long is set to this it is omitted */ +# define ASN1_LONG_UNDEF 0x7fffffffL + +# define STABLE_FLAGS_MALLOC 0x01 +/* + * A zero passed to ASN1_STRING_TABLE_new_add for the flags is interpreted + * as "don't change" and STABLE_FLAGS_MALLOC is always set. By setting + * STABLE_FLAGS_MALLOC only we can clear the existing value. Use the alias + * STABLE_FLAGS_CLEAR to reflect this. + */ +# define STABLE_FLAGS_CLEAR STABLE_FLAGS_MALLOC +# define STABLE_NO_MASK 0x02 +# define DIRSTRING_TYPE \ + (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) +# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) + +struct asn1_string_table_st { + int nid; + long minsize; + long maxsize; + unsigned long mask; + unsigned long flags; +}; + +{- + generate_stack_macros("ASN1_STRING_TABLE"); +-} + +/* size limits: this stuff is taken straight from RFC2459 */ + +# define ub_name 32768 +# define ub_common_name 64 +# define ub_locality_name 128 +# define ub_state_name 128 +# define ub_organization_name 64 +# define ub_organization_unit_name 64 +# define ub_title 64 +# define ub_email_address 128 + +/* + * Declarations for template structures: for full definitions see asn1t.h + */ +typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; +typedef struct ASN1_TLC_st ASN1_TLC; +/* This is just an opaque pointer */ +typedef struct ASN1_VALUE_st ASN1_VALUE; + +/* Declare ASN1 functions: the implement macro in in asn1t.h */ + +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ + +# define DECLARE_ASN1_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_FUNCTIONS(type) \ + DECLARE_ASN1_FUNCTIONS_attr(extern, type) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_attr(extern, type) + +# define DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + DECLARE_ASN1_ITEM_attr(attr, itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(extern, type, itname, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, name, name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + attr type *d2i_##name(type **a, const unsigned char **in, long len); \ + attr int i2d_##name(const type *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(extern, type, name) + +# define DECLARE_ASN1_NDEF_FUNCTION_attr(attr, name) \ + attr int i2d_##name##_NDEF(const name *a, unsigned char **out); +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + DECLARE_ASN1_NDEF_FUNCTION_attr(extern, name) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + attr type *name##_new(void); \ + attr void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_DUP_FUNCTION_attr(attr, type) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, type) +# define DECLARE_ASN1_DUP_FUNCTION(type) \ + DECLARE_ASN1_DUP_FUNCTION_attr(extern, type) + +# define DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, name) \ + attr type *name##_dup(const type *a); +# define DECLARE_ASN1_DUP_FUNCTION_name(type, name) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(extern, type, name) + +# define DECLARE_ASN1_PRINT_FUNCTION_attr(attr, stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, stname) +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_attr(extern, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, fname) \ + attr int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx); +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(extern, stname, fname) + +# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) +# define I2D_OF(type) int (*)(const type *,unsigned char **) + +# define CHECKED_D2I_OF(type, d2i) \ + ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) +# define CHECKED_I2D_OF(type, i2d) \ + ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) +# define CHECKED_NEW_OF(type, xnew) \ + ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) +# define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +# define CHECKED_PPTR_OF(type, p) \ + ((void**) (1 ? p : (type**)0)) + +# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(const type *,unsigned char **) +# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) + +typedef void *d2i_of_void(void **, const unsigned char **, long); +typedef int i2d_of_void(const void *, unsigned char **); + +/*- + * The following macros and typedefs allow an ASN1_ITEM + * to be embedded in a structure and referenced. Since + * the ASN1_ITEM pointers need to be globally accessible + * (possibly from shared libraries) they may exist in + * different forms. On platforms that support it the + * ASN1_ITEM structure itself will be globally exported. + * Other platforms will export a function that returns + * an ASN1_ITEM pointer. + * + * To handle both cases transparently the macros below + * should be used instead of hard coding an ASN1_ITEM + * pointer in a structure. + * + * The structure will look like this: + * + * typedef struct SOMETHING_st { + * ... + * ASN1_ITEM_EXP *iptr; + * ... + * } SOMETHING; + * + * It would be initialised as e.g.: + * + * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; + * + * and the actual pointer extracted with: + * + * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); + * + * Finally an ASN1_ITEM pointer can be extracted from an + * appropriate reference with: ASN1_ITEM_rptr(X509). This + * would be used when a function takes an ASN1_ITEM * argument. + * + */ + + +/* + * Platforms that can't easily handle shared global variables are declared as + * functions returning ASN1_ITEM pointers. + */ + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr()) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (iptr##_it) + +# define ASN1_ITEM_rptr(ref) (ref##_it()) + +# define DECLARE_ASN1_ITEM_attr(attr, name) \ + attr const ASN1_ITEM * name##_it(void); +# define DECLARE_ASN1_ITEM(name) \ + DECLARE_ASN1_ITEM_attr(extern, name) + +/* Parameters used by ASN1_STRING_print_ex() */ + +/* + * These determine which characters to escape: RFC2253 special characters, + * control characters and MSB set characters + */ + +# define ASN1_STRFLGS_ESC_2253 1 +# define ASN1_STRFLGS_ESC_CTRL 2 +# define ASN1_STRFLGS_ESC_MSB 4 + +/* Lower 8 bits are reserved as an output type specifier */ +# define ASN1_DTFLGS_TYPE_MASK 0x0FUL +# define ASN1_DTFLGS_RFC822 0x00UL +# define ASN1_DTFLGS_ISO8601 0x01UL + +/* + * This flag determines how we do escaping: normally RC2253 backslash only, + * set this to use backslash and quote. + */ + +# define ASN1_STRFLGS_ESC_QUOTE 8 + +/* These three flags are internal use only. */ + +/* Character is a valid PrintableString character */ +# define CHARTYPE_PRINTABLESTRING 0x10 +/* Character needs escaping if it is the first character */ +# define CHARTYPE_FIRST_ESC_2253 0x20 +/* Character needs escaping if it is the last character */ +# define CHARTYPE_LAST_ESC_2253 0x40 + +/* + * NB the internal flags are safely reused below by flags handled at the top + * level. + */ + +/* + * If this is set we convert all character strings to UTF8 first + */ + +# define ASN1_STRFLGS_UTF8_CONVERT 0x10 + +/* + * If this is set we don't attempt to interpret content: just assume all + * strings are 1 byte per character. This will produce some pretty odd + * looking output! + */ + +# define ASN1_STRFLGS_IGNORE_TYPE 0x20 + +/* If this is set we include the string type in the output */ +# define ASN1_STRFLGS_SHOW_TYPE 0x40 + +/* + * This determines which strings to display and which to 'dump' (hex dump of + * content octets or DER encoding). We can only dump non character strings or + * everything. If we don't dump 'unknown' they are interpreted as character + * strings with 1 octet per character and are subject to the usual escaping + * options. + */ + +# define ASN1_STRFLGS_DUMP_ALL 0x80 +# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 + +/* + * These determine what 'dumping' does, we can dump the content octets or the + * DER encoding: both use the RFC2253 #XXXXX notation. + */ + +# define ASN1_STRFLGS_DUMP_DER 0x200 + +/* + * This flag specifies that RC2254 escaping shall be performed. + */ +#define ASN1_STRFLGS_ESC_2254 0x400 + +/* + * All the string flags consistent with RFC2253, escaping control characters + * isn't essential in RFC2253 but it is advisable anyway. + */ + +# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ + ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + ASN1_STRFLGS_UTF8_CONVERT | \ + ASN1_STRFLGS_DUMP_UNKNOWN | \ + ASN1_STRFLGS_DUMP_DER) + + +struct asn1_type_st { + int type; + union { + char *ptr; + ASN1_BOOLEAN boolean; + ASN1_STRING *asn1_string; + ASN1_OBJECT *object; + ASN1_INTEGER *integer; + ASN1_ENUMERATED *enumerated; + ASN1_BIT_STRING *bit_string; + ASN1_OCTET_STRING *octet_string; + ASN1_PRINTABLESTRING *printablestring; + ASN1_T61STRING *t61string; + ASN1_IA5STRING *ia5string; + ASN1_GENERALSTRING *generalstring; + ASN1_BMPSTRING *bmpstring; + ASN1_UNIVERSALSTRING *universalstring; + ASN1_UTCTIME *utctime; + ASN1_GENERALIZEDTIME *generalizedtime; + ASN1_VISIBLESTRING *visiblestring; + ASN1_UTF8STRING *utf8string; + /* + * set and sequence are left complete and still contain the set or + * sequence bytes + */ + ASN1_STRING *set; + ASN1_STRING *sequence; + ASN1_VALUE *asn1_value; + } value; +}; + +{- + generate_stack_macros("ASN1_TYPE"); +-} + +typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; + +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) + +/* This is used to contain a list of bit names */ +typedef struct BIT_STRING_BITNAME_st { + int bitnum; + const char *lname; + const char *sname; +} BIT_STRING_BITNAME; + +# define B_ASN1_TIME \ + B_ASN1_UTCTIME | \ + B_ASN1_GENERALIZEDTIME + +# define B_ASN1_PRINTABLE \ + B_ASN1_NUMERICSTRING| \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_T61STRING| \ + B_ASN1_IA5STRING| \ + B_ASN1_BIT_STRING| \ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING|\ + B_ASN1_SEQUENCE|\ + B_ASN1_UNKNOWN + +# define B_ASN1_DIRECTORYSTRING \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_TELETEXSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_UTF8STRING + +# define B_ASN1_DISPLAYTEXT \ + B_ASN1_IA5STRING| \ + B_ASN1_VISIBLESTRING| \ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING + +DECLARE_ASN1_ALLOC_FUNCTIONS_name(ASN1_TYPE, ASN1_TYPE) +DECLARE_ASN1_ENCODE_FUNCTIONS(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) + +int ASN1_TYPE_get(const ASN1_TYPE *a); +void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); +int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); +int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); + +ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); +void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); + +{- + generate_stack_macros("ASN1_OBJECT"); +-} + +DECLARE_ASN1_FUNCTIONS(ASN1_OBJECT) + +ASN1_STRING *ASN1_STRING_new(void); +void ASN1_STRING_free(ASN1_STRING *a); +void ASN1_STRING_clear_free(ASN1_STRING *a); +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); +DECLARE_ASN1_DUP_FUNCTION(ASN1_STRING) +ASN1_STRING *ASN1_STRING_type_new(int type); +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); + /* + * Since this is used to store all sorts of things, via macros, for now, + * make its data void * + */ +int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); +int ASN1_STRING_length(const ASN1_STRING *x); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# endif +int ASN1_STRING_type(const ASN1_STRING *x); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 unsigned char *ASN1_STRING_data(ASN1_STRING *x); +# endif +const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); + +DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) +int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); +int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); +int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n); +int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, + const unsigned char *flags, int flags_len); + +int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, + BIT_STRING_BITNAME *tbl, int indent); +int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, + BIT_STRING_BITNAME *tbl); + +{- + generate_stack_macros("ASN1_INTEGER"); +-} + + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, + long length); +DECLARE_ASN1_DUP_FUNCTION(ASN1_INTEGER) +int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); + +DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) + +int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); +ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); +ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); +int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); + +int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, + time_t t); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, + time_t t, int offset_day, + long offset_sec); +int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); + +int ASN1_TIME_diff(int *pday, int *psec, + const ASN1_TIME *from, const ASN1_TIME *to); + +DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) +DECLARE_ASN1_DUP_FUNCTION(ASN1_OCTET_STRING) +int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, + const ASN1_OCTET_STRING *b); +int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, + int len); + +{- + generate_stack_macros("ASN1_UTF8STRING"); +-} + +DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_NULL) +DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) + +int UTF8_getc(const unsigned char *str, int len, unsigned long *val); +int UTF8_putc(unsigned char *str, int len, unsigned long value); + +{- + generate_stack_macros("ASN1_GENERALSTRING"); +-} + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) +DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_TIME) + +DECLARE_ASN1_DUP_FUNCTION(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_UTCTIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_GENERALIZEDTIME) + +DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) + +ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); +ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_TIME_check(const ASN1_TIME *t); +ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t, + ASN1_GENERALIZEDTIME **out); +int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); +int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str); +int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); +int ASN1_TIME_normalize(ASN1_TIME *s); +int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t); +int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b); + +int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); +int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); +int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); +int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); +int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); +int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); +int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); +int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a); + +int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); +ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, + const char *sn, const char *ln); + +int ASN1_INTEGER_get_int64(int64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r); +int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r); + +int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); +long ASN1_INTEGER_get(const ASN1_INTEGER *a); +ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); +BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); + +int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_ENUMERATED *a); +int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r); + + +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); +ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai); +BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn); + +/* General */ +/* given a string, return the correct type, max is the maximum length */ +int ASN1_PRINTABLE_type(const unsigned char *s, int max); + +unsigned long ASN1_tag2bit(int tag); + +/* SPECIALS */ +int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, + int *pclass, long omax); +int ASN1_check_infinite_end(unsigned char **p, long len); +int ASN1_const_check_infinite_end(const unsigned char **p, long len); +void ASN1_put_object(unsigned char **pp, int constructed, int length, + int tag, int xclass); +int ASN1_put_eoc(unsigned char **pp); +int ASN1_object_size(int constructed, int length, int tag); + +/* Used to implement other functions */ +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, const void *x); + +# define ASN1_dup_of(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(const type, x))) + +void *ASN1_item_dup(const ASN1_ITEM *it, const void *x); +int ASN1_item_sign_ex(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, const ASN1_OCTET_STRING *id, + EVP_PKEY *pkey, const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); +int ASN1_item_verify_ex(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + const ASN1_OCTET_STRING *id, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); + +/* ASN1 alloc/free macros for when a type is only used internally */ + +# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) +# define M_ASN1_free_of(x, type) \ + ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) + +# ifndef OPENSSL_NO_STDIO +void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); + +# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_fp_ex(const ASN1_ITEM *it, FILE *in, void *x, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, const void *x); + +# define ASN1_i2d_fp_of(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, const void *x); +int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); +# endif + +int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); + +void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); + +# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_bio_ex(const ASN1_ITEM *it, BIO *in, void *pval, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *pval); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, const void *x); + +# define ASN1_i2d_bio_of(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, const void *x); +BIO *ASN1_item_i2d_mem_bio(const ASN1_ITEM *it, const ASN1_VALUE *val); +int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); +int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); +int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm); +int ASN1_TIME_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); +int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); +int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); +int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); +int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, + unsigned char *buf, int off); +int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); +int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, + int dump); +const char *ASN1_tag2str(int tag); + +/* Used to load and write Netscape format cert */ + +int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); + +int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); +int ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, int max_len); +int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ASN1_TYPE_get_int_octetstring(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); + +ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, + ASN1_OCTET_STRING **oct); + +void ASN1_STRING_set_default_mask(unsigned long mask); +int ASN1_STRING_set_default_mask_asc(const char *p); +unsigned long ASN1_STRING_get_default_mask(void); +int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask); +int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask, + long minsize, long maxsize); + +ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, + const unsigned char *in, int inlen, + int inform, int nid); +ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); +int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); +void ASN1_STRING_TABLE_cleanup(void); + +/* ASN1 template functions */ + +/* Old API compatible functions */ +ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_new_ex(const ASN1_ITEM *it, OSSL_LIB_CTX *libctx, + const char *propq); +void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i_ex(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it); +int ASN1_item_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(const ASN1_VALUE *val, unsigned char **out, + const ASN1_ITEM *it); + +void ASN1_add_oid_module(void); +void ASN1_add_stable_module(void); + +ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); +ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); +int ASN1_str2mask(const char *str, unsigned long *pmask); + +/* ASN1 Print flags */ + +/* Indicate missing OPTIONAL fields */ +# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 +/* Mark start and end of SEQUENCE */ +# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 +/* Mark start and end of SEQUENCE/SET OF */ +# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 +/* Show the ASN1 type of primitives */ +# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 +/* Don't show ASN1 type of ANY */ +# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 +/* Don't show ASN1 type of MSTRINGs */ +# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 +/* Don't show field names in SEQUENCE */ +# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 +/* Show structure names of each SEQUENCE field */ +# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 +/* Don't show structure name even at top level */ +# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 + +int ASN1_item_print(BIO *out, const ASN1_VALUE *ifld, int indent, + const ASN1_ITEM *it, const ASN1_PCTX *pctx); +ASN1_PCTX *ASN1_PCTX_new(void); +void ASN1_PCTX_free(ASN1_PCTX *p); +unsigned long ASN1_PCTX_get_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); + +ASN1_SCTX *ASN1_SCTX_new(int (*scan_cb) (ASN1_SCTX *ctx)); +void ASN1_SCTX_free(ASN1_SCTX *p); +const ASN1_ITEM *ASN1_SCTX_get_item(ASN1_SCTX *p); +const ASN1_TEMPLATE *ASN1_SCTX_get_template(ASN1_SCTX *p); +unsigned long ASN1_SCTX_get_flags(ASN1_SCTX *p); +void ASN1_SCTX_set_app_data(ASN1_SCTX *p, void *data); +void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); + +const BIO_METHOD *BIO_f_asn1(void); + +/* cannot constify val because of CMS_stream() */ +BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); + +int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const ASN1_ITEM *it); +int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const char *hdr, const ASN1_ITEM *it); +/* cannot constify val because of CMS_dataFinal() */ +int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +int SMIME_write_ASN1_ex(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1_ex(BIO *bio, int flags, BIO **bcont, + const ASN1_ITEM *it, ASN1_VALUE **x, + OSSL_LIB_CTX *libctx, const char *propq); +int SMIME_crlf_copy(BIO *in, BIO *out, int flags); +int SMIME_text(BIO *in, BIO *out); + +const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); +const ASN1_ITEM *ASN1_ITEM_get(size_t i); + +/* Legacy compatibility */ +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_const(type) DECLARE_ASN1_FUNCTIONS(type) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name) +# define I2D_OF_const(type) I2D_OF(type) +# define ASN1_dup_of_const(type,i2d,d2i,x) ASN1_dup_of(type,i2d,d2i,x) +# define ASN1_i2d_fp_of_const(type,i2d,out,x) ASN1_i2d_fp_of(type,i2d,out,x) +# define ASN1_i2d_bio_of_const(type,i2d,out,x) ASN1_i2d_bio_of(type,i2d,out,x) + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/asn1_mac.h b/deps/openssl/android/x86/usr/local/include/openssl/asn1_mac.h index 7ac1782a..fdcb9836 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/asn1_mac.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/asn1_mac.h @@ -1,7 +1,7 @@ /* * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86/usr/local/include/openssl/asn1err.h b/deps/openssl/android/x86/usr/local/include/openssl/asn1err.h index e1ad1fef..d4276220 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/asn1err.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/asn1err.h @@ -1,140 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1ERR_H -# define HEADER_ASN1ERR_H +#ifndef OPENSSL_ASN1ERR_H +# define OPENSSL_ASN1ERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASN1_strings(void); -/* - * ASN1 function codes. - */ -# define ASN1_F_A2D_ASN1_OBJECT 100 -# define ASN1_F_A2I_ASN1_INTEGER 102 -# define ASN1_F_A2I_ASN1_STRING 103 -# define ASN1_F_APPEND_EXP 176 -# define ASN1_F_ASN1_BIO_INIT 113 -# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 -# define ASN1_F_ASN1_CB 177 -# define ASN1_F_ASN1_CHECK_TLEN 104 -# define ASN1_F_ASN1_COLLECT 106 -# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 -# define ASN1_F_ASN1_D2I_FP 109 -# define ASN1_F_ASN1_D2I_READ_BIO 107 -# define ASN1_F_ASN1_DIGEST 184 -# define ASN1_F_ASN1_DO_ADB 110 -# define ASN1_F_ASN1_DO_LOCK 233 -# define ASN1_F_ASN1_DUP 111 -# define ASN1_F_ASN1_ENC_SAVE 115 -# define ASN1_F_ASN1_EX_C2I 204 -# define ASN1_F_ASN1_FIND_END 190 -# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 -# define ASN1_F_ASN1_GENERATE_V3 178 -# define ASN1_F_ASN1_GET_INT64 224 -# define ASN1_F_ASN1_GET_OBJECT 114 -# define ASN1_F_ASN1_GET_UINT64 225 -# define ASN1_F_ASN1_I2D_BIO 116 -# define ASN1_F_ASN1_I2D_FP 117 -# define ASN1_F_ASN1_ITEM_D2I_FP 206 -# define ASN1_F_ASN1_ITEM_DUP 191 -# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 -# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 -# define ASN1_F_ASN1_ITEM_EX_I2D 144 -# define ASN1_F_ASN1_ITEM_FLAGS_I2D 118 -# define ASN1_F_ASN1_ITEM_I2D_BIO 192 -# define ASN1_F_ASN1_ITEM_I2D_FP 193 -# define ASN1_F_ASN1_ITEM_PACK 198 -# define ASN1_F_ASN1_ITEM_SIGN 195 -# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 -# define ASN1_F_ASN1_ITEM_UNPACK 199 -# define ASN1_F_ASN1_ITEM_VERIFY 197 -# define ASN1_F_ASN1_MBSTRING_NCOPY 122 -# define ASN1_F_ASN1_OBJECT_NEW 123 -# define ASN1_F_ASN1_OUTPUT_DATA 214 -# define ASN1_F_ASN1_PCTX_NEW 205 -# define ASN1_F_ASN1_PRIMITIVE_NEW 119 -# define ASN1_F_ASN1_SCTX_NEW 221 -# define ASN1_F_ASN1_SIGN 128 -# define ASN1_F_ASN1_STR2TYPE 179 -# define ASN1_F_ASN1_STRING_GET_INT64 227 -# define ASN1_F_ASN1_STRING_GET_UINT64 230 -# define ASN1_F_ASN1_STRING_SET 186 -# define ASN1_F_ASN1_STRING_TABLE_ADD 129 -# define ASN1_F_ASN1_STRING_TO_BN 228 -# define ASN1_F_ASN1_STRING_TYPE_NEW 130 -# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 -# define ASN1_F_ASN1_TEMPLATE_NEW 133 -# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 -# define ASN1_F_ASN1_TIME_ADJ 217 -# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 -# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 -# define ASN1_F_ASN1_UTCTIME_ADJ 218 -# define ASN1_F_ASN1_VERIFY 137 -# define ASN1_F_B64_READ_ASN1 209 -# define ASN1_F_B64_WRITE_ASN1 210 -# define ASN1_F_BIO_NEW_NDEF 208 -# define ASN1_F_BITSTR_CB 180 -# define ASN1_F_BN_TO_ASN1_STRING 229 -# define ASN1_F_C2I_ASN1_BIT_STRING 189 -# define ASN1_F_C2I_ASN1_INTEGER 194 -# define ASN1_F_C2I_ASN1_OBJECT 196 -# define ASN1_F_C2I_IBUF 226 -# define ASN1_F_C2I_UINT64_INT 101 -# define ASN1_F_COLLECT_DATA 140 -# define ASN1_F_D2I_ASN1_OBJECT 147 -# define ASN1_F_D2I_ASN1_UINTEGER 150 -# define ASN1_F_D2I_AUTOPRIVATEKEY 207 -# define ASN1_F_D2I_PRIVATEKEY 154 -# define ASN1_F_D2I_PUBLICKEY 155 -# define ASN1_F_DO_BUF 142 -# define ASN1_F_DO_CREATE 124 -# define ASN1_F_DO_DUMP 125 -# define ASN1_F_DO_TCREATE 222 -# define ASN1_F_I2A_ASN1_OBJECT 126 -# define ASN1_F_I2D_ASN1_BIO_STREAM 211 -# define ASN1_F_I2D_ASN1_OBJECT 143 -# define ASN1_F_I2D_DSA_PUBKEY 161 -# define ASN1_F_I2D_EC_PUBKEY 181 -# define ASN1_F_I2D_PRIVATEKEY 163 -# define ASN1_F_I2D_PUBLICKEY 164 -# define ASN1_F_I2D_RSA_PUBKEY 165 -# define ASN1_F_LONG_C2I 166 -# define ASN1_F_NDEF_PREFIX 127 -# define ASN1_F_NDEF_SUFFIX 136 -# define ASN1_F_OID_MODULE_INIT 174 -# define ASN1_F_PARSE_TAGGING 182 -# define ASN1_F_PKCS5_PBE2_SET_IV 167 -# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 231 -# define ASN1_F_PKCS5_PBE_SET 202 -# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 -# define ASN1_F_PKCS5_PBKDF2_SET 219 -# define ASN1_F_PKCS5_SCRYPT_SET 232 -# define ASN1_F_SMIME_READ_ASN1 212 -# define ASN1_F_SMIME_TEXT 213 -# define ASN1_F_STABLE_GET 138 -# define ASN1_F_STBL_MODULE_INIT 223 -# define ASN1_F_UINT32_C2I 105 -# define ASN1_F_UINT32_NEW 139 -# define ASN1_F_UINT64_C2I 112 -# define ASN1_F_UINT64_NEW 141 -# define ASN1_F_X509_CRL_ADD0_REVOKED 169 -# define ASN1_F_X509_INFO_NEW 170 -# define ASN1_F_X509_NAME_ENCODE 203 -# define ASN1_F_X509_NAME_EX_D2I 158 -# define ASN1_F_X509_NAME_EX_NEW 171 -# define ASN1_F_X509_PKEY_NEW 173 /* * ASN1 reason codes. @@ -199,6 +81,7 @@ int ERR_load_ASN1_strings(void); # define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 # define ASN1_R_INVALID_UTF8STRING 134 # define ASN1_R_INVALID_VALUE 219 +# define ASN1_R_LENGTH_TOO_LONG 231 # define ASN1_R_LIST_ERROR 188 # define ASN1_R_MIME_NO_CONTENT_TYPE 206 # define ASN1_R_MIME_PARSE_ERROR 207 @@ -239,6 +122,7 @@ int ERR_load_ASN1_strings(void); # define ASN1_R_TYPE_NOT_PRIMITIVE 195 # define ASN1_R_UNEXPECTED_EOC 159 # define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 +# define ASN1_R_UNKNOWN_DIGEST 229 # define ASN1_R_UNKNOWN_FORMAT 160 # define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 # define ASN1_R_UNKNOWN_OBJECT_TYPE 162 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/asn1t.h b/deps/openssl/android/x86/usr/local/include/openssl/asn1t.h index a450ba0d..74ba47d0 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/asn1t.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/asn1t.h @@ -1,14 +1,25 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/asn1t.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1T_H -# define HEADER_ASN1T_H + + +#ifndef OPENSSL_ASN1T_H +# define OPENSSL_ASN1T_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1T_H +# endif # include # include @@ -25,44 +36,73 @@ extern "C" { #endif -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION +/*- + * These are the possible values for the itype field of the + * ASN1_ITEM structure and determine how it is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application-specific + * data and functions. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 +# define ASN1_ITYPE_SEQUENCE 0x1 +# define ASN1_ITYPE_CHOICE 0x2 +/* unused value 0x3 */ +# define ASN1_ITYPE_EXTERN 0x4 +# define ASN1_ITYPE_MSTRING 0x5 +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 /* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) /* Macros for start and end of ASN1_ITEM definition */ -# define ASN1_ITEM_start(itname) \ - const ASN1_ITEM itname##_it = { - -# define static_ASN1_ITEM_start(itname) \ - static const ASN1_ITEM itname##_it = { - -# define ASN1_ITEM_end(itname) \ - }; - -# else - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ +# define ASN1_ITEM_start(itname) \ const ASN1_ITEM * itname##_it(void) \ { \ static const ASN1_ITEM local_it = { -# define static_ASN1_ITEM_start(itname) \ +# define static_ASN1_ITEM_start(itname) \ static ASN1_ITEM_start(itname) -# define ASN1_ITEM_end(itname) \ +# define ASN1_ITEM_end(itname) \ }; \ return &local_it; \ } -# endif - /* Macros to aid ASN1 template writing */ # define ASN1_ITEM_TEMPLATE(tname) \ @@ -152,19 +192,25 @@ extern "C" { ASN1_SEQUENCE_cb(tname, cb) # define ASN1_SEQUENCE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ ASN1_SEQUENCE(tname) -# define ASN1_BROKEN_SEQUENCE(tname) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ +# define ASN1_SEQUENCE_const_cb(tname, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, NULL, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_cb_const_cb(tname, cb, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, cb, 0, const_cb}; \ ASN1_SEQUENCE(tname) # define ASN1_SEQUENCE_ref(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0, NULL}; \ ASN1_SEQUENCE(tname) # define ASN1_SEQUENCE_enc(tname, enc, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc), NULL}; \ ASN1_SEQUENCE(tname) # define ASN1_NDEF_SEQUENCE_END(tname) \ @@ -190,9 +236,6 @@ extern "C" { #tname \ ASN1_ITEM_end(tname) -# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) -# define static_ASN1_BROKEN_SEQUENCE_END(stname) \ - static_ASN1_SEQUENCE_END_ref(stname, stname) # define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) @@ -261,7 +304,7 @@ extern "C" { static const ASN1_TEMPLATE tname##_ch_tt[] # define ASN1_CHOICE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ ASN1_CHOICE(tname) # define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) @@ -332,13 +375,9 @@ extern "C" { /* Any defined by macros: the field used is in the table itself */ -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# else -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } -# endif +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } + /* Plain simple type */ # define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) /* Embedded simple type */ @@ -418,23 +457,7 @@ extern "C" { # define ASN1_ADB(name) \ static const ASN1_ADB_TABLE name##_adbtbl[] -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ - ;\ - static const ASN1_ADB name##_adb = {\ - flags,\ - offsetof(name, field),\ - adb_cb,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - } - -# else - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ ;\ static const ASN1_ITEM *name##_adb(void) \ { \ @@ -452,8 +475,6 @@ extern "C" { } \ void dummy_function(void) -# endif - # define ADB_ENTRY(val, template) {val, template} # define ASN1_ADB_TEMPLATE(name) \ @@ -584,64 +605,12 @@ struct ASN1_ITEM_st { const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains * the contents */ long tcount; /* Number of templates if SEQUENCE or CHOICE */ - const void *funcs; /* functions that handle this type */ + const void *funcs; /* further data and type-specific functions */ + /* funcs can be ASN1_PRIMITIVE_FUNCS*, ASN1_EXTERN_FUNCS*, or ASN1_AUX* */ long size; /* Structure size (usually) */ const char *sname; /* Structure name */ }; -/*- - * These are values for the itype field and - * determine how the type is interpreted. - * - * For PRIMITIVE types the underlying type - * determines the behaviour if items is NULL. - * - * Otherwise templates must contain a single - * template and the type is treated in the - * same way as the type specified in the template. - * - * For SEQUENCE types the templates field points - * to the members, the size field is the - * structure size. - * - * For CHOICE types the templates field points - * to each possible member (typically a union) - * and the 'size' field is the offset of the - * selector. - * - * The 'funcs' field is used for application - * specific functions. - * - * The EXTERN type uses a new style d2i/i2d. - * The new style should be used where possible - * because it avoids things like the d2i IMPLICIT - * hack. - * - * MSTRING is a multiple string type, it is used - * for a CHOICE of character strings where the - * actual strings all occupy an ASN1_STRING - * structure. In this case the 'utype' field - * has a special meaning, it is used as a mask - * of acceptable types using the B_ASN1 constants. - * - * NDEF_SEQUENCE is the same as SEQUENCE except - * that it will use indefinite length constructed - * encoding if requested. - * - */ - -# define ASN1_ITYPE_PRIMITIVE 0x0 - -# define ASN1_ITYPE_SEQUENCE 0x1 - -# define ASN1_ITYPE_CHOICE 0x2 - -# define ASN1_ITYPE_EXTERN 0x4 - -# define ASN1_ITYPE_MSTRING 0x5 - -# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 - /* * Cache for ASN1 tag and length, so we don't keep re-reading it for things * like CHOICE @@ -661,21 +630,27 @@ typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx); -typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, +typedef int ASN1_ex_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx, OSSL_LIB_CTX *libctx, + const char *propq); +typedef int ASN1_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef int ASN1_ex_new_ex_func(ASN1_VALUE **pval, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); -typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, +typedef int ASN1_ex_print_func(BIO *out, const ASN1_VALUE **pval, int indent, const char *fname, const ASN1_PCTX *pctx); -typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, +typedef int ASN1_primitive_i2c(const ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); -typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, +typedef int ASN1_primitive_print(BIO *out, const ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx); @@ -687,6 +662,8 @@ typedef struct ASN1_EXTERN_FUNCS_st { ASN1_ex_d2i *asn1_ex_d2i; ASN1_ex_i2d *asn1_ex_i2d; ASN1_ex_print_func *asn1_ex_print; + ASN1_ex_new_ex_func *asn1_ex_new_ex; + ASN1_ex_d2i_ex *asn1_ex_d2i_ex; } ASN1_EXTERN_FUNCS; typedef struct ASN1_PRIMITIVE_FUNCS_st { @@ -711,18 +688,25 @@ typedef struct ASN1_PRIMITIVE_FUNCS_st { * error has occurred and the main operation should be abandoned. If major * changes in the default behaviour are required then an external type is * more appropriate. + * For the operations ASN1_OP_I2D_PRE, ASN1_OP_I2D_POST, ASN1_OP_PRINT_PRE, and + * ASN1_OP_PRINT_POST, meanwhile a variant of the callback with const parameter + * 'in' is provided to make clear statically that its input is not modified. If + * and only if this variant is in use the flag ASN1_AFLG_CONST_CB must be set. */ typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, void *exarg); +typedef int ASN1_aux_const_cb(int operation, const ASN1_VALUE **in, + const ASN1_ITEM *it, void *exarg); typedef struct ASN1_AUX_st { void *app_data; int flags; int ref_offset; /* Offset of reference value */ - int ref_lock; /* Lock type to use */ + int ref_lock; /* Offset of lock value */ ASN1_aux_cb *asn1_cb; int enc_offset; /* Offset of ASN1_ENCODING structure */ + ASN1_aux_const_cb *asn1_const_cb; /* for ASN1_OP_I2D_ and ASN1_OP_PRINT_ */ } ASN1_AUX; /* For print related callbacks exarg points to this structure */ @@ -750,6 +734,8 @@ typedef struct ASN1_STREAM_ARG_st { # define ASN1_AFLG_ENCODING 2 /* The Sequence length is invalid */ # define ASN1_AFLG_BROKEN 4 +/* Use the new asn1_const_cb */ +# define ASN1_AFLG_CONST_CB 8 /* operation values for asn1_cb */ @@ -767,6 +753,10 @@ typedef struct ASN1_STREAM_ARG_st { # define ASN1_OP_STREAM_POST 11 # define ASN1_OP_DETACHED_PRE 12 # define ASN1_OP_DETACHED_POST 13 +# define ASN1_OP_DUP_PRE 14 +# define ASN1_OP_DUP_POST 15 +# define ASN1_OP_GET0_LIBCTX 16 +# define ASN1_OP_GET0_PROPQ 17 /* Macro to implement a primitive type */ # define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) @@ -836,15 +826,15 @@ typedef struct ASN1_STREAM_ARG_st { { \ return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ } \ - int i2d_##fname(stname *a, unsigned char **out) \ + int i2d_##fname(const stname *a, unsigned char **out) \ { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ } # define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ - int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ + int i2d_##stname##_NDEF(const stname *a, unsigned char **out) \ { \ - return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + return ASN1_item_ndef_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ } # define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ @@ -854,28 +844,14 @@ typedef struct ASN1_STREAM_ARG_st { return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ ASN1_ITEM_rptr(stname)); \ } \ - static int i2d_##stname(stname *a, unsigned char **out) \ + static int i2d_##stname(const stname *a, unsigned char **out) \ { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, \ ASN1_ITEM_rptr(stname)); \ } -/* - * This includes evil casts to remove const: they will go away when full ASN1 - * constification is done. - */ -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(const stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - # define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ - stname * stname##_dup(stname *x) \ + stname * stname##_dup(const stname *x) \ { \ return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ } @@ -884,20 +860,13 @@ typedef struct ASN1_STREAM_ARG_st { IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) # define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ + int fname##_print_ctx(BIO *out, const stname *x, int indent, \ const ASN1_PCTX *pctx) \ { \ - return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ + return ASN1_item_print(out, (const ASN1_VALUE *)x, indent, \ ASN1_ITEM_rptr(itname), pctx); \ } -# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ - IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) - -# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - /* external definitions for primitive types */ DECLARE_ASN1_ITEM(ASN1_BOOLEAN) @@ -915,7 +884,7 @@ DECLARE_ASN1_ITEM(ZINT64) DECLARE_ASN1_ITEM(UINT64) DECLARE_ASN1_ITEM(ZUINT64) -# if OPENSSL_API_COMPAT < 0x10200000L +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * LONG and ZLONG are strongly discouraged for use as stored data, as the * underlying C type (long) differs in size depending on the architecture. @@ -925,7 +894,34 @@ DECLARE_ASN1_ITEM(LONG) DECLARE_ASN1_ITEM(ZLONG) # endif -DEFINE_STACK_OF(ASN1_VALUE) +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_VALUE, ASN1_VALUE, ASN1_VALUE) +#define sk_ASN1_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_value(sk, idx) ((ASN1_VALUE *)OPENSSL_sk_value(ossl_check_const_ASN1_VALUE_sk_type(sk), (idx))) +#define sk_ASN1_VALUE_new(cmp) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new(ossl_check_ASN1_VALUE_compfunc_type(cmp))) +#define sk_ASN1_VALUE_new_null() ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_VALUE_new_reserve(cmp, n) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_VALUE_compfunc_type(cmp), (n))) +#define sk_ASN1_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_VALUE_sk_type(sk), (n)) +#define sk_ASN1_VALUE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_delete(sk, i) ((ASN1_VALUE *)OPENSSL_sk_delete(ossl_check_ASN1_VALUE_sk_type(sk), (i))) +#define sk_ASN1_VALUE_delete_ptr(sk, ptr) ((ASN1_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr))) +#define sk_ASN1_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_pop(sk) ((ASN1_VALUE *)OPENSSL_sk_pop(ossl_check_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_shift(sk) ((ASN1_VALUE *)OPENSSL_sk_shift(ossl_check_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_VALUE_sk_type(sk),ossl_check_ASN1_VALUE_freefunc_type(freefunc)) +#define sk_ASN1_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), (idx)) +#define sk_ASN1_VALUE_set(sk, idx, ptr) ((ASN1_VALUE *)OPENSSL_sk_set(ossl_check_ASN1_VALUE_sk_type(sk), (idx), ossl_check_ASN1_VALUE_type(ptr))) +#define sk_ASN1_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), pnum) +#define sk_ASN1_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_dup(sk) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_copyfunc_type(copyfunc), ossl_check_ASN1_VALUE_freefunc_type(freefunc))) +#define sk_ASN1_VALUE_set_cmp_func(sk, cmp) ((sk_ASN1_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_compfunc_type(cmp))) + + /* Functions used internally by the ASN1 code */ @@ -936,9 +932,14 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx); -int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, +int ASN1_item_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); +/* Legacy compatibility */ +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) IMPLEMENT_ASN1_FUNCTIONS(name) +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) + #ifdef __cplusplus } #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/asn1t.h.in b/deps/openssl/android/x86/usr/local/include/openssl/asn1t.h.in new file mode 100644 index 00000000..b536fe51 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/asn1t.h.in @@ -0,0 +1,923 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ASN1T_H +# define OPENSSL_ASN1T_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1T_H +# endif + +# include +# include +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +/* ASN1 template defines, structures and functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * These are the possible values for the itype field of the + * ASN1_ITEM structure and determine how it is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application-specific + * data and functions. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 +# define ASN1_ITYPE_SEQUENCE 0x1 +# define ASN1_ITYPE_CHOICE 0x2 +/* unused value 0x3 */ +# define ASN1_ITYPE_EXTERN 0x4 +# define ASN1_ITYPE_MSTRING 0x5 +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + const ASN1_ITEM * itname##_it(void) \ + { \ + static const ASN1_ITEM local_it = { + +# define static_ASN1_ITEM_start(itname) \ + static ASN1_ITEM_start(itname) + +# define ASN1_ITEM_end(itname) \ + }; \ + return &local_it; \ + } + +/* Macros to aid ASN1 template writing */ + +# define ASN1_ITEM_TEMPLATE(tname) \ + static const ASN1_TEMPLATE tname##_item_tt + +# define ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) + +/* This is a ASN1 type which just embeds a template */ + +/*- + * This pair helps declare a SEQUENCE. We can do: + * + * ASN1_SEQUENCE(stname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END(stname) + * + * This will produce an ASN1_ITEM called stname_it + * for a structure called stname. + * + * If you want the same structure but a different + * name then use: + * + * ASN1_SEQUENCE(itname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END_name(stname, itname) + * + * This will create an item called itname_it using + * a structure called stname. + */ + +# define ASN1_SEQUENCE(tname) \ + static const ASN1_TEMPLATE tname##_seq_tt[] + +# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) + +# define static_ASN1_SEQUENCE_END(stname) static_ASN1_SEQUENCE_END_name(stname, stname) + +# define ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE(tname) \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ + ASN1_SEQUENCE_cb(tname, cb) + +# define ASN1_SEQUENCE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_const_cb(tname, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, NULL, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_cb_const_cb(tname, cb, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, cb, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_ref(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0, NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_enc(tname, enc, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc), NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) + + +# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) +# define static_ASN1_SEQUENCE_END_cb(stname, tname) static_ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/*- + * This pair helps declare a CHOICE type. We can do: + * + * ASN1_CHOICE(chname) = { + * ... CHOICE options ... + * ASN1_CHOICE_END(chname) + * + * This will produce an ASN1_ITEM called chname_it + * for a structure called chname. The structure + * definition must look like this: + * typedef struct { + * int type; + * union { + * ASN1_SOMETHING *opt1; + * ASN1_SOMEOTHER *opt2; + * } value; + * } chname; + * + * the name of the selector must be 'type'. + * to use an alternative selector name use the + * ASN1_CHOICE_END_selector() version. + */ + +# define ASN1_CHOICE(tname) \ + static const ASN1_TEMPLATE tname##_ch_tt[] + +# define ASN1_CHOICE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ + ASN1_CHOICE(tname) + +# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) + +# define static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname) + +# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) + +# define static_ASN1_CHOICE_END_name(stname, tname) static_ASN1_CHOICE_END_selector(stname, tname, type) + +# define ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_CHOICE_END_cb(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/* This helps with the template wrapper form of ASN1_ITEM */ + +# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ + (flags), (tag), 0,\ + #name, ASN1_ITEM_ref(type) } + +/* These help with SEQUENCE or CHOICE components */ + +/* used to declare other types */ + +# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ + (flags), (tag), offsetof(stname, field),\ + #field, ASN1_ITEM_ref(type) } + +/* implicit and explicit helper macros */ + +# define ASN1_IMP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | (ex), tag, stname, field, type) + +# define ASN1_EXP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | (ex), tag, stname, field, type) + +/* Any defined by macros: the field used is in the table itself */ + +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } + +/* Plain simple type */ +# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) +/* Embedded simple type */ +# define ASN1_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_EMBED,0, stname, field, type) + +/* OPTIONAL simple type */ +# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) +# define ASN1_OPT_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED, 0, stname, field, type) + +/* IMPLICIT tagged simple type */ +# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) +# define ASN1_IMP_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) + +/* IMPLICIT tagged OPTIONAL simple type */ +# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_IMP_OPT_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* Same as above but EXPLICIT */ + +# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) +# define ASN1_EXP_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) +# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_EXP_OPT_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* SEQUENCE OF type */ +# define ASN1_SEQUENCE_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) + +/* OPTIONAL SEQUENCE OF */ +# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Same as above but for SET OF */ + +# define ASN1_SET_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) + +# define ASN1_SET_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ + +# define ASN1_IMP_SET_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_EXP_SET_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +/* EXPLICIT using indefinite length constructed form */ +# define ASN1_NDEF_EXP(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) + +/* EXPLICIT OPTIONAL using indefinite length constructed form */ +# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) + +/* Macros for the ASN1_ADB structure */ + +# define ASN1_ADB(name) \ + static const ASN1_ADB_TABLE name##_adbtbl[] + +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ + ;\ + static const ASN1_ITEM *name##_adb(void) \ + { \ + static const ASN1_ADB internal_adb = \ + {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + }; \ + return (const ASN1_ITEM *) &internal_adb; \ + } \ + void dummy_function(void) + +# define ADB_ENTRY(val, template) {val, template} + +# define ASN1_ADB_TEMPLATE(name) \ + static const ASN1_TEMPLATE name##_tt + +/* + * This is the ASN1 template structure that defines a wrapper round the + * actual type. It determines the actual position of the field in the value + * structure, various flags such as OPTIONAL and the field name. + */ + +struct ASN1_TEMPLATE_st { + unsigned long flags; /* Various flags */ + long tag; /* tag, not used if no tagging */ + unsigned long offset; /* Offset of this field in structure */ + const char *field_name; /* Field name */ + ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ +}; + +/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ + +# define ASN1_TEMPLATE_item(t) (t->item_ptr) +# define ASN1_TEMPLATE_adb(t) (t->item_ptr) + +typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; +typedef struct ASN1_ADB_st ASN1_ADB; + +struct ASN1_ADB_st { + unsigned long flags; /* Various flags */ + unsigned long offset; /* Offset of selector field */ + int (*adb_cb)(long *psel); /* Application callback */ + const ASN1_ADB_TABLE *tbl; /* Table of possible types */ + long tblcount; /* Number of entries in tbl */ + const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ + const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ +}; + +struct ASN1_ADB_TABLE_st { + long value; /* NID for an object or value for an int */ + const ASN1_TEMPLATE tt; /* item for this value */ +}; + +/* template flags */ + +/* Field is optional */ +# define ASN1_TFLG_OPTIONAL (0x1) + +/* Field is a SET OF */ +# define ASN1_TFLG_SET_OF (0x1 << 1) + +/* Field is a SEQUENCE OF */ +# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) + +/* + * Special case: this refers to a SET OF that will be sorted into DER order + * when encoded *and* the corresponding STACK will be modified to match the + * new order. + */ +# define ASN1_TFLG_SET_ORDER (0x3 << 1) + +/* Mask for SET OF or SEQUENCE OF */ +# define ASN1_TFLG_SK_MASK (0x3 << 1) + +/* + * These flags mean the tag should be taken from the tag field. If EXPLICIT + * then the underlying type is used for the inner tag. + */ + +/* IMPLICIT tagging */ +# define ASN1_TFLG_IMPTAG (0x1 << 3) + +/* EXPLICIT tagging, inner tag from underlying type */ +# define ASN1_TFLG_EXPTAG (0x2 << 3) + +# define ASN1_TFLG_TAG_MASK (0x3 << 3) + +/* context specific IMPLICIT */ +# define ASN1_TFLG_IMPLICIT (ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT) + +/* context specific EXPLICIT */ +# define ASN1_TFLG_EXPLICIT (ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT) + +/* + * If tagging is in force these determine the type of tag to use. Otherwise + * the tag is determined by the underlying type. These values reflect the + * actual octet format. + */ + +/* Universal tag */ +# define ASN1_TFLG_UNIVERSAL (0x0<<6) +/* Application tag */ +# define ASN1_TFLG_APPLICATION (0x1<<6) +/* Context specific tag */ +# define ASN1_TFLG_CONTEXT (0x2<<6) +/* Private tag */ +# define ASN1_TFLG_PRIVATE (0x3<<6) + +# define ASN1_TFLG_TAG_CLASS (0x3<<6) + +/* + * These are for ANY DEFINED BY type. In this case the 'item' field points to + * an ASN1_ADB structure which contains a table of values to decode the + * relevant type + */ + +# define ASN1_TFLG_ADB_MASK (0x3<<8) + +# define ASN1_TFLG_ADB_OID (0x1<<8) + +# define ASN1_TFLG_ADB_INT (0x1<<9) + +/* + * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes + * indefinite length constructed encoding to be used if required. + */ + +# define ASN1_TFLG_NDEF (0x1<<11) + +/* Field is embedded and not a pointer */ +# define ASN1_TFLG_EMBED (0x1 << 12) + +/* This is the actual ASN1 item itself */ + +struct ASN1_ITEM_st { + char itype; /* The item type, primitive, SEQUENCE, CHOICE + * or extern */ + long utype; /* underlying type */ + const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains + * the contents */ + long tcount; /* Number of templates if SEQUENCE or CHOICE */ + const void *funcs; /* further data and type-specific functions */ + /* funcs can be ASN1_PRIMITIVE_FUNCS*, ASN1_EXTERN_FUNCS*, or ASN1_AUX* */ + long size; /* Structure size (usually) */ + const char *sname; /* Structure name */ +}; + +/* + * Cache for ASN1 tag and length, so we don't keep re-reading it for things + * like CHOICE + */ + +struct ASN1_TLC_st { + char valid; /* Values below are valid */ + int ret; /* return value */ + long plen; /* length */ + int ptag; /* class value */ + int pclass; /* class value */ + int hdrlen; /* header length */ +}; + +/* Typedefs for ASN1 function pointers */ +typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +typedef int ASN1_ex_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx, OSSL_LIB_CTX *libctx, + const char *propq); +typedef int ASN1_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); +typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef int ASN1_ex_new_ex_func(ASN1_VALUE **pval, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); + +typedef int ASN1_ex_print_func(BIO *out, const ASN1_VALUE **pval, + int indent, const char *fname, + const ASN1_PCTX *pctx); + +typedef int ASN1_primitive_i2c(const ASN1_VALUE **pval, unsigned char *cont, + int *putype, const ASN1_ITEM *it); +typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, + int len, int utype, char *free_cont, + const ASN1_ITEM *it); +typedef int ASN1_primitive_print(BIO *out, const ASN1_VALUE **pval, + const ASN1_ITEM *it, int indent, + const ASN1_PCTX *pctx); + +typedef struct ASN1_EXTERN_FUNCS_st { + void *app_data; + ASN1_ex_new_func *asn1_ex_new; + ASN1_ex_free_func *asn1_ex_free; + ASN1_ex_free_func *asn1_ex_clear; + ASN1_ex_d2i *asn1_ex_d2i; + ASN1_ex_i2d *asn1_ex_i2d; + ASN1_ex_print_func *asn1_ex_print; + ASN1_ex_new_ex_func *asn1_ex_new_ex; + ASN1_ex_d2i_ex *asn1_ex_d2i_ex; +} ASN1_EXTERN_FUNCS; + +typedef struct ASN1_PRIMITIVE_FUNCS_st { + void *app_data; + unsigned long flags; + ASN1_ex_new_func *prim_new; + ASN1_ex_free_func *prim_free; + ASN1_ex_free_func *prim_clear; + ASN1_primitive_c2i *prim_c2i; + ASN1_primitive_i2c *prim_i2c; + ASN1_primitive_print *prim_print; +} ASN1_PRIMITIVE_FUNCS; + +/* + * This is the ASN1_AUX structure: it handles various miscellaneous + * requirements. For example the use of reference counts and an informational + * callback. The "informational callback" is called at various points during + * the ASN1 encoding and decoding. It can be used to provide minor + * customisation of the structures used. This is most useful where the + * supplied routines *almost* do the right thing but need some extra help at + * a few points. If the callback returns zero then it is assumed a fatal + * error has occurred and the main operation should be abandoned. If major + * changes in the default behaviour are required then an external type is + * more appropriate. + * For the operations ASN1_OP_I2D_PRE, ASN1_OP_I2D_POST, ASN1_OP_PRINT_PRE, and + * ASN1_OP_PRINT_POST, meanwhile a variant of the callback with const parameter + * 'in' is provided to make clear statically that its input is not modified. If + * and only if this variant is in use the flag ASN1_AFLG_CONST_CB must be set. + */ + +typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, + void *exarg); +typedef int ASN1_aux_const_cb(int operation, const ASN1_VALUE **in, + const ASN1_ITEM *it, void *exarg); + +typedef struct ASN1_AUX_st { + void *app_data; + int flags; + int ref_offset; /* Offset of reference value */ + int ref_lock; /* Offset of lock value */ + ASN1_aux_cb *asn1_cb; + int enc_offset; /* Offset of ASN1_ENCODING structure */ + ASN1_aux_const_cb *asn1_const_cb; /* for ASN1_OP_I2D_ and ASN1_OP_PRINT_ */ +} ASN1_AUX; + +/* For print related callbacks exarg points to this structure */ +typedef struct ASN1_PRINT_ARG_st { + BIO *out; + int indent; + const ASN1_PCTX *pctx; +} ASN1_PRINT_ARG; + +/* For streaming related callbacks exarg points to this structure */ +typedef struct ASN1_STREAM_ARG_st { + /* BIO to stream through */ + BIO *out; + /* BIO with filters appended */ + BIO *ndef_bio; + /* Streaming I/O boundary */ + unsigned char **boundary; +} ASN1_STREAM_ARG; + +/* Flags in ASN1_AUX */ + +/* Use a reference count */ +# define ASN1_AFLG_REFCOUNT 1 +/* Save the encoding of structure (useful for signatures) */ +# define ASN1_AFLG_ENCODING 2 +/* The Sequence length is invalid */ +# define ASN1_AFLG_BROKEN 4 +/* Use the new asn1_const_cb */ +# define ASN1_AFLG_CONST_CB 8 + +/* operation values for asn1_cb */ + +# define ASN1_OP_NEW_PRE 0 +# define ASN1_OP_NEW_POST 1 +# define ASN1_OP_FREE_PRE 2 +# define ASN1_OP_FREE_POST 3 +# define ASN1_OP_D2I_PRE 4 +# define ASN1_OP_D2I_POST 5 +# define ASN1_OP_I2D_PRE 6 +# define ASN1_OP_I2D_POST 7 +# define ASN1_OP_PRINT_PRE 8 +# define ASN1_OP_PRINT_POST 9 +# define ASN1_OP_STREAM_PRE 10 +# define ASN1_OP_STREAM_POST 11 +# define ASN1_OP_DETACHED_PRE 12 +# define ASN1_OP_DETACHED_POST 13 +# define ASN1_OP_DUP_PRE 14 +# define ASN1_OP_DUP_POST 15 +# define ASN1_OP_GET0_LIBCTX 16 +# define ASN1_OP_GET0_PROPQ 17 + +/* Macro to implement a primitive type */ +# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) +# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ + ASN1_ITEM_end(itname) + +/* Macro to implement a multi string type */ +# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ + ASN1_ITEM_end(itname) + +# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ + ASN1_ITEM_start(sname) \ + ASN1_ITYPE_EXTERN, \ + tag, \ + NULL, \ + 0, \ + &fptrs, \ + 0, \ + #sname \ + ASN1_ITEM_end(sname) + +/* Macro to implement standard functions in terms of ASN1_ITEM structures */ + +# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) + +# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ + IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) + +# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ + pre stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + pre void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ + stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ + int i2d_##stname##_NDEF(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_ndef_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + } + +# define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ + static stname *d2i_##stname(stname **a, \ + const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ + ASN1_ITEM_rptr(stname)); \ + } \ + static int i2d_##stname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, \ + ASN1_ITEM_rptr(stname)); \ + } + +# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ + stname * stname##_dup(const stname *x) \ + { \ + return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ + } + +# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ + IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ + int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx) \ + { \ + return ASN1_item_print(out, (const ASN1_VALUE *)x, indent, \ + ASN1_ITEM_rptr(itname), pctx); \ + } + +/* external definitions for primitive types */ + +DECLARE_ASN1_ITEM(ASN1_BOOLEAN) +DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_SEQUENCE) +DECLARE_ASN1_ITEM(CBIGNUM) +DECLARE_ASN1_ITEM(BIGNUM) +DECLARE_ASN1_ITEM(INT32) +DECLARE_ASN1_ITEM(ZINT32) +DECLARE_ASN1_ITEM(UINT32) +DECLARE_ASN1_ITEM(ZUINT32) +DECLARE_ASN1_ITEM(INT64) +DECLARE_ASN1_ITEM(ZINT64) +DECLARE_ASN1_ITEM(UINT64) +DECLARE_ASN1_ITEM(ZUINT64) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * LONG and ZLONG are strongly discouraged for use as stored data, as the + * underlying C type (long) differs in size depending on the architecture. + * They are designed with 32-bit longs in mind. + */ +DECLARE_ASN1_ITEM(LONG) +DECLARE_ASN1_ITEM(ZLONG) +# endif + +{- + generate_stack_macros("ASN1_VALUE"); +-} + + +/* Functions used internally by the ASN1 code */ + +int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); +void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); + +int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +int ASN1_item_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); + +/* Legacy compatibility */ +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) IMPLEMENT_ASN1_FUNCTIONS(name) +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/async.h b/deps/openssl/android/x86/usr/local/include/openssl/async.h index 7052b890..bc27d5db 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/async.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/async.h @@ -1,7 +1,7 @@ /* * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,8 +9,14 @@ #include -#ifndef HEADER_ASYNC_H -# define HEADER_ASYNC_H +#ifndef OPENSSL_ASYNC_H +# define OPENSSL_ASYNC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASYNC_H +# endif #if defined(_WIN32) # if defined(BASETYPES) || defined(_WINDEF_H) @@ -31,12 +37,18 @@ extern "C" { typedef struct async_job_st ASYNC_JOB; typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; +typedef int (*ASYNC_callback_fn)(void *arg); #define ASYNC_ERR 0 #define ASYNC_NO_JOBS 1 #define ASYNC_PAUSE 2 #define ASYNC_FINISH 3 +#define ASYNC_STATUS_UNSUPPORTED 0 +#define ASYNC_STATUS_ERR 1 +#define ASYNC_STATUS_OK 2 +#define ASYNC_STATUS_EAGAIN 3 + int ASYNC_init_thread(size_t max_size, size_t init_size); void ASYNC_cleanup_thread(void); @@ -52,6 +64,14 @@ int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, OSSL_ASYNC_FD *fd, void **custom_data); int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, size_t *numfds); +int ASYNC_WAIT_CTX_get_callback(ASYNC_WAIT_CTX *ctx, + ASYNC_callback_fn *callback, + void **callback_arg); +int ASYNC_WAIT_CTX_set_callback(ASYNC_WAIT_CTX *ctx, + ASYNC_callback_fn callback, + void *callback_arg); +int ASYNC_WAIT_CTX_set_status(ASYNC_WAIT_CTX *ctx, int status); +int ASYNC_WAIT_CTX_get_status(ASYNC_WAIT_CTX *ctx); int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, size_t *numaddfds, OSSL_ASYNC_FD *delfd, size_t *numdelfds); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/asyncerr.h b/deps/openssl/android/x86/usr/local/include/openssl/asyncerr.h index 91afbbb2..c093f7be 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/asyncerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/asyncerr.h @@ -1,35 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASYNCERR_H -# define HEADER_ASYNCERR_H +#ifndef OPENSSL_ASYNCERR_H +# define OPENSSL_ASYNCERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASYNC_strings(void); -/* - * ASYNC function codes. - */ -# define ASYNC_F_ASYNC_CTX_NEW 100 -# define ASYNC_F_ASYNC_INIT_THREAD 101 -# define ASYNC_F_ASYNC_JOB_NEW 102 -# define ASYNC_F_ASYNC_PAUSE_JOB 103 -# define ASYNC_F_ASYNC_START_FUNC 104 -# define ASYNC_F_ASYNC_START_JOB 105 -# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 106 /* * ASYNC reason codes. diff --git a/deps/openssl/android/x86/usr/local/include/openssl/bio.h b/deps/openssl/android/x86/usr/local/include/openssl/bio.h index ae559a51..e16cf622 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/bio.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/bio.h @@ -1,14 +1,24 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/bio.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BIO_H -# define HEADER_BIO_H + +#ifndef OPENSSL_BIO_H +# define OPENSSL_BIO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BIO_H +# endif # include @@ -19,6 +29,7 @@ # include # include +# include #ifdef __cplusplus extern "C" { @@ -55,6 +66,7 @@ extern "C" { # ifndef OPENSSL_NO_SCTP # define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) # endif +# define BIO_TYPE_CORE_TO_PROV (25|BIO_TYPE_SOURCE_SINK) #define BIO_TYPE_START 128 @@ -97,7 +109,7 @@ extern "C" { # define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ # define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ -# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation timed out */ /* #ifdef IP_MTU_DISCOVER */ # define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ @@ -141,6 +153,34 @@ extern "C" { # define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 +/* + * internal BIO: + * # define BIO_CTRL_SET_KTLS_SEND 72 + * # define BIO_CTRL_SET_KTLS_SEND_CTRL_MSG 74 + * # define BIO_CTRL_CLEAR_KTLS_CTRL_MSG 75 + */ + +# define BIO_CTRL_GET_KTLS_SEND 73 +# define BIO_CTRL_GET_KTLS_RECV 76 + +# define BIO_CTRL_DGRAM_SCTP_WAIT_FOR_DRY 77 +# define BIO_CTRL_DGRAM_SCTP_MSG_WAITING 78 + +/* BIO_f_prefix controls */ +# define BIO_CTRL_SET_PREFIX 79 +# define BIO_CTRL_SET_INDENT 80 +# define BIO_CTRL_GET_INDENT 81 + +# ifndef OPENSSL_NO_KTLS +# define BIO_get_ktls_send(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL) > 0) +# define BIO_get_ktls_recv(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL) > 0) +# else +# define BIO_get_ktls_send(b) (0) +# define BIO_get_ktls_recv(b) (0) +# endif + /* modifiers */ # define BIO_FP_READ 0x02 # define BIO_FP_WRITE 0x04 @@ -152,12 +192,9 @@ extern "C" { # define BIO_FLAGS_IO_SPECIAL 0x04 # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) # define BIO_FLAGS_SHOULD_RETRY 0x08 -# ifndef BIO_FLAGS_UPLINK -/* - * "UPLINK" flag denotes file descriptors provided by application. It - * defaults to 0, as most platforms don't require UPLINK interface. - */ -# define BIO_FLAGS_UPLINK 0 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* This #define was replaced by an internal constant and should not be used. */ +# define BIO_FLAGS_UPLINK 0 # endif # define BIO_FLAGS_BASE64_NO_NL 0x100 @@ -171,6 +208,8 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 +/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ + typedef union bio_addr_st BIO_ADDR; typedef struct bio_addrinfo_st BIO_ADDRINFO; @@ -233,16 +272,23 @@ void BIO_clear_flags(BIO *b, int flags); # define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) # define BIO_cb_post(a) ((a)&BIO_CB_RETURN) +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, long argl, long ret); +OSSL_DEPRECATEDIN_3_0 BIO_callback_fn BIO_get_callback(const BIO *b); +OSSL_DEPRECATEDIN_3_0 void BIO_set_callback(BIO *b, BIO_callback_fn callback); +OSSL_DEPRECATEDIN_3_0 long BIO_debug_callback(BIO *bio, int cmd, + const char *argp, int argi, + long argl, long ret); +# endif + typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, size_t len, int argi, long argl, int ret, size_t *processed); -BIO_callback_fn BIO_get_callback(const BIO *b); -void BIO_set_callback(BIO *b, BIO_callback_fn callback); - BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); +long BIO_debug_callback_ex(BIO *bio, int oper, const char *argp, size_t len, + int argi, long argl, int ret, size_t *processed); char *BIO_get_callback_arg(const BIO *b); void BIO_set_callback_arg(BIO *b, char *arg); @@ -255,12 +301,42 @@ int BIO_method_type(const BIO *b); typedef int BIO_info_cb(BIO *, int, int); typedef BIO_info_cb bio_info_cb; /* backward compatibility */ -DEFINE_STACK_OF(BIO) +SKM_DEFINE_STACK_OF_INTERNAL(BIO, BIO, BIO) +#define sk_BIO_num(sk) OPENSSL_sk_num(ossl_check_const_BIO_sk_type(sk)) +#define sk_BIO_value(sk, idx) ((BIO *)OPENSSL_sk_value(ossl_check_const_BIO_sk_type(sk), (idx))) +#define sk_BIO_new(cmp) ((STACK_OF(BIO) *)OPENSSL_sk_new(ossl_check_BIO_compfunc_type(cmp))) +#define sk_BIO_new_null() ((STACK_OF(BIO) *)OPENSSL_sk_new_null()) +#define sk_BIO_new_reserve(cmp, n) ((STACK_OF(BIO) *)OPENSSL_sk_new_reserve(ossl_check_BIO_compfunc_type(cmp), (n))) +#define sk_BIO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_BIO_sk_type(sk), (n)) +#define sk_BIO_free(sk) OPENSSL_sk_free(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_zero(sk) OPENSSL_sk_zero(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_delete(sk, i) ((BIO *)OPENSSL_sk_delete(ossl_check_BIO_sk_type(sk), (i))) +#define sk_BIO_delete_ptr(sk, ptr) ((BIO *)OPENSSL_sk_delete_ptr(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr))) +#define sk_BIO_push(sk, ptr) OPENSSL_sk_push(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_pop(sk) ((BIO *)OPENSSL_sk_pop(ossl_check_BIO_sk_type(sk))) +#define sk_BIO_shift(sk) ((BIO *)OPENSSL_sk_shift(ossl_check_BIO_sk_type(sk))) +#define sk_BIO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_BIO_sk_type(sk),ossl_check_BIO_freefunc_type(freefunc)) +#define sk_BIO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr), (idx)) +#define sk_BIO_set(sk, idx, ptr) ((BIO *)OPENSSL_sk_set(ossl_check_BIO_sk_type(sk), (idx), ossl_check_BIO_type(ptr))) +#define sk_BIO_find(sk, ptr) OPENSSL_sk_find(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr), pnum) +#define sk_BIO_sort(sk) OPENSSL_sk_sort(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_BIO_sk_type(sk)) +#define sk_BIO_dup(sk) ((STACK_OF(BIO) *)OPENSSL_sk_dup(ossl_check_const_BIO_sk_type(sk))) +#define sk_BIO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(BIO) *)OPENSSL_sk_deep_copy(ossl_check_const_BIO_sk_type(sk), ossl_check_BIO_copyfunc_type(copyfunc), ossl_check_BIO_freefunc_type(freefunc))) +#define sk_BIO_set_cmp_func(sk, cmp) ((sk_BIO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_BIO_sk_type(sk), ossl_check_BIO_compfunc_type(cmp))) + + /* Prefix and suffix callback in ASN1 BIO */ typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, void *parg); +typedef void (*BIO_dgram_sctp_notification_handler_fn) (BIO *b, + void *context, + void *buf); # ifndef OPENSSL_NO_SCTP /* SCTP parameter structs */ struct bio_dgram_sctp_sndinfo { @@ -400,12 +476,11 @@ struct bio_dgram_sctp_prinfo { # define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR # define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) # define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) - -/* BIO_s_accept() and BIO_s_connect() */ -# define BIO_do_connect(b) BIO_do_handshake(b) -# define BIO_do_accept(b) BIO_do_handshake(b) # endif /* OPENSSL_NO_SOCK */ +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) + # define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) /* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ @@ -524,10 +599,15 @@ int BIO_ctrl_reset_read_request(BIO *b); # define BIO_dgram_get_mtu_overhead(b) \ (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) +/* ctrl macros for BIO_f_prefix */ +# define BIO_set_prefix(b,p) BIO_ctrl((b), BIO_CTRL_SET_PREFIX, 0, (void *)(p)) +# define BIO_set_indent(b,i) BIO_ctrl((b), BIO_CTRL_SET_INDENT, (i), NULL) +# define BIO_get_indent(b) BIO_ctrl((b), BIO_CTRL_GET_INDENT, 0, NULL) + #define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) int BIO_set_ex_data(BIO *bio, int idx, void *data); -void *BIO_get_ex_data(BIO *bio, int idx); +void *BIO_get_ex_data(const BIO *bio, int idx); uint64_t BIO_number_read(BIO *bio); uint64_t BIO_number_written(BIO *bio); @@ -543,9 +623,11 @@ int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, const BIO_METHOD *BIO_s_file(void); BIO *BIO_new_file(const char *filename, const char *mode); +BIO *BIO_new_from_core_bio(OSSL_LIB_CTX *libctx, OSSL_CORE_BIO *corebio); # ifndef OPENSSL_NO_STDIO BIO *BIO_new_fp(FILE *stream, int close_flag); # endif +BIO *BIO_new_ex(OSSL_LIB_CTX *libctx, const BIO_METHOD *method); BIO *BIO_new(const BIO_METHOD *type); int BIO_free(BIO *a); void BIO_set_data(BIO *a, void *ptr); @@ -559,6 +641,7 @@ int BIO_up_ref(BIO *a); int BIO_read(BIO *b, void *data, int dlen); int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); int BIO_gets(BIO *bp, char *buf, int size); +int BIO_get_line(BIO *bio, char *buf, int size); int BIO_write(BIO *b, const void *data, int dlen); int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); int BIO_puts(BIO *bp, const char *buf); @@ -583,9 +666,6 @@ int BIO_nread(BIO *bio, char **buf, int num); int BIO_nwrite0(BIO *bio, char **buf); int BIO_nwrite(BIO *bio, char **buf, int num); -long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, - long argl, long ret); - const BIO_METHOD *BIO_s_mem(void); const BIO_METHOD *BIO_s_secmem(void); BIO *BIO_new_mem_buf(const void *buf, int len); @@ -600,8 +680,11 @@ const BIO_METHOD *BIO_s_bio(void); const BIO_METHOD *BIO_s_null(void); const BIO_METHOD *BIO_f_null(void); const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_readbuffer(void); const BIO_METHOD *BIO_f_linebuffer(void); const BIO_METHOD *BIO_f_nbio_test(void); +const BIO_METHOD *BIO_f_prefix(void); +const BIO_METHOD *BIO_s_core(void); # ifndef OPENSSL_NO_DGRAM const BIO_METHOD *BIO_s_datagram(void); int BIO_dgram_non_fatal_error(int error); @@ -611,10 +694,8 @@ const BIO_METHOD *BIO_s_datagram_sctp(void); BIO *BIO_new_dgram_sctp(int fd, int close_flag); int BIO_dgram_is_sctp(BIO *bio); int BIO_dgram_sctp_notification_cb(BIO *b, - void (*handle_notifications) (BIO *bio, - void *context, - void *buf), - void *context); + BIO_dgram_sctp_notification_handler_fn handle_notifications, + void *context); int BIO_dgram_sctp_wait_for_dry(BIO *b); int BIO_dgram_sctp_msg_waiting(BIO *b); # endif @@ -623,21 +704,24 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_socket_wait(int fd, int for_read, time_t max_time); # endif +int BIO_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds); +int BIO_do_connect_retry(BIO *bio, int timeout, int nap_milliseconds); int BIO_fd_should_retry(int i); int BIO_fd_non_fatal_error(int error); int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len); + void *u, const void *s, int len); int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len, int indent); -int BIO_dump(BIO *b, const char *bytes, int len); -int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); + void *u, const void *s, int len, int indent); +int BIO_dump(BIO *b, const void *bytes, int len); +int BIO_dump_indent(BIO *b, const void *bytes, int len, int indent); # ifndef OPENSSL_NO_STDIO -int BIO_dump_fp(FILE *fp, const char *s, int len); -int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); +int BIO_dump_fp(FILE *fp, const void *s, int len); +int BIO_dump_indent_fp(FILE *fp, const void *s, int len, int indent); # endif -int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, +int BIO_hex_string(BIO *out, int indent, int width, const void *data, int datalen); # ifndef OPENSSL_NO_SOCK @@ -678,16 +762,17 @@ int BIO_sock_error(int sock); int BIO_socket_ioctl(int fd, long type, void *arg); int BIO_socket_nbio(int fd, int mode); int BIO_sock_init(void); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define BIO_sock_cleanup() while(0) continue # endif int BIO_set_tcp_ndelay(int sock, int turn_on); - -DEPRECATEDIN_1_1_0(struct hostent *BIO_gethostbyname(const char *name)) -DEPRECATEDIN_1_1_0(int BIO_get_port(const char *str, unsigned short *port_ptr)) -DEPRECATEDIN_1_1_0(int BIO_get_host_ip(const char *str, unsigned char *ip)) -DEPRECATEDIN_1_1_0(int BIO_get_accept_socket(char *host_port, int mode)) -DEPRECATEDIN_1_1_0(int BIO_accept(int sock, char **ip_port)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 struct hostent *BIO_gethostbyname(const char *name); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_port(const char *str, unsigned short *port_ptr); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_host_ip(const char *str, unsigned char *ip); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_accept_socket(char *host_port, int mode); +OSSL_DEPRECATEDIN_1_1_0 int BIO_accept(int sock, char **ip_port); +# endif union BIO_sock_info_u { BIO_ADDR *addr; @@ -734,6 +819,7 @@ void BIO_copy_next_retry(BIO *b); # define ossl_bio__attr__(x) # if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__MINGW32__) && !defined(__MINGW64__) \ && !defined(__APPLE__) /* * Because we support the 'z' modifier, which made its appearance in C99, diff --git a/deps/openssl/android/x86/usr/local/include/openssl/bio.h.in b/deps/openssl/android/x86/usr/local/include/openssl/bio.h.in new file mode 100644 index 00000000..c521e41e --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/bio.h.in @@ -0,0 +1,864 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_BIO_H +# define OPENSSL_BIO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BIO_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* There are the classes of BIOs */ +# define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */ +# define BIO_TYPE_FILTER 0x0200 +# define BIO_TYPE_SOURCE_SINK 0x0400 + +/* These are the 'types' of BIOs */ +# define BIO_TYPE_NONE 0 +# define BIO_TYPE_MEM ( 1|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_FILE ( 2|BIO_TYPE_SOURCE_SINK) + +# define BIO_TYPE_FD ( 4|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_SOCKET ( 5|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_NULL ( 6|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_SSL ( 7|BIO_TYPE_FILTER) +# define BIO_TYPE_MD ( 8|BIO_TYPE_FILTER) +# define BIO_TYPE_BUFFER ( 9|BIO_TYPE_FILTER) +# define BIO_TYPE_CIPHER (10|BIO_TYPE_FILTER) +# define BIO_TYPE_BASE64 (11|BIO_TYPE_FILTER) +# define BIO_TYPE_CONNECT (12|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ACCEPT (13|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) + +# define BIO_TYPE_NBIO_TEST (16|BIO_TYPE_FILTER)/* server proxy BIO */ +# define BIO_TYPE_NULL_FILTER (17|BIO_TYPE_FILTER) +# define BIO_TYPE_BIO (19|BIO_TYPE_SOURCE_SINK)/* half a BIO pair */ +# define BIO_TYPE_LINEBUFFER (20|BIO_TYPE_FILTER) +# define BIO_TYPE_DGRAM (21|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ASN1 (22|BIO_TYPE_FILTER) +# define BIO_TYPE_COMP (23|BIO_TYPE_FILTER) +# ifndef OPENSSL_NO_SCTP +# define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# endif +# define BIO_TYPE_CORE_TO_PROV (25|BIO_TYPE_SOURCE_SINK) + +#define BIO_TYPE_START 128 + +/* + * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. + * BIO_set_fp(in,stdin,BIO_NOCLOSE); + */ +# define BIO_NOCLOSE 0x00 +# define BIO_CLOSE 0x01 + +/* + * These are used in the following macros and are passed to BIO_ctrl() + */ +# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ +# define BIO_CTRL_EOF 2/* opt - are we at the eof */ +# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ +# define BIO_CTRL_SET 4/* man - set the 'IO' type */ +# define BIO_CTRL_GET 5/* man - get the 'IO' type */ +# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ +# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ +# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ +# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ +# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ +# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ +# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ +# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ +# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ +# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ + +# define BIO_CTRL_PEEK 29/* BIO_f_buffer special */ +# define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ + +/* dgram BIO stuff */ +# define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ +# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected + * socket to be passed in */ +# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ +# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ + +# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation timed out */ + +/* #ifdef IP_MTU_DISCOVER */ +# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ +/* #endif */ + +# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ +# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 +# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ +# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. + * want to use this if asking + * the kernel fails */ + +# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was + * exceed in the previous write + * operation */ + +# define BIO_CTRL_DGRAM_GET_PEER 46 +# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ + +# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout + * to adjust socket timeouts */ +# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 + +# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 + +/* Deliberately outside of OPENSSL_NO_SCTP - used in bss_dgram.c */ +# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 +# ifndef OPENSSL_NO_SCTP +/* SCTP stuff */ +# define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 +# define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 +# define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 +# define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 +# define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 +# define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 +# define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 +# define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 +# define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 +# define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 +# endif + +# define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 + +/* + * internal BIO: + * # define BIO_CTRL_SET_KTLS_SEND 72 + * # define BIO_CTRL_SET_KTLS_SEND_CTRL_MSG 74 + * # define BIO_CTRL_CLEAR_KTLS_CTRL_MSG 75 + */ + +# define BIO_CTRL_GET_KTLS_SEND 73 +# define BIO_CTRL_GET_KTLS_RECV 76 + +# define BIO_CTRL_DGRAM_SCTP_WAIT_FOR_DRY 77 +# define BIO_CTRL_DGRAM_SCTP_MSG_WAITING 78 + +/* BIO_f_prefix controls */ +# define BIO_CTRL_SET_PREFIX 79 +# define BIO_CTRL_SET_INDENT 80 +# define BIO_CTRL_GET_INDENT 81 + +# ifndef OPENSSL_NO_KTLS +# define BIO_get_ktls_send(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL) > 0) +# define BIO_get_ktls_recv(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL) > 0) +# else +# define BIO_get_ktls_send(b) (0) +# define BIO_get_ktls_recv(b) (0) +# endif + +/* modifiers */ +# define BIO_FP_READ 0x02 +# define BIO_FP_WRITE 0x04 +# define BIO_FP_APPEND 0x08 +# define BIO_FP_TEXT 0x10 + +# define BIO_FLAGS_READ 0x01 +# define BIO_FLAGS_WRITE 0x02 +# define BIO_FLAGS_IO_SPECIAL 0x04 +# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) +# define BIO_FLAGS_SHOULD_RETRY 0x08 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* This #define was replaced by an internal constant and should not be used. */ +# define BIO_FLAGS_UPLINK 0 +# endif + +# define BIO_FLAGS_BASE64_NO_NL 0x100 + +/* + * This is used with memory BIOs: + * BIO_FLAGS_MEM_RDONLY means we shouldn't free up or change the data in any way; + * BIO_FLAGS_NONCLEAR_RST means we shouldn't clear data on reset. + */ +# define BIO_FLAGS_MEM_RDONLY 0x200 +# define BIO_FLAGS_NONCLEAR_RST 0x400 +# define BIO_FLAGS_IN_EOF 0x800 + +/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ + +typedef union bio_addr_st BIO_ADDR; +typedef struct bio_addrinfo_st BIO_ADDRINFO; + +int BIO_get_new_index(void); +void BIO_set_flags(BIO *b, int flags); +int BIO_test_flags(const BIO *b, int flags); +void BIO_clear_flags(BIO *b, int flags); + +# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) +# define BIO_set_retry_special(b) \ + BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_read(b) \ + BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_write(b) \ + BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) + +/* These are normally used internally in BIOs */ +# define BIO_clear_retry_flags(b) \ + BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_get_retry_flags(b) \ + BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) + +/* These should be used by the application to tell why we should retry */ +# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) +# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) +# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) +# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) +# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) + +/* + * The next three are used in conjunction with the BIO_should_io_special() + * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int + * *reason); will walk the BIO stack and return the 'reason' for the special + * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return + * the code. + */ +/* + * Returned from the SSL bio when the certificate retrieval code had an error + */ +# define BIO_RR_SSL_X509_LOOKUP 0x01 +/* Returned from the connect BIO when a connect would have blocked */ +# define BIO_RR_CONNECT 0x02 +/* Returned from the accept BIO when an accept would have blocked */ +# define BIO_RR_ACCEPT 0x03 + +/* These are passed by the BIO callback */ +# define BIO_CB_FREE 0x01 +# define BIO_CB_READ 0x02 +# define BIO_CB_WRITE 0x03 +# define BIO_CB_PUTS 0x04 +# define BIO_CB_GETS 0x05 +# define BIO_CB_CTRL 0x06 + +/* + * The callback is called before and after the underling operation, The + * BIO_CB_RETURN flag indicates if it is after the call + */ +# define BIO_CB_RETURN 0x80 +# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) +# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) +# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, + long argl, long ret); +OSSL_DEPRECATEDIN_3_0 BIO_callback_fn BIO_get_callback(const BIO *b); +OSSL_DEPRECATEDIN_3_0 void BIO_set_callback(BIO *b, BIO_callback_fn callback); +OSSL_DEPRECATEDIN_3_0 long BIO_debug_callback(BIO *bio, int cmd, + const char *argp, int argi, + long argl, long ret); +# endif + +typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, + size_t len, int argi, + long argl, int ret, size_t *processed); +BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); +void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); +long BIO_debug_callback_ex(BIO *bio, int oper, const char *argp, size_t len, + int argi, long argl, int ret, size_t *processed); + +char *BIO_get_callback_arg(const BIO *b); +void BIO_set_callback_arg(BIO *b, char *arg); + +typedef struct bio_method_st BIO_METHOD; + +const char *BIO_method_name(const BIO *b); +int BIO_method_type(const BIO *b); + +typedef int BIO_info_cb(BIO *, int, int); +typedef BIO_info_cb bio_info_cb; /* backward compatibility */ + +{- + generate_stack_macros("BIO"); +-} + + +/* Prefix and suffix callback in ASN1 BIO */ +typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, + void *parg); + +typedef void (*BIO_dgram_sctp_notification_handler_fn) (BIO *b, + void *context, + void *buf); +# ifndef OPENSSL_NO_SCTP +/* SCTP parameter structs */ +struct bio_dgram_sctp_sndinfo { + uint16_t snd_sid; + uint16_t snd_flags; + uint32_t snd_ppid; + uint32_t snd_context; +}; + +struct bio_dgram_sctp_rcvinfo { + uint16_t rcv_sid; + uint16_t rcv_ssn; + uint16_t rcv_flags; + uint32_t rcv_ppid; + uint32_t rcv_tsn; + uint32_t rcv_cumtsn; + uint32_t rcv_context; +}; + +struct bio_dgram_sctp_prinfo { + uint16_t pr_policy; + uint32_t pr_value; +}; +# endif + +/* + * #define BIO_CONN_get_param_hostname BIO_ctrl + */ + +# define BIO_C_SET_CONNECT 100 +# define BIO_C_DO_STATE_MACHINE 101 +# define BIO_C_SET_NBIO 102 +/* # define BIO_C_SET_PROXY_PARAM 103 */ +# define BIO_C_SET_FD 104 +# define BIO_C_GET_FD 105 +# define BIO_C_SET_FILE_PTR 106 +# define BIO_C_GET_FILE_PTR 107 +# define BIO_C_SET_FILENAME 108 +# define BIO_C_SET_SSL 109 +# define BIO_C_GET_SSL 110 +# define BIO_C_SET_MD 111 +# define BIO_C_GET_MD 112 +# define BIO_C_GET_CIPHER_STATUS 113 +# define BIO_C_SET_BUF_MEM 114 +# define BIO_C_GET_BUF_MEM_PTR 115 +# define BIO_C_GET_BUFF_NUM_LINES 116 +# define BIO_C_SET_BUFF_SIZE 117 +# define BIO_C_SET_ACCEPT 118 +# define BIO_C_SSL_MODE 119 +# define BIO_C_GET_MD_CTX 120 +/* # define BIO_C_GET_PROXY_PARAM 121 */ +# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ +# define BIO_C_GET_CONNECT 123 +# define BIO_C_GET_ACCEPT 124 +# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 +# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 +# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 +# define BIO_C_FILE_SEEK 128 +# define BIO_C_GET_CIPHER_CTX 129 +# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input + * value */ +# define BIO_C_SET_BIND_MODE 131 +# define BIO_C_GET_BIND_MODE 132 +# define BIO_C_FILE_TELL 133 +# define BIO_C_GET_SOCKS 134 +# define BIO_C_SET_SOCKS 135 + +# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ +# define BIO_C_GET_WRITE_BUF_SIZE 137 +# define BIO_C_MAKE_BIO_PAIR 138 +# define BIO_C_DESTROY_BIO_PAIR 139 +# define BIO_C_GET_WRITE_GUARANTEE 140 +# define BIO_C_GET_READ_REQUEST 141 +# define BIO_C_SHUTDOWN_WR 142 +# define BIO_C_NREAD0 143 +# define BIO_C_NREAD 144 +# define BIO_C_NWRITE0 145 +# define BIO_C_NWRITE 146 +# define BIO_C_RESET_READ_REQUEST 147 +# define BIO_C_SET_MD_CTX 148 + +# define BIO_C_SET_PREFIX 149 +# define BIO_C_GET_PREFIX 150 +# define BIO_C_SET_SUFFIX 151 +# define BIO_C_GET_SUFFIX 152 + +# define BIO_C_SET_EX_ARG 153 +# define BIO_C_GET_EX_ARG 154 + +# define BIO_C_SET_CONNECT_MODE 155 + +# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) +# define BIO_get_app_data(s) BIO_get_ex_data(s,0) + +# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +# ifndef OPENSSL_NO_SOCK +/* IP families we support, for BIO_s_connect() and BIO_s_accept() */ +/* Note: the underlying operating system may not support some of them */ +# define BIO_FAMILY_IPV4 4 +# define BIO_FAMILY_IPV6 6 +# define BIO_FAMILY_IPANY 256 + +/* BIO_s_connect() */ +# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0, \ + (char *)(name)) +# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1, \ + (char *)(port)) +# define BIO_set_conn_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2, \ + (char *)(addr)) +# define BIO_set_conn_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f) +# define BIO_get_conn_hostname(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)) +# define BIO_get_conn_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)) +# define BIO_get_conn_address(b) ((const BIO_ADDR *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)) +# define BIO_get_conn_ip_family(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) +# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) + +/* BIO_s_accept() */ +# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \ + (char *)(name)) +# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1, \ + (char *)(port)) +# define BIO_get_accept_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)) +# define BIO_get_accept_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1)) +# define BIO_get_peer_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2)) +# define BIO_get_peer_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3)) +/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ +# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(n)?(void *)"a":NULL) +# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3, \ + (char *)(bio)) +# define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f) +# define BIO_get_accept_ip_family(b) BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL) + +/* Aliases kept for backward compatibility */ +# define BIO_BIND_NORMAL 0 +# define BIO_BIND_REUSEADDR BIO_SOCK_REUSEADDR +# define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR +# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) +# define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) +# endif /* OPENSSL_NO_SOCK */ + +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) + +# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ +# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) +# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)(c)) + +/* BIO_s_file() */ +# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)(fp)) +# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)(fpp)) + +/* BIO_s_fd() and BIO_s_file() */ +# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) +# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) + +/* + * name is cast to lose const, but might be better to route through a + * function so we can do it safely + */ +# ifdef CONST_STRICT +/* + * If you are wondering why this isn't defined, its because CONST_STRICT is + * purely a compile-time kludge to allow const to be checked. + */ +int BIO_read_filename(BIO *b, const char *name); +# else +# define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ,(char *)(name)) +# endif +# define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_WRITE,name) +# define BIO_append_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_APPEND,name) +# define BIO_rw_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) + +/* + * WARNING WARNING, this ups the reference count on the read bio of the SSL + * structure. This is because the ssl read BIO is now pointed to by the + * next_bio field in the bio. So when you free the BIO, make sure you are + * doing a BIO_free_all() to catch the underlying BIO. + */ +# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)(ssl)) +# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)(sslp)) +# define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) +# define BIO_set_ssl_renegotiate_bytes(b,num) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) +# define BIO_get_num_renegotiates(b) \ + BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) +# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) + +/* defined in evp.h */ +/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)(md)) */ + +# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)(pp)) +# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)(bm)) +# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0, \ + (char *)(pp)) +# define BIO_set_mem_eof_return(b,v) \ + BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) + +/* For the BIO_f_buffer() type */ +# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) +# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) +# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) +# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) +# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) + +/* Don't use the next one unless you know what you are doing :-) */ +# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) + +# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) +# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) +# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) +# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) +# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) +# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) +/* ...pending macros have inappropriate return type */ +size_t BIO_ctrl_pending(BIO *b); +size_t BIO_ctrl_wpending(BIO *b); +# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) +# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ + cbp) +# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) + +/* For the BIO_f_buffer() type */ +# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) +# define BIO_buffer_peek(b,s,l) BIO_ctrl(b,BIO_CTRL_PEEK,(l),(s)) + +/* For BIO_s_bio() */ +# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) +# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) +# define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) +# define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) +# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) +/* macros with inappropriate type -- but ...pending macros use int too: */ +# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) +# define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) +size_t BIO_ctrl_get_write_guarantee(BIO *b); +size_t BIO_ctrl_get_read_request(BIO *b); +int BIO_ctrl_reset_read_request(BIO *b); + +/* ctrl macros for dgram */ +# define BIO_ctrl_dgram_connect(b,peer) \ + (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)(peer)) +# define BIO_ctrl_set_connected(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (char *)(peer)) +# define BIO_dgram_recv_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) +# define BIO_dgram_send_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) +# define BIO_dgram_get_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)(peer)) +# define BIO_dgram_set_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)(peer)) +# define BIO_dgram_get_mtu_overhead(b) \ + (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) + +/* ctrl macros for BIO_f_prefix */ +# define BIO_set_prefix(b,p) BIO_ctrl((b), BIO_CTRL_SET_PREFIX, 0, (void *)(p)) +# define BIO_set_indent(b,i) BIO_ctrl((b), BIO_CTRL_SET_INDENT, (i), NULL) +# define BIO_get_indent(b) BIO_ctrl((b), BIO_CTRL_GET_INDENT, 0, NULL) + +#define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) +int BIO_set_ex_data(BIO *bio, int idx, void *data); +void *BIO_get_ex_data(const BIO *bio, int idx); +uint64_t BIO_number_read(BIO *bio); +uint64_t BIO_number_written(BIO *bio); + +/* For BIO_f_asn1() */ +int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, + asn1_ps_func *prefix_free); +int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, + asn1_ps_func **pprefix_free); +int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, + asn1_ps_func *suffix_free); +int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, + asn1_ps_func **psuffix_free); + +const BIO_METHOD *BIO_s_file(void); +BIO *BIO_new_file(const char *filename, const char *mode); +BIO *BIO_new_from_core_bio(OSSL_LIB_CTX *libctx, OSSL_CORE_BIO *corebio); +# ifndef OPENSSL_NO_STDIO +BIO *BIO_new_fp(FILE *stream, int close_flag); +# endif +BIO *BIO_new_ex(OSSL_LIB_CTX *libctx, const BIO_METHOD *method); +BIO *BIO_new(const BIO_METHOD *type); +int BIO_free(BIO *a); +void BIO_set_data(BIO *a, void *ptr); +void *BIO_get_data(BIO *a); +void BIO_set_init(BIO *a, int init); +int BIO_get_init(BIO *a); +void BIO_set_shutdown(BIO *a, int shut); +int BIO_get_shutdown(BIO *a); +void BIO_vfree(BIO *a); +int BIO_up_ref(BIO *a); +int BIO_read(BIO *b, void *data, int dlen); +int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); +int BIO_gets(BIO *bp, char *buf, int size); +int BIO_get_line(BIO *bio, char *buf, int size); +int BIO_write(BIO *b, const void *data, int dlen); +int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); +int BIO_puts(BIO *bp, const char *buf); +int BIO_indent(BIO *b, int indent, int max); +long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); +long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); +void *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); +long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); +BIO *BIO_push(BIO *b, BIO *append); +BIO *BIO_pop(BIO *b); +void BIO_free_all(BIO *a); +BIO *BIO_find_type(BIO *b, int bio_type); +BIO *BIO_next(BIO *b); +void BIO_set_next(BIO *b, BIO *next); +BIO *BIO_get_retry_BIO(BIO *bio, int *reason); +int BIO_get_retry_reason(BIO *bio); +void BIO_set_retry_reason(BIO *bio, int reason); +BIO *BIO_dup_chain(BIO *in); + +int BIO_nread0(BIO *bio, char **buf); +int BIO_nread(BIO *bio, char **buf, int num); +int BIO_nwrite0(BIO *bio, char **buf); +int BIO_nwrite(BIO *bio, char **buf, int num); + +const BIO_METHOD *BIO_s_mem(void); +const BIO_METHOD *BIO_s_secmem(void); +BIO *BIO_new_mem_buf(const void *buf, int len); +# ifndef OPENSSL_NO_SOCK +const BIO_METHOD *BIO_s_socket(void); +const BIO_METHOD *BIO_s_connect(void); +const BIO_METHOD *BIO_s_accept(void); +# endif +const BIO_METHOD *BIO_s_fd(void); +const BIO_METHOD *BIO_s_log(void); +const BIO_METHOD *BIO_s_bio(void); +const BIO_METHOD *BIO_s_null(void); +const BIO_METHOD *BIO_f_null(void); +const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_readbuffer(void); +const BIO_METHOD *BIO_f_linebuffer(void); +const BIO_METHOD *BIO_f_nbio_test(void); +const BIO_METHOD *BIO_f_prefix(void); +const BIO_METHOD *BIO_s_core(void); +# ifndef OPENSSL_NO_DGRAM +const BIO_METHOD *BIO_s_datagram(void); +int BIO_dgram_non_fatal_error(int error); +BIO *BIO_new_dgram(int fd, int close_flag); +# ifndef OPENSSL_NO_SCTP +const BIO_METHOD *BIO_s_datagram_sctp(void); +BIO *BIO_new_dgram_sctp(int fd, int close_flag); +int BIO_dgram_is_sctp(BIO *bio); +int BIO_dgram_sctp_notification_cb(BIO *b, + BIO_dgram_sctp_notification_handler_fn handle_notifications, + void *context); +int BIO_dgram_sctp_wait_for_dry(BIO *b); +int BIO_dgram_sctp_msg_waiting(BIO *b); +# endif +# endif + +# ifndef OPENSSL_NO_SOCK +int BIO_sock_should_retry(int i); +int BIO_sock_non_fatal_error(int error); +int BIO_socket_wait(int fd, int for_read, time_t max_time); +# endif +int BIO_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds); +int BIO_do_connect_retry(BIO *bio, int timeout, int nap_milliseconds); + +int BIO_fd_should_retry(int i); +int BIO_fd_non_fatal_error(int error); +int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const void *s, int len); +int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const void *s, int len, int indent); +int BIO_dump(BIO *b, const void *bytes, int len); +int BIO_dump_indent(BIO *b, const void *bytes, int len, int indent); +# ifndef OPENSSL_NO_STDIO +int BIO_dump_fp(FILE *fp, const void *s, int len); +int BIO_dump_indent_fp(FILE *fp, const void *s, int len, int indent); +# endif +int BIO_hex_string(BIO *out, int indent, int width, const void *data, + int datalen); + +# ifndef OPENSSL_NO_SOCK +BIO_ADDR *BIO_ADDR_new(void); +int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, + const void *where, size_t wherelen, unsigned short port); +void BIO_ADDR_free(BIO_ADDR *); +void BIO_ADDR_clear(BIO_ADDR *ap); +int BIO_ADDR_family(const BIO_ADDR *ap); +int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); +unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); +char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_path_string(const BIO_ADDR *ap); + +const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai); +const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai); +void BIO_ADDRINFO_free(BIO_ADDRINFO *bai); + +enum BIO_hostserv_priorities { + BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV +}; +int BIO_parse_hostserv(const char *hostserv, char **host, char **service, + enum BIO_hostserv_priorities hostserv_prio); +enum BIO_lookup_type { + BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER +}; +int BIO_lookup(const char *host, const char *service, + enum BIO_lookup_type lookup_type, + int family, int socktype, BIO_ADDRINFO **res); +int BIO_lookup_ex(const char *host, const char *service, + int lookup_type, int family, int socktype, int protocol, + BIO_ADDRINFO **res); +int BIO_sock_error(int sock); +int BIO_socket_ioctl(int fd, long type, void *arg); +int BIO_socket_nbio(int fd, int mode); +int BIO_sock_init(void); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define BIO_sock_cleanup() while(0) continue +# endif +int BIO_set_tcp_ndelay(int sock, int turn_on); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 struct hostent *BIO_gethostbyname(const char *name); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_port(const char *str, unsigned short *port_ptr); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_host_ip(const char *str, unsigned char *ip); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_accept_socket(char *host_port, int mode); +OSSL_DEPRECATEDIN_1_1_0 int BIO_accept(int sock, char **ip_port); +# endif + +union BIO_sock_info_u { + BIO_ADDR *addr; +}; +enum BIO_sock_info_type { + BIO_SOCK_INFO_ADDRESS +}; +int BIO_sock_info(int sock, + enum BIO_sock_info_type type, union BIO_sock_info_u *info); + +# define BIO_SOCK_REUSEADDR 0x01 +# define BIO_SOCK_V6_ONLY 0x02 +# define BIO_SOCK_KEEPALIVE 0x04 +# define BIO_SOCK_NONBLOCK 0x08 +# define BIO_SOCK_NODELAY 0x10 + +int BIO_socket(int domain, int socktype, int protocol, int options); +int BIO_connect(int sock, const BIO_ADDR *addr, int options); +int BIO_bind(int sock, const BIO_ADDR *addr, int options); +int BIO_listen(int sock, const BIO_ADDR *addr, int options); +int BIO_accept_ex(int accept_sock, BIO_ADDR *addr, int options); +int BIO_closesocket(int sock); + +BIO *BIO_new_socket(int sock, int close_flag); +BIO *BIO_new_connect(const char *host_port); +BIO *BIO_new_accept(const char *host_port); +# endif /* OPENSSL_NO_SOCK*/ + +BIO *BIO_new_fd(int fd, int close_flag); + +int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, + BIO **bio2, size_t writebuf2); +/* + * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. + * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default + * value. + */ + +void BIO_copy_next_retry(BIO *b); + +/* + * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); + */ + +# define ossl_bio__attr__(x) +# if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__MINGW32__) && !defined(__MINGW64__) \ + && !defined(__APPLE__) + /* + * Because we support the 'z' modifier, which made its appearance in C99, + * we can't use __attribute__ with pre C99 dialects. + */ +# if __STDC_VERSION__ >= 199901L +# undef ossl_bio__attr__ +# define ossl_bio__attr__ __attribute__ +# if __GNUC__*10 + __GNUC_MINOR__ >= 44 +# define ossl_bio__printf__ __gnu_printf__ +# else +# define ossl_bio__printf__ __printf__ +# endif +# endif +# endif +int BIO_printf(BIO *bio, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 3))); +int BIO_vprintf(BIO *bio, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 0))); +int BIO_snprintf(char *buf, size_t n, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 4))); +int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 0))); +# undef ossl_bio__attr__ +# undef ossl_bio__printf__ + + +BIO_METHOD *BIO_meth_new(int type, const char *name); +void BIO_meth_free(BIO_METHOD *biom); +int (*BIO_meth_get_write(const BIO_METHOD *biom)) (BIO *, const char *, int); +int (*BIO_meth_get_write_ex(const BIO_METHOD *biom)) (BIO *, const char *, size_t, + size_t *); +int BIO_meth_set_write(BIO_METHOD *biom, + int (*write) (BIO *, const char *, int)); +int BIO_meth_set_write_ex(BIO_METHOD *biom, + int (*bwrite) (BIO *, const char *, size_t, size_t *)); +int (*BIO_meth_get_read(const BIO_METHOD *biom)) (BIO *, char *, int); +int (*BIO_meth_get_read_ex(const BIO_METHOD *biom)) (BIO *, char *, size_t, size_t *); +int BIO_meth_set_read(BIO_METHOD *biom, + int (*read) (BIO *, char *, int)); +int BIO_meth_set_read_ex(BIO_METHOD *biom, + int (*bread) (BIO *, char *, size_t, size_t *)); +int (*BIO_meth_get_puts(const BIO_METHOD *biom)) (BIO *, const char *); +int BIO_meth_set_puts(BIO_METHOD *biom, + int (*puts) (BIO *, const char *)); +int (*BIO_meth_get_gets(const BIO_METHOD *biom)) (BIO *, char *, int); +int BIO_meth_set_gets(BIO_METHOD *biom, + int (*gets) (BIO *, char *, int)); +long (*BIO_meth_get_ctrl(const BIO_METHOD *biom)) (BIO *, int, long, void *); +int BIO_meth_set_ctrl(BIO_METHOD *biom, + long (*ctrl) (BIO *, int, long, void *)); +int (*BIO_meth_get_create(const BIO_METHOD *bion)) (BIO *); +int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); +int (*BIO_meth_get_destroy(const BIO_METHOD *biom)) (BIO *); +int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); +long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom)) + (BIO *, int, BIO_info_cb *); +int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, + long (*callback_ctrl) (BIO *, int, + BIO_info_cb *)); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/bioerr.h b/deps/openssl/android/x86/usr/local/include/openssl/bioerr.h index 46e2c96e..787b30af 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/bioerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/bioerr.h @@ -1,84 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BIOERR_H -# define HEADER_BIOERR_H +#ifndef OPENSSL_BIOERR_H +# define OPENSSL_BIOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BIO_strings(void); -/* - * BIO function codes. - */ -# define BIO_F_ACPT_STATE 100 -# define BIO_F_ADDRINFO_WRAP 148 -# define BIO_F_ADDR_STRINGS 134 -# define BIO_F_BIO_ACCEPT 101 -# define BIO_F_BIO_ACCEPT_EX 137 -# define BIO_F_BIO_ACCEPT_NEW 152 -# define BIO_F_BIO_ADDR_NEW 144 -# define BIO_F_BIO_BIND 147 -# define BIO_F_BIO_CALLBACK_CTRL 131 -# define BIO_F_BIO_CONNECT 138 -# define BIO_F_BIO_CONNECT_NEW 153 -# define BIO_F_BIO_CTRL 103 -# define BIO_F_BIO_GETS 104 -# define BIO_F_BIO_GET_HOST_IP 106 -# define BIO_F_BIO_GET_NEW_INDEX 102 -# define BIO_F_BIO_GET_PORT 107 -# define BIO_F_BIO_LISTEN 139 -# define BIO_F_BIO_LOOKUP 135 -# define BIO_F_BIO_LOOKUP_EX 143 -# define BIO_F_BIO_MAKE_PAIR 121 -# define BIO_F_BIO_METH_NEW 146 -# define BIO_F_BIO_NEW 108 -# define BIO_F_BIO_NEW_DGRAM_SCTP 145 -# define BIO_F_BIO_NEW_FILE 109 -# define BIO_F_BIO_NEW_MEM_BUF 126 -# define BIO_F_BIO_NREAD 123 -# define BIO_F_BIO_NREAD0 124 -# define BIO_F_BIO_NWRITE 125 -# define BIO_F_BIO_NWRITE0 122 -# define BIO_F_BIO_PARSE_HOSTSERV 136 -# define BIO_F_BIO_PUTS 110 -# define BIO_F_BIO_READ 111 -# define BIO_F_BIO_READ_EX 105 -# define BIO_F_BIO_READ_INTERN 120 -# define BIO_F_BIO_SOCKET 140 -# define BIO_F_BIO_SOCKET_NBIO 142 -# define BIO_F_BIO_SOCK_INFO 141 -# define BIO_F_BIO_SOCK_INIT 112 -# define BIO_F_BIO_WRITE 113 -# define BIO_F_BIO_WRITE_EX 119 -# define BIO_F_BIO_WRITE_INTERN 128 -# define BIO_F_BUFFER_CTRL 114 -# define BIO_F_CONN_CTRL 127 -# define BIO_F_CONN_STATE 115 -# define BIO_F_DGRAM_SCTP_NEW 149 -# define BIO_F_DGRAM_SCTP_READ 132 -# define BIO_F_DGRAM_SCTP_WRITE 133 -# define BIO_F_DOAPR_OUTCH 150 -# define BIO_F_FILE_CTRL 116 -# define BIO_F_FILE_READ 130 -# define BIO_F_LINEBUFFER_CTRL 129 -# define BIO_F_LINEBUFFER_NEW 151 -# define BIO_F_MEM_WRITE 117 -# define BIO_F_NBIOF_NEW 154 -# define BIO_F_SLG_WRITE 155 -# define BIO_F_SSL_NEW 118 /* * BIO reason codes. @@ -89,6 +27,7 @@ int ERR_load_BIO_strings(void); # define BIO_R_BAD_FOPEN_MODE 101 # define BIO_R_BROKEN_PIPE 124 # define BIO_R_CONNECT_ERROR 103 +# define BIO_R_CONNECT_TIMEOUT 147 # define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 # define BIO_R_GETSOCKNAME_ERROR 132 # define BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS 133 @@ -105,7 +44,9 @@ int ERR_load_BIO_strings(void); # define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 # define BIO_R_NO_PORT_DEFINED 113 # define BIO_R_NO_SUCH_FILE 128 -# define BIO_R_NULL_PARAMETER 115 +# define BIO_R_NULL_PARAMETER 115 /* unused */ +# define BIO_R_TRANSFER_ERROR 104 +# define BIO_R_TRANSFER_TIMEOUT 105 # define BIO_R_UNABLE_TO_BIND_SOCKET 117 # define BIO_R_UNABLE_TO_CREATE_SOCKET 118 # define BIO_R_UNABLE_TO_KEEPALIVE 137 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/blowfish.h b/deps/openssl/android/x86/usr/local/include/openssl/blowfish.h index cd3e460e..667d6423 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/blowfish.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/blowfish.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BLOWFISH_H -# define HEADER_BLOWFISH_H +#ifndef OPENSSL_BLOWFISH_H +# define OPENSSL_BLOWFISH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BLOWFISH_H +# endif # include @@ -18,40 +24,51 @@ extern "C" { # endif -# define BF_ENCRYPT 1 -# define BF_DECRYPT 0 +# define BF_BLOCK 8 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define BF_ENCRYPT 1 +# define BF_DECRYPT 0 /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! BF_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define BF_LONG unsigned int +# define BF_LONG unsigned int -# define BF_ROUNDS 16 -# define BF_BLOCK 8 +# define BF_ROUNDS 16 typedef struct bf_key_st { BF_LONG P[BF_ROUNDS + 2]; BF_LONG S[4 * 256]; } BF_KEY; -void BF_set_key(BF_KEY *key, int len, const unsigned char *data); - -void BF_encrypt(BF_LONG *data, const BF_KEY *key); -void BF_decrypt(BF_LONG *data, const BF_KEY *key); - -void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, - const BF_KEY *key, int enc); -void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - const BF_KEY *schedule, unsigned char *ivec, int enc); -void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num); -const char *BF_options(void); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void BF_set_key(BF_KEY *key, int len, + const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void BF_encrypt(BF_LONG *data, const BF_KEY *key); +OSSL_DEPRECATEDIN_3_0 void BF_decrypt(BF_LONG *data, const BF_KEY *key); +OSSL_DEPRECATEDIN_3_0 void BF_ecb_encrypt(const unsigned char *in, + unsigned char *out, const BF_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void BF_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + const BF_KEY *schedule, + unsigned char *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void BF_cfb64_encrypt(const unsigned char *in, + unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void BF_ofb64_encrypt(const unsigned char *in, + unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num); +OSSL_DEPRECATEDIN_3_0 const char *BF_options(void); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/bn.h b/deps/openssl/android/x86/usr/local/include/openssl/bn.h index d8776604..27b127a5 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/bn.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/bn.h @@ -1,22 +1,28 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BN_H -# define HEADER_BN_H +#ifndef OPENSSL_BN_H +# define OPENSSL_BN_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BN_H +# endif # include # ifndef OPENSSL_NO_STDIO # include # endif # include -# include +# include # include # include @@ -61,7 +67,7 @@ extern "C" { # define BN_FLG_CONSTTIME 0x04 # define BN_FLG_SECURE 0x08 -# if OPENSSL_API_COMPAT < 0x00908000L +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 /* deprecated name for the flag */ # define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME # define BN_FLG_FREE 0x8000 /* used for debugging */ @@ -103,8 +109,9 @@ void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), void *BN_GENCB_get_arg(BN_GENCB *cb); -# define BN_prime_checks 0 /* default: select number of iterations based - * on the size of the number */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define BN_prime_checks 0 /* default: select number of iterations based + * on the size of the number */ /* * BN_prime_checks_for_size() returns the number of Miller-Rabin iterations @@ -169,14 +176,15 @@ void *BN_GENCB_get_arg(BN_GENCB *cb); * (b) >= 6 | >= 12 | 34 | 64 bit */ -# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ - (b) >= 1345 ? 4 : \ - (b) >= 476 ? 5 : \ - (b) >= 400 ? 6 : \ - (b) >= 347 ? 7 : \ - (b) >= 308 ? 8 : \ - (b) >= 55 ? 27 : \ - /* b >= 6 */ 34) +# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ + (b) >= 1345 ? 4 : \ + (b) >= 476 ? 5 : \ + (b) >= 400 ? 6 : \ + (b) >= 347 ? 7 : \ + (b) >= 308 ? 8 : \ + (b) >= 55 ? 27 : \ + /* b >= 6 */ 34) +# endif # define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) @@ -190,7 +198,7 @@ int BN_is_odd(const BIGNUM *a); void BN_zero_ex(BIGNUM *a); -# if OPENSSL_API_COMPAT >= 0x00908000L +# if OPENSSL_API_LEVEL > 908 # define BN_zero(a) BN_zero_ex(a) # else # define BN_zero(a) (BN_set_word((a),0)) @@ -198,18 +206,32 @@ void BN_zero_ex(BIGNUM *a); const BIGNUM *BN_value_one(void); char *BN_options(void); +BN_CTX *BN_CTX_new_ex(OSSL_LIB_CTX *ctx); BN_CTX *BN_CTX_new(void); +BN_CTX *BN_CTX_secure_new_ex(OSSL_LIB_CTX *ctx); BN_CTX *BN_CTX_secure_new(void); void BN_CTX_free(BN_CTX *c); void BN_CTX_start(BN_CTX *ctx); BIGNUM *BN_CTX_get(BN_CTX *ctx); void BN_CTX_end(BN_CTX *ctx); +int BN_rand_ex(BIGNUM *rnd, int bits, int top, int bottom, + unsigned int strength, BN_CTX *ctx); int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_priv_rand_ex(BIGNUM *rnd, int bits, int top, int bottom, + unsigned int strength, BN_CTX *ctx); int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_rand_range_ex(BIGNUM *r, const BIGNUM *range, unsigned int strength, + BN_CTX *ctx); int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_priv_rand_range_ex(BIGNUM *r, const BIGNUM *range, + unsigned int strength, BN_CTX *ctx); int BN_priv_rand_range(BIGNUM *rnd, const BIGNUM *range); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); +OSSL_DEPRECATEDIN_3_0 int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); +# endif int BN_num_bits(const BIGNUM *a); int BN_num_bits_word(BN_ULONG l); int BN_security_bits(int L, int N); @@ -223,6 +245,8 @@ int BN_bn2bin(const BIGNUM *a, unsigned char *to); int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_native2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2nativepad(const BIGNUM *a, unsigned char *to, int tolen); BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); int BN_bn2mpi(const BIGNUM *a, unsigned char *to); int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); @@ -292,6 +316,11 @@ int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, BN_CTX *ctx, BN_MONT_CTX *m_ctx); int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_exp_mont_consttime_x2(BIGNUM *rr1, const BIGNUM *a1, const BIGNUM *p1, + const BIGNUM *m1, BN_MONT_CTX *in_mont1, + BIGNUM *rr2, const BIGNUM *a2, const BIGNUM *p2, + const BIGNUM *m2, BN_MONT_CTX *in_mont2, + BN_CTX *ctx); int BN_mask_bits(BIGNUM *a, int n); # ifndef OPENSSL_NO_STDIO @@ -315,6 +344,7 @@ int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns * -2 for * error */ +int BN_are_coprime(BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); BIGNUM *BN_mod_inverse(BIGNUM *ret, const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); BIGNUM *BN_mod_sqrt(BIGNUM *ret, @@ -323,38 +353,51 @@ BIGNUM *BN_mod_sqrt(BIGNUM *ret, void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); /* Deprecated versions */ -DEPRECATEDIN_0_9_8(BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, - const BIGNUM *add, - const BIGNUM *rem, - void (*callback) (int, int, - void *), - void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime_fasttest(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg, - int do_trial_division)) - -/* Newer versions */ -int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, - const BIGNUM *rem, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 +BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, const BIGNUM *rem, + void (*callback) (int, int, void *), + void *cb_arg); +OSSL_DEPRECATEDIN_0_9_8 +int BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg); +OSSL_DEPRECATEDIN_0_9_8 +int BN_is_prime_fasttest(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg, + int do_trial_division); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, int do_trial_division, BN_GENCB *cb); +# endif +/* Newer versions */ +int BN_generate_prime_ex2(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb, + BN_CTX *ctx); +int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, + const BIGNUM *rem, BN_GENCB *cb); +int BN_check_prime(const BIGNUM *p, BN_CTX *ctx, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, const BIGNUM *Xp, const BIGNUM *Xp1, const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb); +# endif BN_MONT_CTX *BN_MONT_CTX_new(void); int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, @@ -398,10 +441,12 @@ BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, BN_CTX *ctx, BN_MONT_CTX *m_ctx), BN_MONT_CTX *m_ctx); - -DEPRECATEDIN_0_9_8(void BN_set_params(int mul, int high, int low, int mont)) -DEPRECATEDIN_0_9_8(int BN_get_params(int which)) /* 0, mul, 1 high, 2 low, 3 - * mont */ +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 +void BN_set_params(int mul, int high, int low, int mont); +OSSL_DEPRECATEDIN_0_9_8 +int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */ +# endif BN_RECP_CTX *BN_RECP_CTX_new(void); void BN_RECP_CTX_free(BN_RECP_CTX *recp); @@ -519,16 +564,16 @@ BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); -# if OPENSSL_API_COMPAT < 0x10100000L -# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 -# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 -# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 -# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 -# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 -# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 -# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 -# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 -# endif +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 +# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 +# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 +# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 +# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 +# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 +# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 +# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 +# endif int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/bnerr.h b/deps/openssl/android/x86/usr/local/include/openssl/bnerr.h index 5c83777f..7c3f6ef3 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/bnerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/bnerr.h @@ -1,78 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BNERR_H -# define HEADER_BNERR_H +#ifndef OPENSSL_BNERR_H +# define OPENSSL_BNERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BN_strings(void); -/* - * BN function codes. - */ -# define BN_F_BNRAND 127 -# define BN_F_BNRAND_RANGE 138 -# define BN_F_BN_BLINDING_CONVERT_EX 100 -# define BN_F_BN_BLINDING_CREATE_PARAM 128 -# define BN_F_BN_BLINDING_INVERT_EX 101 -# define BN_F_BN_BLINDING_NEW 102 -# define BN_F_BN_BLINDING_UPDATE 103 -# define BN_F_BN_BN2DEC 104 -# define BN_F_BN_BN2HEX 105 -# define BN_F_BN_COMPUTE_WNAF 142 -# define BN_F_BN_CTX_GET 116 -# define BN_F_BN_CTX_NEW 106 -# define BN_F_BN_CTX_START 129 -# define BN_F_BN_DIV 107 -# define BN_F_BN_DIV_RECP 130 -# define BN_F_BN_EXP 123 -# define BN_F_BN_EXPAND_INTERNAL 120 -# define BN_F_BN_GENCB_NEW 143 -# define BN_F_BN_GENERATE_DSA_NONCE 140 -# define BN_F_BN_GENERATE_PRIME_EX 141 -# define BN_F_BN_GF2M_MOD 131 -# define BN_F_BN_GF2M_MOD_EXP 132 -# define BN_F_BN_GF2M_MOD_MUL 133 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 -# define BN_F_BN_GF2M_MOD_SQR 136 -# define BN_F_BN_GF2M_MOD_SQRT 137 -# define BN_F_BN_LSHIFT 145 -# define BN_F_BN_MOD_EXP2_MONT 118 -# define BN_F_BN_MOD_EXP_MONT 109 -# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 -# define BN_F_BN_MOD_EXP_MONT_WORD 117 -# define BN_F_BN_MOD_EXP_RECP 125 -# define BN_F_BN_MOD_EXP_SIMPLE 126 -# define BN_F_BN_MOD_INVERSE 110 -# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 -# define BN_F_BN_MOD_LSHIFT_QUICK 119 -# define BN_F_BN_MOD_SQRT 121 -# define BN_F_BN_MONT_CTX_NEW 149 -# define BN_F_BN_MPI2BN 112 -# define BN_F_BN_NEW 113 -# define BN_F_BN_POOL_GET 147 -# define BN_F_BN_RAND 114 -# define BN_F_BN_RAND_RANGE 122 -# define BN_F_BN_RECP_CTX_NEW 150 -# define BN_F_BN_RSHIFT 146 -# define BN_F_BN_SET_WORDS 144 -# define BN_F_BN_STACK_PUSH 148 -# define BN_F_BN_USUB 115 -# define BN_F_OSSL_BN_RSA_DO_UNBLIND 151 /* * BN reason codes. @@ -92,7 +36,9 @@ int ERR_load_BN_strings(void); # define BN_R_NOT_A_SQUARE 111 # define BN_R_NOT_INITIALIZED 107 # define BN_R_NO_INVERSE 108 +# define BN_R_NO_PRIME_CANDIDATE 121 # define BN_R_NO_SOLUTION 116 +# define BN_R_NO_SUITABLE_DIGEST 120 # define BN_R_PRIVATE_KEY_TOO_LARGE 117 # define BN_R_P_IS_NOT_PRIME 112 # define BN_R_TOO_MANY_ITERATIONS 113 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/buffer.h b/deps/openssl/android/x86/usr/local/include/openssl/buffer.h index d2765766..5773b986 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/buffer.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/buffer.h @@ -1,17 +1,23 @@ /* * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BUFFER_H -# define HEADER_BUFFER_H +#ifndef OPENSSL_BUFFER_H +# define OPENSSL_BUFFER_H +# pragma once -# include -# ifndef HEADER_CRYPTO_H +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BUFFER_H +# endif + +# include +# ifndef OPENSSL_CRYPTO_H # include # endif # include @@ -24,16 +30,14 @@ extern "C" { # include # include -/* - * These names are outdated as of OpenSSL 1.1; a future release - * will move them to be deprecated. - */ -# define BUF_strdup(s) OPENSSL_strdup(s) -# define BUF_strndup(s, size) OPENSSL_strndup(s, size) -# define BUF_memdup(data, size) OPENSSL_memdup(data, size) -# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) -# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) -# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define BUF_strdup(s) OPENSSL_strdup(s) +# define BUF_strndup(s, size) OPENSSL_strndup(s, size) +# define BUF_memdup(data, size) OPENSSL_memdup(data, size) +# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) +# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) +# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) +# endif struct buf_mem_st { size_t length; /* current number of bytes */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/buffererr.h b/deps/openssl/android/x86/usr/local/include/openssl/buffererr.h index 04f6ff7a..d18b1f8f 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/buffererr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/buffererr.h @@ -1,31 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BUFERR_H -# define HEADER_BUFERR_H +#ifndef OPENSSL_BUFFERERR_H +# define OPENSSL_BUFFERERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BUF_strings(void); -/* - * BUF function codes. - */ -# define BUF_F_BUF_MEM_GROW 100 -# define BUF_F_BUF_MEM_GROW_CLEAN 105 -# define BUF_F_BUF_MEM_NEW 101 /* * BUF reason codes. diff --git a/deps/openssl/android/x86/usr/local/include/openssl/camellia.h b/deps/openssl/android/x86/usr/local/include/openssl/camellia.h index 151f3c13..88c2279e 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/camellia.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/camellia.h @@ -1,14 +1,20 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CAMELLIA_H -# define HEADER_CAMELLIA_H +#ifndef OPENSSL_CAMELLIA_H +# define OPENSSL_CAMELLIA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CAMELLIA_H +# endif # include @@ -18,8 +24,12 @@ extern "C" { #endif -# define CAMELLIA_ENCRYPT 1 -# define CAMELLIA_DECRYPT 0 +# define CAMELLIA_BLOCK_SIZE 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define CAMELLIA_ENCRYPT 1 +# define CAMELLIA_DECRYPT 0 /* * Because array size can't be a const in C, the following two are macros. @@ -28,9 +38,8 @@ extern "C" { /* This should be a hidden type, but EVP requires that the size be known */ -# define CAMELLIA_BLOCK_SIZE 16 -# define CAMELLIA_TABLE_BYTE_LEN 272 -# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) +# define CAMELLIA_TABLE_BYTE_LEN 272 +# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match * with WORD */ @@ -44,36 +53,61 @@ struct camellia_key_st { }; typedef struct camellia_key_st CAMELLIA_KEY; -int Camellia_set_key(const unsigned char *userKey, const int bits, - CAMELLIA_KEY *key); - -void Camellia_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); -void Camellia_decrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); - -void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key, const int enc); -void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, const int enc); -void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int Camellia_set_key(const unsigned char *userKey, + const int bits, + CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_encrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_decrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_ecb_encrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb128_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb1_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb8_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_ofb128_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num); +OSSL_DEPRECATEDIN_3_0 void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const CAMELLIA_KEY *key, unsigned char ivec[CAMELLIA_BLOCK_SIZE], unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], unsigned int *num); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cast.h b/deps/openssl/android/x86/usr/local/include/openssl/cast.h index 2cc89ae0..0bf217be 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cast.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/cast.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CAST_H -# define HEADER_CAST_H +#ifndef OPENSSL_CAST_H +# define OPENSSL_CAST_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CAST_H +# endif # include @@ -17,33 +23,45 @@ extern "C" { # endif -# define CAST_ENCRYPT 1 -# define CAST_DECRYPT 0 - -# define CAST_LONG unsigned int - # define CAST_BLOCK 8 # define CAST_KEY_LENGTH 16 +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define CAST_ENCRYPT 1 +# define CAST_DECRYPT 0 + +# define CAST_LONG unsigned int + typedef struct cast_key_st { CAST_LONG data[32]; int short_key; /* Use reduced rounds for short key */ } CAST_KEY; +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, const CAST_KEY *key, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); +OSSL_DEPRECATEDIN_3_0 void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); +OSSL_DEPRECATEDIN_3_0 void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *ks, unsigned char *iv, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *schedule, unsigned char *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *schedule, unsigned char *ivec, int *num); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cmac.h b/deps/openssl/android/x86/usr/local/include/openssl/cmac.h index 3535a9ab..f5086183 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cmac.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/cmac.h @@ -1,41 +1,52 @@ /* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMAC_H -# define HEADER_CMAC_H +#ifndef OPENSSL_CMAC_H +# define OPENSSL_CMAC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMAC_H +# endif # ifndef OPENSSL_NO_CMAC -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -# include +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* Opaque */ typedef struct CMAC_CTX_st CMAC_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CMAC_CTX *CMAC_CTX_new(void); +OSSL_DEPRECATEDIN_3_0 void CMAC_CTX_cleanup(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void CMAC_CTX_free(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); +OSSL_DEPRECATEDIN_3_0 int CMAC_Init(CMAC_CTX *ctx, + const void *key, size_t keylen, + const EVP_CIPHER *cipher, ENGINE *impl); +OSSL_DEPRECATEDIN_3_0 int CMAC_Update(CMAC_CTX *ctx, + const void *data, size_t dlen); +OSSL_DEPRECATEDIN_3_0 int CMAC_Final(CMAC_CTX *ctx, + unsigned char *out, size_t *poutlen); +OSSL_DEPRECATEDIN_3_0 int CMAC_resume(CMAC_CTX *ctx); +# endif -CMAC_CTX *CMAC_CTX_new(void); -void CMAC_CTX_cleanup(CMAC_CTX *ctx); -void CMAC_CTX_free(CMAC_CTX *ctx); -EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); -int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); - -int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, - const EVP_CIPHER *cipher, ENGINE *impl); -int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); -int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); -int CMAC_resume(CMAC_CTX *ctx); - -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cmp.h b/deps/openssl/android/x86/usr/local/include/openssl/cmp.h new file mode 100644 index 00000000..49825570 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/cmp.h @@ -0,0 +1,597 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/cmp.h.in + * + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +#ifndef OPENSSL_CMP_H +# define OPENSSL_CMP_H + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include +# include +# include + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CMP_PVNO 2 + +/*- + * PKIFailureInfo ::= BIT STRING { + * -- since we can fail in more than one way! + * -- More codes may be added in the future if/when required. + * badAlg (0), + * -- unrecognized or unsupported Algorithm Identifier + * badMessageCheck (1), + * -- integrity check failed (e.g., signature did not verify) + * badRequest (2), + * -- transaction not permitted or supported + * badTime (3), + * -- messageTime was not sufficiently close to the system time, + * -- as defined by local policy + * badCertId (4), + * -- no certificate could be found matching the provided criteria + * badDataFormat (5), + * -- the data submitted has the wrong format + * wrongAuthority (6), + * -- the authority indicated in the request is different from the + * -- one creating the response token + * incorrectData (7), + * -- the requester's data is incorrect (for notary services) + * missingTimeStamp (8), + * -- when the timestamp is missing but should be there + * -- (by policy) + * badPOP (9), + * -- the proof-of-possession failed + * certRevoked (10), + * -- the certificate has already been revoked + * certConfirmed (11), + * -- the certificate has already been confirmed + * wrongIntegrity (12), + * -- invalid integrity, password based instead of signature or + * -- vice versa + * badRecipientNonce (13), + * -- invalid recipient nonce, either missing or wrong value + * timeNotAvailable (14), + * -- the TSA's time source is not available + * unacceptedPolicy (15), + * -- the requested TSA policy is not supported by the TSA. + * unacceptedExtension (16), + * -- the requested extension is not supported by the TSA. + * addInfoNotAvailable (17), + * -- the additional information requested could not be + * -- understood or is not available + * badSenderNonce (18), + * -- invalid sender nonce, either missing or wrong size + * badCertTemplate (19), + * -- invalid cert. template or missing mandatory information + * signerNotTrusted (20), + * -- signer of the message unknown or not trusted + * transactionIdInUse (21), + * -- the transaction identifier is already in use + * unsupportedVersion (22), + * -- the version of the message is not supported + * notAuthorized (23), + * -- the sender was not authorized to make the preceding + * -- request or perform the preceding action + * systemUnavail (24), + * -- the request cannot be handled due to system unavailability + * systemFailure (25), + * -- the request cannot be handled due to system failure + * duplicateCertReq (26) + * -- certificate cannot be issued because a duplicate + * -- certificate already exists + * } + */ +# define OSSL_CMP_PKIFAILUREINFO_badAlg 0 +# define OSSL_CMP_PKIFAILUREINFO_badMessageCheck 1 +# define OSSL_CMP_PKIFAILUREINFO_badRequest 2 +# define OSSL_CMP_PKIFAILUREINFO_badTime 3 +# define OSSL_CMP_PKIFAILUREINFO_badCertId 4 +# define OSSL_CMP_PKIFAILUREINFO_badDataFormat 5 +# define OSSL_CMP_PKIFAILUREINFO_wrongAuthority 6 +# define OSSL_CMP_PKIFAILUREINFO_incorrectData 7 +# define OSSL_CMP_PKIFAILUREINFO_missingTimeStamp 8 +# define OSSL_CMP_PKIFAILUREINFO_badPOP 9 +# define OSSL_CMP_PKIFAILUREINFO_certRevoked 10 +# define OSSL_CMP_PKIFAILUREINFO_certConfirmed 11 +# define OSSL_CMP_PKIFAILUREINFO_wrongIntegrity 12 +# define OSSL_CMP_PKIFAILUREINFO_badRecipientNonce 13 +# define OSSL_CMP_PKIFAILUREINFO_timeNotAvailable 14 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedPolicy 15 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedExtension 16 +# define OSSL_CMP_PKIFAILUREINFO_addInfoNotAvailable 17 +# define OSSL_CMP_PKIFAILUREINFO_badSenderNonce 18 +# define OSSL_CMP_PKIFAILUREINFO_badCertTemplate 19 +# define OSSL_CMP_PKIFAILUREINFO_signerNotTrusted 20 +# define OSSL_CMP_PKIFAILUREINFO_transactionIdInUse 21 +# define OSSL_CMP_PKIFAILUREINFO_unsupportedVersion 22 +# define OSSL_CMP_PKIFAILUREINFO_notAuthorized 23 +# define OSSL_CMP_PKIFAILUREINFO_systemUnavail 24 +# define OSSL_CMP_PKIFAILUREINFO_systemFailure 25 +# define OSSL_CMP_PKIFAILUREINFO_duplicateCertReq 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN \ + ((1 << (OSSL_CMP_PKIFAILUREINFO_MAX + 1)) - 1) +# if OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN > INT_MAX +# error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int +# endif + +typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; + +# define OSSL_CMP_CTX_FAILINFO_badAlg (1 << 0) +# define OSSL_CMP_CTX_FAILINFO_badMessageCheck (1 << 1) +# define OSSL_CMP_CTX_FAILINFO_badRequest (1 << 2) +# define OSSL_CMP_CTX_FAILINFO_badTime (1 << 3) +# define OSSL_CMP_CTX_FAILINFO_badCertId (1 << 4) +# define OSSL_CMP_CTX_FAILINFO_badDataFormat (1 << 5) +# define OSSL_CMP_CTX_FAILINFO_wrongAuthority (1 << 6) +# define OSSL_CMP_CTX_FAILINFO_incorrectData (1 << 7) +# define OSSL_CMP_CTX_FAILINFO_missingTimeStamp (1 << 8) +# define OSSL_CMP_CTX_FAILINFO_badPOP (1 << 9) +# define OSSL_CMP_CTX_FAILINFO_certRevoked (1 << 10) +# define OSSL_CMP_CTX_FAILINFO_certConfirmed (1 << 11) +# define OSSL_CMP_CTX_FAILINFO_wrongIntegrity (1 << 12) +# define OSSL_CMP_CTX_FAILINFO_badRecipientNonce (1 << 13) +# define OSSL_CMP_CTX_FAILINFO_timeNotAvailable (1 << 14) +# define OSSL_CMP_CTX_FAILINFO_unacceptedPolicy (1 << 15) +# define OSSL_CMP_CTX_FAILINFO_unacceptedExtension (1 << 16) +# define OSSL_CMP_CTX_FAILINFO_addInfoNotAvailable (1 << 17) +# define OSSL_CMP_CTX_FAILINFO_badSenderNonce (1 << 18) +# define OSSL_CMP_CTX_FAILINFO_badCertTemplate (1 << 19) +# define OSSL_CMP_CTX_FAILINFO_signerNotTrusted (1 << 20) +# define OSSL_CMP_CTX_FAILINFO_transactionIdInUse (1 << 21) +# define OSSL_CMP_CTX_FAILINFO_unsupportedVersion (1 << 22) +# define OSSL_CMP_CTX_FAILINFO_notAuthorized (1 << 23) +# define OSSL_CMP_CTX_FAILINFO_systemUnavail (1 << 24) +# define OSSL_CMP_CTX_FAILINFO_systemFailure (1 << 25) +# define OSSL_CMP_CTX_FAILINFO_duplicateCertReq (1 << 26) + +/*- + * PKIStatus ::= INTEGER { + * accepted (0), + * -- you got exactly what you asked for + * grantedWithMods (1), + * -- you got something like what you asked for; the + * -- requester is responsible for ascertaining the differences + * rejection (2), + * -- you don't get it, more information elsewhere in the message + * waiting (3), + * -- the request body part has not yet been processed; expect to + * -- hear more later (note: proper handling of this status + * -- response MAY use the polling req/rep PKIMessages specified + * -- in Section 5.3.22; alternatively, polling in the underlying + * -- transport layer MAY have some utility in this regard) + * revocationWarning (4), + * -- this message contains a warning that a revocation is + * -- imminent + * revocationNotification (5), + * -- notification that a revocation has occurred + * keyUpdateWarning (6) + * -- update already done for the oldCertId specified in + * -- CertReqMsg + * } + */ +# define OSSL_CMP_PKISTATUS_request -3 +# define OSSL_CMP_PKISTATUS_trans -2 +# define OSSL_CMP_PKISTATUS_unspecified -1 +# define OSSL_CMP_PKISTATUS_accepted 0 +# define OSSL_CMP_PKISTATUS_grantedWithMods 1 +# define OSSL_CMP_PKISTATUS_rejection 2 +# define OSSL_CMP_PKISTATUS_waiting 3 +# define OSSL_CMP_PKISTATUS_revocationWarning 4 +# define OSSL_CMP_PKISTATUS_revocationNotification 5 +# define OSSL_CMP_PKISTATUS_keyUpdateWarning 6 + +typedef ASN1_INTEGER OSSL_CMP_PKISTATUS; +DECLARE_ASN1_ITEM(OSSL_CMP_PKISTATUS) + +# define OSSL_CMP_CERTORENCCERT_CERTIFICATE 0 +# define OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT 1 + +/* data type declarations */ +typedef struct ossl_cmp_ctx_st OSSL_CMP_CTX; +typedef struct ossl_cmp_pkiheader_st OSSL_CMP_PKIHEADER; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER) +typedef struct ossl_cmp_msg_st OSSL_CMP_MSG; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_MSG) +DECLARE_ASN1_ENCODE_FUNCTIONS(OSSL_CMP_MSG, OSSL_CMP_MSG, OSSL_CMP_MSG) +typedef struct ossl_cmp_certstatus_st OSSL_CMP_CERTSTATUS; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS) +#define sk_OSSL_CMP_CERTSTATUS_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_value(sk, idx) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTSTATUS_new(cmp) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTSTATUS_new_null() ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTSTATUS_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTSTATUS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTSTATUS_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_delete(sk, i) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTSTATUS_delete_ptr(sk, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))) +#define sk_OSSL_CMP_CERTSTATUS_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_pop(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_shift(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk),ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTSTATUS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTSTATUS_set(sk, idx, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))) +#define sk_OSSL_CMP_CERTSTATUS_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), pnum) +#define sk_OSSL_CMP_CERTSTATUS_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_dup(sk) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTSTATUS_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTSTATUS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp))) + +typedef struct ossl_cmp_itav_st OSSL_CMP_ITAV; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_ITAV, OSSL_CMP_ITAV, OSSL_CMP_ITAV) +#define sk_OSSL_CMP_ITAV_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_value(sk, idx) ((OSSL_CMP_ITAV *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), (idx))) +#define sk_OSSL_CMP_ITAV_new(cmp) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp))) +#define sk_OSSL_CMP_ITAV_new_null() ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_ITAV_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_ITAV_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (n)) +#define sk_OSSL_CMP_ITAV_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_delete(sk, i) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (i))) +#define sk_OSSL_CMP_ITAV_delete_ptr(sk, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr))) +#define sk_OSSL_CMP_ITAV_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_pop(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_shift(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk),ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc)) +#define sk_OSSL_CMP_ITAV_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), (idx)) +#define sk_OSSL_CMP_ITAV_set(sk, idx, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_set(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (idx), ossl_check_OSSL_CMP_ITAV_type(ptr))) +#define sk_OSSL_CMP_ITAV_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), pnum) +#define sk_OSSL_CMP_ITAV_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_dup(sk) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc))) +#define sk_OSSL_CMP_ITAV_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_ITAV_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp))) + +typedef struct ossl_cmp_revrepcontent_st OSSL_CMP_REVREPCONTENT; +typedef struct ossl_cmp_pkisi_st OSSL_CMP_PKISI; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKISI) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_PKISI, OSSL_CMP_PKISI, OSSL_CMP_PKISI) +#define sk_OSSL_CMP_PKISI_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_value(sk, idx) ((OSSL_CMP_PKISI *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), (idx))) +#define sk_OSSL_CMP_PKISI_new(cmp) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp))) +#define sk_OSSL_CMP_PKISI_new_null() ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_PKISI_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_PKISI_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (n)) +#define sk_OSSL_CMP_PKISI_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_delete(sk, i) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (i))) +#define sk_OSSL_CMP_PKISI_delete_ptr(sk, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr))) +#define sk_OSSL_CMP_PKISI_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_pop(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_shift(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk),ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc)) +#define sk_OSSL_CMP_PKISI_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), (idx)) +#define sk_OSSL_CMP_PKISI_set(sk, idx, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_set(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (idx), ossl_check_OSSL_CMP_PKISI_type(ptr))) +#define sk_OSSL_CMP_PKISI_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), pnum) +#define sk_OSSL_CMP_PKISI_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_dup(sk) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc))) +#define sk_OSSL_CMP_PKISI_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_PKISI_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp))) + +typedef struct ossl_cmp_certrepmessage_st OSSL_CMP_CERTREPMESSAGE; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE) +#define sk_OSSL_CMP_CERTREPMESSAGE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_value(sk, idx) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTREPMESSAGE_new(cmp) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_null() ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTREPMESSAGE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTREPMESSAGE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_delete(sk, i) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTREPMESSAGE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))) +#define sk_OSSL_CMP_CERTREPMESSAGE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_pop(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_shift(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk),ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTREPMESSAGE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTREPMESSAGE_set(sk, idx, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))) +#define sk_OSSL_CMP_CERTREPMESSAGE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), pnum) +#define sk_OSSL_CMP_CERTREPMESSAGE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_dup(sk) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTREPMESSAGE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTREPMESSAGE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp))) + +typedef struct ossl_cmp_pollrep_st OSSL_CMP_POLLREP; +typedef STACK_OF(OSSL_CMP_POLLREP) OSSL_CMP_POLLREPCONTENT; +typedef struct ossl_cmp_certresponse_st OSSL_CMP_CERTRESPONSE; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE) +#define sk_OSSL_CMP_CERTRESPONSE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_value(sk, idx) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTRESPONSE_new(cmp) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTRESPONSE_new_null() ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTRESPONSE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTRESPONSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTRESPONSE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_delete(sk, i) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTRESPONSE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))) +#define sk_OSSL_CMP_CERTRESPONSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_pop(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_shift(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk),ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTRESPONSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTRESPONSE_set(sk, idx, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))) +#define sk_OSSL_CMP_CERTRESPONSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), pnum) +#define sk_OSSL_CMP_CERTRESPONSE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_dup(sk) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTRESPONSE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTRESPONSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp))) + +typedef STACK_OF(ASN1_UTF8STRING) OSSL_CMP_PKIFREETEXT; + +/* + * function DECLARATIONS + */ + +/* from cmp_asn.c */ +OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value); +void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type, + ASN1_TYPE *value); +ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav); +ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav); +int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **itav_sk_p, + OSSL_CMP_ITAV *itav); +void OSSL_CMP_ITAV_free(OSSL_CMP_ITAV *itav); +void OSSL_CMP_MSG_free(OSSL_CMP_MSG *msg); + +/* from cmp_ctx.c */ +OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx); +/* CMP general options: */ +# define OSSL_CMP_OPT_LOG_VERBOSITY 0 +/* CMP transfer options: */ +# define OSSL_CMP_OPT_KEEP_ALIVE 10 +# define OSSL_CMP_OPT_MSG_TIMEOUT 11 +# define OSSL_CMP_OPT_TOTAL_TIMEOUT 12 +/* CMP request options: */ +# define OSSL_CMP_OPT_VALIDITY_DAYS 20 +# define OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT 21 +# define OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL 22 +# define OSSL_CMP_OPT_POLICIES_CRITICAL 23 +# define OSSL_CMP_OPT_POPO_METHOD 24 +# define OSSL_CMP_OPT_IMPLICIT_CONFIRM 25 +# define OSSL_CMP_OPT_DISABLE_CONFIRM 26 +# define OSSL_CMP_OPT_REVOCATION_REASON 27 +/* CMP protection options: */ +# define OSSL_CMP_OPT_UNPROTECTED_SEND 30 +# define OSSL_CMP_OPT_UNPROTECTED_ERRORS 31 +# define OSSL_CMP_OPT_OWF_ALGNID 32 +# define OSSL_CMP_OPT_MAC_ALGNID 33 +# define OSSL_CMP_OPT_DIGEST_ALGNID 34 +# define OSSL_CMP_OPT_IGNORE_KEYUSAGE 35 +# define OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR 36 +int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val); +int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt); +/* CMP-specific callback for logging and outputting the error queue: */ +int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb); +# define OSSL_CMP_CTX_set_log_verbosity(ctx, level) \ + OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_LOG_VERBOSITY, level) +void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx); +/* message transfer: */ +int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path); +int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address); +int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port); +int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name); +int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names); +int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, OSSL_HTTP_bio_cb_t cb); +int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx); +typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t) (OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); +int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_transfer_cb_t cb); +int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); +/* server authentication: */ +int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store); +X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs); +STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx); +/* client authentication: */ +int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted, + STACK_OF(X509) *candidates); +int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey); +int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx, + const unsigned char *ref, int len); +int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx, + const unsigned char *sec, int len); +/* CMP message header and extra certificates: */ +int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, + STACK_OF(X509) *extraCertsOut); +/* certificate template: */ +int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey); +EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv); +int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx, + const GENERAL_NAME *name); +int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts); +int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo); +int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr); +/* misc body contents: */ +int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +/* certificate confirmation: */ +typedef int (*OSSL_CMP_certConf_cb_t) (OSSL_CMP_CTX *ctx, X509 *cert, + int fail_info, const char **txt); +int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info, + const char **text); +int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb); +int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx); +/* result fetching: */ +int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx); +OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx); +# define OSSL_CMP_PKISI_BUFLEN 1024 +X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *id); +int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *nonce); + +/* from cmp_status.c */ +char *OSSL_CMP_CTX_snprint_PKIStatus(const OSSL_CMP_CTX *ctx, char *buf, + size_t bufsize); +char *OSSL_CMP_snprint_PKIStatusInfo(const OSSL_CMP_PKISI *statusInfo, + char *buf, size_t bufsize); +OSSL_CMP_PKISI * +OSSL_CMP_STATUSINFO_new(int status, int fail_info, const char *text); + +/* from cmp_hdr.c */ +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_transactionID(const + OSSL_CMP_PKIHEADER *hdr); +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_recipNonce(const OSSL_CMP_PKIHEADER *hdr); + +/* from cmp_msg.c */ +OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_recipNonce(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid); +OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg); +OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg); +int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg); + +/* from cmp_vfy.c */ +int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg); +int OSSL_CMP_validate_cert_path(const OSSL_CMP_CTX *ctx, + X509_STORE *trusted_store, X509 *cert); + +/* from cmp_http.c */ +OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); + +/* from cmp_server.c */ +typedef struct ossl_cmp_srv_ctx_st OSSL_CMP_SRV_CTX; +OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_MSG * OSSL_CMP_CTX_server_perform(OSSL_CMP_CTX *client_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_SRV_CTX *OSSL_CMP_SRV_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_SRV_CTX_free(OSSL_CMP_SRV_CTX *srv_ctx); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_cert_request_cb_t) + (OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *req, int certReqId, + const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr, + X509 **certOut, STACK_OF(X509) **chainOut, STACK_OF(X509) **caPubs); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_rr_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +typedef int (*OSSL_CMP_SRV_genm_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const STACK_OF(OSSL_CMP_ITAV) *in, + STACK_OF(OSSL_CMP_ITAV) **out); +typedef void (*OSSL_CMP_SRV_error_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const OSSL_CMP_PKISI *statusInfo, + const ASN1_INTEGER *errorCode, + const OSSL_CMP_PKIFREETEXT *errDetails); +typedef int (*OSSL_CMP_SRV_certConf_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + int certReqId, + const ASN1_OCTET_STRING *certHash, + const OSSL_CMP_PKISI *si); +typedef int (*OSSL_CMP_SRV_pollReq_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, int certReqId, + OSSL_CMP_MSG **certReq, + int64_t *check_after); +int OSSL_CMP_SRV_CTX_init(OSSL_CMP_SRV_CTX *srv_ctx, void *custom_ctx, + OSSL_CMP_SRV_cert_request_cb_t process_cert_request, + OSSL_CMP_SRV_rr_cb_t process_rr, + OSSL_CMP_SRV_genm_cb_t process_genm, + OSSL_CMP_SRV_error_cb_t process_error, + OSSL_CMP_SRV_certConf_cb_t process_certConf, + OSSL_CMP_SRV_pollReq_cb_t process_pollReq); +OSSL_CMP_CTX *OSSL_CMP_SRV_CTX_get0_cmp_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +void *OSSL_CMP_SRV_CTX_get0_custom_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +int OSSL_CMP_SRV_CTX_set_send_unprotected_errors(OSSL_CMP_SRV_CTX *srv_ctx, + int val); +int OSSL_CMP_SRV_CTX_set_accept_unprotected(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_accept_raverified(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(OSSL_CMP_SRV_CTX *srv_ctx, + int val); + +/* from cmp_client.c */ +X509 *OSSL_CMP_exec_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm); +# define OSSL_CMP_IR 0 +# define OSSL_CMP_CR 2 +# define OSSL_CMP_P10CR 4 +# define OSSL_CMP_KUR 7 +# define OSSL_CMP_exec_IR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_IR, NULL) +# define OSSL_CMP_exec_CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_CR, NULL) +# define OSSL_CMP_exec_P10CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_P10CR, NULL) +# define OSSL_CMP_exec_KUR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_KUR, NULL) +int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm, int *checkAfter); +int OSSL_CMP_exec_RR_ses(OSSL_CMP_CTX *ctx); +STACK_OF(OSSL_CMP_ITAV) *OSSL_CMP_exec_GENM_ses(OSSL_CMP_CTX *ctx); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_H) */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cmp.h.in b/deps/openssl/android/x86/usr/local/include/openssl/cmp.h.in new file mode 100644 index 00000000..fb5ae671 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/cmp.h.in @@ -0,0 +1,478 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CMP_H +# define OPENSSL_CMP_H + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include +# include +# include + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CMP_PVNO 2 + +/*- + * PKIFailureInfo ::= BIT STRING { + * -- since we can fail in more than one way! + * -- More codes may be added in the future if/when required. + * badAlg (0), + * -- unrecognized or unsupported Algorithm Identifier + * badMessageCheck (1), + * -- integrity check failed (e.g., signature did not verify) + * badRequest (2), + * -- transaction not permitted or supported + * badTime (3), + * -- messageTime was not sufficiently close to the system time, + * -- as defined by local policy + * badCertId (4), + * -- no certificate could be found matching the provided criteria + * badDataFormat (5), + * -- the data submitted has the wrong format + * wrongAuthority (6), + * -- the authority indicated in the request is different from the + * -- one creating the response token + * incorrectData (7), + * -- the requester's data is incorrect (for notary services) + * missingTimeStamp (8), + * -- when the timestamp is missing but should be there + * -- (by policy) + * badPOP (9), + * -- the proof-of-possession failed + * certRevoked (10), + * -- the certificate has already been revoked + * certConfirmed (11), + * -- the certificate has already been confirmed + * wrongIntegrity (12), + * -- invalid integrity, password based instead of signature or + * -- vice versa + * badRecipientNonce (13), + * -- invalid recipient nonce, either missing or wrong value + * timeNotAvailable (14), + * -- the TSA's time source is not available + * unacceptedPolicy (15), + * -- the requested TSA policy is not supported by the TSA. + * unacceptedExtension (16), + * -- the requested extension is not supported by the TSA. + * addInfoNotAvailable (17), + * -- the additional information requested could not be + * -- understood or is not available + * badSenderNonce (18), + * -- invalid sender nonce, either missing or wrong size + * badCertTemplate (19), + * -- invalid cert. template or missing mandatory information + * signerNotTrusted (20), + * -- signer of the message unknown or not trusted + * transactionIdInUse (21), + * -- the transaction identifier is already in use + * unsupportedVersion (22), + * -- the version of the message is not supported + * notAuthorized (23), + * -- the sender was not authorized to make the preceding + * -- request or perform the preceding action + * systemUnavail (24), + * -- the request cannot be handled due to system unavailability + * systemFailure (25), + * -- the request cannot be handled due to system failure + * duplicateCertReq (26) + * -- certificate cannot be issued because a duplicate + * -- certificate already exists + * } + */ +# define OSSL_CMP_PKIFAILUREINFO_badAlg 0 +# define OSSL_CMP_PKIFAILUREINFO_badMessageCheck 1 +# define OSSL_CMP_PKIFAILUREINFO_badRequest 2 +# define OSSL_CMP_PKIFAILUREINFO_badTime 3 +# define OSSL_CMP_PKIFAILUREINFO_badCertId 4 +# define OSSL_CMP_PKIFAILUREINFO_badDataFormat 5 +# define OSSL_CMP_PKIFAILUREINFO_wrongAuthority 6 +# define OSSL_CMP_PKIFAILUREINFO_incorrectData 7 +# define OSSL_CMP_PKIFAILUREINFO_missingTimeStamp 8 +# define OSSL_CMP_PKIFAILUREINFO_badPOP 9 +# define OSSL_CMP_PKIFAILUREINFO_certRevoked 10 +# define OSSL_CMP_PKIFAILUREINFO_certConfirmed 11 +# define OSSL_CMP_PKIFAILUREINFO_wrongIntegrity 12 +# define OSSL_CMP_PKIFAILUREINFO_badRecipientNonce 13 +# define OSSL_CMP_PKIFAILUREINFO_timeNotAvailable 14 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedPolicy 15 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedExtension 16 +# define OSSL_CMP_PKIFAILUREINFO_addInfoNotAvailable 17 +# define OSSL_CMP_PKIFAILUREINFO_badSenderNonce 18 +# define OSSL_CMP_PKIFAILUREINFO_badCertTemplate 19 +# define OSSL_CMP_PKIFAILUREINFO_signerNotTrusted 20 +# define OSSL_CMP_PKIFAILUREINFO_transactionIdInUse 21 +# define OSSL_CMP_PKIFAILUREINFO_unsupportedVersion 22 +# define OSSL_CMP_PKIFAILUREINFO_notAuthorized 23 +# define OSSL_CMP_PKIFAILUREINFO_systemUnavail 24 +# define OSSL_CMP_PKIFAILUREINFO_systemFailure 25 +# define OSSL_CMP_PKIFAILUREINFO_duplicateCertReq 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN \ + ((1 << (OSSL_CMP_PKIFAILUREINFO_MAX + 1)) - 1) +# if OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN > INT_MAX +# error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int +# endif + +typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; + +# define OSSL_CMP_CTX_FAILINFO_badAlg (1 << 0) +# define OSSL_CMP_CTX_FAILINFO_badMessageCheck (1 << 1) +# define OSSL_CMP_CTX_FAILINFO_badRequest (1 << 2) +# define OSSL_CMP_CTX_FAILINFO_badTime (1 << 3) +# define OSSL_CMP_CTX_FAILINFO_badCertId (1 << 4) +# define OSSL_CMP_CTX_FAILINFO_badDataFormat (1 << 5) +# define OSSL_CMP_CTX_FAILINFO_wrongAuthority (1 << 6) +# define OSSL_CMP_CTX_FAILINFO_incorrectData (1 << 7) +# define OSSL_CMP_CTX_FAILINFO_missingTimeStamp (1 << 8) +# define OSSL_CMP_CTX_FAILINFO_badPOP (1 << 9) +# define OSSL_CMP_CTX_FAILINFO_certRevoked (1 << 10) +# define OSSL_CMP_CTX_FAILINFO_certConfirmed (1 << 11) +# define OSSL_CMP_CTX_FAILINFO_wrongIntegrity (1 << 12) +# define OSSL_CMP_CTX_FAILINFO_badRecipientNonce (1 << 13) +# define OSSL_CMP_CTX_FAILINFO_timeNotAvailable (1 << 14) +# define OSSL_CMP_CTX_FAILINFO_unacceptedPolicy (1 << 15) +# define OSSL_CMP_CTX_FAILINFO_unacceptedExtension (1 << 16) +# define OSSL_CMP_CTX_FAILINFO_addInfoNotAvailable (1 << 17) +# define OSSL_CMP_CTX_FAILINFO_badSenderNonce (1 << 18) +# define OSSL_CMP_CTX_FAILINFO_badCertTemplate (1 << 19) +# define OSSL_CMP_CTX_FAILINFO_signerNotTrusted (1 << 20) +# define OSSL_CMP_CTX_FAILINFO_transactionIdInUse (1 << 21) +# define OSSL_CMP_CTX_FAILINFO_unsupportedVersion (1 << 22) +# define OSSL_CMP_CTX_FAILINFO_notAuthorized (1 << 23) +# define OSSL_CMP_CTX_FAILINFO_systemUnavail (1 << 24) +# define OSSL_CMP_CTX_FAILINFO_systemFailure (1 << 25) +# define OSSL_CMP_CTX_FAILINFO_duplicateCertReq (1 << 26) + +/*- + * PKIStatus ::= INTEGER { + * accepted (0), + * -- you got exactly what you asked for + * grantedWithMods (1), + * -- you got something like what you asked for; the + * -- requester is responsible for ascertaining the differences + * rejection (2), + * -- you don't get it, more information elsewhere in the message + * waiting (3), + * -- the request body part has not yet been processed; expect to + * -- hear more later (note: proper handling of this status + * -- response MAY use the polling req/rep PKIMessages specified + * -- in Section 5.3.22; alternatively, polling in the underlying + * -- transport layer MAY have some utility in this regard) + * revocationWarning (4), + * -- this message contains a warning that a revocation is + * -- imminent + * revocationNotification (5), + * -- notification that a revocation has occurred + * keyUpdateWarning (6) + * -- update already done for the oldCertId specified in + * -- CertReqMsg + * } + */ +# define OSSL_CMP_PKISTATUS_request -3 +# define OSSL_CMP_PKISTATUS_trans -2 +# define OSSL_CMP_PKISTATUS_unspecified -1 +# define OSSL_CMP_PKISTATUS_accepted 0 +# define OSSL_CMP_PKISTATUS_grantedWithMods 1 +# define OSSL_CMP_PKISTATUS_rejection 2 +# define OSSL_CMP_PKISTATUS_waiting 3 +# define OSSL_CMP_PKISTATUS_revocationWarning 4 +# define OSSL_CMP_PKISTATUS_revocationNotification 5 +# define OSSL_CMP_PKISTATUS_keyUpdateWarning 6 + +typedef ASN1_INTEGER OSSL_CMP_PKISTATUS; +DECLARE_ASN1_ITEM(OSSL_CMP_PKISTATUS) + +# define OSSL_CMP_CERTORENCCERT_CERTIFICATE 0 +# define OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT 1 + +/* data type declarations */ +typedef struct ossl_cmp_ctx_st OSSL_CMP_CTX; +typedef struct ossl_cmp_pkiheader_st OSSL_CMP_PKIHEADER; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER) +typedef struct ossl_cmp_msg_st OSSL_CMP_MSG; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_MSG) +DECLARE_ASN1_ENCODE_FUNCTIONS(OSSL_CMP_MSG, OSSL_CMP_MSG, OSSL_CMP_MSG) +typedef struct ossl_cmp_certstatus_st OSSL_CMP_CERTSTATUS; +{- + generate_stack_macros("OSSL_CMP_CERTSTATUS"); +-} +typedef struct ossl_cmp_itav_st OSSL_CMP_ITAV; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV) +{- + generate_stack_macros("OSSL_CMP_ITAV"); +-} +typedef struct ossl_cmp_revrepcontent_st OSSL_CMP_REVREPCONTENT; +typedef struct ossl_cmp_pkisi_st OSSL_CMP_PKISI; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKISI) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI) +{- + generate_stack_macros("OSSL_CMP_PKISI"); +-} +typedef struct ossl_cmp_certrepmessage_st OSSL_CMP_CERTREPMESSAGE; +{- + generate_stack_macros("OSSL_CMP_CERTREPMESSAGE"); +-} +typedef struct ossl_cmp_pollrep_st OSSL_CMP_POLLREP; +typedef STACK_OF(OSSL_CMP_POLLREP) OSSL_CMP_POLLREPCONTENT; +typedef struct ossl_cmp_certresponse_st OSSL_CMP_CERTRESPONSE; +{- + generate_stack_macros("OSSL_CMP_CERTRESPONSE"); +-} +typedef STACK_OF(ASN1_UTF8STRING) OSSL_CMP_PKIFREETEXT; + +/* + * function DECLARATIONS + */ + +/* from cmp_asn.c */ +OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value); +void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type, + ASN1_TYPE *value); +ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav); +ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav); +int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **itav_sk_p, + OSSL_CMP_ITAV *itav); +void OSSL_CMP_ITAV_free(OSSL_CMP_ITAV *itav); +void OSSL_CMP_MSG_free(OSSL_CMP_MSG *msg); + +/* from cmp_ctx.c */ +OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx); +/* CMP general options: */ +# define OSSL_CMP_OPT_LOG_VERBOSITY 0 +/* CMP transfer options: */ +# define OSSL_CMP_OPT_KEEP_ALIVE 10 +# define OSSL_CMP_OPT_MSG_TIMEOUT 11 +# define OSSL_CMP_OPT_TOTAL_TIMEOUT 12 +/* CMP request options: */ +# define OSSL_CMP_OPT_VALIDITY_DAYS 20 +# define OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT 21 +# define OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL 22 +# define OSSL_CMP_OPT_POLICIES_CRITICAL 23 +# define OSSL_CMP_OPT_POPO_METHOD 24 +# define OSSL_CMP_OPT_IMPLICIT_CONFIRM 25 +# define OSSL_CMP_OPT_DISABLE_CONFIRM 26 +# define OSSL_CMP_OPT_REVOCATION_REASON 27 +/* CMP protection options: */ +# define OSSL_CMP_OPT_UNPROTECTED_SEND 30 +# define OSSL_CMP_OPT_UNPROTECTED_ERRORS 31 +# define OSSL_CMP_OPT_OWF_ALGNID 32 +# define OSSL_CMP_OPT_MAC_ALGNID 33 +# define OSSL_CMP_OPT_DIGEST_ALGNID 34 +# define OSSL_CMP_OPT_IGNORE_KEYUSAGE 35 +# define OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR 36 +int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val); +int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt); +/* CMP-specific callback for logging and outputting the error queue: */ +int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb); +# define OSSL_CMP_CTX_set_log_verbosity(ctx, level) \ + OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_LOG_VERBOSITY, level) +void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx); +/* message transfer: */ +int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path); +int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address); +int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port); +int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name); +int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names); +int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, OSSL_HTTP_bio_cb_t cb); +int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx); +typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t) (OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); +int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_transfer_cb_t cb); +int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); +/* server authentication: */ +int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store); +X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs); +STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx); +/* client authentication: */ +int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted, + STACK_OF(X509) *candidates); +int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey); +int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx, + const unsigned char *ref, int len); +int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx, + const unsigned char *sec, int len); +/* CMP message header and extra certificates: */ +int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, + STACK_OF(X509) *extraCertsOut); +/* certificate template: */ +int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey); +EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv); +int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx, + const GENERAL_NAME *name); +int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts); +int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo); +int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr); +/* misc body contents: */ +int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +/* certificate confirmation: */ +typedef int (*OSSL_CMP_certConf_cb_t) (OSSL_CMP_CTX *ctx, X509 *cert, + int fail_info, const char **txt); +int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info, + const char **text); +int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb); +int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx); +/* result fetching: */ +int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx); +OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx); +# define OSSL_CMP_PKISI_BUFLEN 1024 +X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *id); +int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *nonce); + +/* from cmp_status.c */ +char *OSSL_CMP_CTX_snprint_PKIStatus(const OSSL_CMP_CTX *ctx, char *buf, + size_t bufsize); +char *OSSL_CMP_snprint_PKIStatusInfo(const OSSL_CMP_PKISI *statusInfo, + char *buf, size_t bufsize); +OSSL_CMP_PKISI * +OSSL_CMP_STATUSINFO_new(int status, int fail_info, const char *text); + +/* from cmp_hdr.c */ +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_transactionID(const + OSSL_CMP_PKIHEADER *hdr); +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_recipNonce(const OSSL_CMP_PKIHEADER *hdr); + +/* from cmp_msg.c */ +OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_recipNonce(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid); +OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg); +OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg); +int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg); + +/* from cmp_vfy.c */ +int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg); +int OSSL_CMP_validate_cert_path(const OSSL_CMP_CTX *ctx, + X509_STORE *trusted_store, X509 *cert); + +/* from cmp_http.c */ +OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); + +/* from cmp_server.c */ +typedef struct ossl_cmp_srv_ctx_st OSSL_CMP_SRV_CTX; +OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_MSG * OSSL_CMP_CTX_server_perform(OSSL_CMP_CTX *client_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_SRV_CTX *OSSL_CMP_SRV_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_SRV_CTX_free(OSSL_CMP_SRV_CTX *srv_ctx); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_cert_request_cb_t) + (OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *req, int certReqId, + const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr, + X509 **certOut, STACK_OF(X509) **chainOut, STACK_OF(X509) **caPubs); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_rr_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +typedef int (*OSSL_CMP_SRV_genm_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const STACK_OF(OSSL_CMP_ITAV) *in, + STACK_OF(OSSL_CMP_ITAV) **out); +typedef void (*OSSL_CMP_SRV_error_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const OSSL_CMP_PKISI *statusInfo, + const ASN1_INTEGER *errorCode, + const OSSL_CMP_PKIFREETEXT *errDetails); +typedef int (*OSSL_CMP_SRV_certConf_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + int certReqId, + const ASN1_OCTET_STRING *certHash, + const OSSL_CMP_PKISI *si); +typedef int (*OSSL_CMP_SRV_pollReq_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, int certReqId, + OSSL_CMP_MSG **certReq, + int64_t *check_after); +int OSSL_CMP_SRV_CTX_init(OSSL_CMP_SRV_CTX *srv_ctx, void *custom_ctx, + OSSL_CMP_SRV_cert_request_cb_t process_cert_request, + OSSL_CMP_SRV_rr_cb_t process_rr, + OSSL_CMP_SRV_genm_cb_t process_genm, + OSSL_CMP_SRV_error_cb_t process_error, + OSSL_CMP_SRV_certConf_cb_t process_certConf, + OSSL_CMP_SRV_pollReq_cb_t process_pollReq); +OSSL_CMP_CTX *OSSL_CMP_SRV_CTX_get0_cmp_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +void *OSSL_CMP_SRV_CTX_get0_custom_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +int OSSL_CMP_SRV_CTX_set_send_unprotected_errors(OSSL_CMP_SRV_CTX *srv_ctx, + int val); +int OSSL_CMP_SRV_CTX_set_accept_unprotected(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_accept_raverified(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(OSSL_CMP_SRV_CTX *srv_ctx, + int val); + +/* from cmp_client.c */ +X509 *OSSL_CMP_exec_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm); +# define OSSL_CMP_IR 0 +# define OSSL_CMP_CR 2 +# define OSSL_CMP_P10CR 4 +# define OSSL_CMP_KUR 7 +# define OSSL_CMP_exec_IR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_IR, NULL) +# define OSSL_CMP_exec_CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_CR, NULL) +# define OSSL_CMP_exec_P10CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_P10CR, NULL) +# define OSSL_CMP_exec_KUR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_KUR, NULL) +int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm, int *checkAfter); +int OSSL_CMP_exec_RR_ses(OSSL_CMP_CTX *ctx); +STACK_OF(OSSL_CMP_ITAV) *OSSL_CMP_exec_GENM_ses(OSSL_CMP_CTX *ctx); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_H) */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cmp_util.h b/deps/openssl/android/x86/usr/local/include/openssl/cmp_util.h new file mode 100644 index 00000000..9a168922 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/cmp_util.h @@ -0,0 +1,56 @@ +/* + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CMP_UTIL_H +# define OPENSSL_CMP_UTIL_H +# pragma once + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int OSSL_CMP_log_open(void); +void OSSL_CMP_log_close(void); +# define OSSL_CMP_LOG_PREFIX "CMP " + +/* + * generalized logging/error callback mirroring the severity levels of syslog.h + */ +typedef int OSSL_CMP_severity; +# define OSSL_CMP_LOG_EMERG 0 +# define OSSL_CMP_LOG_ALERT 1 +# define OSSL_CMP_LOG_CRIT 2 +# define OSSL_CMP_LOG_ERR 3 +# define OSSL_CMP_LOG_WARNING 4 +# define OSSL_CMP_LOG_NOTICE 5 +# define OSSL_CMP_LOG_INFO 6 +# define OSSL_CMP_LOG_DEBUG 7 +# define OSSL_CMP_LOG_TRACE 8 +# define OSSL_CMP_LOG_MAX OSSL_CMP_LOG_TRACE +typedef int (*OSSL_CMP_log_cb_t)(const char *func, const char *file, int line, + OSSL_CMP_severity level, const char *msg); + +int OSSL_CMP_print_to_bio(BIO *bio, const char *component, const char *file, + int line, OSSL_CMP_severity level, const char *msg); +/* use of the logging callback for outputting error queue */ +void OSSL_CMP_print_errors_cb(OSSL_CMP_log_cb_t log_fn); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_UTIL_H) */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cmperr.h b/deps/openssl/android/x86/usr/local/include/openssl/cmperr.h new file mode 100644 index 00000000..49fd5e39 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/cmperr.h @@ -0,0 +1,116 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CMPERR_H +# define OPENSSL_CMPERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CMP + + +/* + * CMP reason codes. + */ +# define CMP_R_ALGORITHM_NOT_SUPPORTED 139 +# define CMP_R_BAD_CHECKAFTER_IN_POLLREP 167 +# define CMP_R_BAD_REQUEST_ID 108 +# define CMP_R_CERTHASH_UNMATCHED 156 +# define CMP_R_CERTID_NOT_FOUND 109 +# define CMP_R_CERTIFICATE_NOT_ACCEPTED 169 +# define CMP_R_CERTIFICATE_NOT_FOUND 112 +# define CMP_R_CERTREQMSG_NOT_FOUND 157 +# define CMP_R_CERTRESPONSE_NOT_FOUND 113 +# define CMP_R_CERT_AND_KEY_DO_NOT_MATCH 114 +# define CMP_R_CHECKAFTER_OUT_OF_RANGE 181 +# define CMP_R_ENCOUNTERED_KEYUPDATEWARNING 176 +# define CMP_R_ENCOUNTERED_WAITING 162 +# define CMP_R_ERROR_CALCULATING_PROTECTION 115 +# define CMP_R_ERROR_CREATING_CERTCONF 116 +# define CMP_R_ERROR_CREATING_CERTREP 117 +# define CMP_R_ERROR_CREATING_CERTREQ 163 +# define CMP_R_ERROR_CREATING_ERROR 118 +# define CMP_R_ERROR_CREATING_GENM 119 +# define CMP_R_ERROR_CREATING_GENP 120 +# define CMP_R_ERROR_CREATING_PKICONF 122 +# define CMP_R_ERROR_CREATING_POLLREP 123 +# define CMP_R_ERROR_CREATING_POLLREQ 124 +# define CMP_R_ERROR_CREATING_RP 125 +# define CMP_R_ERROR_CREATING_RR 126 +# define CMP_R_ERROR_PARSING_PKISTATUS 107 +# define CMP_R_ERROR_PROCESSING_MESSAGE 158 +# define CMP_R_ERROR_PROTECTING_MESSAGE 127 +# define CMP_R_ERROR_SETTING_CERTHASH 128 +# define CMP_R_ERROR_UNEXPECTED_CERTCONF 160 +# define CMP_R_ERROR_VALIDATING_PROTECTION 140 +# define CMP_R_ERROR_VALIDATING_SIGNATURE 171 +# define CMP_R_FAILED_BUILDING_OWN_CHAIN 164 +# define CMP_R_FAILED_EXTRACTING_PUBKEY 141 +# define CMP_R_FAILURE_OBTAINING_RANDOM 110 +# define CMP_R_FAIL_INFO_OUT_OF_RANGE 129 +# define CMP_R_INVALID_ARGS 100 +# define CMP_R_INVALID_OPTION 174 +# define CMP_R_MISSING_CERTID 165 +# define CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION 130 +# define CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE 142 +# define CMP_R_MISSING_P10CSR 121 +# define CMP_R_MISSING_PBM_SECRET 166 +# define CMP_R_MISSING_PRIVATE_KEY 131 +# define CMP_R_MISSING_PRIVATE_KEY_FOR_POPO 190 +# define CMP_R_MISSING_PROTECTION 143 +# define CMP_R_MISSING_PUBLIC_KEY 183 +# define CMP_R_MISSING_REFERENCE_CERT 168 +# define CMP_R_MISSING_SECRET 178 +# define CMP_R_MISSING_SENDER_IDENTIFICATION 111 +# define CMP_R_MISSING_TRUST_ANCHOR 179 +# define CMP_R_MISSING_TRUST_STORE 144 +# define CMP_R_MULTIPLE_REQUESTS_NOT_SUPPORTED 161 +# define CMP_R_MULTIPLE_RESPONSES_NOT_SUPPORTED 170 +# define CMP_R_MULTIPLE_SAN_SOURCES 102 +# define CMP_R_NO_STDIO 194 +# define CMP_R_NO_SUITABLE_SENDER_CERT 145 +# define CMP_R_NULL_ARGUMENT 103 +# define CMP_R_PKIBODY_ERROR 146 +# define CMP_R_PKISTATUSINFO_NOT_FOUND 132 +# define CMP_R_POLLING_FAILED 172 +# define CMP_R_POTENTIALLY_INVALID_CERTIFICATE 147 +# define CMP_R_RECEIVED_ERROR 180 +# define CMP_R_RECIPNONCE_UNMATCHED 148 +# define CMP_R_REQUEST_NOT_ACCEPTED 149 +# define CMP_R_REQUEST_REJECTED_BY_SERVER 182 +# define CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED 150 +# define CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG 151 +# define CMP_R_TOTAL_TIMEOUT 184 +# define CMP_R_TRANSACTIONID_UNMATCHED 152 +# define CMP_R_TRANSFER_ERROR 159 +# define CMP_R_UNEXPECTED_PKIBODY 133 +# define CMP_R_UNEXPECTED_PKISTATUS 185 +# define CMP_R_UNEXPECTED_PVNO 153 +# define CMP_R_UNKNOWN_ALGORITHM_ID 134 +# define CMP_R_UNKNOWN_CERT_TYPE 135 +# define CMP_R_UNKNOWN_PKISTATUS 186 +# define CMP_R_UNSUPPORTED_ALGORITHM 136 +# define CMP_R_UNSUPPORTED_KEY_TYPE 137 +# define CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC 154 +# define CMP_R_VALUE_TOO_LARGE 175 +# define CMP_R_VALUE_TOO_SMALL 177 +# define CMP_R_WRONG_ALGORITHM_OID 138 +# define CMP_R_WRONG_CERTID 189 +# define CMP_R_WRONG_CERTID_IN_RP 187 +# define CMP_R_WRONG_PBM_VALUE 155 +# define CMP_R_WRONG_RP_COMPONENT_COUNT 188 +# define CMP_R_WRONG_SERIAL_IN_RP 173 + +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cms.h b/deps/openssl/android/x86/usr/local/include/openssl/cms.h index c7627968..3b453e6a 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cms.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/cms.h @@ -1,14 +1,25 @@ /* - * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/cms.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMS_H -# define HEADER_CMS_H + + +#ifndef OPENSSL_CMS_H +# define OPENSSL_CMS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMS_H +# endif # include @@ -30,14 +41,118 @@ typedef struct CMS_Receipt_st CMS_Receipt; typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; -DEFINE_STACK_OF(CMS_SignerInfo) -DEFINE_STACK_OF(CMS_RecipientEncryptedKey) -DEFINE_STACK_OF(CMS_RecipientInfo) -DEFINE_STACK_OF(CMS_RevocationInfoChoice) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_SignerInfo, CMS_SignerInfo, CMS_SignerInfo) +#define sk_CMS_SignerInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_value(sk, idx) ((CMS_SignerInfo *)OPENSSL_sk_value(ossl_check_const_CMS_SignerInfo_sk_type(sk), (idx))) +#define sk_CMS_SignerInfo_new(cmp) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new(ossl_check_CMS_SignerInfo_compfunc_type(cmp))) +#define sk_CMS_SignerInfo_new_null() ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_null()) +#define sk_CMS_SignerInfo_new_reserve(cmp, n) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_SignerInfo_compfunc_type(cmp), (n))) +#define sk_CMS_SignerInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_SignerInfo_sk_type(sk), (n)) +#define sk_CMS_SignerInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_delete(sk, i) ((CMS_SignerInfo *)OPENSSL_sk_delete(ossl_check_CMS_SignerInfo_sk_type(sk), (i))) +#define sk_CMS_SignerInfo_delete_ptr(sk, ptr) ((CMS_SignerInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr))) +#define sk_CMS_SignerInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_pop(sk) ((CMS_SignerInfo *)OPENSSL_sk_pop(ossl_check_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_shift(sk) ((CMS_SignerInfo *)OPENSSL_sk_shift(ossl_check_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_SignerInfo_sk_type(sk),ossl_check_CMS_SignerInfo_freefunc_type(freefunc)) +#define sk_CMS_SignerInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), (idx)) +#define sk_CMS_SignerInfo_set(sk, idx, ptr) ((CMS_SignerInfo *)OPENSSL_sk_set(ossl_check_CMS_SignerInfo_sk_type(sk), (idx), ossl_check_CMS_SignerInfo_type(ptr))) +#define sk_CMS_SignerInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), pnum) +#define sk_CMS_SignerInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_dup(sk) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_copyfunc_type(copyfunc), ossl_check_CMS_SignerInfo_freefunc_type(freefunc))) +#define sk_CMS_SignerInfo_set_cmp_func(sk, cmp) ((sk_CMS_SignerInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey) +#define sk_CMS_RecipientEncryptedKey_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_value(sk, idx) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), (idx))) +#define sk_CMS_RecipientEncryptedKey_new(cmp) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp))) +#define sk_CMS_RecipientEncryptedKey_new_null() ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_null()) +#define sk_CMS_RecipientEncryptedKey_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientEncryptedKey_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (n)) +#define sk_CMS_RecipientEncryptedKey_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_delete(sk, i) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (i))) +#define sk_CMS_RecipientEncryptedKey_delete_ptr(sk, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr))) +#define sk_CMS_RecipientEncryptedKey_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_pop(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_pop(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_shift(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_shift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk),ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc)) +#define sk_CMS_RecipientEncryptedKey_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), (idx)) +#define sk_CMS_RecipientEncryptedKey_set(sk, idx, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_set(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (idx), ossl_check_CMS_RecipientEncryptedKey_type(ptr))) +#define sk_CMS_RecipientEncryptedKey_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), pnum) +#define sk_CMS_RecipientEncryptedKey_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_dup(sk) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_copyfunc_type(copyfunc), ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc))) +#define sk_CMS_RecipientEncryptedKey_set_cmp_func(sk, cmp) ((sk_CMS_RecipientEncryptedKey_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientInfo, CMS_RecipientInfo, CMS_RecipientInfo) +#define sk_CMS_RecipientInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_value(sk, idx) ((CMS_RecipientInfo *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientInfo_sk_type(sk), (idx))) +#define sk_CMS_RecipientInfo_new(cmp) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new(ossl_check_CMS_RecipientInfo_compfunc_type(cmp))) +#define sk_CMS_RecipientInfo_new_null() ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_null()) +#define sk_CMS_RecipientInfo_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientInfo_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientInfo_sk_type(sk), (n)) +#define sk_CMS_RecipientInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_delete(sk, i) ((CMS_RecipientInfo *)OPENSSL_sk_delete(ossl_check_CMS_RecipientInfo_sk_type(sk), (i))) +#define sk_CMS_RecipientInfo_delete_ptr(sk, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr))) +#define sk_CMS_RecipientInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_pop(sk) ((CMS_RecipientInfo *)OPENSSL_sk_pop(ossl_check_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_shift(sk) ((CMS_RecipientInfo *)OPENSSL_sk_shift(ossl_check_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientInfo_sk_type(sk),ossl_check_CMS_RecipientInfo_freefunc_type(freefunc)) +#define sk_CMS_RecipientInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), (idx)) +#define sk_CMS_RecipientInfo_set(sk, idx, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_set(ossl_check_CMS_RecipientInfo_sk_type(sk), (idx), ossl_check_CMS_RecipientInfo_type(ptr))) +#define sk_CMS_RecipientInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), pnum) +#define sk_CMS_RecipientInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_dup(sk) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_copyfunc_type(copyfunc), ossl_check_CMS_RecipientInfo_freefunc_type(freefunc))) +#define sk_CMS_RecipientInfo_set_cmp_func(sk, cmp) ((sk_CMS_RecipientInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RevocationInfoChoice, CMS_RevocationInfoChoice, CMS_RevocationInfoChoice) +#define sk_CMS_RevocationInfoChoice_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_value(sk, idx) ((CMS_RevocationInfoChoice *)OPENSSL_sk_value(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), (idx))) +#define sk_CMS_RevocationInfoChoice_new(cmp) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp))) +#define sk_CMS_RevocationInfoChoice_new_null() ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_null()) +#define sk_CMS_RevocationInfoChoice_new_reserve(cmp, n) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp), (n))) +#define sk_CMS_RevocationInfoChoice_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (n)) +#define sk_CMS_RevocationInfoChoice_free(sk) OPENSSL_sk_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_delete(sk, i) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (i))) +#define sk_CMS_RevocationInfoChoice_delete_ptr(sk, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr))) +#define sk_CMS_RevocationInfoChoice_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_pop(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_pop(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_shift(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_shift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk),ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc)) +#define sk_CMS_RevocationInfoChoice_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), (idx)) +#define sk_CMS_RevocationInfoChoice_set(sk, idx, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_set(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (idx), ossl_check_CMS_RevocationInfoChoice_type(ptr))) +#define sk_CMS_RevocationInfoChoice_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), pnum) +#define sk_CMS_RevocationInfoChoice_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_dup(sk) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_dup(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_copyfunc_type(copyfunc), ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc))) +#define sk_CMS_RevocationInfoChoice_set_cmp_func(sk, cmp) ((sk_CMS_RevocationInfoChoice_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) +CMS_ContentInfo *CMS_ContentInfo_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + # define CMS_SIGNERINFO_ISSUER_SERIAL 0 # define CMS_SIGNERINFO_KEYIDENTIFIER 1 @@ -73,6 +188,8 @@ DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) # define CMS_DEBUG_DECRYPT 0x20000 # define CMS_KEY_PARAM 0x40000 # define CMS_ASCIICRLF 0x80000 +# define CMS_CADES 0x100000 +# define CMS_USE_ORIGINATOR_KEYID 0x200000 const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); @@ -83,8 +200,8 @@ ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); int CMS_is_detached(CMS_ContentInfo *cms); int CMS_set_detached(CMS_ContentInfo *cms, int detached); -# ifdef HEADER_PEM_H -DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) +# ifdef OPENSSL_PEM_H +DECLARE_PEM_rw(CMS, CMS_ContentInfo) # endif int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); @@ -95,6 +212,7 @@ int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +CMS_ContentInfo *SMIME_read_CMS_ex(BIO *bio, int flags, BIO **bcont, CMS_ContentInfo **ci); int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, @@ -103,6 +221,10 @@ int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, unsigned int flags); +CMS_ContentInfo *CMS_sign_ex(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, X509 *signcert, EVP_PKEY *pkey, @@ -110,11 +232,16 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); +CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, unsigned int flags); +CMS_ContentInfo *CMS_digest_create_ex(BIO *in, const EVP_MD *md, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, const unsigned char *key, size_t keylen, @@ -123,6 +250,11 @@ int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, const unsigned char *key, size_t keylen, unsigned int flags); +CMS_ContentInfo *CMS_EncryptedData_encrypt_ex(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags, + OSSL_LIB_CTX *ctx, + const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, const unsigned char *key, size_t keylen); @@ -138,11 +270,16 @@ STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); +CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, BIO *dcont, BIO *out, unsigned int flags); int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms, EVP_PKEY *pk, + X509 *cert, X509 *peer); int CMS_decrypt_set1_key(CMS_ContentInfo *cms, unsigned char *key, size_t keylen, const unsigned char *id, size_t idlen); @@ -152,9 +289,19 @@ int CMS_decrypt_set1_password(CMS_ContentInfo *cms, STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo * +CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, + const char *propq); CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo *CMS_EnvelopedData_create_ex(const EVP_CIPHER *cipher, + OSSL_LIB_CTX *ctx, + const char *propq); + CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, X509 *recip, unsigned int flags); +CMS_RecipientInfo *CMS_add1_recipient(CMS_ContentInfo *cms, X509 *recip, + EVP_PKEY *originatorPrivKey, X509 * originator, unsigned int flags); int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, @@ -197,7 +344,7 @@ CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, const EVP_CIPHER *kekciph); int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); -int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(const CMS_ContentInfo *cms, CMS_RecipientInfo *ri); int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags); @@ -261,7 +408,8 @@ int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, const char *attrname, int type, const void *bytes, int len); -void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, const ASN1_OBJECT *oid, +void *CMS_signed_get0_data_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *oid, int lastpos, int type); int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); @@ -285,11 +433,16 @@ void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, int lastpos, int type); int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); -CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, - int allorfirst, - STACK_OF(GENERAL_NAMES) - *receiptList, STACK_OF(GENERAL_NAMES) - *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo, + OSSL_LIB_CTX *ctx); + int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, ASN1_STRING **pcid, @@ -319,6 +472,7 @@ int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, X509 *cert); int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +int CMS_RecipientInfo_kari_set0_pkey_and_peer(CMS_RecipientInfo *ri, EVP_PKEY *pk, X509 *peer); EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri, diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cms.h.in b/deps/openssl/android/x86/usr/local/include/openssl/cms.h.in new file mode 100644 index 00000000..da20ddf2 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/cms.h.in @@ -0,0 +1,395 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CMS_H +# define OPENSSL_CMS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMS_H +# endif + +# include + +# ifndef OPENSSL_NO_CMS +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct CMS_ContentInfo_st CMS_ContentInfo; +typedef struct CMS_SignerInfo_st CMS_SignerInfo; +typedef struct CMS_CertificateChoices CMS_CertificateChoices; +typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; +typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; +typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; +typedef struct CMS_Receipt_st CMS_Receipt; +typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; +typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; + +{- + generate_stack_macros("CMS_SignerInfo") + .generate_stack_macros("CMS_RecipientEncryptedKey") + .generate_stack_macros("CMS_RecipientInfo") + .generate_stack_macros("CMS_RevocationInfoChoice"); +-} + +DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) +DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) +DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) + +CMS_ContentInfo *CMS_ContentInfo_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +# define CMS_SIGNERINFO_ISSUER_SERIAL 0 +# define CMS_SIGNERINFO_KEYIDENTIFIER 1 + +# define CMS_RECIPINFO_NONE -1 +# define CMS_RECIPINFO_TRANS 0 +# define CMS_RECIPINFO_AGREE 1 +# define CMS_RECIPINFO_KEK 2 +# define CMS_RECIPINFO_PASS 3 +# define CMS_RECIPINFO_OTHER 4 + +/* S/MIME related flags */ + +# define CMS_TEXT 0x1 +# define CMS_NOCERTS 0x2 +# define CMS_NO_CONTENT_VERIFY 0x4 +# define CMS_NO_ATTR_VERIFY 0x8 +# define CMS_NOSIGS \ + (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) +# define CMS_NOINTERN 0x10 +# define CMS_NO_SIGNER_CERT_VERIFY 0x20 +# define CMS_NOVERIFY 0x20 +# define CMS_DETACHED 0x40 +# define CMS_BINARY 0x80 +# define CMS_NOATTR 0x100 +# define CMS_NOSMIMECAP 0x200 +# define CMS_NOOLDMIMETYPE 0x400 +# define CMS_CRLFEOL 0x800 +# define CMS_STREAM 0x1000 +# define CMS_NOCRL 0x2000 +# define CMS_PARTIAL 0x4000 +# define CMS_REUSE_DIGEST 0x8000 +# define CMS_USE_KEYID 0x10000 +# define CMS_DEBUG_DECRYPT 0x20000 +# define CMS_KEY_PARAM 0x40000 +# define CMS_ASCIICRLF 0x80000 +# define CMS_CADES 0x100000 +# define CMS_USE_ORIGINATOR_KEYID 0x200000 + +const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); + +BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); +int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); + +ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); +int CMS_is_detached(CMS_ContentInfo *cms); +int CMS_set_detached(CMS_ContentInfo *cms, int detached); + +# ifdef OPENSSL_PEM_H +DECLARE_PEM_rw(CMS, CMS_ContentInfo) +# endif +int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); +CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); +int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); + +BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); +int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); +int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, + int flags); +CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +CMS_ContentInfo *SMIME_read_CMS_ex(BIO *bio, int flags, BIO **bcont, CMS_ContentInfo **ci); +int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); + +int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, + unsigned int flags); + +CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags); +CMS_ContentInfo *CMS_sign_ex(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); + +CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, + X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, unsigned int flags); + +int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); +CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); +CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); + +int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create_ex(BIO *in, const EVP_MD *md, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); + +int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, + const unsigned char *key, size_t keylen, + BIO *dcont, BIO *out, unsigned int flags); + +CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags); +CMS_ContentInfo *CMS_EncryptedData_encrypt_ex(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags, + OSSL_LIB_CTX *ctx, + const char *propq); + +int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, + const unsigned char *key, size_t keylen); + +int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); + +int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, + STACK_OF(X509) *certs, + X509_STORE *store, unsigned int flags); + +STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); + +CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags); +CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); + +int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, + BIO *dcont, BIO *out, unsigned int flags); + +int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms, EVP_PKEY *pk, + X509 *cert, X509 *peer); +int CMS_decrypt_set1_key(CMS_ContentInfo *cms, + unsigned char *key, size_t keylen, + const unsigned char *id, size_t idlen); +int CMS_decrypt_set1_password(CMS_ContentInfo *cms, + unsigned char *pass, ossl_ssize_t passlen); + +STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); +int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); +EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo * +CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, + const char *propq); +CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo *CMS_EnvelopedData_create_ex(const EVP_CIPHER *cipher, + OSSL_LIB_CTX *ctx, + const char *propq); + +CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, + X509 *recip, unsigned int flags); +CMS_RecipientInfo *CMS_add1_recipient(CMS_ContentInfo *cms, X509 *recip, + EVP_PKEY *originatorPrivKey, X509 * originator, unsigned int flags); +int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); +int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); +int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, + EVP_PKEY **pk, X509 **recip, + X509_ALGOR **palg); +int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, + unsigned char *key, size_t keylen, + unsigned char *id, size_t idlen, + ASN1_GENERALIZEDTIME *date, + ASN1_OBJECT *otherTypeId, + ASN1_TYPE *otherType); + +int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pid, + ASN1_GENERALIZEDTIME **pdate, + ASN1_OBJECT **potherid, + ASN1_TYPE **pothertype); + +int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, + unsigned char *key, size_t keylen); + +int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, + const unsigned char *id, size_t idlen); + +int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, + unsigned char *pass, + ossl_ssize_t passlen); + +CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, + int iter, int wrap_nid, + int pbe_nid, + unsigned char *pass, + ossl_ssize_t passlen, + const EVP_CIPHER *kekciph); + +int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(const CMS_ContentInfo *cms, CMS_RecipientInfo *ri); + +int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); + +int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); +const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); + +CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); +int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); +int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); +STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); + +CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); +int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); +int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); +STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); + +int CMS_SignedData_init(CMS_ContentInfo *cms); +CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, + X509 *signer, EVP_PKEY *pk, const EVP_MD *md, + unsigned int flags); +EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); +EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); +STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); + +void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); +int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); +int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + unsigned int flags); +void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, + X509 **signer, X509_ALGOR **pdig, + X509_ALGOR **psig); +ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); +int CMS_SignerInfo_sign(CMS_SignerInfo *si); +int CMS_SignerInfo_verify(CMS_SignerInfo *si); +int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); + +int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); +int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, + int algnid, int keysize); +int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); + +int CMS_signed_get_attr_count(const CMS_SignerInfo *si); +int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_signed_get0_data_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); +int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo, + OSSL_LIB_CTX *ctx); + +int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); +void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, + ASN1_STRING **pcid, + int *pallorfirst, + STACK_OF(GENERAL_NAMES) **plist, + STACK_OF(GENERAL_NAMES) **prto); +int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pukm); +STACK_OF(CMS_RecipientEncryptedKey) +*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); + +int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, + X509_ALGOR **pubalg, + ASN1_BIT_STRING **pubkey, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); + +int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, + ASN1_OCTET_STRING **keyid, + ASN1_GENERALIZEDTIME **tm, + CMS_OtherKeyAttribute **other, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, + X509 *cert); +int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +int CMS_RecipientInfo_kari_set0_pkey_and_peer(CMS_RecipientInfo *ri, EVP_PKEY *pk, X509 *peer); +EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); +int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, + CMS_RecipientInfo *ri, + CMS_RecipientEncryptedKey *rek); + +int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, + ASN1_OCTET_STRING *ukm, int keylen); + +/* Backward compatibility for spelling errors. */ +# define CMS_R_UNKNOWN_DIGEST_ALGORITM CMS_R_UNKNOWN_DIGEST_ALGORITHM +# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE \ + CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cmserr.h b/deps/openssl/android/x86/usr/local/include/openssl/cmserr.h index d589f592..d48c2a4a 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cmserr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/cmserr.h @@ -1,115 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMSERR_H -# define HEADER_CMSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_CMSERR_H +# define OPENSSL_CMSERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_CMS -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CMS_strings(void); - -/* - * CMS function codes. - */ -# define CMS_F_CHECK_CONTENT 99 -# define CMS_F_CMS_ADD0_CERT 164 -# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 -# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 -# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 -# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 -# define CMS_F_CMS_ADD1_SIGNER 102 -# define CMS_F_CMS_ADD1_SIGNINGTIME 103 -# define CMS_F_CMS_COMPRESS 104 -# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 -# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 -# define CMS_F_CMS_COPY_CONTENT 107 -# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 -# define CMS_F_CMS_DATA 109 -# define CMS_F_CMS_DATAFINAL 110 -# define CMS_F_CMS_DATAINIT 111 -# define CMS_F_CMS_DECRYPT 112 -# define CMS_F_CMS_DECRYPT_SET1_KEY 113 -# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 -# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 -# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 -# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 -# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 -# define CMS_F_CMS_DIGEST_VERIFY 118 -# define CMS_F_CMS_ENCODE_RECEIPT 161 -# define CMS_F_CMS_ENCRYPT 119 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 179 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 -# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 -# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 -# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 -# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 -# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 -# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 -# define CMS_F_CMS_ENV_ASN1_CTRL 171 -# define CMS_F_CMS_FINAL 127 -# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 -# define CMS_F_CMS_GET0_CONTENT 129 -# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 -# define CMS_F_CMS_GET0_ENVELOPED 131 -# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 -# define CMS_F_CMS_GET0_SIGNED 133 -# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 -# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 -# define CMS_F_CMS_RECEIPT_VERIFY 160 -# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 -# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 -# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 -# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 -# define CMS_F_CMS_SD_ASN1_CTRL 170 -# define CMS_F_CMS_SET1_IAS 176 -# define CMS_F_CMS_SET1_KEYID 177 -# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 -# define CMS_F_CMS_SET_DETACHED 147 -# define CMS_F_CMS_SIGN 148 -# define CMS_F_CMS_SIGNED_DATA_INIT 149 -# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 -# define CMS_F_CMS_SIGNERINFO_SIGN 151 -# define CMS_F_CMS_SIGNERINFO_VERIFY 152 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 -# define CMS_F_CMS_SIGN_RECEIPT 163 -# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 183 -# define CMS_F_CMS_STREAM 155 -# define CMS_F_CMS_UNCOMPRESS 156 -# define CMS_F_CMS_VERIFY 157 -# define CMS_F_KEK_UNWRAP_KEY 180 /* * CMS reason codes. @@ -119,6 +28,8 @@ int ERR_load_CMS_strings(void); # define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 # define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 # define CMS_R_CERTIFICATE_VERIFY_ERROR 100 +# define CMS_R_CIPHER_AEAD_SET_TAG_ERROR 184 +# define CMS_R_CIPHER_GET_TAG 185 # define CMS_R_CIPHER_INITIALISATION_ERROR 101 # define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 # define CMS_R_CMS_DATAFINAL_ERROR 103 @@ -132,14 +43,19 @@ int ERR_load_CMS_strings(void); # define CMS_R_CONTENT_VERIFY_ERROR 109 # define CMS_R_CTRL_ERROR 110 # define CMS_R_CTRL_FAILURE 111 +# define CMS_R_DECODE_ERROR 187 # define CMS_R_DECRYPT_ERROR 112 # define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 # define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 # define CMS_R_ERROR_SETTING_KEY 115 # define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 +# define CMS_R_ESS_SIGNING_CERTID_MISMATCH_ERROR 183 # define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 # define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 # define CMS_R_INVALID_KEY_LENGTH 118 +# define CMS_R_INVALID_LABEL 190 +# define CMS_R_INVALID_OAEP_PARAMETERS 191 +# define CMS_R_KDF_PARAMETER_ERROR 186 # define CMS_R_MD_BIO_INIT_ERROR 119 # define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 # define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 @@ -170,9 +86,11 @@ int ERR_load_CMS_strings(void); # define CMS_R_NO_PUBLIC_KEY 134 # define CMS_R_NO_RECEIPT_REQUEST 168 # define CMS_R_NO_SIGNERS 135 +# define CMS_R_PEER_KEY_ERROR 188 # define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 # define CMS_R_RECEIPT_DECODE_ERROR 169 # define CMS_R_RECIPIENT_ERROR 137 +# define CMS_R_SHARED_INFO_ERROR 189 # define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 # define CMS_R_SIGNFINAL_ERROR 139 # define CMS_R_SMIME_TEXT_ERROR 140 @@ -189,8 +107,10 @@ int ERR_load_CMS_strings(void); # define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 # define CMS_R_UNSUPPORTED_CONTENT_ENCRYPTION_ALGORITHM 194 # define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 +# define CMS_R_UNSUPPORTED_ENCRYPTION_TYPE 192 # define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 # define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 +# define CMS_R_UNSUPPORTED_LABEL_SOURCE 193 # define CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE 155 # define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 # define CMS_R_UNSUPPORTED_TYPE 156 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/comp.h b/deps/openssl/android/x86/usr/local/include/openssl/comp.h index d814d3cf..06ff5810 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/comp.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/comp.h @@ -1,14 +1,20 @@ /* * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_COMP_H -# define HEADER_COMP_H +#ifndef OPENSSL_COMP_H +# define OPENSSL_COMP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_COMP_H +# endif # include @@ -35,11 +41,11 @@ int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, COMP_METHOD *COMP_zlib(void); -#if OPENSSL_API_COMPAT < 0x10100000L -#define COMP_zlib_cleanup() while(0) continue +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define COMP_zlib_cleanup() while(0) continue #endif -# ifdef HEADER_BIO_H +# ifdef OPENSSL_BIO_H # ifdef ZLIB const BIO_METHOD *BIO_f_zlib(void); # endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/comperr.h b/deps/openssl/android/x86/usr/local/include/openssl/comperr.h index 90231e9a..01dd3e6b 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/comperr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/comperr.h @@ -1,37 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_COMPERR_H -# define HEADER_COMPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_COMPERR_H +# define OPENSSL_COMPERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_COMP -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_COMP_strings(void); - -/* - * COMP function codes. - */ -# define COMP_F_BIO_ZLIB_FLUSH 99 -# define COMP_F_BIO_ZLIB_NEW 100 -# define COMP_F_BIO_ZLIB_READ 101 -# define COMP_F_BIO_ZLIB_WRITE 102 -# define COMP_F_COMP_CTX_NEW 103 /* * COMP reason codes. diff --git a/deps/openssl/android/x86/usr/local/include/openssl/conf.h b/deps/openssl/android/x86/usr/local/include/openssl/conf.h index 7336cd2f..e8fcf315 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/conf.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/conf.h @@ -1,21 +1,35 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/conf.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONF_H -# define HEADER_CONF_H + + +#ifndef OPENSSL_CONF_H +# define OPENSSL_CONF_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_H +# endif # include # include # include # include -# include +# include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -27,33 +41,63 @@ typedef struct { char *value; } CONF_VALUE; -DEFINE_STACK_OF(CONF_VALUE) -DEFINE_LHASH_OF(CONF_VALUE); +SKM_DEFINE_STACK_OF_INTERNAL(CONF_VALUE, CONF_VALUE, CONF_VALUE) +#define sk_CONF_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_value(sk, idx) ((CONF_VALUE *)OPENSSL_sk_value(ossl_check_const_CONF_VALUE_sk_type(sk), (idx))) +#define sk_CONF_VALUE_new(cmp) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new(ossl_check_CONF_VALUE_compfunc_type(cmp))) +#define sk_CONF_VALUE_new_null() ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_null()) +#define sk_CONF_VALUE_new_reserve(cmp, n) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_CONF_VALUE_compfunc_type(cmp), (n))) +#define sk_CONF_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CONF_VALUE_sk_type(sk), (n)) +#define sk_CONF_VALUE_free(sk) OPENSSL_sk_free(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_delete(sk, i) ((CONF_VALUE *)OPENSSL_sk_delete(ossl_check_CONF_VALUE_sk_type(sk), (i))) +#define sk_CONF_VALUE_delete_ptr(sk, ptr) ((CONF_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr))) +#define sk_CONF_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_pop(sk) ((CONF_VALUE *)OPENSSL_sk_pop(ossl_check_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_shift(sk) ((CONF_VALUE *)OPENSSL_sk_shift(ossl_check_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CONF_VALUE_sk_type(sk),ossl_check_CONF_VALUE_freefunc_type(freefunc)) +#define sk_CONF_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), (idx)) +#define sk_CONF_VALUE_set(sk, idx, ptr) ((CONF_VALUE *)OPENSSL_sk_set(ossl_check_CONF_VALUE_sk_type(sk), (idx), ossl_check_CONF_VALUE_type(ptr))) +#define sk_CONF_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), pnum) +#define sk_CONF_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_dup(sk) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_dup(ossl_check_const_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_copyfunc_type(copyfunc), ossl_check_CONF_VALUE_freefunc_type(freefunc))) +#define sk_CONF_VALUE_set_cmp_func(sk, cmp) ((sk_CONF_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_compfunc_type(cmp))) +DEFINE_LHASH_OF_INTERNAL(CONF_VALUE); +#define lh_CONF_VALUE_new(hfn, cmp) ((LHASH_OF(CONF_VALUE) *)OPENSSL_LH_new(ossl_check_CONF_VALUE_lh_hashfunc_type(hfn), ossl_check_CONF_VALUE_lh_compfunc_type(cmp))) +#define lh_CONF_VALUE_free(lh) OPENSSL_LH_free(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_flush(lh) OPENSSL_LH_flush(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_insert(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_insert(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_delete(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_delete(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_retrieve(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_retrieve(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_error(lh) OPENSSL_LH_error(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_num_items(lh) OPENSSL_LH_num_items(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_CONF_VALUE_lh_type(lh), dl) +#define lh_CONF_VALUE_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_doallfunc_type(dfn)) + struct conf_st; struct conf_method_st; typedef struct conf_method_st CONF_METHOD; -struct conf_method_st { - const char *name; - CONF *(*create) (CONF_METHOD *meth); - int (*init) (CONF *conf); - int (*destroy) (CONF *conf); - int (*destroy_data) (CONF *conf); - int (*load_bio) (CONF *conf, BIO *bp, long *eline); - int (*dump) (const CONF *conf, BIO *bp); - int (*is_number) (const CONF *conf, char c); - int (*to_int) (const CONF *conf, char c); - int (*load) (CONF *conf, const char *name, long *eline); -}; +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include +# endif /* Module definitions */ - typedef struct conf_imodule_st CONF_IMODULE; typedef struct conf_module_st CONF_MODULE; -DEFINE_STACK_OF(CONF_MODULE) -DEFINE_STACK_OF(CONF_IMODULE) +STACK_OF(CONF_MODULE); +STACK_OF(CONF_IMODULE); /* DSO module function typedefs */ typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); @@ -87,10 +131,11 @@ void CONF_free(LHASH_OF(CONF_VALUE) *conf); int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); #endif int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void OPENSSL_config(const char *config_name); +#endif -DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) - -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OPENSSL_no_config() \ OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) #endif @@ -100,15 +145,13 @@ DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) * that wasn't the case, the above functions would have been replaced */ -struct conf_st { - CONF_METHOD *meth; - void *meth_data; - LHASH_OF(CONF_VALUE) *data; -}; - +CONF *NCONF_new_ex(OSSL_LIB_CTX *libctx, CONF_METHOD *meth); +OSSL_LIB_CTX *NCONF_get0_libctx(const CONF *conf); CONF *NCONF_new(CONF_METHOD *meth); CONF_METHOD *NCONF_default(void); -CONF_METHOD *NCONF_WIN32(void); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CONF_METHOD *NCONF_WIN32(void); +#endif void NCONF_free(CONF *conf); void NCONF_free_data(CONF *conf); @@ -117,6 +160,7 @@ int NCONF_load(CONF *conf, const char *file, long *eline); int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); # endif int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(OPENSSL_CSTRING) *NCONF_get_section_names(const CONF *conf); STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, const char *section); char *NCONF_get_string(const CONF *conf, const char *group, const char *name); @@ -133,11 +177,13 @@ int NCONF_dump_bio(const CONF *conf, BIO *out); int CONF_modules_load(const CONF *cnf, const char *appname, unsigned long flags); +int CONF_modules_load_file_ex(OSSL_LIB_CTX *libctx, const char *filename, + const char *appname, unsigned long flags); int CONF_modules_load_file(const char *filename, const char *appname, unsigned long flags); void CONF_modules_unload(int all); void CONF_modules_finish(void); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define CONF_modules_free() while(0) continue #endif int CONF_module_add(const char *name, conf_init_func *ifunc, diff --git a/deps/openssl/android/x86/usr/local/include/openssl/conf.h.in b/deps/openssl/android/x86/usr/local/include/openssl/conf.h.in new file mode 100644 index 00000000..044b3eb5 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/conf.h.in @@ -0,0 +1,177 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros generate_lhash_macros); +-} + +#ifndef OPENSSL_CONF_H +# define OPENSSL_CONF_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_H +# endif + +# include +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + char *section; + char *name; + char *value; +} CONF_VALUE; + +{- + generate_stack_macros("CONF_VALUE") + .generate_lhash_macros("CONF_VALUE"); +-} + +struct conf_st; +struct conf_method_st; +typedef struct conf_method_st CONF_METHOD; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include +# endif + +/* Module definitions */ +typedef struct conf_imodule_st CONF_IMODULE; +typedef struct conf_module_st CONF_MODULE; + +STACK_OF(CONF_MODULE); +STACK_OF(CONF_IMODULE); + +/* DSO module function typedefs */ +typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); +typedef void conf_finish_func (CONF_IMODULE *md); + +# define CONF_MFLAGS_IGNORE_ERRORS 0x1 +# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 +# define CONF_MFLAGS_SILENT 0x4 +# define CONF_MFLAGS_NO_DSO 0x8 +# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 +# define CONF_MFLAGS_DEFAULT_SECTION 0x20 + +int CONF_set_default_method(CONF_METHOD *meth); +void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); +LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, + long *eline); +# ifndef OPENSSL_NO_STDIO +LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, + long *eline); +# endif +LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, + long *eline); +STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, + const char *section); +char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +void CONF_free(LHASH_OF(CONF_VALUE) *conf); +#ifndef OPENSSL_NO_STDIO +int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); +#endif +int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void OPENSSL_config(const char *config_name); +#endif + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OPENSSL_no_config() \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) +#endif + +/* + * New conf code. The semantics are different from the functions above. If + * that wasn't the case, the above functions would have been replaced + */ + +CONF *NCONF_new_ex(OSSL_LIB_CTX *libctx, CONF_METHOD *meth); +OSSL_LIB_CTX *NCONF_get0_libctx(const CONF *conf); +CONF *NCONF_new(CONF_METHOD *meth); +CONF_METHOD *NCONF_default(void); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CONF_METHOD *NCONF_WIN32(void); +#endif +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf, const char *file, long *eline); +# ifndef OPENSSL_NO_STDIO +int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); +# endif +int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(OPENSSL_CSTRING) *NCONF_get_section_names(const CONF *conf); +STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, + const char *section); +char *NCONF_get_string(const CONF *conf, const char *group, const char *name); +int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, + long *result); +#ifndef OPENSSL_NO_STDIO +int NCONF_dump_fp(const CONF *conf, FILE *out); +#endif +int NCONF_dump_bio(const CONF *conf, BIO *out); + +#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) + +/* Module functions */ + +int CONF_modules_load(const CONF *cnf, const char *appname, + unsigned long flags); +int CONF_modules_load_file_ex(OSSL_LIB_CTX *libctx, const char *filename, + const char *appname, unsigned long flags); +int CONF_modules_load_file(const char *filename, const char *appname, + unsigned long flags); +void CONF_modules_unload(int all); +void CONF_modules_finish(void); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define CONF_modules_free() while(0) continue +#endif +int CONF_module_add(const char *name, conf_init_func *ifunc, + conf_finish_func *ffunc); + +const char *CONF_imodule_get_name(const CONF_IMODULE *md); +const char *CONF_imodule_get_value(const CONF_IMODULE *md); +void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); +void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); +CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); +unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); +void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); +void *CONF_module_get_usr_data(CONF_MODULE *pmod); +void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); + +char *CONF_get1_default_config_file(void); + +int CONF_parse_list(const char *list, int sep, int nospc, + int (*list_cb) (const char *elem, int len, void *usr), + void *arg); + +void OPENSSL_load_builtin_modules(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/conf_api.h b/deps/openssl/android/x86/usr/local/include/openssl/conf_api.h index a0275ad7..ed67d577 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/conf_api.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/conf_api.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONF_API_H -# define HEADER_CONF_API_H +#ifndef OPENSSL_CONF_API_H +# define OPENSSL_CONF_API_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_API_H +# endif # include # include diff --git a/deps/openssl/android/x86/usr/local/include/openssl/conferr.h b/deps/openssl/android/x86/usr/local/include/openssl/conferr.h index 32b92291..496e2e1e 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/conferr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/conferr.h @@ -1,57 +1,30 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONFERR_H -# define HEADER_CONFERR_H +#ifndef OPENSSL_CONFERR_H +# define OPENSSL_CONFERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CONF_strings(void); -/* - * CONF function codes. - */ -# define CONF_F_CONF_DUMP_FP 104 -# define CONF_F_CONF_LOAD 100 -# define CONF_F_CONF_LOAD_FP 103 -# define CONF_F_CONF_PARSE_LIST 119 -# define CONF_F_DEF_LOAD 120 -# define CONF_F_DEF_LOAD_BIO 121 -# define CONF_F_GET_NEXT_FILE 107 -# define CONF_F_MODULE_ADD 122 -# define CONF_F_MODULE_INIT 115 -# define CONF_F_MODULE_LOAD_DSO 117 -# define CONF_F_MODULE_RUN 118 -# define CONF_F_NCONF_DUMP_BIO 105 -# define CONF_F_NCONF_DUMP_FP 106 -# define CONF_F_NCONF_GET_NUMBER_E 112 -# define CONF_F_NCONF_GET_SECTION 108 -# define CONF_F_NCONF_GET_STRING 109 -# define CONF_F_NCONF_LOAD 113 -# define CONF_F_NCONF_LOAD_BIO 110 -# define CONF_F_NCONF_LOAD_FP 114 -# define CONF_F_NCONF_NEW 111 -# define CONF_F_PROCESS_INCLUDE 116 -# define CONF_F_SSL_MODULE_INIT 123 -# define CONF_F_STR_COPY 101 /* * CONF reason codes. */ # define CONF_R_ERROR_LOADING_DSO 110 +# define CONF_R_INVALID_PRAGMA 122 # define CONF_R_LIST_CANNOT_BE_NULL 115 +# define CONF_R_MANDATORY_BRACES_IN_VARIABLE_EXPANSION 123 # define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 # define CONF_R_MISSING_EQUAL_SIGN 101 # define CONF_R_MISSING_INIT_FUNCTION 112 @@ -63,7 +36,9 @@ int ERR_load_CONF_strings(void); # define CONF_R_NO_SUCH_FILE 114 # define CONF_R_NO_VALUE 108 # define CONF_R_NUMBER_TOO_LARGE 121 +# define CONF_R_OPENSSL_CONF_REFERENCES_MISSING_SECTION 124 # define CONF_R_RECURSIVE_DIRECTORY_INCLUDE 111 +# define CONF_R_RELATIVE_PATH 125 # define CONF_R_SSL_COMMAND_SECTION_EMPTY 117 # define CONF_R_SSL_COMMAND_SECTION_NOT_FOUND 118 # define CONF_R_SSL_SECTION_EMPTY 119 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/configuration.h b/deps/openssl/android/x86/usr/local/include/openssl/configuration.h new file mode 100644 index 00000000..1e3f8c46 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/configuration.h @@ -0,0 +1,137 @@ +/* + * WARNING: do not edit! + * Generated by configdata.pm from Configurations/common0.tmpl, Configurations/unix-Makefile.tmpl + * via Makefile.in + * + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFIGURATION_H +# define OPENSSL_CONFIGURATION_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +# ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +# endif + +/* + * OpenSSL was configured with the following options: + */ + +# define OPENSSL_CONFIGURED_API 30100 +# ifndef OPENSSL_RAND_SEED_OS +# define OPENSSL_RAND_SEED_OS +# endif +# ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +# endif +# ifndef OPENSSL_NO_ACVP_TESTS +# define OPENSSL_NO_ACVP_TESTS +# endif +# ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +# endif +# ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +# endif +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +# endif +# ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# endif +# ifndef OPENSSL_NO_DEVCRYPTOENG +# define OPENSSL_NO_DEVCRYPTOENG +# endif +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +# endif +# ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +# endif +# ifndef OPENSSL_NO_EXTERNAL_TESTS +# define OPENSSL_NO_EXTERNAL_TESTS +# endif +# ifndef OPENSSL_NO_FIPS_SECURITYCHECKS +# define OPENSSL_NO_FIPS_SECURITYCHECKS +# endif +# ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +# endif +# ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +# endif +# ifndef OPENSSL_NO_KTLS +# define OPENSSL_NO_KTLS +# endif +# ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +# endif +# ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +# endif +# ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +# endif +# ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +# endif +# ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +# endif +# ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +# endif +# ifndef OPENSSL_NO_TESTS +# define OPENSSL_NO_TESTS +# endif +# ifndef OPENSSL_NO_TRACE +# define OPENSSL_NO_TRACE +# endif +# ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +# endif +# ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +# endif +# ifndef OPENSSL_NO_UPLINK +# define OPENSSL_NO_UPLINK +# endif +# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +# endif +# ifndef OPENSSL_NO_STATIC_ENGINE +# define OPENSSL_NO_STATIC_ENGINE +# endif + + +/* Generate 80386 code? */ +# undef I386_ONLY + +/* + * The following are cipher-specific, but are part of the public API. + */ +# if !defined(OPENSSL_SYS_UEFI) +# define BN_LLONG +/* Only one for the following should be defined */ +# undef SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# define THIRTY_TWO_BIT +# endif + +# define RC4_INT unsigned int + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_CONFIGURATION_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/configuration.h.in b/deps/openssl/android/x86/usr/local/include/openssl/configuration.h.in new file mode 100644 index 00000000..b84dc1df --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/configuration.h.in @@ -0,0 +1,69 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFIGURATION_H +# define OPENSSL_CONFIGURATION_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +# ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +# endif + +/* + * OpenSSL was configured with the following options: + */ + +{- if (@{$config{openssl_sys_defines}}) { + foreach (@{$config{openssl_sys_defines}}) { + $OUT .= "# ifndef $_\n"; + $OUT .= "# define $_ 1\n"; + $OUT .= "# endif\n"; + } + } + foreach (@{$config{openssl_api_defines}}) { + (my $macro, my $value) = $_ =~ /^(.*?)=(.*?)$/; + $OUT .= "# define $macro $value\n"; + } + if (@{$config{openssl_feature_defines}}) { + foreach (@{$config{openssl_feature_defines}}) { + $OUT .= "# ifndef $_\n"; + $OUT .= "# define $_\n"; + $OUT .= "# endif\n"; + } + } + ""; +-} + +/* Generate 80386 code? */ +{- $config{processor} eq "386" ? "# define" : "# undef" -} I386_ONLY + +/* + * The following are cipher-specific, but are part of the public API. + */ +# if !defined(OPENSSL_SYS_UEFI) +{- $config{bn_ll} ? "# define" : "# undef" -} BN_LLONG +/* Only one for the following should be defined */ +{- $config{b64l} ? "# define" : "# undef" -} SIXTY_FOUR_BIT_LONG +{- $config{b64} ? "# define" : "# undef" -} SIXTY_FOUR_BIT +{- $config{b32} ? "# define" : "# undef" -} THIRTY_TWO_BIT +# endif + +# define RC4_INT {- $config{rc4_int} -} + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_CONFIGURATION_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/conftypes.h b/deps/openssl/android/x86/usr/local/include/openssl/conftypes.h new file mode 100644 index 00000000..17cefaa4 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/conftypes.h @@ -0,0 +1,44 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFTYPES_H +# define OPENSSL_CONFTYPES_H +# pragma once + +#ifndef OPENSSL_CONF_H +# include +#endif + +/* + * The contents of this file are deprecated and will be made opaque + */ +struct conf_method_st { + const char *name; + CONF *(*create) (CONF_METHOD *meth); + int (*init) (CONF *conf); + int (*destroy) (CONF *conf); + int (*destroy_data) (CONF *conf); + int (*load_bio) (CONF *conf, BIO *bp, long *eline); + int (*dump) (const CONF *conf, BIO *bp); + int (*is_number) (const CONF *conf, char c); + int (*to_int) (const CONF *conf, char c); + int (*load) (CONF *conf, const char *name, long *eline); +}; + +struct conf_st { + CONF_METHOD *meth; + void *meth_data; + LHASH_OF(CONF_VALUE) *data; + int flag_dollarid; + int flag_abspath; + char *includedir; + OSSL_LIB_CTX *libctx; +}; + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/core.h b/deps/openssl/android/x86/usr/local/include/openssl/core.h new file mode 100644 index 00000000..9683ac70 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/core.h @@ -0,0 +1,233 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_H +# define OPENSSL_CORE_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Base types + * ---------- + * + * These are the types that the OpenSSL core and providers have in common + * to communicate data between them. + */ + +/* Opaque handles to be used with core upcall functions from providers */ +typedef struct ossl_core_handle_st OSSL_CORE_HANDLE; +typedef struct openssl_core_ctx_st OPENSSL_CORE_CTX; +typedef struct ossl_core_bio_st OSSL_CORE_BIO; + +/* + * Dispatch table element. function_id numbers and the functions are defined + * in core_dispatch.h, see macros with 'OSSL_CORE_MAKE_FUNC' in their names. + * + * An array of these is always terminated by function_id == 0 + */ +struct ossl_dispatch_st { + int function_id; + void (*function)(void); +}; + +/* + * Other items, essentially an int<->pointer map element. + * + * We make this type distinct from OSSL_DISPATCH to ensure that dispatch + * tables remain tables with function pointers only. + * + * This is used whenever we need to pass things like a table of error reason + * codes <-> reason string maps, ... + * + * Usage determines which field works as key if any, rather than field order. + * + * An array of these is always terminated by id == 0 && ptr == NULL + */ +struct ossl_item_st { + unsigned int id; + void *ptr; +}; + +/* + * Type to tie together algorithm names, property definition string and + * the algorithm implementation in the form of a dispatch table. + * + * An array of these is always terminated by algorithm_names == NULL + */ +struct ossl_algorithm_st { + const char *algorithm_names; /* key */ + const char *property_definition; /* key */ + const OSSL_DISPATCH *implementation; + const char *algorithm_description; +}; + +/* + * Type to pass object data in a uniform way, without exposing the object + * structure. + * + * An array of these is always terminated by key == NULL + */ +struct ossl_param_st { + const char *key; /* the name of the parameter */ + unsigned int data_type; /* declare what kind of content is in buffer */ + void *data; /* value being passed in or out */ + size_t data_size; /* data size */ + size_t return_size; /* returned content size */ +}; + +/* Currently supported OSSL_PARAM data types */ +/* + * OSSL_PARAM_INTEGER and OSSL_PARAM_UNSIGNED_INTEGER + * are arbitrary length and therefore require an arbitrarily sized buffer, + * since they may be used to pass numbers larger than what is natively + * available. + * + * The number must be buffered in native form, i.e. MSB first on B_ENDIAN + * systems and LSB first on L_ENDIAN systems. This means that arbitrary + * native integers can be stored in the buffer, just make sure that the + * buffer size is correct and the buffer itself is properly aligned (for + * example by having the buffer field point at a C integer). + */ +# define OSSL_PARAM_INTEGER 1 +# define OSSL_PARAM_UNSIGNED_INTEGER 2 +/*- + * OSSL_PARAM_REAL + * is a C binary floating point values in native form and alignment. + */ +# define OSSL_PARAM_REAL 3 +/*- + * OSSL_PARAM_UTF8_STRING + * is a printable string. It is expected to be printed as it is. + */ +# define OSSL_PARAM_UTF8_STRING 4 +/*- + * OSSL_PARAM_OCTET_STRING + * is a string of bytes with no further specification. It is expected to be + * printed as a hexdump. + */ +# define OSSL_PARAM_OCTET_STRING 5 +/*- + * OSSL_PARAM_UTF8_PTR + * is a pointer to a printable string. It is expected to be printed as it is. + * + * The difference between this and OSSL_PARAM_UTF8_STRING is that only pointers + * are manipulated for this type. + * + * This is more relevant for parameter requests, where the responding + * function doesn't need to copy the data to the provided buffer, but + * sets the provided buffer to point at the actual data instead. + * + * WARNING! Using these is FRAGILE, as it assumes that the actual + * data and its location are constant. + * + * EXTRA WARNING! If you are not completely sure you most likely want + * to use the OSSL_PARAM_UTF8_STRING type. + */ +# define OSSL_PARAM_UTF8_PTR 6 +/*- + * OSSL_PARAM_OCTET_PTR + * is a pointer to a string of bytes with no further specification. It is + * expected to be printed as a hexdump. + * + * The difference between this and OSSL_PARAM_OCTET_STRING is that only pointers + * are manipulated for this type. + * + * This is more relevant for parameter requests, where the responding + * function doesn't need to copy the data to the provided buffer, but + * sets the provided buffer to point at the actual data instead. + * + * WARNING! Using these is FRAGILE, as it assumes that the actual + * data and its location are constant. + * + * EXTRA WARNING! If you are not completely sure you most likely want + * to use the OSSL_PARAM_OCTET_STRING type. + */ +# define OSSL_PARAM_OCTET_PTR 7 + +/* + * Typedef for the thread stop handling callback. Used both internally and by + * providers. + * + * Providers may register for notifications about threads stopping by + * registering a callback to hear about such events. Providers register the + * callback using the OSSL_FUNC_CORE_THREAD_START function in the |in| dispatch + * table passed to OSSL_provider_init(). The arg passed back to a provider will + * be the provider side context object. + */ +typedef void (*OSSL_thread_stop_handler_fn)(void *arg); + + +/*- + * Provider entry point + * -------------------- + * + * This function is expected to be present in any dynamically loadable + * provider module. By definition, if this function doesn't exist in a + * module, that module is not an OpenSSL provider module. + */ +/*- + * |handle| pointer to opaque type OSSL_CORE_HANDLE. This can be used + * together with some functions passed via |in| to query data. + * |in| is the array of functions that the Core passes to the provider. + * |out| will be the array of base functions that the provider passes + * back to the Core. + * |provctx| a provider side context object, optionally created if the + * provider needs it. This value is passed to other provider + * functions, notably other context constructors. + */ +typedef int (OSSL_provider_init_fn)(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in, + const OSSL_DISPATCH **out, + void **provctx); +# ifdef __VMS +# pragma names save +# pragma names uppercase,truncated +# endif +OPENSSL_EXPORT OSSL_provider_init_fn OSSL_provider_init; +# ifdef __VMS +# pragma names restore +# endif + +/* + * Generic callback function signature. + * + * The expectation is that any provider function that wants to offer + * a callback / hook can do so by taking an argument with this type, + * as well as a pointer to caller-specific data. When calling the + * callback, the provider function can populate an OSSL_PARAM array + * with data of its choice and pass that in the callback call, along + * with the caller data argument. + * + * libcrypto may use the OSSL_PARAM array to create arguments for an + * application callback it knows about. + */ +typedef int (OSSL_CALLBACK)(const OSSL_PARAM params[], void *arg); +typedef int (OSSL_INOUT_CALLBACK)(const OSSL_PARAM in_params[], + OSSL_PARAM out_params[], void *arg); +/* + * Passphrase callback function signature + * + * This is similar to the generic callback function above, but adds a + * result parameter. + */ +typedef int (OSSL_PASSPHRASE_CALLBACK)(char *pass, size_t pass_size, + size_t *pass_len, + const OSSL_PARAM params[], void *arg); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/core_dispatch.h b/deps/openssl/android/x86/usr/local/include/openssl/core_dispatch.h new file mode 100644 index 00000000..11e3c861 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/core_dispatch.h @@ -0,0 +1,943 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_NUMBERS_H +# define OPENSSL_CORE_NUMBERS_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Identities + * ---------- + * + * All series start with 1, to allow 0 to be an array terminator. + * For any FUNC identity, we also provide a function signature typedef + * and a static inline function to extract a function pointer from a + * OSSL_DISPATCH element in a type safe manner. + * + * Names: + * for any function base name 'foo' (uppercase form 'FOO'), we will have + * the following: + * - a macro for the identity with the name OSSL_FUNC_'FOO' or derivatives + * thereof (to be specified further down) + * - a function signature typedef with the name OSSL_FUNC_'foo'_fn + * - a function pointer extractor function with the name OSSL_FUNC_'foo' + */ + +/* + * Helper macro to create the function signature typedef and the extractor + * |type| is the return-type of the function, |name| is the name of the + * function to fetch, and |args| is a parenthesized list of parameters + * for the function (that is, it is |name|'s function signature). + * Note: This is considered a "reserved" internal macro. Applications should + * not use this or assume its existence. + */ +#define OSSL_CORE_MAKE_FUNC(type,name,args) \ + typedef type (OSSL_FUNC_##name##_fn)args; \ + static ossl_unused ossl_inline \ + OSSL_FUNC_##name##_fn *OSSL_FUNC_##name(const OSSL_DISPATCH *opf) \ + { \ + return (OSSL_FUNC_##name##_fn *)opf->function; \ + } + +/* + * Core function identities, for the two OSSL_DISPATCH tables being passed + * in the OSSL_provider_init call. + * + * 0 serves as a marker for the end of the OSSL_DISPATCH array, and must + * therefore NEVER be used as a function identity. + */ +/* Functions provided by the Core to the provider, reserved numbers 1-1023 */ +# define OSSL_FUNC_CORE_GETTABLE_PARAMS 1 +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + core_gettable_params,(const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_GET_PARAMS 2 +OSSL_CORE_MAKE_FUNC(int,core_get_params,(const OSSL_CORE_HANDLE *prov, + OSSL_PARAM params[])) +# define OSSL_FUNC_CORE_THREAD_START 3 +OSSL_CORE_MAKE_FUNC(int,core_thread_start,(const OSSL_CORE_HANDLE *prov, + OSSL_thread_stop_handler_fn handfn, + void *arg)) +# define OSSL_FUNC_CORE_GET_LIBCTX 4 +OSSL_CORE_MAKE_FUNC(OPENSSL_CORE_CTX *,core_get_libctx, + (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_NEW_ERROR 5 +OSSL_CORE_MAKE_FUNC(void,core_new_error,(const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_SET_ERROR_DEBUG 6 +OSSL_CORE_MAKE_FUNC(void,core_set_error_debug, + (const OSSL_CORE_HANDLE *prov, + const char *file, int line, const char *func)) +# define OSSL_FUNC_CORE_VSET_ERROR 7 +OSSL_CORE_MAKE_FUNC(void,core_vset_error, + (const OSSL_CORE_HANDLE *prov, + uint32_t reason, const char *fmt, va_list args)) +# define OSSL_FUNC_CORE_SET_ERROR_MARK 8 +OSSL_CORE_MAKE_FUNC(int, core_set_error_mark, (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK 9 +OSSL_CORE_MAKE_FUNC(int, core_clear_last_error_mark, + (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_POP_ERROR_TO_MARK 10 +OSSL_CORE_MAKE_FUNC(int, core_pop_error_to_mark, (const OSSL_CORE_HANDLE *prov)) + + +/* Functions to access the OBJ database */ + +#define OSSL_FUNC_CORE_OBJ_ADD_SIGID 11 +#define OSSL_FUNC_CORE_OBJ_CREATE 12 + +OSSL_CORE_MAKE_FUNC(int, core_obj_add_sigid, + (const OSSL_CORE_HANDLE *prov, const char *sign_name, + const char *digest_name, const char *pkey_name)) +OSSL_CORE_MAKE_FUNC(int, core_obj_create, + (const OSSL_CORE_HANDLE *prov, const char *oid, + const char *sn, const char *ln)) + +/* Memory allocation, freeing, clearing. */ +#define OSSL_FUNC_CRYPTO_MALLOC 20 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_malloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_ZALLOC 21 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_zalloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_FREE 22 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_free, (void *ptr, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_CLEAR_FREE 23 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_clear_free, (void *ptr, size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_REALLOC 24 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_realloc, (void *addr, size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_CLEAR_REALLOC 25 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_clear_realloc, (void *addr, size_t old_num, size_t num, + const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_MALLOC 26 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_secure_malloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_ZALLOC 27 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_secure_zalloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_FREE 28 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_secure_free, (void *ptr, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_CLEAR_FREE 29 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_secure_clear_free, (void *ptr, size_t num, const char *file, + int line)) +#define OSSL_FUNC_CRYPTO_SECURE_ALLOCATED 30 +OSSL_CORE_MAKE_FUNC(int, + CRYPTO_secure_allocated, (const void *ptr)) +#define OSSL_FUNC_OPENSSL_CLEANSE 31 +OSSL_CORE_MAKE_FUNC(void, + OPENSSL_cleanse, (void *ptr, size_t len)) + +/* Bio functions provided by the core */ +#define OSSL_FUNC_BIO_NEW_FILE 40 +#define OSSL_FUNC_BIO_NEW_MEMBUF 41 +#define OSSL_FUNC_BIO_READ_EX 42 +#define OSSL_FUNC_BIO_WRITE_EX 43 +#define OSSL_FUNC_BIO_UP_REF 44 +#define OSSL_FUNC_BIO_FREE 45 +#define OSSL_FUNC_BIO_VPRINTF 46 +#define OSSL_FUNC_BIO_VSNPRINTF 47 +#define OSSL_FUNC_BIO_PUTS 48 +#define OSSL_FUNC_BIO_GETS 49 +#define OSSL_FUNC_BIO_CTRL 50 + + +OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_file, (const char *filename, + const char *mode)) +OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_membuf, (const void *buf, int len)) +OSSL_CORE_MAKE_FUNC(int, BIO_read_ex, (OSSL_CORE_BIO *bio, void *data, + size_t data_len, size_t *bytes_read)) +OSSL_CORE_MAKE_FUNC(int, BIO_write_ex, (OSSL_CORE_BIO *bio, const void *data, + size_t data_len, size_t *written)) +OSSL_CORE_MAKE_FUNC(int, BIO_gets, (OSSL_CORE_BIO *bio, char *buf, int size)) +OSSL_CORE_MAKE_FUNC(int, BIO_puts, (OSSL_CORE_BIO *bio, const char *str)) +OSSL_CORE_MAKE_FUNC(int, BIO_up_ref, (OSSL_CORE_BIO *bio)) +OSSL_CORE_MAKE_FUNC(int, BIO_free, (OSSL_CORE_BIO *bio)) +OSSL_CORE_MAKE_FUNC(int, BIO_vprintf, (OSSL_CORE_BIO *bio, const char *format, + va_list args)) +OSSL_CORE_MAKE_FUNC(int, BIO_vsnprintf, + (char *buf, size_t n, const char *fmt, va_list args)) +OSSL_CORE_MAKE_FUNC(int, BIO_ctrl, (OSSL_CORE_BIO *bio, + int cmd, long num, void *ptr)) + +#define OSSL_FUNC_SELF_TEST_CB 100 +OSSL_CORE_MAKE_FUNC(void, self_test_cb, (OPENSSL_CORE_CTX *ctx, OSSL_CALLBACK **cb, + void **cbarg)) + +/* Functions to get seed material from the operating system */ +#define OSSL_FUNC_GET_ENTROPY 101 +#define OSSL_FUNC_CLEANUP_ENTROPY 102 +#define OSSL_FUNC_GET_NONCE 103 +#define OSSL_FUNC_CLEANUP_NONCE 104 +OSSL_CORE_MAKE_FUNC(size_t, get_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, int entropy, + size_t min_len, size_t max_len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) +OSSL_CORE_MAKE_FUNC(size_t, get_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, size_t min_len, + size_t max_len, const void *salt, + size_t salt_len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) + +/* Functions to access the core's providers */ +#define OSSL_FUNC_PROVIDER_REGISTER_CHILD_CB 105 +#define OSSL_FUNC_PROVIDER_DEREGISTER_CHILD_CB 106 +#define OSSL_FUNC_PROVIDER_NAME 107 +#define OSSL_FUNC_PROVIDER_GET0_PROVIDER_CTX 108 +#define OSSL_FUNC_PROVIDER_GET0_DISPATCH 109 +#define OSSL_FUNC_PROVIDER_UP_REF 110 +#define OSSL_FUNC_PROVIDER_FREE 111 + +OSSL_CORE_MAKE_FUNC(int, provider_register_child_cb, + (const OSSL_CORE_HANDLE *handle, + int (*create_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata), + int (*remove_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata), + int (*global_props_cb)(const char *props, void *cbdata), + void *cbdata)) +OSSL_CORE_MAKE_FUNC(void, provider_deregister_child_cb, + (const OSSL_CORE_HANDLE *handle)) +OSSL_CORE_MAKE_FUNC(const char *, provider_name, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(void *, provider_get0_provider_ctx, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(const OSSL_DISPATCH *, provider_get0_dispatch, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(int, provider_up_ref, + (const OSSL_CORE_HANDLE *prov, int activate)) +OSSL_CORE_MAKE_FUNC(int, provider_free, + (const OSSL_CORE_HANDLE *prov, int deactivate)) + +/* Functions provided by the provider to the Core, reserved numbers 1024-1535 */ +# define OSSL_FUNC_PROVIDER_TEARDOWN 1024 +OSSL_CORE_MAKE_FUNC(void,provider_teardown,(void *provctx)) +# define OSSL_FUNC_PROVIDER_GETTABLE_PARAMS 1025 +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + provider_gettable_params,(void *provctx)) +# define OSSL_FUNC_PROVIDER_GET_PARAMS 1026 +OSSL_CORE_MAKE_FUNC(int,provider_get_params,(void *provctx, + OSSL_PARAM params[])) +# define OSSL_FUNC_PROVIDER_QUERY_OPERATION 1027 +OSSL_CORE_MAKE_FUNC(const OSSL_ALGORITHM *,provider_query_operation, + (void *provctx, int operation_id, int *no_store)) +# define OSSL_FUNC_PROVIDER_UNQUERY_OPERATION 1028 +OSSL_CORE_MAKE_FUNC(void, provider_unquery_operation, + (void *provctx, int operation_id, const OSSL_ALGORITHM *)) +# define OSSL_FUNC_PROVIDER_GET_REASON_STRINGS 1029 +OSSL_CORE_MAKE_FUNC(const OSSL_ITEM *,provider_get_reason_strings, + (void *provctx)) +# define OSSL_FUNC_PROVIDER_GET_CAPABILITIES 1030 +OSSL_CORE_MAKE_FUNC(int, provider_get_capabilities, (void *provctx, + const char *capability, OSSL_CALLBACK *cb, void *arg)) +# define OSSL_FUNC_PROVIDER_SELF_TEST 1031 +OSSL_CORE_MAKE_FUNC(int, provider_self_test, (void *provctx)) + +/* Operations */ + +# define OSSL_OP_DIGEST 1 +# define OSSL_OP_CIPHER 2 /* Symmetric Ciphers */ +# define OSSL_OP_MAC 3 +# define OSSL_OP_KDF 4 +# define OSSL_OP_RAND 5 +# define OSSL_OP_KEYMGMT 10 +# define OSSL_OP_KEYEXCH 11 +# define OSSL_OP_SIGNATURE 12 +# define OSSL_OP_ASYM_CIPHER 13 +# define OSSL_OP_KEM 14 +/* New section for non-EVP operations */ +# define OSSL_OP_ENCODER 20 +# define OSSL_OP_DECODER 21 +# define OSSL_OP_STORE 22 +/* Highest known operation number */ +# define OSSL_OP__HIGHEST 22 + +/* Digests */ + +# define OSSL_FUNC_DIGEST_NEWCTX 1 +# define OSSL_FUNC_DIGEST_INIT 2 +# define OSSL_FUNC_DIGEST_UPDATE 3 +# define OSSL_FUNC_DIGEST_FINAL 4 +# define OSSL_FUNC_DIGEST_DIGEST 5 +# define OSSL_FUNC_DIGEST_FREECTX 6 +# define OSSL_FUNC_DIGEST_DUPCTX 7 +# define OSSL_FUNC_DIGEST_GET_PARAMS 8 +# define OSSL_FUNC_DIGEST_SET_CTX_PARAMS 9 +# define OSSL_FUNC_DIGEST_GET_CTX_PARAMS 10 +# define OSSL_FUNC_DIGEST_GETTABLE_PARAMS 11 +# define OSSL_FUNC_DIGEST_SETTABLE_CTX_PARAMS 12 +# define OSSL_FUNC_DIGEST_GETTABLE_CTX_PARAMS 13 + +OSSL_CORE_MAKE_FUNC(void *, digest_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, digest_init, (void *dctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_update, + (void *dctx, const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, digest_final, + (void *dctx, + unsigned char *out, size_t *outl, size_t outsz)) +OSSL_CORE_MAKE_FUNC(int, digest_digest, + (void *provctx, const unsigned char *in, size_t inl, + unsigned char *out, size_t *outl, size_t outsz)) + +OSSL_CORE_MAKE_FUNC(void, digest_freectx, (void *dctx)) +OSSL_CORE_MAKE_FUNC(void *, digest_dupctx, (void *dctx)) + +OSSL_CORE_MAKE_FUNC(int, digest_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_set_ctx_params, + (void *vctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_get_ctx_params, + (void *vctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_settable_ctx_params, + (void *dctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_ctx_params, + (void *dctx, void *provctx)) + +/* Symmetric Ciphers */ + +# define OSSL_FUNC_CIPHER_NEWCTX 1 +# define OSSL_FUNC_CIPHER_ENCRYPT_INIT 2 +# define OSSL_FUNC_CIPHER_DECRYPT_INIT 3 +# define OSSL_FUNC_CIPHER_UPDATE 4 +# define OSSL_FUNC_CIPHER_FINAL 5 +# define OSSL_FUNC_CIPHER_CIPHER 6 +# define OSSL_FUNC_CIPHER_FREECTX 7 +# define OSSL_FUNC_CIPHER_DUPCTX 8 +# define OSSL_FUNC_CIPHER_GET_PARAMS 9 +# define OSSL_FUNC_CIPHER_GET_CTX_PARAMS 10 +# define OSSL_FUNC_CIPHER_SET_CTX_PARAMS 11 +# define OSSL_FUNC_CIPHER_GETTABLE_PARAMS 12 +# define OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS 13 +# define OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS 14 + +OSSL_CORE_MAKE_FUNC(void *, cipher_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, cipher_encrypt_init, (void *cctx, + const unsigned char *key, + size_t keylen, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_decrypt_init, (void *cctx, + const unsigned char *key, + size_t keylen, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_update, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize, + const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, cipher_final, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize)) +OSSL_CORE_MAKE_FUNC(int, cipher_cipher, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize, + const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(void, cipher_freectx, (void *cctx)) +OSSL_CORE_MAKE_FUNC(void *, cipher_dupctx, (void *cctx)) +OSSL_CORE_MAKE_FUNC(int, cipher_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_get_ctx_params, (void *cctx, + OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_set_ctx_params, (void *cctx, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_settable_ctx_params, + (void *cctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_ctx_params, + (void *cctx, void *provctx)) + +/* MACs */ + +# define OSSL_FUNC_MAC_NEWCTX 1 +# define OSSL_FUNC_MAC_DUPCTX 2 +# define OSSL_FUNC_MAC_FREECTX 3 +# define OSSL_FUNC_MAC_INIT 4 +# define OSSL_FUNC_MAC_UPDATE 5 +# define OSSL_FUNC_MAC_FINAL 6 +# define OSSL_FUNC_MAC_GET_PARAMS 7 +# define OSSL_FUNC_MAC_GET_CTX_PARAMS 8 +# define OSSL_FUNC_MAC_SET_CTX_PARAMS 9 +# define OSSL_FUNC_MAC_GETTABLE_PARAMS 10 +# define OSSL_FUNC_MAC_GETTABLE_CTX_PARAMS 11 +# define OSSL_FUNC_MAC_SETTABLE_CTX_PARAMS 12 + +OSSL_CORE_MAKE_FUNC(void *, mac_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, mac_dupctx, (void *src)) +OSSL_CORE_MAKE_FUNC(void, mac_freectx, (void *mctx)) +OSSL_CORE_MAKE_FUNC(int, mac_init, (void *mctx, const unsigned char *key, + size_t keylen, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_update, + (void *mctx, const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, mac_final, + (void *mctx, + unsigned char *out, size_t *outl, size_t outsize)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_ctx_params, + (void *mctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_settable_ctx_params, + (void *mctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, mac_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_get_ctx_params, + (void *mctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_set_ctx_params, + (void *mctx, const OSSL_PARAM params[])) + +/* KDFs and PRFs */ + +# define OSSL_FUNC_KDF_NEWCTX 1 +# define OSSL_FUNC_KDF_DUPCTX 2 +# define OSSL_FUNC_KDF_FREECTX 3 +# define OSSL_FUNC_KDF_RESET 4 +# define OSSL_FUNC_KDF_DERIVE 5 +# define OSSL_FUNC_KDF_GETTABLE_PARAMS 6 +# define OSSL_FUNC_KDF_GETTABLE_CTX_PARAMS 7 +# define OSSL_FUNC_KDF_SETTABLE_CTX_PARAMS 8 +# define OSSL_FUNC_KDF_GET_PARAMS 9 +# define OSSL_FUNC_KDF_GET_CTX_PARAMS 10 +# define OSSL_FUNC_KDF_SET_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, kdf_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, kdf_dupctx, (void *src)) +OSSL_CORE_MAKE_FUNC(void, kdf_freectx, (void *kctx)) +OSSL_CORE_MAKE_FUNC(void, kdf_reset, (void *kctx)) +OSSL_CORE_MAKE_FUNC(int, kdf_derive, (void *kctx, unsigned char *key, + size_t keylen, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_ctx_params, + (void *kctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_settable_ctx_params, + (void *kctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kdf_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kdf_get_ctx_params, + (void *kctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kdf_set_ctx_params, + (void *kctx, const OSSL_PARAM params[])) + +/* RAND */ + +# define OSSL_FUNC_RAND_NEWCTX 1 +# define OSSL_FUNC_RAND_FREECTX 2 +# define OSSL_FUNC_RAND_INSTANTIATE 3 +# define OSSL_FUNC_RAND_UNINSTANTIATE 4 +# define OSSL_FUNC_RAND_GENERATE 5 +# define OSSL_FUNC_RAND_RESEED 6 +# define OSSL_FUNC_RAND_NONCE 7 +# define OSSL_FUNC_RAND_ENABLE_LOCKING 8 +# define OSSL_FUNC_RAND_LOCK 9 +# define OSSL_FUNC_RAND_UNLOCK 10 +# define OSSL_FUNC_RAND_GETTABLE_PARAMS 11 +# define OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS 12 +# define OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS 13 +# define OSSL_FUNC_RAND_GET_PARAMS 14 +# define OSSL_FUNC_RAND_GET_CTX_PARAMS 15 +# define OSSL_FUNC_RAND_SET_CTX_PARAMS 16 +# define OSSL_FUNC_RAND_VERIFY_ZEROIZATION 17 +# define OSSL_FUNC_RAND_GET_SEED 18 +# define OSSL_FUNC_RAND_CLEAR_SEED 19 + +OSSL_CORE_MAKE_FUNC(void *,rand_newctx, + (void *provctx, void *parent, + const OSSL_DISPATCH *parent_calls)) +OSSL_CORE_MAKE_FUNC(void,rand_freectx, (void *vctx)) +OSSL_CORE_MAKE_FUNC(int,rand_instantiate, + (void *vdrbg, unsigned int strength, + int prediction_resistance, + const unsigned char *pstr, size_t pstr_len, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_uninstantiate, (void *vdrbg)) +OSSL_CORE_MAKE_FUNC(int,rand_generate, + (void *vctx, unsigned char *out, size_t outlen, + unsigned int strength, int prediction_resistance, + const unsigned char *addin, size_t addin_len)) +OSSL_CORE_MAKE_FUNC(int,rand_reseed, + (void *vctx, int prediction_resistance, + const unsigned char *ent, size_t ent_len, + const unsigned char *addin, size_t addin_len)) +OSSL_CORE_MAKE_FUNC(size_t,rand_nonce, + (void *vctx, unsigned char *out, unsigned int strength, + size_t min_noncelen, size_t max_noncelen)) +OSSL_CORE_MAKE_FUNC(int,rand_enable_locking, (void *vctx)) +OSSL_CORE_MAKE_FUNC(int,rand_lock, (void *vctx)) +OSSL_CORE_MAKE_FUNC(void,rand_unlock, (void *vctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_ctx_params, + (void *vctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_settable_ctx_params, + (void *vctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int,rand_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_get_ctx_params, + (void *vctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_set_ctx_params, + (void *vctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(void,rand_set_callbacks, + (void *vctx, OSSL_INOUT_CALLBACK *get_entropy, + OSSL_CALLBACK *cleanup_entropy, + OSSL_INOUT_CALLBACK *get_nonce, + OSSL_CALLBACK *cleanup_nonce, void *arg)) +OSSL_CORE_MAKE_FUNC(int,rand_verify_zeroization, + (void *vctx)) +OSSL_CORE_MAKE_FUNC(size_t,rand_get_seed, + (void *vctx, unsigned char **buffer, + int entropy, size_t min_len, size_t max_len, + int prediction_resistance, + const unsigned char *adin, size_t adin_len)) +OSSL_CORE_MAKE_FUNC(void,rand_clear_seed, + (void *vctx, unsigned char *buffer, size_t b_len)) + +/*- + * Key management + * + * The Key Management takes care of provider side key objects, and includes + * all current functionality to create them, destroy them, set parameters + * and key material, etc, essentially everything that manipulates the keys + * themselves and their parameters. + * + * The key objects are commonly referred to as |keydata|, and it MUST be able + * to contain parameters if the key has any, the public key and the private + * key. All parts are optional, but their presence determines what can be + * done with the key object in terms of encryption, signature, and so on. + * The assumption from libcrypto is that the key object contains any of the + * following data combinations: + * + * - parameters only + * - public key only + * - public key + private key + * - parameters + public key + * - parameters + public key + private key + * + * What "parameters", "public key" and "private key" means in detail is left + * to the implementation. In the case of DH and DSA, they would typically + * include domain parameters, while for certain variants of RSA, they would + * typically include PSS or OAEP parameters. + * + * Key objects are created with OSSL_FUNC_keymgmt_new() and destroyed with + * OSSL_FUNC_keymgmt_free(). Key objects can have data filled in with + * OSSL_FUNC_keymgmt_import(). + * + * Three functions are made available to check what selection of data is + * present in a key object: OSSL_FUNC_keymgmt_has_parameters(), + * OSSL_FUNC_keymgmt_has_public_key(), and OSSL_FUNC_keymgmt_has_private_key(), + */ + +/* Key data subset selection - individual bits */ +# define OSSL_KEYMGMT_SELECT_PRIVATE_KEY 0x01 +# define OSSL_KEYMGMT_SELECT_PUBLIC_KEY 0x02 +# define OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS 0x04 +# define OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS 0x80 + +/* Key data subset selection - combinations */ +# define OSSL_KEYMGMT_SELECT_ALL_PARAMETERS \ + ( OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS \ + | OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS) +# define OSSL_KEYMGMT_SELECT_KEYPAIR \ + ( OSSL_KEYMGMT_SELECT_PRIVATE_KEY | OSSL_KEYMGMT_SELECT_PUBLIC_KEY ) +# define OSSL_KEYMGMT_SELECT_ALL \ + ( OSSL_KEYMGMT_SELECT_KEYPAIR | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS ) + +# define OSSL_KEYMGMT_VALIDATE_FULL_CHECK 0 +# define OSSL_KEYMGMT_VALIDATE_QUICK_CHECK 1 + +/* Basic key object creation */ +# define OSSL_FUNC_KEYMGMT_NEW 1 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_new, (void *provctx)) + +/* Generation, a more complex constructor */ +# define OSSL_FUNC_KEYMGMT_GEN_INIT 2 +# define OSSL_FUNC_KEYMGMT_GEN_SET_TEMPLATE 3 +# define OSSL_FUNC_KEYMGMT_GEN_SET_PARAMS 4 +# define OSSL_FUNC_KEYMGMT_GEN_SETTABLE_PARAMS 5 +# define OSSL_FUNC_KEYMGMT_GEN 6 +# define OSSL_FUNC_KEYMGMT_GEN_CLEANUP 7 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen_init, + (void *provctx, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_template, + (void *genctx, void *templ)) +OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_params, + (void *genctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + keymgmt_gen_settable_params, + (void *genctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen, + (void *genctx, OSSL_CALLBACK *cb, void *cbarg)) +OSSL_CORE_MAKE_FUNC(void, keymgmt_gen_cleanup, (void *genctx)) + +/* Key loading by object reference */ +# define OSSL_FUNC_KEYMGMT_LOAD 8 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_load, + (const void *reference, size_t reference_sz)) + +/* Basic key object destruction */ +# define OSSL_FUNC_KEYMGMT_FREE 10 +OSSL_CORE_MAKE_FUNC(void, keymgmt_free, (void *keydata)) + +/* Key object information, with discovery */ +#define OSSL_FUNC_KEYMGMT_GET_PARAMS 11 +#define OSSL_FUNC_KEYMGMT_GETTABLE_PARAMS 12 +OSSL_CORE_MAKE_FUNC(int, keymgmt_get_params, + (void *keydata, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_gettable_params, + (void *provctx)) + +#define OSSL_FUNC_KEYMGMT_SET_PARAMS 13 +#define OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS 14 +OSSL_CORE_MAKE_FUNC(int, keymgmt_set_params, + (void *keydata, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_settable_params, + (void *provctx)) + +/* Key checks - discovery of supported operations */ +# define OSSL_FUNC_KEYMGMT_QUERY_OPERATION_NAME 20 +OSSL_CORE_MAKE_FUNC(const char *, keymgmt_query_operation_name, + (int operation_id)) + +/* Key checks - key data content checks */ +# define OSSL_FUNC_KEYMGMT_HAS 21 +OSSL_CORE_MAKE_FUNC(int, keymgmt_has, (const void *keydata, int selection)) + +/* Key checks - validation */ +# define OSSL_FUNC_KEYMGMT_VALIDATE 22 +OSSL_CORE_MAKE_FUNC(int, keymgmt_validate, (const void *keydata, int selection, + int checktype)) + +/* Key checks - matching */ +# define OSSL_FUNC_KEYMGMT_MATCH 23 +OSSL_CORE_MAKE_FUNC(int, keymgmt_match, + (const void *keydata1, const void *keydata2, + int selection)) + +/* Import and export functions, with discovery */ +# define OSSL_FUNC_KEYMGMT_IMPORT 40 +# define OSSL_FUNC_KEYMGMT_IMPORT_TYPES 41 +# define OSSL_FUNC_KEYMGMT_EXPORT 42 +# define OSSL_FUNC_KEYMGMT_EXPORT_TYPES 43 +OSSL_CORE_MAKE_FUNC(int, keymgmt_import, + (void *keydata, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_import_types, + (int selection)) +OSSL_CORE_MAKE_FUNC(int, keymgmt_export, + (void *keydata, int selection, + OSSL_CALLBACK *param_cb, void *cbarg)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types, + (int selection)) + +/* Dup function, constructor */ +# define OSSL_FUNC_KEYMGMT_DUP 44 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_dup, + (const void *keydata_from, int selection)) + +/* Key Exchange */ + +# define OSSL_FUNC_KEYEXCH_NEWCTX 1 +# define OSSL_FUNC_KEYEXCH_INIT 2 +# define OSSL_FUNC_KEYEXCH_DERIVE 3 +# define OSSL_FUNC_KEYEXCH_SET_PEER 4 +# define OSSL_FUNC_KEYEXCH_FREECTX 5 +# define OSSL_FUNC_KEYEXCH_DUPCTX 6 +# define OSSL_FUNC_KEYEXCH_SET_CTX_PARAMS 7 +# define OSSL_FUNC_KEYEXCH_SETTABLE_CTX_PARAMS 8 +# define OSSL_FUNC_KEYEXCH_GET_CTX_PARAMS 9 +# define OSSL_FUNC_KEYEXCH_GETTABLE_CTX_PARAMS 10 + +OSSL_CORE_MAKE_FUNC(void *, keyexch_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, keyexch_derive, (void *ctx, unsigned char *secret, + size_t *secretlen, size_t outlen)) +OSSL_CORE_MAKE_FUNC(int, keyexch_set_peer, (void *ctx, void *provkey)) +OSSL_CORE_MAKE_FUNC(void, keyexch_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, keyexch_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_set_ctx_params, (void *ctx, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_settable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_get_ctx_params, (void *ctx, + OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_gettable_ctx_params, + (void *ctx, void *provctx)) + +/* Signature */ + +# define OSSL_FUNC_SIGNATURE_NEWCTX 1 +# define OSSL_FUNC_SIGNATURE_SIGN_INIT 2 +# define OSSL_FUNC_SIGNATURE_SIGN 3 +# define OSSL_FUNC_SIGNATURE_VERIFY_INIT 4 +# define OSSL_FUNC_SIGNATURE_VERIFY 5 +# define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER_INIT 6 +# define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER 7 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_INIT 8 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_UPDATE 9 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_FINAL 10 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN 11 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_INIT 12 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_UPDATE 13 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_FINAL 14 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY 15 +# define OSSL_FUNC_SIGNATURE_FREECTX 16 +# define OSSL_FUNC_SIGNATURE_DUPCTX 17 +# define OSSL_FUNC_SIGNATURE_GET_CTX_PARAMS 18 +# define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_PARAMS 19 +# define OSSL_FUNC_SIGNATURE_SET_CTX_PARAMS 20 +# define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_PARAMS 21 +# define OSSL_FUNC_SIGNATURE_GET_CTX_MD_PARAMS 22 +# define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_MD_PARAMS 23 +# define OSSL_FUNC_SIGNATURE_SET_CTX_MD_PARAMS 24 +# define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_MD_PARAMS 25 + +OSSL_CORE_MAKE_FUNC(void *, signature_newctx, (void *provctx, + const char *propq)) +OSSL_CORE_MAKE_FUNC(int, signature_sign_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_sign, (void *ctx, unsigned char *sig, + size_t *siglen, size_t sigsize, + const unsigned char *tbs, + size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_verify_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_verify, (void *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_verify_recover_init, + (void *ctx, void *provkey, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_verify_recover, + (void *ctx, unsigned char *rout, size_t *routlen, + size_t routsize, const unsigned char *sig, size_t siglen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_init, + (void *ctx, const char *mdname, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_update, + (void *ctx, const unsigned char *data, size_t datalen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_final, + (void *ctx, unsigned char *sig, size_t *siglen, + size_t sigsize)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign, + (void *ctx, unsigned char *sigret, size_t *siglen, + size_t sigsize, const unsigned char *tbs, size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_init, + (void *ctx, const char *mdname, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_update, + (void *ctx, const unsigned char *data, size_t datalen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_final, + (void *ctx, const unsigned char *sig, size_t siglen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify, + (void *ctx, const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen)) +OSSL_CORE_MAKE_FUNC(void, signature_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, signature_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_md_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_md_params, + (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_md_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_md_params, + (void *ctx)) + + +/* Asymmetric Ciphers */ + +# define OSSL_FUNC_ASYM_CIPHER_NEWCTX 1 +# define OSSL_FUNC_ASYM_CIPHER_ENCRYPT_INIT 2 +# define OSSL_FUNC_ASYM_CIPHER_ENCRYPT 3 +# define OSSL_FUNC_ASYM_CIPHER_DECRYPT_INIT 4 +# define OSSL_FUNC_ASYM_CIPHER_DECRYPT 5 +# define OSSL_FUNC_ASYM_CIPHER_FREECTX 6 +# define OSSL_FUNC_ASYM_CIPHER_DUPCTX 7 +# define OSSL_FUNC_ASYM_CIPHER_GET_CTX_PARAMS 8 +# define OSSL_FUNC_ASYM_CIPHER_GETTABLE_CTX_PARAMS 9 +# define OSSL_FUNC_ASYM_CIPHER_SET_CTX_PARAMS 10 +# define OSSL_FUNC_ASYM_CIPHER_SETTABLE_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, asym_cipher_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt, (void *ctx, unsigned char *out, + size_t *outlen, + size_t outsize, + const unsigned char *in, + size_t inlen)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt, (void *ctx, unsigned char *out, + size_t *outlen, + size_t outsize, + const unsigned char *in, + size_t inlen)) +OSSL_CORE_MAKE_FUNC(void, asym_cipher_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, asym_cipher_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_get_ctx_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_settable_ctx_params, + (void *ctx, void *provctx)) + +/* Asymmetric Key encapsulation */ +# define OSSL_FUNC_KEM_NEWCTX 1 +# define OSSL_FUNC_KEM_ENCAPSULATE_INIT 2 +# define OSSL_FUNC_KEM_ENCAPSULATE 3 +# define OSSL_FUNC_KEM_DECAPSULATE_INIT 4 +# define OSSL_FUNC_KEM_DECAPSULATE 5 +# define OSSL_FUNC_KEM_FREECTX 6 +# define OSSL_FUNC_KEM_DUPCTX 7 +# define OSSL_FUNC_KEM_GET_CTX_PARAMS 8 +# define OSSL_FUNC_KEM_GETTABLE_CTX_PARAMS 9 +# define OSSL_FUNC_KEM_SET_CTX_PARAMS 10 +# define OSSL_FUNC_KEM_SETTABLE_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, kem_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kem_encapsulate_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_encapsulate, (void *ctx, + unsigned char *out, size_t *outlen, + unsigned char *secret, + size_t *secretlen)) +OSSL_CORE_MAKE_FUNC(int, kem_decapsulate_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_decapsulate, (void *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)) +OSSL_CORE_MAKE_FUNC(void, kem_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, kem_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, kem_get_ctx_params, (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kem_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_settable_ctx_params, + (void *ctx, void *provctx)) + +/* Encoders and decoders */ +# define OSSL_FUNC_ENCODER_NEWCTX 1 +# define OSSL_FUNC_ENCODER_FREECTX 2 +# define OSSL_FUNC_ENCODER_GET_PARAMS 3 +# define OSSL_FUNC_ENCODER_GETTABLE_PARAMS 4 +# define OSSL_FUNC_ENCODER_SET_CTX_PARAMS 5 +# define OSSL_FUNC_ENCODER_SETTABLE_CTX_PARAMS 6 +# define OSSL_FUNC_ENCODER_DOES_SELECTION 10 +# define OSSL_FUNC_ENCODER_ENCODE 11 +# define OSSL_FUNC_ENCODER_IMPORT_OBJECT 20 +# define OSSL_FUNC_ENCODER_FREE_OBJECT 21 +OSSL_CORE_MAKE_FUNC(void *, encoder_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void, encoder_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, encoder_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, encoder_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_settable_ctx_params, + (void *provctx)) + +OSSL_CORE_MAKE_FUNC(int, encoder_does_selection, + (void *provctx, int selection)) +OSSL_CORE_MAKE_FUNC(int, encoder_encode, + (void *ctx, OSSL_CORE_BIO *out, + const void *obj_raw, const OSSL_PARAM obj_abstract[], + int selection, + OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg)) + +OSSL_CORE_MAKE_FUNC(void *, encoder_import_object, + (void *ctx, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(void, encoder_free_object, (void *obj)) + +# define OSSL_FUNC_DECODER_NEWCTX 1 +# define OSSL_FUNC_DECODER_FREECTX 2 +# define OSSL_FUNC_DECODER_GET_PARAMS 3 +# define OSSL_FUNC_DECODER_GETTABLE_PARAMS 4 +# define OSSL_FUNC_DECODER_SET_CTX_PARAMS 5 +# define OSSL_FUNC_DECODER_SETTABLE_CTX_PARAMS 6 +# define OSSL_FUNC_DECODER_DOES_SELECTION 10 +# define OSSL_FUNC_DECODER_DECODE 11 +# define OSSL_FUNC_DECODER_EXPORT_OBJECT 20 +OSSL_CORE_MAKE_FUNC(void *, decoder_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void, decoder_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, decoder_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, decoder_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_settable_ctx_params, + (void *provctx)) + +OSSL_CORE_MAKE_FUNC(int, decoder_does_selection, + (void *provctx, int selection)) +OSSL_CORE_MAKE_FUNC(int, decoder_decode, + (void *ctx, OSSL_CORE_BIO *in, int selection, + OSSL_CALLBACK *data_cb, void *data_cbarg, + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) +OSSL_CORE_MAKE_FUNC(int, decoder_export_object, + (void *ctx, const void *objref, size_t objref_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg)) + +/*- + * Store + * + * Objects are scanned by using the 'open', 'load', 'eof' and 'close' + * functions, which implement an OSSL_STORE loader. + * + * store_load() works in a way that's very similar to the decoders, in + * that they pass an abstract object through a callback, either as a DER + * octet string or as an object reference, which libcrypto will have to + * deal with. + */ + +#define OSSL_FUNC_STORE_OPEN 1 +#define OSSL_FUNC_STORE_ATTACH 2 +#define OSSL_FUNC_STORE_SETTABLE_CTX_PARAMS 3 +#define OSSL_FUNC_STORE_SET_CTX_PARAMS 4 +#define OSSL_FUNC_STORE_LOAD 5 +#define OSSL_FUNC_STORE_EOF 6 +#define OSSL_FUNC_STORE_CLOSE 7 +#define OSSL_FUNC_STORE_EXPORT_OBJECT 8 +OSSL_CORE_MAKE_FUNC(void *, store_open, (void *provctx, const char *uri)) +OSSL_CORE_MAKE_FUNC(void *, store_attach, (void *provctx, OSSL_CORE_BIO *in)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, store_settable_ctx_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, store_set_ctx_params, + (void *loaderctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, store_load, + (void *loaderctx, + OSSL_CALLBACK *object_cb, void *object_cbarg, + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) +OSSL_CORE_MAKE_FUNC(int, store_eof, (void *loaderctx)) +OSSL_CORE_MAKE_FUNC(int, store_close, (void *loaderctx)) +OSSL_CORE_MAKE_FUNC(int, store_export_object, + (void *loaderctx, const void *objref, size_t objref_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg)) + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/core_names.h b/deps/openssl/android/x86/usr/local/include/openssl/core_names.h new file mode 100644 index 00000000..5e3c132f --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/core_names.h @@ -0,0 +1,560 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_NAMES_H +# define OPENSSL_CORE_NAMES_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* Well known parameter names that core passes to providers */ +#define OSSL_PROV_PARAM_CORE_VERSION "openssl-version" /* utf8_ptr */ +#define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name" /* utf8_ptr */ +#define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename" /* utf8_ptr */ + +/* Well known parameter names that Providers can define */ +#define OSSL_PROV_PARAM_NAME "name" /* utf8_ptr */ +#define OSSL_PROV_PARAM_VERSION "version" /* utf8_ptr */ +#define OSSL_PROV_PARAM_BUILDINFO "buildinfo" /* utf8_ptr */ +#define OSSL_PROV_PARAM_STATUS "status" /* uint */ +#define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks" /* uint */ +#define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" /* uint */ +#define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" /* uint */ + +/* Self test callback parameters */ +#define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase" /* utf8_string */ +#define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type" /* utf8_string */ +#define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc" /* utf8_string */ + +/*- + * Provider-native object abstractions + * + * These are used when a provider wants to pass object data or an object + * reference back to libcrypto. This is only useful for provider functions + * that take a callback to which an OSSL_PARAM array with these parameters + * can be passed. + * + * This set of parameter names is explained in detail in provider-object(7) + * (doc/man7/provider-object.pod) + */ +#define OSSL_OBJECT_PARAM_TYPE "type" /* INTEGER */ +#define OSSL_OBJECT_PARAM_DATA_TYPE "data-type" /* UTF8_STRING */ +#define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure" /* UTF8_STRING */ +#define OSSL_OBJECT_PARAM_REFERENCE "reference" /* OCTET_STRING */ +#define OSSL_OBJECT_PARAM_DATA "data" /* OCTET_STRING or UTF8_STRING */ +#define OSSL_OBJECT_PARAM_DESC "desc" /* UTF8_STRING */ + +/* + * Algorithm parameters + * If "engine" or "properties" are specified, they should always be paired + * with the algorithm type. + * Note these are common names that are shared by many types (such as kdf, mac, + * and pkey) e.g: see OSSL_MAC_PARAM_DIGEST below. + */ +#define OSSL_ALG_PARAM_DIGEST "digest" /* utf8_string */ +#define OSSL_ALG_PARAM_CIPHER "cipher" /* utf8_string */ +#define OSSL_ALG_PARAM_ENGINE "engine" /* utf8_string */ +#define OSSL_ALG_PARAM_MAC "mac" /* utf8_string */ +#define OSSL_ALG_PARAM_PROPERTIES "properties"/* utf8_string */ + +/* cipher parameters */ +#define OSSL_CIPHER_PARAM_PADDING "padding" /* uint */ +#define OSSL_CIPHER_PARAM_USE_BITS "use-bits" /* uint */ +#define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version" /* uint */ +#define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac" /* octet_ptr */ +#define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size" /* size_t */ +#define OSSL_CIPHER_PARAM_MODE "mode" /* uint */ +#define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD "aead" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_CTS "cts" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_KEYLEN "keylen" /* size_t */ +#define OSSL_CIPHER_PARAM_IVLEN "ivlen" /* size_t */ +#define OSSL_CIPHER_PARAM_IV "iv" /* octet_string OR octet_ptr */ +#define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv" /* octet_string OR octet_ptr */ +#define OSSL_CIPHER_PARAM_NUM "num" /* uint */ +#define OSSL_CIPHER_PARAM_ROUNDS "rounds" /* uint */ +#define OSSL_CIPHER_PARAM_AEAD_TAG "tag" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN +#define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" /* octet_string */ +#define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" /* octet_string */ +#define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" /* size_t */ +#define OSSL_CIPHER_PARAM_SPEED "speed" /* uint */ +#define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" /* utf8_string */ +/* For passing the AlgorithmIdentifier parameter in DER form */ +#define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS "alg_id_param" /* octet_string */ + +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT \ + "tls1multi_maxsndfrag" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE \ + "tls1multi_maxbufsz" /* size_t */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE \ + "tls1multi_interleave" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD \ + "tls1multi_aad" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN \ + "tls1multi_aadpacklen" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC \ + "tls1multi_enc" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN \ + "tls1multi_encin" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN \ + "tls1multi_enclen" /* size_t */ + +/* OSSL_CIPHER_PARAM_CTS_MODE Values */ +#define OSSL_CIPHER_CTS_MODE_CS1 "CS1" +#define OSSL_CIPHER_CTS_MODE_CS2 "CS2" +#define OSSL_CIPHER_CTS_MODE_CS3 "CS3" + +/* digest parameters */ +#define OSSL_DIGEST_PARAM_XOFLEN "xoflen" /* size_t */ +#define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" /* octet string */ +#define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" /* uint */ +#define OSSL_DIGEST_PARAM_MICALG "micalg" /* utf8 string */ +#define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" /* size_t */ +#define OSSL_DIGEST_PARAM_SIZE "size" /* size_t */ +#define OSSL_DIGEST_PARAM_XOF "xof" /* int, 0 or 1 */ +#define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" /* int, 0 or 1 */ + +/* Known DIGEST names (not a complete list) */ +#define OSSL_DIGEST_NAME_MD5 "MD5" +#define OSSL_DIGEST_NAME_MD5_SHA1 "MD5-SHA1" +#define OSSL_DIGEST_NAME_SHA1 "SHA1" +#define OSSL_DIGEST_NAME_SHA2_224 "SHA2-224" +#define OSSL_DIGEST_NAME_SHA2_256 "SHA2-256" +#define OSSL_DIGEST_NAME_SHA2_384 "SHA2-384" +#define OSSL_DIGEST_NAME_SHA2_512 "SHA2-512" +#define OSSL_DIGEST_NAME_SHA2_512_224 "SHA2-512/224" +#define OSSL_DIGEST_NAME_SHA2_512_256 "SHA2-512/256" +#define OSSL_DIGEST_NAME_MD2 "MD2" +#define OSSL_DIGEST_NAME_MD4 "MD4" +#define OSSL_DIGEST_NAME_MDC2 "MDC2" +#define OSSL_DIGEST_NAME_RIPEMD160 "RIPEMD160" +#define OSSL_DIGEST_NAME_SHA3_224 "SHA3-224" +#define OSSL_DIGEST_NAME_SHA3_256 "SHA3-256" +#define OSSL_DIGEST_NAME_SHA3_384 "SHA3-384" +#define OSSL_DIGEST_NAME_SHA3_512 "SHA3-512" +#define OSSL_DIGEST_NAME_KECCAK_KMAC128 "KECCAK-KMAC-128" +#define OSSL_DIGEST_NAME_KECCAK_KMAC256 "KECCAK-KMAC-256" +#define OSSL_DIGEST_NAME_SM3 "SM3" + +/* MAC parameters */ +#define OSSL_MAC_PARAM_KEY "key" /* octet string */ +#define OSSL_MAC_PARAM_IV "iv" /* octet string */ +#define OSSL_MAC_PARAM_CUSTOM "custom" /* utf8 string */ +#define OSSL_MAC_PARAM_SALT "salt" /* octet string */ +#define OSSL_MAC_PARAM_XOF "xof" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_C_ROUNDS "c-rounds" /* unsigned int */ +#define OSSL_MAC_PARAM_D_ROUNDS "d-rounds" /* unsigned int */ + +/* + * If "engine" or "properties" are specified, they should always be paired + * with "cipher" or "digest". + */ +#define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ +#define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ +#define OSSL_MAC_PARAM_SIZE "size" /* size_t */ +#define OSSL_MAC_PARAM_BLOCK_SIZE "block-size" /* size_t */ +#define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size" /* size_t */ + +/* Known MAC names */ +#define OSSL_MAC_NAME_BLAKE2BMAC "BLAKE2BMAC" +#define OSSL_MAC_NAME_BLAKE2SMAC "BLAKE2SMAC" +#define OSSL_MAC_NAME_CMAC "CMAC" +#define OSSL_MAC_NAME_GMAC "GMAC" +#define OSSL_MAC_NAME_HMAC "HMAC" +#define OSSL_MAC_NAME_KMAC128 "KMAC128" +#define OSSL_MAC_NAME_KMAC256 "KMAC256" +#define OSSL_MAC_NAME_POLY1305 "POLY1305" +#define OSSL_MAC_NAME_SIPHASH "SIPHASH" + +/* KDF / PRF parameters */ +#define OSSL_KDF_PARAM_SECRET "secret" /* octet string */ +#define OSSL_KDF_PARAM_KEY "key" /* octet string */ +#define OSSL_KDF_PARAM_SALT "salt" /* octet string */ +#define OSSL_KDF_PARAM_PASSWORD "pass" /* octet string */ +#define OSSL_KDF_PARAM_PREFIX "prefix" /* octet string */ +#define OSSL_KDF_PARAM_LABEL "label" /* octet string */ +#define OSSL_KDF_PARAM_DATA "data" /* octet string */ +#define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ +#define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC /* utf8 string */ +#define OSSL_KDF_PARAM_MAC_SIZE "maclen" /* size_t */ +#define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ +#define OSSL_KDF_PARAM_ITER "iter" /* unsigned int */ +#define OSSL_KDF_PARAM_MODE "mode" /* utf8 string or int */ +#define OSSL_KDF_PARAM_PKCS5 "pkcs5" /* int */ +#define OSSL_KDF_PARAM_UKM "ukm" /* octet string */ +#define OSSL_KDF_PARAM_CEK_ALG "cekalg" /* utf8 string */ +#define OSSL_KDF_PARAM_SCRYPT_N "n" /* uint64_t */ +#define OSSL_KDF_PARAM_SCRYPT_R "r" /* uint32_t */ +#define OSSL_KDF_PARAM_SCRYPT_P "p" /* uint32_t */ +#define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes" /* uint64_t */ +#define OSSL_KDF_PARAM_INFO "info" /* octet string */ +#define OSSL_KDF_PARAM_SEED "seed" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_TYPE "type" /* int */ +#define OSSL_KDF_PARAM_SIZE "size" /* size_t */ +#define OSSL_KDF_PARAM_CONSTANT "constant" /* octet string */ +#define OSSL_KDF_PARAM_PKCS12_ID "id" /* int */ +#define OSSL_KDF_PARAM_KBKDF_USE_L "use-l" /* int */ +#define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator" /* int */ +#define OSSL_KDF_PARAM_KBKDF_R "r" /* int */ +#define OSSL_KDF_PARAM_X942_ACVPINFO "acvp-info" +#define OSSL_KDF_PARAM_X942_PARTYUINFO "partyu-info" +#define OSSL_KDF_PARAM_X942_PARTYVINFO "partyv-info" +#define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo" +#define OSSL_KDF_PARAM_X942_SUPP_PRIVINFO "supp-privinfo" +#define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits" + +/* Known KDF names */ +#define OSSL_KDF_NAME_HKDF "HKDF" +#define OSSL_KDF_NAME_TLS1_3_KDF "TLS13-KDF" +#define OSSL_KDF_NAME_PBKDF1 "PBKDF1" +#define OSSL_KDF_NAME_PBKDF2 "PBKDF2" +#define OSSL_KDF_NAME_SCRYPT "SCRYPT" +#define OSSL_KDF_NAME_SSHKDF "SSHKDF" +#define OSSL_KDF_NAME_SSKDF "SSKDF" +#define OSSL_KDF_NAME_TLS1_PRF "TLS1-PRF" +#define OSSL_KDF_NAME_X942KDF_ASN1 "X942KDF-ASN1" +#define OSSL_KDF_NAME_X942KDF_CONCAT "X942KDF-CONCAT" +#define OSSL_KDF_NAME_X963KDF "X963KDF" +#define OSSL_KDF_NAME_KBKDF "KBKDF" +#define OSSL_KDF_NAME_KRB5KDF "KRB5KDF" + +/* Known RAND names */ +#define OSSL_RAND_PARAM_STATE "state" +#define OSSL_RAND_PARAM_STRENGTH "strength" +#define OSSL_RAND_PARAM_MAX_REQUEST "max_request" +#define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy" +#define OSSL_RAND_PARAM_TEST_NONCE "test_nonce" + +/* RAND/DRBG names */ +#define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests" +#define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval" +#define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen" +#define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen" +#define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen" +#define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen" +#define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen" +#define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen" +#define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter" +#define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time" +#define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +#define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +#define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC +#define OSSL_DRBG_PARAM_USE_DF "use_derivation_function" + +/* DRBG call back parameters */ +#define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required" +#define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance" +#define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length" +#define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length" +#define OSSL_DRBG_PARAM_RANDOM_DATA "random_data" +#define OSSL_DRBG_PARAM_SIZE "size" + +/* PKEY parameters */ +/* Common PKEY parameters */ +#define OSSL_PKEY_PARAM_BITS "bits" /* integer */ +#define OSSL_PKEY_PARAM_MAX_SIZE "max-size" /* integer */ +#define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" /* integer */ +#define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE /* utf8 string */ +#define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +#define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" /* utf8 string */ +#define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" /* utf8 string */ +#define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" +#define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size" +#define OSSL_PKEY_PARAM_MASKGENFUNC "mgf" +#define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest" +#define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties" +#define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" +#define OSSL_PKEY_PARAM_GROUP_NAME "group" +#define OSSL_PKEY_PARAM_DIST_ID "distid" +#define OSSL_PKEY_PARAM_PUB_KEY "pub" +#define OSSL_PKEY_PARAM_PRIV_KEY "priv" + +/* Diffie-Hellman/DSA Parameters */ +#define OSSL_PKEY_PARAM_FFC_P "p" +#define OSSL_PKEY_PARAM_FFC_G "g" +#define OSSL_PKEY_PARAM_FFC_Q "q" +#define OSSL_PKEY_PARAM_FFC_GINDEX "gindex" +#define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter" +#define OSSL_PKEY_PARAM_FFC_SEED "seed" +#define OSSL_PKEY_PARAM_FFC_COFACTOR "j" +#define OSSL_PKEY_PARAM_FFC_H "hindex" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy" + +/* Diffie-Hellman params */ +#define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" +#define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len" + +/* Elliptic Curve Domain Parameters */ +#define OSSL_PKEY_PARAM_EC_PUB_X "qx" +#define OSSL_PKEY_PARAM_EC_PUB_Y "qy" + +/* Elliptic Curve Explicit Domain Parameters */ +#define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" +#define OSSL_PKEY_PARAM_EC_P "p" +#define OSSL_PKEY_PARAM_EC_A "a" +#define OSSL_PKEY_PARAM_EC_B "b" +#define OSSL_PKEY_PARAM_EC_GENERATOR "generator" +#define OSSL_PKEY_PARAM_EC_ORDER "order" +#define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" +#define OSSL_PKEY_PARAM_EC_SEED "seed" +#define OSSL_PKEY_PARAM_EC_CHAR2_M "m" +#define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type" +#define OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS "tp" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K1 "k1" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K2 "k2" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K3 "k3" +#define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" + +/* Elliptic Curve Key Parameters */ +#define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" +#define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH \ + OSSL_PKEY_PARAM_USE_COFACTOR_FLAG + +/* RSA Keys */ +/* + * n, e, d are the usual public and private key components + * + * rsa-num is the number of factors, including p and q + * rsa-factor is used for each factor: p, q, r_i (i = 3, ...) + * rsa-exponent is used for each exponent: dP, dQ, d_i (i = 3, ...) + * rsa-coefficient is used for each coefficient: qInv, t_i (i = 3, ...) + * + * The number of rsa-factor items must be equal to the number of rsa-exponent + * items, and the number of rsa-coefficients must be one less. + * (the base i for the coefficients is 2, not 1, at least as implied by + * RFC 8017) + */ +#define OSSL_PKEY_PARAM_RSA_N "n" +#define OSSL_PKEY_PARAM_RSA_E "e" +#define OSSL_PKEY_PARAM_RSA_D "d" +#define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor" +#define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" +#define OSSL_PKEY_PARAM_RSA_FACTOR1 OSSL_PKEY_PARAM_RSA_FACTOR"1" +#define OSSL_PKEY_PARAM_RSA_FACTOR2 OSSL_PKEY_PARAM_RSA_FACTOR"2" +#define OSSL_PKEY_PARAM_RSA_FACTOR3 OSSL_PKEY_PARAM_RSA_FACTOR"3" +#define OSSL_PKEY_PARAM_RSA_FACTOR4 OSSL_PKEY_PARAM_RSA_FACTOR"4" +#define OSSL_PKEY_PARAM_RSA_FACTOR5 OSSL_PKEY_PARAM_RSA_FACTOR"5" +#define OSSL_PKEY_PARAM_RSA_FACTOR6 OSSL_PKEY_PARAM_RSA_FACTOR"6" +#define OSSL_PKEY_PARAM_RSA_FACTOR7 OSSL_PKEY_PARAM_RSA_FACTOR"7" +#define OSSL_PKEY_PARAM_RSA_FACTOR8 OSSL_PKEY_PARAM_RSA_FACTOR"8" +#define OSSL_PKEY_PARAM_RSA_FACTOR9 OSSL_PKEY_PARAM_RSA_FACTOR"9" +#define OSSL_PKEY_PARAM_RSA_FACTOR10 OSSL_PKEY_PARAM_RSA_FACTOR"10" +#define OSSL_PKEY_PARAM_RSA_EXPONENT1 OSSL_PKEY_PARAM_RSA_EXPONENT"1" +#define OSSL_PKEY_PARAM_RSA_EXPONENT2 OSSL_PKEY_PARAM_RSA_EXPONENT"2" +#define OSSL_PKEY_PARAM_RSA_EXPONENT3 OSSL_PKEY_PARAM_RSA_EXPONENT"3" +#define OSSL_PKEY_PARAM_RSA_EXPONENT4 OSSL_PKEY_PARAM_RSA_EXPONENT"4" +#define OSSL_PKEY_PARAM_RSA_EXPONENT5 OSSL_PKEY_PARAM_RSA_EXPONENT"5" +#define OSSL_PKEY_PARAM_RSA_EXPONENT6 OSSL_PKEY_PARAM_RSA_EXPONENT"6" +#define OSSL_PKEY_PARAM_RSA_EXPONENT7 OSSL_PKEY_PARAM_RSA_EXPONENT"7" +#define OSSL_PKEY_PARAM_RSA_EXPONENT8 OSSL_PKEY_PARAM_RSA_EXPONENT"8" +#define OSSL_PKEY_PARAM_RSA_EXPONENT9 OSSL_PKEY_PARAM_RSA_EXPONENT"9" +#define OSSL_PKEY_PARAM_RSA_EXPONENT10 OSSL_PKEY_PARAM_RSA_EXPONENT"10" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 OSSL_PKEY_PARAM_RSA_COEFFICIENT"1" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 OSSL_PKEY_PARAM_RSA_COEFFICIENT"2" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 OSSL_PKEY_PARAM_RSA_COEFFICIENT"3" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 OSSL_PKEY_PARAM_RSA_COEFFICIENT"4" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 OSSL_PKEY_PARAM_RSA_COEFFICIENT"5" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 OSSL_PKEY_PARAM_RSA_COEFFICIENT"6" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 OSSL_PKEY_PARAM_RSA_COEFFICIENT"7" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 OSSL_PKEY_PARAM_RSA_COEFFICIENT"8" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 OSSL_PKEY_PARAM_RSA_COEFFICIENT"9" + +/* RSA padding modes */ +#define OSSL_PKEY_RSA_PAD_MODE_NONE "none" +#define OSSL_PKEY_RSA_PAD_MODE_PKCSV15 "pkcs1" +#define OSSL_PKEY_RSA_PAD_MODE_OAEP "oaep" +#define OSSL_PKEY_RSA_PAD_MODE_X931 "x931" +#define OSSL_PKEY_RSA_PAD_MODE_PSS "pss" + +/* RSA pss padding salt length */ +#define OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST "digest" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_MAX "max" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO "auto" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX "auto-digestmax" + +/* Key generation parameters */ +#define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS +#define OSSL_PKEY_PARAM_RSA_PRIMES "primes" +#define OSSL_PKEY_PARAM_RSA_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_PKEY_PARAM_RSA_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_PKEY_PARAM_RSA_MASKGENFUNC OSSL_PKEY_PARAM_MASKGENFUNC +#define OSSL_PKEY_PARAM_RSA_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen" + +/* Key generation parameters */ +#define OSSL_PKEY_PARAM_FFC_TYPE "type" +#define OSSL_PKEY_PARAM_FFC_PBITS "pbits" +#define OSSL_PKEY_PARAM_FFC_QBITS "qbits" +#define OSSL_PKEY_PARAM_FFC_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_PKEY_PARAM_FFC_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES + +#define OSSL_PKEY_PARAM_EC_ENCODING "encoding" /* utf8_string */ +#define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format" +#define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" +#define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public" + +/* OSSL_PKEY_PARAM_EC_ENCODING values */ +#define OSSL_PKEY_EC_ENCODING_EXPLICIT "explicit" +#define OSSL_PKEY_EC_ENCODING_GROUP "named_curve" + +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_UNCOMPRESSED "uncompressed" +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_COMPRESSED "compressed" +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_HYBRID "hybrid" + +#define OSSL_PKEY_EC_GROUP_CHECK_DEFAULT "default" +#define OSSL_PKEY_EC_GROUP_CHECK_NAMED "named" +#define OSSL_PKEY_EC_GROUP_CHECK_NAMED_NIST "named-nist" + +/* Key Exchange parameters */ +#define OSSL_EXCHANGE_PARAM_PAD "pad" /* uint */ +#define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode" /* int */ +#define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen" /* size_t */ +/* The following parameter is an octet_string on set and an octet_ptr on get */ +#define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm" + +/* Signature parameters */ +#define OSSL_SIGNATURE_PARAM_ALGORITHM_ID "algorithm-id" +#define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE +#define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" +#define OSSL_SIGNATURE_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES \ + OSSL_PKEY_PARAM_MGF1_PROPERTIES +#define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE + +/* Asym cipher parameters */ +#define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE +#define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE +#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST \ + OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS \ + OSSL_PKEY_PARAM_MGF1_PROPERTIES +#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS "digest-props" +/* The following parameter is an octet_string on set and an octet_ptr on get */ +#define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label" +#define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version" +#define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version" + +/* + * Encoder / decoder parameters + */ +#define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +#define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +/* Currently PVK only, but reusable for others as needed */ +#define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level" +#define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters" /* integer */ + +#define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES + +/* Passphrase callback parameters */ +#define OSSL_PASSPHRASE_PARAM_INFO "info" + +/* Keygen callback parameters, from provider to libcrypto */ +#define OSSL_GEN_PARAM_POTENTIAL "potential" /* integer */ +#define OSSL_GEN_PARAM_ITERATION "iteration" /* integer */ + +/* ACVP Test parameters : These should not be used normally */ +#define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1" +#define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2" +#define OSSL_PKEY_PARAM_RSA_TEST_XP "xp" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq" +#define OSSL_PKEY_PARAM_RSA_TEST_P1 "p1" +#define OSSL_PKEY_PARAM_RSA_TEST_P2 "p2" +#define OSSL_PKEY_PARAM_RSA_TEST_Q1 "q1" +#define OSSL_PKEY_PARAM_RSA_TEST_Q2 "q2" +#define OSSL_SIGNATURE_PARAM_KAT "kat" + +/* KEM parameters */ +#define OSSL_KEM_PARAM_OPERATION "operation" + +/* OSSL_KEM_PARAM_OPERATION values */ +#define OSSL_KEM_PARAM_OPERATION_RSASVE "RSASVE" + +/* Capabilities */ + +/* TLS-GROUP Capability */ +#define OSSL_CAPABILITY_TLS_GROUP_NAME "tls-group-name" +#define OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL "tls-group-name-internal" +#define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id" +#define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg" +#define OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS "tls-group-sec-bits" +#define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem" +#define OSSL_CAPABILITY_TLS_GROUP_MIN_TLS "tls-min-tls" +#define OSSL_CAPABILITY_TLS_GROUP_MAX_TLS "tls-max-tls" +#define OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS "tls-min-dtls" +#define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls" + +/*- + * storemgmt parameters + */ + +/* + * Used by storemgmt_ctx_set_params(): + * + * - OSSL_STORE_PARAM_EXPECT is an INTEGER, and the value is any of the + * OSSL_STORE_INFO numbers. This is used to set the expected type of + * object loaded. + * + * - OSSL_STORE_PARAM_SUBJECT, OSSL_STORE_PARAM_ISSUER, + * OSSL_STORE_PARAM_SERIAL, OSSL_STORE_PARAM_FINGERPRINT, + * OSSL_STORE_PARAM_DIGEST, OSSL_STORE_PARAM_ALIAS + * are used as search criteria. + * (OSSL_STORE_PARAM_DIGEST is used with OSSL_STORE_PARAM_FINGERPRINT) + */ +#define OSSL_STORE_PARAM_EXPECT "expect" /* INTEGER */ +#define OSSL_STORE_PARAM_SUBJECT "subject" /* DER blob => OCTET_STRING */ +#define OSSL_STORE_PARAM_ISSUER "name" /* DER blob => OCTET_STRING */ +#define OSSL_STORE_PARAM_SERIAL "serial" /* INTEGER */ +#define OSSL_STORE_PARAM_DIGEST "digest" /* UTF8_STRING */ +#define OSSL_STORE_PARAM_FINGERPRINT "fingerprint" /* OCTET_STRING */ +#define OSSL_STORE_PARAM_ALIAS "alias" /* UTF8_STRING */ + +/* You may want to pass properties for the provider implementation to use */ +#define OSSL_STORE_PARAM_PROPERTIES "properties" /* utf8_string */ +/* OSSL_DECODER input type if a decoder is used by the store */ +#define OSSL_STORE_PARAM_INPUT_TYPE "input-type" /* UTF8_STRING */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/core_object.h b/deps/openssl/android/x86/usr/local/include/openssl/core_object.h new file mode 100644 index 00000000..62ccf39d --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/core_object.h @@ -0,0 +1,41 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_OBJECT_H +# define OPENSSL_CORE_OBJECT_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Known object types + * + * These numbers are used as values for the OSSL_PARAM parameter + * OSSL_OBJECT_PARAM_TYPE. + * + * For most of these types, there's a corresponding libcrypto object type. + * The corresponding type is indicated with a comment after the number. + */ +# define OSSL_OBJECT_UNKNOWN 0 +# define OSSL_OBJECT_NAME 1 /* char * */ +# define OSSL_OBJECT_PKEY 2 /* EVP_PKEY * */ +# define OSSL_OBJECT_CERT 3 /* X509 * */ +# define OSSL_OBJECT_CRL 4 /* X509_CRL * */ + +/* + * The rest of the associated OSSL_PARAM elements is described in core_names.h + */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/crmf.h b/deps/openssl/android/x86/usr/local/include/openssl/crmf.h new file mode 100644 index 00000000..71b747ed --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/crmf.h @@ -0,0 +1,227 @@ +/*- + * WARNING: do not edit! + * Generated by Makefile from include/openssl/crmf.h.in + * + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * CRMF (RFC 4211) implementation by M. Peylo, M. Viljanen, and D. von Oheimb. + */ + + + +#ifndef OPENSSL_CRMF_H +# define OPENSSL_CRMF_H + +# include + +# ifndef OPENSSL_NO_CRMF +# include +# include +# include +# include /* for GENERAL_NAME etc. */ + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CRMF_POPOPRIVKEY_THISMESSAGE 0 +# define OSSL_CRMF_POPOPRIVKEY_SUBSEQUENTMESSAGE 1 +# define OSSL_CRMF_POPOPRIVKEY_DHMAC 2 +# define OSSL_CRMF_POPOPRIVKEY_AGREEMAC 3 +# define OSSL_CRMF_POPOPRIVKEY_ENCRYPTEDKEY 4 + +# define OSSL_CRMF_SUBSEQUENTMESSAGE_ENCRCERT 0 +# define OSSL_CRMF_SUBSEQUENTMESSAGE_CHALLENGERESP 1 + +typedef struct ossl_crmf_encryptedvalue_st OSSL_CRMF_ENCRYPTEDVALUE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDVALUE) +typedef struct ossl_crmf_msg_st OSSL_CRMF_MSG; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSG) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_MSG, OSSL_CRMF_MSG, OSSL_CRMF_MSG) +#define sk_OSSL_CRMF_MSG_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_value(sk, idx) ((OSSL_CRMF_MSG *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), (idx))) +#define sk_OSSL_CRMF_MSG_new(cmp) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp))) +#define sk_OSSL_CRMF_MSG_new_null() ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CRMF_MSG_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_MSG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (n)) +#define sk_OSSL_CRMF_MSG_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_delete(sk, i) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (i))) +#define sk_OSSL_CRMF_MSG_delete_ptr(sk, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr))) +#define sk_OSSL_CRMF_MSG_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_pop(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_shift(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk),ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_MSG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), (idx)) +#define sk_OSSL_CRMF_MSG_set(sk, idx, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (idx), ossl_check_OSSL_CRMF_MSG_type(ptr))) +#define sk_OSSL_CRMF_MSG_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), pnum) +#define sk_OSSL_CRMF_MSG_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_dup(sk) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc))) +#define sk_OSSL_CRMF_MSG_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_MSG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp))) + +typedef struct ossl_crmf_attributetypeandvalue_st OSSL_CRMF_ATTRIBUTETYPEANDVALUE; +typedef struct ossl_crmf_pbmparameter_st OSSL_CRMF_PBMPARAMETER; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PBMPARAMETER) +typedef struct ossl_crmf_poposigningkey_st OSSL_CRMF_POPOSIGNINGKEY; +typedef struct ossl_crmf_certrequest_st OSSL_CRMF_CERTREQUEST; +typedef struct ossl_crmf_certid_st OSSL_CRMF_CERTID; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTID) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_CERTID, OSSL_CRMF_CERTID, OSSL_CRMF_CERTID) +#define sk_OSSL_CRMF_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_value(sk, idx) ((OSSL_CRMF_CERTID *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), (idx))) +#define sk_OSSL_CRMF_CERTID_new(cmp) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp))) +#define sk_OSSL_CRMF_CERTID_new_null() ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CRMF_CERTID_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (n)) +#define sk_OSSL_CRMF_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_delete(sk, i) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (i))) +#define sk_OSSL_CRMF_CERTID_delete_ptr(sk, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr))) +#define sk_OSSL_CRMF_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_pop(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_shift(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk),ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), (idx)) +#define sk_OSSL_CRMF_CERTID_set(sk, idx, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (idx), ossl_check_OSSL_CRMF_CERTID_type(ptr))) +#define sk_OSSL_CRMF_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), pnum) +#define sk_OSSL_CRMF_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_dup(sk) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc))) +#define sk_OSSL_CRMF_CERTID_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp))) + + +typedef struct ossl_crmf_pkipublicationinfo_st OSSL_CRMF_PKIPUBLICATIONINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PKIPUBLICATIONINFO) +typedef struct ossl_crmf_singlepubinfo_st OSSL_CRMF_SINGLEPUBINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_SINGLEPUBINFO) +typedef struct ossl_crmf_certtemplate_st OSSL_CRMF_CERTTEMPLATE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTTEMPLATE) +typedef STACK_OF(OSSL_CRMF_MSG) OSSL_CRMF_MSGS; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSGS) + +typedef struct ossl_crmf_optionalvalidity_st OSSL_CRMF_OPTIONALVALIDITY; + +/* crmf_pbm.c */ +OSSL_CRMF_PBMPARAMETER *OSSL_CRMF_pbmp_new(OSSL_LIB_CTX *libctx, size_t slen, + int owfnid, size_t itercnt, + int macnid); +int OSSL_CRMF_pbm_new(OSSL_LIB_CTX *libctx, const char *propq, + const OSSL_CRMF_PBMPARAMETER *pbmp, + const unsigned char *msg, size_t msglen, + const unsigned char *sec, size_t seclen, + unsigned char **mac, size_t *maclen); + +/* crmf_lib.c */ +int OSSL_CRMF_MSG_set1_regCtrl_regToken(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *tok); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_regToken(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_authenticator(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *auth); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_authenticator(const OSSL_CRMF_MSG *msg); +int +OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + OSSL_CRMF_SINGLEPUBINFO *spi); +# define OSSL_CRMF_PUB_METHOD_DONTCARE 0 +# define OSSL_CRMF_PUB_METHOD_X500 1 +# define OSSL_CRMF_PUB_METHOD_WEB 2 +# define OSSL_CRMF_PUB_METHOD_LDAP 3 +int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi, + int method, GENERAL_NAME *nm); +# define OSSL_CRMF_PUB_ACTION_DONTPUBLISH 0 +# define OSSL_CRMF_PUB_ACTION_PLEASEPUBLISH 1 +int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + int action); +int OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_PKIPUBLICATIONINFO *pi); +OSSL_CRMF_PKIPUBLICATIONINFO +*OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey(OSSL_CRMF_MSG *msg, + const X509_PUBKEY *pubkey); +X509_PUBKEY +*OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_oldCertID(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTID *cid); +OSSL_CRMF_CERTID +*OSSL_CRMF_MSG_get0_regCtrl_oldCertID(const OSSL_CRMF_MSG *msg); +OSSL_CRMF_CERTID *OSSL_CRMF_CERTID_gen(const X509_NAME *issuer, + const ASN1_INTEGER *serial); + +int OSSL_CRMF_MSG_set1_regInfo_utf8Pairs(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *utf8pairs); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regInfo_utf8Pairs(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regInfo_certReq(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTREQUEST *cr); +OSSL_CRMF_CERTREQUEST +*OSSL_CRMF_MSG_get0_regInfo_certReq(const OSSL_CRMF_MSG *msg); + +int OSSL_CRMF_MSG_set0_validity(OSSL_CRMF_MSG *crm, + ASN1_TIME *notBefore, ASN1_TIME *notAfter); +int OSSL_CRMF_MSG_set_certReqId(OSSL_CRMF_MSG *crm, int rid); +int OSSL_CRMF_MSG_get_certReqId(const OSSL_CRMF_MSG *crm); +int OSSL_CRMF_MSG_set0_extensions(OSSL_CRMF_MSG *crm, X509_EXTENSIONS *exts); + +int OSSL_CRMF_MSG_push0_extension(OSSL_CRMF_MSG *crm, X509_EXTENSION *ext); +# define OSSL_CRMF_POPO_NONE -1 +# define OSSL_CRMF_POPO_RAVERIFIED 0 +# define OSSL_CRMF_POPO_SIGNATURE 1 +# define OSSL_CRMF_POPO_KEYENC 2 +# define OSSL_CRMF_POPO_KEYAGREE 3 +int OSSL_CRMF_MSG_create_popo(int meth, OSSL_CRMF_MSG *crm, + EVP_PKEY *pkey, const EVP_MD *digest, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, + int rid, int acceptRAVerified, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); +const ASN1_INTEGER +*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_subject(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_issuer(const OSSL_CRMF_CERTTEMPLATE *tmpl); +X509_EXTENSIONS +*OSSL_CRMF_CERTTEMPLATE_get0_extensions(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTID_get0_issuer(const OSSL_CRMF_CERTID *cid); +const ASN1_INTEGER +*OSSL_CRMF_CERTID_get0_serialNumber(const OSSL_CRMF_CERTID *cid); +int OSSL_CRMF_CERTTEMPLATE_fill(OSSL_CRMF_CERTTEMPLATE *tmpl, + EVP_PKEY *pubkey, + const X509_NAME *subject, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +X509 +*OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(const OSSL_CRMF_ENCRYPTEDVALUE *ecert, + OSSL_LIB_CTX *libctx, const char *propq, + EVP_PKEY *pkey); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CRMF) */ +#endif /* !defined(OPENSSL_CRMF_H) */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/crmf.h.in b/deps/openssl/android/x86/usr/local/include/openssl/crmf.h.in new file mode 100644 index 00000000..4d37ea6d --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/crmf.h.in @@ -0,0 +1,180 @@ +/*- + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * CRMF (RFC 4211) implementation by M. Peylo, M. Viljanen, and D. von Oheimb. + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CRMF_H +# define OPENSSL_CRMF_H + +# include + +# ifndef OPENSSL_NO_CRMF +# include +# include +# include +# include /* for GENERAL_NAME etc. */ + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CRMF_POPOPRIVKEY_THISMESSAGE 0 +# define OSSL_CRMF_POPOPRIVKEY_SUBSEQUENTMESSAGE 1 +# define OSSL_CRMF_POPOPRIVKEY_DHMAC 2 +# define OSSL_CRMF_POPOPRIVKEY_AGREEMAC 3 +# define OSSL_CRMF_POPOPRIVKEY_ENCRYPTEDKEY 4 + +# define OSSL_CRMF_SUBSEQUENTMESSAGE_ENCRCERT 0 +# define OSSL_CRMF_SUBSEQUENTMESSAGE_CHALLENGERESP 1 + +typedef struct ossl_crmf_encryptedvalue_st OSSL_CRMF_ENCRYPTEDVALUE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDVALUE) +typedef struct ossl_crmf_msg_st OSSL_CRMF_MSG; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSG) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG) +{- + generate_stack_macros("OSSL_CRMF_MSG"); +-} +typedef struct ossl_crmf_attributetypeandvalue_st OSSL_CRMF_ATTRIBUTETYPEANDVALUE; +typedef struct ossl_crmf_pbmparameter_st OSSL_CRMF_PBMPARAMETER; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PBMPARAMETER) +typedef struct ossl_crmf_poposigningkey_st OSSL_CRMF_POPOSIGNINGKEY; +typedef struct ossl_crmf_certrequest_st OSSL_CRMF_CERTREQUEST; +typedef struct ossl_crmf_certid_st OSSL_CRMF_CERTID; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTID) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID) +{- + generate_stack_macros("OSSL_CRMF_CERTID"); +-} + +typedef struct ossl_crmf_pkipublicationinfo_st OSSL_CRMF_PKIPUBLICATIONINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PKIPUBLICATIONINFO) +typedef struct ossl_crmf_singlepubinfo_st OSSL_CRMF_SINGLEPUBINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_SINGLEPUBINFO) +typedef struct ossl_crmf_certtemplate_st OSSL_CRMF_CERTTEMPLATE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTTEMPLATE) +typedef STACK_OF(OSSL_CRMF_MSG) OSSL_CRMF_MSGS; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSGS) + +typedef struct ossl_crmf_optionalvalidity_st OSSL_CRMF_OPTIONALVALIDITY; + +/* crmf_pbm.c */ +OSSL_CRMF_PBMPARAMETER *OSSL_CRMF_pbmp_new(OSSL_LIB_CTX *libctx, size_t slen, + int owfnid, size_t itercnt, + int macnid); +int OSSL_CRMF_pbm_new(OSSL_LIB_CTX *libctx, const char *propq, + const OSSL_CRMF_PBMPARAMETER *pbmp, + const unsigned char *msg, size_t msglen, + const unsigned char *sec, size_t seclen, + unsigned char **mac, size_t *maclen); + +/* crmf_lib.c */ +int OSSL_CRMF_MSG_set1_regCtrl_regToken(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *tok); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_regToken(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_authenticator(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *auth); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_authenticator(const OSSL_CRMF_MSG *msg); +int +OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + OSSL_CRMF_SINGLEPUBINFO *spi); +# define OSSL_CRMF_PUB_METHOD_DONTCARE 0 +# define OSSL_CRMF_PUB_METHOD_X500 1 +# define OSSL_CRMF_PUB_METHOD_WEB 2 +# define OSSL_CRMF_PUB_METHOD_LDAP 3 +int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi, + int method, GENERAL_NAME *nm); +# define OSSL_CRMF_PUB_ACTION_DONTPUBLISH 0 +# define OSSL_CRMF_PUB_ACTION_PLEASEPUBLISH 1 +int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + int action); +int OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_PKIPUBLICATIONINFO *pi); +OSSL_CRMF_PKIPUBLICATIONINFO +*OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey(OSSL_CRMF_MSG *msg, + const X509_PUBKEY *pubkey); +X509_PUBKEY +*OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_oldCertID(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTID *cid); +OSSL_CRMF_CERTID +*OSSL_CRMF_MSG_get0_regCtrl_oldCertID(const OSSL_CRMF_MSG *msg); +OSSL_CRMF_CERTID *OSSL_CRMF_CERTID_gen(const X509_NAME *issuer, + const ASN1_INTEGER *serial); + +int OSSL_CRMF_MSG_set1_regInfo_utf8Pairs(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *utf8pairs); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regInfo_utf8Pairs(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regInfo_certReq(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTREQUEST *cr); +OSSL_CRMF_CERTREQUEST +*OSSL_CRMF_MSG_get0_regInfo_certReq(const OSSL_CRMF_MSG *msg); + +int OSSL_CRMF_MSG_set0_validity(OSSL_CRMF_MSG *crm, + ASN1_TIME *notBefore, ASN1_TIME *notAfter); +int OSSL_CRMF_MSG_set_certReqId(OSSL_CRMF_MSG *crm, int rid); +int OSSL_CRMF_MSG_get_certReqId(const OSSL_CRMF_MSG *crm); +int OSSL_CRMF_MSG_set0_extensions(OSSL_CRMF_MSG *crm, X509_EXTENSIONS *exts); + +int OSSL_CRMF_MSG_push0_extension(OSSL_CRMF_MSG *crm, X509_EXTENSION *ext); +# define OSSL_CRMF_POPO_NONE -1 +# define OSSL_CRMF_POPO_RAVERIFIED 0 +# define OSSL_CRMF_POPO_SIGNATURE 1 +# define OSSL_CRMF_POPO_KEYENC 2 +# define OSSL_CRMF_POPO_KEYAGREE 3 +int OSSL_CRMF_MSG_create_popo(int meth, OSSL_CRMF_MSG *crm, + EVP_PKEY *pkey, const EVP_MD *digest, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, + int rid, int acceptRAVerified, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); +const ASN1_INTEGER +*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_subject(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_issuer(const OSSL_CRMF_CERTTEMPLATE *tmpl); +X509_EXTENSIONS +*OSSL_CRMF_CERTTEMPLATE_get0_extensions(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTID_get0_issuer(const OSSL_CRMF_CERTID *cid); +const ASN1_INTEGER +*OSSL_CRMF_CERTID_get0_serialNumber(const OSSL_CRMF_CERTID *cid); +int OSSL_CRMF_CERTTEMPLATE_fill(OSSL_CRMF_CERTTEMPLATE *tmpl, + EVP_PKEY *pubkey, + const X509_NAME *subject, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +X509 +*OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(const OSSL_CRMF_ENCRYPTEDVALUE *ecert, + OSSL_LIB_CTX *libctx, const char *propq, + EVP_PKEY *pkey); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CRMF) */ +#endif /* !defined(OPENSSL_CRMF_H) */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/crmferr.h b/deps/openssl/android/x86/usr/local/include/openssl/crmferr.h new file mode 100644 index 00000000..b242b922 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/crmferr.h @@ -0,0 +1,50 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CRMFERR_H +# define OPENSSL_CRMFERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CRMF + + +/* + * CRMF reason codes. + */ +# define CRMF_R_BAD_PBM_ITERATIONCOUNT 100 +# define CRMF_R_CRMFERROR 102 +# define CRMF_R_ERROR 103 +# define CRMF_R_ERROR_DECODING_CERTIFICATE 104 +# define CRMF_R_ERROR_DECRYPTING_CERTIFICATE 105 +# define CRMF_R_ERROR_DECRYPTING_SYMMETRIC_KEY 106 +# define CRMF_R_FAILURE_OBTAINING_RANDOM 107 +# define CRMF_R_ITERATIONCOUNT_BELOW_100 108 +# define CRMF_R_MALFORMED_IV 101 +# define CRMF_R_NULL_ARGUMENT 109 +# define CRMF_R_POPOSKINPUT_NOT_SUPPORTED 113 +# define CRMF_R_POPO_INCONSISTENT_PUBLIC_KEY 117 +# define CRMF_R_POPO_MISSING 121 +# define CRMF_R_POPO_MISSING_PUBLIC_KEY 118 +# define CRMF_R_POPO_MISSING_SUBJECT 119 +# define CRMF_R_POPO_RAVERIFIED_NOT_ACCEPTED 120 +# define CRMF_R_SETTING_MAC_ALGOR_FAILURE 110 +# define CRMF_R_SETTING_OWF_ALGOR_FAILURE 111 +# define CRMF_R_UNSUPPORTED_ALGORITHM 112 +# define CRMF_R_UNSUPPORTED_CIPHER 114 +# define CRMF_R_UNSUPPORTED_METHOD_FOR_CREATING_POPO 115 +# define CRMF_R_UNSUPPORTED_POPO_METHOD 116 + +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/crypto.h b/deps/openssl/android/x86/usr/local/include/openssl/crypto.h index 7d0b5262..ab01aae8 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/crypto.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/crypto.h @@ -1,15 +1,26 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/crypto.h.in + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CRYPTO_H -# define HEADER_CRYPTO_H + + +#ifndef OPENSSL_CRYPTO_H +# define OPENSSL_CRYPTO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CRYPTO_H +# endif # include # include @@ -22,9 +33,10 @@ # include # include -# include +# include # include # include +# include # ifdef CHARSET_EBCDIC # include @@ -36,7 +48,7 @@ */ # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif @@ -44,7 +56,7 @@ extern "C" { #endif -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSLeay OpenSSL_version_num # define SSLeay_version OpenSSL_version # define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER @@ -62,58 +74,24 @@ typedef struct { int dummy; } CRYPTO_dynlock; -# endif /* OPENSSL_API_COMPAT */ +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ typedef void CRYPTO_RWLOCK; CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); -int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); -int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); - -/* - * The following can be used to detect memory leaks in the library. If - * used, it turns on malloc checking - */ -# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ -# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ - -struct crypto_ex_data_st { - STACK_OF(void) *sk; -}; -DEFINE_STACK_OF(void) - -/* - * Per class, we have a STACK of function pointers. - */ -# define CRYPTO_EX_INDEX_SSL 0 -# define CRYPTO_EX_INDEX_SSL_CTX 1 -# define CRYPTO_EX_INDEX_SSL_SESSION 2 -# define CRYPTO_EX_INDEX_X509 3 -# define CRYPTO_EX_INDEX_X509_STORE 4 -# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 -# define CRYPTO_EX_INDEX_DH 6 -# define CRYPTO_EX_INDEX_DSA 7 -# define CRYPTO_EX_INDEX_EC_KEY 8 -# define CRYPTO_EX_INDEX_RSA 9 -# define CRYPTO_EX_INDEX_ENGINE 10 -# define CRYPTO_EX_INDEX_UI 11 -# define CRYPTO_EX_INDEX_BIO 12 -# define CRYPTO_EX_INDEX_APP 13 -# define CRYPTO_EX_INDEX_UI_METHOD 14 -# define CRYPTO_EX_INDEX_DRBG 15 -# define CRYPTO_EX_INDEX__COUNT 16 +int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); /* No longer needed, so this is a no-op */ #define OPENSSL_malloc_init() while(0) continue -int CRYPTO_mem_ctrl(int mode); - # define OPENSSL_malloc(num) \ CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) # define OPENSSL_zalloc(num) \ @@ -146,32 +124,127 @@ int CRYPTO_mem_ctrl(int mode); size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); size_t OPENSSL_strnlen(const char *str, size_t maxlen); -char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); -unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); +int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength, + const unsigned char *buf, size_t buflen, + const char sep); +char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen); +int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, size_t *buflen, + const char *str, const char sep); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *buflen); int OPENSSL_hexchar2int(unsigned char c); +int OPENSSL_strcasecmp(const char *s1, const char *s2); +int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n); # define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) +/* + * These functions return the values of OPENSSL_VERSION_MAJOR, + * OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, OPENSSL_VERSION_PRE_RELEASE + * and OPENSSL_VERSION_BUILD_METADATA, respectively. + */ +unsigned int OPENSSL_version_major(void); +unsigned int OPENSSL_version_minor(void); +unsigned int OPENSSL_version_patch(void); +const char *OPENSSL_version_pre_release(void); +const char *OPENSSL_version_build_metadata(void); + unsigned long OpenSSL_version_num(void); const char *OpenSSL_version(int type); -# define OPENSSL_VERSION 0 -# define OPENSSL_CFLAGS 1 -# define OPENSSL_BUILT_ON 2 -# define OPENSSL_PLATFORM 3 -# define OPENSSL_DIR 4 -# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION_STRING 6 +# define OPENSSL_FULL_VERSION_STRING 7 +# define OPENSSL_MODULES_DIR 8 +# define OPENSSL_CPU_INFO 9 + +const char *OPENSSL_info(int type); +/* + * The series starts at 1001 to avoid confusion with the OpenSSL_version + * types. + */ +# define OPENSSL_INFO_CONFIG_DIR 1001 +# define OPENSSL_INFO_ENGINES_DIR 1002 +# define OPENSSL_INFO_MODULES_DIR 1003 +# define OPENSSL_INFO_DSO_EXTENSION 1004 +# define OPENSSL_INFO_DIR_FILENAME_SEPARATOR 1005 +# define OPENSSL_INFO_LIST_SEPARATOR 1006 +# define OPENSSL_INFO_SEED_SOURCE 1007 +# define OPENSSL_INFO_CPU_SETTINGS 1008 int OPENSSL_issetugid(void); +struct crypto_ex_data_st { + OSSL_LIB_CTX *ctx; + STACK_OF(void) *sk; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(void, void, void) +#define sk_void_num(sk) OPENSSL_sk_num(ossl_check_const_void_sk_type(sk)) +#define sk_void_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_void_sk_type(sk), (idx))) +#define sk_void_new(cmp) ((STACK_OF(void) *)OPENSSL_sk_new(ossl_check_void_compfunc_type(cmp))) +#define sk_void_new_null() ((STACK_OF(void) *)OPENSSL_sk_new_null()) +#define sk_void_new_reserve(cmp, n) ((STACK_OF(void) *)OPENSSL_sk_new_reserve(ossl_check_void_compfunc_type(cmp), (n))) +#define sk_void_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_void_sk_type(sk), (n)) +#define sk_void_free(sk) OPENSSL_sk_free(ossl_check_void_sk_type(sk)) +#define sk_void_zero(sk) OPENSSL_sk_zero(ossl_check_void_sk_type(sk)) +#define sk_void_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_void_sk_type(sk), (i))) +#define sk_void_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr))) +#define sk_void_push(sk, ptr) OPENSSL_sk_push(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_void_sk_type(sk))) +#define sk_void_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_void_sk_type(sk))) +#define sk_void_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_void_sk_type(sk),ossl_check_void_freefunc_type(freefunc)) +#define sk_void_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), (idx)) +#define sk_void_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_void_sk_type(sk), (idx), ossl_check_void_type(ptr))) +#define sk_void_find(sk, ptr) OPENSSL_sk_find(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), pnum) +#define sk_void_sort(sk) OPENSSL_sk_sort(ossl_check_void_sk_type(sk)) +#define sk_void_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_void_sk_type(sk)) +#define sk_void_dup(sk) ((STACK_OF(void) *)OPENSSL_sk_dup(ossl_check_const_void_sk_type(sk))) +#define sk_void_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(void) *)OPENSSL_sk_deep_copy(ossl_check_const_void_sk_type(sk), ossl_check_void_copyfunc_type(copyfunc), ossl_check_void_freefunc_type(freefunc))) +#define sk_void_set_cmp_func(sk, cmp) ((sk_void_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_void_sk_type(sk), ossl_check_void_compfunc_type(cmp))) + + + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX_UI_METHOD 14 +# define CRYPTO_EX_INDEX_RAND_DRBG 15 +# define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG +# define CRYPTO_EX_INDEX_OSSL_LIB_CTX 16 +# define CRYPTO_EX_INDEX_EVP_PKEY 17 +# define CRYPTO_EX_INDEX__COUNT 18 + typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, - void *from_d, int idx, long argl, void *argp); + void **from_d, int idx, long argl, void *argp); __owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, - CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); /* No longer use an index. */ int CRYPTO_free_ex_index(int class_index, int idx); @@ -185,6 +258,10 @@ int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +/* Allocate a single item in the CRYPTO_EX_DATA variable */ +int CRYPTO_alloc_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad, + int idx); + /* * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular * index (relative to the class type involved) @@ -192,7 +269,7 @@ void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * This function cleans up all "ex_data" state. It mustn't be called under * potential race-conditions. @@ -239,11 +316,11 @@ typedef struct crypto_threadid_st { # define CRYPTO_THREADID_cpy(dest, src) # define CRYPTO_THREADID_hash(id) (0UL) -# if OPENSSL_API_COMPAT < 0x10000000L +# ifndef OPENSSL_NO_DEPRECATED_1_0_0 # define CRYPTO_set_id_callback(func) # define CRYPTO_get_id_callback() (NULL) # define CRYPTO_thread_id() (0UL) -# endif /* OPENSSL_API_COMPAT < 0x10000000L */ +# endif /* OPENSSL_NO_DEPRECATED_1_0_0 */ # define CRYPTO_set_dynlock_create_callback(dyn_create_function) # define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) @@ -251,33 +328,34 @@ typedef struct crypto_threadid_st { # define CRYPTO_get_dynlock_create_callback() (NULL) # define CRYPTO_get_dynlock_lock_callback() (NULL) # define CRYPTO_get_dynlock_destroy_callback() (NULL) -# endif /* OPENSSL_API_COMPAT < 0x10100000L */ +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ -int CRYPTO_set_mem_functions( - void *(*m) (size_t, const char *, int), - void *(*r) (void *, size_t, const char *, int), - void (*f) (void *, const char *, int)); -int CRYPTO_set_mem_debug(int flag); -void CRYPTO_get_mem_functions( - void *(**m) (size_t, const char *, int), - void *(**r) (void *, size_t, const char *, int), - void (**f) (void *, const char *, int)); +typedef void *(*CRYPTO_malloc_fn)(size_t num, const char *file, int line); +typedef void *(*CRYPTO_realloc_fn)(void *addr, size_t num, const char *file, + int line); +typedef void (*CRYPTO_free_fn)(void *addr, const char *file, int line); +int CRYPTO_set_mem_functions(CRYPTO_malloc_fn malloc_fn, + CRYPTO_realloc_fn realloc_fn, + CRYPTO_free_fn free_fn); +void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn, + CRYPTO_realloc_fn *realloc_fn, + CRYPTO_free_fn *free_fn); -void *CRYPTO_malloc(size_t num, const char *file, int line); -void *CRYPTO_zalloc(size_t num, const char *file, int line); -void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); -char *CRYPTO_strdup(const char *str, const char *file, int line); -char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strdup(const char *str, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); void CRYPTO_free(void *ptr, const char *file, int line); void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, const char *file, int line); -int CRYPTO_secure_malloc_init(size_t sz, int minsize); +int CRYPTO_secure_malloc_init(size_t sz, size_t minsize); int CRYPTO_secure_malloc_done(void); -void *CRYPTO_secure_malloc(size_t num, const char *file, int line); -void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); void CRYPTO_secure_free(void *ptr, const char *file, int line); void CRYPTO_secure_clear_free(void *ptr, size_t num, const char *file, int line); @@ -289,38 +367,53 @@ size_t CRYPTO_secure_used(void); void OPENSSL_cleanse(void *ptr, size_t len); # ifndef OPENSSL_NO_CRYPTO_MDEBUG -# define OPENSSL_mem_debug_push(info) \ - CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_mem_debug_pop() \ - CRYPTO_mem_debug_pop() -int CRYPTO_mem_debug_push(const char *info, const char *file, int line); -int CRYPTO_mem_debug_pop(void); -void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); - -/*- - * Debugging functions (enabled by CRYPTO_set_mem_debug(1)) - * The flag argument has the following significance: - * 0: called before the actual memory allocation has taken place - * 1: called after the actual memory allocation has taken place +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking */ -void CRYPTO_mem_debug_malloc(void *addr, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_free(void *addr, int flag, - const char *file, int line); +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ -int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u), - void *u); -# ifndef OPENSSL_NO_STDIO -int CRYPTO_mem_leaks_fp(FILE *); +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() # endif -int CRYPTO_mem_leaks(BIO *bio); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_set_mem_debug(int flag); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_ctrl(int mode); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_push(const char *info, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_pop(void); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_malloc(void *addr, size_t num, + int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, + size_t num, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 +int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), + void *u); +# endif +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks_fp(FILE *); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks(BIO *bio); # endif +# endif /* OPENSSL_NO_CRYPTO_MDEBUG */ /* die if we have to */ ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) # endif # define OPENSSL_assert(e) \ @@ -328,14 +421,13 @@ ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line int OPENSSL_isservice(void); -int FIPS_mode(void); -int FIPS_mode_set(int r); - void OPENSSL_init(void); # ifdef OPENSSL_SYS_UNIX -void OPENSSL_fork_prepare(void); -void OPENSSL_fork_parent(void); -void OPENSSL_fork_child(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_prepare(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_parent(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_child(void); +# endif # endif struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); @@ -369,11 +461,17 @@ int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); # define OPENSSL_INIT_ENGINE_CAPI 0x00002000L # define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L # define OPENSSL_INIT_ENGINE_AFALG 0x00008000L -/* OPENSSL_INIT_ZLIB 0x00010000L */ +/* FREE: 0x00010000L */ # define OPENSSL_INIT_ATFORK 0x00020000L /* OPENSSL_INIT_BASE_ONLY 0x00040000L */ # define OPENSSL_INIT_NO_ATEXIT 0x00080000L -/* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */ +/* OPENSSL_INIT flag range 0x03f00000 reserved for OPENSSL_init_ssl() */ +/* FREE: 0x04000000L */ +/* FREE: 0x08000000L */ +/* FREE: 0x10000000L */ +/* FREE: 0x20000000L */ +/* FREE: 0x40000000L */ +/* FREE: 0x80000000L */ /* Max OPENSSL_INIT flag value is 0x80000000 */ /* openssl and dasync not counted as builtin */ @@ -382,12 +480,12 @@ int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ OPENSSL_INIT_ENGINE_PADLOCK) - /* Library initialisation functions */ void OPENSSL_cleanup(void); int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); int OPENSSL_atexit(void (*handler)(void)); void OPENSSL_thread_stop(void); +void OPENSSL_thread_stop_ex(OSSL_LIB_CTX *ctx); /* Low-level control of initialization */ OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); @@ -412,7 +510,13 @@ typedef LONG CRYPTO_ONCE; # define CRYPTO_ONCE_STATIC_INIT 0 # endif # else -# include +# if defined(__TANDEM) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# else +# include +# endif typedef pthread_once_t CRYPTO_ONCE; typedef pthread_key_t CRYPTO_THREAD_LOCAL; typedef pthread_t CRYPTO_THREAD_ID; @@ -438,6 +542,15 @@ int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); +OSSL_LIB_CTX *OSSL_LIB_CTX_new(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_from_dispatch(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_child(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file); +void OSSL_LIB_CTX_free(OSSL_LIB_CTX *); +OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx); # ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/crypto.h.in b/deps/openssl/android/x86/usr/local/include/openssl/crypto.h.in new file mode 100644 index 00000000..fb0c7cbb --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/crypto.h.in @@ -0,0 +1,535 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CRYPTO_H +# define OPENSSL_CRYPTO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CRYPTO_H +# endif + +# include +# include + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif + +# include +# include +# include +# include +# include +# include + +# ifdef CHARSET_EBCDIC +# include +# endif + +/* + * Resolve problems on some operating systems with symbol names that clash + * one way or another + */ +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSLeay OpenSSL_version_num +# define SSLeay_version OpenSSL_version +# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER +# define SSLEAY_VERSION OPENSSL_VERSION +# define SSLEAY_CFLAGS OPENSSL_CFLAGS +# define SSLEAY_BUILT_ON OPENSSL_BUILT_ON +# define SSLEAY_PLATFORM OPENSSL_PLATFORM +# define SSLEAY_DIR OPENSSL_DIR + +/* + * Old type for allocating dynamic locks. No longer used. Use the new thread + * API instead. + */ +typedef struct { + int dummy; +} CRYPTO_dynlock; + +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ + +typedef void CRYPTO_RWLOCK; + +CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); +__owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); +void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); + +int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); + +/* No longer needed, so this is a no-op */ +#define OPENSSL_malloc_init() while(0) continue + +# define OPENSSL_malloc(num) \ + CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_zalloc(num) \ + CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_realloc(addr, num) \ + CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_realloc(addr, old_num, num) \ + CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_free(addr, num) \ + CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_free(addr) \ + CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_memdup(str, s) \ + CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strdup(str) \ + CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strndup(str, n) \ + CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_malloc(num) \ + CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_zalloc(num) \ + CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_free(addr) \ + CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_clear_free(addr, num) \ + CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_actual_size(ptr) \ + CRYPTO_secure_actual_size(ptr) + +size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); +size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); +size_t OPENSSL_strnlen(const char *str, size_t maxlen); +int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength, + const unsigned char *buf, size_t buflen, + const char sep); +char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen); +int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, size_t *buflen, + const char *str, const char sep); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *buflen); +int OPENSSL_hexchar2int(unsigned char c); +int OPENSSL_strcasecmp(const char *s1, const char *s2); +int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n); + +# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) + +/* + * These functions return the values of OPENSSL_VERSION_MAJOR, + * OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, OPENSSL_VERSION_PRE_RELEASE + * and OPENSSL_VERSION_BUILD_METADATA, respectively. + */ +unsigned int OPENSSL_version_major(void); +unsigned int OPENSSL_version_minor(void); +unsigned int OPENSSL_version_patch(void); +const char *OPENSSL_version_pre_release(void); +const char *OPENSSL_version_build_metadata(void); + +unsigned long OpenSSL_version_num(void); +const char *OpenSSL_version(int type); +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION_STRING 6 +# define OPENSSL_FULL_VERSION_STRING 7 +# define OPENSSL_MODULES_DIR 8 +# define OPENSSL_CPU_INFO 9 + +const char *OPENSSL_info(int type); +/* + * The series starts at 1001 to avoid confusion with the OpenSSL_version + * types. + */ +# define OPENSSL_INFO_CONFIG_DIR 1001 +# define OPENSSL_INFO_ENGINES_DIR 1002 +# define OPENSSL_INFO_MODULES_DIR 1003 +# define OPENSSL_INFO_DSO_EXTENSION 1004 +# define OPENSSL_INFO_DIR_FILENAME_SEPARATOR 1005 +# define OPENSSL_INFO_LIST_SEPARATOR 1006 +# define OPENSSL_INFO_SEED_SOURCE 1007 +# define OPENSSL_INFO_CPU_SETTINGS 1008 + +int OPENSSL_issetugid(void); + +struct crypto_ex_data_st { + OSSL_LIB_CTX *ctx; + STACK_OF(void) *sk; +}; + +{- + generate_stack_macros("void"); +-} + + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX_UI_METHOD 14 +# define CRYPTO_EX_INDEX_RAND_DRBG 15 +# define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG +# define CRYPTO_EX_INDEX_OSSL_LIB_CTX 16 +# define CRYPTO_EX_INDEX_EVP_PKEY 17 +# define CRYPTO_EX_INDEX__COUNT 18 + +typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, + void **from_d, int idx, long argl, void *argp); +__owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +/* No longer use an index. */ +int CRYPTO_free_ex_index(int class_index, int idx); + +/* + * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a + * given class (invokes whatever per-class callbacks are applicable) + */ +int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, + const CRYPTO_EX_DATA *from); + +void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); + +/* Allocate a single item in the CRYPTO_EX_DATA variable */ +int CRYPTO_alloc_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad, + int idx); + +/* + * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular + * index (relative to the class type involved) + */ +int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); +void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * This function cleans up all "ex_data" state. It mustn't be called under + * potential race-conditions. + */ +# define CRYPTO_cleanup_all_ex_data() while(0) continue + +/* + * The old locking functions have been removed completely without compatibility + * macros. This is because the old functions either could not properly report + * errors, or the returned error values were not clearly documented. + * Replacing the locking functions with no-ops would cause race condition + * issues in the affected applications. It is far better for them to fail at + * compile time. + * On the other hand, the locking callbacks are no longer used. Consequently, + * the callback management functions can be safely replaced with no-op macros. + */ +# define CRYPTO_num_locks() (1) +# define CRYPTO_set_locking_callback(func) +# define CRYPTO_get_locking_callback() (NULL) +# define CRYPTO_set_add_lock_callback(func) +# define CRYPTO_get_add_lock_callback() (NULL) + +/* + * These defines where used in combination with the old locking callbacks, + * they are not called anymore, but old code that's not called might still + * use them. + */ +# define CRYPTO_LOCK 1 +# define CRYPTO_UNLOCK 2 +# define CRYPTO_READ 4 +# define CRYPTO_WRITE 8 + +/* This structure is no longer used */ +typedef struct crypto_threadid_st { + int dummy; +} CRYPTO_THREADID; +/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ +# define CRYPTO_THREADID_set_numeric(id, val) +# define CRYPTO_THREADID_set_pointer(id, ptr) +# define CRYPTO_THREADID_set_callback(threadid_func) (0) +# define CRYPTO_THREADID_get_callback() (NULL) +# define CRYPTO_THREADID_current(id) +# define CRYPTO_THREADID_cmp(a, b) (-1) +# define CRYPTO_THREADID_cpy(dest, src) +# define CRYPTO_THREADID_hash(id) (0UL) + +# ifndef OPENSSL_NO_DEPRECATED_1_0_0 +# define CRYPTO_set_id_callback(func) +# define CRYPTO_get_id_callback() (NULL) +# define CRYPTO_thread_id() (0UL) +# endif /* OPENSSL_NO_DEPRECATED_1_0_0 */ + +# define CRYPTO_set_dynlock_create_callback(dyn_create_function) +# define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) +# define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function) +# define CRYPTO_get_dynlock_create_callback() (NULL) +# define CRYPTO_get_dynlock_lock_callback() (NULL) +# define CRYPTO_get_dynlock_destroy_callback() (NULL) +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ + +typedef void *(*CRYPTO_malloc_fn)(size_t num, const char *file, int line); +typedef void *(*CRYPTO_realloc_fn)(void *addr, size_t num, const char *file, + int line); +typedef void (*CRYPTO_free_fn)(void *addr, const char *file, int line); +int CRYPTO_set_mem_functions(CRYPTO_malloc_fn malloc_fn, + CRYPTO_realloc_fn realloc_fn, + CRYPTO_free_fn free_fn); +void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn, + CRYPTO_realloc_fn *realloc_fn, + CRYPTO_free_fn *free_fn); + +OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strdup(const char *str, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +void CRYPTO_free(void *ptr, const char *file, int line); +void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); +void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); +void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, + const char *file, int line); + +int CRYPTO_secure_malloc_init(size_t sz, size_t minsize); +int CRYPTO_secure_malloc_done(void); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +void CRYPTO_secure_free(void *ptr, const char *file, int line); +void CRYPTO_secure_clear_free(void *ptr, size_t num, + const char *file, int line); +int CRYPTO_secure_allocated(const void *ptr); +int CRYPTO_secure_malloc_initialized(void); +size_t CRYPTO_secure_actual_size(void *ptr); +size_t CRYPTO_secure_used(void); + +void OPENSSL_cleanse(void *ptr, size_t len); + +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking + */ +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ + +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_set_mem_debug(int flag); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_ctrl(int mode); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_push(const char *info, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_pop(void); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_malloc(void *addr, size_t num, + int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, + size_t num, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 +int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), + void *u); +# endif +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks_fp(FILE *); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks(BIO *bio); +# endif +# endif /* OPENSSL_NO_CRYPTO_MDEBUG */ + +/* die if we have to */ +ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) +# endif +# define OPENSSL_assert(e) \ + (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1)) + +int OPENSSL_isservice(void); + +void OPENSSL_init(void); +# ifdef OPENSSL_SYS_UNIX +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_prepare(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_parent(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_child(void); +# endif +# endif + +struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); +int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec); +int OPENSSL_gmtime_diff(int *pday, int *psec, + const struct tm *from, const struct tm *to); + +/* + * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. + * It takes an amount of time dependent on |len|, but independent of the + * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements + * into a defined order as the return value when a != b is undefined, other + * than to be non-zero. + */ +int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); + +/* Standard initialisation options */ +# define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L +# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L +# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L +# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L +# define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L +# define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L +# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L +# define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L +# define OPENSSL_INIT_ASYNC 0x00000100L +# define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L +# define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L +# define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L +# define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L +# define OPENSSL_INIT_ENGINE_CAPI 0x00002000L +# define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L +# define OPENSSL_INIT_ENGINE_AFALG 0x00008000L +/* FREE: 0x00010000L */ +# define OPENSSL_INIT_ATFORK 0x00020000L +/* OPENSSL_INIT_BASE_ONLY 0x00040000L */ +# define OPENSSL_INIT_NO_ATEXIT 0x00080000L +/* OPENSSL_INIT flag range 0x03f00000 reserved for OPENSSL_init_ssl() */ +/* FREE: 0x04000000L */ +/* FREE: 0x08000000L */ +/* FREE: 0x10000000L */ +/* FREE: 0x20000000L */ +/* FREE: 0x40000000L */ +/* FREE: 0x80000000L */ +/* Max OPENSSL_INIT flag value is 0x80000000 */ + +/* openssl and dasync not counted as builtin */ +# define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ + (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ + | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ + OPENSSL_INIT_ENGINE_PADLOCK) + +/* Library initialisation functions */ +void OPENSSL_cleanup(void); +int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +int OPENSSL_atexit(void (*handler)(void)); +void OPENSSL_thread_stop(void); +void OPENSSL_thread_stop_ex(OSSL_LIB_CTX *ctx); + +/* Low-level control of initialization */ +OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); +# ifndef OPENSSL_NO_STDIO +int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings, + const char *config_filename); +void OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *settings, + unsigned long flags); +int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, + const char *config_appname); +# endif +void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings); + +# if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) +# if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include in order to use this */ +typedef DWORD CRYPTO_THREAD_LOCAL; +typedef DWORD CRYPTO_THREAD_ID; + +typedef LONG CRYPTO_ONCE; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif +# else +# if defined(__TANDEM) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# else +# include +# endif +typedef pthread_once_t CRYPTO_ONCE; +typedef pthread_key_t CRYPTO_THREAD_LOCAL; +typedef pthread_t CRYPTO_THREAD_ID; + +# define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT +# endif +# endif + +# if !defined(CRYPTO_ONCE_STATIC_INIT) +typedef unsigned int CRYPTO_ONCE; +typedef unsigned int CRYPTO_THREAD_LOCAL; +typedef unsigned int CRYPTO_THREAD_ID; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif + +int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); + +int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)); +void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key); +int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val); +int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); + +CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); +int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); + +OSSL_LIB_CTX *OSSL_LIB_CTX_new(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_from_dispatch(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_child(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file); +void OSSL_LIB_CTX_free(OSSL_LIB_CTX *); +OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cryptoerr.h b/deps/openssl/android/x86/usr/local/include/openssl/cryptoerr.h index 3db5a4ee..e84b12df 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cryptoerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/cryptoerr.h @@ -1,57 +1,55 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CRYPTOERR_H -# define HEADER_CRYPTOERR_H +#ifndef OPENSSL_CRYPTOERR_H +# define OPENSSL_CRYPTOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CRYPTO_strings(void); -/* - * CRYPTO function codes. - */ -# define CRYPTO_F_CMAC_CTX_NEW 120 -# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 -# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 -# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 -# define CRYPTO_F_CRYPTO_MEMDUP 115 -# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 -# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 121 -# define CRYPTO_F_CRYPTO_OCB128_INIT 122 -# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 -# define CRYPTO_F_FIPS_MODE_SET 109 -# define CRYPTO_F_GET_AND_LOCK 113 -# define CRYPTO_F_OPENSSL_ATEXIT 114 -# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 -# define CRYPTO_F_OPENSSL_FOPEN 119 -# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 -# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 -# define CRYPTO_F_OPENSSL_LH_NEW 126 -# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 127 -# define CRYPTO_F_OPENSSL_SK_DUP 128 -# define CRYPTO_F_PKEY_HMAC_INIT 123 -# define CRYPTO_F_PKEY_POLY1305_INIT 124 -# define CRYPTO_F_PKEY_SIPHASH_INIT 125 -# define CRYPTO_F_SK_RESERVE 129 /* * CRYPTO reason codes. */ -# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 +# define CRYPTO_R_BAD_ALGORITHM_NAME 117 +# define CRYPTO_R_CONFLICTING_NAMES 118 +# define CRYPTO_R_HEX_STRING_TOO_SHORT 121 # define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 +# define CRYPTO_R_INSUFFICIENT_DATA_SPACE 106 +# define CRYPTO_R_INSUFFICIENT_PARAM_SIZE 107 +# define CRYPTO_R_INSUFFICIENT_SECURE_DATA_SPACE 108 +# define CRYPTO_R_INTEGER_OVERFLOW 127 +# define CRYPTO_R_INVALID_NEGATIVE_VALUE 122 +# define CRYPTO_R_INVALID_NULL_ARGUMENT 109 +# define CRYPTO_R_INVALID_OSSL_PARAM_TYPE 110 +# define CRYPTO_R_NO_PARAMS_TO_MERGE 131 +# define CRYPTO_R_NO_SPACE_FOR_TERMINATING_NULL 128 # define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 +# define CRYPTO_R_PARAM_CANNOT_BE_REPRESENTED_EXACTLY 123 +# define CRYPTO_R_PARAM_NOT_INTEGER_TYPE 124 +# define CRYPTO_R_PARAM_OF_INCOMPATIBLE_TYPE 129 +# define CRYPTO_R_PARAM_UNSIGNED_INTEGER_NEGATIVE_VALUE_UNSUPPORTED 125 +# define CRYPTO_R_PARAM_UNSUPPORTED_FLOATING_POINT_FORMAT 130 +# define CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION 126 +# define CRYPTO_R_PROVIDER_ALREADY_EXISTS 104 +# define CRYPTO_R_PROVIDER_SECTION_ERROR 105 +# define CRYPTO_R_RANDOM_SECTION_ERROR 119 +# define CRYPTO_R_SECURE_MALLOC_FAILURE 111 +# define CRYPTO_R_STRING_TOO_LONG 112 +# define CRYPTO_R_TOO_MANY_BYTES 113 +# define CRYPTO_R_TOO_MANY_RECORDS 114 +# define CRYPTO_R_TOO_SMALL_BUFFER 116 +# define CRYPTO_R_UNKNOWN_NAME_IN_RANDOM_SECTION 120 +# define CRYPTO_R_ZERO_LENGTH_NUMBER 115 #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cryptoerr_legacy.h b/deps/openssl/android/x86/usr/local/include/openssl/cryptoerr_legacy.h new file mode 100644 index 00000000..ccab33a5 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/cryptoerr_legacy.h @@ -0,0 +1,1466 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file preserves symbols from pre-3.0 OpenSSL. + * It should never be included directly, as it's already included + * by the public {lib}err.h headers, and since it will go away some + * time in the future. + */ + +#ifndef OPENSSL_CRYPTOERR_LEGACY_H +# define OPENSSL_CRYPTOERR_LEGACY_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ERR_load_ASN1_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_ASYNC_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BIO_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BN_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BUF_strings(void); +# ifndef OPENSSL_NO_CMS +OSSL_DEPRECATEDIN_3_0 int ERR_load_CMS_strings(void); +# endif +# ifndef OPENSSL_NO_COMP +OSSL_DEPRECATEDIN_3_0 int ERR_load_COMP_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_CONF_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_CRYPTO_strings(void); +# ifndef OPENSSL_NO_CT +OSSL_DEPRECATEDIN_3_0 int ERR_load_CT_strings(void); +# endif +# ifndef OPENSSL_NO_DH +OSSL_DEPRECATEDIN_3_0 int ERR_load_DH_strings(void); +# endif +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 int ERR_load_DSA_strings(void); +# endif +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 int ERR_load_EC_strings(void); +# endif +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int ERR_load_ENGINE_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_ERR_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_EVP_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_KDF_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_OBJ_strings(void); +# ifndef OPENSSL_NO_OCSP +OSSL_DEPRECATEDIN_3_0 int ERR_load_OCSP_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_PEM_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS12_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS7_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_RAND_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_RSA_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_OSSL_STORE_strings(void); +# ifndef OPENSSL_NO_TS +OSSL_DEPRECATEDIN_3_0 int ERR_load_TS_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_UI_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_X509_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_X509V3_strings(void); + +/* Collected _F_ macros from OpenSSL 1.1.1 */ + +/* + * ASN1 function codes. + */ +# define ASN1_F_A2D_ASN1_OBJECT 0 +# define ASN1_F_A2I_ASN1_INTEGER 0 +# define ASN1_F_A2I_ASN1_STRING 0 +# define ASN1_F_APPEND_EXP 0 +# define ASN1_F_ASN1_BIO_INIT 0 +# define ASN1_F_ASN1_BIT_STRING_SET_BIT 0 +# define ASN1_F_ASN1_CB 0 +# define ASN1_F_ASN1_CHECK_TLEN 0 +# define ASN1_F_ASN1_COLLECT 0 +# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 0 +# define ASN1_F_ASN1_D2I_FP 0 +# define ASN1_F_ASN1_D2I_READ_BIO 0 +# define ASN1_F_ASN1_DIGEST 0 +# define ASN1_F_ASN1_DO_ADB 0 +# define ASN1_F_ASN1_DO_LOCK 0 +# define ASN1_F_ASN1_DUP 0 +# define ASN1_F_ASN1_ENC_SAVE 0 +# define ASN1_F_ASN1_EX_C2I 0 +# define ASN1_F_ASN1_FIND_END 0 +# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 0 +# define ASN1_F_ASN1_GENERATE_V3 0 +# define ASN1_F_ASN1_GET_INT64 0 +# define ASN1_F_ASN1_GET_OBJECT 0 +# define ASN1_F_ASN1_GET_UINT64 0 +# define ASN1_F_ASN1_I2D_BIO 0 +# define ASN1_F_ASN1_I2D_FP 0 +# define ASN1_F_ASN1_ITEM_D2I_FP 0 +# define ASN1_F_ASN1_ITEM_DUP 0 +# define ASN1_F_ASN1_ITEM_EMBED_D2I 0 +# define ASN1_F_ASN1_ITEM_EMBED_NEW 0 +# define ASN1_F_ASN1_ITEM_FLAGS_I2D 0 +# define ASN1_F_ASN1_ITEM_I2D_BIO 0 +# define ASN1_F_ASN1_ITEM_I2D_FP 0 +# define ASN1_F_ASN1_ITEM_PACK 0 +# define ASN1_F_ASN1_ITEM_SIGN 0 +# define ASN1_F_ASN1_ITEM_SIGN_CTX 0 +# define ASN1_F_ASN1_ITEM_UNPACK 0 +# define ASN1_F_ASN1_ITEM_VERIFY 0 +# define ASN1_F_ASN1_MBSTRING_NCOPY 0 +# define ASN1_F_ASN1_OBJECT_NEW 0 +# define ASN1_F_ASN1_OUTPUT_DATA 0 +# define ASN1_F_ASN1_PCTX_NEW 0 +# define ASN1_F_ASN1_PRIMITIVE_NEW 0 +# define ASN1_F_ASN1_SCTX_NEW 0 +# define ASN1_F_ASN1_SIGN 0 +# define ASN1_F_ASN1_STR2TYPE 0 +# define ASN1_F_ASN1_STRING_GET_INT64 0 +# define ASN1_F_ASN1_STRING_GET_UINT64 0 +# define ASN1_F_ASN1_STRING_SET 0 +# define ASN1_F_ASN1_STRING_TABLE_ADD 0 +# define ASN1_F_ASN1_STRING_TO_BN 0 +# define ASN1_F_ASN1_STRING_TYPE_NEW 0 +# define ASN1_F_ASN1_TEMPLATE_EX_D2I 0 +# define ASN1_F_ASN1_TEMPLATE_NEW 0 +# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 0 +# define ASN1_F_ASN1_TIME_ADJ 0 +# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 0 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 0 +# define ASN1_F_ASN1_UTCTIME_ADJ 0 +# define ASN1_F_ASN1_VERIFY 0 +# define ASN1_F_B64_READ_ASN1 0 +# define ASN1_F_B64_WRITE_ASN1 0 +# define ASN1_F_BIO_NEW_NDEF 0 +# define ASN1_F_BITSTR_CB 0 +# define ASN1_F_BN_TO_ASN1_STRING 0 +# define ASN1_F_C2I_ASN1_BIT_STRING 0 +# define ASN1_F_C2I_ASN1_INTEGER 0 +# define ASN1_F_C2I_ASN1_OBJECT 0 +# define ASN1_F_C2I_IBUF 0 +# define ASN1_F_C2I_UINT64_INT 0 +# define ASN1_F_COLLECT_DATA 0 +# define ASN1_F_D2I_ASN1_OBJECT 0 +# define ASN1_F_D2I_ASN1_UINTEGER 0 +# define ASN1_F_D2I_AUTOPRIVATEKEY 0 +# define ASN1_F_D2I_PRIVATEKEY 0 +# define ASN1_F_D2I_PUBLICKEY 0 +# define ASN1_F_DO_BUF 0 +# define ASN1_F_DO_CREATE 0 +# define ASN1_F_DO_DUMP 0 +# define ASN1_F_DO_TCREATE 0 +# define ASN1_F_I2A_ASN1_OBJECT 0 +# define ASN1_F_I2D_ASN1_BIO_STREAM 0 +# define ASN1_F_I2D_ASN1_OBJECT 0 +# define ASN1_F_I2D_DSA_PUBKEY 0 +# define ASN1_F_I2D_EC_PUBKEY 0 +# define ASN1_F_I2D_PRIVATEKEY 0 +# define ASN1_F_I2D_PUBLICKEY 0 +# define ASN1_F_I2D_RSA_PUBKEY 0 +# define ASN1_F_LONG_C2I 0 +# define ASN1_F_NDEF_PREFIX 0 +# define ASN1_F_NDEF_SUFFIX 0 +# define ASN1_F_OID_MODULE_INIT 0 +# define ASN1_F_PARSE_TAGGING 0 +# define ASN1_F_PKCS5_PBE2_SET_IV 0 +# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 0 +# define ASN1_F_PKCS5_PBE_SET 0 +# define ASN1_F_PKCS5_PBE_SET0_ALGOR 0 +# define ASN1_F_PKCS5_PBKDF2_SET 0 +# define ASN1_F_PKCS5_SCRYPT_SET 0 +# define ASN1_F_SMIME_READ_ASN1 0 +# define ASN1_F_SMIME_TEXT 0 +# define ASN1_F_STABLE_GET 0 +# define ASN1_F_STBL_MODULE_INIT 0 +# define ASN1_F_UINT32_C2I 0 +# define ASN1_F_UINT32_NEW 0 +# define ASN1_F_UINT64_C2I 0 +# define ASN1_F_UINT64_NEW 0 +# define ASN1_F_X509_CRL_ADD0_REVOKED 0 +# define ASN1_F_X509_INFO_NEW 0 +# define ASN1_F_X509_NAME_ENCODE 0 +# define ASN1_F_X509_NAME_EX_D2I 0 +# define ASN1_F_X509_NAME_EX_NEW 0 +# define ASN1_F_X509_PKEY_NEW 0 + +/* + * ASYNC function codes. + */ +# define ASYNC_F_ASYNC_CTX_NEW 0 +# define ASYNC_F_ASYNC_INIT_THREAD 0 +# define ASYNC_F_ASYNC_JOB_NEW 0 +# define ASYNC_F_ASYNC_PAUSE_JOB 0 +# define ASYNC_F_ASYNC_START_FUNC 0 +# define ASYNC_F_ASYNC_START_JOB 0 +# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 0 + +/* + * BIO function codes. + */ +# define BIO_F_ACPT_STATE 0 +# define BIO_F_ADDRINFO_WRAP 0 +# define BIO_F_ADDR_STRINGS 0 +# define BIO_F_BIO_ACCEPT 0 +# define BIO_F_BIO_ACCEPT_EX 0 +# define BIO_F_BIO_ACCEPT_NEW 0 +# define BIO_F_BIO_ADDR_NEW 0 +# define BIO_F_BIO_BIND 0 +# define BIO_F_BIO_CALLBACK_CTRL 0 +# define BIO_F_BIO_CONNECT 0 +# define BIO_F_BIO_CONNECT_NEW 0 +# define BIO_F_BIO_CTRL 0 +# define BIO_F_BIO_GETS 0 +# define BIO_F_BIO_GET_HOST_IP 0 +# define BIO_F_BIO_GET_NEW_INDEX 0 +# define BIO_F_BIO_GET_PORT 0 +# define BIO_F_BIO_LISTEN 0 +# define BIO_F_BIO_LOOKUP 0 +# define BIO_F_BIO_LOOKUP_EX 0 +# define BIO_F_BIO_MAKE_PAIR 0 +# define BIO_F_BIO_METH_NEW 0 +# define BIO_F_BIO_NEW 0 +# define BIO_F_BIO_NEW_DGRAM_SCTP 0 +# define BIO_F_BIO_NEW_FILE 0 +# define BIO_F_BIO_NEW_MEM_BUF 0 +# define BIO_F_BIO_NREAD 0 +# define BIO_F_BIO_NREAD0 0 +# define BIO_F_BIO_NWRITE 0 +# define BIO_F_BIO_NWRITE0 0 +# define BIO_F_BIO_PARSE_HOSTSERV 0 +# define BIO_F_BIO_PUTS 0 +# define BIO_F_BIO_READ 0 +# define BIO_F_BIO_READ_EX 0 +# define BIO_F_BIO_READ_INTERN 0 +# define BIO_F_BIO_SOCKET 0 +# define BIO_F_BIO_SOCKET_NBIO 0 +# define BIO_F_BIO_SOCK_INFO 0 +# define BIO_F_BIO_SOCK_INIT 0 +# define BIO_F_BIO_WRITE 0 +# define BIO_F_BIO_WRITE_EX 0 +# define BIO_F_BIO_WRITE_INTERN 0 +# define BIO_F_BUFFER_CTRL 0 +# define BIO_F_CONN_CTRL 0 +# define BIO_F_CONN_STATE 0 +# define BIO_F_DGRAM_SCTP_NEW 0 +# define BIO_F_DGRAM_SCTP_READ 0 +# define BIO_F_DGRAM_SCTP_WRITE 0 +# define BIO_F_DOAPR_OUTCH 0 +# define BIO_F_FILE_CTRL 0 +# define BIO_F_FILE_READ 0 +# define BIO_F_LINEBUFFER_CTRL 0 +# define BIO_F_LINEBUFFER_NEW 0 +# define BIO_F_MEM_WRITE 0 +# define BIO_F_NBIOF_NEW 0 +# define BIO_F_SLG_WRITE 0 +# define BIO_F_SSL_NEW 0 + +/* + * BN function codes. + */ +# define BN_F_BNRAND 0 +# define BN_F_BNRAND_RANGE 0 +# define BN_F_BN_BLINDING_CONVERT_EX 0 +# define BN_F_BN_BLINDING_CREATE_PARAM 0 +# define BN_F_BN_BLINDING_INVERT_EX 0 +# define BN_F_BN_BLINDING_NEW 0 +# define BN_F_BN_BLINDING_UPDATE 0 +# define BN_F_BN_BN2DEC 0 +# define BN_F_BN_BN2HEX 0 +# define BN_F_BN_COMPUTE_WNAF 0 +# define BN_F_BN_CTX_GET 0 +# define BN_F_BN_CTX_NEW 0 +# define BN_F_BN_CTX_START 0 +# define BN_F_BN_DIV 0 +# define BN_F_BN_DIV_RECP 0 +# define BN_F_BN_EXP 0 +# define BN_F_BN_EXPAND_INTERNAL 0 +# define BN_F_BN_GENCB_NEW 0 +# define BN_F_BN_GENERATE_DSA_NONCE 0 +# define BN_F_BN_GENERATE_PRIME_EX 0 +# define BN_F_BN_GF2M_MOD 0 +# define BN_F_BN_GF2M_MOD_EXP 0 +# define BN_F_BN_GF2M_MOD_MUL 0 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 0 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 0 +# define BN_F_BN_GF2M_MOD_SQR 0 +# define BN_F_BN_GF2M_MOD_SQRT 0 +# define BN_F_BN_LSHIFT 0 +# define BN_F_BN_MOD_EXP2_MONT 0 +# define BN_F_BN_MOD_EXP_MONT 0 +# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 0 +# define BN_F_BN_MOD_EXP_MONT_WORD 0 +# define BN_F_BN_MOD_EXP_RECP 0 +# define BN_F_BN_MOD_EXP_SIMPLE 0 +# define BN_F_BN_MOD_INVERSE 0 +# define BN_F_BN_MOD_INVERSE_NO_BRANCH 0 +# define BN_F_BN_MOD_LSHIFT_QUICK 0 +# define BN_F_BN_MOD_SQRT 0 +# define BN_F_BN_MONT_CTX_NEW 0 +# define BN_F_BN_MPI2BN 0 +# define BN_F_BN_NEW 0 +# define BN_F_BN_POOL_GET 0 +# define BN_F_BN_RAND 0 +# define BN_F_BN_RAND_RANGE 0 +# define BN_F_BN_RECP_CTX_NEW 0 +# define BN_F_BN_RSHIFT 0 +# define BN_F_BN_SET_WORDS 0 +# define BN_F_BN_STACK_PUSH 0 +# define BN_F_BN_USUB 0 + +/* + * BUF function codes. + */ +# define BUF_F_BUF_MEM_GROW 0 +# define BUF_F_BUF_MEM_GROW_CLEAN 0 +# define BUF_F_BUF_MEM_NEW 0 + +# ifndef OPENSSL_NO_CMS +/* + * CMS function codes. + */ +# define CMS_F_CHECK_CONTENT 0 +# define CMS_F_CMS_ADD0_CERT 0 +# define CMS_F_CMS_ADD0_RECIPIENT_KEY 0 +# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 0 +# define CMS_F_CMS_ADD1_RECEIPTREQUEST 0 +# define CMS_F_CMS_ADD1_RECIPIENT_CERT 0 +# define CMS_F_CMS_ADD1_SIGNER 0 +# define CMS_F_CMS_ADD1_SIGNINGTIME 0 +# define CMS_F_CMS_COMPRESS 0 +# define CMS_F_CMS_COMPRESSEDDATA_CREATE 0 +# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 0 +# define CMS_F_CMS_COPY_CONTENT 0 +# define CMS_F_CMS_COPY_MESSAGEDIGEST 0 +# define CMS_F_CMS_DATA 0 +# define CMS_F_CMS_DATAFINAL 0 +# define CMS_F_CMS_DATAINIT 0 +# define CMS_F_CMS_DECRYPT 0 +# define CMS_F_CMS_DECRYPT_SET1_KEY 0 +# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 0 +# define CMS_F_CMS_DECRYPT_SET1_PKEY 0 +# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 0 +# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 0 +# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 0 +# define CMS_F_CMS_DIGEST_VERIFY 0 +# define CMS_F_CMS_ENCODE_RECEIPT 0 +# define CMS_F_CMS_ENCRYPT 0 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 0 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 0 +# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 0 +# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 0 +# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 0 +# define CMS_F_CMS_ENVELOPEDDATA_CREATE 0 +# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 0 +# define CMS_F_CMS_ENVELOPED_DATA_INIT 0 +# define CMS_F_CMS_ENV_ASN1_CTRL 0 +# define CMS_F_CMS_FINAL 0 +# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 0 +# define CMS_F_CMS_GET0_CONTENT 0 +# define CMS_F_CMS_GET0_ECONTENT_TYPE 0 +# define CMS_F_CMS_GET0_ENVELOPED 0 +# define CMS_F_CMS_GET0_REVOCATION_CHOICES 0 +# define CMS_F_CMS_GET0_SIGNED 0 +# define CMS_F_CMS_MSGSIGDIGEST_ADD1 0 +# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 0 +# define CMS_F_CMS_RECEIPT_VERIFY 0 +# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 0 +# define CMS_F_CMS_SD_ASN1_CTRL 0 +# define CMS_F_CMS_SET1_IAS 0 +# define CMS_F_CMS_SET1_KEYID 0 +# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 0 +# define CMS_F_CMS_SET_DETACHED 0 +# define CMS_F_CMS_SIGN 0 +# define CMS_F_CMS_SIGNED_DATA_INIT 0 +# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 0 +# define CMS_F_CMS_SIGNERINFO_SIGN 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 0 +# define CMS_F_CMS_SIGN_RECEIPT 0 +# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 0 +# define CMS_F_CMS_STREAM 0 +# define CMS_F_CMS_UNCOMPRESS 0 +# define CMS_F_CMS_VERIFY 0 +# define CMS_F_KEK_UNWRAP_KEY 0 +# endif + +# ifndef OPENSSL_NO_COMP +/* + * COMP function codes. + */ +# define COMP_F_BIO_ZLIB_FLUSH 0 +# define COMP_F_BIO_ZLIB_NEW 0 +# define COMP_F_BIO_ZLIB_READ 0 +# define COMP_F_BIO_ZLIB_WRITE 0 +# define COMP_F_COMP_CTX_NEW 0 +# endif + +/* + * CONF function codes. + */ +# define CONF_F_CONF_DUMP_FP 0 +# define CONF_F_CONF_LOAD 0 +# define CONF_F_CONF_LOAD_FP 0 +# define CONF_F_CONF_PARSE_LIST 0 +# define CONF_F_DEF_LOAD 0 +# define CONF_F_DEF_LOAD_BIO 0 +# define CONF_F_GET_NEXT_FILE 0 +# define CONF_F_MODULE_ADD 0 +# define CONF_F_MODULE_INIT 0 +# define CONF_F_MODULE_LOAD_DSO 0 +# define CONF_F_MODULE_RUN 0 +# define CONF_F_NCONF_DUMP_BIO 0 +# define CONF_F_NCONF_DUMP_FP 0 +# define CONF_F_NCONF_GET_NUMBER_E 0 +# define CONF_F_NCONF_GET_SECTION 0 +# define CONF_F_NCONF_GET_STRING 0 +# define CONF_F_NCONF_LOAD 0 +# define CONF_F_NCONF_LOAD_BIO 0 +# define CONF_F_NCONF_LOAD_FP 0 +# define CONF_F_NCONF_NEW 0 +# define CONF_F_PROCESS_INCLUDE 0 +# define CONF_F_SSL_MODULE_INIT 0 +# define CONF_F_STR_COPY 0 + +/* + * CRYPTO function codes. + */ +# define CRYPTO_F_CMAC_CTX_NEW 0 +# define CRYPTO_F_CRYPTO_DUP_EX_DATA 0 +# define CRYPTO_F_CRYPTO_FREE_EX_DATA 0 +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 0 +# define CRYPTO_F_CRYPTO_MEMDUP 0 +# define CRYPTO_F_CRYPTO_NEW_EX_DATA 0 +# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 0 +# define CRYPTO_F_CRYPTO_OCB128_INIT 0 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 0 +# define CRYPTO_F_GET_AND_LOCK 0 +# define CRYPTO_F_OPENSSL_ATEXIT 0 +# define CRYPTO_F_OPENSSL_BUF2HEXSTR 0 +# define CRYPTO_F_OPENSSL_FOPEN 0 +# define CRYPTO_F_OPENSSL_HEXSTR2BUF 0 +# define CRYPTO_F_OPENSSL_INIT_CRYPTO 0 +# define CRYPTO_F_OPENSSL_LH_NEW 0 +# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 0 +# define CRYPTO_F_OPENSSL_SK_DUP 0 +# define CRYPTO_F_PKEY_HMAC_INIT 0 +# define CRYPTO_F_PKEY_POLY1305_INIT 0 +# define CRYPTO_F_PKEY_SIPHASH_INIT 0 +# define CRYPTO_F_SK_RESERVE 0 + +# ifndef OPENSSL_NO_CT +/* + * CT function codes. + */ +# define CT_F_CTLOG_NEW 0 +# define CT_F_CTLOG_NEW_FROM_BASE64 0 +# define CT_F_CTLOG_NEW_FROM_CONF 0 +# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 0 +# define CT_F_CTLOG_STORE_LOAD_FILE 0 +# define CT_F_CTLOG_STORE_LOAD_LOG 0 +# define CT_F_CTLOG_STORE_NEW 0 +# define CT_F_CT_BASE64_DECODE 0 +# define CT_F_CT_POLICY_EVAL_CTX_NEW 0 +# define CT_F_CT_V1_LOG_ID_FROM_PKEY 0 +# define CT_F_I2O_SCT 0 +# define CT_F_I2O_SCT_LIST 0 +# define CT_F_I2O_SCT_SIGNATURE 0 +# define CT_F_O2I_SCT 0 +# define CT_F_O2I_SCT_LIST 0 +# define CT_F_O2I_SCT_SIGNATURE 0 +# define CT_F_SCT_CTX_NEW 0 +# define CT_F_SCT_CTX_VERIFY 0 +# define CT_F_SCT_NEW 0 +# define CT_F_SCT_NEW_FROM_BASE64 0 +# define CT_F_SCT_SET0_LOG_ID 0 +# define CT_F_SCT_SET1_EXTENSIONS 0 +# define CT_F_SCT_SET1_LOG_ID 0 +# define CT_F_SCT_SET1_SIGNATURE 0 +# define CT_F_SCT_SET_LOG_ENTRY_TYPE 0 +# define CT_F_SCT_SET_SIGNATURE_NID 0 +# define CT_F_SCT_SET_VERSION 0 +# endif + +# ifndef OPENSSL_NO_DH +/* + * DH function codes. + */ +# define DH_F_COMPUTE_KEY 0 +# define DH_F_DHPARAMS_PRINT_FP 0 +# define DH_F_DH_BUILTIN_GENPARAMS 0 +# define DH_F_DH_CHECK_EX 0 +# define DH_F_DH_CHECK_PARAMS_EX 0 +# define DH_F_DH_CHECK_PUB_KEY_EX 0 +# define DH_F_DH_CMS_DECRYPT 0 +# define DH_F_DH_CMS_SET_PEERKEY 0 +# define DH_F_DH_CMS_SET_SHARED_INFO 0 +# define DH_F_DH_METH_DUP 0 +# define DH_F_DH_METH_NEW 0 +# define DH_F_DH_METH_SET1_NAME 0 +# define DH_F_DH_NEW_BY_NID 0 +# define DH_F_DH_NEW_METHOD 0 +# define DH_F_DH_PARAM_DECODE 0 +# define DH_F_DH_PKEY_PUBLIC_CHECK 0 +# define DH_F_DH_PRIV_DECODE 0 +# define DH_F_DH_PRIV_ENCODE 0 +# define DH_F_DH_PUB_DECODE 0 +# define DH_F_DH_PUB_ENCODE 0 +# define DH_F_DO_DH_PRINT 0 +# define DH_F_GENERATE_KEY 0 +# define DH_F_PKEY_DH_CTRL_STR 0 +# define DH_F_PKEY_DH_DERIVE 0 +# define DH_F_PKEY_DH_INIT 0 +# define DH_F_PKEY_DH_KEYGEN 0 +# endif + +# ifndef OPENSSL_NO_DSA +/* + * DSA function codes. + */ +# define DSA_F_DSAPARAMS_PRINT 0 +# define DSA_F_DSAPARAMS_PRINT_FP 0 +# define DSA_F_DSA_BUILTIN_PARAMGEN 0 +# define DSA_F_DSA_BUILTIN_PARAMGEN2 0 +# define DSA_F_DSA_DO_SIGN 0 +# define DSA_F_DSA_DO_VERIFY 0 +# define DSA_F_DSA_METH_DUP 0 +# define DSA_F_DSA_METH_NEW 0 +# define DSA_F_DSA_METH_SET1_NAME 0 +# define DSA_F_DSA_NEW_METHOD 0 +# define DSA_F_DSA_PARAM_DECODE 0 +# define DSA_F_DSA_PRINT_FP 0 +# define DSA_F_DSA_PRIV_DECODE 0 +# define DSA_F_DSA_PRIV_ENCODE 0 +# define DSA_F_DSA_PUB_DECODE 0 +# define DSA_F_DSA_PUB_ENCODE 0 +# define DSA_F_DSA_SIGN 0 +# define DSA_F_DSA_SIGN_SETUP 0 +# define DSA_F_DSA_SIG_NEW 0 +# define DSA_F_OLD_DSA_PRIV_DECODE 0 +# define DSA_F_PKEY_DSA_CTRL 0 +# define DSA_F_PKEY_DSA_CTRL_STR 0 +# define DSA_F_PKEY_DSA_KEYGEN 0 +# endif + +# ifndef OPENSSL_NO_EC +/* + * EC function codes. + */ +# define EC_F_BN_TO_FELEM 0 +# define EC_F_D2I_ECPARAMETERS 0 +# define EC_F_D2I_ECPKPARAMETERS 0 +# define EC_F_D2I_ECPRIVATEKEY 0 +# define EC_F_DO_EC_KEY_PRINT 0 +# define EC_F_ECDH_CMS_DECRYPT 0 +# define EC_F_ECDH_CMS_SET_SHARED_INFO 0 +# define EC_F_ECDH_COMPUTE_KEY 0 +# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 0 +# define EC_F_ECDSA_DO_SIGN_EX 0 +# define EC_F_ECDSA_DO_VERIFY 0 +# define EC_F_ECDSA_SIGN_EX 0 +# define EC_F_ECDSA_SIGN_SETUP 0 +# define EC_F_ECDSA_SIG_NEW 0 +# define EC_F_ECDSA_VERIFY 0 +# define EC_F_ECD_ITEM_VERIFY 0 +# define EC_F_ECKEY_PARAM2TYPE 0 +# define EC_F_ECKEY_PARAM_DECODE 0 +# define EC_F_ECKEY_PRIV_DECODE 0 +# define EC_F_ECKEY_PRIV_ENCODE 0 +# define EC_F_ECKEY_PUB_DECODE 0 +# define EC_F_ECKEY_PUB_ENCODE 0 +# define EC_F_ECKEY_TYPE2PARAM 0 +# define EC_F_ECPARAMETERS_PRINT 0 +# define EC_F_ECPARAMETERS_PRINT_FP 0 +# define EC_F_ECPKPARAMETERS_PRINT 0 +# define EC_F_ECPKPARAMETERS_PRINT_FP 0 +# define EC_F_ECP_NISTZ256_GET_AFFINE 0 +# define EC_F_ECP_NISTZ256_INV_MOD_ORD 0 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 0 +# define EC_F_ECP_NISTZ256_POINTS_MUL 0 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 0 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 0 +# define EC_F_ECX_KEY_OP 0 +# define EC_F_ECX_PRIV_ENCODE 0 +# define EC_F_ECX_PUB_ENCODE 0 +# define EC_F_EC_ASN1_GROUP2CURVE 0 +# define EC_F_EC_ASN1_GROUP2FIELDID 0 +# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 0 +# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 0 +# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 0 +# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 0 +# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 0 +# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 0 +# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 0 +# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 0 +# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_GFP_MONT_FIELD_DECODE 0 +# define EC_F_EC_GFP_MONT_FIELD_ENCODE 0 +# define EC_F_EC_GFP_MONT_FIELD_INV 0 +# define EC_F_EC_GFP_MONT_FIELD_MUL 0 +# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 0 +# define EC_F_EC_GFP_MONT_FIELD_SQR 0 +# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP224_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP256_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP521_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NIST_FIELD_MUL 0 +# define EC_F_EC_GFP_NIST_FIELD_SQR 0 +# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_FIELD_INV 0 +# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 0 +# define EC_F_EC_GFP_SIMPLE_OCT2POINT 0 +# define EC_F_EC_GFP_SIMPLE_POINT2OCT 0 +# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 0 +# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_GROUP_CHECK 0 +# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GROUP_COPY 0 +# define EC_F_EC_GROUP_GET_CURVE 0 +# define EC_F_EC_GROUP_GET_CURVE_GF2M 0 +# define EC_F_EC_GROUP_GET_CURVE_GFP 0 +# define EC_F_EC_GROUP_GET_DEGREE 0 +# define EC_F_EC_GROUP_GET_ECPARAMETERS 0 +# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 0 +# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 0 +# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 0 +# define EC_F_EC_GROUP_NEW 0 +# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 0 +# define EC_F_EC_GROUP_NEW_FROM_DATA 0 +# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 0 +# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 0 +# define EC_F_EC_GROUP_SET_CURVE 0 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 0 +# define EC_F_EC_GROUP_SET_CURVE_GFP 0 +# define EC_F_EC_GROUP_SET_GENERATOR 0 +# define EC_F_EC_GROUP_SET_SEED 0 +# define EC_F_EC_KEY_CHECK_KEY 0 +# define EC_F_EC_KEY_COPY 0 +# define EC_F_EC_KEY_GENERATE_KEY 0 +# define EC_F_EC_KEY_NEW 0 +# define EC_F_EC_KEY_NEW_METHOD 0 +# define EC_F_EC_KEY_OCT2PRIV 0 +# define EC_F_EC_KEY_PRINT 0 +# define EC_F_EC_KEY_PRINT_FP 0 +# define EC_F_EC_KEY_PRIV2BUF 0 +# define EC_F_EC_KEY_PRIV2OCT 0 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 0 +# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 0 +# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 0 +# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 0 +# define EC_F_EC_PKEY_CHECK 0 +# define EC_F_EC_PKEY_PARAM_CHECK 0 +# define EC_F_EC_POINTS_MAKE_AFFINE 0 +# define EC_F_EC_POINTS_MUL 0 +# define EC_F_EC_POINT_ADD 0 +# define EC_F_EC_POINT_BN2POINT 0 +# define EC_F_EC_POINT_CMP 0 +# define EC_F_EC_POINT_COPY 0 +# define EC_F_EC_POINT_DBL 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_INVERT 0 +# define EC_F_EC_POINT_IS_AT_INFINITY 0 +# define EC_F_EC_POINT_IS_ON_CURVE 0 +# define EC_F_EC_POINT_MAKE_AFFINE 0 +# define EC_F_EC_POINT_NEW 0 +# define EC_F_EC_POINT_OCT2POINT 0 +# define EC_F_EC_POINT_POINT2BUF 0 +# define EC_F_EC_POINT_POINT2OCT 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_TO_INFINITY 0 +# define EC_F_EC_PRE_COMP_NEW 0 +# define EC_F_EC_SCALAR_MUL_LADDER 0 +# define EC_F_EC_WNAF_MUL 0 +# define EC_F_EC_WNAF_PRECOMPUTE_MULT 0 +# define EC_F_I2D_ECPARAMETERS 0 +# define EC_F_I2D_ECPKPARAMETERS 0 +# define EC_F_I2D_ECPRIVATEKEY 0 +# define EC_F_I2O_ECPUBLICKEY 0 +# define EC_F_NISTP224_PRE_COMP_NEW 0 +# define EC_F_NISTP256_PRE_COMP_NEW 0 +# define EC_F_NISTP521_PRE_COMP_NEW 0 +# define EC_F_O2I_ECPUBLICKEY 0 +# define EC_F_OLD_EC_PRIV_DECODE 0 +# define EC_F_OSSL_ECDH_COMPUTE_KEY 0 +# define EC_F_OSSL_ECDSA_SIGN_SIG 0 +# define EC_F_OSSL_ECDSA_VERIFY_SIG 0 +# define EC_F_PKEY_ECD_CTRL 0 +# define EC_F_PKEY_ECD_DIGESTSIGN 0 +# define EC_F_PKEY_ECD_DIGESTSIGN25519 0 +# define EC_F_PKEY_ECD_DIGESTSIGN448 0 +# define EC_F_PKEY_ECX_DERIVE 0 +# define EC_F_PKEY_EC_CTRL 0 +# define EC_F_PKEY_EC_CTRL_STR 0 +# define EC_F_PKEY_EC_DERIVE 0 +# define EC_F_PKEY_EC_INIT 0 +# define EC_F_PKEY_EC_KDF_DERIVE 0 +# define EC_F_PKEY_EC_KEYGEN 0 +# define EC_F_PKEY_EC_PARAMGEN 0 +# define EC_F_PKEY_EC_SIGN 0 +# define EC_F_VALIDATE_ECX_DERIVE 0 +# endif + +# ifndef OPENSSL_NO_ENGINE +/* + * ENGINE function codes. + */ +# define ENGINE_F_DIGEST_UPDATE 0 +# define ENGINE_F_DYNAMIC_CTRL 0 +# define ENGINE_F_DYNAMIC_GET_DATA_CTX 0 +# define ENGINE_F_DYNAMIC_LOAD 0 +# define ENGINE_F_DYNAMIC_SET_DATA_CTX 0 +# define ENGINE_F_ENGINE_ADD 0 +# define ENGINE_F_ENGINE_BY_ID 0 +# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 0 +# define ENGINE_F_ENGINE_CTRL 0 +# define ENGINE_F_ENGINE_CTRL_CMD 0 +# define ENGINE_F_ENGINE_CTRL_CMD_STRING 0 +# define ENGINE_F_ENGINE_FINISH 0 +# define ENGINE_F_ENGINE_GET_CIPHER 0 +# define ENGINE_F_ENGINE_GET_DIGEST 0 +# define ENGINE_F_ENGINE_GET_FIRST 0 +# define ENGINE_F_ENGINE_GET_LAST 0 +# define ENGINE_F_ENGINE_GET_NEXT 0 +# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 0 +# define ENGINE_F_ENGINE_GET_PKEY_METH 0 +# define ENGINE_F_ENGINE_GET_PREV 0 +# define ENGINE_F_ENGINE_INIT 0 +# define ENGINE_F_ENGINE_LIST_ADD 0 +# define ENGINE_F_ENGINE_LIST_REMOVE 0 +# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 0 +# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 0 +# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 0 +# define ENGINE_F_ENGINE_NEW 0 +# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 0 +# define ENGINE_F_ENGINE_REMOVE 0 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 0 +# define ENGINE_F_ENGINE_SET_ID 0 +# define ENGINE_F_ENGINE_SET_NAME 0 +# define ENGINE_F_ENGINE_TABLE_REGISTER 0 +# define ENGINE_F_ENGINE_UNLOCKED_FINISH 0 +# define ENGINE_F_ENGINE_UP_REF 0 +# define ENGINE_F_INT_CLEANUP_ITEM 0 +# define ENGINE_F_INT_CTRL_HELPER 0 +# define ENGINE_F_INT_ENGINE_CONFIGURE 0 +# define ENGINE_F_INT_ENGINE_MODULE_INIT 0 +# define ENGINE_F_OSSL_HMAC_INIT 0 +# endif + +/* + * EVP function codes. + */ +# define EVP_F_AESNI_INIT_KEY 0 +# define EVP_F_AESNI_XTS_INIT_KEY 0 +# define EVP_F_AES_GCM_CTRL 0 +# define EVP_F_AES_INIT_KEY 0 +# define EVP_F_AES_OCB_CIPHER 0 +# define EVP_F_AES_T4_INIT_KEY 0 +# define EVP_F_AES_T4_XTS_INIT_KEY 0 +# define EVP_F_AES_WRAP_CIPHER 0 +# define EVP_F_AES_XTS_INIT_KEY 0 +# define EVP_F_ALG_MODULE_INIT 0 +# define EVP_F_ARIA_CCM_INIT_KEY 0 +# define EVP_F_ARIA_GCM_CTRL 0 +# define EVP_F_ARIA_GCM_INIT_KEY 0 +# define EVP_F_ARIA_INIT_KEY 0 +# define EVP_F_B64_NEW 0 +# define EVP_F_CAMELLIA_INIT_KEY 0 +# define EVP_F_CHACHA20_POLY1305_CTRL 0 +# define EVP_F_CMLL_T4_INIT_KEY 0 +# define EVP_F_DES_EDE3_WRAP_CIPHER 0 +# define EVP_F_DO_SIGVER_INIT 0 +# define EVP_F_ENC_NEW 0 +# define EVP_F_EVP_CIPHERINIT_EX 0 +# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 0 +# define EVP_F_EVP_CIPHER_CTX_COPY 0 +# define EVP_F_EVP_CIPHER_CTX_CTRL 0 +# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 0 +# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 0 +# define EVP_F_EVP_DECRYPTFINAL_EX 0 +# define EVP_F_EVP_DECRYPTUPDATE 0 +# define EVP_F_EVP_DIGESTFINALXOF 0 +# define EVP_F_EVP_DIGESTINIT_EX 0 +# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 0 +# define EVP_F_EVP_ENCRYPTFINAL_EX 0 +# define EVP_F_EVP_ENCRYPTUPDATE 0 +# define EVP_F_EVP_MD_CTX_COPY_EX 0 +# define EVP_F_EVP_MD_SIZE 0 +# define EVP_F_EVP_OPENINIT 0 +# define EVP_F_EVP_PBE_ALG_ADD 0 +# define EVP_F_EVP_PBE_ALG_ADD_TYPE 0 +# define EVP_F_EVP_PBE_CIPHERINIT 0 +# define EVP_F_EVP_PBE_SCRYPT 0 +# define EVP_F_EVP_PKCS82PKEY 0 +# define EVP_F_EVP_PKEY2PKCS8 0 +# define EVP_F_EVP_PKEY_ASN1_ADD0 0 +# define EVP_F_EVP_PKEY_CHECK 0 +# define EVP_F_EVP_PKEY_COPY_PARAMETERS 0 +# define EVP_F_EVP_PKEY_CTX_CTRL 0 +# define EVP_F_EVP_PKEY_CTX_CTRL_STR 0 +# define EVP_F_EVP_PKEY_CTX_DUP 0 +# define EVP_F_EVP_PKEY_CTX_MD 0 +# define EVP_F_EVP_PKEY_DECRYPT 0 +# define EVP_F_EVP_PKEY_DECRYPT_INIT 0 +# define EVP_F_EVP_PKEY_DECRYPT_OLD 0 +# define EVP_F_EVP_PKEY_DERIVE 0 +# define EVP_F_EVP_PKEY_DERIVE_INIT 0 +# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 0 +# define EVP_F_EVP_PKEY_ENCRYPT 0 +# define EVP_F_EVP_PKEY_ENCRYPT_INIT 0 +# define EVP_F_EVP_PKEY_ENCRYPT_OLD 0 +# define EVP_F_EVP_PKEY_GET0_DH 0 +# define EVP_F_EVP_PKEY_GET0_DSA 0 +# define EVP_F_EVP_PKEY_GET0_EC_KEY 0 +# define EVP_F_EVP_PKEY_GET0_HMAC 0 +# define EVP_F_EVP_PKEY_GET0_POLY1305 0 +# define EVP_F_EVP_PKEY_GET0_RSA 0 +# define EVP_F_EVP_PKEY_GET0_SIPHASH 0 +# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 0 +# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 0 +# define EVP_F_EVP_PKEY_KEYGEN 0 +# define EVP_F_EVP_PKEY_KEYGEN_INIT 0 +# define EVP_F_EVP_PKEY_METH_ADD0 0 +# define EVP_F_EVP_PKEY_METH_NEW 0 +# define EVP_F_EVP_PKEY_NEW 0 +# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 0 +# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 0 +# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 0 +# define EVP_F_EVP_PKEY_PARAMGEN 0 +# define EVP_F_EVP_PKEY_PARAMGEN_INIT 0 +# define EVP_F_EVP_PKEY_PARAM_CHECK 0 +# define EVP_F_EVP_PKEY_PUBLIC_CHECK 0 +# define EVP_F_EVP_PKEY_SET1_ENGINE 0 +# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 0 +# define EVP_F_EVP_PKEY_SIGN 0 +# define EVP_F_EVP_PKEY_SIGN_INIT 0 +# define EVP_F_EVP_PKEY_VERIFY 0 +# define EVP_F_EVP_PKEY_VERIFY_INIT 0 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER 0 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 0 +# define EVP_F_EVP_SIGNFINAL 0 +# define EVP_F_EVP_VERIFYFINAL 0 +# define EVP_F_INT_CTX_NEW 0 +# define EVP_F_OK_NEW 0 +# define EVP_F_PKCS5_PBE_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 0 +# define EVP_F_PKEY_SET_TYPE 0 +# define EVP_F_RC2_MAGIC_TO_METH 0 +# define EVP_F_RC5_CTRL 0 +# define EVP_F_R_32_12_16_INIT_KEY 0 +# define EVP_F_S390X_AES_GCM_CTRL 0 +# define EVP_F_UPDATE 0 + +/* + * KDF function codes. + */ +# define KDF_F_PKEY_HKDF_CTRL_STR 0 +# define KDF_F_PKEY_HKDF_DERIVE 0 +# define KDF_F_PKEY_HKDF_INIT 0 +# define KDF_F_PKEY_SCRYPT_CTRL_STR 0 +# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 0 +# define KDF_F_PKEY_SCRYPT_DERIVE 0 +# define KDF_F_PKEY_SCRYPT_INIT 0 +# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 0 +# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 0 +# define KDF_F_PKEY_TLS1_PRF_DERIVE 0 +# define KDF_F_PKEY_TLS1_PRF_INIT 0 +# define KDF_F_TLS1_PRF_ALG 0 + +/* + * KDF reason codes. + */ +# define KDF_R_INVALID_DIGEST 0 +# define KDF_R_MISSING_ITERATION_COUNT 0 +# define KDF_R_MISSING_KEY 0 +# define KDF_R_MISSING_MESSAGE_DIGEST 0 +# define KDF_R_MISSING_PARAMETER 0 +# define KDF_R_MISSING_PASS 0 +# define KDF_R_MISSING_SALT 0 +# define KDF_R_MISSING_SECRET 0 +# define KDF_R_MISSING_SEED 0 +# define KDF_R_UNKNOWN_PARAMETER_TYPE 0 +# define KDF_R_VALUE_ERROR 0 +# define KDF_R_VALUE_MISSING 0 + +/* + * OBJ function codes. + */ +# define OBJ_F_OBJ_ADD_OBJECT 0 +# define OBJ_F_OBJ_ADD_SIGID 0 +# define OBJ_F_OBJ_CREATE 0 +# define OBJ_F_OBJ_DUP 0 +# define OBJ_F_OBJ_NAME_NEW_INDEX 0 +# define OBJ_F_OBJ_NID2LN 0 +# define OBJ_F_OBJ_NID2OBJ 0 +# define OBJ_F_OBJ_NID2SN 0 +# define OBJ_F_OBJ_TXT2OBJ 0 + +# ifndef OPENSSL_NO_OCSP +/* + * OCSP function codes. + */ +# define OCSP_F_D2I_OCSP_NONCE 0 +# define OCSP_F_OCSP_BASIC_ADD1_STATUS 0 +# define OCSP_F_OCSP_BASIC_SIGN 0 +# define OCSP_F_OCSP_BASIC_SIGN_CTX 0 +# define OCSP_F_OCSP_BASIC_VERIFY 0 +# define OCSP_F_OCSP_CERT_ID_NEW 0 +# define OCSP_F_OCSP_CHECK_DELEGATED 0 +# define OCSP_F_OCSP_CHECK_IDS 0 +# define OCSP_F_OCSP_CHECK_ISSUER 0 +# define OCSP_F_OCSP_CHECK_VALIDITY 0 +# define OCSP_F_OCSP_MATCH_ISSUERID 0 +# define OCSP_F_OCSP_PARSE_URL 0 +# define OCSP_F_OCSP_REQUEST_SIGN 0 +# define OCSP_F_OCSP_REQUEST_VERIFY 0 +# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 0 +# define OCSP_F_PARSE_HTTP_LINE1 0 +# endif + +/* + * PEM function codes. + */ +# define PEM_F_B2I_DSS 0 +# define PEM_F_B2I_PVK_BIO 0 +# define PEM_F_B2I_RSA 0 +# define PEM_F_CHECK_BITLEN_DSA 0 +# define PEM_F_CHECK_BITLEN_RSA 0 +# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 0 +# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 0 +# define PEM_F_DO_B2I 0 +# define PEM_F_DO_B2I_BIO 0 +# define PEM_F_DO_BLOB_HEADER 0 +# define PEM_F_DO_I2B 0 +# define PEM_F_DO_PK8PKEY 0 +# define PEM_F_DO_PK8PKEY_FP 0 +# define PEM_F_DO_PVK_BODY 0 +# define PEM_F_DO_PVK_HEADER 0 +# define PEM_F_GET_HEADER_AND_DATA 0 +# define PEM_F_GET_NAME 0 +# define PEM_F_I2B_PVK 0 +# define PEM_F_I2B_PVK_BIO 0 +# define PEM_F_LOAD_IV 0 +# define PEM_F_PEM_ASN1_READ 0 +# define PEM_F_PEM_ASN1_READ_BIO 0 +# define PEM_F_PEM_ASN1_WRITE 0 +# define PEM_F_PEM_ASN1_WRITE_BIO 0 +# define PEM_F_PEM_DEF_CALLBACK 0 +# define PEM_F_PEM_DO_HEADER 0 +# define PEM_F_PEM_GET_EVP_CIPHER_INFO 0 +# define PEM_F_PEM_READ 0 +# define PEM_F_PEM_READ_BIO 0 +# define PEM_F_PEM_READ_BIO_DHPARAMS 0 +# define PEM_F_PEM_READ_BIO_EX 0 +# define PEM_F_PEM_READ_BIO_PARAMETERS 0 +# define PEM_F_PEM_READ_BIO_PRIVATEKEY 0 +# define PEM_F_PEM_READ_DHPARAMS 0 +# define PEM_F_PEM_READ_PRIVATEKEY 0 +# define PEM_F_PEM_SIGNFINAL 0 +# define PEM_F_PEM_WRITE 0 +# define PEM_F_PEM_WRITE_BIO 0 +# define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL 0 +# define PEM_F_PEM_WRITE_PRIVATEKEY 0 +# define PEM_F_PEM_X509_INFO_READ 0 +# define PEM_F_PEM_X509_INFO_READ_BIO 0 +# define PEM_F_PEM_X509_INFO_WRITE_BIO 0 + +/* + * PKCS12 function codes. + */ +# define PKCS12_F_OPENSSL_ASC2UNI 0 +# define PKCS12_F_OPENSSL_UNI2ASC 0 +# define PKCS12_F_OPENSSL_UNI2UTF8 0 +# define PKCS12_F_OPENSSL_UTF82UNI 0 +# define PKCS12_F_PKCS12_CREATE 0 +# define PKCS12_F_PKCS12_GEN_MAC 0 +# define PKCS12_F_PKCS12_INIT 0 +# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 0 +# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 0 +# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 0 +# define PKCS12_F_PKCS12_KEY_GEN_ASC 0 +# define PKCS12_F_PKCS12_KEY_GEN_UNI 0 +# define PKCS12_F_PKCS12_KEY_GEN_UTF8 0 +# define PKCS12_F_PKCS12_NEWPASS 0 +# define PKCS12_F_PKCS12_PACK_P7DATA 0 +# define PKCS12_F_PKCS12_PACK_P7ENCDATA 0 +# define PKCS12_F_PKCS12_PARSE 0 +# define PKCS12_F_PKCS12_PBE_CRYPT 0 +# define PKCS12_F_PKCS12_PBE_KEYIVGEN 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 0 +# define PKCS12_F_PKCS12_SETUP_MAC 0 +# define PKCS12_F_PKCS12_SET_MAC 0 +# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 0 +# define PKCS12_F_PKCS12_UNPACK_P7DATA 0 +# define PKCS12_F_PKCS12_VERIFY_MAC 0 +# define PKCS12_F_PKCS8_ENCRYPT 0 +# define PKCS12_F_PKCS8_SET0_PBE 0 + +/* + * PKCS7 function codes. + */ +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 0 +# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 0 +# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 0 +# define PKCS7_F_PKCS7_ADD_CERTIFICATE 0 +# define PKCS7_F_PKCS7_ADD_CRL 0 +# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 0 +# define PKCS7_F_PKCS7_ADD_SIGNATURE 0 +# define PKCS7_F_PKCS7_ADD_SIGNER 0 +# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 0 +# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 0 +# define PKCS7_F_PKCS7_CTRL 0 +# define PKCS7_F_PKCS7_DATADECODE 0 +# define PKCS7_F_PKCS7_DATAFINAL 0 +# define PKCS7_F_PKCS7_DATAINIT 0 +# define PKCS7_F_PKCS7_DATAVERIFY 0 +# define PKCS7_F_PKCS7_DECRYPT 0 +# define PKCS7_F_PKCS7_DECRYPT_RINFO 0 +# define PKCS7_F_PKCS7_ENCODE_RINFO 0 +# define PKCS7_F_PKCS7_ENCRYPT 0 +# define PKCS7_F_PKCS7_FINAL 0 +# define PKCS7_F_PKCS7_FIND_DIGEST 0 +# define PKCS7_F_PKCS7_GET0_SIGNERS 0 +# define PKCS7_F_PKCS7_RECIP_INFO_SET 0 +# define PKCS7_F_PKCS7_SET_CIPHER 0 +# define PKCS7_F_PKCS7_SET_CONTENT 0 +# define PKCS7_F_PKCS7_SET_DIGEST 0 +# define PKCS7_F_PKCS7_SET_TYPE 0 +# define PKCS7_F_PKCS7_SIGN 0 +# define PKCS7_F_PKCS7_SIGNATUREVERIFY 0 +# define PKCS7_F_PKCS7_SIGNER_INFO_SET 0 +# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 0 +# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 0 +# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 0 +# define PKCS7_F_PKCS7_VERIFY 0 + +/* + * RAND function codes. + */ +# define RAND_F_DATA_COLLECT_METHOD 0 +# define RAND_F_DRBG_BYTES 0 +# define RAND_F_DRBG_GET_ENTROPY 0 +# define RAND_F_DRBG_SETUP 0 +# define RAND_F_GET_ENTROPY 0 +# define RAND_F_RAND_BYTES 0 +# define RAND_F_RAND_DRBG_ENABLE_LOCKING 0 +# define RAND_F_RAND_DRBG_GENERATE 0 +# define RAND_F_RAND_DRBG_GET_ENTROPY 0 +# define RAND_F_RAND_DRBG_GET_NONCE 0 +# define RAND_F_RAND_DRBG_INSTANTIATE 0 +# define RAND_F_RAND_DRBG_NEW 0 +# define RAND_F_RAND_DRBG_RESEED 0 +# define RAND_F_RAND_DRBG_RESTART 0 +# define RAND_F_RAND_DRBG_SET 0 +# define RAND_F_RAND_DRBG_SET_DEFAULTS 0 +# define RAND_F_RAND_DRBG_UNINSTANTIATE 0 +# define RAND_F_RAND_LOAD_FILE 0 +# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 0 +# define RAND_F_RAND_POOL_ADD 0 +# define RAND_F_RAND_POOL_ADD_BEGIN 0 +# define RAND_F_RAND_POOL_ADD_END 0 +# define RAND_F_RAND_POOL_ATTACH 0 +# define RAND_F_RAND_POOL_BYTES_NEEDED 0 +# define RAND_F_RAND_POOL_GROW 0 +# define RAND_F_RAND_POOL_NEW 0 +# define RAND_F_RAND_PSEUDO_BYTES 0 +# define RAND_F_RAND_WRITE_FILE 0 + +/* + * RSA function codes. + */ +# define RSA_F_CHECK_PADDING_MD 0 +# define RSA_F_ENCODE_PKCS1 0 +# define RSA_F_INT_RSA_VERIFY 0 +# define RSA_F_OLD_RSA_PRIV_DECODE 0 +# define RSA_F_PKEY_PSS_INIT 0 +# define RSA_F_PKEY_RSA_CTRL 0 +# define RSA_F_PKEY_RSA_CTRL_STR 0 +# define RSA_F_PKEY_RSA_SIGN 0 +# define RSA_F_PKEY_RSA_VERIFY 0 +# define RSA_F_PKEY_RSA_VERIFYRECOVER 0 +# define RSA_F_RSA_ALGOR_TO_MD 0 +# define RSA_F_RSA_BUILTIN_KEYGEN 0 +# define RSA_F_RSA_CHECK_KEY 0 +# define RSA_F_RSA_CHECK_KEY_EX 0 +# define RSA_F_RSA_CMS_DECRYPT 0 +# define RSA_F_RSA_CMS_VERIFY 0 +# define RSA_F_RSA_ITEM_VERIFY 0 +# define RSA_F_RSA_METH_DUP 0 +# define RSA_F_RSA_METH_NEW 0 +# define RSA_F_RSA_METH_SET1_NAME 0 +# define RSA_F_RSA_MGF1_TO_MD 0 +# define RSA_F_RSA_MULTIP_INFO_NEW 0 +# define RSA_F_RSA_NEW_METHOD 0 +# define RSA_F_RSA_NULL 0 +# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 0 +# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 0 +# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 0 +# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 0 +# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 0 +# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 0 +# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 0 +# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 0 +# define RSA_F_RSA_PADDING_ADD_NONE 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 0 +# define RSA_F_RSA_PADDING_ADD_SSLV23 0 +# define RSA_F_RSA_PADDING_ADD_X931 0 +# define RSA_F_RSA_PADDING_CHECK_NONE 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 0 +# define RSA_F_RSA_PADDING_CHECK_SSLV23 0 +# define RSA_F_RSA_PADDING_CHECK_X931 0 +# define RSA_F_RSA_PARAM_DECODE 0 +# define RSA_F_RSA_PRINT 0 +# define RSA_F_RSA_PRINT_FP 0 +# define RSA_F_RSA_PRIV_DECODE 0 +# define RSA_F_RSA_PRIV_ENCODE 0 +# define RSA_F_RSA_PSS_GET_PARAM 0 +# define RSA_F_RSA_PSS_TO_CTX 0 +# define RSA_F_RSA_PUB_DECODE 0 +# define RSA_F_RSA_SETUP_BLINDING 0 +# define RSA_F_RSA_SIGN 0 +# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 0 +# define RSA_F_RSA_VERIFY 0 +# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 0 +# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 0 +# define RSA_F_SETUP_TBUF 0 + +/* + * OSSL_STORE function codes. + */ +# define OSSL_STORE_F_FILE_CTRL 0 +# define OSSL_STORE_F_FILE_FIND 0 +# define OSSL_STORE_F_FILE_GET_PASS 0 +# define OSSL_STORE_F_FILE_LOAD 0 +# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 0 +# define OSSL_STORE_F_FILE_NAME_TO_URI 0 +# define OSSL_STORE_F_FILE_OPEN 0 +# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 0 +# define OSSL_STORE_F_OSSL_STORE_EXPECT 0 +# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 0 +# define OSSL_STORE_F_OSSL_STORE_FIND 0 +# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 0 +# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 0 +# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 0 +# define OSSL_STORE_F_OSSL_STORE_OPEN 0 +# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 0 +# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 0 +# define OSSL_STORE_F_TRY_DECODE_PARAMS 0 +# define OSSL_STORE_F_TRY_DECODE_PKCS12 0 +# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 0 + +# ifndef OPENSSL_NO_TS +/* + * TS function codes. + */ +# define TS_F_DEF_SERIAL_CB 0 +# define TS_F_DEF_TIME_CB 0 +# define TS_F_ESS_ADD_SIGNING_CERT 0 +# define TS_F_ESS_ADD_SIGNING_CERT_V2 0 +# define TS_F_ESS_CERT_ID_NEW_INIT 0 +# define TS_F_ESS_CERT_ID_V2_NEW_INIT 0 +# define TS_F_ESS_SIGNING_CERT_NEW_INIT 0 +# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 0 +# define TS_F_INT_TS_RESP_VERIFY_TOKEN 0 +# define TS_F_PKCS7_TO_TS_TST_INFO 0 +# define TS_F_TS_ACCURACY_SET_MICROS 0 +# define TS_F_TS_ACCURACY_SET_MILLIS 0 +# define TS_F_TS_ACCURACY_SET_SECONDS 0 +# define TS_F_TS_CHECK_IMPRINTS 0 +# define TS_F_TS_CHECK_NONCES 0 +# define TS_F_TS_CHECK_POLICY 0 +# define TS_F_TS_CHECK_SIGNING_CERTS 0 +# define TS_F_TS_CHECK_STATUS_INFO 0 +# define TS_F_TS_COMPUTE_IMPRINT 0 +# define TS_F_TS_CONF_INVALID 0 +# define TS_F_TS_CONF_LOAD_CERT 0 +# define TS_F_TS_CONF_LOAD_CERTS 0 +# define TS_F_TS_CONF_LOAD_KEY 0 +# define TS_F_TS_CONF_LOOKUP_FAIL 0 +# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 0 +# define TS_F_TS_GET_STATUS_TEXT 0 +# define TS_F_TS_MSG_IMPRINT_SET_ALGO 0 +# define TS_F_TS_REQ_SET_MSG_IMPRINT 0 +# define TS_F_TS_REQ_SET_NONCE 0 +# define TS_F_TS_REQ_SET_POLICY_ID 0 +# define TS_F_TS_RESP_CREATE_RESPONSE 0 +# define TS_F_TS_RESP_CREATE_TST_INFO 0 +# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 0 +# define TS_F_TS_RESP_CTX_ADD_MD 0 +# define TS_F_TS_RESP_CTX_ADD_POLICY 0 +# define TS_F_TS_RESP_CTX_NEW 0 +# define TS_F_TS_RESP_CTX_SET_ACCURACY 0 +# define TS_F_TS_RESP_CTX_SET_CERTS 0 +# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 0 +# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 0 +# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 0 +# define TS_F_TS_RESP_GET_POLICY 0 +# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 0 +# define TS_F_TS_RESP_SET_STATUS_INFO 0 +# define TS_F_TS_RESP_SET_TST_INFO 0 +# define TS_F_TS_RESP_SIGN 0 +# define TS_F_TS_RESP_VERIFY_SIGNATURE 0 +# define TS_F_TS_TST_INFO_SET_ACCURACY 0 +# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 0 +# define TS_F_TS_TST_INFO_SET_NONCE 0 +# define TS_F_TS_TST_INFO_SET_POLICY_ID 0 +# define TS_F_TS_TST_INFO_SET_SERIAL 0 +# define TS_F_TS_TST_INFO_SET_TIME 0 +# define TS_F_TS_TST_INFO_SET_TSA 0 +# define TS_F_TS_VERIFY 0 +# define TS_F_TS_VERIFY_CERT 0 +# define TS_F_TS_VERIFY_CTX_NEW 0 +# endif + +/* + * UI function codes. + */ +# define UI_F_CLOSE_CONSOLE 0 +# define UI_F_ECHO_CONSOLE 0 +# define UI_F_GENERAL_ALLOCATE_BOOLEAN 0 +# define UI_F_GENERAL_ALLOCATE_PROMPT 0 +# define UI_F_NOECHO_CONSOLE 0 +# define UI_F_OPEN_CONSOLE 0 +# define UI_F_UI_CONSTRUCT_PROMPT 0 +# define UI_F_UI_CREATE_METHOD 0 +# define UI_F_UI_CTRL 0 +# define UI_F_UI_DUP_ERROR_STRING 0 +# define UI_F_UI_DUP_INFO_STRING 0 +# define UI_F_UI_DUP_INPUT_BOOLEAN 0 +# define UI_F_UI_DUP_INPUT_STRING 0 +# define UI_F_UI_DUP_USER_DATA 0 +# define UI_F_UI_DUP_VERIFY_STRING 0 +# define UI_F_UI_GET0_RESULT 0 +# define UI_F_UI_GET_RESULT_LENGTH 0 +# define UI_F_UI_NEW_METHOD 0 +# define UI_F_UI_PROCESS 0 +# define UI_F_UI_SET_RESULT 0 +# define UI_F_UI_SET_RESULT_EX 0 + +/* + * X509 function codes. + */ +# define X509_F_ADD_CERT_DIR 0 +# define X509_F_BUILD_CHAIN 0 +# define X509_F_BY_FILE_CTRL 0 +# define X509_F_CHECK_NAME_CONSTRAINTS 0 +# define X509_F_CHECK_POLICY 0 +# define X509_F_DANE_I2D 0 +# define X509_F_DIR_CTRL 0 +# define X509_F_GET_CERT_BY_SUBJECT 0 +# define X509_F_I2D_X509_AUX 0 +# define X509_F_LOOKUP_CERTS_SK 0 +# define X509_F_NETSCAPE_SPKI_B64_DECODE 0 +# define X509_F_NETSCAPE_SPKI_B64_ENCODE 0 +# define X509_F_NEW_DIR 0 +# define X509_F_X509AT_ADD1_ATTR 0 +# define X509_F_X509V3_ADD_EXT 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 0 +# define X509_F_X509_ATTRIBUTE_GET0_DATA 0 +# define X509_F_X509_ATTRIBUTE_SET1_DATA 0 +# define X509_F_X509_CHECK_PRIVATE_KEY 0 +# define X509_F_X509_CRL_DIFF 0 +# define X509_F_X509_CRL_METHOD_NEW 0 +# define X509_F_X509_CRL_PRINT_FP 0 +# define X509_F_X509_EXTENSION_CREATE_BY_NID 0 +# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 0 +# define X509_F_X509_GET_PUBKEY_PARAMETERS 0 +# define X509_F_X509_LOAD_CERT_CRL_FILE 0 +# define X509_F_X509_LOAD_CERT_FILE 0 +# define X509_F_X509_LOAD_CRL_FILE 0 +# define X509_F_X509_LOOKUP_METH_NEW 0 +# define X509_F_X509_LOOKUP_NEW 0 +# define X509_F_X509_NAME_ADD_ENTRY 0 +# define X509_F_X509_NAME_CANON 0 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 0 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 0 +# define X509_F_X509_NAME_ENTRY_SET_OBJECT 0 +# define X509_F_X509_NAME_ONELINE 0 +# define X509_F_X509_NAME_PRINT 0 +# define X509_F_X509_OBJECT_NEW 0 +# define X509_F_X509_PRINT_EX_FP 0 +# define X509_F_X509_PUBKEY_DECODE 0 +# define X509_F_X509_PUBKEY_GET 0 +# define X509_F_X509_PUBKEY_GET0 0 +# define X509_F_X509_PUBKEY_SET 0 +# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 0 +# define X509_F_X509_REQ_PRINT_EX 0 +# define X509_F_X509_REQ_PRINT_FP 0 +# define X509_F_X509_REQ_TO_X509 0 +# define X509_F_X509_STORE_ADD_CERT 0 +# define X509_F_X509_STORE_ADD_CRL 0 +# define X509_F_X509_STORE_ADD_LOOKUP 0 +# define X509_F_X509_STORE_CTX_GET1_ISSUER 0 +# define X509_F_X509_STORE_CTX_INIT 0 +# define X509_F_X509_STORE_CTX_NEW 0 +# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 0 +# define X509_F_X509_STORE_NEW 0 +# define X509_F_X509_TO_X509_REQ 0 +# define X509_F_X509_TRUST_ADD 0 +# define X509_F_X509_TRUST_SET 0 +# define X509_F_X509_VERIFY_CERT 0 +# define X509_F_X509_VERIFY_PARAM_NEW 0 + +/* + * X509V3 function codes. + */ +# define X509V3_F_A2I_GENERAL_NAME 0 +# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 0 +# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 0 +# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 0 +# define X509V3_F_BIGNUM_TO_STRING 0 +# define X509V3_F_COPY_EMAIL 0 +# define X509V3_F_COPY_ISSUER 0 +# define X509V3_F_DO_DIRNAME 0 +# define X509V3_F_DO_EXT_I2D 0 +# define X509V3_F_DO_EXT_NCONF 0 +# define X509V3_F_GNAMES_FROM_SECTNAME 0 +# define X509V3_F_I2S_ASN1_ENUMERATED 0 +# define X509V3_F_I2S_ASN1_IA5STRING 0 +# define X509V3_F_I2S_ASN1_INTEGER 0 +# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 0 +# define X509V3_F_LEVEL_ADD_NODE 0 +# define X509V3_F_NOTICE_SECTION 0 +# define X509V3_F_NREF_NOS 0 +# define X509V3_F_POLICY_CACHE_CREATE 0 +# define X509V3_F_POLICY_CACHE_NEW 0 +# define X509V3_F_POLICY_DATA_NEW 0 +# define X509V3_F_POLICY_SECTION 0 +# define X509V3_F_PROCESS_PCI_VALUE 0 +# define X509V3_F_R2I_CERTPOL 0 +# define X509V3_F_R2I_PCI 0 +# define X509V3_F_S2I_ASN1_IA5STRING 0 +# define X509V3_F_S2I_ASN1_INTEGER 0 +# define X509V3_F_S2I_ASN1_OCTET_STRING 0 +# define X509V3_F_S2I_SKEY_ID 0 +# define X509V3_F_SET_DIST_POINT_NAME 0 +# define X509V3_F_SXNET_ADD_ID_ASC 0 +# define X509V3_F_SXNET_ADD_ID_INTEGER 0 +# define X509V3_F_SXNET_ADD_ID_ULONG 0 +# define X509V3_F_SXNET_GET_ID_ASC 0 +# define X509V3_F_SXNET_GET_ID_ULONG 0 +# define X509V3_F_TREE_INIT 0 +# define X509V3_F_V2I_ASIDENTIFIERS 0 +# define X509V3_F_V2I_ASN1_BIT_STRING 0 +# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 0 +# define X509V3_F_V2I_AUTHORITY_KEYID 0 +# define X509V3_F_V2I_BASIC_CONSTRAINTS 0 +# define X509V3_F_V2I_CRLD 0 +# define X509V3_F_V2I_EXTENDED_KEY_USAGE 0 +# define X509V3_F_V2I_GENERAL_NAMES 0 +# define X509V3_F_V2I_GENERAL_NAME_EX 0 +# define X509V3_F_V2I_IDP 0 +# define X509V3_F_V2I_IPADDRBLOCKS 0 +# define X509V3_F_V2I_ISSUER_ALT 0 +# define X509V3_F_V2I_NAME_CONSTRAINTS 0 +# define X509V3_F_V2I_POLICY_CONSTRAINTS 0 +# define X509V3_F_V2I_POLICY_MAPPINGS 0 +# define X509V3_F_V2I_SUBJECT_ALT 0 +# define X509V3_F_V2I_TLS_FEATURE 0 +# define X509V3_F_V3_GENERIC_EXTENSION 0 +# define X509V3_F_X509V3_ADD1_I2D 0 +# define X509V3_F_X509V3_ADD_VALUE 0 +# define X509V3_F_X509V3_EXT_ADD 0 +# define X509V3_F_X509V3_EXT_ADD_ALIAS 0 +# define X509V3_F_X509V3_EXT_I2D 0 +# define X509V3_F_X509V3_EXT_NCONF 0 +# define X509V3_F_X509V3_GET_SECTION 0 +# define X509V3_F_X509V3_GET_STRING 0 +# define X509V3_F_X509V3_GET_VALUE_BOOL 0 +# define X509V3_F_X509V3_PARSE_LIST 0 +# define X509V3_F_X509_PURPOSE_ADD 0 +# define X509V3_F_X509_PURPOSE_SET 0 + +/* + * Compatibility defines. + */ +# define EVP_R_OPERATON_NOT_INITIALIZED EVP_R_OPERATION_NOT_INITIALIZED + +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ct.h b/deps/openssl/android/x86/usr/local/include/openssl/ct.h index ebdba34d..b6dd8c35 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ct.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ct.h @@ -1,19 +1,30 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ct.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CT_H -# define HEADER_CT_H + + +#ifndef OPENSSL_CT_H +# define OPENSSL_CT_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CT_H +# endif # include # ifndef OPENSSL_NO_CT -# include +# include # include # include # include @@ -28,6 +39,61 @@ extern "C" { /* All hashes are SHA256 in v1 of Certificate Transparency */ # define CT_V1_HASHLEN SHA256_DIGEST_LENGTH +SKM_DEFINE_STACK_OF_INTERNAL(SCT, SCT, SCT) +#define sk_SCT_num(sk) OPENSSL_sk_num(ossl_check_const_SCT_sk_type(sk)) +#define sk_SCT_value(sk, idx) ((SCT *)OPENSSL_sk_value(ossl_check_const_SCT_sk_type(sk), (idx))) +#define sk_SCT_new(cmp) ((STACK_OF(SCT) *)OPENSSL_sk_new(ossl_check_SCT_compfunc_type(cmp))) +#define sk_SCT_new_null() ((STACK_OF(SCT) *)OPENSSL_sk_new_null()) +#define sk_SCT_new_reserve(cmp, n) ((STACK_OF(SCT) *)OPENSSL_sk_new_reserve(ossl_check_SCT_compfunc_type(cmp), (n))) +#define sk_SCT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SCT_sk_type(sk), (n)) +#define sk_SCT_free(sk) OPENSSL_sk_free(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_zero(sk) OPENSSL_sk_zero(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_delete(sk, i) ((SCT *)OPENSSL_sk_delete(ossl_check_SCT_sk_type(sk), (i))) +#define sk_SCT_delete_ptr(sk, ptr) ((SCT *)OPENSSL_sk_delete_ptr(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr))) +#define sk_SCT_push(sk, ptr) OPENSSL_sk_push(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_pop(sk) ((SCT *)OPENSSL_sk_pop(ossl_check_SCT_sk_type(sk))) +#define sk_SCT_shift(sk) ((SCT *)OPENSSL_sk_shift(ossl_check_SCT_sk_type(sk))) +#define sk_SCT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SCT_sk_type(sk),ossl_check_SCT_freefunc_type(freefunc)) +#define sk_SCT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), (idx)) +#define sk_SCT_set(sk, idx, ptr) ((SCT *)OPENSSL_sk_set(ossl_check_SCT_sk_type(sk), (idx), ossl_check_SCT_type(ptr))) +#define sk_SCT_find(sk, ptr) OPENSSL_sk_find(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), pnum) +#define sk_SCT_sort(sk) OPENSSL_sk_sort(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SCT_sk_type(sk)) +#define sk_SCT_dup(sk) ((STACK_OF(SCT) *)OPENSSL_sk_dup(ossl_check_const_SCT_sk_type(sk))) +#define sk_SCT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SCT) *)OPENSSL_sk_deep_copy(ossl_check_const_SCT_sk_type(sk), ossl_check_SCT_copyfunc_type(copyfunc), ossl_check_SCT_freefunc_type(freefunc))) +#define sk_SCT_set_cmp_func(sk, cmp) ((sk_SCT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SCT_sk_type(sk), ossl_check_SCT_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CTLOG, CTLOG, CTLOG) +#define sk_CTLOG_num(sk) OPENSSL_sk_num(ossl_check_const_CTLOG_sk_type(sk)) +#define sk_CTLOG_value(sk, idx) ((CTLOG *)OPENSSL_sk_value(ossl_check_const_CTLOG_sk_type(sk), (idx))) +#define sk_CTLOG_new(cmp) ((STACK_OF(CTLOG) *)OPENSSL_sk_new(ossl_check_CTLOG_compfunc_type(cmp))) +#define sk_CTLOG_new_null() ((STACK_OF(CTLOG) *)OPENSSL_sk_new_null()) +#define sk_CTLOG_new_reserve(cmp, n) ((STACK_OF(CTLOG) *)OPENSSL_sk_new_reserve(ossl_check_CTLOG_compfunc_type(cmp), (n))) +#define sk_CTLOG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CTLOG_sk_type(sk), (n)) +#define sk_CTLOG_free(sk) OPENSSL_sk_free(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_zero(sk) OPENSSL_sk_zero(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_delete(sk, i) ((CTLOG *)OPENSSL_sk_delete(ossl_check_CTLOG_sk_type(sk), (i))) +#define sk_CTLOG_delete_ptr(sk, ptr) ((CTLOG *)OPENSSL_sk_delete_ptr(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr))) +#define sk_CTLOG_push(sk, ptr) OPENSSL_sk_push(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_pop(sk) ((CTLOG *)OPENSSL_sk_pop(ossl_check_CTLOG_sk_type(sk))) +#define sk_CTLOG_shift(sk) ((CTLOG *)OPENSSL_sk_shift(ossl_check_CTLOG_sk_type(sk))) +#define sk_CTLOG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CTLOG_sk_type(sk),ossl_check_CTLOG_freefunc_type(freefunc)) +#define sk_CTLOG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), (idx)) +#define sk_CTLOG_set(sk, idx, ptr) ((CTLOG *)OPENSSL_sk_set(ossl_check_CTLOG_sk_type(sk), (idx), ossl_check_CTLOG_type(ptr))) +#define sk_CTLOG_find(sk, ptr) OPENSSL_sk_find(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), pnum) +#define sk_CTLOG_sort(sk) OPENSSL_sk_sort(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CTLOG_sk_type(sk)) +#define sk_CTLOG_dup(sk) ((STACK_OF(CTLOG) *)OPENSSL_sk_dup(ossl_check_const_CTLOG_sk_type(sk))) +#define sk_CTLOG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CTLOG) *)OPENSSL_sk_deep_copy(ossl_check_const_CTLOG_sk_type(sk), ossl_check_CTLOG_copyfunc_type(copyfunc), ossl_check_CTLOG_freefunc_type(freefunc))) +#define sk_CTLOG_set_cmp_func(sk, cmp) ((sk_CTLOG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_compfunc_type(cmp))) + + + typedef enum { CT_LOG_ENTRY_TYPE_NOT_SET = -1, CT_LOG_ENTRY_TYPE_X509 = 0, @@ -55,18 +121,23 @@ typedef enum { SCT_VALIDATION_STATUS_UNKNOWN_VERSION } sct_validation_status_t; -DEFINE_STACK_OF(SCT) -DEFINE_STACK_OF(CTLOG) - /****************************************** * CT policy evaluation context functions * ******************************************/ /* - * Creates a new, empty policy evaluation context. + * Creates a new, empty policy evaluation context associated with the given + * library context and property query string. * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished * with the CT_POLICY_EVAL_CTX. */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new_ex(OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CT_POLICY_EVAL_CTX_new_ex() but the default library + * context and property query string is used. + */ CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); /* Deletes a policy evaluation context and anything it owns. */ @@ -317,7 +388,7 @@ __owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, /********************************* - * SCT parsing and serialisation * + * SCT parsing and serialization * *********************************/ /* @@ -403,19 +474,39 @@ SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); ********************/ /* - * Creates a new CT log instance with the given |public_key| and |name|. + * Creates a new CT log instance with the given |public_key| and |name| and + * associates it with the give library context |libctx| and property query + * string |propq|. * Takes ownership of |public_key| but copies |name|. * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. * Should be deleted by the caller using CTLOG_free when no longer needed. */ +CTLOG *CTLOG_new_ex(EVP_PKEY *public_key, const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_ex except that the default library context and + * property query string are used. + */ CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); /* * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER - * in |pkey_base64|. The |name| is a string to help users identify this log. + * in |pkey_base64| and associated with the given library context |libctx| and + * property query string |propq|. The |name| is a string to help users identify + * this log. * Returns 1 on success, 0 on failure. * Should be deleted by the caller using CTLOG_free when no longer needed. */ +int CTLOG_new_from_base64_ex(CTLOG **ct_log, const char *pkey_base64, + const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_from_base64_ex() except that the default + * library context and property query string are used. + * Returns 1 on success, 0 on failure. + */ int CTLOG_new_from_base64(CTLOG ** ct_log, const char *pkey_base64, const char *name); @@ -437,7 +528,15 @@ EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); **************************/ /* - * Creates a new CT log store. + * Creates a new CT log store and associates it with the given libctx and + * property query string. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +/* + * Same as CTLOG_STORE_new_ex except that the default libctx and + * property query string are used. * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. */ CTLOG_STORE *CTLOG_STORE_new(void); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ct.h.in b/deps/openssl/android/x86/usr/local/include/openssl/ct.h.in new file mode 100644 index 00000000..16086b33 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/ct.h.in @@ -0,0 +1,525 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CT_H +# define OPENSSL_CT_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CT_H +# endif + +# include + +# ifndef OPENSSL_NO_CT +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + + +/* Minimum RSA key size, from RFC6962 */ +# define SCT_MIN_RSA_BITS 2048 + +/* All hashes are SHA256 in v1 of Certificate Transparency */ +# define CT_V1_HASHLEN SHA256_DIGEST_LENGTH + +{- + generate_stack_macros("SCT") + .generate_stack_macros("CTLOG"); +-} + + +typedef enum { + CT_LOG_ENTRY_TYPE_NOT_SET = -1, + CT_LOG_ENTRY_TYPE_X509 = 0, + CT_LOG_ENTRY_TYPE_PRECERT = 1 +} ct_log_entry_type_t; + +typedef enum { + SCT_VERSION_NOT_SET = -1, + SCT_VERSION_V1 = 0 +} sct_version_t; + +typedef enum { + SCT_SOURCE_UNKNOWN, + SCT_SOURCE_TLS_EXTENSION, + SCT_SOURCE_X509V3_EXTENSION, + SCT_SOURCE_OCSP_STAPLED_RESPONSE +} sct_source_t; + +typedef enum { + SCT_VALIDATION_STATUS_NOT_SET, + SCT_VALIDATION_STATUS_UNKNOWN_LOG, + SCT_VALIDATION_STATUS_VALID, + SCT_VALIDATION_STATUS_INVALID, + SCT_VALIDATION_STATUS_UNVERIFIED, + SCT_VALIDATION_STATUS_UNKNOWN_VERSION +} sct_validation_status_t; + +/****************************************** + * CT policy evaluation context functions * + ******************************************/ + +/* + * Creates a new, empty policy evaluation context associated with the given + * library context and property query string. + * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished + * with the CT_POLICY_EVAL_CTX. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new_ex(OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CT_POLICY_EVAL_CTX_new_ex() but the default library + * context and property query string is used. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); + +/* Deletes a policy evaluation context and anything it owns. */ +void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx); + +/* Gets the peer certificate that the SCTs are for */ +X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the certificate associated with the received SCTs. + * Increments the reference count of cert. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert); + +/* Gets the issuer of the aforementioned certificate */ +X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the issuer of the certificate associated with the received SCTs. + * Increments the reference count of issuer. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer); + +/* Gets the CT logs that are trusted sources of SCTs */ +const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx); + +/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */ +void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx, + CTLOG_STORE *log_store); + +/* + * Gets the time, in milliseconds since the Unix epoch, that will be used as the + * current time when checking whether an SCT was issued in the future. + * Such SCTs will fail validation, as required by RFC6962. + */ +uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the time to evaluate SCTs against, in milliseconds since the Unix epoch. + * If an SCT's timestamp is after this time, it will be interpreted as having + * been issued in the future. RFC6962 states that "TLS clients MUST reject SCTs + * whose timestamp is in the future", so an SCT will not validate in this case. + */ +void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms); + +/***************** + * SCT functions * + *****************/ + +/* + * Creates a new, blank SCT. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new(void); + +/* + * Creates a new SCT from some base64-encoded strings. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new_from_base64(unsigned char version, + const char *logid_base64, + ct_log_entry_type_t entry_type, + uint64_t timestamp, + const char *extensions_base64, + const char *signature_base64); + +/* + * Frees the SCT and the underlying data structures. + */ +void SCT_free(SCT *sct); + +/* + * Free a stack of SCTs, and the underlying SCTs themselves. + * Intended to be compatible with X509V3_EXT_FREE. + */ +void SCT_LIST_free(STACK_OF(SCT) *a); + +/* + * Returns the version of the SCT. + */ +sct_version_t SCT_get_version(const SCT *sct); + +/* + * Set the version of an SCT. + * Returns 1 on success, 0 if the version is unrecognized. + */ +__owur int SCT_set_version(SCT *sct, sct_version_t version); + +/* + * Returns the log entry type of the SCT. + */ +ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct); + +/* + * Set the log entry type of an SCT. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type); + +/* + * Gets the ID of the log that an SCT came from. + * Ownership of the log ID remains with the SCT. + * Returns the length of the log ID. + */ +size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id); + +/* + * Set the log ID of an SCT to point directly to the *log_id specified. + * The SCT takes ownership of the specified pointer. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len); + +/* + * Set the log ID of an SCT. + * This makes a copy of the log_id. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_log_id(SCT *sct, const unsigned char *log_id, + size_t log_id_len); + +/* + * Returns the timestamp for the SCT (epoch time in milliseconds). + */ +uint64_t SCT_get_timestamp(const SCT *sct); + +/* + * Set the timestamp of an SCT (epoch time in milliseconds). + */ +void SCT_set_timestamp(SCT *sct, uint64_t timestamp); + +/* + * Return the NID for the signature used by the SCT. + * For CT v1, this will be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256 (or NID_undef if incorrect/unset). + */ +int SCT_get_signature_nid(const SCT *sct); + +/* + * Set the signature type of an SCT + * For CT v1, this should be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_signature_nid(SCT *sct, int nid); + +/* + * Set *ext to point to the extension data for the SCT. ext must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext); + +/* + * Set the extensions of an SCT to point directly to the *ext specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len); + +/* + * Set the extensions of an SCT. + * This takes a copy of the ext. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_extensions(SCT *sct, const unsigned char *ext, + size_t ext_len); + +/* + * Set *sig to point to the signature for the SCT. sig must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_signature(const SCT *sct, unsigned char **sig); + +/* + * Set the signature of an SCT to point directly to the *sig specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len); + +/* + * Set the signature of an SCT to be a copy of the *sig specified. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_signature(SCT *sct, const unsigned char *sig, + size_t sig_len); + +/* + * The origin of this SCT, e.g. TLS extension, OCSP response, etc. + */ +sct_source_t SCT_get_source(const SCT *sct); + +/* + * Set the origin of this SCT, e.g. TLS extension, OCSP response, etc. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_source(SCT *sct, sct_source_t source); + +/* + * Returns a text string describing the validation status of |sct|. + */ +const char *SCT_validation_status_string(const SCT *sct); + +/* + * Pretty-prints an |sct| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * If |logs| is not NULL, it will be used to lookup the CT log that the SCT came + * from, so that the log name can be printed. + */ +void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs); + +/* + * Pretty-prints an |sct_list| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * SCTs will be delimited by |separator|. + * If |logs| is not NULL, it will be used to lookup the CT log that each SCT + * came from, so that the log names can be printed. + */ +void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent, + const char *separator, const CTLOG_STORE *logs); + +/* + * Gets the last result of validating this SCT. + * If it has not been validated yet, returns SCT_VALIDATION_STATUS_NOT_SET. + */ +sct_validation_status_t SCT_get_validation_status(const SCT *sct); + +/* + * Validates the given SCT with the provided context. + * Sets the "validation_status" field of the SCT. + * Returns 1 if the SCT is valid and the signature verifies. + * Returns 0 if the SCT is invalid or could not be verified. + * Returns -1 if an error occurs. + */ +__owur int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx); + +/* + * Validates the given list of SCTs with the provided context. + * Sets the "validation_status" field of each SCT. + * Returns 1 if there are no invalid SCTs and all signatures verify. + * Returns 0 if at least one SCT is invalid or could not be verified. + * Returns a negative integer if an error occurs. + */ +__owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, + CT_POLICY_EVAL_CTX *ctx); + + +/********************************* + * SCT parsing and serialization * + *********************************/ + +/* + * Serialize (to TLS format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just return the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Convert TLS format SCT list to a stack of SCTs. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + size_t len); + +/* + * Serialize (to DER format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just returns the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Parses an SCT list in DER format and returns it. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + long len); + +/* + * Serialize (to TLS format) an |sct| and write it to |out|. + * If |out| is null, no SCT will be output but the length will still be returned. + * If |out| points to a null pointer, a string will be allocated to hold the + * TLS-format SCT. It is the responsibility of the caller to free it. + * If |out| points to an allocated string, the TLS-format SCT will be written + * to it. + * The length of the SCT in TLS format will be returned. + */ +__owur int i2o_SCT(const SCT *sct, unsigned char **out); + +/* + * Parses an SCT in TLS format and returns it. + * If |psct| is not null, it will end up pointing to the parsed SCT. If it + * already points to a non-null pointer, the pointer will be free'd. + * |in| should be a pointer to a string containing the TLS-format SCT. + * |in| will be advanced to the end of the SCT if parsing succeeds. + * |len| should be the length of the SCT in |in|. + * Returns NULL if an error occurs. + * If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len' + * fields will be populated (with |in| and |len| respectively). + */ +SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); + +/******************** + * CT log functions * + ********************/ + +/* + * Creates a new CT log instance with the given |public_key| and |name| and + * associates it with the give library context |libctx| and property query + * string |propq|. + * Takes ownership of |public_key| but copies |name|. + * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +CTLOG *CTLOG_new_ex(EVP_PKEY *public_key, const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_ex except that the default library context and + * property query string are used. + */ +CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); + +/* + * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER + * in |pkey_base64| and associated with the given library context |libctx| and + * property query string |propq|. The |name| is a string to help users identify + * this log. + * Returns 1 on success, 0 on failure. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +int CTLOG_new_from_base64_ex(CTLOG **ct_log, const char *pkey_base64, + const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_from_base64_ex() except that the default + * library context and property query string are used. + * Returns 1 on success, 0 on failure. + */ +int CTLOG_new_from_base64(CTLOG ** ct_log, + const char *pkey_base64, const char *name); + +/* + * Deletes a CT log instance and its fields. + */ +void CTLOG_free(CTLOG *log); + +/* Gets the name of the CT log */ +const char *CTLOG_get0_name(const CTLOG *log); +/* Gets the ID of the CT log */ +void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id, + size_t *log_id_len); +/* Gets the public key of the CT log */ +EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); + +/************************** + * CT log store functions * + **************************/ + +/* + * Creates a new CT log store and associates it with the given libctx and + * property query string. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +/* + * Same as CTLOG_STORE_new_ex except that the default libctx and + * property query string are used. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new(void); + +/* + * Deletes a CT log store and all of the CT log instances held within. + */ +void CTLOG_STORE_free(CTLOG_STORE *store); + +/* + * Finds a CT log in the store based on its log ID. + * Returns the CT log, or NULL if no match is found. + */ +const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store, + const uint8_t *log_id, + size_t log_id_len); + +/* + * Loads a CT log list into a |store| from a |file|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); + +/* + * Loads the default CT log list into a |store|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cterr.h b/deps/openssl/android/x86/usr/local/include/openssl/cterr.h index feb7bc56..935d32d8 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cterr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/cterr.h @@ -1,59 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CTERR_H -# define HEADER_CTERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_CTERR_H +# define OPENSSL_CTERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_CT -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CT_strings(void); - -/* - * CT function codes. - */ -# define CT_F_CTLOG_NEW 117 -# define CT_F_CTLOG_NEW_FROM_BASE64 118 -# define CT_F_CTLOG_NEW_FROM_CONF 119 -# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 -# define CT_F_CTLOG_STORE_LOAD_FILE 123 -# define CT_F_CTLOG_STORE_LOAD_LOG 130 -# define CT_F_CTLOG_STORE_NEW 131 -# define CT_F_CT_BASE64_DECODE 124 -# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 -# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 -# define CT_F_I2O_SCT 107 -# define CT_F_I2O_SCT_LIST 108 -# define CT_F_I2O_SCT_SIGNATURE 109 -# define CT_F_O2I_SCT 110 -# define CT_F_O2I_SCT_LIST 111 -# define CT_F_O2I_SCT_SIGNATURE 112 -# define CT_F_SCT_CTX_NEW 126 -# define CT_F_SCT_CTX_VERIFY 128 -# define CT_F_SCT_NEW 100 -# define CT_F_SCT_NEW_FROM_BASE64 127 -# define CT_F_SCT_SET0_LOG_ID 101 -# define CT_F_SCT_SET1_EXTENSIONS 114 -# define CT_F_SCT_SET1_LOG_ID 115 -# define CT_F_SCT_SET1_SIGNATURE 116 -# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 -# define CT_F_SCT_SET_SIGNATURE_NID 103 -# define CT_F_SCT_SET_VERSION 104 /* * CT reason codes. diff --git a/deps/openssl/android/x86/usr/local/include/openssl/decoder.h b/deps/openssl/android/x86/usr/local/include/openssl/decoder.h new file mode 100644 index 00000000..d4ee2cf4 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/decoder.h @@ -0,0 +1,133 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_DECODER_H +# define OPENSSL_DECODER_H +# pragma once + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_DECODER *OSSL_DECODER_fetch(OSSL_LIB_CTX *libctx, const char *name, + const char *properties); +int OSSL_DECODER_up_ref(OSSL_DECODER *encoder); +void OSSL_DECODER_free(OSSL_DECODER *encoder); + +const OSSL_PROVIDER *OSSL_DECODER_get0_provider(const OSSL_DECODER *encoder); +const char *OSSL_DECODER_get0_properties(const OSSL_DECODER *encoder); +const char *OSSL_DECODER_get0_name(const OSSL_DECODER *decoder); +const char *OSSL_DECODER_get0_description(const OSSL_DECODER *decoder); +int OSSL_DECODER_is_a(const OSSL_DECODER *encoder, const char *name); + +void OSSL_DECODER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_DECODER *encoder, void *arg), + void *arg); +int OSSL_DECODER_names_do_all(const OSSL_DECODER *encoder, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *OSSL_DECODER_gettable_params(OSSL_DECODER *decoder); +int OSSL_DECODER_get_params(OSSL_DECODER *decoder, OSSL_PARAM params[]); + +const OSSL_PARAM *OSSL_DECODER_settable_ctx_params(OSSL_DECODER *encoder); +OSSL_DECODER_CTX *OSSL_DECODER_CTX_new(void); +int OSSL_DECODER_CTX_set_params(OSSL_DECODER_CTX *ctx, + const OSSL_PARAM params[]); +void OSSL_DECODER_CTX_free(OSSL_DECODER_CTX *ctx); + +/* Utilities that help set specific parameters */ +int OSSL_DECODER_CTX_set_passphrase(OSSL_DECODER_CTX *ctx, + const unsigned char *kstr, size_t klen); +int OSSL_DECODER_CTX_set_pem_password_cb(OSSL_DECODER_CTX *ctx, + pem_password_cb *cb, void *cbarg); +int OSSL_DECODER_CTX_set_passphrase_cb(OSSL_DECODER_CTX *ctx, + OSSL_PASSPHRASE_CALLBACK *cb, + void *cbarg); +int OSSL_DECODER_CTX_set_passphrase_ui(OSSL_DECODER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); + +/* + * Utilities to read the object to decode, with the result sent to cb. + * These will discover all provided methods + */ + +int OSSL_DECODER_CTX_set_selection(OSSL_DECODER_CTX *ctx, int selection); +int OSSL_DECODER_CTX_set_input_type(OSSL_DECODER_CTX *ctx, + const char *input_type); +int OSSL_DECODER_CTX_set_input_structure(OSSL_DECODER_CTX *ctx, + const char *input_structure); +int OSSL_DECODER_CTX_add_decoder(OSSL_DECODER_CTX *ctx, OSSL_DECODER *decoder); +int OSSL_DECODER_CTX_add_extra(OSSL_DECODER_CTX *ctx, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_DECODER_CTX_get_num_decoders(OSSL_DECODER_CTX *ctx); + +typedef struct ossl_decoder_instance_st OSSL_DECODER_INSTANCE; +OSSL_DECODER * +OSSL_DECODER_INSTANCE_get_decoder(OSSL_DECODER_INSTANCE *decoder_inst); +void * +OSSL_DECODER_INSTANCE_get_decoder_ctx(OSSL_DECODER_INSTANCE *decoder_inst); +const char * +OSSL_DECODER_INSTANCE_get_input_type(OSSL_DECODER_INSTANCE *decoder_inst); +const char * +OSSL_DECODER_INSTANCE_get_input_structure(OSSL_DECODER_INSTANCE *decoder_inst, + int *was_set); + +typedef int OSSL_DECODER_CONSTRUCT(OSSL_DECODER_INSTANCE *decoder_inst, + const OSSL_PARAM *params, + void *construct_data); +typedef void OSSL_DECODER_CLEANUP(void *construct_data); + +int OSSL_DECODER_CTX_set_construct(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_CONSTRUCT *construct); +int OSSL_DECODER_CTX_set_construct_data(OSSL_DECODER_CTX *ctx, + void *construct_data); +int OSSL_DECODER_CTX_set_cleanup(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_CLEANUP *cleanup); +OSSL_DECODER_CONSTRUCT *OSSL_DECODER_CTX_get_construct(OSSL_DECODER_CTX *ctx); +void *OSSL_DECODER_CTX_get_construct_data(OSSL_DECODER_CTX *ctx); +OSSL_DECODER_CLEANUP *OSSL_DECODER_CTX_get_cleanup(OSSL_DECODER_CTX *ctx); + +int OSSL_DECODER_export(OSSL_DECODER_INSTANCE *decoder_inst, + void *reference, size_t reference_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg); + +int OSSL_DECODER_from_bio(OSSL_DECODER_CTX *ctx, BIO *in); +#ifndef OPENSSL_NO_STDIO +int OSSL_DECODER_from_fp(OSSL_DECODER_CTX *ctx, FILE *in); +#endif +int OSSL_DECODER_from_data(OSSL_DECODER_CTX *ctx, const unsigned char **pdata, + size_t *pdata_len); + +/* + * Create the OSSL_DECODER_CTX with an associated type. This will perform + * an implicit OSSL_DECODER_fetch(), suitable for the object of that type. + */ +OSSL_DECODER_CTX * +OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey, + const char *input_type, + const char *input_struct, + const char *keytype, int selection, + OSSL_LIB_CTX *libctx, const char *propquery); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/decodererr.h b/deps/openssl/android/x86/usr/local/include/openssl/decodererr.h new file mode 100644 index 00000000..4212a38b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/decodererr.h @@ -0,0 +1,28 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_DECODERERR_H +# define OPENSSL_DECODERERR_H +# pragma once + +# include +# include +# include + + + +/* + * OSSL_DECODER reason codes. + */ +# define OSSL_DECODER_R_COULD_NOT_DECODE_OBJECT 101 +# define OSSL_DECODER_R_DECODER_NOT_FOUND 102 +# define OSSL_DECODER_R_MISSING_GET_PARAMS 100 + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/des.h b/deps/openssl/android/x86/usr/local/include/openssl/des.h index be4abbdf..09798a61 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/des.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/des.h @@ -1,29 +1,36 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DES_H -# define HEADER_DES_H +#ifndef OPENSSL_DES_H +# define OPENSSL_DES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DES_H +# endif # include # ifndef OPENSSL_NO_DES -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif -# include +# endif +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int DES_LONG; -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif typedef unsigned char DES_cblock[8]; typedef /* const */ unsigned char const_DES_cblock[8]; @@ -42,53 +49,62 @@ typedef struct DES_ks { } ks[16]; } DES_key_schedule; -# define DES_KEY_SZ (sizeof(DES_cblock)) -# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) +# define DES_KEY_SZ (sizeof(DES_cblock)) +# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) -# define DES_ENCRYPT 1 -# define DES_DECRYPT 0 +# define DES_ENCRYPT 1 +# define DES_DECRYPT 0 -# define DES_CBC_MODE 0 -# define DES_PCBC_MODE 1 +# define DES_CBC_MODE 0 +# define DES_PCBC_MODE 1 -# define DES_ecb2_encrypt(i,o,k1,k2,e) \ +# define DES_ecb2_encrypt(i,o,k1,k2,e) \ DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) -# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ +# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) -# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ +# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) -# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ +# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) -OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ -# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) - -const char *DES_options(void); +# define DES_fixup_key_parity DES_set_odd_parity +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *DES_options(void); +OSSL_DEPRECATEDIN_3_0 void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, int enc); +OSSL_DEPRECATEDIN_3_0 DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, long length, DES_key_schedule *schedule, const_DES_cblock *ivec); +# endif /* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, const_DES_cblock *inw, - const_DES_cblock *outw, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + const_DES_cblock *inw, const_DES_cblock *outw, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks, int enc); +# endif /* * This is the DES encryption function that gets called by just about every @@ -100,7 +116,10 @@ void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, * long's and ks is the DES_key_schedule to use. enc, is non zero specifies * encryption, zero if decryption. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); +# endif /* * This functions is the same as DES_encrypt1() except that the DES initial @@ -110,65 +129,83 @@ void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() * DES_encrypt1() DES_encrypt1() except faster :-). */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); - -void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 +void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 +void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, DES_cblock *ivec, int enc); + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int *num); +OSSL_DEPRECATEDIN_3_0 char *DES_fcrypt(const char *buf, const char *salt, char *ret); +OSSL_DEPRECATEDIN_3_0 char *DES_crypt(const char *buf, const char *salt); +OSSL_DEPRECATEDIN_3_0 void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec); + long length, DES_key_schedule *schedule, DES_cblock *ivec); +OSSL_DEPRECATEDIN_3_0 void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], long length, int out_count, DES_cblock *seed); -int DES_random_key(DES_cblock *ret); -void DES_set_odd_parity(DES_cblock *key); -int DES_check_key_parity(const_DES_cblock *key); -int DES_is_weak_key(const_DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_random_key(DES_cblock *ret); +OSSL_DEPRECATEDIN_3_0 void DES_set_odd_parity(DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_check_key_parity(const_DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_is_weak_key(const_DES_cblock *key); +# endif /* * DES_set_key (= set_key = DES_key_sched = key_sched) calls - * DES_set_key_checked if global variable DES_check_key is set, - * DES_set_key_unchecked otherwise. + * DES_set_key_checked */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); -void DES_string_to_key(const char *str, DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 void DES_string_to_key(const char *str, DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); +OSSL_DEPRECATEDIN_3_0 void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec, int *num); +# endif -# define DES_fixup_key_parity DES_set_odd_parity - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/dh.h b/deps/openssl/android/x86/usr/local/include/openssl/dh.h index 6c6ff363..8bc17448 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/dh.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/dh.h @@ -1,316 +1,62 @@ /* * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DH_H -# define HEADER_DH_H +#ifndef OPENSSL_DH_H +# define OPENSSL_DH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DH_H +# endif # include - -# ifndef OPENSSL_NO_DH -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include +# include # ifdef __cplusplus extern "C" { # endif -# ifndef OPENSSL_DH_MAX_MODULUS_BITS -# define OPENSSL_DH_MAX_MODULUS_BITS 10000 -# endif -# ifndef OPENSSL_DH_CHECK_MAX_MODULUS_BITS -# define OPENSSL_DH_CHECK_MAX_MODULUS_BITS 32768 -# endif +#include -# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 +/* DH parameter generation types used by EVP_PKEY_CTX_set_dh_paramgen_type() */ +# define DH_PARAMGEN_TYPE_GENERATOR 0 /* Use a safe prime generator */ +# define DH_PARAMGEN_TYPE_FIPS_186_2 1 /* Use FIPS186-2 standard */ +# define DH_PARAMGEN_TYPE_FIPS_186_4 2 /* Use FIPS186-4 standard */ +# define DH_PARAMGEN_TYPE_GROUP 3 /* Use a named safe prime group */ -# define DH_FLAG_CACHE_MONT_P 0x01 +int EVP_PKEY_CTX_set_dh_paramgen_type(EVP_PKEY_CTX *ctx, int typ); +int EVP_PKEY_CTX_set_dh_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); +int EVP_PKEY_CTX_set_dh_paramgen_seed(EVP_PKEY_CTX *ctx, + const unsigned char *seed, + size_t seedlen); +int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int pbits); +int EVP_PKEY_CTX_set_dh_paramgen_subprime_len(EVP_PKEY_CTX *ctx, int qlen); +int EVP_PKEY_CTX_set_dh_paramgen_generator(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid); +int EVP_PKEY_CTX_set_dh_rfc5114(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dhx_rfc5114(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad); -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * Does nothing. Previously this switched off constant time behaviour. - */ -# define DH_FLAG_NO_EXP_CONSTTIME 0x00 -# endif - -/* - * If this flag is set the DH method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define DH_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DH_FLAG_NON_FIPS_ALLOW 0x0400 - -/* Already defined in ossl_typ.h */ -/* typedef struct dh_st DH; */ -/* typedef struct dh_method DH_METHOD; */ - -DECLARE_ASN1_ITEM(DHparams) - -# define DH_GENERATOR_2 2 -/* #define DH_GENERATOR_3 3 */ -# define DH_GENERATOR_5 5 - -/* DH_check error codes */ -# define DH_CHECK_P_NOT_PRIME 0x01 -# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 -# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 -# define DH_NOT_SUITABLE_GENERATOR 0x08 -# define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 -# define DH_CHECK_INVALID_J_VALUE 0x40 - -/* DH_check_pub_key error codes */ -# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 -# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 -# define DH_CHECK_PUBKEY_INVALID 0x04 - -/* - * primes p where (p-1)/2 is prime too are called "safe"; we define this for - * backward compatibility: - */ -# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME - -# define d2i_DHparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) -# define d2i_DHparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) -# define i2d_DHparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) - -# define d2i_DHxparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHxparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHxparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) -# define d2i_DHxparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) -# define i2d_DHxparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH, i2d_DHxparams, bp, x) - -DH *DHparams_dup(DH *); - -const DH_METHOD *DH_OpenSSL(void); - -void DH_set_default_method(const DH_METHOD *meth); -const DH_METHOD *DH_get_default_method(void); -int DH_set_method(DH *dh, const DH_METHOD *meth); -DH *DH_new_method(ENGINE *engine); - -DH *DH_new(void); -void DH_free(DH *dh); -int DH_up_ref(DH *dh); -int DH_bits(const DH *dh); -int DH_size(const DH *dh); -int DH_security_bits(const DH *dh); -#define DH_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) -int DH_set_ex_data(DH *d, int idx, void *arg); -void *DH_get_ex_data(DH *d, int idx); - -/* Deprecated version */ -DEPRECATEDIN_0_9_8(DH *DH_generate_parameters(int prime_len, int generator, - void (*callback) (int, int, - void *), - void *cb_arg)) - -/* New version */ -int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, - BN_GENCB *cb); - -int DH_check_params_ex(const DH *dh); -int DH_check_ex(const DH *dh); -int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); -int DH_check_params(const DH *dh, int *ret); -int DH_check(const DH *dh, int *codes); -int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); -int DH_generate_key(DH *dh); -int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); -DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); -int i2d_DHparams(const DH *a, unsigned char **pp); -DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); -int i2d_DHxparams(const DH *a, unsigned char **pp); -# ifndef OPENSSL_NO_STDIO -int DHparams_print_fp(FILE *fp, const DH *x); -# endif -int DHparams_print(BIO *bp, const DH *x); - -/* RFC 5114 parameters */ -DH *DH_get_1024_160(void); -DH *DH_get_2048_224(void); -DH *DH_get_2048_256(void); - -/* Named parameters, currently RFC7919 */ -DH *DH_new_by_nid(int nid); -int DH_get_nid(const DH *dh); - -# ifndef OPENSSL_NO_CMS -/* RFC2631 KDF */ -int DH_KDF_X9_42(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - ASN1_OBJECT *key_oid, - const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); -# endif - -void DH_get0_pqg(const DH *dh, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DH_get0_key(const DH *dh, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DH_get0_p(const DH *dh); -const BIGNUM *DH_get0_q(const DH *dh); -const BIGNUM *DH_get0_g(const DH *dh); -const BIGNUM *DH_get0_priv_key(const DH *dh); -const BIGNUM *DH_get0_pub_key(const DH *dh); -void DH_clear_flags(DH *dh, int flags); -int DH_test_flags(const DH *dh, int flags); -void DH_set_flags(DH *dh, int flags); -ENGINE *DH_get0_engine(DH *d); -long DH_get_length(const DH *dh); -int DH_set_length(DH *dh, long length); - -DH_METHOD *DH_meth_new(const char *name, int flags); -void DH_meth_free(DH_METHOD *dhm); -DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); -const char *DH_meth_get0_name(const DH_METHOD *dhm); -int DH_meth_set1_name(DH_METHOD *dhm, const char *name); -int DH_meth_get_flags(const DH_METHOD *dhm); -int DH_meth_set_flags(DH_METHOD *dhm, int flags); -void *DH_meth_get0_app_data(const DH_METHOD *dhm); -int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); -int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *)); -int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) - (unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_meth_set_compute_key(DH_METHOD *dhm, - int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh)); -int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) - (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *, BN_MONT_CTX *); -int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, - int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); -int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); -int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); -int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) - (DH *, int, int, BN_GENCB *); -int DH_meth_set_generate_params(DH_METHOD *dhm, - int (*generate_params) (DH *, int, int, BN_GENCB *)); - - -# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, \ - EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_DH_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_dh_pad(ctx, pad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_PAD, pad, NULL) - -# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)(oid)) - -# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)(poid)) - -# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)(plen)) - -# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)(p)) +int EVP_PKEY_CTX_set_dh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +int EVP_PKEY_CTX_get_dh_kdf_type(EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_set0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT *oid); +int EVP_PKEY_CTX_get0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT **oid); +int EVP_PKEY_CTX_set_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_get_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_set_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +int EVP_PKEY_CTX_get_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); +int EVP_PKEY_CTX_set0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_get0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); +#endif # define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) @@ -331,13 +77,259 @@ int DH_meth_set_generate_params(DH_METHOD *dhm, /* KDF types */ # define EVP_PKEY_DH_KDF_NONE 1 -# ifndef OPENSSL_NO_CMS # define EVP_PKEY_DH_KDF_X9_42 2 + +# ifndef OPENSSL_NO_STDIO +# include # endif - - -# ifdef __cplusplus -} +# ifndef OPENSSL_NO_DH +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include # endif +# include + +# ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +# endif + +# ifndef OPENSSL_DH_CHECK_MAX_MODULUS_BITS +# define OPENSSL_DH_CHECK_MAX_MODULUS_BITS 32768 +# endif + +# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 + +# define DH_FLAG_CACHE_MONT_P 0x01 + +# define DH_FLAG_TYPE_MASK 0xF000 +# define DH_FLAG_TYPE_DH 0x0000 +# define DH_FLAG_TYPE_DHX 0x1000 + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DH_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * If this flag is set the DH method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define DH_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DH_FLAG_NON_FIPS_ALLOW 0x0400 +# endif + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +DECLARE_ASN1_ITEM(DHparams) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DH_GENERATOR_2 2 +# define DH_GENERATOR_3 3 +# define DH_GENERATOR_5 5 + +/* DH_check error codes */ +/* + * NB: These values must align with the equivalently named macros in + * internal/ffc.h. + */ +# define DH_CHECK_P_NOT_PRIME 0x01 +# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 +# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 +# define DH_NOT_SUITABLE_GENERATOR 0x08 +# define DH_CHECK_Q_NOT_PRIME 0x10 +# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_J_VALUE 0x40 +# define DH_MODULUS_TOO_SMALL 0x80 +# define DH_MODULUS_TOO_LARGE 0x100 + +/* DH_check_pub_key error codes */ +# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 +# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 +# define DH_CHECK_PUBKEY_INVALID 0x04 + +/* + * primes p where (p-1)/2 is prime too are called "safe"; we define this for + * backward compatibility: + */ +# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME + +# define d2i_DHparams_fp(fp, x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) +# define d2i_DHparams_bio(bp, x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) +# define i2d_DHparams_bio(bp, x) \ + ASN1_i2d_bio_of(DH, i2d_DHparams, bp, x) + +# define d2i_DHxparams_fp(fp,x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHxparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHxparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) +# define d2i_DHxparams_bio(bp, x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) +# define i2d_DHxparams_bio(bp, x) \ + ASN1_i2d_bio_of(DH, i2d_DHxparams, bp, x) + +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, DH, DHparams) + +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *DH_OpenSSL(void); + +OSSL_DEPRECATEDIN_3_0 void DH_set_default_method(const DH_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *DH_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 int DH_set_method(DH *dh, const DH_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 DH *DH_new_method(ENGINE *engine); + +OSSL_DEPRECATEDIN_3_0 DH *DH_new(void); +OSSL_DEPRECATEDIN_3_0 void DH_free(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_up_ref(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_bits(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_size(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_security_bits(const DH *dh); + +# define DH_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) + +OSSL_DEPRECATEDIN_3_0 int DH_set_ex_data(DH *d, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *DH_get_ex_data(const DH *d, int idx); + +OSSL_DEPRECATEDIN_3_0 int DH_generate_parameters_ex(DH *dh, int prime_len, + int generator, + BN_GENCB *cb); + +OSSL_DEPRECATEDIN_3_0 int DH_check_params_ex(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_check_ex(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); +OSSL_DEPRECATEDIN_3_0 int DH_check_params(const DH *dh, int *ret); +OSSL_DEPRECATEDIN_3_0 int DH_check(const DH *dh, int *codes); +OSSL_DEPRECATEDIN_3_0 int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, + int *codes); +OSSL_DEPRECATEDIN_3_0 int DH_generate_key(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_compute_key(unsigned char *key, + const BIGNUM *pub_key, DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_compute_key_padded(unsigned char *key, + const BIGNUM *pub_key, DH *dh); + +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, DH, DHparams) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, DH, DHxparams) + +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int DHparams_print_fp(FILE *fp, const DH *x); +# endif +OSSL_DEPRECATEDIN_3_0 int DHparams_print(BIO *bp, const DH *x); + +/* RFC 5114 parameters */ +OSSL_DEPRECATEDIN_3_0 DH *DH_get_1024_160(void); +OSSL_DEPRECATEDIN_3_0 DH *DH_get_2048_224(void); +OSSL_DEPRECATEDIN_3_0 DH *DH_get_2048_256(void); + +/* Named parameters, currently RFC7919 and RFC3526 */ +OSSL_DEPRECATEDIN_3_0 DH *DH_new_by_nid(int nid); +OSSL_DEPRECATEDIN_3_0 int DH_get_nid(const DH *dh); + +/* RFC2631 KDF */ +OSSL_DEPRECATEDIN_3_0 int DH_KDF_X9_42(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + ASN1_OBJECT *key_oid, + const unsigned char *ukm, + size_t ukmlen, const EVP_MD *md); + +OSSL_DEPRECATEDIN_3_0 void DH_get0_pqg(const DH *dh, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +OSSL_DEPRECATEDIN_3_0 int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 void DH_get0_key(const DH *dh, const BIGNUM **pub_key, + const BIGNUM **priv_key); +OSSL_DEPRECATEDIN_3_0 int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_p(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_q(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_g(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_priv_key(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_pub_key(const DH *dh); +OSSL_DEPRECATEDIN_3_0 void DH_clear_flags(DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 int DH_test_flags(const DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 void DH_set_flags(DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 ENGINE *DH_get0_engine(DH *d); +OSSL_DEPRECATEDIN_3_0 long DH_get_length(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_set_length(DH *dh, long length); + +OSSL_DEPRECATEDIN_3_0 DH_METHOD *DH_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void DH_meth_free(DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 const char *DH_meth_get0_name(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set1_name(DH_METHOD *dhm, const char *name); +OSSL_DEPRECATEDIN_3_0 int DH_meth_get_flags(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_flags(DH_METHOD *dhm, int flags); +OSSL_DEPRECATEDIN_3_0 void *DH_meth_get0_app_data(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_generate_key(DH_METHOD *dhm, + int (*generate_key) (DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) + (unsigned char *key, + const BIGNUM *pub_key, + DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_compute_key(DH_METHOD *dhm, + int (*compute_key) + (unsigned char *key, + const BIGNUM *pub_key, + DH *dh)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) + (const DH *, BIGNUM *, + const BIGNUM *, + const BIGNUM *, + const BIGNUM *, BN_CTX *, + BN_MONT_CTX *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, + int (*bn_mod_exp) + (const DH *, BIGNUM *, + const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, + BN_MONT_CTX *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) + (DH *, int, int, + BN_GENCB *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_generate_params(DH_METHOD *dhm, + int (*generate_params) + (DH *, int, int, + BN_GENCB *)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 DH *DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, + void *), + void *cb_arg); +# endif + +# endif +# ifdef __cplusplus +} # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/dherr.h b/deps/openssl/android/x86/usr/local/include/openssl/dherr.h index 528c8198..5d2a762a 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/dherr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/dherr.h @@ -1,63 +1,29 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DHERR_H -# define HEADER_DHERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_DHERR_H +# define OPENSSL_DHERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_DH -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DH_strings(void); - -/* - * DH function codes. - */ -# define DH_F_COMPUTE_KEY 102 -# define DH_F_DHPARAMS_PRINT_FP 101 -# define DH_F_DH_BUILTIN_GENPARAMS 106 -# define DH_F_DH_CHECK 126 -# define DH_F_DH_CHECK_EX 121 -# define DH_F_DH_CHECK_PARAMS_EX 122 -# define DH_F_DH_CHECK_PUB_KEY_EX 123 -# define DH_F_DH_CMS_DECRYPT 114 -# define DH_F_DH_CMS_SET_PEERKEY 115 -# define DH_F_DH_CMS_SET_SHARED_INFO 116 -# define DH_F_DH_METH_DUP 117 -# define DH_F_DH_METH_NEW 118 -# define DH_F_DH_METH_SET1_NAME 119 -# define DH_F_DH_NEW_BY_NID 104 -# define DH_F_DH_NEW_METHOD 105 -# define DH_F_DH_PARAM_DECODE 107 -# define DH_F_DH_PKEY_PUBLIC_CHECK 124 -# define DH_F_DH_PRIV_DECODE 110 -# define DH_F_DH_PRIV_ENCODE 111 -# define DH_F_DH_PUB_DECODE 108 -# define DH_F_DH_PUB_ENCODE 109 -# define DH_F_DO_DH_PRINT 100 -# define DH_F_GENERATE_KEY 103 -# define DH_F_PKEY_DH_CTRL_STR 120 -# define DH_F_PKEY_DH_DERIVE 112 -# define DH_F_PKEY_DH_INIT 125 -# define DH_F_PKEY_DH_KEYGEN 113 /* * DH reason codes. */ +# define DH_R_BAD_FFC_PARAMETERS 127 # define DH_R_BAD_GENERATOR 101 # define DH_R_BN_DECODE_ERROR 109 # define DH_R_BN_ERROR 106 @@ -73,10 +39,12 @@ int ERR_load_DH_strings(void); # define DH_R_INVALID_PARAMETER_NAME 110 # define DH_R_INVALID_PARAMETER_NID 114 # define DH_R_INVALID_PUBKEY 102 +# define DH_R_INVALID_SECRET 128 # define DH_R_KDF_PARAMETER_ERROR 112 # define DH_R_KEYS_NOT_SET 108 # define DH_R_MISSING_PUBKEY 125 # define DH_R_MODULUS_TOO_LARGE 103 +# define DH_R_MODULUS_TOO_SMALL 126 # define DH_R_NOT_SUITABLE_GENERATOR 120 # define DH_R_NO_PARAMETERS_SET 107 # define DH_R_NO_PRIVATE_VALUE 100 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/dsa.h b/deps/openssl/android/x86/usr/local/include/openssl/dsa.h index 6d8a18a4..160404cc 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/dsa.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/dsa.h @@ -1,44 +1,85 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DSA_H -# define HEADER_DSA_H +#ifndef OPENSSL_DSA_H +# define OPENSSL_DSA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DSA_H +# endif # include +# include + +# include # ifndef OPENSSL_NO_DSA +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif +# endif + # ifdef __cplusplus extern "C" { # endif -# include -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include -# ifndef OPENSSL_DSA_MAX_MODULUS_BITS -# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 -# endif +int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits); +int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx, int qbits); +int EVP_PKEY_CTX_set_dsa_paramgen_md_props(EVP_PKEY_CTX *ctx, + const char *md_name, + const char *md_properties); +int EVP_PKEY_CTX_set_dsa_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); +int EVP_PKEY_CTX_set_dsa_paramgen_type(EVP_PKEY_CTX *ctx, const char *name); +int EVP_PKEY_CTX_set_dsa_paramgen_seed(EVP_PKEY_CTX *ctx, + const unsigned char *seed, + size_t seedlen); +int EVP_PKEY_CTX_set_dsa_paramgen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 +# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) -# define DSA_FLAG_CACHE_MONT_P 0x01 -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DSA +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 + +typedef struct DSA_SIG_st DSA_SIG; +DSA_SIG *DSA_SIG_new(void); +void DSA_SIG_free(DSA_SIG *a); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(DSA_SIG, DSA_SIG) +void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); +int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); + + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * Does nothing. Previously this switched off constant time behaviour. */ -# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 -# endif +# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DSA_FLAG_CACHE_MONT_P 0x01 /* * If this flag is set the DSA method is FIPS compliant and can be used in @@ -47,7 +88,7 @@ extern "C" { * result is compliant. */ -# define DSA_FLAG_FIPS_METHOD 0x0400 +# define DSA_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are @@ -55,190 +96,185 @@ extern "C" { * usage is compliant. */ -# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 -# define DSA_FLAG_FIPS_CHECKED 0x0800 +# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 +# define DSA_FLAG_FIPS_CHECKED 0x0800 /* Already defined in ossl_typ.h */ /* typedef struct dsa_st DSA; */ /* typedef struct dsa_method DSA_METHOD; */ -typedef struct DSA_SIG_st DSA_SIG; +# define d2i_DSAparams_fp(fp, x) \ + (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ + (char *(*)())d2i_DSAparams, (fp), \ + (unsigned char **)(x)) +# define i2d_DSAparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DSAparams, (fp), (unsigned char *)(x)) +# define d2i_DSAparams_bio(bp, x) \ + ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSAparams, bp, x) +# define i2d_DSAparams_bio(bp, x) \ + ASN1_i2d_bio_of(DSA, i2d_DSAparams, bp, x) -# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ - (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) -# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ - (unsigned char *)(x)) -# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) -# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, DSA, DSAparams) +OSSL_DEPRECATEDIN_3_0 DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, + DSA *dsa); +OSSL_DEPRECATEDIN_3_0 int DSA_do_verify(const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); -DSA *DSAparams_dup(DSA *x); -DSA_SIG *DSA_SIG_new(void); -void DSA_SIG_free(DSA_SIG *a); -int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); -DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); -void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); -int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_OpenSSL(void); -DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); -int DSA_do_verify(const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); +OSSL_DEPRECATEDIN_3_0 void DSA_set_default_method(const DSA_METHOD *); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 int DSA_set_method(DSA *dsa, const DSA_METHOD *); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_get_method(DSA *d); -const DSA_METHOD *DSA_OpenSSL(void); - -void DSA_set_default_method(const DSA_METHOD *); -const DSA_METHOD *DSA_get_default_method(void); -int DSA_set_method(DSA *dsa, const DSA_METHOD *); -const DSA_METHOD *DSA_get_method(DSA *d); - -DSA *DSA_new(void); -DSA *DSA_new_method(ENGINE *engine); -void DSA_free(DSA *r); +OSSL_DEPRECATEDIN_3_0 DSA *DSA_new(void); +OSSL_DEPRECATEDIN_3_0 DSA *DSA_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 void DSA_free(DSA *r); /* "up" the DSA object's reference count */ -int DSA_up_ref(DSA *r); -int DSA_size(const DSA *); -int DSA_bits(const DSA *d); -int DSA_security_bits(const DSA *d); +OSSL_DEPRECATEDIN_3_0 int DSA_up_ref(DSA *r); +OSSL_DEPRECATEDIN_3_0 int DSA_size(const DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_bits(const DSA *d); +OSSL_DEPRECATEDIN_3_0 int DSA_security_bits(const DSA *d); /* next 4 return -1 on error */ -DEPRECATEDIN_1_2_0(int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)) -int DSA_sign(int type, const unsigned char *dgst, int dlen, - unsigned char *sig, unsigned int *siglen, DSA *dsa); -int DSA_verify(int type, const unsigned char *dgst, int dgst_len, - const unsigned char *sigbuf, int siglen, DSA *dsa); -#define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) -int DSA_set_ex_data(DSA *d, int idx, void *arg); -void *DSA_get_ex_data(DSA *d, int idx); +OSSL_DEPRECATEDIN_3_0 int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp); +OSSL_DEPRECATEDIN_3_0 int DSA_sign(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, DSA *dsa); +OSSL_DEPRECATEDIN_3_0 int DSA_verify(int type, const unsigned char *dgst, + int dgst_len, const unsigned char *sigbuf, + int siglen, DSA *dsa); -DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); +# define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) +OSSL_DEPRECATEDIN_3_0 int DSA_set_ex_data(DSA *d, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *DSA_get_ex_data(const DSA *d, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAPrivateKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAparams) +# endif + +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 /* Deprecated version */ -DEPRECATEDIN_0_9_8(DSA *DSA_generate_parameters(int bits, - unsigned char *seed, - int seed_len, - int *counter_ret, - unsigned long *h_ret, void - (*callback) (int, int, - void *), - void *cb_arg)) +OSSL_DEPRECATEDIN_0_9_8 +DSA *DSA_generate_parameters(int bits, unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, + void (*callback) (int, int, void *), + void *cb_arg); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* New version */ -int DSA_generate_parameters_ex(DSA *dsa, int bits, - const unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int DSA_generate_parameters_ex(DSA *dsa, int bits, + const unsigned char *seed, + int seed_len, + int *counter_ret, + unsigned long *h_ret, + BN_GENCB *cb); -int DSA_generate_key(DSA *a); -int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); -int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); -int i2d_DSAparams(const DSA *a, unsigned char **pp); +OSSL_DEPRECATEDIN_3_0 int DSA_generate_key(DSA *a); -int DSAparams_print(BIO *bp, const DSA *x); -int DSA_print(BIO *bp, const DSA *x, int off); -# ifndef OPENSSL_NO_STDIO -int DSAparams_print_fp(FILE *fp, const DSA *x); -int DSA_print_fp(FILE *bp, const DSA *x, int off); -# endif +OSSL_DEPRECATEDIN_3_0 int DSAparams_print(BIO *bp, const DSA *x); +OSSL_DEPRECATEDIN_3_0 int DSA_print(BIO *bp, const DSA *x, int off); +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int DSAparams_print_fp(FILE *fp, const DSA *x); +OSSL_DEPRECATEDIN_3_0 int DSA_print_fp(FILE *bp, const DSA *x, int off); +# endif -# define DSS_prime_checks 64 +# define DSS_prime_checks 64 /* * Primality test according to FIPS PUB 186-4, Appendix C.3. Since we only * have one value here we set the number of checks to 64 which is the 128 bit * security level that is the highest level and valid for creating a 3072 bit * DSA key. */ -# define DSA_is_prime(n, callback, cb_arg) \ - BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) +# define DSA_is_prime(n, callback, cb_arg) \ + BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) -# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DH /* * Convert DSA structure (key or just parameters) into DH structure (be * careful to avoid small subgroup attacks when using this!) */ -DH *DSA_dup_DH(const DSA *r); -# endif +OSSL_DEPRECATEDIN_3_0 DH *DSA_dup_DH(const DSA *r); +# endif -# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_q_bits(ctx, qbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, qbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_MD, 0, (void *)(md)) +OSSL_DEPRECATEDIN_3_0 void DSA_get0_pqg(const DSA *d, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +OSSL_DEPRECATEDIN_3_0 int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 void DSA_get0_key(const DSA *d, const BIGNUM **pub_key, + const BIGNUM **priv_key); +OSSL_DEPRECATEDIN_3_0 int DSA_set0_key(DSA *d, BIGNUM *pub_key, + BIGNUM *priv_key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_p(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_q(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_g(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_pub_key(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_priv_key(const DSA *d); +OSSL_DEPRECATEDIN_3_0 void DSA_clear_flags(DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 int DSA_test_flags(const DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 void DSA_set_flags(DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 ENGINE *DSA_get0_engine(DSA *d); -# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) - -void DSA_get0_pqg(const DSA *d, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DSA_get0_key(const DSA *d, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DSA_get0_p(const DSA *d); -const BIGNUM *DSA_get0_q(const DSA *d); -const BIGNUM *DSA_get0_g(const DSA *d); -const BIGNUM *DSA_get0_pub_key(const DSA *d); -const BIGNUM *DSA_get0_priv_key(const DSA *d); -void DSA_clear_flags(DSA *d, int flags); -int DSA_test_flags(const DSA *d, int flags); -void DSA_set_flags(DSA *d, int flags); -ENGINE *DSA_get0_engine(DSA *d); - -DSA_METHOD *DSA_meth_new(const char *name, int flags); -void DSA_meth_free(DSA_METHOD *dsam); -DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); -const char *DSA_meth_get0_name(const DSA_METHOD *dsam); -int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); -int DSA_meth_get_flags(const DSA_METHOD *dsam); -int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); -void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); -int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); -DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 DSA_METHOD *DSA_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void DSA_meth_free(DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 const char *DSA_meth_get0_name(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set1_name(DSA_METHOD *dsam, + const char *name); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_get_flags(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); +OSSL_DEPRECATEDIN_3_0 void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set0_app_data(DSA_METHOD *dsam, + void *app_data); +OSSL_DEPRECATEDIN_3_0 DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) (const unsigned char *, int, DSA *); -int DSA_meth_set_sign(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign(DSA_METHOD *dsam, DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); -int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); -int DSA_meth_set_sign_setup(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign_setup(DSA_METHOD *dsam, int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); -int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) (const unsigned char *, int, DSA_SIG *, DSA *); -int DSA_meth_set_verify(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_verify(DSA_METHOD *dsam, int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); -int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_mod_exp(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_mod_exp(DSA_METHOD *dsam, int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); -int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); -int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); -int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_init(DSA_METHOD *dsam, + int (*init)(DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_finish(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_finish(DSA_METHOD *dsam, + int (*finish)(DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) (DSA *, int, const unsigned char *, int, int *, unsigned long *, BN_GENCB *); -int DSA_meth_set_paramgen(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_paramgen(DSA_METHOD *dsam, int (*paramgen) (DSA *, int, const unsigned char *, int, int *, unsigned long *, BN_GENCB *)); -int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_keygen(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_keygen(DSA_METHOD *dsam, + int (*keygen) (DSA *)); - -# ifdef __cplusplus -} # endif # endif +# ifdef __cplusplus +} +# endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/dsaerr.h b/deps/openssl/android/x86/usr/local/include/openssl/dsaerr.h index 495a1ac8..26ada57d 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/dsaerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/dsaerr.h @@ -1,59 +1,29 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DSAERR_H -# define HEADER_DSAERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_DSAERR_H +# define OPENSSL_DSAERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_DSA -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DSA_strings(void); - -/* - * DSA function codes. - */ -# define DSA_F_DSAPARAMS_PRINT 100 -# define DSA_F_DSAPARAMS_PRINT_FP 101 -# define DSA_F_DSA_BUILTIN_PARAMGEN 125 -# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 -# define DSA_F_DSA_DO_SIGN 112 -# define DSA_F_DSA_DO_VERIFY 113 -# define DSA_F_DSA_METH_DUP 127 -# define DSA_F_DSA_METH_NEW 128 -# define DSA_F_DSA_METH_SET1_NAME 129 -# define DSA_F_DSA_NEW_METHOD 103 -# define DSA_F_DSA_PARAM_DECODE 119 -# define DSA_F_DSA_PRINT_FP 105 -# define DSA_F_DSA_PRIV_DECODE 115 -# define DSA_F_DSA_PRIV_ENCODE 116 -# define DSA_F_DSA_PUB_DECODE 117 -# define DSA_F_DSA_PUB_ENCODE 118 -# define DSA_F_DSA_SIGN 106 -# define DSA_F_DSA_SIGN_SETUP 107 -# define DSA_F_DSA_SIG_NEW 102 -# define DSA_F_OLD_DSA_PRIV_DECODE 122 -# define DSA_F_PKEY_DSA_CTRL 120 -# define DSA_F_PKEY_DSA_CTRL_STR 104 -# define DSA_F_PKEY_DSA_KEYGEN 121 /* * DSA reason codes. */ +# define DSA_R_BAD_FFC_PARAMETERS 114 # define DSA_R_BAD_Q_VALUE 102 # define DSA_R_BN_DECODE_ERROR 108 # define DSA_R_BN_ERROR 109 @@ -65,8 +35,10 @@ int ERR_load_DSA_strings(void); # define DSA_R_MODULUS_TOO_LARGE 103 # define DSA_R_NO_PARAMETERS_SET 107 # define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_P_NOT_PRIME 115 # define DSA_R_Q_NOT_PRIME 113 # define DSA_R_SEED_LEN_SMALL 110 +# define DSA_R_TOO_MANY_RETRIES 116 # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/dtls1.h b/deps/openssl/android/x86/usr/local/include/openssl/dtls1.h index d55ca9c3..5dc6b541 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/dtls1.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/dtls1.h @@ -1,36 +1,42 @@ /* - * Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DTLS1_H -# define HEADER_DTLS1_H +#ifndef OPENSSL_DTLS1_H +# define OPENSSL_DTLS1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DTLS1_H +# endif + +# include #ifdef __cplusplus extern "C" { #endif -# define DTLS1_VERSION 0xFEFF -# define DTLS1_2_VERSION 0xFEFD -# define DTLS_MIN_VERSION DTLS1_VERSION -# define DTLS_MAX_VERSION DTLS1_2_VERSION -# define DTLS1_VERSION_MAJOR 0xFE +#include -# define DTLS1_BAD_VER 0x0100 +/* DTLS*_VERSION constants are defined in prov_ssl.h */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DTLS_MIN_VERSION DTLS1_VERSION +# define DTLS_MAX_VERSION DTLS1_2_VERSION +# endif +# define DTLS1_VERSION_MAJOR 0xFE /* Special value for method supporting multiple versions */ # define DTLS_ANY_VERSION 0x1FFFF /* lengths of messages */ -/* - * Actually the max cookie length in DTLS is 255. But we can't change this now - * due to compatibility concerns. - */ -# define DTLS1_COOKIE_LENGTH 256 + +# define DTLS1_COOKIE_LENGTH 255 # define DTLS1_RT_HEADER_LENGTH 13 @@ -43,10 +49,6 @@ extern "C" { # define DTLS1_AL_HEADER_LENGTH 2 -/* Timeout multipliers */ -# define DTLS1_TMO_READ_COUNT 2 -# define DTLS1_TMO_WRITE_COUNT 2 - # define DTLS1_TMO_ALERT_COUNT 12 #ifdef __cplusplus diff --git a/deps/openssl/android/x86/usr/local/include/openssl/e_os2.h b/deps/openssl/android/x86/usr/local/include/openssl/e_os2.h index 5c88e519..32e142a9 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/e_os2.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/e_os2.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_E_OS2_H -# define HEADER_E_OS2_H +#ifndef OPENSSL_E_OS2_H +# define OPENSSL_E_OS2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_E_OS2_H +# endif # include @@ -96,11 +102,11 @@ extern "C" { # endif /* ------------------------------- OpenVMS -------------------------------- */ -# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYS_VMS) +# if defined(__VMS) || defined(VMS) # if !defined(OPENSSL_SYS_VMS) # undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_VMS # endif -# define OPENSSL_SYS_VMS # if defined(__DECC) # define OPENSSL_SYS_VMS_DECC # elif defined(__DECCXX) @@ -132,19 +138,25 @@ extern "C" { # endif # endif +/* ---------------------------- HP NonStop -------------------------------- */ +# ifdef __TANDEM +# ifdef _STRING +# include +# endif +# define OPENSSL_USE_BUILD_DATE +# if defined(OPENSSL_THREADS) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# elif defined(OPENSSL_THREADS) && defined(_PUT_MODEL_) +# include +# endif +# endif + /** * That's it for OS-specific stuff *****************************************************************************/ -/* Specials for I/O an exit */ -# ifdef OPENSSL_SYS_MSDOS -# define OPENSSL_UNISTD_IO -# define OPENSSL_DECLARE_EXIT extern void exit(int); -# else -# define OPENSSL_UNISTD_IO OPENSSL_UNISTD -# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ -# endif - /*- * OPENSSL_EXTERN is normally used to declare a symbol with possible extra * attributes to handle its presence in a shared library. @@ -172,29 +184,6 @@ extern "C" { # define OPENSSL_EXTERN extern # endif -/*- - * Macros to allow global variables to be reached through function calls when - * required (if a shared library version requires it, for example. - * The way it's done allows definitions like this: - * - * // in foobar.c - * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) - * // in foobar.h - * OPENSSL_DECLARE_GLOBAL(int,foobar); - * #define foobar OPENSSL_GLOBAL_REF(foobar) - */ -# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ - type *_shadow_##name(void) \ - { static type _hide_##name=value; return &_hide_##name; } -# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) -# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) -# else -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) type _shadow_##name=value; -# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name -# define OPENSSL_GLOBAL_REF(name) _shadow_##name -# endif - # ifdef _WIN32 # ifdef _WIN64 # define ossl_ssize_t __int64 @@ -221,13 +210,15 @@ extern "C" { # endif # endif -# ifdef DEBUG_UNUSED +# if defined(UNUSEDRESULT_DEBUG) # define __owur __attribute__((__warn_unused_result__)) # else # define __owur # endif /* Standard integer types */ +# define OPENSSL_NO_INTTYPES_H +# define OPENSSL_NO_STDINT_H # if defined(OPENSSL_SYS_UEFI) typedef INT8 int8_t; typedef UINT8 uint8_t; @@ -241,6 +232,9 @@ typedef UINT64 uint64_t; defined(__osf__) || defined(__sgi) || defined(__hpux) || \ defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) # include +# undef OPENSSL_NO_INTTYPES_H +/* Because the specs say that inttypes.h includes stdint.h if present */ +# undef OPENSSL_NO_STDINT_H # elif defined(_MSC_VER) && _MSC_VER<1600 /* * minimally required typdefs for systems not supporting inttypes.h or @@ -254,8 +248,21 @@ typedef int int32_t; typedef unsigned int uint32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; +# elif defined(OPENSSL_SYS_TANDEM) +# include +# include # else # include +# undef OPENSSL_NO_STDINT_H +# endif +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ + defined(INTMAX_MAX) && defined(UINTMAX_MAX) +typedef intmax_t ossl_intmax_t; +typedef uintmax_t ossl_uintmax_t; +# else +/* Fall back to the largest we know we require and can handle */ +typedef int64_t ossl_intmax_t; +typedef uint64_t ossl_uintmax_t; # endif /* ossl_inline: portable inline definition usable in public headers */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ebcdic.h b/deps/openssl/android/x86/usr/local/include/openssl/ebcdic.h index aa012855..e0ae1aa8 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ebcdic.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ebcdic.h @@ -1,14 +1,20 @@ /* * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EBCDIC_H -# define HEADER_EBCDIC_H +#ifndef OPENSSL_EBCDIC_H +# define OPENSSL_EBCDIC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_EBCDIC_H +# endif # include diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ec.h b/deps/openssl/android/x86/usr/local/include/openssl/ec.h index 24baf53c..be9fb2f0 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ec.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ec.h @@ -1,33 +1,78 @@ /* - * Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EC_H -# define HEADER_EC_H +#ifndef OPENSSL_EC_H +# define OPENSSL_EC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_EC_H +# endif # include +# include + +# include -# ifndef OPENSSL_NO_EC -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include # ifdef __cplusplus extern "C" { # endif -# ifndef OPENSSL_ECC_MAX_FIELD_BITS -# define OPENSSL_ECC_MAX_FIELD_BITS 661 +/* Values for EVP_PKEY_CTX_set_ec_param_enc() */ +# define OPENSSL_EC_EXPLICIT_CURVE 0x000 +# define OPENSSL_EC_NAMED_CURVE 0x001 + +int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid); +int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, int param_enc); +int EVP_PKEY_CTX_set_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx, int cofactor_mode); +int EVP_PKEY_CTX_get_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_set_ecdh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +int EVP_PKEY_CTX_get_ecdh_kdf_type(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_set_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_get_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); + +int EVP_PKEY_CTX_set_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +int EVP_PKEY_CTX_get_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); + +int EVP_PKEY_CTX_set0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, + int len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_get0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); # endif +# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) + +/* KDF types */ +# define EVP_PKEY_ECDH_KDF_NONE 1 +# define EVP_PKEY_ECDH_KDF_X9_63 2 +/* + * The old name for EVP_PKEY_ECDH_KDF_X9_63 + * The ECDH KDF specification has been mistakenly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility + */ +# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 + /** Enum for the point conversion form as defined in X9.62 (ECDSA) * for the encoding of a elliptic curve point (x,y) */ typedef enum { @@ -41,7 +86,27 @@ typedef enum { POINT_CONVERSION_HYBRID = 6 } point_conversion_form_t; +const char *OSSL_EC_curve_nid2name(int nid); + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# ifndef OPENSSL_NO_EC +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include + +# ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef struct ec_method_st EC_METHOD; +# endif typedef struct ec_group_st EC_GROUP; typedef struct ec_point_st EC_POINT; typedef struct ecpk_parameters_st ECPKPARAMETERS; @@ -51,40 +116,41 @@ typedef struct ec_parameters_st ECPARAMETERS; /* EC_METHODs for curves over GF(p) */ /********************************************************************/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Returns the basic GFp ec methods which provides the basis for the * optimized methods. * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_simple_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_simple_method(void); /** Returns GFp methods using montgomery multiplication. * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_mont_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_mont_method(void); /** Returns GFp methods using optimized methods for NIST recommended curves * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nist_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nist_method(void); -# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 /** Returns 64-bit optimized methods for nistp224 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp224_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp224_method(void); /** Returns 64-bit optimized methods for nistp256 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp256_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp256_method(void); /** Returns 64-bit optimized methods for nistp521 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp521_method(void); -# endif +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp521_method(void); +# endif /* OPENSSL_NO_EC_NISTP_64_GCC_128 */ -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /********************************************************************/ /* EC_METHOD for curves over GF(2^m) */ /********************************************************************/ @@ -92,30 +158,44 @@ const EC_METHOD *EC_GFp_nistp521_method(void); /** Returns the basic GF2m ec method * \return EC_METHOD object */ -const EC_METHOD *EC_GF2m_simple_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GF2m_simple_method(void); -# endif +# endif /********************************************************************/ /* EC_GROUP functions */ /********************************************************************/ -/** Creates a new EC_GROUP object - * \param meth EC_METHOD to use +/** + * Creates a new EC_GROUP object + * \param meth EC_METHOD to use * \return newly created EC_GROUP object or NULL in case of an error. */ -EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); + +/** Clears and frees a EC_GROUP object + * \param group EC_GROUP object to be cleared and freed. + */ +OSSL_DEPRECATEDIN_3_0 void EC_GROUP_clear_free(EC_GROUP *group); + +/** Returns the EC_METHOD of the EC_GROUP object. + * \param group EC_GROUP object + * \return EC_METHOD used in this EC_GROUP object. + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); + +/** Returns the field type of the EC_METHOD. + * \param meth EC_METHOD object + * \return NID of the underlying field type OID. + */ +OSSL_DEPRECATEDIN_3_0 int EC_METHOD_get_field_type(const EC_METHOD *meth); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Frees a EC_GROUP object * \param group EC_GROUP object to be freed. */ void EC_GROUP_free(EC_GROUP *group); -/** Clears and frees a EC_GROUP object - * \param group EC_GROUP object to be cleared and freed. - */ -void EC_GROUP_clear_free(EC_GROUP *group); - /** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. * \param dst destination EC_GROUP object * \param src source EC_GROUP object @@ -123,25 +203,13 @@ void EC_GROUP_clear_free(EC_GROUP *group); */ int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); -/** Creates a new EC_GROUP object and copies the copies the content +/** Creates a new EC_GROUP object and copies the content * form src to the newly created EC_KEY object * \param src source EC_GROUP object * \return newly created EC_GROUP object or NULL in case of an error. */ EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); -/** Returns the EC_METHOD of the EC_GROUP object. - * \param group EC_GROUP object - * \return EC_METHOD used in this EC_GROUP object. - */ -const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); - -/** Returns the field type of the EC_METHOD. - * \param meth EC_METHOD object - * \return NID of the underlying field type OID. - */ -int EC_METHOD_get_field_type(const EC_METHOD *meth); - /** Sets the generator and its order/cofactor of a EC_GROUP object. * \param group EC_GROUP object * \param generator EC_POINT object with the generator. @@ -212,6 +280,18 @@ void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); */ int EC_GROUP_get_curve_name(const EC_GROUP *group); +/** Gets the field of an EC_GROUP + * \param group EC_GROUP object + * \return the group field + */ +const BIGNUM *EC_GROUP_get0_field(const EC_GROUP *group); + +/** Returns the field type of the EC_GROUP. + * \param group EC_GROUP object + * \return NID of the underlying field type OID. + */ +int EC_GROUP_get_field_type(const EC_GROUP *group); + void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); int EC_GROUP_get_asn1_flag(const EC_GROUP *group); @@ -223,7 +303,7 @@ unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); size_t EC_GROUP_get_seed_len(const EC_GROUP *); size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); -/** Sets the parameters of a ec curve defined by y^2 = x^3 + a*x + b (for GFp) +/** Sets the parameters of an ec curve defined by y^2 = x^3 + a*x + b (for GFp) * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -249,6 +329,7 @@ int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the parameters of an ec curve. Synonym for EC_GROUP_set_curve * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -258,9 +339,11 @@ int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, - const BIGNUM *a, const BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_set_curve_GFp(EC_GROUP *group, + const BIGNUM *p, + const BIGNUM *a, + const BIGNUM *b, + BN_CTX *ctx); /** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve * \param group EC_GROUP object @@ -271,11 +354,12 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, - BIGNUM *a, BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_get_curve_GFp(const EC_GROUP *group, + BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /** Sets the parameter of an ec curve. Synonym for EC_GROUP_set_curve * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -285,9 +369,11 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, - const BIGNUM *a, const BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_set_curve_GF2m(EC_GROUP *group, + const BIGNUM *p, + const BIGNUM *a, + const BIGNUM *b, + BN_CTX *ctx); /** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve * \param group EC_GROUP object @@ -298,10 +384,13 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, - BIGNUM *a, BIGNUM *b, - BN_CTX *ctx)) -# endif +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, + BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); +# endif /* OPENSSL_NO_EC2M */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + /** Returns the number of bits needed to represent a field element * \param group EC_GROUP object * \return number of bits needed to represent a field element @@ -345,7 +434,7 @@ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); */ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /** Creates a new EC_GROUP object with the specified parameters defined * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) * \param p BIGNUM with the polynomial defining the underlying field @@ -356,10 +445,38 @@ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, */ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -# endif +# endif -/** Creates a EC_GROUP object with a curve specified by a NID - * \param nid NID of the OID of the curve name +/** + * Creates a EC_GROUP object with a curve specified by parameters. + * The parameters may be explicit or a named curve, + * \param params A list of parameters describing the group. + * \param libctx The associated library context or NULL for the default + * context + * \param propq A property query string + * \return newly created EC_GROUP object with specified parameters or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[], + OSSL_LIB_CTX *libctx, const char *propq); + +/** + * Creates a EC_GROUP object with a curve specified by a NID + * \param libctx The associated library context or NULL for the default + * context + * \param propq A property query string + * \param nid NID of the OID of the curve name + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_by_curve_name_ex(OSSL_LIB_CTX *libctx, const char *propq, + int nid); + +/** + * Creates a EC_GROUP object with a curve specified by a NID. Same as + * EC_GROUP_new_by_curve_name_ex but the libctx and propq are always + * NULL. + * \param nid NID of the OID of the curve name * \return newly created EC_GROUP object with specified curve or NULL * if an error occurred */ @@ -416,6 +533,8 @@ size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); const char *EC_curve_nid2nist(int nid); int EC_curve_nist2nid(const char *name); +int EC_GROUP_check_named_curve(const EC_GROUP *group, int nist_only, + BN_CTX *ctx); /********************************************************************/ /* EC_POINT functions */ @@ -452,12 +571,6 @@ int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); */ EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); -/** Returns the EC_METHOD used in EC_POINT object - * \param point EC_POINT object - * \return the EC_METHOD used - */ -const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); - /** Sets a point to infinity (neutral element) * \param group underlying EC_GROUP object * \param point EC_POINT to set to infinity @@ -465,6 +578,13 @@ const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); */ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** Returns the EC_METHOD used in EC_POINT object + * \param point EC_POINT object + * \return the EC_METHOD used + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); + /** Sets the jacobian projective coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object * \param p EC_POINT object @@ -474,10 +594,10 @@ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - const BIGNUM *y, const BIGNUM *z, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_Jprojective_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, + BN_CTX *ctx); /** Gets the jacobian projective coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object @@ -488,10 +608,10 @@ int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BIGNUM *z, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_Jprojective_coordinates_GFp + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Sets the affine coordinates of an EC_POINT * \param group underlying EC_GROUP object @@ -516,6 +636,7 @@ int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p, int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_set_affine_coordinates * \param group underlying EC_GROUP object @@ -525,11 +646,9 @@ int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - const BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_affine_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); /** Gets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_get_affine_coordinates @@ -540,11 +659,10 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, - BIGNUM *x, - BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_affine_coordinates_GFp + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Sets the x9.62 compressed coordinates of a EC_POINT * \param group underlying EC_GROUP object @@ -558,6 +676,7 @@ int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, const BIGNUM *x, int y_bit, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of * EC_POINT_set_compressed_coordinates * \param group underlying EC_GROUP object @@ -567,12 +686,10 @@ int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - int y_bit, - BN_CTX *ctx)) -# ifndef OPENSSL_NO_EC2M +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_compressed_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); +# ifndef OPENSSL_NO_EC2M /** Sets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_set_affine_coordinates * \param group underlying EC_GROUP object @@ -582,11 +699,9 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *g * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - const BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_affine_coordinates_GF2m + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); /** Gets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_get_affine_coordinates @@ -597,11 +712,9 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *grou * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, - const EC_POINT *p, - BIGNUM *x, - BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_affine_coordinates_GF2m + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); /** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of * EC_POINT_set_compressed_coordinates @@ -612,12 +725,12 @@ DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *grou * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - int y_bit, - BN_CTX *ctx)) -# endif +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_compressed_coordinates_GF2m + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + /** Encodes a EC_POINT object to a octet string * \param group underlying EC_GROUP object * \param p EC_POINT object @@ -656,10 +769,16 @@ size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point, unsigned char **pbuf, BN_CTX *ctx); /* other interfaces to point2oct/oct2point: */ -BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BIGNUM *, BN_CTX *); -EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, - EC_POINT *, BN_CTX *); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 BIGNUM *EC_POINT_point2bn(const EC_GROUP *, + const EC_POINT *, + point_conversion_form_t form, + BIGNUM *, BN_CTX *); +OSSL_DEPRECATEDIN_3_0 EC_POINT *EC_POINT_bn2point(const EC_GROUP *, + const BIGNUM *, + EC_POINT *, BN_CTX *); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, point_conversion_form_t form, BN_CTX *); EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, @@ -724,9 +843,11 @@ int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); -int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); -int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, - EC_POINT *points[], BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EC_POINT_make_affine(const EC_GROUP *group, + EC_POINT *point, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, + EC_POINT *points[], BN_CTX *ctx); /** Computes r = generator * n + sum_{i=0}^{num-1} p[i] * m[i] * \param group underlying EC_GROUP object @@ -738,9 +859,11 @@ int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - size_t num, const EC_POINT *p[], const BIGNUM *m[], - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, + const BIGNUM *n, size_t num, + const EC_POINT *p[], const BIGNUM *m[], + BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Computes r = generator * n + q * m * \param group underlying EC_GROUP object @@ -754,18 +877,20 @@ int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Stores multiples of generator for faster point multiplication * \param group EC_GROUP object * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); /** Reports whether a precomputation has been done * \param group EC_GROUP object * \return 1 if a pre-computation has been done and 0 otherwise */ -int EC_GROUP_have_precompute_mult(const EC_GROUP *group); +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_have_precompute_mult(const EC_GROUP *group); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /********************************************************************/ /* ASN1 stuff */ @@ -781,101 +906,135 @@ DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) * represent the field elements */ int EC_GROUP_get_basis_type(const EC_GROUP *); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, unsigned int *k2, unsigned int *k3); -# endif - -# define OPENSSL_EC_EXPLICIT_CURVE 0x000 -# define OPENSSL_EC_NAMED_CURVE 0x001 +# endif EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); -# define d2i_ECPKParameters_bio(bp,x) \ +# define d2i_ECPKParameters_bio(bp,x) \ ASN1_d2i_bio_of(EC_GROUP, NULL, d2i_ECPKParameters, bp, x) -# define i2d_ECPKParameters_bio(bp,x) \ - ASN1_i2d_bio_of_const(EC_GROUP, i2d_ECPKParameters, bp, x) -# define d2i_ECPKParameters_fp(fp,x) \ +# define i2d_ECPKParameters_bio(bp,x) \ + ASN1_i2d_bio_of(EC_GROUP, i2d_ECPKParameters, bp, x) +# define d2i_ECPKParameters_fp(fp,x) \ (EC_GROUP *)ASN1_d2i_fp(NULL, (d2i_of_void *)d2i_ECPKParameters, (fp), \ (void **)(x)) -# define i2d_ECPKParameters_fp(fp,x) \ +# define i2d_ECPKParameters_fp(fp,x) \ ASN1_i2d_fp((i2d_of_void *)i2d_ECPKParameters, (fp), (void *)(x)) -int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); -# ifndef OPENSSL_NO_STDIO -int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); -# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ECPKParameters_print(BIO *bp, const EC_GROUP *x, + int off); +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, + int off); +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /********************************************************************/ /* EC_KEY functions */ /********************************************************************/ /* some values for the encoding_flag */ -# define EC_PKEY_NO_PARAMETERS 0x001 -# define EC_PKEY_NO_PUBKEY 0x002 +# define EC_PKEY_NO_PARAMETERS 0x001 +# define EC_PKEY_NO_PUBKEY 0x002 /* some values for the flags field */ -# define EC_FLAG_NON_FIPS_ALLOW 0x1 -# define EC_FLAG_FIPS_CHECKED 0x2 -# define EC_FLAG_COFACTOR_ECDH 0x1000 +# define EC_FLAG_SM2_RANGE 0x0004 +# define EC_FLAG_COFACTOR_ECDH 0x1000 +# define EC_FLAG_CHECK_NAMED_GROUP 0x2000 +# define EC_FLAG_CHECK_NAMED_GROUP_NIST 0x4000 +# define EC_FLAG_CHECK_NAMED_GROUP_MASK \ + (EC_FLAG_CHECK_NAMED_GROUP | EC_FLAG_CHECK_NAMED_GROUP_NIST) -/** Creates a new EC_KEY object. +/* Deprecated flags - it was using 0x01..0x02 */ +# define EC_FLAG_NON_FIPS_ALLOW 0x0000 +# define EC_FLAG_FIPS_CHECKED 0x0000 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** + * Creates a new EC_KEY object. + * \param ctx The library context for to use for this EC_KEY. May be NULL in + * which case the default library context is used. * \return EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_new(void); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_ex(OSSL_LIB_CTX *ctx, const char *propq); -int EC_KEY_get_flags(const EC_KEY *key); +/** + * Creates a new EC_KEY object. Same as calling EC_KEY_new_ex with a + * NULL library context + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new(void); -void EC_KEY_set_flags(EC_KEY *key, int flags); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_get_flags(const EC_KEY *key); -void EC_KEY_clear_flags(EC_KEY *key, int flags); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_flags(EC_KEY *key, int flags); -int EC_KEY_decoded_from_explicit_params(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_clear_flags(EC_KEY *key, int flags); -/** Creates a new EC_KEY object using a named curve as underlying +OSSL_DEPRECATEDIN_3_0 int EC_KEY_decoded_from_explicit_params(const EC_KEY *key); + +/** + * Creates a new EC_KEY object using a named curve as underlying * EC_GROUP object. + * \param ctx The library context for to use for this EC_KEY. May be NULL in + * which case the default library context is used. + * \param propq Any property query string + * \param nid NID of the named curve. + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_by_curve_name_ex(OSSL_LIB_CTX *ctx, + const char *propq, + int nid); + +/** + * Creates a new EC_KEY object using a named curve as underlying + * EC_GROUP object. Same as calling EC_KEY_new_by_curve_name_ex with a NULL + * library context and property query string. * \param nid NID of the named curve. * \return EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_new_by_curve_name(int nid); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_by_curve_name(int nid); /** Frees a EC_KEY object. * \param key EC_KEY object to be freed. */ -void EC_KEY_free(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_free(EC_KEY *key); /** Copies a EC_KEY object. * \param dst destination EC_KEY object * \param src src EC_KEY object * \return dst or NULL if an error occurred. */ -EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); /** Creates a new EC_KEY object and copies the content from src to it. * \param src the source EC_KEY object * \return newly created EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_dup(const EC_KEY *src); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_dup(const EC_KEY *src); /** Increases the internal reference count of a EC_KEY object. * \param key EC_KEY object * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_up_ref(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_up_ref(EC_KEY *key); /** Returns the ENGINE object of a EC_KEY object * \param eckey EC_KEY object * \return the ENGINE object (possibly NULL). */ -ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); /** Returns the EC_GROUP object of a EC_KEY object * \param key EC_KEY object * \return the EC_GROUP object (possibly NULL). */ -const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); /** Sets the EC_GROUP of a EC_KEY object. * \param key EC_KEY object @@ -883,13 +1042,13 @@ const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); * object will use an own copy of the EC_GROUP). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); /** Returns the private key of a EC_KEY object. * \param key EC_KEY object * \return a BIGNUM with the private key (possibly NULL). */ -const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); /** Sets the private key of a EC_KEY object. * \param key EC_KEY object @@ -897,13 +1056,13 @@ const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); * will use an own copy of the BIGNUM). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); /** Returns the public key of a EC_KEY object. * \param key the EC_KEY object * \return a EC_POINT object with the public key (possibly NULL) */ -const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); /** Sets the public key of a EC_KEY object. * \param key EC_KEY object @@ -911,20 +1070,24 @@ const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); * will use an own copy of the EC_POINT object). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); -unsigned EC_KEY_get_enc_flags(const EC_KEY *key); -void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); -point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); -void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); +OSSL_DEPRECATEDIN_3_0 unsigned EC_KEY_get_enc_flags(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); +OSSL_DEPRECATEDIN_3_0 point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_conv_form(EC_KEY *eckey, + point_conversion_form_t cform); +# endif /*OPENSSL_NO_DEPRECATED_3_0 */ -#define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ +# define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) -int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); -void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); /* wrapper functions for the underlying EC_GROUP object */ -void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); /** Creates a table of pre-computed multiples of the generator to * accelerate further EC_KEY operations. @@ -932,25 +1095,25 @@ void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); /** Creates a new ec private (and optional a new public) key. * \param key EC_KEY object * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_generate_key(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_generate_key(EC_KEY *key); /** Verifies that a private and/or public key is valid. * \param key the EC_KEY object * \return 1 on success and 0 otherwise. */ -int EC_KEY_check_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_check_key(const EC_KEY *key); /** Indicates if an EC_KEY can be used for signing. * \param eckey the EC_KEY object * \return 1 if can can sign and 0 otherwise. */ -int EC_KEY_can_sign(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_can_sign(const EC_KEY *eckey); /** Sets a public key from affine coordinates performing * necessary NIST PKV tests. @@ -959,8 +1122,9 @@ int EC_KEY_can_sign(const EC_KEY *eckey); * \param y public key y coordinate * \return 1 on success and 0 otherwise. */ -int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, - BIGNUM *y); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, + BIGNUM *x, + BIGNUM *y); /** Encodes an EC_KEY public key to an allocated octet string * \param key key to encode @@ -969,8 +1133,9 @@ int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, * \param ctx BN_CTX object (optional) * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, - unsigned char **pbuf, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_key2buf(const EC_KEY *key, + point_conversion_form_t form, + unsigned char **pbuf, BN_CTX *ctx); /** Decodes a EC_KEY public key from a octet string * \param key key to decode @@ -980,8 +1145,8 @@ size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, * \return 1 on success and 0 if an error occurred */ -int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, + size_t len, BN_CTX *ctx); /** Decodes an EC_KEY private key from an octet string * \param key key to decode @@ -990,7 +1155,8 @@ int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, * \return 1 on success and 0 if an error occurred */ -int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, + size_t len); /** Encodes a EC_KEY private key to an octet string * \param key key to encode @@ -1000,14 +1166,16 @@ int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_priv2oct(const EC_KEY *key, unsigned char *buf, size_t len); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_priv2oct(const EC_KEY *key, + unsigned char *buf, size_t len); /** Encodes an EC_KEY private key to an allocated octet string * \param eckey key to encode * \param pbuf returns pointer to allocated buffer * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_priv2buf(const EC_KEY *eckey, + unsigned char **pbuf); /********************************************************************/ /* de- and encoding functions for SEC1 ECPrivateKey */ @@ -1019,7 +1187,9 @@ size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); * \param len length of the DER encoded private key * \return the decoded private key or NULL if an error occurred. */ -EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey(EC_KEY **key, + const unsigned char **in, + long len); /** Encodes a private key object and stores the result in a buffer. * \param key the EC_KEY object to encode @@ -1027,7 +1197,8 @@ EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); * of bytes needed). * \return 1 on success and 0 if an error occurred. */ -int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey(const EC_KEY *key, + unsigned char **out); /********************************************************************/ /* de- and encoding functions for EC parameters */ @@ -1040,7 +1211,9 @@ int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); * \return a EC_KEY object with the decoded parameters or NULL if an error * occurred. */ -EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECParameters(EC_KEY **key, + const unsigned char **in, + long len); /** Encodes ec parameter and stores the result in a buffer. * \param key the EC_KEY object with ec parameters to encode @@ -1048,36 +1221,38 @@ EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); * of bytes needed). * \return 1 on success and 0 if an error occurred. */ -int i2d_ECParameters(EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2d_ECParameters(const EC_KEY *key, + unsigned char **out); /********************************************************************/ /* de- and encoding functions for EC public key */ /* (octet string, not DER -- hence 'o2i' and 'i2o') */ /********************************************************************/ -/** Decodes a ec public key from a octet string. +/** Decodes an ec public key from a octet string. * \param key a pointer to a EC_KEY object which should be used * \param in memory buffer with the encoded public key * \param len length of the encoded public key * \return EC_KEY object with decoded public key or NULL if an error * occurred. */ -EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *o2i_ECPublicKey(EC_KEY **key, + const unsigned char **in, long len); -/** Encodes a ec public key in an octet string. +/** Encodes an ec public key in an octet string. * \param key the EC_KEY object with the public key * \param out the buffer for the result (if NULL the function returns number * of bytes needed). * \return 1 on success and 0 if an error occurred */ -int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); /** Prints out the ec parameters on human readable form. * \param bp BIO object to which the information is printed * \param key EC_KEY object * \return 1 on success and 0 if an error occurred */ -int ECParameters_print(BIO *bp, const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int ECParameters_print(BIO *bp, const EC_KEY *key); /** Prints out the contents of a EC_KEY object * \param bp BIO object to which the information is printed @@ -1085,15 +1260,15 @@ int ECParameters_print(BIO *bp, const EC_KEY *key); * \param off line offset * \return 1 on success and 0 if an error occurred */ -int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); -# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_STDIO /** Prints out the ec parameters on human readable form. * \param fp file descriptor to which the information is printed * \param key EC_KEY object * \return 1 on success and 0 if an error occurred */ -int ECParameters_print_fp(FILE *fp, const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int ECParameters_print_fp(FILE *fp, const EC_KEY *key); /** Prints out the contents of a EC_KEY object * \param fp file descriptor to which the information is printed @@ -1101,31 +1276,33 @@ int ECParameters_print_fp(FILE *fp, const EC_KEY *key); * \param off line offset * \return 1 on success and 0 if an error occurred */ -int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); +# endif /* OPENSSL_NO_STDIO */ -# endif - -const EC_KEY_METHOD *EC_KEY_OpenSSL(void); -const EC_KEY_METHOD *EC_KEY_get_default_method(void); -void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); -const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); -int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); -EC_KEY *EC_KEY_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_method(ENGINE *engine); /** The old name for ecdh_KDF_X9_63 * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, * it is actually specified in ANSI X9.63. * This identifier is retained for backwards compatibility */ -int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const unsigned char *sinfo, + size_t sinfolen, const EVP_MD *md); -int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, - const EC_KEY *ecdh, - void *(*KDF) (const void *in, size_t inlen, - void *out, size_t *outlen)); +OSSL_DEPRECATEDIN_3_0 int ECDH_compute_key(void *out, size_t outlen, + const EC_POINT *pub_key, + const EC_KEY *ecdh, + void *(*KDF)(const void *in, + size_t inlen, void *out, + size_t *outlen)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ typedef struct ECDSA_SIG_st ECDSA_SIG; @@ -1139,23 +1316,22 @@ ECDSA_SIG *ECDSA_SIG_new(void); */ void ECDSA_SIG_free(ECDSA_SIG *sig); -/** DER encode content of ECDSA_SIG object (note: this function modifies *pp +/** i2d_ECDSA_SIG encodes content of ECDSA_SIG (note: this function modifies *pp * (*pp += length of the DER encoded signature)). * \param sig pointer to the ECDSA_SIG object * \param pp pointer to a unsigned char pointer for the output or NULL * \return the length of the DER encoded ECDSA_SIG object or a negative value * on error */ -int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ECDSA_SIG, ECDSA_SIG) -/** Decodes a DER encoded ECDSA signature (note: this function changes *pp +/** d2i_ECDSA_SIG decodes an ECDSA signature (note: this function modifies *pp * (*pp += len)). * \param sig pointer to ECDSA_SIG pointer (may be NULL) * \param pp memory buffer with the DER encoded signature * \param len length of the buffer * \return pointer to the decoded ECDSA_SIG structure (or NULL) */ -ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); /** Accessor for r and s fields of ECDSA_SIG * \param sig pointer to ECDSA_SIG structure @@ -1176,11 +1352,12 @@ const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig); /** Setter for r and s fields of ECDSA_SIG * \param sig pointer to ECDSA_SIG structure - * \param r pointer to BIGNUM for r (may be NULL) - * \param s pointer to BIGNUM for s (may be NULL) + * \param r pointer to BIGNUM for r + * \param s pointer to BIGNUM for s */ int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Computes the ECDSA signature of the given hash value using * the supplied private key and returns the created signature. * \param dgst pointer to the hash value @@ -1188,8 +1365,8 @@ int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); * \param eckey EC_KEY object containing a private EC key * \return pointer to a ECDSA_SIG structure or NULL if an error occurred */ -ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, - EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, + int dgst_len, EC_KEY *eckey); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1201,9 +1378,9 @@ ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, * \param eckey EC_KEY object containing a private EC key * \return pointer to a ECDSA_SIG structure or NULL if an error occurred */ -ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, - const BIGNUM *kinv, const BIGNUM *rp, - EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, + int dgstlen, const BIGNUM *kinv, + const BIGNUM *rp, EC_KEY *eckey); /** Verifies that the supplied signature is a valid ECDSA * signature of the supplied hash value using the supplied public key. @@ -1214,8 +1391,8 @@ ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, * \return 1 if the signature is valid, 0 if the signature is invalid * and -1 on error */ -int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, + const ECDSA_SIG *sig, EC_KEY *eckey); /** Precompute parts of the signing operation * \param eckey EC_KEY object containing a private EC key @@ -1224,7 +1401,8 @@ int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, * \param rp BIGNUM pointer for x coordinate of k * generator * \return 1 on success and 0 otherwise */ -int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, + BIGNUM **kinv, BIGNUM **rp); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1236,8 +1414,9 @@ int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); * \param eckey EC_KEY object containing a private EC key * \return 1 on success and 0 otherwise */ -int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign(int type, const unsigned char *dgst, + int dgstlen, unsigned char *sig, + unsigned int *siglen, EC_KEY *eckey); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1252,9 +1431,10 @@ int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, * \param eckey EC_KEY object containing a private EC key * \return 1 on success and 0 otherwise */ -int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign_ex(int type, const unsigned char *dgst, + int dgstlen, unsigned char *sig, + unsigned int *siglen, const BIGNUM *kinv, + const BIGNUM *rp, EC_KEY *eckey); /** Verifies that the given signature is valid ECDSA signature * of the supplied hash value using the specified public key. @@ -1267,218 +1447,126 @@ int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, * \return 1 if the signature is valid, 0 if the signature is invalid * and -1 on error */ -int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_verify(int type, const unsigned char *dgst, + int dgstlen, const unsigned char *sig, + int siglen, EC_KEY *eckey); /** Returns the maximum length of the DER encoded signature * \param eckey EC_KEY object * \return numbers of bytes required for the DER encoded signature */ -int ECDSA_size(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_size(const EC_KEY *eckey); /********************************************************************/ /* EC_KEY_METHOD constructors, destructors, writers and accessors */ /********************************************************************/ -EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); -void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); -void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, - int (*init)(EC_KEY *key), - void (*finish)(EC_KEY *key), - int (*copy)(EC_KEY *dest, const EC_KEY *src), - int (*set_group)(EC_KEY *key, const EC_GROUP *grp), - int (*set_private)(EC_KEY *key, - const BIGNUM *priv_key), - int (*set_public)(EC_KEY *key, - const EC_POINT *pub_key)); +OSSL_DEPRECATEDIN_3_0 EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_init + (EC_KEY_METHOD *meth, + int (*init)(EC_KEY *key), + void (*finish)(EC_KEY *key), + int (*copy)(EC_KEY *dest, const EC_KEY *src), + int (*set_group)(EC_KEY *key, const EC_GROUP *grp), + int (*set_private)(EC_KEY *key, const BIGNUM *priv_key), + int (*set_public)(EC_KEY *key, const EC_POINT *pub_key)); -void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, - int (*keygen)(EC_KEY *key)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, + int (*keygen)(EC_KEY *key)); -void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, - int (*ckey)(unsigned char **psec, - size_t *pseclen, - const EC_POINT *pub_key, - const EC_KEY *ecdh)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_compute_key + (EC_KEY_METHOD *meth, + int (*ckey)(unsigned char **psec, size_t *pseclen, + const EC_POINT *pub_key, const EC_KEY *ecdh)); -void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, - int (*sign)(int type, const unsigned char *dgst, - int dlen, unsigned char *sig, - unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *r, - EC_KEY *eckey), - int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, - BIGNUM **kinvp, BIGNUM **rp), - ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, - int dgst_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_sign + (EC_KEY_METHOD *meth, + int (*sign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); -void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth, - int (*verify)(int type, const unsigned - char *dgst, int dgst_len, - const unsigned char *sigbuf, - int sig_len, EC_KEY *eckey), - int (*verify_sig)(const unsigned char *dgst, +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_verify + (EC_KEY_METHOD *meth, + int (*verify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (*verify_sig)(const unsigned char *dgst, + int dgst_len, const ECDSA_SIG *sig, + EC_KEY *eckey)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_init + (const EC_KEY_METHOD *meth, + int (**pinit)(EC_KEY *key), + void (**pfinish)(EC_KEY *key), + int (**pcopy)(EC_KEY *dest, const EC_KEY *src), + int (**pset_group)(EC_KEY *key, const EC_GROUP *grp), + int (**pset_private)(EC_KEY *key, const BIGNUM *priv_key), + int (**pset_public)(EC_KEY *key, const EC_POINT *pub_key)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_keygen + (const EC_KEY_METHOD *meth, int (**pkeygen)(EC_KEY *key)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_compute_key + (const EC_KEY_METHOD *meth, + int (**pck)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_sign + (const EC_KEY_METHOD *meth, + int (**psign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, + const BIGNUM *in_kinv, + const BIGNUM *in_r, EC_KEY *eckey)); -void EC_KEY_METHOD_get_init(const EC_KEY_METHOD *meth, - int (**pinit)(EC_KEY *key), - void (**pfinish)(EC_KEY *key), - int (**pcopy)(EC_KEY *dest, const EC_KEY *src), - int (**pset_group)(EC_KEY *key, - const EC_GROUP *grp), - int (**pset_private)(EC_KEY *key, - const BIGNUM *priv_key), - int (**pset_public)(EC_KEY *key, - const EC_POINT *pub_key)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_verify + (const EC_KEY_METHOD *meth, + int (**pverify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (**pverify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ -void EC_KEY_METHOD_get_keygen(const EC_KEY_METHOD *meth, - int (**pkeygen)(EC_KEY *key)); +# define EVP_EC_gen(curve) \ + EVP_PKEY_Q_keygen(NULL, NULL, "EC", (char *)(strstr(curve, ""))) + /* strstr is used to enable type checking for the variadic string arg */ +# define ECParameters_dup(x) ASN1_dup_of(EC_KEY, i2d_ECParameters, \ + d2i_ECParameters, x) -void EC_KEY_METHOD_get_compute_key(const EC_KEY_METHOD *meth, - int (**pck)(unsigned char **psec, - size_t *pseclen, - const EC_POINT *pub_key, - const EC_KEY *ecdh)); - -void EC_KEY_METHOD_get_sign(const EC_KEY_METHOD *meth, - int (**psign)(int type, const unsigned char *dgst, - int dlen, unsigned char *sig, - unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *r, - EC_KEY *eckey), - int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, - BIGNUM **kinvp, BIGNUM **rp), - ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, - int dgst_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); - -void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth, - int (**pverify)(int type, const unsigned - char *dgst, int dgst_len, - const unsigned char *sigbuf, - int sig_len, EC_KEY *eckey), - int (**pverify_sig)(const unsigned char *dgst, - int dgst_len, - const ECDSA_SIG *sig, - EC_KEY *eckey)); - -# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) - -# ifndef __cplusplus -# if defined(__SUNPRO_C) -# if __SUNPRO_C >= 0x520 -# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# ifndef __cplusplus +# if defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif # endif # endif + # endif - -# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) - -# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) - -# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, \ - (void *)(plen)) - -# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)(p)) - -/* SM2 will skip the operation check so no need to pass operation here */ -# define EVP_PKEY_CTX_set1_id(ctx, id, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_SET1_ID, (int)id_len, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id(ctx, id) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID, 0, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id_len(ctx, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID_LEN, 0, (void*)(id_len)) - -# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_SET1_ID (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET1_ID (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_GET1_ID_LEN (EVP_PKEY_ALG_CTRL + 13) -/* KDF types */ -# define EVP_PKEY_ECDH_KDF_NONE 1 -# define EVP_PKEY_ECDH_KDF_X9_63 2 -/** The old name for EVP_PKEY_ECDH_KDF_X9_63 - * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, - * it is actually specified in ANSI X9.63. - * This identifier is retained for backwards compatibility - */ -# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 - - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ecdh.h b/deps/openssl/android/x86/usr/local/include/openssl/ecdh.h index 681f3d5e..56bd4cc2 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ecdh.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ecdh.h @@ -1,7 +1,7 @@ /* * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ecdsa.h b/deps/openssl/android/x86/usr/local/include/openssl/ecdsa.h index 681f3d5e..56bd4cc2 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ecdsa.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ecdsa.h @@ -1,7 +1,7 @@ /* * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ecerr.h b/deps/openssl/android/x86/usr/local/include/openssl/ecerr.h index 51738113..f15f91f6 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ecerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ecerr.h @@ -1,206 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ECERR_H -# define HEADER_ECERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_ECERR_H +# define OPENSSL_ECERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_EC -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EC_strings(void); - -/* - * EC function codes. - */ -# define EC_F_BN_TO_FELEM 224 -# define EC_F_D2I_ECPARAMETERS 144 -# define EC_F_D2I_ECPKPARAMETERS 145 -# define EC_F_D2I_ECPRIVATEKEY 146 -# define EC_F_DO_EC_KEY_PRINT 221 -# define EC_F_ECDH_CMS_DECRYPT 238 -# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 -# define EC_F_ECDH_COMPUTE_KEY 246 -# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 -# define EC_F_ECDSA_DO_SIGN_EX 251 -# define EC_F_ECDSA_DO_VERIFY 252 -# define EC_F_ECDSA_SIGN_EX 254 -# define EC_F_ECDSA_SIGN_SETUP 248 -# define EC_F_ECDSA_SIG_NEW 265 -# define EC_F_ECDSA_VERIFY 253 -# define EC_F_ECD_ITEM_VERIFY 270 -# define EC_F_ECKEY_PARAM2TYPE 223 -# define EC_F_ECKEY_PARAM_DECODE 212 -# define EC_F_ECKEY_PRIV_DECODE 213 -# define EC_F_ECKEY_PRIV_ENCODE 214 -# define EC_F_ECKEY_PUB_DECODE 215 -# define EC_F_ECKEY_PUB_ENCODE 216 -# define EC_F_ECKEY_TYPE2PARAM 220 -# define EC_F_ECPARAMETERS_PRINT 147 -# define EC_F_ECPARAMETERS_PRINT_FP 148 -# define EC_F_ECPKPARAMETERS_PRINT 149 -# define EC_F_ECPKPARAMETERS_PRINT_FP 150 -# define EC_F_ECP_NISTZ256_GET_AFFINE 240 -# define EC_F_ECP_NISTZ256_INV_MOD_ORD 275 -# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 -# define EC_F_ECP_NISTZ256_POINTS_MUL 241 -# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 -# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 -# define EC_F_ECX_KEY_OP 266 -# define EC_F_ECX_PRIV_ENCODE 267 -# define EC_F_ECX_PUB_ENCODE 268 -# define EC_F_EC_ASN1_GROUP2CURVE 153 -# define EC_F_EC_ASN1_GROUP2FIELDID 154 -# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 -# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 296 -# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 -# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 -# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 285 -# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 288 -# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 -# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 -# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 289 -# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 -# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 -# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 -# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 -# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 -# define EC_F_EC_GFP_MONT_FIELD_INV 297 -# define EC_F_EC_GFP_MONT_FIELD_MUL 131 -# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 -# define EC_F_EC_GFP_MONT_FIELD_SQR 132 -# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 -# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 -# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 -# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 -# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 -# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 -# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 -# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 -# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 -# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 -# define EC_F_EC_GFP_NIST_FIELD_MUL 200 -# define EC_F_EC_GFP_NIST_FIELD_SQR 201 -# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 -# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 287 -# define EC_F_EC_GFP_SIMPLE_FIELD_INV 298 -# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 -# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 -# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 -# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 -# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 -# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 -# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 -# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 -# define EC_F_EC_GROUP_CHECK 170 -# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 -# define EC_F_EC_GROUP_COPY 106 -# define EC_F_EC_GROUP_GET_CURVE 291 -# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 -# define EC_F_EC_GROUP_GET_CURVE_GFP 130 -# define EC_F_EC_GROUP_GET_DEGREE 173 -# define EC_F_EC_GROUP_GET_ECPARAMETERS 261 -# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 -# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 -# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 -# define EC_F_EC_GROUP_NEW 108 -# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 -# define EC_F_EC_GROUP_NEW_FROM_DATA 175 -# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 263 -# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 -# define EC_F_EC_GROUP_SET_CURVE 292 -# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 -# define EC_F_EC_GROUP_SET_CURVE_GFP 109 -# define EC_F_EC_GROUP_SET_GENERATOR 111 -# define EC_F_EC_GROUP_SET_SEED 286 -# define EC_F_EC_KEY_CHECK_KEY 177 -# define EC_F_EC_KEY_COPY 178 -# define EC_F_EC_KEY_GENERATE_KEY 179 -# define EC_F_EC_KEY_NEW 182 -# define EC_F_EC_KEY_NEW_METHOD 245 -# define EC_F_EC_KEY_OCT2PRIV 255 -# define EC_F_EC_KEY_PRINT 180 -# define EC_F_EC_KEY_PRINT_FP 181 -# define EC_F_EC_KEY_PRIV2BUF 279 -# define EC_F_EC_KEY_PRIV2OCT 256 -# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 -# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 -# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 -# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 -# define EC_F_EC_PKEY_CHECK 273 -# define EC_F_EC_PKEY_PARAM_CHECK 274 -# define EC_F_EC_POINTS_MAKE_AFFINE 136 -# define EC_F_EC_POINTS_MUL 290 -# define EC_F_EC_POINT_ADD 112 -# define EC_F_EC_POINT_BN2POINT 280 -# define EC_F_EC_POINT_CMP 113 -# define EC_F_EC_POINT_COPY 114 -# define EC_F_EC_POINT_DBL 115 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 293 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 -# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 -# define EC_F_EC_POINT_INVERT 210 -# define EC_F_EC_POINT_IS_AT_INFINITY 118 -# define EC_F_EC_POINT_IS_ON_CURVE 119 -# define EC_F_EC_POINT_MAKE_AFFINE 120 -# define EC_F_EC_POINT_NEW 121 -# define EC_F_EC_POINT_OCT2POINT 122 -# define EC_F_EC_POINT_POINT2BUF 281 -# define EC_F_EC_POINT_POINT2OCT 123 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 294 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 295 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 -# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 -# define EC_F_EC_POINT_SET_TO_INFINITY 127 -# define EC_F_EC_PRE_COMP_NEW 196 -# define EC_F_EC_SCALAR_MUL_LADDER 284 -# define EC_F_EC_WNAF_MUL 187 -# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 -# define EC_F_I2D_ECPARAMETERS 190 -# define EC_F_I2D_ECPKPARAMETERS 191 -# define EC_F_I2D_ECPRIVATEKEY 192 -# define EC_F_I2O_ECPUBLICKEY 151 -# define EC_F_NISTP224_PRE_COMP_NEW 227 -# define EC_F_NISTP256_PRE_COMP_NEW 236 -# define EC_F_NISTP521_PRE_COMP_NEW 237 -# define EC_F_O2I_ECPUBLICKEY 152 -# define EC_F_OLD_EC_PRIV_DECODE 222 -# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 -# define EC_F_OSSL_ECDSA_SIGN_SIG 249 -# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 -# define EC_F_PKEY_ECD_CTRL 271 -# define EC_F_PKEY_ECD_DIGESTSIGN 272 -# define EC_F_PKEY_ECD_DIGESTSIGN25519 276 -# define EC_F_PKEY_ECD_DIGESTSIGN448 277 -# define EC_F_PKEY_ECX_DERIVE 269 -# define EC_F_PKEY_EC_CTRL 197 -# define EC_F_PKEY_EC_CTRL_STR 198 -# define EC_F_PKEY_EC_DERIVE 217 -# define EC_F_PKEY_EC_INIT 282 -# define EC_F_PKEY_EC_KDF_DERIVE 283 -# define EC_F_PKEY_EC_KEYGEN 199 -# define EC_F_PKEY_EC_PARAMGEN 219 -# define EC_F_PKEY_EC_SIGN 218 -# define EC_F_VALIDATE_ECX_DERIVE 278 /* * EC reason codes. @@ -212,17 +30,22 @@ int ERR_load_EC_strings(void); # define EC_R_CANNOT_INVERT 165 # define EC_R_COORDINATES_OUT_OF_RANGE 146 # define EC_R_CURVE_DOES_NOT_SUPPORT_ECDH 160 +# define EC_R_CURVE_DOES_NOT_SUPPORT_ECDSA 170 # define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 -# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 # define EC_R_DECODE_ERROR 142 # define EC_R_DISCRIMINANT_IS_ZERO 118 # define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 +# define EC_R_EXPLICIT_PARAMS_NOT_SUPPORTED 127 +# define EC_R_FAILED_MAKING_PUBLIC_KEY 166 # define EC_R_FIELD_TOO_LARGE 143 # define EC_R_GF2M_NOT_SUPPORTED 147 # define EC_R_GROUP2PKPARAMETERS_FAILURE 120 # define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 # define EC_R_INCOMPATIBLE_OBJECTS 101 +# define EC_R_INVALID_A 168 # define EC_R_INVALID_ARGUMENT 112 +# define EC_R_INVALID_B 169 +# define EC_R_INVALID_COFACTOR 171 # define EC_R_INVALID_COMPRESSED_POINT 110 # define EC_R_INVALID_COMPRESSION_BIT 109 # define EC_R_INVALID_CURVE 141 @@ -231,12 +54,17 @@ int ERR_load_EC_strings(void); # define EC_R_INVALID_ENCODING 102 # define EC_R_INVALID_FIELD 103 # define EC_R_INVALID_FORM 104 +# define EC_R_INVALID_GENERATOR 173 # define EC_R_INVALID_GROUP_ORDER 122 # define EC_R_INVALID_KEY 116 +# define EC_R_INVALID_LENGTH 117 +# define EC_R_INVALID_NAMED_GROUP_CONVERSION 174 # define EC_R_INVALID_OUTPUT_LENGTH 161 +# define EC_R_INVALID_P 172 # define EC_R_INVALID_PEER_KEY 133 # define EC_R_INVALID_PENTANOMIAL_BASIS 132 # define EC_R_INVALID_PRIVATE_KEY 123 +# define EC_R_INVALID_SEED 175 # define EC_R_INVALID_TRINOMIAL_BASIS 137 # define EC_R_KDF_PARAMETER_ERROR 148 # define EC_R_KEYS_NOT_SET 140 @@ -255,7 +83,6 @@ int ERR_load_EC_strings(void); # define EC_R_OPERATION_NOT_SUPPORTED 152 # define EC_R_PASSED_NULL_PARAMETER 134 # define EC_R_PEER_KEY_ERROR 149 -# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 # define EC_R_POINT_ARITHMETIC_FAILURE 155 # define EC_R_POINT_AT_INFINITY 106 # define EC_R_POINT_COORDINATES_BLIND_FAILURE 163 @@ -263,6 +90,7 @@ int ERR_load_EC_strings(void); # define EC_R_RANDOM_NUMBER_GENERATION_FAILED 158 # define EC_R_SHARED_INFO_ERROR 150 # define EC_R_SLOT_FULL 108 +# define EC_R_TOO_MANY_RETRIES 176 # define EC_R_UNDEFINED_GENERATOR 113 # define EC_R_UNDEFINED_ORDER 128 # define EC_R_UNKNOWN_COFACTOR 164 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/encoder.h b/deps/openssl/android/x86/usr/local/include/openssl/encoder.h new file mode 100644 index 00000000..c37a6f16 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/encoder.h @@ -0,0 +1,124 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ENCODER_H +# define OPENSSL_ENCODER_H +# pragma once + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_ENCODER *OSSL_ENCODER_fetch(OSSL_LIB_CTX *libctx, const char *name, + const char *properties); +int OSSL_ENCODER_up_ref(OSSL_ENCODER *encoder); +void OSSL_ENCODER_free(OSSL_ENCODER *encoder); + +const OSSL_PROVIDER *OSSL_ENCODER_get0_provider(const OSSL_ENCODER *encoder); +const char *OSSL_ENCODER_get0_properties(const OSSL_ENCODER *encoder); +const char *OSSL_ENCODER_get0_name(const OSSL_ENCODER *kdf); +const char *OSSL_ENCODER_get0_description(const OSSL_ENCODER *kdf); +int OSSL_ENCODER_is_a(const OSSL_ENCODER *encoder, const char *name); + +void OSSL_ENCODER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_ENCODER *encoder, void *arg), + void *arg); +int OSSL_ENCODER_names_do_all(const OSSL_ENCODER *encoder, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *OSSL_ENCODER_gettable_params(OSSL_ENCODER *encoder); +int OSSL_ENCODER_get_params(OSSL_ENCODER *encoder, OSSL_PARAM params[]); + +const OSSL_PARAM *OSSL_ENCODER_settable_ctx_params(OSSL_ENCODER *encoder); +OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new(void); +int OSSL_ENCODER_CTX_set_params(OSSL_ENCODER_CTX *ctx, + const OSSL_PARAM params[]); +void OSSL_ENCODER_CTX_free(OSSL_ENCODER_CTX *ctx); + +/* Utilities that help set specific parameters */ +int OSSL_ENCODER_CTX_set_passphrase(OSSL_ENCODER_CTX *ctx, + const unsigned char *kstr, size_t klen); +int OSSL_ENCODER_CTX_set_pem_password_cb(OSSL_ENCODER_CTX *ctx, + pem_password_cb *cb, void *cbarg); +int OSSL_ENCODER_CTX_set_passphrase_cb(OSSL_ENCODER_CTX *ctx, + OSSL_PASSPHRASE_CALLBACK *cb, + void *cbarg); +int OSSL_ENCODER_CTX_set_passphrase_ui(OSSL_ENCODER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); +int OSSL_ENCODER_CTX_set_cipher(OSSL_ENCODER_CTX *ctx, + const char *cipher_name, + const char *propquery); +int OSSL_ENCODER_CTX_set_selection(OSSL_ENCODER_CTX *ctx, int selection); +int OSSL_ENCODER_CTX_set_output_type(OSSL_ENCODER_CTX *ctx, + const char *output_type); +int OSSL_ENCODER_CTX_set_output_structure(OSSL_ENCODER_CTX *ctx, + const char *output_structure); + +/* Utilities to add encoders */ +int OSSL_ENCODER_CTX_add_encoder(OSSL_ENCODER_CTX *ctx, OSSL_ENCODER *encoder); +int OSSL_ENCODER_CTX_add_extra(OSSL_ENCODER_CTX *ctx, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_ENCODER_CTX_get_num_encoders(OSSL_ENCODER_CTX *ctx); + +typedef struct ossl_encoder_instance_st OSSL_ENCODER_INSTANCE; +OSSL_ENCODER * +OSSL_ENCODER_INSTANCE_get_encoder(OSSL_ENCODER_INSTANCE *encoder_inst); +void * +OSSL_ENCODER_INSTANCE_get_encoder_ctx(OSSL_ENCODER_INSTANCE *encoder_inst); +const char * +OSSL_ENCODER_INSTANCE_get_output_type(OSSL_ENCODER_INSTANCE *encoder_inst); +const char * +OSSL_ENCODER_INSTANCE_get_output_structure(OSSL_ENCODER_INSTANCE *encoder_inst); + +typedef const void *OSSL_ENCODER_CONSTRUCT(OSSL_ENCODER_INSTANCE *encoder_inst, + void *construct_data); +typedef void OSSL_ENCODER_CLEANUP(void *construct_data); + +int OSSL_ENCODER_CTX_set_construct(OSSL_ENCODER_CTX *ctx, + OSSL_ENCODER_CONSTRUCT *construct); +int OSSL_ENCODER_CTX_set_construct_data(OSSL_ENCODER_CTX *ctx, + void *construct_data); +int OSSL_ENCODER_CTX_set_cleanup(OSSL_ENCODER_CTX *ctx, + OSSL_ENCODER_CLEANUP *cleanup); + +/* Utilities to output the object to encode */ +int OSSL_ENCODER_to_bio(OSSL_ENCODER_CTX *ctx, BIO *out); +#ifndef OPENSSL_NO_STDIO +int OSSL_ENCODER_to_fp(OSSL_ENCODER_CTX *ctx, FILE *fp); +#endif +int OSSL_ENCODER_to_data(OSSL_ENCODER_CTX *ctx, unsigned char **pdata, + size_t *pdata_len); + +/* + * Create the OSSL_ENCODER_CTX with an associated type. This will perform + * an implicit OSSL_ENCODER_fetch(), suitable for the object of that type. + * This is more useful than calling OSSL_ENCODER_CTX_new(). + */ +OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new_for_pkey(const EVP_PKEY *pkey, + int selection, + const char *output_type, + const char *output_struct, + const char *propquery); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/encodererr.h b/deps/openssl/android/x86/usr/local/include/openssl/encodererr.h new file mode 100644 index 00000000..5e318b14 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/encodererr.h @@ -0,0 +1,28 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ENCODERERR_H +# define OPENSSL_ENCODERERR_H +# pragma once + +# include +# include +# include + + + +/* + * OSSL_ENCODER reason codes. + */ +# define OSSL_ENCODER_R_ENCODER_NOT_FOUND 101 +# define OSSL_ENCODER_R_INCORRECT_PROPERTY_QUERY 100 +# define OSSL_ENCODER_R_MISSING_GET_PARAMS 102 + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/engine.h b/deps/openssl/android/x86/usr/local/include/openssl/engine.h index d707eaeb..2fbc82c3 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/engine.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/engine.h @@ -2,52 +2,58 @@ * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENGINE_H -# define HEADER_ENGINE_H +#ifndef OPENSSL_ENGINE_H +# define OPENSSL_ENGINE_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ENGINE_H +# endif # include # ifndef OPENSSL_NO_ENGINE -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# include -# include -# include -# include -# include -# include -# include -# endif -# include -# include -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# include +# include +# include +# include +# include +# endif +# include +# include +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif /* * These flags are used to control combinations of algorithm (methods) by * bitwise "OR"ing. */ -# define ENGINE_METHOD_RSA (unsigned int)0x0001 -# define ENGINE_METHOD_DSA (unsigned int)0x0002 -# define ENGINE_METHOD_DH (unsigned int)0x0004 -# define ENGINE_METHOD_RAND (unsigned int)0x0008 -# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 -# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 -# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 -# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 -# define ENGINE_METHOD_EC (unsigned int)0x0800 +# define ENGINE_METHOD_RSA (unsigned int)0x0001 +# define ENGINE_METHOD_DSA (unsigned int)0x0002 +# define ENGINE_METHOD_DH (unsigned int)0x0004 +# define ENGINE_METHOD_RAND (unsigned int)0x0008 +# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 +# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 +# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 +# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 +# define ENGINE_METHOD_EC (unsigned int)0x0800 /* Obvious all-or-nothing cases. */ -# define ENGINE_METHOD_ALL (unsigned int)0xFFFF -# define ENGINE_METHOD_NONE (unsigned int)0x0000 +# define ENGINE_METHOD_ALL (unsigned int)0xFFFF +# define ENGINE_METHOD_NONE (unsigned int)0x0000 /* * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used @@ -55,7 +61,7 @@ extern "C" { * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to * initialise registered ENGINEs if they are not already initialised. */ -# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 +# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 /* ENGINE flags that can be set by ENGINE_set_flags(). */ /* Not used */ @@ -67,7 +73,7 @@ extern "C" { * these control commands on behalf of the ENGINE using their "cmd_defns" * data. */ -# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 +# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 /* * This flag is for ENGINEs who return new duplicate structures when found @@ -79,7 +85,7 @@ extern "C" { * ENGINE_by_id() just increments the existing ENGINE's structural reference * count. */ -# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 +# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 /* * This flag if for an ENGINE that does not want its methods registered as @@ -87,7 +93,7 @@ extern "C" { * usable as default methods. */ -# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 +# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 /* * ENGINEs can support their own command types, and these flags are used in @@ -102,23 +108,23 @@ extern "C" { */ /* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 +# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 /* * accepts string input (cast from 'void*' to 'const char *', 4th parameter * to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 +# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 /* * Indicates that the control command takes *no* input. Ie. the control * command is unparameterised. */ -# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 +# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 /* * Indicates that the control command is internal. This control command won't * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() * function. */ -# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 +# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 /* * NB: These 3 control commands are deprecated and should not be used. @@ -137,21 +143,21 @@ extern "C" { * sense to some engines. In such a case, they do nothing but return the * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. */ -# define ENGINE_CTRL_SET_LOGSTREAM 1 -# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 -# define ENGINE_CTRL_HUP 3/* Close and reinitialise +# define ENGINE_CTRL_SET_LOGSTREAM 1 +# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 +# define ENGINE_CTRL_HUP 3/* Close and reinitialise * any handles/connections * etc. */ -# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ -# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used +# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ +# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used * when calling the password * callback and the user * interface */ -# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, +# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, * given a string that * represents a file name * or so */ -# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given +# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given * section in the already * loaded configuration */ @@ -175,22 +181,22 @@ extern "C" { * worth checking this first if the caller is trying to "discover" the * engine's capabilities and doesn't want errors generated unnecessarily. */ -# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 +# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 /* * Returns a positive command number for the first command supported by the * engine. Returns zero if no ctrl commands are supported. */ -# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 +# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 /* * The 'long' argument specifies a command implemented by the engine, and the * return value is the next command supported, or zero if there are no more. */ -# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 +# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 /* * The 'void*' argument is a command name (cast from 'const char *'), and the * return value is the command that corresponds to it. */ -# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 +# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 /* * The next two allow a command to be converted into its corresponding string * form. In each case, the 'long' argument supplies the command. In the @@ -199,23 +205,23 @@ extern "C" { * string buffer large enough, and it will be populated with the name of the * command (WITH a trailing EOL). */ -# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 -# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 +# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 +# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 /* The next two are similar but give a "short description" of a command. */ -# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 -# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 +# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 +# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 /* * With this command, the return value is the OR'd combination of * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given * engine-specific ctrl command expects. */ -# define ENGINE_CTRL_GET_CMD_FLAGS 18 +# define ENGINE_CTRL_GET_CMD_FLAGS 18 /* * ENGINE implementations should start the numbering of their own control * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). */ -# define ENGINE_CMD_BASE 200 +# define ENGINE_CMD_BASE 200 /* * NB: These 2 nCipher "chil" control commands are deprecated, and their @@ -226,17 +232,17 @@ extern "C" { */ /* Flags specific to the nCipher "chil" engine */ -# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 - /* - * Depending on the value of the (long)i argument, this sets or - * unsets the SimpleForkCheck flag in the CHIL API to enable or - * disable checking and workarounds for applications that fork(). - */ -# define ENGINE_CTRL_CHIL_NO_LOCKING 101 - /* - * This prevents the initialisation function from providing mutex - * callbacks to the nCipher library. - */ +# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 + /* + * Depending on the value of the (long)i argument, this sets or + * unsets the SimpleForkCheck flag in the CHIL API to enable or + * disable checking and workarounds for applications that fork(). + */ +# define ENGINE_CTRL_CHIL_NO_LOCKING 101 + /* + * This prevents the initialisation function from providing mutex + * callbacks to the nCipher library. + */ /* * If an ENGINE supports its own specific control commands and wishes the @@ -308,44 +314,58 @@ typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, */ /* Get the first/last "ENGINE" type available. */ -ENGINE *ENGINE_get_first(void); -ENGINE *ENGINE_get_last(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_first(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_last(void); +# endif /* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ -ENGINE *ENGINE_get_next(ENGINE *e); -ENGINE *ENGINE_get_prev(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_next(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_prev(ENGINE *e); +# endif /* Add another "ENGINE" type into the array. */ -int ENGINE_add(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_add(ENGINE *e); +# endif /* Remove an existing "ENGINE" type from the array. */ -int ENGINE_remove(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_remove(ENGINE *e); +# endif /* Retrieve an engine from the list by its unique "id" value. */ -ENGINE *ENGINE_by_id(const char *id); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_by_id(const char *id); +# endif -#if OPENSSL_API_COMPAT < 0x10100000L -# define ENGINE_load_openssl() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) -# define ENGINE_load_dynamic() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) -# ifndef OPENSSL_NO_STATIC_ENGINE -# define ENGINE_load_padlock() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) -# define ENGINE_load_capi() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) -# define ENGINE_load_afalg() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) -# endif -# define ENGINE_load_cryptodev() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) -# define ENGINE_load_rdrand() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) -#endif -void ENGINE_load_builtin_engines(void); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define ENGINE_load_openssl() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) +# define ENGINE_load_dynamic() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) +# ifndef OPENSSL_NO_STATIC_ENGINE +# define ENGINE_load_padlock() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) +# define ENGINE_load_capi() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) +# define ENGINE_load_afalg() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) +# endif +# define ENGINE_load_cryptodev() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) +# define ENGINE_load_rdrand() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ENGINE_load_builtin_engines(void); +# endif /* * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation * "registry" handling. */ -unsigned int ENGINE_get_table_flags(void); -void ENGINE_set_table_flags(unsigned int flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned int ENGINE_get_table_flags(void); +OSSL_DEPRECATEDIN_3_0 void ENGINE_set_table_flags(unsigned int flags); +# endif /*- Manage registration of ENGINEs per "table". For each type, there are 3 * functions; @@ -354,42 +374,35 @@ void ENGINE_set_table_flags(unsigned int flags); * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list * Cleanup is automatically registered from each table when required. */ - -int ENGINE_register_RSA(ENGINE *e); -void ENGINE_unregister_RSA(ENGINE *e); -void ENGINE_register_all_RSA(void); - -int ENGINE_register_DSA(ENGINE *e); -void ENGINE_unregister_DSA(ENGINE *e); -void ENGINE_register_all_DSA(void); - -int ENGINE_register_EC(ENGINE *e); -void ENGINE_unregister_EC(ENGINE *e); -void ENGINE_register_all_EC(void); - -int ENGINE_register_DH(ENGINE *e); -void ENGINE_unregister_DH(ENGINE *e); -void ENGINE_register_all_DH(void); - -int ENGINE_register_RAND(ENGINE *e); -void ENGINE_unregister_RAND(ENGINE *e); -void ENGINE_register_all_RAND(void); - -int ENGINE_register_ciphers(ENGINE *e); -void ENGINE_unregister_ciphers(ENGINE *e); -void ENGINE_register_all_ciphers(void); - -int ENGINE_register_digests(ENGINE *e); -void ENGINE_unregister_digests(ENGINE *e); -void ENGINE_register_all_digests(void); - -int ENGINE_register_pkey_meths(ENGINE *e); -void ENGINE_unregister_pkey_meths(ENGINE *e); -void ENGINE_register_all_pkey_meths(void); - -int ENGINE_register_pkey_asn1_meths(ENGINE *e); -void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); -void ENGINE_register_all_pkey_asn1_meths(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_RSA(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_DSA(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_EC(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_DH(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_RAND(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_ciphers(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_digests(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_pkey_meths(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_pkey_asn1_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_pkey_asn1_meths(void); +# endif /* * These functions register all support from the above categories. Note, use @@ -397,8 +410,10 @@ void ENGINE_register_all_pkey_asn1_meths(void); * may not need. If you only need a subset of functionality, consider using * more selective initialisation. */ -int ENGINE_register_complete(ENGINE *e); -int ENGINE_register_all_complete(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_complete(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_all_complete(void); +# endif /* * Send parameterised control commands to the engine. The possibilities to @@ -410,7 +425,10 @@ int ENGINE_register_all_complete(void); * commands that require an operational ENGINE, and only use functional * references in such situations. */ -int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, + void (*f) (void)); +# endif /* * This function tests if an ENGINE-specific command is usable as a @@ -418,7 +436,9 @@ int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). */ -int ENGINE_cmd_is_executable(ENGINE *e, int cmd); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_cmd_is_executable(ENGINE *e, int cmd); +# endif /* * This function works like ENGINE_ctrl() with the exception of taking a @@ -426,8 +446,11 @@ int ENGINE_cmd_is_executable(ENGINE *e, int cmd); * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation * on how to use the cmd_name and cmd_optional. */ -int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, - long i, void *p, void (*f) (void), int cmd_optional); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, + long i, void *p, void (*f) (void), + int cmd_optional); +# endif /* * This function passes a command-name and argument to an ENGINE. The @@ -451,8 +474,11 @@ int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, * applications can work consistently with the same configuration for the * same ENGINE-enabled devices, across applications. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, int cmd_optional); +# endif /* * These functions are useful for manufacturing new ENGINE structures. They @@ -462,45 +488,59 @@ int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, * These are also here so that the ENGINE structure doesn't have to be * exposed and break binary compatibility! */ -ENGINE *ENGINE_new(void); -int ENGINE_free(ENGINE *e); -int ENGINE_up_ref(ENGINE *e); -int ENGINE_set_id(ENGINE *e, const char *id); -int ENGINE_set_name(ENGINE *e, const char *name); -int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); -int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); -int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); -int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); -int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); -int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_new(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_free(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_up_ref(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_id(ENGINE *e, const char *id); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_name(ENGINE *e, const char *name); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_destroy_function(ENGINE *e,ENGINE_GEN_INT_FUNC_PTR destroy_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); -int ENGINE_set_load_privkey_function(ENGINE *e, - ENGINE_LOAD_KEY_PTR loadpriv_f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_load_privkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpriv_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, - ENGINE_SSL_CLIENT_CERT_PTR - loadssl_f); + ENGINE_SSL_CLIENT_CERT_PTR loadssl_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); -int ENGINE_set_flags(ENGINE *e, int flags); -int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_flags(ENGINE *e, int flags); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_cmd_defns(ENGINE *e, + const ENGINE_CMD_DEFN *defns); +# endif /* These functions allow control over any per-structure ENGINE data. */ -#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ +# define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) -int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); -void *ENGINE_get_ex_data(const ENGINE *e, int idx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *ENGINE_get_ex_data(const ENGINE *e, int idx); +# endif -#if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * This function previously cleaned up anything that needs it. Auto-deinit will * now take care of it so it is no longer required to call this function. */ -# define ENGINE_cleanup() while(0) continue -#endif +# define ENGINE_cleanup() while(0) continue +# endif /* * These return values from within the ENGINE structure. These can be useful @@ -508,37 +548,55 @@ void *ENGINE_get_ex_data(const ENGINE *e, int idx); * which you obtained. Using the result for functional purposes if you only * obtained a structural reference may be problematic! */ -const char *ENGINE_get_id(const ENGINE *e); -const char *ENGINE_get_name(const ENGINE *e); -const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); -const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); -const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); -const DH_METHOD *ENGINE_get_DH(const ENGINE *e); -const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ENGINE_get_id(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const char *ENGINE_get_name(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); -ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE - *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, const char *str, int len); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, - const char *str, - int len); + const char *str, int len); +OSSL_DEPRECATEDIN_3_0 const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); -int ENGINE_get_flags(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_get_flags(const ENGINE *e); +# endif /* * FUNCTIONAL functions. These functions deal with ENGINE structures that @@ -554,31 +612,40 @@ int ENGINE_get_flags(const ENGINE *e); */ /* - * Initialise a engine type for use (or up its reference count if it's + * Initialise an engine type for use (or up its reference count if it's * already in use). This will fail if the engine is not currently operational * and cannot initialise. */ -int ENGINE_init(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_init(ENGINE *e); +# endif /* - * Free a functional reference to a engine type. This does not require a + * Free a functional reference to an engine type. This does not require a * corresponding call to ENGINE_free as it also releases a structural * reference. */ -int ENGINE_finish(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_finish(ENGINE *e); +# endif /* * The following functions handle keys that are stored in some secondary * location, handled by the engine. The storage may be on a card or * whatever. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data); +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data); -int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, - STACK_OF(X509_NAME) *ca_dn, X509 **pcert, - EVP_PKEY **ppkey, STACK_OF(X509) **pother, +OSSL_DEPRECATEDIN_3_0 +int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, STACK_OF(X509_NAME) *ca_dn, + X509 **pcert, EVP_PKEY **ppkey, + STACK_OF(X509) **pother, UI_METHOD *ui_method, void *callback_data); +# endif /* * This returns a pointer for the current ENGINE structure that is (by @@ -586,20 +653,26 @@ int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, * incremented reference, so it should be free'd (ENGINE_finish) before it is * discarded. */ -ENGINE *ENGINE_get_default_RSA(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RSA(void); +# endif /* Same for the other "methods" */ -ENGINE *ENGINE_get_default_DSA(void); -ENGINE *ENGINE_get_default_EC(void); -ENGINE *ENGINE_get_default_DH(void); -ENGINE *ENGINE_get_default_RAND(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_DSA(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_EC(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_DH(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RAND(void); +# endif /* * These functions can be used to get a functional reference to perform * ciphering or digesting corresponding to "nid". */ -ENGINE *ENGINE_get_cipher_engine(int nid); -ENGINE *ENGINE_get_digest_engine(int nid); -ENGINE *ENGINE_get_pkey_meth_engine(int nid); -ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_cipher_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_digest_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_pkey_meth_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); +# endif /* * This sets a new default ENGINE structure for performing RSA operations. If @@ -607,17 +680,22 @@ ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); * its reference count up'd so the caller should still free their own * reference 'e'. */ -int ENGINE_set_default_RSA(ENGINE *e); -int ENGINE_set_default_string(ENGINE *e, const char *def_list); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_string(ENGINE *e, + const char *def_list); +# endif /* Same for the other "methods" */ -int ENGINE_set_default_DSA(ENGINE *e); -int ENGINE_set_default_EC(ENGINE *e); -int ENGINE_set_default_DH(ENGINE *e); -int ENGINE_set_default_RAND(ENGINE *e); -int ENGINE_set_default_ciphers(ENGINE *e); -int ENGINE_set_default_digests(ENGINE *e); -int ENGINE_set_default_pkey_meths(ENGINE *e); -int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); +# endif /* * The combination "set" - the flags are bitwise "OR"d from the @@ -626,9 +704,10 @@ int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); * application requires only specific functionality, consider using more * selective functions. */ -int ENGINE_set_default(ENGINE *e, unsigned int flags); - -void ENGINE_add_conf_module(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default(ENGINE *e, unsigned int flags); +OSSL_DEPRECATEDIN_3_0 void ENGINE_add_conf_module(void); +# endif /* Deprecated functions ... */ /* int ENGINE_clear_defaults(void); */ @@ -638,12 +717,12 @@ void ENGINE_add_conf_module(void); /**************************/ /* Binary/behaviour compatibility levels */ -# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 +# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 /* * Binary versions older than this are too old for us (whether we're a loader * or a loadee) */ -# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 +# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 /* * When compiling an ENGINE entirely as an external shared library, loadable @@ -687,7 +766,7 @@ typedef struct st_dynamic_fns { * IMPLEMENT_DYNAMIC_CHECK_FN(). */ typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); -# define IMPLEMENT_DYNAMIC_CHECK_FN() \ +# define IMPLEMENT_DYNAMIC_CHECK_FN() \ OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ if (v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ @@ -713,7 +792,7 @@ typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); */ typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, const dynamic_fns *fns); -# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ +# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ OPENSSL_EXPORT \ int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ OPENSSL_EXPORT \ @@ -740,13 +819,15 @@ typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, */ void *ENGINE_get_static_state(void); -# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) -DEPRECATEDIN_1_1_0(void ENGINE_setup_bsd_cryptodev(void)) -# endif +# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ENGINE_setup_bsd_cryptodev(void); +# endif +# endif # ifdef __cplusplus } # endif -# endif -#endif +# endif /* OPENSSL_NO_ENGINE */ +#endif /* OPENSSL_ENGINE_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/engineerr.h b/deps/openssl/android/x86/usr/local/include/openssl/engineerr.h index 05e84bd2..d439b682 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/engineerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/engineerr.h @@ -1,72 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENGINEERR_H -# define HEADER_ENGINEERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_ENGINEERR_H +# define OPENSSL_ENGINEERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_ENGINE -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ENGINE_strings(void); - -/* - * ENGINE function codes. - */ -# define ENGINE_F_DIGEST_UPDATE 198 -# define ENGINE_F_DYNAMIC_CTRL 180 -# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 -# define ENGINE_F_DYNAMIC_LOAD 182 -# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 -# define ENGINE_F_ENGINE_ADD 105 -# define ENGINE_F_ENGINE_BY_ID 106 -# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 -# define ENGINE_F_ENGINE_CTRL 142 -# define ENGINE_F_ENGINE_CTRL_CMD 178 -# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 -# define ENGINE_F_ENGINE_FINISH 107 -# define ENGINE_F_ENGINE_GET_CIPHER 185 -# define ENGINE_F_ENGINE_GET_DIGEST 186 -# define ENGINE_F_ENGINE_GET_FIRST 195 -# define ENGINE_F_ENGINE_GET_LAST 196 -# define ENGINE_F_ENGINE_GET_NEXT 115 -# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 -# define ENGINE_F_ENGINE_GET_PKEY_METH 192 -# define ENGINE_F_ENGINE_GET_PREV 116 -# define ENGINE_F_ENGINE_INIT 119 -# define ENGINE_F_ENGINE_LIST_ADD 120 -# define ENGINE_F_ENGINE_LIST_REMOVE 121 -# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 -# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 -# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 -# define ENGINE_F_ENGINE_NEW 122 -# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 197 -# define ENGINE_F_ENGINE_REMOVE 123 -# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 -# define ENGINE_F_ENGINE_SET_ID 129 -# define ENGINE_F_ENGINE_SET_NAME 130 -# define ENGINE_F_ENGINE_TABLE_REGISTER 184 -# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 -# define ENGINE_F_ENGINE_UP_REF 190 -# define ENGINE_F_INT_CLEANUP_ITEM 199 -# define ENGINE_F_INT_CTRL_HELPER 172 -# define ENGINE_F_INT_ENGINE_CONFIGURE 188 -# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 -# define ENGINE_F_OSSL_HMAC_INIT 200 /* * ENGINE reason codes. diff --git a/deps/openssl/android/x86/usr/local/include/openssl/err.h b/deps/openssl/android/x86/usr/local/include/openssl/err.h index b49f8812..2abf2483 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/err.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/err.h @@ -1,14 +1,22 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ERR_H -# define HEADER_ERR_H + + +#ifndef OPENSSL_ERR_H +# define OPENSSL_ERR_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ERR_H +# endif # include @@ -17,38 +25,47 @@ # include # endif -# include +# include # include # include +# include #ifdef __cplusplus extern "C" { #endif -# ifndef OPENSSL_NO_ERR -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) -# else -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_FILENAMES +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,fn,ln) +# else +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,NULL,0) +# endif # endif +# include # include # define ERR_TXT_MALLOCED 0x01 # define ERR_TXT_STRING 0x02 -# define ERR_FLAG_MARK 0x01 -# define ERR_FLAG_CLEAR 0x02 +# if !defined(OPENSSL_NO_DEPRECATED_3_0) || defined(OSSL_FORCE_ERR_STATE) +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 -# define ERR_NUM_ERRORS 16 -typedef struct err_state_st { +# define ERR_NUM_ERRORS 16 +struct err_state_st { int err_flags[ERR_NUM_ERRORS]; + int err_marks[ERR_NUM_ERRORS]; unsigned long err_buffer[ERR_NUM_ERRORS]; char *err_data[ERR_NUM_ERRORS]; + size_t err_data_size[ERR_NUM_ERRORS]; int err_data_flags[ERR_NUM_ERRORS]; - const char *err_file[ERR_NUM_ERRORS]; + char *err_file[ERR_NUM_ERRORS]; int err_line[ERR_NUM_ERRORS]; + char *err_func[ERR_NUM_ERRORS]; int top, bottom; -} ERR_STATE; +}; +# endif /* library */ # define ERR_LIB_NONE 1 @@ -95,171 +112,384 @@ typedef struct err_state_st { # define ERR_LIB_ASYNC 51 # define ERR_LIB_KDF 52 # define ERR_LIB_SM2 53 +# define ERR_LIB_ESS 54 +# define ERR_LIB_PROP 55 +# define ERR_LIB_CRMF 56 +# define ERR_LIB_PROV 57 +# define ERR_LIB_CMP 58 +# define ERR_LIB_OSSL_ENCODER 59 +# define ERR_LIB_OSSL_DECODER 60 +# define ERR_LIB_HTTP 61 # define ERR_LIB_USER 128 -# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OSSL_STOREerr(f,r) ERR_PUT_error(ERR_LIB_OSSL_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SM2err(f,r) ERR_PUT_error(ERR_LIB_SM2,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define ASN1err(f, r) ERR_raise_data(ERR_LIB_ASN1, (r), NULL) +# define ASYNCerr(f, r) ERR_raise_data(ERR_LIB_ASYNC, (r), NULL) +# define BIOerr(f, r) ERR_raise_data(ERR_LIB_BIO, (r), NULL) +# define BNerr(f, r) ERR_raise_data(ERR_LIB_BN, (r), NULL) +# define BUFerr(f, r) ERR_raise_data(ERR_LIB_BUF, (r), NULL) +# define CMPerr(f, r) ERR_raise_data(ERR_LIB_CMP, (r), NULL) +# define CMSerr(f, r) ERR_raise_data(ERR_LIB_CMS, (r), NULL) +# define COMPerr(f, r) ERR_raise_data(ERR_LIB_COMP, (r), NULL) +# define CONFerr(f, r) ERR_raise_data(ERR_LIB_CONF, (r), NULL) +# define CRMFerr(f, r) ERR_raise_data(ERR_LIB_CRMF, (r), NULL) +# define CRYPTOerr(f, r) ERR_raise_data(ERR_LIB_CRYPTO, (r), NULL) +# define CTerr(f, r) ERR_raise_data(ERR_LIB_CT, (r), NULL) +# define DHerr(f, r) ERR_raise_data(ERR_LIB_DH, (r), NULL) +# define DSAerr(f, r) ERR_raise_data(ERR_LIB_DSA, (r), NULL) +# define DSOerr(f, r) ERR_raise_data(ERR_LIB_DSO, (r), NULL) +# define ECDHerr(f, r) ERR_raise_data(ERR_LIB_ECDH, (r), NULL) +# define ECDSAerr(f, r) ERR_raise_data(ERR_LIB_ECDSA, (r), NULL) +# define ECerr(f, r) ERR_raise_data(ERR_LIB_EC, (r), NULL) +# define ENGINEerr(f, r) ERR_raise_data(ERR_LIB_ENGINE, (r), NULL) +# define ESSerr(f, r) ERR_raise_data(ERR_LIB_ESS, (r), NULL) +# define EVPerr(f, r) ERR_raise_data(ERR_LIB_EVP, (r), NULL) +# define FIPSerr(f, r) ERR_raise_data(ERR_LIB_FIPS, (r), NULL) +# define HMACerr(f, r) ERR_raise_data(ERR_LIB_HMAC, (r), NULL) +# define HTTPerr(f, r) ERR_raise_data(ERR_LIB_HTTP, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define OBJerr(f, r) ERR_raise_data(ERR_LIB_OBJ, (r), NULL) +# define OCSPerr(f, r) ERR_raise_data(ERR_LIB_OCSP, (r), NULL) +# define OSSL_STOREerr(f, r) ERR_raise_data(ERR_LIB_OSSL_STORE, (r), NULL) +# define PEMerr(f, r) ERR_raise_data(ERR_LIB_PEM, (r), NULL) +# define PKCS12err(f, r) ERR_raise_data(ERR_LIB_PKCS12, (r), NULL) +# define PKCS7err(f, r) ERR_raise_data(ERR_LIB_PKCS7, (r), NULL) +# define PROPerr(f, r) ERR_raise_data(ERR_LIB_PROP, (r), NULL) +# define PROVerr(f, r) ERR_raise_data(ERR_LIB_PROV, (r), NULL) +# define RANDerr(f, r) ERR_raise_data(ERR_LIB_RAND, (r), NULL) +# define RSAerr(f, r) ERR_raise_data(ERR_LIB_RSA, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define SM2err(f, r) ERR_raise_data(ERR_LIB_SM2, (r), NULL) +# define SSLerr(f, r) ERR_raise_data(ERR_LIB_SSL, (r), NULL) +# define SYSerr(f, r) ERR_raise_data(ERR_LIB_SYS, (r), NULL) +# define TSerr(f, r) ERR_raise_data(ERR_LIB_TS, (r), NULL) +# define UIerr(f, r) ERR_raise_data(ERR_LIB_UI, (r), NULL) +# define X509V3err(f, r) ERR_raise_data(ERR_LIB_X509V3, (r), NULL) +# define X509err(f, r) ERR_raise_data(ERR_LIB_X509, (r), NULL) +# endif -# define ERR_PACK(l,f,r) ( \ - (((unsigned int)(l) & 0x0FF) << 24L) | \ - (((unsigned int)(f) & 0xFFF) << 12L) | \ - (((unsigned int)(r) & 0xFFF) ) ) -# define ERR_GET_LIB(l) (int)(((l) >> 24L) & 0x0FFL) -# define ERR_GET_FUNC(l) (int)(((l) >> 12L) & 0xFFFL) -# define ERR_GET_REASON(l) (int)( (l) & 0xFFFL) -# define ERR_FATAL_ERROR(l) (int)( (l) & ERR_R_FATAL) +/*- + * The error code packs differently depending on if it records a system + * error or an OpenSSL error. + * + * A system error packs like this (we follow POSIX and only allow positive + * numbers that fit in an |int|): + * + * +-+-------------------------------------------------------------+ + * |1| system error number | + * +-+-------------------------------------------------------------+ + * + * An OpenSSL error packs like this: + * + * <---------------------------- 32 bits --------------------------> + * <--- 8 bits ---><------------------ 23 bits -----------------> + * +-+---------------+---------------------------------------------+ + * |0| library | reason | + * +-+---------------+---------------------------------------------+ + * + * A few of the reason bits are reserved as flags with special meaning: + * + * <5 bits-<>--------- 19 bits -----------------> + * +-------+-+-----------------------------------+ + * | rflags| | reason | + * +-------+-+-----------------------------------+ + * ^ + * | + * ERR_RFLAG_FATAL = ERR_R_FATAL + * + * The reason flags are part of the overall reason code for practical + * reasons, as they provide an easy way to place different types of + * reason codes in different numeric ranges. + * + * The currently known reason flags are: + * + * ERR_RFLAG_FATAL Flags that the reason code is considered fatal. + * For backward compatibility reasons, this flag + * is also the code for ERR_R_FATAL (that reason + * code served the dual purpose of flag and reason + * code in one in pre-3.0 OpenSSL). + * ERR_RFLAG_COMMON Flags that the reason code is common to all + * libraries. All ERR_R_ macros must use this flag, + * and no other _R_ macro is allowed to use it. + */ -/* OS functions */ -# define SYS_F_FOPEN 1 -# define SYS_F_CONNECT 2 -# define SYS_F_GETSERVBYNAME 3 -# define SYS_F_SOCKET 4 -# define SYS_F_IOCTLSOCKET 5 -# define SYS_F_BIND 6 -# define SYS_F_LISTEN 7 -# define SYS_F_ACCEPT 8 -# define SYS_F_WSASTARTUP 9/* Winsock stuff */ -# define SYS_F_OPENDIR 10 -# define SYS_F_FREAD 11 -# define SYS_F_GETADDRINFO 12 -# define SYS_F_GETNAMEINFO 13 -# define SYS_F_SETSOCKOPT 14 -# define SYS_F_GETSOCKOPT 15 -# define SYS_F_GETSOCKNAME 16 -# define SYS_F_GETHOSTBYNAME 17 -# define SYS_F_FFLUSH 18 -# define SYS_F_OPEN 19 -# define SYS_F_CLOSE 20 -# define SYS_F_IOCTL 21 -# define SYS_F_STAT 22 -# define SYS_F_FCNTL 23 -# define SYS_F_FSTAT 24 - -/* reasons */ -# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ -# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ -# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ -# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ -# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ -# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ -# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ -# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ -# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ -# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ -# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ -# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ -# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ -# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ -# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ -# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ -# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ -# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ -# define ERR_R_OSSL_STORE_LIB ERR_LIB_OSSL_STORE/* 44 */ - -# define ERR_R_NESTED_ASN1_ERROR 58 -# define ERR_R_MISSING_ASN1_EOS 63 - -/* fatal error */ -# define ERR_R_FATAL 64 -# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) -# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) -# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) -# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) -# define ERR_R_DISABLED (5|ERR_R_FATAL) -# define ERR_R_INIT_FAIL (6|ERR_R_FATAL) -# define ERR_R_PASSED_INVALID_ARGUMENT (7) -# define ERR_R_OPERATION_FAIL (8|ERR_R_FATAL) +/* Macros to help decode recorded system errors */ +# define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1) +# define ERR_SYSTEM_MASK ((unsigned int)INT_MAX) /* - * 99 is the maximum possible ERR_R_... code, higher values are reserved for - * the individual libraries + * Macros to help decode recorded OpenSSL errors + * As expressed above, RFLAGS and REASON overlap by one bit to allow + * ERR_R_FATAL to use ERR_RFLAG_FATAL as its reason code. */ +# define ERR_LIB_OFFSET 23L +# define ERR_LIB_MASK 0xFF +# define ERR_RFLAGS_OFFSET 18L +# define ERR_RFLAGS_MASK 0x1F +# define ERR_REASON_MASK 0X7FFFFF + +/* + * Reason flags are defined pre-shifted to easily combine with the reason + * number. + */ +# define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET) +# define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET) + +# define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0) + +static ossl_unused ossl_inline int ERR_GET_LIB(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return ERR_LIB_SYS; + return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK; +} + +static ossl_unused ossl_inline int ERR_GET_RFLAGS(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return 0; + return errcode & (ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET); +} + +static ossl_unused ossl_inline int ERR_GET_REASON(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return errcode & ERR_SYSTEM_MASK; + return errcode & ERR_REASON_MASK; +} + +static ossl_unused ossl_inline int ERR_FATAL_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_FATAL) != 0; +} + +static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_COMMON) != 0; +} + +/* + * ERR_PACK is a helper macro to properly pack OpenSSL error codes and may + * only be used for that purpose. System errors are packed internally. + * ERR_PACK takes reason flags and reason code combined in |reason|. + * ERR_PACK ignores |func|, that parameter is just legacy from pre-3.0 OpenSSL. + */ +# define ERR_PACK(lib,func,reason) \ + ( (((unsigned long)(lib) & ERR_LIB_MASK ) << ERR_LIB_OFFSET) | \ + (((unsigned long)(reason) & ERR_REASON_MASK)) ) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SYS_F_FOPEN 0 +# define SYS_F_CONNECT 0 +# define SYS_F_GETSERVBYNAME 0 +# define SYS_F_SOCKET 0 +# define SYS_F_IOCTLSOCKET 0 +# define SYS_F_BIND 0 +# define SYS_F_LISTEN 0 +# define SYS_F_ACCEPT 0 +# define SYS_F_WSASTARTUP 0 +# define SYS_F_OPENDIR 0 +# define SYS_F_FREAD 0 +# define SYS_F_GETADDRINFO 0 +# define SYS_F_GETNAMEINFO 0 +# define SYS_F_SETSOCKOPT 0 +# define SYS_F_GETSOCKOPT 0 +# define SYS_F_GETSOCKNAME 0 +# define SYS_F_GETHOSTBYNAME 0 +# define SYS_F_FFLUSH 0 +# define SYS_F_OPEN 0 +# define SYS_F_CLOSE 0 +# define SYS_F_IOCTL 0 +# define SYS_F_STAT 0 +# define SYS_F_FCNTL 0 +# define SYS_F_FSTAT 0 +# define SYS_F_SENDFILE 0 +# endif + +/* + * All ERR_R_ codes must be combined with ERR_RFLAG_COMMON. + */ + +/* "we came from here" global reason codes, range 1..255 */ +# define ERR_R_SYS_LIB (ERR_LIB_SYS/* 2 */ | ERR_RFLAG_COMMON) +# define ERR_R_BN_LIB (ERR_LIB_BN/* 3 */ | ERR_RFLAG_COMMON) +# define ERR_R_RSA_LIB (ERR_LIB_RSA/* 4 */ | ERR_RFLAG_COMMON) +# define ERR_R_DH_LIB (ERR_LIB_DH/* 5 */ | ERR_RFLAG_COMMON) +# define ERR_R_EVP_LIB (ERR_LIB_EVP/* 6 */ | ERR_RFLAG_COMMON) +# define ERR_R_BUF_LIB (ERR_LIB_BUF/* 7 */ | ERR_RFLAG_COMMON) +# define ERR_R_OBJ_LIB (ERR_LIB_OBJ/* 8 */ | ERR_RFLAG_COMMON) +# define ERR_R_PEM_LIB (ERR_LIB_PEM/* 9 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSA_LIB (ERR_LIB_DSA/* 10 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509_LIB (ERR_LIB_X509/* 11 */ | ERR_RFLAG_COMMON) +# define ERR_R_ASN1_LIB (ERR_LIB_ASN1/* 13 */ | ERR_RFLAG_COMMON) +# define ERR_R_CONF_LIB (ERR_LIB_CONF/* 14 */ | ERR_RFLAG_COMMON) +# define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO/* 15 */ | ERR_RFLAG_COMMON) +# define ERR_R_EC_LIB (ERR_LIB_EC/* 16 */ | ERR_RFLAG_COMMON) +# define ERR_R_SSL_LIB (ERR_LIB_SSL/* 20 */ | ERR_RFLAG_COMMON) +# define ERR_R_BIO_LIB (ERR_LIB_BIO/* 32 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS7_LIB (ERR_LIB_PKCS7/* 33 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509V3_LIB (ERR_LIB_X509V3/* 34 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS12_LIB (ERR_LIB_PKCS12/* 35 */ | ERR_RFLAG_COMMON) +# define ERR_R_RAND_LIB (ERR_LIB_RAND/* 36 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSO_LIB (ERR_LIB_DSO/* 37 */ | ERR_RFLAG_COMMON) +# define ERR_R_ENGINE_LIB (ERR_LIB_ENGINE/* 38 */ | ERR_RFLAG_COMMON) +# define ERR_R_UI_LIB (ERR_LIB_UI/* 40 */ | ERR_RFLAG_COMMON) +# define ERR_R_ECDSA_LIB (ERR_LIB_ECDSA/* 42 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_STORE_LIB (ERR_LIB_OSSL_STORE/* 44 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMS_LIB (ERR_LIB_CMS/* 46 */ | ERR_RFLAG_COMMON) +# define ERR_R_TS_LIB (ERR_LIB_TS/* 47 */ | ERR_RFLAG_COMMON) +# define ERR_R_CT_LIB (ERR_LIB_CT/* 50 */ | ERR_RFLAG_COMMON) +# define ERR_R_PROV_LIB (ERR_LIB_PROV/* 57 */ | ERR_RFLAG_COMMON) +# define ERR_R_ESS_LIB (ERR_LIB_ESS/* 54 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMP_LIB (ERR_LIB_CMP/* 58 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_ENCODER_LIB (ERR_LIB_OSSL_ENCODER/* 59 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_DECODER_LIB (ERR_LIB_OSSL_DECODER/* 60 */ | ERR_RFLAG_COMMON) + +/* Other common error codes, range 256..2^ERR_RFLAGS_OFFSET-1 */ +# define ERR_R_FATAL (ERR_RFLAG_FATAL|ERR_RFLAG_COMMON) +# define ERR_R_MALLOC_FAILURE (256|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (257|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (258|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (259|ERR_R_FATAL) +# define ERR_R_DISABLED (260|ERR_R_FATAL) +# define ERR_R_INIT_FAIL (261|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (262|ERR_RFLAG_COMMON) +# define ERR_R_OPERATION_FAIL (263|ERR_R_FATAL) +# define ERR_R_INVALID_PROVIDER_FUNCTIONS (264|ERR_R_FATAL) +# define ERR_R_INTERRUPTED_OR_CANCELLED (265|ERR_RFLAG_COMMON) +# define ERR_R_NESTED_ASN1_ERROR (266|ERR_RFLAG_COMMON) +# define ERR_R_MISSING_ASN1_EOS (267|ERR_RFLAG_COMMON) +# define ERR_R_UNSUPPORTED (268|ERR_RFLAG_COMMON) +# define ERR_R_FETCH_FAILED (269|ERR_RFLAG_COMMON) +# define ERR_R_INVALID_PROPERTY_DEFINITION (270|ERR_RFLAG_COMMON) +# define ERR_R_UNABLE_TO_GET_READ_LOCK (271|ERR_R_FATAL) +# define ERR_R_UNABLE_TO_GET_WRITE_LOCK (272|ERR_R_FATAL) typedef struct ERR_string_data_st { unsigned long error; const char *string; } ERR_STRING_DATA; -DEFINE_LHASH_OF(ERR_STRING_DATA); +DEFINE_LHASH_OF_INTERNAL(ERR_STRING_DATA); +#define lh_ERR_STRING_DATA_new(hfn, cmp) ((LHASH_OF(ERR_STRING_DATA) *)OPENSSL_LH_new(ossl_check_ERR_STRING_DATA_lh_hashfunc_type(hfn), ossl_check_ERR_STRING_DATA_lh_compfunc_type(cmp))) +#define lh_ERR_STRING_DATA_free(lh) OPENSSL_LH_free(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_flush(lh) OPENSSL_LH_flush(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_insert(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_insert(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_delete(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_delete(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_retrieve(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_retrieve(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_error(lh) OPENSSL_LH_error(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_num_items(lh) OPENSSL_LH_num_items(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh), dl) +#define lh_ERR_STRING_DATA_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_doallfunc_type(dfn)) + + +/* 12 lines and some on an 80 column terminal */ +#define ERR_MAX_DATA_SIZE 1024 + +/* Building blocks */ +void ERR_new(void); +void ERR_set_debug(const char *file, int line, const char *func); +void ERR_set_error(int lib, int reason, const char *fmt, ...); +void ERR_vset_error(int lib, int reason, const char *fmt, va_list args); + +/* Main error raising functions */ +# define ERR_raise(lib, reason) ERR_raise_data((lib),(reason),NULL) +# define ERR_raise_data \ + (ERR_new(), \ + ERR_set_debug(OPENSSL_FILE,OPENSSL_LINE,OPENSSL_FUNC), \ + ERR_set_error) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* Backward compatibility */ +# define ERR_put_error(lib, func, reason, file, line) \ + (ERR_new(), \ + ERR_set_debug((file), (line), OPENSSL_FUNC), \ + ERR_set_error((lib), (reason), NULL)) +# endif -void ERR_put_error(int lib, int func, int reason, const char *file, int line); void ERR_set_error_data(char *data, int flags); unsigned long ERR_get_error(void); +unsigned long ERR_get_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_get_error_line(const char **file, int *line); +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_get_error_line_data(const char **file, int *line, const char **data, int *flags); +#endif unsigned long ERR_peek_error(void); unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_func(const char **func); +unsigned long ERR_peek_error_data(const char **data, int *flags); +unsigned long ERR_peek_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_peek_error_line_data(const char **file, int *line, const char **data, int *flags); +# endif unsigned long ERR_peek_last_error(void); unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_func(const char **func); +unsigned long ERR_peek_last_error_data(const char **data, int *flags); +unsigned long ERR_peek_last_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_peek_last_error_line_data(const char **file, int *line, const char **data, int *flags); +# endif + void ERR_clear_error(void); + char *ERR_error_string(unsigned long e, char *buf); void ERR_error_string_n(unsigned long e, char *buf, size_t len); const char *ERR_lib_error_string(unsigned long e); -const char *ERR_func_error_string(unsigned long e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ERR_func_error_string(unsigned long e); +# endif const char *ERR_reason_error_string(unsigned long e); + void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), void *u); # ifndef OPENSSL_NO_STDIO void ERR_print_errors_fp(FILE *fp); # endif void ERR_print_errors(BIO *bp); + void ERR_add_error_data(int num, ...); void ERR_add_error_vdata(int num, va_list args); +void ERR_add_error_txt(const char *sepr, const char *txt); +void ERR_add_error_mem_bio(const char *sep, BIO *bio); + int ERR_load_strings(int lib, ERR_STRING_DATA *str); int ERR_load_strings_const(const ERR_STRING_DATA *str); int ERR_unload_strings(int lib, ERR_STRING_DATA *str); -int ERR_load_ERR_strings(void); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define ERR_load_crypto_strings() \ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) # define ERR_free_strings() while(0) continue #endif - -DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) -DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid)) -ERR_STATE *ERR_get_state(void); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ERR_remove_thread_state(void *); +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_0_0 +OSSL_DEPRECATEDIN_1_0_0 void ERR_remove_state(unsigned long pid); +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ERR_STATE *ERR_get_state(void); +#endif int ERR_get_next_error_library(void); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/err.h.in b/deps/openssl/android/x86/usr/local/include/openssl/err.h.in new file mode 100644 index 00000000..11dc2163 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/err.h.in @@ -0,0 +1,493 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_lhash_macros); +-} + +#ifndef OPENSSL_ERR_H +# define OPENSSL_ERR_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ERR_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# include +# endif + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_FILENAMES +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,fn,ln) +# else +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,NULL,0) +# endif +# endif + +# include +# include + +# define ERR_TXT_MALLOCED 0x01 +# define ERR_TXT_STRING 0x02 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) || defined(OSSL_FORCE_ERR_STATE) +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 + +# define ERR_NUM_ERRORS 16 +struct err_state_st { + int err_flags[ERR_NUM_ERRORS]; + int err_marks[ERR_NUM_ERRORS]; + unsigned long err_buffer[ERR_NUM_ERRORS]; + char *err_data[ERR_NUM_ERRORS]; + size_t err_data_size[ERR_NUM_ERRORS]; + int err_data_flags[ERR_NUM_ERRORS]; + char *err_file[ERR_NUM_ERRORS]; + int err_line[ERR_NUM_ERRORS]; + char *err_func[ERR_NUM_ERRORS]; + int top, bottom; +}; +# endif + +/* library */ +# define ERR_LIB_NONE 1 +# define ERR_LIB_SYS 2 +# define ERR_LIB_BN 3 +# define ERR_LIB_RSA 4 +# define ERR_LIB_DH 5 +# define ERR_LIB_EVP 6 +# define ERR_LIB_BUF 7 +# define ERR_LIB_OBJ 8 +# define ERR_LIB_PEM 9 +# define ERR_LIB_DSA 10 +# define ERR_LIB_X509 11 +/* #define ERR_LIB_METH 12 */ +# define ERR_LIB_ASN1 13 +# define ERR_LIB_CONF 14 +# define ERR_LIB_CRYPTO 15 +# define ERR_LIB_EC 16 +# define ERR_LIB_SSL 20 +/* #define ERR_LIB_SSL23 21 */ +/* #define ERR_LIB_SSL2 22 */ +/* #define ERR_LIB_SSL3 23 */ +/* #define ERR_LIB_RSAREF 30 */ +/* #define ERR_LIB_PROXY 31 */ +# define ERR_LIB_BIO 32 +# define ERR_LIB_PKCS7 33 +# define ERR_LIB_X509V3 34 +# define ERR_LIB_PKCS12 35 +# define ERR_LIB_RAND 36 +# define ERR_LIB_DSO 37 +# define ERR_LIB_ENGINE 38 +# define ERR_LIB_OCSP 39 +# define ERR_LIB_UI 40 +# define ERR_LIB_COMP 41 +# define ERR_LIB_ECDSA 42 +# define ERR_LIB_ECDH 43 +# define ERR_LIB_OSSL_STORE 44 +# define ERR_LIB_FIPS 45 +# define ERR_LIB_CMS 46 +# define ERR_LIB_TS 47 +# define ERR_LIB_HMAC 48 +/* # define ERR_LIB_JPAKE 49 */ +# define ERR_LIB_CT 50 +# define ERR_LIB_ASYNC 51 +# define ERR_LIB_KDF 52 +# define ERR_LIB_SM2 53 +# define ERR_LIB_ESS 54 +# define ERR_LIB_PROP 55 +# define ERR_LIB_CRMF 56 +# define ERR_LIB_PROV 57 +# define ERR_LIB_CMP 58 +# define ERR_LIB_OSSL_ENCODER 59 +# define ERR_LIB_OSSL_DECODER 60 +# define ERR_LIB_HTTP 61 + +# define ERR_LIB_USER 128 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define ASN1err(f, r) ERR_raise_data(ERR_LIB_ASN1, (r), NULL) +# define ASYNCerr(f, r) ERR_raise_data(ERR_LIB_ASYNC, (r), NULL) +# define BIOerr(f, r) ERR_raise_data(ERR_LIB_BIO, (r), NULL) +# define BNerr(f, r) ERR_raise_data(ERR_LIB_BN, (r), NULL) +# define BUFerr(f, r) ERR_raise_data(ERR_LIB_BUF, (r), NULL) +# define CMPerr(f, r) ERR_raise_data(ERR_LIB_CMP, (r), NULL) +# define CMSerr(f, r) ERR_raise_data(ERR_LIB_CMS, (r), NULL) +# define COMPerr(f, r) ERR_raise_data(ERR_LIB_COMP, (r), NULL) +# define CONFerr(f, r) ERR_raise_data(ERR_LIB_CONF, (r), NULL) +# define CRMFerr(f, r) ERR_raise_data(ERR_LIB_CRMF, (r), NULL) +# define CRYPTOerr(f, r) ERR_raise_data(ERR_LIB_CRYPTO, (r), NULL) +# define CTerr(f, r) ERR_raise_data(ERR_LIB_CT, (r), NULL) +# define DHerr(f, r) ERR_raise_data(ERR_LIB_DH, (r), NULL) +# define DSAerr(f, r) ERR_raise_data(ERR_LIB_DSA, (r), NULL) +# define DSOerr(f, r) ERR_raise_data(ERR_LIB_DSO, (r), NULL) +# define ECDHerr(f, r) ERR_raise_data(ERR_LIB_ECDH, (r), NULL) +# define ECDSAerr(f, r) ERR_raise_data(ERR_LIB_ECDSA, (r), NULL) +# define ECerr(f, r) ERR_raise_data(ERR_LIB_EC, (r), NULL) +# define ENGINEerr(f, r) ERR_raise_data(ERR_LIB_ENGINE, (r), NULL) +# define ESSerr(f, r) ERR_raise_data(ERR_LIB_ESS, (r), NULL) +# define EVPerr(f, r) ERR_raise_data(ERR_LIB_EVP, (r), NULL) +# define FIPSerr(f, r) ERR_raise_data(ERR_LIB_FIPS, (r), NULL) +# define HMACerr(f, r) ERR_raise_data(ERR_LIB_HMAC, (r), NULL) +# define HTTPerr(f, r) ERR_raise_data(ERR_LIB_HTTP, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define OBJerr(f, r) ERR_raise_data(ERR_LIB_OBJ, (r), NULL) +# define OCSPerr(f, r) ERR_raise_data(ERR_LIB_OCSP, (r), NULL) +# define OSSL_STOREerr(f, r) ERR_raise_data(ERR_LIB_OSSL_STORE, (r), NULL) +# define PEMerr(f, r) ERR_raise_data(ERR_LIB_PEM, (r), NULL) +# define PKCS12err(f, r) ERR_raise_data(ERR_LIB_PKCS12, (r), NULL) +# define PKCS7err(f, r) ERR_raise_data(ERR_LIB_PKCS7, (r), NULL) +# define PROPerr(f, r) ERR_raise_data(ERR_LIB_PROP, (r), NULL) +# define PROVerr(f, r) ERR_raise_data(ERR_LIB_PROV, (r), NULL) +# define RANDerr(f, r) ERR_raise_data(ERR_LIB_RAND, (r), NULL) +# define RSAerr(f, r) ERR_raise_data(ERR_LIB_RSA, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define SM2err(f, r) ERR_raise_data(ERR_LIB_SM2, (r), NULL) +# define SSLerr(f, r) ERR_raise_data(ERR_LIB_SSL, (r), NULL) +# define SYSerr(f, r) ERR_raise_data(ERR_LIB_SYS, (r), NULL) +# define TSerr(f, r) ERR_raise_data(ERR_LIB_TS, (r), NULL) +# define UIerr(f, r) ERR_raise_data(ERR_LIB_UI, (r), NULL) +# define X509V3err(f, r) ERR_raise_data(ERR_LIB_X509V3, (r), NULL) +# define X509err(f, r) ERR_raise_data(ERR_LIB_X509, (r), NULL) +# endif + +/*- + * The error code packs differently depending on if it records a system + * error or an OpenSSL error. + * + * A system error packs like this (we follow POSIX and only allow positive + * numbers that fit in an |int|): + * + * +-+-------------------------------------------------------------+ + * |1| system error number | + * +-+-------------------------------------------------------------+ + * + * An OpenSSL error packs like this: + * + * <---------------------------- 32 bits --------------------------> + * <--- 8 bits ---><------------------ 23 bits -----------------> + * +-+---------------+---------------------------------------------+ + * |0| library | reason | + * +-+---------------+---------------------------------------------+ + * + * A few of the reason bits are reserved as flags with special meaning: + * + * <5 bits-<>--------- 19 bits -----------------> + * +-------+-+-----------------------------------+ + * | rflags| | reason | + * +-------+-+-----------------------------------+ + * ^ + * | + * ERR_RFLAG_FATAL = ERR_R_FATAL + * + * The reason flags are part of the overall reason code for practical + * reasons, as they provide an easy way to place different types of + * reason codes in different numeric ranges. + * + * The currently known reason flags are: + * + * ERR_RFLAG_FATAL Flags that the reason code is considered fatal. + * For backward compatibility reasons, this flag + * is also the code for ERR_R_FATAL (that reason + * code served the dual purpose of flag and reason + * code in one in pre-3.0 OpenSSL). + * ERR_RFLAG_COMMON Flags that the reason code is common to all + * libraries. All ERR_R_ macros must use this flag, + * and no other _R_ macro is allowed to use it. + */ + +/* Macros to help decode recorded system errors */ +# define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1) +# define ERR_SYSTEM_MASK ((unsigned int)INT_MAX) + +/* + * Macros to help decode recorded OpenSSL errors + * As expressed above, RFLAGS and REASON overlap by one bit to allow + * ERR_R_FATAL to use ERR_RFLAG_FATAL as its reason code. + */ +# define ERR_LIB_OFFSET 23L +# define ERR_LIB_MASK 0xFF +# define ERR_RFLAGS_OFFSET 18L +# define ERR_RFLAGS_MASK 0x1F +# define ERR_REASON_MASK 0X7FFFFF + +/* + * Reason flags are defined pre-shifted to easily combine with the reason + * number. + */ +# define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET) +# define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET) + +# define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0) + +static ossl_unused ossl_inline int ERR_GET_LIB(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return ERR_LIB_SYS; + return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK; +} + +static ossl_unused ossl_inline int ERR_GET_RFLAGS(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return 0; + return errcode & (ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET); +} + +static ossl_unused ossl_inline int ERR_GET_REASON(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return errcode & ERR_SYSTEM_MASK; + return errcode & ERR_REASON_MASK; +} + +static ossl_unused ossl_inline int ERR_FATAL_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_FATAL) != 0; +} + +static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_COMMON) != 0; +} + +/* + * ERR_PACK is a helper macro to properly pack OpenSSL error codes and may + * only be used for that purpose. System errors are packed internally. + * ERR_PACK takes reason flags and reason code combined in |reason|. + * ERR_PACK ignores |func|, that parameter is just legacy from pre-3.0 OpenSSL. + */ +# define ERR_PACK(lib,func,reason) \ + ( (((unsigned long)(lib) & ERR_LIB_MASK ) << ERR_LIB_OFFSET) | \ + (((unsigned long)(reason) & ERR_REASON_MASK)) ) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SYS_F_FOPEN 0 +# define SYS_F_CONNECT 0 +# define SYS_F_GETSERVBYNAME 0 +# define SYS_F_SOCKET 0 +# define SYS_F_IOCTLSOCKET 0 +# define SYS_F_BIND 0 +# define SYS_F_LISTEN 0 +# define SYS_F_ACCEPT 0 +# define SYS_F_WSASTARTUP 0 +# define SYS_F_OPENDIR 0 +# define SYS_F_FREAD 0 +# define SYS_F_GETADDRINFO 0 +# define SYS_F_GETNAMEINFO 0 +# define SYS_F_SETSOCKOPT 0 +# define SYS_F_GETSOCKOPT 0 +# define SYS_F_GETSOCKNAME 0 +# define SYS_F_GETHOSTBYNAME 0 +# define SYS_F_FFLUSH 0 +# define SYS_F_OPEN 0 +# define SYS_F_CLOSE 0 +# define SYS_F_IOCTL 0 +# define SYS_F_STAT 0 +# define SYS_F_FCNTL 0 +# define SYS_F_FSTAT 0 +# define SYS_F_SENDFILE 0 +# endif + +/* + * All ERR_R_ codes must be combined with ERR_RFLAG_COMMON. + */ + +/* "we came from here" global reason codes, range 1..255 */ +# define ERR_R_SYS_LIB (ERR_LIB_SYS/* 2 */ | ERR_RFLAG_COMMON) +# define ERR_R_BN_LIB (ERR_LIB_BN/* 3 */ | ERR_RFLAG_COMMON) +# define ERR_R_RSA_LIB (ERR_LIB_RSA/* 4 */ | ERR_RFLAG_COMMON) +# define ERR_R_DH_LIB (ERR_LIB_DH/* 5 */ | ERR_RFLAG_COMMON) +# define ERR_R_EVP_LIB (ERR_LIB_EVP/* 6 */ | ERR_RFLAG_COMMON) +# define ERR_R_BUF_LIB (ERR_LIB_BUF/* 7 */ | ERR_RFLAG_COMMON) +# define ERR_R_OBJ_LIB (ERR_LIB_OBJ/* 8 */ | ERR_RFLAG_COMMON) +# define ERR_R_PEM_LIB (ERR_LIB_PEM/* 9 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSA_LIB (ERR_LIB_DSA/* 10 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509_LIB (ERR_LIB_X509/* 11 */ | ERR_RFLAG_COMMON) +# define ERR_R_ASN1_LIB (ERR_LIB_ASN1/* 13 */ | ERR_RFLAG_COMMON) +# define ERR_R_CONF_LIB (ERR_LIB_CONF/* 14 */ | ERR_RFLAG_COMMON) +# define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO/* 15 */ | ERR_RFLAG_COMMON) +# define ERR_R_EC_LIB (ERR_LIB_EC/* 16 */ | ERR_RFLAG_COMMON) +# define ERR_R_SSL_LIB (ERR_LIB_SSL/* 20 */ | ERR_RFLAG_COMMON) +# define ERR_R_BIO_LIB (ERR_LIB_BIO/* 32 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS7_LIB (ERR_LIB_PKCS7/* 33 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509V3_LIB (ERR_LIB_X509V3/* 34 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS12_LIB (ERR_LIB_PKCS12/* 35 */ | ERR_RFLAG_COMMON) +# define ERR_R_RAND_LIB (ERR_LIB_RAND/* 36 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSO_LIB (ERR_LIB_DSO/* 37 */ | ERR_RFLAG_COMMON) +# define ERR_R_ENGINE_LIB (ERR_LIB_ENGINE/* 38 */ | ERR_RFLAG_COMMON) +# define ERR_R_UI_LIB (ERR_LIB_UI/* 40 */ | ERR_RFLAG_COMMON) +# define ERR_R_ECDSA_LIB (ERR_LIB_ECDSA/* 42 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_STORE_LIB (ERR_LIB_OSSL_STORE/* 44 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMS_LIB (ERR_LIB_CMS/* 46 */ | ERR_RFLAG_COMMON) +# define ERR_R_TS_LIB (ERR_LIB_TS/* 47 */ | ERR_RFLAG_COMMON) +# define ERR_R_CT_LIB (ERR_LIB_CT/* 50 */ | ERR_RFLAG_COMMON) +# define ERR_R_PROV_LIB (ERR_LIB_PROV/* 57 */ | ERR_RFLAG_COMMON) +# define ERR_R_ESS_LIB (ERR_LIB_ESS/* 54 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMP_LIB (ERR_LIB_CMP/* 58 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_ENCODER_LIB (ERR_LIB_OSSL_ENCODER/* 59 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_DECODER_LIB (ERR_LIB_OSSL_DECODER/* 60 */ | ERR_RFLAG_COMMON) + +/* Other common error codes, range 256..2^ERR_RFLAGS_OFFSET-1 */ +# define ERR_R_FATAL (ERR_RFLAG_FATAL|ERR_RFLAG_COMMON) +# define ERR_R_MALLOC_FAILURE (256|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (257|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (258|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (259|ERR_R_FATAL) +# define ERR_R_DISABLED (260|ERR_R_FATAL) +# define ERR_R_INIT_FAIL (261|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (262|ERR_RFLAG_COMMON) +# define ERR_R_OPERATION_FAIL (263|ERR_R_FATAL) +# define ERR_R_INVALID_PROVIDER_FUNCTIONS (264|ERR_R_FATAL) +# define ERR_R_INTERRUPTED_OR_CANCELLED (265|ERR_RFLAG_COMMON) +# define ERR_R_NESTED_ASN1_ERROR (266|ERR_RFLAG_COMMON) +# define ERR_R_MISSING_ASN1_EOS (267|ERR_RFLAG_COMMON) +# define ERR_R_UNSUPPORTED (268|ERR_RFLAG_COMMON) +# define ERR_R_FETCH_FAILED (269|ERR_RFLAG_COMMON) +# define ERR_R_INVALID_PROPERTY_DEFINITION (270|ERR_RFLAG_COMMON) +# define ERR_R_UNABLE_TO_GET_READ_LOCK (271|ERR_R_FATAL) +# define ERR_R_UNABLE_TO_GET_WRITE_LOCK (272|ERR_R_FATAL) + +typedef struct ERR_string_data_st { + unsigned long error; + const char *string; +} ERR_STRING_DATA; + +{- + generate_lhash_macros("ERR_STRING_DATA"); +-} + +/* 12 lines and some on an 80 column terminal */ +#define ERR_MAX_DATA_SIZE 1024 + +/* Building blocks */ +void ERR_new(void); +void ERR_set_debug(const char *file, int line, const char *func); +void ERR_set_error(int lib, int reason, const char *fmt, ...); +void ERR_vset_error(int lib, int reason, const char *fmt, va_list args); + +/* Main error raising functions */ +# define ERR_raise(lib, reason) ERR_raise_data((lib),(reason),NULL) +# define ERR_raise_data \ + (ERR_new(), \ + ERR_set_debug(OPENSSL_FILE,OPENSSL_LINE,OPENSSL_FUNC), \ + ERR_set_error) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* Backward compatibility */ +# define ERR_put_error(lib, func, reason, file, line) \ + (ERR_new(), \ + ERR_set_debug((file), (line), OPENSSL_FUNC), \ + ERR_set_error((lib), (reason), NULL)) +# endif + +void ERR_set_error_data(char *data, int flags); + +unsigned long ERR_get_error(void); +unsigned long ERR_get_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_get_error_line(const char **file, int *line); +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_get_error_line_data(const char **file, int *line, + const char **data, int *flags); +#endif +unsigned long ERR_peek_error(void); +unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_func(const char **func); +unsigned long ERR_peek_error_data(const char **data, int *flags); +unsigned long ERR_peek_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_peek_error_line_data(const char **file, int *line, + const char **data, int *flags); +# endif +unsigned long ERR_peek_last_error(void); +unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_func(const char **func); +unsigned long ERR_peek_last_error_data(const char **data, int *flags); +unsigned long ERR_peek_last_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_peek_last_error_line_data(const char **file, int *line, + const char **data, int *flags); +# endif + +void ERR_clear_error(void); + +char *ERR_error_string(unsigned long e, char *buf); +void ERR_error_string_n(unsigned long e, char *buf, size_t len); +const char *ERR_lib_error_string(unsigned long e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ERR_func_error_string(unsigned long e); +# endif +const char *ERR_reason_error_string(unsigned long e); + +void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), + void *u); +# ifndef OPENSSL_NO_STDIO +void ERR_print_errors_fp(FILE *fp); +# endif +void ERR_print_errors(BIO *bp); + +void ERR_add_error_data(int num, ...); +void ERR_add_error_vdata(int num, va_list args); +void ERR_add_error_txt(const char *sepr, const char *txt); +void ERR_add_error_mem_bio(const char *sep, BIO *bio); + +int ERR_load_strings(int lib, ERR_STRING_DATA *str); +int ERR_load_strings_const(const ERR_STRING_DATA *str); +int ERR_unload_strings(int lib, ERR_STRING_DATA *str); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define ERR_load_crypto_strings() \ + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# define ERR_free_strings() while(0) continue +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ERR_remove_thread_state(void *); +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_0_0 +OSSL_DEPRECATEDIN_1_0_0 void ERR_remove_state(unsigned long pid); +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ERR_STATE *ERR_get_state(void); +#endif + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); +int ERR_clear_last_mark(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ess.h b/deps/openssl/android/x86/usr/local/include/openssl/ess.h new file mode 100644 index 00000000..4055bebb --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/ess.h @@ -0,0 +1,128 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ess.h.in + * + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +#ifndef OPENSSL_ESS_H +# define OPENSSL_ESS_H +# pragma once + +# include + +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + + +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID, ESS_CERT_ID, ESS_CERT_ID) +#define sk_ESS_CERT_ID_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_value(sk, idx) ((ESS_CERT_ID *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_sk_type(sk), (idx))) +#define sk_ESS_CERT_ID_new(cmp) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_compfunc_type(cmp))) +#define sk_ESS_CERT_ID_new_null() ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_null()) +#define sk_ESS_CERT_ID_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_sk_type(sk), (n)) +#define sk_ESS_CERT_ID_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_delete(sk, i) ((ESS_CERT_ID *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_sk_type(sk), (i))) +#define sk_ESS_CERT_ID_delete_ptr(sk, ptr) ((ESS_CERT_ID *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr))) +#define sk_ESS_CERT_ID_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_pop(sk) ((ESS_CERT_ID *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_shift(sk) ((ESS_CERT_ID *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_sk_type(sk),ossl_check_ESS_CERT_ID_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), (idx)) +#define sk_ESS_CERT_ID_set(sk, idx, ptr) ((ESS_CERT_ID *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_type(ptr))) +#define sk_ESS_CERT_ID_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), pnum) +#define sk_ESS_CERT_ID_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_dup(sk) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_freefunc_type(freefunc))) +#define sk_ESS_CERT_ID_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_compfunc_type(cmp))) + + + +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; + +SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID_V2, ESS_CERT_ID_V2, ESS_CERT_ID_V2) +#define sk_ESS_CERT_ID_V2_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_value(sk, idx) ((ESS_CERT_ID_V2 *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), (idx))) +#define sk_ESS_CERT_ID_V2_new(cmp) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp))) +#define sk_ESS_CERT_ID_V2_new_null() ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_null()) +#define sk_ESS_CERT_ID_V2_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_V2_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (n)) +#define sk_ESS_CERT_ID_V2_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_delete(sk, i) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (i))) +#define sk_ESS_CERT_ID_V2_delete_ptr(sk, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr))) +#define sk_ESS_CERT_ID_V2_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_pop(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_shift(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk),ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_V2_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), (idx)) +#define sk_ESS_CERT_ID_V2_set(sk, idx, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_V2_type(ptr))) +#define sk_ESS_CERT_ID_V2_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), pnum) +#define sk_ESS_CERT_ID_V2_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_dup(sk) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc))) +#define sk_ESS_CERT_ID_V2_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_V2_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp))) + + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_ISSUER_SERIAL) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_ISSUER_SERIAL, ESS_ISSUER_SERIAL) +DECLARE_ASN1_DUP_FUNCTION(ESS_ISSUER_SERIAL) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID, ESS_CERT_ID) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID_V2) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID_V2, ESS_CERT_ID_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2) + +ESS_SIGNING_CERT *OSSL_ESS_signing_cert_new_init(const X509 *signcert, + const STACK_OF(X509) *certs, + int set_issuer_serial); +ESS_SIGNING_CERT_V2 *OSSL_ESS_signing_cert_v2_new_init(const EVP_MD *hash_alg, + const X509 *signcert, + const + STACK_OF(X509) *certs, + int set_issuer_serial); +int OSSL_ESS_check_signing_certs(const ESS_SIGNING_CERT *ss, + const ESS_SIGNING_CERT_V2 *ssv2, + const STACK_OF(X509) *chain, + int require_signing_cert); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ess.h.in b/deps/openssl/android/x86/usr/local/include/openssl/ess.h.in new file mode 100644 index 00000000..d1a685b9 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/ess.h.in @@ -0,0 +1,81 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ESS_H +# define OPENSSL_ESS_H +# pragma once + +# include + +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + + +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +{- + generate_stack_macros("ESS_CERT_ID"); +-} + + +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; + +{- + generate_stack_macros("ESS_CERT_ID_V2"); +-} + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_ISSUER_SERIAL) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_ISSUER_SERIAL, ESS_ISSUER_SERIAL) +DECLARE_ASN1_DUP_FUNCTION(ESS_ISSUER_SERIAL) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID, ESS_CERT_ID) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID_V2) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID_V2, ESS_CERT_ID_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2) + +ESS_SIGNING_CERT *OSSL_ESS_signing_cert_new_init(const X509 *signcert, + const STACK_OF(X509) *certs, + int set_issuer_serial); +ESS_SIGNING_CERT_V2 *OSSL_ESS_signing_cert_v2_new_init(const EVP_MD *hash_alg, + const X509 *signcert, + const + STACK_OF(X509) *certs, + int set_issuer_serial); +int OSSL_ESS_check_signing_certs(const ESS_SIGNING_CERT *ss, + const ESS_SIGNING_CERT_V2 *ssv2, + const STACK_OF(X509) *chain, + int require_signing_cert); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/esserr.h b/deps/openssl/android/x86/usr/local/include/openssl/esserr.h new file mode 100644 index 00000000..165ce7c4 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/esserr.h @@ -0,0 +1,32 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ESSERR_H +# define OPENSSL_ESSERR_H +# pragma once + +# include +# include +# include + +/* + * ESS reason codes. + */ +# define ESS_R_EMPTY_ESS_CERT_ID_LIST 107 +# define ESS_R_ESS_CERT_DIGEST_ERROR 103 +# define ESS_R_ESS_CERT_ID_NOT_FOUND 104 +# define ESS_R_ESS_CERT_ID_WRONG_ORDER 105 +# define ESS_R_ESS_DIGEST_ALG_UNKNOWN 106 +# define ESS_R_ESS_SIGNING_CERTIFICATE_ERROR 102 +# define ESS_R_ESS_SIGNING_CERT_ADD_ERROR 100 +# define ESS_R_ESS_SIGNING_CERT_V2_ADD_ERROR 101 +# define ESS_R_MISSING_SIGNING_CERTIFICATE_ATTRIBUTE 108 + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/evp.h b/deps/openssl/android/x86/usr/local/include/openssl/evp.h index a411f3f2..86f4e22c 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/evp.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/evp.h @@ -1,20 +1,35 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENVELOPE_H -# define HEADER_ENVELOPE_H +#ifndef OPENSSL_EVP_H +# define OPENSSL_EVP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ENVELOPE_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif # include -# include +# include +# include +# include # include # include # include +# include # define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ # define EVP_MAX_KEY_LENGTH 64 @@ -27,16 +42,18 @@ # include -# define EVP_PK_RSA 0x0001 -# define EVP_PK_DSA 0x0002 -# define EVP_PK_DH 0x0004 -# define EVP_PK_EC 0x0008 -# define EVP_PKT_SIGN 0x0010 -# define EVP_PKT_ENC 0x0020 -# define EVP_PKT_EXCH 0x0040 -# define EVP_PKS_RSA 0x0100 -# define EVP_PKS_DSA 0x0200 -# define EVP_PKS_EC 0x0400 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define EVP_PK_RSA 0x0001 +# define EVP_PK_DSA 0x0002 +# define EVP_PK_DH 0x0004 +# define EVP_PK_EC 0x0008 +# define EVP_PKT_SIGN 0x0010 +# define EVP_PKT_ENC 0x0020 +# define EVP_PKT_EXCH 0x0040 +# define EVP_PKS_RSA 0x0100 +# define EVP_PKS_DSA 0x0200 +# define EVP_PKS_EC 0x0400 +# endif # define EVP_PKEY_NONE NID_undef # define EVP_PKEY_RSA NID_rsaEncryption @@ -62,53 +79,81 @@ # define EVP_PKEY_ED25519 NID_ED25519 # define EVP_PKEY_X448 NID_X448 # define EVP_PKEY_ED448 NID_ED448 +/* Special indicator that the object is uniquely provider side */ +# define EVP_PKEY_KEYMGMT -1 + +/* Easy to use macros for EVP_PKEY related selections */ +# define EVP_PKEY_KEY_PARAMETERS \ + ( OSSL_KEYMGMT_SELECT_ALL_PARAMETERS ) +# define EVP_PKEY_PUBLIC_KEY \ + ( EVP_PKEY_KEY_PARAMETERS | OSSL_KEYMGMT_SELECT_PUBLIC_KEY ) +# define EVP_PKEY_KEYPAIR \ + ( EVP_PKEY_PUBLIC_KEY | OSSL_KEYMGMT_SELECT_PRIVATE_KEY ) #ifdef __cplusplus extern "C" { #endif +int EVP_set_default_properties(OSSL_LIB_CTX *libctx, const char *propq); +int EVP_default_properties_is_fips_enabled(OSSL_LIB_CTX *libctx); +int EVP_default_properties_enable_fips(OSSL_LIB_CTX *libctx, int enable); + # define EVP_PKEY_MO_SIGN 0x0001 # define EVP_PKEY_MO_VERIFY 0x0002 # define EVP_PKEY_MO_ENCRYPT 0x0004 # define EVP_PKEY_MO_DECRYPT 0x0008 # ifndef EVP_MD -EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); -EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); -void EVP_MD_meth_free(EVP_MD *md); - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); +OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 void EVP_MD_meth_free(EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, const void *data, size_t count)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, unsigned char *md)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, const EVP_MD_CTX *from)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, int p1, void *p2)); - -int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); -int EVP_MD_meth_get_result_size(const EVP_MD *md); -int EVP_MD_meth_get_app_datasize(const EVP_MD *md); -unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_result_size(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_app_datasize(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, - const void *data, - size_t count); + const void *data, size_t count); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, unsigned char *md); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, const EVP_MD_CTX *from); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); - +# endif /* digest can only handle a single block */ # define EVP_MD_FLAG_ONESHOT 0x0001 @@ -139,6 +184,7 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, # define EVP_MD_CTRL_DIGALGID 0x1 # define EVP_MD_CTRL_MICALG 0x2 # define EVP_MD_CTRL_XOF_LEN 0x3 +# define EVP_MD_CTRL_TLSTREE 0x4 /* Minimum Algorithm specific ctrl value */ @@ -159,8 +205,8 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, * don't accidentally reuse the values for other purposes. */ -# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS - * digest in FIPS mode */ +/* This flag has no effect from openssl-3.0 onwards */ +# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008 /* * The following PAD options are also currently ignored in 1.0.0, digest @@ -181,52 +227,68 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, */ # define EVP_MD_CTX_FLAG_FINALISE 0x0200 /* NOTE: 0x0400 is reserved for internal usage */ - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); +OSSL_DEPRECATEDIN_3_0 void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); - +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher, int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher, int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, int (*cleanup) (EVP_CIPHER_CTX *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr)); - -int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - const unsigned char *key, - const unsigned char *iv, - int enc); -int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - unsigned char *out, - const unsigned char *in, - size_t inl); -int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); -int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - int type, int arg, - void *ptr); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, int type, + int arg, void *ptr); +# endif /* Values for cipher flags */ @@ -243,6 +305,7 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CIPH_XTS_MODE 0x10001 # define EVP_CIPH_WRAP_MODE 0x10002 # define EVP_CIPH_OCB_MODE 0x10003 +# define EVP_CIPH_SIV_MODE 0x10004 # define EVP_CIPH_MODE 0xF0007 /* Set if variable length cipher */ # define EVP_CIPH_VARIABLE_LENGTH 0x8 @@ -262,22 +325,32 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CIPH_CUSTOM_COPY 0x400 /* Don't use standard iv length function */ # define EVP_CIPH_CUSTOM_IV_LENGTH 0x800 -/* Allow use default ASN1 get/set iv */ -# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 +/* Legacy and no longer relevant: Allow use default ASN1 get/set iv */ +# define EVP_CIPH_FLAG_DEFAULT_ASN1 0 +/* Free: 0x1000 */ /* Buffer length in bits not bytes: CFB1 mode only */ # define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 -/* Note if suitable for use in FIPS mode */ -# define EVP_CIPH_FLAG_FIPS 0x4000 -/* Allow non FIPS cipher in FIPS mode */ -# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 +/* Deprecated FIPS flag: was 0x4000 */ +# define EVP_CIPH_FLAG_FIPS 0 +/* Deprecated FIPS flag: was 0x8000 */ +# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0 + /* * Cipher handles any and all padding logic as well as finalisation. */ +# define EVP_CIPH_FLAG_CTS 0x4000 # define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 # define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 # define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 /* Cipher can handle pipeline operations */ # define EVP_CIPH_FLAG_PIPELINE 0X800000 +/* For provider implementations that handle ASN1 get/set param themselves */ +# define EVP_CIPH_FLAG_CUSTOM_ASN1 0x1000000 +/* For ciphers generating unprotected CMS attributes */ +# define EVP_CIPH_FLAG_CIPHER_WITH_MAC 0x2000000 +/* For supplementary wrap cipher support */ +# define EVP_CIPH_FLAG_GET_WRAP_CIPHER 0x4000000 +# define EVP_CIPH_FLAG_INVERSE_CIPHER 0x8000000 /* * Cipher context flag to indicate we can handle wrap mode: if allowed in @@ -350,8 +423,17 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23 /* Set the input buffer lengths to use for a pipelined operation */ # define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24 - +/* Get the IV length used by the cipher */ # define EVP_CTRL_GET_IVLEN 0x25 +/* 0x26 is unused */ +/* Tell the cipher it's doing a speed test (SIV disallows multiple ops) */ +# define EVP_CTRL_SET_SPEED 0x27 +/* Get the unprotectedAttrs from cipher ctx */ +# define EVP_CTRL_PROCESS_UNPROTECTED 0x28 +/* Get the supplementary wrap cipher */ +#define EVP_CTRL_GET_WRAP_CIPHER 0x29 +/* TLSTREE key diversification */ +#define EVP_CTRL_TLSTREE 0x2A /* Padding modes */ #define EVP_PADDING_PKCS7 1 @@ -405,33 +487,39 @@ typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); -# ifndef OPENSSL_NO_RSA +typedef int (EVP_PBE_KEYGEN_EX) (EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *cipher, const EVP_MD *md, + int en_de, OSSL_LIB_CTX *libctx, const char *propq); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 # define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ - (char *)(rsa)) + (rsa)) # endif # ifndef OPENSSL_NO_DSA # define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ - (char *)(dsa)) + (dsa)) # endif -# ifndef OPENSSL_NO_DH -# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ - (char *)(dh)) +# if !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_DEPRECATED_3_0) +# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,(dh)) # endif -# ifndef OPENSSL_NO_EC -# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ - (char *)(eckey)) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +# define EVP_PKEY_assign_EC_KEY(pkey,eckey) \ + EVP_PKEY_assign((pkey), EVP_PKEY_EC, (eckey)) +# endif # endif # ifndef OPENSSL_NO_SIPHASH -# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),EVP_PKEY_SIPHASH,\ - (char *)(shkey)) +# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),\ + EVP_PKEY_SIPHASH,(shkey)) # endif # ifndef OPENSSL_NO_POLY1305 -# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),EVP_PKEY_POLY1305,\ - (char *)(polykey)) +# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),\ + EVP_PKEY_POLY1305,(polykey)) # endif /* Add some extra combinations */ @@ -440,58 +528,126 @@ typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, # define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) # define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) -int EVP_MD_type(const EVP_MD *md); -# define EVP_MD_nid(e) EVP_MD_type(e) -# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) -int EVP_MD_pkey_type(const EVP_MD *md); -int EVP_MD_size(const EVP_MD *md); -int EVP_MD_block_size(const EVP_MD *md); -unsigned long EVP_MD_flags(const EVP_MD *md); +int EVP_MD_get_type(const EVP_MD *md); +# define EVP_MD_type EVP_MD_get_type +# define EVP_MD_nid EVP_MD_get_type +const char *EVP_MD_get0_name(const EVP_MD *md); +# define EVP_MD_name EVP_MD_get0_name +const char *EVP_MD_get0_description(const EVP_MD *md); +int EVP_MD_is_a(const EVP_MD *md, const char *name); +int EVP_MD_names_do_all(const EVP_MD *md, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PROVIDER *EVP_MD_get0_provider(const EVP_MD *md); +int EVP_MD_get_pkey_type(const EVP_MD *md); +# define EVP_MD_pkey_type EVP_MD_get_pkey_type +int EVP_MD_get_size(const EVP_MD *md); +# define EVP_MD_size EVP_MD_get_size +int EVP_MD_get_block_size(const EVP_MD *md); +# define EVP_MD_block_size EVP_MD_get_block_size +unsigned long EVP_MD_get_flags(const EVP_MD *md); +# define EVP_MD_flags EVP_MD_get_flags +const EVP_MD *EVP_MD_CTX_get0_md(const EVP_MD_CTX *ctx); +EVP_MD *EVP_MD_CTX_get1_md(EVP_MD_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, const void *data, size_t count); +OSSL_DEPRECATEDIN_3_0 void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count)); -# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) -EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); +# endif +# define EVP_MD_CTX_get0_name(e) EVP_MD_get0_name(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_get_size(e) EVP_MD_get_size(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_size EVP_MD_CTX_get_size +# define EVP_MD_CTX_get_block_size(e) EVP_MD_get_block_size(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_block_size EVP_MD_CTX_get_block_size +# define EVP_MD_CTX_get_type(e) EVP_MD_get_type(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_type EVP_MD_CTX_get_type +EVP_PKEY_CTX *EVP_MD_CTX_get_pkey_ctx(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_pkey_ctx EVP_MD_CTX_get_pkey_ctx void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); -void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); +void *EVP_MD_CTX_get0_md_data(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_md_data EVP_MD_CTX_get0_md_data -int EVP_CIPHER_nid(const EVP_CIPHER *cipher); -# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) -int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); +int EVP_CIPHER_get_nid(const EVP_CIPHER *cipher); +# define EVP_CIPHER_nid EVP_CIPHER_get_nid +const char *EVP_CIPHER_get0_name(const EVP_CIPHER *cipher); +# define EVP_CIPHER_name EVP_CIPHER_get0_name +const char *EVP_CIPHER_get0_description(const EVP_CIPHER *cipher); +int EVP_CIPHER_is_a(const EVP_CIPHER *cipher, const char *name); +int EVP_CIPHER_names_do_all(const EVP_CIPHER *cipher, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PROVIDER *EVP_CIPHER_get0_provider(const EVP_CIPHER *cipher); +int EVP_CIPHER_get_block_size(const EVP_CIPHER *cipher); +# define EVP_CIPHER_block_size EVP_CIPHER_get_block_size +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher); -int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); -int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); -unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); -# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) +# endif +int EVP_CIPHER_get_key_length(const EVP_CIPHER *cipher); +# define EVP_CIPHER_key_length EVP_CIPHER_get_key_length +int EVP_CIPHER_get_iv_length(const EVP_CIPHER *cipher); +# define EVP_CIPHER_iv_length EVP_CIPHER_get_iv_length +unsigned long EVP_CIPHER_get_flags(const EVP_CIPHER *cipher); +# define EVP_CIPHER_flags EVP_CIPHER_get_flags +int EVP_CIPHER_get_mode(const EVP_CIPHER *cipher); +# define EVP_CIPHER_mode EVP_CIPHER_get_mode +int EVP_CIPHER_get_type(const EVP_CIPHER *cipher); +# define EVP_CIPHER_type EVP_CIPHER_get_type +EVP_CIPHER *EVP_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_CIPHER_up_ref(EVP_CIPHER *cipher); +void EVP_CIPHER_free(EVP_CIPHER *cipher); +const EVP_CIPHER *EVP_CIPHER_CTX_get0_cipher(const EVP_CIPHER_CTX *ctx); +EVP_CIPHER *EVP_CIPHER_CTX_get1_cipher(EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_is_encrypting(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_encrypting EVP_CIPHER_CTX_is_encrypting +int EVP_CIPHER_CTX_get_nid(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_nid EVP_CIPHER_CTX_get_nid +int EVP_CIPHER_CTX_get_block_size(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_block_size EVP_CIPHER_CTX_get_block_size +int EVP_CIPHER_CTX_get_key_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_key_length EVP_CIPHER_CTX_get_key_length +int EVP_CIPHER_CTX_get_iv_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_iv_length EVP_CIPHER_CTX_get_iv_length +int EVP_CIPHER_CTX_get_tag_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_tag_length EVP_CIPHER_CTX_get_tag_length +# ifndef OPENSSL_NO_DEPRECATED_3_0 const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); -unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +# endif +int EVP_CIPHER_CTX_get_updated_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len); +int EVP_CIPHER_CTX_get_original_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_num(const EVP_CIPHER_CTX *ctx); -void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +# endif +int EVP_CIPHER_CTX_get_num(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_num EVP_CIPHER_CTX_get_num +int EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +EVP_CIPHER_CTX *EVP_CIPHER_CTX_dup(const EVP_CIPHER_CTX *in); int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx); void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); -# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) -# if OPENSSL_API_COMPAT < 0x10100000L -# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c)) +# define EVP_CIPHER_CTX_get0_name(c) EVP_CIPHER_get0_name(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_get_type(c) EVP_CIPHER_get_type(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_type EVP_CIPHER_CTX_get_type +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_get_flags(EVP_CIPHER_CTX_get0_cipher(c)) # endif -# define EVP_CIPHER_CTX_mode(c) EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)) +# define EVP_CIPHER_CTX_get_mode(c) EVP_CIPHER_get_mode(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_mode EVP_CIPHER_CTX_get_mode # define EVP_ENCODE_LENGTH(l) ((((l)+2)/3*4)+((l)/48+1)*2+80) # define EVP_DECODE_LENGTH(l) (((l)+3)/4*3+80) @@ -504,22 +660,17 @@ void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); # define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) # define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) -# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # ifdef CONST_STRICT void BIO_set_md(BIO *, const EVP_MD *md); # else -# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)(md)) +# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(void *)(md)) # endif -# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)(mdp)) -# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0, \ - (char *)(mdcp)) -# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0, \ - (char *)(mdcp)) +# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(mdp)) +# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(mdcp)) +# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(mdcp)) # define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) -# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0, \ - (char *)(c_pp)) +# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(c_pp)) /*__owur*/ int EVP_Cipher(EVP_CIPHER_CTX *c, unsigned char *out, @@ -534,6 +685,14 @@ void BIO_set_md(BIO *, const EVP_MD *md); # define EVP_delete_digest_alias(alias) \ OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); +int EVP_MD_get_params(const EVP_MD *digest, OSSL_PARAM params[]); +int EVP_MD_CTX_set_params(EVP_MD_CTX *ctx, const OSSL_PARAM params[]); +int EVP_MD_CTX_get_params(EVP_MD_CTX *ctx, OSSL_PARAM params[]); +const OSSL_PARAM *EVP_MD_gettable_params(const EVP_MD *digest); +const OSSL_PARAM *EVP_MD_settable_ctx_params(const EVP_MD *md); +const OSSL_PARAM *EVP_MD_gettable_ctx_params(const EVP_MD *md); +const OSSL_PARAM *EVP_MD_CTX_settable_params(EVP_MD_CTX *ctx); +const OSSL_PARAM *EVP_MD_CTX_gettable_params(EVP_MD_CTX *ctx); int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); EVP_MD_CTX *EVP_MD_CTX_new(void); int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); @@ -541,10 +700,13 @@ void EVP_MD_CTX_free(EVP_MD_CTX *ctx); # define EVP_MD_CTX_create() EVP_MD_CTX_new() # define EVP_MD_CTX_init(ctx) EVP_MD_CTX_reset((ctx)) # define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx)) +__owur EVP_MD_CTX *EVP_MD_CTX_dup(const EVP_MD_CTX *in); __owur int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); +__owur int EVP_DigestInit_ex2(EVP_MD_CTX *ctx, const EVP_MD *type, + const OSSL_PARAM params[]); __owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); __owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, @@ -554,6 +716,9 @@ __owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, __owur int EVP_Digest(const void *data, size_t count, unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl); +__owur int EVP_Q_digest(OSSL_LIB_CTX *libctx, const char *name, + const char *propq, const void *data, size_t datalen, + unsigned char *md, size_t *mdlen); __owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); __owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); @@ -562,6 +727,12 @@ __owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, __owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t len); +__owur EVP_MD *EVP_MD_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); + +int EVP_MD_up_ref(EVP_MD *md); +void EVP_MD_free(EVP_MD *md); + int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, const char *prompt, int verify); @@ -583,6 +754,10 @@ __owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); +__owur int EVP_EncryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, + const unsigned char *iv, + const OSSL_PARAM params[]); /*__owur*/ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); /*__owur*/ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, @@ -596,6 +771,10 @@ __owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); +__owur int EVP_DecryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, + const unsigned char *iv, + const OSSL_PARAM params[]); /*__owur*/ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); __owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, @@ -610,6 +789,9 @@ __owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc); +__owur int EVP_CipherInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv, + int enc, const OSSL_PARAM params[]); __owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); __owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, @@ -619,6 +801,9 @@ __owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, __owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, EVP_PKEY *pkey); +__owur int EVP_SignFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, + EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, + const char *propq); __owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen, const unsigned char *tbs, @@ -626,24 +811,36 @@ __owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, __owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, unsigned int siglen, EVP_PKEY *pkey); +__owur int EVP_VerifyFinal_ex(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); __owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, size_t siglen, const unsigned char *tbs, size_t tbslen); +int EVP_DigestSignInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const char *mdname, OSSL_LIB_CTX *libctx, + const char *props, EVP_PKEY *pkey, + const OSSL_PARAM params[]); /*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen); +int EVP_DigestVerifyInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const char *mdname, OSSL_LIB_CTX *libctx, + const char *props, EVP_PKEY *pkey, + const OSSL_PARAM params[]); __owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, size_t siglen); -# ifndef OPENSSL_NO_RSA __owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *ek, int ekl, const unsigned char *iv, EVP_PKEY *priv); @@ -653,11 +850,10 @@ __owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek, int *ekl, unsigned char *iv, EVP_PKEY **pubk, int npubk); __owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); -# endif EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); -int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); +int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, const EVP_ENCODE_CTX *sctx); int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, @@ -672,7 +868,7 @@ int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c) # define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c) # endif @@ -683,6 +879,14 @@ int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); +int EVP_CIPHER_get_params(EVP_CIPHER *cipher, OSSL_PARAM params[]); +int EVP_CIPHER_CTX_set_params(EVP_CIPHER_CTX *ctx, const OSSL_PARAM params[]); +int EVP_CIPHER_CTX_get_params(EVP_CIPHER_CTX *ctx, OSSL_PARAM params[]); +const OSSL_PARAM *EVP_CIPHER_gettable_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_settable_ctx_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_gettable_ctx_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_CTX_settable_params(EVP_CIPHER_CTX *ctx); +const OSSL_PARAM *EVP_CIPHER_CTX_gettable_params(EVP_CIPHER_CTX *ctx); const BIO_METHOD *BIO_f_md(void); const BIO_METHOD *BIO_f_base64(void); @@ -719,6 +923,7 @@ const EVP_MD *EVP_sha3_384(void); const EVP_MD *EVP_sha3_512(void); const EVP_MD *EVP_shake128(void); const EVP_MD *EVP_shake256(void); + # ifndef OPENSSL_NO_MDC2 const EVP_MD *EVP_mdc2(void); # endif @@ -939,7 +1144,7 @@ const EVP_CIPHER *EVP_sm4_ofb(void); const EVP_CIPHER *EVP_sm4_ctr(void); # endif -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OPENSSL_add_all_algorithms_conf() \ OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ | OPENSSL_INIT_ADD_ALL_DIGESTS \ @@ -974,6 +1179,9 @@ void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, void EVP_CIPHER_do_all_sorted(void (*fn) (const EVP_CIPHER *ciph, const char *from, const char *to, void *x), void *arg); +void EVP_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_CIPHER *cipher, void *arg), + void *arg); void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, const char *from, const char *to, void *x), @@ -981,81 +1189,237 @@ void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, void EVP_MD_do_all_sorted(void (*fn) (const EVP_MD *ciph, const char *from, const char *to, void *x), void *arg); +void EVP_MD_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_MD *md, void *arg), + void *arg); -int EVP_PKEY_decrypt_old(unsigned char *dec_key, - const unsigned char *enc_key, int enc_key_len, - EVP_PKEY *private_key); -int EVP_PKEY_encrypt_old(unsigned char *enc_key, - const unsigned char *key, int key_len, - EVP_PKEY *pub_key); +/* MAC stuff */ + +EVP_MAC *EVP_MAC_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); +int EVP_MAC_up_ref(EVP_MAC *mac); +void EVP_MAC_free(EVP_MAC *mac); +const char *EVP_MAC_get0_name(const EVP_MAC *mac); +const char *EVP_MAC_get0_description(const EVP_MAC *mac); +int EVP_MAC_is_a(const EVP_MAC *mac, const char *name); +const OSSL_PROVIDER *EVP_MAC_get0_provider(const EVP_MAC *mac); +int EVP_MAC_get_params(EVP_MAC *mac, OSSL_PARAM params[]); + +EVP_MAC_CTX *EVP_MAC_CTX_new(EVP_MAC *mac); +void EVP_MAC_CTX_free(EVP_MAC_CTX *ctx); +EVP_MAC_CTX *EVP_MAC_CTX_dup(const EVP_MAC_CTX *src); +EVP_MAC *EVP_MAC_CTX_get0_mac(EVP_MAC_CTX *ctx); +int EVP_MAC_CTX_get_params(EVP_MAC_CTX *ctx, OSSL_PARAM params[]); +int EVP_MAC_CTX_set_params(EVP_MAC_CTX *ctx, const OSSL_PARAM params[]); + +size_t EVP_MAC_CTX_get_mac_size(EVP_MAC_CTX *ctx); +size_t EVP_MAC_CTX_get_block_size(EVP_MAC_CTX *ctx); +unsigned char *EVP_Q_mac(OSSL_LIB_CTX *libctx, const char *name, const char *propq, + const char *subalg, const OSSL_PARAM *params, + const void *key, size_t keylen, + const unsigned char *data, size_t datalen, + unsigned char *out, size_t outsize, size_t *outlen); +int EVP_MAC_init(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen, + const OSSL_PARAM params[]); +int EVP_MAC_update(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen); +int EVP_MAC_final(EVP_MAC_CTX *ctx, + unsigned char *out, size_t *outl, size_t outsize); +int EVP_MAC_finalXOF(EVP_MAC_CTX *ctx, unsigned char *out, size_t outsize); +const OSSL_PARAM *EVP_MAC_gettable_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_gettable_ctx_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_settable_ctx_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_CTX_gettable_params(EVP_MAC_CTX *ctx); +const OSSL_PARAM *EVP_MAC_CTX_settable_params(EVP_MAC_CTX *ctx); + +void EVP_MAC_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_MAC *mac, void *arg), + void *arg); +int EVP_MAC_names_do_all(const EVP_MAC *mac, + void (*fn)(const char *name, void *data), + void *data); + +/* RAND stuff */ +EVP_RAND *EVP_RAND_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); +int EVP_RAND_up_ref(EVP_RAND *rand); +void EVP_RAND_free(EVP_RAND *rand); +const char *EVP_RAND_get0_name(const EVP_RAND *rand); +const char *EVP_RAND_get0_description(const EVP_RAND *md); +int EVP_RAND_is_a(const EVP_RAND *rand, const char *name); +const OSSL_PROVIDER *EVP_RAND_get0_provider(const EVP_RAND *rand); +int EVP_RAND_get_params(EVP_RAND *rand, OSSL_PARAM params[]); + +EVP_RAND_CTX *EVP_RAND_CTX_new(EVP_RAND *rand, EVP_RAND_CTX *parent); +int EVP_RAND_CTX_up_ref(EVP_RAND_CTX *ctx); +void EVP_RAND_CTX_free(EVP_RAND_CTX *ctx); +EVP_RAND *EVP_RAND_CTX_get0_rand(EVP_RAND_CTX *ctx); +int EVP_RAND_CTX_get_params(EVP_RAND_CTX *ctx, OSSL_PARAM params[]); +int EVP_RAND_CTX_set_params(EVP_RAND_CTX *ctx, const OSSL_PARAM params[]); +const OSSL_PARAM *EVP_RAND_gettable_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_gettable_ctx_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_settable_ctx_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_CTX_gettable_params(EVP_RAND_CTX *ctx); +const OSSL_PARAM *EVP_RAND_CTX_settable_params(EVP_RAND_CTX *ctx); + +void EVP_RAND_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_RAND *rand, void *arg), + void *arg); +int EVP_RAND_names_do_all(const EVP_RAND *rand, + void (*fn)(const char *name, void *data), + void *data); + +__owur int EVP_RAND_instantiate(EVP_RAND_CTX *ctx, unsigned int strength, + int prediction_resistance, + const unsigned char *pstr, size_t pstr_len, + const OSSL_PARAM params[]); +int EVP_RAND_uninstantiate(EVP_RAND_CTX *ctx); +__owur int EVP_RAND_generate(EVP_RAND_CTX *ctx, unsigned char *out, + size_t outlen, unsigned int strength, + int prediction_resistance, + const unsigned char *addin, size_t addin_len); +int EVP_RAND_reseed(EVP_RAND_CTX *ctx, int prediction_resistance, + const unsigned char *ent, size_t ent_len, + const unsigned char *addin, size_t addin_len); +__owur int EVP_RAND_nonce(EVP_RAND_CTX *ctx, unsigned char *out, size_t outlen); +__owur int EVP_RAND_enable_locking(EVP_RAND_CTX *ctx); + +int EVP_RAND_verify_zeroization(EVP_RAND_CTX *ctx); +unsigned int EVP_RAND_get_strength(EVP_RAND_CTX *ctx); +int EVP_RAND_get_state(EVP_RAND_CTX *ctx); + +# define EVP_RAND_STATE_UNINITIALISED 0 +# define EVP_RAND_STATE_READY 1 +# define EVP_RAND_STATE_ERROR 2 + +/* PKEY stuff */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_decrypt_old(unsigned char *dec_key, + const unsigned char *enc_key, + int enc_key_len, + EVP_PKEY *private_key); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_encrypt_old(unsigned char *enc_key, + const unsigned char *key, + int key_len, EVP_PKEY *pub_key); +# endif +int EVP_PKEY_is_a(const EVP_PKEY *pkey, const char *name); +int EVP_PKEY_type_names_do_all(const EVP_PKEY *pkey, + void (*fn)(const char *name, void *data), + void *data); int EVP_PKEY_type(int type); -int EVP_PKEY_id(const EVP_PKEY *pkey); -int EVP_PKEY_base_id(const EVP_PKEY *pkey); -int EVP_PKEY_bits(const EVP_PKEY *pkey); -int EVP_PKEY_security_bits(const EVP_PKEY *pkey); -int EVP_PKEY_size(const EVP_PKEY *pkey); +int EVP_PKEY_get_id(const EVP_PKEY *pkey); +# define EVP_PKEY_id EVP_PKEY_get_id +int EVP_PKEY_get_base_id(const EVP_PKEY *pkey); +# define EVP_PKEY_base_id EVP_PKEY_get_base_id +int EVP_PKEY_get_bits(const EVP_PKEY *pkey); +# define EVP_PKEY_bits EVP_PKEY_get_bits +int EVP_PKEY_get_security_bits(const EVP_PKEY *pkey); +# define EVP_PKEY_security_bits EVP_PKEY_get_security_bits +int EVP_PKEY_get_size(const EVP_PKEY *pkey); +# define EVP_PKEY_size EVP_PKEY_get_size +int EVP_PKEY_can_sign(const EVP_PKEY *pkey); int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); -int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type); -# ifndef OPENSSL_NO_ENGINE +int EVP_PKEY_set_type_by_keymgmt(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); -# endif +# endif +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); +OSSL_DEPRECATEDIN_3_0 void *EVP_PKEY_get0(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); -# ifndef OPENSSL_NO_POLY1305 +# ifndef OPENSSL_NO_POLY1305 +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); -# endif -# ifndef OPENSSL_NO_SIPHASH +# endif +# ifndef OPENSSL_NO_SIPHASH +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); -# endif +# endif -# ifndef OPENSSL_NO_RSA struct rsa_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); -struct rsa_st *EVP_PKEY_get0_RSA(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct rsa_st *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DSA + +# ifndef OPENSSL_NO_DSA struct dsa_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); -struct dsa_st *EVP_PKEY_get0_DSA(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct dsa_st *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DH +# endif + +# ifndef OPENSSL_NO_DH struct dh_st; -int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); -struct dh_st *EVP_PKEY_get0_DH(EVP_PKEY *pkey); -struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); +OSSL_DEPRECATEDIN_3_0 const struct dh_st *EVP_PKEY_get0_DH(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); +# endif + +# ifndef OPENSSL_NO_EC struct ec_key_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); -struct ec_key_st *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct ec_key_st *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); -# endif +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ EVP_PKEY *EVP_PKEY_new(void); int EVP_PKEY_up_ref(EVP_PKEY *pkey); +EVP_PKEY *EVP_PKEY_dup(EVP_PKEY *pkey); void EVP_PKEY_free(EVP_PKEY *pkey); +const char *EVP_PKEY_get0_description(const EVP_PKEY *pkey); +const OSSL_PROVIDER *EVP_PKEY_get0_provider(const EVP_PKEY *key); EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, long length); -int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); +int i2d_PublicKey(const EVP_PKEY *a, unsigned char **pp); + +EVP_PKEY *d2i_PrivateKey_ex(int type, EVP_PKEY **a, const unsigned char **pp, + long length, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length); +EVP_PKEY *d2i_AutoPrivateKey_ex(EVP_PKEY **a, const unsigned char **pp, + long length, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, long length); -int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); +int i2d_PrivateKey(const EVP_PKEY *a, unsigned char **pp); + +int i2d_KeyParams(const EVP_PKEY *a, unsigned char **pp); +EVP_PKEY *d2i_KeyParams(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_KeyParams_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_KeyParams_bio(int type, EVP_PKEY **a, BIO *in); int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); -int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); +int EVP_PKEY_parameters_eq(const EVP_PKEY *a, const EVP_PKEY *b); +int EVP_PKEY_eq(const EVP_PKEY *a, const EVP_PKEY *b); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); +# endif int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); @@ -1063,14 +1427,43 @@ int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); +# ifndef OPENSSL_NO_STDIO +int EVP_PKEY_print_public_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_private_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_params_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +# endif int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); +int EVP_PKEY_get_default_digest_name(EVP_PKEY *pkey, + char *mdname, size_t mdname_sz); +int EVP_PKEY_digestsign_supports_digest(EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, + const char *name, const char *propq); -int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, - const unsigned char *pt, size_t ptlen); -size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *pkey, unsigned char **ppt); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * For backwards compatibility. Use EVP_PKEY_set1_encoded_public_key in + * preference + */ +# define EVP_PKEY_set1_tls_encodedpoint(pkey, pt, ptlen) \ + EVP_PKEY_set1_encoded_public_key((pkey), (pt), (ptlen)) +# endif -int EVP_CIPHER_type(const EVP_CIPHER *ctx); +int EVP_PKEY_set1_encoded_public_key(EVP_PKEY *pkey, + const unsigned char *pub, size_t publen); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * For backwards compatibility. Use EVP_PKEY_get1_encoded_public_key in + * preference + */ +# define EVP_PKEY_get1_tls_encodedpoint(pkey, ppt) \ + EVP_PKEY_get1_encoded_public_key((pkey), (ppt)) +# endif + +size_t EVP_PKEY_get1_encoded_public_key(EVP_PKEY *pkey, unsigned char **ppub); /* calls methods */ int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); @@ -1084,6 +1477,10 @@ int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); +int PKCS5_PBE_keyivgen_ex(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de, OSSL_LIB_CTX *libctx, + const char *propq); int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, const unsigned char *salt, int saltlen, int iter, int keylen, unsigned char *out); @@ -1093,16 +1490,29 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); +int PKCS5_v2_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); #ifndef OPENSSL_NO_SCRYPT int EVP_PBE_scrypt(const char *pass, size_t passlen, const unsigned char *salt, size_t saltlen, uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, unsigned char *key, size_t keylen); +int EVP_PBE_scrypt_ex(const char *pass, size_t passlen, + const unsigned char *salt, size_t saltlen, + uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, + unsigned char *key, size_t keylen, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *c, const EVP_MD *md, int en_de); +int PKCS5_v2_scrypt_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *c, const EVP_MD *md, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); #endif void PKCS5_PBE_add(void); @@ -1110,6 +1520,10 @@ void PKCS5_PBE_add(void); int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); +int EVP_PBE_CipherInit_ex(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, + ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); + /* PBE type */ /* Can appear as the outermost AlgorithmIdentifier */ @@ -1125,6 +1539,8 @@ int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, EVP_PBE_KEYGEN *keygen); int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, EVP_PBE_KEYGEN **pkeygen); +int EVP_PBE_find_ex(int type, int pbe_nid, int *pcnid, int *pmnid, + EVP_PBE_KEYGEN **pkeygen, EVP_PBE_KEYGEN_EX **pkeygen_ex); void EVP_PBE_cleanup(void); int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); @@ -1141,6 +1557,7 @@ int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); # define ASN1_PKEY_CTRL_SET1_TLS_ENCPT 0x9 # define ASN1_PKEY_CTRL_GET1_TLS_ENCPT 0xa +# define ASN1_PKEY_CTRL_CMS_IS_RI_TYPE_SUPPORTED 0xb int EVP_PKEY_asn1_get_count(void); const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); @@ -1163,7 +1580,7 @@ void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, int (*pub_decode) (EVP_PKEY *pk, - X509_PUBKEY *pub), + const X509_PUBKEY *pub), int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk), int (*pub_cmp) (const EVP_PKEY *a, @@ -1207,13 +1624,13 @@ void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, - void *asn, - X509_ALGOR *a, - ASN1_BIT_STRING *sig, + const void *data, + const X509_ALGOR *a, + const ASN1_BIT_STRING *sig, EVP_PKEY *pkey), int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, - void *asn, + const void *data, X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig)); @@ -1254,17 +1671,31 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, int (*pkey_security_bits) (const EVP_PKEY *pk)); +int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); + +int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, const void *id, int len); +int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id); +int EVP_PKEY_CTX_get1_id_len(EVP_PKEY_CTX *ctx, size_t *id_len); + +int EVP_PKEY_CTX_set_kem_op(EVP_PKEY_CTX *ctx, const char *op); + +const char *EVP_PKEY_get0_type_name(const EVP_PKEY *key); + # define EVP_PKEY_OP_UNDEFINED 0 # define EVP_PKEY_OP_PARAMGEN (1<<1) # define EVP_PKEY_OP_KEYGEN (1<<2) -# define EVP_PKEY_OP_SIGN (1<<3) -# define EVP_PKEY_OP_VERIFY (1<<4) -# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) -# define EVP_PKEY_OP_SIGNCTX (1<<6) -# define EVP_PKEY_OP_VERIFYCTX (1<<7) -# define EVP_PKEY_OP_ENCRYPT (1<<8) -# define EVP_PKEY_OP_DECRYPT (1<<9) -# define EVP_PKEY_OP_DERIVE (1<<10) +# define EVP_PKEY_OP_FROMDATA (1<<3) +# define EVP_PKEY_OP_SIGN (1<<4) +# define EVP_PKEY_OP_VERIFY (1<<5) +# define EVP_PKEY_OP_VERIFYRECOVER (1<<6) +# define EVP_PKEY_OP_SIGNCTX (1<<7) +# define EVP_PKEY_OP_VERIFYCTX (1<<8) +# define EVP_PKEY_OP_ENCRYPT (1<<9) +# define EVP_PKEY_OP_DECRYPT (1<<10) +# define EVP_PKEY_OP_DERIVE (1<<11) +# define EVP_PKEY_OP_ENCAPSULATE (1<<12) +# define EVP_PKEY_OP_DECAPSULATE (1<<13) # define EVP_PKEY_OP_TYPE_SIG \ (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ @@ -1277,44 +1708,32 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, (EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT | EVP_PKEY_OP_DERIVE) # define EVP_PKEY_OP_TYPE_GEN \ - (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) + (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) -# define EVP_PKEY_CTX_set_signature_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_MD, 0, (void *)(md)) -# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_GET_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_mac_key(ctx, key, len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)(key)) +int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, const unsigned char *key, + int keylen); # define EVP_PKEY_CTRL_MD 1 # define EVP_PKEY_CTRL_PEER_KEY 2 - -# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 -# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 - -# define EVP_PKEY_CTRL_PKCS7_SIGN 5 - # define EVP_PKEY_CTRL_SET_MAC_KEY 6 - # define EVP_PKEY_CTRL_DIGESTINIT 7 - /* Used by GOST key encryption in TLS */ # define EVP_PKEY_CTRL_SET_IV 8 - -# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 -# define EVP_PKEY_CTRL_CMS_DECRYPT 10 -# define EVP_PKEY_CTRL_CMS_SIGN 11 - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 +# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 +# define EVP_PKEY_CTRL_PKCS7_SIGN 5 +# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 +# define EVP_PKEY_CTRL_CMS_DECRYPT 10 +# define EVP_PKEY_CTRL_CMS_SIGN 11 +# endif # define EVP_PKEY_CTRL_CIPHER 12 - # define EVP_PKEY_CTRL_GET_MD 13 - # define EVP_PKEY_CTRL_SET_DIGEST_SIZE 14 +# define EVP_PKEY_CTRL_SET1_ID 15 +# define EVP_PKEY_CTRL_GET1_ID 16 +# define EVP_PKEY_CTRL_GET1_ID_LEN 17 # define EVP_PKEY_ALG_CTRL 0x1000 @@ -1323,23 +1742,53 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, * Method handles all operations: don't assume any digest related defaults. */ # define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); +OSSL_DEPRECATEDIN_3_0 EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, + const EVP_PKEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, + const EVP_PKEY_METHOD *src); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 size_t EVP_PKEY_meth_get_count(void); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); +# endif -const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); -EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); -void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, - const EVP_PKEY_METHOD *meth); -void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); -void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); -size_t EVP_PKEY_meth_get_count(void); -const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); +EVP_KEYMGMT *EVP_KEYMGMT_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_KEYMGMT_up_ref(EVP_KEYMGMT *keymgmt); +void EVP_KEYMGMT_free(EVP_KEYMGMT *keymgmt); +const OSSL_PROVIDER *EVP_KEYMGMT_get0_provider(const EVP_KEYMGMT *keymgmt); +const char *EVP_KEYMGMT_get0_name(const EVP_KEYMGMT *keymgmt); +const char *EVP_KEYMGMT_get0_description(const EVP_KEYMGMT *keymgmt); +int EVP_KEYMGMT_is_a(const EVP_KEYMGMT *keymgmt, const char *name); +void EVP_KEYMGMT_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEYMGMT *keymgmt, void *arg), + void *arg); +int EVP_KEYMGMT_names_do_all(const EVP_KEYMGMT *keymgmt, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_KEYMGMT_gettable_params(const EVP_KEYMGMT *keymgmt); +const OSSL_PARAM *EVP_KEYMGMT_settable_params(const EVP_KEYMGMT *keymgmt); +const OSSL_PARAM *EVP_KEYMGMT_gen_settable_params(const EVP_KEYMGMT *keymgmt); EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_from_name(OSSL_LIB_CTX *libctx, + const char *name, + const char *propquery); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_from_pkey(OSSL_LIB_CTX *libctx, + EVP_PKEY *pkey, const char *propquery); +EVP_PKEY_CTX *EVP_PKEY_CTX_dup(const EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_is_a(EVP_PKEY_CTX *ctx, const char *keytype); +int EVP_PKEY_CTX_get_params(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); +const OSSL_PARAM *EVP_PKEY_CTX_gettable_params(const EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_set_params(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params); +const OSSL_PARAM *EVP_PKEY_CTX_settable_params(const EVP_PKEY_CTX *ctx); int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, int cmd, int p1, void *p2); int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, @@ -1357,9 +1806,16 @@ void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key, int keylen); +EVP_PKEY *EVP_PKEY_new_raw_private_key_ex(OSSL_LIB_CTX *libctx, + const char *keytype, + const char *propq, + const unsigned char *priv, size_t len); EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e, const unsigned char *priv, size_t len); +EVP_PKEY *EVP_PKEY_new_raw_public_key_ex(OSSL_LIB_CTX *libctx, + const char *keytype, const char *propq, + const unsigned char *pub, size_t len); EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e, const unsigned char *pub, size_t len); @@ -1368,11 +1824,14 @@ int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, size_t *len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv, size_t len, const EVP_CIPHER *cipher); +# endif void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); +void *EVP_PKEY_CTX_get_data(const EVP_PKEY_CTX *ctx); EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); @@ -1380,285 +1839,333 @@ EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); +void EVP_SIGNATURE_free(EVP_SIGNATURE *signature); +int EVP_SIGNATURE_up_ref(EVP_SIGNATURE *signature); +OSSL_PROVIDER *EVP_SIGNATURE_get0_provider(const EVP_SIGNATURE *signature); +EVP_SIGNATURE *EVP_SIGNATURE_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_SIGNATURE_is_a(const EVP_SIGNATURE *signature, const char *name); +const char *EVP_SIGNATURE_get0_name(const EVP_SIGNATURE *signature); +const char *EVP_SIGNATURE_get0_description(const EVP_SIGNATURE *signature); +void EVP_SIGNATURE_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_SIGNATURE *signature, + void *data), + void *data); +int EVP_SIGNATURE_names_do_all(const EVP_SIGNATURE *signature, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_SIGNATURE_gettable_ctx_params(const EVP_SIGNATURE *sig); +const OSSL_PARAM *EVP_SIGNATURE_settable_ctx_params(const EVP_SIGNATURE *sig); + +void EVP_ASYM_CIPHER_free(EVP_ASYM_CIPHER *cipher); +int EVP_ASYM_CIPHER_up_ref(EVP_ASYM_CIPHER *cipher); +OSSL_PROVIDER *EVP_ASYM_CIPHER_get0_provider(const EVP_ASYM_CIPHER *cipher); +EVP_ASYM_CIPHER *EVP_ASYM_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_ASYM_CIPHER_is_a(const EVP_ASYM_CIPHER *cipher, const char *name); +const char *EVP_ASYM_CIPHER_get0_name(const EVP_ASYM_CIPHER *cipher); +const char *EVP_ASYM_CIPHER_get0_description(const EVP_ASYM_CIPHER *cipher); +void EVP_ASYM_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_ASYM_CIPHER *cipher, + void *arg), + void *arg); +int EVP_ASYM_CIPHER_names_do_all(const EVP_ASYM_CIPHER *cipher, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_ASYM_CIPHER_gettable_ctx_params(const EVP_ASYM_CIPHER *ciph); +const OSSL_PARAM *EVP_ASYM_CIPHER_settable_ctx_params(const EVP_ASYM_CIPHER *ciph); + +void EVP_KEM_free(EVP_KEM *wrap); +int EVP_KEM_up_ref(EVP_KEM *wrap); +OSSL_PROVIDER *EVP_KEM_get0_provider(const EVP_KEM *wrap); +EVP_KEM *EVP_KEM_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_KEM_is_a(const EVP_KEM *wrap, const char *name); +const char *EVP_KEM_get0_name(const EVP_KEM *wrap); +const char *EVP_KEM_get0_description(const EVP_KEM *wrap); +void EVP_KEM_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEM *wrap, void *arg), void *arg); +int EVP_KEM_names_do_all(const EVP_KEM *wrap, + void (*fn)(const char *name, void *data), void *data); +const OSSL_PARAM *EVP_KEM_gettable_ctx_params(const EVP_KEM *kem); +const OSSL_PARAM *EVP_KEM_settable_ctx_params(const EVP_KEM *kem); + int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_sign_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, const unsigned char *tbs, size_t tbslen); int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs, size_t tbslen); int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_recover_init_ex(EVP_PKEY_CTX *ctx, + const OSSL_PARAM params[]); int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, unsigned char *rout, size_t *routlen, const unsigned char *sig, size_t siglen); int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_encrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen); int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_decrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen); int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_derive_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_derive_set_peer_ex(EVP_PKEY_CTX *ctx, EVP_PKEY *peer, + int validate_peer); int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); +int EVP_PKEY_encapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_encapsulate(EVP_PKEY_CTX *ctx, + unsigned char *wrappedkey, size_t *wrappedkeylen, + unsigned char *genkey, size_t *genkeylen); +int EVP_PKEY_decapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_decapsulate(EVP_PKEY_CTX *ctx, + unsigned char *unwrapped, size_t *unwrappedlen, + const unsigned char *wrapped, size_t wrappedlen); + typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); +int EVP_PKEY_fromdata_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_fromdata(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey, int selection, + OSSL_PARAM param[]); +const OSSL_PARAM *EVP_PKEY_fromdata_settable(EVP_PKEY_CTX *ctx, int selection); + +int EVP_PKEY_todata(const EVP_PKEY *pkey, int selection, OSSL_PARAM **params); +int EVP_PKEY_export(const EVP_PKEY *pkey, int selection, + OSSL_CALLBACK *export_cb, void *export_cbarg); + +const OSSL_PARAM *EVP_PKEY_gettable_params(const EVP_PKEY *pkey); +int EVP_PKEY_get_params(const EVP_PKEY *pkey, OSSL_PARAM params[]); +int EVP_PKEY_get_int_param(const EVP_PKEY *pkey, const char *key_name, + int *out); +int EVP_PKEY_get_size_t_param(const EVP_PKEY *pkey, const char *key_name, + size_t *out); +int EVP_PKEY_get_bn_param(const EVP_PKEY *pkey, const char *key_name, + BIGNUM **bn); +int EVP_PKEY_get_utf8_string_param(const EVP_PKEY *pkey, const char *key_name, + char *str, size_t max_buf_sz, size_t *out_sz); +int EVP_PKEY_get_octet_string_param(const EVP_PKEY *pkey, const char *key_name, + unsigned char *buf, size_t max_buf_sz, + size_t *out_sz); + +const OSSL_PARAM *EVP_PKEY_settable_params(const EVP_PKEY *pkey); +int EVP_PKEY_set_params(EVP_PKEY *pkey, OSSL_PARAM params[]); +int EVP_PKEY_set_int_param(EVP_PKEY *pkey, const char *key_name, int in); +int EVP_PKEY_set_size_t_param(EVP_PKEY *pkey, const char *key_name, size_t in); +int EVP_PKEY_set_bn_param(EVP_PKEY *pkey, const char *key_name, + const BIGNUM *bn); +int EVP_PKEY_set_utf8_string_param(EVP_PKEY *pkey, const char *key_name, + const char *str); +int EVP_PKEY_set_octet_string_param(EVP_PKEY *pkey, const char *key_name, + const unsigned char *buf, size_t bsize); + +int EVP_PKEY_get_ec_point_conv_form(const EVP_PKEY *pkey); +int EVP_PKEY_get_field_type(const EVP_PKEY *pkey); + +EVP_PKEY *EVP_PKEY_Q_keygen(OSSL_LIB_CTX *libctx, const char *propq, + const char *type, ...); int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_generate(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_check(EVP_PKEY_CTX *ctx); int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_public_check_quick(EVP_PKEY_CTX *ctx); int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_param_check_quick(EVP_PKEY_CTX *ctx); +int EVP_PKEY_private_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_pairwise_check(EVP_PKEY_CTX *ctx); + +# define EVP_PKEY_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EVP_PKEY, l, p, newf, dupf, freef) +int EVP_PKEY_set_ex_data(EVP_PKEY *key, int idx, void *arg); +void *EVP_PKEY_get_ex_data(const EVP_PKEY *key, int idx); void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); - -void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, - int (*init) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, - int (*copy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, - void (*cleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, - int (*paramgen_init) (EVP_PKEY_CTX *ctx), - int (*paramgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, - int (*keygen_init) (EVP_PKEY_CTX *ctx), - int (*keygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, - int (*sign_init) (EVP_PKEY_CTX *ctx), - int (*sign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, - int (*verify_init) (EVP_PKEY_CTX *ctx), - int (*verify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, - int (*verify_recover_init) (EVP_PKEY_CTX - *ctx), - int (*verify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, - int (*signctx_init) (EVP_PKEY_CTX *ctx, +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, + int (*init) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_copy + (EVP_PKEY_METHOD *pmeth, int (*copy) (EVP_PKEY_CTX *dst, + const EVP_PKEY_CTX *src)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_cleanup + (EVP_PKEY_METHOD *pmeth, void (*cleanup) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_paramgen + (EVP_PKEY_METHOD *pmeth, int (*paramgen_init) (EVP_PKEY_CTX *ctx), + int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_keygen + (EVP_PKEY_METHOD *pmeth, int (*keygen_init) (EVP_PKEY_CTX *ctx), + int (*keygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_sign + (EVP_PKEY_METHOD *pmeth, int (*sign_init) (EVP_PKEY_CTX *ctx), + int (*sign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verify + (EVP_PKEY_METHOD *pmeth, int (*verify_init) (EVP_PKEY_CTX *ctx), + int (*verify) (EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verify_recover + (EVP_PKEY_METHOD *pmeth, int (*verify_recover_init) (EVP_PKEY_CTX *ctx), + int (*verify_recover) (EVP_PKEY_CTX *ctx, unsigned char *sig, + size_t *siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_signctx + (EVP_PKEY_METHOD *pmeth, int (*signctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*signctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verifyctx + (EVP_PKEY_METHOD *pmeth, int (*verifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), - int (*signctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, - int (*verifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*verifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, + int (*verifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_encrypt + (EVP_PKEY_METHOD *pmeth, int (*encrypt_init) (EVP_PKEY_CTX *ctx), + int (*encryptfn) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_decrypt + (EVP_PKEY_METHOD *pmeth, int (*decrypt_init) (EVP_PKEY_CTX *ctx), + int (*decrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_derive + (EVP_PKEY_METHOD *pmeth, int (*derive_init) (EVP_PKEY_CTX *ctx), + int (*derive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_ctrl + (EVP_PKEY_METHOD *pmeth, int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (*ctrl_str) (EVP_PKEY_CTX *ctx, const char *type, const char *value)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestsign + (EVP_PKEY_METHOD *pmeth, + int (*digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestverify + (EVP_PKEY_METHOD *pmeth, + int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_public_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_param_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digest_custom + (EVP_PKEY_METHOD *pmeth, int (*digest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_init + (const EVP_PKEY_METHOD *pmeth, int (**pinit) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_copy + (const EVP_PKEY_METHOD *pmeth, int (**pcopy) (EVP_PKEY_CTX *dst, + const EVP_PKEY_CTX *src)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_cleanup + (const EVP_PKEY_METHOD *pmeth, void (**pcleanup) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_paramgen + (const EVP_PKEY_METHOD *pmeth, int (**pparamgen_init) (EVP_PKEY_CTX *ctx), + int (**pparamgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_keygen + (const EVP_PKEY_METHOD *pmeth, int (**pkeygen_init) (EVP_PKEY_CTX *ctx), + int (**pkeygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_sign + (const EVP_PKEY_METHOD *pmeth, int (**psign_init) (EVP_PKEY_CTX *ctx), + int (**psign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify + (const EVP_PKEY_METHOD *pmeth, int (**pverify_init) (EVP_PKEY_CTX *ctx), + int (**pverify) (EVP_PKEY_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify_recover + (const EVP_PKEY_METHOD *pmeth, + int (**pverify_recover_init) (EVP_PKEY_CTX *ctx), + int (**pverify_recover) (EVP_PKEY_CTX *ctx, unsigned char *sig, + size_t *siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_signctx + (const EVP_PKEY_METHOD *pmeth, + int (**psignctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), + int (**psignctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verifyctx + (const EVP_PKEY_METHOD *pmeth, + int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), + int (**pverifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, + int siglen, EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_encrypt + (const EVP_PKEY_METHOD *pmeth, int (**pencrypt_init) (EVP_PKEY_CTX *ctx), + int (**pencryptfn) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_decrypt + (const EVP_PKEY_METHOD *pmeth, int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), + int (**pdecrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_derive + (const EVP_PKEY_METHOD *pmeth, int (**pderive_init) (EVP_PKEY_CTX *ctx), + int (**pderive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_ctrl + (const EVP_PKEY_METHOD *pmeth, + int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, void *p2), + int (**pctrl_str) (EVP_PKEY_CTX *ctx, const char *type, + const char *value)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestsign + (const EVP_PKEY_METHOD *pmeth, + int (**digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestverify + (const EVP_PKEY_METHOD *pmeth, + int (**digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_public_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_param_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digest_custom + (const EVP_PKEY_METHOD *pmeth, + int (**pdigest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)); +# endif -void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, - int (*encrypt_init) (EVP_PKEY_CTX *ctx), - int (*encryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); +void EVP_KEYEXCH_free(EVP_KEYEXCH *exchange); +int EVP_KEYEXCH_up_ref(EVP_KEYEXCH *exchange); +EVP_KEYEXCH *EVP_KEYEXCH_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +OSSL_PROVIDER *EVP_KEYEXCH_get0_provider(const EVP_KEYEXCH *exchange); +int EVP_KEYEXCH_is_a(const EVP_KEYEXCH *keyexch, const char *name); +const char *EVP_KEYEXCH_get0_name(const EVP_KEYEXCH *keyexch); +const char *EVP_KEYEXCH_get0_description(const EVP_KEYEXCH *keyexch); +void EVP_KEYEXCH_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEYEXCH *keyexch, void *data), + void *data); +int EVP_KEYEXCH_names_do_all(const EVP_KEYEXCH *keyexch, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_KEYEXCH_gettable_ctx_params(const EVP_KEYEXCH *keyexch); +const OSSL_PARAM *EVP_KEYEXCH_settable_ctx_params(const EVP_KEYEXCH *keyexch); -void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, - int (*decrypt_init) (EVP_PKEY_CTX *ctx), - int (*decrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, - int (*derive_init) (EVP_PKEY_CTX *ctx), - int (*derive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, - int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (*ctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_PKEY_meth_set_digestsign(EVP_PKEY_METHOD *pmeth, - int (*digestsign) (EVP_MD_CTX *ctx, - unsigned char *sig, - size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_digestverify(EVP_PKEY_METHOD *pmeth, - int (*digestverify) (EVP_MD_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth, - int (*digest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth, - int (**pinit) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth, - int (**pcopy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth, - void (**pcleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_get_paramgen(const EVP_PKEY_METHOD *pmeth, - int (**pparamgen_init) (EVP_PKEY_CTX *ctx), - int (**pparamgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_keygen(const EVP_PKEY_METHOD *pmeth, - int (**pkeygen_init) (EVP_PKEY_CTX *ctx), - int (**pkeygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_sign(const EVP_PKEY_METHOD *pmeth, - int (**psign_init) (EVP_PKEY_CTX *ctx), - int (**psign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_verify(const EVP_PKEY_METHOD *pmeth, - int (**pverify_init) (EVP_PKEY_CTX *ctx), - int (**pverify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_verify_recover(const EVP_PKEY_METHOD *pmeth, - int (**pverify_recover_init) (EVP_PKEY_CTX - *ctx), - int (**pverify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_signctx(const EVP_PKEY_METHOD *pmeth, - int (**psignctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (**psignctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_verifyctx(const EVP_PKEY_METHOD *pmeth, - int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (**pverifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_encrypt(const EVP_PKEY_METHOD *pmeth, - int (**pencrypt_init) (EVP_PKEY_CTX *ctx), - int (**pencryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_get_decrypt(const EVP_PKEY_METHOD *pmeth, - int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), - int (**pdecrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_get_derive(const EVP_PKEY_METHOD *pmeth, - int (**pderive_init) (EVP_PKEY_CTX *ctx), - int (**pderive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth, - int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (**pctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_PKEY_meth_get_digestsign(EVP_PKEY_METHOD *pmeth, - int (**digestsign) (EVP_MD_CTX *ctx, - unsigned char *sig, - size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_digestverify(EVP_PKEY_METHOD *pmeth, - int (**digestverify) (EVP_MD_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth, - int (**pdigest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); void EVP_add_alg_module(void); +int EVP_PKEY_CTX_set_group_name(EVP_PKEY_CTX *ctx, const char *name); +int EVP_PKEY_CTX_get_group_name(EVP_PKEY_CTX *ctx, char *name, size_t namelen); +int EVP_PKEY_get_group_name(const EVP_PKEY *pkey, char *name, size_t name_sz, + size_t *gname_len); + +OSSL_LIB_CTX *EVP_PKEY_CTX_get0_libctx(EVP_PKEY_CTX *ctx); +const char *EVP_PKEY_CTX_get0_propq(const EVP_PKEY_CTX *ctx); +const OSSL_PROVIDER *EVP_PKEY_CTX_get0_provider(const EVP_PKEY_CTX *ctx); # ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/evperr.h b/deps/openssl/android/x86/usr/local/include/openssl/evperr.h index b4ea90ae..a5053f6c 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/evperr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/evperr.h @@ -2,190 +2,117 @@ * Generated by util/mkerr.pl DO NOT EDIT * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EVPERR_H -# define HEADER_EVPERR_H +#ifndef OPENSSL_EVPERR_H +# define OPENSSL_EVPERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EVP_strings(void); -/* - * EVP function codes. - */ -# define EVP_F_AESNI_INIT_KEY 165 -# define EVP_F_AESNI_XTS_INIT_KEY 207 -# define EVP_F_AES_GCM_CTRL 196 -# define EVP_F_AES_INIT_KEY 133 -# define EVP_F_AES_OCB_CIPHER 169 -# define EVP_F_AES_T4_INIT_KEY 178 -# define EVP_F_AES_T4_XTS_INIT_KEY 208 -# define EVP_F_AES_WRAP_CIPHER 170 -# define EVP_F_AES_XTS_INIT_KEY 209 -# define EVP_F_ALG_MODULE_INIT 177 -# define EVP_F_ARIA_CCM_INIT_KEY 175 -# define EVP_F_ARIA_GCM_CTRL 197 -# define EVP_F_ARIA_GCM_INIT_KEY 176 -# define EVP_F_ARIA_INIT_KEY 185 -# define EVP_F_B64_NEW 198 -# define EVP_F_CAMELLIA_INIT_KEY 159 -# define EVP_F_CHACHA20_POLY1305_CTRL 182 -# define EVP_F_CMLL_T4_INIT_KEY 179 -# define EVP_F_DES_EDE3_WRAP_CIPHER 171 -# define EVP_F_DO_SIGVER_INIT 161 -# define EVP_F_ENC_NEW 199 -# define EVP_F_EVP_CIPHERINIT_EX 123 -# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 204 -# define EVP_F_EVP_CIPHER_CTX_COPY 163 -# define EVP_F_EVP_CIPHER_CTX_CTRL 124 -# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 -# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 205 -# define EVP_F_EVP_DECRYPTFINAL_EX 101 -# define EVP_F_EVP_DECRYPTUPDATE 166 -# define EVP_F_EVP_DIGESTFINALXOF 174 -# define EVP_F_EVP_DIGESTINIT_EX 128 -# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 219 -# define EVP_F_EVP_ENCRYPTFINAL_EX 127 -# define EVP_F_EVP_ENCRYPTUPDATE 167 -# define EVP_F_EVP_MD_CTX_COPY_EX 110 -# define EVP_F_EVP_MD_SIZE 162 -# define EVP_F_EVP_OPENINIT 102 -# define EVP_F_EVP_PBE_ALG_ADD 115 -# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 -# define EVP_F_EVP_PBE_CIPHERINIT 116 -# define EVP_F_EVP_PBE_SCRYPT 181 -# define EVP_F_EVP_PKCS82PKEY 111 -# define EVP_F_EVP_PKEY2PKCS8 113 -# define EVP_F_EVP_PKEY_ASN1_ADD0 188 -# define EVP_F_EVP_PKEY_CHECK 186 -# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 -# define EVP_F_EVP_PKEY_CTX_CTRL 137 -# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 -# define EVP_F_EVP_PKEY_CTX_DUP 156 -# define EVP_F_EVP_PKEY_CTX_MD 168 -# define EVP_F_EVP_PKEY_DECRYPT 104 -# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 -# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 -# define EVP_F_EVP_PKEY_DERIVE 153 -# define EVP_F_EVP_PKEY_DERIVE_INIT 154 -# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 -# define EVP_F_EVP_PKEY_ENCRYPT 105 -# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 -# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 -# define EVP_F_EVP_PKEY_GET0_DH 119 -# define EVP_F_EVP_PKEY_GET0_DSA 120 -# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 -# define EVP_F_EVP_PKEY_GET0_HMAC 183 -# define EVP_F_EVP_PKEY_GET0_POLY1305 184 -# define EVP_F_EVP_PKEY_GET0_RSA 121 -# define EVP_F_EVP_PKEY_GET0_SIPHASH 172 -# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 202 -# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 203 -# define EVP_F_EVP_PKEY_KEYGEN 146 -# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 -# define EVP_F_EVP_PKEY_METH_ADD0 194 -# define EVP_F_EVP_PKEY_METH_NEW 195 -# define EVP_F_EVP_PKEY_NEW 106 -# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 193 -# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 191 -# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 192 -# define EVP_F_EVP_PKEY_PARAMGEN 148 -# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 -# define EVP_F_EVP_PKEY_PARAM_CHECK 189 -# define EVP_F_EVP_PKEY_PUBLIC_CHECK 190 -# define EVP_F_EVP_PKEY_SET1_ENGINE 187 -# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 206 -# define EVP_F_EVP_PKEY_SIGN 140 -# define EVP_F_EVP_PKEY_SIGN_INIT 141 -# define EVP_F_EVP_PKEY_VERIFY 142 -# define EVP_F_EVP_PKEY_VERIFY_INIT 143 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 -# define EVP_F_EVP_SIGNFINAL 107 -# define EVP_F_EVP_VERIFYFINAL 108 -# define EVP_F_INT_CTX_NEW 157 -# define EVP_F_OK_NEW 200 -# define EVP_F_PKCS5_PBE_KEYIVGEN 117 -# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 -# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 -# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 180 -# define EVP_F_PKEY_SET_TYPE 158 -# define EVP_F_RC2_MAGIC_TO_METH 109 -# define EVP_F_RC5_CTRL 125 -# define EVP_F_R_32_12_16_INIT_KEY 242 -# define EVP_F_S390X_AES_GCM_CTRL 201 -# define EVP_F_UPDATE 173 /* * EVP reason codes. */ # define EVP_R_AES_KEY_SETUP_FAILED 143 # define EVP_R_ARIA_KEY_SETUP_FAILED 176 +# define EVP_R_BAD_ALGORITHM_NAME 200 # define EVP_R_BAD_DECRYPT 100 # define EVP_R_BAD_KEY_LENGTH 195 # define EVP_R_BUFFER_TOO_SMALL 155 +# define EVP_R_CACHE_CONSTANTS_FAILED 225 # define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 +# define EVP_R_CANNOT_GET_PARAMETERS 197 +# define EVP_R_CANNOT_SET_PARAMETERS 198 +# define EVP_R_CIPHER_NOT_GCM_MODE 184 # define EVP_R_CIPHER_PARAMETER_ERROR 122 # define EVP_R_COMMAND_NOT_SUPPORTED 147 +# define EVP_R_CONFLICTING_ALGORITHM_NAME 201 # define EVP_R_COPY_ERROR 173 # define EVP_R_CTRL_NOT_IMPLEMENTED 132 # define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 # define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 # define EVP_R_DECODE_ERROR 114 +# define EVP_R_DEFAULT_QUERY_PARSE_ERROR 210 # define EVP_R_DIFFERENT_KEY_TYPES 101 # define EVP_R_DIFFERENT_PARAMETERS 153 # define EVP_R_ERROR_LOADING_SECTION 165 -# define EVP_R_ERROR_SETTING_FIPS_MODE 166 # define EVP_R_EXPECTING_AN_HMAC_KEY 174 # define EVP_R_EXPECTING_AN_RSA_KEY 127 # define EVP_R_EXPECTING_A_DH_KEY 128 # define EVP_R_EXPECTING_A_DSA_KEY 129 +# define EVP_R_EXPECTING_A_ECX_KEY 219 # define EVP_R_EXPECTING_A_EC_KEY 142 # define EVP_R_EXPECTING_A_POLY1305_KEY 164 # define EVP_R_EXPECTING_A_SIPHASH_KEY 175 -# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 +# define EVP_R_FINAL_ERROR 188 +# define EVP_R_GENERATE_ERROR 214 # define EVP_R_GET_RAW_KEY_FAILED 182 # define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 +# define EVP_R_INACCESSIBLE_DOMAIN_PARAMETERS 204 +# define EVP_R_INACCESSIBLE_KEY 203 # define EVP_R_INITIALIZATION_ERROR 134 # define EVP_R_INPUT_NOT_INITIALIZED 111 +# define EVP_R_INVALID_CUSTOM_LENGTH 185 # define EVP_R_INVALID_DIGEST 152 -# define EVP_R_INVALID_FIPS_MODE 168 # define EVP_R_INVALID_IV_LENGTH 194 # define EVP_R_INVALID_KEY 163 # define EVP_R_INVALID_KEY_LENGTH 130 +# define EVP_R_INVALID_LENGTH 221 +# define EVP_R_INVALID_NULL_ALGORITHM 218 # define EVP_R_INVALID_OPERATION 148 -# define EVP_R_KEYGEN_FAILURE 120 +# define EVP_R_INVALID_PROVIDER_FUNCTIONS 193 +# define EVP_R_INVALID_SALT_LENGTH 186 +# define EVP_R_INVALID_SECRET_LENGTH 223 +# define EVP_R_INVALID_SEED_LENGTH 220 +# define EVP_R_INVALID_VALUE 222 +# define EVP_R_KEYMGMT_EXPORT_FAILURE 205 # define EVP_R_KEY_SETUP_FAILED 180 +# define EVP_R_LOCKING_NOT_SUPPORTED 213 # define EVP_R_MEMORY_LIMIT_EXCEEDED 172 # define EVP_R_MESSAGE_DIGEST_IS_NULL 159 # define EVP_R_METHOD_NOT_SUPPORTED 144 # define EVP_R_MISSING_PARAMETERS 103 +# define EVP_R_NOT_ABLE_TO_COPY_CTX 190 # define EVP_R_NOT_XOF_OR_INVALID_LENGTH 178 # define EVP_R_NO_CIPHER_SET 131 # define EVP_R_NO_DEFAULT_DIGEST 158 # define EVP_R_NO_DIGEST_SET 139 +# define EVP_R_NO_IMPORT_FUNCTION 206 +# define EVP_R_NO_KEYMGMT_AVAILABLE 199 +# define EVP_R_NO_KEYMGMT_PRESENT 196 # define EVP_R_NO_KEY_SET 154 # define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_NULL_MAC_PKEY_CTX 208 # define EVP_R_ONLY_ONESHOT_SUPPORTED 177 +# define EVP_R_OPERATION_NOT_INITIALIZED 151 # define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 -# define EVP_R_OPERATON_NOT_INITIALIZED 151 -# define EVP_R_OUTPUT_WOULD_OVERFLOW 184 +# define EVP_R_OUTPUT_WOULD_OVERFLOW 202 +# define EVP_R_PARAMETER_TOO_LARGE 187 # define EVP_R_PARTIALLY_OVERLAPPING 162 # define EVP_R_PBKDF2_ERROR 181 # define EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 179 # define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 # define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 # define EVP_R_PUBLIC_KEY_NOT_RSA 106 +# define EVP_R_SETTING_XOF_FAILED 227 +# define EVP_R_SET_DEFAULT_PROPERTY_FAILURE 209 +# define EVP_R_TOO_MANY_RECORDS 183 +# define EVP_R_UNABLE_TO_ENABLE_LOCKING 212 +# define EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE 215 +# define EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH 216 +# define EVP_R_UNABLE_TO_LOCK_CONTEXT 211 +# define EVP_R_UNABLE_TO_SET_CALLBACKS 217 # define EVP_R_UNKNOWN_CIPHER 160 # define EVP_R_UNKNOWN_DIGEST 161 +# define EVP_R_UNKNOWN_KEY_TYPE 207 # define EVP_R_UNKNOWN_OPTION 169 # define EVP_R_UNKNOWN_PBE_ALGORITHM 121 # define EVP_R_UNSUPPORTED_ALGORITHM 156 @@ -193,12 +120,15 @@ int ERR_load_EVP_strings(void); # define EVP_R_UNSUPPORTED_KEYLENGTH 123 # define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 # define EVP_R_UNSUPPORTED_KEY_SIZE 108 +# define EVP_R_UNSUPPORTED_KEY_TYPE 224 # define EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS 135 # define EVP_R_UNSUPPORTED_PRF 125 # define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 # define EVP_R_UNSUPPORTED_SALT_TYPE 126 +# define EVP_R_UPDATE_ERROR 189 # define EVP_R_WRAP_MODE_NOT_ALLOWED 170 # define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 -# define EVP_R_XTS_DUPLICATED_KEYS 183 +# define EVP_R_XTS_DATA_UNIT_IS_TOO_LARGE 191 +# define EVP_R_XTS_DUPLICATED_KEYS 192 #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/fips_names.h b/deps/openssl/android/x86/usr/local/include/openssl/fips_names.h new file mode 100644 index 00000000..5c77f6d6 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/fips_names.h @@ -0,0 +1,77 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPS_NAMES_H +# define OPENSSL_FIPS_NAMES_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Parameter names that the FIPS Provider defines + */ + +/* + * The calculated MAC of the module file (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_MODULE_MAC "module-mac" +/* + * A version number for the fips install process (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_VERSION "install-version" +/* + * The calculated MAC of the install status indicator (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_MAC "install-mac" +/* + * The install status indicator (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_STATUS "install-status" + +/* + * A boolean that determines if the FIPS conditional test errors result in + * the module entering an error state. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_CONDITIONAL_ERRORS "conditional-errors" + +/* + * A boolean that determines if the runtime FIPS security checks are performed. + * This is enabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_SECURITY_CHECKS "security-checks" + +/* + * A boolean that determines if the runtime FIPS check for TLS1_PRF EMS is performed. + * This is disabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" + +/* + * A boolean that determines if truncated digests can be used with Hash and HMAC + * DRBGs. FIPS 140-3 IG D.R disallows such use for efficiency rather than + * security reasons. + * This is disabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_FIPS_NAMES_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/fipskey.h b/deps/openssl/android/x86/usr/local/include/openssl/fipskey.h new file mode 100644 index 00000000..42ba014b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/fipskey.h @@ -0,0 +1,36 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/fipskey.h.in + * + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPSKEY_H +# define OPENSSL_FIPSKEY_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * The FIPS validation HMAC key, usable as an array initializer. + */ +#define FIPS_KEY_ELEMENTS \ + 0xf4, 0x55, 0x66, 0x50, 0xac, 0x31, 0xd3, 0x54, 0x61, 0x61, 0x0b, 0xac, 0x4e, 0xd8, 0x1b, 0x1a, 0x18, 0x1b, 0x2d, 0x8a, 0x43, 0xea, 0x28, 0x54, 0xcb, 0xae, 0x22, 0xca, 0x74, 0x56, 0x08, 0x13 + +/* + * The FIPS validation key, as a string. + */ +#define FIPS_KEY_STRING "f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/fipskey.h.in b/deps/openssl/android/x86/usr/local/include/openssl/fipskey.h.in new file mode 100644 index 00000000..56b947e8 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/fipskey.h.in @@ -0,0 +1,35 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPSKEY_H +# define OPENSSL_FIPSKEY_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * The FIPS validation HMAC key, usable as an array initializer. + */ +#define FIPS_KEY_ELEMENTS \ + {- join(', ', map { "0x$_" } unpack("(A2)*", $config{FIPSKEY})) -} + +/* + * The FIPS validation key, as a string. + */ +#define FIPS_KEY_STRING "{- $config{FIPSKEY} -}" + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/hmac.h b/deps/openssl/android/x86/usr/local/include/openssl/hmac.h index 458efc1d..f9e1bff3 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/hmac.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/hmac.h @@ -1,51 +1,62 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_HMAC_H -# define HEADER_HMAC_H +#ifndef OPENSSL_HMAC_H +# define OPENSSL_HMAC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_HMAC_H +# endif # include # include -# if OPENSSL_API_COMPAT < 0x10200000L -# define HMAC_MAX_MD_CBLOCK 128 /* Deprecated */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HMAC_MAX_MD_CBLOCK 200 /* Deprecated */ # endif -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -size_t HMAC_size(const HMAC_CTX *e); -HMAC_CTX *HMAC_CTX_new(void); -int HMAC_CTX_reset(HMAC_CTX *ctx); -void HMAC_CTX_free(HMAC_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 size_t HMAC_size(const HMAC_CTX *e); +OSSL_DEPRECATEDIN_3_0 HMAC_CTX *HMAC_CTX_new(void); +OSSL_DEPRECATEDIN_3_0 int HMAC_CTX_reset(HMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void HMAC_CTX_free(HMAC_CTX *ctx); +# endif +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur int HMAC_Init(HMAC_CTX *ctx, + const void *key, int len, + const EVP_MD *md); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +OSSL_DEPRECATEDIN_3_0 int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, + unsigned int *len); +OSSL_DEPRECATEDIN_3_0 __owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); +OSSL_DEPRECATEDIN_3_0 void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); +# endif -DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md)) - -/*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md, ENGINE *impl); -/*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, - size_t len); -/*__owur*/ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, - unsigned int *len); unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, - const unsigned char *d, size_t n, unsigned char *md, - unsigned int *md_len); -__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); + const unsigned char *data, size_t data_len, + unsigned char *md, unsigned int *md_len); -void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); -const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); - -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/http.h b/deps/openssl/android/x86/usr/local/include/openssl/http.h new file mode 100644 index 00000000..f7ab2142 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/http.h @@ -0,0 +1,109 @@ +/* + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Siemens AG 2018-2020 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_HTTP_H +# define OPENSSL_HTTP_H +# pragma once + +# include + +# include +# include +# include + + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_HTTP_NAME "http" +# define OSSL_HTTPS_NAME "https" +# define OSSL_HTTP_PREFIX OSSL_HTTP_NAME"://" +# define OSSL_HTTPS_PREFIX OSSL_HTTPS_NAME"://" +# define OSSL_HTTP_PORT "80" +# define OSSL_HTTPS_PORT "443" +# define OPENSSL_NO_PROXY "NO_PROXY" +# define OPENSSL_HTTP_PROXY "HTTP_PROXY" +# define OPENSSL_HTTPS_PROXY "HTTPS_PROXY" + +#define OSSL_HTTP_DEFAULT_MAX_LINE_LEN (4 * 1024) +#define OSSL_HTTP_DEFAULT_MAX_RESP_LEN (100 * 1024) + +/* Low-level HTTP API */ +OSSL_HTTP_REQ_CTX *OSSL_HTTP_REQ_CTX_new(BIO *wbio, BIO *rbio, int buf_size); +void OSSL_HTTP_REQ_CTX_free(OSSL_HTTP_REQ_CTX *rctx); +int OSSL_HTTP_REQ_CTX_set_request_line(OSSL_HTTP_REQ_CTX *rctx, int method_POST, + const char *server, const char *port, + const char *path); +int OSSL_HTTP_REQ_CTX_add1_header(OSSL_HTTP_REQ_CTX *rctx, + const char *name, const char *value); +int OSSL_HTTP_REQ_CTX_set_expected(OSSL_HTTP_REQ_CTX *rctx, + const char *content_type, int asn1, + int timeout, int keep_alive); +int OSSL_HTTP_REQ_CTX_set1_req(OSSL_HTTP_REQ_CTX *rctx, const char *content_type, + const ASN1_ITEM *it, const ASN1_VALUE *req); +int OSSL_HTTP_REQ_CTX_nbio(OSSL_HTTP_REQ_CTX *rctx); +int OSSL_HTTP_REQ_CTX_nbio_d2i(OSSL_HTTP_REQ_CTX *rctx, + ASN1_VALUE **pval, const ASN1_ITEM *it); +BIO *OSSL_HTTP_REQ_CTX_exchange(OSSL_HTTP_REQ_CTX *rctx); +BIO *OSSL_HTTP_REQ_CTX_get0_mem_bio(const OSSL_HTTP_REQ_CTX *rctx); +size_t OSSL_HTTP_REQ_CTX_get_resp_len(const OSSL_HTTP_REQ_CTX *rctx); +void OSSL_HTTP_REQ_CTX_set_max_response_length(OSSL_HTTP_REQ_CTX *rctx, + unsigned long len); +int OSSL_HTTP_is_alive(const OSSL_HTTP_REQ_CTX *rctx); + +/* High-level HTTP API */ +typedef BIO *(*OSSL_HTTP_bio_cb_t)(BIO *bio, void *arg, int connect, int detail); +OSSL_HTTP_REQ_CTX *OSSL_HTTP_open(const char *server, const char *port, + const char *proxy, const char *no_proxy, + int use_ssl, BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, int overall_timeout); +int OSSL_HTTP_proxy_connect(BIO *bio, const char *server, const char *port, + const char *proxyuser, const char *proxypass, + int timeout, BIO *bio_err, const char *prog); +int OSSL_HTTP_set1_request(OSSL_HTTP_REQ_CTX *rctx, const char *path, + const STACK_OF(CONF_VALUE) *headers, + const char *content_type, BIO *req, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout, int keep_alive); +BIO *OSSL_HTTP_exchange(OSSL_HTTP_REQ_CTX *rctx, char **redirection_url); +BIO *OSSL_HTTP_get(const char *url, const char *proxy, const char *no_proxy, + BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, const STACK_OF(CONF_VALUE) *headers, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout); +BIO *OSSL_HTTP_transfer(OSSL_HTTP_REQ_CTX **prctx, + const char *server, const char *port, + const char *path, int use_ssl, + const char *proxy, const char *no_proxy, + BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, const STACK_OF(CONF_VALUE) *headers, + const char *content_type, BIO *req, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout, int keep_alive); +int OSSL_HTTP_close(OSSL_HTTP_REQ_CTX *rctx, int ok); + +/* Auxiliary functions */ +int OSSL_parse_url(const char *url, char **pscheme, char **puser, char **phost, + char **pport, int *pport_num, + char **ppath, char **pquery, char **pfrag); +int OSSL_HTTP_parse_url(const char *url, int *pssl, char **puser, char **phost, + char **pport, int *pport_num, + char **ppath, char **pquery, char **pfrag); +const char *OSSL_HTTP_adapt_proxy(const char *proxy, const char *no_proxy, + const char *server, int use_ssl); + +# ifdef __cplusplus +} +# endif +#endif /* !defined(OPENSSL_HTTP_H) */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/httperr.h b/deps/openssl/android/x86/usr/local/include/openssl/httperr.h new file mode 100644 index 00000000..ee089592 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/httperr.h @@ -0,0 +1,55 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_HTTPERR_H +# define OPENSSL_HTTPERR_H +# pragma once + +# include +# include +# include + + + +/* + * HTTP reason codes. + */ +# define HTTP_R_ASN1_LEN_EXCEEDS_MAX_RESP_LEN 108 +# define HTTP_R_CONNECT_FAILURE 100 +# define HTTP_R_ERROR_PARSING_ASN1_LENGTH 109 +# define HTTP_R_ERROR_PARSING_CONTENT_LENGTH 119 +# define HTTP_R_ERROR_PARSING_URL 101 +# define HTTP_R_ERROR_RECEIVING 103 +# define HTTP_R_ERROR_SENDING 102 +# define HTTP_R_FAILED_READING_DATA 128 +# define HTTP_R_HEADER_PARSE_ERROR 126 +# define HTTP_R_INCONSISTENT_CONTENT_LENGTH 120 +# define HTTP_R_INVALID_PORT_NUMBER 123 +# define HTTP_R_INVALID_URL_PATH 125 +# define HTTP_R_INVALID_URL_SCHEME 124 +# define HTTP_R_MAX_RESP_LEN_EXCEEDED 117 +# define HTTP_R_MISSING_ASN1_ENCODING 110 +# define HTTP_R_MISSING_CONTENT_TYPE 121 +# define HTTP_R_MISSING_REDIRECT_LOCATION 111 +# define HTTP_R_RECEIVED_ERROR 105 +# define HTTP_R_RECEIVED_WRONG_HTTP_VERSION 106 +# define HTTP_R_REDIRECTION_FROM_HTTPS_TO_HTTP 112 +# define HTTP_R_REDIRECTION_NOT_ENABLED 116 +# define HTTP_R_RESPONSE_LINE_TOO_LONG 113 +# define HTTP_R_RESPONSE_PARSE_ERROR 104 +# define HTTP_R_RETRY_TIMEOUT 129 +# define HTTP_R_SERVER_CANCELED_CONNECTION 127 +# define HTTP_R_SOCK_NOT_SUPPORTED 122 +# define HTTP_R_STATUS_CODE_UNSUPPORTED 114 +# define HTTP_R_TLS_NOT_ENABLED 107 +# define HTTP_R_TOO_MANY_REDIRECTIONS 115 +# define HTTP_R_UNEXPECTED_CONTENT_TYPE 118 + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/idea.h b/deps/openssl/android/x86/usr/local/include/openssl/idea.h index 4334f3ea..1f9bb3b3 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/idea.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/idea.h @@ -1,64 +1,82 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_IDEA_H -# define HEADER_IDEA_H +#ifndef OPENSSL_IDEA_H +# define OPENSSL_IDEA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_IDEA_H +# endif # include # ifndef OPENSSL_NO_IDEA -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define IDEA_BLOCK 8 +# define IDEA_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int IDEA_INT; -# define IDEA_ENCRYPT 1 -# define IDEA_DECRYPT 0 - -# define IDEA_BLOCK 8 -# define IDEA_KEY_LENGTH 16 +# define IDEA_ENCRYPT 1 +# define IDEA_DECRYPT 0 typedef struct idea_key_st { IDEA_INT data[9][6]; } IDEA_KEY_SCHEDULE; +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *IDEA_options(void); +OSSL_DEPRECATEDIN_3_0 void IDEA_ecb_encrypt(const unsigned char *in, + unsigned char *out, + IDEA_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void IDEA_set_encrypt_key(const unsigned char *key, + IDEA_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, + IDEA_KEY_SCHEDULE *dk); +OSSL_DEPRECATEDIN_3_0 void IDEA_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int enc); +OSSL_DEPRECATEDIN_3_0 void IDEA_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void IDEA_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int *num); +OSSL_DEPRECATEDIN_3_0 void IDEA_encrypt(unsigned long *in, + IDEA_KEY_SCHEDULE *ks); +#endif -const char *IDEA_options(void); -void IDEA_ecb_encrypt(const unsigned char *in, unsigned char *out, - IDEA_KEY_SCHEDULE *ks); -void IDEA_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); -void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); -void IDEA_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int enc); -void IDEA_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num, int enc); -void IDEA_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num); -void IDEA_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define idea_options IDEA_options +# define idea_ecb_encrypt IDEA_ecb_encrypt +# define idea_set_encrypt_key IDEA_set_encrypt_key +# define idea_set_decrypt_key IDEA_set_decrypt_key +# define idea_cbc_encrypt IDEA_cbc_encrypt +# define idea_cfb64_encrypt IDEA_cfb64_encrypt +# define idea_ofb64_encrypt IDEA_ofb64_encrypt +# define idea_encrypt IDEA_encrypt +# endif -# if OPENSSL_API_COMPAT < 0x10100000L -# define idea_options IDEA_options -# define idea_ecb_encrypt IDEA_ecb_encrypt -# define idea_set_encrypt_key IDEA_set_encrypt_key -# define idea_set_decrypt_key IDEA_set_decrypt_key -# define idea_cbc_encrypt IDEA_cbc_encrypt -# define idea_cfb64_encrypt IDEA_cfb64_encrypt -# define idea_ofb64_encrypt IDEA_ofb64_encrypt -# define idea_encrypt IDEA_encrypt -# endif - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/kdf.h b/deps/openssl/android/x86/usr/local/include/openssl/kdf.h index 5abd4c37..0983230a 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/kdf.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/kdf.h @@ -1,19 +1,76 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_KDF_H -# define HEADER_KDF_H +#ifndef OPENSSL_KDF_H +# define OPENSSL_KDF_H +# pragma once -# include -#ifdef __cplusplus +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_KDF_H +# endif + +# include +# include +# include +# include + +# ifdef __cplusplus extern "C" { -#endif +# endif + +int EVP_KDF_up_ref(EVP_KDF *kdf); +void EVP_KDF_free(EVP_KDF *kdf); +EVP_KDF *EVP_KDF_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); + +EVP_KDF_CTX *EVP_KDF_CTX_new(EVP_KDF *kdf); +void EVP_KDF_CTX_free(EVP_KDF_CTX *ctx); +EVP_KDF_CTX *EVP_KDF_CTX_dup(const EVP_KDF_CTX *src); +const char *EVP_KDF_get0_description(const EVP_KDF *kdf); +int EVP_KDF_is_a(const EVP_KDF *kdf, const char *name); +const char *EVP_KDF_get0_name(const EVP_KDF *kdf); +const OSSL_PROVIDER *EVP_KDF_get0_provider(const EVP_KDF *kdf); +const EVP_KDF *EVP_KDF_CTX_kdf(EVP_KDF_CTX *ctx); + +void EVP_KDF_CTX_reset(EVP_KDF_CTX *ctx); +size_t EVP_KDF_CTX_get_kdf_size(EVP_KDF_CTX *ctx); +int EVP_KDF_derive(EVP_KDF_CTX *ctx, unsigned char *key, size_t keylen, + const OSSL_PARAM params[]); +int EVP_KDF_get_params(EVP_KDF *kdf, OSSL_PARAM params[]); +int EVP_KDF_CTX_get_params(EVP_KDF_CTX *ctx, OSSL_PARAM params[]); +int EVP_KDF_CTX_set_params(EVP_KDF_CTX *ctx, const OSSL_PARAM params[]); +const OSSL_PARAM *EVP_KDF_gettable_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_gettable_ctx_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_settable_ctx_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_CTX_gettable_params(EVP_KDF_CTX *ctx); +const OSSL_PARAM *EVP_KDF_CTX_settable_params(EVP_KDF_CTX *ctx); + +void EVP_KDF_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KDF *kdf, void *arg), + void *arg); +int EVP_KDF_names_do_all(const EVP_KDF *kdf, + void (*fn)(const char *name, void *data), + void *data); + +# define EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND 0 +# define EVP_KDF_HKDF_MODE_EXTRACT_ONLY 1 +# define EVP_KDF_HKDF_MODE_EXPAND_ONLY 2 + +#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_CLI_TO_SRV 65 +#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_SRV_TO_CLI 66 +#define EVP_KDF_SSHKDF_TYPE_ENCRYPTION_KEY_CLI_TO_SRV 67 +#define EVP_KDF_SSHKDF_TYPE_ENCRYPTION_KEY_SRV_TO_CLI 68 +#define EVP_KDF_SSHKDF_TYPE_INTEGRITY_KEY_CLI_TO_SRV 69 +#define EVP_KDF_SSHKDF_TYPE_INTEGRITY_KEY_SRV_TO_CLI 70 + +/**** The legacy PKEY-based KDF API follows. ****/ # define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) # define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) @@ -30,68 +87,52 @@ extern "C" { # define EVP_PKEY_CTRL_SCRYPT_P (EVP_PKEY_ALG_CTRL + 12) # define EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES (EVP_PKEY_ALG_CTRL + 13) -# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND 0 -# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 1 -# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY 2 +# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND \ + EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND +# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY \ + EVP_KDF_HKDF_MODE_EXTRACT_ONLY +# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY \ + EVP_KDF_HKDF_MODE_EXPAND_ONLY -# define EVP_PKEY_CTX_set_tls1_prf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_MD, 0, (void *)(md)) +int EVP_PKEY_CTX_set_tls1_prf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, sec, seclen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)(sec)) +int EVP_PKEY_CTX_set1_tls1_prf_secret(EVP_PKEY_CTX *pctx, + const unsigned char *sec, int seclen); -# define EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed, seedlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)(seed)) +int EVP_PKEY_CTX_add1_tls1_prf_seed(EVP_PKEY_CTX *pctx, + const unsigned char *seed, int seedlen); -# define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MD, 0, (void *)(md)) +int EVP_PKEY_CTX_set_hkdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)(salt)) +int EVP_PKEY_CTX_set1_hkdf_salt(EVP_PKEY_CTX *ctx, + const unsigned char *salt, int saltlen); -# define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)(key)) +int EVP_PKEY_CTX_set1_hkdf_key(EVP_PKEY_CTX *ctx, + const unsigned char *key, int keylen); -# define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)(info)) +int EVP_PKEY_CTX_add1_hkdf_info(EVP_PKEY_CTX *ctx, + const unsigned char *info, int infolen); -# define EVP_PKEY_CTX_hkdf_mode(pctx, mode) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MODE, mode, NULL) +int EVP_PKEY_CTX_set_hkdf_mode(EVP_PKEY_CTX *ctx, int mode); +# define EVP_PKEY_CTX_hkdf_mode EVP_PKEY_CTX_set_hkdf_mode -# define EVP_PKEY_CTX_set1_pbe_pass(pctx, pass, passlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_PASS, passlen, (void *)(pass)) +int EVP_PKEY_CTX_set1_pbe_pass(EVP_PKEY_CTX *ctx, const char *pass, + int passlen); -# define EVP_PKEY_CTX_set1_scrypt_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_SALT, saltlen, (void *)(salt)) +int EVP_PKEY_CTX_set1_scrypt_salt(EVP_PKEY_CTX *ctx, + const unsigned char *salt, int saltlen); -# define EVP_PKEY_CTX_set_scrypt_N(pctx, n) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_N, n) +int EVP_PKEY_CTX_set_scrypt_N(EVP_PKEY_CTX *ctx, uint64_t n); -# define EVP_PKEY_CTX_set_scrypt_r(pctx, r) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_R, r) +int EVP_PKEY_CTX_set_scrypt_r(EVP_PKEY_CTX *ctx, uint64_t r); -# define EVP_PKEY_CTX_set_scrypt_p(pctx, p) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_P, p) +int EVP_PKEY_CTX_set_scrypt_p(EVP_PKEY_CTX *ctx, uint64_t p); -# define EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx, maxmem_bytes) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES, maxmem_bytes) +int EVP_PKEY_CTX_set_scrypt_maxmem_bytes(EVP_PKEY_CTX *ctx, + uint64_t maxmem_bytes); -# ifdef __cplusplus +# ifdef __cplusplus } # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/kdferr.h b/deps/openssl/android/x86/usr/local/include/openssl/kdferr.h index 3f51bd02..963d766d 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/kdferr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/kdferr.h @@ -1,55 +1,16 @@ /* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_KDFERR_H -# define HEADER_KDFERR_H +#ifndef OPENSSL_KDFERR_H +# define OPENSSL_KDFERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +#include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_KDF_strings(void); - -/* - * KDF function codes. - */ -# define KDF_F_PKEY_HKDF_CTRL_STR 103 -# define KDF_F_PKEY_HKDF_DERIVE 102 -# define KDF_F_PKEY_HKDF_INIT 108 -# define KDF_F_PKEY_SCRYPT_CTRL_STR 104 -# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 105 -# define KDF_F_PKEY_SCRYPT_DERIVE 109 -# define KDF_F_PKEY_SCRYPT_INIT 106 -# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 107 -# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 -# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 -# define KDF_F_PKEY_TLS1_PRF_INIT 110 -# define KDF_F_TLS1_PRF_ALG 111 - -/* - * KDF reason codes. - */ -# define KDF_R_INVALID_DIGEST 100 -# define KDF_R_MISSING_ITERATION_COUNT 109 -# define KDF_R_MISSING_KEY 104 -# define KDF_R_MISSING_MESSAGE_DIGEST 105 -# define KDF_R_MISSING_PARAMETER 101 -# define KDF_R_MISSING_PASS 110 -# define KDF_R_MISSING_SALT 111 -# define KDF_R_MISSING_SECRET 107 -# define KDF_R_MISSING_SEED 106 -# define KDF_R_UNKNOWN_PARAMETER_TYPE 103 -# define KDF_R_VALUE_ERROR 108 -# define KDF_R_VALUE_MISSING 102 - -#endif +#endif /* !defined(OPENSSL_KDFERR_H) */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/lhash.h b/deps/openssl/android/x86/usr/local/include/openssl/lhash.h index 2e42d727..f4155df1 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/lhash.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/lhash.h @@ -1,21 +1,32 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ + + /* * Header for dynamic hash table routines Author - Eric Young */ -#ifndef HEADER_LHASH_H -# define HEADER_LHASH_H +#ifndef OPENSSL_LHASH_H +# define OPENSSL_LHASH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_LHASH_H +# endif # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -72,6 +83,7 @@ typedef struct lhash_st OPENSSL_LHASH; int OPENSSL_LH_error(OPENSSL_LHASH *lh); OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void OPENSSL_LH_flush(OPENSSL_LHASH *lh); void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); @@ -83,15 +95,19 @@ unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); # ifndef OPENSSL_NO_STDIO -void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); # endif -void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define _LHASH OPENSSL_LHASH # define LHASH_NODE OPENSSL_LH_NODE # define lh_error OPENSSL_LH_error @@ -118,63 +134,145 @@ void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); # define LHASH_OF(type) struct lhash_st_##type -# define DEFINE_LHASH_OF(type) \ - LHASH_OF(type) { union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; }; \ - static ossl_unused ossl_inline LHASH_OF(type) *lh_##type##_new(unsigned long (*hfn)(const type *), \ - int (*cfn)(const type *, const type *)) \ +/* Helper macro for internal use */ +# define DEFINE_LHASH_OF_INTERNAL(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + typedef int (*lh_##type##_compfunc)(const type *a, const type *b); \ + typedef unsigned long (*lh_##type##_hashfunc)(const type *a); \ + typedef void (*lh_##type##_doallfunc)(type *a); \ + static ossl_unused ossl_inline type *\ + ossl_check_##type##_lh_plain_type(type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const type * \ + ossl_check_const_##type##_lh_plain_type(const type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_LHASH * \ + ossl_check_const_##type##_lh_type(const LHASH_OF(type) *lh) \ + { \ + return (const OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LHASH * \ + ossl_check_##type##_lh_type(LHASH_OF(type) *lh) \ + { \ + return (OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_COMPFUNC \ + ossl_check_##type##_lh_compfunc_type(lh_##type##_compfunc cmp) \ + { \ + return (OPENSSL_LH_COMPFUNC)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_HASHFUNC \ + ossl_check_##type##_lh_hashfunc_type(lh_##type##_hashfunc hfn) \ + { \ + return (OPENSSL_LH_HASHFUNC)hfn; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_DOALL_FUNC \ + ossl_check_##type##_lh_doallfunc_type(lh_##type##_doallfunc dfn) \ + { \ + return (OPENSSL_LH_DOALL_FUNC)dfn; \ + } \ + LHASH_OF(type) + +# ifndef OPENSSL_NO_DEPRECATED_3_1 +# define DEFINE_LHASH_OF_DEPRECATED(type) \ + static ossl_unused ossl_inline void \ + lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } +# else +# define DEFINE_LHASH_OF_DEPRECATED(type) +# endif + +# define DEFINE_LHASH_OF_EX(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + static ossl_unused ossl_inline LHASH_OF(type) * \ + lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ { \ return (LHASH_OF(type) *) \ OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ } \ - static ossl_unused ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline void \ + lh_##type##_free(LHASH_OF(type) *lh) \ { \ OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline type *lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + static ossl_unused ossl_inline void \ + lh_##type##_flush(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_flush((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ { \ return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline type *lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + static ossl_unused ossl_inline type * \ + lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ { \ return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline type *lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + static ossl_unused ossl_inline type * \ + lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ { \ return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline int lh_##type##_error(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline int \ + lh_##type##_error(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline unsigned long lh_##type##_num_items(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_num_items(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline void lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline void lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline void lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline unsigned long lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_get_down_load(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline void lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + static ossl_unused ossl_inline void \ + lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ { \ OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ } \ - static ossl_unused ossl_inline void lh_##type##_doall(LHASH_OF(type) *lh, \ - void (*doall)(type *)) \ + static ossl_unused ossl_inline void \ + lh_##type##_doall(LHASH_OF(type) *lh, void (*doall)(type *)) \ { \ OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_arg(LHASH_OF(type) *lh, \ + void (*doallarg)(type *, void *), void *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)doallarg, arg); \ + } \ + LHASH_OF(type) + +# define DEFINE_LHASH_OF(type) \ + DEFINE_LHASH_OF_EX(type); \ + DEFINE_LHASH_OF_DEPRECATED(type) \ LHASH_OF(type) #define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ @@ -189,50 +287,42 @@ void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); void (*fn)(cbargtype *, argtype *), \ argtype *arg) \ { \ - OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ } \ LHASH_OF(type) -DEFINE_LHASH_OF(OPENSSL_STRING); -# ifdef _MSC_VER -/* - * push and pop this warning: - * warning C4090: 'function': different 'const' qualifiers - */ -# pragma warning (push) -# pragma warning (disable: 4090) -# endif +DEFINE_LHASH_OF_INTERNAL(OPENSSL_STRING); +#define lh_OPENSSL_STRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_STRING) *)OPENSSL_LH_new(ossl_check_OPENSSL_STRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_STRING_lh_compfunc_type(cmp))) +#define lh_OPENSSL_STRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_insert(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_delete(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_retrieve(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_STRING_lh_type(lh), dl) +#define lh_OPENSSL_STRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_doallfunc_type(dfn)) +DEFINE_LHASH_OF_INTERNAL(OPENSSL_CSTRING); +#define lh_OPENSSL_CSTRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_CSTRING) *)OPENSSL_LH_new(ossl_check_OPENSSL_CSTRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_CSTRING_lh_compfunc_type(cmp))) +#define lh_OPENSSL_CSTRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_insert(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_delete(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_retrieve(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh), dl) +#define lh_OPENSSL_CSTRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_doallfunc_type(dfn)) -DEFINE_LHASH_OF(OPENSSL_CSTRING); - -# ifdef _MSC_VER -# pragma warning (pop) -# endif - -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_LH_new -# pragma weak OPENSSL_LH_free -# pragma weak OPENSSL_LH_insert -# pragma weak OPENSSL_LH_delete -# pragma weak OPENSSL_LH_retrieve -# pragma weak OPENSSL_LH_error -# pragma weak OPENSSL_LH_num_items -# pragma weak OPENSSL_LH_node_stats_bio -# pragma weak OPENSSL_LH_node_usage_stats_bio -# pragma weak OPENSSL_LH_stats_bio -# pragma weak OPENSSL_LH_get_down_load -# pragma weak OPENSSL_LH_set_down_load -# pragma weak OPENSSL_LH_doall -# pragma weak OPENSSL_LH_doall_arg -# endif /* __SUNPRO_C */ #ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/lhash.h.in b/deps/openssl/android/x86/usr/local/include/openssl/lhash.h.in new file mode 100644 index 00000000..dc344a54 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/lhash.h.in @@ -0,0 +1,306 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_lhash_macros); +-} + +/* + * Header for dynamic hash table routines Author - Eric Young + */ + +#ifndef OPENSSL_LHASH_H +# define OPENSSL_LHASH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_LHASH_H +# endif + +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st OPENSSL_LH_NODE; +typedef int (*OPENSSL_LH_COMPFUNC) (const void *, const void *); +typedef unsigned long (*OPENSSL_LH_HASHFUNC) (const void *); +typedef void (*OPENSSL_LH_DOALL_FUNC) (void *); +typedef void (*OPENSSL_LH_DOALL_FUNCARG) (void *, void *); +typedef struct lhash_st OPENSSL_LHASH; + +/* + * Macros for declaring and implementing type-safe wrappers for LHASH + * callbacks. This way, callbacks can be provided to LHASH structures without + * function pointer casting and the macro-defined callbacks provide + * per-variable casting before deferring to the underlying type-specific + * callbacks. NB: It is possible to place a "static" in front of both the + * DECLARE and IMPLEMENT macros if the functions are strictly internal. + */ + +/* First: "hash" functions */ +# define DECLARE_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *); +# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *arg) { \ + const o_type *a = arg; \ + return name##_hash(a); } +# define LHASH_HASH_FN(name) name##_LHASH_HASH + +/* Second: "compare" functions */ +# define DECLARE_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *, const void *); +# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ + const o_type *a = arg1; \ + const o_type *b = arg2; \ + return name##_cmp(a,b); } +# define LHASH_COMP_FN(name) name##_LHASH_COMP + +/* Fourth: "doall_arg" functions */ +# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *, void *); +# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ + o_type *a = arg1; \ + a_type *b = arg2; \ + name##_doall_arg(a, b); } +# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG + + +# define LH_LOAD_MULT 256 + +int OPENSSL_LH_error(OPENSSL_LHASH *lh); +OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); +void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void OPENSSL_LH_flush(OPENSSL_LHASH *lh); +void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); +void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); +void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); +void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func); +void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg); +unsigned long OPENSSL_LH_strhash(const char *c); +unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh); +unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); +void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); + +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define _LHASH OPENSSL_LHASH +# define LHASH_NODE OPENSSL_LH_NODE +# define lh_error OPENSSL_LH_error +# define lh_new OPENSSL_LH_new +# define lh_free OPENSSL_LH_free +# define lh_insert OPENSSL_LH_insert +# define lh_delete OPENSSL_LH_delete +# define lh_retrieve OPENSSL_LH_retrieve +# define lh_doall OPENSSL_LH_doall +# define lh_doall_arg OPENSSL_LH_doall_arg +# define lh_strhash OPENSSL_LH_strhash +# define lh_num_items OPENSSL_LH_num_items +# ifndef OPENSSL_NO_STDIO +# define lh_stats OPENSSL_LH_stats +# define lh_node_stats OPENSSL_LH_node_stats +# define lh_node_usage_stats OPENSSL_LH_node_usage_stats +# endif +# define lh_stats_bio OPENSSL_LH_stats_bio +# define lh_node_stats_bio OPENSSL_LH_node_stats_bio +# define lh_node_usage_stats_bio OPENSSL_LH_node_usage_stats_bio +# endif + +/* Type checking... */ + +# define LHASH_OF(type) struct lhash_st_##type + +/* Helper macro for internal use */ +# define DEFINE_LHASH_OF_INTERNAL(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + typedef int (*lh_##type##_compfunc)(const type *a, const type *b); \ + typedef unsigned long (*lh_##type##_hashfunc)(const type *a); \ + typedef void (*lh_##type##_doallfunc)(type *a); \ + static ossl_unused ossl_inline type *\ + ossl_check_##type##_lh_plain_type(type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const type * \ + ossl_check_const_##type##_lh_plain_type(const type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_LHASH * \ + ossl_check_const_##type##_lh_type(const LHASH_OF(type) *lh) \ + { \ + return (const OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LHASH * \ + ossl_check_##type##_lh_type(LHASH_OF(type) *lh) \ + { \ + return (OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_COMPFUNC \ + ossl_check_##type##_lh_compfunc_type(lh_##type##_compfunc cmp) \ + { \ + return (OPENSSL_LH_COMPFUNC)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_HASHFUNC \ + ossl_check_##type##_lh_hashfunc_type(lh_##type##_hashfunc hfn) \ + { \ + return (OPENSSL_LH_HASHFUNC)hfn; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_DOALL_FUNC \ + ossl_check_##type##_lh_doallfunc_type(lh_##type##_doallfunc dfn) \ + { \ + return (OPENSSL_LH_DOALL_FUNC)dfn; \ + } \ + LHASH_OF(type) + +# ifndef OPENSSL_NO_DEPRECATED_3_1 +# define DEFINE_LHASH_OF_DEPRECATED(type) \ + static ossl_unused ossl_inline void \ + lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } +# else +# define DEFINE_LHASH_OF_DEPRECATED(type) +# endif + +# define DEFINE_LHASH_OF_EX(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + static ossl_unused ossl_inline LHASH_OF(type) * \ + lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ + { \ + return (LHASH_OF(type) *) \ + OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_free(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_flush(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_flush((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + { \ + return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline int \ + lh_##type##_error(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_num_items(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + { \ + OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall(LHASH_OF(type) *lh, void (*doall)(type *)) \ + { \ + OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_arg(LHASH_OF(type) *lh, \ + void (*doallarg)(type *, void *), void *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)doallarg, arg); \ + } \ + LHASH_OF(type) + +# define DEFINE_LHASH_OF(type) \ + DEFINE_LHASH_OF_EX(type); \ + DEFINE_LHASH_OF_DEPRECATED(type) \ + LHASH_OF(type) + +#define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ + int_implement_lhash_doall(type, argtype, const type) + +#define IMPLEMENT_LHASH_DOALL_ARG(type, argtype) \ + int_implement_lhash_doall(type, argtype, type) + +#define int_implement_lhash_doall(type, argtype, cbargtype) \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ + void (*fn)(cbargtype *, argtype *), \ + argtype *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + } \ + LHASH_OF(type) + +{- + generate_lhash_macros("OPENSSL_STRING") + .generate_lhash_macros("OPENSSL_CSTRING"); +-} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/macros.h b/deps/openssl/android/x86/usr/local/include/openssl/macros.h new file mode 100644 index 00000000..a614cd66 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/macros.h @@ -0,0 +1,325 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_MACROS_H +# define OPENSSL_MACROS_H +# pragma once + +#include +#include + + +/* Helper macros for CPP string composition */ +# define OPENSSL_MSTR_HELPER(x) #x +# define OPENSSL_MSTR(x) OPENSSL_MSTR_HELPER(x) + +/* + * Sometimes OPENSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +# define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Generic deprecation macro + * + * If OPENSSL_SUPPRESS_DEPRECATED is defined, then OSSL_DEPRECATED and + * OSSL_DEPRECATED_FOR become no-ops + */ +# ifndef OSSL_DEPRECATED +# undef OSSL_DEPRECATED_FOR +# ifndef OPENSSL_SUPPRESS_DEPRECATED +# if defined(_MSC_VER) + /* + * MSVC supports __declspec(deprecated) since MSVC 2003 (13.10), + * and __declspec(deprecated(message)) since MSVC 2005 (14.00) + */ +# if _MSC_VER >= 1400 +# define OSSL_DEPRECATED(since) \ + __declspec(deprecated("Since OpenSSL " # since)) +# define OSSL_DEPRECATED_FOR(since, message) \ + __declspec(deprecated("Since OpenSSL " # since ";" message)) +# elif _MSC_VER >= 1310 +# define OSSL_DEPRECATED(since) __declspec(deprecated) +# define OSSL_DEPRECATED_FOR(since, message) __declspec(deprecated) +# endif +# elif defined(__GNUC__) + /* + * According to GCC documentation, deprecations with message appeared in + * GCC 4.5.0 + */ +# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# define OSSL_DEPRECATED(since) \ + __attribute__((deprecated("Since OpenSSL " # since))) +# define OSSL_DEPRECATED_FOR(since, message) \ + __attribute__((deprecated("Since OpenSSL " # since ";" message))) +# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define OSSL_DEPRECATED(since) __attribute__((deprecated)) +# define OSSL_DEPRECATED_FOR(since, message) __attribute__((deprecated)) +# endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# define OSSL_DEPRECATED(since) __attribute__ ((deprecated)) +# define OSSL_DEPRECATED_FOR(since, message) __attribute__ ((deprecated)) +# endif +# endif +# endif +# endif + +/* + * Still not defined? Then define no-op macros. This means these macros + * are unsuitable for use in a typedef. + */ +# ifndef OSSL_DEPRECATED +# define OSSL_DEPRECATED(since) extern +# define OSSL_DEPRECATED_FOR(since, message) extern +# endif + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . If this is + * undefined, the value of the macro OPENSSL_CONFIGURED_API (defined in + * ) is the default. + * + * For any version number up until version 1.1.x, is expected to be + * the calculated version number 0xMNNFFPPSL. + * For version numbers 3.0 and on, is expected to be a computation + * of the major and minor numbers in decimal using this formula: + * + * MAJOR * 10000 + MINOR * 100 + * + * So version 3.0 becomes 30000, version 3.2 becomes 30200, etc. + */ + +/* + * We use the OPENSSL_API_COMPAT value to define API level macros. These + * macros are used to enable or disable features at that API version boundary. + */ + +# ifdef OPENSSL_API_LEVEL +# error "OPENSSL_API_LEVEL must not be defined by application" +# endif + +/* + * We figure out what API level was intended by simple numeric comparison. + * The lowest old style number we recognise is 0x00908000L, so we take some + * safety margin and assume that anything below 0x00900000L is a new style + * number. This allows new versions up to and including v943.71.83. + */ +# ifdef OPENSSL_API_COMPAT +# if OPENSSL_API_COMPAT < 0x900000L +# define OPENSSL_API_LEVEL (OPENSSL_API_COMPAT) +# else +# define OPENSSL_API_LEVEL \ + (((OPENSSL_API_COMPAT >> 28) & 0xF) * 10000 \ + + ((OPENSSL_API_COMPAT >> 20) & 0xFF) * 100 \ + + ((OPENSSL_API_COMPAT >> 12) & 0xFF)) +# endif +# endif + +/* + * If OPENSSL_API_COMPAT wasn't given, we use default numbers to set + * the API compatibility level. + */ +# ifndef OPENSSL_API_LEVEL +# if OPENSSL_CONFIGURED_API > 0 +# define OPENSSL_API_LEVEL (OPENSSL_CONFIGURED_API) +# else +# define OPENSSL_API_LEVEL \ + (OPENSSL_VERSION_MAJOR * 10000 + OPENSSL_VERSION_MINOR * 100) +# endif +# endif + +# if OPENSSL_API_LEVEL > OPENSSL_CONFIGURED_API +# error "The requested API level higher than the configured API compatibility level" +# endif + +/* + * Check of sane values. + */ +/* Can't go higher than the current version. */ +# if OPENSSL_API_LEVEL > (OPENSSL_VERSION_MAJOR * 10000 + OPENSSL_VERSION_MINOR * 100) +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif +/* OpenSSL will have no version 2.y.z */ +# if OPENSSL_API_LEVEL < 30000 && OPENSSL_API_LEVEL >= 20000 +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif +/* Below 0.9.8 is unacceptably low */ +# if OPENSSL_API_LEVEL < 908 +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif + +/* + * Define macros for deprecation and simulated removal purposes. + * + * The macros OSSL_DEPRECATED_{major}_{minor} are always defined for + * all OpenSSL versions we care for. They can be used as attributes + * in function declarations where appropriate. + * + * The macros OPENSSL_NO_DEPRECATED_{major}_{minor} are defined for + * all OpenSSL versions up to or equal to the version given with + * OPENSSL_API_COMPAT. They are used as guards around anything that's + * deprecated up to that version, as an effect of the developer option + * 'no-deprecated'. + */ + +# undef OPENSSL_NO_DEPRECATED_3_0 +# undef OPENSSL_NO_DEPRECATED_1_1_1 +# undef OPENSSL_NO_DEPRECATED_1_1_0 +# undef OPENSSL_NO_DEPRECATED_1_0_2 +# undef OPENSSL_NO_DEPRECATED_1_0_1 +# undef OPENSSL_NO_DEPRECATED_1_0_0 +# undef OPENSSL_NO_DEPRECATED_0_9_8 + +# if OPENSSL_API_LEVEL >= 30100 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_1 OSSL_DEPRECATED(3.1) +# define OSSL_DEPRECATEDIN_3_1_FOR(msg) OSSL_DEPRECATED_FOR(3.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_1 +# endif +# else +# define OSSL_DEPRECATEDIN_3_1 +# define OSSL_DEPRECATEDIN_3_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 30000 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_0 OSSL_DEPRECATED(3.0) +# define OSSL_DEPRECATEDIN_3_0_FOR(msg) OSSL_DEPRECATED_FOR(3.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_0 +# endif +# else +# define OSSL_DEPRECATEDIN_3_0 +# define OSSL_DEPRECATEDIN_3_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10101 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_1_1 OSSL_DEPRECATED(1.1.1) +# define OSSL_DEPRECATEDIN_1_1_1_FOR(msg) OSSL_DEPRECATED_FOR(1.1.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_1_1 +# endif +# else +# define OSSL_DEPRECATEDIN_1_1_1 +# define OSSL_DEPRECATEDIN_1_1_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10100 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_1_0 OSSL_DEPRECATED(1.1.0) +# define OSSL_DEPRECATEDIN_1_1_0_FOR(msg) OSSL_DEPRECATED_FOR(1.1.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_1_0 +# endif +# else +# define OSSL_DEPRECATEDIN_1_1_0 +# define OSSL_DEPRECATEDIN_1_1_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10002 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_2 OSSL_DEPRECATED(1.0.2) +# define OSSL_DEPRECATEDIN_1_0_2_FOR(msg) OSSL_DEPRECATED_FOR(1.0.2, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_2 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_2 +# define OSSL_DEPRECATEDIN_1_0_2_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10001 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_1 OSSL_DEPRECATED(1.0.1) +# define OSSL_DEPRECATEDIN_1_0_1_FOR(msg) OSSL_DEPRECATED_FOR(1.0.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_1 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_1 +# define OSSL_DEPRECATEDIN_1_0_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10000 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_0 OSSL_DEPRECATED(1.0.0) +# define OSSL_DEPRECATEDIN_1_0_0_FOR(msg) OSSL_DEPRECATED_FOR(1.0.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_0 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_0 +# define OSSL_DEPRECATEDIN_1_0_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 908 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_0_9_8 OSSL_DEPRECATED(0.9.8) +# define OSSL_DEPRECATEDIN_0_9_8_FOR(msg) OSSL_DEPRECATED_FOR(0.9.8, msg) +# else +# define OPENSSL_NO_DEPRECATED_0_9_8 +# endif +# else +# define OSSL_DEPRECATEDIN_0_9_8 +# define OSSL_DEPRECATEDIN_0_9_8_FOR(msg) +# endif + +/* + * Make our own variants of __FILE__ and __LINE__, depending on configuration + */ + +# ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +# endif + +/* + * __func__ was standardized in C99, so for any compiler that claims + * to implement that language level or newer, we assume we can safely + * use that symbol. + * + * GNU C also provides __FUNCTION__ since version 2, which predates + * C99. We can, however, only use this if __STDC_VERSION__ exists, + * as it's otherwise not allowed according to ISO C standards (C90). + * (compiling with GNU C's -pedantic tells us so) + * + * If none of the above applies, we check if the compiler is MSVC, + * and use __FUNCTION__ if that's the case. + */ +# ifndef OPENSSL_FUNC +# if defined(__STDC_VERSION__) +# if __STDC_VERSION__ >= 199901L +# define OPENSSL_FUNC __func__ +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define OPENSSL_FUNC __FUNCTION__ +# endif +# elif defined(_MSC_VER) +# define OPENSSL_FUNC __FUNCTION__ +# endif +/* + * If all these possibilities are exhausted, we give up and use a + * static string. + */ +# ifndef OPENSSL_FUNC +# define OPENSSL_FUNC "(unknown function)" +# endif +# endif + +# ifndef OSSL_CRYPTO_ALLOC +# if defined(__GNUC__) +# define OSSL_CRYPTO_ALLOC __attribute__((__malloc__)) +# elif defined(_MSC_VER) +# define OSSL_CRYPTO_ALLOC __declspec(restrict) +# else +# define OSSL_CRYPTO_ALLOC +# endif +# endif + +#endif /* OPENSSL_MACROS_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/md2.h b/deps/openssl/android/x86/usr/local/include/openssl/md2.h index 7faf8e3d..5d4cb77e 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/md2.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/md2.h @@ -1,27 +1,36 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD2_H -# define HEADER_MD2_H +#ifndef OPENSSL_MD2_H +# define OPENSSL_MD2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD2_H +# endif # include # ifndef OPENSSL_NO_MD2 -# include -# ifdef __cplusplus +# include +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define MD2_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) typedef unsigned char MD2_INT; -# define MD2_DIGEST_LENGTH 16 -# define MD2_BLOCK 16 +# define MD2_BLOCK 16 typedef struct MD2state_st { unsigned int num; @@ -29,16 +38,19 @@ typedef struct MD2state_st { MD2_INT cksm[MD2_BLOCK]; MD2_INT state[MD2_BLOCK]; } MD2_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *MD2_options(void); +OSSL_DEPRECATEDIN_3_0 int MD2_Init(MD2_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD2_Update(MD2_CTX *c, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int MD2_Final(unsigned char *md, MD2_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD2(const unsigned char *d, size_t n, + unsigned char *md); +# endif -const char *MD2_options(void); -int MD2_Init(MD2_CTX *c); -int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len); -int MD2_Final(unsigned char *md, MD2_CTX *c); -unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } +# endif # endif -# endif - #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/md4.h b/deps/openssl/android/x86/usr/local/include/openssl/md4.h index 940e29db..6c150a6c 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/md4.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/md4.h @@ -1,34 +1,43 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD4_H -# define HEADER_MD4_H +#ifndef OPENSSL_MD4_H +# define OPENSSL_MD4_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD4_H +# endif # include # ifndef OPENSSL_NO_MD4 -# include -# include -# ifdef __cplusplus +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define MD4_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! MD4_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define MD4_LONG unsigned int +# define MD4_LONG unsigned int -# define MD4_CBLOCK 64 -# define MD4_LBLOCK (MD4_CBLOCK/4) -# define MD4_DIGEST_LENGTH 16 +# define MD4_CBLOCK 64 +# define MD4_LBLOCK (MD4_CBLOCK/4) typedef struct MD4state_st { MD4_LONG A, B, C, D; @@ -36,16 +45,19 @@ typedef struct MD4state_st { MD4_LONG data[MD4_LBLOCK]; unsigned int num; } MD4_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MD4_Init(MD4_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD4_Update(MD4_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int MD4_Final(unsigned char *md, MD4_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD4(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void MD4_Transform(MD4_CTX *c, const unsigned char *b); +# endif -int MD4_Init(MD4_CTX *c); -int MD4_Update(MD4_CTX *c, const void *data, size_t len); -int MD4_Final(unsigned char *md, MD4_CTX *c); -unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); -void MD4_Transform(MD4_CTX *c, const unsigned char *b); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/md5.h b/deps/openssl/android/x86/usr/local/include/openssl/md5.h index 2deb7721..77a57734 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/md5.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/md5.h @@ -1,34 +1,42 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD5_H -# define HEADER_MD5_H +#ifndef OPENSSL_MD5_H +# define OPENSSL_MD5_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD5_H +# endif # include # ifndef OPENSSL_NO_MD5 -# include -# include -# ifdef __cplusplus +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif +# define MD5_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) /* * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! MD5_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define MD5_LONG unsigned int +# define MD5_LONG unsigned int -# define MD5_CBLOCK 64 -# define MD5_LBLOCK (MD5_CBLOCK/4) -# define MD5_DIGEST_LENGTH 16 +# define MD5_CBLOCK 64 +# define MD5_LBLOCK (MD5_CBLOCK/4) typedef struct MD5state_st { MD5_LONG A, B, C, D; @@ -36,15 +44,19 @@ typedef struct MD5state_st { MD5_LONG data[MD5_LBLOCK]; unsigned int num; } MD5_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MD5_Init(MD5_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD5_Update(MD5_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int MD5_Final(unsigned char *md, MD5_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD5(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void MD5_Transform(MD5_CTX *c, const unsigned char *b); +# endif -int MD5_Init(MD5_CTX *c); -int MD5_Update(MD5_CTX *c, const void *data, size_t len); -int MD5_Final(unsigned char *md, MD5_CTX *c); -unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); -void MD5_Transform(MD5_CTX *c, const unsigned char *b); -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/mdc2.h b/deps/openssl/android/x86/usr/local/include/openssl/mdc2.h index aabd2bfa..5a7ee289 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/mdc2.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/mdc2.h @@ -1,42 +1,55 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MDC2_H -# define HEADER_MDC2_H +#ifndef OPENSSL_MDC2_H +# define OPENSSL_MDC2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MDC2_H +# endif # include -#ifndef OPENSSL_NO_MDC2 -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_MDC2 +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif -# define MDC2_BLOCK 8 -# define MDC2_DIGEST_LENGTH 16 +# define MDC2_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +# define MDC2_BLOCK 8 typedef struct mdc2_ctx_st { unsigned int num; unsigned char data[MDC2_BLOCK]; DES_cblock h, hh; - int pad_type; /* either 1 or 2, default 1 */ + unsigned int pad_type; /* either 1 or 2, default 1 */ } MDC2_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MDC2_Init(MDC2_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MDC2_Update(MDC2_CTX *c, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int MDC2_Final(unsigned char *md, MDC2_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MDC2(const unsigned char *d, size_t n, + unsigned char *md); +# endif -int MDC2_Init(MDC2_CTX *c); -int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); -int MDC2_Final(unsigned char *md, MDC2_CTX *c); -unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/modes.h b/deps/openssl/android/x86/usr/local/include/openssl/modes.h index d544f98d..e1907991 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/modes.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/modes.h @@ -1,16 +1,23 @@ /* * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MODES_H -# define HEADER_MODES_H +#ifndef OPENSSL_MODES_H +# define OPENSSL_MODES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MODES_H +# endif # include +# include # ifdef __cplusplus extern "C" { @@ -22,6 +29,10 @@ typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], int enc); +typedef void (*ecb128_f) (const unsigned char *in, unsigned char *out, + size_t len, const void *key, + int enc); + typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, size_t blocks, const void *key, const unsigned char ivec[16]); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/obj_mac.h b/deps/openssl/android/x86/usr/local/include/openssl/obj_mac.h index 53516a06..0e860276 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/obj_mac.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/obj_mac.h @@ -2,13 +2,17 @@ * WARNING: do not edit! * Generated by crypto/objects/objects.pl * - * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OPENSSL_OBJ_MAC_H +# define OPENSSL_OBJ_MAC_H +# pragma once + #define SN_undef "UNDEF" #define LN_undef "undefined" #define NID_undef 0 @@ -44,6 +48,11 @@ #define NID_identified_organization 676 #define OBJ_identified_organization OBJ_iso,3L +#define SN_gmac "GMAC" +#define LN_gmac "gmac" +#define NID_gmac 1195 +#define OBJ_gmac OBJ_iso,0L,9797L,3L,4L + #define SN_hmac_md5 "HMAC-MD5" #define LN_hmac_md5 "hmac-md5" #define NID_hmac_md5 780 @@ -845,6 +854,14 @@ #define NID_id_smime_ct_authEnvelopedData 1059 #define OBJ_id_smime_ct_authEnvelopedData OBJ_id_smime_ct,23L +#define SN_id_ct_routeOriginAuthz "id-ct-routeOriginAuthz" +#define NID_id_ct_routeOriginAuthz 1234 +#define OBJ_id_ct_routeOriginAuthz OBJ_id_smime_ct,24L + +#define SN_id_ct_rpkiManifest "id-ct-rpkiManifest" +#define NID_id_ct_rpkiManifest 1235 +#define OBJ_id_ct_rpkiManifest OBJ_id_smime_ct,26L + #define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" #define NID_id_ct_asciiTextWithCRLF 787 #define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L @@ -853,6 +870,22 @@ #define NID_id_ct_xml 1060 #define OBJ_id_ct_xml OBJ_id_smime_ct,28L +#define SN_id_ct_rpkiGhostbusters "id-ct-rpkiGhostbusters" +#define NID_id_ct_rpkiGhostbusters 1236 +#define OBJ_id_ct_rpkiGhostbusters OBJ_id_smime_ct,35L + +#define SN_id_ct_resourceTaggedAttest "id-ct-resourceTaggedAttest" +#define NID_id_ct_resourceTaggedAttest 1237 +#define OBJ_id_ct_resourceTaggedAttest OBJ_id_smime_ct,36L + +#define SN_id_ct_geofeedCSVwithCRLF "id-ct-geofeedCSVwithCRLF" +#define NID_id_ct_geofeedCSVwithCRLF 1246 +#define OBJ_id_ct_geofeedCSVwithCRLF OBJ_id_smime_ct,47L + +#define SN_id_ct_signedChecklist "id-ct-signedChecklist" +#define NID_id_ct_signedChecklist 1247 +#define OBJ_id_ct_signedChecklist OBJ_id_smime_ct,48L + #define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" #define NID_id_smime_aa_receiptRequest 212 #define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L @@ -1179,6 +1212,11 @@ #define NID_sm3WithRSAEncryption 1144 #define OBJ_sm3WithRSAEncryption OBJ_sm_scheme,504L +#define SN_SM2_with_SM3 "SM2-SM3" +#define LN_SM2_with_SM3 "SM2-with-SM3" +#define NID_SM2_with_SM3 1204 +#define OBJ_SM2_with_SM3 OBJ_sm_scheme,501L + #define LN_hmacWithSHA224 "hmacWithSHA224" #define NID_hmacWithSHA224 798 #define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L @@ -1385,6 +1423,10 @@ #define NID_id_qcs 267 #define OBJ_id_qcs OBJ_id_pkix,11L +#define SN_id_cp "id-cp" +#define NID_id_cp 1238 +#define OBJ_id_cp OBJ_id_pkix,14L + #define SN_id_cct "id-cct" #define NID_id_cct 268 #define OBJ_id_cct OBJ_id_pkix,12L @@ -1518,6 +1560,14 @@ #define NID_tlsfeature 1020 #define OBJ_tlsfeature OBJ_id_pe,24L +#define SN_sbgp_ipAddrBlockv2 "sbgp-ipAddrBlockv2" +#define NID_sbgp_ipAddrBlockv2 1239 +#define OBJ_sbgp_ipAddrBlockv2 OBJ_id_pe,28L + +#define SN_sbgp_autonomousSysNumv2 "sbgp-autonomousSysNumv2" +#define NID_sbgp_autonomousSysNumv2 1240 +#define OBJ_sbgp_autonomousSysNumv2 OBJ_id_pe,29L + #define SN_id_qt_cps "id-qt-cps" #define LN_id_qt_cps "Policy Qualifier CPS" #define NID_id_qt_cps 164 @@ -1637,6 +1687,26 @@ #define NID_cmcRA 1132 #define OBJ_cmcRA OBJ_id_kp,28L +#define SN_cmcArchive "cmcArchive" +#define LN_cmcArchive "CMC Archive Server" +#define NID_cmcArchive 1219 +#define OBJ_cmcArchive OBJ_id_kp,29L + +#define SN_id_kp_bgpsec_router "id-kp-bgpsec-router" +#define LN_id_kp_bgpsec_router "BGPsec Router" +#define NID_id_kp_bgpsec_router 1220 +#define OBJ_id_kp_bgpsec_router OBJ_id_kp,30L + +#define SN_id_kp_BrandIndicatorforMessageIdentification "id-kp-BrandIndicatorforMessageIdentification" +#define LN_id_kp_BrandIndicatorforMessageIdentification "Brand Indicator for Message Identification" +#define NID_id_kp_BrandIndicatorforMessageIdentification 1221 +#define OBJ_id_kp_BrandIndicatorforMessageIdentification OBJ_id_kp,31L + +#define SN_cmKGA "cmKGA" +#define LN_cmKGA "Certificate Management Key Generation Authority" +#define NID_cmKGA 1222 +#define OBJ_cmKGA OBJ_id_kp,32L + #define SN_id_it_caProtEncCert "id-it-caProtEncCert" #define NID_id_it_caProtEncCert 298 #define OBJ_id_it_caProtEncCert OBJ_id_it,1L @@ -1701,6 +1771,18 @@ #define NID_id_it_suppLangTags 784 #define OBJ_id_it_suppLangTags OBJ_id_it,16L +#define SN_id_it_caCerts "id-it-caCerts" +#define NID_id_it_caCerts 1223 +#define OBJ_id_it_caCerts OBJ_id_it,17L + +#define SN_id_it_rootCaKeyUpdate "id-it-rootCaKeyUpdate" +#define NID_id_it_rootCaKeyUpdate 1224 +#define OBJ_id_it_rootCaKeyUpdate OBJ_id_it,18L + +#define SN_id_it_certReqTemplate "id-it-certReqTemplate" +#define NID_id_it_certReqTemplate 1225 +#define OBJ_id_it_certReqTemplate OBJ_id_it,19L + #define SN_id_regCtrl "id-regCtrl" #define NID_id_regCtrl 313 #define OBJ_id_regCtrl OBJ_id_pkip,1L @@ -1846,6 +1928,26 @@ #define NID_id_on_permanentIdentifier 858 #define OBJ_id_on_permanentIdentifier OBJ_id_on,3L +#define SN_XmppAddr "id-on-xmppAddr" +#define LN_XmppAddr "XmppAddr" +#define NID_XmppAddr 1209 +#define OBJ_XmppAddr OBJ_id_on,5L + +#define SN_SRVName "id-on-dnsSRV" +#define LN_SRVName "SRVName" +#define NID_SRVName 1210 +#define OBJ_SRVName OBJ_id_on,7L + +#define SN_NAIRealm "id-on-NAIRealm" +#define LN_NAIRealm "NAIRealm" +#define NID_NAIRealm 1211 +#define OBJ_NAIRealm OBJ_id_on,8L + +#define SN_id_on_SmtpUTF8Mailbox "id-on-SmtpUTF8Mailbox" +#define LN_id_on_SmtpUTF8Mailbox "Smtp UTF8 Mailbox" +#define NID_id_on_SmtpUTF8Mailbox 1208 +#define OBJ_id_on_SmtpUTF8Mailbox OBJ_id_on,9L + #define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" #define NID_id_pda_dateOfBirth 348 #define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L @@ -1894,6 +1996,14 @@ #define NID_id_qcs_pkixQCSyntax_v1 359 #define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L +#define SN_ipAddr_asNumber "ipAddr-asNumber" +#define NID_ipAddr_asNumber 1241 +#define OBJ_ipAddr_asNumber OBJ_id_cp,2L + +#define SN_ipAddr_asNumberv2 "ipAddr-asNumberv2" +#define NID_ipAddr_asNumberv2 1242 +#define OBJ_ipAddr_asNumberv2 OBJ_id_cp,3L + #define SN_id_cct_crs "id-cct-crs" #define NID_id_cct_crs 360 #define OBJ_id_cct_crs OBJ_id_cct,1L @@ -1946,6 +2056,21 @@ #define NID_caRepository 785 #define OBJ_caRepository OBJ_id_ad,5L +#define SN_rpkiManifest "rpkiManifest" +#define LN_rpkiManifest "RPKI Manifest" +#define NID_rpkiManifest 1243 +#define OBJ_rpkiManifest OBJ_id_ad,10L + +#define SN_signedObject "signedObject" +#define LN_signedObject "Signed Object" +#define NID_signedObject 1244 +#define OBJ_signedObject OBJ_id_ad,11L + +#define SN_rpkiNotify "rpkiNotify" +#define LN_rpkiNotify "RPKI Notify" +#define NID_rpkiNotify 1245 +#define OBJ_rpkiNotify OBJ_id_ad,13L + #define OBJ_id_pkix_OCSP OBJ_ad_OCSP #define SN_id_pkix_OCSP_basic "basicOCSPResponse" @@ -2113,15 +2238,25 @@ #define NID_ripemd160WithRSA 119 #define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L +#define SN_blake2bmac "BLAKE2BMAC" +#define LN_blake2bmac "blake2bmac" +#define NID_blake2bmac 1201 +#define OBJ_blake2bmac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L + +#define SN_blake2smac "BLAKE2SMAC" +#define LN_blake2smac "blake2smac" +#define NID_blake2smac 1202 +#define OBJ_blake2smac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L + #define SN_blake2b512 "BLAKE2b512" #define LN_blake2b512 "blake2b512" #define NID_blake2b512 1056 -#define OBJ_blake2b512 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L,16L +#define OBJ_blake2b512 OBJ_blake2bmac,16L #define SN_blake2s256 "BLAKE2s256" #define LN_blake2s256 "blake2s256" #define NID_blake2s256 1057 -#define OBJ_blake2s256 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L,8L +#define OBJ_blake2s256 OBJ_blake2smac,8L #define SN_sxnet "SXNetID" #define LN_sxnet "Strong Extranet ID" @@ -2971,6 +3106,16 @@ #define NID_hmac_sha3_512 1105 #define OBJ_hmac_sha3_512 OBJ_nist_hashalgs,16L +#define SN_kmac128 "KMAC128" +#define LN_kmac128 "kmac128" +#define NID_kmac128 1196 +#define OBJ_kmac128 OBJ_nist_hashalgs,19L + +#define SN_kmac256 "KMAC256" +#define LN_kmac256 "kmac256" +#define NID_kmac256 1197 +#define OBJ_kmac256 OBJ_nist_hashalgs,20L + #define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L #define SN_dsa_with_SHA224 "dsa_with_SHA224" @@ -4230,25 +4375,25 @@ #define NID_id_tc26_cipher_gostr3412_2015_magma 1173 #define OBJ_id_tc26_cipher_gostr3412_2015_magma OBJ_id_tc26_cipher,1L -#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm "id-tc26-cipher-gostr3412-2015-magma-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm 1174 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L +#define SN_magma_ctr_acpkm "magma-ctr-acpkm" +#define NID_magma_ctr_acpkm 1174 +#define OBJ_magma_ctr_acpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L -#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac 1175 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L +#define SN_magma_ctr_acpkm_omac "magma-ctr-acpkm-omac" +#define NID_magma_ctr_acpkm_omac 1175 +#define OBJ_magma_ctr_acpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L #define SN_id_tc26_cipher_gostr3412_2015_kuznyechik "id-tc26-cipher-gostr3412-2015-kuznyechik" #define NID_id_tc26_cipher_gostr3412_2015_kuznyechik 1176 #define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik OBJ_id_tc26_cipher,2L -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm 1177 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L +#define SN_kuznyechik_ctr_acpkm "kuznyechik-ctr-acpkm" +#define NID_kuznyechik_ctr_acpkm 1177 +#define OBJ_kuznyechik_ctr_acpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac 1178 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L +#define SN_kuznyechik_ctr_acpkm_omac "kuznyechik-ctr-acpkm-omac" +#define NID_kuznyechik_ctr_acpkm_omac 1178 +#define OBJ_kuznyechik_ctr_acpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L #define SN_id_tc26_agreement "id-tc26-agreement" #define NID_id_tc26_agreement 991 @@ -4270,17 +4415,17 @@ #define NID_id_tc26_wrap_gostr3412_2015_magma 1180 #define OBJ_id_tc26_wrap_gostr3412_2015_magma OBJ_id_tc26_wrap,1L -#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 "id-tc26-wrap-gostr3412-2015-magma-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 1181 -#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L +#define SN_magma_kexp15 "magma-kexp15" +#define NID_magma_kexp15 1181 +#define OBJ_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L #define SN_id_tc26_wrap_gostr3412_2015_kuznyechik "id-tc26-wrap-gostr3412-2015-kuznyechik" #define NID_id_tc26_wrap_gostr3412_2015_kuznyechik 1182 #define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik OBJ_id_tc26_wrap,2L -#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 "id-tc26-wrap-gostr3412-2015-kuznyechik-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 1183 -#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L +#define SN_kuznyechik_kexp15 "kuznyechik-kexp15" +#define NID_kuznyechik_kexp15 1183 +#define OBJ_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L #define SN_id_tc26_constants "id-tc26-constants" #define NID_id_tc26_constants 994 @@ -4370,6 +4515,11 @@ #define NID_SNILS 1006 #define OBJ_SNILS OBJ_member_body,643L,100L,3L +#define SN_OGRNIP "OGRNIP" +#define LN_OGRNIP "OGRNIP" +#define NID_OGRNIP 1226 +#define OBJ_OGRNIP OBJ_member_body,643L,100L,5L + #define SN_subjectSignTool "subjectSignTool" #define LN_subjectSignTool "Signing Tool of Subject" #define NID_subjectSignTool 1007 @@ -4380,23 +4530,58 @@ #define NID_issuerSignTool 1008 #define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L -#define SN_grasshopper_ecb "grasshopper-ecb" -#define NID_grasshopper_ecb 1012 +#define SN_classSignTool "classSignTool" +#define LN_classSignTool "Class of Signing Tool" +#define NID_classSignTool 1227 +#define OBJ_classSignTool OBJ_member_body,643L,100L,113L -#define SN_grasshopper_ctr "grasshopper-ctr" -#define NID_grasshopper_ctr 1013 +#define SN_classSignToolKC1 "classSignToolKC1" +#define LN_classSignToolKC1 "Class of Signing Tool KC1" +#define NID_classSignToolKC1 1228 +#define OBJ_classSignToolKC1 OBJ_member_body,643L,100L,113L,1L -#define SN_grasshopper_ofb "grasshopper-ofb" -#define NID_grasshopper_ofb 1014 +#define SN_classSignToolKC2 "classSignToolKC2" +#define LN_classSignToolKC2 "Class of Signing Tool KC2" +#define NID_classSignToolKC2 1229 +#define OBJ_classSignToolKC2 OBJ_member_body,643L,100L,113L,2L -#define SN_grasshopper_cbc "grasshopper-cbc" -#define NID_grasshopper_cbc 1015 +#define SN_classSignToolKC3 "classSignToolKC3" +#define LN_classSignToolKC3 "Class of Signing Tool KC3" +#define NID_classSignToolKC3 1230 +#define OBJ_classSignToolKC3 OBJ_member_body,643L,100L,113L,3L -#define SN_grasshopper_cfb "grasshopper-cfb" -#define NID_grasshopper_cfb 1016 +#define SN_classSignToolKB1 "classSignToolKB1" +#define LN_classSignToolKB1 "Class of Signing Tool KB1" +#define NID_classSignToolKB1 1231 +#define OBJ_classSignToolKB1 OBJ_member_body,643L,100L,113L,4L -#define SN_grasshopper_mac "grasshopper-mac" -#define NID_grasshopper_mac 1017 +#define SN_classSignToolKB2 "classSignToolKB2" +#define LN_classSignToolKB2 "Class of Signing Tool KB2" +#define NID_classSignToolKB2 1232 +#define OBJ_classSignToolKB2 OBJ_member_body,643L,100L,113L,5L + +#define SN_classSignToolKA1 "classSignToolKA1" +#define LN_classSignToolKA1 "Class of Signing Tool KA1" +#define NID_classSignToolKA1 1233 +#define OBJ_classSignToolKA1 OBJ_member_body,643L,100L,113L,6L + +#define SN_kuznyechik_ecb "kuznyechik-ecb" +#define NID_kuznyechik_ecb 1012 + +#define SN_kuznyechik_ctr "kuznyechik-ctr" +#define NID_kuznyechik_ctr 1013 + +#define SN_kuznyechik_ofb "kuznyechik-ofb" +#define NID_kuznyechik_ofb 1014 + +#define SN_kuznyechik_cbc "kuznyechik-cbc" +#define NID_kuznyechik_cbc 1015 + +#define SN_kuznyechik_cfb "kuznyechik-cfb" +#define NID_kuznyechik_cfb 1016 + +#define SN_kuznyechik_mac "kuznyechik-mac" +#define NID_kuznyechik_mac 1017 #define SN_magma_ecb "magma-ecb" #define NID_magma_ecb 1187 @@ -4970,6 +5155,22 @@ #define LN_hkdf "hkdf" #define NID_hkdf 1036 +#define SN_sshkdf "SSHKDF" +#define LN_sshkdf "sshkdf" +#define NID_sshkdf 1203 + +#define SN_sskdf "SSKDF" +#define LN_sskdf "sskdf" +#define NID_sskdf 1205 + +#define SN_x942kdf "X942KDF" +#define LN_x942kdf "x942kdf" +#define NID_x942kdf 1207 + +#define SN_x963kdf "X963KDF" +#define LN_x963kdf "x963kdf" +#define NID_x963kdf 1206 + #define SN_id_pkinit "id-pkinit" #define NID_id_pkinit 1031 #define OBJ_id_pkinit 1L,3L,6L,1L,5L,2L,3L @@ -5036,6 +5237,10 @@ #define LN_kx_gost "kx-gost" #define NID_kx_gost 1045 +#define SN_kx_gost18 "KxGOST18" +#define LN_kx_gost18 "kx-gost18" +#define NID_kx_gost18 1218 + #define SN_kx_any "KxANY" #define LN_kx_any "kx-any" #define NID_kx_any 1063 @@ -5099,6 +5304,24 @@ #define SN_ffdhe8192 "ffdhe8192" #define NID_ffdhe8192 1130 +#define SN_modp_1536 "modp_1536" +#define NID_modp_1536 1212 + +#define SN_modp_2048 "modp_2048" +#define NID_modp_2048 1213 + +#define SN_modp_3072 "modp_3072" +#define NID_modp_3072 1214 + +#define SN_modp_4096 "modp_4096" +#define NID_modp_4096 1215 + +#define SN_modp_6144 "modp_6144" +#define NID_modp_6144 1216 + +#define SN_modp_8192 "modp_8192" +#define NID_modp_8192 1217 + #define SN_ISO_UA "ISO-UA" #define NID_ISO_UA 1150 #define OBJ_ISO_UA OBJ_member_body,804L @@ -5196,3 +5419,63 @@ #define LN_uacurve9 "DSTU curve 9" #define NID_uacurve9 1169 #define OBJ_uacurve9 OBJ_dstu4145le,2L,9L + +#define SN_aes_128_siv "AES-128-SIV" +#define LN_aes_128_siv "aes-128-siv" +#define NID_aes_128_siv 1198 + +#define SN_aes_192_siv "AES-192-SIV" +#define LN_aes_192_siv "aes-192-siv" +#define NID_aes_192_siv 1199 + +#define SN_aes_256_siv "AES-256-SIV" +#define LN_aes_256_siv "aes-256-siv" +#define NID_aes_256_siv 1200 + +#endif /* OPENSSL_OBJ_MAC_H */ + +#ifndef OPENSSL_NO_DEPRECATED_3_0 + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm SN_magma_ctr_acpkm +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm NID_magma_ctr_acpkm +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_magma_ctr_acpkm + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac SN_magma_ctr_acpkm_omac +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac NID_magma_ctr_acpkm_omac +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_magma_ctr_acpkm_omac + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm SN_kuznyechik_ctr_acpkm +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm NID_kuznyechik_ctr_acpkm +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_kuznyechik_ctr_acpkm + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac SN_kuznyechik_ctr_acpkm_omac +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac NID_kuznyechik_ctr_acpkm_omac +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_kuznyechik_ctr_acpkm_omac + +#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 SN_magma_kexp15 +#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 NID_magma_kexp15 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_magma_kexp15 + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 SN_kuznyechik_kexp15 +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 NID_kuznyechik_kexp15 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_kuznyechik_kexp15 + +#define SN_grasshopper_ecb SN_kuznyechik_ecb +#define NID_grasshopper_ecb NID_kuznyechik_ecb + +#define SN_grasshopper_ctr SN_kuznyechik_ctr +#define NID_grasshopper_ctr NID_kuznyechik_ctr + +#define SN_grasshopper_ofb SN_kuznyechik_ofb +#define NID_grasshopper_ofb NID_kuznyechik_ofb + +#define SN_grasshopper_cbc SN_kuznyechik_cbc +#define NID_grasshopper_cbc NID_kuznyechik_cbc + +#define SN_grasshopper_cfb SN_kuznyechik_cfb +#define NID_grasshopper_cfb NID_kuznyechik_cfb + +#define SN_grasshopper_mac SN_kuznyechik_mac +#define NID_grasshopper_mac NID_kuznyechik_mac + +#endif /* OPENSSL_NO_DEPRECATED_3_0 */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/objects.h b/deps/openssl/android/x86/usr/local/include/openssl/objects.h index 5e8b5762..9ea91c27 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/objects.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/objects.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OBJECTS_H -# define HEADER_OBJECTS_H +#ifndef OPENSSL_OBJECTS_H +# define OPENSSL_OBJECTS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OBJECTS_H +# endif # include # include @@ -20,7 +26,9 @@ # define OBJ_NAME_TYPE_CIPHER_METH 0x02 # define OBJ_NAME_TYPE_PKEY_METH 0x03 # define OBJ_NAME_TYPE_COMP_METH 0x04 -# define OBJ_NAME_TYPE_NUM 0x05 +# define OBJ_NAME_TYPE_MAC_METH 0x05 +# define OBJ_NAME_TYPE_KDF_METH 0x06 +# define OBJ_NAME_TYPE_NUM 0x07 # define OBJ_NAME_ALIAS 0x8000 @@ -55,7 +63,7 @@ void OBJ_NAME_do_all_sorted(int type, void (*fn) (const OBJ_NAME *, void *arg), void *arg); -ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); +DECLARE_ASN1_DUP_FUNCTION_name(ASN1_OBJECT, OBJ) ASN1_OBJECT *OBJ_nid2obj(int n); const char *OBJ_nid2ln(int n); const char *OBJ_nid2sn(int n); @@ -155,7 +163,7 @@ const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, int OBJ_new_nid(int num); int OBJ_add_object(const ASN1_OBJECT *obj); int OBJ_create(const char *oid, const char *sn, const char *ln); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OBJ_cleanup() while(0) continue #endif int OBJ_create_objects(BIO *in); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/objectserr.h b/deps/openssl/android/x86/usr/local/include/openssl/objectserr.h index 02e166f1..585217f6 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/objectserr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/objectserr.h @@ -1,42 +1,28 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OBJERR_H -# define HEADER_OBJERR_H +#ifndef OPENSSL_OBJECTSERR_H +# define OPENSSL_OBJECTSERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OBJ_strings(void); -/* - * OBJ function codes. - */ -# define OBJ_F_OBJ_ADD_OBJECT 105 -# define OBJ_F_OBJ_ADD_SIGID 107 -# define OBJ_F_OBJ_CREATE 100 -# define OBJ_F_OBJ_DUP 101 -# define OBJ_F_OBJ_NAME_NEW_INDEX 106 -# define OBJ_F_OBJ_NID2LN 102 -# define OBJ_F_OBJ_NID2OBJ 103 -# define OBJ_F_OBJ_NID2SN 104 -# define OBJ_F_OBJ_TXT2OBJ 108 /* * OBJ reason codes. */ # define OBJ_R_OID_EXISTS 102 # define OBJ_R_UNKNOWN_NID 101 +# define OBJ_R_UNKNOWN_OBJECT_NAME 103 #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ocsp.h b/deps/openssl/android/x86/usr/local/include/openssl/ocsp.h index 4d759a49..142b1831 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ocsp.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ocsp.h @@ -1,16 +1,29 @@ /* - * Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ocsp.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OCSP_H -# define HEADER_OCSP_H -#include + +#ifndef OPENSSL_OCSP_H +# define OPENSSL_OCSP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OCSP_H +# endif + +# include +# include +# include /* * These definitions are outside the OPENSSL_NO_OCSP guard because although for @@ -26,30 +39,34 @@ * superseded (4), * cessationOfOperation (5), * certificateHold (6), - * removeFromCRL (8) } + * -- value 7 is not used + * removeFromCRL (8), + * privilegeWithdrawn (9), + * aACompromise (10) } */ -# define OCSP_REVOKED_STATUS_NOSTATUS -1 -# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 -# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 -# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 -# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 -# define OCSP_REVOKED_STATUS_SUPERSEDED 4 -# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 -# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 -# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9 +# define OCSP_REVOKED_STATUS_AACOMPROMISE 10 # ifndef OPENSSL_NO_OCSP -# include # include # include # include # include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif /* Various flags and values */ @@ -67,19 +84,68 @@ extern "C" { # define OCSP_TRUSTOTHER 0x200 # define OCSP_RESPID_KEY 0x400 # define OCSP_NOTIME 0x800 +# define OCSP_PARTIAL_CHAIN 0x1000 typedef struct ocsp_cert_id_st OCSP_CERTID; - -DEFINE_STACK_OF(OCSP_CERTID) - typedef struct ocsp_one_request_st OCSP_ONEREQ; - -DEFINE_STACK_OF(OCSP_ONEREQ) - typedef struct ocsp_req_info_st OCSP_REQINFO; typedef struct ocsp_signature_st OCSP_SIGNATURE; typedef struct ocsp_request_st OCSP_REQUEST; +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_CERTID, OCSP_CERTID, OCSP_CERTID) +#define sk_OCSP_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_value(sk, idx) ((OCSP_CERTID *)OPENSSL_sk_value(ossl_check_const_OCSP_CERTID_sk_type(sk), (idx))) +#define sk_OCSP_CERTID_new(cmp) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new(ossl_check_OCSP_CERTID_compfunc_type(cmp))) +#define sk_OCSP_CERTID_new_null() ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_null()) +#define sk_OCSP_CERTID_new_reserve(cmp, n) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_CERTID_compfunc_type(cmp), (n))) +#define sk_OCSP_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_CERTID_sk_type(sk), (n)) +#define sk_OCSP_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_delete(sk, i) ((OCSP_CERTID *)OPENSSL_sk_delete(ossl_check_OCSP_CERTID_sk_type(sk), (i))) +#define sk_OCSP_CERTID_delete_ptr(sk, ptr) ((OCSP_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr))) +#define sk_OCSP_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_pop(sk) ((OCSP_CERTID *)OPENSSL_sk_pop(ossl_check_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_shift(sk) ((OCSP_CERTID *)OPENSSL_sk_shift(ossl_check_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_CERTID_sk_type(sk),ossl_check_OCSP_CERTID_freefunc_type(freefunc)) +#define sk_OCSP_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), (idx)) +#define sk_OCSP_CERTID_set(sk, idx, ptr) ((OCSP_CERTID *)OPENSSL_sk_set(ossl_check_OCSP_CERTID_sk_type(sk), (idx), ossl_check_OCSP_CERTID_type(ptr))) +#define sk_OCSP_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), pnum) +#define sk_OCSP_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_dup(sk) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_copyfunc_type(copyfunc), ossl_check_OCSP_CERTID_freefunc_type(freefunc))) +#define sk_OCSP_CERTID_set_cmp_func(sk, cmp) ((sk_OCSP_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_ONEREQ, OCSP_ONEREQ, OCSP_ONEREQ) +#define sk_OCSP_ONEREQ_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_value(sk, idx) ((OCSP_ONEREQ *)OPENSSL_sk_value(ossl_check_const_OCSP_ONEREQ_sk_type(sk), (idx))) +#define sk_OCSP_ONEREQ_new(cmp) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new(ossl_check_OCSP_ONEREQ_compfunc_type(cmp))) +#define sk_OCSP_ONEREQ_new_null() ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_null()) +#define sk_OCSP_ONEREQ_new_reserve(cmp, n) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_ONEREQ_compfunc_type(cmp), (n))) +#define sk_OCSP_ONEREQ_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_ONEREQ_sk_type(sk), (n)) +#define sk_OCSP_ONEREQ_free(sk) OPENSSL_sk_free(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_delete(sk, i) ((OCSP_ONEREQ *)OPENSSL_sk_delete(ossl_check_OCSP_ONEREQ_sk_type(sk), (i))) +#define sk_OCSP_ONEREQ_delete_ptr(sk, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr))) +#define sk_OCSP_ONEREQ_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_pop(sk) ((OCSP_ONEREQ *)OPENSSL_sk_pop(ossl_check_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_shift(sk) ((OCSP_ONEREQ *)OPENSSL_sk_shift(ossl_check_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_ONEREQ_sk_type(sk),ossl_check_OCSP_ONEREQ_freefunc_type(freefunc)) +#define sk_OCSP_ONEREQ_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), (idx)) +#define sk_OCSP_ONEREQ_set(sk, idx, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_set(ossl_check_OCSP_ONEREQ_sk_type(sk), (idx), ossl_check_OCSP_ONEREQ_type(ptr))) +#define sk_OCSP_ONEREQ_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), pnum) +#define sk_OCSP_ONEREQ_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_dup(sk) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_dup(ossl_check_const_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_copyfunc_type(copyfunc), ossl_check_OCSP_ONEREQ_freefunc_type(freefunc))) +#define sk_OCSP_ONEREQ_set_cmp_func(sk, cmp) ((sk_OCSP_ONEREQ_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_compfunc_type(cmp))) + + # define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 # define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 # define OCSP_RESPONSE_STATUS_INTERNALERROR 2 @@ -92,7 +158,33 @@ typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; # define V_OCSP_RESPID_NAME 0 # define V_OCSP_RESPID_KEY 1 -DEFINE_STACK_OF(OCSP_RESPID) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_RESPID, OCSP_RESPID, OCSP_RESPID) +#define sk_OCSP_RESPID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_value(sk, idx) ((OCSP_RESPID *)OPENSSL_sk_value(ossl_check_const_OCSP_RESPID_sk_type(sk), (idx))) +#define sk_OCSP_RESPID_new(cmp) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new(ossl_check_OCSP_RESPID_compfunc_type(cmp))) +#define sk_OCSP_RESPID_new_null() ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_null()) +#define sk_OCSP_RESPID_new_reserve(cmp, n) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_RESPID_compfunc_type(cmp), (n))) +#define sk_OCSP_RESPID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_RESPID_sk_type(sk), (n)) +#define sk_OCSP_RESPID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_delete(sk, i) ((OCSP_RESPID *)OPENSSL_sk_delete(ossl_check_OCSP_RESPID_sk_type(sk), (i))) +#define sk_OCSP_RESPID_delete_ptr(sk, ptr) ((OCSP_RESPID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr))) +#define sk_OCSP_RESPID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_pop(sk) ((OCSP_RESPID *)OPENSSL_sk_pop(ossl_check_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_shift(sk) ((OCSP_RESPID *)OPENSSL_sk_shift(ossl_check_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_RESPID_sk_type(sk),ossl_check_OCSP_RESPID_freefunc_type(freefunc)) +#define sk_OCSP_RESPID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), (idx)) +#define sk_OCSP_RESPID_set(sk, idx, ptr) ((OCSP_RESPID *)OPENSSL_sk_set(ossl_check_OCSP_RESPID_sk_type(sk), (idx), ossl_check_OCSP_RESPID_type(ptr))) +#define sk_OCSP_RESPID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), pnum) +#define sk_OCSP_RESPID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_dup(sk) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_copyfunc_type(copyfunc), ossl_check_OCSP_RESPID_freefunc_type(freefunc))) +#define sk_OCSP_RESPID_set_cmp_func(sk, cmp) ((sk_OCSP_RESPID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_compfunc_type(cmp))) + typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; @@ -103,7 +195,33 @@ typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; typedef struct ocsp_single_response_st OCSP_SINGLERESP; -DEFINE_STACK_OF(OCSP_SINGLERESP) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_SINGLERESP, OCSP_SINGLERESP, OCSP_SINGLERESP) +#define sk_OCSP_SINGLERESP_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_value(sk, idx) ((OCSP_SINGLERESP *)OPENSSL_sk_value(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), (idx))) +#define sk_OCSP_SINGLERESP_new(cmp) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp))) +#define sk_OCSP_SINGLERESP_new_null() ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_null()) +#define sk_OCSP_SINGLERESP_new_reserve(cmp, n) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp), (n))) +#define sk_OCSP_SINGLERESP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_SINGLERESP_sk_type(sk), (n)) +#define sk_OCSP_SINGLERESP_free(sk) OPENSSL_sk_free(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_delete(sk, i) ((OCSP_SINGLERESP *)OPENSSL_sk_delete(ossl_check_OCSP_SINGLERESP_sk_type(sk), (i))) +#define sk_OCSP_SINGLERESP_delete_ptr(sk, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr))) +#define sk_OCSP_SINGLERESP_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_pop(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_pop(ossl_check_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_shift(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_shift(ossl_check_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_SINGLERESP_sk_type(sk),ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc)) +#define sk_OCSP_SINGLERESP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), (idx)) +#define sk_OCSP_SINGLERESP_set(sk, idx, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_set(ossl_check_OCSP_SINGLERESP_sk_type(sk), (idx), ossl_check_OCSP_SINGLERESP_type(ptr))) +#define sk_OCSP_SINGLERESP_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), pnum) +#define sk_OCSP_SINGLERESP_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_dup(sk) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_dup(ossl_check_const_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_copyfunc_type(copyfunc), ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc))) +#define sk_OCSP_SINGLERESP_set_cmp_func(sk, cmp) ((sk_OCSP_SINGLERESP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_compfunc_type(cmp))) + typedef struct ocsp_response_data_st OCSP_RESPDATA; @@ -143,28 +261,37 @@ typedef struct ocsp_service_locator_st OCSP_SERVICELOC; ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) # define OCSP_CERTSTATUS_dup(cs)\ - (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ - (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) + (OCSP_CERTSTATUS*)ASN1_dup((i2d_of_void *)i2d_OCSP_CERTSTATUS,\ + (d2i_of_void *)d2i_OCSP_CERTSTATUS,(char *)(cs)) -OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); +DECLARE_ASN1_DUP_FUNCTION(OCSP_CERTID) +OSSL_HTTP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, + const OCSP_REQUEST *req, int buf_size); OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); -OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, - int maxline); -int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); -int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); -OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); -void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); -void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); -int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, - ASN1_VALUE *val); -int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, - const ASN1_ITEM *it); -BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); -int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); -int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); -int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, - const char *name, const char *value); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef OSSL_HTTP_REQ_CTX OCSP_REQ_CTX; +# define OCSP_REQ_CTX_new(io, buf_size) \ + OSSL_HTTP_REQ_CTX_new(io, io, buf_size) +# define OCSP_REQ_CTX_free OSSL_HTTP_REQ_CTX_free +# define OCSP_REQ_CTX_http(rctx, op, path) \ + (OSSL_HTTP_REQ_CTX_set_expected(rctx, NULL, 1 /* asn1 */, 0, 0) && \ + OSSL_HTTP_REQ_CTX_set_request_line(rctx, strcmp(op, "POST") == 0, \ + NULL, NULL, path)) +# define OCSP_REQ_CTX_add1_header OSSL_HTTP_REQ_CTX_add1_header +# define OCSP_REQ_CTX_i2d(r, it, req) \ + OSSL_HTTP_REQ_CTX_set1_req(r, "application/ocsp-request", it, req) +# define OCSP_REQ_CTX_set1_req(r, req) \ + OCSP_REQ_CTX_i2d(r, ASN1_ITEM_rptr(OCSP_REQUEST), (ASN1_VALUE *)(req)) +# define OCSP_REQ_CTX_nbio OSSL_HTTP_REQ_CTX_nbio +# define OCSP_REQ_CTX_nbio_d2i OSSL_HTTP_REQ_CTX_nbio_d2i +# define OCSP_sendreq_nbio(p, r) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(r, (ASN1_VALUE **)(p), \ + ASN1_ITEM_rptr(OCSP_RESPONSE)) +# define OCSP_REQ_CTX_get0_mem_bio OSSL_HTTP_REQ_CTX_get0_mem_bio +# define OCSP_set_max_response_length OSSL_HTTP_REQ_CTX_set_max_response_length +# endif OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, const X509 *issuer); @@ -181,7 +308,7 @@ int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); -int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); +int OCSP_request_set1_name(OCSP_REQUEST *req, const X509_NAME *nm); int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); int OCSP_request_sign(OCSP_REQUEST *req, @@ -226,8 +353,8 @@ int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, X509_STORE *store, unsigned long flags); -int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, - int *pssl); +# define OCSP_parse_url(url, host, port, path, ssl) \ + OSSL_HTTP_parse_url(url, ssl, NULL, host, port, NULL, path, NULL, NULL) int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); @@ -254,7 +381,11 @@ int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, X509 *signer, EVP_MD_CTX *ctx, STACK_OF(X509) *certs, unsigned long flags); int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key_ex(OCSP_RESPID *respid, X509 *cert, + OSSL_LIB_CTX *libctx, const char *propq); int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match_ex(OCSP_RESPID *respid, X509 *cert, OSSL_LIB_CTX *libctx, + const char *propq); int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); @@ -263,7 +394,7 @@ X509_EXTENSION *OCSP_accept_responses_new(char **oids); X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); -X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, const char **urls); +X509_EXTENSION *OCSP_url_svcloc_new(const X509_NAME *issuer, const char **urls); int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); @@ -348,5 +479,5 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, # ifdef __cplusplus } # endif -# endif +# endif /* !defined(OPENSSL_NO_OCSP) */ #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ocsp.h.in b/deps/openssl/android/x86/usr/local/include/openssl/ocsp.h.in new file mode 100644 index 00000000..e2cc2716 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/ocsp.h.in @@ -0,0 +1,387 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_OCSP_H +# define OPENSSL_OCSP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OCSP_H +# endif + +# include +# include +# include + +/* + * These definitions are outside the OPENSSL_NO_OCSP guard because although for + * historical reasons they have OCSP_* names, they can actually be used + * independently of OCSP. E.g. see RFC5280 + */ +/*- + * CRLReason ::= ENUMERATED { + * unspecified (0), + * keyCompromise (1), + * cACompromise (2), + * affiliationChanged (3), + * superseded (4), + * cessationOfOperation (5), + * certificateHold (6), + * -- value 7 is not used + * removeFromCRL (8), + * privilegeWithdrawn (9), + * aACompromise (10) } + */ +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9 +# define OCSP_REVOKED_STATUS_AACOMPROMISE 10 + + +# ifndef OPENSSL_NO_OCSP + +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Various flags and values */ + +# define OCSP_DEFAULT_NONCE_LENGTH 16 + +# define OCSP_NOCERTS 0x1 +# define OCSP_NOINTERN 0x2 +# define OCSP_NOSIGS 0x4 +# define OCSP_NOCHAIN 0x8 +# define OCSP_NOVERIFY 0x10 +# define OCSP_NOEXPLICIT 0x20 +# define OCSP_NOCASIGN 0x40 +# define OCSP_NODELEGATED 0x80 +# define OCSP_NOCHECKS 0x100 +# define OCSP_TRUSTOTHER 0x200 +# define OCSP_RESPID_KEY 0x400 +# define OCSP_NOTIME 0x800 +# define OCSP_PARTIAL_CHAIN 0x1000 + +typedef struct ocsp_cert_id_st OCSP_CERTID; +typedef struct ocsp_one_request_st OCSP_ONEREQ; +typedef struct ocsp_req_info_st OCSP_REQINFO; +typedef struct ocsp_signature_st OCSP_SIGNATURE; +typedef struct ocsp_request_st OCSP_REQUEST; + +{- + generate_stack_macros("OCSP_CERTID") + .generate_stack_macros("OCSP_ONEREQ"); +-} + +# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 +# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 +# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 +# define OCSP_RESPONSE_STATUS_TRYLATER 3 +# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 +# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 + +typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; + +# define V_OCSP_RESPID_NAME 0 +# define V_OCSP_RESPID_KEY 1 + +{- + generate_stack_macros("OCSP_RESPID"); +-} + +typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; + +# define V_OCSP_CERTSTATUS_GOOD 0 +# define V_OCSP_CERTSTATUS_REVOKED 1 +# define V_OCSP_CERTSTATUS_UNKNOWN 2 + +typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; +typedef struct ocsp_single_response_st OCSP_SINGLERESP; + +{- + generate_stack_macros("OCSP_SINGLERESP"); +-} + +typedef struct ocsp_response_data_st OCSP_RESPDATA; + +typedef struct ocsp_basic_response_st OCSP_BASICRESP; + +typedef struct ocsp_crl_id_st OCSP_CRLID; +typedef struct ocsp_service_locator_st OCSP_SERVICELOC; + +# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" +# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" + +# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) + +# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) + +# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ + (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST, \ + bp,(char **)(x),cb,NULL) + +# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb) (OCSP_RESPONSE *)PEM_ASN1_read_bio(\ + (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE, \ + bp,(char **)(x),cb,NULL) + +# define PEM_write_bio_OCSP_REQUEST(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define PEM_write_bio_OCSP_RESPONSE(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) + +# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) + +# define ASN1_BIT_STRING_digest(data,type,md,len) \ + ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) + +# define OCSP_CERTSTATUS_dup(cs)\ + (OCSP_CERTSTATUS*)ASN1_dup((i2d_of_void *)i2d_OCSP_CERTSTATUS,\ + (d2i_of_void *)d2i_OCSP_CERTSTATUS,(char *)(cs)) + +DECLARE_ASN1_DUP_FUNCTION(OCSP_CERTID) + +OSSL_HTTP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, + const OCSP_REQUEST *req, int buf_size); +OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef OSSL_HTTP_REQ_CTX OCSP_REQ_CTX; +# define OCSP_REQ_CTX_new(io, buf_size) \ + OSSL_HTTP_REQ_CTX_new(io, io, buf_size) +# define OCSP_REQ_CTX_free OSSL_HTTP_REQ_CTX_free +# define OCSP_REQ_CTX_http(rctx, op, path) \ + (OSSL_HTTP_REQ_CTX_set_expected(rctx, NULL, 1 /* asn1 */, 0, 0) && \ + OSSL_HTTP_REQ_CTX_set_request_line(rctx, strcmp(op, "POST") == 0, \ + NULL, NULL, path)) +# define OCSP_REQ_CTX_add1_header OSSL_HTTP_REQ_CTX_add1_header +# define OCSP_REQ_CTX_i2d(r, it, req) \ + OSSL_HTTP_REQ_CTX_set1_req(r, "application/ocsp-request", it, req) +# define OCSP_REQ_CTX_set1_req(r, req) \ + OCSP_REQ_CTX_i2d(r, ASN1_ITEM_rptr(OCSP_REQUEST), (ASN1_VALUE *)(req)) +# define OCSP_REQ_CTX_nbio OSSL_HTTP_REQ_CTX_nbio +# define OCSP_REQ_CTX_nbio_d2i OSSL_HTTP_REQ_CTX_nbio_d2i +# define OCSP_sendreq_nbio(p, r) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(r, (ASN1_VALUE **)(p), \ + ASN1_ITEM_rptr(OCSP_RESPONSE)) +# define OCSP_REQ_CTX_get0_mem_bio OSSL_HTTP_REQ_CTX_get0_mem_bio +# define OCSP_set_max_response_length OSSL_HTTP_REQ_CTX_set_max_response_length +# endif + +OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, + const X509 *issuer); + +OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, + const X509_NAME *issuerName, + const ASN1_BIT_STRING *issuerKey, + const ASN1_INTEGER *serialNumber); + +OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); + +int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); +int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); +int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); +int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); + +int OCSP_request_set1_name(OCSP_REQUEST *req, const X509_NAME *nm); +int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); + +int OCSP_request_sign(OCSP_REQUEST *req, + X509 *signer, + EVP_PKEY *key, + const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); + +int OCSP_response_status(OCSP_RESPONSE *resp); +OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); + +const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); +const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs); +const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer, + STACK_OF(X509) *extra_certs); + +int OCSP_resp_count(OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); +const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(const OCSP_BASICRESP* bs); +const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, + const ASN1_OCTET_STRING **pid, + const X509_NAME **pname); +int OCSP_resp_get1_id(const OCSP_BASICRESP *bs, + ASN1_OCTET_STRING **pid, + X509_NAME **pname); + +int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); +int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, + int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, + ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); + +int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, + X509_STORE *store, unsigned long flags); + +# define OCSP_parse_url(url, host, port, path, ssl) \ + OSSL_HTTP_parse_url(url, ssl, NULL, host, port, NULL, path, NULL, NULL) + +int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); +int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); + +int OCSP_request_onereq_count(OCSP_REQUEST *req); +OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); +OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); +int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, + ASN1_OCTET_STRING **pikeyHash, + ASN1_INTEGER **pserial, OCSP_CERTID *cid); +int OCSP_request_is_signed(OCSP_REQUEST *req); +OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, + OCSP_CERTID *cid, + int status, int reason, + ASN1_TIME *revtime, + ASN1_TIME *thisupd, + ASN1_TIME *nextupd); +int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); +int OCSP_basic_sign(OCSP_BASICRESP *brsp, + X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, + X509 *signer, EVP_MD_CTX *ctx, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key_ex(OCSP_RESPID *respid, X509 *cert, + OSSL_LIB_CTX *libctx, const char *propq); +int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match_ex(OCSP_RESPID *respid, X509 *cert, OSSL_LIB_CTX *libctx, + const char *propq); +int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); + +X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); + +X509_EXTENSION *OCSP_accept_responses_new(char **oids); + +X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); + +X509_EXTENSION *OCSP_url_svcloc_new(const X509_NAME *issuer, const char **urls); + +int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); +int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); +int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); +X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); +X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); +void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, + int *idx); +int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); + +int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); +int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); +int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, const ASN1_OBJECT *obj, int lastpos); +int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); +X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); +X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); +void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); +int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); + +int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); +int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); +int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); +X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); +void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, + int *idx); +int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); + +int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); +int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); +int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); +X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); +void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, + int *idx); +int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); +const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x); + +DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) +DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) +DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) +DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) +DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) +DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) +DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) + +const char *OCSP_response_status_str(long s); +const char *OCSP_cert_status_str(long s); +const char *OCSP_crl_reason_str(long s); + +int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); +int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); + +int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, + X509_STORE *st, unsigned long flags); + + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_OCSP) */ +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ocsperr.h b/deps/openssl/android/x86/usr/local/include/openssl/ocsperr.h index 8dd9e01a..46a0523c 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ocsperr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ocsperr.h @@ -1,57 +1,34 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OCSPERR_H -# define HEADER_OCSPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_OCSPERR_H +# define OPENSSL_OCSPERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_OCSP -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OCSP_strings(void); - -/* - * OCSP function codes. - */ -# define OCSP_F_D2I_OCSP_NONCE 102 -# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 -# define OCSP_F_OCSP_BASIC_SIGN 104 -# define OCSP_F_OCSP_BASIC_SIGN_CTX 119 -# define OCSP_F_OCSP_BASIC_VERIFY 105 -# define OCSP_F_OCSP_CERT_ID_NEW 101 -# define OCSP_F_OCSP_CHECK_DELEGATED 106 -# define OCSP_F_OCSP_CHECK_IDS 107 -# define OCSP_F_OCSP_CHECK_ISSUER 108 -# define OCSP_F_OCSP_CHECK_VALIDITY 115 -# define OCSP_F_OCSP_MATCH_ISSUERID 109 -# define OCSP_F_OCSP_PARSE_URL 114 -# define OCSP_F_OCSP_REQUEST_SIGN 110 -# define OCSP_F_OCSP_REQUEST_VERIFY 116 -# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 -# define OCSP_F_PARSE_HTTP_LINE1 118 /* * OCSP reason codes. */ # define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 # define OCSP_R_DIGEST_ERR 102 +# define OCSP_R_DIGEST_NAME_ERR 106 +# define OCSP_R_DIGEST_SIZE_ERR 107 # define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 # define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 -# define OCSP_R_ERROR_PARSING_URL 121 # define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 # define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 # define OCSP_R_NOT_BASIC_RESPONSE 104 @@ -63,8 +40,6 @@ int ERR_load_OCSP_strings(void); # define OCSP_R_REQUEST_NOT_SIGNED 128 # define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 # define OCSP_R_ROOT_CA_NOT_TRUSTED 112 -# define OCSP_R_SERVER_RESPONSE_ERROR 114 -# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 # define OCSP_R_SIGNATURE_FAILURE 117 # define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 # define OCSP_R_STATUS_EXPIRED 125 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/opensslconf.h b/deps/openssl/android/x86/usr/local/include/openssl/opensslconf.h index 211b6ae6..1e83371f 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/opensslconf.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/opensslconf.h @@ -1,203 +1,17 @@ /* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/opensslconf.h.in + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OPENSSL_OPENSSLCONF_H +# define OPENSSL_OPENSSLCONF_H +# pragma once -#ifdef __cplusplus -extern "C" { -#endif +# include +# include -#ifdef OPENSSL_ALGORITHM_DEFINES -# error OPENSSL_ALGORITHM_DEFINES no longer supported -#endif - -/* - * OpenSSL was configured with the following options: - */ - -#ifndef OPENSSL_NO_MD2 -# define OPENSSL_NO_MD2 -#endif -#ifndef OPENSSL_NO_RC5 -# define OPENSSL_NO_RC5 -#endif -#ifndef OPENSSL_THREADS -# define OPENSSL_THREADS -#endif -#ifndef OPENSSL_RAND_SEED_OS -# define OPENSSL_RAND_SEED_OS -#endif -#ifndef OPENSSL_NO_AFALGENG -# define OPENSSL_NO_AFALGENG -#endif -#ifndef OPENSSL_NO_ASAN -# define OPENSSL_NO_ASAN -#endif -#ifndef OPENSSL_NO_CRYPTO_MDEBUG -# define OPENSSL_NO_CRYPTO_MDEBUG -#endif -#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -#endif -#ifndef OPENSSL_NO_DEVCRYPTOENG -# define OPENSSL_NO_DEVCRYPTOENG -#endif -#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -# define OPENSSL_NO_EC_NISTP_64_GCC_128 -#endif -#ifndef OPENSSL_NO_EGD -# define OPENSSL_NO_EGD -#endif -#ifndef OPENSSL_NO_EXTERNAL_TESTS -# define OPENSSL_NO_EXTERNAL_TESTS -#endif -#ifndef OPENSSL_NO_FUZZ_AFL -# define OPENSSL_NO_FUZZ_AFL -#endif -#ifndef OPENSSL_NO_FUZZ_LIBFUZZER -# define OPENSSL_NO_FUZZ_LIBFUZZER -#endif -#ifndef OPENSSL_NO_HEARTBEATS -# define OPENSSL_NO_HEARTBEATS -#endif -#ifndef OPENSSL_NO_MSAN -# define OPENSSL_NO_MSAN -#endif -#ifndef OPENSSL_NO_SCTP -# define OPENSSL_NO_SCTP -#endif -#ifndef OPENSSL_NO_SSL_TRACE -# define OPENSSL_NO_SSL_TRACE -#endif -#ifndef OPENSSL_NO_SSL3 -# define OPENSSL_NO_SSL3 -#endif -#ifndef OPENSSL_NO_SSL3_METHOD -# define OPENSSL_NO_SSL3_METHOD -#endif -#ifndef OPENSSL_NO_TESTS -# define OPENSSL_NO_TESTS -#endif -#ifndef OPENSSL_NO_UBSAN -# define OPENSSL_NO_UBSAN -#endif -#ifndef OPENSSL_NO_UNIT_TEST -# define OPENSSL_NO_UNIT_TEST -#endif -#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS -# define OPENSSL_NO_WEAK_SSL_CIPHERS -#endif -#ifndef OPENSSL_NO_STATIC_ENGINE -# define OPENSSL_NO_STATIC_ENGINE -#endif - - -/* - * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers - * don't like that. This will hopefully silence them. - */ -#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; - -/* - * Applications should use -DOPENSSL_API_COMPAT= to suppress the - * declarations of functions deprecated in or before . Otherwise, they - * still won't see them if the library has been built to disable deprecated - * functions. - */ -#ifndef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# elif defined(__SUNPRO_C) -# if (__SUNPRO_C >= 0x5130) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# endif -#endif - -#ifndef OPENSSL_FILE -# ifdef OPENSSL_NO_FILENAMES -# define OPENSSL_FILE "" -# define OPENSSL_LINE 0 -# else -# define OPENSSL_FILE __FILE__ -# define OPENSSL_LINE __LINE__ -# endif -#endif - -#ifndef OPENSSL_MIN_API -# define OPENSSL_MIN_API 0 -#endif - -#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API -# undef OPENSSL_API_COMPAT -# define OPENSSL_API_COMPAT OPENSSL_MIN_API -#endif - -/* - * Do not deprecate things to be deprecated in version 1.2.0 before the - * OpenSSL version number matches. - */ -#if OPENSSL_VERSION_NUMBER < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) f; -#elif OPENSSL_API_COMPAT < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_2_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10100000L -# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_1_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10000000L -# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_0_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x00908000L -# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_0_9_8(f) -#endif - -/* Generate 80386 code? */ -#undef I386_ONLY - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD - -#undef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* - * The following are cipher-specific, but are part of the public API. - */ -#if !defined(OPENSSL_SYS_UEFI) -# define BN_LLONG -/* Only one for the following should be defined */ -# undef SIXTY_FOUR_BIT_LONG -# undef SIXTY_FOUR_BIT -# define THIRTY_TWO_BIT -#endif - -#define RC4_INT unsigned int - -#ifdef __cplusplus -} -#endif +#endif /* OPENSSL_OPENSSLCONF_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/opensslconf.h.in b/deps/openssl/android/x86/usr/local/include/openssl/opensslconf.h.in deleted file mode 100644 index 06270922..00000000 --- a/deps/openssl/android/x86/usr/local/include/openssl/opensslconf.h.in +++ /dev/null @@ -1,160 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef OPENSSL_ALGORITHM_DEFINES -# error OPENSSL_ALGORITHM_DEFINES no longer supported -#endif - -/* - * OpenSSL was configured with the following options: - */ - -{- if (@{$config{openssl_sys_defines}}) { - foreach (@{$config{openssl_sys_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_ 1\n"; - $OUT .= "#endif\n"; - } - } - foreach (@{$config{openssl_api_defines}}) { - (my $macro, my $value) = $_ =~ /^(.*?)=(.*?)$/; - $OUT .= "#define $macro $value\n"; - } - if (@{$config{openssl_algorithm_defines}}) { - foreach (@{$config{openssl_algorithm_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - if (@{$config{openssl_thread_defines}}) { - foreach (@{$config{openssl_thread_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - if (@{$config{openssl_other_defines}}) { - foreach (@{$config{openssl_other_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - ""; --} - -/* - * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers - * don't like that. This will hopefully silence them. - */ -#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; - -/* - * Applications should use -DOPENSSL_API_COMPAT= to suppress the - * declarations of functions deprecated in or before . Otherwise, they - * still won't see them if the library has been built to disable deprecated - * functions. - */ -#ifndef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# elif defined(__SUNPRO_C) -# if (__SUNPRO_C >= 0x5130) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# endif -#endif - -#ifndef OPENSSL_FILE -# ifdef OPENSSL_NO_FILENAMES -# define OPENSSL_FILE "" -# define OPENSSL_LINE 0 -# else -# define OPENSSL_FILE __FILE__ -# define OPENSSL_LINE __LINE__ -# endif -#endif - -#ifndef OPENSSL_MIN_API -# define OPENSSL_MIN_API 0 -#endif - -#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API -# undef OPENSSL_API_COMPAT -# define OPENSSL_API_COMPAT OPENSSL_MIN_API -#endif - -/* - * Do not deprecate things to be deprecated in version 1.2.0 before the - * OpenSSL version number matches. - */ -#if OPENSSL_VERSION_NUMBER < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) f; -#elif OPENSSL_API_COMPAT < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_2_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10100000L -# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_1_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10000000L -# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_0_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x00908000L -# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_0_9_8(f) -#endif - -/* Generate 80386 code? */ -{- $config{processor} eq "386" ? "#define" : "#undef" -} I386_ONLY - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD {- $target{unistd} -} - -{- $config{export_var_as_fn} ? "#define" : "#undef" -} OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* - * The following are cipher-specific, but are part of the public API. - */ -#if !defined(OPENSSL_SYS_UEFI) -{- $config{bn_ll} ? "# define" : "# undef" -} BN_LLONG -/* Only one for the following should be defined */ -{- $config{b64l} ? "# define" : "# undef" -} SIXTY_FOUR_BIT_LONG -{- $config{b64} ? "# define" : "# undef" -} SIXTY_FOUR_BIT -{- $config{b32} ? "# define" : "# undef" -} THIRTY_TWO_BIT -#endif - -#define RC4_INT {- $config{rc4_int} -} - -#ifdef __cplusplus -} -#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/opensslv.h b/deps/openssl/android/x86/usr/local/include/openssl/opensslv.h index 5667d471..6b7364f4 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/opensslv.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/opensslv.h @@ -1,101 +1,114 @@ /* - * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslv.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OPENSSLV_H -# define HEADER_OPENSSLV_H +#ifndef OPENSSL_OPENSSLV_H +# define OPENSSL_OPENSSLV_H +# pragma once -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -/*- - * Numeric release version identifier: - * MNNFFPPS: major minor fix patch status - * The status nibble has one of the values 0 for development, 1 to e for betas - * 1 to 14, and f for release. The patch level is exactly that. - * For example: - * 0.9.3-dev 0x00903000 - * 0.9.3-beta1 0x00903001 - * 0.9.3-beta2-dev 0x00903002 - * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) - * 0.9.3 0x0090300f - * 0.9.3a 0x0090301f - * 0.9.4 0x0090400f - * 1.2.3z 0x102031af - * - * For continuity reasons (because 0.9.5 is already out, and is coded - * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level - * part is slightly different, by setting the highest bit. This means - * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start - * with 0x0090600S... - * - * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) - * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for - * major minor fix final patch/beta) +/* + * SECTION 1: VERSION DATA. These will change for each release */ -# define OPENSSL_VERSION_NUMBER 0x1010117fL -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1w 11 Sep 2023" -/*- - * The macros below are to be used for shared library (.so, .dll, ...) - * versioning. That kind of versioning works a bit differently between - * operating systems. The most usual scheme is to set a major and a minor - * number, and have the runtime loader check that the major number is equal - * to what it was at application link time, while the minor number has to - * be greater or equal to what it was at application link time. With this - * scheme, the version number is usually part of the file name, like this: +/* + * Base version macros * - * libcrypto.so.0.9 - * - * Some unixen also make a softlink with the major version number only: - * - * libcrypto.so.0 - * - * On Tru64 and IRIX 6.x it works a little bit differently. There, the - * shared library version is stored in the file, and is actually a series - * of versions, separated by colons. The rightmost version present in the - * library when linking an application is stored in the application to be - * matched at run time. When the application is run, a check is done to - * see if the library version stored in the application matches any of the - * versions in the version string of the library itself. - * This version string can be constructed in any way, depending on what - * kind of matching is desired. However, to implement the same scheme as - * the one used in the other unixen, all compatible versions, from lowest - * to highest, should be part of the string. Consecutive builds would - * give the following versions strings: - * - * 3.0 - * 3.0:3.1 - * 3.0:3.1:3.2 - * 4.0 - * 4.0:4.1 - * - * Notice how version 4 is completely incompatible with version, and - * therefore give the breach you can see. - * - * There may be other schemes as well that I haven't yet discovered. - * - * So, here's the way it works here: first of all, the library version - * number doesn't need at all to match the overall OpenSSL version. - * However, it's nice and more understandable if it actually does. - * The current library version is stored in the macro SHLIB_VERSION_NUMBER, - * which is just a piece of text in the format "M.m.e" (Major, minor, edit). - * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, - * we need to keep a history of version numbers, which is done in the - * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and - * should only keep the versions that are binary compatible with the current. + * These macros express version number MAJOR.MINOR.PATCH exactly */ -# define SHLIB_VERSION_HISTORY "" -# define SHLIB_VERSION_NUMBER "1.1" +# define OPENSSL_VERSION_MAJOR 3 +# define OPENSSL_VERSION_MINOR 1 +# define OPENSSL_VERSION_PATCH 3 +/* + * Additional version information + * + * These are also part of the new version scheme, but aren't part + * of the version number itself. + */ -#ifdef __cplusplus +/* Could be: #define OPENSSL_VERSION_PRE_RELEASE "-alpha.1" */ +# define OPENSSL_VERSION_PRE_RELEASE "" +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+fips" */ +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+vendor.1" */ +# define OPENSSL_VERSION_BUILD_METADATA "" + +/* + * Note: The OpenSSL Project will never define OPENSSL_VERSION_BUILD_METADATA + * to be anything but the empty string. Its use is entirely reserved for + * others + */ + +/* + * Shared library version + * + * This is strictly to express ABI version, which may or may not + * be related to the API version expressed with the macros above. + * This is defined in free form. + */ +# define OPENSSL_SHLIB_VERSION 3 + +/* + * SECTION 2: USEFUL MACROS + */ + +/* For checking general API compatibility when preprocessing */ +# define OPENSSL_VERSION_PREREQ(maj,min) \ + ((OPENSSL_VERSION_MAJOR << 16) + OPENSSL_VERSION_MINOR >= ((maj) << 16) + (min)) + +/* + * Macros to get the version in easily digested string form, both the short + * "MAJOR.MINOR.PATCH" variant (where MAJOR, MINOR and PATCH are replaced + * with the values from the corresponding OPENSSL_VERSION_ macros) and the + * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and + * OPENSSL_VERSION_BUILD_METADATA_STR appended. + */ +# define OPENSSL_VERSION_STR "3.1.3" +# define OPENSSL_FULL_VERSION_STR "3.1.3" + +/* + * SECTION 3: ADDITIONAL METADATA + * + * These strings are defined separately to allow them to be parsable. + */ +# define OPENSSL_RELEASE_DATE "19 Sep 2023" + +/* + * SECTION 4: BACKWARD COMPATIBILITY + */ + +# define OPENSSL_VERSION_TEXT "OpenSSL 3.1.3 19 Sep 2023" + +/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ +# ifdef OPENSSL_VERSION_PRE_RELEASE +# define _OPENSSL_VERSION_PRE_RELEASE 0x0L +# else +# define _OPENSSL_VERSION_PRE_RELEASE 0xfL +# endif +# define OPENSSL_VERSION_NUMBER \ + ( (OPENSSL_VERSION_MAJOR<<28) \ + |(OPENSSL_VERSION_MINOR<<20) \ + |(OPENSSL_VERSION_PATCH<<4) \ + |_OPENSSL_VERSION_PRE_RELEASE ) + +# ifdef __cplusplus } -#endif -#endif /* HEADER_OPENSSLV_H */ +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OPENSSLV_H +# endif + +#endif /* OPENSSL_OPENSSLV_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/opensslv.h.in b/deps/openssl/android/x86/usr/local/include/openssl/opensslv.h.in new file mode 100644 index 00000000..3f47a2ac --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/opensslv.h.in @@ -0,0 +1,113 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_OPENSSLV_H +# define OPENSSL_OPENSSLV_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * SECTION 1: VERSION DATA. These will change for each release + */ + +/* + * Base version macros + * + * These macros express version number MAJOR.MINOR.PATCH exactly + */ +# define OPENSSL_VERSION_MAJOR {- $config{major} -} +# define OPENSSL_VERSION_MINOR {- $config{minor} -} +# define OPENSSL_VERSION_PATCH {- $config{patch} -} + +/* + * Additional version information + * + * These are also part of the new version scheme, but aren't part + * of the version number itself. + */ + +/* Could be: #define OPENSSL_VERSION_PRE_RELEASE "-alpha.1" */ +# define OPENSSL_VERSION_PRE_RELEASE "{- $config{prerelease} -}" +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+fips" */ +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+vendor.1" */ +# define OPENSSL_VERSION_BUILD_METADATA "{- $config{build_metadata} -}" + +/* + * Note: The OpenSSL Project will never define OPENSSL_VERSION_BUILD_METADATA + * to be anything but the empty string. Its use is entirely reserved for + * others + */ + +/* + * Shared library version + * + * This is strictly to express ABI version, which may or may not + * be related to the API version expressed with the macros above. + * This is defined in free form. + */ +# define OPENSSL_SHLIB_VERSION {- $config{shlib_version} -} + +/* + * SECTION 2: USEFUL MACROS + */ + +/* For checking general API compatibility when preprocessing */ +# define OPENSSL_VERSION_PREREQ(maj,min) \ + ((OPENSSL_VERSION_MAJOR << 16) + OPENSSL_VERSION_MINOR >= ((maj) << 16) + (min)) + +/* + * Macros to get the version in easily digested string form, both the short + * "MAJOR.MINOR.PATCH" variant (where MAJOR, MINOR and PATCH are replaced + * with the values from the corresponding OPENSSL_VERSION_ macros) and the + * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and + * OPENSSL_VERSION_BUILD_METADATA_STR appended. + */ +# define OPENSSL_VERSION_STR "{- $config{version} -}" +# define OPENSSL_FULL_VERSION_STR "{- $config{full_version} -}" + +/* + * SECTION 3: ADDITIONAL METADATA + * + * These strings are defined separately to allow them to be parsable. + */ +# define OPENSSL_RELEASE_DATE "{- $config{release_date} -}" + +/* + * SECTION 4: BACKWARD COMPATIBILITY + */ + +# define OPENSSL_VERSION_TEXT "OpenSSL {- "$config{full_version} $config{release_date}" -}" + +/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ +# ifdef OPENSSL_VERSION_PRE_RELEASE +# define _OPENSSL_VERSION_PRE_RELEASE 0x0L +# else +# define _OPENSSL_VERSION_PRE_RELEASE 0xfL +# endif +# define OPENSSL_VERSION_NUMBER \ + ( (OPENSSL_VERSION_MAJOR<<28) \ + |(OPENSSL_VERSION_MINOR<<20) \ + |(OPENSSL_VERSION_PATCH<<4) \ + |_OPENSSL_VERSION_PRE_RELEASE ) + +# ifdef __cplusplus +} +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OPENSSLV_H +# endif + +#endif /* OPENSSL_OPENSSLV_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ossl_typ.h b/deps/openssl/android/x86/usr/local/include/openssl/ossl_typ.h index e0edfaaf..82a58988 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ossl_typ.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ossl_typ.h @@ -1,197 +1,16 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OPENSSL_TYPES_H -# define HEADER_OPENSSL_TYPES_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# ifdef NO_ASN1_TYPEDEFS -# define ASN1_INTEGER ASN1_STRING -# define ASN1_ENUMERATED ASN1_STRING -# define ASN1_BIT_STRING ASN1_STRING -# define ASN1_OCTET_STRING ASN1_STRING -# define ASN1_PRINTABLESTRING ASN1_STRING -# define ASN1_T61STRING ASN1_STRING -# define ASN1_IA5STRING ASN1_STRING -# define ASN1_UTCTIME ASN1_STRING -# define ASN1_GENERALIZEDTIME ASN1_STRING -# define ASN1_TIME ASN1_STRING -# define ASN1_GENERALSTRING ASN1_STRING -# define ASN1_UNIVERSALSTRING ASN1_STRING -# define ASN1_BMPSTRING ASN1_STRING -# define ASN1_VISIBLESTRING ASN1_STRING -# define ASN1_UTF8STRING ASN1_STRING -# define ASN1_BOOLEAN int -# define ASN1_NULL int -# else -typedef struct asn1_string_st ASN1_INTEGER; -typedef struct asn1_string_st ASN1_ENUMERATED; -typedef struct asn1_string_st ASN1_BIT_STRING; -typedef struct asn1_string_st ASN1_OCTET_STRING; -typedef struct asn1_string_st ASN1_PRINTABLESTRING; -typedef struct asn1_string_st ASN1_T61STRING; -typedef struct asn1_string_st ASN1_IA5STRING; -typedef struct asn1_string_st ASN1_GENERALSTRING; -typedef struct asn1_string_st ASN1_UNIVERSALSTRING; -typedef struct asn1_string_st ASN1_BMPSTRING; -typedef struct asn1_string_st ASN1_UTCTIME; -typedef struct asn1_string_st ASN1_TIME; -typedef struct asn1_string_st ASN1_GENERALIZEDTIME; -typedef struct asn1_string_st ASN1_VISIBLESTRING; -typedef struct asn1_string_st ASN1_UTF8STRING; -typedef struct asn1_string_st ASN1_STRING; -typedef int ASN1_BOOLEAN; -typedef int ASN1_NULL; -# endif - -typedef struct asn1_object_st ASN1_OBJECT; - -typedef struct ASN1_ITEM_st ASN1_ITEM; -typedef struct asn1_pctx_st ASN1_PCTX; -typedef struct asn1_sctx_st ASN1_SCTX; - -# ifdef _WIN32 -# undef X509_NAME -# undef X509_EXTENSIONS -# undef PKCS7_ISSUER_AND_SERIAL -# undef PKCS7_SIGNER_INFO -# undef OCSP_REQUEST -# undef OCSP_RESPONSE -# endif - -# ifdef BIGNUM -# undef BIGNUM -# endif -struct dane_st; -typedef struct bio_st BIO; -typedef struct bignum_st BIGNUM; -typedef struct bignum_ctx BN_CTX; -typedef struct bn_blinding_st BN_BLINDING; -typedef struct bn_mont_ctx_st BN_MONT_CTX; -typedef struct bn_recp_ctx_st BN_RECP_CTX; -typedef struct bn_gencb_st BN_GENCB; - -typedef struct buf_mem_st BUF_MEM; - -typedef struct evp_cipher_st EVP_CIPHER; -typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; -typedef struct evp_md_st EVP_MD; -typedef struct evp_md_ctx_st EVP_MD_CTX; -typedef struct evp_pkey_st EVP_PKEY; - -typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; - -typedef struct evp_pkey_method_st EVP_PKEY_METHOD; -typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; - -typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; - -typedef struct hmac_ctx_st HMAC_CTX; - -typedef struct dh_st DH; -typedef struct dh_method DH_METHOD; - -typedef struct dsa_st DSA; -typedef struct dsa_method DSA_METHOD; - -typedef struct rsa_st RSA; -typedef struct rsa_meth_st RSA_METHOD; -typedef struct rsa_pss_params_st RSA_PSS_PARAMS; - -typedef struct ec_key_st EC_KEY; -typedef struct ec_key_method_st EC_KEY_METHOD; - -typedef struct rand_meth_st RAND_METHOD; -typedef struct rand_drbg_st RAND_DRBG; - -typedef struct ssl_dane_st SSL_DANE; -typedef struct x509_st X509; -typedef struct X509_algor_st X509_ALGOR; -typedef struct X509_crl_st X509_CRL; -typedef struct x509_crl_method_st X509_CRL_METHOD; -typedef struct x509_revoked_st X509_REVOKED; -typedef struct X509_name_st X509_NAME; -typedef struct X509_pubkey_st X509_PUBKEY; -typedef struct x509_store_st X509_STORE; -typedef struct x509_store_ctx_st X509_STORE_CTX; - -typedef struct x509_object_st X509_OBJECT; -typedef struct x509_lookup_st X509_LOOKUP; -typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; -typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; - -typedef struct x509_sig_info_st X509_SIG_INFO; - -typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; - -typedef struct v3_ext_ctx X509V3_CTX; -typedef struct conf_st CONF; -typedef struct ossl_init_settings_st OPENSSL_INIT_SETTINGS; - -typedef struct ui_st UI; -typedef struct ui_method_st UI_METHOD; - -typedef struct engine_st ENGINE; -typedef struct ssl_st SSL; -typedef struct ssl_ctx_st SSL_CTX; - -typedef struct comp_ctx_st COMP_CTX; -typedef struct comp_method_st COMP_METHOD; - -typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; -typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; -typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; -typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; - -typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; -typedef struct DIST_POINT_st DIST_POINT; -typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; -typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; - -typedef struct crypto_ex_data_st CRYPTO_EX_DATA; - -typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; -typedef struct ocsp_response_st OCSP_RESPONSE; -typedef struct ocsp_responder_id_st OCSP_RESPID; - -typedef struct sct_st SCT; -typedef struct sct_ctx_st SCT_CTX; -typedef struct ctlog_st CTLOG; -typedef struct ctlog_store_st CTLOG_STORE; -typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; - -typedef struct ossl_store_info_st OSSL_STORE_INFO; -typedef struct ossl_store_search_st OSSL_STORE_SEARCH; - -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ - defined(INTMAX_MAX) && defined(UINTMAX_MAX) -typedef intmax_t ossl_intmax_t; -typedef uintmax_t ossl_uintmax_t; -#else /* - * Not long long, because the C-library can only be expected to provide - * strtoll(), strtoull() at the same time as intmax_t and strtoimax(), - * strtoumax(). Since we use these for parsing arguments, we need the - * conversion functions, not just the sizes. + * The original was renamed to + * + * This header file only exists for compatibility reasons with older + * applications which #include . */ -typedef long ossl_intmax_t; -typedef unsigned long ossl_uintmax_t; -#endif - -#ifdef __cplusplus -} -#endif -#endif /* def HEADER_OPENSSL_TYPES_H */ +# include diff --git a/deps/openssl/android/x86/usr/local/include/openssl/param_build.h b/deps/openssl/android/x86/usr/local/include/openssl/param_build.h new file mode 100644 index 00000000..f29fdb29 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/param_build.h @@ -0,0 +1,63 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PARAM_BUILD_H +# define OPENSSL_PARAM_BUILD_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_PARAM_BLD *OSSL_PARAM_BLD_new(void); +OSSL_PARAM *OSSL_PARAM_BLD_to_param(OSSL_PARAM_BLD *bld); +void OSSL_PARAM_BLD_free(OSSL_PARAM_BLD *bld); + +int OSSL_PARAM_BLD_push_int(OSSL_PARAM_BLD *bld, const char *key, int val); +int OSSL_PARAM_BLD_push_uint(OSSL_PARAM_BLD *bld, const char *key, + unsigned int val); +int OSSL_PARAM_BLD_push_long(OSSL_PARAM_BLD *bld, const char *key, + long int val); +int OSSL_PARAM_BLD_push_ulong(OSSL_PARAM_BLD *bld, const char *key, + unsigned long int val); +int OSSL_PARAM_BLD_push_int32(OSSL_PARAM_BLD *bld, const char *key, + int32_t val); +int OSSL_PARAM_BLD_push_uint32(OSSL_PARAM_BLD *bld, const char *key, + uint32_t val); +int OSSL_PARAM_BLD_push_int64(OSSL_PARAM_BLD *bld, const char *key, + int64_t val); +int OSSL_PARAM_BLD_push_uint64(OSSL_PARAM_BLD *bld, const char *key, + uint64_t val); +int OSSL_PARAM_BLD_push_size_t(OSSL_PARAM_BLD *bld, const char *key, + size_t val); +int OSSL_PARAM_BLD_push_time_t(OSSL_PARAM_BLD *bld, const char *key, + time_t val); +int OSSL_PARAM_BLD_push_double(OSSL_PARAM_BLD *bld, const char *key, + double val); +int OSSL_PARAM_BLD_push_BN(OSSL_PARAM_BLD *bld, const char *key, + const BIGNUM *bn); +int OSSL_PARAM_BLD_push_BN_pad(OSSL_PARAM_BLD *bld, const char *key, + const BIGNUM *bn, size_t sz); +int OSSL_PARAM_BLD_push_utf8_string(OSSL_PARAM_BLD *bld, const char *key, + const char *buf, size_t bsize); +int OSSL_PARAM_BLD_push_utf8_ptr(OSSL_PARAM_BLD *bld, const char *key, + char *buf, size_t bsize); +int OSSL_PARAM_BLD_push_octet_string(OSSL_PARAM_BLD *bld, const char *key, + const void *buf, size_t bsize); +int OSSL_PARAM_BLD_push_octet_ptr(OSSL_PARAM_BLD *bld, const char *key, + void *buf, size_t bsize); + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_PARAM_BUILD_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/params.h b/deps/openssl/android/x86/usr/local/include/openssl/params.h new file mode 100644 index 00000000..d75eab07 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/params.h @@ -0,0 +1,160 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PARAMS_H +# define OPENSSL_PARAMS_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_PARAM_UNMODIFIED ((size_t)-1) + +# define OSSL_PARAM_END \ + { NULL, 0, NULL, 0, 0 } + +# define OSSL_PARAM_DEFN(key, type, addr, sz) \ + { (key), (type), (addr), (sz), OSSL_PARAM_UNMODIFIED } + +/* Basic parameter types without return sizes */ +# define OSSL_PARAM_int(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int)) +# define OSSL_PARAM_uint(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(unsigned int)) +# define OSSL_PARAM_long(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(long int)) +# define OSSL_PARAM_ulong(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(unsigned long int)) +# define OSSL_PARAM_int32(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int32_t)) +# define OSSL_PARAM_uint32(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(uint32_t)) +# define OSSL_PARAM_int64(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int64_t)) +# define OSSL_PARAM_uint64(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(uint64_t)) +# define OSSL_PARAM_size_t(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), sizeof(size_t)) +# define OSSL_PARAM_time_t(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(time_t)) +# define OSSL_PARAM_double(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_REAL, (addr), sizeof(double)) + +# define OSSL_PARAM_BN(key, bn, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (bn), (sz)) +# define OSSL_PARAM_utf8_string(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UTF8_STRING, (addr), sz) +# define OSSL_PARAM_octet_string(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_OCTET_STRING, (addr), sz) + +# define OSSL_PARAM_utf8_ptr(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UTF8_PTR, (addr), sz) +# define OSSL_PARAM_octet_ptr(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_OCTET_PTR, (addr), sz) + +/* Search an OSSL_PARAM array for a matching name */ +OSSL_PARAM *OSSL_PARAM_locate(OSSL_PARAM *p, const char *key); +const OSSL_PARAM *OSSL_PARAM_locate_const(const OSSL_PARAM *p, const char *key); + +/* Basic parameter type run-time construction */ +OSSL_PARAM OSSL_PARAM_construct_int(const char *key, int *buf); +OSSL_PARAM OSSL_PARAM_construct_uint(const char *key, unsigned int *buf); +OSSL_PARAM OSSL_PARAM_construct_long(const char *key, long int *buf); +OSSL_PARAM OSSL_PARAM_construct_ulong(const char *key, unsigned long int *buf); +OSSL_PARAM OSSL_PARAM_construct_int32(const char *key, int32_t *buf); +OSSL_PARAM OSSL_PARAM_construct_uint32(const char *key, uint32_t *buf); +OSSL_PARAM OSSL_PARAM_construct_int64(const char *key, int64_t *buf); +OSSL_PARAM OSSL_PARAM_construct_uint64(const char *key, uint64_t *buf); +OSSL_PARAM OSSL_PARAM_construct_size_t(const char *key, size_t *buf); +OSSL_PARAM OSSL_PARAM_construct_time_t(const char *key, time_t *buf); +OSSL_PARAM OSSL_PARAM_construct_BN(const char *key, unsigned char *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_double(const char *key, double *buf); +OSSL_PARAM OSSL_PARAM_construct_utf8_string(const char *key, char *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_utf8_ptr(const char *key, char **buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_octet_string(const char *key, void *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_end(void); + +int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, + const OSSL_PARAM *paramdefs, + const char *key, const char *value, + size_t value_n, int *found); + +int OSSL_PARAM_get_int(const OSSL_PARAM *p, int *val); +int OSSL_PARAM_get_uint(const OSSL_PARAM *p, unsigned int *val); +int OSSL_PARAM_get_long(const OSSL_PARAM *p, long int *val); +int OSSL_PARAM_get_ulong(const OSSL_PARAM *p, unsigned long int *val); +int OSSL_PARAM_get_int32(const OSSL_PARAM *p, int32_t *val); +int OSSL_PARAM_get_uint32(const OSSL_PARAM *p, uint32_t *val); +int OSSL_PARAM_get_int64(const OSSL_PARAM *p, int64_t *val); +int OSSL_PARAM_get_uint64(const OSSL_PARAM *p, uint64_t *val); +int OSSL_PARAM_get_size_t(const OSSL_PARAM *p, size_t *val); +int OSSL_PARAM_get_time_t(const OSSL_PARAM *p, time_t *val); + +int OSSL_PARAM_set_int(OSSL_PARAM *p, int val); +int OSSL_PARAM_set_uint(OSSL_PARAM *p, unsigned int val); +int OSSL_PARAM_set_long(OSSL_PARAM *p, long int val); +int OSSL_PARAM_set_ulong(OSSL_PARAM *p, unsigned long int val); +int OSSL_PARAM_set_int32(OSSL_PARAM *p, int32_t val); +int OSSL_PARAM_set_uint32(OSSL_PARAM *p, uint32_t val); +int OSSL_PARAM_set_int64(OSSL_PARAM *p, int64_t val); +int OSSL_PARAM_set_uint64(OSSL_PARAM *p, uint64_t val); +int OSSL_PARAM_set_size_t(OSSL_PARAM *p, size_t val); +int OSSL_PARAM_set_time_t(OSSL_PARAM *p, time_t val); + +int OSSL_PARAM_get_double(const OSSL_PARAM *p, double *val); +int OSSL_PARAM_set_double(OSSL_PARAM *p, double val); + +int OSSL_PARAM_get_BN(const OSSL_PARAM *p, BIGNUM **val); +int OSSL_PARAM_set_BN(OSSL_PARAM *p, const BIGNUM *val); + +int OSSL_PARAM_get_utf8_string(const OSSL_PARAM *p, char **val, size_t max_len); +int OSSL_PARAM_set_utf8_string(OSSL_PARAM *p, const char *val); + +int OSSL_PARAM_get_octet_string(const OSSL_PARAM *p, void **val, size_t max_len, + size_t *used_len); +int OSSL_PARAM_set_octet_string(OSSL_PARAM *p, const void *val, size_t len); + +int OSSL_PARAM_get_utf8_ptr(const OSSL_PARAM *p, const char **val); +int OSSL_PARAM_set_utf8_ptr(OSSL_PARAM *p, const char *val); + +int OSSL_PARAM_get_octet_ptr(const OSSL_PARAM *p, const void **val, + size_t *used_len); +int OSSL_PARAM_set_octet_ptr(OSSL_PARAM *p, const void *val, + size_t used_len); + +int OSSL_PARAM_get_utf8_string_ptr(const OSSL_PARAM *p, const char **val); +int OSSL_PARAM_get_octet_string_ptr(const OSSL_PARAM *p, const void **val, + size_t *used_len); + +int OSSL_PARAM_modified(const OSSL_PARAM *p); +void OSSL_PARAM_set_all_unmodified(OSSL_PARAM *p); + +OSSL_PARAM *OSSL_PARAM_dup(const OSSL_PARAM *p); +OSSL_PARAM *OSSL_PARAM_merge(const OSSL_PARAM *p1, const OSSL_PARAM *p2); +void OSSL_PARAM_free(OSSL_PARAM *p); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pem.h b/deps/openssl/android/x86/usr/local/include/openssl/pem.h index 2ef5b5d0..000d9c89 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pem.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/pem.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEM_H -# define HEADER_PEM_H +#ifndef OPENSSL_PEM_H +# define OPENSSL_PEM_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PEM_H +# endif # include # include @@ -16,6 +22,9 @@ # include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -60,98 +69,130 @@ extern "C" { * IMPLEMENT_PEM_rw_cb(...) */ +# define PEM_read_cb_fnsig(name, type, INTYPE, readname) \ + type *PEM_##readname##_##name(INTYPE *out, type **x, \ + pem_password_cb *cb, void *u) +# define PEM_read_cb_ex_fnsig(name, type, INTYPE, readname) \ + type *PEM_##readname##_##name##_ex(INTYPE *out, type **x, \ + pem_password_cb *cb, void *u, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) + +# define PEM_write_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name(OUTTYPE *out, const type *x) +# define PEM_write_cb_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name(OUTTYPE *out, const type *x, \ + const EVP_CIPHER *enc, \ + const unsigned char *kstr, int klen, \ + pem_password_cb *cb, void *u) +# define PEM_write_ex_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name##_ex(OUTTYPE *out, const type *x, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) +# define PEM_write_cb_ex_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name##_ex(OUTTYPE *out, const type *x, \ + const EVP_CIPHER *enc, \ + const unsigned char *kstr, int klen, \ + pem_password_cb *cb, void *u, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) + # ifdef OPENSSL_NO_STDIO # define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ # define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# endif # define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# endif # else -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ -type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ -} +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ + type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str, fp, \ + (void **)x, cb, u); \ + } -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ -} +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ + PEM_write_fnsig(name, type, FILE, write) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1, str, out, \ + x, NULL, NULL, 0, NULL, NULL); \ + } -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, const type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp(name, type, str, asn1) +# endif -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ + PEM_write_cb_fnsig(name, type, FILE, write) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1, str, out, \ + x, enc, kstr, klen, cb, u); \ + } +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) +# endif # endif -# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ -type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ -} +# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ + type *PEM_read_bio_##name(BIO *bp, type **x, \ + pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str, bp, \ + (void **)x, cb, u); \ + } -# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ -} +# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ + PEM_write_fnsig(name, type, BIO, write_bio) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1, str, out, \ + x, NULL,NULL,0,NULL,NULL); \ + } -# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, const type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio(name, type, str, asn1) +# endif -# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ - } +# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ + PEM_write_cb_fnsig(name, type, BIO, write_bio) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1, str, out, \ + x, enc, kstr, klen, cb, u); \ + } -# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ - } +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_write(name, type, str, asn1) \ IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ IMPLEMENT_PEM_write_fp(name, type, str, asn1) -# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) -# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ @@ -161,9 +202,11 @@ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_write(name, type, str, asn1) -# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_write_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ IMPLEMENT_PEM_read(name, type, str, asn1) \ @@ -171,64 +214,160 @@ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ /* These are the same except they are for the declarations */ +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ # if defined(OPENSSL_NO_STDIO) -# define DECLARE_PEM_read_fp(name, type) /**/ -# define DECLARE_PEM_write_fp(name, type) /**/ -# define DECLARE_PEM_write_fp_const(name, type) /**/ -# define DECLARE_PEM_write_cb_fp(name, type) /**/ +# define DECLARE_PEM_read_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_read_fp_ex_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_fp_ex_attr(attr, name, type) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const_attr(attr, name, type) /**/ +# endif +# define DECLARE_PEM_write_cb_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) /**/ + # else -# define DECLARE_PEM_read_fp(name, type) \ - type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); +# define DECLARE_PEM_read_fp_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, FILE, read); +# define DECLARE_PEM_read_fp_ex_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, FILE, read); \ + attr PEM_read_cb_ex_fnsig(name, type, FILE, read); -# define DECLARE_PEM_write_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x); - -# define DECLARE_PEM_write_fp_const(name, type) \ - int PEM_write_##name(FILE *fp, const type *x); - -# define DECLARE_PEM_write_cb_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); +# define DECLARE_PEM_write_fp_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); +# define DECLARE_PEM_write_fp_ex_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); \ + attr PEM_write_ex_fnsig(name, type, FILE, write); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); +# endif +# define DECLARE_PEM_write_cb_fp_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, FILE, write); +# define DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, FILE, write); \ + attr PEM_write_cb_ex_fnsig(name, type, FILE, write); # endif -# define DECLARE_PEM_read_bio(name, type) \ - type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); +# define DECLARE_PEM_read_fp(name, type) \ + DECLARE_PEM_read_fp_attr(extern, name, type) +# define DECLARE_PEM_write_fp(name, type) \ + DECLARE_PEM_write_fp_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const(name, type) \ + DECLARE_PEM_write_fp_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_fp(name, type) \ + DECLARE_PEM_write_cb_fp_attr(extern, name, type) -# define DECLARE_PEM_write_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x); +# define DECLARE_PEM_read_bio_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, BIO, read_bio); +# define DECLARE_PEM_read_bio_ex_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, BIO, read_bio); \ + attr PEM_read_cb_ex_fnsig(name, type, BIO, read_bio); +# define DECLARE_PEM_read_bio(name, type) \ + DECLARE_PEM_read_bio_attr(extern, name, type) +# define DECLARE_PEM_read_bio_ex(name, type) \ + DECLARE_PEM_read_bio_ex_attr(extern, name, type) -# define DECLARE_PEM_write_bio_const(name, type) \ - int PEM_write_bio_##name(BIO *bp, const type *x); +# define DECLARE_PEM_write_bio_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio_ex_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); \ + attr PEM_write_ex_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio(name, type) \ + DECLARE_PEM_write_bio_attr(extern, name, type) +# define DECLARE_PEM_write_bio_ex(name, type) \ + DECLARE_PEM_write_bio_ex_attr(extern, name, type) -# define DECLARE_PEM_write_cb_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_bio_const_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio_const(name, type) \ + DECLARE_PEM_write_bio_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_bio_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_cb_bio_ex_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, BIO, write_bio); \ + attr PEM_write_cb_ex_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_cb_bio(name, type) \ + DECLARE_PEM_write_cb_bio_attr(extern, name, type) +# define DECLARE_PEM_write_cb_ex_bio(name, type) \ + DECLARE_PEM_write_cb_bio_ex_attr(extern, name, type) + +# define DECLARE_PEM_write_attr(attr, name, type) \ + DECLARE_PEM_write_bio_attr(attr, name, type) \ + DECLARE_PEM_write_fp_attr(attr, name, type) +# define DECLARE_PEM_write_ex_attr(attr, name, type) \ + DECLARE_PEM_write_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_write_fp_ex_attr(attr, name, type) # define DECLARE_PEM_write(name, type) \ - DECLARE_PEM_write_bio(name, type) \ - DECLARE_PEM_write_fp(name, type) -# define DECLARE_PEM_write_const(name, type) \ - DECLARE_PEM_write_bio_const(name, type) \ - DECLARE_PEM_write_fp_const(name, type) -# define DECLARE_PEM_write_cb(name, type) \ - DECLARE_PEM_write_cb_bio(name, type) \ - DECLARE_PEM_write_cb_fp(name, type) -# define DECLARE_PEM_read(name, type) \ - DECLARE_PEM_read_bio(name, type) \ - DECLARE_PEM_read_fp(name, type) + DECLARE_PEM_write_attr(extern, name, type) +# define DECLARE_PEM_write_ex(name, type) \ + DECLARE_PEM_write_ex_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_const_attr(attr, name, type) \ + DECLARE_PEM_write_bio_const_attr(attr, name, type) \ + DECLARE_PEM_write_fp_const_attr(attr, name, type) +# define DECLARE_PEM_write_const(name, type) \ + DECLARE_PEM_write_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_attr(attr, name, type) \ + DECLARE_PEM_write_cb_bio_attr(attr, name, type) \ + DECLARE_PEM_write_cb_fp_attr(attr, name, type) +# define DECLARE_PEM_write_cb_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) +# define DECLARE_PEM_write_cb(name, type) \ + DECLARE_PEM_write_cb_attr(extern, name, type) +# define DECLARE_PEM_write_cb_ex(name, type) \ + DECLARE_PEM_write_cb_ex_attr(extern, name, type) +# define DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_read_bio_attr(attr, name, type) \ + DECLARE_PEM_read_fp_attr(attr, name, type) +# define DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_read_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_read_fp_ex_attr(attr, name, type) +# define DECLARE_PEM_read(name, type) \ + DECLARE_PEM_read_attr(extern, name, type) +# define DECLARE_PEM_read_ex(name, type) \ + DECLARE_PEM_read_ex_attr(extern, name, type) +# define DECLARE_PEM_rw_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_attr(attr, name, type) +# define DECLARE_PEM_rw_ex_attr(attr, name, type) \ + DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_write_ex_attr(attr, name, type) # define DECLARE_PEM_rw(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write(name, type) -# define DECLARE_PEM_rw_const(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_const(name, type) + DECLARE_PEM_rw_attr(extern, name, type) +# define DECLARE_PEM_rw_ex(name, type) \ + DECLARE_PEM_rw_ex_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_rw_const_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_const_attr(attr, name, type) +# define DECLARE_PEM_rw_const(name, type) \ + DECLARE_PEM_rw_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_rw_cb_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_cb_attr(attr, name, type) +# define DECLARE_PEM_rw_cb_ex_attr(attr, name, type) \ + DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_ex_attr(attr, name, type) # define DECLARE_PEM_rw_cb(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_cb(name, type) -typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + DECLARE_PEM_rw_cb_attr(extern, name, type) +# define DECLARE_PEM_rw_cb_ex(name, type) \ + DECLARE_PEM_rw_cb_ex_attr(extern, name, type) int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, @@ -251,14 +390,20 @@ int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, void *u); void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, pem_password_cb *cb, void *u); -int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, - const EVP_CIPHER *enc, unsigned char *kstr, int klen, +int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, + const void *x, const EVP_CIPHER *enc, + const unsigned char *kstr, int klen, pem_password_cb *cb, void *u); STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); -int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, - unsigned char *kstr, int klen, +STACK_OF(X509_INFO) +*PEM_X509_INFO_read_bio_ex(BIO *bp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u, OSSL_LIB_CTX *libctx, + const char *propq); + +int PEM_X509_INFO_write_bio(BIO *bp, const X509_INFO *xi, EVP_CIPHER *enc, + const unsigned char *kstr, int klen, pem_password_cb *cd, void *u); #ifndef OPENSSL_NO_STDIO @@ -269,21 +414,25 @@ int PEM_write(FILE *fp, const char *name, const char *hdr, void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, pem_password_cb *cb, void *u); int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, - void *x, const EVP_CIPHER *enc, unsigned char *kstr, - int klen, pem_password_cb *callback, void *u); + const void *x, const EVP_CIPHER *enc, + const unsigned char *kstr, int klen, + pem_password_cb *callback, void *u); STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); +STACK_OF(X509_INFO) +*PEM_X509_INFO_read_ex(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, + void *u, OSSL_LIB_CTX *libctx, const char *propq); #endif int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); -int PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); +int PEM_SignUpdate(EVP_MD_CTX *ctx, const unsigned char *d, unsigned int cnt); int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, unsigned int *siglen, EVP_PKEY *pkey); /* The default pem_password_cb that's used internally */ int PEM_def_callback(char *buf, int num, int rwflag, void *userdata); void PEM_proc_type(char *buf, int type); -void PEM_dek_info(char *buf, const char *type, int len, char *str); +void PEM_dek_info(char *buf, const char *type, int len, const char *str); # include @@ -292,85 +441,99 @@ DECLARE_PEM_rw(X509_AUX, X509) DECLARE_PEM_rw(X509_REQ, X509_REQ) DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) DECLARE_PEM_rw(X509_CRL, X509_CRL) +DECLARE_PEM_rw(X509_PUBKEY, X509_PUBKEY) DECLARE_PEM_rw(PKCS7, PKCS7) DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) DECLARE_PEM_rw(PKCS8, X509_SIG) DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) -# ifndef OPENSSL_NO_RSA -DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) -DECLARE_PEM_rw_const(RSAPublicKey, RSA) -DECLARE_PEM_rw(RSA_PUBKEY, RSA) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, RSAPrivateKey, RSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, RSAPublicKey, RSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, RSA_PUBKEY, RSA) # endif -# ifndef OPENSSL_NO_DSA -DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) -DECLARE_PEM_rw(DSA_PUBKEY, DSA) -DECLARE_PEM_rw_const(DSAparams, DSA) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, DSAPrivateKey, DSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DSA_PUBKEY, DSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DSAparams, DSA) +# endif # endif -# ifndef OPENSSL_NO_EC -DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) -DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) -DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) -# endif -# ifndef OPENSSL_NO_DH -DECLARE_PEM_rw_const(DHparams, DH) -DECLARE_PEM_write_const(DHxparams, DH) -# endif -DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) -DECLARE_PEM_rw(PUBKEY, EVP_PKEY) -int PEM_write_bio_PrivateKey_traditional(BIO *bp, EVP_PKEY *x, +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, ECPKParameters, EC_GROUP) +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, ECPrivateKey, EC_KEY) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, EC_PUBKEY, EC_KEY) +# endif +# endif + +# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DHparams, DH) +DECLARE_PEM_write_attr(OSSL_DEPRECATEDIN_3_0, DHxparams, DH) +# endif +# endif +DECLARE_PEM_rw_cb_ex(PrivateKey, EVP_PKEY) +DECLARE_PEM_rw_ex(PUBKEY, EVP_PKEY) + +int PEM_write_bio_PrivateKey_traditional(BIO *bp, const EVP_PKEY *x, const EVP_CIPHER *enc, - unsigned char *kstr, int klen, + const unsigned char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, +/* Why do these take a signed char *kstr? */ +int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, - char *, int, pem_password_cb *, void *); -int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, +int PEM_write_bio_PKCS8PrivateKey(BIO *, const EVP_PKEY *, const EVP_CIPHER *, + const char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_bio(BIO *bp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u); # ifndef OPENSSL_NO_STDIO -int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_fp(FILE *fp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int PEM_write_PKCS8PrivateKey_nid(FILE *fp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, pem_password_cb *cd, - void *u); +int PEM_write_PKCS8PrivateKey(FILE *fp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, + pem_password_cb *cd, void *u); # endif +EVP_PKEY *PEM_read_bio_Parameters_ex(BIO *bp, EVP_PKEY **x, + OSSL_LIB_CTX *libctx, const char *propq); EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); -int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); +int PEM_write_bio_Parameters(BIO *bp, const EVP_PKEY *x); -# ifndef OPENSSL_NO_DSA EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); EVP_PKEY *b2i_PrivateKey_bio(BIO *in); EVP_PKEY *b2i_PublicKey_bio(BIO *in); -int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); -int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); -# ifndef OPENSSL_NO_RC4 +int i2b_PrivateKey_bio(BIO *out, const EVP_PKEY *pk); +int i2b_PublicKey_bio(BIO *out, const EVP_PKEY *pk); EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); -int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, +EVP_PKEY *b2i_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +int i2b_PVK_bio(BIO *out, const EVP_PKEY *pk, int enclevel, pem_password_cb *cb, void *u); -# endif -# endif +int i2b_PVK_bio_ex(BIO *out, const EVP_PKEY *pk, int enclevel, + pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); # ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pem2.h b/deps/openssl/android/x86/usr/local/include/openssl/pem2.h index 038fe790..a8a5325b 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pem2.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/pem2.h @@ -1,13 +1,19 @@ /* * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEM2_H -# define HEADER_PEM2_H +#ifndef OPENSSL_PEM2_H +# define OPENSSL_PEM2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PEM2_H +# endif # include #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pemerr.h b/deps/openssl/android/x86/usr/local/include/openssl/pemerr.h index 4f7e3574..18f6d9ef 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pemerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/pemerr.h @@ -1,71 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEMERR_H -# define HEADER_PEMERR_H +#ifndef OPENSSL_PEMERR_H +# define OPENSSL_PEMERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PEM_strings(void); -/* - * PEM function codes. - */ -# define PEM_F_B2I_DSS 127 -# define PEM_F_B2I_PVK_BIO 128 -# define PEM_F_B2I_RSA 129 -# define PEM_F_CHECK_BITLEN_DSA 130 -# define PEM_F_CHECK_BITLEN_RSA 131 -# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 -# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 -# define PEM_F_DO_B2I 132 -# define PEM_F_DO_B2I_BIO 133 -# define PEM_F_DO_BLOB_HEADER 134 -# define PEM_F_DO_I2B 146 -# define PEM_F_DO_PK8PKEY 126 -# define PEM_F_DO_PK8PKEY_FP 125 -# define PEM_F_DO_PVK_BODY 135 -# define PEM_F_DO_PVK_HEADER 136 -# define PEM_F_GET_HEADER_AND_DATA 143 -# define PEM_F_GET_NAME 144 -# define PEM_F_I2B_PVK 137 -# define PEM_F_I2B_PVK_BIO 138 -# define PEM_F_LOAD_IV 101 -# define PEM_F_PEM_ASN1_READ 102 -# define PEM_F_PEM_ASN1_READ_BIO 103 -# define PEM_F_PEM_ASN1_WRITE 104 -# define PEM_F_PEM_ASN1_WRITE_BIO 105 -# define PEM_F_PEM_DEF_CALLBACK 100 -# define PEM_F_PEM_DO_HEADER 106 -# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 -# define PEM_F_PEM_READ 108 -# define PEM_F_PEM_READ_BIO 109 -# define PEM_F_PEM_READ_BIO_DHPARAMS 141 -# define PEM_F_PEM_READ_BIO_EX 145 -# define PEM_F_PEM_READ_BIO_PARAMETERS 140 -# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 -# define PEM_F_PEM_READ_DHPARAMS 142 -# define PEM_F_PEM_READ_PRIVATEKEY 124 -# define PEM_F_PEM_SIGNFINAL 112 -# define PEM_F_PEM_WRITE 113 -# define PEM_F_PEM_WRITE_BIO 114 -# define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL 147 -# define PEM_F_PEM_WRITE_PRIVATEKEY 139 -# define PEM_F_PEM_X509_INFO_READ 115 -# define PEM_F_PEM_X509_INFO_READ_BIO 116 -# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 /* * PEM reason codes. @@ -80,8 +31,10 @@ int ERR_load_PEM_strings(void); # define PEM_R_BIO_WRITE_FAILURE 118 # define PEM_R_CIPHER_IS_NULL 127 # define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 +# define PEM_R_EXPECTING_DSS_KEY_BLOB 131 # define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 # define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_EXPECTING_RSA_KEY_BLOB 132 # define PEM_R_HEADER_TOO_LONG 128 # define PEM_R_INCONSISTENT_HEADER 121 # define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h index 3f43dad6..9e20fc1a 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h @@ -1,18 +1,33 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/pkcs12.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS12_H -# define HEADER_PKCS12_H + + +#ifndef OPENSSL_PKCS12_H +# define OPENSSL_PKCS12_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS12_H +# endif # include +# include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -46,7 +61,33 @@ typedef struct PKCS12_st PKCS12; typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; -DEFINE_STACK_OF(PKCS12_SAFEBAG) +SKM_DEFINE_STACK_OF_INTERNAL(PKCS12_SAFEBAG, PKCS12_SAFEBAG, PKCS12_SAFEBAG) +#define sk_PKCS12_SAFEBAG_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_value(sk, idx) ((PKCS12_SAFEBAG *)OPENSSL_sk_value(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), (idx))) +#define sk_PKCS12_SAFEBAG_new(cmp) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp))) +#define sk_PKCS12_SAFEBAG_new_null() ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_null()) +#define sk_PKCS12_SAFEBAG_new_reserve(cmp, n) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_reserve(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp), (n))) +#define sk_PKCS12_SAFEBAG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (n)) +#define sk_PKCS12_SAFEBAG_free(sk) OPENSSL_sk_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_delete(sk, i) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (i))) +#define sk_PKCS12_SAFEBAG_delete_ptr(sk, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete_ptr(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr))) +#define sk_PKCS12_SAFEBAG_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_pop(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_pop(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_shift(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_shift(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk),ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc)) +#define sk_PKCS12_SAFEBAG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), (idx)) +#define sk_PKCS12_SAFEBAG_set(sk, idx, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_set(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (idx), ossl_check_PKCS12_SAFEBAG_type(ptr))) +#define sk_PKCS12_SAFEBAG_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), pnum) +#define sk_PKCS12_SAFEBAG_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_dup(sk) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_dup(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_copyfunc_type(copyfunc), ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc))) +#define sk_PKCS12_SAFEBAG_set_cmp_func(sk, cmp) ((sk_PKCS12_SAFEBAG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp))) + typedef struct pkcs12_bag_st PKCS12_BAGS; @@ -55,7 +96,7 @@ typedef struct pkcs12_bag_st PKCS12_BAGS; /* Compatibility macros */ -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define M_PKCS12_bag_type PKCS12_bag_type # define M_PKCS12_cert_bag_type PKCS12_cert_bag_type @@ -71,8 +112,10 @@ typedef struct pkcs12_bag_st PKCS12_BAGS; # define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt #endif - -DEPRECATEDIN_1_1_0(ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, int attr_nid)) +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +#endif ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); int PKCS12_mac_present(const PKCS12 *p12); @@ -87,6 +130,8 @@ const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); +const ASN1_TYPE *PKCS12_SAFEBAG_get0_bag_obj(const PKCS12_SAFEBAG *bag); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_bag_type(const PKCS12_SAFEBAG *bag); X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); @@ -97,6 +142,7 @@ const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_secret(int type, int vtype, const unsigned char *value, int len); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, @@ -105,23 +151,50 @@ PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8inf); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt_ex(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *ctx, + const char *propq); PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, int nid1, int nid2); PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt_ex(const X509_SIG *p8, const char *pass, + int passlen, OSSL_LIB_CTX *ctx, + const char *propq); PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey_ex(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen, + OSSL_LIB_CTX *ctx, + const char *propq); X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +X509_SIG *PKCS8_encrypt_ex(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8, + OSSL_LIB_CTX *ctx, const char *propq); X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +X509_SIG *PKCS8_set0_pbe_ex(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe, + OSSL_LIB_CTX *ctx, const char *propq); PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, STACK_OF(PKCS12_SAFEBAG) *bags); +PKCS7 *PKCS12_pack_p7encdata_ex(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags, + OSSL_LIB_CTX *ctx, const char *propq); + STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, int passlen); @@ -138,6 +211,10 @@ int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, int namelen); int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, const unsigned char *name, int namelen); +int PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type, + const unsigned char *bytes, int len); +int PKCS12_add1_attr_by_txt(PKCS12_SAFEBAG *bag, const char *attrname, int type, + const unsigned char *bytes, int len); int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid); @@ -149,26 +226,62 @@ unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, const unsigned char *in, int inlen, unsigned char **data, int *datalen, int en_de); +unsigned char *PKCS12_pbe_crypt_ex(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de, OSSL_LIB_CTX *libctx, + const char *propq); void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, const char *pass, int passlen, const ASN1_OCTET_STRING *oct, int zbuf); +void *PKCS12_item_decrypt_d2i_ex(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf, + OSSL_LIB_CTX *libctx, + const char *propq); ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, const ASN1_ITEM *it, const char *pass, int passlen, void *obj, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt_ex(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf, + OSSL_LIB_CTX *ctx, + const char *propq); PKCS12 *PKCS12_init(int mode); +PKCS12 *PKCS12_init_ex(int mode, OSSL_LIB_CTX *ctx, const char *propq); + int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_asc_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni_ex(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_utf8_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); + int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md_type, int en_de); +int PKCS12_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, unsigned char *mac, unsigned int *maclen); int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); @@ -198,18 +311,35 @@ int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, int mac_iter, int keytype); +PKCS12 *PKCS12_create_ex(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype, + OSSL_LIB_CTX *ctx, const char *propq); PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, EVP_PKEY *key, int key_usage, int iter, int key_nid, const char *pass); +PKCS12_SAFEBAG *PKCS12_add_key_ex(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_secret(STACK_OF(PKCS12_SAFEBAG) **pbags, + int nid_type, const unsigned char *value, int len); int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, int safe_nid, int iter, const char *pass); -PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +int PKCS12_add_safe_ex(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); -int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +PKCS12 *PKCS12_add_safes_ex(STACK_OF(PKCS7) *safes, int p7_nid, + OSSL_LIB_CTX *ctx, const char *propq); + +int i2d_PKCS12_bio(BIO *bp, const PKCS12 *p12); # ifndef OPENSSL_NO_STDIO -int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); +int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12); # endif PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); # ifndef OPENSSL_NO_STDIO diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h.in b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h.in new file mode 100644 index 00000000..cf956b41 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h.in @@ -0,0 +1,330 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_PKCS12_H +# define OPENSSL_PKCS12_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS12_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define PKCS12_KEY_ID 1 +# define PKCS12_IV_ID 2 +# define PKCS12_MAC_ID 3 + +/* Default iteration count */ +# ifndef PKCS12_DEFAULT_ITER +# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER +# endif + +# define PKCS12_MAC_KEY_LENGTH 20 + +# define PKCS12_SALT_LEN 8 + +/* It's not clear if these are actually needed... */ +# define PKCS12_key_gen PKCS12_key_gen_utf8 +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_utf8 + +/* MS key usage constants */ + +# define KEY_EX 0x10 +# define KEY_SIG 0x80 + +typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA; + +typedef struct PKCS12_st PKCS12; + +typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; + +{- + generate_stack_macros("PKCS12_SAFEBAG"); +-} + +typedef struct pkcs12_bag_st PKCS12_BAGS; + +# define PKCS12_ERROR 0 +# define PKCS12_OK 1 + +/* Compatibility macros */ + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 + +# define M_PKCS12_bag_type PKCS12_bag_type +# define M_PKCS12_cert_bag_type PKCS12_cert_bag_type +# define M_PKCS12_crl_bag_type PKCS12_cert_bag_type + +# define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert +# define PKCS12_certbag2scrl PKCS12_SAFEBAG_get1_crl +# define PKCS12_bag_type PKCS12_SAFEBAG_get_nid +# define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid +# define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert +# define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl +# define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf +# define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt + +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +#endif + +ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); +int PKCS12_mac_present(const PKCS12 *p12); +void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, + const X509_ALGOR **pmacalg, + const ASN1_OCTET_STRING **psalt, + const ASN1_INTEGER **piter, + const PKCS12 *p12); + +const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); +const ASN1_TYPE *PKCS12_SAFEBAG_get0_bag_obj(const PKCS12_SAFEBAG *bag); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_bag_type(const PKCS12_SAFEBAG *bag); + +X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); +X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); +const STACK_OF(PKCS12_SAFEBAG) * +PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); +const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); +const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); + +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_secret(int type, int vtype, const unsigned char *value, int len); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt_ex(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *ctx, + const char *propq); + +PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, + int nid1, int nid2); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, + int passlen); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt_ex(const X509_SIG *p8, const char *pass, + int passlen, OSSL_LIB_CTX *ctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey_ex(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen, + OSSL_LIB_CTX *ctx, + const char *propq); +X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +X509_SIG *PKCS8_encrypt_ex(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8, + OSSL_LIB_CTX *ctx, const char *propq); +X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +X509_SIG *PKCS8_set0_pbe_ex(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe, + OSSL_LIB_CTX *ctx, const char *propq); +PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); +PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags); +PKCS7 *PKCS12_pack_p7encdata_ex(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags, + OSSL_LIB_CTX *ctx, const char *propq); + +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, + int passlen); + +int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); +STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12); + +int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, + int namelen); +int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_utf8(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, + const unsigned char *name, int namelen); +int PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type, + const unsigned char *bytes, int len); +int PKCS12_add1_attr_by_txt(PKCS12_SAFEBAG *bag, const char *attrname, int type, + const unsigned char *bytes, int len); +int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); +ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, + int attr_nid); +char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); +const STACK_OF(X509_ATTRIBUTE) * +PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag); +unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de); +unsigned char *PKCS12_pbe_crypt_ex(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de, OSSL_LIB_CTX *libctx, + const char *propq); +void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf); +void *PKCS12_item_decrypt_d2i_ex(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf, + OSSL_LIB_CTX *libctx, + const char *propq); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt_ex(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf, + OSSL_LIB_CTX *ctx, + const char *propq); +PKCS12 *PKCS12_init(int mode); +PKCS12 *PKCS12_init_ex(int mode, OSSL_LIB_CTX *ctx, const char *propq); + +int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_asc_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); +int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni_ex(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); +int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_utf8_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); + +int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de); +int PKCS12_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); +int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *mac, unsigned int *maclen); +int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); +int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + const EVP_MD *md_type); +int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, + int saltlen, const EVP_MD *md_type); +unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2asc(const unsigned char *uni, int unilen); +unsigned char *OPENSSL_utf82uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2utf8(const unsigned char *uni, int unilen); + +DECLARE_ASN1_FUNCTIONS(PKCS12) +DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) +DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) +DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) + +DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) +DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) + +void PKCS12_PBE_add(void); +int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, + STACK_OF(X509) **ca); +PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype); +PKCS12 *PKCS12_create_ex(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); +PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass); +PKCS12_SAFEBAG *PKCS12_add_key_ex(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_secret(STACK_OF(PKCS12_SAFEBAG) **pbags, + int nid_type, const unsigned char *value, int len); +int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass); +int PKCS12_add_safe_ex(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +PKCS12 *PKCS12_add_safes_ex(STACK_OF(PKCS7) *safes, int p7_nid, + OSSL_LIB_CTX *ctx, const char *propq); + +int i2d_PKCS12_bio(BIO *bp, const PKCS12 *p12); +# ifndef OPENSSL_NO_STDIO +int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12); +# endif +PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); +# ifndef OPENSSL_NO_STDIO +PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); +# endif +int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pkcs12err.h b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12err.h index eff5eb26..933c8329 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pkcs12err.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12err.h @@ -1,57 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS12ERR_H -# define HEADER_PKCS12ERR_H +#ifndef OPENSSL_PKCS12ERR_H +# define OPENSSL_PKCS12ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS12_strings(void); -/* - * PKCS12 function codes. - */ -# define PKCS12_F_OPENSSL_ASC2UNI 121 -# define PKCS12_F_OPENSSL_UNI2ASC 124 -# define PKCS12_F_OPENSSL_UNI2UTF8 127 -# define PKCS12_F_OPENSSL_UTF82UNI 129 -# define PKCS12_F_PKCS12_CREATE 105 -# define PKCS12_F_PKCS12_GEN_MAC 107 -# define PKCS12_F_PKCS12_INIT 109 -# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 -# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 -# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 -# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 -# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 -# define PKCS12_F_PKCS12_KEY_GEN_UTF8 116 -# define PKCS12_F_PKCS12_NEWPASS 128 -# define PKCS12_F_PKCS12_PACK_P7DATA 114 -# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 -# define PKCS12_F_PKCS12_PARSE 118 -# define PKCS12_F_PKCS12_PBE_CRYPT 119 -# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 112 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 -# define PKCS12_F_PKCS12_SETUP_MAC 122 -# define PKCS12_F_PKCS12_SET_MAC 123 -# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 -# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 -# define PKCS12_F_PKCS12_VERIFY_MAC 126 -# define PKCS12_F_PKCS8_ENCRYPT 125 -# define PKCS12_F_PKCS8_SET0_PBE 132 /* * PKCS12 reason codes. @@ -64,6 +29,7 @@ int ERR_load_PKCS12_strings(void); # define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 # define PKCS12_R_INVALID_NULL_ARGUMENT 104 # define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 +# define PKCS12_R_INVALID_TYPE 112 # define PKCS12_R_IV_GEN_ERROR 106 # define PKCS12_R_KEY_GEN_ERROR 107 # define PKCS12_R_MAC_ABSENT 108 @@ -72,9 +38,7 @@ int ERR_load_PKCS12_strings(void); # define PKCS12_R_MAC_STRING_SET_ERROR 111 # define PKCS12_R_MAC_VERIFY_FAILURE 113 # define PKCS12_R_PARSE_ERROR 114 -# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 # define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 -# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 # define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 # define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h b/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h index 9b66e002..543c80cb 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h @@ -1,27 +1,42 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/pkcs7.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS7_H -# define HEADER_PKCS7_H + + +#ifndef OPENSSL_PKCS7_H +# define OPENSSL_PKCS7_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS7_H +# endif # include # include # include # include -# include +# include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { #endif + /*- Encryption_ID DES-CBC Digest_ID MD5 @@ -29,6 +44,11 @@ Digest_Encryption_ID rsaEncryption Key_Encryption_ID rsaEncryption */ +typedef struct PKCS7_CTX_st { + OSSL_LIB_CTX *libctx; + char *propq; +} PKCS7_CTX; + typedef struct pkcs7_issuer_and_serial_st { X509_NAME *issuer; ASN1_INTEGER *serial; @@ -44,9 +64,35 @@ typedef struct pkcs7_signer_info_st { STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ /* The private key to sign with */ EVP_PKEY *pkey; + const PKCS7_CTX *ctx; } PKCS7_SIGNER_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO) +#define sk_PKCS7_SIGNER_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_value(sk, idx) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), (idx))) +#define sk_PKCS7_SIGNER_INFO_new(cmp) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp))) +#define sk_PKCS7_SIGNER_INFO_new_null() ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_SIGNER_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_SIGNER_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (n)) +#define sk_PKCS7_SIGNER_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_delete(sk, i) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (i))) +#define sk_PKCS7_SIGNER_INFO_delete_ptr(sk, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr))) +#define sk_PKCS7_SIGNER_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_pop(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_shift(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk),ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_SIGNER_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), (idx)) +#define sk_PKCS7_SIGNER_INFO_set(sk, idx, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (idx), ossl_check_PKCS7_SIGNER_INFO_type(ptr))) +#define sk_PKCS7_SIGNER_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), pnum) +#define sk_PKCS7_SIGNER_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_dup(sk) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc))) +#define sk_PKCS7_SIGNER_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_SIGNER_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp))) -DEFINE_STACK_OF(PKCS7_SIGNER_INFO) typedef struct pkcs7_recip_info_st { ASN1_INTEGER *version; /* version 0 */ @@ -54,9 +100,36 @@ typedef struct pkcs7_recip_info_st { X509_ALGOR *key_enc_algor; ASN1_OCTET_STRING *enc_key; X509 *cert; /* get the pub-key from this */ + const PKCS7_CTX *ctx; } PKCS7_RECIP_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO, PKCS7_RECIP_INFO) +#define sk_PKCS7_RECIP_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_value(sk, idx) ((PKCS7_RECIP_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), (idx))) +#define sk_PKCS7_RECIP_INFO_new(cmp) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp))) +#define sk_PKCS7_RECIP_INFO_new_null() ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_RECIP_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_RECIP_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (n)) +#define sk_PKCS7_RECIP_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_delete(sk, i) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (i))) +#define sk_PKCS7_RECIP_INFO_delete_ptr(sk, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr))) +#define sk_PKCS7_RECIP_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_pop(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_shift(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk),ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_RECIP_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), (idx)) +#define sk_PKCS7_RECIP_INFO_set(sk, idx, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (idx), ossl_check_PKCS7_RECIP_INFO_type(ptr))) +#define sk_PKCS7_RECIP_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), pnum) +#define sk_PKCS7_RECIP_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_dup(sk) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc))) +#define sk_PKCS7_RECIP_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_RECIP_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp))) + -DEFINE_STACK_OF(PKCS7_RECIP_INFO) typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ @@ -76,6 +149,7 @@ typedef struct pkcs7_enc_content_st { X509_ALGOR *algorithm; ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ const EVP_CIPHER *cipher; + const PKCS7_CTX *ctx; } PKCS7_ENC_CONTENT; typedef struct pkcs7_enveloped_st { @@ -141,9 +215,36 @@ typedef struct pkcs7_st { /* Anything else */ ASN1_TYPE *other; } d; + PKCS7_CTX ctx; } PKCS7; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7, PKCS7, PKCS7) +#define sk_PKCS7_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_sk_type(sk)) +#define sk_PKCS7_value(sk, idx) ((PKCS7 *)OPENSSL_sk_value(ossl_check_const_PKCS7_sk_type(sk), (idx))) +#define sk_PKCS7_new(cmp) ((STACK_OF(PKCS7) *)OPENSSL_sk_new(ossl_check_PKCS7_compfunc_type(cmp))) +#define sk_PKCS7_new_null() ((STACK_OF(PKCS7) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_new_reserve(cmp, n) ((STACK_OF(PKCS7) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_compfunc_type(cmp), (n))) +#define sk_PKCS7_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_sk_type(sk), (n)) +#define sk_PKCS7_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_delete(sk, i) ((PKCS7 *)OPENSSL_sk_delete(ossl_check_PKCS7_sk_type(sk), (i))) +#define sk_PKCS7_delete_ptr(sk, ptr) ((PKCS7 *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr))) +#define sk_PKCS7_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_pop(sk) ((PKCS7 *)OPENSSL_sk_pop(ossl_check_PKCS7_sk_type(sk))) +#define sk_PKCS7_shift(sk) ((PKCS7 *)OPENSSL_sk_shift(ossl_check_PKCS7_sk_type(sk))) +#define sk_PKCS7_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_sk_type(sk),ossl_check_PKCS7_freefunc_type(freefunc)) +#define sk_PKCS7_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), (idx)) +#define sk_PKCS7_set(sk, idx, ptr) ((PKCS7 *)OPENSSL_sk_set(ossl_check_PKCS7_sk_type(sk), (idx), ossl_check_PKCS7_type(ptr))) +#define sk_PKCS7_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), pnum) +#define sk_PKCS7_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_sk_type(sk)) +#define sk_PKCS7_dup(sk) ((STACK_OF(PKCS7) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_sk_type(sk))) +#define sk_PKCS7_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_sk_type(sk), ossl_check_PKCS7_copyfunc_type(copyfunc), ossl_check_PKCS7_freefunc_type(freefunc))) +#define sk_PKCS7_set_cmp_func(sk, cmp) ((sk_PKCS7_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_compfunc_type(cmp))) + -DEFINE_STACK_OF(PKCS7) # define PKCS7_OP_SET_DETACHED_SIGNATURE 1 # define PKCS7_OP_GET_DETACHED_SIGNATURE 2 @@ -208,11 +309,11 @@ int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, unsigned int *len); # ifndef OPENSSL_NO_STDIO PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); -int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); +int i2d_PKCS7_fp(FILE *fp, const PKCS7 *p7); # endif -PKCS7 *PKCS7_dup(PKCS7 *p7); +DECLARE_ASN1_DUP_FUNCTION(PKCS7) PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); -int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); +int i2d_PKCS7_bio(BIO *bp, const PKCS7 *p7); int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); @@ -225,6 +326,7 @@ DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) DECLARE_ASN1_FUNCTIONS(PKCS7) +PKCS7 *PKCS7_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) @@ -234,6 +336,7 @@ DECLARE_ASN1_PRINT_FUNCTION(PKCS7) long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); +int PKCS7_type_is_other(PKCS7 *p7); int PKCS7_set_type(PKCS7 *p7, int type); int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); @@ -269,13 +372,14 @@ int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7); ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, void *data); int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, void *value); -ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); -ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_attribute(const PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(const PKCS7_SIGNER_INFO *si, int nid); int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, @@ -283,6 +387,9 @@ int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, int flags); +PKCS7 *PKCS7_sign_ex(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags, OSSL_LIB_CTX *libctx, + const char *propq); PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, X509 *signcert, EVP_PKEY *pkey, @@ -295,6 +402,9 @@ STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags); PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, int flags); +PKCS7 *PKCS7_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, int flags, + OSSL_LIB_CTX *libctx, const char *propq); int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags); @@ -309,6 +419,7 @@ int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, const unsigned char *md, int mdlen); int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7_ex(BIO *bio, BIO **bcont, PKCS7 **p7); PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h.in b/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h.in new file mode 100644 index 00000000..0a0c415b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h.in @@ -0,0 +1,359 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_PKCS7_H +# define OPENSSL_PKCS7_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS7_H +# endif + +# include +# include +# include + +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/*- +Encryption_ID DES-CBC +Digest_ID MD5 +Digest_Encryption_ID rsaEncryption +Key_Encryption_ID rsaEncryption +*/ + +typedef struct PKCS7_CTX_st { + OSSL_LIB_CTX *libctx; + char *propq; +} PKCS7_CTX; + +typedef struct pkcs7_issuer_and_serial_st { + X509_NAME *issuer; + ASN1_INTEGER *serial; +} PKCS7_ISSUER_AND_SERIAL; + +typedef struct pkcs7_signer_info_st { + ASN1_INTEGER *version; /* version 1 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *digest_alg; + STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ + X509_ALGOR *digest_enc_alg; + ASN1_OCTET_STRING *enc_digest; + STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ + /* The private key to sign with */ + EVP_PKEY *pkey; + const PKCS7_CTX *ctx; +} PKCS7_SIGNER_INFO; +{- + generate_stack_macros("PKCS7_SIGNER_INFO"); +-} + +typedef struct pkcs7_recip_info_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *key_enc_algor; + ASN1_OCTET_STRING *enc_key; + X509 *cert; /* get the pub-key from this */ + const PKCS7_CTX *ctx; +} PKCS7_RECIP_INFO; +{- + generate_stack_macros("PKCS7_RECIP_INFO"); +-} + + +typedef struct pkcs7_signed_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + struct pkcs7_st *contents; +} PKCS7_SIGNED; +/* + * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about + * merging the two + */ + +typedef struct pkcs7_enc_content_st { + ASN1_OBJECT *content_type; + X509_ALGOR *algorithm; + ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ + const EVP_CIPHER *cipher; + const PKCS7_CTX *ctx; +} PKCS7_ENC_CONTENT; + +typedef struct pkcs7_enveloped_st { + ASN1_INTEGER *version; /* version 0 */ + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENVELOPE; + +typedef struct pkcs7_signedandenveloped_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + PKCS7_ENC_CONTENT *enc_data; + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; +} PKCS7_SIGN_ENVELOPE; + +typedef struct pkcs7_digest_st { + ASN1_INTEGER *version; /* version 0 */ + X509_ALGOR *md; /* md used */ + struct pkcs7_st *contents; + ASN1_OCTET_STRING *digest; +} PKCS7_DIGEST; + +typedef struct pkcs7_encrypted_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENCRYPT; + +typedef struct pkcs7_st { + /* + * The following is non NULL if it contains ASN1 encoding of this + * structure + */ + unsigned char *asn1; + long length; +# define PKCS7_S_HEADER 0 +# define PKCS7_S_BODY 1 +# define PKCS7_S_TAIL 2 + int state; /* used during processing */ + int detached; + ASN1_OBJECT *type; + /* content as defined by the type */ + /* + * all encryption/message digests are applied to the 'contents', leaving + * out the 'type' field. + */ + union { + char *ptr; + /* NID_pkcs7_data */ + ASN1_OCTET_STRING *data; + /* NID_pkcs7_signed */ + PKCS7_SIGNED *sign; + /* NID_pkcs7_enveloped */ + PKCS7_ENVELOPE *enveloped; + /* NID_pkcs7_signedAndEnveloped */ + PKCS7_SIGN_ENVELOPE *signed_and_enveloped; + /* NID_pkcs7_digest */ + PKCS7_DIGEST *digest; + /* NID_pkcs7_encrypted */ + PKCS7_ENCRYPT *encrypted; + /* Anything else */ + ASN1_TYPE *other; + } d; + PKCS7_CTX ctx; +} PKCS7; +{- + generate_stack_macros("PKCS7"); +-} + + +# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 +# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 + +# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) +# define PKCS7_get_attributes(si) ((si)->unauth_attr) + +# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) +# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) +# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) +# define PKCS7_type_is_signedAndEnveloped(a) \ + (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) +# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) +# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) + +# define PKCS7_set_detached(p,v) \ + PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) +# define PKCS7_get_detached(p) \ + PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) + +# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) + +/* S/MIME related flags */ + +# define PKCS7_TEXT 0x1 +# define PKCS7_NOCERTS 0x2 +# define PKCS7_NOSIGS 0x4 +# define PKCS7_NOCHAIN 0x8 +# define PKCS7_NOINTERN 0x10 +# define PKCS7_NOVERIFY 0x20 +# define PKCS7_DETACHED 0x40 +# define PKCS7_BINARY 0x80 +# define PKCS7_NOATTR 0x100 +# define PKCS7_NOSMIMECAP 0x200 +# define PKCS7_NOOLDMIMETYPE 0x400 +# define PKCS7_CRLFEOL 0x800 +# define PKCS7_STREAM 0x1000 +# define PKCS7_NOCRL 0x2000 +# define PKCS7_PARTIAL 0x4000 +# define PKCS7_REUSE_DIGEST 0x8000 +# define PKCS7_NO_DUAL_CONTENT 0x10000 + +/* Flags: for compatibility with older code */ + +# define SMIME_TEXT PKCS7_TEXT +# define SMIME_NOCERTS PKCS7_NOCERTS +# define SMIME_NOSIGS PKCS7_NOSIGS +# define SMIME_NOCHAIN PKCS7_NOCHAIN +# define SMIME_NOINTERN PKCS7_NOINTERN +# define SMIME_NOVERIFY PKCS7_NOVERIFY +# define SMIME_DETACHED PKCS7_DETACHED +# define SMIME_BINARY PKCS7_BINARY +# define SMIME_NOATTR PKCS7_NOATTR + +/* CRLF ASCII canonicalisation */ +# define SMIME_ASCIICRLF 0x80000 + +DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) + +int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, + const EVP_MD *type, unsigned char *md, + unsigned int *len); +# ifndef OPENSSL_NO_STDIO +PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); +int i2d_PKCS7_fp(FILE *fp, const PKCS7 *p7); +# endif +DECLARE_ASN1_DUP_FUNCTION(PKCS7) +PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); +int i2d_PKCS7_bio(BIO *bp, const PKCS7 *p7); +int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); +int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); + +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) +DECLARE_ASN1_FUNCTIONS(PKCS7) +PKCS7 *PKCS7_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) +DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) + +DECLARE_ASN1_NDEF_FUNCTION(PKCS7) +DECLARE_ASN1_PRINT_FUNCTION(PKCS7) + +long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); + +int PKCS7_type_is_other(PKCS7 *p7); +int PKCS7_set_type(PKCS7 *p7, int type); +int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); +int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); +int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, + const EVP_MD *dgst); +int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); +int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); +int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); +int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_content_new(PKCS7 *p7, int nid); +int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, + BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, + X509 *x509); + +BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); +int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); +BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); + +PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, + EVP_PKEY *pkey, const EVP_MD *dgst); +X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); +STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); + +PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); +void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, + X509_ALGOR **pdig, X509_ALGOR **psig); +void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); +int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); +int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); +int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); +int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); + +PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7); +ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, + void *data); +int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, + void *value); +ASN1_TYPE *PKCS7_get_attribute(const PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(const PKCS7_SIGNER_INFO *si, int nid); +int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); + +PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags); +PKCS7 *PKCS7_sign_ex(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags, OSSL_LIB_CTX *libctx, + const char *propq); + +PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, + X509 *signcert, EVP_PKEY *pkey, + const EVP_MD *md, int flags); + +int PKCS7_final(PKCS7 *p7, BIO *data, int flags); +int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, + BIO *indata, BIO *out, int flags); +STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, + int flags); +PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, + int flags); +PKCS7 *PKCS7_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, int flags, + OSSL_LIB_CTX *libctx, const char *propq); +int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, + int flags); + +int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, + STACK_OF(X509_ALGOR) *cap); +STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); +int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); + +int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); +int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); +int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, + const unsigned char *md, int mdlen); + +int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7_ex(BIO *bio, BIO **bcont, PKCS7 **p7); +PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); + +BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pkcs7err.h b/deps/openssl/android/x86/usr/local/include/openssl/pkcs7err.h index 02e0299a..ceb1a501 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pkcs7err.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/pkcs7err.h @@ -1,62 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS7ERR_H -# define HEADER_PKCS7ERR_H +#ifndef OPENSSL_PKCS7ERR_H +# define OPENSSL_PKCS7ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS7_strings(void); -/* - * PKCS7 function codes. - */ -# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 -# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 -# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 -# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 -# define PKCS7_F_PKCS7_ADD_CRL 101 -# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 -# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 -# define PKCS7_F_PKCS7_ADD_SIGNER 103 -# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 -# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 -# define PKCS7_F_PKCS7_CTRL 104 -# define PKCS7_F_PKCS7_DATADECODE 112 -# define PKCS7_F_PKCS7_DATAFINAL 128 -# define PKCS7_F_PKCS7_DATAINIT 105 -# define PKCS7_F_PKCS7_DATAVERIFY 107 -# define PKCS7_F_PKCS7_DECRYPT 114 -# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 -# define PKCS7_F_PKCS7_ENCODE_RINFO 132 -# define PKCS7_F_PKCS7_ENCRYPT 115 -# define PKCS7_F_PKCS7_FINAL 134 -# define PKCS7_F_PKCS7_FIND_DIGEST 127 -# define PKCS7_F_PKCS7_GET0_SIGNERS 124 -# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 -# define PKCS7_F_PKCS7_SET_CIPHER 108 -# define PKCS7_F_PKCS7_SET_CONTENT 109 -# define PKCS7_F_PKCS7_SET_DIGEST 126 -# define PKCS7_F_PKCS7_SET_TYPE 110 -# define PKCS7_F_PKCS7_SIGN 116 -# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 -# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 -# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 -# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 -# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 -# define PKCS7_F_PKCS7_VERIFY 117 /* * PKCS7 reason codes. diff --git a/deps/openssl/android/x86/usr/local/include/openssl/prov_ssl.h b/deps/openssl/android/x86/usr/local/include/openssl/prov_ssl.h new file mode 100644 index 00000000..d3e0896c --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/prov_ssl.h @@ -0,0 +1,34 @@ +/* + * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROV_SSL_H +# define OPENSSL_PROV_SSL_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* SSL/TLS related defines useful to providers */ + +# define SSL_MAX_MASTER_KEY_LENGTH 48 + +# define SSL3_VERSION 0x0300 +# define TLS1_VERSION 0x0301 +# define TLS1_1_VERSION 0x0302 +# define TLS1_2_VERSION 0x0303 +# define TLS1_3_VERSION 0x0304 +# define DTLS1_VERSION 0xFEFF +# define DTLS1_2_VERSION 0xFEFD +# define DTLS1_BAD_VER 0x0100 + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_PROV_SSL_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/proverr.h b/deps/openssl/android/x86/usr/local/include/openssl/proverr.h new file mode 100644 index 00000000..5d5c16d9 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/proverr.h @@ -0,0 +1,149 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROVERR_H +# define OPENSSL_PROVERR_H +# pragma once + +# include +# include +# include + + + +/* + * PROV reason codes. + */ +# define PROV_R_ADDITIONAL_INPUT_TOO_LONG 184 +# define PROV_R_ALGORITHM_MISMATCH 173 +# define PROV_R_ALREADY_INSTANTIATED 185 +# define PROV_R_BAD_DECRYPT 100 +# define PROV_R_BAD_ENCODING 141 +# define PROV_R_BAD_LENGTH 142 +# define PROV_R_BAD_TLS_CLIENT_VERSION 161 +# define PROV_R_BN_ERROR 160 +# define PROV_R_CIPHER_OPERATION_FAILED 102 +# define PROV_R_DERIVATION_FUNCTION_INIT_FAILED 205 +# define PROV_R_DIGEST_NOT_ALLOWED 174 +# define PROV_R_EMS_NOT_ENABLED 233 +# define PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK 186 +# define PROV_R_ERROR_INSTANTIATING_DRBG 188 +# define PROV_R_ERROR_RETRIEVING_ENTROPY 189 +# define PROV_R_ERROR_RETRIEVING_NONCE 190 +# define PROV_R_FAILED_DURING_DERIVATION 164 +# define PROV_R_FAILED_TO_CREATE_LOCK 180 +# define PROV_R_FAILED_TO_DECRYPT 162 +# define PROV_R_FAILED_TO_GENERATE_KEY 121 +# define PROV_R_FAILED_TO_GET_PARAMETER 103 +# define PROV_R_FAILED_TO_SET_PARAMETER 104 +# define PROV_R_FAILED_TO_SIGN 175 +# define PROV_R_FIPS_MODULE_CONDITIONAL_ERROR 227 +# define PROV_R_FIPS_MODULE_ENTERING_ERROR_STATE 224 +# define PROV_R_FIPS_MODULE_IN_ERROR_STATE 225 +# define PROV_R_GENERATE_ERROR 191 +# define PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 165 +# define PROV_R_INDICATOR_INTEGRITY_FAILURE 210 +# define PROV_R_INSUFFICIENT_DRBG_STRENGTH 181 +# define PROV_R_INVALID_AAD 108 +# define PROV_R_INVALID_CONFIG_DATA 211 +# define PROV_R_INVALID_CONSTANT_LENGTH 157 +# define PROV_R_INVALID_CURVE 176 +# define PROV_R_INVALID_CUSTOM_LENGTH 111 +# define PROV_R_INVALID_DATA 115 +# define PROV_R_INVALID_DIGEST 122 +# define PROV_R_INVALID_DIGEST_LENGTH 166 +# define PROV_R_INVALID_DIGEST_SIZE 218 +# define PROV_R_INVALID_INPUT_LENGTH 230 +# define PROV_R_INVALID_ITERATION_COUNT 123 +# define PROV_R_INVALID_IV_LENGTH 109 +# define PROV_R_INVALID_KEY 158 +# define PROV_R_INVALID_KEY_LENGTH 105 +# define PROV_R_INVALID_MAC 151 +# define PROV_R_INVALID_MGF1_MD 167 +# define PROV_R_INVALID_MODE 125 +# define PROV_R_INVALID_OUTPUT_LENGTH 217 +# define PROV_R_INVALID_PADDING_MODE 168 +# define PROV_R_INVALID_PUBINFO 198 +# define PROV_R_INVALID_SALT_LENGTH 112 +# define PROV_R_INVALID_SEED_LENGTH 154 +# define PROV_R_INVALID_SIGNATURE_SIZE 179 +# define PROV_R_INVALID_STATE 212 +# define PROV_R_INVALID_TAG 110 +# define PROV_R_INVALID_TAG_LENGTH 118 +# define PROV_R_INVALID_UKM_LENGTH 200 +# define PROV_R_INVALID_X931_DIGEST 170 +# define PROV_R_IN_ERROR_STATE 192 +# define PROV_R_KEY_SETUP_FAILED 101 +# define PROV_R_KEY_SIZE_TOO_SMALL 171 +# define PROV_R_LENGTH_TOO_LARGE 202 +# define PROV_R_MISMATCHING_DOMAIN_PARAMETERS 203 +# define PROV_R_MISSING_CEK_ALG 144 +# define PROV_R_MISSING_CIPHER 155 +# define PROV_R_MISSING_CONFIG_DATA 213 +# define PROV_R_MISSING_CONSTANT 156 +# define PROV_R_MISSING_KEY 128 +# define PROV_R_MISSING_MAC 150 +# define PROV_R_MISSING_MESSAGE_DIGEST 129 +# define PROV_R_MISSING_OID 209 +# define PROV_R_MISSING_PASS 130 +# define PROV_R_MISSING_SALT 131 +# define PROV_R_MISSING_SECRET 132 +# define PROV_R_MISSING_SEED 140 +# define PROV_R_MISSING_SESSION_ID 133 +# define PROV_R_MISSING_TYPE 134 +# define PROV_R_MISSING_XCGHASH 135 +# define PROV_R_MODULE_INTEGRITY_FAILURE 214 +# define PROV_R_NOT_A_PRIVATE_KEY 221 +# define PROV_R_NOT_A_PUBLIC_KEY 220 +# define PROV_R_NOT_INSTANTIATED 193 +# define PROV_R_NOT_PARAMETERS 226 +# define PROV_R_NOT_SUPPORTED 136 +# define PROV_R_NOT_XOF_OR_INVALID_LENGTH 113 +# define PROV_R_NO_KEY_SET 114 +# define PROV_R_NO_PARAMETERS_SET 177 +# define PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 178 +# define PROV_R_OUTPUT_BUFFER_TOO_SMALL 106 +# define PROV_R_PARENT_CANNOT_GENERATE_RANDOM_NUMBERS 228 +# define PROV_R_PARENT_CANNOT_SUPPLY_ENTROPY_SEED 187 +# define PROV_R_PARENT_LOCKING_NOT_ENABLED 182 +# define PROV_R_PARENT_STRENGTH_TOO_WEAK 194 +# define PROV_R_PATH_MUST_BE_ABSOLUTE 219 +# define PROV_R_PERSONALISATION_STRING_TOO_LONG 195 +# define PROV_R_PSS_SALTLEN_TOO_SMALL 172 +# define PROV_R_REQUEST_TOO_LARGE_FOR_DRBG 196 +# define PROV_R_REQUIRE_CTR_MODE_CIPHER 206 +# define PROV_R_RESEED_ERROR 197 +# define PROV_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 222 +# define PROV_R_SEED_SOURCES_MUST_NOT_HAVE_A_PARENT 229 +# define PROV_R_SELF_TEST_KAT_FAILURE 215 +# define PROV_R_SELF_TEST_POST_FAILURE 216 +# define PROV_R_TAG_NOT_NEEDED 120 +# define PROV_R_TAG_NOT_SET 119 +# define PROV_R_TOO_MANY_RECORDS 126 +# define PROV_R_UNABLE_TO_FIND_CIPHERS 207 +# define PROV_R_UNABLE_TO_GET_PARENT_STRENGTH 199 +# define PROV_R_UNABLE_TO_GET_PASSPHRASE 159 +# define PROV_R_UNABLE_TO_INITIALISE_CIPHERS 208 +# define PROV_R_UNABLE_TO_LOAD_SHA256 147 +# define PROV_R_UNABLE_TO_LOCK_PARENT 201 +# define PROV_R_UNABLE_TO_RESEED 204 +# define PROV_R_UNSUPPORTED_CEK_ALG 145 +# define PROV_R_UNSUPPORTED_KEY_SIZE 153 +# define PROV_R_UNSUPPORTED_MAC_TYPE 137 +# define PROV_R_UNSUPPORTED_NUMBER_OF_ROUNDS 152 +# define PROV_R_URI_AUTHORITY_UNSUPPORTED 223 +# define PROV_R_VALUE_ERROR 138 +# define PROV_R_WRONG_FINAL_BLOCK_LENGTH 107 +# define PROV_R_WRONG_OUTPUT_BUFFER_SIZE 139 +# define PROV_R_XOF_DIGESTS_NOT_ALLOWED 183 +# define PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE 148 +# define PROV_R_XTS_DUPLICATED_KEYS 149 + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/provider.h b/deps/openssl/android/x86/usr/local/include/openssl/provider.h new file mode 100644 index 00000000..dc86ff58 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/provider.h @@ -0,0 +1,60 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROVIDER_H +# define OPENSSL_PROVIDER_H +# pragma once + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Set the default provider search path */ +int OSSL_PROVIDER_set_default_search_path(OSSL_LIB_CTX *, const char *path); + +/* Load and unload a provider */ +OSSL_PROVIDER *OSSL_PROVIDER_load(OSSL_LIB_CTX *, const char *name); +OSSL_PROVIDER *OSSL_PROVIDER_try_load(OSSL_LIB_CTX *, const char *name, + int retain_fallbacks); +int OSSL_PROVIDER_unload(OSSL_PROVIDER *prov); +int OSSL_PROVIDER_available(OSSL_LIB_CTX *, const char *name); +int OSSL_PROVIDER_do_all(OSSL_LIB_CTX *ctx, + int (*cb)(OSSL_PROVIDER *provider, void *cbdata), + void *cbdata); + +const OSSL_PARAM *OSSL_PROVIDER_gettable_params(const OSSL_PROVIDER *prov); +int OSSL_PROVIDER_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]); +int OSSL_PROVIDER_self_test(const OSSL_PROVIDER *prov); +int OSSL_PROVIDER_get_capabilities(const OSSL_PROVIDER *prov, + const char *capability, + OSSL_CALLBACK *cb, + void *arg); + +const OSSL_ALGORITHM *OSSL_PROVIDER_query_operation(const OSSL_PROVIDER *prov, + int operation_id, + int *no_cache); +void OSSL_PROVIDER_unquery_operation(const OSSL_PROVIDER *prov, + int operation_id, const OSSL_ALGORITHM *algs); +void *OSSL_PROVIDER_get0_provider_ctx(const OSSL_PROVIDER *prov); +const OSSL_DISPATCH *OSSL_PROVIDER_get0_dispatch(const OSSL_PROVIDER *prov); + +/* Add a built in providers */ +int OSSL_PROVIDER_add_builtin(OSSL_LIB_CTX *, const char *name, + OSSL_provider_init_fn *init_fn); + +/* Information */ +const char *OSSL_PROVIDER_get0_name(const OSSL_PROVIDER *prov); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/rand.h b/deps/openssl/android/x86/usr/local/include/openssl/rand.h index 38a2a271..90e0f0a0 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/rand.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/rand.h @@ -1,24 +1,42 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RAND_H -# define HEADER_RAND_H +#ifndef OPENSSL_RAND_H +# define OPENSSL_RAND_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RAND_H +# endif # include -# include +# include # include # include +# include #ifdef __cplusplus extern "C" { #endif +/* + * Default security strength (in the sense of [NIST SP 800-90Ar1]) + * + * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that + * of the cipher by collecting less entropy. The current DRBG implementation + * does not take RAND_DRBG_STRENGTH into account and sets the strength of the + * DRBG to that of the cipher. + */ +# define RAND_DRBG_STRENGTH 256 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 struct rand_meth_st { int (*seed) (const void *buf, int num); int (*bytes) (unsigned char *buf, int num); @@ -28,26 +46,55 @@ struct rand_meth_st { int (*status) (void); }; -int RAND_set_rand_method(const RAND_METHOD *meth); -const RAND_METHOD *RAND_get_rand_method(void); -# ifndef OPENSSL_NO_ENGINE -int RAND_set_rand_engine(ENGINE *engine); -# endif +OSSL_DEPRECATEDIN_3_0 int RAND_set_rand_method(const RAND_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const RAND_METHOD *RAND_get_rand_method(void); +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int RAND_set_rand_engine(ENGINE *engine); +# endif -RAND_METHOD *RAND_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 RAND_METHOD *RAND_OpenSSL(void); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define RAND_cleanup() while(0) continue # endif int RAND_bytes(unsigned char *buf, int num); int RAND_priv_bytes(unsigned char *buf, int num); -DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) + +/* + * Equivalent of RAND_priv_bytes() but additionally taking an OSSL_LIB_CTX and + * a strength. + */ +int RAND_priv_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num, + unsigned int strength); + +/* + * Equivalent of RAND_bytes() but additionally taking an OSSL_LIB_CTX and + * a strength. + */ +int RAND_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num, + unsigned int strength); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 int RAND_pseudo_bytes(unsigned char *buf, int num); +# endif + +EVP_RAND_CTX *RAND_get0_primary(OSSL_LIB_CTX *ctx); +EVP_RAND_CTX *RAND_get0_public(OSSL_LIB_CTX *ctx); +EVP_RAND_CTX *RAND_get0_private(OSSL_LIB_CTX *ctx); +int RAND_set0_public(OSSL_LIB_CTX *ctx, EVP_RAND_CTX *rand); +int RAND_set0_private(OSSL_LIB_CTX *ctx, EVP_RAND_CTX *rand); + +int RAND_set_DRBG_type(OSSL_LIB_CTX *ctx, const char *drbg, const char *propq, + const char *cipher, const char *digest); +int RAND_set_seed_source_type(OSSL_LIB_CTX *ctx, const char *seed, + const char *propq); void RAND_seed(const void *buf, int num); void RAND_keep_random_devices_open(int keep); # if defined(__ANDROID__) && defined(__NDK_FPABI__) -__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ +__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ # endif void RAND_add(const void *buf, int num, double randomness); int RAND_load_file(const char *file, long max_bytes); @@ -65,11 +112,12 @@ int RAND_poll(void); # if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) /* application has to include in order to use these */ -DEPRECATEDIN_1_1_0(void RAND_screen(void)) -DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void RAND_screen(void); +OSSL_DEPRECATEDIN_1_1_0 int RAND_event(UINT, WPARAM, LPARAM); +# endif # endif - #ifdef __cplusplus } #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/rand_drbg.h b/deps/openssl/android/x86/usr/local/include/openssl/rand_drbg.h deleted file mode 100644 index 45b731b7..00000000 --- a/deps/openssl/android/x86/usr/local/include/openssl/rand_drbg.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DRBG_RAND_H -# define HEADER_DRBG_RAND_H - -# include -# include -# include - -/* - * RAND_DRBG flags - * - * Note: if new flags are added, the constant `rand_drbg_used_flags` - * in drbg_lib.c needs to be updated accordingly. - */ - -/* In CTR mode, disable derivation function ctr_df */ -# define RAND_DRBG_FLAG_CTR_NO_DF 0x1 - - -# if OPENSSL_API_COMPAT < 0x10200000L -/* This #define was replaced by an internal constant and should not be used. */ -# define RAND_DRBG_USED_FLAGS (RAND_DRBG_FLAG_CTR_NO_DF) -# endif - -/* - * Default security strength (in the sense of [NIST SP 800-90Ar1]) - * - * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that - * of the cipher by collecting less entropy. The current DRBG implementation - * does not take RAND_DRBG_STRENGTH into account and sets the strength of the - * DRBG to that of the cipher. - * - * RAND_DRBG_STRENGTH is currently only used for the legacy RAND - * implementation. - * - * Currently supported ciphers are: NID_aes_128_ctr, NID_aes_192_ctr and - * NID_aes_256_ctr - */ -# define RAND_DRBG_STRENGTH 256 -/* Default drbg type */ -# define RAND_DRBG_TYPE NID_aes_256_ctr -/* Default drbg flags */ -# define RAND_DRBG_FLAGS 0 - - -# ifdef __cplusplus -extern "C" { -# endif - -/* - * Object lifetime functions. - */ -RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent); -RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent); -int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags); -int RAND_DRBG_set_defaults(int type, unsigned int flags); -int RAND_DRBG_instantiate(RAND_DRBG *drbg, - const unsigned char *pers, size_t perslen); -int RAND_DRBG_uninstantiate(RAND_DRBG *drbg); -void RAND_DRBG_free(RAND_DRBG *drbg); - -/* - * Object "use" functions. - */ -int RAND_DRBG_reseed(RAND_DRBG *drbg, - const unsigned char *adin, size_t adinlen, - int prediction_resistance); -int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen, - int prediction_resistance, - const unsigned char *adin, size_t adinlen); -int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen); - -int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval); -int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval); - -int RAND_DRBG_set_reseed_defaults( - unsigned int master_reseed_interval, - unsigned int slave_reseed_interval, - time_t master_reseed_time_interval, - time_t slave_reseed_time_interval - ); - -RAND_DRBG *RAND_DRBG_get0_master(void); -RAND_DRBG *RAND_DRBG_get0_public(void); -RAND_DRBG *RAND_DRBG_get0_private(void); - -/* - * EXDATA - */ -# define RAND_DRBG_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG, l, p, newf, dupf, freef) -int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *arg); -void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx); - -/* - * Callback function typedefs - */ -typedef size_t (*RAND_DRBG_get_entropy_fn)(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, - size_t max_len, - int prediction_resistance); -typedef void (*RAND_DRBG_cleanup_entropy_fn)(RAND_DRBG *ctx, - unsigned char *out, size_t outlen); -typedef size_t (*RAND_DRBG_get_nonce_fn)(RAND_DRBG *drbg, unsigned char **pout, - int entropy, size_t min_len, - size_t max_len); -typedef void (*RAND_DRBG_cleanup_nonce_fn)(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); - -int RAND_DRBG_set_callbacks(RAND_DRBG *drbg, - RAND_DRBG_get_entropy_fn get_entropy, - RAND_DRBG_cleanup_entropy_fn cleanup_entropy, - RAND_DRBG_get_nonce_fn get_nonce, - RAND_DRBG_cleanup_nonce_fn cleanup_nonce); - - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/randerr.h b/deps/openssl/android/x86/usr/local/include/openssl/randerr.h index 79d57905..b5e08e43 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/randerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/randerr.h @@ -1,54 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RANDERR_H -# define HEADER_RANDERR_H +#ifndef OPENSSL_RANDERR_H +# define OPENSSL_RANDERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RAND_strings(void); -/* - * RAND function codes. - */ -# define RAND_F_DATA_COLLECT_METHOD 127 -# define RAND_F_DRBG_BYTES 101 -# define RAND_F_DRBG_GET_ENTROPY 105 -# define RAND_F_DRBG_SETUP 117 -# define RAND_F_GET_ENTROPY 106 -# define RAND_F_RAND_BYTES 100 -# define RAND_F_RAND_DRBG_ENABLE_LOCKING 119 -# define RAND_F_RAND_DRBG_GENERATE 107 -# define RAND_F_RAND_DRBG_GET_ENTROPY 120 -# define RAND_F_RAND_DRBG_GET_NONCE 123 -# define RAND_F_RAND_DRBG_INSTANTIATE 108 -# define RAND_F_RAND_DRBG_NEW 109 -# define RAND_F_RAND_DRBG_RESEED 110 -# define RAND_F_RAND_DRBG_RESTART 102 -# define RAND_F_RAND_DRBG_SET 104 -# define RAND_F_RAND_DRBG_SET_DEFAULTS 121 -# define RAND_F_RAND_DRBG_UNINSTANTIATE 118 -# define RAND_F_RAND_LOAD_FILE 111 -# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 122 -# define RAND_F_RAND_POOL_ADD 103 -# define RAND_F_RAND_POOL_ADD_BEGIN 113 -# define RAND_F_RAND_POOL_ADD_END 114 -# define RAND_F_RAND_POOL_ATTACH 124 -# define RAND_F_RAND_POOL_BYTES_NEEDED 115 -# define RAND_F_RAND_POOL_GROW 125 -# define RAND_F_RAND_POOL_NEW 116 -# define RAND_F_RAND_PSEUDO_BYTES 126 -# define RAND_F_RAND_WRITE_FILE 112 /* * RAND reason codes. @@ -71,6 +39,7 @@ int ERR_load_RAND_strings(void); # define RAND_R_FUNC_NOT_IMPLEMENTED 101 # define RAND_R_FWRITE_ERROR 123 # define RAND_R_GENERATE_ERROR 112 +# define RAND_R_INSUFFICIENT_DRBG_STRENGTH 139 # define RAND_R_INTERNAL_ERROR 113 # define RAND_R_IN_ERROR_STATE 114 # define RAND_R_NOT_A_REGULAR_FILE 122 @@ -88,6 +57,11 @@ int ERR_load_RAND_strings(void); # define RAND_R_SELFTEST_FAILURE 119 # define RAND_R_TOO_LITTLE_NONCE_REQUESTED 135 # define RAND_R_TOO_MUCH_NONCE_REQUESTED 136 +# define RAND_R_UNABLE_TO_CREATE_DRBG 143 +# define RAND_R_UNABLE_TO_FETCH_DRBG 144 +# define RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER 141 +# define RAND_R_UNABLE_TO_GET_PARENT_STRENGTH 138 +# define RAND_R_UNABLE_TO_LOCK_PARENT 140 # define RAND_R_UNSUPPORTED_DRBG_FLAGS 132 # define RAND_R_UNSUPPORTED_DRBG_TYPE 120 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/rc2.h b/deps/openssl/android/x86/usr/local/include/openssl/rc2.h index 585f9e4c..ff633fd8 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/rc2.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/rc2.h @@ -1,51 +1,68 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC2_H -# define HEADER_RC2_H +#ifndef OPENSSL_RC2_H +# define OPENSSL_RC2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC2_H +# endif # include # ifndef OPENSSL_NO_RC2 -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif +# define RC2_BLOCK 8 +# define RC2_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int RC2_INT; -# define RC2_ENCRYPT 1 -# define RC2_DECRYPT 0 - -# define RC2_BLOCK 8 -# define RC2_KEY_LENGTH 16 +# define RC2_ENCRYPT 1 +# define RC2_DECRYPT 0 typedef struct rc2_key_st { RC2_INT data[64]; } RC2_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void RC2_set_key(RC2_KEY *key, int len, + const unsigned char *data, int bits); +OSSL_DEPRECATEDIN_3_0 void RC2_ecb_encrypt(const unsigned char *in, + unsigned char *out, RC2_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_encrypt(unsigned long *data, RC2_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC2_decrypt(unsigned long *data, RC2_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC2_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *ks, unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *schedule, + unsigned char *ivec, + int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *schedule, + unsigned char *ivec, + int *num); +# endif -void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); -void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC2_KEY *key, int enc); -void RC2_encrypt(unsigned long *data, RC2_KEY *key); -void RC2_decrypt(unsigned long *data, RC2_KEY *key); -void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - RC2_KEY *ks, unsigned char *iv, int enc); -void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num, int enc); -void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/rc4.h b/deps/openssl/android/x86/usr/local/include/openssl/rc4.h index 86803b37..600b2885 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/rc4.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/rc4.h @@ -1,36 +1,47 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC4_H -# define HEADER_RC4_H +#ifndef OPENSSL_RC4_H +# define OPENSSL_RC4_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC4_H +# endif # include # ifndef OPENSSL_NO_RC4 -# include -#ifdef __cplusplus +# include +# ifdef __cplusplus extern "C" { -#endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef struct rc4_key_st { RC4_INT x, y; RC4_INT data[256]; } RC4_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *RC4_options(void); +OSSL_DEPRECATEDIN_3_0 void RC4_set_key(RC4_KEY *key, int len, + const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void RC4(RC4_KEY *key, size_t len, + const unsigned char *indata, + unsigned char *outdata); +# endif -const char *RC4_options(void); -void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, - unsigned char *outdata); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/rc5.h b/deps/openssl/android/x86/usr/local/include/openssl/rc5.h index 793f88e4..de833523 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/rc5.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/rc5.h @@ -1,63 +1,79 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC5_H -# define HEADER_RC5_H +#ifndef OPENSSL_RC5_H +# define OPENSSL_RC5_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC5_H +# endif # include # ifndef OPENSSL_NO_RC5 -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif -# define RC5_ENCRYPT 1 -# define RC5_DECRYPT 0 +# define RC5_32_BLOCK 8 +# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ -# define RC5_32_INT unsigned int +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define RC5_ENCRYPT 1 +# define RC5_DECRYPT 0 -# define RC5_32_BLOCK 8 -# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ +# define RC5_32_INT unsigned int /* * This are the only values supported. Tweak the code if you want more The * most supported modes will be RC5-32/12/16 RC5-32/16/8 */ -# define RC5_8_ROUNDS 8 -# define RC5_12_ROUNDS 12 -# define RC5_16_ROUNDS 16 +# define RC5_8_ROUNDS 8 +# define RC5_12_ROUNDS 12 +# define RC5_16_ROUNDS 16 typedef struct rc5_key_st { /* Number of rounds */ int rounds; RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)]; } RC5_32_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RC5_32_set_key(RC5_32_KEY *key, int len, + const unsigned char *data, + int rounds); +OSSL_DEPRECATEDIN_3_0 void RC5_32_ecb_encrypt(const unsigned char *in, + unsigned char *out, + RC5_32_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC5_32_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *ks, unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *schedule, + unsigned char *ivec, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *schedule, + unsigned char *ivec, int *num); +# endif -void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, - int rounds); -void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC5_32_KEY *key, int enc); -void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *ks, unsigned char *iv, - int enc); -void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ripemd.h b/deps/openssl/android/x86/usr/local/include/openssl/ripemd.h index c42026aa..900ee317 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ripemd.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ripemd.h @@ -1,29 +1,38 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RIPEMD_H -# define HEADER_RIPEMD_H +#ifndef OPENSSL_RIPEMD_H +# define OPENSSL_RIPEMD_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RIPEMD_H +# endif # include -#ifndef OPENSSL_NO_RMD160 -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_RMD160 +# include +# include + +# define RIPEMD160_DIGEST_LENGTH 20 + +# ifdef __cplusplus extern "C" { -# endif +# endif +# if !defined(OPENSSL_NO_DEPRECATED_3_0) -# define RIPEMD160_LONG unsigned int +# define RIPEMD160_LONG unsigned int -# define RIPEMD160_CBLOCK 64 -# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) -# define RIPEMD160_DIGEST_LENGTH 20 +# define RIPEMD160_CBLOCK 64 +# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) typedef struct RIPEMD160state_st { RIPEMD160_LONG A, B, C, D, E; @@ -31,17 +40,20 @@ typedef struct RIPEMD160state_st { RIPEMD160_LONG data[RIPEMD160_LBLOCK]; unsigned int num; } RIPEMD160_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Init(RIPEMD160_CTX *c); +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *RIPEMD160(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void RIPEMD160_Transform(RIPEMD160_CTX *c, + const unsigned char *b); +# endif -int RIPEMD160_Init(RIPEMD160_CTX *c); -int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); -int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); -unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); -void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); - -# ifdef __cplusplus +# ifdef __cplusplus } +# endif # endif -# endif - - #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/rsa.h b/deps/openssl/android/x86/usr/local/include/openssl/rsa.h index 5e76365c..d0c95992 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/rsa.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/rsa.h @@ -1,70 +1,78 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RSA_H -# define HEADER_RSA_H +#ifndef OPENSSL_RSA_H +# define OPENSSL_RSA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RSA_H +# endif # include -# ifndef OPENSSL_NO_RSA # include # include # include -# include -# if OPENSSL_API_COMPAT < 0x10100000L +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif # include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + # ifdef __cplusplus extern "C" { # endif -/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ - # ifndef OPENSSL_RSA_MAX_MODULUS_BITS # define OPENSSL_RSA_MAX_MODULUS_BITS 16384 # endif -# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024 - -# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS -# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 -# endif -# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS - -/* exponent limit enforced for "large" modulus only */ -# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 -# endif - # define RSA_3 0x3L # define RSA_F4 0x10001L +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ + +# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 2048 + +# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS +# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 +# endif + +/* exponent limit enforced for "large" modulus only */ +# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS +# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 +# endif /* based on RFC 8017 appendix A.1.2 */ -# define RSA_ASN1_VERSION_DEFAULT 0 -# define RSA_ASN1_VERSION_MULTI 1 +# define RSA_ASN1_VERSION_DEFAULT 0 +# define RSA_ASN1_VERSION_MULTI 1 -# define RSA_DEFAULT_PRIME_NUM 2 +# define RSA_DEFAULT_PRIME_NUM 2 -# define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private - * match */ - -# define RSA_FLAG_CACHE_PUBLIC 0x0002 -# define RSA_FLAG_CACHE_PRIVATE 0x0004 -# define RSA_FLAG_BLINDING 0x0008 -# define RSA_FLAG_THREAD_SAFE 0x0010 +# define RSA_METHOD_FLAG_NO_CHECK 0x0001 +# define RSA_FLAG_CACHE_PUBLIC 0x0002 +# define RSA_FLAG_CACHE_PRIVATE 0x0004 +# define RSA_FLAG_BLINDING 0x0008 +# define RSA_FLAG_THREAD_SAFE 0x0010 /* * This flag means the private key operations will be handled by rsa_mod_exp * and that they do not depend on the private key components being present: * for example a key stored in external hardware. Without this flag * bn_mod_exp gets called when private key components are absent. */ -# define RSA_FLAG_EXT_PKEY 0x0020 +# define RSA_FLAG_EXT_PKEY 0x0020 /* * new with 0.9.6j and 0.9.7b; the built-in @@ -72,14 +80,14 @@ extern "C" { * default (ignoring RSA_FLAG_BLINDING), * but other engines might not need it */ -# define RSA_FLAG_NO_BLINDING 0x0080 -# if OPENSSL_API_COMPAT < 0x10100000L +# define RSA_FLAG_NO_BLINDING 0x0080 +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /* * Does nothing. Previously this switched off constant time behaviour. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define RSA_FLAG_NO_CONSTTIME 0x0000 # endif -# if OPENSSL_API_COMPAT < 0x00908000L /* deprecated name for the flag*/ /* * new with 0.9.7h; the built-in RSA @@ -89,79 +97,78 @@ extern "C" { * faster variable sliding window method to * be used for all exponents. */ +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 # define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME # endif -# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_RSA_PADDING, pad, NULL) +/*- + * New with 3.0: use part of the flags to denote exact type of RSA key, + * some of which are limited to specific signature and encryption schemes. + * These different types share the same RSA structure, but indicate the + * use of certain fields in that structure. + * Currently known are: + * RSA - this is the "normal" unlimited RSA structure (typenum 0) + * RSASSA-PSS - indicates that the PSS parameters are used. + * RSAES-OAEP - no specific field used for the moment, but OAEP padding + * is expected. (currently unused) + * + * 4 bits allow for 16 types + */ +# define RSA_FLAG_TYPE_MASK 0xF000 +# define RSA_FLAG_TYPE_RSA 0x0000 +# define RSA_FLAG_TYPE_RSASSAPSS 0x1000 +# define RSA_FLAG_TYPE_RSAESOAEP 0x2000 -# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) +int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad_mode); +int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad_mode); + +int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int saltlen); +int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *saltlen); + +int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int bits); +int EVP_PKEY_CTX_set1_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); +int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes); +int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *ctx, int saltlen); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); +# endif -# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) /* Salt length matches digest */ # define RSA_PSS_SALTLEN_DIGEST -1 /* Verify only: auto detect salt length */ # define RSA_PSS_SALTLEN_AUTO -2 /* Set salt length to maximum possible */ # define RSA_PSS_SALTLEN_MAX -3 +/* Auto-detect on verify, set salt length to min(maximum possible, digest + * length) on sign */ +# define RSA_PSS_SALTLEN_AUTO_DIGEST_MAX -4 /* Old compatible max salt length for sign only */ # define RSA_PSS_SALTLEN_MAX_SIGN -2 -# define EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) +int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); +int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_get_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, char *name, + size_t namelen); +int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md_name(EVP_PKEY_CTX *ctx, + const char *mdname); -# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, plen) +int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_pss_keygen_md_name(EVP_PKEY_CTX *ctx, + const char *mdname, + const char *mdprops); -# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) - -# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) - -# define EVP_PKEY_CTX_set_rsa_keygen_primes(ctx, primes) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES, primes, NULL) - -# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)(l)) - -# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)(l)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, \ - EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_MD, \ - 0, (void *)(md)) +int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); +int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_get_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, char *name, + size_t namelen); +int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, void *label, int llen); +int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) @@ -182,104 +189,135 @@ extern "C" { # define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) -# define RSA_PKCS1_PADDING 1 -# define RSA_SSLV23_PADDING 2 -# define RSA_NO_PADDING 3 -# define RSA_PKCS1_OAEP_PADDING 4 -# define RSA_X931_PADDING 5 -/* EVP_PKEY_ only */ -# define RSA_PKCS1_PSS_PADDING 6 +# define RSA_PKCS1_PADDING 1 +# define RSA_NO_PADDING 3 +# define RSA_PKCS1_OAEP_PADDING 4 +# define RSA_X931_PADDING 5 -# define RSA_PKCS1_PADDING_SIZE 11 +/* EVP_PKEY_ only */ +# define RSA_PKCS1_PSS_PADDING 6 +# define RSA_PKCS1_WITH_TLS_PADDING 7 + +# define RSA_PKCS1_PADDING_SIZE 11 # define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) # define RSA_get_app_data(s) RSA_get_ex_data(s,0) -RSA *RSA_new(void); -RSA *RSA_new_method(ENGINE *engine); -int RSA_bits(const RSA *rsa); -int RSA_size(const RSA *rsa); -int RSA_security_bits(const RSA *rsa); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *RSA_new(void); +OSSL_DEPRECATEDIN_3_0 RSA *RSA_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 int RSA_bits(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_size(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_security_bits(const RSA *rsa); -int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); -int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); -int RSA_set0_crt_params(RSA *r,BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); -int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], - BIGNUM *coeffs[], int pnum); -void RSA_get0_key(const RSA *r, - const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); -void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); -int RSA_get_multi_prime_extra_count(const RSA *r); -int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]); -void RSA_get0_crt_params(const RSA *r, - const BIGNUM **dmp1, const BIGNUM **dmq1, - const BIGNUM **iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_crt_params(RSA *r, + BIGNUM *dmp1, BIGNUM *dmq1, + BIGNUM *iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_multi_prime_params(RSA *r, + BIGNUM *primes[], + BIGNUM *exps[], + BIGNUM *coeffs[], + int pnum); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_key(const RSA *r, + const BIGNUM **n, const BIGNUM **e, + const BIGNUM **d); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_factors(const RSA *r, + const BIGNUM **p, const BIGNUM **q); +OSSL_DEPRECATEDIN_3_0 int RSA_get_multi_prime_extra_count(const RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_get0_multi_prime_factors(const RSA *r, + const BIGNUM *primes[]); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_crt_params(const RSA *r, + const BIGNUM **dmp1, + const BIGNUM **dmq1, + const BIGNUM **iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], const BIGNUM *coeffs[]); -const BIGNUM *RSA_get0_n(const RSA *d); -const BIGNUM *RSA_get0_e(const RSA *d); -const BIGNUM *RSA_get0_d(const RSA *d); -const BIGNUM *RSA_get0_p(const RSA *d); -const BIGNUM *RSA_get0_q(const RSA *d); -const BIGNUM *RSA_get0_dmp1(const RSA *r); -const BIGNUM *RSA_get0_dmq1(const RSA *r); -const BIGNUM *RSA_get0_iqmp(const RSA *r); -const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); -void RSA_clear_flags(RSA *r, int flags); -int RSA_test_flags(const RSA *r, int flags); -void RSA_set_flags(RSA *r, int flags); -int RSA_get_version(RSA *r); -ENGINE *RSA_get0_engine(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_n(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_e(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_d(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_p(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_q(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmp1(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmq1(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_iqmp(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); +OSSL_DEPRECATEDIN_3_0 void RSA_clear_flags(RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 int RSA_test_flags(const RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 void RSA_set_flags(RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 int RSA_get_version(RSA *r); +OSSL_DEPRECATEDIN_3_0 ENGINE *RSA_get0_engine(const RSA *r); +# endif /* !OPENSSL_NO_DEPRECATED_3_0 */ + +# define EVP_RSA_gen(bits) \ + EVP_PKEY_Q_keygen(NULL, NULL, "RSA", (size_t)(0 + (bits))) /* Deprecated version */ -DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void - (*callback) (int, int, void *), - void *cb_arg)) +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 RSA *RSA_generate_key(int bits, unsigned long e, void + (*callback) (int, int, void *), + void *cb_arg); +# endif /* New version */ -int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, + BN_GENCB *cb); /* Multi-prime version */ -int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, - BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_generate_multi_prime_key(RSA *rsa, int bits, + int primes, BIGNUM *e, + BN_GENCB *cb); -int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, - BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2, - const BIGNUM *Xp, const BIGNUM *Xq1, const BIGNUM *Xq2, - const BIGNUM *Xq, const BIGNUM *e, BN_GENCB *cb); -int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, - BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, + BIGNUM *q1, BIGNUM *q2, + const BIGNUM *Xp1, const BIGNUM *Xp2, + const BIGNUM *Xp, const BIGNUM *Xq1, + const BIGNUM *Xq2, const BIGNUM *Xq, + const BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_X931_generate_key_ex(RSA *rsa, int bits, + const BIGNUM *e, + BN_GENCB *cb); -int RSA_check_key(const RSA *); -int RSA_check_key_ex(const RSA *, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_check_key(const RSA *); +OSSL_DEPRECATEDIN_3_0 int RSA_check_key_ex(const RSA *, BN_GENCB *cb); /* next 4 return -1 on error */ -int RSA_public_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_public_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -void RSA_free(RSA *r); +OSSL_DEPRECATEDIN_3_0 +int RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r); /* "up" the RSA object's reference count */ -int RSA_up_ref(RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_up_ref(RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_flags(const RSA *r); -int RSA_flags(const RSA *r); - -void RSA_set_default_method(const RSA_METHOD *meth); -const RSA_METHOD *RSA_get_default_method(void); -const RSA_METHOD *RSA_null_method(void); -const RSA_METHOD *RSA_get_method(const RSA *rsa); -int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void RSA_set_default_method(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_null_method(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_method(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); /* these are the actual RSA functions */ -const RSA_METHOD *RSA_PKCS1_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_PKCS1_OpenSSL(void); + +DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, + RSA, RSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, + RSA, RSAPrivateKey) +# endif /* !OPENSSL_NO_DEPRECATED_3_0 */ int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2); -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) - struct rsa_pss_params_st { X509_ALGOR *hashAlgorithm; X509_ALGOR *maskGenAlgorithm; @@ -290,6 +328,7 @@ struct rsa_pss_params_st { }; DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) +DECLARE_ASN1_DUP_FUNCTION(RSA_PSS_PARAMS) typedef struct rsa_oaep_params_st { X509_ALGOR *hashFunc; @@ -301,101 +340,119 @@ typedef struct rsa_oaep_params_st { DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) -# ifndef OPENSSL_NO_STDIO -int RSA_print_fp(FILE *fp, const RSA *r, int offset); -# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int RSA_print_fp(FILE *fp, const RSA *r, int offset); +# endif -int RSA_print(BIO *bp, const RSA *r, int offset); +OSSL_DEPRECATEDIN_3_0 int RSA_print(BIO *bp, const RSA *r, int offset); /* * The following 2 functions sign and verify a X509_SIG ASN1 object inside * PKCS#1 padded RSA encryption */ -int RSA_sign(int type, const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify(int type, const unsigned char *m, unsigned int m_length, - const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_sign(int type, const unsigned char *m, + unsigned int m_length, unsigned char *sigret, + unsigned int *siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_verify(int type, const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, RSA *rsa); /* * The following 2 function sign and verify a ASN1_OCTET_STRING object inside * PKCS#1 padded RSA encryption */ +OSSL_DEPRECATEDIN_3_0 int RSA_sign_ASN1_OCTET_STRING(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, - unsigned int m_length, unsigned char *sigbuf, - unsigned int siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int RSA_verify_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigbuf, unsigned int siglen, + RSA *rsa); -int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); -void RSA_blinding_off(RSA *rsa); -BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void RSA_blinding_off(RSA *rsa); +OSSL_DEPRECATEDIN_3_0 BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); -int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, - long seedlen, const EVP_MD *dgst); +OSSL_DEPRECATEDIN_3_0 int PKCS1_MGF1(unsigned char *mask, long len, + const unsigned char *seed, long seedlen, + const EVP_MD *dgst); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *f, int fl, const unsigned char *p, int pl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len, const unsigned char *p, int pl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, const unsigned char *from, int flen, const unsigned char *param, int plen, const EVP_MD *md, const EVP_MD *mgf1md); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, const unsigned char *from, int flen, - int num, const unsigned char *param, - int plen, const EVP_MD *md, - const EVP_MD *mgf1md); -int RSA_padding_add_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_none(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_X931(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_X931_hash_id(int nid); + int num, + const unsigned char *param, int plen, + const EVP_MD *md, const EVP_MD *mgf1md); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_none(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_none(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_X931_hash_id(int nid); +OSSL_DEPRECATEDIN_3_0 int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, const EVP_MD *Hash, const unsigned char *EM, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, const unsigned char *mHash, const EVP_MD *Hash, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, const EVP_MD *Hash, const EVP_MD *mgf1Hash, const unsigned char *EM, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, const unsigned char *mHash, const EVP_MD *Hash, const EVP_MD *mgf1Hash, int sLen); -#define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ +# define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) -int RSA_set_ex_data(RSA *r, int idx, void *arg); -void *RSA_get_ex_data(const RSA *r, int idx); +OSSL_DEPRECATEDIN_3_0 int RSA_set_ex_data(RSA *r, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *RSA_get_ex_data(const RSA *r, int idx); -RSA *RSAPublicKey_dup(RSA *rsa); -RSA *RSAPrivateKey_dup(RSA *rsa); +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPublicKey) +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPrivateKey) /* * If this flag is set the RSA method is FIPS compliant and can be used in @@ -404,7 +461,7 @@ RSA *RSAPrivateKey_dup(RSA *rsa); * result is compliant. */ -# define RSA_FLAG_FIPS_METHOD 0x0400 +# define RSA_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are @@ -412,58 +469,80 @@ RSA *RSAPrivateKey_dup(RSA *rsa); * usage is compliant. */ -# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 +# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 /* * Application has decided PRNG is good enough to generate a key: don't * check. */ -# define RSA_FLAG_CHECKED 0x0800 +# define RSA_FLAG_CHECKED 0x0800 -RSA_METHOD *RSA_meth_new(const char *name, int flags); -void RSA_meth_free(RSA_METHOD *meth); -RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); -const char *RSA_meth_get0_name(const RSA_METHOD *meth); -int RSA_meth_set1_name(RSA_METHOD *meth, const char *name); -int RSA_meth_get_flags(const RSA_METHOD *meth); -int RSA_meth_set_flags(RSA_METHOD *meth, int flags); -void *RSA_meth_get0_app_data(const RSA_METHOD *meth); -int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data); -int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void RSA_meth_free(RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const char *RSA_meth_get0_name(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set1_name(RSA_METHOD *meth, + const char *name); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_get_flags(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_flags(RSA_METHOD *meth, int flags); +OSSL_DEPRECATEDIN_3_0 void *RSA_meth_get0_app_data(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set0_app_data(RSA_METHOD *meth, + void *app_data); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_pub_enc(RSA_METHOD *rsa, int (*pub_enc) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_pub_dec(RSA_METHOD *rsa, int (*pub_dec) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_priv_enc(RSA_METHOD *rsa, int (*priv_enc) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_priv_dec(RSA_METHOD *rsa, int (*priv_dec) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) (BIGNUM *r0, + const BIGNUM *i, + RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_mod_exp(RSA_METHOD *rsa, int (*mod_exp) (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx)); -int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, @@ -471,43 +550,61 @@ int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)); +OSSL_DEPRECATEDIN_3_0 int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); +OSSL_DEPRECATEDIN_3_0 int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); -int (*RSA_meth_get_sign(const RSA_METHOD *meth)) - (int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_sign(const RSA_METHOD *meth)) (int type, + const unsigned char *m, + unsigned int m_length, + unsigned char *sigret, + unsigned int *siglen, + const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_sign(RSA_METHOD *rsa, int (*sign) (int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, const RSA *rsa)); -int (*RSA_meth_get_verify(const RSA_METHOD *meth)) - (int dtype, const unsigned char *m, - unsigned int m_length, const unsigned char *sigbuf, - unsigned int siglen, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_verify(const RSA_METHOD *meth)) (int dtype, + const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, + const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_verify(RSA_METHOD *rsa, int (*verify) (int dtype, const unsigned char *m, unsigned int m_length, const unsigned char *sigbuf, unsigned int siglen, const RSA *rsa)); -int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) (RSA *rsa, int bits, + BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_keygen(RSA_METHOD *rsa, int (*keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb)); -int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) (RSA *rsa, + int bits, + int primes, + BIGNUM *e, + BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, int (*keygen) (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb)); +#endif /* !OPENSSL_NO_DEPRECATED_3_0 */ -# ifdef __cplusplus +# ifdef __cplusplus } -# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/rsaerr.h b/deps/openssl/android/x86/usr/local/include/openssl/rsaerr.h index 59b15e13..c58463c7 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/rsaerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/rsaerr.h @@ -1,91 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RSAERR_H -# define HEADER_RSAERR_H +#ifndef OPENSSL_RSAERR_H +# define OPENSSL_RSAERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RSA_strings(void); -/* - * RSA function codes. - */ -# define RSA_F_CHECK_PADDING_MD 140 -# define RSA_F_ENCODE_PKCS1 146 -# define RSA_F_INT_RSA_VERIFY 145 -# define RSA_F_OLD_RSA_PRIV_DECODE 147 -# define RSA_F_PKEY_PSS_INIT 165 -# define RSA_F_PKEY_RSA_CTRL 143 -# define RSA_F_PKEY_RSA_CTRL_STR 144 -# define RSA_F_PKEY_RSA_SIGN 142 -# define RSA_F_PKEY_RSA_VERIFY 149 -# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 -# define RSA_F_RSA_ALGOR_TO_MD 156 -# define RSA_F_RSA_BUILTIN_KEYGEN 129 -# define RSA_F_RSA_CHECK_KEY 123 -# define RSA_F_RSA_CHECK_KEY_EX 160 -# define RSA_F_RSA_CMS_DECRYPT 159 -# define RSA_F_RSA_CMS_VERIFY 158 -# define RSA_F_RSA_ITEM_VERIFY 148 -# define RSA_F_RSA_METH_DUP 161 -# define RSA_F_RSA_METH_NEW 162 -# define RSA_F_RSA_METH_SET1_NAME 163 -# define RSA_F_RSA_MGF1_TO_MD 157 -# define RSA_F_RSA_MULTIP_INFO_NEW 166 -# define RSA_F_RSA_NEW_METHOD 106 -# define RSA_F_RSA_NULL 124 -# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 -# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 -# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 -# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 -# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 101 -# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 -# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 -# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 -# define RSA_F_RSA_PADDING_ADD_NONE 107 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 154 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 -# define RSA_F_RSA_PADDING_ADD_SSLV23 110 -# define RSA_F_RSA_PADDING_ADD_X931 127 -# define RSA_F_RSA_PADDING_CHECK_NONE 111 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 153 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 -# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 -# define RSA_F_RSA_PADDING_CHECK_X931 128 -# define RSA_F_RSA_PARAM_DECODE 164 -# define RSA_F_RSA_PRINT 115 -# define RSA_F_RSA_PRINT_FP 116 -# define RSA_F_RSA_PRIV_DECODE 150 -# define RSA_F_RSA_PRIV_ENCODE 138 -# define RSA_F_RSA_PSS_GET_PARAM 151 -# define RSA_F_RSA_PSS_TO_CTX 155 -# define RSA_F_RSA_PUB_DECODE 139 -# define RSA_F_RSA_SETUP_BLINDING 136 -# define RSA_F_RSA_SIGN 117 -# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 -# define RSA_F_RSA_VERIFY 119 -# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 -# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 126 -# define RSA_F_SETUP_TBUF 167 /* * RSA reason codes. @@ -114,24 +45,30 @@ int ERR_load_RSA_strings(void); # define RSA_R_INVALID_DIGEST 157 # define RSA_R_INVALID_DIGEST_LENGTH 143 # define RSA_R_INVALID_HEADER 137 +# define RSA_R_INVALID_KEYPAIR 171 +# define RSA_R_INVALID_KEY_LENGTH 173 # define RSA_R_INVALID_LABEL 160 +# define RSA_R_INVALID_LENGTH 181 # define RSA_R_INVALID_MESSAGE_LENGTH 131 # define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_MODULUS 174 # define RSA_R_INVALID_MULTI_PRIME_KEY 167 # define RSA_R_INVALID_OAEP_PARAMETERS 161 # define RSA_R_INVALID_PADDING 138 # define RSA_R_INVALID_PADDING_MODE 141 # define RSA_R_INVALID_PSS_PARAMETERS 149 # define RSA_R_INVALID_PSS_SALTLEN 146 +# define RSA_R_INVALID_REQUEST 175 # define RSA_R_INVALID_SALT_LENGTH 150 +# define RSA_R_INVALID_STRENGTH 176 # define RSA_R_INVALID_TRAILER 139 # define RSA_R_INVALID_X931_DIGEST 142 # define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 # define RSA_R_KEY_PRIME_NUM_INVALID 165 # define RSA_R_KEY_SIZE_TOO_SMALL 120 # define RSA_R_LAST_OCTET_INVALID 134 -# define RSA_R_MISSING_PRIVATE_KEY 179 # define RSA_R_MGF1_DIGEST_NOT_ALLOWED 152 +# define RSA_R_MISSING_PRIVATE_KEY 179 # define RSA_R_MODULUS_TOO_LARGE 105 # define RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R 168 # define RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D 169 @@ -143,10 +80,13 @@ int ERR_load_RSA_strings(void); # define RSA_R_OAEP_DECODING_ERROR 121 # define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 # define RSA_R_PADDING_CHECK_FAILED 114 +# define RSA_R_PAIRWISE_TEST_FAILURE 177 # define RSA_R_PKCS_DECODING_ERROR 159 # define RSA_R_PSS_SALTLEN_TOO_SMALL 164 +# define RSA_R_PUB_EXPONENT_OUT_OF_RANGE 178 # define RSA_R_P_NOT_PRIME 128 # define RSA_R_Q_NOT_PRIME 129 +# define RSA_R_RANDOMNESS_SOURCE_STRENGTH_INSUFFICIENT 180 # define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 # define RSA_R_SLEN_CHECK_FAILED 136 # define RSA_R_SLEN_RECOVERY_FAILED 135 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/safestack.h b/deps/openssl/android/x86/usr/local/include/openssl/safestack.h index 38b55789..0499700b 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/safestack.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/safestack.h @@ -1,14 +1,25 @@ /* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/safestack.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SAFESTACK_H -# define HEADER_SAFESTACK_H + + +#ifndef OPENSSL_SAFESTACK_H +# define OPENSSL_SAFESTACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SAFESTACK_H +# endif # include # include @@ -19,6 +30,37 @@ extern "C" { # define STACK_OF(type) struct stack_st_##type +/* Helper macro for internal use */ +# define SKM_DEFINE_STACK_OF_INTERNAL(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ + { \ + return (const OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ + { \ + return (OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ + { \ + return (OPENSSL_sk_compfunc)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ + { \ + return (OPENSSL_sk_copyfunc)cpy; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ + { \ + return (OPENSSL_sk_freefunc)fr; \ + } + # define SKM_DEFINE_STACK_OF(t1, t2, t3) \ STACK_OF(t1); \ typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ @@ -101,6 +143,10 @@ extern "C" { { \ return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ } \ + static ossl_unused ossl_inline int sk_##t1##_find_all(STACK_OF(t1) *sk, t2 *ptr, int *pnum) \ + { \ + return OPENSSL_sk_find_all((OPENSSL_STACK *)sk, (const void *)ptr, pnum); \ + } \ static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ { \ OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ @@ -126,11 +172,11 @@ extern "C" { return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ } -# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) # define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) # define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ SKM_DEFINE_STACK_OF(t1, const t2, t2) -# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) /*- * Strings are special: normally an lhash entry will point to a single @@ -156,50 +202,94 @@ typedef const char *OPENSSL_CSTRING; * chars. So, we have to implement STRING specially for STACK_OF. This is * dealt with in the autogenerated macros below. */ -DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char) -DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_STRING, char, char) +#define sk_OPENSSL_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_value(sk, idx) ((char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_STRING_sk_type(sk), (idx))) +#define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_STRING_compfunc_type(cmp))) +#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_STRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_STRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_STRING_sk_type(sk), (n)) +#define sk_OPENSSL_STRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_delete(sk, i) ((char *)OPENSSL_sk_delete(ossl_check_OPENSSL_STRING_sk_type(sk), (i))) +#define sk_OPENSSL_STRING_delete_ptr(sk, ptr) ((char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr))) +#define sk_OPENSSL_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_pop(sk) ((char *)OPENSSL_sk_pop(ossl_check_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_shift(sk) ((char *)OPENSSL_sk_shift(ossl_check_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_STRING_sk_type(sk),ossl_check_OPENSSL_STRING_freefunc_type(freefunc)) +#define sk_OPENSSL_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), (idx)) +#define sk_OPENSSL_STRING_set(sk, idx, ptr) ((char *)OPENSSL_sk_set(ossl_check_OPENSSL_STRING_sk_type(sk), (idx), ossl_check_OPENSSL_STRING_type(ptr))) +#define sk_OPENSSL_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), pnum) +#define sk_OPENSSL_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_dup(sk) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_STRING_freefunc_type(freefunc))) +#define sk_OPENSSL_STRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_CSTRING, const char, char) +#define sk_OPENSSL_CSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_value(sk, idx) ((const char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), (idx))) +#define sk_OPENSSL_CSTRING_new(cmp) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp))) +#define sk_OPENSSL_CSTRING_new_null() ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_CSTRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_CSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_CSTRING_sk_type(sk), (n)) +#define sk_OPENSSL_CSTRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_delete(sk, i) ((const char *)OPENSSL_sk_delete(ossl_check_OPENSSL_CSTRING_sk_type(sk), (i))) +#define sk_OPENSSL_CSTRING_delete_ptr(sk, ptr) ((const char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr))) +#define sk_OPENSSL_CSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_pop(sk) ((const char *)OPENSSL_sk_pop(ossl_check_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_shift(sk) ((const char *)OPENSSL_sk_shift(ossl_check_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_CSTRING_sk_type(sk),ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc)) +#define sk_OPENSSL_CSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), (idx)) +#define sk_OPENSSL_CSTRING_set(sk, idx, ptr) ((const char *)OPENSSL_sk_set(ossl_check_OPENSSL_CSTRING_sk_type(sk), (idx), ossl_check_OPENSSL_CSTRING_type(ptr))) +#define sk_OPENSSL_CSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), pnum) +#define sk_OPENSSL_CSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_dup(sk) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc))) +#define sk_OPENSSL_CSTRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_CSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_compfunc_type(cmp))) + +#if !defined(OPENSSL_NO_DEPRECATED_3_0) /* - * Similarly, we sometimes use a block of characters, NOT nul-terminated. + * This is not used by OpenSSL. A block of bytes, NOT nul-terminated. * These should also be distinguished from "normal" stacks. */ typedef void *OPENSSL_BLOCK; -DEFINE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_BLOCK, void, void) +#define sk_OPENSSL_BLOCK_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), (idx))) +#define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp))) +#define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_BLOCK_new_reserve(cmp, n) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp), (n))) +#define sk_OPENSSL_BLOCK_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_BLOCK_sk_type(sk), (n)) +#define sk_OPENSSL_BLOCK_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_OPENSSL_BLOCK_sk_type(sk), (i))) +#define sk_OPENSSL_BLOCK_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr))) +#define sk_OPENSSL_BLOCK_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_BLOCK_sk_type(sk),ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc)) +#define sk_OPENSSL_BLOCK_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), (idx)) +#define sk_OPENSSL_BLOCK_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_OPENSSL_BLOCK_sk_type(sk), (idx), ossl_check_OPENSSL_BLOCK_type(ptr))) +#define sk_OPENSSL_BLOCK_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), pnum) +#define sk_OPENSSL_BLOCK_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_dup(sk) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_copyfunc_type(copyfunc), ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc))) +#define sk_OPENSSL_BLOCK_set_cmp_func(sk, cmp) ((sk_OPENSSL_BLOCK_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_compfunc_type(cmp))) -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_sk_num -# pragma weak OPENSSL_sk_value -# pragma weak OPENSSL_sk_new -# pragma weak OPENSSL_sk_new_null -# pragma weak OPENSSL_sk_new_reserve -# pragma weak OPENSSL_sk_reserve -# pragma weak OPENSSL_sk_free -# pragma weak OPENSSL_sk_zero -# pragma weak OPENSSL_sk_delete -# pragma weak OPENSSL_sk_delete_ptr -# pragma weak OPENSSL_sk_push -# pragma weak OPENSSL_sk_unshift -# pragma weak OPENSSL_sk_pop -# pragma weak OPENSSL_sk_shift -# pragma weak OPENSSL_sk_pop_free -# pragma weak OPENSSL_sk_insert -# pragma weak OPENSSL_sk_set -# pragma weak OPENSSL_sk_find -# pragma weak OPENSSL_sk_find_ex -# pragma weak OPENSSL_sk_sort -# pragma weak OPENSSL_sk_is_sorted -# pragma weak OPENSSL_sk_dup -# pragma weak OPENSSL_sk_deep_copy -# pragma weak OPENSSL_sk_set_cmp_func -# endif /* __SUNPRO_C */ +#endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/safestack.h.in b/deps/openssl/android/x86/usr/local/include/openssl/safestack.h.in new file mode 100644 index 00000000..6b366079 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/safestack.h.in @@ -0,0 +1,227 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_string_macros + generate_stack_const_string_macros + generate_stack_block_macros); +-} + +#ifndef OPENSSL_SAFESTACK_H +# define OPENSSL_SAFESTACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SAFESTACK_H +# endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define STACK_OF(type) struct stack_st_##type + +/* Helper macro for internal use */ +# define SKM_DEFINE_STACK_OF_INTERNAL(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ + { \ + return (const OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ + { \ + return (OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ + { \ + return (OPENSSL_sk_compfunc)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ + { \ + return (OPENSSL_sk_copyfunc)cpy; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ + { \ + return (OPENSSL_sk_freefunc)fr; \ + } + +# define SKM_DEFINE_STACK_OF(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ + { \ + return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_reserve(sk_##t1##_compfunc compare, int n) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \ + { \ + return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_free((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ + { \ + return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \ + (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ + { \ + OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ + { \ + return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find_all(STACK_OF(t1) *sk, t2 *ptr, int *pnum) \ + { \ + return OPENSSL_sk_find_all((OPENSSL_STACK *)sk, (const void *)ptr, pnum); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) * sk_##t1##_dup(const STACK_OF(t1) *sk) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \ + sk_##t1##_copyfunc copyfunc, \ + sk_##t1##_freefunc freefunc) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, \ + (OPENSSL_sk_copyfunc)copyfunc, \ + (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \ + { \ + return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ + } + +# define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) +# define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ + SKM_DEFINE_STACK_OF(t1, const t2, t2) + +/*- + * Strings are special: normally an lhash entry will point to a single + * (somewhat) mutable object. In the case of strings: + * + * a) Instead of a single char, there is an array of chars, NUL-terminated. + * b) The string may have be immutable. + * + * So, they need their own declarations. Especially important for + * type-checking tools, such as Deputy. + * + * In practice, however, it appears to be hard to have a const + * string. For now, I'm settling for dealing with the fact it is a + * string at all. + */ +typedef char *OPENSSL_STRING; +typedef const char *OPENSSL_CSTRING; + +/*- + * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but + * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned + * above, instead of a single char each entry is a NUL-terminated array of + * chars. So, we have to implement STRING specially for STACK_OF. This is + * dealt with in the autogenerated macros below. + */ +{- + generate_stack_string_macros() + .generate_stack_const_string_macros(); +-} + +#if !defined(OPENSSL_NO_DEPRECATED_3_0) +/* + * This is not used by OpenSSL. A block of bytes, NOT nul-terminated. + * These should also be distinguished from "normal" stacks. + */ +typedef void *OPENSSL_BLOCK; +{- + generate_stack_block_macros(); +-} +#endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/seed.h b/deps/openssl/android/x86/usr/local/include/openssl/seed.h index de10b085..edb218ae 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/seed.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/seed.h @@ -1,7 +1,7 @@ /* - * Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -32,65 +32,82 @@ * SUCH DAMAGE. */ -#ifndef HEADER_SEED_H -# define HEADER_SEED_H +#ifndef OPENSSL_SEED_H +# define OPENSSL_SEED_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SEED_H +# endif # include # ifndef OPENSSL_NO_SEED -# include -# include +# include +# include +# include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif - -/* look whether we need 'long' to get 32 bits */ -# ifdef AES_LONG -# ifndef SEED_LONG -# define SEED_LONG 1 # endif -# endif -# include +# define SEED_BLOCK_SIZE 16 +# define SEED_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* look whether we need 'long' to get 32 bits */ +# ifdef AES_LONG +# ifndef SEED_LONG +# define SEED_LONG 1 +# endif +# endif -# define SEED_BLOCK_SIZE 16 -# define SEED_KEY_LENGTH 16 typedef struct seed_key_st { -# ifdef SEED_LONG +# ifdef SEED_LONG unsigned long data[32]; -# else +# else unsigned int data[32]; -# endif +# endif } SEED_KEY_SCHEDULE; - +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], SEED_KEY_SCHEDULE *ks); - +OSSL_DEPRECATEDIN_3_0 void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks); - -void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, +OSSL_DEPRECATEDIN_3_0 +void SEED_ecb_encrypt(const unsigned char *in, + unsigned char *out, const SEED_KEY_SCHEDULE *ks, int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int enc); + unsigned char ivec[SEED_BLOCK_SIZE], + int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num, - int enc); + unsigned char ivec[SEED_BLOCK_SIZE], + int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num); + unsigned char ivec[SEED_BLOCK_SIZE], + int *num); +# endif -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/self_test.h b/deps/openssl/android/x86/usr/local/include/openssl/self_test.h new file mode 100644 index 00000000..337a3190 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/self_test.h @@ -0,0 +1,94 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_SELF_TEST_H +# define OPENSSL_SELF_TEST_H +# pragma once + +# include /* OSSL_CALLBACK */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* The test event phases */ +# define OSSL_SELF_TEST_PHASE_NONE "None" +# define OSSL_SELF_TEST_PHASE_START "Start" +# define OSSL_SELF_TEST_PHASE_CORRUPT "Corrupt" +# define OSSL_SELF_TEST_PHASE_PASS "Pass" +# define OSSL_SELF_TEST_PHASE_FAIL "Fail" + +/* Test event categories */ +# define OSSL_SELF_TEST_TYPE_NONE "None" +# define OSSL_SELF_TEST_TYPE_MODULE_INTEGRITY "Module_Integrity" +# define OSSL_SELF_TEST_TYPE_INSTALL_INTEGRITY "Install_Integrity" +# define OSSL_SELF_TEST_TYPE_CRNG "Continuous_RNG_Test" +# define OSSL_SELF_TEST_TYPE_PCT "Conditional_PCT" +# define OSSL_SELF_TEST_TYPE_PCT_KAT "Conditional_KAT" +# define OSSL_SELF_TEST_TYPE_KAT_INTEGRITY "KAT_Integrity" +# define OSSL_SELF_TEST_TYPE_KAT_CIPHER "KAT_Cipher" +# define OSSL_SELF_TEST_TYPE_KAT_ASYM_CIPHER "KAT_AsymmetricCipher" +# define OSSL_SELF_TEST_TYPE_KAT_DIGEST "KAT_Digest" +# define OSSL_SELF_TEST_TYPE_KAT_SIGNATURE "KAT_Signature" +# define OSSL_SELF_TEST_TYPE_PCT_SIGNATURE "PCT_Signature" +# define OSSL_SELF_TEST_TYPE_KAT_KDF "KAT_KDF" +# define OSSL_SELF_TEST_TYPE_KAT_KA "KAT_KA" +# define OSSL_SELF_TEST_TYPE_DRBG "DRBG" + +/* Test event sub categories */ +# define OSSL_SELF_TEST_DESC_NONE "None" +# define OSSL_SELF_TEST_DESC_INTEGRITY_HMAC "HMAC" +# define OSSL_SELF_TEST_DESC_PCT_RSA_PKCS1 "RSA" +# define OSSL_SELF_TEST_DESC_PCT_ECDSA "ECDSA" +# define OSSL_SELF_TEST_DESC_PCT_DSA "DSA" +# define OSSL_SELF_TEST_DESC_CIPHER_AES_GCM "AES_GCM" +# define OSSL_SELF_TEST_DESC_CIPHER_AES_ECB "AES_ECB_Decrypt" +# define OSSL_SELF_TEST_DESC_CIPHER_TDES "TDES" +# define OSSL_SELF_TEST_DESC_ASYM_RSA_ENC "RSA_Encrypt" +# define OSSL_SELF_TEST_DESC_ASYM_RSA_DEC "RSA_Decrypt" +# define OSSL_SELF_TEST_DESC_MD_SHA1 "SHA1" +# define OSSL_SELF_TEST_DESC_MD_SHA2 "SHA2" +# define OSSL_SELF_TEST_DESC_MD_SHA3 "SHA3" +# define OSSL_SELF_TEST_DESC_SIGN_DSA "DSA" +# define OSSL_SELF_TEST_DESC_SIGN_RSA "RSA" +# define OSSL_SELF_TEST_DESC_SIGN_ECDSA "ECDSA" +# define OSSL_SELF_TEST_DESC_DRBG_CTR "CTR" +# define OSSL_SELF_TEST_DESC_DRBG_HASH "HASH" +# define OSSL_SELF_TEST_DESC_DRBG_HMAC "HMAC" +# define OSSL_SELF_TEST_DESC_KA_DH "DH" +# define OSSL_SELF_TEST_DESC_KA_ECDH "ECDH" +# define OSSL_SELF_TEST_DESC_KDF_HKDF "HKDF" +# define OSSL_SELF_TEST_DESC_KDF_SSKDF "SSKDF" +# define OSSL_SELF_TEST_DESC_KDF_X963KDF "X963KDF" +# define OSSL_SELF_TEST_DESC_KDF_X942KDF "X942KDF" +# define OSSL_SELF_TEST_DESC_KDF_PBKDF2 "PBKDF2" +# define OSSL_SELF_TEST_DESC_KDF_SSHKDF "SSHKDF" +# define OSSL_SELF_TEST_DESC_KDF_TLS12_PRF "TLS12_PRF" +# define OSSL_SELF_TEST_DESC_KDF_KBKDF "KBKDF" +# define OSSL_SELF_TEST_DESC_KDF_TLS13_EXTRACT "TLS13_KDF_EXTRACT" +# define OSSL_SELF_TEST_DESC_KDF_TLS13_EXPAND "TLS13_KDF_EXPAND" +# define OSSL_SELF_TEST_DESC_RNG "RNG" + +void OSSL_SELF_TEST_set_callback(OSSL_LIB_CTX *libctx, OSSL_CALLBACK *cb, + void *cbarg); +void OSSL_SELF_TEST_get_callback(OSSL_LIB_CTX *libctx, OSSL_CALLBACK **cb, + void **cbarg); + +OSSL_SELF_TEST *OSSL_SELF_TEST_new(OSSL_CALLBACK *cb, void *cbarg); +void OSSL_SELF_TEST_free(OSSL_SELF_TEST *st); + +void OSSL_SELF_TEST_onbegin(OSSL_SELF_TEST *st, const char *type, + const char *desc); +int OSSL_SELF_TEST_oncorrupt_byte(OSSL_SELF_TEST *st, unsigned char *bytes); +void OSSL_SELF_TEST_onend(OSSL_SELF_TEST *st, int ret); + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_SELF_TEST_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/sha.h b/deps/openssl/android/x86/usr/local/include/openssl/sha.h index 6a1eb0de..6e65a040 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/sha.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/sha.h @@ -1,35 +1,43 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SHA_H -# define HEADER_SHA_H +#ifndef OPENSSL_SHA_H +# define OPENSSL_SHA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SHA_H +# endif # include # include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif +# define SHA_DIGEST_LENGTH 20 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! SHA_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define SHA_LONG unsigned int +# define SHA_LONG unsigned int -# define SHA_LBLOCK 16 -# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ -# define SHA_LAST_BLOCK (SHA_CBLOCK-8) -# define SHA_DIGEST_LENGTH 20 +# define SHA_LBLOCK 16 +# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA_LAST_BLOCK (SHA_CBLOCK-8) typedef struct SHAstate_st { SHA_LONG h0, h1, h2, h3, h4; @@ -38,13 +46,16 @@ typedef struct SHAstate_st { unsigned int num; } SHA_CTX; -int SHA1_Init(SHA_CTX *c); -int SHA1_Update(SHA_CTX *c, const void *data, size_t len); -int SHA1_Final(unsigned char *md, SHA_CTX *c); -unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); -void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 int SHA1_Init(SHA_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA1_Update(SHA_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA1_Final(unsigned char *md, SHA_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +# endif -# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a +unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a * contiguous array of 32 bit wide * big-endian values. */ @@ -55,21 +66,27 @@ typedef struct SHA256state_st { unsigned int num, md_len; } SHA256_CTX; -int SHA224_Init(SHA256_CTX *c); -int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA224_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA224_Init(SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA224_Update(SHA256_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA224_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA256_Init(SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA256_Update(SHA256_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA256_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA256_Transform(SHA256_CTX *c, + const unsigned char *data); +# endif + unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); -int SHA256_Init(SHA256_CTX *c); -int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA256_Final(unsigned char *md, SHA256_CTX *c); unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); -void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); # define SHA224_DIGEST_LENGTH 28 # define SHA256_DIGEST_LENGTH 32 # define SHA384_DIGEST_LENGTH 48 # define SHA512_DIGEST_LENGTH 64 +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 * being exactly 64-bit wide. See Implementation Notes in sha512.c @@ -80,17 +97,14 @@ void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); * contiguous array of 64 bit * wide big-endian values. */ -# define SHA512_CBLOCK (SHA_LBLOCK*8) -# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) -# define SHA_LONG64 unsigned __int64 -# define U64(C) C##UI64 -# elif defined(__arch64__) -# define SHA_LONG64 unsigned long -# define U64(C) C##UL -# else -# define SHA_LONG64 unsigned long long -# define U64(C) C##ULL -# endif +# define SHA512_CBLOCK (SHA_LBLOCK*8) +# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +# define SHA_LONG64 unsigned __int64 +# elif defined(__arch64__) +# define SHA_LONG64 unsigned long +# else +# define SHA_LONG64 unsigned long long +# endif typedef struct SHA512state_st { SHA_LONG64 h[8]; @@ -102,18 +116,23 @@ typedef struct SHA512state_st { unsigned int num, md_len; } SHA512_CTX; -int SHA384_Init(SHA512_CTX *c); -int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA384_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA384_Init(SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA384_Update(SHA512_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA384_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA512_Init(SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA512_Update(SHA512_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA512_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA512_Transform(SHA512_CTX *c, + const unsigned char *data); +# endif + unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); -int SHA512_Init(SHA512_CTX *c); -int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA512_Final(unsigned char *md, SHA512_CTX *c); unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); -void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/srp.h b/deps/openssl/android/x86/usr/local/include/openssl/srp.h index aaf13558..a48766c6 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/srp.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/srp.h @@ -1,8 +1,11 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/srp.h.in + * + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2004, EdelKey Project. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,8 +14,16 @@ * for the EdelKey project. */ -#ifndef HEADER_SRP_H -# define HEADER_SRP_H + + +#ifndef OPENSSL_SRP_H +# define OPENSSL_SRP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SRP_H +# endif #include @@ -27,13 +38,40 @@ extern "C" { # endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 + typedef struct SRP_gN_cache_st { char *b64_bn; BIGNUM *bn; } SRP_gN_cache; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN_cache, SRP_gN_cache, SRP_gN_cache) +#define sk_SRP_gN_cache_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_value(sk, idx) ((SRP_gN_cache *)OPENSSL_sk_value(ossl_check_const_SRP_gN_cache_sk_type(sk), (idx))) +#define sk_SRP_gN_cache_new(cmp) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new(ossl_check_SRP_gN_cache_compfunc_type(cmp))) +#define sk_SRP_gN_cache_new_null() ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_null()) +#define sk_SRP_gN_cache_new_reserve(cmp, n) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_cache_compfunc_type(cmp), (n))) +#define sk_SRP_gN_cache_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_cache_sk_type(sk), (n)) +#define sk_SRP_gN_cache_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_delete(sk, i) ((SRP_gN_cache *)OPENSSL_sk_delete(ossl_check_SRP_gN_cache_sk_type(sk), (i))) +#define sk_SRP_gN_cache_delete_ptr(sk, ptr) ((SRP_gN_cache *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr))) +#define sk_SRP_gN_cache_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_pop(sk) ((SRP_gN_cache *)OPENSSL_sk_pop(ossl_check_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_shift(sk) ((SRP_gN_cache *)OPENSSL_sk_shift(ossl_check_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_cache_sk_type(sk),ossl_check_SRP_gN_cache_freefunc_type(freefunc)) +#define sk_SRP_gN_cache_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), (idx)) +#define sk_SRP_gN_cache_set(sk, idx, ptr) ((SRP_gN_cache *)OPENSSL_sk_set(ossl_check_SRP_gN_cache_sk_type(sk), (idx), ossl_check_SRP_gN_cache_type(ptr))) +#define sk_SRP_gN_cache_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), pnum) +#define sk_SRP_gN_cache_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_dup(sk) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_copyfunc_type(copyfunc), ossl_check_SRP_gN_cache_freefunc_type(freefunc))) +#define sk_SRP_gN_cache_set_cmp_func(sk, cmp) ((sk_SRP_gN_cache_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_compfunc_type(cmp))) -DEFINE_STACK_OF(SRP_gN_cache) typedef struct SRP_user_pwd_st { /* Owned by us. */ @@ -46,10 +84,47 @@ typedef struct SRP_user_pwd_st { /* Owned by us. */ char *info; } SRP_user_pwd; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_user_pwd, SRP_user_pwd, SRP_user_pwd) +#define sk_SRP_user_pwd_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_value(sk, idx) ((SRP_user_pwd *)OPENSSL_sk_value(ossl_check_const_SRP_user_pwd_sk_type(sk), (idx))) +#define sk_SRP_user_pwd_new(cmp) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new(ossl_check_SRP_user_pwd_compfunc_type(cmp))) +#define sk_SRP_user_pwd_new_null() ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_null()) +#define sk_SRP_user_pwd_new_reserve(cmp, n) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_reserve(ossl_check_SRP_user_pwd_compfunc_type(cmp), (n))) +#define sk_SRP_user_pwd_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_user_pwd_sk_type(sk), (n)) +#define sk_SRP_user_pwd_free(sk) OPENSSL_sk_free(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_delete(sk, i) ((SRP_user_pwd *)OPENSSL_sk_delete(ossl_check_SRP_user_pwd_sk_type(sk), (i))) +#define sk_SRP_user_pwd_delete_ptr(sk, ptr) ((SRP_user_pwd *)OPENSSL_sk_delete_ptr(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr))) +#define sk_SRP_user_pwd_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_pop(sk) ((SRP_user_pwd *)OPENSSL_sk_pop(ossl_check_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_shift(sk) ((SRP_user_pwd *)OPENSSL_sk_shift(ossl_check_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_user_pwd_sk_type(sk),ossl_check_SRP_user_pwd_freefunc_type(freefunc)) +#define sk_SRP_user_pwd_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), (idx)) +#define sk_SRP_user_pwd_set(sk, idx, ptr) ((SRP_user_pwd *)OPENSSL_sk_set(ossl_check_SRP_user_pwd_sk_type(sk), (idx), ossl_check_SRP_user_pwd_type(ptr))) +#define sk_SRP_user_pwd_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), pnum) +#define sk_SRP_user_pwd_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_dup(sk) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_dup(ossl_check_const_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_copyfunc_type(copyfunc), ossl_check_SRP_user_pwd_freefunc_type(freefunc))) +#define sk_SRP_user_pwd_set_cmp_func(sk, cmp) ((sk_SRP_user_pwd_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_compfunc_type(cmp))) + +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_user_pwd_new(void); +OSSL_DEPRECATEDIN_3_0 void SRP_user_pwd_free(SRP_user_pwd *user_pwd); -DEFINE_STACK_OF(SRP_user_pwd) +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_set_gN(SRP_user_pwd *user_pwd, const BIGNUM *g, + const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set1_ids(SRP_user_pwd *user_pwd, const char *id, + const char *info); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set0_sv(SRP_user_pwd *user_pwd, BIGNUM *s, BIGNUM *v); typedef struct SRP_VBASE_st { STACK_OF(SRP_user_pwd) *users_pwd; @@ -68,64 +143,139 @@ typedef struct SRP_gN_st { const BIGNUM *g; const BIGNUM *N; } SRP_gN; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN, SRP_gN, SRP_gN) +#define sk_SRP_gN_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_value(sk, idx) ((SRP_gN *)OPENSSL_sk_value(ossl_check_const_SRP_gN_sk_type(sk), (idx))) +#define sk_SRP_gN_new(cmp) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new(ossl_check_SRP_gN_compfunc_type(cmp))) +#define sk_SRP_gN_new_null() ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_null()) +#define sk_SRP_gN_new_reserve(cmp, n) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_compfunc_type(cmp), (n))) +#define sk_SRP_gN_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_sk_type(sk), (n)) +#define sk_SRP_gN_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_delete(sk, i) ((SRP_gN *)OPENSSL_sk_delete(ossl_check_SRP_gN_sk_type(sk), (i))) +#define sk_SRP_gN_delete_ptr(sk, ptr) ((SRP_gN *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr))) +#define sk_SRP_gN_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_pop(sk) ((SRP_gN *)OPENSSL_sk_pop(ossl_check_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_shift(sk) ((SRP_gN *)OPENSSL_sk_shift(ossl_check_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_sk_type(sk),ossl_check_SRP_gN_freefunc_type(freefunc)) +#define sk_SRP_gN_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), (idx)) +#define sk_SRP_gN_set(sk, idx, ptr) ((SRP_gN *)OPENSSL_sk_set(ossl_check_SRP_gN_sk_type(sk), (idx), ossl_check_SRP_gN_type(ptr))) +#define sk_SRP_gN_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), pnum) +#define sk_SRP_gN_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_dup(sk) ((STACK_OF(SRP_gN) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_sk_type(sk), ossl_check_SRP_gN_copyfunc_type(copyfunc), ossl_check_SRP_gN_freefunc_type(freefunc))) +#define sk_SRP_gN_set_cmp_func(sk, cmp) ((sk_SRP_gN_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_compfunc_type(cmp))) -DEFINE_STACK_OF(SRP_gN) + +OSSL_DEPRECATEDIN_3_0 SRP_VBASE *SRP_VBASE_new(char *seed_key); +OSSL_DEPRECATEDIN_3_0 void SRP_VBASE_free(SRP_VBASE *vb); +OSSL_DEPRECATEDIN_3_0 int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); -/* This method ignores the configured seed and fails for an unknown user. */ -DEPRECATEDIN_1_1_0(SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)) +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_add0_user(SRP_VBASE *vb, SRP_user_pwd *user_pwd); + /* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +OSSL_DEPRECATEDIN_3_0 SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier_ex(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 char *SRP_create_verifier(const char *user, const char *pass, char **salt, char **verifier, const char *N, const char *g); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN_ex(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g, OSSL_LIB_CTX *libctx, + const char *propq); +OSSL_DEPRECATEDIN_3_0 int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, const BIGNUM *N, const BIGNUM *g); -# define SRP_NO_ERROR 0 -# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 -# define SRP_ERR_VBASE_BN_LIB 2 -# define SRP_ERR_OPEN_FILE 3 -# define SRP_ERR_MEMORY 4 +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 -# define DB_srptype 0 -# define DB_srpverifier 1 -# define DB_srpsalt 2 -# define DB_srpid 3 -# define DB_srpgN 4 -# define DB_srpinfo 5 -# undef DB_NUMBER -# define DB_NUMBER 6 +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 -# define DB_SRP_INDEX 'I' -# define DB_SRP_VALID 'V' -# define DB_SRP_REVOKED 'R' -# define DB_SRP_MODIF 'v' +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' /* see srp.c */ +OSSL_DEPRECATEDIN_3_0 char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 SRP_gN *SRP_get_default_gN(const char *id); /* server side .... */ +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, const BIGNUM *b, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B_ex(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v, OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, const BIGNUM *v); + +OSSL_DEPRECATEDIN_3_0 int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u_ex(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); /* client side .... */ + +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x_ex(const BIGNUM *s, const char *user, const char *pass, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key_ex(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +OSSL_DEPRECATEDIN_3_0 int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); -# define SRP_MINIMAL_N 1024 +# define SRP_MINIMAL_N 1024 + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/* This method ignores the configured seed and fails for an unknown user. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 +SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/srp.h.in b/deps/openssl/android/x86/usr/local/include/openssl/srp.h.in new file mode 100644 index 00000000..dfbe845b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/srp.h.in @@ -0,0 +1,214 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2004, EdelKey Project. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * Originally written by Christophe Renou and Peter Sylvester, + * for the EdelKey project. + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_SRP_H +# define OPENSSL_SRP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SRP_H +# endif + +#include + +#ifndef OPENSSL_NO_SRP +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +typedef struct SRP_gN_cache_st { + char *b64_bn; + BIGNUM *bn; +} SRP_gN_cache; +{- + generate_stack_macros("SRP_gN_cache"); +-} + + +typedef struct SRP_user_pwd_st { + /* Owned by us. */ + char *id; + BIGNUM *s; + BIGNUM *v; + /* Not owned by us. */ + const BIGNUM *g; + const BIGNUM *N; + /* Owned by us. */ + char *info; +} SRP_user_pwd; +{- + generate_stack_macros("SRP_user_pwd"); +-} + +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_user_pwd_new(void); +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_free(SRP_user_pwd *user_pwd); + +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_set_gN(SRP_user_pwd *user_pwd, const BIGNUM *g, + const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set1_ids(SRP_user_pwd *user_pwd, const char *id, + const char *info); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set0_sv(SRP_user_pwd *user_pwd, BIGNUM *s, BIGNUM *v); + +typedef struct SRP_VBASE_st { + STACK_OF(SRP_user_pwd) *users_pwd; + STACK_OF(SRP_gN_cache) *gN_cache; +/* to simulate a user */ + char *seed_key; + const BIGNUM *default_g; + const BIGNUM *default_N; +} SRP_VBASE; + +/* + * Internal structure storing N and g pair + */ +typedef struct SRP_gN_st { + char *id; + const BIGNUM *g; + const BIGNUM *N; +} SRP_gN; +{- + generate_stack_macros("SRP_gN"); +-} + + +OSSL_DEPRECATEDIN_3_0 +SRP_VBASE *SRP_VBASE_new(char *seed_key); +OSSL_DEPRECATEDIN_3_0 +void SRP_VBASE_free(SRP_VBASE *vb); +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); + +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_add0_user(SRP_VBASE *vb, SRP_user_pwd *user_pwd); + +/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); + +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier_ex(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN_ex(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g, OSSL_LIB_CTX *libctx, + const char *propq); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g); + +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 + +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 + +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' + +/* see srp.c */ +OSSL_DEPRECATEDIN_3_0 +char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +SRP_gN *SRP_get_default_gN(const char *id); + +/* server side .... */ +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, + const BIGNUM *b, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B_ex(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v, OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v); + +OSSL_DEPRECATEDIN_3_0 +int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u_ex(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); + +/* client side .... */ + +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x_ex(const BIGNUM *s, const char *user, const char *pass, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key_ex(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +OSSL_DEPRECATEDIN_3_0 +int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); + +# define SRP_MINIMAL_N 1024 + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/* This method ignores the configured seed and fails for an unknown user. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 +SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/srtp.h b/deps/openssl/android/x86/usr/local/include/openssl/srtp.h index 0b57c235..d64606e5 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/srtp.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/srtp.h @@ -1,7 +1,7 @@ /* * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -13,8 +13,14 @@ * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. */ -#ifndef HEADER_D1_SRTP_H -# define HEADER_D1_SRTP_H +#ifndef OPENSSL_SRTP_H +# define OPENSSL_SRTP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_D1_SRTP_H +# endif # include diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ssl.h b/deps/openssl/android/x86/usr/local/include/openssl/ssl.h index 9af0c899..942f20e6 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ssl.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ssl.h @@ -1,22 +1,33 @@ /* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ssl.h.in + * * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL_H -# define HEADER_SSL_H + + +#ifndef OPENSSL_SSL_H +# define OPENSSL_SSL_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL_H +# endif # include # include # include # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # include # include @@ -30,6 +41,10 @@ # include # include # include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -47,7 +62,7 @@ extern "C" { # define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) # define SSL_MAX_KEY_ARG_LENGTH 8 -# define SSL_MAX_MASTER_KEY_LENGTH 48 +/* SSL_MAX_MASTER_KEY_LENGTH is defined in prov_ssl.h */ /* The maximum number of encrypt/decrypt pipelines we can support */ # define SSL_MAX_PIPELINES 32 @@ -81,6 +96,7 @@ extern "C" { # define SSL_TXT_kECDHEPSK "kECDHEPSK" # define SSL_TXT_kDHEPSK "kDHEPSK" # define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kGOST18 "kGOST18" # define SSL_TXT_kSRP "kSRP" # define SSL_TXT_aRSA "aRSA" @@ -130,6 +146,8 @@ extern "C" { # define SSL_TXT_ARIA_GCM "ARIAGCM" # define SSL_TXT_ARIA128 "ARIA128" # define SSL_TXT_ARIA256 "ARIA256" +# define SSL_TXT_GOST2012_GOST8912_GOST8912 "GOST2012-GOST8912-GOST8912" +# define SSL_TXT_CBC "CBC" # define SSL_TXT_MD5 "MD5" # define SSL_TXT_SHA1 "SHA1" @@ -169,17 +187,20 @@ extern "C" { * The following cipher list is used by default. It also is substituted when * an application-defined cipher list string starts with 'DEFAULT'. * This applies to ciphersuites for TLSv1.2 and below. + * DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list() + * Update both macro and function simultaneously + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* + * This is the default set of TLSv1.3 ciphersuites + * DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites() + * Update both macro and function simultaneously */ -# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" -/* This is the default set of TLSv1.3 ciphersuites */ -# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) # define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ "TLS_CHACHA20_POLY1305_SHA256:" \ "TLS_AES_128_GCM_SHA256" -# else -# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ - "TLS_AES_128_GCM_SHA256" -#endif +# endif /* * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always * starts with a reasonable order, and all we have to do for DEFAULT is @@ -223,8 +244,34 @@ typedef struct srtp_protection_profile_st { const char *name; unsigned long id; } SRTP_PROTECTION_PROFILE; +SKM_DEFINE_STACK_OF_INTERNAL(SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE) +#define sk_SRTP_PROTECTION_PROFILE_num(sk) OPENSSL_sk_num(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_value(sk, idx) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_value(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx))) +#define sk_SRTP_PROTECTION_PROFILE_new(cmp) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp))) +#define sk_SRTP_PROTECTION_PROFILE_new_null() ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_null()) +#define sk_SRTP_PROTECTION_PROFILE_new_reserve(cmp, n) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_reserve(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp), (n))) +#define sk_SRTP_PROTECTION_PROFILE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (n)) +#define sk_SRTP_PROTECTION_PROFILE_free(sk) OPENSSL_sk_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_zero(sk) OPENSSL_sk_zero(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_delete(sk, i) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (i))) +#define sk_SRTP_PROTECTION_PROFILE_delete_ptr(sk, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete_ptr(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))) +#define sk_SRTP_PROTECTION_PROFILE_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_pop(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_pop(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_shift(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_shift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk),ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc)) +#define sk_SRTP_PROTECTION_PROFILE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), (idx)) +#define sk_SRTP_PROTECTION_PROFILE_set(sk, idx, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_set(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))) +#define sk_SRTP_PROTECTION_PROFILE_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), pnum) +#define sk_SRTP_PROTECTION_PROFILE_sort(sk) OPENSSL_sk_sort(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_dup(sk) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_dup(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_deep_copy(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_copyfunc_type(copyfunc), ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc))) +#define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(sk, cmp) ((sk_SRTP_PROTECTION_PROFILE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp))) + -DEFINE_STACK_OF(SRTP_PROTECTION_PROFILE) typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, int len, void *arg); @@ -293,161 +340,134 @@ typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, /* Typedef for verification callback */ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); -/* - * Some values are reserved until OpenSSL 1.2.0 because they were previously - * included in SSL_OP_ALL in a 1.1.x release. - * - * Reserved value (until OpenSSL 1.2.0) 0x00000001U - * Reserved value (until OpenSSL 1.2.0) 0x00000002U - */ -/* Allow initial connection to servers that don't support RI */ -# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U +/* Typedef for SSL async callback */ +typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); -/* Reserved value (until OpenSSL 1.2.0) 0x00000008U */ -# define SSL_OP_TLSEXT_PADDING 0x00000010U -/* Reserved value (until OpenSSL 1.2.0) 0x00000020U */ -# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U -/* - * Reserved value (until OpenSSL 1.2.0) 0x00000080U - * Reserved value (until OpenSSL 1.2.0) 0x00000100U - * Reserved value (until OpenSSL 1.2.0) 0x00000200U - */ - -/* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ -# define SSL_OP_ALLOW_NO_DHE_KEX 0x00000400U +#define SSL_OP_BIT(n) ((uint64_t)1 << (uint64_t)n) /* - * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in - * OpenSSL 0.9.6d. Usually (depending on the application protocol) the - * workaround is not needed. Unfortunately some broken SSL/TLS - * implementations cannot handle it at all, which is why we include it in - * SSL_OP_ALL. Added in 0.9.6e + * SSL/TLS connection options. */ -# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800U - -/* DTLS options */ -# define SSL_OP_NO_QUERY_MTU 0x00001000U -/* Turn on Cookie Exchange (on relevant for servers) */ -# define SSL_OP_COOKIE_EXCHANGE 0x00002000U -/* Don't use RFC4507 ticket extension */ -# define SSL_OP_NO_TICKET 0x00004000U + /* Disable Extended master secret */ +# define SSL_OP_NO_EXTENDED_MASTER_SECRET SSL_OP_BIT(0) + /* Cleanse plaintext copies of data delivered to the application */ +# define SSL_OP_CLEANSE_PLAINTEXT SSL_OP_BIT(1) + /* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT SSL_OP_BIT(2) + /* Enable support for Kernel TLS */ +# define SSL_OP_ENABLE_KTLS SSL_OP_BIT(3) +# define SSL_OP_TLSEXT_PADDING SSL_OP_BIT(4) +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG SSL_OP_BIT(6) +# define SSL_OP_IGNORE_UNEXPECTED_EOF SSL_OP_BIT(7) +# define SSL_OP_ALLOW_CLIENT_RENEGOTIATION SSL_OP_BIT(8) +# define SSL_OP_DISABLE_TLSEXT_CA_NAMES SSL_OP_BIT(9) + /* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX SSL_OP_BIT(10) + /* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added + * in OpenSSL 0.9.6d. Usually (depending on the application protocol) + * the workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it + * in SSL_OP_ALL. Added in 0.9.6e + */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS SSL_OP_BIT(11) + /* DTLS options */ +# define SSL_OP_NO_QUERY_MTU SSL_OP_BIT(12) + /* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE SSL_OP_BIT(13) + /* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET SSL_OP_BIT(14) # ifndef OPENSSL_NO_DTLS1_METHOD -/* Use Cisco's "speshul" version of DTLS_BAD_VER - * (only with deprecated DTLSv1_client_method()) */ -# define SSL_OP_CISCO_ANYCONNECT 0x00008000U + /* + * Use Cisco's version identifier of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) + */ +# define SSL_OP_CISCO_ANYCONNECT SSL_OP_BIT(15) # endif - -/* As server, disallow session resumption on renegotiation */ -# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000U -/* Don't use compression even if supported */ -# define SSL_OP_NO_COMPRESSION 0x00020000U -/* Permit unsafe legacy renegotiation */ -# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U -/* Disable encrypt-then-mac */ -# define SSL_OP_NO_ENCRYPT_THEN_MAC 0x00080000U + /* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_BIT(16) + /* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION SSL_OP_BIT(17) + /* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_BIT(18) + /* Disable encrypt-then-mac */ +# define SSL_OP_NO_ENCRYPT_THEN_MAC SSL_OP_BIT(19) + /* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future + * version of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT SSL_OP_BIT(20) + /* + * Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE + */ +# define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21) + /* + * Set on servers to choose the cipher according to server's preferences. + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_BIT(22) + /* + * If set, a server will allow a client to issue a SSLv3.0 version + * number as latest version supported in the premaster secret, even when + * TLSv1.0 (version 3.1) was announced in the client hello. Normally + * this is forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG SSL_OP_BIT(23) + /* + * Switches off automatic TLSv1.3 anti-replay protection for early data. + * This is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY SSL_OP_BIT(24) +# define SSL_OP_NO_SSLv3 SSL_OP_BIT(25) +# define SSL_OP_NO_TLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_TLSv1_2 SSL_OP_BIT(27) +# define SSL_OP_NO_TLSv1_1 SSL_OP_BIT(28) +# define SSL_OP_NO_TLSv1_3 SSL_OP_BIT(29) +# define SSL_OP_NO_DTLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_DTLSv1_2 SSL_OP_BIT(27) + /* Disallow all renegotiation */ +# define SSL_OP_NO_RENEGOTIATION SSL_OP_BIT(30) + /* + * Make server add server-hello extension from early version of + * cryptopro draft, when GOST ciphersuite is negotiated. Required for + * interoperability with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG SSL_OP_BIT(31) /* - * Enable TLSv1.3 Compatibility mode. This is on by default. A future version - * of OpenSSL may have this disabled by default. + * Option "collections." */ -# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT 0x00100000U +# define SSL_OP_NO_SSL_MASK \ + ( SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 \ + | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 ) +# define SSL_OP_NO_DTLS_MASK \ + ( SSL_OP_NO_DTLSv1 | SSL_OP_NO_DTLSv1_2 ) -/* Prioritize Chacha20Poly1305 when client does. - * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE */ -# define SSL_OP_PRIORITIZE_CHACHA 0x00200000U +/* Various bug workarounds that should be rather harmless. */ +# define SSL_OP_ALL \ + ( SSL_OP_CRYPTOPRO_TLSEXT_BUG | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS \ + | SSL_OP_TLSEXT_PADDING | SSL_OP_SAFARI_ECDHE_ECDSA_BUG ) /* - * Set on servers to choose the cipher according to the server's preferences + * OBSOLETE OPTIONS retained for compatibility */ -# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000U -/* - * If set, a server will allow a client to issue a SSLv3.0 version number as - * latest version supported in the premaster secret, even when TLSv1.0 - * (version 3.1) was announced in the client hello. Normally this is - * forbidden to prevent version rollback attacks. - */ -# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000U -/* - * Switches off automatic TLSv1.3 anti-replay protection for early data. This - * is a server-side option only (no effect on the client). - */ -# define SSL_OP_NO_ANTI_REPLAY 0x01000000U - -# define SSL_OP_NO_SSLv3 0x02000000U -# define SSL_OP_NO_TLSv1 0x04000000U -# define SSL_OP_NO_TLSv1_2 0x08000000U -# define SSL_OP_NO_TLSv1_1 0x10000000U -# define SSL_OP_NO_TLSv1_3 0x20000000U - -# define SSL_OP_NO_DTLSv1 0x04000000U -# define SSL_OP_NO_DTLSv1_2 0x08000000U - -# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\ - SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2|SSL_OP_NO_TLSv1_3) -# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2) - -/* Disallow all renegotiation */ -# define SSL_OP_NO_RENEGOTIATION 0x40000000U - -/* - * Make server add server-hello extension from early version of cryptopro - * draft, when GOST ciphersuite is negotiated. Required for interoperability - * with CryptoPro CSP 3.x - */ -# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000U - -/* - * SSL_OP_ALL: various bug workarounds that should be rather harmless. - * This used to be 0x000FFFFFL before 0.9.7. - * This used to be 0x80000BFFU before 1.1.1. - */ -# define SSL_OP_ALL (SSL_OP_CRYPTOPRO_TLSEXT_BUG|\ - SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS|\ - SSL_OP_LEGACY_SERVER_CONNECT|\ - SSL_OP_TLSEXT_PADDING|\ - SSL_OP_SAFARI_ECDHE_ECDSA_BUG) - -/* OBSOLETE OPTIONS: retained for compatibility */ - -/* Removed from OpenSSL 1.1.0. Was 0x00000001L */ -/* Related to removed SSLv2. */ # define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000002L */ -/* Related to removed SSLv2. */ # define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 -/* Removed from OpenSSL 0.9.8q and 1.0.0c. Was 0x00000008L */ -/* Dead forever, see CVE-2010-4180 */ # define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 -/* Removed from OpenSSL 1.0.1h and 1.0.2. Was 0x00000010L */ -/* Refers to ancient SSLREF and SSLv2. */ # define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000020 */ # define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 -/* Removed from OpenSSL 0.9.7h and 0.9.8b. Was 0x00000040L */ # define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000080 */ -/* Ancient SSLeay version. */ # define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000100L */ # define SSL_OP_TLS_D5_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000200L */ # define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00080000L */ # define SSL_OP_SINGLE_ECDH_USE 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00100000L */ # define SSL_OP_SINGLE_DH_USE 0x0 -/* Removed from OpenSSL 1.0.1k and 1.0.2. Was 0x00200000L */ # define SSL_OP_EPHEMERAL_RSA 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x01000000L */ # define SSL_OP_NO_SSLv2 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x08000000L */ # define SSL_OP_PKCS1_CHECK_1 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x10000000L */ # define SSL_OP_PKCS1_CHECK_2 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x20000000L */ # define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x40000000L */ # define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 /* @@ -571,6 +591,7 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); # define SSL_CONF_TYPE_FILE 0x2 # define SSL_CONF_TYPE_DIR 0x3 # define SSL_CONF_TYPE_NONE 0x4 +# define SSL_CONF_TYPE_STORE 0x5 /* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ # define SSL_COOKIE_LENGTH 4096 @@ -580,12 +601,12 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); * cannot be used to clear bits. */ -unsigned long SSL_CTX_get_options(const SSL_CTX *ctx); -unsigned long SSL_get_options(const SSL *s); -unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_clear_options(SSL *s, unsigned long op); -unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_set_options(SSL *s, unsigned long op); +uint64_t SSL_CTX_get_options(const SSL_CTX *ctx); +uint64_t SSL_get_options(const SSL *s); +uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_clear_options(SSL *s, uint64_t op); +uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_set_options(SSL *s, uint64_t op); # define SSL_CTX_set_mode(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) @@ -609,11 +630,6 @@ unsigned long SSL_set_options(SSL *s, unsigned long op); # define SSL_get_secure_renegotiation_support(ssl) \ SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_heartbeat(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT,0,NULL) -# endif - # define SSL_CTX_set_cert_flags(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) # define SSL_set_cert_flags(s,op) \ @@ -638,19 +654,20 @@ void SSL_set_msg_callback(SSL *ssl, SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) # ifndef OPENSSL_NO_SRP - /* see tls_srp.c */ -__owur int SSL_SRP_CTX_init(SSL *s); -__owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); -int SSL_SRP_CTX_free(SSL *ctx); -int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); -__owur int SSL_srp_server_param_with_username(SSL *s, int *ad); -__owur int SRP_Calc_A_param(SSL *s); - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_SRP_CTX_init(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_SRP_CTX_free(SSL *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_srp_server_param_with_username(SSL *s, + int *ad); +OSSL_DEPRECATEDIN_3_0 __owur int SRP_Calc_A_param(SSL *s); +# endif # endif /* 100k max cert list */ -# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 +# define SSL_MAX_CERT_LIST_DEFAULT (1024*100) # define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) @@ -679,6 +696,7 @@ typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, # define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 # define SSL_SESS_CACHE_NO_INTERNAL \ (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) +# define SSL_SESS_CACHE_UPDATE_TIME 0x0400 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); # define SSL_CTX_sess_number(ctx) \ @@ -818,8 +836,8 @@ void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, * the maximum length of the buffer given to callbacks containing the * resulting identity/psk */ -# define PSK_MAX_IDENTITY_LEN 128 -# define PSK_MAX_PSK_LEN 256 +# define PSK_MAX_IDENTITY_LEN 256 +# define PSK_MAX_PSK_LEN 512 typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, const char *hint, char *identity, @@ -896,18 +914,22 @@ __owur int SSL_extension_supported(unsigned int ext_type); # define SSL_ASYNC_PAUSED 5 # define SSL_ASYNC_NO_JOBS 6 # define SSL_CLIENT_HELLO_CB 7 +# define SSL_RETRY_VERIFY 8 /* These will only be used when doing non-blocking IO */ # define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) # define SSL_want_read(s) (SSL_want(s) == SSL_READING) # define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) # define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) +# define SSL_want_retry_verify(s) (SSL_want(s) == SSL_RETRY_VERIFY) # define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) # define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) # define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) # define SSL_MAC_FLAG_READ_MAC_STREAM 1 # define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 +# define SSL_MAC_FLAG_READ_MAC_TLSTREE 4 +# define SSL_MAC_FLAG_WRITE_MAC_TLSTREE 8 /* * A callback for logging out TLS key material. This callback should log out @@ -955,8 +977,59 @@ extern "C" { * These need to be after the above set of includes due to a compiler bug * in VisualStudio 2015 */ -DEFINE_STACK_OF_CONST(SSL_CIPHER) -DEFINE_STACK_OF(SSL_COMP) +SKM_DEFINE_STACK_OF_INTERNAL(SSL_CIPHER, const SSL_CIPHER, SSL_CIPHER) +#define sk_SSL_CIPHER_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_value(sk, idx) ((const SSL_CIPHER *)OPENSSL_sk_value(ossl_check_const_SSL_CIPHER_sk_type(sk), (idx))) +#define sk_SSL_CIPHER_new(cmp) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new(ossl_check_SSL_CIPHER_compfunc_type(cmp))) +#define sk_SSL_CIPHER_new_null() ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_null()) +#define sk_SSL_CIPHER_new_reserve(cmp, n) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_reserve(ossl_check_SSL_CIPHER_compfunc_type(cmp), (n))) +#define sk_SSL_CIPHER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_CIPHER_sk_type(sk), (n)) +#define sk_SSL_CIPHER_free(sk) OPENSSL_sk_free(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_delete(sk, i) ((const SSL_CIPHER *)OPENSSL_sk_delete(ossl_check_SSL_CIPHER_sk_type(sk), (i))) +#define sk_SSL_CIPHER_delete_ptr(sk, ptr) ((const SSL_CIPHER *)OPENSSL_sk_delete_ptr(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))) +#define sk_SSL_CIPHER_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_pop(sk) ((const SSL_CIPHER *)OPENSSL_sk_pop(ossl_check_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_shift(sk) ((const SSL_CIPHER *)OPENSSL_sk_shift(ossl_check_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_CIPHER_sk_type(sk),ossl_check_SSL_CIPHER_freefunc_type(freefunc)) +#define sk_SSL_CIPHER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), (idx)) +#define sk_SSL_CIPHER_set(sk, idx, ptr) ((const SSL_CIPHER *)OPENSSL_sk_set(ossl_check_SSL_CIPHER_sk_type(sk), (idx), ossl_check_SSL_CIPHER_type(ptr))) +#define sk_SSL_CIPHER_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), pnum) +#define sk_SSL_CIPHER_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_dup(sk) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_dup(ossl_check_const_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_copyfunc_type(copyfunc), ossl_check_SSL_CIPHER_freefunc_type(freefunc))) +#define sk_SSL_CIPHER_set_cmp_func(sk, cmp) ((sk_SSL_CIPHER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(SSL_COMP, SSL_COMP, SSL_COMP) +#define sk_SSL_COMP_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_value(sk, idx) ((SSL_COMP *)OPENSSL_sk_value(ossl_check_const_SSL_COMP_sk_type(sk), (idx))) +#define sk_SSL_COMP_new(cmp) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new(ossl_check_SSL_COMP_compfunc_type(cmp))) +#define sk_SSL_COMP_new_null() ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_null()) +#define sk_SSL_COMP_new_reserve(cmp, n) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_reserve(ossl_check_SSL_COMP_compfunc_type(cmp), (n))) +#define sk_SSL_COMP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_COMP_sk_type(sk), (n)) +#define sk_SSL_COMP_free(sk) OPENSSL_sk_free(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_delete(sk, i) ((SSL_COMP *)OPENSSL_sk_delete(ossl_check_SSL_COMP_sk_type(sk), (i))) +#define sk_SSL_COMP_delete_ptr(sk, ptr) ((SSL_COMP *)OPENSSL_sk_delete_ptr(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))) +#define sk_SSL_COMP_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_pop(sk) ((SSL_COMP *)OPENSSL_sk_pop(ossl_check_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_shift(sk) ((SSL_COMP *)OPENSSL_sk_shift(ossl_check_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_COMP_sk_type(sk),ossl_check_SSL_COMP_freefunc_type(freefunc)) +#define sk_SSL_COMP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), (idx)) +#define sk_SSL_COMP_set(sk, idx, ptr) ((SSL_COMP *)OPENSSL_sk_set(ossl_check_SSL_COMP_sk_type(sk), (idx), ossl_check_SSL_COMP_type(ptr))) +#define sk_SSL_COMP_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), pnum) +#define sk_SSL_COMP_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_dup(sk) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_dup(ossl_check_const_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_copyfunc_type(copyfunc), ossl_check_SSL_COMP_freefunc_type(freefunc))) +#define sk_SSL_COMP_set_cmp_func(sk, cmp) ((sk_SSL_COMP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_compfunc_type(cmp))) + /* compatibility */ # define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) @@ -967,7 +1040,9 @@ DEFINE_STACK_OF(SSL_COMP) # define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) # define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ (char *)(arg))) -DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void SSL_set_debug(SSL *s, int debug); +# endif /* TLSv1.3 KeyUpdate message types */ /* -1 used so that this is an invalid value for the on-the-wire protocol */ @@ -1102,7 +1177,7 @@ size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); # define SSL_VERIFY_CLIENT_ONCE 0x04 # define SSL_VERIFY_POST_HANDSHAKE 0x08 -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OpenSSL_add_ssl_algorithms() SSL_library_init() # define SSLeay_add_ssl_algorithms() SSL_library_init() # endif @@ -1190,9 +1265,14 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_ERROR_WANT_ASYNC 9 # define SSL_ERROR_WANT_ASYNC_JOB 10 # define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 -# define SSL_CTRL_SET_TMP_DH 3 -# define SSL_CTRL_SET_TMP_ECDH 4 -# define SSL_CTRL_SET_TMP_DH_CB 6 +# define SSL_ERROR_WANT_RETRY_VERIFY 12 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# endif + # define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 # define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 # define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 @@ -1246,7 +1326,9 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 # define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# endif # define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 # define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 # define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 @@ -1254,11 +1336,6 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 # define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 # define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT 85 -# define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING 86 -# define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS 87 -# endif # define DTLS_CTRL_GET_TIMEOUT 73 # define DTLS_CTRL_HANDLE_TIMEOUT 74 # define SSL_CTRL_GET_RI_SUPPORT 76 @@ -1305,6 +1382,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_GET_MAX_PROTO_VERSION 131 # define SSL_CTRL_GET_SIGNATURE_NID 132 # define SSL_CTRL_GET_TMP_KEY 133 +# define SSL_CTRL_GET_NEGOTIATED_GROUP 134 +# define SSL_CTRL_SET_RETRY_VERIFY 136 # define SSL_CTRL_GET_VERIFY_CERT_STORE 137 # define SSL_CTRL_GET_CHAIN_CERT_STORE 138 # define SSL_CERT_SET_FIRST 1 @@ -1320,18 +1399,24 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) # define SSL_total_renegotiations(ssl) \ SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) -# define SSL_CTX_set_tmp_dh(ctx,dh) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_dh(ctx,dh) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif # define SSL_CTX_set_dh_auto(ctx, onoff) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) # define SSL_set_dh_auto(s, onoff) \ SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) -# define SSL_set_tmp_dh(ssl,dh) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_set_tmp_dh(ssl,dh) \ SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_set_tmp_ecdh(ssl,ecdh) \ +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif # define SSL_CTX_add_extra_chain_cert(ctx,x509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) # define SSL_CTX_get_extra_chain_certs(ctx,px509) \ @@ -1400,6 +1485,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) #define SSL_get0_chain_cert_store(s,st) \ SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) + # define SSL_get1_groups(s, glist) \ SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) # define SSL_CTX_set1_groups(ctx, glist, glistlen) \ @@ -1412,6 +1498,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) # define SSL_get_shared_group(s, n) \ SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) +# define SSL_get_negotiated_group(s) \ + SSL_ctrl(s,SSL_CTRL_GET_NEGOTIATED_GROUP,0,NULL) # define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) # define SSL_CTX_set1_sigalgs_list(ctx, s) \ @@ -1464,12 +1552,17 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_group_to_name(SSL *s, int id); + /* Backwards compatibility, original 1.1.0 names */ # define SSL_CTRL_GET_SERVER_TMP_KEY \ SSL_CTRL_GET_PEER_TMP_KEY # define SSL_get_server_tmp_key(s, pk) \ SSL_get_peer_tmp_key(s, pk) +int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey); +int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey); + /* * The following symbol names are old and obsolete. They are kept * for compatibility reasons only and should not be used anymore. @@ -1487,7 +1580,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_shared_curve SSL_get_shared_group -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* Provide some compatibility macros for removed functionality. */ # define SSL_CTX_need_tmp_RSA(ctx) 0 # define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 @@ -1511,6 +1604,8 @@ void BIO_ssl_shutdown(BIO *ssl_bio); __owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); __owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +__owur SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq, + const SSL_METHOD *meth); int SSL_CTX_up_ref(SSL_CTX *ctx); void SSL_CTX_free(SSL_CTX *); __owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); @@ -1565,10 +1660,11 @@ __owur SSL_verify_cb SSL_get_verify_callback(const SSL *s); void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); void SSL_set_verify_depth(SSL *s, int depth); void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); -# ifndef OPENSSL_NO_RSA -__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); -__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, - long len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, + const unsigned char *d, long len); # endif __owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); __owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, @@ -1591,14 +1687,16 @@ __owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, size_t serverinfo_length); __owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); -#ifndef OPENSSL_NO_RSA +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); #endif __owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); __owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); -#ifndef OPENSSL_NO_RSA +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); #endif @@ -1610,12 +1708,17 @@ __owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, __owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); __owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); __owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur STACK_OF(X509_NAME) +*SSL_load_client_CA_file_ex(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); __owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *file); int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *dir); +int SSL_add_store_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *uri); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_load_error_strings() \ OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) @@ -1659,7 +1762,7 @@ __owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, __owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); __owur SSL_SESSION *SSL_SESSION_new(void); -__owur SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src); +__owur SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src); const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len); const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, @@ -1672,7 +1775,7 @@ int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); int SSL_SESSION_up_ref(SSL_SESSION *ses); void SSL_SESSION_free(SSL_SESSION *ses); -__owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); +__owur int i2d_SSL_SESSION(const SSL_SESSION *in, unsigned char **pp); __owur int SSL_set_session(SSL *to, SSL_SESSION *session); int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); @@ -1684,8 +1787,13 @@ __owur int SSL_has_matching_session_id(const SSL *s, SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length); -# ifdef HEADER_X509_H -__owur X509 *SSL_get_peer_certificate(const SSL *s); +# ifdef OPENSSL_X509_H +__owur X509 *SSL_get0_peer_certificate(const SSL *s); +__owur X509 *SSL_get1_peer_certificate(const SSL *s); +/* Deprecated in 3.0.0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_get_peer_certificate SSL_get1_peer_certificate +# endif # endif __owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); @@ -1700,8 +1808,10 @@ void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, void *arg); void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg); -# ifndef OPENSSL_NO_RSA +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len); # endif @@ -1751,10 +1861,10 @@ __owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, uint8_t mtype, uint8_t ord); __owur int SSL_dane_enable(SSL *s, const char *basedomain); __owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, - uint8_t mtype, unsigned const char *data, size_t dlen); + uint8_t mtype, const unsigned char *data, size_t dlen); __owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); __owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, - uint8_t *mtype, unsigned const char **data, + uint8_t *mtype, const unsigned char **data, size_t *dlen); /* * Bridge opacity barrier between libcrypt and libssl, also needed to support @@ -1776,27 +1886,34 @@ __owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); __owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); # ifndef OPENSSL_NO_SRP -int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); -int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); -int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, char *(*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, int (*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, int (*cb) (SSL *, int *, void *)); -int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); +OSSL_DEPRECATEDIN_3_0 int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, BIGNUM *sa, BIGNUM *v, char *info); +OSSL_DEPRECATEDIN_3_0 int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, const char *grp); -__owur BIGNUM *SSL_get_srp_g(SSL *s); -__owur BIGNUM *SSL_get_srp_N(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_g(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_N(SSL *s); -__owur char *SSL_get_srp_username(SSL *s); -__owur char *SSL_get_srp_userinfo(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_username(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_userinfo(SSL *s); +# endif # endif /* @@ -1832,6 +1949,12 @@ __owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); __owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds, OSSL_ASYNC_FD *delfd, size_t *numdelfds); +__owur int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback); +__owur int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg); +__owur int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback); +__owur int SSL_set_async_callback_arg(SSL *s, void *arg); +__owur int SSL_get_async_status(SSL *s, int *status); + # endif __owur int SSL_accept(SSL *ssl); __owur int SSL_stateless(SSL *s); @@ -1847,6 +1970,8 @@ __owur int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes); __owur int SSL_peek(SSL *ssl, void *buf, int num); __owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +__owur ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, + int flags); __owur int SSL_write(SSL *ssl, const void *buf, int num); __owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); __owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, @@ -1866,12 +1991,17 @@ __owur int SSL_get_error(const SSL *s, int ret_code); __owur const char *SSL_get_version(const SSL *s); /* This sets the 'default' SSL version that SSL_new() will create */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); +# endif # ifndef OPENSSL_NO_SSL3_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_client_method(void); +# endif # endif #define SSLv23_method TLS_method @@ -1884,34 +2014,44 @@ __owur const SSL_METHOD *TLS_server_method(void); __owur const SSL_METHOD *TLS_client_method(void); # ifndef OPENSSL_NO_TLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_TLS1_1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_TLS1_2_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_client_method(void); +# endif # endif # ifndef OPENSSL_NO_DTLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_DTLS1_2_METHOD /* DTLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_client_method(void); +# endif # endif __owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ @@ -1931,6 +2071,7 @@ int SSL_get_key_update_type(const SSL *s); int SSL_renegotiate(SSL *s); int SSL_renegotiate_abbreviated(SSL *s); __owur int SSL_renegotiate_pending(const SSL *s); +int SSL_new_session_ticket(SSL *s); int SSL_shutdown(SSL *s); __owur int SSL_verify_client_post_handshake(SSL *s); void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); @@ -1964,7 +2105,7 @@ void SSL_set_accept_state(SSL *s); __owur long SSL_get_default_timeout(const SSL *s); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_library_init() OPENSSL_init_ssl(0, NULL) # endif @@ -1993,8 +2134,13 @@ __owur int SSL_client_version(const SSL *s); __owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); __owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); __owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); -__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, - const char *CApath); +__owur int SSL_CTX_set_default_verify_store(SSL_CTX *ctx); +__owur int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile); +__owur int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath); +__owur int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore); +__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, + const char *CAfile, + const char *CApath); # define SSL_get0_session SSL_get_session/* just peek at pointer */ __owur SSL_SESSION *SSL_get_session(const SSL *ssl); __owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ @@ -2071,18 +2217,24 @@ __owur int SSL_get_ex_data_X509_STORE_CTX_idx(void); SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) # define SSL_set_max_pipelines(ssl,m) \ SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_retry_verify(ssl) \ + (SSL_ctrl(ssl,SSL_CTRL_SET_RETRY_VERIFY,0,NULL) > 0) void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); void SSL_set_default_read_buffer_len(SSL *s, size_t len); # ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* NB: the |keylength| is only applicable when is_export is true */ +OSSL_DEPRECATEDIN_3_0 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*dh) (SSL *ssl, int is_export, int keylength)); +OSSL_DEPRECATEDIN_3_0 void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export, int keylength)); +# endif # endif __owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); @@ -2093,7 +2245,7 @@ __owur int SSL_COMP_get_id(const SSL_COMP *comp); STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); __owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) *meths); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_COMP_free_compression_methods() while(0) continue # endif __owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); @@ -2133,7 +2285,7 @@ void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); -void SSL_set_record_padding_callback(SSL *ssl, +int SSL_set_record_padding_callback(SSL *ssl, size_t (*cb) (SSL *ssl, int type, size_t len, void *arg)); void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); @@ -2145,7 +2297,7 @@ size_t SSL_get_num_tickets(const SSL *s); int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_cache_hit(s) SSL_session_reused(s) # endif @@ -2427,8 +2579,6 @@ int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); -extern const char SSL_version_str[]; - typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); @@ -2442,6 +2592,10 @@ void SSL_set_allow_early_data_cb(SSL *s, SSL_allow_early_data_cb_fn cb, void *arg); +/* store the default cipher strings inside the library */ +const char *OSSL_default_cipher_list(void); +const char *OSSL_default_ciphersuites(void); + # ifdef __cplusplus } # endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ssl.h.in b/deps/openssl/android/x86/usr/local/include/openssl/ssl.h.in new file mode 100644 index 00000000..f03f52fb --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/ssl.h.in @@ -0,0 +1,2530 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros generate_const_stack_macros); +-} + +#ifndef OPENSSL_SSL_H +# define OPENSSL_SSL_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# endif +# include +# include +# include +# include + +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* OpenSSL version number for ASN.1 encoding of the session information */ +/*- + * Version 0 - initial version + * Version 1 - added the optional peer certificate + */ +# define SSL_SESSION_ASN1_VERSION 0x0001 + +# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 +# define SSL_MAX_SID_CTX_LENGTH 32 + +# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) +# define SSL_MAX_KEY_ARG_LENGTH 8 +/* SSL_MAX_MASTER_KEY_LENGTH is defined in prov_ssl.h */ + +/* The maximum number of encrypt/decrypt pipelines we can support */ +# define SSL_MAX_PIPELINES 32 + +/* text strings for the ciphers */ + +/* These are used to specify which ciphers to use and not to use */ + +# define SSL_TXT_LOW "LOW" +# define SSL_TXT_MEDIUM "MEDIUM" +# define SSL_TXT_HIGH "HIGH" +# define SSL_TXT_FIPS "FIPS" + +# define SSL_TXT_aNULL "aNULL" +# define SSL_TXT_eNULL "eNULL" +# define SSL_TXT_NULL "NULL" + +# define SSL_TXT_kRSA "kRSA" +# define SSL_TXT_kDHr "kDHr"/* this cipher class has been removed */ +# define SSL_TXT_kDHd "kDHd"/* this cipher class has been removed */ +# define SSL_TXT_kDH "kDH"/* this cipher class has been removed */ +# define SSL_TXT_kEDH "kEDH"/* alias for kDHE */ +# define SSL_TXT_kDHE "kDHE" +# define SSL_TXT_kECDHr "kECDHr"/* this cipher class has been removed */ +# define SSL_TXT_kECDHe "kECDHe"/* this cipher class has been removed */ +# define SSL_TXT_kECDH "kECDH"/* this cipher class has been removed */ +# define SSL_TXT_kEECDH "kEECDH"/* alias for kECDHE */ +# define SSL_TXT_kECDHE "kECDHE" +# define SSL_TXT_kPSK "kPSK" +# define SSL_TXT_kRSAPSK "kRSAPSK" +# define SSL_TXT_kECDHEPSK "kECDHEPSK" +# define SSL_TXT_kDHEPSK "kDHEPSK" +# define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kGOST18 "kGOST18" +# define SSL_TXT_kSRP "kSRP" + +# define SSL_TXT_aRSA "aRSA" +# define SSL_TXT_aDSS "aDSS" +# define SSL_TXT_aDH "aDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDH "aECDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDSA "aECDSA" +# define SSL_TXT_aPSK "aPSK" +# define SSL_TXT_aGOST94 "aGOST94" +# define SSL_TXT_aGOST01 "aGOST01" +# define SSL_TXT_aGOST12 "aGOST12" +# define SSL_TXT_aGOST "aGOST" +# define SSL_TXT_aSRP "aSRP" + +# define SSL_TXT_DSS "DSS" +# define SSL_TXT_DH "DH" +# define SSL_TXT_DHE "DHE"/* same as "kDHE:-ADH" */ +# define SSL_TXT_EDH "EDH"/* alias for DHE */ +# define SSL_TXT_ADH "ADH" +# define SSL_TXT_RSA "RSA" +# define SSL_TXT_ECDH "ECDH" +# define SSL_TXT_EECDH "EECDH"/* alias for ECDHE" */ +# define SSL_TXT_ECDHE "ECDHE"/* same as "kECDHE:-AECDH" */ +# define SSL_TXT_AECDH "AECDH" +# define SSL_TXT_ECDSA "ECDSA" +# define SSL_TXT_PSK "PSK" +# define SSL_TXT_SRP "SRP" + +# define SSL_TXT_DES "DES" +# define SSL_TXT_3DES "3DES" +# define SSL_TXT_RC4 "RC4" +# define SSL_TXT_RC2 "RC2" +# define SSL_TXT_IDEA "IDEA" +# define SSL_TXT_SEED "SEED" +# define SSL_TXT_AES128 "AES128" +# define SSL_TXT_AES256 "AES256" +# define SSL_TXT_AES "AES" +# define SSL_TXT_AES_GCM "AESGCM" +# define SSL_TXT_AES_CCM "AESCCM" +# define SSL_TXT_AES_CCM_8 "AESCCM8" +# define SSL_TXT_CAMELLIA128 "CAMELLIA128" +# define SSL_TXT_CAMELLIA256 "CAMELLIA256" +# define SSL_TXT_CAMELLIA "CAMELLIA" +# define SSL_TXT_CHACHA20 "CHACHA20" +# define SSL_TXT_GOST "GOST89" +# define SSL_TXT_ARIA "ARIA" +# define SSL_TXT_ARIA_GCM "ARIAGCM" +# define SSL_TXT_ARIA128 "ARIA128" +# define SSL_TXT_ARIA256 "ARIA256" +# define SSL_TXT_GOST2012_GOST8912_GOST8912 "GOST2012-GOST8912-GOST8912" +# define SSL_TXT_CBC "CBC" + +# define SSL_TXT_MD5 "MD5" +# define SSL_TXT_SHA1 "SHA1" +# define SSL_TXT_SHA "SHA"/* same as "SHA1" */ +# define SSL_TXT_GOST94 "GOST94" +# define SSL_TXT_GOST89MAC "GOST89MAC" +# define SSL_TXT_GOST12 "GOST12" +# define SSL_TXT_GOST89MAC12 "GOST89MAC12" +# define SSL_TXT_SHA256 "SHA256" +# define SSL_TXT_SHA384 "SHA384" + +# define SSL_TXT_SSLV3 "SSLv3" +# define SSL_TXT_TLSV1 "TLSv1" +# define SSL_TXT_TLSV1_1 "TLSv1.1" +# define SSL_TXT_TLSV1_2 "TLSv1.2" + +# define SSL_TXT_ALL "ALL" + +/*- + * COMPLEMENTOF* definitions. These identifiers are used to (de-select) + * ciphers normally not being used. + * Example: "RC4" will activate all ciphers using RC4 including ciphers + * without authentication, which would normally disabled by DEFAULT (due + * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" + * will make sure that it is also disabled in the specific selection. + * COMPLEMENTOF* identifiers are portable between version, as adjustments + * to the default cipher setup will also be included here. + * + * COMPLEMENTOFDEFAULT does not experience the same special treatment that + * DEFAULT gets, as only selection is being done and no sorting as needed + * for DEFAULT. + */ +# define SSL_TXT_CMPALL "COMPLEMENTOFALL" +# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" + +/* + * The following cipher list is used by default. It also is substituted when + * an application-defined cipher list string starts with 'DEFAULT'. + * This applies to ciphersuites for TLSv1.2 and below. + * DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list() + * Update both macro and function simultaneously + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* + * This is the default set of TLSv1.3 ciphersuites + * DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites() + * Update both macro and function simultaneously + */ +# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ + "TLS_CHACHA20_POLY1305_SHA256:" \ + "TLS_AES_128_GCM_SHA256" +# endif +/* + * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always + * starts with a reasonable order, and all we have to do for DEFAULT is + * throwing out anonymous and unencrypted ciphersuites! (The latter are not + * actually enabled by ALL, but "ALL:RSA" would enable some of them.) + */ + +/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ +# define SSL_SENT_SHUTDOWN 1 +# define SSL_RECEIVED_SHUTDOWN 2 + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 +# define SSL_FILETYPE_PEM X509_FILETYPE_PEM + +/* + * This is needed to stop compilers complaining about the 'struct ssl_st *' + * function parameters used to prototype callbacks in SSL_CTX. + */ +typedef struct ssl_st *ssl_crock_st; +typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; +typedef struct ssl_method_st SSL_METHOD; +typedef struct ssl_cipher_st SSL_CIPHER; +typedef struct ssl_session_st SSL_SESSION; +typedef struct tls_sigalgs_st TLS_SIGALGS; +typedef struct ssl_conf_ctx_st SSL_CONF_CTX; +typedef struct ssl_comp_st SSL_COMP; + +STACK_OF(SSL_CIPHER); +STACK_OF(SSL_COMP); + +/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ +typedef struct srtp_protection_profile_st { + const char *name; + unsigned long id; +} SRTP_PROTECTION_PROFILE; +{- + generate_stack_macros("SRTP_PROTECTION_PROFILE"); +-} + + +typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, + int len, void *arg); +typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, + STACK_OF(SSL_CIPHER) *peer_ciphers, + const SSL_CIPHER **cipher, void *arg); + +/* Extension context codes */ +/* This extension is only allowed in TLS */ +#define SSL_EXT_TLS_ONLY 0x0001 +/* This extension is only allowed in DTLS */ +#define SSL_EXT_DTLS_ONLY 0x0002 +/* Some extensions may be allowed in DTLS but we don't implement them for it */ +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x0004 +/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ +#define SSL_EXT_SSL3_ALLOWED 0x0008 +/* Extension is only defined for TLS1.2 and below */ +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +/* Extension is only defined for TLS1.3 and above */ +#define SSL_EXT_TLS1_3_ONLY 0x0020 +/* Ignore this extension during parsing if we are resuming */ +#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 +#define SSL_EXT_CLIENT_HELLO 0x0080 +/* Really means TLS1.2 or below */ +#define SSL_EXT_TLS1_2_SERVER_HELLO 0x0100 +#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 +#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 +#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 +#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 +#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 +#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 + +/* Typedefs for handling custom extensions */ + +typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type, + const unsigned char **out, size_t *outlen, + int *al, void *add_arg); + +typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type, + const unsigned char *out, void *add_arg); + +typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type, + const unsigned char *in, size_t inlen, + int *al, void *parse_arg); + + +typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char **out, + size_t *outlen, X509 *x, + size_t chainidx, + int *al, void *add_arg); + +typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *out, + void *add_arg); + +typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *in, + size_t inlen, X509 *x, + size_t chainidx, + int *al, void *parse_arg); + +/* Typedef for verification callback */ +typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); + +/* Typedef for SSL async callback */ +typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); + +#define SSL_OP_BIT(n) ((uint64_t)1 << (uint64_t)n) + +/* + * SSL/TLS connection options. + */ + /* Disable Extended master secret */ +# define SSL_OP_NO_EXTENDED_MASTER_SECRET SSL_OP_BIT(0) + /* Cleanse plaintext copies of data delivered to the application */ +# define SSL_OP_CLEANSE_PLAINTEXT SSL_OP_BIT(1) + /* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT SSL_OP_BIT(2) + /* Enable support for Kernel TLS */ +# define SSL_OP_ENABLE_KTLS SSL_OP_BIT(3) +# define SSL_OP_TLSEXT_PADDING SSL_OP_BIT(4) +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG SSL_OP_BIT(6) +# define SSL_OP_IGNORE_UNEXPECTED_EOF SSL_OP_BIT(7) +# define SSL_OP_ALLOW_CLIENT_RENEGOTIATION SSL_OP_BIT(8) +# define SSL_OP_DISABLE_TLSEXT_CA_NAMES SSL_OP_BIT(9) + /* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX SSL_OP_BIT(10) + /* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added + * in OpenSSL 0.9.6d. Usually (depending on the application protocol) + * the workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it + * in SSL_OP_ALL. Added in 0.9.6e + */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS SSL_OP_BIT(11) + /* DTLS options */ +# define SSL_OP_NO_QUERY_MTU SSL_OP_BIT(12) + /* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE SSL_OP_BIT(13) + /* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET SSL_OP_BIT(14) +# ifndef OPENSSL_NO_DTLS1_METHOD + /* + * Use Cisco's version identifier of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) + */ +# define SSL_OP_CISCO_ANYCONNECT SSL_OP_BIT(15) +# endif + /* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_BIT(16) + /* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION SSL_OP_BIT(17) + /* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_BIT(18) + /* Disable encrypt-then-mac */ +# define SSL_OP_NO_ENCRYPT_THEN_MAC SSL_OP_BIT(19) + /* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future + * version of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT SSL_OP_BIT(20) + /* + * Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE + */ +# define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21) + /* + * Set on servers to choose the cipher according to server's preferences. + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_BIT(22) + /* + * If set, a server will allow a client to issue a SSLv3.0 version + * number as latest version supported in the premaster secret, even when + * TLSv1.0 (version 3.1) was announced in the client hello. Normally + * this is forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG SSL_OP_BIT(23) + /* + * Switches off automatic TLSv1.3 anti-replay protection for early data. + * This is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY SSL_OP_BIT(24) +# define SSL_OP_NO_SSLv3 SSL_OP_BIT(25) +# define SSL_OP_NO_TLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_TLSv1_2 SSL_OP_BIT(27) +# define SSL_OP_NO_TLSv1_1 SSL_OP_BIT(28) +# define SSL_OP_NO_TLSv1_3 SSL_OP_BIT(29) +# define SSL_OP_NO_DTLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_DTLSv1_2 SSL_OP_BIT(27) + /* Disallow all renegotiation */ +# define SSL_OP_NO_RENEGOTIATION SSL_OP_BIT(30) + /* + * Make server add server-hello extension from early version of + * cryptopro draft, when GOST ciphersuite is negotiated. Required for + * interoperability with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG SSL_OP_BIT(31) + +/* + * Option "collections." + */ +# define SSL_OP_NO_SSL_MASK \ + ( SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 \ + | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 ) +# define SSL_OP_NO_DTLS_MASK \ + ( SSL_OP_NO_DTLSv1 | SSL_OP_NO_DTLSv1_2 ) + +/* Various bug workarounds that should be rather harmless. */ +# define SSL_OP_ALL \ + ( SSL_OP_CRYPTOPRO_TLSEXT_BUG | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS \ + | SSL_OP_TLSEXT_PADDING | SSL_OP_SAFARI_ECDHE_ECDSA_BUG ) + +/* + * OBSOLETE OPTIONS retained for compatibility + */ + +# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 +# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 +# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 +# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 +# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 +# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 +# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 +# define SSL_OP_TLS_D5_BUG 0x0 +# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 +# define SSL_OP_SINGLE_ECDH_USE 0x0 +# define SSL_OP_SINGLE_DH_USE 0x0 +# define SSL_OP_EPHEMERAL_RSA 0x0 +# define SSL_OP_NO_SSLv2 0x0 +# define SSL_OP_PKCS1_CHECK_1 0x0 +# define SSL_OP_PKCS1_CHECK_2 0x0 +# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 +# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 + +/* + * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success + * when just a single record has been written): + */ +# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001U +/* + * Make it possible to retry SSL_write() with changed buffer location (buffer + * contents must stay the same!); this is not the default to avoid the + * misconception that non-blocking SSL_write() behaves like non-blocking + * write(): + */ +# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U +/* + * Never bother the application with retries if the transport is blocking: + */ +# define SSL_MODE_AUTO_RETRY 0x00000004U +/* Don't attempt to automatically build certificate chain */ +# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U +/* + * Save RAM by releasing read and write buffers when they're empty. (SSL3 and + * TLS only.) Released buffers are freed. + */ +# define SSL_MODE_RELEASE_BUFFERS 0x00000010U +/* + * Send the current time in the Random fields of the ClientHello and + * ServerHello records for compatibility with hypothetical implementations + * that require it. + */ +# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U +# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U +/* + * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications + * that reconnect with a downgraded protocol version; see + * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your + * application attempts a normal handshake. Only use this in explicit + * fallback retries, following the guidance in + * draft-ietf-tls-downgrade-scsv-00. + */ +# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U +/* + * Support Asynchronous operation + */ +# define SSL_MODE_ASYNC 0x00000100U + +/* + * When using DTLS/SCTP, include the terminating zero in the label + * used for computing the endpoint-pair shared secret. Required for + * interoperability with implementations having this bug like these + * older version of OpenSSL: + * - OpenSSL 1.0.0 series + * - OpenSSL 1.0.1 series + * - OpenSSL 1.0.2 series + * - OpenSSL 1.1.0 series + * - OpenSSL 1.1.1 and 1.1.1a + */ +# define SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG 0x00000400U + +/* Cert related flags */ +/* + * Many implementations ignore some aspects of the TLS standards such as + * enforcing certificate chain algorithms. When this is set we enforce them. + */ +# define SSL_CERT_FLAG_TLS_STRICT 0x00000001U + +/* Suite B modes, takes same values as certificate verify flags */ +# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 + +/* Perform all sorts of protocol violations for testing purposes */ +# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 + +/* Flags for building certificate chains */ +/* Treat any existing certificates as untrusted CAs */ +# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 +/* Don't include root CA in chain */ +# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 +/* Just check certificates already there */ +# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 +/* Ignore verification errors */ +# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 +/* Clear verification errors from queue */ +# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 + +/* Flags returned by SSL_check_chain */ +/* Certificate can be used with this session */ +# define CERT_PKEY_VALID 0x1 +/* Certificate can also be used for signing */ +# define CERT_PKEY_SIGN 0x2 +/* EE certificate signing algorithm OK */ +# define CERT_PKEY_EE_SIGNATURE 0x10 +/* CA signature algorithms OK */ +# define CERT_PKEY_CA_SIGNATURE 0x20 +/* EE certificate parameters OK */ +# define CERT_PKEY_EE_PARAM 0x40 +/* CA certificate parameters OK */ +# define CERT_PKEY_CA_PARAM 0x80 +/* Signing explicitly allowed as opposed to SHA1 fallback */ +# define CERT_PKEY_EXPLICIT_SIGN 0x100 +/* Client CA issuer names match (always set for server cert) */ +# define CERT_PKEY_ISSUER_NAME 0x200 +/* Cert type matches client types (always set for server cert) */ +# define CERT_PKEY_CERT_TYPE 0x400 +/* Cert chain suitable to Suite B */ +# define CERT_PKEY_SUITEB 0x800 + +# define SSL_CONF_FLAG_CMDLINE 0x1 +# define SSL_CONF_FLAG_FILE 0x2 +# define SSL_CONF_FLAG_CLIENT 0x4 +# define SSL_CONF_FLAG_SERVER 0x8 +# define SSL_CONF_FLAG_SHOW_ERRORS 0x10 +# define SSL_CONF_FLAG_CERTIFICATE 0x20 +# define SSL_CONF_FLAG_REQUIRE_PRIVATE 0x40 +/* Configuration value types */ +# define SSL_CONF_TYPE_UNKNOWN 0x0 +# define SSL_CONF_TYPE_STRING 0x1 +# define SSL_CONF_TYPE_FILE 0x2 +# define SSL_CONF_TYPE_DIR 0x3 +# define SSL_CONF_TYPE_NONE 0x4 +# define SSL_CONF_TYPE_STORE 0x5 + +/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ +# define SSL_COOKIE_LENGTH 4096 + +/* + * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they + * cannot be used to clear bits. + */ + +uint64_t SSL_CTX_get_options(const SSL_CTX *ctx); +uint64_t SSL_get_options(const SSL *s); +uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_clear_options(SSL *s, uint64_t op); +uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_set_options(SSL *s, uint64_t op); + +# define SSL_CTX_set_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) +# define SSL_CTX_clear_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_CTX_get_mode(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) +# define SSL_clear_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_set_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) +# define SSL_get_mode(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) +# define SSL_set_mtu(ssl, mtu) \ + SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) +# define DTLS_set_link_mtu(ssl, mtu) \ + SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) +# define DTLS_get_link_min_mtu(ssl) \ + SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) + +# define SSL_get_secure_renegotiation_support(ssl) \ + SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) + +# define SSL_CTX_set_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_set_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_CTX_clear_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) +# define SSL_clear_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) + +void SSL_CTX_set_msg_callback(SSL_CTX *ctx, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +void SSL_set_msg_callback(SSL *ssl, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) +# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) + +# define SSL_get_extms_support(s) \ + SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) + +# ifndef OPENSSL_NO_SRP +/* see tls_srp.c */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_SRP_CTX_init(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_SRP_CTX_free(SSL *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_srp_server_param_with_username(SSL *s, + int *ad); +OSSL_DEPRECATEDIN_3_0 __owur int SRP_Calc_A_param(SSL *s); +# endif +# endif + +/* 100k max cert list */ +# define SSL_MAX_CERT_LIST_DEFAULT (1024*100) + +# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) + +/* + * This callback type is used inside SSL_CTX, SSL, and in the functions that + * set them. It is used to override the generation of SSL/TLS session IDs in + * a server. Return value should be zero on an error, non-zero to proceed. + * Also, callbacks should themselves check if the id they generate is unique + * otherwise the SSL handshake will fail with an error - callbacks can do + * this using the 'ssl' value they're passed by; + * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in + * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32 + * bytes. The callback can alter this length to be less if desired. It is + * also an error for the callback to set the size to zero. + */ +typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, + unsigned int *id_len); + +# define SSL_SESS_CACHE_OFF 0x0000 +# define SSL_SESS_CACHE_CLIENT 0x0001 +# define SSL_SESS_CACHE_SERVER 0x0002 +# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) +# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 +/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ +# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 +# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 +# define SSL_SESS_CACHE_NO_INTERNAL \ + (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) +# define SSL_SESS_CACHE_UPDATE_TIME 0x0400 + +LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); +# define SSL_CTX_sess_number(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) +# define SSL_CTX_sess_connect(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) +# define SSL_CTX_sess_connect_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) +# define SSL_CTX_sess_connect_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) +# define SSL_CTX_sess_accept_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) +# define SSL_CTX_sess_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) +# define SSL_CTX_sess_cb_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) +# define SSL_CTX_sess_misses(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) +# define SSL_CTX_sess_timeouts(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) +# define SSL_CTX_sess_cache_full(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) + +void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, + int (*new_session_cb) (struct ssl_st *ssl, + SSL_SESSION *sess)); +int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + SSL_SESSION *sess); +void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, + void (*remove_session_cb) (struct ssl_ctx_st + *ctx, + SSL_SESSION *sess)); +void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, + SSL_SESSION *sess); +void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, + SSL_SESSION *(*get_session_cb) (struct ssl_st + *ssl, + const unsigned char + *data, int len, + int *copy)); +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + const unsigned char *data, + int len, int *copy); +void SSL_CTX_set_info_callback(SSL_CTX *ctx, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, + int val); +void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, + int (*client_cert_cb) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey)); +int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey); +# ifndef OPENSSL_NO_ENGINE +__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); +# endif +void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, + int (*app_gen_cookie_cb) (SSL *ssl, + unsigned char + *cookie, + unsigned int + *cookie_len)); +void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, + int (*app_verify_cookie_cb) (SSL *ssl, + const unsigned + char *cookie, + unsigned int + cookie_len)); + +void SSL_CTX_set_stateless_cookie_generate_cb( + SSL_CTX *ctx, + int (*gen_stateless_cookie_cb) (SSL *ssl, + unsigned char *cookie, + size_t *cookie_len)); +void SSL_CTX_set_stateless_cookie_verify_cb( + SSL_CTX *ctx, + int (*verify_stateless_cookie_cb) (SSL *ssl, + const unsigned char *cookie, + size_t cookie_len)); +# ifndef OPENSSL_NO_NEXTPROTONEG + +typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned int *outlen, + void *arg); +void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, + SSL_CTX_npn_advertised_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb + +typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s, + unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, + SSL_CTX_npn_select_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb + +void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, + unsigned *len); +# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated +# endif + +__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, + const unsigned char *in, unsigned int inlen, + const unsigned char *client, + unsigned int client_len); + +# define OPENSSL_NPN_UNSUPPORTED 0 +# define OPENSSL_NPN_NEGOTIATED 1 +# define OPENSSL_NPN_NO_OVERLAP 2 + +__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, + unsigned int protos_len); +__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, + unsigned int protos_len); +typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, + SSL_CTX_alpn_select_cb_func cb, + void *arg); +void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, + unsigned int *len); + +# ifndef OPENSSL_NO_PSK +/* + * the maximum length of the buffer given to callbacks containing the + * resulting identity/psk + */ +# define PSK_MAX_IDENTITY_LEN 256 +# define PSK_MAX_PSK_LEN 512 +typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, + const char *hint, + char *identity, + unsigned int max_identity_len, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb); +void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb); + +typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl, + const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb); +void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb); + +__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); +__owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); +const char *SSL_get_psk_identity_hint(const SSL *s); +const char *SSL_get_psk_identity(const SSL *s); +# endif + +typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl, + const unsigned char *identity, + size_t identity_len, + SSL_SESSION **sess); +typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md, + const unsigned char **id, + size_t *idlen, + SSL_SESSION **sess); + +void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb); +void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx, + SSL_psk_find_session_cb_func cb); +void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb); +void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx, + SSL_psk_use_session_cb_func cb); + +/* Register callbacks to handle custom TLS Extensions for client or server. */ + +__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, + unsigned int ext_type); + +__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type, + unsigned int context, + SSL_custom_ext_add_cb_ex add_cb, + SSL_custom_ext_free_cb_ex free_cb, + void *add_arg, + SSL_custom_ext_parse_cb_ex parse_cb, + void *parse_arg); + +__owur int SSL_extension_supported(unsigned int ext_type); + +# define SSL_NOTHING 1 +# define SSL_WRITING 2 +# define SSL_READING 3 +# define SSL_X509_LOOKUP 4 +# define SSL_ASYNC_PAUSED 5 +# define SSL_ASYNC_NO_JOBS 6 +# define SSL_CLIENT_HELLO_CB 7 +# define SSL_RETRY_VERIFY 8 + +/* These will only be used when doing non-blocking IO */ +# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) +# define SSL_want_read(s) (SSL_want(s) == SSL_READING) +# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) +# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) +# define SSL_want_retry_verify(s) (SSL_want(s) == SSL_RETRY_VERIFY) +# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) +# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) +# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) + +# define SSL_MAC_FLAG_READ_MAC_STREAM 1 +# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 +# define SSL_MAC_FLAG_READ_MAC_TLSTREE 4 +# define SSL_MAC_FLAG_WRITE_MAC_TLSTREE 8 + +/* + * A callback for logging out TLS key material. This callback should log out + * |line| followed by a newline. + */ +typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line); + +/* + * SSL_CTX_set_keylog_callback configures a callback to log key material. This + * is intended for debugging use with tools like Wireshark. The cb function + * should log line followed by a newline. + */ +void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb); + +/* + * SSL_CTX_get_keylog_callback returns the callback configured by + * SSL_CTX_set_keylog_callback. + */ +SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx); + +int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data); +uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx); +int SSL_set_max_early_data(SSL *s, uint32_t max_early_data); +uint32_t SSL_get_max_early_data(const SSL *s); +int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data); +uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx); +int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data); +uint32_t SSL_get_recv_max_early_data(const SSL *s); + +#ifdef __cplusplus +} +#endif + +# include +# include +# include /* This is mostly sslv3 with a few tweaks */ +# include /* Datagram TLS */ +# include /* Support for the use_srtp extension */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These need to be after the above set of includes due to a compiler bug + * in VisualStudio 2015 + */ +{- + generate_const_stack_macros("SSL_CIPHER") + .generate_stack_macros("SSL_COMP"); +-} + +/* compatibility */ +# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) +# define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) +# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0, \ + (char *)(a))) +# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) +# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) +# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ + (char *)(arg))) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void SSL_set_debug(SSL *s, int debug); +# endif + +/* TLSv1.3 KeyUpdate message types */ +/* -1 used so that this is an invalid value for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NONE -1 +/* Values as defined for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NOT_REQUESTED 0 +#define SSL_KEY_UPDATE_REQUESTED 1 + +/* + * The valid handshake states (one for each type message sent and one for each + * type of message received). There are also two "special" states: + * TLS = TLS or DTLS state + * DTLS = DTLS specific state + * CR/SR = Client Read/Server Read + * CW/SW = Client Write/Server Write + * + * The "special" states are: + * TLS_ST_BEFORE = No handshake has been initiated yet + * TLS_ST_OK = A handshake has been successfully completed + */ +typedef enum { + TLS_ST_BEFORE, + TLS_ST_OK, + DTLS_ST_CR_HELLO_VERIFY_REQUEST, + TLS_ST_CR_SRVR_HELLO, + TLS_ST_CR_CERT, + TLS_ST_CR_CERT_STATUS, + TLS_ST_CR_KEY_EXCH, + TLS_ST_CR_CERT_REQ, + TLS_ST_CR_SRVR_DONE, + TLS_ST_CR_SESSION_TICKET, + TLS_ST_CR_CHANGE, + TLS_ST_CR_FINISHED, + TLS_ST_CW_CLNT_HELLO, + TLS_ST_CW_CERT, + TLS_ST_CW_KEY_EXCH, + TLS_ST_CW_CERT_VRFY, + TLS_ST_CW_CHANGE, + TLS_ST_CW_NEXT_PROTO, + TLS_ST_CW_FINISHED, + TLS_ST_SW_HELLO_REQ, + TLS_ST_SR_CLNT_HELLO, + DTLS_ST_SW_HELLO_VERIFY_REQUEST, + TLS_ST_SW_SRVR_HELLO, + TLS_ST_SW_CERT, + TLS_ST_SW_KEY_EXCH, + TLS_ST_SW_CERT_REQ, + TLS_ST_SW_SRVR_DONE, + TLS_ST_SR_CERT, + TLS_ST_SR_KEY_EXCH, + TLS_ST_SR_CERT_VRFY, + TLS_ST_SR_NEXT_PROTO, + TLS_ST_SR_CHANGE, + TLS_ST_SR_FINISHED, + TLS_ST_SW_SESSION_TICKET, + TLS_ST_SW_CERT_STATUS, + TLS_ST_SW_CHANGE, + TLS_ST_SW_FINISHED, + TLS_ST_SW_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_CERT_VRFY, + TLS_ST_SW_CERT_VRFY, + TLS_ST_CR_HELLO_REQ, + TLS_ST_SW_KEY_UPDATE, + TLS_ST_CW_KEY_UPDATE, + TLS_ST_SR_KEY_UPDATE, + TLS_ST_CR_KEY_UPDATE, + TLS_ST_EARLY_DATA, + TLS_ST_PENDING_EARLY_DATA_END, + TLS_ST_CW_END_OF_EARLY_DATA, + TLS_ST_SR_END_OF_EARLY_DATA +} OSSL_HANDSHAKE_STATE; + +/* + * Most of the following state values are no longer used and are defined to be + * the closest equivalent value in the current state machine code. Not all + * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT + * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP, + * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT. + */ + +# define SSL_ST_CONNECT 0x1000 +# define SSL_ST_ACCEPT 0x2000 + +# define SSL_ST_MASK 0x0FFF + +# define SSL_CB_LOOP 0x01 +# define SSL_CB_EXIT 0x02 +# define SSL_CB_READ 0x04 +# define SSL_CB_WRITE 0x08 +# define SSL_CB_ALERT 0x4000/* used in callback */ +# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) +# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) +# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) +# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) +# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) +# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) +# define SSL_CB_HANDSHAKE_START 0x10 +# define SSL_CB_HANDSHAKE_DONE 0x20 + +/* Is the SSL_connection established? */ +# define SSL_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a)) +# define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a)) +int SSL_in_init(const SSL *s); +int SSL_in_before(const SSL *s); +int SSL_is_init_finished(const SSL *s); + +/* + * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you + * should not need these + */ +# define SSL_ST_READ_HEADER 0xF0 +# define SSL_ST_READ_BODY 0xF1 +# define SSL_ST_READ_DONE 0xF2 + +/*- + * Obtain latest Finished message + * -- that we sent (SSL_get_finished) + * -- that we expected from peer (SSL_get_peer_finished). + * Returns length (0 == no Finished so far), copies up to 'count' bytes. + */ +size_t SSL_get_finished(const SSL *s, void *buf, size_t count); +size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); + +/* + * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are + * 'ored' with SSL_VERIFY_PEER if they are desired + */ +# define SSL_VERIFY_NONE 0x00 +# define SSL_VERIFY_PEER 0x01 +# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 +# define SSL_VERIFY_CLIENT_ONCE 0x04 +# define SSL_VERIFY_POST_HANDSHAKE 0x08 + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OpenSSL_add_ssl_algorithms() SSL_library_init() +# define SSLeay_add_ssl_algorithms() SSL_library_init() +# endif + +/* More backward compatibility */ +# define SSL_get_cipher(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_cipher_bits(s,np) \ + SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) +# define SSL_get_cipher_version(s) \ + SSL_CIPHER_get_version(SSL_get_current_cipher(s)) +# define SSL_get_cipher_name(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_time(a) SSL_SESSION_get_time(a) +# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) +# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) +# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) + +# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) +# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) + +DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) +# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value + * from SSL_AD_... */ +/* These alert types are for SSLv3 and TLSv1 */ +# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY +/* fatal */ +# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE +/* fatal */ +# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC +# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED +# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW +/* fatal */ +# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE +/* fatal */ +# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE +/* Not for TLS */ +# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE +# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE +# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE +# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED +# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED +# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN +/* fatal */ +# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER +/* fatal */ +# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA +/* fatal */ +# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED +/* fatal */ +# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR +# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR +/* fatal */ +# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION +/* fatal */ +# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION +/* fatal */ +# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY +/* fatal */ +# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR +# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED +# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION +# define SSL_AD_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION +# define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED +# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION +# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE +# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME +# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE +# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE +/* fatal */ +# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY +/* fatal */ +# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK +# define SSL_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL +# define SSL_ERROR_NONE 0 +# define SSL_ERROR_SSL 1 +# define SSL_ERROR_WANT_READ 2 +# define SSL_ERROR_WANT_WRITE 3 +# define SSL_ERROR_WANT_X509_LOOKUP 4 +# define SSL_ERROR_SYSCALL 5/* look at error stack/return + * value/errno */ +# define SSL_ERROR_ZERO_RETURN 6 +# define SSL_ERROR_WANT_CONNECT 7 +# define SSL_ERROR_WANT_ACCEPT 8 +# define SSL_ERROR_WANT_ASYNC 9 +# define SSL_ERROR_WANT_ASYNC_JOB 10 +# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 +# define SSL_ERROR_WANT_RETRY_VERIFY 12 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# endif + +# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 +# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 +# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 +# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 +# define SSL_CTRL_GET_FLAGS 13 +# define SSL_CTRL_EXTRA_CHAIN_CERT 14 +# define SSL_CTRL_SET_MSG_CALLBACK 15 +# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 +/* only applies to datagram connections */ +# define SSL_CTRL_SET_MTU 17 +/* Stats */ +# define SSL_CTRL_SESS_NUMBER 20 +# define SSL_CTRL_SESS_CONNECT 21 +# define SSL_CTRL_SESS_CONNECT_GOOD 22 +# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 +# define SSL_CTRL_SESS_ACCEPT 24 +# define SSL_CTRL_SESS_ACCEPT_GOOD 25 +# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 +# define SSL_CTRL_SESS_HIT 27 +# define SSL_CTRL_SESS_CB_HIT 28 +# define SSL_CTRL_SESS_MISSES 29 +# define SSL_CTRL_SESS_TIMEOUTS 30 +# define SSL_CTRL_SESS_CACHE_FULL 31 +# define SSL_CTRL_MODE 33 +# define SSL_CTRL_GET_READ_AHEAD 40 +# define SSL_CTRL_SET_READ_AHEAD 41 +# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 +# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 +# define SSL_CTRL_SET_SESS_CACHE_MODE 44 +# define SSL_CTRL_GET_SESS_CACHE_MODE 45 +# define SSL_CTRL_GET_MAX_CERT_LIST 50 +# define SSL_CTRL_SET_MAX_CERT_LIST 51 +# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 +/* see tls1.h for macros based on these */ +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 +# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 +# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 +# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 +# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 */ +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# endif +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 +# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 +# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 +# define SSL_CTRL_SET_SRP_ARG 78 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 +# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 +# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 +# define DTLS_CTRL_GET_TIMEOUT 73 +# define DTLS_CTRL_HANDLE_TIMEOUT 74 +# define SSL_CTRL_GET_RI_SUPPORT 76 +# define SSL_CTRL_CLEAR_MODE 78 +# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB 79 +# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 +# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 +# define SSL_CTRL_CHAIN 88 +# define SSL_CTRL_CHAIN_CERT 89 +# define SSL_CTRL_GET_GROUPS 90 +# define SSL_CTRL_SET_GROUPS 91 +# define SSL_CTRL_SET_GROUPS_LIST 92 +# define SSL_CTRL_GET_SHARED_GROUP 93 +# define SSL_CTRL_SET_SIGALGS 97 +# define SSL_CTRL_SET_SIGALGS_LIST 98 +# define SSL_CTRL_CERT_FLAGS 99 +# define SSL_CTRL_CLEAR_CERT_FLAGS 100 +# define SSL_CTRL_SET_CLIENT_SIGALGS 101 +# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 +# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 +# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 +# define SSL_CTRL_BUILD_CERT_CHAIN 105 +# define SSL_CTRL_SET_VERIFY_CERT_STORE 106 +# define SSL_CTRL_SET_CHAIN_CERT_STORE 107 +# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 +# define SSL_CTRL_GET_PEER_TMP_KEY 109 +# define SSL_CTRL_GET_RAW_CIPHERLIST 110 +# define SSL_CTRL_GET_EC_POINT_FORMATS 111 +# define SSL_CTRL_GET_CHAIN_CERTS 115 +# define SSL_CTRL_SELECT_CURRENT_CERT 116 +# define SSL_CTRL_SET_CURRENT_CERT 117 +# define SSL_CTRL_SET_DH_AUTO 118 +# define DTLS_CTRL_SET_LINK_MTU 120 +# define DTLS_CTRL_GET_LINK_MIN_MTU 121 +# define SSL_CTRL_GET_EXTMS_SUPPORT 122 +# define SSL_CTRL_SET_MIN_PROTO_VERSION 123 +# define SSL_CTRL_SET_MAX_PROTO_VERSION 124 +# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT 125 +# define SSL_CTRL_SET_MAX_PIPELINES 126 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE 127 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB 128 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG 129 +# define SSL_CTRL_GET_MIN_PROTO_VERSION 130 +# define SSL_CTRL_GET_MAX_PROTO_VERSION 131 +# define SSL_CTRL_GET_SIGNATURE_NID 132 +# define SSL_CTRL_GET_TMP_KEY 133 +# define SSL_CTRL_GET_NEGOTIATED_GROUP 134 +# define SSL_CTRL_SET_RETRY_VERIFY 136 +# define SSL_CTRL_GET_VERIFY_CERT_STORE 137 +# define SSL_CTRL_GET_CHAIN_CERT_STORE 138 +# define SSL_CERT_SET_FIRST 1 +# define SSL_CERT_SET_NEXT 2 +# define SSL_CERT_SET_SERVER 3 +# define DTLSv1_get_timeout(ssl, arg) \ + SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg)) +# define DTLSv1_handle_timeout(ssl) \ + SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) +# define SSL_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_clear_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_total_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_dh(ctx,dh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# endif +# define SSL_CTX_set_dh_auto(ctx, onoff) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# define SSL_set_dh_auto(s, onoff) \ + SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_set_tmp_dh(ssl,dh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif +# define SSL_CTX_add_extra_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_get_extra_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) +# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) +# define SSL_CTX_clear_extra_chain_certs(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) +# define SSL_CTX_set0_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_CTX_set1_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_CTX_add0_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_add1_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_CTX_get0_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_CTX_clear_chain_certs(ctx) \ + SSL_CTX_set0_chain(ctx,NULL) +# define SSL_CTX_build_cert_chain(ctx, flags) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_CTX_select_current_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_CTX_set_current_cert(ctx, op) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_CTX_set0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +# define SSL_CTX_get0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +# define SSL_CTX_get0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set0_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_set1_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_add0_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_add1_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_get0_chain_certs(s,px509) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_clear_chain_certs(s) \ + SSL_set0_chain(s,NULL) +# define SSL_build_cert_chain(s, flags) \ + SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_select_current_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_set_current_cert(s,op) \ + SSL_ctrl(s,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_set0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_set1_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +#define SSL_get0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_set0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set1_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +#define SSL_get0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) + +# define SSL_get1_groups(s, glist) \ + SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) +# define SSL_CTX_set1_groups(ctx, glist, glistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(int *)(glist)) +# define SSL_CTX_set1_groups_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s)) +# define SSL_set1_groups(s, glist, glistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) +# define SSL_set1_groups_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) +# define SSL_get_shared_group(s, n) \ + SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) +# define SSL_get_negotiated_group(s) \ + SSL_ctrl(s,SSL_CTRL_GET_NEGOTIATED_GROUP,0,NULL) +# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(str)) +# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_client_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_client_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(str)) +# define SSL_get0_certificate_types(s, clist) \ + SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)(clist)) +# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen, \ + (char *)(clist)) +# define SSL_set1_client_certificate_types(s, clist, clistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)(clist)) +# define SSL_get_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NID,0,pn) +# define SSL_get_peer_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) +# define SSL_get_peer_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_TMP_KEY,0,pk) +# define SSL_get_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_TMP_KEY,0,pk) +# define SSL_get0_raw_cipherlist(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,plst) +# define SSL_get0_ec_point_formats(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst) +# define SSL_CTX_set_min_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_CTX_set_max_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_CTX_get_min_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_CTX_get_max_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +# define SSL_set_min_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_set_max_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_get_min_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_get_max_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) + +const char *SSL_group_to_name(SSL *s, int id); + +/* Backwards compatibility, original 1.1.0 names */ +# define SSL_CTRL_GET_SERVER_TMP_KEY \ + SSL_CTRL_GET_PEER_TMP_KEY +# define SSL_get_server_tmp_key(s, pk) \ + SSL_get_peer_tmp_key(s, pk) + +int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey); +int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey); + +/* + * The following symbol names are old and obsolete. They are kept + * for compatibility reasons only and should not be used anymore. + */ +# define SSL_CTRL_GET_CURVES SSL_CTRL_GET_GROUPS +# define SSL_CTRL_SET_CURVES SSL_CTRL_SET_GROUPS +# define SSL_CTRL_SET_CURVES_LIST SSL_CTRL_SET_GROUPS_LIST +# define SSL_CTRL_GET_SHARED_CURVE SSL_CTRL_GET_SHARED_GROUP + +# define SSL_get1_curves SSL_get1_groups +# define SSL_CTX_set1_curves SSL_CTX_set1_groups +# define SSL_CTX_set1_curves_list SSL_CTX_set1_groups_list +# define SSL_set1_curves SSL_set1_groups +# define SSL_set1_curves_list SSL_set1_groups_list +# define SSL_get_shared_curve SSL_get_shared_group + + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* Provide some compatibility macros for removed functionality. */ +# define SSL_CTX_need_tmp_RSA(ctx) 0 +# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 +# define SSL_need_tmp_RSA(ssl) 0 +# define SSL_set_tmp_rsa(ssl,rsa) 1 +# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +/* + * We "pretend" to call the callback to avoid warnings about unused static + * functions. + */ +# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) +# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) +# endif +__owur const BIO_METHOD *BIO_f_ssl(void); +__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client); +__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from); +void BIO_ssl_shutdown(BIO *ssl_bio); + +__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); +__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +__owur SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq, + const SSL_METHOD *meth); +int SSL_CTX_up_ref(SSL_CTX *ctx); +void SSL_CTX_free(SSL_CTX *); +__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); +__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx); +__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); +void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); +void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *); +__owur int SSL_want(const SSL *s); +__owur int SSL_clear(SSL *s); + +void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); + +__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +__owur const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s); +__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); +__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +__owur const char *OPENSSL_cipher_name(const char *rfc_name); +__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); +__owur uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); +__owur const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c); +__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c); + +__owur int SSL_get_fd(const SSL *s); +__owur int SSL_get_rfd(const SSL *s); +__owur int SSL_get_wfd(const SSL *s); +__owur const char *SSL_get_cipher_list(const SSL *s, int n); +__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size); +__owur int SSL_get_read_ahead(const SSL *s); +__owur int SSL_pending(const SSL *s); +__owur int SSL_has_pending(const SSL *s); +# ifndef OPENSSL_NO_SOCK +__owur int SSL_set_fd(SSL *s, int fd); +__owur int SSL_set_rfd(SSL *s, int fd); +__owur int SSL_set_wfd(SSL *s, int fd); +# endif +void SSL_set0_rbio(SSL *s, BIO *rbio); +void SSL_set0_wbio(SSL *s, BIO *wbio); +void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); +__owur BIO *SSL_get_rbio(const SSL *s); +__owur BIO *SSL_get_wbio(const SSL *s); +__owur int SSL_set_cipher_list(SSL *s, const char *str); +__owur int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str); +__owur int SSL_set_ciphersuites(SSL *s, const char *str); +void SSL_set_read_ahead(SSL *s, int yes); +__owur int SSL_get_verify_mode(const SSL *s); +__owur int SSL_get_verify_depth(const SSL *s); +__owur SSL_verify_cb SSL_get_verify_callback(const SSL *s); +void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); +void SSL_set_verify_depth(SSL *s, int depth); +void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, + const unsigned char *d, long len); +# endif +__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, + long len); +__owur int SSL_use_certificate(SSL *ssl, X509 *x); +__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); +__owur int SSL_use_cert_and_key(SSL *ssl, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + + +/* serverinfo file format versions */ +# define SSL_SERVERINFOV1 1 +# define SSL_SERVERINFOV2 2 + +/* Set serverinfo data for the current active cert. */ +__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, + const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +#endif + +__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +#endif +__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, + int type); +/* PEM type */ +__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); +__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); +__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur STACK_OF(X509_NAME) +*SSL_load_client_CA_file_ex(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *file); +int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *dir); +int SSL_add_store_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *uri); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_load_error_strings() \ + OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# endif + +__owur const char *SSL_state_string(const SSL *s); +__owur const char *SSL_rstate_string(const SSL *s); +__owur const char *SSL_state_string_long(const SSL *s); +__owur const char *SSL_rstate_string_long(const SSL *s); +__owur long SSL_SESSION_get_time(const SSL_SESSION *s); +__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); +__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s); +__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); +__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); +__owur int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); + +__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); +__owur int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname); +void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s, + const unsigned char **alpn, + size_t *len); +__owur int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, + const unsigned char *alpn, + size_t len); +__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); +__owur int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher); +__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s); +__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s); +void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick, + size_t *len); +__owur uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s); +__owur int SSL_SESSION_set_max_early_data(SSL_SESSION *s, + uint32_t max_early_data); +__owur int SSL_copy_session_id(SSL *to, const SSL *from); +__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); +__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, + unsigned int sid_len); +__owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); + +__owur SSL_SESSION *SSL_SESSION_new(void); +__owur SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src); +const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, + unsigned int *len); +const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, + unsigned int *len); +__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); +# ifndef OPENSSL_NO_STDIO +int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); +# endif +int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); +int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); +int SSL_SESSION_up_ref(SSL_SESSION *ses); +void SSL_SESSION_free(SSL_SESSION *ses); +__owur int i2d_SSL_SESSION(const SSL_SESSION *in, unsigned char **pp); +__owur int SSL_set_session(SSL *to, SSL_SESSION *session); +int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); +int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); +__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb); +__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb); +__owur int SSL_has_matching_session_id(const SSL *s, + const unsigned char *id, + unsigned int id_len); +SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, + long length); + +# ifdef OPENSSL_X509_H +__owur X509 *SSL_get0_peer_certificate(const SSL *s); +__owur X509 *SSL_get1_peer_certificate(const SSL *s); +/* Deprecated in 3.0.0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_get_peer_certificate SSL_get1_peer_certificate +# endif +# endif + +__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); + +__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +__owur SSL_verify_cb SSL_CTX_get_verify_callback(const SSL_CTX *ctx); +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb callback); +void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); +void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, + int (*cb) (X509_STORE_CTX *, void *), + void *arg); +void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), + void *arg); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, + long len); +# endif +__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, + const unsigned char *d, long len); +__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +__owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, + const unsigned char *d); +__owur int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + +void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); +void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); +pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx); +void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx); +void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb); +void SSL_set_default_passwd_cb_userdata(SSL *s, void *u); +pem_password_cb *SSL_get_default_passwd_cb(SSL *s); +void *SSL_get_default_passwd_cb_userdata(SSL *s); + +__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx); +__owur int SSL_check_private_key(const SSL *ctx); + +__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +SSL *SSL_new(SSL_CTX *ctx); +int SSL_up_ref(SSL *s); +int SSL_is_dtls(const SSL *s); +__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +__owur int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose); +__owur int SSL_set_purpose(SSL *ssl, int purpose); +__owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust); +__owur int SSL_set_trust(SSL *ssl, int trust); + +__owur int SSL_set1_host(SSL *s, const char *hostname); +__owur int SSL_add1_host(SSL *s, const char *hostname); +__owur const char *SSL_get0_peername(SSL *s); +void SSL_set_hostflags(SSL *s, unsigned int flags); + +__owur int SSL_CTX_dane_enable(SSL_CTX *ctx); +__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, + uint8_t mtype, uint8_t ord); +__owur int SSL_dane_enable(SSL *s, const char *basedomain); +__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, + uint8_t mtype, const unsigned char *data, size_t dlen); +__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); +__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, + uint8_t *mtype, const unsigned char **data, + size_t *dlen); +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +SSL_DANE *SSL_get0_dane(SSL *ssl); +/* + * DANE flags + */ +unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags); +unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags); + +__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); +__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); + +__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); +__owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); + +# ifndef OPENSSL_NO_SRP +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, + char *(*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, + int (*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, + int (*cb) (SSL *, int *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); + +OSSL_DEPRECATEDIN_3_0 +int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, + BIGNUM *sa, BIGNUM *v, char *info); +OSSL_DEPRECATEDIN_3_0 +int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, + const char *grp); + +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_g(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_N(SSL *s); + +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_username(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_userinfo(SSL *s); +# endif +# endif + +/* + * ClientHello callback and helpers. + */ + +# define SSL_CLIENT_HELLO_SUCCESS 1 +# define SSL_CLIENT_HELLO_ERROR 0 +# define SSL_CLIENT_HELLO_RETRY (-1) + +typedef int (*SSL_client_hello_cb_fn) (SSL *s, int *al, void *arg); +void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb, + void *arg); +int SSL_client_hello_isv2(SSL *s); +unsigned int SSL_client_hello_get0_legacy_version(SSL *s); +size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_compression_methods(SSL *s, + const unsigned char **out); +int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen); +int SSL_client_hello_get0_ext(SSL *s, unsigned int type, + const unsigned char **out, size_t *outlen); + +void SSL_certs_clear(SSL *s); +void SSL_free(SSL *ssl); +# ifdef OSSL_ASYNC_FD +/* + * Windows application developer has to include windows.h to use these. + */ +__owur int SSL_waiting_for_async(SSL *s); +__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); +__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +__owur int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback); +__owur int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg); +__owur int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback); +__owur int SSL_set_async_callback_arg(SSL *s, void *arg); +__owur int SSL_get_async_status(SSL *s, int *status); + +# endif +__owur int SSL_accept(SSL *ssl); +__owur int SSL_stateless(SSL *s); +__owur int SSL_connect(SSL *ssl); +__owur int SSL_read(SSL *ssl, void *buf, int num); +__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); + +# define SSL_READ_EARLY_DATA_ERROR 0 +# define SSL_READ_EARLY_DATA_SUCCESS 1 +# define SSL_READ_EARLY_DATA_FINISH 2 + +__owur int SSL_read_early_data(SSL *s, void *buf, size_t num, + size_t *readbytes); +__owur int SSL_peek(SSL *ssl, void *buf, int num); +__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +__owur ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, + int flags); +__owur int SSL_write(SSL *ssl, const void *buf, int num); +__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); +__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, + size_t *written); +long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); +long SSL_callback_ctrl(SSL *, int, void (*)(void)); +long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); +long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); + +# define SSL_EARLY_DATA_NOT_SENT 0 +# define SSL_EARLY_DATA_REJECTED 1 +# define SSL_EARLY_DATA_ACCEPTED 2 + +__owur int SSL_get_early_data_status(const SSL *s); + +__owur int SSL_get_error(const SSL *s, int ret_code); +__owur const char *SSL_get_version(const SSL *s); + +/* This sets the 'default' SSL version that SSL_new() will create */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); +# endif + +# ifndef OPENSSL_NO_SSL3_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_client_method(void); +# endif +# endif + +#define SSLv23_method TLS_method +#define SSLv23_server_method TLS_server_method +#define SSLv23_client_method TLS_client_method + +/* Negotiate highest available SSL/TLS version */ +__owur const SSL_METHOD *TLS_method(void); +__owur const SSL_METHOD *TLS_server_method(void); +__owur const SSL_METHOD *TLS_client_method(void); + +# ifndef OPENSSL_NO_TLS1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_TLS1_1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_TLS1_2_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_DTLS1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_DTLS1_2_METHOD +/* DTLSv1.2 */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_client_method(void); +# endif +# endif + +__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ + +__owur size_t DTLS_get_data_mtu(const SSL *s); + +__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); +__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s); + +__owur int SSL_do_handshake(SSL *s); +int SSL_key_update(SSL *s, int updatetype); +int SSL_get_key_update_type(const SSL *s); +int SSL_renegotiate(SSL *s); +int SSL_renegotiate_abbreviated(SSL *s); +__owur int SSL_renegotiate_pending(const SSL *s); +int SSL_new_session_ticket(SSL *s); +int SSL_shutdown(SSL *s); +__owur int SSL_verify_client_post_handshake(SSL *s); +void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); +void SSL_set_post_handshake_auth(SSL *s, int val); + +__owur const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx); +__owur const SSL_METHOD *SSL_get_ssl_method(const SSL *s); +__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +__owur const char *SSL_alert_type_string_long(int value); +__owur const char *SSL_alert_type_string(int value); +__owur const char *SSL_alert_desc_string_long(int value); +__owur const char *SSL_alert_desc_string(int value); + +void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s); +__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx); +__owur int SSL_add1_to_CA_list(SSL *ssl, const X509 *x); +__owur int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x); +__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s); + +void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); +__owur int SSL_add_client_CA(SSL *ssl, X509 *x); +__owur int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); + +void SSL_set_connect_state(SSL *s); +void SSL_set_accept_state(SSL *s); + +__owur long SSL_get_default_timeout(const SSL *s); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_library_init() OPENSSL_init_ssl(0, NULL) +# endif + +__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); +__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk); + +__owur SSL *SSL_dup(SSL *ssl); + +__owur X509 *SSL_get_certificate(const SSL *ssl); +/* + * EVP_PKEY + */ +struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); + +__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); +__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); + +void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); +__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +void SSL_set_quiet_shutdown(SSL *ssl, int mode); +__owur int SSL_get_quiet_shutdown(const SSL *ssl); +void SSL_set_shutdown(SSL *ssl, int mode); +__owur int SSL_get_shutdown(const SSL *ssl); +__owur int SSL_version(const SSL *ssl); +__owur int SSL_client_version(const SSL *s); +__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_store(SSL_CTX *ctx); +__owur int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile); +__owur int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath); +__owur int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore); +__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, + const char *CAfile, + const char *CApath); +# define SSL_get0_session SSL_get_session/* just peek at pointer */ +__owur SSL_SESSION *SSL_get_session(const SSL *ssl); +__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ +__owur SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); +SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); +void SSL_set_info_callback(SSL *ssl, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, + int val); +__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); + +void SSL_set_verify_result(SSL *ssl, long v); +__owur long SSL_get_verify_result(const SSL *ssl); +__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s); + +__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *sess, + unsigned char *out, size_t outlen); +__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess, + const unsigned char *in, size_t len); +uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *sess); + +#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) +__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data); +void *SSL_get_ex_data(const SSL *ssl, int idx); +#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef) +__owur int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); +void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); +#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef) +__owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); +void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); + +__owur int SSL_get_ex_data_X509_STORE_CTX_idx(void); + +# define SSL_CTX_sess_set_cache_size(ctx,t) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) +# define SSL_CTX_sess_get_cache_size(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) +# define SSL_CTX_set_session_cache_mode(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) +# define SSL_CTX_get_session_cache_mode(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) + +# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) +# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) +# define SSL_CTX_get_read_ahead(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) +# define SSL_CTX_set_read_ahead(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) +# define SSL_CTX_get_max_cert_list(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_CTX_set_max_cert_list(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) +# define SSL_get_max_cert_list(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_set_max_cert_list(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) + +# define SSL_CTX_set_max_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_set_max_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_split_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_set_split_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_max_pipelines(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_max_pipelines(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_retry_verify(ssl) \ + (SSL_ctrl(ssl,SSL_CTRL_SET_RETRY_VERIFY,0,NULL) > 0) + +void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); +void SSL_set_default_read_buffer_len(SSL *s, size_t len); + +# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* NB: the |keylength| is only applicable when is_export is true */ +OSSL_DEPRECATEDIN_3_0 +void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +OSSL_DEPRECATEDIN_3_0 +void SSL_set_tmp_dh_callback(SSL *ssl, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +# endif +# endif + +__owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); +__owur const COMP_METHOD *SSL_get_current_expansion(const SSL *s); +__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp); +__owur const char *SSL_COMP_get0_name(const SSL_COMP *comp); +__owur int SSL_COMP_get_id(const SSL_COMP *comp); +STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) + *meths); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_COMP_free_compression_methods() while(0) continue +# endif +__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); + +const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); +int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); +int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); +int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len, + int isv2format, STACK_OF(SSL_CIPHER) **sk, + STACK_OF(SSL_CIPHER) **scsvs); + +/* TLS extensions functions */ +__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); + +__owur int SSL_set_session_ticket_ext_cb(SSL *s, + tls_session_ticket_ext_cb_fn cb, + void *arg); + +/* Pre-shared secret session resumption functions */ +__owur int SSL_set_session_secret_cb(SSL *s, + tls_session_secret_cb_fn session_secret_cb, + void *arg); + +void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, + int (*cb) (SSL *ssl, + int + is_forward_secure)); + +void SSL_set_not_resumable_session_callback(SSL *ssl, + int (*cb) (SSL *ssl, + int is_forward_secure)); + +void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); +void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); +int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); + +int SSL_set_record_padding_callback(SSL *ssl, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); +void *SSL_get_record_padding_callback_arg(const SSL *ssl); +int SSL_set_block_padding(SSL *ssl, size_t block_size); + +int SSL_set_num_tickets(SSL *s, size_t num_tickets); +size_t SSL_get_num_tickets(const SSL *s); +int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); +size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_cache_hit(s) SSL_session_reused(s) +# endif + +__owur int SSL_session_reused(const SSL *s); +__owur int SSL_is_server(const SSL *s); + +__owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void); +int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); +void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); +unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); +__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, + unsigned int flags); +__owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); + +void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); +void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); + +__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); +__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); +__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); + +void SSL_add_ssl_module(void); +int SSL_config(SSL *s, const char *name); +int SSL_CTX_config(SSL_CTX *ctx, const char *name); + +# ifndef OPENSSL_NO_SSL_TRACE +void SSL_trace(int write_p, int version, int content_type, + const void *buf, size_t len, SSL *ssl, void *arg); +# endif + +# ifndef OPENSSL_NO_SOCK +int DTLSv1_listen(SSL *s, BIO_ADDR *client); +# endif + +# ifndef OPENSSL_NO_CT + +/* + * A callback for verifying that the received SCTs are sufficient. + * Expected to return 1 if they are sufficient, otherwise 0. + * May return a negative integer if an error occurs. + * A connection should be aborted if the SCTs are deemed insufficient. + */ +typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, + const STACK_OF(SCT) *scts, void *arg); + +/* + * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate + * the received SCTs. + * If the callback returns a non-positive result, the connection is terminated. + * Call this function before beginning a handshake. + * If a NULL |callback| is provided, SCT validation is disabled. + * |arg| is arbitrary userdata that will be passed to the callback whenever it + * is invoked. Ownership of |arg| remains with the caller. + * + * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response + * will be requested. + */ +int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback, + void *arg); +int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, + ssl_ct_validation_cb callback, + void *arg); +#define SSL_disable_ct(s) \ + ((void) SSL_set_validation_callback((s), NULL, NULL)) +#define SSL_CTX_disable_ct(ctx) \ + ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL)) + +/* + * The validation type enumerates the available behaviours of the built-in SSL + * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct(). + * The underlying callback is a static function in libssl. + */ +enum { + SSL_CT_VALIDATION_PERMISSIVE = 0, + SSL_CT_VALIDATION_STRICT +}; + +/* + * Enable CT by setting up a callback that implements one of the built-in + * validation variants. The SSL_CT_VALIDATION_PERMISSIVE variant always + * continues the handshake, the application can make appropriate decisions at + * handshake completion. The SSL_CT_VALIDATION_STRICT variant requires at + * least one valid SCT, or else handshake termination will be requested. The + * handshake may continue anyway if SSL_VERIFY_NONE is in effect. + */ +int SSL_enable_ct(SSL *s, int validation_mode); +int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode); + +/* + * Report whether a non-NULL callback is enabled. + */ +int SSL_ct_is_enabled(const SSL *s); +int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx); + +/* Gets the SCTs received from a connection */ +const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s); + +/* + * Loads the CT log list from the default location. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx); + +/* + * Loads the CT log list from the specified file path. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path); + +/* + * Sets the CT log list used by all SSL connections created from this SSL_CTX. + * Ownership of the CTLOG_STORE is transferred to the SSL_CTX. + */ +void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs); + +/* + * Gets the CT log list used by all SSL connections created from this SSL_CTX. + * This will be NULL unless one of the following functions has been called: + * - SSL_CTX_set_default_ctlog_list_file + * - SSL_CTX_set_ctlog_list_file + * - SSL_CTX_set_ctlog_store + */ +const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx); + +# endif /* OPENSSL_NO_CT */ + +/* What the "other" parameter contains in security callback */ +/* Mask for type */ +# define SSL_SECOP_OTHER_TYPE 0xffff0000 +# define SSL_SECOP_OTHER_NONE 0 +# define SSL_SECOP_OTHER_CIPHER (1 << 16) +# define SSL_SECOP_OTHER_CURVE (2 << 16) +# define SSL_SECOP_OTHER_DH (3 << 16) +# define SSL_SECOP_OTHER_PKEY (4 << 16) +# define SSL_SECOP_OTHER_SIGALG (5 << 16) +# define SSL_SECOP_OTHER_CERT (6 << 16) + +/* Indicated operation refers to peer key or certificate */ +# define SSL_SECOP_PEER 0x1000 + +/* Values for "op" parameter in security callback */ + +/* Called to filter ciphers */ +/* Ciphers client supports */ +# define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER) +/* Cipher shared by client/server */ +# define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER) +/* Sanity check of cipher server selects */ +# define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER) +/* Curves supported by client */ +# define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE) +/* Curves shared by client/server */ +# define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE) +/* Sanity check of curve server selects */ +# define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE) +/* Temporary DH key */ +# define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_PKEY) +/* SSL/TLS version */ +# define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE) +/* Session tickets */ +# define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE) +/* Supported signature algorithms sent to peer */ +# define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG) +/* Shared signature algorithm */ +# define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG) +/* Sanity check signature algorithm allowed */ +# define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG) +/* Used to get mask of supported public key signature algorithms */ +# define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG) +/* Use to see if compression is allowed */ +# define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE) +/* EE key in certificate */ +# define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT) +/* CA key in certificate */ +# define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT) +/* CA digest algorithm in certificate */ +# define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT) +/* Peer EE key in certificate */ +# define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER) +/* Peer CA key in certificate */ +# define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER) +/* Peer CA digest algorithm in certificate */ +# define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER) + +void SSL_set_security_level(SSL *s, int level); +__owur int SSL_get_security_level(const SSL *s); +void SSL_set_security_callback(SSL *s, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, + const SSL_CTX *ctx, int op, + int bits, int nid, void *other, + void *ex); +void SSL_set0_security_ex_data(SSL *s, void *ex); +__owur void *SSL_get0_security_ex_data(const SSL *s); + +void SSL_CTX_set_security_level(SSL_CTX *ctx, int level); +__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx); +void SSL_CTX_set_security_callback(SSL_CTX *ctx, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s, + const SSL_CTX *ctx, + int op, int bits, + int nid, + void *other, + void *ex); +void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex); +__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx); + +/* OPENSSL_INIT flag 0x010000 reserved for internal use */ +# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L +# define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L + +# define OPENSSL_INIT_SSL_DEFAULT \ + (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS) + +int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); + +# ifndef OPENSSL_NO_UNIT_TEST +__owur const struct openssl_ssl_test_functions *SSL_test_functions(void); +# endif + +__owur int SSL_free_buffers(SSL *ssl); +__owur int SSL_alloc_buffers(SSL *ssl); + +/* Status codes passed to the decrypt session ticket callback. Some of these + * are for internal use only and are never passed to the callback. */ +typedef int SSL_TICKET_STATUS; + +/* Support for ticket appdata */ +/* fatal error, malloc failure */ +# define SSL_TICKET_FATAL_ERR_MALLOC 0 +/* fatal error, either from parsing or decrypting the ticket */ +# define SSL_TICKET_FATAL_ERR_OTHER 1 +/* No ticket present */ +# define SSL_TICKET_NONE 2 +/* Empty ticket present */ +# define SSL_TICKET_EMPTY 3 +/* the ticket couldn't be decrypted */ +# define SSL_TICKET_NO_DECRYPT 4 +/* a ticket was successfully decrypted */ +# define SSL_TICKET_SUCCESS 5 +/* same as above but the ticket needs to be renewed */ +# define SSL_TICKET_SUCCESS_RENEW 6 + +/* Return codes for the decrypt session ticket callback */ +typedef int SSL_TICKET_RETURN; + +/* An error occurred */ +#define SSL_TICKET_RETURN_ABORT 0 +/* Do not use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE 1 +/* Do not use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE_RENEW 2 +/* Use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE 3 +/* Use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE_RENEW 4 + +typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg); +typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss, + const unsigned char *keyname, + size_t keyname_length, + SSL_TICKET_STATUS status, + void *arg); +int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, + SSL_CTX_generate_session_ticket_fn gen_cb, + SSL_CTX_decrypt_session_ticket_fn dec_cb, + void *arg); +int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); +int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); + +typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); + +void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); + + +typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg); +void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx, + SSL_allow_early_data_cb_fn cb, + void *arg); +void SSL_set_allow_early_data_cb(SSL *s, + SSL_allow_early_data_cb_fn cb, + void *arg); + +/* store the default cipher strings inside the library */ +const char *OSSL_default_cipher_list(void); +const char *OSSL_default_ciphersuites(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ssl2.h b/deps/openssl/android/x86/usr/local/include/openssl/ssl2.h index 5321bd27..428ead05 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ssl2.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ssl2.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL2_H -# define HEADER_SSL2_H +#ifndef OPENSSL_SSL2_H +# define OPENSSL_SSL2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL2_H +# endif #ifdef __cplusplus extern "C" { diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ssl3.h b/deps/openssl/android/x86/usr/local/include/openssl/ssl3.h index 07effba2..49bd51f2 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ssl3.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ssl3.h @@ -1,15 +1,21 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL3_H -# define HEADER_SSL3_H +#ifndef OPENSSL_SSL3_H +# define OPENSSL_SSL3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL3_H +# endif # include # include @@ -206,7 +212,7 @@ extern "C" { # define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" # define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" -# define SSL3_VERSION 0x0300 +/* SSL3_VERSION is defined in prov_ssl.h */ # define SSL3_VERSION_MAJOR 0x03 # define SSL3_VERSION_MINOR 0x00 @@ -214,7 +220,6 @@ extern "C" { # define SSL3_RT_ALERT 21 # define SSL3_RT_HANDSHAKE 22 # define SSL3_RT_APPLICATION_DATA 23 -# define DTLS1_RT_HEARTBEAT 24 /* Pseudo content types to indicate additional parameters */ # define TLS1_RT_CRYPTO 0x1000 @@ -265,7 +270,7 @@ extern "C" { * SSL3_CT_NUMBER is used to size arrays and it must be large enough to * contain all of the cert types defined for *either* SSLv3 and TLSv1. */ -# define SSL3_CT_NUMBER 10 +# define SSL3_CT_NUMBER 12 # if defined(TLS_CT_NUMBER) # if TLS_CT_NUMBER != SSL3_CT_NUMBER diff --git a/deps/openssl/android/x86/usr/local/include/openssl/sslerr.h b/deps/openssl/android/x86/usr/local/include/openssl/sslerr.h index 701d61c6..f1882558 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/sslerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/sslerr.h @@ -1,456 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSLERR_H -# define HEADER_SSLERR_H +#ifndef OPENSSL_SSLERR_H +# define OPENSSL_SSLERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_SSL_strings(void); -/* - * SSL function codes. - */ -# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 438 -# define SSL_F_ADD_KEY_SHARE 512 -# define SSL_F_BYTES_TO_CIPHER_LIST 519 -# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 -# define SSL_F_CIPHERSUITE_CB 622 -# define SSL_F_CONSTRUCT_CA_NAMES 552 -# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 553 -# define SSL_F_CONSTRUCT_STATEFUL_TICKET 636 -# define SSL_F_CONSTRUCT_STATELESS_TICKET 637 -# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 539 -# define SSL_F_CREATE_TICKET_PREQUEL 638 -# define SSL_F_CT_MOVE_SCTS 345 -# define SSL_F_CT_STRICT 349 -# define SSL_F_CUSTOM_EXT_ADD 554 -# define SSL_F_CUSTOM_EXT_PARSE 555 -# define SSL_F_D2I_SSL_SESSION 103 -# define SSL_F_DANE_CTX_ENABLE 347 -# define SSL_F_DANE_MTYPE_SET 393 -# define SSL_F_DANE_TLSA_ADD 394 -# define SSL_F_DERIVE_SECRET_KEY_AND_IV 514 -# define SSL_F_DO_DTLS1_WRITE 245 -# define SSL_F_DO_SSL3_WRITE 104 -# define SSL_F_DTLS1_BUFFER_RECORD 247 -# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 -# define SSL_F_DTLS1_HEARTBEAT 305 -# define SSL_F_DTLS1_HM_FRAGMENT_NEW 623 -# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 -# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 -# define SSL_F_DTLS1_PROCESS_RECORD 257 -# define SSL_F_DTLS1_READ_BYTES 258 -# define SSL_F_DTLS1_READ_FAILED 339 -# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 -# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 -# define SSL_F_DTLS1_WRITE_BYTES 545 -# define SSL_F_DTLSV1_LISTEN 350 -# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 -# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 -# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 -# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 -# define SSL_F_DTLS_RECORD_LAYER_NEW 635 -# define SSL_F_DTLS_WAIT_FOR_DRY 592 -# define SSL_F_EARLY_DATA_COUNT_OK 532 -# define SSL_F_FINAL_EARLY_DATA 556 -# define SSL_F_FINAL_EC_PT_FORMATS 485 -# define SSL_F_FINAL_EMS 486 -# define SSL_F_FINAL_KEY_SHARE 503 -# define SSL_F_FINAL_MAXFRAGMENTLEN 557 -# define SSL_F_FINAL_PSK 639 -# define SSL_F_FINAL_RENEGOTIATE 483 -# define SSL_F_FINAL_SERVER_NAME 558 -# define SSL_F_FINAL_SIG_ALGS 497 -# define SSL_F_GET_CERT_VERIFY_TBS_DATA 588 -# define SSL_F_NSS_KEYLOG_INT 500 -# define SSL_F_OPENSSL_INIT_SSL 342 -# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 436 -# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 598 -# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 430 -# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 593 -# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 594 -# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 -# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 599 -# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 437 -# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 600 -# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 431 -# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 601 -# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 602 -# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 640 -# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 603 -# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 -# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 604 -# define SSL_F_PARSE_CA_NAMES 541 -# define SSL_F_PITEM_NEW 624 -# define SSL_F_PQUEUE_NEW 625 -# define SSL_F_PROCESS_KEY_SHARE_EXT 439 -# define SSL_F_READ_STATE_MACHINE 352 -# define SSL_F_SET_CLIENT_CIPHERSUITE 540 -# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 595 -# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 589 -# define SSL_F_SRP_VERIFY_SERVER_PARAM 596 -# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 -# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 -# define SSL_F_SSL3_CTRL 213 -# define SSL_F_SSL3_CTX_CTRL 133 -# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 -# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 -# define SSL_F_SSL3_ENC 608 -# define SSL_F_SSL3_FINAL_FINISH_MAC 285 -# define SSL_F_SSL3_FINISH_MAC 587 -# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 -# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 -# define SSL_F_SSL3_GET_RECORD 143 -# define SSL_F_SSL3_INIT_FINISHED_MAC 397 -# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 -# define SSL_F_SSL3_READ_BYTES 148 -# define SSL_F_SSL3_READ_N 149 -# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 -# define SSL_F_SSL3_SETUP_READ_BUFFER 156 -# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 -# define SSL_F_SSL3_WRITE_BYTES 158 -# define SSL_F_SSL3_WRITE_PENDING 159 -# define SSL_F_SSL_ADD_CERT_CHAIN 316 -# define SSL_F_SSL_ADD_CERT_TO_BUF 319 -# define SSL_F_SSL_ADD_CERT_TO_WPACKET 493 -# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 -# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 -# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 -# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 -# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 -# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 -# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 -# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 -# define SSL_F_SSL_BAD_METHOD 160 -# define SSL_F_SSL_BUILD_CERT_CHAIN 332 -# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 -# define SSL_F_SSL_CACHE_CIPHERLIST 520 -# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 346 -# define SSL_F_SSL_CERT_DUP 221 -# define SSL_F_SSL_CERT_NEW 162 -# define SSL_F_SSL_CERT_SET0_CHAIN 340 -# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 -# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 -# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 606 -# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 -# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 607 -# define SSL_F_SSL_CIPHER_DESCRIPTION 626 -# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 425 -# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 -# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 -# define SSL_F_SSL_CLEAR 164 -# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 627 -# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 -# define SSL_F_SSL_CONF_CMD 334 -# define SSL_F_SSL_CREATE_CIPHER_LIST 166 -# define SSL_F_SSL_CTRL 232 -# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 -# define SSL_F_SSL_CTX_ENABLE_CT 398 -# define SSL_F_SSL_CTX_MAKE_PROFILES 309 -# define SSL_F_SSL_CTX_NEW 169 -# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 -# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 -# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 -# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 396 -# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 -# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 -# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 551 -# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 -# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 -# define SSL_F_SSL_CTX_USE_SERVERINFO 336 -# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 543 -# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 -# define SSL_F_SSL_DANE_DUP 403 -# define SSL_F_SSL_DANE_ENABLE 395 -# define SSL_F_SSL_DERIVE 590 -# define SSL_F_SSL_DO_CONFIG 391 -# define SSL_F_SSL_DO_HANDSHAKE 180 -# define SSL_F_SSL_DUP_CA_LIST 408 -# define SSL_F_SSL_ENABLE_CT 402 -# define SSL_F_SSL_GENERATE_PKEY_GROUP 559 -# define SSL_F_SSL_GENERATE_SESSION_ID 547 -# define SSL_F_SSL_GET_NEW_SESSION 181 -# define SSL_F_SSL_GET_PREV_SESSION 217 -# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 -# define SSL_F_SSL_GET_SIGN_PKEY 183 -# define SSL_F_SSL_HANDSHAKE_HASH 560 -# define SSL_F_SSL_INIT_WBIO_BUFFER 184 -# define SSL_F_SSL_KEY_UPDATE 515 -# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 -# define SSL_F_SSL_LOG_MASTER_SECRET 498 -# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 499 -# define SSL_F_SSL_MODULE_INIT 392 -# define SSL_F_SSL_NEW 186 -# define SSL_F_SSL_NEXT_PROTO_VALIDATE 565 -# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 -# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 -# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 -# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 -# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 -# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 -# define SSL_F_SSL_PEEK 270 -# define SSL_F_SSL_PEEK_EX 432 -# define SSL_F_SSL_PEEK_INTERNAL 522 -# define SSL_F_SSL_READ 223 -# define SSL_F_SSL_READ_EARLY_DATA 529 -# define SSL_F_SSL_READ_EX 434 -# define SSL_F_SSL_READ_INTERNAL 523 -# define SSL_F_SSL_RENEGOTIATE 516 -# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 546 -# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 -# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 -# define SSL_F_SSL_SESSION_DUP 348 -# define SSL_F_SSL_SESSION_NEW 189 -# define SSL_F_SSL_SESSION_PRINT_FP 190 -# define SSL_F_SSL_SESSION_SET1_ID 423 -# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 -# define SSL_F_SSL_SET_ALPN_PROTOS 344 -# define SSL_F_SSL_SET_CERT 191 -# define SSL_F_SSL_SET_CERT_AND_KEY 621 -# define SSL_F_SSL_SET_CIPHER_LIST 271 -# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 -# define SSL_F_SSL_SET_FD 192 -# define SSL_F_SSL_SET_PKEY 193 -# define SSL_F_SSL_SET_RFD 194 -# define SSL_F_SSL_SET_SESSION 195 -# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 -# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 -# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 550 -# define SSL_F_SSL_SET_WFD 196 -# define SSL_F_SSL_SHUTDOWN 224 -# define SSL_F_SSL_SRP_CTX_INIT 313 -# define SSL_F_SSL_START_ASYNC_JOB 389 -# define SSL_F_SSL_UNDEFINED_FUNCTION 197 -# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 -# define SSL_F_SSL_USE_CERTIFICATE 198 -# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 -# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 -# define SSL_F_SSL_USE_PRIVATEKEY 201 -# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 -# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 -# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 -# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 -# define SSL_F_SSL_VALIDATE_CT 400 -# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 -# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 616 -# define SSL_F_SSL_WRITE 208 -# define SSL_F_SSL_WRITE_EARLY_DATA 526 -# define SSL_F_SSL_WRITE_EARLY_FINISH 527 -# define SSL_F_SSL_WRITE_EX 433 -# define SSL_F_SSL_WRITE_INTERNAL 524 -# define SSL_F_STATE_MACHINE 353 -# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 -# define SSL_F_TLS12_COPY_SIGALGS 533 -# define SSL_F_TLS13_CHANGE_CIPHER_STATE 440 -# define SSL_F_TLS13_ENC 609 -# define SSL_F_TLS13_FINAL_FINISH_MAC 605 -# define SSL_F_TLS13_GENERATE_SECRET 591 -# define SSL_F_TLS13_HKDF_EXPAND 561 -# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 617 -# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 618 -# define SSL_F_TLS13_SETUP_KEY_BLOCK 441 -# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 -# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 -# define SSL_F_TLS1_ENC 401 -# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 -# define SSL_F_TLS1_GET_CURVELIST 338 -# define SSL_F_TLS1_PRF 284 -# define SSL_F_TLS1_SAVE_U16 628 -# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 -# define SSL_F_TLS1_SET_GROUPS 629 -# define SSL_F_TLS1_SET_RAW_SIGALGS 630 -# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 -# define SSL_F_TLS1_SET_SHARED_SIGALGS 631 -# define SSL_F_TLS1_SET_SIGALGS 632 -# define SSL_F_TLS_CHOOSE_SIGALG 513 -# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 -# define SSL_F_TLS_COLLECT_EXTENSIONS 435 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 542 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 429 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 494 -# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 496 -# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 427 -# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 -# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 -# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 -# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 -# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 -# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 -# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 484 -# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 487 -# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 488 -# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 489 -# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 466 -# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 355 -# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 535 -# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 530 -# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 467 -# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 468 -# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 469 -# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 356 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 357 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 470 -# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 549 -# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 471 -# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 472 -# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 619 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 501 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 509 -# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 473 -# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 474 -# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 475 -# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 476 -# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 477 -# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 478 -# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 479 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 480 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 481 -# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 482 -# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 358 -# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 443 -# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 536 -# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 447 -# define SSL_F_TLS_CONSTRUCT_FINISHED 359 -# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 -# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 510 -# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 517 -# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 -# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 426 -# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 490 -# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 491 -# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 492 -# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 451 -# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 374 -# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 613 -# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 452 -# define SSL_F_TLS_CONSTRUCT_STOC_DONE 375 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 531 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 525 -# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 453 -# define SSL_F_TLS_CONSTRUCT_STOC_EMS 454 -# define SSL_F_TLS_CONSTRUCT_STOC_ETM 455 -# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 376 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 377 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 456 -# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 548 -# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 457 -# define SSL_F_TLS_CONSTRUCT_STOC_PSK 504 -# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 458 -# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 459 -# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 460 -# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 461 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 544 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 611 -# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 462 -# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 521 -# define SSL_F_TLS_FINISH_HANDSHAKE 597 -# define SSL_F_TLS_GET_MESSAGE_BODY 351 -# define SSL_F_TLS_GET_MESSAGE_HEADER 387 -# define SSL_F_TLS_HANDLE_ALPN 562 -# define SSL_F_TLS_HANDLE_STATUS_REQUEST 563 -# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 566 -# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 449 -# define SSL_F_TLS_PARSE_CTOS_ALPN 567 -# define SSL_F_TLS_PARSE_CTOS_COOKIE 614 -# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 568 -# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 569 -# define SSL_F_TLS_PARSE_CTOS_EMS 570 -# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 463 -# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 571 -# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 620 -# define SSL_F_TLS_PARSE_CTOS_PSK 505 -# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 572 -# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 464 -# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 573 -# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 574 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 575 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 615 -# define SSL_F_TLS_PARSE_CTOS_SRP 576 -# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 577 -# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 578 -# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 465 -# define SSL_F_TLS_PARSE_STOC_ALPN 579 -# define SSL_F_TLS_PARSE_STOC_COOKIE 534 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 538 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 528 -# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 580 -# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 445 -# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 581 -# define SSL_F_TLS_PARSE_STOC_NPN 582 -# define SSL_F_TLS_PARSE_STOC_PSK 502 -# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 448 -# define SSL_F_TLS_PARSE_STOC_SCT 564 -# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 583 -# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 584 -# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 585 -# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 612 -# define SSL_F_TLS_PARSE_STOC_USE_SRTP 446 -# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 -# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 -# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 -# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 610 -# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 -# define SSL_F_TLS_PROCESS_CERT_STATUS 362 -# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 495 -# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 -# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 -# define SSL_F_TLS_PROCESS_CKE_DHE 411 -# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 -# define SSL_F_TLS_PROCESS_CKE_GOST 413 -# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 -# define SSL_F_TLS_PROCESS_CKE_RSA 415 -# define SSL_F_TLS_PROCESS_CKE_SRP 416 -# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 -# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 -# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 -# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 444 -# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 537 -# define SSL_F_TLS_PROCESS_FINISHED 364 -# define SSL_F_TLS_PROCESS_HELLO_REQ 507 -# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 511 -# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 442 -# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 -# define SSL_F_TLS_PROCESS_KEY_UPDATE 518 -# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 -# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 -# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 -# define SSL_F_TLS_PROCESS_SERVER_DONE 368 -# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 -# define SSL_F_TLS_PROCESS_SKE_DHE 419 -# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 -# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 -# define SSL_F_TLS_PROCESS_SKE_SRP 422 -# define SSL_F_TLS_PSK_DO_BINDER 506 -# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 450 -# define SSL_F_TLS_SETUP_HANDSHAKE 508 -# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 -# define SSL_F_WPACKET_INTERN_INIT_LEN 633 -# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 634 -# define SSL_F_WRITE_STATE_MACHINE 586 /* * SSL reason codes. @@ -458,7 +24,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY 291 # define SSL_R_APP_DATA_IN_HANDSHAKE 100 # define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 -# define SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE 143 # define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 # define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 # define SSL_R_BAD_CIPHER 186 @@ -500,6 +65,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_BN_LIB 130 # define SSL_R_CALLBACK_FAILED 234 # define SSL_R_CANNOT_CHANGE_CIPHER 109 +# define SSL_R_CANNOT_GET_GROUP_NAME 299 # define SSL_R_CA_DN_LENGTH_MISMATCH 131 # define SSL_R_CA_KEY_TOO_SMALL 397 # define SSL_R_CA_MD_TOO_WEAK 398 @@ -509,7 +75,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_CERT_LENGTH_MISMATCH 135 # define SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED 218 # define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 -# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 # define SSL_R_CLIENTHELLO_TLSEXT 226 # define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 # define SSL_R_COMPRESSION_DISABLED 343 @@ -520,6 +85,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 # define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 # define SSL_R_COOKIE_MISMATCH 308 +# define SSL_R_COPY_PARAMETERS_FAILED 296 # define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 # define SSL_R_DANE_ALREADY_ENABLED 172 # define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 @@ -584,6 +150,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_INVALID_SRP_USERNAME 357 # define SSL_R_INVALID_STATUS_RESPONSE 328 # define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 +# define SSL_R_LEGACY_SIGALG_DISALLOWED_OR_UNSUPPORTED 333 # define SSL_R_LENGTH_MISMATCH 159 # define SSL_R_LENGTH_TOO_LONG 404 # define SSL_R_LENGTH_TOO_SHORT 160 @@ -629,13 +196,15 @@ int ERR_load_SSL_strings(void); # define SSL_R_NO_SHARED_GROUPS 410 # define SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS 376 # define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_SUITABLE_DIGEST_ALGORITHM 297 +# define SSL_R_NO_SUITABLE_GROUPS 295 # define SSL_R_NO_SUITABLE_KEY_SHARE 101 # define SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM 118 # define SSL_R_NO_VALID_SCTS 216 # define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 # define SSL_R_NULL_SSL_CTX 195 # define SSL_R_NULL_SSL_METHOD_PASSED 196 -# define SSL_R_OCSP_CALLBACK_FAILURE 294 +# define SSL_R_OCSP_CALLBACK_FAILURE 305 # define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 # define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 # define SSL_R_OVERFLOW_ERROR 237 @@ -724,8 +293,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 # define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 # define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 -# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 -# define SSL_R_TLS_HEARTBEAT_PENDING 366 # define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 # define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 # define SSL_R_TOO_MANY_KEY_UPDATES 132 @@ -737,6 +304,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 # define SSL_R_UNEXPECTED_CCS_MESSAGE 262 # define SSL_R_UNEXPECTED_END_OF_EARLY_DATA 178 +# define SSL_R_UNEXPECTED_EOF_WHILE_READING 294 # define SSL_R_UNEXPECTED_MESSAGE 244 # define SSL_R_UNEXPECTED_RECORD 245 # define SSL_R_UNINITIALIZED 276 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/sslerr_legacy.h b/deps/openssl/android/x86/usr/local/include/openssl/sslerr_legacy.h new file mode 100644 index 00000000..ccf6d3b3 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/sslerr_legacy.h @@ -0,0 +1,468 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file preserves symbols from pre-3.0 OpenSSL. + * It should never be included directly, as it's already included + * by the public sslerr.h headers, and since it will go away some + * time in the future. + */ + +#ifndef OPENSSL_SSLERR_LEGACY_H +# define OPENSSL_SSLERR_LEGACY_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ERR_load_SSL_strings(void); + +/* Collected _F_ macros from OpenSSL 1.1.1 */ + +/* + * SSL function codes. + */ +# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 0 +# define SSL_F_ADD_KEY_SHARE 0 +# define SSL_F_BYTES_TO_CIPHER_LIST 0 +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 0 +# define SSL_F_CIPHERSUITE_CB 0 +# define SSL_F_CONSTRUCT_CA_NAMES 0 +# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 0 +# define SSL_F_CONSTRUCT_STATEFUL_TICKET 0 +# define SSL_F_CONSTRUCT_STATELESS_TICKET 0 +# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 0 +# define SSL_F_CREATE_TICKET_PREQUEL 0 +# define SSL_F_CT_MOVE_SCTS 0 +# define SSL_F_CT_STRICT 0 +# define SSL_F_CUSTOM_EXT_ADD 0 +# define SSL_F_CUSTOM_EXT_PARSE 0 +# define SSL_F_D2I_SSL_SESSION 0 +# define SSL_F_DANE_CTX_ENABLE 0 +# define SSL_F_DANE_MTYPE_SET 0 +# define SSL_F_DANE_TLSA_ADD 0 +# define SSL_F_DERIVE_SECRET_KEY_AND_IV 0 +# define SSL_F_DO_DTLS1_WRITE 0 +# define SSL_F_DO_SSL3_WRITE 0 +# define SSL_F_DTLS1_BUFFER_RECORD 0 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 0 +# define SSL_F_DTLS1_HEARTBEAT 0 +# define SSL_F_DTLS1_HM_FRAGMENT_NEW 0 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 0 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 0 +# define SSL_F_DTLS1_PROCESS_RECORD 0 +# define SSL_F_DTLS1_READ_BYTES 0 +# define SSL_F_DTLS1_READ_FAILED 0 +# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 0 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 0 +# define SSL_F_DTLS1_WRITE_BYTES 0 +# define SSL_F_DTLSV1_LISTEN 0 +# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 0 +# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 0 +# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 0 +# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 0 +# define SSL_F_DTLS_RECORD_LAYER_NEW 0 +# define SSL_F_DTLS_WAIT_FOR_DRY 0 +# define SSL_F_EARLY_DATA_COUNT_OK 0 +# define SSL_F_FINAL_EARLY_DATA 0 +# define SSL_F_FINAL_EC_PT_FORMATS 0 +# define SSL_F_FINAL_EMS 0 +# define SSL_F_FINAL_KEY_SHARE 0 +# define SSL_F_FINAL_MAXFRAGMENTLEN 0 +# define SSL_F_FINAL_RENEGOTIATE 0 +# define SSL_F_FINAL_SERVER_NAME 0 +# define SSL_F_FINAL_SIG_ALGS 0 +# define SSL_F_GET_CERT_VERIFY_TBS_DATA 0 +# define SSL_F_NSS_KEYLOG_INT 0 +# define SSL_F_OPENSSL_INIT_SSL 0 +# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 0 +# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 0 +# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 0 +# define SSL_F_PARSE_CA_NAMES 0 +# define SSL_F_PITEM_NEW 0 +# define SSL_F_PQUEUE_NEW 0 +# define SSL_F_PROCESS_KEY_SHARE_EXT 0 +# define SSL_F_READ_STATE_MACHINE 0 +# define SSL_F_SET_CLIENT_CIPHERSUITE 0 +# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 0 +# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 0 +# define SSL_F_SRP_VERIFY_SERVER_PARAM 0 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 0 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 0 +# define SSL_F_SSL3_CTRL 0 +# define SSL_F_SSL3_CTX_CTRL 0 +# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 0 +# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 0 +# define SSL_F_SSL3_ENC 0 +# define SSL_F_SSL3_FINAL_FINISH_MAC 0 +# define SSL_F_SSL3_FINISH_MAC 0 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 0 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 0 +# define SSL_F_SSL3_GET_RECORD 0 +# define SSL_F_SSL3_INIT_FINISHED_MAC 0 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 0 +# define SSL_F_SSL3_READ_BYTES 0 +# define SSL_F_SSL3_READ_N 0 +# define SSL_F_SSL3_SETUP_KEY_BLOCK 0 +# define SSL_F_SSL3_SETUP_READ_BUFFER 0 +# define SSL_F_SSL3_SETUP_WRITE_BUFFER 0 +# define SSL_F_SSL3_WRITE_BYTES 0 +# define SSL_F_SSL3_WRITE_PENDING 0 +# define SSL_F_SSL_ADD_CERT_CHAIN 0 +# define SSL_F_SSL_ADD_CERT_TO_BUF 0 +# define SSL_F_SSL_ADD_CERT_TO_WPACKET 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 0 +# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 0 +# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_BAD_METHOD 0 +# define SSL_F_SSL_BUILD_CERT_CHAIN 0 +# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 0 +# define SSL_F_SSL_CACHE_CIPHERLIST 0 +# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 0 +# define SSL_F_SSL_CERT_DUP 0 +# define SSL_F_SSL_CERT_NEW 0 +# define SSL_F_SSL_CERT_SET0_CHAIN 0 +# define SSL_F_SSL_CHECK_PRIVATE_KEY 0 +# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 0 +# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 0 +# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 0 +# define SSL_F_SSL_CIPHER_DESCRIPTION 0 +# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 0 +# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 0 +# define SSL_F_SSL_CIPHER_STRENGTH_SORT 0 +# define SSL_F_SSL_CLEAR 0 +# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 0 +# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 0 +# define SSL_F_SSL_CONF_CMD 0 +# define SSL_F_SSL_CREATE_CIPHER_LIST 0 +# define SSL_F_SSL_CTRL 0 +# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 0 +# define SSL_F_SSL_CTX_ENABLE_CT 0 +# define SSL_F_SSL_CTX_MAKE_PROFILES 0 +# define SSL_F_SSL_CTX_NEW 0 +# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 0 +# define SSL_F_SSL_CTX_SET_CIPHER_LIST 0 +# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 0 +# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 0 +# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 0 +# define SSL_F_SSL_CTX_SET_SSL_VERSION 0 +# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 0 +# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 0 +# define SSL_F_SSL_DANE_DUP 0 +# define SSL_F_SSL_DANE_ENABLE 0 +# define SSL_F_SSL_DERIVE 0 +# define SSL_F_SSL_DO_CONFIG 0 +# define SSL_F_SSL_DO_HANDSHAKE 0 +# define SSL_F_SSL_DUP_CA_LIST 0 +# define SSL_F_SSL_ENABLE_CT 0 +# define SSL_F_SSL_GENERATE_PKEY_GROUP 0 +# define SSL_F_SSL_GENERATE_SESSION_ID 0 +# define SSL_F_SSL_GET_NEW_SESSION 0 +# define SSL_F_SSL_GET_PREV_SESSION 0 +# define SSL_F_SSL_GET_SERVER_CERT_INDEX 0 +# define SSL_F_SSL_GET_SIGN_PKEY 0 +# define SSL_F_SSL_HANDSHAKE_HASH 0 +# define SSL_F_SSL_INIT_WBIO_BUFFER 0 +# define SSL_F_SSL_KEY_UPDATE 0 +# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 0 +# define SSL_F_SSL_LOG_MASTER_SECRET 0 +# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_SSL_MODULE_INIT 0 +# define SSL_F_SSL_NEW 0 +# define SSL_F_SSL_NEXT_PROTO_VALIDATE 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_PEEK 0 +# define SSL_F_SSL_PEEK_EX 0 +# define SSL_F_SSL_PEEK_INTERNAL 0 +# define SSL_F_SSL_READ 0 +# define SSL_F_SSL_READ_EARLY_DATA 0 +# define SSL_F_SSL_READ_EX 0 +# define SSL_F_SSL_READ_INTERNAL 0 +# define SSL_F_SSL_RENEGOTIATE 0 +# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 0 +# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_SESSION_DUP 0 +# define SSL_F_SSL_SESSION_NEW 0 +# define SSL_F_SSL_SESSION_PRINT_FP 0 +# define SSL_F_SSL_SESSION_SET1_ID 0 +# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 0 +# define SSL_F_SSL_SET_ALPN_PROTOS 0 +# define SSL_F_SSL_SET_CERT 0 +# define SSL_F_SSL_SET_CERT_AND_KEY 0 +# define SSL_F_SSL_SET_CIPHER_LIST 0 +# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 0 +# define SSL_F_SSL_SET_FD 0 +# define SSL_F_SSL_SET_PKEY 0 +# define SSL_F_SSL_SET_RFD 0 +# define SSL_F_SSL_SET_SESSION 0 +# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 0 +# define SSL_F_SSL_SET_SESSION_TICKET_EXT 0 +# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 0 +# define SSL_F_SSL_SET_WFD 0 +# define SSL_F_SSL_SHUTDOWN 0 +# define SSL_F_SSL_SRP_CTX_INIT 0 +# define SSL_F_SSL_START_ASYNC_JOB 0 +# define SSL_F_SSL_UNDEFINED_FUNCTION 0 +# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 0 +# define SSL_F_SSL_USE_CERTIFICATE 0 +# define SSL_F_SSL_USE_CERTIFICATE_ASN1 0 +# define SSL_F_SSL_USE_CERTIFICATE_FILE 0 +# define SSL_F_SSL_USE_PRIVATEKEY 0 +# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 0 +# define SSL_F_SSL_USE_PRIVATEKEY_FILE 0 +# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 0 +# define SSL_F_SSL_VALIDATE_CT 0 +# define SSL_F_SSL_VERIFY_CERT_CHAIN 0 +# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 0 +# define SSL_F_SSL_WRITE 0 +# define SSL_F_SSL_WRITE_EARLY_DATA 0 +# define SSL_F_SSL_WRITE_EARLY_FINISH 0 +# define SSL_F_SSL_WRITE_EX 0 +# define SSL_F_SSL_WRITE_INTERNAL 0 +# define SSL_F_STATE_MACHINE 0 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 0 +# define SSL_F_TLS12_COPY_SIGALGS 0 +# define SSL_F_TLS13_CHANGE_CIPHER_STATE 0 +# define SSL_F_TLS13_ENC 0 +# define SSL_F_TLS13_FINAL_FINISH_MAC 0 +# define SSL_F_TLS13_GENERATE_SECRET 0 +# define SSL_F_TLS13_HKDF_EXPAND 0 +# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 0 +# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 0 +# define SSL_F_TLS13_SETUP_KEY_BLOCK 0 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 0 +# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 0 +# define SSL_F_TLS1_ENC 0 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 0 +# define SSL_F_TLS1_GET_CURVELIST 0 +# define SSL_F_TLS1_PRF 0 +# define SSL_F_TLS1_SAVE_U16 0 +# define SSL_F_TLS1_SETUP_KEY_BLOCK 0 +# define SSL_F_TLS1_SET_GROUPS 0 +# define SSL_F_TLS1_SET_RAW_SIGALGS 0 +# define SSL_F_TLS1_SET_SERVER_SIGALGS 0 +# define SSL_F_TLS1_SET_SHARED_SIGALGS 0 +# define SSL_F_TLS1_SET_SIGALGS 0 +# define SSL_F_TLS_CHOOSE_SIGALG 0 +# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 0 +# define SSL_F_TLS_COLLECT_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 0 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 0 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 0 +# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 0 +# define SSL_F_TLS_CONSTRUCT_CKE_DHE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_GOST 0 +# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_RSA 0 +# define SSL_F_TLS_CONSTRUCT_CKE_SRP 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_FINISHED 0 +# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 0 +# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 0 +# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 0 +# define SSL_F_TLS_CONSTRUCT_STOC_DONE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EMS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_ETM 0 +# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 0 +# define SSL_F_TLS_CONSTRUCT_STOC_PSK 0 +# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 0 +# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_FINISH_HANDSHAKE 0 +# define SSL_F_TLS_GET_MESSAGE_BODY 0 +# define SSL_F_TLS_GET_MESSAGE_HEADER 0 +# define SSL_F_TLS_HANDLE_ALPN 0 +# define SSL_F_TLS_HANDLE_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 0 +# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 0 +# define SSL_F_TLS_PARSE_CTOS_ALPN 0 +# define SSL_F_TLS_PARSE_CTOS_COOKIE 0 +# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 0 +# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 0 +# define SSL_F_TLS_PARSE_CTOS_EMS 0 +# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 0 +# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 0 +# define SSL_F_TLS_PARSE_CTOS_PSK 0 +# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 0 +# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 0 +# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 0 +# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 0 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 0 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 0 +# define SSL_F_TLS_PARSE_CTOS_SRP 0 +# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 0 +# define SSL_F_TLS_PARSE_STOC_ALPN 0 +# define SSL_F_TLS_PARSE_STOC_COOKIE 0 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 0 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 0 +# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 0 +# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 0 +# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_PARSE_STOC_NPN 0 +# define SSL_F_TLS_PARSE_STOC_PSK 0 +# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 0 +# define SSL_F_TLS_PARSE_STOC_SCT 0 +# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 0 +# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 0 +# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_PARSE_STOC_USE_SRTP 0 +# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 0 +# define SSL_F_TLS_PROCESS_CERT_STATUS 0 +# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 0 +# define SSL_F_TLS_PROCESS_CERT_VERIFY 0 +# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 0 +# define SSL_F_TLS_PROCESS_CKE_DHE 0 +# define SSL_F_TLS_PROCESS_CKE_ECDHE 0 +# define SSL_F_TLS_PROCESS_CKE_GOST 0 +# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_PROCESS_CKE_RSA 0 +# define SSL_F_TLS_PROCESS_CKE_SRP 0 +# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 0 +# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 0 +# define SSL_F_TLS_PROCESS_FINISHED 0 +# define SSL_F_TLS_PROCESS_HELLO_REQ 0 +# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 0 +# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 0 +# define SSL_F_TLS_PROCESS_KEY_UPDATE 0 +# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 0 +# define SSL_F_TLS_PROCESS_NEXT_PROTO 0 +# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_SERVER_DONE 0 +# define SSL_F_TLS_PROCESS_SERVER_HELLO 0 +# define SSL_F_TLS_PROCESS_SKE_DHE 0 +# define SSL_F_TLS_PROCESS_SKE_ECDHE 0 +# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_PROCESS_SKE_SRP 0 +# define SSL_F_TLS_PSK_DO_BINDER 0 +# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 0 +# define SSL_F_TLS_SETUP_HANDSHAKE 0 +# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 0 +# define SSL_F_WPACKET_INTERN_INIT_LEN 0 +# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 0 +# define SSL_F_WRITE_STATE_MACHINE 0 +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/stack.h b/deps/openssl/android/x86/usr/local/include/openssl/stack.h index cfc07505..f0c5c547 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/stack.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/stack.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_STACK_H -# define HEADER_STACK_H +#ifndef OPENSSL_STACK_H +# define OPENSSL_STACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_STACK_H +# endif #ifdef __cplusplus extern "C" { @@ -39,6 +45,7 @@ void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc); void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p); int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data); int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_find_all(OPENSSL_STACK *st, const void *data, int *pnum); int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data); int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data); void *OPENSSL_sk_shift(OPENSSL_STACK *st); @@ -50,7 +57,7 @@ OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *st); void OPENSSL_sk_sort(OPENSSL_STACK *st); int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define _STACK OPENSSL_STACK # define sk_num OPENSSL_sk_num # define sk_value OPENSSL_sk_value diff --git a/deps/openssl/android/x86/usr/local/include/openssl/store.h b/deps/openssl/android/x86/usr/local/include/openssl/store.h index a40a7339..3c1445e0 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/store.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/store.h @@ -1,17 +1,23 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OSSL_STORE_H -# define HEADER_OSSL_STORE_H +#ifndef OPENSSL_STORE_H +# define OPENSSL_STORE_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OSSL_STORE_H +# endif # include -# include +# include # include # include @@ -46,10 +52,16 @@ typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, * Returns a context reference which represents the channel to communicate * through. */ -OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, - void *ui_data, - OSSL_STORE_post_process_info_fn post_process, - void *post_process_data); +OSSL_STORE_CTX * +OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, void *ui_data, + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); +OSSL_STORE_CTX * +OSSL_STORE_open_ex(const char *uri, OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data, + const OSSL_PARAM params[], + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); /* * Control / fine tune the OSSL_STORE channel. |cmd| determines what is to be @@ -57,8 +69,14 @@ OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, * determine which loader is used), except for common commands (see below). * Each command takes different arguments. */ -int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); -int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, + ... /* args */); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, + va_list args); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * Common ctrl commands that different loaders may choose to support. @@ -68,6 +86,8 @@ int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); /* Where custom commands start */ # define OSSL_STORE_C_CUSTOM_START 100 +# endif + /* * Read one data item (a key, a cert, a CRL) that is supported by the OSSL_STORE * functionality, given a context. @@ -96,6 +116,25 @@ int OSSL_STORE_error(OSSL_STORE_CTX *ctx); */ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); +/* + * Attach to a BIO. This works like OSSL_STORE_open() except it takes a + * BIO instead of a uri, along with a scheme to use when reading. + * The given UI method will be used any time the loader needs extra input, + * for example when a password or pin is needed, and will be passed the + * same user data every time it's needed in this context. + * + * Returns a context reference which represents the channel to communicate + * through. + * + * Note that this function is considered unsafe, all depending on what the + * BIO actually reads. + */ +OSSL_STORE_CTX *OSSL_STORE_attach(BIO *bio, const char *scheme, + OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data, + const OSSL_PARAM params[], + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); /*- * Extracting OpenSSL types from and creating new OSSL_STORE_INFOs @@ -109,9 +148,10 @@ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); */ # define OSSL_STORE_INFO_NAME 1 /* char * */ # define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ -# define OSSL_STORE_INFO_PKEY 3 /* EVP_PKEY * */ -# define OSSL_STORE_INFO_CERT 4 /* X509 * */ -# define OSSL_STORE_INFO_CRL 5 /* X509_CRL * */ +# define OSSL_STORE_INFO_PUBKEY 3 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_PKEY 4 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_CERT 5 /* X509 * */ +# define OSSL_STORE_INFO_CRL 6 /* X509_CRL * */ /* * Functions to generate OSSL_STORE_INFOs, one function for each type we @@ -120,9 +160,11 @@ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); * In all cases, ownership of the object is transferred to the OSSL_STORE_INFO * and will therefore be freed when the OSSL_STORE_INFO is freed. */ +OSSL_STORE_INFO *OSSL_STORE_INFO_new(int type, void *data); OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PUBKEY(EVP_PKEY *pubkey); OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); @@ -131,12 +173,15 @@ OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); * Functions to try to extract data from a OSSL_STORE_INFO. */ int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info); +void *OSSL_STORE_INFO_get0_data(int type, const OSSL_STORE_INFO *info); const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info); char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info); const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info); char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PUBKEY(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PUBKEY(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info); X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info); @@ -185,7 +230,7 @@ void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search); /* Search term accessors */ int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion); -X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion); +X509_NAME *OSSL_STORE_SEARCH_get0_name(const OSSL_STORE_SEARCH *criterion); const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH *criterion); const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH @@ -198,9 +243,35 @@ const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); * to the loading channel. This MUST happen before the first OSSL_STORE_load(). */ int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type); -int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); +int OSSL_STORE_find(OSSL_STORE_CTX *ctx, const OSSL_STORE_SEARCH *search); +/*- + * Function to fetch a loader and extract data from it + * --------------------------------------------------- + */ + +typedef struct ossl_store_loader_st OSSL_STORE_LOADER; + +OSSL_STORE_LOADER *OSSL_STORE_LOADER_fetch(OSSL_LIB_CTX *libctx, + const char *scheme, + const char *properties); +int OSSL_STORE_LOADER_up_ref(OSSL_STORE_LOADER *loader); +void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); +const OSSL_PROVIDER *OSSL_STORE_LOADER_get0_provider(const OSSL_STORE_LOADER * + loader); +const char *OSSL_STORE_LOADER_get0_properties(const OSSL_STORE_LOADER *loader); +const char *OSSL_STORE_LOADER_get0_description(const OSSL_STORE_LOADER *loader); +int OSSL_STORE_LOADER_is_a(const OSSL_STORE_LOADER *loader, + const char *scheme); +void OSSL_STORE_LOADER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_STORE_LOADER *loader, + void *arg), + void *arg); +int OSSL_STORE_LOADER_names_do_all(const OSSL_STORE_LOADER *loader, + void (*fn)(const char *name, void *data), + void *data); + /*- * Function to register a loader for the given URI scheme. * ------------------------------------------------------- @@ -209,56 +280,88 @@ int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); * scheme. */ -typedef struct ossl_store_loader_st OSSL_STORE_LOADER; -OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); -const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); -const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +# ifndef OPENSSL_NO_DEPRECATED_3_0 + /* struct ossl_store_loader_ctx_st is defined differently by each loader */ typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; -typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const OSSL_STORE_LOADER - *loader, - const char *uri, - const UI_METHOD *ui_method, - void *ui_data); +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn) + (const OSSL_STORE_LOADER *loader, const char *uri, + const UI_METHOD *ui_method, void *ui_data); +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_ex_fn) + (const OSSL_STORE_LOADER *loader, + const char *uri, OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data); + +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_attach_fn) + (const OSSL_STORE_LOADER *loader, BIO *bio, + OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data); +typedef int (*OSSL_STORE_ctrl_fn) + (OSSL_STORE_LOADER_CTX *ctx, int cmd, va_list args); +typedef int (*OSSL_STORE_expect_fn) + (OSSL_STORE_LOADER_CTX *ctx, int expected); +typedef int (*OSSL_STORE_find_fn) + (OSSL_STORE_LOADER_CTX *ctx, const OSSL_STORE_SEARCH *criteria); +typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn) + (OSSL_STORE_LOADER_CTX *ctx, const UI_METHOD *ui_method, void *ui_data); +typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); + +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, OSSL_STORE_open_fn open_function); -typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd, - va_list args); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_open_ex(OSSL_STORE_LOADER *loader, + OSSL_STORE_open_ex_fn open_ex_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_attach(OSSL_STORE_LOADER *loader, + OSSL_STORE_attach_fn attach_function); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, OSSL_STORE_ctrl_fn ctrl_function); -typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, OSSL_STORE_expect_fn expect_function); -typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx, - OSSL_STORE_SEARCH *criteria); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, OSSL_STORE_find_fn find_function); -typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx, - const UI_METHOD *ui_method, - void *ui_data); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, OSSL_STORE_load_fn load_function); -typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, OSSL_STORE_eof_fn eof_function); -typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, OSSL_STORE_error_fn error_function); -typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, OSSL_STORE_close_fn close_function); -void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); - +OSSL_DEPRECATEDIN_3_0 +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 +const char * OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); +# endif /*- * Functions to list STORE loaders * ------------------------------- */ -int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER - *loader, void *do_arg), +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_do_all_loaders(void (*do_function)(const OSSL_STORE_LOADER *loader, + void *do_arg), void *do_arg); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/storeerr.h b/deps/openssl/android/x86/usr/local/include/openssl/storeerr.h index 190eab07..00529c88 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/storeerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/storeerr.h @@ -1,66 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OSSL_STOREERR_H -# define HEADER_OSSL_STOREERR_H +#ifndef OPENSSL_STOREERR_H +# define OPENSSL_STOREERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OSSL_STORE_strings(void); -/* - * OSSL_STORE function codes. - */ -# define OSSL_STORE_F_FILE_CTRL 129 -# define OSSL_STORE_F_FILE_FIND 138 -# define OSSL_STORE_F_FILE_GET_PASS 118 -# define OSSL_STORE_F_FILE_LOAD 119 -# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 124 -# define OSSL_STORE_F_FILE_NAME_TO_URI 126 -# define OSSL_STORE_F_FILE_OPEN 120 -# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 127 -# define OSSL_STORE_F_OSSL_STORE_EXPECT 130 -# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 128 -# define OSSL_STORE_F_OSSL_STORE_FIND 131 -# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 100 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 101 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 102 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 103 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 135 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 104 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 105 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 106 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 107 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 123 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 109 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 110 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 111 -# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 134 -# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 112 -# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 113 -# define OSSL_STORE_F_OSSL_STORE_OPEN 114 -# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 115 -# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 117 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 132 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 133 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 136 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 137 -# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 116 -# define OSSL_STORE_F_TRY_DECODE_PARAMS 121 -# define OSSL_STORE_F_TRY_DECODE_PKCS12 122 -# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 125 /* * OSSL_STORE reason codes. @@ -75,9 +31,11 @@ int ERR_load_OSSL_STORE_strings(void); # define OSSL_STORE_R_LOADING_STARTED 117 # define OSSL_STORE_R_NOT_A_CERTIFICATE 100 # define OSSL_STORE_R_NOT_A_CRL 101 -# define OSSL_STORE_R_NOT_A_KEY 102 # define OSSL_STORE_R_NOT_A_NAME 103 +# define OSSL_STORE_R_NOT_A_PRIVATE_KEY 102 +# define OSSL_STORE_R_NOT_A_PUBLIC_KEY 122 # define OSSL_STORE_R_NOT_PARAMETERS 104 +# define OSSL_STORE_R_NO_LOADERS_FOUND 123 # define OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR 114 # define OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE 108 # define OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 119 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/symhacks.h b/deps/openssl/android/x86/usr/local/include/openssl/symhacks.h index 156ea6e4..816f8f99 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/symhacks.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/symhacks.h @@ -1,14 +1,20 @@ /* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SYMHACKS_H -# define HEADER_SYMHACKS_H +#ifndef OPENSSL_SYMHACKS_H +# define OPENSSL_SYMHACKS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SYMHACKS_H +# endif # include @@ -28,10 +34,6 @@ # undef i2d_ECPKPARAMETERS # define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS -/* This one clashes with CMS_data_create */ -# undef cms_Data_create -# define cms_Data_create priv_cms_Data_create - # endif #endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/tls1.h b/deps/openssl/android/x86/usr/local/include/openssl/tls1.h index 76d9fda4..793155e1 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/tls1.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/tls1.h @@ -1,19 +1,26 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TLS1_H -# define HEADER_TLS1_H +#ifndef OPENSSL_TLS1_H +# define OPENSSL_TLS1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TLS1_H +# endif # include # include +# include #ifdef __cplusplus extern "C" { @@ -24,11 +31,10 @@ extern "C" { # define OPENSSL_TLS_SECURITY_LEVEL 1 # endif -# define TLS1_VERSION 0x0301 -# define TLS1_1_VERSION 0x0302 -# define TLS1_2_VERSION 0x0303 -# define TLS1_3_VERSION 0x0304 -# define TLS_MAX_VERSION TLS1_3_VERSION +/* TLS*_VERSION constants are defined in prov_ssl.h */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TLS_MAX_VERSION TLS1_3_VERSION +# endif /* Special value for method supporting multiple versions */ # define TLS_ANY_VERSION 0x10000 @@ -107,9 +113,6 @@ extern "C" { /* ExtensionType value from RFC5764 */ # define TLSEXT_TYPE_use_srtp 14 -/* ExtensionType value from RFC5620 */ -# define TLSEXT_TYPE_heartbeat 15 - /* ExtensionType value from RFC7301 */ # define TLSEXT_TYPE_application_layer_protocol_negotiation 16 @@ -322,38 +325,14 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define SSL_CTX_get_tlsext_status_type(ssl) \ SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) -# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,\ (void (*)(void))cb) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_DTLSEXT_HB_ENABLED 0x01 -# define SSL_DTLSEXT_HB_DONT_SEND_REQUESTS 0x02 -# define SSL_DTLSEXT_HB_DONT_RECV_REQUESTS 0x04 -# define SSL_get_dtlsext_heartbeat_pending(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) -# define SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT \ - SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT -# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING \ - SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING -# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS \ - SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS -# define SSL_TLSEXT_HB_ENABLED \ - SSL_DTLSEXT_HB_ENABLED -# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS \ - SSL_DTLSEXT_HB_DONT_SEND_REQUESTS -# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS \ - SSL_DTLSEXT_HB_DONT_RECV_REQUESTS -# define SSL_get_tlsext_heartbeat_pending(ssl) \ - SSL_get_dtlsext_heartbeat_pending(ssl) -# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ - SSL_set_dtlsext_heartbeat_no_requests(ssl,arg) -# endif # endif +int SSL_CTX_set_tlsext_ticket_key_evp_cb + (SSL_CTX *ctx, int (*fp)(SSL *, unsigned char *, unsigned char *, + EVP_CIPHER_CTX *, EVP_MAC_CTX *, int)); /* PSK ciphersuites from 4279 */ # define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A @@ -1135,14 +1114,21 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define TLS_CT_RSA_FIXED_ECDH 65 # define TLS_CT_ECDSA_FIXED_ECDH 66 # define TLS_CT_GOST01_SIGN 22 -# define TLS_CT_GOST12_SIGN 238 -# define TLS_CT_GOST12_512_SIGN 239 +# define TLS_CT_GOST12_IANA_SIGN 67 +# define TLS_CT_GOST12_IANA_512_SIGN 68 +# define TLS_CT_GOST12_LEGACY_SIGN 238 +# define TLS_CT_GOST12_LEGACY_512_SIGN 239 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TLS_CT_GOST12_SIGN TLS_CT_GOST12_LEGACY_SIGN +# define TLS_CT_GOST12_512_SIGN TLS_CT_GOST12_LEGACY_512_SIGN +# endif /* * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see * comment there) */ -# define TLS_CT_NUMBER 10 +# define TLS_CT_NUMBER 12 # if defined(SSL3_CT_NUMBER) # if TLS_CT_NUMBER != SSL3_CT_NUMBER @@ -1152,78 +1138,35 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define TLS1_FINISH_MAC_LENGTH 12 -# define TLS_MD_MAX_CONST_SIZE 22 -# define TLS_MD_CLIENT_FINISH_CONST "client finished" -# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 -# define TLS_MD_SERVER_FINISH_CONST "server finished" -# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 -# define TLS_MD_KEY_EXPANSION_CONST "key expansion" -# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 -# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" -# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" -# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_IV_BLOCK_CONST "IV block" -# define TLS_MD_IV_BLOCK_CONST_SIZE 8 -# define TLS_MD_MASTER_SECRET_CONST "master secret" -# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "extended master secret" -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 +# define TLS_MD_MAX_CONST_SIZE 22 -# ifdef CHARSET_EBCDIC -# undef TLS_MD_CLIENT_FINISH_CONST -/* - * client finished - */ -# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_FINISH_CONST -/* - * server finished - */ -# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_KEY_EXPANSION_CONST -/* - * key expansion - */ -# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" - -# undef TLS_MD_CLIENT_WRITE_KEY_CONST -/* - * client write key - */ -# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_IV_BLOCK_CONST -/* - * IV block - */ -# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" - -# undef TLS_MD_MASTER_SECRET_CONST -/* - * master secret - */ -# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# undef TLS_MD_EXTENDED_MASTER_SECRET_CONST -/* - * extended master secret - */ -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# endif +/* ASCII: "client finished", in hex for EBCDIC compatibility */ +# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" +# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 +/* ASCII: "server finished", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" +# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 +/* ASCII: "server write key", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "key expansion", in hex for EBCDIC compatibility */ +# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" +# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 +/* ASCII: "client write key", in hex for EBCDIC compatibility */ +# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "server write key", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "IV block", in hex for EBCDIC compatibility */ +# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" +# define TLS_MD_IV_BLOCK_CONST_SIZE 8 +/* ASCII: "master secret", in hex for EBCDIC compatibility */ +# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 +/* ASCII: "extended master secret", in hex for EBCDIC compatibility */ +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 /* TLS Session Ticket extension struct */ struct tls_session_ticket_ext_st { diff --git a/deps/openssl/android/x86/usr/local/include/openssl/trace.h b/deps/openssl/android/x86/usr/local/include/openssl/trace.h new file mode 100644 index 00000000..97e13857 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/trace.h @@ -0,0 +1,312 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_TRACE_H +# define OPENSSL_TRACE_H +# pragma once + +# include + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * TRACE CATEGORIES + */ + +/* + * The trace messages of the OpenSSL libraries are organized into different + * categories. For every trace category, the application can register a separate + * tracer callback. When a callback is registered, a so called trace channel is + * created for this category. This channel consists essentially of an internal + * BIO which sends all trace output it receives to the registered application + * callback. + * + * The ALL category can be used as a fallback category to register a single + * channel which receives the output from all categories. However, if the + * application intends to print the trace channel name in the line prefix, + * it is better to register channels for all categories separately. + * (This is how the openssl application does it.) + */ +# define OSSL_TRACE_CATEGORY_ALL 0 /* The fallback */ +# define OSSL_TRACE_CATEGORY_TRACE 1 +# define OSSL_TRACE_CATEGORY_INIT 2 +# define OSSL_TRACE_CATEGORY_TLS 3 +# define OSSL_TRACE_CATEGORY_TLS_CIPHER 4 +# define OSSL_TRACE_CATEGORY_CONF 5 +# define OSSL_TRACE_CATEGORY_ENGINE_TABLE 6 +# define OSSL_TRACE_CATEGORY_ENGINE_REF_COUNT 7 +# define OSSL_TRACE_CATEGORY_PKCS5V2 8 +# define OSSL_TRACE_CATEGORY_PKCS12_KEYGEN 9 +# define OSSL_TRACE_CATEGORY_PKCS12_DECRYPT 10 +# define OSSL_TRACE_CATEGORY_X509V3_POLICY 11 +# define OSSL_TRACE_CATEGORY_BN_CTX 12 +# define OSSL_TRACE_CATEGORY_CMP 13 +# define OSSL_TRACE_CATEGORY_STORE 14 +# define OSSL_TRACE_CATEGORY_DECODER 15 +# define OSSL_TRACE_CATEGORY_ENCODER 16 +# define OSSL_TRACE_CATEGORY_REF_COUNT 17 +# define OSSL_TRACE_CATEGORY_HTTP 18 +/* Count of available categories. */ +# define OSSL_TRACE_CATEGORY_NUM 19 +/* KEEP THIS LIST IN SYNC with trace_categories[] in crypto/trace.c */ + +/* Returns the trace category number for the given |name| */ +int OSSL_trace_get_category_num(const char *name); + +/* Returns the trace category name for the given |num| */ +const char *OSSL_trace_get_category_name(int num); + +/* + * TRACE CONSUMERS + */ + +/* + * Enables tracing for the given |category| by providing a BIO sink + * as |channel|. If a null pointer is passed as |channel|, an existing + * trace channel is removed and tracing for the category is disabled. + * + * Returns 1 on success and 0 on failure + */ +int OSSL_trace_set_channel(int category, BIO* channel); + +/* + * Attach a prefix and a suffix to the given |category|, to be printed at the + * beginning and at the end of each trace output group, i.e. when + * OSSL_trace_begin() and OSSL_trace_end() are called. + * If a null pointer is passed as argument, the existing prefix or suffix is + * removed. + * + * They return 1 on success and 0 on failure + */ +int OSSL_trace_set_prefix(int category, const char *prefix); +int OSSL_trace_set_suffix(int category, const char *suffix); + +/* + * OSSL_trace_cb is the type tracing callback provided by the application. + * It MUST return the number of bytes written, or 0 on error (in other words, + * it can never write zero bytes). + * + * The |buffer| will always contain text, which may consist of several lines. + * The |data| argument points to whatever data was provided by the application + * when registering the tracer function. + * + * The |category| number is given, as well as a |cmd| number, described below. + */ +typedef size_t (*OSSL_trace_cb)(const char *buffer, size_t count, + int category, int cmd, void *data); +/* + * Possible |cmd| numbers. + */ +# define OSSL_TRACE_CTRL_BEGIN 0 +# define OSSL_TRACE_CTRL_WRITE 1 +# define OSSL_TRACE_CTRL_END 2 + +/* + * Enables tracing for the given |category| by creating an internal + * trace channel which sends the output to the given |callback|. + * If a null pointer is passed as callback, an existing trace channel + * is removed and tracing for the category is disabled. + * + * NOTE: OSSL_trace_set_channel() and OSSL_trace_set_callback() are mutually + * exclusive. + * + * Returns 1 on success and 0 on failure + */ +int OSSL_trace_set_callback(int category, OSSL_trace_cb callback, void *data); + +/* + * TRACE PRODUCERS + */ + +/* + * Returns 1 if tracing for the specified category is enabled, otherwise 0 + */ +int OSSL_trace_enabled(int category); + +/* + * Wrap a group of tracing output calls. OSSL_trace_begin() locks tracing and + * returns the trace channel associated with the given category, or NULL if no + * channel is associated with the category. OSSL_trace_end() unlocks tracing. + * + * Usage: + * + * BIO *out; + * if ((out = OSSL_trace_begin(category)) != NULL) { + * ... + * BIO_fprintf(out, ...); + * ... + * OSSL_trace_end(category, out); + * } + * + * See also the convenience macros OSSL_TRACE_BEGIN and OSSL_TRACE_END below. + */ +BIO *OSSL_trace_begin(int category); +void OSSL_trace_end(int category, BIO *channel); + +/* + * OSSL_TRACE* Convenience Macros + */ + +/* + * When the tracing feature is disabled, these macros are defined to + * produce dead code, which a good compiler should eliminate. + */ + +/* + * OSSL_TRACE_BEGIN, OSSL_TRACE_END - Define a Trace Group + * + * These two macros can be used to create a block which is executed only + * if the corresponding trace category is enabled. Inside this block, a + * local variable named |trc_out| is defined, which points to the channel + * associated with the given trace category. + * + * Usage: (using 'TLS' as an example category) + * + * OSSL_TRACE_BEGIN(TLS) { + * + * BIO_fprintf(trc_out, ... ); + * + * } OSSL_TRACE_END(TLS); + * + * + * This expands to the following code + * + * do { + * BIO *trc_out = OSSL_trace_begin(OSSL_TRACE_CATEGORY_TLS); + * if (trc_out != NULL) { + * ... + * BIO_fprintf(trc_out, ...); + * } + * OSSL_trace_end(OSSL_TRACE_CATEGORY_TLS, trc_out); + * } while (0); + * + * The use of the inner '{...}' group and the trailing ';' is enforced + * by the definition of the macros in order to make the code look as much + * like C code as possible. + * + * Before returning from inside the trace block, it is necessary to + * call OSSL_TRACE_CANCEL(category). + */ + +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACE_BEGIN(category) \ + do { \ + BIO *trc_out = OSSL_trace_begin(OSSL_TRACE_CATEGORY_##category); \ + \ + if (trc_out != NULL) + +# define OSSL_TRACE_END(category) \ + OSSL_trace_end(OSSL_TRACE_CATEGORY_##category, trc_out); \ + } while (0) + +# define OSSL_TRACE_CANCEL(category) \ + OSSL_trace_end(OSSL_TRACE_CATEGORY_##category, trc_out) \ + +# else + +# define OSSL_TRACE_BEGIN(category) \ + do { \ + BIO *trc_out = NULL; \ + if (0) + +# define OSSL_TRACE_END(category) \ + } while(0) + +# define OSSL_TRACE_CANCEL(category) \ + ((void)0) + +# endif + +/* + * OSSL_TRACE_ENABLED() - Check whether tracing is enabled for |category| + * + * Usage: + * + * if (OSSL_TRACE_ENABLED(TLS)) { + * ... + * } + */ +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACE_ENABLED(category) \ + OSSL_trace_enabled(OSSL_TRACE_CATEGORY_##category) + +# else + +# define OSSL_TRACE_ENABLED(category) (0) + +# endif + +/* + * OSSL_TRACE*() - OneShot Trace Macros + * + * These macros are intended to produce a simple printf-style trace output. + * Unfortunately, C90 macros don't support variable arguments, so the + * "vararg" OSSL_TRACEV() macro has a rather weird usage pattern: + * + * OSSL_TRACEV(category, (trc_out, "format string", ...args...)); + * + * Where 'channel' is the literal symbol of this name, not a variable. + * For that reason, it is currently not intended to be used directly, + * but only as helper macro for the other oneshot trace macros + * OSSL_TRACE(), OSSL_TRACE1(), OSSL_TRACE2(), ... + * + * Usage: + * + * OSSL_TRACE(INIT, "Hello world!\n"); + * OSSL_TRACE1(TLS, "The answer is %d\n", 42); + * OSSL_TRACE2(TLS, "The ultimate question to answer %d is '%s'\n", + * 42, "What do you get when you multiply six by nine?"); + */ + +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACEV(category, args) \ + OSSL_TRACE_BEGIN(category) \ + BIO_printf args; \ + OSSL_TRACE_END(category) + +# else + +# define OSSL_TRACEV(category, args) ((void)0) + +# endif + +# define OSSL_TRACE(category, text) \ + OSSL_TRACEV(category, (trc_out, "%s", text)) + +# define OSSL_TRACE1(category, format, arg1) \ + OSSL_TRACEV(category, (trc_out, format, arg1)) +# define OSSL_TRACE2(category, format, arg1, arg2) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2)) +# define OSSL_TRACE3(category, format, arg1, arg2, arg3) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3)) +# define OSSL_TRACE4(category, format, arg1, arg2, arg3, arg4) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4)) +# define OSSL_TRACE5(category, format, arg1, arg2, arg3, arg4, arg5) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5)) +# define OSSL_TRACE6(category, format, arg1, arg2, arg3, arg4, arg5, arg6) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6)) +# define OSSL_TRACE7(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7)) +# define OSSL_TRACE8(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)) +# define OSSL_TRACE9(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)) + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ts.h b/deps/openssl/android/x86/usr/local/include/openssl/ts.h index 3b58aa52..8ff67332 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ts.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ts.h @@ -1,14 +1,20 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TS_H -# define HEADER_TS_H +#ifndef OPENSSL_TS_H +# define OPENSSL_TS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TS_H +# endif # include @@ -23,13 +29,16 @@ # include # include # include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif # ifdef __cplusplus extern "C" { # endif -# include -# include - typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; typedef struct TS_req_st TS_REQ; typedef struct TS_accuracy_st TS_ACCURACY; @@ -55,126 +64,61 @@ typedef struct TS_tst_info_st TS_TST_INFO; typedef struct TS_status_info_st TS_STATUS_INFO; -typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; -typedef struct ESS_cert_id ESS_CERT_ID; -typedef struct ESS_signing_cert ESS_SIGNING_CERT; - -DEFINE_STACK_OF(ESS_CERT_ID) - -typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; -typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; - -DEFINE_STACK_OF(ESS_CERT_ID_V2) typedef struct TS_resp_st TS_RESP; -TS_REQ *TS_REQ_new(void); -void TS_REQ_free(TS_REQ *a); -int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); -TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); - -TS_REQ *TS_REQ_dup(TS_REQ *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_REQ) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_REQ, TS_REQ) +DECLARE_ASN1_DUP_FUNCTION(TS_REQ) #ifndef OPENSSL_NO_STDIO TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); -int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); +int i2d_TS_REQ_fp(FILE *fp, const TS_REQ *a); #endif TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); -int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); +int i2d_TS_REQ_bio(BIO *fp, const TS_REQ *a); -TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); -void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); -int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, - const unsigned char **pp, long length); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_MSG_IMPRINT) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_MSG_IMPRINT, TS_MSG_IMPRINT) +DECLARE_ASN1_DUP_FUNCTION(TS_MSG_IMPRINT) #ifndef OPENSSL_NO_STDIO TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT_fp(FILE *fp, const TS_MSG_IMPRINT *a); #endif TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT_bio(BIO *bio, const TS_MSG_IMPRINT *a); -TS_RESP *TS_RESP_new(void); -void TS_RESP_free(TS_RESP *a); -int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); -TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); -TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); -TS_RESP *TS_RESP_dup(TS_RESP *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_RESP) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_RESP, TS_RESP) +DECLARE_ASN1_DUP_FUNCTION(TS_RESP) #ifndef OPENSSL_NO_STDIO TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); -int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); +int i2d_TS_RESP_fp(FILE *fp, const TS_RESP *a); #endif TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); -int i2d_TS_RESP_bio(BIO *bio, TS_RESP *a); +int i2d_TS_RESP_bio(BIO *bio, const TS_RESP *a); -TS_STATUS_INFO *TS_STATUS_INFO_new(void); -void TS_STATUS_INFO_free(TS_STATUS_INFO *a); -int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); -TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, - const unsigned char **pp, long length); -TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_STATUS_INFO) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_STATUS_INFO, TS_STATUS_INFO) +DECLARE_ASN1_DUP_FUNCTION(TS_STATUS_INFO) -TS_TST_INFO *TS_TST_INFO_new(void); -void TS_TST_INFO_free(TS_TST_INFO *a); -int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); -TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, - long length); -TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_TST_INFO) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_TST_INFO, TS_TST_INFO) +DECLARE_ASN1_DUP_FUNCTION(TS_TST_INFO) +TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); #ifndef OPENSSL_NO_STDIO TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); -int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); +int i2d_TS_TST_INFO_fp(FILE *fp, const TS_TST_INFO *a); #endif TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO **a); -int i2d_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO *a); +int i2d_TS_TST_INFO_bio(BIO *bio, const TS_TST_INFO *a); -TS_ACCURACY *TS_ACCURACY_new(void); -void TS_ACCURACY_free(TS_ACCURACY *a); -int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); -TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, - long length); -TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); - -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); -void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); -int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); -ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, - const unsigned char **pp, - long length); -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); - -ESS_CERT_ID *ESS_CERT_ID_new(void); -void ESS_CERT_ID_free(ESS_CERT_ID *a); -int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); -ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, - long length); -ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); - -ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); -void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); -int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); -ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, - const unsigned char **pp, long length); -ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); - -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_new(void); -void ESS_CERT_ID_V2_free(ESS_CERT_ID_V2 *a); -int i2d_ESS_CERT_ID_V2(const ESS_CERT_ID_V2 *a, unsigned char **pp); -ESS_CERT_ID_V2 *d2i_ESS_CERT_ID_V2(ESS_CERT_ID_V2 **a, - const unsigned char **pp, long length); -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_dup(ESS_CERT_ID_V2 *a); - -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_new(void); -void ESS_SIGNING_CERT_V2_free(ESS_SIGNING_CERT_V2 *a); -int i2d_ESS_SIGNING_CERT_V2(const ESS_SIGNING_CERT_V2 *a, unsigned char **pp); -ESS_SIGNING_CERT_V2 *d2i_ESS_SIGNING_CERT_V2(ESS_SIGNING_CERT_V2 **a, - const unsigned char **pp, - long length); -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_dup(ESS_SIGNING_CERT_V2 *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_ACCURACY) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_ACCURACY, TS_ACCURACY) +DECLARE_ASN1_DUP_FUNCTION(TS_ACCURACY) int TS_REQ_set_version(TS_REQ *a, long version); long TS_REQ_get_version(const TS_REQ *a); @@ -322,10 +266,9 @@ typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, typedef struct TS_resp_ctx TS_RESP_CTX; -DEFINE_STACK_OF_CONST(EVP_MD) - /* Creates a response context that can be used for generating responses. */ TS_RESP_CTX *TS_RESP_CTX_new(void); +TS_RESP_CTX *TS_RESP_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); void TS_RESP_CTX_free(TS_RESP_CTX *ctx); /* This parameter must be set. */ @@ -479,7 +422,10 @@ BIO *TS_VERIFY_CTX_set_data(TS_VERIFY_CTX *ctx, BIO *b); unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, unsigned char *hexstr, long len); X509_STORE *TS_VERIFY_CTX_set_store(TS_VERIFY_CTX *ctx, X509_STORE *s); -STACK_OF(X509) *TS_VERIFY_CTS_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TS_VERIFY_CTS_set_certs(ctx, cert) TS_VERIFY_CTX_set_certs(ctx,cert) +# endif +STACK_OF(X509) *TS_VERIFY_CTX_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); /*- * If ctx is NULL, it allocates and returns a new object, otherwise @@ -543,7 +489,7 @@ int TS_CONF_set_def_policy(CONF *conf, const char *section, int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, +int TS_CONF_set_clock_precision_digits(const CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/tserr.h b/deps/openssl/android/x86/usr/local/include/openssl/tserr.h index 07f23339..e1b943e4 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/tserr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/tserr.h @@ -1,89 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TSERR_H -# define HEADER_TSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_TSERR_H +# define OPENSSL_TSERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_TS -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_TS_strings(void); - -/* - * TS function codes. - */ -# define TS_F_DEF_SERIAL_CB 110 -# define TS_F_DEF_TIME_CB 111 -# define TS_F_ESS_ADD_SIGNING_CERT 112 -# define TS_F_ESS_ADD_SIGNING_CERT_V2 147 -# define TS_F_ESS_CERT_ID_NEW_INIT 113 -# define TS_F_ESS_CERT_ID_V2_NEW_INIT 156 -# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 -# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 157 -# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 -# define TS_F_PKCS7_TO_TS_TST_INFO 148 -# define TS_F_TS_ACCURACY_SET_MICROS 115 -# define TS_F_TS_ACCURACY_SET_MILLIS 116 -# define TS_F_TS_ACCURACY_SET_SECONDS 117 -# define TS_F_TS_CHECK_IMPRINTS 100 -# define TS_F_TS_CHECK_NONCES 101 -# define TS_F_TS_CHECK_POLICY 102 -# define TS_F_TS_CHECK_SIGNING_CERTS 103 -# define TS_F_TS_CHECK_STATUS_INFO 104 -# define TS_F_TS_COMPUTE_IMPRINT 145 -# define TS_F_TS_CONF_INVALID 151 -# define TS_F_TS_CONF_LOAD_CERT 153 -# define TS_F_TS_CONF_LOAD_CERTS 154 -# define TS_F_TS_CONF_LOAD_KEY 155 -# define TS_F_TS_CONF_LOOKUP_FAIL 152 -# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 -# define TS_F_TS_GET_STATUS_TEXT 105 -# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 -# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 -# define TS_F_TS_REQ_SET_NONCE 120 -# define TS_F_TS_REQ_SET_POLICY_ID 121 -# define TS_F_TS_RESP_CREATE_RESPONSE 122 -# define TS_F_TS_RESP_CREATE_TST_INFO 123 -# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 -# define TS_F_TS_RESP_CTX_ADD_MD 125 -# define TS_F_TS_RESP_CTX_ADD_POLICY 126 -# define TS_F_TS_RESP_CTX_NEW 127 -# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 -# define TS_F_TS_RESP_CTX_SET_CERTS 129 -# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 -# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 -# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 -# define TS_F_TS_RESP_GET_POLICY 133 -# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 -# define TS_F_TS_RESP_SET_STATUS_INFO 135 -# define TS_F_TS_RESP_SET_TST_INFO 150 -# define TS_F_TS_RESP_SIGN 136 -# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 -# define TS_F_TS_TST_INFO_SET_ACCURACY 137 -# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 -# define TS_F_TS_TST_INFO_SET_NONCE 139 -# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 -# define TS_F_TS_TST_INFO_SET_SERIAL 141 -# define TS_F_TS_TST_INFO_SET_TIME 142 -# define TS_F_TS_TST_INFO_SET_TSA 143 -# define TS_F_TS_VERIFY 108 -# define TS_F_TS_VERIFY_CERT 109 -# define TS_F_TS_VERIFY_CTX_NEW 144 /* * TS reason codes. diff --git a/deps/openssl/android/x86/usr/local/include/openssl/txt_db.h b/deps/openssl/android/x86/usr/local/include/openssl/txt_db.h index ec981a43..af169a30 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/txt_db.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/txt_db.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TXT_DB_H -# define HEADER_TXT_DB_H +#ifndef OPENSSL_TXT_DB_H +# define OPENSSL_TXT_DB_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TXT_DB_H +# endif # include # include diff --git a/deps/openssl/android/x86/usr/local/include/openssl/types.h b/deps/openssl/android/x86/usr/local/include/openssl/types.h new file mode 100644 index 00000000..5f9d8c23 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/types.h @@ -0,0 +1,239 @@ +/* + * Copyright 2001-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Unfortunate workaround to avoid symbol conflict with wincrypt.h + * See https://github.com/openssl/openssl/issues/9981 + */ +#ifdef _WIN32 +# define WINCRYPT_USE_SYMBOL_PREFIX +# undef X509_NAME +# undef X509_EXTENSIONS +# undef PKCS7_SIGNER_INFO +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +#endif + +#ifndef OPENSSL_TYPES_H +# define OPENSSL_TYPES_H + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# include +# include +# include + +typedef struct ossl_provider_st OSSL_PROVIDER; /* Provider Object */ + +# ifdef NO_ASN1_TYPEDEFS +# define ASN1_INTEGER ASN1_STRING +# define ASN1_ENUMERATED ASN1_STRING +# define ASN1_BIT_STRING ASN1_STRING +# define ASN1_OCTET_STRING ASN1_STRING +# define ASN1_PRINTABLESTRING ASN1_STRING +# define ASN1_T61STRING ASN1_STRING +# define ASN1_IA5STRING ASN1_STRING +# define ASN1_UTCTIME ASN1_STRING +# define ASN1_GENERALIZEDTIME ASN1_STRING +# define ASN1_TIME ASN1_STRING +# define ASN1_GENERALSTRING ASN1_STRING +# define ASN1_UNIVERSALSTRING ASN1_STRING +# define ASN1_BMPSTRING ASN1_STRING +# define ASN1_VISIBLESTRING ASN1_STRING +# define ASN1_UTF8STRING ASN1_STRING +# define ASN1_BOOLEAN int +# define ASN1_NULL int +# else +typedef struct asn1_string_st ASN1_INTEGER; +typedef struct asn1_string_st ASN1_ENUMERATED; +typedef struct asn1_string_st ASN1_BIT_STRING; +typedef struct asn1_string_st ASN1_OCTET_STRING; +typedef struct asn1_string_st ASN1_PRINTABLESTRING; +typedef struct asn1_string_st ASN1_T61STRING; +typedef struct asn1_string_st ASN1_IA5STRING; +typedef struct asn1_string_st ASN1_GENERALSTRING; +typedef struct asn1_string_st ASN1_UNIVERSALSTRING; +typedef struct asn1_string_st ASN1_BMPSTRING; +typedef struct asn1_string_st ASN1_UTCTIME; +typedef struct asn1_string_st ASN1_TIME; +typedef struct asn1_string_st ASN1_GENERALIZEDTIME; +typedef struct asn1_string_st ASN1_VISIBLESTRING; +typedef struct asn1_string_st ASN1_UTF8STRING; +typedef struct asn1_string_st ASN1_STRING; +typedef int ASN1_BOOLEAN; +typedef int ASN1_NULL; +# endif + +typedef struct asn1_type_st ASN1_TYPE; +typedef struct asn1_object_st ASN1_OBJECT; +typedef struct asn1_string_table_st ASN1_STRING_TABLE; + +typedef struct ASN1_ITEM_st ASN1_ITEM; +typedef struct asn1_pctx_st ASN1_PCTX; +typedef struct asn1_sctx_st ASN1_SCTX; + +# ifdef BIGNUM +# undef BIGNUM +# endif + +typedef struct bio_st BIO; +typedef struct bignum_st BIGNUM; +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; + +typedef struct buf_mem_st BUF_MEM; + +STACK_OF(BIGNUM); +STACK_OF(BIGNUM_const); + +typedef struct err_state_st ERR_STATE; + +typedef struct evp_cipher_st EVP_CIPHER; +typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; +typedef struct evp_md_st EVP_MD; +typedef struct evp_md_ctx_st EVP_MD_CTX; +typedef struct evp_mac_st EVP_MAC; +typedef struct evp_mac_ctx_st EVP_MAC_CTX; +typedef struct evp_pkey_st EVP_PKEY; + +typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; + +typedef struct evp_pkey_method_st EVP_PKEY_METHOD; +typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; + +typedef struct evp_keymgmt_st EVP_KEYMGMT; + +typedef struct evp_kdf_st EVP_KDF; +typedef struct evp_kdf_ctx_st EVP_KDF_CTX; + +typedef struct evp_rand_st EVP_RAND; +typedef struct evp_rand_ctx_st EVP_RAND_CTX; + +typedef struct evp_keyexch_st EVP_KEYEXCH; + +typedef struct evp_signature_st EVP_SIGNATURE; + +typedef struct evp_asym_cipher_st EVP_ASYM_CIPHER; + +typedef struct evp_kem_st EVP_KEM; + +typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; + +typedef struct hmac_ctx_st HMAC_CTX; + +typedef struct dh_st DH; +typedef struct dh_method DH_METHOD; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct dsa_st DSA; +typedef struct dsa_method DSA_METHOD; +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; +# endif +typedef struct rsa_pss_params_st RSA_PSS_PARAMS; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; +# endif + +typedef struct rand_meth_st RAND_METHOD; +typedef struct rand_drbg_st RAND_DRBG; + +typedef struct ssl_dane_st SSL_DANE; +typedef struct x509_st X509; +typedef struct X509_algor_st X509_ALGOR; +typedef struct X509_crl_st X509_CRL; +typedef struct x509_crl_method_st X509_CRL_METHOD; +typedef struct x509_revoked_st X509_REVOKED; +typedef struct X509_name_st X509_NAME; +typedef struct X509_pubkey_st X509_PUBKEY; +typedef struct x509_store_st X509_STORE; +typedef struct x509_store_ctx_st X509_STORE_CTX; + +typedef struct x509_object_st X509_OBJECT; +typedef struct x509_lookup_st X509_LOOKUP; +typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; +typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; + +typedef struct x509_sig_info_st X509_SIG_INFO; + +typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; + +typedef struct v3_ext_ctx X509V3_CTX; +typedef struct conf_st CONF; +typedef struct ossl_init_settings_st OPENSSL_INIT_SETTINGS; + +typedef struct ui_st UI; +typedef struct ui_method_st UI_METHOD; + +typedef struct engine_st ENGINE; +typedef struct ssl_st SSL; +typedef struct ssl_ctx_st SSL_CTX; + +typedef struct comp_ctx_st COMP_CTX; +typedef struct comp_method_st COMP_METHOD; + +typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; +typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; +typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; +typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; + +typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; +typedef struct DIST_POINT_st DIST_POINT; +typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; +typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; + +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; + +typedef struct ossl_http_req_ctx_st OSSL_HTTP_REQ_CTX; +typedef struct ocsp_response_st OCSP_RESPONSE; +typedef struct ocsp_responder_id_st OCSP_RESPID; + +typedef struct sct_st SCT; +typedef struct sct_ctx_st SCT_CTX; +typedef struct ctlog_st CTLOG; +typedef struct ctlog_store_st CTLOG_STORE; +typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; + +typedef struct ossl_store_info_st OSSL_STORE_INFO; +typedef struct ossl_store_search_st OSSL_STORE_SEARCH; + +typedef struct ossl_lib_ctx_st OSSL_LIB_CTX; + +typedef struct ossl_dispatch_st OSSL_DISPATCH; +typedef struct ossl_item_st OSSL_ITEM; +typedef struct ossl_algorithm_st OSSL_ALGORITHM; +typedef struct ossl_param_st OSSL_PARAM; +typedef struct ossl_param_bld_st OSSL_PARAM_BLD; + +typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + +typedef struct ossl_encoder_st OSSL_ENCODER; +typedef struct ossl_encoder_ctx_st OSSL_ENCODER_CTX; +typedef struct ossl_decoder_st OSSL_DECODER; +typedef struct ossl_decoder_ctx_st OSSL_DECODER_CTX; + +typedef struct ossl_self_test_st OSSL_SELF_TEST; + +#ifdef __cplusplus +} +#endif + +#endif /* OPENSSL_TYPES_H */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ui.h b/deps/openssl/android/x86/usr/local/include/openssl/ui.h index 7c721ec8..e64ec3b3 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ui.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ui.h @@ -1,27 +1,38 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ui.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_UI_H -# define HEADER_UI_H + + +#ifndef OPENSSL_UI_H +# define OPENSSL_UI_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_UI_H +# endif # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif # include # include -# include +# include # include /* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ -# if OPENSSL_API_COMPAT < 0x10200000L +# ifndef OPENSSL_NO_DEPRECATED_3_0 # ifdef OPENSSL_NO_UI_CONSOLE # define OPENSSL_NO_UI # endif @@ -132,25 +143,26 @@ int UI_dup_error_string(UI *ui, const char *text); # define UI_INPUT_FLAG_USER_BASE 16 /*- - * The following function helps construct a prompt. object_desc is a - * textual short description of the object, for example "pass phrase", - * and object_name is the name of the object (might be a card name or - * a file name. + * The following function helps construct a prompt. + * phrase_desc is a textual short description of the phrase to enter, + * for example "pass phrase", and + * object_name is the name of the object + * (which might be a card name or a file name) or NULL. * The returned string shall always be allocated on the heap with * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). * * If the ui_method doesn't contain a pointer to a user-defined prompt * constructor, a default string is built, looking like this: * - * "Enter {object_desc} for {object_name}:" + * "Enter {phrase_desc} for {object_name}:" * - * So, if object_desc has the value "pass phrase" and object_name has + * So, if phrase_desc has the value "pass phrase" and object_name has * the value "foo.key", the resulting string is: * * "Enter pass phrase for foo.key:" */ char *UI_construct_prompt(UI *ui_method, - const char *object_desc, const char *object_name); + const char *phrase_desc, const char *object_name); /* * The following function is used to store a pointer to user-specific data. @@ -208,7 +220,7 @@ int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); # define UI_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) int UI_set_ex_data(UI *r, int idx, void *arg); -void *UI_get_ex_data(UI *r, int idx); +void *UI_get_ex_data(const UI *r, int idx); /* Use specific methods instead of the built-in one */ void UI_set_default_method(const UI_METHOD *meth); @@ -277,7 +289,34 @@ const UI_METHOD *UI_null(void); * about a string or a prompt, including test data for a verification prompt. */ typedef struct ui_string_st UI_STRING; -DEFINE_STACK_OF(UI_STRING) + +SKM_DEFINE_STACK_OF_INTERNAL(UI_STRING, UI_STRING, UI_STRING) +#define sk_UI_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_value(sk, idx) ((UI_STRING *)OPENSSL_sk_value(ossl_check_const_UI_STRING_sk_type(sk), (idx))) +#define sk_UI_STRING_new(cmp) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new(ossl_check_UI_STRING_compfunc_type(cmp))) +#define sk_UI_STRING_new_null() ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_null()) +#define sk_UI_STRING_new_reserve(cmp, n) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_reserve(ossl_check_UI_STRING_compfunc_type(cmp), (n))) +#define sk_UI_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_UI_STRING_sk_type(sk), (n)) +#define sk_UI_STRING_free(sk) OPENSSL_sk_free(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_delete(sk, i) ((UI_STRING *)OPENSSL_sk_delete(ossl_check_UI_STRING_sk_type(sk), (i))) +#define sk_UI_STRING_delete_ptr(sk, ptr) ((UI_STRING *)OPENSSL_sk_delete_ptr(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr))) +#define sk_UI_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_pop(sk) ((UI_STRING *)OPENSSL_sk_pop(ossl_check_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_shift(sk) ((UI_STRING *)OPENSSL_sk_shift(ossl_check_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_UI_STRING_sk_type(sk),ossl_check_UI_STRING_freefunc_type(freefunc)) +#define sk_UI_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), (idx)) +#define sk_UI_STRING_set(sk, idx, ptr) ((UI_STRING *)OPENSSL_sk_set(ossl_check_UI_STRING_sk_type(sk), (idx), ossl_check_UI_STRING_type(ptr))) +#define sk_UI_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), pnum) +#define sk_UI_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_dup(sk) ((STACK_OF(UI_STRING) *)OPENSSL_sk_dup(ossl_check_const_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(UI_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_UI_STRING_sk_type(sk), ossl_check_UI_STRING_copyfunc_type(copyfunc), ossl_check_UI_STRING_freefunc_type(freefunc))) +#define sk_UI_STRING_set_cmp_func(sk, cmp) ((sk_UI_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_compfunc_type(cmp))) + /* * The different types of strings that are currently supported. This is only @@ -308,7 +347,7 @@ int UI_method_set_data_duplicator(UI_METHOD *method, int UI_method_set_prompt_constructor(UI_METHOD *method, char *(*prompt_constructor) (UI *ui, const char - *object_desc, + *phrase_desc, const char *object_name)); int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ui.h.in b/deps/openssl/android/x86/usr/local/include/openssl/ui.h.in new file mode 100644 index 00000000..eb9a580f --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/ui.h.in @@ -0,0 +1,384 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_UI_H +# define OPENSSL_UI_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_UI_H +# endif + +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include +# include +# include +# include + +/* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifdef OPENSSL_NO_UI_CONSOLE +# define OPENSSL_NO_UI +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * All the following functions return -1 or NULL on error and in some cases + * (UI_process()) -2 if interrupted or in some other way cancelled. When + * everything is fine, they return 0, a positive value or a non-NULL pointer, + * all depending on their purpose. + */ + +/* Creators and destructor. */ +UI *UI_new(void); +UI *UI_new_method(const UI_METHOD *method); +void UI_free(UI *ui); + +/*- + The following functions are used to add strings to be printed and prompt + strings to prompt for data. The names are UI_{add,dup}__string + and UI_{add,dup}_input_boolean. + + UI_{add,dup}__string have the following meanings: + add add a text or prompt string. The pointers given to these + functions are used verbatim, no copying is done. + dup make a copy of the text or prompt string, then add the copy + to the collection of strings in the user interface. + + The function is a name for the functionality that the given + string shall be used for. It can be one of: + input use the string as data prompt. + verify use the string as verification prompt. This + is used to verify a previous input. + info use the string for informational output. + error use the string for error output. + Honestly, there's currently no difference between info and error for the + moment. + + UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", + and are typically used when one wants to prompt for a yes/no response. + + All of the functions in this group take a UI and a prompt string. + The string input and verify addition functions also take a flag argument, + a buffer for the result to end up with, a minimum input size and a maximum + input size (the result buffer MUST be large enough to be able to contain + the maximum number of characters). Additionally, the verify addition + functions takes another buffer to compare the result against. + The boolean input functions take an action description string (which should + be safe to ignore if the expected user action is obvious, for example with + a dialog box with an OK button and a Cancel button), a string of acceptable + characters to mean OK and to mean Cancel. The two last strings are checked + to make sure they don't have common characters. Additionally, the same + flag argument as for the string input is taken, as well as a result buffer. + The result buffer is required to be at least one byte long. Depending on + the answer, the first character from the OK or the Cancel character strings + will be stored in the first byte of the result buffer. No NUL will be + added, so the result is *not* a string. + + On success, the all return an index of the added information. That index + is useful when retrieving results with UI_get0_result(). */ +int UI_add_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_dup_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_add_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_dup_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_add_info_string(UI *ui, const char *text); +int UI_dup_info_string(UI *ui, const char *text); +int UI_add_error_string(UI *ui, const char *text); +int UI_dup_error_string(UI *ui, const char *text); + +/* These are the possible flags. They can be or'ed together. */ +/* Use to have echoing of input */ +# define UI_INPUT_FLAG_ECHO 0x01 +/* + * Use a default password. Where that password is found is completely up to + * the application, it might for example be in the user data set with + * UI_add_user_data(). It is not recommended to have more than one input in + * each UI being marked with this flag, or the application might get + * confused. + */ +# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 + +/*- + * The user of these routines may want to define flags of their own. The core + * UI won't look at those, but will pass them on to the method routines. They + * must use higher bits so they don't get confused with the UI bits above. + * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good + * example of use is this: + * + * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) + * +*/ +# define UI_INPUT_FLAG_USER_BASE 16 + +/*- + * The following function helps construct a prompt. + * phrase_desc is a textual short description of the phrase to enter, + * for example "pass phrase", and + * object_name is the name of the object + * (which might be a card name or a file name) or NULL. + * The returned string shall always be allocated on the heap with + * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). + * + * If the ui_method doesn't contain a pointer to a user-defined prompt + * constructor, a default string is built, looking like this: + * + * "Enter {phrase_desc} for {object_name}:" + * + * So, if phrase_desc has the value "pass phrase" and object_name has + * the value "foo.key", the resulting string is: + * + * "Enter pass phrase for foo.key:" +*/ +char *UI_construct_prompt(UI *ui_method, + const char *phrase_desc, const char *object_name); + +/* + * The following function is used to store a pointer to user-specific data. + * Any previous such pointer will be returned and replaced. + * + * For callback purposes, this function makes a lot more sense than using + * ex_data, since the latter requires that different parts of OpenSSL or + * applications share the same ex_data index. + * + * Note that the UI_OpenSSL() method completely ignores the user data. Other + * methods may not, however. + */ +void *UI_add_user_data(UI *ui, void *user_data); +/* + * Alternatively, this function is used to duplicate the user data. + * This uses the duplicator method function. The destroy function will + * be used to free the user data in this case. + */ +int UI_dup_user_data(UI *ui, void *user_data); +/* We need a user data retrieving function as well. */ +void *UI_get0_user_data(UI *ui); + +/* Return the result associated with a prompt given with the index i. */ +const char *UI_get0_result(UI *ui, int i); +int UI_get_result_length(UI *ui, int i); + +/* When all strings have been added, process the whole thing. */ +int UI_process(UI *ui); + +/* + * Give a user interface parameterised control commands. This can be used to + * send down an integer, a data pointer or a function pointer, as well as be + * used to get information from a UI. + */ +int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); + +/* The commands */ +/* + * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the + * OpenSSL error stack before printing any info or added error messages and + * before any prompting. + */ +# define UI_CTRL_PRINT_ERRORS 1 +/* + * Check if a UI_process() is possible to do again with the same instance of + * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 + * if not. + */ +# define UI_CTRL_IS_REDOABLE 2 + +/* Some methods may use extra data */ +# define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) +# define UI_get_app_data(s) UI_get_ex_data(s,0) + +# define UI_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) +int UI_set_ex_data(UI *r, int idx, void *arg); +void *UI_get_ex_data(const UI *r, int idx); + +/* Use specific methods instead of the built-in one */ +void UI_set_default_method(const UI_METHOD *meth); +const UI_METHOD *UI_get_default_method(void); +const UI_METHOD *UI_get_method(UI *ui); +const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); + +# ifndef OPENSSL_NO_UI_CONSOLE + +/* The method with all the built-in thingies */ +UI_METHOD *UI_OpenSSL(void); + +# endif + +/* + * NULL method. Literally does nothing, but may serve as a placeholder + * to avoid internal default. + */ +const UI_METHOD *UI_null(void); + +/* ---------- For method writers ---------- */ +/*- + A method contains a number of functions that implement the low level + of the User Interface. The functions are: + + an opener This function starts a session, maybe by opening + a channel to a tty, or by opening a window. + a writer This function is called to write a given string, + maybe to the tty, maybe as a field label in a + window. + a flusher This function is called to flush everything that + has been output so far. It can be used to actually + display a dialog box after it has been built. + a reader This function is called to read a given prompt, + maybe from the tty, maybe from a field in a + window. Note that it's called with all string + structures, not only the prompt ones, so it must + check such things itself. + a closer This function closes the session, maybe by closing + the channel to the tty, or closing the window. + + All these functions are expected to return: + + 0 on error. + 1 on success. + -1 on out-of-band events, for example if some prompting has + been canceled (by pressing Ctrl-C, for example). This is + only checked when returned by the flusher or the reader. + + The way this is used, the opener is first called, then the writer for all + strings, then the flusher, then the reader for all strings and finally the + closer. Note that if you want to prompt from a terminal or other command + line interface, the best is to have the reader also write the prompts + instead of having the writer do it. If you want to prompt from a dialog + box, the writer can be used to build up the contents of the box, and the + flusher to actually display the box and run the event loop until all data + has been given, after which the reader only grabs the given data and puts + them back into the UI strings. + + All method functions take a UI as argument. Additionally, the writer and + the reader take a UI_STRING. +*/ + +/* + * The UI_STRING type is the data structure that contains all the needed info + * about a string or a prompt, including test data for a verification prompt. + */ +typedef struct ui_string_st UI_STRING; + +{- + generate_stack_macros("UI_STRING"); +-} + +/* + * The different types of strings that are currently supported. This is only + * needed by method authors. + */ +enum UI_string_types { + UIT_NONE = 0, + UIT_PROMPT, /* Prompt for a string */ + UIT_VERIFY, /* Prompt for a string and verify */ + UIT_BOOLEAN, /* Prompt for a yes/no response */ + UIT_INFO, /* Send info to the user */ + UIT_ERROR /* Send an error message to the user */ +}; + +/* Create and manipulate methods */ +UI_METHOD *UI_create_method(const char *name); +void UI_destroy_method(UI_METHOD *ui_method); +int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); +int UI_method_set_writer(UI_METHOD *method, + int (*writer) (UI *ui, UI_STRING *uis)); +int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); +int UI_method_set_reader(UI_METHOD *method, + int (*reader) (UI *ui, UI_STRING *uis)); +int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); +int UI_method_set_data_duplicator(UI_METHOD *method, + void *(*duplicator) (UI *ui, void *ui_data), + void (*destructor)(UI *ui, void *ui_data)); +int UI_method_set_prompt_constructor(UI_METHOD *method, + char *(*prompt_constructor) (UI *ui, + const char + *phrase_desc, + const char + *object_name)); +int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); +int (*UI_method_get_opener(const UI_METHOD *method)) (UI *); +int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *); +int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_closer(const UI_METHOD *method)) (UI *); +char *(*UI_method_get_prompt_constructor(const UI_METHOD *method)) + (UI *, const char *, const char *); +void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *); +void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *); +const void *UI_method_get_ex_data(const UI_METHOD *method, int idx); + +/* + * The following functions are helpers for method writers to access relevant + * data from a UI_STRING. + */ + +/* Return type of the UI_STRING */ +enum UI_string_types UI_get_string_type(UI_STRING *uis); +/* Return input flags of the UI_STRING */ +int UI_get_input_flags(UI_STRING *uis); +/* Return the actual string to output (the prompt, info or error) */ +const char *UI_get0_output_string(UI_STRING *uis); +/* + * Return the optional action string to output (the boolean prompt + * instruction) + */ +const char *UI_get0_action_string(UI_STRING *uis); +/* Return the result of a prompt */ +const char *UI_get0_result_string(UI_STRING *uis); +int UI_get_result_string_length(UI_STRING *uis); +/* + * Return the string to test the result against. Only useful with verifies. + */ +const char *UI_get0_test_string(UI_STRING *uis); +/* Return the required minimum size of the result */ +int UI_get_result_minsize(UI_STRING *uis); +/* Return the required maximum size of the result */ +int UI_get_result_maxsize(UI_STRING *uis); +/* Set the result of a UI_STRING. */ +int UI_set_result(UI *ui, UI_STRING *uis, const char *result); +int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len); + +/* A couple of popular utility functions */ +int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, + int verify); +int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, + int verify); +UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/uierr.h b/deps/openssl/android/x86/usr/local/include/openssl/uierr.h index bd68864d..473b04ed 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/uierr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/uierr.h @@ -1,49 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_UIERR_H -# define HEADER_UIERR_H +#ifndef OPENSSL_UIERR_H +# define OPENSSL_UIERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_UI_strings(void); -/* - * UI function codes. - */ -# define UI_F_CLOSE_CONSOLE 115 -# define UI_F_ECHO_CONSOLE 116 -# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 -# define UI_F_GENERAL_ALLOCATE_PROMPT 109 -# define UI_F_NOECHO_CONSOLE 117 -# define UI_F_OPEN_CONSOLE 114 -# define UI_F_UI_CONSTRUCT_PROMPT 121 -# define UI_F_UI_CREATE_METHOD 112 -# define UI_F_UI_CTRL 111 -# define UI_F_UI_DUP_ERROR_STRING 101 -# define UI_F_UI_DUP_INFO_STRING 102 -# define UI_F_UI_DUP_INPUT_BOOLEAN 110 -# define UI_F_UI_DUP_INPUT_STRING 103 -# define UI_F_UI_DUP_USER_DATA 118 -# define UI_F_UI_DUP_VERIFY_STRING 106 -# define UI_F_UI_GET0_RESULT 107 -# define UI_F_UI_GET_RESULT_LENGTH 119 -# define UI_F_UI_NEW_METHOD 104 -# define UI_F_UI_PROCESS 113 -# define UI_F_UI_SET_RESULT 105 -# define UI_F_UI_SET_RESULT_EX 120 /* * UI reason codes. diff --git a/deps/openssl/android/x86/usr/local/include/openssl/whrlpool.h b/deps/openssl/android/x86/usr/local/include/openssl/whrlpool.h index 20ea3503..05ba4632 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/whrlpool.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/whrlpool.h @@ -1,27 +1,36 @@ /* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_WHRLPOOL_H -# define HEADER_WHRLPOOL_H +#ifndef OPENSSL_WHRLPOOL_H +# define OPENSSL_WHRLPOOL_H +# pragma once -#include - -# ifndef OPENSSL_NO_WHIRLPOOL -# include -# include -# ifdef __cplusplus -extern "C" { +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_WHRLPOOL_H # endif -# define WHIRLPOOL_DIGEST_LENGTH (512/8) -# define WHIRLPOOL_BBLOCK 512 -# define WHIRLPOOL_COUNTER (256/8) +# include + +# ifndef OPENSSL_NO_WHIRLPOOL +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define WHIRLPOOL_DIGEST_LENGTH (512/8) + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +# define WHIRLPOOL_BBLOCK 512 +# define WHIRLPOOL_COUNTER (256/8) typedef struct { union { @@ -33,16 +42,21 @@ typedef struct { unsigned int bitoff; size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; } WHIRLPOOL_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, + const void *inp, size_t bytes); +OSSL_DEPRECATEDIN_3_0 void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, + const void *inp, size_t bits); +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *WHIRLPOOL(const void *inp, size_t bytes, + unsigned char *md); +# endif -int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); -int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); -void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); -int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); -unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509.h b/deps/openssl/android/x86/usr/local/include/openssl/x509.h index 3ff86ec7..483cb9d5 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509.h @@ -1,18 +1,29 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509.h.in + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509_H -# define HEADER_X509_H + + +#ifndef OPENSSL_X509_H +# define OPENSSL_X509_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_H +# endif # include -# include +# include # include # include # include @@ -21,7 +32,7 @@ # include # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # include # include @@ -29,11 +40,120 @@ # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { #endif +/* Needed stacks for types defined in other headers */ +SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME) +#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx))) +#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp))) +#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null()) +#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n))) +#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n)) +#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i))) +#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))) +#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc)) +#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx)) +#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr))) +#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum) +#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc))) +#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509) +#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk)) +#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx))) +#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp))) +#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null()) +#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n))) +#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n)) +#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk)) +#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk)) +#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i))) +#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))) +#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk))) +#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk))) +#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc)) +#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx)) +#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr))) +#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum) +#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk)) +#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk)) +#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk))) +#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc))) +#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED) +#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx))) +#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp))) +#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null()) +#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n))) +#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n)) +#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i))) +#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))) +#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc)) +#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx)) +#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr))) +#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum) +#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc))) +#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL) +#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx))) +#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp))) +#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null()) +#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n))) +#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n)) +#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i))) +#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))) +#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc)) +#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx)) +#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr))) +#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum) +#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc))) +#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp))) + /* Flags for X509_get_signature_info() */ /* Signature info is valid */ @@ -72,78 +192,98 @@ typedef struct X509_sig_st X509_SIG; typedef struct X509_name_entry_st X509_NAME_ENTRY; -DEFINE_STACK_OF(X509_NAME_ENTRY) +SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY) +#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx))) +#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp))) +#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null()) +#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n))) +#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n)) +#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i))) +#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))) +#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)) +#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx)) +#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr))) +#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum) +#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))) +#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp))) -DEFINE_STACK_OF(X509_NAME) # define X509_EX_V_NETSCAPE_HACK 0x8000 # define X509_EX_V_INIT 0x0001 typedef struct X509_extension_st X509_EXTENSION; +SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION) +#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx))) +#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp))) +#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null()) +#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n))) +#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n)) +#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i))) +#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))) +#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc)) +#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx)) +#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr))) +#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum) +#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc))) +#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp))) typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; - -DEFINE_STACK_OF(X509_EXTENSION) - typedef struct x509_attributes_st X509_ATTRIBUTE; - -DEFINE_STACK_OF(X509_ATTRIBUTE) +SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE) +#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx))) +#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp))) +#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null()) +#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n))) +#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n)) +#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i))) +#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))) +#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)) +#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx)) +#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr))) +#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum) +#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))) +#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp))) typedef struct X509_req_info_st X509_REQ_INFO; - typedef struct X509_req_st X509_REQ; - typedef struct x509_cert_aux_st X509_CERT_AUX; - typedef struct x509_cinf_st X509_CINF; -DEFINE_STACK_OF(X509) - -/* This is used for a table of trust checking functions */ - -typedef struct x509_trust_st { - int trust; - int flags; - int (*check_trust) (struct x509_trust_st *, X509 *, int); - char *name; - int arg1; - void *arg2; -} X509_TRUST; - -DEFINE_STACK_OF(X509_TRUST) - -/* standard trust ids */ - -# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ - -# define X509_TRUST_COMPAT 1 -# define X509_TRUST_SSL_CLIENT 2 -# define X509_TRUST_SSL_SERVER 3 -# define X509_TRUST_EMAIL 4 -# define X509_TRUST_OBJECT_SIGN 5 -# define X509_TRUST_OCSP_SIGN 6 -# define X509_TRUST_OCSP_REQUEST 7 -# define X509_TRUST_TSA 8 - -/* Keep these up to date! */ -# define X509_TRUST_MIN 1 -# define X509_TRUST_MAX 8 - -/* trust_flags values */ -# define X509_TRUST_DYNAMIC (1U << 0) -# define X509_TRUST_DYNAMIC_NAME (1U << 1) -/* No compat trust if self-signed, preempts "DO_SS" */ -# define X509_TRUST_NO_SS_COMPAT (1U << 2) -/* Compat trust if no explicit accepted trust EKUs */ -# define X509_TRUST_DO_SS_COMPAT (1U << 3) -/* Accept "anyEKU" as a wildcard trust OID */ -# define X509_TRUST_OK_ANY_EKU (1U << 4) - -/* check_trust return codes */ - -# define X509_TRUST_TRUSTED 1 -# define X509_TRUST_REJECTED 2 -# define X509_TRUST_UNTRUSTED 3 - /* Flags for X509_print_ex() */ # define X509_FLAG_COMPAT 0 @@ -160,6 +300,7 @@ DEFINE_STACK_OF(X509_TRUST) # define X509_FLAG_NO_AUX (1L << 10) # define X509_FLAG_NO_ATTRIBUTES (1L << 11) # define X509_FLAG_NO_IDS (1L << 12) +# define X509_FLAG_EXTENSIONS_ONLY_KID (1L << 13) /* Flags specific to X509_NAME_print_ex() */ @@ -221,12 +362,8 @@ DEFINE_STACK_OF(X509_TRUST) XN_FLAG_FN_LN | \ XN_FLAG_FN_ALIGN) -DEFINE_STACK_OF(X509_REVOKED) - typedef struct X509_crl_info_st X509_CRL_INFO; -DEFINE_STACK_OF(X509_CRL) - typedef struct private_key_st { int version; /* The PKCS#8 data types */ @@ -250,8 +387,33 @@ typedef struct X509_info_st { int enc_len; char *enc_data; } X509_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO) +#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx))) +#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp))) +#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null()) +#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n))) +#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n)) +#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i))) +#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))) +#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc)) +#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx)) +#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr))) +#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum) +#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc))) +#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp))) -DEFINE_STACK_OF(X509_INFO) /* * The next 2 structures and their 8 routines are used to manipulate Netscape's @@ -336,7 +498,9 @@ X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), int (*crl_free) (X509_CRL *crl), int (*crl_lookup) (X509_CRL *crl, X509_REVOKED **ret, - ASN1_INTEGER *ser, + const + ASN1_INTEGER *serial, + const X509_NAME *issuer), int (*crl_verify) (X509_CRL *crl, EVP_PKEY *pk)); @@ -348,7 +512,10 @@ void *X509_CRL_get_meth_data(X509_CRL *crl); const char *X509_verify_cert_error_string(long n); int X509_verify(X509 *a, EVP_PKEY *r); +int X509_self_signed(X509 *cert, int verify_signature); +int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx, + const char *propq); int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); @@ -366,22 +533,18 @@ int X509_signature_print(BIO *bp, const X509_ALGOR *alg, int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); -# endif int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); -# endif int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len); +ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert, + EVP_MD **md_used, int *md_is_fallback); int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, @@ -389,89 +552,118 @@ int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, unsigned char *md, unsigned int *len); +X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include /* OSSL_HTTP_REQ_CTX_nbio_d2i */ +# define X509_http_nbio(rctx, pcert) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509)) +# define X509_CRL_http_nbio(rctx, pcrl) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL)) +# endif + # ifndef OPENSSL_NO_STDIO X509 *d2i_X509_fp(FILE *fp, X509 **x509); -int i2d_X509_fp(FILE *fp, X509 *x509); +int i2d_X509_fp(FILE *fp, const X509 *x509); X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); -int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); +int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl); X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); -int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); -int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); +int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa); # endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); -int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); -DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); -int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); -int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); -int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa); +# endif # endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); -int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); +int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk); PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); -int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); -int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); +int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey); EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); # endif X509 *d2i_X509_bio(BIO *bp, X509 **x509); -int i2d_X509_bio(BIO *bp, X509 *x509); +int i2d_X509_bio(BIO *bp, const X509 *x509); X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); -int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); +int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl); X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); -int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); -int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); +int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa); # endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); -int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); -DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); -int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); -int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); -int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa); +# endif # endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); -int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); +int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk); PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); -int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); -int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); +int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey); EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); -X509 *X509_dup(X509 *x509); -X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); -X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); -X509_CRL *X509_CRL_dup(X509_CRL *crl); -X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); -X509_REQ *X509_REQ_dup(X509_REQ *req); -X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); +DECLARE_ASN1_DUP_FUNCTION(X509) +DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR) +DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) +DECLARE_ASN1_DUP_FUNCTION(X509_CRL) +DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION) +DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY) +DECLARE_ASN1_DUP_FUNCTION(X509_REQ) +DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED) int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval); void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, @@ -480,11 +672,13 @@ void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); -X509_NAME *X509_NAME_dup(X509_NAME *xn); -X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); +DECLARE_ASN1_DUP_FUNCTION(X509_NAME) +DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) int X509_cmp_time(const ASN1_TIME *s, time_t *t); int X509_cmp_current_time(const ASN1_TIME *s); +int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm, + const ASN1_TIME *start, const ASN1_TIME *end); ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, int offset_day, long offset_sec, time_t *t); @@ -506,24 +700,27 @@ DECLARE_ASN1_FUNCTIONS(X509_VAL) DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) +X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq); int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); -EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key); -EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key); int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); long X509_get_pathlen(X509 *x); -int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); -EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); -# ifndef OPENSSL_NO_RSA -int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); -RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY) +EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY) # endif -# ifndef OPENSSL_NO_DSA -int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); -DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY) +# endif # endif -# ifndef OPENSSL_NO_EC -int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); -EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY) +# endif # endif DECLARE_ASN1_FUNCTIONS(X509_SIG) @@ -534,6 +731,7 @@ void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) DECLARE_ASN1_FUNCTIONS(X509_REQ) +X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); @@ -545,19 +743,18 @@ DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) DECLARE_ASN1_FUNCTIONS(X509_NAME) -int X509_NAME_set(X509_NAME **xn, X509_NAME *name); +int X509_NAME_set(X509_NAME **xn, const X509_NAME *name); DECLARE_ASN1_FUNCTIONS(X509_CINF) - DECLARE_ASN1_FUNCTIONS(X509) +X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) #define X509_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) int X509_set_ex_data(X509 *r, int idx, void *arg); -void *X509_get_ex_data(X509 *r, int idx); -int i2d_X509_AUX(X509 *a, unsigned char **pp); -X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); +void *X509_get_ex_data(const X509 *r, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX) int i2d_re_X509_tbs(X509 *x, unsigned char **pp); @@ -573,29 +770,24 @@ void X509_get0_signature(const ASN1_BIT_STRING **psig, const X509_ALGOR **palg, const X509 *x); int X509_get_signature_nid(const X509 *x); -int X509_trusted(const X509 *x); +void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x); +void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x); + int X509_alias_set1(X509 *x, const unsigned char *name, int len); int X509_keyid_set1(X509 *x, const unsigned char *id, int len); unsigned char *X509_alias_get0(X509 *x, int *len); unsigned char *X509_keyid_get0(X509 *x, int *len); -int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, - int); -int X509_TRUST_set(int *t, int trust); -int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); -int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); -void X509_trust_clear(X509 *x); -void X509_reject_clear(X509 *x); - -STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); -STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); DECLARE_ASN1_FUNCTIONS(X509_REVOKED) DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) DECLARE_ASN1_FUNCTIONS(X509_CRL) +X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq); int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); int X509_CRL_get0_by_serial(X509_CRL *crl, - X509_REVOKED **ret, ASN1_INTEGER *serial); + X509_REVOKED **ret, const ASN1_INTEGER *serial); int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); X509_PKEY *X509_PKEY_new(void); @@ -609,37 +801,45 @@ X509_INFO *X509_INFO_new(void); void X509_INFO_free(X509_INFO *a); char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); - +OSSL_DEPRECATEDIN_3_0 int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, unsigned char *md, unsigned int *len); - -int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - char *data, EVP_PKEY *pkey, const EVP_MD *type); - +OSSL_DEPRECATEDIN_3_0 +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey, + const EVP_MD *type); +#endif int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, unsigned char *md, unsigned int *len); - -int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); - -int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, - EVP_PKEY *pkey, const EVP_MD *type); +int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey); +int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_MD_CTX *ctx); +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey, const EVP_MD *md); int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - void *asn, EVP_MD_CTX *ctx); + const void *data, EVP_MD_CTX *ctx); + +#define X509_VERSION_1 0 +#define X509_VERSION_2 1 +#define X509_VERSION_3 2 long X509_get_version(const X509 *x); int X509_set_version(X509 *x, long version); int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); ASN1_INTEGER *X509_get_serialNumber(X509 *x); const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); -int X509_set_issuer_name(X509 *x, X509_NAME *name); +int X509_set_issuer_name(X509 *x, const X509_NAME *name); X509_NAME *X509_get_issuer_name(const X509 *a); -int X509_set_subject_name(X509 *x, X509_NAME *name); +int X509_set_subject_name(X509 *x, const X509_NAME *name); X509_NAME *X509_get_subject_name(const X509 *a); const ASN1_TIME * X509_get0_notBefore(const X509 *x); ASN1_TIME *X509_getm_notBefore(const X509 *x); @@ -651,7 +851,7 @@ int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); int X509_up_ref(X509 *x); int X509_get_signature_type(const X509 *x); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_get_notBefore X509_getm_notBefore # define X509_get_notAfter X509_getm_notAfter # define X509_set_notBefore X509_set1_notBefore @@ -672,12 +872,13 @@ const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); EVP_PKEY *X509_get0_pubkey(const X509 *x); EVP_PKEY *X509_get_pubkey(X509 *x); ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); -int X509_certificate_type(const X509 *x, const EVP_PKEY *pubkey); + +#define X509_REQ_VERSION_1 0 long X509_REQ_get_version(const X509_REQ *req); int X509_REQ_set_version(X509_REQ *x, long version); X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); -int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); +int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name); void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, const X509_ALGOR **palg); void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig); @@ -692,9 +893,9 @@ int X509_REQ_extension_nid(int nid); int *X509_REQ_get_extension_nids(void); void X509_REQ_set_extension_nids(int *nids); STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); -int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, - int nid); -int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); +int X509_REQ_add_extensions_nid(X509_REQ *req, + const STACK_OF(X509_EXTENSION) *exts, int nid); +int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext); int X509_REQ_get_attr_count(const X509_REQ *req); int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, @@ -712,14 +913,17 @@ int X509_REQ_add1_attr_by_txt(X509_REQ *req, const char *attrname, int type, const unsigned char *bytes, int len); +#define X509_CRL_VERSION_1 0 +#define X509_CRL_VERSION_2 1 + int X509_CRL_set_version(X509_CRL *x, long version); -int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); +int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name); int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); int X509_CRL_sort(X509_CRL *crl); int X509_CRL_up_ref(X509_CRL *crl); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate # define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate #endif @@ -727,8 +931,10 @@ int X509_CRL_up_ref(X509_CRL *crl); long X509_CRL_get_version(const X509_CRL *crl); const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)) -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)) +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl); +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl); +#endif X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); @@ -770,10 +976,24 @@ unsigned long X509_issuer_name_hash_old(X509 *a); unsigned long X509_subject_name_hash_old(X509 *x); # endif +# define X509_ADD_FLAG_DEFAULT 0 +# define X509_ADD_FLAG_UP_REF 0x1 +# define X509_ADD_FLAG_PREPEND 0x2 +# define X509_ADD_FLAG_NO_DUP 0x4 +# define X509_ADD_FLAG_NO_SS 0x8 +int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags); +int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags); + int X509_cmp(const X509 *a, const X509 *b); int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); -unsigned long X509_NAME_hash(X509_NAME *x); -unsigned long X509_NAME_hash_old(X509_NAME *x); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL) +OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x, + const EVP_PKEY *pubkey); +#endif +unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx, + const char *propq, int *ok); +unsigned long X509_NAME_hash_old(const X509_NAME *x); int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); @@ -802,16 +1022,17 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, int X509_REQ_print(BIO *bp, X509_REQ *req); int X509_NAME_entry_count(const X509_NAME *name); -int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); -int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, +int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid, + char *buf, int len); +int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, char *buf, int len); /* * NOTE: you should be passing -1, not 0 as lastpos. The functions that use * lastpos, search after that position on. */ -int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); -int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, +int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, int lastpos); X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); @@ -845,7 +1066,7 @@ ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); -int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder, +int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder, size_t *pderlen); int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); @@ -972,12 +1193,10 @@ int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, const char *attrname, int type, const unsigned char *bytes, int len); -int X509_verify_cert(X509_STORE_CTX *ctx); - /* lookup a cert from a X509 STACK */ -X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, - ASN1_INTEGER *serial); -X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name, + const ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name); DECLARE_ASN1_FUNCTIONS(PBEPARAM) DECLARE_ASN1_FUNCTIONS(PBE2PARAM) @@ -988,14 +1207,25 @@ DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, const unsigned char *salt, int saltlen); +int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); X509_ALGOR *PKCS5_pbe_set(int alg, int iter, const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, unsigned char *salt, int saltlen); X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, unsigned char *salt, int saltlen, unsigned char *aiv, int prf_nid); +X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid, + OSSL_LIB_CTX *libctx); #ifndef OPENSSL_NO_SCRYPT X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, @@ -1006,13 +1236,18 @@ X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, int prf_nid, int keylen); +X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen, + OSSL_LIB_CTX *libctx); /* PKCS#8 utilities */ DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); -PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); +EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey); int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, int version, int ptype, void *pval, @@ -1023,26 +1258,20 @@ int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, const STACK_OF(X509_ATTRIBUTE) * PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr); int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, const unsigned char *bytes, int len); +int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj, + int type, const unsigned char *bytes, int len); + int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, int ptype, void *pval, unsigned char *penc, int penclen); int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, const unsigned char **pk, int *ppklen, - X509_ALGOR **pa, X509_PUBKEY *pub); - -int X509_check_trust(X509 *x, int id, int flags); -int X509_TRUST_get_count(void); -X509_TRUST *X509_TRUST_get0(int idx); -int X509_TRUST_get_by_id(int id); -int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), - const char *name, int arg1, void *arg2); -void X509_TRUST_cleanup(void); -int X509_TRUST_get_flags(const X509_TRUST *xp); -char *X509_TRUST_get0_name(const X509_TRUST *xp); -int X509_TRUST_get_trust(const X509_TRUST *xp); + X509_ALGOR **pa, const X509_PUBKEY *pub); +int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b); # ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509.h.in b/deps/openssl/android/x86/usr/local/include/openssl/x509.h.in new file mode 100644 index 00000000..d4df2adc --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509.h.in @@ -0,0 +1,1085 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509_H +# define OPENSSL_X509_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_H +# endif + +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# endif + +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Needed stacks for types defined in other headers */ +{- + generate_stack_macros("X509_NAME") + .generate_stack_macros("X509") + .generate_stack_macros("X509_REVOKED") + .generate_stack_macros("X509_CRL"); +-} + +/* Flags for X509_get_signature_info() */ +/* Signature info is valid */ +# define X509_SIG_INFO_VALID 0x1 +/* Signature is suitable for TLS use */ +# define X509_SIG_INFO_TLS 0x2 + +# define X509_FILETYPE_PEM 1 +# define X509_FILETYPE_ASN1 2 +# define X509_FILETYPE_DEFAULT 3 + +# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 +# define X509v3_KU_NON_REPUDIATION 0x0040 +# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 +# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 +# define X509v3_KU_KEY_AGREEMENT 0x0008 +# define X509v3_KU_KEY_CERT_SIGN 0x0004 +# define X509v3_KU_CRL_SIGN 0x0002 +# define X509v3_KU_ENCIPHER_ONLY 0x0001 +# define X509v3_KU_DECIPHER_ONLY 0x8000 +# define X509v3_KU_UNDEF 0xffff + +struct X509_algor_st { + ASN1_OBJECT *algorithm; + ASN1_TYPE *parameter; +} /* X509_ALGOR */ ; + +typedef STACK_OF(X509_ALGOR) X509_ALGORS; + +typedef struct X509_val_st { + ASN1_TIME *notBefore; + ASN1_TIME *notAfter; +} X509_VAL; + +typedef struct X509_sig_st X509_SIG; + +typedef struct X509_name_entry_st X509_NAME_ENTRY; + +{- + generate_stack_macros("X509_NAME_ENTRY"); +-} + +# define X509_EX_V_NETSCAPE_HACK 0x8000 +# define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st X509_EXTENSION; +{- + generate_stack_macros("X509_EXTENSION"); +-} +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; +typedef struct x509_attributes_st X509_ATTRIBUTE; +{- + generate_stack_macros("X509_ATTRIBUTE"); +-} +typedef struct X509_req_info_st X509_REQ_INFO; +typedef struct X509_req_st X509_REQ; +typedef struct x509_cert_aux_st X509_CERT_AUX; +typedef struct x509_cinf_st X509_CINF; + +/* Flags for X509_print_ex() */ + +# define X509_FLAG_COMPAT 0 +# define X509_FLAG_NO_HEADER 1L +# define X509_FLAG_NO_VERSION (1L << 1) +# define X509_FLAG_NO_SERIAL (1L << 2) +# define X509_FLAG_NO_SIGNAME (1L << 3) +# define X509_FLAG_NO_ISSUER (1L << 4) +# define X509_FLAG_NO_VALIDITY (1L << 5) +# define X509_FLAG_NO_SUBJECT (1L << 6) +# define X509_FLAG_NO_PUBKEY (1L << 7) +# define X509_FLAG_NO_EXTENSIONS (1L << 8) +# define X509_FLAG_NO_SIGDUMP (1L << 9) +# define X509_FLAG_NO_AUX (1L << 10) +# define X509_FLAG_NO_ATTRIBUTES (1L << 11) +# define X509_FLAG_NO_IDS (1L << 12) +# define X509_FLAG_EXTENSIONS_ONLY_KID (1L << 13) + +/* Flags specific to X509_NAME_print_ex() */ + +/* The field separator information */ + +# define XN_FLAG_SEP_MASK (0xf << 16) + +# define XN_FLAG_COMPAT 0/* Traditional; use old X509_NAME_print */ +# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ +# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ +# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ +# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ + +# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ + +/* How the field name is shown */ + +# define XN_FLAG_FN_MASK (0x3 << 21) + +# define XN_FLAG_FN_SN 0/* Object short name */ +# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ +# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ +# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ + +# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ + +/* + * This determines if we dump fields we don't recognise: RFC2253 requires + * this. + */ + +# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) + +# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 + * characters */ + +/* Complete set of RFC2253 flags */ + +# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ + XN_FLAG_SEP_COMMA_PLUS | \ + XN_FLAG_DN_REV | \ + XN_FLAG_FN_SN | \ + XN_FLAG_DUMP_UNKNOWN_FIELDS) + +/* readable oneline form */ + +# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ + ASN1_STRFLGS_ESC_QUOTE | \ + XN_FLAG_SEP_CPLUS_SPC | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_SN) + +/* readable multiline form */ + +# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + XN_FLAG_SEP_MULTILINE | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_LN | \ + XN_FLAG_FN_ALIGN) + +typedef struct X509_crl_info_st X509_CRL_INFO; + +typedef struct private_key_st { + int version; + /* The PKCS#8 data types */ + X509_ALGOR *enc_algor; + ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ + /* When decrypted, the following will not be NULL */ + EVP_PKEY *dec_pkey; + /* used to encrypt and decrypt */ + int key_length; + char *key_data; + int key_free; /* true if we should auto free key_data */ + /* expanded version of 'enc_algor' */ + EVP_CIPHER_INFO cipher; +} X509_PKEY; + +typedef struct X509_info_st { + X509 *x509; + X509_CRL *crl; + X509_PKEY *x_pkey; + EVP_CIPHER_INFO enc_cipher; + int enc_len; + char *enc_data; +} X509_INFO; +{- + generate_stack_macros("X509_INFO"); +-} + +/* + * The next 2 structures and their 8 routines are used to manipulate Netscape's + * spki structures - useful if you are writing a CA web page + */ +typedef struct Netscape_spkac_st { + X509_PUBKEY *pubkey; + ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ +} NETSCAPE_SPKAC; + +typedef struct Netscape_spki_st { + NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ + X509_ALGOR sig_algor; + ASN1_BIT_STRING *signature; +} NETSCAPE_SPKI; + +/* Netscape certificate sequence structure */ +typedef struct Netscape_certificate_sequence { + ASN1_OBJECT *type; + STACK_OF(X509) *certs; +} NETSCAPE_CERT_SEQUENCE; + +/*- Unused (and iv length is wrong) +typedef struct CBCParameter_st + { + unsigned char iv[8]; + } CBC_PARAM; +*/ + +/* Password based encryption structure */ + +typedef struct PBEPARAM_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *iter; +} PBEPARAM; + +/* Password based encryption V2 structures */ + +typedef struct PBE2PARAM_st { + X509_ALGOR *keyfunc; + X509_ALGOR *encryption; +} PBE2PARAM; + +typedef struct PBKDF2PARAM_st { +/* Usually OCTET STRING but could be anything */ + ASN1_TYPE *salt; + ASN1_INTEGER *iter; + ASN1_INTEGER *keylength; + X509_ALGOR *prf; +} PBKDF2PARAM; + +#ifndef OPENSSL_NO_SCRYPT +typedef struct SCRYPT_PARAMS_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *costParameter; + ASN1_INTEGER *blockSize; + ASN1_INTEGER *parallelizationParameter; + ASN1_INTEGER *keyLength; +} SCRYPT_PARAMS; +#endif + +#ifdef __cplusplus +} +#endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define X509_EXT_PACK_UNKNOWN 1 +# define X509_EXT_PACK_STRING 2 + +# define X509_extract_key(x) X509_get_pubkey(x)/*****/ +# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) +# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) + +void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); +X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), + int (*crl_free) (X509_CRL *crl), + int (*crl_lookup) (X509_CRL *crl, + X509_REVOKED **ret, + const + ASN1_INTEGER *serial, + const + X509_NAME *issuer), + int (*crl_verify) (X509_CRL *crl, + EVP_PKEY *pk)); +void X509_CRL_METHOD_free(X509_CRL_METHOD *m); + +void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); +void *X509_CRL_get_meth_data(X509_CRL *crl); + +const char *X509_verify_cert_error_string(long n); + +int X509_verify(X509 *a, EVP_PKEY *r); +int X509_self_signed(X509 *cert, int verify_signature); + +int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); +int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); +int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); + +NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); +char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); +EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); +int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); + +int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); + +int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); +int X509_signature_print(BIO *bp, const X509_ALGOR *alg, + const ASN1_STRING *sig); + +int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); +int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); +int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); +int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); + +int X509_pubkey_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert, + EVP_MD **md_used, int *md_is_fallback); +int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); + +X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include /* OSSL_HTTP_REQ_CTX_nbio_d2i */ +# define X509_http_nbio(rctx, pcert) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509)) +# define X509_CRL_http_nbio(rctx, pcrl) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL)) +# endif + +# ifndef OPENSSL_NO_STDIO +X509 *d2i_X509_fp(FILE *fp, X509 **x509); +int i2d_X509_fp(FILE *fp, const X509 *x509); +X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); +int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl); +X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); +int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); +int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); +int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); +# endif + +X509 *d2i_X509_bio(BIO *bp, X509 **x509); +int i2d_X509_bio(BIO *bp, const X509 *x509); +X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); +int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl); +X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); +int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa); +# endif +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); +int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); +int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); + +DECLARE_ASN1_DUP_FUNCTION(X509) +DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR) +DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) +DECLARE_ASN1_DUP_FUNCTION(X509_CRL) +DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION) +DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY) +DECLARE_ASN1_DUP_FUNCTION(X509_REQ) +DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED) +int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, + void *pval); +void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, + const void **ppval, const X509_ALGOR *algor); +void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); +int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); +int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); + +DECLARE_ASN1_DUP_FUNCTION(X509_NAME) +DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) + +int X509_cmp_time(const ASN1_TIME *s, time_t *t); +int X509_cmp_current_time(const ASN1_TIME *s); +int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm, + const ASN1_TIME *start, const ASN1_TIME *end); +ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); +ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, + int offset_day, long offset_sec, time_t *t); +ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); + +const char *X509_get_default_cert_area(void); +const char *X509_get_default_cert_dir(void); +const char *X509_get_default_cert_file(void); +const char *X509_get_default_cert_dir_env(void); +const char *X509_get_default_cert_file_env(void); +const char *X509_get_default_private_dir(void); + +X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); + +DECLARE_ASN1_FUNCTIONS(X509_ALGOR) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) +DECLARE_ASN1_FUNCTIONS(X509_VAL) + +DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) + +X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); +EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); +long X509_get_pathlen(X509 *x); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY) +EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY) +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY) +# endif +# endif + +DECLARE_ASN1_FUNCTIONS(X509_SIG) +void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg, + const ASN1_OCTET_STRING **pdigest); +void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, + ASN1_OCTET_STRING **pdigest); + +DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) +DECLARE_ASN1_FUNCTIONS(X509_REQ) +X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) +X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); + +DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) + +DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) + +DECLARE_ASN1_FUNCTIONS(X509_NAME) + +int X509_NAME_set(X509_NAME **xn, const X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(X509_CINF) +DECLARE_ASN1_FUNCTIONS(X509) +X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) + +#define X509_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) +int X509_set_ex_data(X509 *r, int idx, void *arg); +void *X509_get_ex_data(const X509 *r, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX) + +int i2d_re_X509_tbs(X509 *x, unsigned char **pp); + +int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, + int *secbits, uint32_t *flags); +void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, + int secbits, uint32_t flags); + +int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, + uint32_t *flags); + +void X509_get0_signature(const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg, const X509 *x); +int X509_get_signature_nid(const X509 *x); + +void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x); +void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x); + +int X509_alias_set1(X509 *x, const unsigned char *name, int len); +int X509_keyid_set1(X509 *x, const unsigned char *id, int len); +unsigned char *X509_alias_get0(X509 *x, int *len); +unsigned char *X509_keyid_get0(X509 *x, int *len); + +DECLARE_ASN1_FUNCTIONS(X509_REVOKED) +DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) +DECLARE_ASN1_FUNCTIONS(X509_CRL) +X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +int X509_CRL_get0_by_serial(X509_CRL *crl, + X509_REVOKED **ret, const ASN1_INTEGER *serial); +int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); + +X509_PKEY *X509_PKEY_new(void); +void X509_PKEY_free(X509_PKEY *a); + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) + +X509_INFO *X509_INFO_new(void); +void X509_INFO_free(X509_INFO *a); +char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, + unsigned char *md, unsigned int *len); +OSSL_DEPRECATEDIN_3_0 +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey, + const EVP_MD *type); +#endif +int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, + unsigned char *md, unsigned int *len); +int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey); +int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_MD_CTX *ctx); +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey, const EVP_MD *md); +int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, EVP_MD_CTX *ctx); + +#define X509_VERSION_1 0 +#define X509_VERSION_2 1 +#define X509_VERSION_3 2 + +long X509_get_version(const X509 *x); +int X509_set_version(X509 *x, long version); +int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +ASN1_INTEGER *X509_get_serialNumber(X509 *x); +const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); +int X509_set_issuer_name(X509 *x, const X509_NAME *name); +X509_NAME *X509_get_issuer_name(const X509 *a); +int X509_set_subject_name(X509 *x, const X509_NAME *name); +X509_NAME *X509_get_subject_name(const X509 *a); +const ASN1_TIME * X509_get0_notBefore(const X509 *x); +ASN1_TIME *X509_getm_notBefore(const X509 *x); +int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); +const ASN1_TIME *X509_get0_notAfter(const X509 *x); +ASN1_TIME *X509_getm_notAfter(const X509 *x); +int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +int X509_up_ref(X509 *x); +int X509_get_signature_type(const X509 *x); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_get_notBefore X509_getm_notBefore +# define X509_get_notAfter X509_getm_notAfter +# define X509_set_notBefore X509_set1_notBefore +# define X509_set_notAfter X509_set1_notAfter +#endif + + +/* + * This one is only used so that a binary form can output, as in + * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf) + */ +X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); +const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); +void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid, + const ASN1_BIT_STRING **psuid); +const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); + +EVP_PKEY *X509_get0_pubkey(const X509 *x); +EVP_PKEY *X509_get_pubkey(X509 *x); +ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); + +#define X509_REQ_VERSION_1 0 + +long X509_REQ_get_version(const X509_REQ *req); +int X509_REQ_set_version(X509_REQ *x, long version); +X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); +int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name); +void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig); +int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg); +int X509_REQ_get_signature_nid(const X509_REQ *req); +int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); +int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req); +int X509_REQ_extension_nid(int nid); +int *X509_REQ_get_extension_nids(void); +void X509_REQ_set_extension_nids(int *nids); +STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); +int X509_REQ_add_extensions_nid(X509_REQ *req, + const STACK_OF(X509_EXTENSION) *exts, int nid); +int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext); +int X509_REQ_get_attr_count(const X509_REQ *req); +int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); +int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); +X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); +int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); +int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_NID(X509_REQ *req, + int nid, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_txt(X509_REQ *req, + const char *attrname, int type, + const unsigned char *bytes, int len); + +#define X509_CRL_VERSION_1 0 +#define X509_CRL_VERSION_2 1 + +int X509_CRL_set_version(X509_CRL *x, long version); +int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name); +int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_sort(X509_CRL *crl); +int X509_CRL_up_ref(X509_CRL *crl); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate +# define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate +#endif + +long X509_CRL_get_version(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl); +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl); +#endif +X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); +const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); +STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); +void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_CRL_get_signature_nid(const X509_CRL *crl); +int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp); + +const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x); +int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x); +int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); +const STACK_OF(X509_EXTENSION) * +X509_REVOKED_get0_extensions(const X509_REVOKED *r); + +X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, + EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); + +int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); + +int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey); +int X509_chain_check_suiteb(int *perror_depth, + X509 *x, STACK_OF(X509) *chain, + unsigned long flags); +int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); +STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); + +int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_and_serial_hash(X509 *a); + +int X509_issuer_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_name_hash(X509 *a); + +int X509_subject_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_subject_name_hash(X509 *x); + +# ifndef OPENSSL_NO_MD5 +unsigned long X509_issuer_name_hash_old(X509 *a); +unsigned long X509_subject_name_hash_old(X509 *x); +# endif + +# define X509_ADD_FLAG_DEFAULT 0 +# define X509_ADD_FLAG_UP_REF 0x1 +# define X509_ADD_FLAG_PREPEND 0x2 +# define X509_ADD_FLAG_NO_DUP 0x4 +# define X509_ADD_FLAG_NO_SS 0x8 +int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags); +int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags); + +int X509_cmp(const X509 *a, const X509 *b); +int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL) +OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x, + const EVP_PKEY *pubkey); +#endif +unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx, + const char *propq, int *ok); +unsigned long X509_NAME_hash_old(const X509_NAME *x); + +int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); +int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); +int X509_aux_print(BIO *out, X509 *x, int indent); +# ifndef OPENSSL_NO_STDIO +int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print_fp(FILE *bp, X509 *x); +int X509_CRL_print_fp(FILE *bp, X509_CRL *x); +int X509_REQ_print_fp(FILE *bp, X509_REQ *req); +int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, + unsigned long flags); +# endif + +int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); +int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, + unsigned long flags); +int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print(BIO *bp, X509 *x); +int X509_ocspid_print(BIO *bp, X509 *x); +int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag); +int X509_CRL_print(BIO *bp, X509_CRL *x); +int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, + unsigned long cflag); +int X509_REQ_print(BIO *bp, X509_REQ *req); + +int X509_NAME_entry_count(const X509_NAME *name); +int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid, + char *buf, int len); +int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, + char *buf, int len); + +/* + * NOTE: you should be passing -1, not 0 as lastpos. The functions that use + * lastpos, search after that position on. + */ +int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, + int lastpos); +X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); +X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); +int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, + int loc, int set); +int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len, int loc, + int set); +int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, + const char *field, int type, + const unsigned char *bytes, + int len); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, + int type, + const unsigned char *bytes, + int len); +int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, + int len); +int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj); +int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, + const unsigned char *bytes, int len); +ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); +ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); +int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); + +int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder, + size_t *pderlen); + +int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); +int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, + int nid, int lastpos); +int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, + const ASN1_OBJECT *obj, int lastpos); +int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, + int crit, int lastpos); +X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); +X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); +STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, + X509_EXTENSION *ex, int loc); + +int X509_get_ext_count(const X509 *x); +int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); +int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); +int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); +X509_EXTENSION *X509_get_ext(const X509 *x, int loc); +X509_EXTENSION *X509_delete_ext(X509 *x, int loc); +int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); +void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx); +int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_CRL_get_ext_count(const X509_CRL *x); +int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); +int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); +X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc); +X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); +int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); +void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx); +int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_REVOKED_get_ext_count(const X509_REVOKED *x); +int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos); +int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, + int lastpos); +X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc); +X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); +int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); +void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit, + int *idx); +int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, + unsigned long flags); + +X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, + int nid, int crit, + ASN1_OCTET_STRING *data); +X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, + const ASN1_OBJECT *obj, int crit, + ASN1_OCTET_STRING *data); +int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj); +int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); +int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); +ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); +ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); +int X509_EXTENSION_get_critical(const X509_EXTENSION *ex); + +int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); +int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, + int lastpos); +int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); +X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, + X509_ATTRIBUTE *attr); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) + **x, const ASN1_OBJECT *obj, + int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) + **x, int nid, int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) + **x, const char *attrname, + int type, + const unsigned char *bytes, + int len); +void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x, + const ASN1_OBJECT *obj, int lastpos, int type); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, + const ASN1_OBJECT *obj, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, + const char *atrname, int type, + const unsigned char *bytes, + int len); +int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); +int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, + const void *data, int len); +void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, + void *data); +int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr); +ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); +ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); + +int EVP_PKEY_get_attr_count(const EVP_PKEY *key); +int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); +int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); +X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); +int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); +int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, + int nid, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, + const char *attrname, int type, + const unsigned char *bytes, int len); + +/* lookup a cert from a X509 STACK */ +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name, + const ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(PBEPARAM) +DECLARE_ASN1_FUNCTIONS(PBE2PARAM) +DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) +#ifndef OPENSSL_NO_SCRYPT +DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) +#endif + +int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen); +int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + +X509_ALGOR *PKCS5_pbe_set(int alg, int iter, + const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + +X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid); +X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid, + OSSL_LIB_CTX *libctx); + +#ifndef OPENSSL_NO_SCRYPT +X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, + const unsigned char *salt, int saltlen, + unsigned char *aiv, uint64_t N, uint64_t r, + uint64_t p); +#endif + +X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen); +X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen, + OSSL_LIB_CTX *libctx); + +/* PKCS#8 utilities */ + +DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) + +EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); +EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey); + +int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, + int version, int ptype, void *pval, + unsigned char *penc, int penclen); +int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8); + +const STACK_OF(X509_ATTRIBUTE) * +PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr); +int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, + const unsigned char *bytes, int len); +int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj, + int type, const unsigned char *bytes, int len); + + +int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, + int ptype, void *pval, + unsigned char *penc, int penclen); +int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, const X509_PUBKEY *pub); +int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h b/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h index 25c79f1b..29b0e147 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h @@ -1,19 +1,30 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509_vfy.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509_VFY_H -# define HEADER_X509_VFY_H + + +#ifndef OPENSSL_X509_VFY_H +# define OPENSSL_X509_VFY_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_VFY_H +# endif /* * Protect against recursion, x509.h and x509_vfy.h each include the other. */ -# ifndef HEADER_X509_H +# ifndef OPENSSL_X509_H # include # endif @@ -49,18 +60,190 @@ typedef enum { X509_LU_X509, X509_LU_CRL } X509_LOOKUP_TYPE; -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 #define X509_LU_RETRY -1 #define X509_LU_FAIL 0 #endif -DEFINE_STACK_OF(X509_LOOKUP) -DEFINE_STACK_OF(X509_OBJECT) -DEFINE_STACK_OF(X509_VERIFY_PARAM) +SKM_DEFINE_STACK_OF_INTERNAL(X509_LOOKUP, X509_LOOKUP, X509_LOOKUP) +#define sk_X509_LOOKUP_num(sk) OPENSSL_sk_num(ossl_check_const_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_value(sk, idx) ((X509_LOOKUP *)OPENSSL_sk_value(ossl_check_const_X509_LOOKUP_sk_type(sk), (idx))) +#define sk_X509_LOOKUP_new(cmp) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new(ossl_check_X509_LOOKUP_compfunc_type(cmp))) +#define sk_X509_LOOKUP_new_null() ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_null()) +#define sk_X509_LOOKUP_new_reserve(cmp, n) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_reserve(ossl_check_X509_LOOKUP_compfunc_type(cmp), (n))) +#define sk_X509_LOOKUP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_LOOKUP_sk_type(sk), (n)) +#define sk_X509_LOOKUP_free(sk) OPENSSL_sk_free(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_zero(sk) OPENSSL_sk_zero(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_delete(sk, i) ((X509_LOOKUP *)OPENSSL_sk_delete(ossl_check_X509_LOOKUP_sk_type(sk), (i))) +#define sk_X509_LOOKUP_delete_ptr(sk, ptr) ((X509_LOOKUP *)OPENSSL_sk_delete_ptr(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr))) +#define sk_X509_LOOKUP_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_pop(sk) ((X509_LOOKUP *)OPENSSL_sk_pop(ossl_check_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_shift(sk) ((X509_LOOKUP *)OPENSSL_sk_shift(ossl_check_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_LOOKUP_sk_type(sk),ossl_check_X509_LOOKUP_freefunc_type(freefunc)) +#define sk_X509_LOOKUP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), (idx)) +#define sk_X509_LOOKUP_set(sk, idx, ptr) ((X509_LOOKUP *)OPENSSL_sk_set(ossl_check_X509_LOOKUP_sk_type(sk), (idx), ossl_check_X509_LOOKUP_type(ptr))) +#define sk_X509_LOOKUP_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), pnum) +#define sk_X509_LOOKUP_sort(sk) OPENSSL_sk_sort(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_dup(sk) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_dup(ossl_check_const_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_copyfunc_type(copyfunc), ossl_check_X509_LOOKUP_freefunc_type(freefunc))) +#define sk_X509_LOOKUP_set_cmp_func(sk, cmp) ((sk_X509_LOOKUP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_OBJECT, X509_OBJECT, X509_OBJECT) +#define sk_X509_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_value(sk, idx) ((X509_OBJECT *)OPENSSL_sk_value(ossl_check_const_X509_OBJECT_sk_type(sk), (idx))) +#define sk_X509_OBJECT_new(cmp) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new(ossl_check_X509_OBJECT_compfunc_type(cmp))) +#define sk_X509_OBJECT_new_null() ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_null()) +#define sk_X509_OBJECT_new_reserve(cmp, n) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_X509_OBJECT_compfunc_type(cmp), (n))) +#define sk_X509_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_OBJECT_sk_type(sk), (n)) +#define sk_X509_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_delete(sk, i) ((X509_OBJECT *)OPENSSL_sk_delete(ossl_check_X509_OBJECT_sk_type(sk), (i))) +#define sk_X509_OBJECT_delete_ptr(sk, ptr) ((X509_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr))) +#define sk_X509_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_pop(sk) ((X509_OBJECT *)OPENSSL_sk_pop(ossl_check_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_shift(sk) ((X509_OBJECT *)OPENSSL_sk_shift(ossl_check_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_OBJECT_sk_type(sk),ossl_check_X509_OBJECT_freefunc_type(freefunc)) +#define sk_X509_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), (idx)) +#define sk_X509_OBJECT_set(sk, idx, ptr) ((X509_OBJECT *)OPENSSL_sk_set(ossl_check_X509_OBJECT_sk_type(sk), (idx), ossl_check_X509_OBJECT_type(ptr))) +#define sk_X509_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), pnum) +#define sk_X509_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_dup(sk) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_copyfunc_type(copyfunc), ossl_check_X509_OBJECT_freefunc_type(freefunc))) +#define sk_X509_OBJECT_set_cmp_func(sk, cmp) ((sk_X509_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_VERIFY_PARAM, X509_VERIFY_PARAM, X509_VERIFY_PARAM) +#define sk_X509_VERIFY_PARAM_num(sk) OPENSSL_sk_num(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_value(sk, idx) ((X509_VERIFY_PARAM *)OPENSSL_sk_value(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), (idx))) +#define sk_X509_VERIFY_PARAM_new(cmp) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) +#define sk_X509_VERIFY_PARAM_new_null() ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_null()) +#define sk_X509_VERIFY_PARAM_new_reserve(cmp, n) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_reserve(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp), (n))) +#define sk_X509_VERIFY_PARAM_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (n)) +#define sk_X509_VERIFY_PARAM_free(sk) OPENSSL_sk_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_zero(sk) OPENSSL_sk_zero(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_delete(sk, i) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (i))) +#define sk_X509_VERIFY_PARAM_delete_ptr(sk, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete_ptr(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr))) +#define sk_X509_VERIFY_PARAM_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_pop(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_pop(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_shift(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_shift(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk),ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc)) +#define sk_X509_VERIFY_PARAM_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), (idx)) +#define sk_X509_VERIFY_PARAM_set(sk, idx, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_set(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (idx), ossl_check_X509_VERIFY_PARAM_type(ptr))) +#define sk_X509_VERIFY_PARAM_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), pnum) +#define sk_X509_VERIFY_PARAM_sort(sk) OPENSSL_sk_sort(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_dup(sk) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_dup(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_copyfunc_type(copyfunc), ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc))) +#define sk_X509_VERIFY_PARAM_set_cmp_func(sk, cmp) ((sk_X509_VERIFY_PARAM_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) + + +/* This is used for a table of trust checking functions */ +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; +SKM_DEFINE_STACK_OF_INTERNAL(X509_TRUST, X509_TRUST, X509_TRUST) +#define sk_X509_TRUST_num(sk) OPENSSL_sk_num(ossl_check_const_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_value(sk, idx) ((X509_TRUST *)OPENSSL_sk_value(ossl_check_const_X509_TRUST_sk_type(sk), (idx))) +#define sk_X509_TRUST_new(cmp) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new(ossl_check_X509_TRUST_compfunc_type(cmp))) +#define sk_X509_TRUST_new_null() ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_null()) +#define sk_X509_TRUST_new_reserve(cmp, n) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_reserve(ossl_check_X509_TRUST_compfunc_type(cmp), (n))) +#define sk_X509_TRUST_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_TRUST_sk_type(sk), (n)) +#define sk_X509_TRUST_free(sk) OPENSSL_sk_free(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_zero(sk) OPENSSL_sk_zero(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_delete(sk, i) ((X509_TRUST *)OPENSSL_sk_delete(ossl_check_X509_TRUST_sk_type(sk), (i))) +#define sk_X509_TRUST_delete_ptr(sk, ptr) ((X509_TRUST *)OPENSSL_sk_delete_ptr(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr))) +#define sk_X509_TRUST_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_pop(sk) ((X509_TRUST *)OPENSSL_sk_pop(ossl_check_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_shift(sk) ((X509_TRUST *)OPENSSL_sk_shift(ossl_check_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_TRUST_sk_type(sk),ossl_check_X509_TRUST_freefunc_type(freefunc)) +#define sk_X509_TRUST_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), (idx)) +#define sk_X509_TRUST_set(sk, idx, ptr) ((X509_TRUST *)OPENSSL_sk_set(ossl_check_X509_TRUST_sk_type(sk), (idx), ossl_check_X509_TRUST_type(ptr))) +#define sk_X509_TRUST_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), pnum) +#define sk_X509_TRUST_sort(sk) OPENSSL_sk_sort(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_dup(sk) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_dup(ossl_check_const_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_copyfunc_type(copyfunc), ossl_check_X509_TRUST_freefunc_type(freefunc))) +#define sk_X509_TRUST_set_cmp_func(sk, cmp) ((sk_X509_TRUST_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_compfunc_type(cmp))) + + +/* standard trust ids */ +# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard rejection OID and as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* check_trust return codes */ +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +int X509_TRUST_set(int *t, int trust); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const X509_TRUST *xp); + +int X509_trusted(const X509 *x); +int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); + +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_check_trust(X509 *x, int id, int flags); + +int X509_verify_cert(X509_STORE_CTX *ctx); +int X509_STORE_CTX_verify(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs, + X509_STORE *store, int with_self_signed, + OSSL_LIB_CTX *libctx, const char *propq); int X509_STORE_set_depth(X509_STORE *store, int depth); typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); @@ -73,13 +256,14 @@ typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); -typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); -typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); +typedef STACK_OF(X509) + *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef STACK_OF(X509_CRL) + *(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx, + const X509_NAME *nm); typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); - void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_STORE_CTX_set_app_data(ctx,data) \ @@ -89,6 +273,8 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_L_FILE_LOAD 1 # define X509_L_ADD_DIR 2 +# define X509_L_ADD_STORE 3 +# define X509_L_LOAD_STORE 4 # define X509_LOOKUP_load_file(x,name,type) \ X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) @@ -96,102 +282,138 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_LOOKUP_add_dir(x,name,type) \ X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) -# define X509_V_OK 0 -# define X509_V_ERR_UNSPECIFIED 1 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 -# define X509_V_ERR_UNABLE_TO_GET_CRL 3 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 -# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 -# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 -# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 -# define X509_V_ERR_CERT_NOT_YET_VALID 9 -# define X509_V_ERR_CERT_HAS_EXPIRED 10 -# define X509_V_ERR_CRL_NOT_YET_VALID 11 -# define X509_V_ERR_CRL_HAS_EXPIRED 12 -# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 -# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 -# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 -# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 -# define X509_V_ERR_OUT_OF_MEM 17 -# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 -# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 -# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 -# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 -# define X509_V_ERR_CERT_REVOKED 23 -# define X509_V_ERR_INVALID_CA 24 -# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 -# define X509_V_ERR_INVALID_PURPOSE 26 -# define X509_V_ERR_CERT_UNTRUSTED 27 -# define X509_V_ERR_CERT_REJECTED 28 -/* These are 'informational' when looking for issuer cert */ -# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 -# define X509_V_ERR_AKID_SKID_MISMATCH 30 -# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 -# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 -# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 -# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 -# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 -# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 -# define X509_V_ERR_INVALID_NON_CA 37 -# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 -# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 -# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 -# define X509_V_ERR_INVALID_EXTENSION 41 -# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 -# define X509_V_ERR_NO_EXPLICIT_POLICY 43 -# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 -# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 -# define X509_V_ERR_UNNESTED_RESOURCE 46 -# define X509_V_ERR_PERMITTED_VIOLATION 47 -# define X509_V_ERR_EXCLUDED_VIOLATION 48 -# define X509_V_ERR_SUBTREE_MINMAX 49 -/* The application is not happy */ -# define X509_V_ERR_APPLICATION_VERIFICATION 50 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 -# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 -# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 -/* Another issuer check debug option */ -# define X509_V_ERR_PATH_LOOP 55 -/* Suite B mode algorithm violation */ -# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 -# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 -# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 -# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 -# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 -# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 -/* Host, email and IP check errors */ -# define X509_V_ERR_HOSTNAME_MISMATCH 62 -# define X509_V_ERR_EMAIL_MISMATCH 63 -# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 -/* DANE TLSA errors */ -# define X509_V_ERR_DANE_NO_MATCH 65 -/* security level errors */ -# define X509_V_ERR_EE_KEY_TOO_SMALL 66 -# define X509_V_ERR_CA_KEY_TOO_SMALL 67 -# define X509_V_ERR_CA_MD_TOO_WEAK 68 -/* Caller error */ -# define X509_V_ERR_INVALID_CALL 69 -/* Issuer lookup error */ -# define X509_V_ERR_STORE_LOOKUP 70 -/* Certificate transparency */ -# define X509_V_ERR_NO_VALID_SCTS 71 +# define X509_LOOKUP_add_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_STORE,(name),0,NULL) -# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 +# define X509_LOOKUP_load_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_LOAD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_file_ex(x, name, type, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_FILE_LOAD, (name), (long)(type), NULL,\ + (libctx), (propq)) + +# define X509_LOOKUP_load_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_LOAD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_LOOKUP_add_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 + +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 /* OCSP status errors */ -# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ -# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ -# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ -# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 76 -# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 77 -# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 78 -# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 79 +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ + +# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 76 +# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 77 + +/* Errors in case a check in X509_V_FLAG_X509_STRICT mode fails */ +# define X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY 78 +# define X509_V_ERR_INVALID_CA 79 +# define X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA 80 +# define X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN 81 +# define X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA 82 +# define X509_V_ERR_ISSUER_NAME_EMPTY 83 +# define X509_V_ERR_SUBJECT_NAME_EMPTY 84 +# define X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER 85 +# define X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER 86 +# define X509_V_ERR_EMPTY_SUBJECT_ALT_NAME 87 +# define X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL 88 +# define X509_V_ERR_CA_BCONS_NOT_CRITICAL 89 +# define X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL 90 +# define X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL 91 +# define X509_V_ERR_CA_CERT_MISSING_KEY_USAGE 92 +# define X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3 93 +# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94 /* Certificate verify flags */ - -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ # endif /* Use check time instead of current time */ @@ -254,10 +476,10 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); | X509_V_FLAG_INHIBIT_MAP) int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, X509_OBJECT *x); int X509_OBJECT_up_ref_count(X509_OBJECT *a); @@ -266,102 +488,106 @@ void X509_OBJECT_free(X509_OBJECT *a); X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); -X509_CRL *X509_OBJECT_get0_X509_CRL(X509_OBJECT *a); +X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); void X509_STORE_free(X509_STORE *v); int X509_STORE_lock(X509_STORE *ctx); int X509_STORE_unlock(X509_STORE *ctx); int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); - -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); -STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); +STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, + const X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st, + const X509_NAME *nm); int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); +int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); +X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); #define X509_STORE_set_verify_func(ctx, func) \ X509_STORE_set_verify((ctx),(func)) void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_fn verify); -X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(const X509_STORE *ctx); void X509_STORE_set_verify_cb(X509_STORE *ctx, X509_STORE_CTX_verify_cb verify_cb); # define X509_STORE_set_verify_cb_func(ctx,func) \ X509_STORE_set_verify_cb((ctx),(func)) -X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE *ctx); +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(const X509_STORE *ctx); void X509_STORE_set_get_issuer(X509_STORE *ctx, X509_STORE_CTX_get_issuer_fn get_issuer); -X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *ctx); void X509_STORE_set_check_issued(X509_STORE *ctx, X509_STORE_CTX_check_issued_fn check_issued); -X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *ctx); void X509_STORE_set_check_revocation(X509_STORE *ctx, X509_STORE_CTX_check_revocation_fn check_revocation); -X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE *ctx); +X509_STORE_CTX_check_revocation_fn + X509_STORE_get_check_revocation(const X509_STORE *ctx); void X509_STORE_set_get_crl(X509_STORE *ctx, X509_STORE_CTX_get_crl_fn get_crl); -X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *ctx); void X509_STORE_set_check_crl(X509_STORE *ctx, X509_STORE_CTX_check_crl_fn check_crl); -X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *ctx); void X509_STORE_set_cert_crl(X509_STORE *ctx, X509_STORE_CTX_cert_crl_fn cert_crl); -X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *ctx); void X509_STORE_set_check_policy(X509_STORE *ctx, X509_STORE_CTX_check_policy_fn check_policy); -X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *ctx); void X509_STORE_set_lookup_certs(X509_STORE *ctx, X509_STORE_CTX_lookup_certs_fn lookup_certs); -X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *ctx); void X509_STORE_set_lookup_crls(X509_STORE *ctx, X509_STORE_CTX_lookup_crls_fn lookup_crls); #define X509_STORE_set_lookup_crls_cb(ctx, func) \ X509_STORE_set_lookup_crls((ctx), (func)) -X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(const X509_STORE *ctx); void X509_STORE_set_cleanup(X509_STORE *ctx, X509_STORE_CTX_cleanup_fn cleanup); -X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *ctx); #define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(X509_STORE *ctx, int idx); +void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); X509_STORE_CTX *X509_STORE_CTX_new(void); int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); void X509_STORE_CTX_free(X509_STORE_CTX *ctx); -int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, - X509 *x509, STACK_OF(X509) *chain); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store, + X509 *target, STACK_OF(X509) *untrusted); void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); -X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); -X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); -STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx); +X509_STORE *X509_STORE_CTX_get0_store(const X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_cb verify); -X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); -X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); -X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(const X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain # define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted # define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack @@ -377,17 +603,28 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); X509_LOOKUP_METHOD *X509_LOOKUP_file(void); +X509_LOOKUP_METHOD *X509_LOOKUP_store(void); typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret); +typedef int (*X509_LOOKUP_ctrl_ex_fn)( + X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret, + OSSL_LIB_CTX *libctx, const char *propq); + typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, + const X509_NAME *name, X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_subject_ex_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, + const char *propq); typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, - ASN1_INTEGER *serial, + const X509_NAME *name, + const ASN1_INTEGER *serial, X509_OBJECT *ret); typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, @@ -451,26 +688,37 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); -int X509_STORE_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); +int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret); +int X509_LOOKUP_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, + char **ret, OSSL_LIB_CTX *libctx, const char *propq); int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); void X509_LOOKUP_free(X509_LOOKUP *ctx); int X509_LOOKUP_init(X509_LOOKUP *ctx); int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); + const X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_subject_ex(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, const char *propq); int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, ASN1_INTEGER *serial, + const X509_NAME *name, + const ASN1_INTEGER *serial, X509_OBJECT *ret); int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, const unsigned char *bytes, int len, @@ -482,28 +730,42 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); +int X509_STORE_load_file(X509_STORE *ctx, const char *file); +int X509_STORE_load_path(X509_STORE *ctx, const char *path); +int X509_STORE_load_store(X509_STORE *ctx, const char *store); int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, const char *dir); + const char *file, + const char *dir); int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file_ex(X509_STORE *ctx, const char *file, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_store_ex(X509_STORE *ctx, const char *store, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_locations_ex(X509_STORE *ctx, const char *file, + const char *dir, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, + const char *propq); + #define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); -void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); -int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); +void *X509_STORE_CTX_get_ex_data(const X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); -int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); -X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); -X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); -X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); +X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target); void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); -void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, @@ -512,11 +774,11 @@ void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, time_t t); -X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_num_untrusted(X509_STORE_CTX *ctx); +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx); -X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); @@ -540,7 +802,7 @@ int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, unsigned long flags); int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, unsigned long flags); -unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); +unsigned long X509_VERIFY_PARAM_get_flags(const X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); @@ -556,6 +818,7 @@ int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, uint32_t flags); uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); +char *X509_VERIFY_PARAM_get0_host(X509_VERIFY_PARAM *param, int idx); int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen); int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, @@ -563,10 +826,12 @@ int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned int flags); unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); -char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_peername(const X509_VERIFY_PARAM *param); void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_email(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, const char *email, size_t emaillen); +char *X509_VERIFY_PARAM_get1_ip_asc(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, const unsigned char *ip, size_t iplen); int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, @@ -605,26 +870,23 @@ int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, int i); -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const - X509_POLICY_TREE - *tree); +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree); -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const - X509_POLICY_TREE - *tree); +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree); int X509_policy_level_node_count(X509_POLICY_LEVEL *level); -X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, +X509_POLICY_NODE *X509_policy_level_get0_node(const X509_POLICY_LEVEL *level, int i); const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); -STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const - X509_POLICY_NODE - *node); -const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE - *node); +STACK_OF(POLICYQUALINFO) + *X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node); +const X509_POLICY_NODE + *X509_policy_node_get0_parent(const X509_POLICY_NODE *node); #ifdef __cplusplus } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h.in b/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h.in new file mode 100644 index 00000000..80f18bd7 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h.in @@ -0,0 +1,797 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509_VFY_H +# define OPENSSL_X509_VFY_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_VFY_H +# endif + +/* + * Protect against recursion, x509.h and x509_vfy.h each include the other. + */ +# ifndef OPENSSL_X509_H +# include +# endif + +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- +SSL_CTX -> X509_STORE + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + +SSL -> X509_STORE_CTX + ->X509_STORE + +The X509_STORE holds the tables etc for verification stuff. +A X509_STORE_CTX is used while validating a single certificate. +The X509_STORE has X509_LOOKUPs for looking up certs. +The X509_STORE then calls a function to actually verify the +certificate chain. +*/ + +typedef enum { + X509_LU_NONE = 0, + X509_LU_X509, X509_LU_CRL +} X509_LOOKUP_TYPE; + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +#define X509_LU_RETRY -1 +#define X509_LU_FAIL 0 +#endif + +{- + generate_stack_macros("X509_LOOKUP") + .generate_stack_macros("X509_OBJECT") + .generate_stack_macros("X509_VERIFY_PARAM"); +-} + +/* This is used for a table of trust checking functions */ +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; +{- + generate_stack_macros("X509_TRUST"); +-} + +/* standard trust ids */ +# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard rejection OID and as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* check_trust return codes */ +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +int X509_TRUST_set(int *t, int trust); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const X509_TRUST *xp); + +int X509_trusted(const X509 *x); +int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); + +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_check_trust(X509 *x, int id, int flags); + +int X509_verify_cert(X509_STORE_CTX *ctx); +int X509_STORE_CTX_verify(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs, + X509_STORE *store, int with_self_signed, + OSSL_LIB_CTX *libctx, const char *propq); + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, + X509_STORE_CTX *ctx, X509 *x); +typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, + X509 *x, X509 *issuer); +typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL **crl, X509 *x); +typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); +typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL *crl, X509 *x); +typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); +typedef STACK_OF(X509) + *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef STACK_OF(X509_CRL) + *(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); + +void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); + +# define X509_STORE_CTX_set_app_data(ctx,data) \ + X509_STORE_CTX_set_ex_data(ctx,0,data) +# define X509_STORE_CTX_get_app_data(ctx) \ + X509_STORE_CTX_get_ex_data(ctx,0) + +# define X509_L_FILE_LOAD 1 +# define X509_L_ADD_DIR 2 +# define X509_L_ADD_STORE 3 +# define X509_L_LOAD_STORE 4 + +# define X509_LOOKUP_load_file(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_dir(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_LOAD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_file_ex(x, name, type, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_FILE_LOAD, (name), (long)(type), NULL,\ + (libctx), (propq)) + +# define X509_LOOKUP_load_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_LOAD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_LOOKUP_add_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 + +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 +/* OCSP status errors */ +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ + +# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 76 +# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 77 + +/* Errors in case a check in X509_V_FLAG_X509_STRICT mode fails */ +# define X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY 78 +# define X509_V_ERR_INVALID_CA 79 +# define X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA 80 +# define X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN 81 +# define X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA 82 +# define X509_V_ERR_ISSUER_NAME_EMPTY 83 +# define X509_V_ERR_SUBJECT_NAME_EMPTY 84 +# define X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER 85 +# define X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER 86 +# define X509_V_ERR_EMPTY_SUBJECT_ALT_NAME 87 +# define X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL 88 +# define X509_V_ERR_CA_BCONS_NOT_CRITICAL 89 +# define X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL 90 +# define X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL 91 +# define X509_V_ERR_CA_CERT_MISSING_KEY_USAGE 92 +# define X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3 93 +# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94 + +/* Certificate verify flags */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ +# endif +/* Use check time instead of current time */ +# define X509_V_FLAG_USE_CHECK_TIME 0x2 +/* Lookup CRLs */ +# define X509_V_FLAG_CRL_CHECK 0x4 +/* Lookup CRLs for whole chain */ +# define X509_V_FLAG_CRL_CHECK_ALL 0x8 +/* Ignore unhandled critical extensions */ +# define X509_V_FLAG_IGNORE_CRITICAL 0x10 +/* Disable workarounds for broken certificates */ +# define X509_V_FLAG_X509_STRICT 0x20 +/* Enable proxy certificate validation */ +# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 +/* Enable policy checking */ +# define X509_V_FLAG_POLICY_CHECK 0x80 +/* Policy variable require-explicit-policy */ +# define X509_V_FLAG_EXPLICIT_POLICY 0x100 +/* Policy variable inhibit-any-policy */ +# define X509_V_FLAG_INHIBIT_ANY 0x200 +/* Policy variable inhibit-policy-mapping */ +# define X509_V_FLAG_INHIBIT_MAP 0x400 +/* Notify callback that policy is OK */ +# define X509_V_FLAG_NOTIFY_POLICY 0x800 +/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ +# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 +/* Delta CRL support */ +# define X509_V_FLAG_USE_DELTAS 0x2000 +/* Check self-signed CA signature */ +# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 +/* Use trusted store first */ +# define X509_V_FLAG_TRUSTED_FIRST 0x8000 +/* Suite B 128 bit only mode: not normally used */ +# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define X509_V_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define X509_V_FLAG_SUITEB_128_LOS 0x30000 +/* Allow partial chains if at least one certificate is in trusted store */ +# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 +/* + * If the initial chain is not trusted, do not attempt to build an alternative + * chain. Alternate chain checking was introduced in 1.1.0. Setting this flag + * will force the behaviour to match that of previous versions. + */ +# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 +/* Do not check certificate/CRL validity against current time */ +# define X509_V_FLAG_NO_CHECK_TIME 0x200000 + +# define X509_VP_FLAG_DEFAULT 0x1 +# define X509_VP_FLAG_OVERWRITE 0x2 +# define X509_VP_FLAG_RESET_FLAGS 0x4 +# define X509_VP_FLAG_LOCKED 0x8 +# define X509_VP_FLAG_ONCE 0x10 + +/* Internal use: mask of policy related options */ +# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ + | X509_V_FLAG_EXPLICIT_POLICY \ + | X509_V_FLAG_INHIBIT_ANY \ + | X509_V_FLAG_INHIBIT_MAP) + +int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, + const X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, + X509_LOOKUP_TYPE type, + const X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, + X509_OBJECT *x); +int X509_OBJECT_up_ref_count(X509_OBJECT *a); +X509_OBJECT *X509_OBJECT_new(void); +void X509_OBJECT_free(X509_OBJECT *a); +X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); +X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); +int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); +X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); +int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *v); +int X509_STORE_lock(X509_STORE *ctx); +int X509_STORE_unlock(X509_STORE *ctx); +int X509_STORE_up_ref(X509_STORE *v); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); +STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, + const X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st, + const X509_NAME *nm); +int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); +int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); +int X509_STORE_set_trust(X509_STORE *ctx, int trust); +int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); +X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); + +void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); +#define X509_STORE_set_verify_func(ctx, func) \ + X509_STORE_set_verify((ctx),(func)) +void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_fn verify); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(const X509_STORE *ctx); +void X509_STORE_set_verify_cb(X509_STORE *ctx, + X509_STORE_CTX_verify_cb verify_cb); +# define X509_STORE_set_verify_cb_func(ctx,func) \ + X509_STORE_set_verify_cb((ctx),(func)) +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(const X509_STORE *ctx); +void X509_STORE_set_get_issuer(X509_STORE *ctx, + X509_STORE_CTX_get_issuer_fn get_issuer); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *ctx); +void X509_STORE_set_check_issued(X509_STORE *ctx, + X509_STORE_CTX_check_issued_fn check_issued); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *ctx); +void X509_STORE_set_check_revocation(X509_STORE *ctx, + X509_STORE_CTX_check_revocation_fn check_revocation); +X509_STORE_CTX_check_revocation_fn + X509_STORE_get_check_revocation(const X509_STORE *ctx); +void X509_STORE_set_get_crl(X509_STORE *ctx, + X509_STORE_CTX_get_crl_fn get_crl); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *ctx); +void X509_STORE_set_check_crl(X509_STORE *ctx, + X509_STORE_CTX_check_crl_fn check_crl); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *ctx); +void X509_STORE_set_cert_crl(X509_STORE *ctx, + X509_STORE_CTX_cert_crl_fn cert_crl); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *ctx); +void X509_STORE_set_check_policy(X509_STORE *ctx, + X509_STORE_CTX_check_policy_fn check_policy); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *ctx); +void X509_STORE_set_lookup_certs(X509_STORE *ctx, + X509_STORE_CTX_lookup_certs_fn lookup_certs); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *ctx); +void X509_STORE_set_lookup_crls(X509_STORE *ctx, + X509_STORE_CTX_lookup_crls_fn lookup_crls); +#define X509_STORE_set_lookup_crls_cb(ctx, func) \ + X509_STORE_set_lookup_crls((ctx), (func)) +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(const X509_STORE *ctx); +void X509_STORE_set_cleanup(X509_STORE *ctx, + X509_STORE_CTX_cleanup_fn cleanup); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *ctx); + +#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) +int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); +void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); + +X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +X509_STORE_CTX *X509_STORE_CTX_new(void); + +int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + +void X509_STORE_CTX_free(X509_STORE_CTX *ctx); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store, + X509 *target, STACK_OF(X509) *untrusted); +void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); + +X509_STORE *X509_STORE_CTX_get0_store(const X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_cb verify); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(const X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain +# define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted +# define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack +# define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject +# define X509_STORE_get1_certs X509_STORE_CTX_get1_certs +# define X509_STORE_get1_crls X509_STORE_CTX_get1_crls +/* the following macro is misspelled; use X509_STORE_get1_certs instead */ +# define X509_STORE_get1_cert X509_STORE_CTX_get1_certs +/* the following macro is misspelled; use X509_STORE_get1_crls instead */ +# define X509_STORE_get1_crl X509_STORE_CTX_get1_crls +#endif + +X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); +X509_LOOKUP_METHOD *X509_LOOKUP_file(void); +X509_LOOKUP_METHOD *X509_LOOKUP_store(void); + +typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +typedef int (*X509_LOOKUP_ctrl_ex_fn)( + X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret, + OSSL_LIB_CTX *libctx, const char *propq); + +typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_subject_ex_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, + const char *propq); +typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + const ASN1_INTEGER *serial, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const unsigned char* bytes, + int len, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const char *str, + int len, + X509_OBJECT *ret); + +X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name); +void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method, + int (*new_item) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method, + void (*free_fn) (X509_LOOKUP *ctx)); +void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method, + int (*init) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method, + int (*shutdown) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method, + X509_LOOKUP_ctrl_fn ctrl_fn); +X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_subject_fn fn); +X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_issuer_serial(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_issuer_serial_fn fn); +X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_fingerprint_fn fn); +X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_alias_fn fn); +X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( + const X509_LOOKUP_METHOD *method); + + +int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); +int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); + +int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); +X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +int X509_LOOKUP_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, + char **ret, OSSL_LIB_CTX *libctx, const char *propq); + +int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); + +X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); +void X509_LOOKUP_free(X509_LOOKUP *ctx); +int X509_LOOKUP_init(X509_LOOKUP *ctx); +int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_subject_ex(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, + const ASN1_INTEGER *serial, + X509_OBJECT *ret); +int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const unsigned char *bytes, int len, + X509_OBJECT *ret); +int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const char *str, int len, X509_OBJECT *ret); +int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data); +void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); +X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +int X509_STORE_load_file(X509_STORE *ctx, const char *file); +int X509_STORE_load_path(X509_STORE *ctx, const char *path); +int X509_STORE_load_store(X509_STORE *ctx, const char *store); +int X509_STORE_load_locations(X509_STORE *ctx, + const char *file, + const char *dir); +int X509_STORE_set_default_paths(X509_STORE *ctx); + +int X509_STORE_load_file_ex(X509_STORE *ctx, const char *file, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_store_ex(X509_STORE *ctx, const char *store, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_locations_ex(X509_STORE *ctx, const char *file, + const char *dir, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, + const char *propq); + +#define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) +int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); +void *X509_STORE_CTX_get_ex_data(const X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); +int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); +X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); +X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target); +void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); +int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); +int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); +int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, + int purpose, int trust); +void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); +void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, + time_t t); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx); + +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); +int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); + +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane); +#define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0) + +/* X509_VERIFY_PARAM functions */ + +X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); +void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); +int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +unsigned long X509_VERIFY_PARAM_get_flags(const X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); +int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); +void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); +void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, int auth_level); +time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param); +void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); +int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, + ASN1_OBJECT *policy); +int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, + STACK_OF(ASN1_OBJECT) *policies); + +int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, + uint32_t flags); +uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); + +char *X509_VERIFY_PARAM_get0_host(X509_VERIFY_PARAM *param, int idx); +int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, + unsigned int flags); +unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); +char *X509_VERIFY_PARAM_get0_peername(const X509_VERIFY_PARAM *param); +void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_email(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, + const char *email, size_t emaillen); +char *X509_VERIFY_PARAM_get1_ip_asc(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, + const unsigned char *ip, size_t iplen); +int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, + const char *ipasc); + +int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); +const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); + +int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_count(void); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); +void X509_VERIFY_PARAM_table_cleanup(void); + +/* Non positive return values are errors */ +#define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */ +#define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */ +#define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */ + +/* + * Positive return values form a bit mask, all but the first are internal to + * the library and don't appear in results from X509_policy_check(). + */ +#define X509_PCY_TREE_VALID 1 /* The policy tree is valid */ +#define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */ +#define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */ + +int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, + STACK_OF(X509) *certs, + STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); + +void X509_policy_tree_free(X509_POLICY_TREE *tree); + +int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); +X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, + int i); + +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree); + +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree); + +int X509_policy_level_node_count(X509_POLICY_LEVEL *level); + +X509_POLICY_NODE *X509_policy_level_get0_node(const X509_POLICY_LEVEL *level, + int i); + +const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); + +STACK_OF(POLICYQUALINFO) + *X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node); +const X509_POLICY_NODE + *X509_policy_node_get0_parent(const X509_POLICY_NODE *node); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509err.h b/deps/openssl/android/x86/usr/local/include/openssl/x509err.h index cd08673f..34ead4b8 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509err.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509err.h @@ -1,88 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509ERR_H -# define HEADER_X509ERR_H +#ifndef OPENSSL_X509ERR_H +# define OPENSSL_X509ERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509_strings(void); -/* - * X509 function codes. - */ -# define X509_F_ADD_CERT_DIR 100 -# define X509_F_BUILD_CHAIN 106 -# define X509_F_BY_FILE_CTRL 101 -# define X509_F_CHECK_NAME_CONSTRAINTS 149 -# define X509_F_CHECK_POLICY 145 -# define X509_F_DANE_I2D 107 -# define X509_F_DIR_CTRL 102 -# define X509_F_GET_CERT_BY_SUBJECT 103 -# define X509_F_I2D_X509_AUX 151 -# define X509_F_LOOKUP_CERTS_SK 152 -# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 -# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 -# define X509_F_NEW_DIR 153 -# define X509_F_X509AT_ADD1_ATTR 135 -# define X509_F_X509V3_ADD_EXT 104 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 -# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 -# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 -# define X509_F_X509_CHECK_PRIVATE_KEY 128 -# define X509_F_X509_CRL_DIFF 105 -# define X509_F_X509_CRL_METHOD_NEW 154 -# define X509_F_X509_CRL_PRINT_FP 147 -# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 -# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 -# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 -# define X509_F_X509_LOAD_CERT_CRL_FILE 132 -# define X509_F_X509_LOAD_CERT_FILE 111 -# define X509_F_X509_LOAD_CRL_FILE 112 -# define X509_F_X509_LOOKUP_METH_NEW 160 -# define X509_F_X509_LOOKUP_NEW 155 -# define X509_F_X509_NAME_ADD_ENTRY 113 -# define X509_F_X509_NAME_CANON 156 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 -# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 -# define X509_F_X509_NAME_ONELINE 116 -# define X509_F_X509_NAME_PRINT 117 -# define X509_F_X509_OBJECT_NEW 150 -# define X509_F_X509_PRINT_EX_FP 118 -# define X509_F_X509_PUBKEY_DECODE 148 -# define X509_F_X509_PUBKEY_GET 161 -# define X509_F_X509_PUBKEY_GET0 119 -# define X509_F_X509_PUBKEY_SET 120 -# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 -# define X509_F_X509_REQ_PRINT_EX 121 -# define X509_F_X509_REQ_PRINT_FP 122 -# define X509_F_X509_REQ_TO_X509 123 -# define X509_F_X509_STORE_ADD_CERT 124 -# define X509_F_X509_STORE_ADD_CRL 125 -# define X509_F_X509_STORE_ADD_LOOKUP 157 -# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 -# define X509_F_X509_STORE_CTX_INIT 143 -# define X509_F_X509_STORE_CTX_NEW 142 -# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 -# define X509_F_X509_STORE_NEW 158 -# define X509_F_X509_TO_X509_REQ 126 -# define X509_F_X509_TRUST_ADD 133 -# define X509_F_X509_TRUST_SET 141 -# define X509_F_X509_VERIFY_CERT 127 -# define X509_F_X509_VERIFY_PARAM_NEW 159 /* * X509 reason codes. @@ -92,12 +26,17 @@ int ERR_load_X509_strings(void); # define X509_R_BAD_X509_FILETYPE 100 # define X509_R_BASE64_DECODE_ERROR 118 # define X509_R_CANT_CHECK_DH_KEY 114 +# define X509_R_CERTIFICATE_VERIFICATION_FAILED 139 # define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 # define X509_R_CRL_ALREADY_DELTA 127 # define X509_R_CRL_VERIFY_FAILURE 131 +# define X509_R_DUPLICATE_ATTRIBUTE 140 +# define X509_R_ERROR_GETTING_MD_BY_NID 141 +# define X509_R_ERROR_USING_SIGINF_SET 142 # define X509_R_IDP_MISMATCH 128 # define X509_R_INVALID_ATTRIBUTES 138 # define X509_R_INVALID_DIRECTORY 113 +# define X509_R_INVALID_DISTPOINT 143 # define X509_R_INVALID_FIELD_NAME 119 # define X509_R_INVALID_TRUST 123 # define X509_R_ISSUER_MISMATCH 129 @@ -121,6 +60,7 @@ int ERR_load_X509_strings(void); # define X509_R_UNKNOWN_KEY_TYPE 117 # define X509_R_UNKNOWN_NID 109 # define X509_R_UNKNOWN_PURPOSE_ID 121 +# define X509_R_UNKNOWN_SIGID_ALGS 144 # define X509_R_UNKNOWN_TRUST_ID 120 # define X509_R_UNSUPPORTED_ALGORITHM 111 # define X509_R_WRONG_LOOKUP_TYPE 112 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h b/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h index 3a4f04c1..75016354 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h @@ -1,19 +1,33 @@ /* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509v3.h.in + * * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509V3_H -# define HEADER_X509V3_H + + +#ifndef OPENSSL_X509V3_H +# define OPENSSL_X509V3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509V3_H +# endif # include # include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -28,7 +42,7 @@ struct v3_ext_ctx; typedef void *(*X509V3_EXT_NEW)(void); typedef void (*X509V3_EXT_FREE) (void *); typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); -typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); +typedef int (*X509V3_EXT_I2D) (const void *, unsigned char **); typedef STACK_OF(CONF_VALUE) * (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, STACK_OF(CONF_VALUE) *extlist); @@ -75,9 +89,12 @@ typedef struct X509V3_CONF_METHOD_st { void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); } X509V3_CONF_METHOD; -/* Context specific info */ +/* Context specific info for producing X509 v3 extensions*/ struct v3_ext_ctx { -# define CTX_TEST 0x1 +# define X509V3_CTX_TEST 0x1 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define CTX_TEST X509V3_CTX_TEST +# endif # define X509V3_CTX_REPLACE 0x2 int flags; X509 *issuer_cert; @@ -86,12 +103,39 @@ struct v3_ext_ctx { X509_CRL *crl; X509V3_CONF_METHOD *db_meth; void *db; + EVP_PKEY *issuer_pkey; /* Maybe more here */ }; typedef struct v3_ext_method X509V3_EXT_METHOD; -DEFINE_STACK_OF(X509V3_EXT_METHOD) +SKM_DEFINE_STACK_OF_INTERNAL(X509V3_EXT_METHOD, X509V3_EXT_METHOD, X509V3_EXT_METHOD) +#define sk_X509V3_EXT_METHOD_num(sk) OPENSSL_sk_num(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_value(sk, idx) ((X509V3_EXT_METHOD *)OPENSSL_sk_value(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), (idx))) +#define sk_X509V3_EXT_METHOD_new(cmp) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp))) +#define sk_X509V3_EXT_METHOD_new_null() ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_null()) +#define sk_X509V3_EXT_METHOD_new_reserve(cmp, n) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_reserve(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp), (n))) +#define sk_X509V3_EXT_METHOD_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (n)) +#define sk_X509V3_EXT_METHOD_free(sk) OPENSSL_sk_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_zero(sk) OPENSSL_sk_zero(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_delete(sk, i) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (i))) +#define sk_X509V3_EXT_METHOD_delete_ptr(sk, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete_ptr(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))) +#define sk_X509V3_EXT_METHOD_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_pop(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_pop(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_shift(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_shift(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk),ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc)) +#define sk_X509V3_EXT_METHOD_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), (idx)) +#define sk_X509V3_EXT_METHOD_set(sk, idx, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_set(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (idx), ossl_check_X509V3_EXT_METHOD_type(ptr))) +#define sk_X509V3_EXT_METHOD_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), pnum) +#define sk_X509V3_EXT_METHOD_sort(sk) OPENSSL_sk_sort(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_dup(sk) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_dup(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_deep_copy(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_copyfunc_type(copyfunc), ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc))) +#define sk_X509V3_EXT_METHOD_set_cmp_func(sk, cmp) ((sk_X509V3_EXT_METHOD_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp))) + /* ext_flags values */ # define X509V3_EXT_DYNAMIC 0x1 @@ -157,17 +201,92 @@ typedef struct ACCESS_DESCRIPTION_st { GENERAL_NAME *location; } ACCESS_DESCRIPTION; +SKM_DEFINE_STACK_OF_INTERNAL(ACCESS_DESCRIPTION, ACCESS_DESCRIPTION, ACCESS_DESCRIPTION) +#define sk_ACCESS_DESCRIPTION_num(sk) OPENSSL_sk_num(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_value(sk, idx) ((ACCESS_DESCRIPTION *)OPENSSL_sk_value(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), (idx))) +#define sk_ACCESS_DESCRIPTION_new(cmp) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp))) +#define sk_ACCESS_DESCRIPTION_new_null() ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_null()) +#define sk_ACCESS_DESCRIPTION_new_reserve(cmp, n) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_reserve(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp), (n))) +#define sk_ACCESS_DESCRIPTION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (n)) +#define sk_ACCESS_DESCRIPTION_free(sk) OPENSSL_sk_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_zero(sk) OPENSSL_sk_zero(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_delete(sk, i) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (i))) +#define sk_ACCESS_DESCRIPTION_delete_ptr(sk, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete_ptr(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))) +#define sk_ACCESS_DESCRIPTION_push(sk, ptr) OPENSSL_sk_push(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_pop(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_pop(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_shift(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_shift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk),ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc)) +#define sk_ACCESS_DESCRIPTION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), (idx)) +#define sk_ACCESS_DESCRIPTION_set(sk, idx, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_set(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (idx), ossl_check_ACCESS_DESCRIPTION_type(ptr))) +#define sk_ACCESS_DESCRIPTION_find(sk, ptr) OPENSSL_sk_find(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), pnum) +#define sk_ACCESS_DESCRIPTION_sort(sk) OPENSSL_sk_sort(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_dup(sk) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_dup(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_deep_copy(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_copyfunc_type(copyfunc), ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc))) +#define sk_ACCESS_DESCRIPTION_set_cmp_func(sk, cmp) ((sk_ACCESS_DESCRIPTION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAME, GENERAL_NAME, GENERAL_NAME) +#define sk_GENERAL_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_value(sk, idx) ((GENERAL_NAME *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAME_sk_type(sk), (idx))) +#define sk_GENERAL_NAME_new(cmp) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new(ossl_check_GENERAL_NAME_compfunc_type(cmp))) +#define sk_GENERAL_NAME_new_null() ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_NAME_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAME_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAME_sk_type(sk), (n)) +#define sk_GENERAL_NAME_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_delete(sk, i) ((GENERAL_NAME *)OPENSSL_sk_delete(ossl_check_GENERAL_NAME_sk_type(sk), (i))) +#define sk_GENERAL_NAME_delete_ptr(sk, ptr) ((GENERAL_NAME *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))) +#define sk_GENERAL_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_pop(sk) ((GENERAL_NAME *)OPENSSL_sk_pop(ossl_check_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_shift(sk) ((GENERAL_NAME *)OPENSSL_sk_shift(ossl_check_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAME_sk_type(sk),ossl_check_GENERAL_NAME_freefunc_type(freefunc)) +#define sk_GENERAL_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), (idx)) +#define sk_GENERAL_NAME_set(sk, idx, ptr) ((GENERAL_NAME *)OPENSSL_sk_set(ossl_check_GENERAL_NAME_sk_type(sk), (idx), ossl_check_GENERAL_NAME_type(ptr))) +#define sk_GENERAL_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), pnum) +#define sk_GENERAL_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_dup(sk) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_copyfunc_type(copyfunc), ossl_check_GENERAL_NAME_freefunc_type(freefunc))) +#define sk_GENERAL_NAME_set_cmp_func(sk, cmp) ((sk_GENERAL_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_compfunc_type(cmp))) + + typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; - typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; - typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; - -DEFINE_STACK_OF(GENERAL_NAME) typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; -DEFINE_STACK_OF(GENERAL_NAMES) -DEFINE_STACK_OF(ACCESS_DESCRIPTION) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAMES, GENERAL_NAMES, GENERAL_NAMES) +#define sk_GENERAL_NAMES_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_value(sk, idx) ((GENERAL_NAMES *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAMES_sk_type(sk), (idx))) +#define sk_GENERAL_NAMES_new(cmp) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new(ossl_check_GENERAL_NAMES_compfunc_type(cmp))) +#define sk_GENERAL_NAMES_new_null() ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_NAMES_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAMES_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAMES_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAMES_sk_type(sk), (n)) +#define sk_GENERAL_NAMES_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_delete(sk, i) ((GENERAL_NAMES *)OPENSSL_sk_delete(ossl_check_GENERAL_NAMES_sk_type(sk), (i))) +#define sk_GENERAL_NAMES_delete_ptr(sk, ptr) ((GENERAL_NAMES *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))) +#define sk_GENERAL_NAMES_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_pop(sk) ((GENERAL_NAMES *)OPENSSL_sk_pop(ossl_check_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_shift(sk) ((GENERAL_NAMES *)OPENSSL_sk_shift(ossl_check_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAMES_sk_type(sk),ossl_check_GENERAL_NAMES_freefunc_type(freefunc)) +#define sk_GENERAL_NAMES_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), (idx)) +#define sk_GENERAL_NAMES_set(sk, idx, ptr) ((GENERAL_NAMES *)OPENSSL_sk_set(ossl_check_GENERAL_NAMES_sk_type(sk), (idx), ossl_check_GENERAL_NAMES_type(ptr))) +#define sk_GENERAL_NAMES_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), pnum) +#define sk_GENERAL_NAMES_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_dup(sk) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_copyfunc_type(copyfunc), ossl_check_GENERAL_NAMES_freefunc_type(freefunc))) +#define sk_GENERAL_NAMES_set_cmp_func(sk, cmp) ((sk_GENERAL_NAMES_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_compfunc_type(cmp))) + typedef struct DIST_POINT_NAME_st { int type; @@ -200,9 +319,35 @@ struct DIST_POINT_st { int dp_reasons; }; -typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; +SKM_DEFINE_STACK_OF_INTERNAL(DIST_POINT, DIST_POINT, DIST_POINT) +#define sk_DIST_POINT_num(sk) OPENSSL_sk_num(ossl_check_const_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_value(sk, idx) ((DIST_POINT *)OPENSSL_sk_value(ossl_check_const_DIST_POINT_sk_type(sk), (idx))) +#define sk_DIST_POINT_new(cmp) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new(ossl_check_DIST_POINT_compfunc_type(cmp))) +#define sk_DIST_POINT_new_null() ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_null()) +#define sk_DIST_POINT_new_reserve(cmp, n) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_reserve(ossl_check_DIST_POINT_compfunc_type(cmp), (n))) +#define sk_DIST_POINT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_DIST_POINT_sk_type(sk), (n)) +#define sk_DIST_POINT_free(sk) OPENSSL_sk_free(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_zero(sk) OPENSSL_sk_zero(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_delete(sk, i) ((DIST_POINT *)OPENSSL_sk_delete(ossl_check_DIST_POINT_sk_type(sk), (i))) +#define sk_DIST_POINT_delete_ptr(sk, ptr) ((DIST_POINT *)OPENSSL_sk_delete_ptr(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))) +#define sk_DIST_POINT_push(sk, ptr) OPENSSL_sk_push(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_pop(sk) ((DIST_POINT *)OPENSSL_sk_pop(ossl_check_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_shift(sk) ((DIST_POINT *)OPENSSL_sk_shift(ossl_check_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_DIST_POINT_sk_type(sk),ossl_check_DIST_POINT_freefunc_type(freefunc)) +#define sk_DIST_POINT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), (idx)) +#define sk_DIST_POINT_set(sk, idx, ptr) ((DIST_POINT *)OPENSSL_sk_set(ossl_check_DIST_POINT_sk_type(sk), (idx), ossl_check_DIST_POINT_type(ptr))) +#define sk_DIST_POINT_find(sk, ptr) OPENSSL_sk_find(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), pnum) +#define sk_DIST_POINT_sort(sk) OPENSSL_sk_sort(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_dup(sk) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_dup(ossl_check_const_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_deep_copy(ossl_check_const_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_copyfunc_type(copyfunc), ossl_check_DIST_POINT_freefunc_type(freefunc))) +#define sk_DIST_POINT_set_cmp_func(sk, cmp) ((sk_DIST_POINT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_compfunc_type(cmp))) -DEFINE_STACK_OF(DIST_POINT) + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; struct AUTHORITY_KEYID_st { ASN1_OCTET_STRING *keyid; @@ -217,13 +362,47 @@ typedef struct SXNET_ID_st { ASN1_OCTET_STRING *user; } SXNETID; -DEFINE_STACK_OF(SXNETID) +SKM_DEFINE_STACK_OF_INTERNAL(SXNETID, SXNETID, SXNETID) +#define sk_SXNETID_num(sk) OPENSSL_sk_num(ossl_check_const_SXNETID_sk_type(sk)) +#define sk_SXNETID_value(sk, idx) ((SXNETID *)OPENSSL_sk_value(ossl_check_const_SXNETID_sk_type(sk), (idx))) +#define sk_SXNETID_new(cmp) ((STACK_OF(SXNETID) *)OPENSSL_sk_new(ossl_check_SXNETID_compfunc_type(cmp))) +#define sk_SXNETID_new_null() ((STACK_OF(SXNETID) *)OPENSSL_sk_new_null()) +#define sk_SXNETID_new_reserve(cmp, n) ((STACK_OF(SXNETID) *)OPENSSL_sk_new_reserve(ossl_check_SXNETID_compfunc_type(cmp), (n))) +#define sk_SXNETID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SXNETID_sk_type(sk), (n)) +#define sk_SXNETID_free(sk) OPENSSL_sk_free(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_zero(sk) OPENSSL_sk_zero(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_delete(sk, i) ((SXNETID *)OPENSSL_sk_delete(ossl_check_SXNETID_sk_type(sk), (i))) +#define sk_SXNETID_delete_ptr(sk, ptr) ((SXNETID *)OPENSSL_sk_delete_ptr(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))) +#define sk_SXNETID_push(sk, ptr) OPENSSL_sk_push(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_pop(sk) ((SXNETID *)OPENSSL_sk_pop(ossl_check_SXNETID_sk_type(sk))) +#define sk_SXNETID_shift(sk) ((SXNETID *)OPENSSL_sk_shift(ossl_check_SXNETID_sk_type(sk))) +#define sk_SXNETID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SXNETID_sk_type(sk),ossl_check_SXNETID_freefunc_type(freefunc)) +#define sk_SXNETID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), (idx)) +#define sk_SXNETID_set(sk, idx, ptr) ((SXNETID *)OPENSSL_sk_set(ossl_check_SXNETID_sk_type(sk), (idx), ossl_check_SXNETID_type(ptr))) +#define sk_SXNETID_find(sk, ptr) OPENSSL_sk_find(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), pnum) +#define sk_SXNETID_sort(sk) OPENSSL_sk_sort(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SXNETID_sk_type(sk)) +#define sk_SXNETID_dup(sk) ((STACK_OF(SXNETID) *)OPENSSL_sk_dup(ossl_check_const_SXNETID_sk_type(sk))) +#define sk_SXNETID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SXNETID) *)OPENSSL_sk_deep_copy(ossl_check_const_SXNETID_sk_type(sk), ossl_check_SXNETID_copyfunc_type(copyfunc), ossl_check_SXNETID_freefunc_type(freefunc))) +#define sk_SXNETID_set_cmp_func(sk, cmp) ((sk_SXNETID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_compfunc_type(cmp))) + + typedef struct SXNET_st { ASN1_INTEGER *version; STACK_OF(SXNETID) *ids; } SXNET; +typedef struct ISSUER_SIGN_TOOL_st { + ASN1_UTF8STRING *signTool; + ASN1_UTF8STRING *cATool; + ASN1_UTF8STRING *signToolCert; + ASN1_UTF8STRING *cAToolCert; +} ISSUER_SIGN_TOOL; + typedef struct NOTICEREF_st { ASN1_STRING *organization; STACK_OF(ASN1_INTEGER) *noticenos; @@ -243,23 +422,102 @@ typedef struct POLICYQUALINFO_st { } d; } POLICYQUALINFO; -DEFINE_STACK_OF(POLICYQUALINFO) +SKM_DEFINE_STACK_OF_INTERNAL(POLICYQUALINFO, POLICYQUALINFO, POLICYQUALINFO) +#define sk_POLICYQUALINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_value(sk, idx) ((POLICYQUALINFO *)OPENSSL_sk_value(ossl_check_const_POLICYQUALINFO_sk_type(sk), (idx))) +#define sk_POLICYQUALINFO_new(cmp) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new(ossl_check_POLICYQUALINFO_compfunc_type(cmp))) +#define sk_POLICYQUALINFO_new_null() ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_null()) +#define sk_POLICYQUALINFO_new_reserve(cmp, n) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYQUALINFO_compfunc_type(cmp), (n))) +#define sk_POLICYQUALINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYQUALINFO_sk_type(sk), (n)) +#define sk_POLICYQUALINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_delete(sk, i) ((POLICYQUALINFO *)OPENSSL_sk_delete(ossl_check_POLICYQUALINFO_sk_type(sk), (i))) +#define sk_POLICYQUALINFO_delete_ptr(sk, ptr) ((POLICYQUALINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))) +#define sk_POLICYQUALINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_pop(sk) ((POLICYQUALINFO *)OPENSSL_sk_pop(ossl_check_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_shift(sk) ((POLICYQUALINFO *)OPENSSL_sk_shift(ossl_check_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYQUALINFO_sk_type(sk),ossl_check_POLICYQUALINFO_freefunc_type(freefunc)) +#define sk_POLICYQUALINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), (idx)) +#define sk_POLICYQUALINFO_set(sk, idx, ptr) ((POLICYQUALINFO *)OPENSSL_sk_set(ossl_check_POLICYQUALINFO_sk_type(sk), (idx), ossl_check_POLICYQUALINFO_type(ptr))) +#define sk_POLICYQUALINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), pnum) +#define sk_POLICYQUALINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_dup(sk) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_copyfunc_type(copyfunc), ossl_check_POLICYQUALINFO_freefunc_type(freefunc))) +#define sk_POLICYQUALINFO_set_cmp_func(sk, cmp) ((sk_POLICYQUALINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_compfunc_type(cmp))) + + typedef struct POLICYINFO_st { ASN1_OBJECT *policyid; STACK_OF(POLICYQUALINFO) *qualifiers; } POLICYINFO; -typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; +SKM_DEFINE_STACK_OF_INTERNAL(POLICYINFO, POLICYINFO, POLICYINFO) +#define sk_POLICYINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_value(sk, idx) ((POLICYINFO *)OPENSSL_sk_value(ossl_check_const_POLICYINFO_sk_type(sk), (idx))) +#define sk_POLICYINFO_new(cmp) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new(ossl_check_POLICYINFO_compfunc_type(cmp))) +#define sk_POLICYINFO_new_null() ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_null()) +#define sk_POLICYINFO_new_reserve(cmp, n) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYINFO_compfunc_type(cmp), (n))) +#define sk_POLICYINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYINFO_sk_type(sk), (n)) +#define sk_POLICYINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_delete(sk, i) ((POLICYINFO *)OPENSSL_sk_delete(ossl_check_POLICYINFO_sk_type(sk), (i))) +#define sk_POLICYINFO_delete_ptr(sk, ptr) ((POLICYINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))) +#define sk_POLICYINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_pop(sk) ((POLICYINFO *)OPENSSL_sk_pop(ossl_check_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_shift(sk) ((POLICYINFO *)OPENSSL_sk_shift(ossl_check_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYINFO_sk_type(sk),ossl_check_POLICYINFO_freefunc_type(freefunc)) +#define sk_POLICYINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), (idx)) +#define sk_POLICYINFO_set(sk, idx, ptr) ((POLICYINFO *)OPENSSL_sk_set(ossl_check_POLICYINFO_sk_type(sk), (idx), ossl_check_POLICYINFO_type(ptr))) +#define sk_POLICYINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), pnum) +#define sk_POLICYINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_dup(sk) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_copyfunc_type(copyfunc), ossl_check_POLICYINFO_freefunc_type(freefunc))) +#define sk_POLICYINFO_set_cmp_func(sk, cmp) ((sk_POLICYINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_compfunc_type(cmp))) -DEFINE_STACK_OF(POLICYINFO) + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; typedef struct POLICY_MAPPING_st { ASN1_OBJECT *issuerDomainPolicy; ASN1_OBJECT *subjectDomainPolicy; } POLICY_MAPPING; -DEFINE_STACK_OF(POLICY_MAPPING) +SKM_DEFINE_STACK_OF_INTERNAL(POLICY_MAPPING, POLICY_MAPPING, POLICY_MAPPING) +#define sk_POLICY_MAPPING_num(sk) OPENSSL_sk_num(ossl_check_const_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_value(sk, idx) ((POLICY_MAPPING *)OPENSSL_sk_value(ossl_check_const_POLICY_MAPPING_sk_type(sk), (idx))) +#define sk_POLICY_MAPPING_new(cmp) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new(ossl_check_POLICY_MAPPING_compfunc_type(cmp))) +#define sk_POLICY_MAPPING_new_null() ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_null()) +#define sk_POLICY_MAPPING_new_reserve(cmp, n) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_reserve(ossl_check_POLICY_MAPPING_compfunc_type(cmp), (n))) +#define sk_POLICY_MAPPING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICY_MAPPING_sk_type(sk), (n)) +#define sk_POLICY_MAPPING_free(sk) OPENSSL_sk_free(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_zero(sk) OPENSSL_sk_zero(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_delete(sk, i) ((POLICY_MAPPING *)OPENSSL_sk_delete(ossl_check_POLICY_MAPPING_sk_type(sk), (i))) +#define sk_POLICY_MAPPING_delete_ptr(sk, ptr) ((POLICY_MAPPING *)OPENSSL_sk_delete_ptr(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))) +#define sk_POLICY_MAPPING_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_pop(sk) ((POLICY_MAPPING *)OPENSSL_sk_pop(ossl_check_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_shift(sk) ((POLICY_MAPPING *)OPENSSL_sk_shift(ossl_check_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICY_MAPPING_sk_type(sk),ossl_check_POLICY_MAPPING_freefunc_type(freefunc)) +#define sk_POLICY_MAPPING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), (idx)) +#define sk_POLICY_MAPPING_set(sk, idx, ptr) ((POLICY_MAPPING *)OPENSSL_sk_set(ossl_check_POLICY_MAPPING_sk_type(sk), (idx), ossl_check_POLICY_MAPPING_type(ptr))) +#define sk_POLICY_MAPPING_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), pnum) +#define sk_POLICY_MAPPING_sort(sk) OPENSSL_sk_sort(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_dup(sk) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_dup(ossl_check_const_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_copyfunc_type(copyfunc), ossl_check_POLICY_MAPPING_freefunc_type(freefunc))) +#define sk_POLICY_MAPPING_set_cmp_func(sk, cmp) ((sk_POLICY_MAPPING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_compfunc_type(cmp))) + typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; @@ -269,7 +527,33 @@ typedef struct GENERAL_SUBTREE_st { ASN1_INTEGER *maximum; } GENERAL_SUBTREE; -DEFINE_STACK_OF(GENERAL_SUBTREE) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_SUBTREE, GENERAL_SUBTREE, GENERAL_SUBTREE) +#define sk_GENERAL_SUBTREE_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_value(sk, idx) ((GENERAL_SUBTREE *)OPENSSL_sk_value(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), (idx))) +#define sk_GENERAL_SUBTREE_new(cmp) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp))) +#define sk_GENERAL_SUBTREE_new_null() ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_SUBTREE_new_reserve(cmp, n) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp), (n))) +#define sk_GENERAL_SUBTREE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_SUBTREE_sk_type(sk), (n)) +#define sk_GENERAL_SUBTREE_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_delete(sk, i) ((GENERAL_SUBTREE *)OPENSSL_sk_delete(ossl_check_GENERAL_SUBTREE_sk_type(sk), (i))) +#define sk_GENERAL_SUBTREE_delete_ptr(sk, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))) +#define sk_GENERAL_SUBTREE_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_pop(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_pop(ossl_check_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_shift(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_shift(ossl_check_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_SUBTREE_sk_type(sk),ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc)) +#define sk_GENERAL_SUBTREE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), (idx)) +#define sk_GENERAL_SUBTREE_set(sk, idx, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_set(ossl_check_GENERAL_SUBTREE_sk_type(sk), (idx), ossl_check_GENERAL_SUBTREE_type(ptr))) +#define sk_GENERAL_SUBTREE_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), pnum) +#define sk_GENERAL_SUBTREE_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_dup(sk) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_copyfunc_type(copyfunc), ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc))) +#define sk_GENERAL_SUBTREE_set_cmp_func(sk, cmp) ((sk_GENERAL_SUBTREE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_compfunc_type(cmp))) + struct NAME_CONSTRAINTS_st { STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; @@ -325,7 +609,7 @@ struct ISSUING_DIST_POINT_st { ",name:", (val)->name, ",value:", (val)->value) # define X509V3_set_ctx_test(ctx) \ - X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, X509V3_CTX_TEST) # define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; # define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ @@ -343,6 +627,13 @@ struct ISSUING_DIST_POINT_st { 0,0,0,0, \ NULL} +#define EXT_UTF8STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_UTF8STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_UTF8STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_UTF8STRING, \ + 0,0,0,0, \ + NULL} + # define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} /* X509_PURPOSE stuff */ @@ -353,8 +644,7 @@ struct ISSUING_DIST_POINT_st { # define EXFLAG_NSCERT 0x8 # define EXFLAG_CA 0x10 -/* Really self issued not necessarily self signed */ -# define EXFLAG_SI 0x20 +# define EXFLAG_SI 0x20 /* self-issued, maybe not self-signed */ # define EXFLAG_V1 0x40 # define EXFLAG_INVALID 0x80 /* EXFLAG_SET is set to indicate that some values have been precomputed */ @@ -366,6 +656,10 @@ struct ISSUING_DIST_POINT_st { # define EXFLAG_FRESHEST 0x1000 # define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ +# define EXFLAG_BCONS_CRITICAL 0x10000 +# define EXFLAG_AKID_CRITICAL 0x20000 +# define EXFLAG_SKID_CRITICAL 0x40000 +# define EXFLAG_SAN_CRITICAL 0x80000 # define EXFLAG_NO_FINGERPRINT 0x100000 # define KU_DIGITAL_SIGNATURE 0x0080 @@ -391,7 +685,7 @@ struct ISSUING_DIST_POINT_st { # define XKU_SSL_CLIENT 0x2 # define XKU_SMIME 0x4 # define XKU_CODE_SIGN 0x8 -# define XKU_SGC 0x10 +# define XKU_SGC 0x10 /* Netscape or MS Server-Gated Crypto */ # define XKU_OCSP_SIGN 0x20 # define XKU_TIMESTAMP 0x40 # define XKU_DVCS 0x80 @@ -410,6 +704,35 @@ typedef struct x509_purpose_st { void *usr_data; } X509_PURPOSE; +SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE) +#define sk_X509_PURPOSE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_value(sk, idx) ((X509_PURPOSE *)OPENSSL_sk_value(ossl_check_const_X509_PURPOSE_sk_type(sk), (idx))) +#define sk_X509_PURPOSE_new(cmp) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new(ossl_check_X509_PURPOSE_compfunc_type(cmp))) +#define sk_X509_PURPOSE_new_null() ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_null()) +#define sk_X509_PURPOSE_new_reserve(cmp, n) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_reserve(ossl_check_X509_PURPOSE_compfunc_type(cmp), (n))) +#define sk_X509_PURPOSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_PURPOSE_sk_type(sk), (n)) +#define sk_X509_PURPOSE_free(sk) OPENSSL_sk_free(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_delete(sk, i) ((X509_PURPOSE *)OPENSSL_sk_delete(ossl_check_X509_PURPOSE_sk_type(sk), (i))) +#define sk_X509_PURPOSE_delete_ptr(sk, ptr) ((X509_PURPOSE *)OPENSSL_sk_delete_ptr(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))) +#define sk_X509_PURPOSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_pop(sk) ((X509_PURPOSE *)OPENSSL_sk_pop(ossl_check_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_shift(sk) ((X509_PURPOSE *)OPENSSL_sk_shift(ossl_check_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_PURPOSE_sk_type(sk),ossl_check_X509_PURPOSE_freefunc_type(freefunc)) +#define sk_X509_PURPOSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), (idx)) +#define sk_X509_PURPOSE_set(sk, idx, ptr) ((X509_PURPOSE *)OPENSSL_sk_set(ossl_check_X509_PURPOSE_sk_type(sk), (idx), ossl_check_X509_PURPOSE_type(ptr))) +#define sk_X509_PURPOSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), pnum) +#define sk_X509_PURPOSE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_dup(sk) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_dup(ossl_check_const_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_copyfunc_type(copyfunc), ossl_check_X509_PURPOSE_freefunc_type(freefunc))) +#define sk_X509_PURPOSE_set_cmp_func(sk, cmp) ((sk_X509_PURPOSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_compfunc_type(cmp))) + + + # define X509_PURPOSE_SSL_CLIENT 1 # define X509_PURPOSE_SSL_SERVER 2 # define X509_PURPOSE_NS_SSL_SERVER 3 @@ -446,13 +769,13 @@ typedef struct x509_purpose_st { # define X509V3_ADD_DELETE 5L # define X509V3_ADD_SILENT 0x10 -DEFINE_STACK_OF(X509_PURPOSE) - DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) DECLARE_ASN1_FUNCTIONS(SXNET) DECLARE_ASN1_FUNCTIONS(SXNETID) +DECLARE_ASN1_FUNCTIONS(ISSUER_SIGN_TOOL) + int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, int userlen); @@ -468,7 +791,7 @@ DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) -GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); +DECLARE_ASN1_DUP_FUNCTION(GENERAL_NAME) int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, @@ -480,6 +803,9 @@ STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *str); +char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, ASN1_UTF8STRING *utf8); +ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen, @@ -525,7 +851,7 @@ DECLARE_ASN1_FUNCTIONS(DIST_POINT) DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) -int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, const X509_NAME *iname); int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); @@ -551,13 +877,14 @@ GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, X509V3_CTX *ctx, int gen_type, const char *value, int is_nc); -# ifdef HEADER_CONF_H +# ifdef OPENSSL_CONF_H GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf); GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc); + void X509V3_conf_free(CONF_VALUE *val); X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, @@ -599,6 +926,8 @@ void X509V3_string_free(X509V3_CTX *ctx, char *str); void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, X509_REQ *req, X509_CRL *crl, int flags); +/* For API backward compatibility, this is separate from X509V3_set_ctx(): */ +int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey); int X509V3_add_value(const char *name, const char *value, STACK_OF(CONF_VALUE) **extlist); @@ -630,7 +959,7 @@ X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, int crit, unsigned long flags); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* The new declarations are in crypto.h, but the old ones were here. */ # define hex_to_string OPENSSL_buf2hexstr # define string_to_hex OPENSSL_hexstr2buf @@ -652,7 +981,7 @@ int X509_check_purpose(X509 *x, int id, int ca); int X509_supported_extension(X509_EXTENSION *ex); int X509_PURPOSE_set(int *p, int purpose); int X509_check_issued(X509 *issuer, X509 *subject); -int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); +int X509_check_akid(const X509 *issuer, const AUTHORITY_KEYID *akid); void X509_set_proxy_flag(X509 *x); void X509_set_proxy_pathlen(X509 *x, long l); long X509_get_proxy_pathlen(X509 *x); @@ -719,7 +1048,34 @@ int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, unsigned long chtype); void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); -DEFINE_STACK_OF(X509_POLICY_NODE) +SKM_DEFINE_STACK_OF_INTERNAL(X509_POLICY_NODE, X509_POLICY_NODE, X509_POLICY_NODE) +#define sk_X509_POLICY_NODE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_value(sk, idx) ((X509_POLICY_NODE *)OPENSSL_sk_value(ossl_check_const_X509_POLICY_NODE_sk_type(sk), (idx))) +#define sk_X509_POLICY_NODE_new(cmp) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new(ossl_check_X509_POLICY_NODE_compfunc_type(cmp))) +#define sk_X509_POLICY_NODE_new_null() ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_null()) +#define sk_X509_POLICY_NODE_new_reserve(cmp, n) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_reserve(ossl_check_X509_POLICY_NODE_compfunc_type(cmp), (n))) +#define sk_X509_POLICY_NODE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_POLICY_NODE_sk_type(sk), (n)) +#define sk_X509_POLICY_NODE_free(sk) OPENSSL_sk_free(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_delete(sk, i) ((X509_POLICY_NODE *)OPENSSL_sk_delete(ossl_check_X509_POLICY_NODE_sk_type(sk), (i))) +#define sk_X509_POLICY_NODE_delete_ptr(sk, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_delete_ptr(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))) +#define sk_X509_POLICY_NODE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_pop(sk) ((X509_POLICY_NODE *)OPENSSL_sk_pop(ossl_check_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_shift(sk) ((X509_POLICY_NODE *)OPENSSL_sk_shift(ossl_check_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_POLICY_NODE_sk_type(sk),ossl_check_X509_POLICY_NODE_freefunc_type(freefunc)) +#define sk_X509_POLICY_NODE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), (idx)) +#define sk_X509_POLICY_NODE_set(sk, idx, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_set(ossl_check_X509_POLICY_NODE_sk_type(sk), (idx), ossl_check_X509_POLICY_NODE_type(ptr))) +#define sk_X509_POLICY_NODE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), pnum) +#define sk_X509_POLICY_NODE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_dup(sk) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_dup(ossl_check_const_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_copyfunc_type(copyfunc), ossl_check_X509_POLICY_NODE_freefunc_type(freefunc))) +#define sk_X509_POLICY_NODE_set_cmp_func(sk, cmp) ((sk_X509_POLICY_NODE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_compfunc_type(cmp))) + + #ifndef OPENSSL_NO_RFC3779 typedef struct ASRange_st { @@ -737,8 +1093,35 @@ typedef struct ASIdOrRange_st { } u; } ASIdOrRange; +SKM_DEFINE_STACK_OF_INTERNAL(ASIdOrRange, ASIdOrRange, ASIdOrRange) +#define sk_ASIdOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_value(sk, idx) ((ASIdOrRange *)OPENSSL_sk_value(ossl_check_const_ASIdOrRange_sk_type(sk), (idx))) +#define sk_ASIdOrRange_new(cmp) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new(ossl_check_ASIdOrRange_compfunc_type(cmp))) +#define sk_ASIdOrRange_new_null() ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_null()) +#define sk_ASIdOrRange_new_reserve(cmp, n) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_reserve(ossl_check_ASIdOrRange_compfunc_type(cmp), (n))) +#define sk_ASIdOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASIdOrRange_sk_type(sk), (n)) +#define sk_ASIdOrRange_free(sk) OPENSSL_sk_free(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_delete(sk, i) ((ASIdOrRange *)OPENSSL_sk_delete(ossl_check_ASIdOrRange_sk_type(sk), (i))) +#define sk_ASIdOrRange_delete_ptr(sk, ptr) ((ASIdOrRange *)OPENSSL_sk_delete_ptr(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))) +#define sk_ASIdOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_pop(sk) ((ASIdOrRange *)OPENSSL_sk_pop(ossl_check_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_shift(sk) ((ASIdOrRange *)OPENSSL_sk_shift(ossl_check_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASIdOrRange_sk_type(sk),ossl_check_ASIdOrRange_freefunc_type(freefunc)) +#define sk_ASIdOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), (idx)) +#define sk_ASIdOrRange_set(sk, idx, ptr) ((ASIdOrRange *)OPENSSL_sk_set(ossl_check_ASIdOrRange_sk_type(sk), (idx), ossl_check_ASIdOrRange_type(ptr))) +#define sk_ASIdOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), pnum) +#define sk_ASIdOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_dup(sk) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_dup(ossl_check_const_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_copyfunc_type(copyfunc), ossl_check_ASIdOrRange_freefunc_type(freefunc))) +#define sk_ASIdOrRange_set_cmp_func(sk, cmp) ((sk_ASIdOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_compfunc_type(cmp))) + + typedef STACK_OF(ASIdOrRange) ASIdOrRanges; -DEFINE_STACK_OF(ASIdOrRange) # define ASIdentifierChoice_inherit 0 # define ASIdentifierChoice_asIdsOrRanges 1 @@ -775,8 +1158,35 @@ typedef struct IPAddressOrRange_st { } u; } IPAddressOrRange; +SKM_DEFINE_STACK_OF_INTERNAL(IPAddressOrRange, IPAddressOrRange, IPAddressOrRange) +#define sk_IPAddressOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_value(sk, idx) ((IPAddressOrRange *)OPENSSL_sk_value(ossl_check_const_IPAddressOrRange_sk_type(sk), (idx))) +#define sk_IPAddressOrRange_new(cmp) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new(ossl_check_IPAddressOrRange_compfunc_type(cmp))) +#define sk_IPAddressOrRange_new_null() ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_null()) +#define sk_IPAddressOrRange_new_reserve(cmp, n) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressOrRange_compfunc_type(cmp), (n))) +#define sk_IPAddressOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressOrRange_sk_type(sk), (n)) +#define sk_IPAddressOrRange_free(sk) OPENSSL_sk_free(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_delete(sk, i) ((IPAddressOrRange *)OPENSSL_sk_delete(ossl_check_IPAddressOrRange_sk_type(sk), (i))) +#define sk_IPAddressOrRange_delete_ptr(sk, ptr) ((IPAddressOrRange *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))) +#define sk_IPAddressOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_pop(sk) ((IPAddressOrRange *)OPENSSL_sk_pop(ossl_check_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_shift(sk) ((IPAddressOrRange *)OPENSSL_sk_shift(ossl_check_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressOrRange_sk_type(sk),ossl_check_IPAddressOrRange_freefunc_type(freefunc)) +#define sk_IPAddressOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), (idx)) +#define sk_IPAddressOrRange_set(sk, idx, ptr) ((IPAddressOrRange *)OPENSSL_sk_set(ossl_check_IPAddressOrRange_sk_type(sk), (idx), ossl_check_IPAddressOrRange_type(ptr))) +#define sk_IPAddressOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), pnum) +#define sk_IPAddressOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_dup(sk) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_dup(ossl_check_const_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_copyfunc_type(copyfunc), ossl_check_IPAddressOrRange_freefunc_type(freefunc))) +#define sk_IPAddressOrRange_set_cmp_func(sk, cmp) ((sk_IPAddressOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_compfunc_type(cmp))) + + typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; -DEFINE_STACK_OF(IPAddressOrRange) # define IPAddressChoice_inherit 0 # define IPAddressChoice_addressesOrRanges 1 @@ -794,8 +1204,36 @@ typedef struct IPAddressFamily_st { IPAddressChoice *ipAddressChoice; } IPAddressFamily; +SKM_DEFINE_STACK_OF_INTERNAL(IPAddressFamily, IPAddressFamily, IPAddressFamily) +#define sk_IPAddressFamily_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_value(sk, idx) ((IPAddressFamily *)OPENSSL_sk_value(ossl_check_const_IPAddressFamily_sk_type(sk), (idx))) +#define sk_IPAddressFamily_new(cmp) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new(ossl_check_IPAddressFamily_compfunc_type(cmp))) +#define sk_IPAddressFamily_new_null() ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_null()) +#define sk_IPAddressFamily_new_reserve(cmp, n) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressFamily_compfunc_type(cmp), (n))) +#define sk_IPAddressFamily_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressFamily_sk_type(sk), (n)) +#define sk_IPAddressFamily_free(sk) OPENSSL_sk_free(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_delete(sk, i) ((IPAddressFamily *)OPENSSL_sk_delete(ossl_check_IPAddressFamily_sk_type(sk), (i))) +#define sk_IPAddressFamily_delete_ptr(sk, ptr) ((IPAddressFamily *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))) +#define sk_IPAddressFamily_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_pop(sk) ((IPAddressFamily *)OPENSSL_sk_pop(ossl_check_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_shift(sk) ((IPAddressFamily *)OPENSSL_sk_shift(ossl_check_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressFamily_sk_type(sk),ossl_check_IPAddressFamily_freefunc_type(freefunc)) +#define sk_IPAddressFamily_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), (idx)) +#define sk_IPAddressFamily_set(sk, idx, ptr) ((IPAddressFamily *)OPENSSL_sk_set(ossl_check_IPAddressFamily_sk_type(sk), (idx), ossl_check_IPAddressFamily_type(ptr))) +#define sk_IPAddressFamily_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), pnum) +#define sk_IPAddressFamily_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_dup(sk) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_dup(ossl_check_const_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_copyfunc_type(copyfunc), ossl_check_IPAddressFamily_freefunc_type(freefunc))) +#define sk_IPAddressFamily_set_cmp_func(sk, cmp) ((sk_IPAddressFamily_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_compfunc_type(cmp))) + + + typedef STACK_OF(IPAddressFamily) IPAddrBlocks; -DEFINE_STACK_OF(IPAddressFamily) DECLARE_ASN1_FUNCTIONS(IPAddressRange) DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) @@ -867,7 +1305,33 @@ int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, #endif /* OPENSSL_NO_RFC3779 */ -DEFINE_STACK_OF(ASN1_STRING) +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING, ASN1_STRING, ASN1_STRING) +#define sk_ASN1_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_value(sk, idx) ((ASN1_STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_sk_type(sk), (idx))) +#define sk_ASN1_STRING_new(cmp) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_compfunc_type(cmp))) +#define sk_ASN1_STRING_new_null() ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_sk_type(sk), (n)) +#define sk_ASN1_STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_delete(sk, i) ((ASN1_STRING *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_sk_type(sk), (i))) +#define sk_ASN1_STRING_delete_ptr(sk, ptr) ((ASN1_STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))) +#define sk_ASN1_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_pop(sk) ((ASN1_STRING *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_shift(sk) ((ASN1_STRING *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_sk_type(sk),ossl_check_ASN1_STRING_freefunc_type(freefunc)) +#define sk_ASN1_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), (idx)) +#define sk_ASN1_STRING_set(sk, idx, ptr) ((ASN1_STRING *)OPENSSL_sk_set(ossl_check_ASN1_STRING_sk_type(sk), (idx), ossl_check_ASN1_STRING_type(ptr))) +#define sk_ASN1_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), pnum) +#define sk_ASN1_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_dup(sk) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_freefunc_type(freefunc))) +#define sk_ASN1_STRING_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_compfunc_type(cmp))) + /* * Admission Syntax @@ -880,8 +1344,59 @@ DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) DECLARE_ASN1_FUNCTIONS(ADMISSIONS) DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) -DEFINE_STACK_OF(ADMISSIONS) -DEFINE_STACK_OF(PROFESSION_INFO) +SKM_DEFINE_STACK_OF_INTERNAL(PROFESSION_INFO, PROFESSION_INFO, PROFESSION_INFO) +#define sk_PROFESSION_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_value(sk, idx) ((PROFESSION_INFO *)OPENSSL_sk_value(ossl_check_const_PROFESSION_INFO_sk_type(sk), (idx))) +#define sk_PROFESSION_INFO_new(cmp) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new(ossl_check_PROFESSION_INFO_compfunc_type(cmp))) +#define sk_PROFESSION_INFO_new_null() ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_null()) +#define sk_PROFESSION_INFO_new_reserve(cmp, n) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PROFESSION_INFO_compfunc_type(cmp), (n))) +#define sk_PROFESSION_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PROFESSION_INFO_sk_type(sk), (n)) +#define sk_PROFESSION_INFO_free(sk) OPENSSL_sk_free(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_delete(sk, i) ((PROFESSION_INFO *)OPENSSL_sk_delete(ossl_check_PROFESSION_INFO_sk_type(sk), (i))) +#define sk_PROFESSION_INFO_delete_ptr(sk, ptr) ((PROFESSION_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))) +#define sk_PROFESSION_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_pop(sk) ((PROFESSION_INFO *)OPENSSL_sk_pop(ossl_check_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_shift(sk) ((PROFESSION_INFO *)OPENSSL_sk_shift(ossl_check_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PROFESSION_INFO_sk_type(sk),ossl_check_PROFESSION_INFO_freefunc_type(freefunc)) +#define sk_PROFESSION_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), (idx)) +#define sk_PROFESSION_INFO_set(sk, idx, ptr) ((PROFESSION_INFO *)OPENSSL_sk_set(ossl_check_PROFESSION_INFO_sk_type(sk), (idx), ossl_check_PROFESSION_INFO_type(ptr))) +#define sk_PROFESSION_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), pnum) +#define sk_PROFESSION_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_dup(sk) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_dup(ossl_check_const_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_copyfunc_type(copyfunc), ossl_check_PROFESSION_INFO_freefunc_type(freefunc))) +#define sk_PROFESSION_INFO_set_cmp_func(sk, cmp) ((sk_PROFESSION_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(ADMISSIONS, ADMISSIONS, ADMISSIONS) +#define sk_ADMISSIONS_num(sk) OPENSSL_sk_num(ossl_check_const_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_value(sk, idx) ((ADMISSIONS *)OPENSSL_sk_value(ossl_check_const_ADMISSIONS_sk_type(sk), (idx))) +#define sk_ADMISSIONS_new(cmp) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new(ossl_check_ADMISSIONS_compfunc_type(cmp))) +#define sk_ADMISSIONS_new_null() ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_null()) +#define sk_ADMISSIONS_new_reserve(cmp, n) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_reserve(ossl_check_ADMISSIONS_compfunc_type(cmp), (n))) +#define sk_ADMISSIONS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ADMISSIONS_sk_type(sk), (n)) +#define sk_ADMISSIONS_free(sk) OPENSSL_sk_free(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_zero(sk) OPENSSL_sk_zero(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_delete(sk, i) ((ADMISSIONS *)OPENSSL_sk_delete(ossl_check_ADMISSIONS_sk_type(sk), (i))) +#define sk_ADMISSIONS_delete_ptr(sk, ptr) ((ADMISSIONS *)OPENSSL_sk_delete_ptr(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))) +#define sk_ADMISSIONS_push(sk, ptr) OPENSSL_sk_push(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_pop(sk) ((ADMISSIONS *)OPENSSL_sk_pop(ossl_check_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_shift(sk) ((ADMISSIONS *)OPENSSL_sk_shift(ossl_check_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ADMISSIONS_sk_type(sk),ossl_check_ADMISSIONS_freefunc_type(freefunc)) +#define sk_ADMISSIONS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), (idx)) +#define sk_ADMISSIONS_set(sk, idx, ptr) ((ADMISSIONS *)OPENSSL_sk_set(ossl_check_ADMISSIONS_sk_type(sk), (idx), ossl_check_ADMISSIONS_type(ptr))) +#define sk_ADMISSIONS_find(sk, ptr) OPENSSL_sk_find(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), pnum) +#define sk_ADMISSIONS_sort(sk) OPENSSL_sk_sort(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_dup(sk) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_dup(ossl_check_const_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_deep_copy(ossl_check_const_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_copyfunc_type(copyfunc), ossl_check_ADMISSIONS_freefunc_type(freefunc))) +#define sk_ADMISSIONS_set_cmp_func(sk, cmp) ((sk_ADMISSIONS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_compfunc_type(cmp))) + typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h.in b/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h.in new file mode 100644 index 00000000..e33c9d30 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h.in @@ -0,0 +1,1020 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509V3_H +# define OPENSSL_X509V3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509V3_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward reference */ +struct v3_ext_method; +struct v3_ext_ctx; + +/* Useful typedefs */ + +typedef void *(*X509V3_EXT_NEW)(void); +typedef void (*X509V3_EXT_FREE) (void *); +typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); +typedef int (*X509V3_EXT_I2D) (const void *, unsigned char **); +typedef STACK_OF(CONF_VALUE) * + (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, + STACK_OF(CONF_VALUE) *extlist); +typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, + STACK_OF(CONF_VALUE) *values); +typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, + void *ext); +typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); +typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, + BIO *out, int indent); +typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); + +/* V3 extension structure */ + +struct v3_ext_method { + int ext_nid; + int ext_flags; +/* If this is set the following four fields are ignored */ + ASN1_ITEM_EXP *it; +/* Old style ASN1 calls */ + X509V3_EXT_NEW ext_new; + X509V3_EXT_FREE ext_free; + X509V3_EXT_D2I d2i; + X509V3_EXT_I2D i2d; +/* The following pair is used for string extensions */ + X509V3_EXT_I2S i2s; + X509V3_EXT_S2I s2i; +/* The following pair is used for multi-valued extensions */ + X509V3_EXT_I2V i2v; + X509V3_EXT_V2I v2i; +/* The following are used for raw extensions */ + X509V3_EXT_I2R i2r; + X509V3_EXT_R2I r2i; + void *usr_data; /* Any extension specific data */ +}; + +typedef struct X509V3_CONF_METHOD_st { + char *(*get_string) (void *db, const char *section, const char *value); + STACK_OF(CONF_VALUE) *(*get_section) (void *db, const char *section); + void (*free_string) (void *db, char *string); + void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); +} X509V3_CONF_METHOD; + +/* Context specific info for producing X509 v3 extensions*/ +struct v3_ext_ctx { +# define X509V3_CTX_TEST 0x1 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define CTX_TEST X509V3_CTX_TEST +# endif +# define X509V3_CTX_REPLACE 0x2 + int flags; + X509 *issuer_cert; + X509 *subject_cert; + X509_REQ *subject_req; + X509_CRL *crl; + X509V3_CONF_METHOD *db_meth; + void *db; + EVP_PKEY *issuer_pkey; +/* Maybe more here */ +}; + +typedef struct v3_ext_method X509V3_EXT_METHOD; + +{- + generate_stack_macros("X509V3_EXT_METHOD"); +-} + +/* ext_flags values */ +# define X509V3_EXT_DYNAMIC 0x1 +# define X509V3_EXT_CTX_DEP 0x2 +# define X509V3_EXT_MULTILINE 0x4 + +typedef BIT_STRING_BITNAME ENUMERATED_NAMES; + +typedef struct BASIC_CONSTRAINTS_st { + int ca; + ASN1_INTEGER *pathlen; +} BASIC_CONSTRAINTS; + +typedef struct PKEY_USAGE_PERIOD_st { + ASN1_GENERALIZEDTIME *notBefore; + ASN1_GENERALIZEDTIME *notAfter; +} PKEY_USAGE_PERIOD; + +typedef struct otherName_st { + ASN1_OBJECT *type_id; + ASN1_TYPE *value; +} OTHERNAME; + +typedef struct EDIPartyName_st { + ASN1_STRING *nameAssigner; + ASN1_STRING *partyName; +} EDIPARTYNAME; + +typedef struct GENERAL_NAME_st { +# define GEN_OTHERNAME 0 +# define GEN_EMAIL 1 +# define GEN_DNS 2 +# define GEN_X400 3 +# define GEN_DIRNAME 4 +# define GEN_EDIPARTY 5 +# define GEN_URI 6 +# define GEN_IPADD 7 +# define GEN_RID 8 + int type; + union { + char *ptr; + OTHERNAME *otherName; /* otherName */ + ASN1_IA5STRING *rfc822Name; + ASN1_IA5STRING *dNSName; + ASN1_STRING *x400Address; + X509_NAME *directoryName; + EDIPARTYNAME *ediPartyName; + ASN1_IA5STRING *uniformResourceIdentifier; + ASN1_OCTET_STRING *iPAddress; + ASN1_OBJECT *registeredID; + /* Old names */ + ASN1_OCTET_STRING *ip; /* iPAddress */ + X509_NAME *dirn; /* dirn */ + ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, + * uniformResourceIdentifier */ + ASN1_OBJECT *rid; /* registeredID */ + ASN1_TYPE *other; /* x400Address */ + } d; +} GENERAL_NAME; + +typedef struct ACCESS_DESCRIPTION_st { + ASN1_OBJECT *method; + GENERAL_NAME *location; +} ACCESS_DESCRIPTION; + +{- + generate_stack_macros("ACCESS_DESCRIPTION") + .generate_stack_macros("GENERAL_NAME"); +-} + +typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; +typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; +typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; +typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; + +{- + generate_stack_macros("GENERAL_NAMES"); +-} + +typedef struct DIST_POINT_NAME_st { + int type; + union { + GENERAL_NAMES *fullname; + STACK_OF(X509_NAME_ENTRY) *relativename; + } name; +/* If relativename then this contains the full distribution point name */ + X509_NAME *dpname; +} DIST_POINT_NAME; +/* All existing reasons */ +# define CRLDP_ALL_REASONS 0x807f + +# define CRL_REASON_NONE -1 +# define CRL_REASON_UNSPECIFIED 0 +# define CRL_REASON_KEY_COMPROMISE 1 +# define CRL_REASON_CA_COMPROMISE 2 +# define CRL_REASON_AFFILIATION_CHANGED 3 +# define CRL_REASON_SUPERSEDED 4 +# define CRL_REASON_CESSATION_OF_OPERATION 5 +# define CRL_REASON_CERTIFICATE_HOLD 6 +# define CRL_REASON_REMOVE_FROM_CRL 8 +# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 +# define CRL_REASON_AA_COMPROMISE 10 + +struct DIST_POINT_st { + DIST_POINT_NAME *distpoint; + ASN1_BIT_STRING *reasons; + GENERAL_NAMES *CRLissuer; + int dp_reasons; +}; + +{- + generate_stack_macros("DIST_POINT"); +-} + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; + +struct AUTHORITY_KEYID_st { + ASN1_OCTET_STRING *keyid; + GENERAL_NAMES *issuer; + ASN1_INTEGER *serial; +}; + +/* Strong extranet structures */ + +typedef struct SXNET_ID_st { + ASN1_INTEGER *zone; + ASN1_OCTET_STRING *user; +} SXNETID; + +{- + generate_stack_macros("SXNETID"); +-} + + +typedef struct SXNET_st { + ASN1_INTEGER *version; + STACK_OF(SXNETID) *ids; +} SXNET; + +typedef struct ISSUER_SIGN_TOOL_st { + ASN1_UTF8STRING *signTool; + ASN1_UTF8STRING *cATool; + ASN1_UTF8STRING *signToolCert; + ASN1_UTF8STRING *cAToolCert; +} ISSUER_SIGN_TOOL; + +typedef struct NOTICEREF_st { + ASN1_STRING *organization; + STACK_OF(ASN1_INTEGER) *noticenos; +} NOTICEREF; + +typedef struct USERNOTICE_st { + NOTICEREF *noticeref; + ASN1_STRING *exptext; +} USERNOTICE; + +typedef struct POLICYQUALINFO_st { + ASN1_OBJECT *pqualid; + union { + ASN1_IA5STRING *cpsuri; + USERNOTICE *usernotice; + ASN1_TYPE *other; + } d; +} POLICYQUALINFO; + +{- + generate_stack_macros("POLICYQUALINFO"); +-} + + +typedef struct POLICYINFO_st { + ASN1_OBJECT *policyid; + STACK_OF(POLICYQUALINFO) *qualifiers; +} POLICYINFO; + +{- + generate_stack_macros("POLICYINFO"); +-} + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; + +typedef struct POLICY_MAPPING_st { + ASN1_OBJECT *issuerDomainPolicy; + ASN1_OBJECT *subjectDomainPolicy; +} POLICY_MAPPING; + +{- + generate_stack_macros("POLICY_MAPPING"); +-} + +typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; + +typedef struct GENERAL_SUBTREE_st { + GENERAL_NAME *base; + ASN1_INTEGER *minimum; + ASN1_INTEGER *maximum; +} GENERAL_SUBTREE; + +{- + generate_stack_macros("GENERAL_SUBTREE"); +-} + +struct NAME_CONSTRAINTS_st { + STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; + STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; +}; + +typedef struct POLICY_CONSTRAINTS_st { + ASN1_INTEGER *requireExplicitPolicy; + ASN1_INTEGER *inhibitPolicyMapping; +} POLICY_CONSTRAINTS; + +/* Proxy certificate structures, see RFC 3820 */ +typedef struct PROXY_POLICY_st { + ASN1_OBJECT *policyLanguage; + ASN1_OCTET_STRING *policy; +} PROXY_POLICY; + +typedef struct PROXY_CERT_INFO_EXTENSION_st { + ASN1_INTEGER *pcPathLengthConstraint; + PROXY_POLICY *proxyPolicy; +} PROXY_CERT_INFO_EXTENSION; + +DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) +DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) + +struct ISSUING_DIST_POINT_st { + DIST_POINT_NAME *distpoint; + int onlyuser; + int onlyCA; + ASN1_BIT_STRING *onlysomereasons; + int indirectCRL; + int onlyattr; +}; + +/* Values in idp_flags field */ +/* IDP present */ +# define IDP_PRESENT 0x1 +/* IDP values inconsistent */ +# define IDP_INVALID 0x2 +/* onlyuser true */ +# define IDP_ONLYUSER 0x4 +/* onlyCA true */ +# define IDP_ONLYCA 0x8 +/* onlyattr true */ +# define IDP_ONLYATTR 0x10 +/* indirectCRL true */ +# define IDP_INDIRECT 0x20 +/* onlysomereasons present */ +# define IDP_REASONS 0x40 + +# define X509V3_conf_err(val) ERR_add_error_data(6, \ + "section:", (val)->section, \ + ",name:", (val)->name, ",value:", (val)->value) + +# define X509V3_set_ctx_test(ctx) \ + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, X509V3_CTX_TEST) +# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; + +# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ + 0,0,0,0, \ + 0,0, \ + (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ + (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ + NULL, NULL, \ + table} + +# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ + 0,0,0,0, \ + NULL} + +#define EXT_UTF8STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_UTF8STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_UTF8STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_UTF8STRING, \ + 0,0,0,0, \ + NULL} + +# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + +/* X509_PURPOSE stuff */ + +# define EXFLAG_BCONS 0x1 +# define EXFLAG_KUSAGE 0x2 +# define EXFLAG_XKUSAGE 0x4 +# define EXFLAG_NSCERT 0x8 + +# define EXFLAG_CA 0x10 +# define EXFLAG_SI 0x20 /* self-issued, maybe not self-signed */ +# define EXFLAG_V1 0x40 +# define EXFLAG_INVALID 0x80 +/* EXFLAG_SET is set to indicate that some values have been precomputed */ +# define EXFLAG_SET 0x100 +# define EXFLAG_CRITICAL 0x200 +# define EXFLAG_PROXY 0x400 + +# define EXFLAG_INVALID_POLICY 0x800 +# define EXFLAG_FRESHEST 0x1000 +# define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ + +# define EXFLAG_BCONS_CRITICAL 0x10000 +# define EXFLAG_AKID_CRITICAL 0x20000 +# define EXFLAG_SKID_CRITICAL 0x40000 +# define EXFLAG_SAN_CRITICAL 0x80000 +# define EXFLAG_NO_FINGERPRINT 0x100000 + +# define KU_DIGITAL_SIGNATURE 0x0080 +# define KU_NON_REPUDIATION 0x0040 +# define KU_KEY_ENCIPHERMENT 0x0020 +# define KU_DATA_ENCIPHERMENT 0x0010 +# define KU_KEY_AGREEMENT 0x0008 +# define KU_KEY_CERT_SIGN 0x0004 +# define KU_CRL_SIGN 0x0002 +# define KU_ENCIPHER_ONLY 0x0001 +# define KU_DECIPHER_ONLY 0x8000 + +# define NS_SSL_CLIENT 0x80 +# define NS_SSL_SERVER 0x40 +# define NS_SMIME 0x20 +# define NS_OBJSIGN 0x10 +# define NS_SSL_CA 0x04 +# define NS_SMIME_CA 0x02 +# define NS_OBJSIGN_CA 0x01 +# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) + +# define XKU_SSL_SERVER 0x1 +# define XKU_SSL_CLIENT 0x2 +# define XKU_SMIME 0x4 +# define XKU_CODE_SIGN 0x8 +# define XKU_SGC 0x10 /* Netscape or MS Server-Gated Crypto */ +# define XKU_OCSP_SIGN 0x20 +# define XKU_TIMESTAMP 0x40 +# define XKU_DVCS 0x80 +# define XKU_ANYEKU 0x100 + +# define X509_PURPOSE_DYNAMIC 0x1 +# define X509_PURPOSE_DYNAMIC_NAME 0x2 + +typedef struct x509_purpose_st { + int purpose; + int trust; /* Default trust ID */ + int flags; + int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); + char *name; + char *sname; + void *usr_data; +} X509_PURPOSE; + +{- + generate_stack_macros("X509_PURPOSE"); +-} + + +# define X509_PURPOSE_SSL_CLIENT 1 +# define X509_PURPOSE_SSL_SERVER 2 +# define X509_PURPOSE_NS_SSL_SERVER 3 +# define X509_PURPOSE_SMIME_SIGN 4 +# define X509_PURPOSE_SMIME_ENCRYPT 5 +# define X509_PURPOSE_CRL_SIGN 6 +# define X509_PURPOSE_ANY 7 +# define X509_PURPOSE_OCSP_HELPER 8 +# define X509_PURPOSE_TIMESTAMP_SIGN 9 + +# define X509_PURPOSE_MIN 1 +# define X509_PURPOSE_MAX 9 + +/* Flags for X509V3_EXT_print() */ + +# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) +/* Return error for unknown extensions */ +# define X509V3_EXT_DEFAULT 0 +/* Print error for unknown extensions */ +# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) +/* ASN1 parse unknown extensions */ +# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) +/* BIO_dump unknown extensions */ +# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) + +/* Flags for X509V3_add1_i2d */ + +# define X509V3_ADD_OP_MASK 0xfL +# define X509V3_ADD_DEFAULT 0L +# define X509V3_ADD_APPEND 1L +# define X509V3_ADD_REPLACE 2L +# define X509V3_ADD_REPLACE_EXISTING 3L +# define X509V3_ADD_KEEP_EXISTING 4L +# define X509V3_ADD_DELETE 5L +# define X509V3_ADD_SILENT 0x10 + +DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) + +DECLARE_ASN1_FUNCTIONS(SXNET) +DECLARE_ASN1_FUNCTIONS(SXNETID) + +DECLARE_ASN1_FUNCTIONS(ISSUER_SIGN_TOOL) + +int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); +int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, + int userlen); +int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user, + int userlen); + +ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const char *zone); +ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); +ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); + +DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) + +DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) +DECLARE_ASN1_DUP_FUNCTION(GENERAL_NAME) +int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); + +ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, + STACK_OF(CONF_VALUE) *nval); +STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + ASN1_BIT_STRING *bits, + STACK_OF(CONF_VALUE) *extlist); +char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); +ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); +char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, ASN1_UTF8STRING *utf8); +ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, + GENERAL_NAME *gen, + STACK_OF(CONF_VALUE) *ret); +int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, + GENERAL_NAMES *gen, + STACK_OF(CONF_VALUE) *extlist); +GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); + +DECLARE_ASN1_FUNCTIONS(OTHERNAME) +DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) +int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); +void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); +void *GENERAL_NAME_get0_value(const GENERAL_NAME *a, int *ptype); +int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, + ASN1_OBJECT *oid, ASN1_TYPE *value); +int GENERAL_NAME_get0_otherName(const GENERAL_NAME *gen, + ASN1_OBJECT **poid, ASN1_TYPE **pvalue); + +char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + const ASN1_OCTET_STRING *ia5); +ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) +int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE) + +DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) +DECLARE_ASN1_FUNCTIONS(POLICYINFO) +DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) +DECLARE_ASN1_FUNCTIONS(USERNOTICE) +DECLARE_ASN1_FUNCTIONS(NOTICEREF) + +DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) +DECLARE_ASN1_FUNCTIONS(DIST_POINT) +DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) +DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) + +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, const X509_NAME *iname); + +int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); +int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); + +DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) +DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) + +DECLARE_ASN1_ITEM(POLICY_MAPPING) +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) +DECLARE_ASN1_ITEM(POLICY_MAPPINGS) + +DECLARE_ASN1_ITEM(GENERAL_SUBTREE) +DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) + +DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) +DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) + +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) +DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) + +GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, int gen_type, + const char *value, int is_nc); + +# ifdef OPENSSL_CONF_H +GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf); +GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf, + int is_nc); + +void X509V3_conf_free(CONF_VALUE *val); + +X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, + const char *value); +int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, + STACK_OF(X509_EXTENSION) **sk); +int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509 *cert); +int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_REQ *req); +int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_CRL *crl); + +X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, + X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *name, const char *value); +int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509 *cert); +int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_REQ *req); +int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_CRL *crl); + +int X509V3_add_value_bool_nf(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool); +int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint); +void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); +void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); +# endif + +char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section); +STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section); +void X509V3_string_free(X509V3_CTX *ctx, char *str); +void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); +void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, + X509_REQ *req, X509_CRL *crl, int flags); +/* For API backward compatibility, this is separate from X509V3_set_ctx(): */ +int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey); + +int X509V3_add_value(const char *name, const char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_uchar(const char *name, const unsigned char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_bool(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint, + STACK_OF(CONF_VALUE) **extlist); +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, + const ASN1_ENUMERATED *aint); +int X509V3_EXT_add(X509V3_EXT_METHOD *ext); +int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); +int X509V3_EXT_add_alias(int nid_to, int nid_from); +void X509V3_EXT_cleanup(void); + +const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); +const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); +int X509V3_add_standard_extensions(void); +STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); +void *X509V3_EXT_d2i(X509_EXTENSION *ext); +void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, + int *idx); + +X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); +int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, + int crit, unsigned long flags); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* The new declarations are in crypto.h, but the old ones were here. */ +# define hex_to_string OPENSSL_buf2hexstr +# define string_to_hex OPENSSL_hexstr2buf +#endif + +void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, + int ml); +int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, + int indent); +#ifndef OPENSSL_NO_STDIO +int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); +#endif +int X509V3_extensions_print(BIO *out, const char *title, + const STACK_OF(X509_EXTENSION) *exts, + unsigned long flag, int indent); + +int X509_check_ca(X509 *x); +int X509_check_purpose(X509 *x, int id, int ca); +int X509_supported_extension(X509_EXTENSION *ex); +int X509_PURPOSE_set(int *p, int purpose); +int X509_check_issued(X509 *issuer, X509 *subject); +int X509_check_akid(const X509 *issuer, const AUTHORITY_KEYID *akid); +void X509_set_proxy_flag(X509 *x); +void X509_set_proxy_pathlen(X509 *x, long l); +long X509_get_proxy_pathlen(X509 *x); + +uint32_t X509_get_extension_flags(X509 *x); +uint32_t X509_get_key_usage(X509 *x); +uint32_t X509_get_extended_key_usage(X509 *x); +const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); +const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x); +const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x); +const ASN1_INTEGER *X509_get0_authority_serial(X509 *x); + +int X509_PURPOSE_get_count(void); +X509_PURPOSE *X509_PURPOSE_get0(int idx); +int X509_PURPOSE_get_by_sname(const char *sname); +int X509_PURPOSE_get_by_id(int id); +int X509_PURPOSE_add(int id, int trust, int flags, + int (*ck) (const X509_PURPOSE *, const X509 *, int), + const char *name, const char *sname, void *arg); +char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp); +char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); +int X509_PURPOSE_get_trust(const X509_PURPOSE *xp); +void X509_PURPOSE_cleanup(void); +int X509_PURPOSE_get_id(const X509_PURPOSE *); + +STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); +STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); +void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); +STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); +/* Flags for X509_check_* functions */ + +/* + * Always check subject name for host match even if subject alt names present + */ +# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 +/* Disable wildcard matching for dnsName fields and common name. */ +# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 +/* Wildcards must not match a partial label. */ +# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 +/* Allow (non-partial) wildcards to match multiple labels. */ +# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 +/* Constraint verifier subdomain patterns to match a single labels. */ +# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 +/* Never check the subject CN */ +# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20 +/* + * Match reference identifiers starting with "." to any sub-domain. + * This is a non-public flag, turned on implicitly when the subject + * reference identity is a DNS name. + */ +# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 + +int X509_check_host(X509 *x, const char *chk, size_t chklen, + unsigned int flags, char **peername); +int X509_check_email(X509 *x, const char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); + +ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); +ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); +int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, + unsigned long chtype); + +void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); +{- + generate_stack_macros("X509_POLICY_NODE"); +-} + + +#ifndef OPENSSL_NO_RFC3779 +typedef struct ASRange_st { + ASN1_INTEGER *min, *max; +} ASRange; + +# define ASIdOrRange_id 0 +# define ASIdOrRange_range 1 + +typedef struct ASIdOrRange_st { + int type; + union { + ASN1_INTEGER *id; + ASRange *range; + } u; +} ASIdOrRange; + +{- + generate_stack_macros("ASIdOrRange"); +-} + +typedef STACK_OF(ASIdOrRange) ASIdOrRanges; + +# define ASIdentifierChoice_inherit 0 +# define ASIdentifierChoice_asIdsOrRanges 1 + +typedef struct ASIdentifierChoice_st { + int type; + union { + ASN1_NULL *inherit; + ASIdOrRanges *asIdsOrRanges; + } u; +} ASIdentifierChoice; + +typedef struct ASIdentifiers_st { + ASIdentifierChoice *asnum, *rdi; +} ASIdentifiers; + +DECLARE_ASN1_FUNCTIONS(ASRange) +DECLARE_ASN1_FUNCTIONS(ASIdOrRange) +DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) +DECLARE_ASN1_FUNCTIONS(ASIdentifiers) + +typedef struct IPAddressRange_st { + ASN1_BIT_STRING *min, *max; +} IPAddressRange; + +# define IPAddressOrRange_addressPrefix 0 +# define IPAddressOrRange_addressRange 1 + +typedef struct IPAddressOrRange_st { + int type; + union { + ASN1_BIT_STRING *addressPrefix; + IPAddressRange *addressRange; + } u; +} IPAddressOrRange; + +{- + generate_stack_macros("IPAddressOrRange"); +-} + +typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; + +# define IPAddressChoice_inherit 0 +# define IPAddressChoice_addressesOrRanges 1 + +typedef struct IPAddressChoice_st { + int type; + union { + ASN1_NULL *inherit; + IPAddressOrRanges *addressesOrRanges; + } u; +} IPAddressChoice; + +typedef struct IPAddressFamily_st { + ASN1_OCTET_STRING *addressFamily; + IPAddressChoice *ipAddressChoice; +} IPAddressFamily; + +{- + generate_stack_macros("IPAddressFamily"); +-} + + +typedef STACK_OF(IPAddressFamily) IPAddrBlocks; + +DECLARE_ASN1_FUNCTIONS(IPAddressRange) +DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) +DECLARE_ASN1_FUNCTIONS(IPAddressChoice) +DECLARE_ASN1_FUNCTIONS(IPAddressFamily) + +/* + * API tag for elements of the ASIdentifer SEQUENCE. + */ +# define V3_ASID_ASNUM 0 +# define V3_ASID_RDI 1 + +/* + * AFI values, assigned by IANA. It'd be nice to make the AFI + * handling code totally generic, but there are too many little things + * that would need to be defined for other address families for it to + * be worth the trouble. + */ +# define IANA_AFI_IPV4 1 +# define IANA_AFI_IPV6 2 + +/* + * Utilities to construct and extract values from RFC3779 extensions, + * since some of the encodings (particularly for IP address prefixes + * and ranges) are a bit tedious to work with directly. + */ +int X509v3_asid_add_inherit(ASIdentifiers *asid, int which); +int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, + ASN1_INTEGER *min, ASN1_INTEGER *max); +int X509v3_addr_add_inherit(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi); +int X509v3_addr_add_prefix(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *a, const int prefixlen); +int X509v3_addr_add_range(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *min, unsigned char *max); +unsigned X509v3_addr_get_afi(const IPAddressFamily *f); +int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, + unsigned char *min, unsigned char *max, + const int length); + +/* + * Canonical forms. + */ +int X509v3_asid_is_canonical(ASIdentifiers *asid); +int X509v3_addr_is_canonical(IPAddrBlocks *addr); +int X509v3_asid_canonize(ASIdentifiers *asid); +int X509v3_addr_canonize(IPAddrBlocks *addr); + +/* + * Tests for inheritance and containment. + */ +int X509v3_asid_inherits(ASIdentifiers *asid); +int X509v3_addr_inherits(IPAddrBlocks *addr); +int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); +int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); + +/* + * Check whether RFC 3779 extensions nest properly in chains. + */ +int X509v3_asid_validate_path(X509_STORE_CTX *); +int X509v3_addr_validate_path(X509_STORE_CTX *); +int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, + ASIdentifiers *ext, + int allow_inheritance); +int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, + IPAddrBlocks *ext, int allow_inheritance); + +#endif /* OPENSSL_NO_RFC3779 */ + +{- + generate_stack_macros("ASN1_STRING"); +-} + +/* + * Admission Syntax + */ +typedef struct NamingAuthority_st NAMING_AUTHORITY; +typedef struct ProfessionInfo_st PROFESSION_INFO; +typedef struct Admissions_st ADMISSIONS; +typedef struct AdmissionSyntax_st ADMISSION_SYNTAX; +DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) +DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) +DECLARE_ASN1_FUNCTIONS(ADMISSIONS) +DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) +{- + generate_stack_macros("PROFESSION_INFO") + .generate_stack_macros("ADMISSIONS"); +-} +typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; + +const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( + const NAMING_AUTHORITY *n); +const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL( + const NAMING_AUTHORITY *n); +const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText( + const NAMING_AUTHORITY *n); +void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n, + ASN1_OBJECT* namingAuthorityId); +void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n, + ASN1_IA5STRING* namingAuthorityUrl); +void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n, + ASN1_STRING* namingAuthorityText); + +const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_admissionAuthority( + ADMISSION_SYNTAX *as, GENERAL_NAME *aa); +const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_contentsOfAdmissions( + ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a); +const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa); +const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na); +const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a); +void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi); +const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_addProfessionInfo( + PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos); +const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_namingAuthority( + PROFESSION_INFO *pi, NAMING_AUTHORITY *na); +const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionItems( + PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as); +const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionOIDs( + PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po); +const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_registrationNumber( + PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509v3err.h b/deps/openssl/android/x86/usr/local/include/openssl/x509v3err.h index 3b9f7139..1ae3a562 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509v3err.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509v3err.h @@ -2,95 +2,21 @@ * Generated by util/mkerr.pl DO NOT EDIT * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509V3ERR_H -# define HEADER_X509V3ERR_H +#ifndef OPENSSL_X509V3ERR_H +# define OPENSSL_X509V3ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509V3_strings(void); -/* - * X509V3 function codes. - */ -# define X509V3_F_A2I_GENERAL_NAME 164 -# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 -# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 -# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 -# define X509V3_F_BIGNUM_TO_STRING 167 -# define X509V3_F_COPY_EMAIL 122 -# define X509V3_F_COPY_ISSUER 123 -# define X509V3_F_DO_DIRNAME 144 -# define X509V3_F_DO_EXT_I2D 135 -# define X509V3_F_DO_EXT_NCONF 151 -# define X509V3_F_GNAMES_FROM_SECTNAME 156 -# define X509V3_F_I2S_ASN1_ENUMERATED 121 -# define X509V3_F_I2S_ASN1_IA5STRING 149 -# define X509V3_F_I2S_ASN1_INTEGER 120 -# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 -# define X509V3_F_I2V_AUTHORITY_KEYID 173 -# define X509V3_F_LEVEL_ADD_NODE 168 -# define X509V3_F_NOTICE_SECTION 132 -# define X509V3_F_NREF_NOS 133 -# define X509V3_F_POLICY_CACHE_CREATE 169 -# define X509V3_F_POLICY_CACHE_NEW 170 -# define X509V3_F_POLICY_DATA_NEW 171 -# define X509V3_F_POLICY_SECTION 131 -# define X509V3_F_PROCESS_PCI_VALUE 150 -# define X509V3_F_R2I_CERTPOL 130 -# define X509V3_F_R2I_PCI 155 -# define X509V3_F_S2I_ASN1_IA5STRING 100 -# define X509V3_F_S2I_ASN1_INTEGER 108 -# define X509V3_F_S2I_ASN1_OCTET_STRING 112 -# define X509V3_F_S2I_SKEY_ID 115 -# define X509V3_F_SET_DIST_POINT_NAME 158 -# define X509V3_F_SXNET_ADD_ID_ASC 125 -# define X509V3_F_SXNET_ADD_ID_INTEGER 126 -# define X509V3_F_SXNET_ADD_ID_ULONG 127 -# define X509V3_F_SXNET_GET_ID_ASC 128 -# define X509V3_F_SXNET_GET_ID_ULONG 129 -# define X509V3_F_TREE_INIT 172 -# define X509V3_F_V2I_ASIDENTIFIERS 163 -# define X509V3_F_V2I_ASN1_BIT_STRING 101 -# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 -# define X509V3_F_V2I_AUTHORITY_KEYID 119 -# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 -# define X509V3_F_V2I_CRLD 134 -# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 -# define X509V3_F_V2I_GENERAL_NAMES 118 -# define X509V3_F_V2I_GENERAL_NAME_EX 117 -# define X509V3_F_V2I_IDP 157 -# define X509V3_F_V2I_IPADDRBLOCKS 159 -# define X509V3_F_V2I_ISSUER_ALT 153 -# define X509V3_F_V2I_NAME_CONSTRAINTS 147 -# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 -# define X509V3_F_V2I_POLICY_MAPPINGS 145 -# define X509V3_F_V2I_SUBJECT_ALT 154 -# define X509V3_F_V2I_TLS_FEATURE 165 -# define X509V3_F_V3_GENERIC_EXTENSION 116 -# define X509V3_F_X509V3_ADD1_I2D 140 -# define X509V3_F_X509V3_ADD_LEN_VALUE 174 -# define X509V3_F_X509V3_ADD_VALUE 105 -# define X509V3_F_X509V3_EXT_ADD 104 -# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 -# define X509V3_F_X509V3_EXT_I2D 136 -# define X509V3_F_X509V3_EXT_NCONF 152 -# define X509V3_F_X509V3_GET_SECTION 142 -# define X509V3_F_X509V3_GET_STRING 143 -# define X509V3_F_X509V3_GET_VALUE_BOOL 110 -# define X509V3_F_X509V3_PARSE_LIST 109 -# define X509V3_F_X509_PURPOSE_ADD 137 -# define X509V3_F_X509_PURPOSE_SET 141 /* * X509V3 reason codes. @@ -102,6 +28,7 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_DIRNAME_ERROR 149 # define X509V3_R_DISTPOINT_ALREADY_SET 160 # define X509V3_R_DUPLICATE_ZONE_ID 133 +# define X509V3_R_EMPTY_KEY_USAGE 169 # define X509V3_R_ERROR_CONVERTING_ZONE 131 # define X509V3_R_ERROR_CREATING_EXTENSION 144 # define X509V3_R_ERROR_IN_EXTENSION 128 @@ -116,13 +43,14 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_INVALID_ASNUMBER 162 # define X509V3_R_INVALID_ASRANGE 163 # define X509V3_R_INVALID_BOOLEAN_STRING 104 +# define X509V3_R_INVALID_CERTIFICATE 158 +# define X509V3_R_INVALID_EMPTY_NAME 108 # define X509V3_R_INVALID_EXTENSION_STRING 105 # define X509V3_R_INVALID_INHERITANCE 165 # define X509V3_R_INVALID_IPADDRESS 166 # define X509V3_R_INVALID_MULTIPLE_RDNS 161 # define X509V3_R_INVALID_NAME 106 # define X509V3_R_INVALID_NULL_ARGUMENT 107 -# define X509V3_R_INVALID_NULL_NAME 108 # define X509V3_R_INVALID_NULL_VALUE 109 # define X509V3_R_INVALID_NUMBER 140 # define X509V3_R_INVALID_NUMBERS 141 @@ -137,6 +65,7 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_ISSUER_DECODE_ERROR 126 # define X509V3_R_MISSING_VALUE 124 # define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 +# define X509V3_R_NEGATIVE_PATHLEN 168 # define X509V3_R_NO_CONFIG_DATABASE 136 # define X509V3_R_NO_ISSUER_CERTIFICATE 121 # define X509V3_R_NO_ISSUER_DETAILS 127 diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H b/deps/openssl/android/x86_64/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H index c350018a..e57c0eab 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H b/deps/openssl/android/x86_64/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H index 9a9c777f..a0139575 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/aes_platform.h b/deps/openssl/android/x86_64/usr/local/include/crypto/aes_platform.h new file mode 100644 index 00000000..87c35255 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/aes_platform.h @@ -0,0 +1,517 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_AES_PLATFORM_H +# define OSSL_AES_PLATFORM_H +# pragma once + +# include + +# ifdef VPAES_ASM +int vpaes_set_encrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +int vpaes_set_decrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +void vpaes_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void vpaes_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void vpaes_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key, unsigned char *ivec, int enc); +# endif /* VPAES_ASM */ + +# ifdef BSAES_ASM +void ossl_bsaes_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char ivec[16], int enc); +void ossl_bsaes_ctr32_encrypt_blocks(const unsigned char *in, + unsigned char *out, size_t len, + const AES_KEY *key, + const unsigned char ivec[16]); +void ossl_bsaes_xts_encrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +void ossl_bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +# endif /* BSAES_ASM */ + +# ifdef AES_CTR_ASM +void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + const unsigned char ivec[AES_BLOCK_SIZE]); +# endif /* AES_CTR_ASM */ + +# ifdef AES_XTS_ASM +void AES_xts_encrypt(const unsigned char *inp, unsigned char *out, size_t len, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); +void AES_xts_decrypt(const unsigned char *inp, unsigned char *out, size_t len, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); +# endif /* AES_XTS_ASM */ + +# if defined(OPENSSL_CPUID_OBJ) +# if (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC)) +# include "crypto/ppc_arch.h" +# ifdef VPAES_ASM +# define VPAES_CAPABLE (OPENSSL_ppccap_P & PPC_ALTIVEC) +# endif +# define HWAES_CAPABLE (OPENSSL_ppccap_P & PPC_CRYPTO207) +# define HWAES_set_encrypt_key aes_p8_set_encrypt_key +# define HWAES_set_decrypt_key aes_p8_set_decrypt_key +# define HWAES_encrypt aes_p8_encrypt +# define HWAES_decrypt aes_p8_decrypt +# define HWAES_cbc_encrypt aes_p8_cbc_encrypt +# define HWAES_ctr32_encrypt_blocks aes_p8_ctr32_encrypt_blocks +# define HWAES_xts_encrypt aes_p8_xts_encrypt +# define HWAES_xts_decrypt aes_p8_xts_decrypt +# if !defined(OPENSSL_SYS_AIX) && !defined(OPENSSL_SYS_MACOSX) +# define PPC_AES_GCM_CAPABLE (OPENSSL_ppccap_P & PPC_MADD300) +# define AES_GCM_ENC_BYTES 128 +# define AES_GCM_DEC_BYTES 128 +size_t ppc_aes_gcm_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, unsigned char ivec[16], + u64 *Xi); +size_t ppc_aes_gcm_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, unsigned char ivec[16], + u64 *Xi); +# define AES_GCM_ASM_PPC(gctx) ((gctx)->ctr==aes_p8_ctr32_encrypt_blocks && \ + (gctx)->gcm.funcs.ghash==gcm_ghash_p8) +void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); +# endif /* OPENSSL_SYS_AIX || OPENSSL_SYS_MACOSX */ +# endif /* PPC */ + +# if (defined(__arm__) || defined(__arm) || defined(__aarch64__)) +# include "arm_arch.h" +# if __ARM_MAX_ARCH__>=7 +# if defined(BSAES_ASM) +# define BSAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON) +# endif +# if defined(VPAES_ASM) +# define VPAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON) +# endif +# define HWAES_CAPABLE (OPENSSL_armcap_P & ARMV8_AES) +# define HWAES_set_encrypt_key aes_v8_set_encrypt_key +# define HWAES_set_decrypt_key aes_v8_set_decrypt_key +# define HWAES_encrypt aes_v8_encrypt +# define HWAES_decrypt aes_v8_decrypt +# define HWAES_cbc_encrypt aes_v8_cbc_encrypt +# define HWAES_ecb_encrypt aes_v8_ecb_encrypt +# if __ARM_MAX_ARCH__>=8 && defined(__aarch64__) +# define HWAES_xts_encrypt aes_v8_xts_encrypt +# define HWAES_xts_decrypt aes_v8_xts_decrypt +# endif +# define HWAES_ctr32_encrypt_blocks aes_v8_ctr32_encrypt_blocks +# define AES_PMULL_CAPABLE ((OPENSSL_armcap_P & ARMV8_PMULL) && (OPENSSL_armcap_P & ARMV8_AES)) +# define AES_GCM_ENC_BYTES 512 +# define AES_GCM_DEC_BYTES 512 +# if __ARM_MAX_ARCH__>=8 && defined(__aarch64__) +# define AES_gcm_encrypt armv8_aes_gcm_encrypt +# define AES_gcm_decrypt armv8_aes_gcm_decrypt +# define AES_GCM_ASM(gctx) ((gctx)->ctr==aes_v8_ctr32_encrypt_blocks && \ + (gctx)->gcm.funcs.ghash==gcm_ghash_v8) +/* The [unroll8_eor3_]aes_gcm_(enc|dec)_(128|192|256)_kernel() functions + * take input length in BITS and return number of BYTES processed */ +size_t aes_gcm_enc_128_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_enc_192_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_enc_256_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_128_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_192_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t aes_gcm_dec_256_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_128_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_192_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_enc_256_kernel(const uint8_t * plaintext, uint64_t plaintext_length, uint8_t * ciphertext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_128_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_192_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t unroll8_eor3_aes_gcm_dec_256_kernel(const uint8_t * ciphertext, uint64_t plaintext_length, uint8_t * plaintext, + uint64_t *Xi, unsigned char ivec[16], const void *key); +size_t armv8_aes_gcm_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, + unsigned char ivec[16], u64 *Xi); +size_t armv8_aes_gcm_decrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, + unsigned char ivec[16], u64 *Xi); +void gcm_ghash_v8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); +# endif +# endif +# endif +# endif /* OPENSSL_CPUID_OBJ */ + +# if defined(AES_ASM) && ( \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) ) +# define AES_CBC_HMAC_SHA_CAPABLE 1 +# define AESNI_CBC_HMAC_SHA_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32))) +# endif + +# if defined(__loongarch__) || defined(__loongarch64) +# include "loongarch_arch.h" +# if defined(VPAES_ASM) +# define VPAES_CAPABLE (OPENSSL_loongarch_hwcap_P & LOONGARCH_HWCAP_LSX) +# endif +# endif + +# if defined(AES_ASM) && !defined(I386_ONLY) && ( \ + ((defined(__i386) || defined(__i386__) || \ + defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) ) + +/* AES-NI section */ + +# define AESNI_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32))) +# ifdef VPAES_ASM +# define VPAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32))) +# endif +# ifdef BSAES_ASM +# define BSAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32))) +# endif + +# define AES_GCM_ENC_BYTES 32 +# define AES_GCM_DEC_BYTES 16 + +int aesni_set_encrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); +int aesni_set_decrypt_key(const unsigned char *userKey, int bits, + AES_KEY *key); + +void aesni_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void aesni_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); + +void aesni_ecb_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, const AES_KEY *key, int enc); +void aesni_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key, unsigned char *ivec, int enc); +# ifndef OPENSSL_NO_OCB +void aesni_ocb_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +void aesni_ocb_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# endif /* OPENSSL_NO_OCB */ + +void aesni_ctr32_encrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, const unsigned char *ivec); + +void aesni_xts_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); + +void aesni_xts_decrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const AES_KEY *key1, const AES_KEY *key2, + const unsigned char iv[16]); + +void aesni_ccm64_encrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +void aesni_ccm64_decrypt_blocks(const unsigned char *in, + unsigned char *out, + size_t blocks, + const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +# if defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) +size_t aesni_gcm_encrypt(const unsigned char *in, unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], u64 *Xi); +size_t aesni_gcm_decrypt(const unsigned char *in, unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], u64 *Xi); +void gcm_ghash_avx(u64 Xi[2], const u128 Htable[16], const u8 *in, size_t len); + +# define AES_gcm_encrypt aesni_gcm_encrypt +# define AES_gcm_decrypt aesni_gcm_decrypt +# define AES_GCM_ASM(ctx) (ctx->ctr == aesni_ctr32_encrypt_blocks && \ + ctx->gcm.funcs.ghash == gcm_ghash_avx) +# endif + + +# elif defined(AES_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# define SPARC_AES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_AES) +# define HWAES_CAPABLE (OPENSSL_sparcv9cap_P[0] & SPARCV9_FJAESX) +# define HWAES_set_encrypt_key aes_fx_set_encrypt_key +# define HWAES_set_decrypt_key aes_fx_set_decrypt_key +# define HWAES_encrypt aes_fx_encrypt +# define HWAES_decrypt aes_fx_decrypt +# define HWAES_cbc_encrypt aes_fx_cbc_encrypt +# define HWAES_ctr32_encrypt_blocks aes_fx_ctr32_encrypt_blocks + +void aes_t4_set_encrypt_key(const unsigned char *key, int bits, AES_KEY *ks); +void aes_t4_set_decrypt_key(const unsigned char *key, int bits, AES_KEY *ks); +void aes_t4_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void aes_t4_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +/* + * Key-length specific subroutines were chosen for following reason. + * Each SPARC T4 core can execute up to 8 threads which share core's + * resources. Loading as much key material to registers allows to + * minimize references to shared memory interface, as well as amount + * of instructions in inner loops [much needed on T4]. But then having + * non-key-length specific routines would require conditional branches + * either in inner loops or on subroutines' entries. Former is hardly + * acceptable, while latter means code size increase to size occupied + * by multiple key-length specific subroutines, so why fight? + */ +void aes128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes192_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes192_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY *key, + unsigned char *ivec, int /*unused*/); +void aes128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes192_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + unsigned char *ivec); +void aes128_t4_xts_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes128_t4_xts_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes256_t4_xts_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); +void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char *ivec); + +# elif defined(OPENSSL_CPUID_OBJ) && defined(__s390__) +/* IBM S390X support */ +# include "s390x_arch.h" + + +/* Convert key size to function code: [16,24,32] -> [18,19,20]. */ +# define S390X_AES_FC(keylen) (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6)) + +/* Most modes of operation need km for partial block processing. */ +# define S390X_aes_128_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_128)) +# define S390X_aes_192_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_192)) +# define S390X_aes_256_CAPABLE (OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_256)) + +# define S390X_aes_128_cbc_CAPABLE 1 /* checked by callee */ +# define S390X_aes_192_cbc_CAPABLE 1 +# define S390X_aes_256_cbc_CAPABLE 1 + +# define S390X_aes_128_ecb_CAPABLE S390X_aes_128_CAPABLE +# define S390X_aes_192_ecb_CAPABLE S390X_aes_192_CAPABLE +# define S390X_aes_256_ecb_CAPABLE S390X_aes_256_CAPABLE + +# define S390X_aes_128_ofb_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_ofb_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_ofb_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmo[0] & \ + S390X_CAPBIT(S390X_AES_256))) + +# define S390X_aes_128_cfb_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_cfb_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_cfb_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_256))) +# define S390X_aes_128_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_128)) +# define S390X_aes_192_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_192)) +# define S390X_aes_256_cfb8_CAPABLE (OPENSSL_s390xcap_P.kmf[0] & \ + S390X_CAPBIT(S390X_AES_256)) +# define S390X_aes_128_cfb1_CAPABLE 0 +# define S390X_aes_192_cfb1_CAPABLE 0 +# define S390X_aes_256_cfb1_CAPABLE 0 + +# define S390X_aes_128_ctr_CAPABLE 1 /* checked by callee */ +# define S390X_aes_192_ctr_CAPABLE 1 +# define S390X_aes_256_ctr_CAPABLE 1 + +# define S390X_aes_128_xts_CAPABLE 1 /* checked by callee */ +# define S390X_aes_256_xts_CAPABLE 1 + +# define S390X_aes_128_gcm_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_gcm_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_gcm_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_256))) + +# define S390X_aes_128_ccm_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_ccm_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_ccm_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_256))) +# define S390X_CCM_AAD_FLAG 0x40 + +# ifndef OPENSSL_NO_OCB +# define S390X_aes_128_ocb_CAPABLE 0 +# define S390X_aes_192_ocb_CAPABLE 0 +# define S390X_aes_256_ocb_CAPABLE 0 +# endif /* OPENSSL_NO_OCB */ + +# ifndef OPENSSL_NO_SIV +# define S390X_aes_128_siv_CAPABLE 0 +# define S390X_aes_192_siv_CAPABLE 0 +# define S390X_aes_256_siv_CAPABLE 0 +# endif /* OPENSSL_NO_SIV */ + +/* Convert key size to function code: [16,24,32] -> [18,19,20]. */ +# define S390X_AES_FC(keylen) (S390X_AES_128 + ((((keylen) << 3) - 128) >> 6)) +# elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 64 +/* RISC-V 64 support */ +# include "riscv_arch.h" +# define RV64I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) + +int rv64i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv64i_zknd_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void rv64i_zkne_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void rv64i_zknd_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +# elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 32 +/* RISC-V 32 support */ +# include "riscv_arch.h" +# define RV32I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) +# define RV32I_ZBKB_ZKND_ZKNE_CAPABLE (RV32I_ZKND_ZKNE_CAPABLE && RISCV_HAS_ZBKB()) + +int rv32i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +/* set_decrypt_key needs both zknd and zkne */ +int rv32i_zknd_zkne_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv32i_zbkb_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int rv32i_zbkb_zknd_zkne_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void rv32i_zkne_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void rv32i_zknd_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +# endif + +# if defined(HWAES_CAPABLE) +int HWAES_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int HWAES_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +void HWAES_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void HWAES_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void HWAES_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +void HWAES_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + const int enc); +void HWAES_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +void HWAES_xts_encrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +void HWAES_xts_decrypt(const unsigned char *inp, unsigned char *out, + size_t len, const AES_KEY *key1, + const AES_KEY *key2, const unsigned char iv[16]); +# ifndef OPENSSL_NO_OCB +# ifdef HWAES_ocb_encrypt +void HWAES_ocb_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# else +# define HWAES_ocb_encrypt ((ocb128_f)NULL) +# endif +# ifdef HWAES_ocb_decrypt +void HWAES_ocb_decrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); +# else +# define HWAES_ocb_decrypt ((ocb128_f)NULL) +# endif +# endif /* OPENSSL_NO_OCB */ + +# endif /* HWAES_CAPABLE */ + +#endif /* OSSL_AES_PLATFORM_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/aria.h b/deps/openssl/android/x86_64/usr/local/include/crypto/aria.h index 03a62950..21a9932e 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/aria.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/aria.h @@ -1,8 +1,8 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -12,6 +12,7 @@ #ifndef OSSL_CRYPTO_ARIA_H # define OSSL_CRYPTO_ARIA_H +# pragma once # include @@ -39,12 +40,12 @@ struct aria_key_st { typedef struct aria_key_st ARIA_KEY; -int aria_set_encrypt_key(const unsigned char *userKey, const int bits, - ARIA_KEY *key); -int aria_set_decrypt_key(const unsigned char *userKey, const int bits, - ARIA_KEY *key); +int ossl_aria_set_encrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); +int ossl_aria_set_decrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); -void aria_encrypt(const unsigned char *in, unsigned char *out, - const ARIA_KEY *key); +void ossl_aria_encrypt(const unsigned char *in, unsigned char *out, + const ARIA_KEY *key); #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/asn1.h b/deps/openssl/android/x86_64/usr/local/include/crypto/asn1.h index 9c9b4d89..ec76ae6f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/asn1.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/asn1.h @@ -1,23 +1,32 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OSSL_CRYPTO_ASN1_H +# define OSSL_CRYPTO_ASN1_H +# pragma once + +# include +# include /* OSSL_FUNC_keymgmt_import() */ + /* Internal ASN1 structures and functions: not for application use */ /* ASN1 public key method structure */ +#include + struct evp_pkey_asn1_method_st { int pkey_id; int pkey_base_id; unsigned long pkey_flags; char *pem_str; char *info; - int (*pub_decode) (EVP_PKEY *pk, X509_PUBKEY *pub); + int (*pub_decode) (EVP_PKEY *pk, const X509_PUBKEY *pub); int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk); int (*pub_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); int (*pub_print) (BIO *out, const EVP_PKEY *pkey, int indent, @@ -47,9 +56,10 @@ struct evp_pkey_asn1_method_st { const unsigned char **pder, int derlen); int (*old_priv_encode) (const EVP_PKEY *pkey, unsigned char **pder); /* Custom ASN1 signature verification */ - int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, - X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey); - int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, + int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, const void *data, + const X509_ALGOR *a, const ASN1_BIT_STRING *sig, + EVP_PKEY *pkey); + int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, const void *data, X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig); int (*siginf_set) (X509_SIG_INFO *siginf, const X509_ALGOR *alg, @@ -63,26 +73,35 @@ struct evp_pkey_asn1_method_st { int (*set_pub_key) (EVP_PKEY *pk, const unsigned char *pub, size_t len); int (*get_priv_key) (const EVP_PKEY *pk, unsigned char *priv, size_t *len); int (*get_pub_key) (const EVP_PKEY *pk, unsigned char *pub, size_t *len); + + /* Exports and imports to / from providers */ + size_t (*dirty_cnt) (const EVP_PKEY *pk); + int (*export_to) (const EVP_PKEY *pk, void *to_keydata, + OSSL_FUNC_keymgmt_import_fn *importer, + OSSL_LIB_CTX *libctx, const char *propq); + OSSL_CALLBACK *import_from; + int (*copy) (EVP_PKEY *to, EVP_PKEY *from); + + int (*priv_decode_ex) (EVP_PKEY *pk, + const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, + const char *propq); } /* EVP_PKEY_ASN1_METHOD */ ; DEFINE_STACK_OF_CONST(EVP_PKEY_ASN1_METHOD) -extern const EVP_PKEY_ASN1_METHOD cmac_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dh_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dhx_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meths[5]; -extern const EVP_PKEY_ASN1_METHOD eckey_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ecx25519_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ecx448_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD ed448_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD sm2_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD poly1305_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dh_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dhx_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_dsa_asn1_meths[5]; +extern const EVP_PKEY_ASN1_METHOD ossl_eckey_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ecx25519_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ecx448_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ed25519_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_ed448_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_sm2_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD hmac_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[2]; -extern const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth; -extern const EVP_PKEY_ASN1_METHOD siphash_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ossl_rsa_asn1_meths[2]; +extern const EVP_PKEY_ASN1_METHOD ossl_rsa_pss_asn1_meth; /* * These are used internally in the ASN1_OBJECT to keep track of whether the @@ -110,4 +129,21 @@ struct asn1_pctx_st { unsigned long str_flags; } /* ASN1_PCTX */ ; -int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb); +/* ASN1 type functions */ + +int ossl_asn1_type_set_octetstring_int(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ossl_asn1_type_get_octetstring_int(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +int ossl_x509_algor_new_from_md(X509_ALGOR **palg, const EVP_MD *md); +const EVP_MD *ossl_x509_algor_get_md(X509_ALGOR *alg); +X509_ALGOR *ossl_x509_algor_mgf1_decode(X509_ALGOR *alg); +int ossl_x509_algor_md_to_mgf1(X509_ALGOR **palg, const EVP_MD *mgf1md); +int ossl_asn1_time_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); + +EVP_PKEY * ossl_d2i_PrivateKey_legacy(int keytype, EVP_PKEY **a, + const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); + +#endif /* ndef OSSL_CRYPTO_ASN1_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/asn1_dsa.h b/deps/openssl/android/x86_64/usr/local/include/crypto/asn1_dsa.h new file mode 100644 index 00000000..3eadb9ec --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/asn1_dsa.h @@ -0,0 +1,24 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASN1_DSA_H +# define OSSL_CRYPTO_ASN1_DSA_H +# pragma once + +#include "internal/packet.h" + +int ossl_encode_der_length(WPACKET *pkt, size_t cont_len); +int ossl_encode_der_integer(WPACKET *pkt, const BIGNUM *n); +int ossl_encode_der_dsa_sig(WPACKET *pkt, const BIGNUM *r, const BIGNUM *s); +int ossl_decode_der_length(PACKET *pkt, PACKET *subpkt); +int ossl_decode_der_integer(PACKET *pkt, BIGNUM *n); +size_t ossl_decode_der_dsa_sig(BIGNUM *r, BIGNUM *s, const unsigned char **ppin, + size_t len); + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/asn1err.h b/deps/openssl/android/x86_64/usr/local/include/crypto/asn1err.h new file mode 100644 index 00000000..6441386b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/asn1err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASN1ERR_H +# define OSSL_CRYPTO_ASN1ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ASN1_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/async.h b/deps/openssl/android/x86_64/usr/local/include/crypto/async.h index dc8e937b..7bc0dbb6 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/async.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/async.h @@ -1,15 +1,19 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_CRYPTO_ASYNC_H +# define OSSL_CRYPTO_ASYNC_H +# pragma once + +# include int async_init(void); void async_deinit(void); -void async_delete_thread_state(void); +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/asyncerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/asyncerr.h new file mode 100644 index 00000000..574e0af7 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/asyncerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ASYNCERR_H +# define OSSL_CRYPTO_ASYNCERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ASYNC_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/bioerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/bioerr.h new file mode 100644 index 00000000..a0c06099 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/bioerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BIOERR_H +# define OSSL_CRYPTO_BIOERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BIO_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/bn.h b/deps/openssl/android/x86_64/usr/local/include/crypto/bn.h index 250914c4..00544d9d 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/bn.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/bn.h @@ -1,7 +1,7 @@ /* * Copyright 2014-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_CRYPTO_BN_H # define OSSL_CRYPTO_BN_H +# pragma once # include # include @@ -87,4 +88,32 @@ int bn_rshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); int bn_div_fixed_top(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); +#define BN_PRIMETEST_COMPOSITE 0 +#define BN_PRIMETEST_COMPOSITE_WITH_FACTOR 1 +#define BN_PRIMETEST_COMPOSITE_NOT_POWER_OF_PRIME 2 +#define BN_PRIMETEST_PROBABLY_PRIME 3 + +int ossl_bn_miller_rabin_is_prime(const BIGNUM *w, int iterations, BN_CTX *ctx, + BN_GENCB *cb, int enhanced, int *status); +int ossl_bn_check_generated_prime(const BIGNUM *w, int checks, BN_CTX *ctx, + BN_GENCB *cb); + +const BIGNUM *ossl_bn_get0_small_factors(void); + +int ossl_bn_rsa_fips186_4_gen_prob_primes(BIGNUM *p, BIGNUM *Xpout, + BIGNUM *p1, BIGNUM *p2, + const BIGNUM *Xp, const BIGNUM *Xp1, + const BIGNUM *Xp2, int nlen, + const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); + +int ossl_bn_rsa_fips186_4_derive_prime(BIGNUM *Y, BIGNUM *X, const BIGNUM *Xin, + const BIGNUM *r1, const BIGNUM *r2, + int nlen, const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); + +OSSL_LIB_CTX *ossl_bn_get_libctx(BN_CTX *ctx); + +extern const BIGNUM ossl_bn_inv_sqrt_2; + #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/bn_conf.h b/deps/openssl/android/x86_64/usr/local/include/crypto/bn_conf.h index 5312ef5a..0347a6dd 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/bn_conf.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/bn_conf.h @@ -1,9 +1,9 @@ /* WARNING: do not edit! */ /* Generated by Makefile from include/crypto/bn_conf.h.in */ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,6 +11,7 @@ #ifndef OSSL_CRYPTO_BN_CONF_H # define OSSL_CRYPTO_BN_CONF_H +# pragma once /* * The contents of this file are not used in the UEFI build, as diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/bn_conf.h.in b/deps/openssl/android/x86_64/usr/local/include/crypto/bn_conf.h.in index b6b9eb74..dbc901b1 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/bn_conf.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/bn_conf.h.in @@ -1,8 +1,8 @@ {- join("\n",map { "/* $_ */" } @autowarntext) -} /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,7 @@ #ifndef OSSL_CRYPTO_BN_CONF_H # define OSSL_CRYPTO_BN_CONF_H +# pragma once /* * The contents of this file are not used in the UEFI build, as diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/bn_dh.h b/deps/openssl/android/x86_64/usr/local/include/crypto/bn_dh.h index 70ebca28..6d12c20e 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/bn_dh.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/bn_dh.h @@ -1,24 +1,43 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #define declare_dh_bn(x) \ - extern const BIGNUM _bignum_dh##x##_p; \ - extern const BIGNUM _bignum_dh##x##_g; \ - extern const BIGNUM _bignum_dh##x##_q; + extern const BIGNUM ossl_bignum_dh##x##_p; \ + extern const BIGNUM ossl_bignum_dh##x##_q; \ + extern const BIGNUM ossl_bignum_dh##x##_g; \ declare_dh_bn(1024_160) declare_dh_bn(2048_224) declare_dh_bn(2048_256) -extern const BIGNUM _bignum_ffdhe2048_p; -extern const BIGNUM _bignum_ffdhe3072_p; -extern const BIGNUM _bignum_ffdhe4096_p; -extern const BIGNUM _bignum_ffdhe6144_p; -extern const BIGNUM _bignum_ffdhe8192_p; -extern const BIGNUM _bignum_const_2; +extern const BIGNUM ossl_bignum_const_2; + +extern const BIGNUM ossl_bignum_ffdhe2048_p; +extern const BIGNUM ossl_bignum_ffdhe3072_p; +extern const BIGNUM ossl_bignum_ffdhe4096_p; +extern const BIGNUM ossl_bignum_ffdhe6144_p; +extern const BIGNUM ossl_bignum_ffdhe8192_p; +extern const BIGNUM ossl_bignum_ffdhe2048_q; +extern const BIGNUM ossl_bignum_ffdhe3072_q; +extern const BIGNUM ossl_bignum_ffdhe4096_q; +extern const BIGNUM ossl_bignum_ffdhe6144_q; +extern const BIGNUM ossl_bignum_ffdhe8192_q; + +extern const BIGNUM ossl_bignum_modp_1536_p; +extern const BIGNUM ossl_bignum_modp_2048_p; +extern const BIGNUM ossl_bignum_modp_3072_p; +extern const BIGNUM ossl_bignum_modp_4096_p; +extern const BIGNUM ossl_bignum_modp_6144_p; +extern const BIGNUM ossl_bignum_modp_8192_p; +extern const BIGNUM ossl_bignum_modp_1536_q; +extern const BIGNUM ossl_bignum_modp_2048_q; +extern const BIGNUM ossl_bignum_modp_3072_q; +extern const BIGNUM ossl_bignum_modp_4096_q; +extern const BIGNUM ossl_bignum_modp_6144_q; +extern const BIGNUM ossl_bignum_modp_8192_q; diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/bn_srp.h b/deps/openssl/android/x86_64/usr/local/include/crypto/bn_srp.h index d4b282a6..00b160aa 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/bn_srp.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/bn_srp.h @@ -1,7 +1,7 @@ /* - * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,24 +9,24 @@ #ifndef OPENSSL_NO_SRP -extern const BIGNUM bn_group_1024; +extern const BIGNUM ossl_bn_group_1024; -extern const BIGNUM bn_group_1536; +extern const BIGNUM ossl_bn_group_1536; -extern const BIGNUM bn_group_2048; +extern const BIGNUM ossl_bn_group_2048; -extern const BIGNUM bn_group_3072; +extern const BIGNUM ossl_bn_group_3072; -extern const BIGNUM bn_group_4096; +extern const BIGNUM ossl_bn_group_4096; -extern const BIGNUM bn_group_6144; +extern const BIGNUM ossl_bn_group_6144; -extern const BIGNUM bn_group_8192; +extern const BIGNUM ossl_bn_group_8192; -extern const BIGNUM bn_generator_19; +extern const BIGNUM ossl_bn_generator_19; -extern const BIGNUM bn_generator_5; +extern const BIGNUM ossl_bn_generator_5; -extern const BIGNUM bn_generator_2; +extern const BIGNUM ossl_bn_generator_2; #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/bnerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/bnerr.h new file mode 100644 index 00000000..131e30fa --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/bnerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BNERR_H +# define OSSL_CRYPTO_BNERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BN_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/buffererr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/buffererr.h new file mode 100644 index 00000000..54976d95 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/buffererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BUFFERERR_H +# define OSSL_CRYPTO_BUFFERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_BUF_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/chacha.h b/deps/openssl/android/x86_64/usr/local/include/crypto/chacha.h index 4029400a..d29998ff 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/chacha.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/chacha.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_CRYPTO_CHACHA_H #define OSSL_CRYPTO_CHACHA_H +# pragma once #include @@ -35,8 +36,8 @@ void ChaCha20_ctr32(unsigned char *out, const unsigned char *inp, ((unsigned int)(p)[0]) | ((unsigned int)(p)[1]<<8) | \ ((unsigned int)(p)[2]<<16) | ((unsigned int)(p)[3]<<24) ) -#define CHACHA_KEY_SIZE 32 -#define CHACHA_CTR_SIZE 16 -#define CHACHA_BLK_SIZE 64 +#define CHACHA_KEY_SIZE 32 +#define CHACHA_CTR_SIZE 16 +#define CHACHA_BLK_SIZE 64 #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/cmll_platform.h b/deps/openssl/android/x86_64/usr/local/include/crypto/cmll_platform.h new file mode 100644 index 00000000..8cadadf6 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/cmll_platform.h @@ -0,0 +1,51 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CMLL_PLATFORM_H +# define OSSL_CMLL_PLATFORM_H +# pragma once + +# if defined(CMLL_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# ifndef OPENSSL_NO_CAMELLIA +# define SPARC_CMLL_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_CAMELLIA) +# include + +void cmll_t4_set_key(const unsigned char *key, int bits, CAMELLIA_KEY *ks); +void cmll_t4_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); +void cmll_t4_decrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); + +void cmll128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const CAMELLIA_KEY *key, + unsigned char *ivec, int /*unused*/); +void cmll128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const CAMELLIA_KEY *key, + unsigned char *ivec); +void cmll256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, + size_t blocks, const CAMELLIA_KEY *key, + unsigned char *ivec); +# endif /* OPENSSL_NO_CAMELLIA */ + +# endif /* CMLL_ASM && sparc */ + +#endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/cmperr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/cmperr.h new file mode 100644 index 00000000..2bd16373 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/cmperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CMPERR_H +# define OSSL_CRYPTO_CMPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CMP + +int ossl_err_load_CMP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/cmserr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/cmserr.h new file mode 100644 index 00000000..1de2f9c7 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/cmserr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CMSERR_H +# define OSSL_CRYPTO_CMSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CMS + +int ossl_err_load_CMS_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/comperr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/comperr.h new file mode 100644 index 00000000..0fd9c6de --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/comperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_COMPERR_H +# define OSSL_CRYPTO_COMPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_COMP + +int ossl_err_load_COMP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/conferr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/conferr.h new file mode 100644 index 00000000..cb367e4f --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/conferr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CONFERR_H +# define OSSL_CRYPTO_CONFERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_CONF_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/context.h b/deps/openssl/android/x86_64/usr/local/include/crypto/context.h new file mode 100644 index 00000000..cc06c71b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/context.h @@ -0,0 +1,41 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +void *ossl_provider_store_new(OSSL_LIB_CTX *); +void *ossl_property_string_data_new(OSSL_LIB_CTX *); +void *ossl_stored_namemap_new(OSSL_LIB_CTX *); +void *ossl_property_defns_new(OSSL_LIB_CTX *); +void *ossl_ctx_global_properties_new(OSSL_LIB_CTX *); +void *ossl_rand_ctx_new(OSSL_LIB_CTX *); +void *ossl_prov_conf_ctx_new(OSSL_LIB_CTX *); +void *ossl_bio_core_globals_new(OSSL_LIB_CTX *); +void *ossl_child_prov_ctx_new(OSSL_LIB_CTX *); +void *ossl_prov_drbg_nonce_ctx_new(OSSL_LIB_CTX *); +void *ossl_self_test_set_callback_new(OSSL_LIB_CTX *); +void *ossl_rand_crng_ctx_new(OSSL_LIB_CTX *); +void *ossl_thread_event_ctx_new(OSSL_LIB_CTX *); +void *ossl_fips_prov_ossl_ctx_new(OSSL_LIB_CTX *); + +void ossl_provider_store_free(void *); +void ossl_property_string_data_free(void *); +void ossl_stored_namemap_free(void *); +void ossl_property_defns_free(void *); +void ossl_ctx_global_properties_free(void *); +void ossl_rand_ctx_free(void *); +void ossl_prov_conf_ctx_free(void *); +void ossl_bio_core_globals_free(void *); +void ossl_child_prov_ctx_free(void *); +void ossl_prov_drbg_nonce_ctx_free(void *); +void ossl_self_test_set_callback_free(void *); +void ossl_rand_crng_ctx_free(void *); +void ossl_thread_event_ctx_free(void *); +void ossl_fips_prov_ossl_ctx_free(void *); +void ossl_release_default_drbg_ctx(void); diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/crmferr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/crmferr.h new file mode 100644 index 00000000..f1a27e04 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/crmferr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CRMFERR_H +# define OSSL_CRYPTO_CRMFERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CRMF + +int ossl_err_load_CRMF_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/cryptlib.h b/deps/openssl/android/x86_64/usr/local/include/crypto/cryptlib.h index 38b5dac9..39a956bf 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/cryptlib.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/cryptlib.h @@ -1,35 +1,39 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include "internal/cryptlib.h" +#ifndef OSSL_CRYPTO_CRYPTLIB_H +# define OSSL_CRYPTO_CRYPTLIB_H +# pragma once + +# include +# include "internal/cryptlib.h" /* This file is not scanned by mkdef.pl, whereas cryptlib.h is */ -struct thread_local_inits_st { - int async; - int err_state; - int rand; -}; - -int ossl_init_thread_start(uint64_t opts); +int ossl_init_thread_start(const void *index, void *arg, + OSSL_thread_stop_handler_fn handfn); +int ossl_init_thread_deregister(void *index); +int ossl_init_thread(void); +void ossl_cleanup_thread(void); +void ossl_ctx_thread_stop(OSSL_LIB_CTX *ctx); /* * OPENSSL_INIT flags. The primary list of these is in crypto.h. Flags below * are those omitted from crypto.h because they are "reserved for internal * use". */ -# define OPENSSL_INIT_ZLIB 0x00010000L # define OPENSSL_INIT_BASE_ONLY 0x00040000L -/* OPENSSL_INIT_THREAD flags */ -# define OPENSSL_INIT_THREAD_ASYNC 0x01 -# define OPENSSL_INIT_THREAD_ERR_STATE 0x02 -# define OPENSSL_INIT_THREAD_RAND 0x04 - +void ossl_trace_cleanup(void); void ossl_malloc_setup_failures(void); + +int ossl_crypto_alloc_ex_data_intern(int class_index, void *obj, + CRYPTO_EX_DATA *ad, int idx); + +#endif /* OSSL_CRYPTO_CRYPTLIB_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/cryptoerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/cryptoerr.h new file mode 100644 index 00000000..1b6192e3 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/cryptoerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CRYPTOERR_H +# define OSSL_CRYPTO_CRYPTOERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_CRYPTO_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/cterr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/cterr.h new file mode 100644 index 00000000..760bc796 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/cterr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_CTERR_H +# define OSSL_CRYPTO_CTERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_CT + +int ossl_err_load_CT_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/ctype.h b/deps/openssl/android/x86_64/usr/local/include/crypto/ctype.h index 81ef8f5c..22f69221 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/ctype.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/ctype.h @@ -1,7 +1,7 @@ /* - * Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -20,6 +20,9 @@ */ #ifndef OSSL_CRYPTO_CTYPE_H # define OSSL_CRYPTO_CTYPE_H +# pragma once + +# include # define CTYPE_MASK_lower 0x1 # define CTYPE_MASK_upper 0x2 @@ -54,10 +57,15 @@ int ossl_fromascii(int c); # define ossl_fromascii(c) (c) # endif int ossl_ctype_check(int c, unsigned int mask); + int ossl_tolower(int c); int ossl_toupper(int c); -int ascii_isdigit(const char inchar); +int ossl_isdigit(int c); +int ossl_islower(int c); +int ossl_isupper(int c); + +int ossl_ascii_isdigit(int c); # define ossl_isalnum(c) (ossl_ctype_check((c), CTYPE_MASK_alnum)) # define ossl_isalpha(c) (ossl_ctype_check((c), CTYPE_MASK_alpha)) @@ -68,15 +76,11 @@ int ascii_isdigit(const char inchar); # endif # define ossl_isblank(c) (ossl_ctype_check((c), CTYPE_MASK_blank)) # define ossl_iscntrl(c) (ossl_ctype_check((c), CTYPE_MASK_cntrl)) -# define ossl_isdigit(c) (ossl_ctype_check((c), CTYPE_MASK_digit)) # define ossl_isgraph(c) (ossl_ctype_check((c), CTYPE_MASK_graph)) -# define ossl_islower(c) (ossl_ctype_check((c), CTYPE_MASK_lower)) # define ossl_isprint(c) (ossl_ctype_check((c), CTYPE_MASK_print)) # define ossl_ispunct(c) (ossl_ctype_check((c), CTYPE_MASK_punct)) # define ossl_isspace(c) (ossl_ctype_check((c), CTYPE_MASK_space)) -# define ossl_isupper(c) (ossl_ctype_check((c), CTYPE_MASK_upper)) # define ossl_isxdigit(c) (ossl_ctype_check((c), CTYPE_MASK_xdigit)) # define ossl_isbase64(c) (ossl_ctype_check((c), CTYPE_MASK_base64)) # define ossl_isasn1print(c) (ossl_ctype_check((c), CTYPE_MASK_asn1print)) - #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/decoder.h b/deps/openssl/android/x86_64/usr/local/include/crypto/decoder.h new file mode 100644 index 00000000..6b5ee56a --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/decoder.h @@ -0,0 +1,40 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DECODER_H +# define OSSL_CRYPTO_DECODER_H +# pragma once + +# include + +/* + * These are specially made for the 'file:' provider-native loader, which + * uses this to install a DER to anything decoder, which doesn't do much + * except read a DER blob and pass it on as a provider object abstraction + * (provider-object(7)). + */ +void *ossl_decoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef, + OSSL_PROVIDER *prov); + +OSSL_DECODER_INSTANCE * +ossl_decoder_instance_new(OSSL_DECODER *decoder, void *decoderctx); +void ossl_decoder_instance_free(OSSL_DECODER_INSTANCE *decoder_inst); +int ossl_decoder_ctx_add_decoder_inst(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_INSTANCE *di); + +int ossl_decoder_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, + EVP_PKEY **pkey, const char *keytype, + OSSL_LIB_CTX *libctx, + const char *propquery); + +int ossl_decoder_get_number(const OSSL_DECODER *encoder); +int ossl_decoder_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_decoder_store_remove_all_provided(const OSSL_PROVIDER *prov); + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/decodererr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/decodererr.h new file mode 100644 index 00000000..d7badc43 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/decodererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DECODERERR_H +# define OSSL_CRYPTO_DECODERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_DECODER_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/des_platform.h b/deps/openssl/android/x86_64/usr/local/include/crypto/des_platform.h new file mode 100644 index 00000000..07ea1ddd --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/des_platform.h @@ -0,0 +1,35 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_DES_PLATFORM_H +# define OSSL_DES_PLATFORM_H +# pragma once + +# if defined(DES_ASM) && (defined(__sparc) || defined(__sparc__)) + +/* Fujitsu SPARC64 X support */ +# include "crypto/sparc_arch.h" + +# ifndef OPENSSL_NO_DES +# define SPARC_DES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_DES) +# include +void des_t4_key_expand(const void *key, DES_key_schedule *ks); +void des_t4_ede3_cbc_encrypt(const void *inp, void *out, size_t len, + const DES_key_schedule ks[3], unsigned char iv[8]); +void des_t4_ede3_cbc_decrypt(const void *inp, void *out, size_t len, + const DES_key_schedule ks[3], unsigned char iv[8]); +void des_t4_cbc_encrypt(const void *inp, void *out, size_t len, + const DES_key_schedule *ks, unsigned char iv[8]); +void des_t4_cbc_decrypt(const void *inp, void *out, size_t len, + const DES_key_schedule *ks, unsigned char iv[8]); +# endif /* OPENSSL_NO_DES */ + +# endif /* DES_ASM && sparc */ + +#endif /* OSSL_CRYPTO_CIPHERMODE_PLATFORM_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/dh.h b/deps/openssl/android/x86_64/usr/local/include/crypto/dh.h new file mode 100644 index 00000000..51232d18 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/dh.h @@ -0,0 +1,62 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DH_H +# define OSSL_CRYPTO_DH_H +# pragma once + +# include +# include +# include +# include "internal/ffc.h" + +DH *ossl_dh_new_by_nid_ex(OSSL_LIB_CTX *libctx, int nid); +DH *ossl_dh_new_ex(OSSL_LIB_CTX *libctx); +void ossl_dh_set0_libctx(DH *d, OSSL_LIB_CTX *libctx); +int ossl_dh_generate_ffc_parameters(DH *dh, int type, int pbits, int qbits, + BN_GENCB *cb); +int ossl_dh_generate_public_key(BN_CTX *ctx, const DH *dh, + const BIGNUM *priv_key, BIGNUM *pub_key); +int ossl_dh_get_named_group_uid_from_size(int pbits); +const char *ossl_dh_gen_type_id2name(int id); +int ossl_dh_gen_type_name2id(const char *name, int type); +void ossl_dh_cache_named_group(DH *dh); +int ossl_dh_is_named_safe_prime_group(const DH *dh); + +FFC_PARAMS *ossl_dh_get0_params(DH *dh); +int ossl_dh_get0_nid(const DH *dh); +int ossl_dh_params_fromdata(DH *dh, const OSSL_PARAM params[]); +int ossl_dh_key_fromdata(DH *dh, const OSSL_PARAM params[], int include_private); +int ossl_dh_params_todata(DH *dh, OSSL_PARAM_BLD *bld, OSSL_PARAM params[]); +int ossl_dh_key_todata(DH *dh, OSSL_PARAM_BLD *bld, OSSL_PARAM params[], + int include_private); +DH *ossl_dh_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_dh_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); + +int ossl_dh_check_pub_key_partial(const DH *dh, const BIGNUM *pub_key, int *ret); +int ossl_dh_check_priv_key(const DH *dh, const BIGNUM *priv_key, int *ret); +int ossl_dh_check_pairwise(const DH *dh); + +const DH_METHOD *ossl_dh_get_method(const DH *dh); + +int ossl_dh_buf2key(DH *key, const unsigned char *buf, size_t len); +size_t ossl_dh_key2buf(const DH *dh, unsigned char **pbuf, size_t size, + int alloc); + +int ossl_dh_kdf_X9_42_asn1(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const char *cek_alg, + const unsigned char *ukm, size_t ukmlen, + const EVP_MD *md, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_dh_is_foreign(const DH *dh); +DH *ossl_dh_dup(const DH *dh, int selection); + +#endif /* OSSL_CRYPTO_DH_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/dherr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/dherr.h new file mode 100644 index 00000000..bb24d131 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/dherr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DHERR_H +# define OSSL_CRYPTO_DHERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DH + +int ossl_err_load_DH_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/dsa.h b/deps/openssl/android/x86_64/usr/local/include/crypto/dsa.h new file mode 100644 index 00000000..260c30fa --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/dsa.h @@ -0,0 +1,49 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DSA_H +# define OSSL_CRYPTO_DSA_H +# pragma once + +# include +# include +# include "internal/ffc.h" + +#define DSA_PARAMGEN_TYPE_FIPS_186_4 0 /* Use FIPS186-4 standard */ +#define DSA_PARAMGEN_TYPE_FIPS_186_2 1 /* Use legacy FIPS186-2 standard */ +#define DSA_PARAMGEN_TYPE_FIPS_DEFAULT 2 + +DSA *ossl_dsa_new(OSSL_LIB_CTX *libctx); +void ossl_dsa_set0_libctx(DSA *d, OSSL_LIB_CTX *libctx); + +int ossl_dsa_generate_ffc_parameters(DSA *dsa, int type, int pbits, int qbits, + BN_GENCB *cb); + +int ossl_dsa_sign_int(int type, const unsigned char *dgst, int dlen, + unsigned char *sig, unsigned int *siglen, DSA *dsa); + +FFC_PARAMS *ossl_dsa_get0_params(DSA *dsa); +int ossl_dsa_ffc_params_fromdata(DSA *dsa, const OSSL_PARAM params[]); +int ossl_dsa_key_fromdata(DSA *dsa, const OSSL_PARAM params[], + int include_private); +DSA *ossl_dsa_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_dsa_generate_public_key(BN_CTX *ctx, const DSA *dsa, + const BIGNUM *priv_key, BIGNUM *pub_key); +int ossl_dsa_check_params(const DSA *dsa, int checktype, int *ret); +int ossl_dsa_check_pub_key(const DSA *dsa, const BIGNUM *pub_key, int *ret); +int ossl_dsa_check_pub_key_partial(const DSA *dsa, const BIGNUM *pub_key, + int *ret); +int ossl_dsa_check_priv_key(const DSA *dsa, const BIGNUM *priv_key, int *ret); +int ossl_dsa_check_pairwise(const DSA *dsa); +int ossl_dsa_is_foreign(const DSA *dsa); +DSA *ossl_dsa_dup(const DSA *dsa, int selection); + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/dsaerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/dsaerr.h new file mode 100644 index 00000000..fde8358f --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/dsaerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DSAERR_H +# define OSSL_CRYPTO_DSAERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DSA + +int ossl_err_load_DSA_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/dso_conf.h b/deps/openssl/android/x86_64/usr/local/include/crypto/dso_conf.h index 4b1167c3..795dfa0f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/dso_conf.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/dso_conf.h @@ -1,9 +1,9 @@ /* WARNING: do not edit! */ /* Generated by Makefile from include/crypto/dso_conf.h.in */ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,6 +11,8 @@ #ifndef OSSL_CRYPTO_DSO_CONF_H # define OSSL_CRYPTO_DSO_CONF_H +# pragma once + # define DSO_DLFCN # define HAVE_DLFCN_H # define DSO_EXTENSION ".so" diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/dso_conf.h.in b/deps/openssl/android/x86_64/usr/local/include/crypto/dso_conf.h.in index 57a09b10..12de11ad 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/dso_conf.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/dso_conf.h.in @@ -1,8 +1,8 @@ {- join("\n",map { "/* $_ */" } @autowarntext) -} /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,8 @@ #ifndef OSSL_CRYPTO_DSO_CONF_H # define OSSL_CRYPTO_DSO_CONF_H +# pragma once + {- # The DSO code currently always implements all functions so that no # applications will have to worry about that from a compilation point # of view. However, the "method"s may return zero unless that platform @@ -27,5 +29,5 @@ @macros = ( "DSO_DLFCN" ); } join("\n", map { "# define $_" } @macros); -} -# define DSO_EXTENSION "{- $target{dso_extension} -}" +# define DSO_EXTENSION "{- platform->dsoext() -}" #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/ec.h b/deps/openssl/android/x86_64/usr/local/include/crypto/ec.h index fe52ae70..62163b31 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/ec.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/ec.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,11 +11,20 @@ #ifndef OSSL_CRYPTO_EC_H # define OSSL_CRYPTO_EC_H +# pragma once + # include +# include + +int ossl_ec_curve_name2nid(const char *name); +const char *ossl_ec_curve_nid2nist_int(int nid); +int ossl_ec_curve_nist2nid_int(const char *name); +int evp_pkey_ctx_set_ec_param_enc_prov(EVP_PKEY_CTX *ctx, int param_enc); # ifndef OPENSSL_NO_EC - +# include # include +# include "crypto/types.h" /*- * Computes the multiplicative inverse of x in the range @@ -38,16 +47,54 @@ * reduction round on the input can be omitted by the underlying * implementations for better SCA properties on regular input values). */ -__owur int ec_group_do_inverse_ord(const EC_GROUP *group, BIGNUM *res, - const BIGNUM *x, BN_CTX *ctx); +__owur int ossl_ec_group_do_inverse_ord(const EC_GROUP *group, BIGNUM *res, + const BIGNUM *x, BN_CTX *ctx); /*- * ECDH Key Derivation Function as defined in ANSI X9.63 */ -int ecdh_KDF_X9_63(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); +int ossl_ecdh_kdf_X9_63(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const unsigned char *sinfo, size_t sinfolen, + const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); + +int ossl_ec_key_public_check(const EC_KEY *eckey, BN_CTX *ctx); +int ossl_ec_key_public_check_quick(const EC_KEY *eckey, BN_CTX *ctx); +int ossl_ec_key_private_check(const EC_KEY *eckey); +int ossl_ec_key_pairwise_check(const EC_KEY *eckey, BN_CTX *ctx); +OSSL_LIB_CTX *ossl_ec_key_get_libctx(const EC_KEY *eckey); +const char *ossl_ec_key_get0_propq(const EC_KEY *eckey); +void ossl_ec_key_set0_libctx(EC_KEY *key, OSSL_LIB_CTX *libctx); + +/* Backend support */ +int ossl_ec_group_todata(const EC_GROUP *group, OSSL_PARAM_BLD *tmpl, + OSSL_PARAM params[], OSSL_LIB_CTX *libctx, + const char *propq, + BN_CTX *bnctx, unsigned char **genbuf); +int ossl_ec_group_fromdata(EC_KEY *ec, const OSSL_PARAM params[]); +int ossl_ec_group_set_params(EC_GROUP *group, const OSSL_PARAM params[]); +int ossl_ec_key_fromdata(EC_KEY *ecx, const OSSL_PARAM params[], + int include_private); +int ossl_ec_key_otherparams_fromdata(EC_KEY *ec, const OSSL_PARAM params[]); +int ossl_ec_key_is_foreign(const EC_KEY *ec); +EC_KEY *ossl_ec_key_dup(const EC_KEY *key, int selection); +int ossl_x509_algor_is_sm2(const X509_ALGOR *palg); +EC_KEY *ossl_ec_key_param_from_x509_algor(const X509_ALGOR *palg, + OSSL_LIB_CTX *libctx, + const char *propq); +EC_KEY *ossl_ec_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_ec_set_ecdh_cofactor_mode(EC_KEY *ec, int mode); +int ossl_ec_encoding_name2id(const char *name); +int ossl_ec_encoding_param2id(const OSSL_PARAM *p, int *id); +int ossl_ec_pt_format_name2id(const char *name); +int ossl_ec_pt_format_param2id(const OSSL_PARAM *p, int *id); +char *ossl_ec_pt_format_id2name(int id); + +char *ossl_ec_check_group_type_id2name(int flags); +int ossl_ec_set_check_group_type_from_name(EC_KEY *ec, const char *name); # endif /* OPENSSL_NO_EC */ #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/ecerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/ecerr.h new file mode 100644 index 00000000..782526bf --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/ecerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ECERR_H +# define OSSL_CRYPTO_ECERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_EC + +int ossl_err_load_EC_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/ecx.h b/deps/openssl/android/x86_64/usr/local/include/crypto/ecx.h new file mode 100644 index 00000000..48b95fa5 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/ecx.h @@ -0,0 +1,150 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* Internal EC functions for other submodules: not for application use */ + +#ifndef OSSL_CRYPTO_ECX_H +# define OSSL_CRYPTO_ECX_H +# pragma once + +# include + +# ifndef OPENSSL_NO_EC + +# include +# include +# include +# include "internal/refcount.h" +# include "crypto/types.h" + +# define X25519_KEYLEN 32 +# define X448_KEYLEN 56 +# define ED25519_KEYLEN 32 +# define ED448_KEYLEN 57 + +# define MAX_KEYLEN ED448_KEYLEN + +# define X25519_BITS 253 +# define X25519_SECURITY_BITS 128 + +# define X448_BITS 448 +# define X448_SECURITY_BITS 224 + +# define ED25519_BITS 256 +/* RFC8032 Section 8.5 */ +# define ED25519_SECURITY_BITS 128 +# define ED25519_SIGSIZE 64 + +# define ED448_BITS 456 +/* RFC8032 Section 8.5 */ +# define ED448_SECURITY_BITS 224 +# define ED448_SIGSIZE 114 + + +typedef enum { + ECX_KEY_TYPE_X25519, + ECX_KEY_TYPE_X448, + ECX_KEY_TYPE_ED25519, + ECX_KEY_TYPE_ED448 +} ECX_KEY_TYPE; + +#define KEYTYPE2NID(type) \ + ((type) == ECX_KEY_TYPE_X25519 \ + ? EVP_PKEY_X25519 \ + : ((type) == ECX_KEY_TYPE_X448 \ + ? EVP_PKEY_X448 \ + : ((type) == ECX_KEY_TYPE_ED25519 \ + ? EVP_PKEY_ED25519 \ + : EVP_PKEY_ED448))) + +struct ecx_key_st { + OSSL_LIB_CTX *libctx; + char *propq; + unsigned int haspubkey:1; + unsigned char pubkey[MAX_KEYLEN]; + unsigned char *privkey; + size_t keylen; + ECX_KEY_TYPE type; + CRYPTO_REF_COUNT references; + CRYPTO_RWLOCK *lock; +}; + +size_t ossl_ecx_key_length(ECX_KEY_TYPE type); +ECX_KEY *ossl_ecx_key_new(OSSL_LIB_CTX *libctx, ECX_KEY_TYPE type, + int haspubkey, const char *propq); +void ossl_ecx_key_set0_libctx(ECX_KEY *key, OSSL_LIB_CTX *libctx); +unsigned char *ossl_ecx_key_allocate_privkey(ECX_KEY *key); +void ossl_ecx_key_free(ECX_KEY *key); +int ossl_ecx_key_up_ref(ECX_KEY *key); +ECX_KEY *ossl_ecx_key_dup(const ECX_KEY *key, int selection); + +int ossl_x25519(uint8_t out_shared_key[32], const uint8_t private_key[32], + const uint8_t peer_public_value[32]); +void ossl_x25519_public_from_private(uint8_t out_public_value[32], + const uint8_t private_key[32]); + +int +ossl_ed25519_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[32], + const uint8_t private_key[32], + const char *propq); +int +ossl_ed25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, + const uint8_t public_key[32], const uint8_t private_key[32], + OSSL_LIB_CTX *libctx, const char *propq); +int +ossl_ed25519_verify(const uint8_t *message, size_t message_len, + const uint8_t signature[64], const uint8_t public_key[32], + OSSL_LIB_CTX *libctx, const char *propq); + +int +ossl_ed448_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[57], + const uint8_t private_key[57], const char *propq); +int +ossl_ed448_sign(OSSL_LIB_CTX *ctx, uint8_t *out_sig, const uint8_t *message, + size_t message_len, const uint8_t public_key[57], + const uint8_t private_key[57], const uint8_t *context, + size_t context_len, const char *propq); + +int +ossl_ed448_verify(OSSL_LIB_CTX *ctx, const uint8_t *message, size_t message_len, + const uint8_t signature[114], const uint8_t public_key[57], + const uint8_t *context, size_t context_len, const char *propq); + +int +ossl_x448(uint8_t out_shared_key[56], const uint8_t private_key[56], + const uint8_t peer_public_value[56]); +void +ossl_x448_public_from_private(uint8_t out_public_value[56], + const uint8_t private_key[56]); + + +/* Backend support */ +typedef enum { + KEY_OP_PUBLIC, + KEY_OP_PRIVATE, + KEY_OP_KEYGEN +} ecx_key_op_t; + +ECX_KEY *ossl_ecx_key_op(const X509_ALGOR *palg, + const unsigned char *p, int plen, + int pkey_id, ecx_key_op_t op, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_ecx_public_from_private(ECX_KEY *key); +int ossl_ecx_key_fromdata(ECX_KEY *ecx, const OSSL_PARAM params[], + int include_private); +ECX_KEY *ossl_ecx_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +ECX_KEY *ossl_evp_pkey_get1_X25519(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_X448(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_ED25519(EVP_PKEY *pkey); +ECX_KEY *ossl_evp_pkey_get1_ED448(EVP_PKEY *pkey); +# endif /* OPENSSL_NO_EC */ +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/encoder.h b/deps/openssl/android/x86_64/usr/local/include/crypto/encoder.h new file mode 100644 index 00000000..5c53bbea --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/encoder.h @@ -0,0 +1,20 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENCODER_H +# define OSSL_CRYPTO_ENCODER_H +# pragma once + +# include + +int ossl_encoder_get_number(const OSSL_ENCODER *encoder); +int ossl_encoder_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_encoder_store_remove_all_provided(const OSSL_PROVIDER *prov); + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/encodererr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/encodererr.h new file mode 100644 index 00000000..56c45823 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/encodererr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENCODERERR_H +# define OSSL_CRYPTO_ENCODERERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_ENCODER_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/engine.h b/deps/openssl/android/x86_64/usr/local/include/crypto/engine.h index f80ae3ec..fac6ed09 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/engine.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/engine.h @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/engineerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/engineerr.h new file mode 100644 index 00000000..737c841d --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/engineerr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ENGINEERR_H +# define OSSL_CRYPTO_ENGINEERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_ENGINE + +int ossl_err_load_ENGINE_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/err.h b/deps/openssl/android/x86_64/usr/local/include/crypto/err.h index 8ab0e5ba..15ec6fd0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/err.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/err.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,10 +9,11 @@ #ifndef OSSL_CRYPTO_ERR_H # define OSSL_CRYPTO_ERR_H +# pragma once -int err_load_crypto_strings_int(void); +int ossl_err_load_ERR_strings(void); +int ossl_err_load_crypto_strings(void); void err_cleanup(void); -void err_delete_thread_state(void); int err_shelve_state(void **); void err_unshelve_state(void *); diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/ess.h b/deps/openssl/android/x86_64/usr/local/include/crypto/ess.h new file mode 100644 index 00000000..7acde5f8 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/ess.h @@ -0,0 +1,76 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ESS_H +# define OSSL_CRYPTO_ESS_H +# pragma once + +/*- + * IssuerSerial ::= SEQUENCE { + * issuer GeneralNames, + * serialNumber CertificateSerialNumber + * } + */ + +struct ESS_issuer_serial { + STACK_OF(GENERAL_NAME) *issuer; + ASN1_INTEGER *serial; +}; + +/*- + * ESSCertID ::= SEQUENCE { + * certHash Hash, + * issuerSerial IssuerSerial OPTIONAL + * } + */ + +struct ESS_cert_id { + ASN1_OCTET_STRING *hash; /* Always SHA-1 digest. */ + ESS_ISSUER_SERIAL *issuer_serial; +}; + +/*- + * SigningCertificate ::= SEQUENCE { + * certs SEQUENCE OF ESSCertID, + * policies SEQUENCE OF PolicyInformation OPTIONAL + * } + */ + +struct ESS_signing_cert { + STACK_OF(ESS_CERT_ID) *cert_ids; + STACK_OF(POLICYINFO) *policy_info; +}; + +/*- + * ESSCertIDv2 ::= SEQUENCE { + * hashAlgorithm AlgorithmIdentifier DEFAULT id-sha256, + * certHash Hash, + * issuerSerial IssuerSerial OPTIONAL + * } + */ + +struct ESS_cert_id_v2_st { + X509_ALGOR *hash_alg; /* Default: SHA-256 */ + ASN1_OCTET_STRING *hash; + ESS_ISSUER_SERIAL *issuer_serial; +}; + +/*- + * SigningCertificateV2 ::= SEQUENCE { + * certs SEQUENCE OF ESSCertIDv2, + * policies SEQUENCE OF PolicyInformation OPTIONAL + * } + */ + +struct ESS_signing_cert_v2_st { + STACK_OF(ESS_CERT_ID_V2) *cert_ids; + STACK_OF(POLICYINFO) *policy_info; +}; + +#endif /* OSSL_CRYPTO_ESS_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/esserr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/esserr.h new file mode 100644 index 00000000..8df2df11 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/esserr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_ESSERR_H +# define OSSL_CRYPTO_ESSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_ESS_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/evp.h b/deps/openssl/android/x86_64/usr/local/include/crypto/evp.h index d86aed36..dbbdcccb 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/evp.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/evp.h @@ -1,14 +1,20 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include -#include "internal/refcount.h" +#ifndef OSSL_CRYPTO_EVP_H +# define OSSL_CRYPTO_EVP_H +# pragma once + +# include +# include +# include "internal/refcount.h" +# include "crypto/ecx.h" /* * Don't free up md_ctx->pctx in EVP_MD_CTX_reset, use the reserved flag @@ -16,7 +22,93 @@ */ #define EVP_MD_CTX_FLAG_KEEP_PKEY_CTX 0x0400 +#define evp_pkey_ctx_is_legacy(ctx) \ + ((ctx)->keymgmt == NULL) +#define evp_pkey_ctx_is_provided(ctx) \ + (!evp_pkey_ctx_is_legacy(ctx)) + struct evp_pkey_ctx_st { + /* Actual operation */ + int operation; + + /* + * Library context, property query, keytype and keymgmt associated with + * this context + */ + OSSL_LIB_CTX *libctx; + char *propquery; + const char *keytype; + /* If |pkey| below is set, this field is always a reference to its keymgmt */ + EVP_KEYMGMT *keymgmt; + + union { + struct { + void *genctx; + } keymgmt; + + struct { + EVP_KEYEXCH *exchange; + /* + * Opaque ctx returned from a providers exchange algorithm + * implementation OSSL_FUNC_keyexch_newctx() + */ + void *algctx; + } kex; + + struct { + EVP_SIGNATURE *signature; + /* + * Opaque ctx returned from a providers signature algorithm + * implementation OSSL_FUNC_signature_newctx() + */ + void *algctx; + } sig; + + struct { + EVP_ASYM_CIPHER *cipher; + /* + * Opaque ctx returned from a providers asymmetric cipher algorithm + * implementation OSSL_FUNC_asym_cipher_newctx() + */ + void *algctx; + } ciph; + struct { + EVP_KEM *kem; + /* + * Opaque ctx returned from a providers KEM algorithm + * implementation OSSL_FUNC_kem_newctx() + */ + void *algctx; + } encap; + } op; + + /* + * Cached parameters. Inits of operations that depend on these should + * call evp_pkey_ctx_use_delayed_data() when the operation has been set + * up properly. + */ + struct { + /* Distinguishing Identifier, ISO/IEC 15946-3, FIPS 196 */ + char *dist_id_name; /* The name used with EVP_PKEY_CTX_ctrl_str() */ + void *dist_id; /* The distinguishing ID itself */ + size_t dist_id_len; /* The length of the distinguishing ID */ + + /* Indicators of what has been set. Keep them together! */ + unsigned int dist_id_set : 1; + } cached_parameters; + + /* Application specific data, usually used by the callback */ + void *app_data; + /* Keygen callback */ + EVP_PKEY_gen_cb *pkey_gencb; + /* implementation specific keygen data */ + int *keygen_info; + int keygen_info_count; + + /* Legacy fields below */ + + /* EVP_PKEY identity */ + int legacy_keytype; /* Method associated with this operation */ const EVP_PKEY_METHOD *pmeth; /* Engine that implements this method or NULL if builtin */ @@ -25,17 +117,17 @@ struct evp_pkey_ctx_st { EVP_PKEY *pkey; /* Peer key for key agreement, may be NULL */ EVP_PKEY *peerkey; - /* Actual operation */ - int operation; /* Algorithm specific data */ void *data; - /* Application specific data */ - void *app_data; - /* Keygen callback */ - EVP_PKEY_gen_cb *pkey_gencb; - /* implementation specific keygen data */ - int *keygen_info; - int keygen_info_count; + /* Indicator if digest_custom needs to be called */ + unsigned int flag_call_digest_custom:1; + /* + * Used to support taking custody of memory in the case of a provider being + * used with the deprecated EVP_PKEY_CTX_set_rsa_keygen_pubexp() API. This + * member should NOT be used for any other purpose and should be removed + * when said deprecated API is excised completely. + */ + BIGNUM *rsa_pubexp; } /* EVP_PKEY_CTX */ ; #define EVP_PKEY_FLAG_DYNAMIC 1 @@ -44,7 +136,7 @@ struct evp_pkey_method_st { int pkey_id; int flags; int (*init) (EVP_PKEY_CTX *ctx); - int (*copy) (EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src); + int (*copy) (EVP_PKEY_CTX *dst, const EVP_PKEY_CTX *src); void (*cleanup) (EVP_PKEY_CTX *ctx); int (*paramgen_init) (EVP_PKEY_CTX *ctx); int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); @@ -93,30 +185,74 @@ DEFINE_STACK_OF_CONST(EVP_PKEY_METHOD) void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx); -extern const EVP_PKEY_METHOD cmac_pkey_meth; -extern const EVP_PKEY_METHOD dh_pkey_meth; -extern const EVP_PKEY_METHOD dhx_pkey_meth; -extern const EVP_PKEY_METHOD dsa_pkey_meth; -extern const EVP_PKEY_METHOD ec_pkey_meth; -extern const EVP_PKEY_METHOD sm2_pkey_meth; -extern const EVP_PKEY_METHOD ecx25519_pkey_meth; -extern const EVP_PKEY_METHOD ecx448_pkey_meth; -extern const EVP_PKEY_METHOD ed25519_pkey_meth; -extern const EVP_PKEY_METHOD ed448_pkey_meth; -extern const EVP_PKEY_METHOD hmac_pkey_meth; -extern const EVP_PKEY_METHOD rsa_pkey_meth; -extern const EVP_PKEY_METHOD rsa_pss_pkey_meth; -extern const EVP_PKEY_METHOD scrypt_pkey_meth; -extern const EVP_PKEY_METHOD tls1_prf_pkey_meth; -extern const EVP_PKEY_METHOD hkdf_pkey_meth; -extern const EVP_PKEY_METHOD poly1305_pkey_meth; -extern const EVP_PKEY_METHOD siphash_pkey_meth; +const EVP_PKEY_METHOD *ossl_dh_pkey_method(void); +const EVP_PKEY_METHOD *ossl_dhx_pkey_method(void); +const EVP_PKEY_METHOD *ossl_dsa_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ec_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ecx25519_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ecx448_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ed25519_pkey_method(void); +const EVP_PKEY_METHOD *ossl_ed448_pkey_method(void); +const EVP_PKEY_METHOD *ossl_rsa_pkey_method(void); +const EVP_PKEY_METHOD *ossl_rsa_pss_pkey_method(void); + +struct evp_mac_st { + OSSL_PROVIDER *prov; + int name_id; + char *type_name; + const char *description; + + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + + OSSL_FUNC_mac_newctx_fn *newctx; + OSSL_FUNC_mac_dupctx_fn *dupctx; + OSSL_FUNC_mac_freectx_fn *freectx; + OSSL_FUNC_mac_init_fn *init; + OSSL_FUNC_mac_update_fn *update; + OSSL_FUNC_mac_final_fn *final; + OSSL_FUNC_mac_gettable_params_fn *gettable_params; + OSSL_FUNC_mac_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_mac_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_mac_get_params_fn *get_params; + OSSL_FUNC_mac_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_mac_set_ctx_params_fn *set_ctx_params; +}; + +struct evp_kdf_st { + OSSL_PROVIDER *prov; + int name_id; + char *type_name; + const char *description; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + + OSSL_FUNC_kdf_newctx_fn *newctx; + OSSL_FUNC_kdf_dupctx_fn *dupctx; + OSSL_FUNC_kdf_freectx_fn *freectx; + OSSL_FUNC_kdf_reset_fn *reset; + OSSL_FUNC_kdf_derive_fn *derive; + OSSL_FUNC_kdf_gettable_params_fn *gettable_params; + OSSL_FUNC_kdf_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_kdf_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_kdf_get_params_fn *get_params; + OSSL_FUNC_kdf_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_kdf_set_ctx_params_fn *set_ctx_params; +}; + +#define EVP_ORIG_DYNAMIC 0 +#define EVP_ORIG_GLOBAL 1 +#define EVP_ORIG_METH 2 struct evp_md_st { + /* nid */ int type; + + /* Legacy structure members */ int pkey_type; int md_size; unsigned long flags; + int origin; int (*init) (EVP_MD_CTX *ctx); int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); int (*final) (EVP_MD_CTX *ctx, unsigned char *md); @@ -126,16 +262,44 @@ struct evp_md_st { int ctx_size; /* how big does the ctx->md_data need to be */ /* control function */ int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, void *p2); + + /* New structure members */ + /* Above comment to be removed when legacy has gone */ + int name_id; + char *type_name; + const char *description; + OSSL_PROVIDER *prov; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + OSSL_FUNC_digest_newctx_fn *newctx; + OSSL_FUNC_digest_init_fn *dinit; + OSSL_FUNC_digest_update_fn *dupdate; + OSSL_FUNC_digest_final_fn *dfinal; + OSSL_FUNC_digest_digest_fn *digest; + OSSL_FUNC_digest_freectx_fn *freectx; + OSSL_FUNC_digest_dupctx_fn *dupctx; + OSSL_FUNC_digest_get_params_fn *get_params; + OSSL_FUNC_digest_set_ctx_params_fn *set_ctx_params; + OSSL_FUNC_digest_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_digest_gettable_params_fn *gettable_params; + OSSL_FUNC_digest_settable_ctx_params_fn *settable_ctx_params; + OSSL_FUNC_digest_gettable_ctx_params_fn *gettable_ctx_params; + } /* EVP_MD */ ; struct evp_cipher_st { int nid; + int block_size; /* Default value for variable length ciphers */ int key_len; int iv_len; + + /* Legacy structure members */ /* Various flags */ unsigned long flags; + /* How the EVP_CIPHER was created. */ + int origin; /* init key */ int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); @@ -154,6 +318,29 @@ struct evp_cipher_st { int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr); /* Application data */ void *app_data; + + /* New structure members */ + /* Above comment to be removed when legacy has gone */ + int name_id; + char *type_name; + const char *description; + OSSL_PROVIDER *prov; + CRYPTO_REF_COUNT refcnt; + CRYPTO_RWLOCK *lock; + OSSL_FUNC_cipher_newctx_fn *newctx; + OSSL_FUNC_cipher_encrypt_init_fn *einit; + OSSL_FUNC_cipher_decrypt_init_fn *dinit; + OSSL_FUNC_cipher_update_fn *cupdate; + OSSL_FUNC_cipher_final_fn *cfinal; + OSSL_FUNC_cipher_cipher_fn *ccipher; + OSSL_FUNC_cipher_freectx_fn *freectx; + OSSL_FUNC_cipher_dupctx_fn *dupctx; + OSSL_FUNC_cipher_get_params_fn *get_params; + OSSL_FUNC_cipher_get_ctx_params_fn *get_ctx_params; + OSSL_FUNC_cipher_set_ctx_params_fn *set_ctx_params; + OSSL_FUNC_cipher_gettable_params_fn *gettable_params; + OSSL_FUNC_cipher_gettable_ctx_params_fn *gettable_ctx_params; + OSSL_FUNC_cipher_settable_ctx_params_fn *settable_ctx_params; } /* EVP_CIPHER */ ; /* Macros to code block cipher wrappers */ @@ -165,7 +352,7 @@ struct evp_cipher_st { #define BLOCK_CIPHER_ecb_loop() \ size_t i, bl; \ - bl = EVP_CIPHER_CTX_cipher(ctx)->block_size; \ + bl = EVP_CIPHER_CTX_get0_cipher(ctx)->block_size; \ if (inl < bl) return 1;\ inl -= bl; \ for (i=0; i <= inl; i+=bl) @@ -174,26 +361,26 @@ struct evp_cipher_st { static int cname##_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ {\ BLOCK_CIPHER_ecb_loop() \ - cprefix##_ecb_encrypt(in + i, out + i, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_encrypting(ctx)); \ + cprefix##_ecb_encrypt(in + i, out + i, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_is_encrypting(ctx)); \ return 1;\ } -#define EVP_MAXCHUNK ((size_t)1<<(sizeof(long)*8-2)) +#define EVP_MAXCHUNK ((size_t)1 << 30) #define BLOCK_CIPHER_func_ofb(cname, cprefix, cbits, kstruct, ksched) \ static int cname##_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ {\ while(inl>=EVP_MAXCHUNK) {\ - int num = EVP_CIPHER_CTX_num(ctx);\ - cprefix##_ofb##cbits##_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), &num); \ + int num = EVP_CIPHER_CTX_get_num(ctx);\ + cprefix##_ofb##cbits##_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, &num); \ EVP_CIPHER_CTX_set_num(ctx, num);\ inl-=EVP_MAXCHUNK;\ in +=EVP_MAXCHUNK;\ out+=EVP_MAXCHUNK;\ }\ if (inl) {\ - int num = EVP_CIPHER_CTX_num(ctx);\ - cprefix##_ofb##cbits##_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), &num); \ + int num = EVP_CIPHER_CTX_get_num(ctx);\ + cprefix##_ofb##cbits##_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, &num); \ EVP_CIPHER_CTX_set_num(ctx, num);\ }\ return 1;\ @@ -204,13 +391,13 @@ static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const uns {\ while(inl>=EVP_MAXCHUNK) \ {\ - cprefix##_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_encrypting(ctx));\ + cprefix##_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ inl-=EVP_MAXCHUNK;\ in +=EVP_MAXCHUNK;\ out+=EVP_MAXCHUNK;\ }\ if (inl)\ - cprefix##_cbc_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_encrypting(ctx));\ + cprefix##_cbc_encrypt(in, out, (long)inl, &EVP_C_DATA(kstruct,ctx)->ksched, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ return 1;\ } @@ -222,13 +409,13 @@ static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, if (inl < chunk) chunk = inl;\ while (inl && inl >= chunk)\ {\ - int num = EVP_CIPHER_CTX_num(ctx);\ + int num = EVP_CIPHER_CTX_get_num(ctx);\ cprefix##_cfb##cbits##_encrypt(in, out, (long) \ ((cbits == 1) \ && !EVP_CIPHER_CTX_test_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS) \ ? chunk*8 : chunk), \ - &EVP_C_DATA(kstruct, ctx)->ksched, EVP_CIPHER_CTX_iv_noconst(ctx),\ - &num, EVP_CIPHER_CTX_encrypting(ctx));\ + &EVP_C_DATA(kstruct, ctx)->ksched, ctx->iv,\ + &num, EVP_CIPHER_CTX_is_encrypting(ctx));\ EVP_CIPHER_CTX_set_num(ctx, num);\ inl -= chunk;\ in += chunk;\ @@ -250,6 +437,7 @@ static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, static const EVP_CIPHER cname##_##mode = { \ nid##_##nmode, block_size, key_len, iv_len, \ flags | EVP_CIPH_##MODE##_MODE, \ + EVP_ORIG_GLOBAL, \ init_key, \ cname##_##mode##_cipher, \ cleanup, \ @@ -305,6 +493,7 @@ BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, flags, \ static const EVP_CIPHER cname##_cbc = {\ nid##_cbc, block_size, key_len, iv_len, \ flags | EVP_CIPH_CBC_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_cbc_cipher,\ cleanup,\ @@ -318,6 +507,7 @@ const EVP_CIPHER *EVP_##cname##_cbc(void) { return &cname##_cbc; }\ static const EVP_CIPHER cname##_cfb = {\ nid##_cfb64, 1, key_len, iv_len, \ flags | EVP_CIPH_CFB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_cfb_cipher,\ cleanup,\ @@ -331,6 +521,7 @@ const EVP_CIPHER *EVP_##cname##_cfb(void) { return &cname##_cfb; }\ static const EVP_CIPHER cname##_ofb = {\ nid##_ofb64, 1, key_len, iv_len, \ flags | EVP_CIPH_OFB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_ofb_cipher,\ cleanup,\ @@ -344,6 +535,7 @@ const EVP_CIPHER *EVP_##cname##_ofb(void) { return &cname##_ofb; }\ static const EVP_CIPHER cname##_ecb = {\ nid##_ecb, block_size, key_len, iv_len, \ flags | EVP_CIPH_ECB_MODE,\ + EVP_ORIG_GLOBAL,\ init_key,\ cname##_ecb_cipher,\ cleanup,\ @@ -372,66 +564,293 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; } (fl)|EVP_CIPH_FLAG_DEFAULT_ASN1, \ cipher##_init_key, NULL, NULL, NULL, NULL) - -# ifndef OPENSSL_NO_EC - -#define X25519_KEYLEN 32 -#define X448_KEYLEN 56 -#define ED448_KEYLEN 57 - -#define MAX_KEYLEN ED448_KEYLEN - typedef struct { - unsigned char pubkey[MAX_KEYLEN]; - unsigned char *privkey; -} ECX_KEY; + unsigned char iv[EVP_MAX_IV_LENGTH]; + unsigned int iv_len; + unsigned int tag_len; +} evp_cipher_aead_asn1_params; -#endif +int evp_cipher_param_to_asn1_ex(EVP_CIPHER_CTX *c, ASN1_TYPE *type, + evp_cipher_aead_asn1_params *params); + +int evp_cipher_asn1_to_param_ex(EVP_CIPHER_CTX *c, ASN1_TYPE *type, + evp_cipher_aead_asn1_params *params); /* - * Type needs to be a bit field Sub-type needs to be for variations on the - * method, as in, can it do arbitrary encryption.... + * To support transparent execution of operation in backends other + * than the "origin" key, we support transparent export/import to + * those providers, and maintain a cache of the imported keydata, + * so we don't need to redo the export/import every time we perform + * the same operation in that same provider. + * This requires that the "origin" backend (whether it's a legacy or a + * provider "origin") implements exports, and that the target provider + * has an EVP_KEYMGMT that implements import. */ +typedef struct { + EVP_KEYMGMT *keymgmt; + void *keydata; + int selection; +} OP_CACHE_ELEM; + +DEFINE_STACK_OF(OP_CACHE_ELEM) + +/* + * An EVP_PKEY can have the following states: + * + * untyped & empty: + * + * type == EVP_PKEY_NONE && keymgmt == NULL + * + * typed & empty: + * + * (type != EVP_PKEY_NONE && pkey.ptr == NULL) ## legacy (libcrypto only) + * || (keymgmt != NULL && keydata == NULL) ## provider side + * + * fully assigned: + * + * (type != EVP_PKEY_NONE && pkey.ptr != NULL) ## legacy (libcrypto only) + * || (keymgmt != NULL && keydata != NULL) ## provider side + * + * The easiest way to detect a legacy key is: + * + * keymgmt == NULL && type != EVP_PKEY_NONE + * + * The easiest way to detect a provider side key is: + * + * keymgmt != NULL + */ +#define evp_pkey_is_blank(pk) \ + ((pk)->type == EVP_PKEY_NONE && (pk)->keymgmt == NULL) +#define evp_pkey_is_typed(pk) \ + ((pk)->type != EVP_PKEY_NONE || (pk)->keymgmt != NULL) +#ifndef FIPS_MODULE +# define evp_pkey_is_assigned(pk) \ + ((pk)->pkey.ptr != NULL || (pk)->keydata != NULL) +#else +# define evp_pkey_is_assigned(pk) \ + ((pk)->keydata != NULL) +#endif +#define evp_pkey_is_legacy(pk) \ + ((pk)->type != EVP_PKEY_NONE && (pk)->keymgmt == NULL) +#define evp_pkey_is_provided(pk) \ + ((pk)->keymgmt != NULL) + +union legacy_pkey_st { + void *ptr; + struct rsa_st *rsa; /* RSA */ +# ifndef OPENSSL_NO_DSA + struct dsa_st *dsa; /* DSA */ +# endif +# ifndef OPENSSL_NO_DH + struct dh_st *dh; /* DH */ +# endif +# ifndef OPENSSL_NO_EC + struct ec_key_st *ec; /* ECC */ + ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ +# endif +}; + struct evp_pkey_st { + /* == Legacy attributes == */ int type; int save_type; - CRYPTO_REF_COUNT references; + +# ifndef FIPS_MODULE + /* + * Legacy key "origin" is composed of a pointer to an EVP_PKEY_ASN1_METHOD, + * a pointer to a low level key and possibly a pointer to an engine. + */ const EVP_PKEY_ASN1_METHOD *ameth; ENGINE *engine; ENGINE *pmeth_engine; /* If not NULL public key ENGINE to use */ - union { - void *ptr; -# ifndef OPENSSL_NO_RSA - struct rsa_st *rsa; /* RSA */ + + /* Union to store the reference to an origin legacy key */ + union legacy_pkey_st pkey; + + /* Union to store the reference to a non-origin legacy key */ + union legacy_pkey_st legacy_cache_pkey; # endif -# ifndef OPENSSL_NO_DSA - struct dsa_st *dsa; /* DSA */ -# endif -# ifndef OPENSSL_NO_DH - struct dh_st *dh; /* DH */ -# endif -# ifndef OPENSSL_NO_EC - struct ec_key_st *ec; /* ECC */ - ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ -# endif - } pkey; - int save_parameters; - STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ + + /* == Common attributes == */ + CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; +#ifndef FIPS_MODULE + STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ + int save_parameters; + unsigned int foreign:1; /* the low-level key is using an engine or an app-method */ + CRYPTO_EX_DATA ex_data; +#endif + + /* == Provider attributes == */ + + /* + * Provider keydata "origin" is composed of a pointer to an EVP_KEYMGMT + * and a pointer to the provider side key data. This is never used at + * the same time as the legacy key data above. + */ + EVP_KEYMGMT *keymgmt; + void *keydata; + /* + * If any libcrypto code does anything that may modify the keydata + * contents, this dirty counter must be incremented. + */ + size_t dirty_cnt; + + /* + * To support transparent execution of operation in backends other + * than the "origin" key, we support transparent export/import to + * those providers, and maintain a cache of the imported keydata, + * so we don't need to redo the export/import every time we perform + * the same operation in that same provider. + */ + STACK_OF(OP_CACHE_ELEM) *operation_cache; + + /* + * We keep a copy of that "origin"'s dirty count, so we know if the + * operation cache needs flushing. + */ + size_t dirty_cnt_copy; + + /* Cache of key object information */ + struct { + int bits; + int security_bits; + int size; + } cache; } /* EVP_PKEY */ ; +#define EVP_PKEY_CTX_IS_SIGNATURE_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_SIGN \ + || (ctx)->operation == EVP_PKEY_OP_SIGNCTX \ + || (ctx)->operation == EVP_PKEY_OP_VERIFY \ + || (ctx)->operation == EVP_PKEY_OP_VERIFYCTX \ + || (ctx)->operation == EVP_PKEY_OP_VERIFYRECOVER) + +#define EVP_PKEY_CTX_IS_DERIVE_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_DERIVE) + +#define EVP_PKEY_CTX_IS_ASYM_CIPHER_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_ENCRYPT \ + || (ctx)->operation == EVP_PKEY_OP_DECRYPT) + +#define EVP_PKEY_CTX_IS_GEN_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_PARAMGEN \ + || (ctx)->operation == EVP_PKEY_OP_KEYGEN) + +#define EVP_PKEY_CTX_IS_FROMDATA_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_FROMDATA) + +#define EVP_PKEY_CTX_IS_KEM_OP(ctx) \ + ((ctx)->operation == EVP_PKEY_OP_ENCAPSULATE \ + || (ctx)->operation == EVP_PKEY_OP_DECAPSULATE) void openssl_add_all_ciphers_int(void); void openssl_add_all_digests_int(void); void evp_cleanup_int(void); void evp_app_cleanup_int(void); +void *evp_pkey_export_to_provider(EVP_PKEY *pk, OSSL_LIB_CTX *libctx, + EVP_KEYMGMT **keymgmt, + const char *propquery); +#ifndef FIPS_MODULE +int evp_pkey_copy_downgraded(EVP_PKEY **dest, const EVP_PKEY *src); +void *evp_pkey_get_legacy(EVP_PKEY *pk); +void evp_pkey_free_legacy(EVP_PKEY *x); +EVP_PKEY *evp_pkcs82pkey_legacy(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); +#endif + +/* + * KEYMGMT utility functions + */ + +/* + * Key import structure and helper function, to be used as an export callback + */ +struct evp_keymgmt_util_try_import_data_st { + EVP_KEYMGMT *keymgmt; + void *keydata; + + int selection; +}; +int evp_keymgmt_util_try_import(const OSSL_PARAM params[], void *arg); +int evp_keymgmt_util_assign_pkey(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt, + void *keydata); +EVP_PKEY *evp_keymgmt_util_make_pkey(EVP_KEYMGMT *keymgmt, void *keydata); + +int evp_keymgmt_util_export(const EVP_PKEY *pk, int selection, + OSSL_CALLBACK *export_cb, void *export_cbarg); +void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, + int selection); +OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk, + EVP_KEYMGMT *keymgmt, + int selection); +int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk, int locking); +int evp_keymgmt_util_cache_keydata(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, + void *keydata, int selection); +void evp_keymgmt_util_cache_keyinfo(EVP_PKEY *pk); +void *evp_keymgmt_util_fromdata(EVP_PKEY *target, EVP_KEYMGMT *keymgmt, + int selection, const OSSL_PARAM params[]); +int evp_keymgmt_util_has(EVP_PKEY *pk, int selection); +int evp_keymgmt_util_match(EVP_PKEY *pk1, EVP_PKEY *pk2, int selection); +int evp_keymgmt_util_copy(EVP_PKEY *to, EVP_PKEY *from, int selection); +void *evp_keymgmt_util_gen(EVP_PKEY *target, EVP_KEYMGMT *keymgmt, + void *genctx, OSSL_CALLBACK *cb, void *cbarg); +int evp_keymgmt_util_get_deflt_digest_name(EVP_KEYMGMT *keymgmt, + void *keydata, + char *mdname, size_t mdname_sz); +const char *evp_keymgmt_util_query_operation_name(EVP_KEYMGMT *keymgmt, + int op_id); + +/* + * KEYMGMT provider interface functions + */ +void *evp_keymgmt_newdata(const EVP_KEYMGMT *keymgmt); +void evp_keymgmt_freedata(const EVP_KEYMGMT *keymgmt, void *keyddata); +int evp_keymgmt_get_params(const EVP_KEYMGMT *keymgmt, + void *keydata, OSSL_PARAM params[]); +int evp_keymgmt_set_params(const EVP_KEYMGMT *keymgmt, + void *keydata, const OSSL_PARAM params[]); +void *evp_keymgmt_gen_init(const EVP_KEYMGMT *keymgmt, int selection, + const OSSL_PARAM params[]); +int evp_keymgmt_gen_set_template(const EVP_KEYMGMT *keymgmt, void *genctx, + void *template); +int evp_keymgmt_gen_set_params(const EVP_KEYMGMT *keymgmt, void *genctx, + const OSSL_PARAM params[]); +void *evp_keymgmt_gen(const EVP_KEYMGMT *keymgmt, void *genctx, + OSSL_CALLBACK *cb, void *cbarg); +void evp_keymgmt_gen_cleanup(const EVP_KEYMGMT *keymgmt, void *genctx); + +int evp_keymgmt_has_load(const EVP_KEYMGMT *keymgmt); +void *evp_keymgmt_load(const EVP_KEYMGMT *keymgmt, + const void *objref, size_t objref_sz); + +int evp_keymgmt_has(const EVP_KEYMGMT *keymgmt, void *keyddata, int selection); +int evp_keymgmt_validate(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, int checktype); +int evp_keymgmt_match(const EVP_KEYMGMT *keymgmt, + const void *keydata1, const void *keydata2, + int selection); + +int evp_keymgmt_import(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, const OSSL_PARAM params[]); +const OSSL_PARAM *evp_keymgmt_import_types(const EVP_KEYMGMT *keymgmt, + int selection); +int evp_keymgmt_export(const EVP_KEYMGMT *keymgmt, void *keydata, + int selection, OSSL_CALLBACK *param_cb, void *cbarg); +const OSSL_PARAM *evp_keymgmt_export_types(const EVP_KEYMGMT *keymgmt, + int selection); +void *evp_keymgmt_dup(const EVP_KEYMGMT *keymgmt, + const void *keydata_from, int selection); +EVP_KEYMGMT *evp_keymgmt_fetch_from_prov(OSSL_PROVIDER *prov, + const char *name, + const char *properties); /* Pulling defines out of C source files */ -#define EVP_RC4_KEY_SIZE 16 -#ifndef TLS1_1_VERSION -# define TLS1_1_VERSION 0x0302 -#endif +# define EVP_RC4_KEY_SIZE 16 +# ifndef TLS1_1_VERSION +# define TLS1_1_VERSION 0x0302 +# endif void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags); @@ -440,3 +859,96 @@ void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags); #define EVP_ENCODE_CTX_NO_NEWLINES 1 /* Use the SRP base64 alphabet instead of the standard one */ #define EVP_ENCODE_CTX_USE_SRP_ALPHABET 2 + +const EVP_CIPHER *evp_get_cipherbyname_ex(OSSL_LIB_CTX *libctx, + const char *name); +const EVP_MD *evp_get_digestbyname_ex(OSSL_LIB_CTX *libctx, + const char *name); + +int ossl_pkcs5_pbkdf2_hmac_ex(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + const EVP_MD *digest, int keylen, + unsigned char *out, + OSSL_LIB_CTX *libctx, const char *propq); + +# ifndef FIPS_MODULE +/* + * Internal helpers for stricter EVP_PKEY_CTX_{set,get}_params(). + * + * Return 1 on success, 0 or negative for errors. + * + * In particular they return -2 if any of the params is not supported. + * + * They are not available in FIPS_MODULE as they depend on + * - EVP_PKEY_CTX_{get,set}_params() + * - EVP_PKEY_CTX_{gettable,settable}_params() + * + */ +int evp_pkey_ctx_set_params_strict(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); +int evp_pkey_ctx_get_params_strict(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); + +EVP_MD_CTX *evp_md_ctx_new_ex(EVP_PKEY *pkey, const ASN1_OCTET_STRING *id, + OSSL_LIB_CTX *libctx, const char *propq); +int evp_pkey_name2type(const char *name); +const char *evp_pkey_type2name(int type); + +int evp_pkey_ctx_set1_id_prov(EVP_PKEY_CTX *ctx, const void *id, int len); +int evp_pkey_ctx_get1_id_prov(EVP_PKEY_CTX *ctx, void *id); +int evp_pkey_ctx_get1_id_len_prov(EVP_PKEY_CTX *ctx, size_t *id_len); + +int evp_pkey_ctx_use_cached_data(EVP_PKEY_CTX *ctx); +# endif /* !defined(FIPS_MODULE) */ + +int evp_method_store_cache_flush(OSSL_LIB_CTX *libctx); +int evp_method_store_remove_all_provided(const OSSL_PROVIDER *prov); + +int evp_default_properties_enable_fips_int(OSSL_LIB_CTX *libctx, int enable, + int loadconfig); +int evp_set_default_properties_int(OSSL_LIB_CTX *libctx, const char *propq, + int loadconfig, int mirrored); +char *evp_get_global_properties_str(OSSL_LIB_CTX *libctx, int loadconfig); + +void evp_md_ctx_clear_digest(EVP_MD_CTX *ctx, int force, int keep_digest); +/* just free the algctx if set, returns 0 on inconsistent state of ctx */ +int evp_md_ctx_free_algctx(EVP_MD_CTX *ctx); + +/* Three possible states: */ +# define EVP_PKEY_STATE_UNKNOWN 0 +# define EVP_PKEY_STATE_LEGACY 1 +# define EVP_PKEY_STATE_PROVIDER 2 +int evp_pkey_ctx_state(const EVP_PKEY_CTX *ctx); + +/* These two must ONLY be called for provider side operations */ +int evp_pkey_ctx_ctrl_to_param(EVP_PKEY_CTX *ctx, + int keytype, int optype, + int cmd, int p1, void *p2); +int evp_pkey_ctx_ctrl_str_to_param(EVP_PKEY_CTX *ctx, + const char *name, const char *value); + +/* These two must ONLY be called for legacy operations */ +int evp_pkey_ctx_set_params_to_ctrl(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params); +int evp_pkey_ctx_get_params_to_ctrl(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); + +/* This must ONLY be called for legacy EVP_PKEYs */ +int evp_pkey_get_params_to_ctrl(const EVP_PKEY *pkey, OSSL_PARAM *params); + +/* Same as the public get0 functions but are not const */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DH *evp_pkey_get0_DH_int(const EVP_PKEY *pkey); +EC_KEY *evp_pkey_get0_EC_KEY_int(const EVP_PKEY *pkey); +RSA *evp_pkey_get0_RSA_int(const EVP_PKEY *pkey); +# endif + +/* Get internal identification number routines */ +int evp_asym_cipher_get_number(const EVP_ASYM_CIPHER *cipher); +int evp_cipher_get_number(const EVP_CIPHER *cipher); +int evp_kdf_get_number(const EVP_KDF *kdf); +int evp_kem_get_number(const EVP_KEM *wrap); +int evp_keyexch_get_number(const EVP_KEYEXCH *keyexch); +int evp_keymgmt_get_number(const EVP_KEYMGMT *keymgmt); +int evp_mac_get_number(const EVP_MAC *mac); +int evp_md_get_number(const EVP_MD *md); +int evp_rand_get_number(const EVP_RAND *rand); +int evp_signature_get_number(const EVP_SIGNATURE *signature); + +#endif /* OSSL_CRYPTO_EVP_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/evperr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/evperr.h new file mode 100644 index 00000000..d90ba83f --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/evperr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_EVPERR_H +# define OSSL_CRYPTO_EVPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_EVP_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/httperr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/httperr.h new file mode 100644 index 00000000..969df17b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/httperr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_HTTPERR_H +# define OSSL_CRYPTO_HTTPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_HTTP_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/lhash.h b/deps/openssl/android/x86_64/usr/local/include/crypto/lhash.h index ab060cce..0f64869f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/lhash.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/lhash.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,7 +9,8 @@ #ifndef OSSL_CRYPTO_LHASH_H # define OSSL_CRYPTO_LHASH_H +# pragma once -unsigned long openssl_lh_strcasehash(const char *); +unsigned long ossl_lh_strcasehash(const char *); -#endif +#endif /* OSSL_CRYPTO_LHASH_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/md32_common.h b/deps/openssl/android/x86_64/usr/local/include/crypto/md32_common.h index 1124e9c2..966e2684 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/md32_common.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/md32_common.h @@ -1,7 +1,7 @@ /* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -95,6 +95,28 @@ #define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n)))) +#ifndef PEDANTIC +# if defined(__GNUC__) && __GNUC__>=2 && \ + !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) +# if defined(__riscv_zbb) || defined(__riscv_zbkb) +# if __riscv_xlen == 64 +# undef ROTATE +# define ROTATE(x, n) ({ MD32_REG_T ret; \ + asm ("roriw %0, %1, %2" \ + : "=r"(ret) \ + : "r"(x), "i"(32 - (n))); ret;}) +# endif +# if __riscv_xlen == 32 +# undef ROTATE +# define ROTATE(x, n) ({ MD32_REG_T ret; \ + asm ("rori %0, %1, %2" \ + : "=r"(ret) \ + : "r"(x), "i"(32 - (n))); ret;}) +# endif +# endif +# endif +#endif + #if defined(DATA_ORDER_IS_BIG_ENDIAN) # define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/modes.h b/deps/openssl/android/x86_64/usr/local/include/crypto/modes.h new file mode 100644 index 00000000..573e1197 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/modes.h @@ -0,0 +1,224 @@ +/* + * Copyright 2010-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* This header can move into provider when legacy support is removed */ +#include + +#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +typedef __int64 i64; +typedef unsigned __int64 u64; +# define U64(C) C##UI64 +#elif defined(__arch64__) +typedef long i64; +typedef unsigned long u64; +# define U64(C) C##UL +#else +typedef long long i64; +typedef unsigned long long u64; +# define U64(C) C##ULL +#endif + +typedef unsigned int u32; +typedef unsigned char u8; + +#define STRICT_ALIGNMENT 1 +#ifndef PEDANTIC +# if defined(__i386) || defined(__i386__) || \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \ + defined(__aarch64__) || \ + defined(__s390__) || defined(__s390x__) +# undef STRICT_ALIGNMENT +# endif +#endif + +#if !defined(PEDANTIC) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) +# if defined(__GNUC__) && __GNUC__>=2 +# if defined(__x86_64) || defined(__x86_64__) +# define BSWAP8(x) ({ u64 ret_=(x); \ + asm ("bswapq %0" \ + : "+r"(ret_)); ret_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("bswapl %0" \ + : "+r"(ret_)); ret_; }) +# elif (defined(__i386) || defined(__i386__)) && !defined(I386_ONLY) +# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \ + asm ("bswapl %0; bswapl %1" \ + : "+r"(hi_),"+r"(lo_)); \ + (u64)hi_<<32|lo_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("bswapl %0" \ + : "+r"(ret_)); ret_; }) +# elif defined(__aarch64__) +# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \ + __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ +# define BSWAP8(x) ({ u64 ret_; \ + asm ("rev %0,%1" \ + : "=r"(ret_) : "r"(x)); ret_; }) +# define BSWAP4(x) ({ u32 ret_; \ + asm ("rev %w0,%w1" \ + : "=r"(ret_) : "r"(x)); ret_; }) +# endif +# elif (defined(__arm__) || defined(__arm)) && !defined(STRICT_ALIGNMENT) +# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \ + asm ("rev %0,%0; rev %1,%1" \ + : "+r"(hi_),"+r"(lo_)); \ + (u64)hi_<<32|lo_; }) +# define BSWAP4(x) ({ u32 ret_; \ + asm ("rev %0,%1" \ + : "=r"(ret_) : "r"((u32)(x))); \ + ret_; }) +# elif (defined(__riscv_zbb) || defined(__riscv_zbkb)) && __riscv_xlen == 64 +# define BSWAP8(x) ({ u64 ret_=(x); \ + asm ("rev8 %0,%0" \ + : "+r"(ret_)); ret_; }) +# define BSWAP4(x) ({ u32 ret_=(x); \ + asm ("rev8 %0,%0; srli %0,%0,32"\ + : "+&r"(ret_)); ret_; }) +# endif +# elif defined(_MSC_VER) +# if _MSC_VER>=1300 +# include +# pragma intrinsic(_byteswap_uint64,_byteswap_ulong) +# define BSWAP8(x) _byteswap_uint64((u64)(x)) +# define BSWAP4(x) _byteswap_ulong((u32)(x)) +# elif defined(_M_IX86) +__inline u32 _bswap4(u32 val) +{ +_asm mov eax, val _asm bswap eax} +# define BSWAP4(x) _bswap4(x) +# endif +# endif +#endif +#if defined(BSWAP4) && !defined(STRICT_ALIGNMENT) +# define GETU32(p) BSWAP4(*(const u32 *)(p)) +# define PUTU32(p,v) *(u32 *)(p) = BSWAP4(v) +#else +# define GETU32(p) ((u32)(p)[0]<<24|(u32)(p)[1]<<16|(u32)(p)[2]<<8|(u32)(p)[3]) +# define PUTU32(p,v) ((p)[0]=(u8)((v)>>24),(p)[1]=(u8)((v)>>16),(p)[2]=(u8)((v)>>8),(p)[3]=(u8)(v)) +#endif +/*- GCM definitions */ typedef struct { + u64 hi, lo; +} u128; + +typedef void (*gcm_init_fn)(u128 Htable[16], const u64 H[2]); +typedef void (*gcm_ghash_fn)(u64 Xi[2], const u128 Htable[16], const u8 *inp, size_t len); +typedef void (*gcm_gmult_fn)(u64 Xi[2], const u128 Htable[16]); +struct gcm_funcs_st { + gcm_init_fn ginit; + gcm_ghash_fn ghash; + gcm_gmult_fn gmult; +}; + +struct gcm128_context { + /* Following 6 names follow names in GCM specification */ + union { + u64 u[2]; + u32 d[4]; + u8 c[16]; + size_t t[16 / sizeof(size_t)]; + } Yi, EKi, EK0, len, Xi, H; + /* + * Relative position of Yi, EKi, EK0, len, Xi, H and pre-computed Htable is + * used in some assembler modules, i.e. don't change the order! + */ + u128 Htable[16]; + struct gcm_funcs_st funcs; + unsigned int mres, ares; + block128_f block; + void *key; +#if !defined(OPENSSL_SMALL_FOOTPRINT) + unsigned char Xn[48]; +#endif +}; + +/* + * The maximum permitted number of cipher blocks per data unit in XTS mode. + * Reference IEEE Std 1619-2018. + */ +#define XTS_MAX_BLOCKS_PER_DATA_UNIT (1<<20) + +struct xts128_context { + void *key1, *key2; + block128_f block1, block2; +}; + +struct ccm128_context { + union { + u64 u[2]; + u8 c[16]; + } nonce, cmac; + u64 blocks; + block128_f block; + void *key; +}; + +#ifndef OPENSSL_NO_OCB + +typedef union { + u64 a[2]; + unsigned char c[16]; +} OCB_BLOCK; +# define ocb_block16_xor(in1,in2,out) \ + ( (out)->a[0]=(in1)->a[0]^(in2)->a[0], \ + (out)->a[1]=(in1)->a[1]^(in2)->a[1] ) +# if STRICT_ALIGNMENT +# define ocb_block16_xor_misaligned(in1,in2,out) \ + ocb_block_xor((in1)->c,(in2)->c,16,(out)->c) +# else +# define ocb_block16_xor_misaligned ocb_block16_xor +# endif + +struct ocb128_context { + /* Need both encrypt and decrypt key schedules for decryption */ + block128_f encrypt; + block128_f decrypt; + void *keyenc; + void *keydec; + ocb128_f stream; /* direction dependent */ + /* Key dependent variables. Can be reused if key remains the same */ + size_t l_index; + size_t max_l_index; + OCB_BLOCK l_star; + OCB_BLOCK l_dollar; + OCB_BLOCK *l; + /* Must be reset for each session */ + struct { + u64 blocks_hashed; + u64 blocks_processed; + OCB_BLOCK offset_aad; + OCB_BLOCK sum; + OCB_BLOCK offset; + OCB_BLOCK checksum; + } sess; +}; +#endif /* OPENSSL_NO_OCB */ + +#ifndef OPENSSL_NO_SIV + +#define SIV_LEN 16 + +typedef union siv_block_u { + uint64_t word[SIV_LEN/sizeof(uint64_t)]; + unsigned char byte[SIV_LEN]; +} SIV_BLOCK; + +struct siv128_context { + /* d stores intermediate results of S2V; it corresponds to D from the + pseudocode in section 2.4 of RFC 5297. */ + SIV_BLOCK d; + SIV_BLOCK tag; + EVP_CIPHER_CTX *cipher_ctx; + EVP_MAC *mac; + EVP_MAC_CTX *mac_ctx_init; + int final_ret; + int crypto_ok; +}; + +#endif /* OPENSSL_NO_SIV */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/objects.h b/deps/openssl/android/x86_64/usr/local/include/crypto/objects.h index 76e1b4d9..f22e9287 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/objects.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/objects.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,4 +9,4 @@ #include -void obj_cleanup_int(void); +void ossl_obj_cleanup_int(void); diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/objectserr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/objectserr.h new file mode 100644 index 00000000..ec994824 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/objectserr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_OBJECTSERR_H +# define OSSL_CRYPTO_OBJECTSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OBJ_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/ocsperr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/ocsperr.h new file mode 100644 index 00000000..f9529b2a --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/ocsperr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_OCSPERR_H +# define OSSL_CRYPTO_OCSPERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_OCSP + +int ossl_err_load_OCSP_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/pem.h b/deps/openssl/android/x86_64/usr/local/include/crypto/pem.h new file mode 100644 index 00000000..2cb4253d --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/pem.h @@ -0,0 +1,51 @@ +/* + * Copyright 2018-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PEM_H +# define OSSL_INTERNAL_PEM_H +# pragma once + +# include +# include "crypto/types.h" + +/* Found in crypto/pem/pvkfmt.c */ + +/* Maximum length of a blob after header */ +# define BLOB_MAX_LENGTH 102400 + +int ossl_do_blob_header(const unsigned char **in, unsigned int length, + unsigned int *pmagic, unsigned int *pbitlen, + int *pisdss, int *pispub); +unsigned int ossl_blob_length(unsigned bitlen, int isdss, int ispub); +int ossl_do_PVK_header(const unsigned char **in, unsigned int length, + int skip_magic, + unsigned int *psaltlen, unsigned int *pkeylen); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DSA *ossl_b2i_DSA_after_header(const unsigned char **in, unsigned int bitlen, + int ispub); +# endif +RSA *ossl_b2i_RSA_after_header(const unsigned char **in, unsigned int bitlen, + int ispub); +# endif +EVP_PKEY *ossl_b2i(const unsigned char **in, unsigned int length, int *ispub); +EVP_PKEY *ossl_b2i_bio(BIO *in, int *ispub); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DSA *b2i_DSA_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +DSA *b2i_DSA_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +# endif +RSA *b2i_RSA_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +RSA *b2i_RSA_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/pemerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/pemerr.h new file mode 100644 index 00000000..b255ff5c --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/pemerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PEMERR_H +# define OSSL_CRYPTO_PEMERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PEM_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs12err.h b/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs12err.h new file mode 100644 index 00000000..662f412e --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs12err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS12ERR_H +# define OSSL_CRYPTO_PKCS12ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PKCS12_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs7.h b/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs7.h new file mode 100644 index 00000000..9caa9af4 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs7.h @@ -0,0 +1,19 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS7_H +# define OSSL_CRYPTO_PKCS7_H +# pragma once + +void ossl_pkcs7_resolve_libctx(PKCS7 *p7); + +void ossl_pkcs7_set0_libctx(PKCS7 *p7, OSSL_LIB_CTX *ctx); +int ossl_pkcs7_set1_propq(PKCS7 *p7, const char *propq); + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs7err.h b/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs7err.h new file mode 100644 index 00000000..c195190b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs7err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PKCS7ERR_H +# define OSSL_CRYPTO_PKCS7ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PKCS7_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/poly1305.h b/deps/openssl/android/x86_64/usr/local/include/crypto/poly1305.h index 5fef239d..ba54f3bd 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/poly1305.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/poly1305.h @@ -1,12 +1,16 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OSSL_CRYPTO_POLY1305_H +# define OSSL_CRYPTO_POLY1305_H +# pragma once + #include #define POLY1305_BLOCK_SIZE 16 @@ -15,7 +19,28 @@ typedef struct poly1305_context POLY1305; +typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp, + size_t len, unsigned int padbit); +typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16], + const unsigned int nonce[4]); + +struct poly1305_context { + double opaque[24]; /* large enough to hold internal state, declared + * 'double' to ensure at least 64-bit invariant + * alignment across all platforms and + * configurations */ + unsigned int nonce[4]; + unsigned char data[POLY1305_BLOCK_SIZE]; + size_t num; + struct { + poly1305_blocks_f blocks; + poly1305_emit_f emit; + } func; +}; + size_t Poly1305_ctx_size(void); void Poly1305_Init(POLY1305 *ctx, const unsigned char key[32]); void Poly1305_Update(POLY1305 *ctx, const unsigned char *inp, size_t len); void Poly1305_Final(POLY1305 *ctx, unsigned char mac[16]); + +#endif /* OSSL_CRYPTO_POLY1305_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/ppc_arch.h b/deps/openssl/android/x86_64/usr/local/include/crypto/ppc_arch.h new file mode 100644 index 00000000..d999396a --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/ppc_arch.h @@ -0,0 +1,29 @@ +/* + * Copyright 2014-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PPC_ARCH_H +# define OSSL_CRYPTO_PPC_ARCH_H + +extern unsigned int OPENSSL_ppccap_P; + +/* + * Flags' usage can appear ambiguous, because they are set rather + * to reflect OpenSSL performance preferences than actual processor + * capabilities. + */ +# define PPC_FPU64 (1<<0) +# define PPC_ALTIVEC (1<<1) +# define PPC_CRYPTO207 (1<<2) +# define PPC_FPU (1<<3) +# define PPC_MADD300 (1<<4) +# define PPC_MFTB (1<<5) +# define PPC_MFSPR268 (1<<6) +# define PPC_BRD31 (1<<7) + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/punycode.h b/deps/openssl/android/x86_64/usr/local/include/crypto/punycode.h new file mode 100644 index 00000000..4c6e49f5 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/punycode.h @@ -0,0 +1,27 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_PUNYCODE_H +# define OSSL_CRYPTO_PUNYCODE_H +# pragma once + +# include /* for size_t */ + +int ossl_punycode_decode ( + const char *pEncoded, + const size_t enc_len, + unsigned int *pDecoded, + unsigned int *pout_length +); + +int ossl_a2ulabel(const char *in, char *out, size_t outlen); + +int ossl_a2ucompare(const char *a, const char *u); + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/rand.h b/deps/openssl/android/x86_64/usr/local/include/crypto/rand.h index 9e02bb0e..6a71a339 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/rand.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/rand.h @@ -1,14 +1,14 @@ /* - * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ /* - * Licensed under the OpenSSL licenses, (the "License"); + * Licensed under the Apache License 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * https://www.openssl.org/source/license.html @@ -17,8 +17,10 @@ #ifndef OSSL_CRYPTO_RAND_H # define OSSL_CRYPTO_RAND_H +# pragma once # include +# include "crypto/rand_pool.h" # if defined(__APPLE__) && !defined(OPENSSL_NO_APPLE_CRYPTO_RANDOM) # include @@ -30,115 +32,97 @@ # endif # endif -/* forward declaration */ -typedef struct rand_pool_st RAND_POOL; - -void rand_cleanup_int(void); -void rand_drbg_cleanup_int(void); -void drbg_delete_thread_state(void); - -/* Hardware-based seeding functions. */ -size_t rand_acquire_entropy_from_tsc(RAND_POOL *pool); -size_t rand_acquire_entropy_from_cpu(RAND_POOL *pool); - -/* DRBG entropy callbacks. */ -size_t rand_drbg_get_entropy(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, size_t max_len, - int prediction_resistance); -void rand_drbg_cleanup_entropy(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); -size_t rand_drbg_get_nonce(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, size_t max_len); -void rand_drbg_cleanup_nonce(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); - -size_t rand_drbg_get_additional_data(RAND_POOL *pool, unsigned char **pout); - -void rand_drbg_cleanup_additional_data(RAND_POOL *pool, unsigned char *out); - /* - * RAND_POOL functions + * Defines related to seed sources */ -RAND_POOL *rand_pool_new(int entropy_requested, int secure, - size_t min_len, size_t max_len); -RAND_POOL *rand_pool_attach(const unsigned char *buffer, size_t len, - size_t entropy); -void rand_pool_free(RAND_POOL *pool); - -const unsigned char *rand_pool_buffer(RAND_POOL *pool); -unsigned char *rand_pool_detach(RAND_POOL *pool); -void rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer); - -size_t rand_pool_entropy(RAND_POOL *pool); -size_t rand_pool_length(RAND_POOL *pool); - -size_t rand_pool_entropy_available(RAND_POOL *pool); -size_t rand_pool_entropy_needed(RAND_POOL *pool); -/* |entropy_factor| expresses how many bits of data contain 1 bit of entropy */ -size_t rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor); -size_t rand_pool_bytes_remaining(RAND_POOL *pool); - -int rand_pool_add(RAND_POOL *pool, - const unsigned char *buffer, size_t len, size_t entropy); -unsigned char *rand_pool_add_begin(RAND_POOL *pool, size_t len); -int rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy); - - +#ifndef DEVRANDOM /* - * Add random bytes to the pool to acquire requested amount of entropy - * - * This function is platform specific and tries to acquire the requested - * amount of entropy by polling platform specific entropy sources. - * - * If the function succeeds in acquiring at least |entropy_requested| bits - * of entropy, the total entropy count is returned. If it fails, it returns - * an entropy count of 0. + * set this to a comma-separated list of 'random' device files to try out. By + * default, we will try to read at least one of these files */ -size_t rand_pool_acquire_entropy(RAND_POOL *pool); - +# define DEVRANDOM "/dev/urandom", "/dev/random", "/dev/hwrng", "/dev/srandom" +# if defined(__linux) && !defined(__ANDROID__) +# ifndef DEVRANDOM_WAIT +# define DEVRANDOM_WAIT "/dev/random" +# endif /* - * Add some application specific nonce data - * - * This function is platform specific and adds some application specific - * data to the nonce used for instantiating the drbg. - * - * This data currently consists of the process and thread id, and a high - * resolution timestamp. The data does not include an atomic counter, - * because that is added by the calling function rand_drbg_get_nonce(). - * - * Returns 1 on success and 0 on failure. + * Linux kernels 4.8 and later changes how their random device works and there + * is no reliable way to tell that /dev/urandom has been seeded -- getentropy(2) + * should be used instead. */ -int rand_pool_add_nonce_data(RAND_POOL *pool); - - +# ifndef DEVRANDOM_SAFE_KERNEL +# define DEVRANDOM_SAFE_KERNEL 4, 8 +# endif /* - * Add some platform specific additional data - * - * This function is platform specific and adds some random noise to the - * additional data used for generating random bytes and for reseeding - * the drbg. - * - * Returns 1 on success and 0 on failure. + * Some operating systems do not permit select(2) on their random devices, + * defining this to zero will force the use of read(2) to extract one byte + * from /dev/random. */ -int rand_pool_add_additional_data(RAND_POOL *pool); +# ifndef DEVRANDM_WAIT_USE_SELECT +# define DEVRANDM_WAIT_USE_SELECT 1 +# endif +/* + * Define the shared memory identifier used to indicate if the operating + * system has properly seeded the DEVRANDOM source. + */ +# ifndef OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID +# define OPENSSL_RAND_SEED_DEVRANDOM_SHM_ID 114 +# endif + +# endif +#endif + +#if !defined(OPENSSL_NO_EGD) && !defined(DEVRANDOM_EGD) +/* + * set this to a comma-separated list of 'egd' sockets to try out. These + * sockets will be tried in the order listed in case accessing the device + * files listed in DEVRANDOM did not return enough randomness. + */ +# define DEVRANDOM_EGD "/var/run/egd-pool", "/dev/egd-pool", "/etc/egd-pool", "/etc/entropy" +#endif + +void ossl_rand_cleanup_int(void); /* * Initialise the random pool reseeding sources. * * Returns 1 on success and 0 on failure. */ -int rand_pool_init(void); +int ossl_rand_pool_init(void); /* * Finalise the random pool reseeding sources. */ -void rand_pool_cleanup(void); +void ossl_rand_pool_cleanup(void); /* * Control the random pool use of open file descriptors. */ -void rand_pool_keep_random_devices_open(int keep); +void ossl_rand_pool_keep_random_devices_open(int keep); + +/* + * Configuration + */ +void ossl_random_add_conf_module(void); + +/* + * Get and cleanup random seed material. + */ +size_t ossl_rand_get_entropy(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char **pout, int entropy, + size_t min_len, size_t max_len); +void ossl_rand_cleanup_entropy(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len); +size_t ossl_rand_get_nonce(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char **pout, size_t min_len, size_t max_len, + const void *salt, size_t salt_len); +void ossl_rand_cleanup_nonce(ossl_unused const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len); + +/* + * Get seeding material from the operating system sources. + */ +size_t ossl_pool_acquire_entropy(RAND_POOL *pool); +int ossl_pool_add_nonce_data(RAND_POOL *pool); #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/rand_pool.h b/deps/openssl/android/x86_64/usr/local/include/crypto/rand_pool.h new file mode 100644 index 00000000..f4d1d954 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/rand_pool.h @@ -0,0 +1,109 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_PROVIDER_RAND_POOL_H +# define OSSL_PROVIDER_RAND_POOL_H +# pragma once + +# include +# include + +/* + * Maximum allocation size for RANDOM_POOL buffers + * + * The max_len value for the buffer provided to the rand_drbg_get_entropy() + * callback is currently 2^31 bytes (2 gigabytes), if a derivation function + * is used. Since this is much too large to be allocated, the ossl_rand_pool_new() + * function chooses more modest values as default pool length, bounded + * by RAND_POOL_MIN_LENGTH and RAND_POOL_MAX_LENGTH + * + * The choice of the RAND_POOL_FACTOR is large enough such that the + * RAND_POOL can store a random input which has a lousy entropy rate of + * 8/256 (= 0.03125) bits per byte. This input will be sent through the + * derivation function which 'compresses' the low quality input into a + * high quality output. + * + * The factor 1.5 below is the pessimistic estimate for the extra amount + * of entropy required when no get_nonce() callback is defined. + */ +# define RAND_POOL_FACTOR 256 +# define RAND_POOL_MAX_LENGTH (RAND_POOL_FACTOR * \ + 3 * (RAND_DRBG_STRENGTH / 16)) +/* + * = (RAND_POOL_FACTOR * \ + * 1.5 * (RAND_DRBG_STRENGTH / 8)) + */ + +/* + * Initial allocation minimum. + * + * There is a distinction between the secure and normal allocation minimums. + * Ideally, the secure allocation size should be a power of two. The normal + * allocation size doesn't have any such restriction. + * + * The secure value is based on 128 bits of secure material, which is 16 bytes. + * Typically, the DRBGs will set a minimum larger than this so optimal + * allocation ought to take place (for full quality seed material). + * + * The normal value has been chosen by noticing that the rand_drbg_get_nonce + * function is usually the largest of the built in allocation (twenty four + * bytes and then appending another sixteen bytes). This means the buffer ends + * with 40 bytes. The value of forty eight is comfortably above this which + * allows some slack in the platform specific values used. + */ +# define RAND_POOL_MIN_ALLOCATION(secure) ((secure) ? 16 : 48) + +/* + * The 'random pool' acts as a dumb container for collecting random + * input from various entropy sources. It is the callers duty to 1) initialize + * the random pool, 2) pass it to the polling callbacks, 3) seed the RNG, and + * 4) cleanup the random pool again. + * + * The random pool contains no locking mechanism because its scope and + * lifetime is intended to be restricted to a single stack frame. + */ +typedef struct rand_pool_st { + unsigned char *buffer; /* points to the beginning of the random pool */ + size_t len; /* current number of random bytes contained in the pool */ + + int attached; /* true pool was attached to existing buffer */ + int secure; /* 1: allocated on the secure heap, 0: otherwise */ + + size_t min_len; /* minimum number of random bytes requested */ + size_t max_len; /* maximum number of random bytes (allocated buffer size) */ + size_t alloc_len; /* current number of bytes allocated */ + size_t entropy; /* current entropy count in bits */ + size_t entropy_requested; /* requested entropy count in bits */ +} RAND_POOL; + +RAND_POOL *ossl_rand_pool_new(int entropy_requested, int secure, + size_t min_len, size_t max_len); +RAND_POOL *ossl_rand_pool_attach(const unsigned char *buffer, size_t len, + size_t entropy); +void ossl_rand_pool_free(RAND_POOL *pool); + +const unsigned char *ossl_rand_pool_buffer(RAND_POOL *pool); +unsigned char *ossl_rand_pool_detach(RAND_POOL *pool); +void ossl_rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer); + +size_t ossl_rand_pool_entropy(RAND_POOL *pool); +size_t ossl_rand_pool_length(RAND_POOL *pool); + +size_t ossl_rand_pool_entropy_available(RAND_POOL *pool); +size_t ossl_rand_pool_entropy_needed(RAND_POOL *pool); +/* |entropy_factor| expresses how many bits of data contain 1 bit of entropy */ +size_t ossl_rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor); +size_t ossl_rand_pool_bytes_remaining(RAND_POOL *pool); + +int ossl_rand_pool_add(RAND_POOL *pool, + const unsigned char *buffer, size_t len, size_t entropy); +unsigned char *ossl_rand_pool_add_begin(RAND_POOL *pool, size_t len); +int ossl_rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy); + +#endif /* OSSL_PROVIDER_RAND_POOL_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/randerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/randerr.h new file mode 100644 index 00000000..832a8b7d --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/randerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RANDERR_H +# define OSSL_CRYPTO_RANDERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_RAND_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.def b/deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.def new file mode 100644 index 00000000..6c26dbf4 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.def @@ -0,0 +1,43 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* X Macro Definitions for Specification of RISC-V Arch Capabilities */ + +/* + * Each RISC-V capability ends up encoded as a single set bit in an array of + * words. When specifying a new capability, write a new RISCV_DEFINE_CAP + * statement, with an argument as the extension name in all-caps, + * second argument as the index in the array where the capability will be stored + * and third argument as the index of the bit to be used to encode the + * capability. + * RISCV_DEFINE_CAP(EXTENSION NAME, array index, bit index) */ + +RISCV_DEFINE_CAP(ZBA, 0, 0) +RISCV_DEFINE_CAP(ZBB, 0, 1) +RISCV_DEFINE_CAP(ZBC, 0, 2) +RISCV_DEFINE_CAP(ZBS, 0, 3) +RISCV_DEFINE_CAP(ZBKB, 0, 4) +RISCV_DEFINE_CAP(ZBKC, 0, 5) +RISCV_DEFINE_CAP(ZBKX, 0, 6) +RISCV_DEFINE_CAP(ZKND, 0, 7) +RISCV_DEFINE_CAP(ZKNE, 0, 8) +RISCV_DEFINE_CAP(ZKNH, 0, 9) +RISCV_DEFINE_CAP(ZKSED, 0, 10) +RISCV_DEFINE_CAP(ZKSH, 0, 11) +RISCV_DEFINE_CAP(ZKR, 0, 12) +RISCV_DEFINE_CAP(ZKT, 0, 13) + +/* + * In the future ... + * RISCV_DEFINE_CAP(ZFOO, 0, 31) + * RISCV_DEFINE_CAP(ZBAR, 1, 0) + * ... and so on. + */ + +#undef RISCV_DEFINE_CAP diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.h b/deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.h new file mode 100644 index 00000000..89a40bea --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.h @@ -0,0 +1,59 @@ +/* + * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RISCV_ARCH_H +# define OSSL_CRYPTO_RISCV_ARCH_H + +# include +# include + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +extern uint32_t OPENSSL_riscvcap_P[ (( +# include "riscv_arch.def" +) + sizeof(uint32_t) - 1) / sizeof(uint32_t) ]; + +# ifdef OPENSSL_RISCVCAP_IMPL +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +uint32_t OPENSSL_riscvcap_P[ (( +# include "riscv_arch.def" +) + sizeof(uint32_t) - 1) / sizeof(uint32_t) ]; +# endif + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) \ + static inline int RISCV_HAS_##NAME(void) \ + { \ + return (OPENSSL_riscvcap_P[INDEX] & (1 << BIT_INDEX)) != 0; \ + } +# include "riscv_arch.def" + +struct RISCV_capability_s { + const char *name; + size_t index; + size_t bit_offset; +}; + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +extern const struct RISCV_capability_s RISCV_capabilities[ +# include "riscv_arch.def" +]; + +# ifdef OPENSSL_RISCVCAP_IMPL +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) \ + { #NAME, INDEX, BIT_INDEX }, +const struct RISCV_capability_s RISCV_capabilities[] = { +# include "riscv_arch.def" +}; +# endif + +# define RISCV_DEFINE_CAP(NAME, INDEX, BIT_INDEX) +1 +static const size_t kRISCVNumCaps = +# include "riscv_arch.def" +; + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/rsa.h b/deps/openssl/android/x86_64/usr/local/include/crypto/rsa.h new file mode 100644 index 00000000..949873d0 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/rsa.h @@ -0,0 +1,130 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_RSA_H +# define OSSL_INTERNAL_RSA_H +# pragma once + +# include +# include +# include "crypto/types.h" + +#define RSA_MIN_MODULUS_BITS 512 + +typedef struct rsa_pss_params_30_st { + int hash_algorithm_nid; + struct { + int algorithm_nid; /* Currently always NID_mgf1 */ + int hash_algorithm_nid; + } mask_gen; + int salt_len; + int trailer_field; +} RSA_PSS_PARAMS_30; + +RSA_PSS_PARAMS_30 *ossl_rsa_get0_pss_params_30(RSA *r); +int ossl_rsa_pss_params_30_set_defaults(RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_copy(RSA_PSS_PARAMS_30 *to, + const RSA_PSS_PARAMS_30 *from); +int ossl_rsa_pss_params_30_is_unrestricted(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_set_hashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int hashalg_nid); +int ossl_rsa_pss_params_30_set_maskgenalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int maskgenalg_nid); +int ossl_rsa_pss_params_30_set_maskgenhashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, + int maskgenhashalg_nid); +int ossl_rsa_pss_params_30_set_saltlen(RSA_PSS_PARAMS_30 *rsa_pss_params, + int saltlen); +int ossl_rsa_pss_params_30_set_trailerfield(RSA_PSS_PARAMS_30 *rsa_pss_params, + int trailerfield); +int ossl_rsa_pss_params_30_hashalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_maskgenalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_maskgenhashalg(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_saltlen(const RSA_PSS_PARAMS_30 *rsa_pss_params); +int ossl_rsa_pss_params_30_trailerfield(const RSA_PSS_PARAMS_30 *rsa_pss_params); + +const char *ossl_rsa_mgf_nid2name(int mgf); +int ossl_rsa_oaeppss_md2nid(const EVP_MD *md); +const char *ossl_rsa_oaeppss_nid2name(int md); + +RSA *ossl_rsa_new_with_ctx(OSSL_LIB_CTX *libctx); +OSSL_LIB_CTX *ossl_rsa_get0_libctx(RSA *r); +void ossl_rsa_set0_libctx(RSA *r, OSSL_LIB_CTX *libctx); + +int ossl_rsa_set0_all_params(RSA *r, const STACK_OF(BIGNUM) *primes, + const STACK_OF(BIGNUM) *exps, + const STACK_OF(BIGNUM) *coeffs); +int ossl_rsa_get0_all_params(RSA *r, STACK_OF(BIGNUM_const) *primes, + STACK_OF(BIGNUM_const) *exps, + STACK_OF(BIGNUM_const) *coeffs); +int ossl_rsa_is_foreign(const RSA *rsa); +RSA *ossl_rsa_dup(const RSA *rsa, int selection); + +int ossl_rsa_todata(RSA *rsa, OSSL_PARAM_BLD *bld, OSSL_PARAM params[], + int include_private); +int ossl_rsa_fromdata(RSA *rsa, const OSSL_PARAM params[], int include_private); +int ossl_rsa_pss_params_30_todata(const RSA_PSS_PARAMS_30 *pss, + OSSL_PARAM_BLD *bld, OSSL_PARAM params[]); +int ossl_rsa_pss_params_30_fromdata(RSA_PSS_PARAMS_30 *pss_params, + int *defaults_set, + const OSSL_PARAM params[], + OSSL_LIB_CTX *libctx); +int ossl_rsa_set0_pss_params(RSA *r, RSA_PSS_PARAMS *pss); +int ossl_rsa_pss_get_param_unverified(const RSA_PSS_PARAMS *pss, + const EVP_MD **pmd, const EVP_MD **pmgf1md, + int *psaltlen, int *ptrailerField); +RSA_PSS_PARAMS *ossl_rsa_pss_decode(const X509_ALGOR *alg); +int ossl_rsa_param_decode(RSA *rsa, const X509_ALGOR *alg); +RSA *ossl_rsa_key_from_pkcs8(const PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *libctx, const char *propq); + +int ossl_rsa_padding_check_PKCS1_type_2_TLS(OSSL_LIB_CTX *ctx, unsigned char *to, + size_t tlen, + const unsigned char *from, + size_t flen, int client_version, + int alt_version); +int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx, + unsigned char *to, int tlen, + const unsigned char *from, int flen, + const unsigned char *param, + int plen, const EVP_MD *md, + const EVP_MD *mgf1md); + +int ossl_rsa_validate_public(const RSA *key); +int ossl_rsa_validate_private(const RSA *key); +int ossl_rsa_validate_pairwise(const RSA *key); + +int ossl_rsa_verify(int dtype, const unsigned char *m, + unsigned int m_len, unsigned char *rm, + size_t *prm_len, const unsigned char *sigbuf, + size_t siglen, RSA *rsa); + +const unsigned char *ossl_rsa_digestinfo_encoding(int md_nid, size_t *len); + +extern const char *ossl_rsa_mp_factor_names[]; +extern const char *ossl_rsa_mp_exp_names[]; +extern const char *ossl_rsa_mp_coeff_names[]; + +ASN1_STRING *ossl_rsa_ctx_to_pss_string(EVP_PKEY_CTX *pkctx); +int ossl_rsa_pss_to_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pkctx, + const X509_ALGOR *sigalg, EVP_PKEY *pkey); + +# if defined(FIPS_MODULE) && !defined(OPENSSL_NO_ACVP_TESTS) +int ossl_rsa_acvp_test_gen_params_new(OSSL_PARAM **dst, const OSSL_PARAM src[]); +void ossl_rsa_acvp_test_gen_params_free(OSSL_PARAM *dst); + +int ossl_rsa_acvp_test_set_params(RSA *r, const OSSL_PARAM params[]); +int ossl_rsa_acvp_test_get_params(RSA *r, OSSL_PARAM params[]); +typedef struct rsa_acvp_test_st RSA_ACVP_TEST; +void ossl_rsa_acvp_test_free(RSA_ACVP_TEST *t); +# else +# define RSA_ACVP_TEST void +# endif + +RSA *evp_pkey_get1_RSA_PSS(EVP_PKEY *pkey); +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/rsaerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/rsaerr.h new file mode 100644 index 00000000..9b23500b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/rsaerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_RSAERR_H +# define OSSL_CRYPTO_RSAERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_RSA_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/security_bits.h b/deps/openssl/android/x86_64/usr/local/include/crypto/security_bits.h new file mode 100644 index 00000000..58f49681 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/security_bits.h @@ -0,0 +1,16 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_SECURITY_BITS_H +# define OSSL_SECURITY_BITS_H +# pragma once + +uint16_t ossl_ifc_ffc_compute_security_bits(int n); + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/sha.h b/deps/openssl/android/x86_64/usr/local/include/crypto/sha.h index 6d15edb9..64305d17 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/sha.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/sha.h @@ -1,8 +1,8 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,10 +10,13 @@ #ifndef OSSL_CRYPTO_SHA_H # define OSSL_CRYPTO_SHA_H +# pragma once -# include +# include int sha512_224_init(SHA512_CTX *); int sha512_256_init(SHA512_CTX *); +int ossl_sha1_ctrl(SHA_CTX *ctx, int cmd, int mslen, void *ms); +unsigned char *ossl_sha1(const unsigned char *d, size_t n, unsigned char *md); #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/siphash.h b/deps/openssl/android/x86_64/usr/local/include/crypto/siphash.h index 9573680f..0d0767fc 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/siphash.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/siphash.h @@ -1,18 +1,22 @@ /* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_CRYPTO_SIPHASH_H +# define OSSL_CRYPTO_SIPHASH_H +# pragma once -#define SIPHASH_BLOCK_SIZE 8 -#define SIPHASH_KEY_SIZE 16 -#define SIPHASH_MIN_DIGEST_SIZE 8 -#define SIPHASH_MAX_DIGEST_SIZE 16 +# include + +# define SIPHASH_BLOCK_SIZE 8 +# define SIPHASH_KEY_SIZE 16 +# define SIPHASH_MIN_DIGEST_SIZE 8 +# define SIPHASH_MAX_DIGEST_SIZE 16 typedef struct siphash_st SIPHASH; @@ -23,3 +27,24 @@ int SipHash_Init(SIPHASH *ctx, const unsigned char *k, int crounds, int drounds); void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen); int SipHash_Final(SIPHASH *ctx, unsigned char *out, size_t outlen); + +/* Based on https://131002.net/siphash C reference implementation */ + +struct siphash_st { + uint64_t total_inlen; + uint64_t v0; + uint64_t v1; + uint64_t v2; + uint64_t v3; + unsigned int len; + unsigned int hash_size; + unsigned int crounds; + unsigned int drounds; + unsigned char leavings[SIPHASH_BLOCK_SIZE]; +}; + +/* default: SipHash-2-4 */ +# define SIPHASH_C_ROUNDS 2 +# define SIPHASH_D_ROUNDS 4 + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/siv.h b/deps/openssl/android/x86_64/usr/local/include/crypto/siv.h new file mode 100644 index 00000000..8dc58bd3 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/siv.h @@ -0,0 +1,33 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_NO_SIV + +typedef struct siv128_context SIV128_CONTEXT; + +SIV128_CONTEXT *ossl_siv128_new(const unsigned char *key, int klen, + EVP_CIPHER *cbc, EVP_CIPHER *ctr, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_siv128_init(SIV128_CONTEXT *ctx, const unsigned char *key, int klen, + const EVP_CIPHER *cbc, const EVP_CIPHER *ctr, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_siv128_copy_ctx(SIV128_CONTEXT *dest, SIV128_CONTEXT *src); +int ossl_siv128_aad(SIV128_CONTEXT *ctx, const unsigned char *aad, size_t len); +int ossl_siv128_encrypt(SIV128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, size_t len); +int ossl_siv128_decrypt(SIV128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, size_t len); +int ossl_siv128_finish(SIV128_CONTEXT *ctx); +int ossl_siv128_set_tag(SIV128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +int ossl_siv128_get_tag(SIV128_CONTEXT *ctx, unsigned char *tag, size_t len); +int ossl_siv128_cleanup(SIV128_CONTEXT *ctx); +int ossl_siv128_speed(SIV128_CONTEXT *ctx, int arg); + +#endif /* OPENSSL_NO_SIV */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/sm2.h b/deps/openssl/android/x86_64/usr/local/include/crypto/sm2.h index a7f5548c..9ab6c0b7 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/sm2.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/sm2.h @@ -3,7 +3,7 @@ * Copyright 2017 Ribose Inc. All Rights Reserved. * Ported from Ribose contributions from Botan. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,67 +11,76 @@ #ifndef OSSL_CRYPTO_SM2_H # define OSSL_CRYPTO_SM2_H +# pragma once + # include -# ifndef OPENSSL_NO_SM2 +# if !defined(OPENSSL_NO_SM2) && !defined(FIPS_MODULE) # include +# include "crypto/types.h" + +int ossl_sm2_key_private_check(const EC_KEY *eckey); /* The default user id as specified in GM/T 0009-2012 */ # define SM2_DEFAULT_USERID "1234567812345678" -int sm2_compute_z_digest(uint8_t *out, - const EVP_MD *digest, - const uint8_t *id, - const size_t id_len, - const EC_KEY *key); +int ossl_sm2_compute_z_digest(uint8_t *out, + const EVP_MD *digest, + const uint8_t *id, + const size_t id_len, + const EC_KEY *key); /* * SM2 signature operation. Computes Z and then signs H(Z || msg) using SM2 */ -ECDSA_SIG *sm2_do_sign(const EC_KEY *key, +ECDSA_SIG *ossl_sm2_do_sign(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *id, + const size_t id_len, + const uint8_t *msg, size_t msg_len); + +int ossl_sm2_do_verify(const EC_KEY *key, const EVP_MD *digest, + const ECDSA_SIG *signature, const uint8_t *id, const size_t id_len, const uint8_t *msg, size_t msg_len); -int sm2_do_verify(const EC_KEY *key, - const EVP_MD *digest, - const ECDSA_SIG *signature, - const uint8_t *id, - const size_t id_len, - const uint8_t *msg, size_t msg_len); - /* * SM2 signature generation. */ -int sm2_sign(const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); +int ossl_sm2_internal_sign(const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, + EC_KEY *eckey); /* * SM2 signature verification. */ -int sm2_verify(const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); +int ossl_sm2_internal_verify(const unsigned char *dgst, int dgstlen, + const unsigned char *sig, int siglen, + EC_KEY *eckey); /* * SM2 encryption */ -int sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len, - size_t *ct_size); +int ossl_sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, + size_t msg_len, size_t *ct_size); -int sm2_plaintext_size(const unsigned char *ct, size_t ct_size, size_t *pt_size); +int ossl_sm2_plaintext_size(const unsigned char *ct, size_t ct_size, + size_t *pt_size); -int sm2_encrypt(const EC_KEY *key, - const EVP_MD *digest, - const uint8_t *msg, - size_t msg_len, - uint8_t *ciphertext_buf, size_t *ciphertext_len); +int ossl_sm2_encrypt(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *msg, size_t msg_len, + uint8_t *ciphertext_buf, size_t *ciphertext_len); -int sm2_decrypt(const EC_KEY *key, - const EVP_MD *digest, - const uint8_t *ciphertext, - size_t ciphertext_len, uint8_t *ptext_buf, size_t *ptext_len); +int ossl_sm2_decrypt(const EC_KEY *key, + const EVP_MD *digest, + const uint8_t *ciphertext, size_t ciphertext_len, + uint8_t *ptext_buf, size_t *ptext_len); +const unsigned char *ossl_sm2_algorithmidentifier_encoding(int md_nid, + size_t *len); # endif /* OPENSSL_NO_SM2 */ #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/sm2err.h b/deps/openssl/android/x86_64/usr/local/include/crypto/sm2err.h index d1c0ee25..706f4d69 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/sm2err.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/sm2err.h @@ -1,8 +1,8 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,39 +10,18 @@ #ifndef OSSL_CRYPTO_SM2ERR_H # define OSSL_CRYPTO_SM2ERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +# pragma once # include +# include + +# ifdef __cplusplus +extern "C" { +# endif # ifndef OPENSSL_NO_SM2 -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_SM2_strings(void); - -/* - * SM2 function codes. - */ -# define SM2_F_PKEY_SM2_COPY 115 -# define SM2_F_PKEY_SM2_CTRL 109 -# define SM2_F_PKEY_SM2_CTRL_STR 110 -# define SM2_F_PKEY_SM2_DIGEST_CUSTOM 114 -# define SM2_F_PKEY_SM2_INIT 111 -# define SM2_F_PKEY_SM2_SIGN 112 -# define SM2_F_SM2_COMPUTE_MSG_HASH 100 -# define SM2_F_SM2_COMPUTE_USERID_DIGEST 101 -# define SM2_F_SM2_COMPUTE_Z_DIGEST 113 -# define SM2_F_SM2_DECRYPT 102 -# define SM2_F_SM2_ENCRYPT 103 -# define SM2_F_SM2_PLAINTEXT_SIZE 104 -# define SM2_F_SM2_SIGN 105 -# define SM2_F_SM2_SIG_GEN 106 -# define SM2_F_SM2_SIG_VERIFY 107 -# define SM2_F_SM2_VERIFY 108 +int ossl_err_load_SM2_strings(void); /* * SM2 reason codes. @@ -58,8 +37,13 @@ int ERR_load_SM2_strings(void); # define SM2_R_INVALID_DIGEST_TYPE 103 # define SM2_R_INVALID_ENCODING 104 # define SM2_R_INVALID_FIELD 105 +# define SM2_R_INVALID_PRIVATE_KEY 113 # define SM2_R_NO_PARAMETERS_SET 109 # define SM2_R_USER_ID_TOO_LARGE 106 +# endif + +# ifdef __cplusplus +} # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/sm4.h b/deps/openssl/android/x86_64/usr/local/include/crypto/sm4.h index abe28f38..e21ec81c 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/sm4.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/sm4.h @@ -1,8 +1,8 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2017 Ribose Inc. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,6 +10,7 @@ #ifndef OSSL_CRYPTO_SM4_H # define OSSL_CRYPTO_SM4_H +# pragma once # include # include @@ -28,10 +29,10 @@ typedef struct SM4_KEY_st { uint32_t rk[SM4_KEY_SCHEDULE]; } SM4_KEY; -int SM4_set_key(const uint8_t *key, SM4_KEY *ks); +int ossl_sm4_set_key(const uint8_t *key, SM4_KEY *ks); -void SM4_encrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); +void ossl_sm4_encrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); -void SM4_decrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); +void ossl_sm4_decrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/sm4_platform.h b/deps/openssl/android/x86_64/usr/local/include/crypto/sm4_platform.h new file mode 100644 index 00000000..6cc1dfa5 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/sm4_platform.h @@ -0,0 +1,75 @@ +/* + * Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_SM4_PLATFORM_H +# define OSSL_SM4_PLATFORM_H +# pragma once + +# if defined(OPENSSL_CPUID_OBJ) +# if defined(__aarch64__) +# include "arm_arch.h" +extern unsigned int OPENSSL_arm_midr; +static inline int vpsm4_capable(void) +{ + return (OPENSSL_armcap_P & ARMV8_CPUID) && + (MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_V1) || + MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, ARM_CPU_IMP_ARM, ARM_CPU_PART_N1)); +} +# if defined(VPSM4_ASM) +# define VPSM4_CAPABLE vpsm4_capable() +# endif +# define HWSM4_CAPABLE (OPENSSL_armcap_P & ARMV8_SM4) +# define HWSM4_set_encrypt_key sm4_v8_set_encrypt_key +# define HWSM4_set_decrypt_key sm4_v8_set_decrypt_key +# define HWSM4_encrypt sm4_v8_encrypt +# define HWSM4_decrypt sm4_v8_decrypt +# define HWSM4_cbc_encrypt sm4_v8_cbc_encrypt +# define HWSM4_ecb_encrypt sm4_v8_ecb_encrypt +# define HWSM4_ctr32_encrypt_blocks sm4_v8_ctr32_encrypt_blocks +# endif +# endif /* OPENSSL_CPUID_OBJ */ + +# if defined(HWSM4_CAPABLE) +int HWSM4_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); +int HWSM4_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); +void HWSM4_encrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void HWSM4_decrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void HWSM4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + unsigned char *ivec, const int enc); +void HWSM4_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + const int enc); +void HWSM4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +# endif /* HWSM4_CAPABLE */ + +#ifdef VPSM4_CAPABLE +int vpsm4_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); +int vpsm4_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); +void vpsm4_encrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void vpsm4_decrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key); +void vpsm4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + unsigned char *ivec, const int enc); +void vpsm4_ecb_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + const int enc); +void vpsm4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + const unsigned char ivec[16]); +# endif /* VPSM4_CAPABLE */ + + +#endif /* OSSL_SM4_PLATFORM_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/sparc_arch.h b/deps/openssl/android/x86_64/usr/local/include/crypto/sparc_arch.h new file mode 100644 index 00000000..447e715b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/sparc_arch.h @@ -0,0 +1,122 @@ +/* + * Copyright 2012-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_SPARC_ARCH_H +# define OSSL_CRYPTO_SPARC_ARCH_H + +# define SPARCV9_TICK_PRIVILEGED (1<<0) +# define SPARCV9_PREFER_FPU (1<<1) +# define SPARCV9_VIS1 (1<<2) +# define SPARCV9_VIS2 (1<<3)/* reserved */ +# define SPARCV9_FMADD (1<<4) +# define SPARCV9_BLK (1<<5)/* VIS1 block copy */ +# define SPARCV9_VIS3 (1<<6) +# define SPARCV9_RANDOM (1<<7) +# define SPARCV9_64BIT_STACK (1<<8) +# define SPARCV9_FJAESX (1<<9)/* Fujitsu SPARC64 X AES */ +# define SPARCV9_FJDESX (1<<10)/* Fujitsu SPARC64 X DES, reserved */ +# define SPARCV9_FJHPCACE (1<<11)/* Fujitsu HPC-ACE, reserved */ +# define SPARCV9_IMA (1<<13)/* reserved */ +# define SPARCV9_VIS4 (1<<14)/* reserved */ + +/* + * OPENSSL_sparcv9cap_P[1] is copy of Compatibility Feature Register, + * %asr26, SPARC-T4 and later. There is no SPARCV9_CFR bit in + * OPENSSL_sparcv9cap_P[0], as %cfr copy is sufficient... + */ +# define CFR_AES 0x00000001/* Supports AES opcodes */ +# define CFR_DES 0x00000002/* Supports DES opcodes */ +# define CFR_KASUMI 0x00000004/* Supports KASUMI opcodes */ +# define CFR_CAMELLIA 0x00000008/* Supports CAMELLIA opcodes */ +# define CFR_MD5 0x00000010/* Supports MD5 opcodes */ +# define CFR_SHA1 0x00000020/* Supports SHA1 opcodes */ +# define CFR_SHA256 0x00000040/* Supports SHA256 opcodes */ +# define CFR_SHA512 0x00000080/* Supports SHA512 opcodes */ +# define CFR_MPMUL 0x00000100/* Supports MPMUL opcodes */ +# define CFR_MONTMUL 0x00000200/* Supports MONTMUL opcodes */ +# define CFR_MONTSQR 0x00000400/* Supports MONTSQR opcodes */ +# define CFR_CRC32C 0x00000800/* Supports CRC32C opcodes */ +# define CFR_XMPMUL 0x00001000/* Supports XMPMUL opcodes */ +# define CFR_XMONTMUL 0x00002000/* Supports XMONTMUL opcodes */ +# define CFR_XMONTSQR 0x00004000/* Supports XMONTSQR opcodes */ + +# if defined(OPENSSL_PIC) && !defined(__PIC__) +# define __PIC__ +# endif + +# if defined(__SUNPRO_C) && defined(__sparcv9) && !defined(__arch64__) +# define __arch64__ +# endif + +# define SPARC_PIC_THUNK(reg) \ + .align 32; \ +.Lpic_thunk: \ + jmp %o7 + 8; \ + add %o7, reg, reg; + +# define SPARC_PIC_THUNK_CALL(reg) \ + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), reg; \ + call .Lpic_thunk; \ + or reg, %lo(_GLOBAL_OFFSET_TABLE_+4), reg; + +# if 1 +# define SPARC_SETUP_GOT_REG(reg) SPARC_PIC_THUNK_CALL(reg) +# else +# define SPARC_SETUP_GOT_REG(reg) \ + sethi %hi(_GLOBAL_OFFSET_TABLE_-4), reg; \ + call .+8; \ + or reg,%lo(_GLOBAL_OFFSET_TABLE_+4), reg; \ + add %o7, reg, reg +# endif + +# if defined(__arch64__) + +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + setx SYM, %o7, reg; +# define LDPTR ldx +# define SIZE_T_CC %xcc +# define STACK_FRAME 192 +# define STACK_BIAS 2047 +# define STACK_7thARG (STACK_BIAS+176) + +# else + +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + set SYM, reg; +# define LDPTR ld +# define SIZE_T_CC %icc +# define STACK_FRAME 112 +# define STACK_BIAS 0 +# define STACK_7thARG 92 +# define SPARC_LOAD_ADDRESS_LEAF(SYM,reg,tmp) SPARC_LOAD_ADDRESS(SYM,reg) + +# endif + +# ifdef __PIC__ +# undef SPARC_LOAD_ADDRESS +# undef SPARC_LOAD_ADDRESS_LEAF +# define SPARC_LOAD_ADDRESS(SYM, reg) \ + SPARC_SETUP_GOT_REG(reg); \ + sethi %hi(SYM), %o7; \ + or %o7, %lo(SYM), %o7; \ + LDPTR [reg + %o7], reg; +# endif + +# ifndef SPARC_LOAD_ADDRESS_LEAF +# define SPARC_LOAD_ADDRESS_LEAF(SYM, reg, tmp) \ + mov %o7, tmp; \ + SPARC_LOAD_ADDRESS(SYM, reg) \ + mov tmp, %o7; +# endif + +# ifndef __ASSEMBLER__ +extern unsigned int OPENSSL_sparcv9cap_P[2]; +# endif + +#endif /* OSSL_CRYPTO_SPARC_ARCH_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/sparse_array.h b/deps/openssl/android/x86_64/usr/local/include/crypto/sparse_array.h new file mode 100644 index 00000000..7ef74283 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/sparse_array.h @@ -0,0 +1,92 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_SPARSE_ARRAY_H +# define OSSL_CRYPTO_SPARSE_ARRAY_H +# pragma once + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define SPARSE_ARRAY_OF(type) struct sparse_array_st_ ## type + +# define DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, ctype) \ + SPARSE_ARRAY_OF(type); \ + static ossl_unused ossl_inline SPARSE_ARRAY_OF(type) * \ + ossl_sa_##type##_new(void) \ + { \ + return (SPARSE_ARRAY_OF(type) *)ossl_sa_new(); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_free(SPARSE_ARRAY_OF(type) *sa) \ + { \ + ossl_sa_free((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_free_leaves(SPARSE_ARRAY_OF(type) *sa) \ + { \ + ossl_sa_free_leaves((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline size_t \ + ossl_sa_##type##_num(const SPARSE_ARRAY_OF(type) *sa) \ + { \ + return ossl_sa_num((OPENSSL_SA *)sa); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_doall(const SPARSE_ARRAY_OF(type) *sa, \ + void (*leaf)(ossl_uintmax_t, type *)) \ + { \ + ossl_sa_doall((OPENSSL_SA *)sa, \ + (void (*)(ossl_uintmax_t, void *))leaf); \ + } \ + static ossl_unused ossl_inline void \ + ossl_sa_##type##_doall_arg(const SPARSE_ARRAY_OF(type) *sa, \ + void (*leaf)(ossl_uintmax_t, type *, void *), \ + void *arg) \ + { \ + ossl_sa_doall_arg((OPENSSL_SA *)sa, \ + (void (*)(ossl_uintmax_t, void *, void *))leaf, arg); \ + } \ + static ossl_unused ossl_inline ctype \ + *ossl_sa_##type##_get(const SPARSE_ARRAY_OF(type) *sa, ossl_uintmax_t n) \ + { \ + return (type *)ossl_sa_get((OPENSSL_SA *)sa, n); \ + } \ + static ossl_unused ossl_inline int \ + ossl_sa_##type##_set(SPARSE_ARRAY_OF(type) *sa, \ + ossl_uintmax_t n, ctype *val) \ + { \ + return ossl_sa_set((OPENSSL_SA *)sa, n, (void *)val); \ + } \ + SPARSE_ARRAY_OF(type) + +# define DEFINE_SPARSE_ARRAY_OF(type) \ + DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, type) +# define DEFINE_SPARSE_ARRAY_OF_CONST(type) \ + DEFINE_SPARSE_ARRAY_OF_INTERNAL(type, const type) + +typedef struct sparse_array_st OPENSSL_SA; +OPENSSL_SA *ossl_sa_new(void); +void ossl_sa_free(OPENSSL_SA *sa); +void ossl_sa_free_leaves(OPENSSL_SA *sa); +size_t ossl_sa_num(const OPENSSL_SA *sa); +void ossl_sa_doall(const OPENSSL_SA *sa, void (*leaf)(ossl_uintmax_t, void *)); +void ossl_sa_doall_arg(const OPENSSL_SA *sa, + void (*leaf)(ossl_uintmax_t, void *, void *), void *); +void *ossl_sa_get(const OPENSSL_SA *sa, ossl_uintmax_t n); +int ossl_sa_set(OPENSSL_SA *sa, ossl_uintmax_t n, void *val); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/store.h b/deps/openssl/android/x86_64/usr/local/include/crypto/store.h index 428d3c60..5645fc92 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/store.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/store.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,20 +9,15 @@ #ifndef OSSL_CRYPTO_STORE_H # define OSSL_CRYPTO_STORE_H +# pragma once # include # include # include -/* - * Two functions to read PEM data off an already opened BIO. To be used - * instead of OSSLSTORE_open() and OSSLSTORE_close(). Everything is done - * as usual with OSSLSTORE_load() and OSSLSTORE_eof(). - */ -OSSL_STORE_CTX *ossl_store_attach_pem_bio(BIO *bp, const UI_METHOD *ui_method, - void *ui_data); -int ossl_store_detach_pem_bio(OSSL_STORE_CTX *ctx); - void ossl_store_cleanup_int(void); +int ossl_store_loader_get_number(const OSSL_STORE_LOADER *loader); +int ossl_store_loader_store_cache_flush(OSSL_LIB_CTX *libctx); +int ossl_store_loader_store_remove_all_provided(const OSSL_PROVIDER *prov); #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/storeerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/storeerr.h new file mode 100644 index 00000000..c46d845f --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/storeerr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_STOREERR_H +# define OSSL_CRYPTO_STOREERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_OSSL_STORE_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/tserr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/tserr.h new file mode 100644 index 00000000..2f34ba31 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/tserr.h @@ -0,0 +1,30 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_TSERR_H +# define OSSL_CRYPTO_TSERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_TS + +int ossl_err_load_TS_strings(void); +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/types.h b/deps/openssl/android/x86_64/usr/local/include/crypto/types.h new file mode 100644 index 00000000..ad17f052 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/types.h @@ -0,0 +1,32 @@ +/* + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* When removal is simulated, we still need the type internally */ + +#ifndef OSSL_CRYPTO_TYPES_H +# define OSSL_CRYPTO_TYPES_H +# pragma once + +# ifdef OPENSSL_NO_DEPRECATED_3_0 +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; +# ifndef OPENSSL_NO_EC +typedef struct ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; +# endif +# ifndef OPENSSL_NO_DSA +typedef struct dsa_st DSA; +# endif +# endif + +# ifndef OPENSSL_NO_EC +typedef struct ecx_key_st ECX_KEY; +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/uierr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/uierr.h new file mode 100644 index 00000000..789077a8 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/uierr.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_UIERR_H +# define OSSL_CRYPTO_UIERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_UI_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/x509.h b/deps/openssl/android/x86_64/usr/local/include/crypto/x509.h index 243ea74f..631150b7 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/x509.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/x509.h @@ -1,15 +1,21 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include "internal/refcount.h" -#include -#include +#ifndef OSSL_CRYPTO_X509_H +# define OSSL_CRYPTO_X509_H +# pragma once + +# include "internal/refcount.h" +# include +# include +# include +# include "crypto/types.h" /* Internal X509 structures and functions: not for application use */ @@ -73,6 +79,11 @@ struct X509_req_st { ASN1_BIT_STRING *signature; /* signature */ CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; + + /* Set on live certificates for authentication purposes */ + ASN1_OCTET_STRING *distinguishing_id; + OSSL_LIB_CTX *libctx; + char *propq; }; struct X509_crl_info_st { @@ -111,6 +122,9 @@ struct X509_crl_st { const X509_CRL_METHOD *meth; void *meth_data; CRYPTO_RWLOCK *lock; + + OSSL_LIB_CTX *libctx; + char *propq; }; struct x509_revoked_st { @@ -177,7 +191,7 @@ struct x509_st { STACK_OF(DIST_POINT) *crldp; STACK_OF(GENERAL_NAME) *altname; NAME_CONSTRAINTS *nc; -#ifndef OPENSSL_NO_RFC3779 +# ifndef OPENSSL_NO_RFC3779 STACK_OF(IPAddressFamily) *rfc3779_addr; struct ASIdentifiers_st *rfc3779_asid; # endif @@ -185,6 +199,12 @@ struct x509_st { X509_CERT_AUX *aux; CRYPTO_RWLOCK *lock; volatile int ex_cached; + + /* Set on live certificates for authentication purposes */ + ASN1_OCTET_STRING *distinguishing_id; + + OSSL_LIB_CTX *libctx; + char *propq; } /* X509 */ ; /* @@ -193,7 +213,7 @@ struct x509_st { * kept and passed around. */ struct x509_store_ctx_st { /* X509_STORE_CTX */ - X509_STORE *ctx; + X509_STORE *store; /* The following are set by the caller */ /* The cert to check */ X509 *cert; @@ -223,8 +243,11 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); /* Check policy status of the chain */ int (*check_policy) (X509_STORE_CTX *ctx); - STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); - STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); + STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, + const X509_NAME *nm); + /* cannot constify 'ctx' param due to lookup_certs_sk() in x509_vfy.c */ + STACK_OF(X509_CRL) *(*lookup_crls) (const X509_STORE_CTX *ctx, + const X509_NAME *nm); int (*cleanup) (X509_STORE_CTX *ctx); /* The following is built up */ /* if 0, rebuild chain */ @@ -255,6 +278,9 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ SSL_DANE *dane; /* signed via bare TA public key, rather than CA certificate */ int bare_ta_signed; + + OSSL_LIB_CTX *libctx; + char *propq; }; /* PKCS#8 private key info structure */ @@ -282,10 +308,63 @@ struct x509_object_st { } data; }; -int a2i_ipadd(unsigned char *ipout, const char *ipasc); -int x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_a2i_ipadd(unsigned char *ipout, const char *ipasc); +int ossl_x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_x509_print_ex_brief(BIO *bio, X509 *cert, unsigned long neg_cflags); +int ossl_x509v3_cache_extensions(X509 *x); +int ossl_x509_init_sig_info(X509 *x); -void x509_init_sig_info(X509 *x); +int ossl_x509_set0_libctx(X509 *x, OSSL_LIB_CTX *libctx, const char *propq); +int ossl_x509_crl_set0_libctx(X509_CRL *x, OSSL_LIB_CTX *libctx, + const char *propq); +int ossl_x509_req_set0_libctx(X509_REQ *x, OSSL_LIB_CTX *libctx, + const char *propq); +int ossl_asn1_item_digest_ex(const ASN1_ITEM *it, const EVP_MD *type, + void *data, unsigned char *md, unsigned int *len, + OSSL_LIB_CTX *libctx, const char *propq); +int ossl_x509_add_cert_new(STACK_OF(X509) **sk, X509 *cert, int flags); +int ossl_x509_add_certs_new(STACK_OF(X509) **p_sk, STACK_OF(X509) *certs, + int flags); + +STACK_OF(X509_ATTRIBUTE) *ossl_x509at_dup(const STACK_OF(X509_ATTRIBUTE) *x); + +int ossl_x509_PUBKEY_get0_libctx(OSSL_LIB_CTX **plibctx, const char **ppropq, + const X509_PUBKEY *key); +/* Calculate default key identifier according to RFC 5280 section 4.2.1.2 (1) */ +ASN1_OCTET_STRING *ossl_x509_pubkey_hash(X509_PUBKEY *pubkey); + +X509_PUBKEY *ossl_d2i_X509_PUBKEY_INTERNAL(const unsigned char **pp, + long len, OSSL_LIB_CTX *libctx); +void ossl_X509_PUBKEY_INTERNAL_free(X509_PUBKEY *xpub); + +RSA *ossl_d2i_RSA_PSS_PUBKEY(RSA **a, const unsigned char **pp, long length); +int ossl_i2d_RSA_PSS_PUBKEY(const RSA *a, unsigned char **pp); +# ifndef OPENSSL_NO_DSA +DSA *ossl_d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# endif /* OPENSSL_NO_DSA */ +# ifndef OPENSSL_NO_DH +DH *ossl_d2i_DH_PUBKEY(DH **a, const unsigned char **pp, long length); +int ossl_i2d_DH_PUBKEY(const DH *a, unsigned char **pp); +DH *ossl_d2i_DHx_PUBKEY(DH **a, const unsigned char **pp, long length); +int ossl_i2d_DHx_PUBKEY(const DH *a, unsigned char **pp); +# endif /* OPENSSL_NO_DH */ +# ifndef OPENSSL_NO_EC +ECX_KEY *ossl_d2i_ED25519_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_ED25519_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_ED448_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_ED448_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_X25519_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_X25519_PUBKEY(const ECX_KEY *a, unsigned char **pp); +ECX_KEY *ossl_d2i_X448_PUBKEY(ECX_KEY **a, + const unsigned char **pp, long length); +int ossl_i2d_X448_PUBKEY(const ECX_KEY *a, unsigned char **pp); +# endif /* OPENSSL_NO_EC */ +EVP_PKEY *ossl_d2i_PUBKEY_legacy(EVP_PKEY **a, const unsigned char **pp, + long length); int x509v3_add_len_value_uchar(const char *name, const unsigned char *value, size_t vallen, STACK_OF(CONF_VALUE) **extlist); +#endif /* OSSL_CRYPTO_X509_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/x509err.h b/deps/openssl/android/x86_64/usr/local/include/crypto/x509err.h new file mode 100644 index 00000000..0a67975b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/x509err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_X509ERR_H +# define OSSL_CRYPTO_X509ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_X509_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/x509v3err.h b/deps/openssl/android/x86_64/usr/local/include/crypto/x509v3err.h new file mode 100644 index 00000000..66d3ad92 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/x509v3err.h @@ -0,0 +1,27 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_X509V3ERR_H +# define OSSL_CRYPTO_X509V3ERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_X509V3_strings(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H b/deps/openssl/android/x86_64/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H index c350018a..e57c0eab 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H +++ b/deps/openssl/android/x86_64/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H b/deps/openssl/android/x86_64/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H index 9a9c777f..a0139575 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H +++ b/deps/openssl/android/x86_64/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/asn1.h b/deps/openssl/android/x86_64/usr/local/include/internal/asn1.h new file mode 100644 index 00000000..3143e340 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/asn1.h @@ -0,0 +1,16 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_ASN1_H +# define OSSL_INTERNAL_ASN1_H +# pragma once + +int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb); + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/bio.h b/deps/openssl/android/x86_64/usr/local/include/internal/bio.h index c343b276..547a73d0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/bio.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/bio.h @@ -1,13 +1,18 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_INTERNAL_BIO_H +# define OSSL_INTERNAL_BIO_H +# pragma once + +# include +# include struct bio_method_st { int type; @@ -31,3 +36,56 @@ void bio_cleanup(void); /* Old style to new style BIO_METHOD conversion functions */ int bwrite_conv(BIO *bio, const char *data, size_t datal, size_t *written); int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); + +/* Changes to these internal BIOs must also update include/openssl/bio.h */ +# define BIO_CTRL_SET_KTLS 72 +# define BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG 74 +# define BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG 75 + +/* + * This is used with socket BIOs: + * BIO_FLAGS_KTLS_TX means we are using ktls with this BIO for sending. + * BIO_FLAGS_KTLS_TX_CTRL_MSG means we are about to send a ctrl message next. + * BIO_FLAGS_KTLS_RX means we are using ktls with this BIO for receiving. + */ +# define BIO_FLAGS_KTLS_TX_CTRL_MSG 0x1000 +# define BIO_FLAGS_KTLS_RX 0x2000 +# define BIO_FLAGS_KTLS_TX 0x4000 + +/* KTLS related controls and flags */ +# define BIO_set_ktls_flag(b, is_tx) \ + BIO_set_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX) +# define BIO_should_ktls_flag(b, is_tx) \ + BIO_test_flags(b, (is_tx) ? BIO_FLAGS_KTLS_TX : BIO_FLAGS_KTLS_RX) +# define BIO_set_ktls_ctrl_msg_flag(b) \ + BIO_set_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) +# define BIO_should_ktls_ctrl_msg_flag(b) \ + BIO_test_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) +# define BIO_clear_ktls_ctrl_msg_flag(b) \ + BIO_clear_flags(b, BIO_FLAGS_KTLS_TX_CTRL_MSG) + +# define BIO_set_ktls(b, keyblob, is_tx) \ + BIO_ctrl(b, BIO_CTRL_SET_KTLS, is_tx, keyblob) +# define BIO_set_ktls_ctrl_msg(b, record_type) \ + BIO_ctrl(b, BIO_CTRL_SET_KTLS_TX_SEND_CTRL_MSG, record_type, NULL) +# define BIO_clear_ktls_ctrl_msg(b) \ + BIO_ctrl(b, BIO_CTRL_CLEAR_KTLS_TX_CTRL_MSG, 0, NULL) + +/* Functions to allow the core to offer the CORE_BIO type to providers */ +OSSL_CORE_BIO *ossl_core_bio_new_from_bio(BIO *bio); +OSSL_CORE_BIO *ossl_core_bio_new_file(const char *filename, const char *mode); +OSSL_CORE_BIO *ossl_core_bio_new_mem_buf(const void *buf, int len); +int ossl_core_bio_read_ex(OSSL_CORE_BIO *cb, void *data, size_t dlen, + size_t *readbytes); +int ossl_core_bio_write_ex(OSSL_CORE_BIO *cb, const void *data, size_t dlen, + size_t *written); +int ossl_core_bio_gets(OSSL_CORE_BIO *cb, char *buf, int size); +int ossl_core_bio_puts(OSSL_CORE_BIO *cb, const char *buf); +long ossl_core_bio_ctrl(OSSL_CORE_BIO *cb, int cmd, long larg, void *parg); +int ossl_core_bio_up_ref(OSSL_CORE_BIO *cb); +int ossl_core_bio_free(OSSL_CORE_BIO *cb); +int ossl_core_bio_vprintf(OSSL_CORE_BIO *cb, const char *format, va_list args); + +int ossl_bio_init_core(OSSL_LIB_CTX *libctx, const OSSL_DISPATCH *fns); + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/comp.h b/deps/openssl/android/x86_64/usr/local/include/internal/comp.h index ac6e38b4..3ad86fc7 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/comp.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/comp.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,4 +9,4 @@ #include -void comp_zlib_cleanup_int(void); +void ossl_comp_zlib_cleanup(void); diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/conf.h b/deps/openssl/android/x86_64/usr/local/include/internal/conf.h index 163fea8d..8c6c29cd 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/conf.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/conf.h @@ -1,7 +1,7 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,10 +9,11 @@ #ifndef OSSL_INTERNAL_CONF_H # define OSSL_INTERNAL_CONF_H +# pragma once -#include +# include -#define DEFAULT_CONF_MFLAGS \ +# define DEFAULT_CONF_MFLAGS \ (CONF_MFLAGS_DEFAULT_SECTION | \ CONF_MFLAGS_IGNORE_MISSING_FILE | \ CONF_MFLAGS_IGNORE_RETURN_CODES) @@ -23,8 +24,8 @@ struct ossl_init_settings_st { unsigned long flags; }; -int openssl_config_int(const OPENSSL_INIT_SETTINGS *); -void openssl_no_config_int(void); -void conf_modules_free_int(void); +int ossl_config_int(const OPENSSL_INIT_SETTINGS *); +void ossl_no_config_int(void); +void ossl_config_modules_free(void); #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/constant_time.h b/deps/openssl/android/x86_64/usr/local/include/internal/constant_time.h index 6600a1d7..0ed6f823 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/constant_time.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/constant_time.h @@ -1,7 +1,7 @@ /* - * Copyright 2014-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_CONSTANT_TIME_H # define OSSL_INTERNAL_CONSTANT_TIME_H +# pragma once # include # include @@ -181,6 +182,11 @@ static ossl_inline uint32_t constant_time_is_zero_32(uint32_t a) return constant_time_msb_32(~a & (a - 1)); } +static ossl_inline uint64_t constant_time_is_zero_64(uint64_t a) +{ + return constant_time_msb_64(~a & (a - 1)); +} + static ossl_inline unsigned int constant_time_eq(unsigned int a, unsigned int b) { @@ -352,6 +358,34 @@ static ossl_inline void constant_time_cond_swap_64(uint64_t mask, uint64_t *a, *b ^= xor; } +/* + * mask must be 0xFF or 0x00. + * "constant time" is per len. + * + * if (mask) { + * unsigned char tmp[len]; + * + * memcpy(tmp, a, len); + * memcpy(a, b); + * memcpy(b, tmp); + * } + */ +static ossl_inline void constant_time_cond_swap_buff(unsigned char mask, + unsigned char *a, + unsigned char *b, + size_t len) +{ + size_t i; + unsigned char tmp; + + for (i = 0; i < len; i++) { + tmp = a[i] ^ b[i]; + tmp &= mask; + a[i] ^= tmp; + b[i] ^= tmp; + } +} + /* * table is a two dimensional array of bytes. Each row has rowsize elements. * Copies row number idx into out. rowsize and numrows are not considered diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/core.h b/deps/openssl/android/x86_64/usr/local/include/internal/core.h new file mode 100644 index 00000000..03adb66b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/core.h @@ -0,0 +1,71 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_CORE_H +# define OSSL_INTERNAL_CORE_H +# pragma once + +/* + * namespaces: + * + * ossl_method_ Core Method API + */ + +/* + * construct an arbitrary method from a dispatch table found by looking + * up a match for the < operation_id, name, property > combination. + * constructor and destructor are the constructor and destructor for that + * arbitrary object. + * + * These objects are normally cached, unless the provider says not to cache. + * However, force_cache can be used to force caching whatever the provider + * says (for example, because the application knows better). + */ +typedef struct ossl_method_construct_method_st { + /* Get a temporary store */ + void *(*get_tmp_store)(void *data); + /* Reserve the appropriate method store */ + int (*lock_store)(void *store, void *data); + /* Unreserve the appropriate method store */ + int (*unlock_store)(void *store, void *data); + /* Get an already existing method from a store */ + void *(*get)(void *store, const OSSL_PROVIDER **prov, void *data); + /* Store a method in a store */ + int (*put)(void *store, void *method, const OSSL_PROVIDER *prov, + const char *name, const char *propdef, void *data); + /* Construct a new method */ + void *(*construct)(const OSSL_ALGORITHM *algodef, OSSL_PROVIDER *prov, + void *data); + /* Destruct a method */ + void (*destruct)(void *method, void *data); +} OSSL_METHOD_CONSTRUCT_METHOD; + +void *ossl_method_construct(OSSL_LIB_CTX *ctx, int operation_id, + OSSL_PROVIDER **provider_rw, int force_cache, + OSSL_METHOD_CONSTRUCT_METHOD *mcm, void *mcm_data); + +void ossl_algorithm_do_all(OSSL_LIB_CTX *libctx, int operation_id, + OSSL_PROVIDER *provider, + int (*pre)(OSSL_PROVIDER *, int operation_id, + int no_store, void *data, int *result), + int (*reserve_store)(int no_store, void *data), + void (*fn)(OSSL_PROVIDER *provider, + const OSSL_ALGORITHM *algo, + int no_store, void *data), + int (*unreserve_store)(void *data), + int (*post)(OSSL_PROVIDER *, int operation_id, + int no_store, void *data, int *result), + void *data); +char *ossl_algorithm_get1_first_name(const OSSL_ALGORITHM *algo); + +__owur int ossl_lib_ctx_write_lock(OSSL_LIB_CTX *ctx); +__owur int ossl_lib_ctx_read_lock(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_unlock(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_child(OSSL_LIB_CTX *ctx); +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/cryptlib.h b/deps/openssl/android/x86_64/usr/local/include/internal/cryptlib.h index 6e7291ae..ac50eb3b 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/cryptlib.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/cryptlib.h @@ -1,7 +1,7 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,19 +9,22 @@ #ifndef OSSL_INTERNAL_CRYPTLIB_H # define OSSL_INTERNAL_CRYPTLIB_H +# pragma once # include # include # ifdef OPENSSL_USE_APPLINK -# undef BIO_FLAGS_UPLINK -# define BIO_FLAGS_UPLINK 0x8000 +# define BIO_FLAGS_UPLINK_INTERNAL 0x8000 # include "ms/uplink.h" +# else +# define BIO_FLAGS_UPLINK_INTERNAL 0 # endif # include # include # include +# include # include # include "internal/nelem.h" @@ -42,14 +45,21 @@ __owur static ossl_inline int ossl_assert_int(int expr, const char *exprstr, #endif -typedef struct ex_callback_st EX_CALLBACK; +/* + * Use this inside a union with the field that needs to be aligned to a + * reasonable boundary for the platform. The most pessimistic alignment + * of the listed types will be used by the compiler. + */ +# define OSSL_UNION_ALIGN \ + double align; \ + ossl_uintmax_t align_int; \ + void *align_ptr +typedef struct ex_callback_st EX_CALLBACK; DEFINE_STACK_OF(EX_CALLBACK) -typedef struct app_mem_info_st APP_INFO; - typedef struct mem_st MEM; -DEFINE_LHASH_OF(MEM); +DEFINE_LHASH_OF_EX(MEM); # define OPENSSL_CONF "openssl.cnf" @@ -76,9 +86,14 @@ DEFINE_LHASH_OF(MEM); # define HEX_SIZE(type) (sizeof(type)*2) void OPENSSL_cpuid_setup(void); +#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) extern unsigned int OPENSSL_ia32cap_P[]; +#endif void OPENSSL_showfatal(const char *fmta, ...); -void crypto_cleanup_all_ex_data_int(void); +int ossl_do_ex_data_init(OSSL_LIB_CTX *ctx); +void ossl_crypto_cleanup_all_ex_data_int(OSSL_LIB_CTX *ctx); int openssl_init_fork_handlers(void); int openssl_get_fork_id(void); @@ -96,4 +111,134 @@ uint32_t OPENSSL_rdtsc(void); size_t OPENSSL_instrument_bus(unsigned int *, size_t); size_t OPENSSL_instrument_bus2(unsigned int *, size_t, size_t); +/* ex_data structures */ + +/* + * Each structure type (sometimes called a class), that supports + * exdata has a stack of callbacks for each instance. + */ +struct ex_callback_st { + long argl; /* Arbitrary long */ + void *argp; /* Arbitrary void * */ + int priority; /* Priority ordering for freeing */ + CRYPTO_EX_new *new_func; + CRYPTO_EX_free *free_func; + CRYPTO_EX_dup *dup_func; +}; + +/* + * The state for each class. This could just be a typedef, but + * a structure allows future changes. + */ +typedef struct ex_callbacks_st { + STACK_OF(EX_CALLBACK) *meth; +} EX_CALLBACKS; + +typedef struct ossl_ex_data_global_st { + CRYPTO_RWLOCK *ex_data_lock; + EX_CALLBACKS ex_data[CRYPTO_EX_INDEX__COUNT]; +} OSSL_EX_DATA_GLOBAL; + + +/* OSSL_LIB_CTX */ + +# define OSSL_LIB_CTX_PROVIDER_STORE_RUN_ONCE_INDEX 0 +# define OSSL_LIB_CTX_DEFAULT_METHOD_STORE_RUN_ONCE_INDEX 1 +# define OSSL_LIB_CTX_METHOD_STORE_RUN_ONCE_INDEX 2 +# define OSSL_LIB_CTX_MAX_RUN_ONCE 3 + +# define OSSL_LIB_CTX_EVP_METHOD_STORE_INDEX 0 +# define OSSL_LIB_CTX_PROVIDER_STORE_INDEX 1 +# define OSSL_LIB_CTX_PROPERTY_DEFN_INDEX 2 +# define OSSL_LIB_CTX_PROPERTY_STRING_INDEX 3 +# define OSSL_LIB_CTX_NAMEMAP_INDEX 4 +# define OSSL_LIB_CTX_DRBG_INDEX 5 +# define OSSL_LIB_CTX_DRBG_NONCE_INDEX 6 +# define OSSL_LIB_CTX_RAND_CRNGT_INDEX 7 +# ifdef FIPS_MODULE +# define OSSL_LIB_CTX_THREAD_EVENT_HANDLER_INDEX 8 +# endif +# define OSSL_LIB_CTX_FIPS_PROV_INDEX 9 +# define OSSL_LIB_CTX_ENCODER_STORE_INDEX 10 +# define OSSL_LIB_CTX_DECODER_STORE_INDEX 11 +# define OSSL_LIB_CTX_SELF_TEST_CB_INDEX 12 +# define OSSL_LIB_CTX_BIO_PROV_INDEX 13 +# define OSSL_LIB_CTX_GLOBAL_PROPERTIES 14 +# define OSSL_LIB_CTX_STORE_LOADER_STORE_INDEX 15 +# define OSSL_LIB_CTX_PROVIDER_CONF_INDEX 16 +# define OSSL_LIB_CTX_BIO_CORE_INDEX 17 +# define OSSL_LIB_CTX_CHILD_PROVIDER_INDEX 18 +# define OSSL_LIB_CTX_MAX_INDEXES 19 + +OSSL_LIB_CTX *ossl_lib_ctx_get_concrete(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_default(OSSL_LIB_CTX *ctx); +int ossl_lib_ctx_is_global_default(OSSL_LIB_CTX *ctx); + +/* Functions to retrieve pointers to data by index */ +void *ossl_lib_ctx_get_data(OSSL_LIB_CTX *, int /* index */); + +void ossl_lib_ctx_default_deinit(void); +OSSL_EX_DATA_GLOBAL *ossl_lib_ctx_get_ex_data_global(OSSL_LIB_CTX *ctx); + +const char *ossl_lib_ctx_get_descriptor(OSSL_LIB_CTX *libctx); + +OSSL_LIB_CTX *ossl_crypto_ex_data_get_ossl_lib_ctx(const CRYPTO_EX_DATA *ad); +int ossl_crypto_new_ex_data_ex(OSSL_LIB_CTX *ctx, int class_index, void *obj, + CRYPTO_EX_DATA *ad); +int ossl_crypto_get_ex_new_index_ex(OSSL_LIB_CTX *ctx, int class_index, + long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func, + int priority); +int ossl_crypto_free_ex_index_ex(OSSL_LIB_CTX *ctx, int class_index, int idx); + +/* Function for simple binary search */ + +/* Flags */ +# define OSSL_BSEARCH_VALUE_ON_NOMATCH 0x01 +# define OSSL_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 + +const void *ossl_bsearch(const void *key, const void *base, int num, + int size, int (*cmp) (const void *, const void *), + int flags); + +char *ossl_sk_ASN1_UTF8STRING2text(STACK_OF(ASN1_UTF8STRING) *text, + const char *sep, size_t max_len); +char *ossl_ipaddr_to_asc(unsigned char *p, int len); + +char *ossl_buf2hexstr_sep(const unsigned char *buf, long buflen, char sep); +unsigned char *ossl_hexstr2buf_sep(const char *str, long *buflen, + const char sep); + +static ossl_inline int ossl_ends_with_dirsep(const char *path) +{ + if (*path != '\0') + path += strlen(path) - 1; +# if defined __VMS + if (*path == ']' || *path == '>' || *path == ':') + return 1; +# elif defined _WIN32 + if (*path == '\\') + return 1; +# endif + return *path == '/'; +} + +static ossl_inline int ossl_is_absolute_path(const char *path) +{ +# if defined __VMS + if (strchr(path, ':') != NULL + || ((path[0] == '[' || path[0] == '<') + && path[1] != '.' && path[1] != '-' + && path[1] != ']' && path[1] != '>')) + return 1; +# elif defined _WIN32 + if (path[0] == '\\' + || (path[0] != '\0' && path[1] == ':')) + return 1; +# endif + return path[0] == '/'; +} + #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/dane.h b/deps/openssl/android/x86_64/usr/local/include/internal/dane.h index 7a39bd7d..a3d78a7f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/dane.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/dane.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,8 +9,9 @@ #ifndef OSSL_INTERNAL_DANE_H #define OSSL_INTERNAL_DANE_H +# pragma once -#include +# include /*- * Certificate usages: diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/deprecated.h b/deps/openssl/android/x86_64/usr/local/include/internal/deprecated.h new file mode 100644 index 00000000..a313a015 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/deprecated.h @@ -0,0 +1,30 @@ +/* + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file should be included by internal code that needs to use APIs + * that have been deprecated for public use, but where those symbols will still + * be available internally. For example the EVP and provider code needs to use + * low level APIs that are otherwise deprecated. + * + * This header *must* be the first OpenSSL header included by a source file. + */ + +#ifndef OSSL_INTERNAL_DEPRECATED_H +# define OSSL_INTERNAL_DEPRECATED_H +# pragma once + +# include + +# undef OPENSSL_NO_DEPRECATED +# define OPENSSL_SUPPRESS_DEPRECATED + +# include + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/der.h b/deps/openssl/android/x86_64/usr/local/include/internal/der.h new file mode 100644 index 00000000..f23fabc2 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/der.h @@ -0,0 +1,88 @@ +/* + * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include +#include "internal/packet.h" + +/* + * NOTE: X.690 numbers the identifier octet bits 1 to 8. + * We use the same numbering in comments here. + */ + +/* Well known primitive tags */ + +/* + * DER UNIVERSAL tags, occupying bits 1-5 in the DER identifier byte + * These are only valid for the UNIVERSAL class. With the other classes, + * these bits have a different meaning. + */ +#define DER_P_EOC 0 /* BER End Of Contents tag */ +#define DER_P_BOOLEAN 1 +#define DER_P_INTEGER 2 +#define DER_P_BIT_STRING 3 +#define DER_P_OCTET_STRING 4 +#define DER_P_NULL 5 +#define DER_P_OBJECT 6 +#define DER_P_OBJECT_DESCRIPTOR 7 +#define DER_P_EXTERNAL 8 +#define DER_P_REAL 9 +#define DER_P_ENUMERATED 10 +#define DER_P_UTF8STRING 12 +#define DER_P_SEQUENCE 16 +#define DER_P_SET 17 +#define DER_P_NUMERICSTRING 18 +#define DER_P_PRINTABLESTRING 19 +#define DER_P_T61STRING 20 +#define DER_P_VIDEOTEXSTRING 21 +#define DER_P_IA5STRING 22 +#define DER_P_UTCTIME 23 +#define DER_P_GENERALIZEDTIME 24 +#define DER_P_GRAPHICSTRING 25 +#define DER_P_ISO64STRING 26 +#define DER_P_GENERALSTRING 27 +#define DER_P_UNIVERSALSTRING 28 +#define DER_P_BMPSTRING 30 + +/* DER Flags, occupying bit 6 in the DER identifier byte */ +#define DER_F_PRIMITIVE 0x00 +#define DER_F_CONSTRUCTED 0x20 + +/* DER classes tags, occupying bits 7-8 in the DER identifier byte */ +#define DER_C_UNIVERSAL 0x00 +#define DER_C_APPLICATION 0x40 +#define DER_C_CONTEXT 0x80 +#define DER_C_PRIVATE 0xC0 + +/* + * Run-time constructors. + * + * They all construct DER backwards, so care should be taken to use them + * that way. + */ + +/* This can be used for all items that don't have a context */ +#define DER_NO_CONTEXT -1 + +int ossl_DER_w_precompiled(WPACKET *pkt, int tag, + const unsigned char *precompiled, + size_t precompiled_n); + +int ossl_DER_w_boolean(WPACKET *pkt, int tag, int b); +int ossl_DER_w_uint32(WPACKET *pkt, int tag, uint32_t v); +int ossl_DER_w_bn(WPACKET *pkt, int tag, const BIGNUM *v); +int ossl_DER_w_null(WPACKET *pkt, int tag); +int ossl_DER_w_octet_string(WPACKET *pkt, int tag, + const unsigned char *data, size_t data_n); +int ossl_DER_w_octet_string_uint32(WPACKET *pkt, int tag, uint32_t value); + +/* + * All constructors for constructed elements have a begin and a end function + */ +int ossl_DER_w_begin_sequence(WPACKET *pkt, int tag); +int ossl_DER_w_end_sequence(WPACKET *pkt, int tag); diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/dso.h b/deps/openssl/android/x86_64/usr/local/include/internal/dso.h index c57c0c40..160ddb98 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/dso.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/dso.h @@ -1,7 +1,7 @@ /* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_DSO_H # define OSSL_INTERNAL_DSO_H +# pragma once # include # include "internal/dsoerr.h" @@ -160,6 +161,4 @@ DSO *DSO_dsobyaddr(void *addr, int flags); */ void *DSO_global_lookup(const char *name); -int ERR_load_DSO_strings(void); - #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/dsoerr.h b/deps/openssl/android/x86_64/usr/local/include/internal/dsoerr.h index 94d642a2..b1719e83 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/dsoerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/dsoerr.h @@ -1,8 +1,8 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -10,73 +10,39 @@ #ifndef OSSL_INTERNAL_DSOERR_H # define OSSL_INTERNAL_DSOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include # ifdef __cplusplus -extern "C" +extern "C" { # endif -int ERR_load_DSO_strings(void); -/* - * DSO function codes. - */ -# define DSO_F_DLFCN_BIND_FUNC 100 -# define DSO_F_DLFCN_LOAD 102 -# define DSO_F_DLFCN_MERGER 130 -# define DSO_F_DLFCN_NAME_CONVERTER 123 -# define DSO_F_DLFCN_UNLOAD 103 -# define DSO_F_DL_BIND_FUNC 104 -# define DSO_F_DL_LOAD 106 -# define DSO_F_DL_MERGER 131 -# define DSO_F_DL_NAME_CONVERTER 124 -# define DSO_F_DL_UNLOAD 107 -# define DSO_F_DSO_BIND_FUNC 108 -# define DSO_F_DSO_CONVERT_FILENAME 126 -# define DSO_F_DSO_CTRL 110 -# define DSO_F_DSO_FREE 111 -# define DSO_F_DSO_GET_FILENAME 127 -# define DSO_F_DSO_GLOBAL_LOOKUP 139 -# define DSO_F_DSO_LOAD 112 -# define DSO_F_DSO_MERGE 132 -# define DSO_F_DSO_NEW_METHOD 113 -# define DSO_F_DSO_PATHBYADDR 105 -# define DSO_F_DSO_SET_FILENAME 129 -# define DSO_F_DSO_UP_REF 114 -# define DSO_F_VMS_BIND_SYM 115 -# define DSO_F_VMS_LOAD 116 -# define DSO_F_VMS_MERGER 133 -# define DSO_F_VMS_UNLOAD 117 -# define DSO_F_WIN32_BIND_FUNC 101 -# define DSO_F_WIN32_GLOBALLOOKUP 142 -# define DSO_F_WIN32_JOINER 135 -# define DSO_F_WIN32_LOAD 120 -# define DSO_F_WIN32_MERGER 134 -# define DSO_F_WIN32_NAME_CONVERTER 125 -# define DSO_F_WIN32_PATHBYADDR 109 -# define DSO_F_WIN32_SPLITTER 136 -# define DSO_F_WIN32_UNLOAD 121 +int ossl_err_load_DSO_strings(void); /* * DSO reason codes. */ -# define DSO_R_CTRL_FAILED 100 -# define DSO_R_DSO_ALREADY_LOADED 110 -# define DSO_R_EMPTY_FILE_STRUCTURE 113 -# define DSO_R_FAILURE 114 -# define DSO_R_FILENAME_TOO_BIG 101 -# define DSO_R_FINISH_FAILED 102 -# define DSO_R_INCORRECT_FILE_SYNTAX 115 -# define DSO_R_LOAD_FAILED 103 -# define DSO_R_NAME_TRANSLATION_FAILED 109 -# define DSO_R_NO_FILENAME 111 -# define DSO_R_NULL_HANDLE 104 -# define DSO_R_SET_FILENAME_FAILED 112 -# define DSO_R_STACK_ERROR 105 -# define DSO_R_SYM_FAILURE 106 -# define DSO_R_UNLOAD_FAILED 107 -# define DSO_R_UNSUPPORTED 108 +# define DSO_R_CTRL_FAILED 100 +# define DSO_R_DSO_ALREADY_LOADED 110 +# define DSO_R_EMPTY_FILE_STRUCTURE 113 +# define DSO_R_FAILURE 114 +# define DSO_R_FILENAME_TOO_BIG 101 +# define DSO_R_FINISH_FAILED 102 +# define DSO_R_INCORRECT_FILE_SYNTAX 115 +# define DSO_R_LOAD_FAILED 103 +# define DSO_R_NAME_TRANSLATION_FAILED 109 +# define DSO_R_NO_FILENAME 111 +# define DSO_R_NULL_HANDLE 104 +# define DSO_R_SET_FILENAME_FAILED 112 +# define DSO_R_STACK_ERROR 105 +# define DSO_R_SYM_FAILURE 106 +# define DSO_R_UNLOAD_FAILED 107 +# define DSO_R_UNSUPPORTED 108 + +# ifdef __cplusplus +} +# endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/e_os.h b/deps/openssl/android/x86_64/usr/local/include/internal/e_os.h new file mode 100644 index 00000000..7fdc3899 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/e_os.h @@ -0,0 +1,432 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_E_OS_H +# define OSSL_E_OS_H + +# include +# include + +# include +# include +# include "internal/numbers.h" /* Ensure the definition of SIZE_MAX */ + +/* + * contains what we can justify to make visible to the + * outside; this file e_os.h is not part of the exported interface. + */ + +# if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) +# define NO_CHMOD +# define NO_SYSLOG +# endif + +# define get_last_sys_error() errno +# define clear_sys_error() errno=0 +# define set_sys_error(e) errno=(e) + +/******************************************************************** + The Microsoft section + ********************************************************************/ +# if defined(OPENSSL_SYS_WIN32) && !defined(WIN32) +# define WIN32 +# endif +# if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +# endif +# if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS) +# define MSDOS +# endif + +# ifdef WIN32 +# undef get_last_sys_error +# undef clear_sys_error +# undef set_sys_error +# define get_last_sys_error() GetLastError() +# define clear_sys_error() SetLastError(0) +# define set_sys_error(e) SetLastError(e) +# if !defined(WINNT) +# define WIN_CONSOLE_BUG +# endif +# else +# endif + +# if (defined(WINDOWS) || defined(MSDOS)) + +# ifdef __DJGPP__ +# include +# include +# define _setmode setmode +# define _O_TEXT O_TEXT +# define _O_BINARY O_BINARY +# undef DEVRANDOM_EGD /* Neither MS-DOS nor FreeDOS provide 'egd' sockets. */ +# undef DEVRANDOM +# define DEVRANDOM "/dev/urandom\x24" +# endif /* __DJGPP__ */ + +# ifndef S_IFDIR +# define S_IFDIR _S_IFDIR +# endif + +# ifndef S_IFMT +# define S_IFMT _S_IFMT +# endif + +# if !defined(WINNT) && !defined(__DJGPP__) +# define NO_SYSLOG +# endif + +# ifdef WINDOWS +# if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT) + /* + * Defining _WIN32_WINNT here in e_os.h implies certain "discipline." + * Most notably we ought to check for availability of each specific + * routine that was introduced after denoted _WIN32_WINNT with + * GetProcAddress(). Normally newer functions are masked with higher + * _WIN32_WINNT in SDK headers. So that if you wish to use them in + * some module, you'd need to override _WIN32_WINNT definition in + * the target module in order to "reach for" prototypes, but replace + * calls to new functions with indirect calls. Alternatively it + * might be possible to achieve the goal by /DELAYLOAD-ing .DLLs + * and check for current OS version instead. + */ +# define _WIN32_WINNT 0x0501 +# endif +# if defined(_WIN32_WINNT) || defined(_WIN32_WCE) + /* + * Just like defining _WIN32_WINNT including winsock2.h implies + * certain "discipline" for maintaining [broad] binary compatibility. + * As long as structures are invariant among Winsock versions, + * it's sufficient to check for specific Winsock2 API availability + * at run-time [DSO_global_lookup is recommended]... + */ +# include +# include + /* + * Clang-based C++Builder 10.3.3 toolchains cannot find C inline + * definitions at link-time. This header defines WspiapiLoad() as an + * __inline function. https://quality.embarcadero.com/browse/RSP-33806 + */ +# if !defined(__BORLANDC__) || !defined(__clang__) +# include +# endif + /* yes, they have to be #included prior to */ +# endif +# include +# include +# include +# include +# if defined(_WIN32_WCE) && !defined(EACCES) +# define EACCES 13 +# endif +# include +# ifdef _WIN64 +# define strlen(s) _strlen31(s) +/* cut strings to 2GB */ +static __inline unsigned int _strlen31(const char *str) +{ + unsigned int len = 0; + while (*str && len < 0x80000000U) + str++, len++; + return len & 0x7FFFFFFF; +} +# endif +# include +# if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin) +# if _MSC_VER>=1300 && _MSC_VER<1600 +# undef stdin +# undef stdout +# undef stderr +FILE *__iob_func(); +# define stdin (&__iob_func()[0]) +# define stdout (&__iob_func()[1]) +# define stderr (&__iob_func()[2]) +# endif +# endif +# endif +# include +# include + +# ifdef OPENSSL_SYS_WINCE +# define OPENSSL_NO_POSIX_IO +# endif + +# define EXIT(n) exit(n) +# define LIST_SEPARATOR_CHAR ';' +# ifndef W_OK +# define W_OK 2 +# endif +# ifndef R_OK +# define R_OK 4 +# endif +# ifdef OPENSSL_SYS_WINCE +# define DEFAULT_HOME "" +# else +# define DEFAULT_HOME "C:" +# endif + +/* Avoid Visual Studio 13 GetVersion deprecated problems */ +# if defined(_MSC_VER) && _MSC_VER>=1800 +# define check_winnt() (1) +# define check_win_minplat(x) (1) +# else +# define check_winnt() (GetVersion() < 0x80000000) +# define check_win_minplat(x) (LOBYTE(LOWORD(GetVersion())) >= (x)) +# endif + +# else /* The non-microsoft world */ + +# if defined(OPENSSL_SYS_VXWORKS) +# include +# else +# include +# endif + +# ifdef OPENSSL_SYS_VMS +# define VMS 1 + /* + * some programs don't include stdlib, so exit() and others give implicit + * function warnings + */ +# include +# if defined(__DECC) +# include +# else +# include +# endif +# define LIST_SEPARATOR_CHAR ',' + /* We don't have any well-defined random devices on VMS, yet... */ +# undef DEVRANDOM + /*- + We need to do this since VMS has the following coding on status codes: + + Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ... + The important thing to know is that odd numbers are considered + good, while even ones are considered errors. + Bits 3-15: actual status number + Bits 16-27: facility number. 0 is considered "unknown" + Bits 28-31: control bits. If bit 28 is set, the shell won't try to + output the message (which, for random codes, just looks ugly) + + So, what we do here is to change 0 to 1 to get the default success status, + and everything else is shifted up to fit into the status number field, and + the status is tagged as an error, which is what is wanted here. + + Finally, we add the VMS C facility code 0x35a000, because there are some + programs, such as Perl, that will reinterpret the code back to something + POSIX. 'man perlvms' explains it further. + + NOTE: the perlvms manual wants to turn all codes 2 to 255 into success + codes (status type = 1). I couldn't disagree more. Fortunately, the + status type doesn't seem to bother Perl. + -- Richard Levitte + */ +# define EXIT(n) exit((n) ? (((n) << 3) | 2 | 0x10000000 | 0x35a000) : 1) + +# define DEFAULT_HOME "SYS$LOGIN:" + +# else + /* !defined VMS */ +# include +# include +# ifdef OPENSSL_SYS_WIN32_CYGWIN +# include +# include +# endif + +# define LIST_SEPARATOR_CHAR ':' +# define EXIT(n) exit(n) +# endif + +# endif + +/***********************************************/ + +# if defined(OPENSSL_SYS_WINDOWS) +# if (_MSC_VER >= 1310) && !defined(_WIN32_WCE) +# define open _open +# define fdopen _fdopen +# define close _close +# ifndef strdup +# define strdup _strdup +# endif +# define unlink _unlink +# define fileno _fileno +# endif +# else +# include +# endif + +/* vxworks */ +# if defined(OPENSSL_SYS_VXWORKS) +# include +# include +# include +# include +# include +# include + +# define TTY_STRUCT int +# define sleep(a) taskDelay((a) * sysClkRateGet()) + +/* + * NOTE: these are implemented by helpers in database app! if the database is + * not linked, we need to implement them elsewhere + */ +struct hostent *gethostbyname(const char *name); +struct hostent *gethostbyaddr(const char *addr, int length, int type); +struct servent *getservbyname(const char *name, const char *proto); + +# endif +/* end vxworks */ + +/* system-specific variants defining ossl_sleep() */ +#if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__) +# include +static ossl_inline void ossl_sleep(unsigned long millis) +{ +# ifdef OPENSSL_SYS_VXWORKS + struct timespec ts; + ts.tv_sec = (long int) (millis / 1000); + ts.tv_nsec = (long int) (millis % 1000) * 1000000ul; + nanosleep(&ts, NULL); +# elif defined(__TANDEM) +# if !defined(_REENTRANT) +# include + /* HPNS does not support usleep for non threaded apps */ + PROCESS_DELAY_(millis * 1000); +# elif defined(_SPT_MODEL_) +# include +# include + usleep(millis * 1000); +# else + usleep(millis * 1000); +# endif +# else + usleep(millis * 1000); +# endif +} +#elif defined(_WIN32) +# include +static ossl_inline void ossl_sleep(unsigned long millis) +{ + Sleep(millis); +} +#else +/* Fallback to a busy wait */ +static ossl_inline void ossl_sleep(unsigned long millis) +{ + struct timeval start, now; + unsigned long elapsedms; + + gettimeofday(&start, NULL); + do { + gettimeofday(&now, NULL); + elapsedms = (((now.tv_sec - start.tv_sec) * 1000000) + + now.tv_usec - start.tv_usec) / 1000; + } while (elapsedms < millis); +} +#endif /* defined OPENSSL_SYS_UNIX */ + +/* ----------------------------- HP NonStop -------------------------------- */ +/* Required to support platform variant without getpid() and pid_t. */ +# if defined(__TANDEM) && defined(_GUARDIAN_TARGET) +# include +# include +# define getservbyname(name,proto) getservbyname((char*)name,proto) +# define gethostbyname(name) gethostbyname((char*)name) +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# ifdef NO_GETPID +inline int nssgetpid(); +# ifndef NSSGETPID_MACRO +# define NSSGETPID_MACRO +# include +# include + inline int nssgetpid() + { + short phandle[10]={0}; + union pseudo_pid { + struct { + short cpu; + short pin; + } cpu_pin ; + int ppid; + } ppid = { 0 }; + PROCESSHANDLE_GETMINE_(phandle); + PROCESSHANDLE_DECOMPOSE_(phandle, &ppid.cpu_pin.cpu, &ppid.cpu_pin.pin); + return ppid.ppid; + } +# define getpid(a) nssgetpid(a) +# endif /* NSSGETPID_MACRO */ +# endif /* NO_GETPID */ +/*# define setsockopt(a,b,c,d,f) setsockopt(a,b,c,(char*)d,f)*/ +/*# define getsockopt(a,b,c,d,f) getsockopt(a,b,c,(char*)d,f)*/ +/*# define connect(a,b,c) connect(a,(struct sockaddr *)b,c)*/ +/*# define bind(a,b,c) bind(a,(struct sockaddr *)b,c)*/ +/*# define sendto(a,b,c,d,e,f) sendto(a,(char*)b,c,d,(struct sockaddr *)e,f)*/ +# if defined(OPENSSL_THREADS) && !defined(_PUT_MODEL_) + /* + * HPNS SPT threads + */ +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# undef close +# define close spt_close +/* +# define get_last_socket_error() errno +# define clear_socket_error() errno=0 +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# define closesocket(s) close(s) +# define readsocket(s,b,n) read((s),(char*)(b),(n)) +# define writesocket(s,b,n) write((s),(char*)(b),(n) +*/ +# define accept(a,b,c) accept(a,(struct sockaddr *)b,c) +# define recvfrom(a,b,c,d,e,f) recvfrom(a,b,(socklen_t)c,d,e,f) +# endif +# endif + +# ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION +# define CRYPTO_memcmp memcmp +# endif + +# ifndef OPENSSL_NO_SECURE_MEMORY + /* unistd.h defines _POSIX_VERSION */ +# if (defined(OPENSSL_SYS_UNIX) \ + && ( (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) \ + || defined(__sun) || defined(__hpux) || defined(__sgi) \ + || defined(__osf__) )) \ + || defined(_WIN32) + /* secure memory is implemented */ +# else +# define OPENSSL_NO_SECURE_MEMORY +# endif +# endif + +/* + * str[n]casecmp_l is defined in POSIX 2008-01. Value is taken accordingly + * https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html + * There are also equivalent functions on Windows. + * There is no locale_t on NONSTOP. + */ +# if defined(OPENSSL_SYS_WINDOWS) +# define locale_t _locale_t +# define freelocale _free_locale +# define strcasecmp_l _stricmp_l +# define strncasecmp_l _strnicmp_l +# define strcasecmp _stricmp +# define strncasecmp _strnicmp +# elif !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200809L \ + || defined(OPENSSL_SYS_TANDEM) +# ifndef OPENSSL_NO_LOCALE +# define OPENSSL_NO_LOCALE +# endif +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/endian.h b/deps/openssl/android/x86_64/usr/local/include/internal/endian.h new file mode 100644 index 00000000..8b34e03e --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/endian.h @@ -0,0 +1,51 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_ENDIAN_H +# define OSSL_INTERNAL_ENDIAN_H +# pragma once + +/* + * IS_LITTLE_ENDIAN and IS_BIG_ENDIAN can be used to detect the endiannes + * at compile time. To use it, DECLARE_IS_ENDIAN must be used to declare + * a variable. + * + * L_ENDIAN and B_ENDIAN can be used at preprocessor time. They can be set + * in the configarion using the lib_cppflags variable. If neither is + * set, it will fall back to code works with either endianness. + */ + +# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) +# define DECLARE_IS_ENDIAN const int ossl_is_little_endian = __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +# define IS_LITTLE_ENDIAN (ossl_is_little_endian) +# define IS_BIG_ENDIAN (!ossl_is_little_endian) +# if defined(L_ENDIAN) && (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) +# error "L_ENDIAN defined on a big endian machine" +# endif +# if defined(B_ENDIAN) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +# error "B_ENDIAN defined on a little endian machine" +# endif +# if !defined(L_ENDIAN) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +# define L_ENDIAN +# endif +# if !defined(B_ENDIAN) && (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) +# define B_ENDIAN +# endif +# else +# define DECLARE_IS_ENDIAN \ + const union { \ + long one; \ + char little; \ + } ossl_is_endian = { 1 } + +# define IS_LITTLE_ENDIAN (ossl_is_endian.little != 0) +# define IS_BIG_ENDIAN (ossl_is_endian.little == 0) +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/err.h b/deps/openssl/android/x86_64/usr/local/include/internal/err.h index 88dde705..d8a308f0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/err.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/err.h @@ -1,7 +1,7 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_ERR_H # define OSSL_INTERNAL_ERR_H +# pragma once void err_free_strings_int(void); diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/ffc.h b/deps/openssl/android/x86_64/usr/local/include/internal/ffc.h new file mode 100644 index 00000000..c4f09087 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/ffc.h @@ -0,0 +1,216 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_FFC_H +# define OSSL_INTERNAL_FFC_H +# pragma once + +# include +# include +# include +# include /* Uses Error codes from DH */ +# include +# include +# include "internal/sizes.h" + +/* Default value for gindex when canonical generation of g is not used */ +# define FFC_UNVERIFIABLE_GINDEX -1 + +/* The different types of FFC keys */ +# define FFC_PARAM_TYPE_DSA 0 +# define FFC_PARAM_TYPE_DH 1 + +/* + * The mode used by functions that share code for both generation and + * verification. See ossl_ffc_params_FIPS186_4_gen_verify(). + */ +#define FFC_PARAM_MODE_VERIFY 0 +#define FFC_PARAM_MODE_GENERATE 1 + +/* Return codes for generation and validation of FFC parameters */ +#define FFC_PARAM_RET_STATUS_FAILED 0 +#define FFC_PARAM_RET_STATUS_SUCCESS 1 +/* Returned if validating and g is only partially verifiable */ +#define FFC_PARAM_RET_STATUS_UNVERIFIABLE_G 2 + +/* Validation flags */ +# define FFC_PARAM_FLAG_VALIDATE_PQ 0x01 +# define FFC_PARAM_FLAG_VALIDATE_G 0x02 +# define FFC_PARAM_FLAG_VALIDATE_PQG \ + (FFC_PARAM_FLAG_VALIDATE_PQ | FFC_PARAM_FLAG_VALIDATE_G) +#define FFC_PARAM_FLAG_VALIDATE_LEGACY 0x04 + +/* + * NB: These values must align with the equivalently named macros in + * openssl/dh.h. We cannot use those macros here in case DH has been disabled. + */ +# define FFC_CHECK_P_NOT_PRIME 0x00001 +# define FFC_CHECK_P_NOT_SAFE_PRIME 0x00002 +# define FFC_CHECK_UNKNOWN_GENERATOR 0x00004 +# define FFC_CHECK_NOT_SUITABLE_GENERATOR 0x00008 +# define FFC_CHECK_Q_NOT_PRIME 0x00010 +# define FFC_CHECK_INVALID_Q_VALUE 0x00020 +# define FFC_CHECK_INVALID_J_VALUE 0x00040 + +# define FFC_CHECK_BAD_LN_PAIR 0x00080 +# define FFC_CHECK_INVALID_SEED_SIZE 0x00100 +# define FFC_CHECK_MISSING_SEED_OR_COUNTER 0x00200 +# define FFC_CHECK_INVALID_G 0x00400 +# define FFC_CHECK_INVALID_PQ 0x00800 +# define FFC_CHECK_INVALID_COUNTER 0x01000 +# define FFC_CHECK_P_MISMATCH 0x02000 +# define FFC_CHECK_Q_MISMATCH 0x04000 +# define FFC_CHECK_G_MISMATCH 0x08000 +# define FFC_CHECK_COUNTER_MISMATCH 0x10000 + +/* Validation Return codes */ +# define FFC_ERROR_PUBKEY_TOO_SMALL 0x01 +# define FFC_ERROR_PUBKEY_TOO_LARGE 0x02 +# define FFC_ERROR_PUBKEY_INVALID 0x04 +# define FFC_ERROR_NOT_SUITABLE_GENERATOR 0x08 +# define FFC_ERROR_PRIVKEY_TOO_SMALL 0x10 +# define FFC_ERROR_PRIVKEY_TOO_LARGE 0x20 +# define FFC_ERROR_PASSED_NULL_PARAM 0x40 + +/* + * Finite field cryptography (FFC) domain parameters are used by DH and DSA. + * Refer to FIPS186_4 Appendix A & B. + */ +typedef struct ffc_params_st { + /* Primes */ + BIGNUM *p; + BIGNUM *q; + /* Generator */ + BIGNUM *g; + /* DH X9.42 Optional Subgroup factor j >= 2 where p = j * q + 1 */ + BIGNUM *j; + + /* Required for FIPS186_4 validation of p, q and optionally canonical g */ + unsigned char *seed; + /* If this value is zero the hash size is used as the seed length */ + size_t seedlen; + /* Required for FIPS186_4 validation of p and q */ + int pcounter; + int nid; /* The identity of a named group */ + + /* + * Required for FIPS186_4 generation & validation of canonical g. + * It uses unverifiable g if this value is -1. + */ + int gindex; + int h; /* loop counter for unverifiable g */ + + unsigned int flags; + /* + * The digest to use for generation or validation. If this value is NULL, + * then the digest is chosen using the value of N. + */ + const char *mdname; + const char *mdprops; + /* Default key length for known named groups according to RFC7919 */ + int keylength; +} FFC_PARAMS; + +void ossl_ffc_params_init(FFC_PARAMS *params); +void ossl_ffc_params_cleanup(FFC_PARAMS *params); +void ossl_ffc_params_set0_pqg(FFC_PARAMS *params, BIGNUM *p, BIGNUM *q, + BIGNUM *g); +void ossl_ffc_params_get0_pqg(const FFC_PARAMS *params, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +void ossl_ffc_params_set0_j(FFC_PARAMS *d, BIGNUM *j); +int ossl_ffc_params_set_seed(FFC_PARAMS *params, + const unsigned char *seed, size_t seedlen); +void ossl_ffc_params_set_gindex(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_pcounter(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_h(FFC_PARAMS *params, int index); +void ossl_ffc_params_set_flags(FFC_PARAMS *params, unsigned int flags); +void ossl_ffc_params_enable_flags(FFC_PARAMS *params, unsigned int flags, + int enable); +int ossl_ffc_set_digest(FFC_PARAMS *params, const char *alg, const char *props); + +int ossl_ffc_params_set_validate_params(FFC_PARAMS *params, + const unsigned char *seed, + size_t seedlen, int counter); +void ossl_ffc_params_get_validate_params(const FFC_PARAMS *params, + unsigned char **seed, size_t *seedlen, + int *pcounter); + +int ossl_ffc_params_copy(FFC_PARAMS *dst, const FFC_PARAMS *src); +int ossl_ffc_params_cmp(const FFC_PARAMS *a, const FFC_PARAMS *b, int ignore_q); + +#ifndef FIPS_MODULE +int ossl_ffc_params_print(BIO *bp, const FFC_PARAMS *ffc, int indent); +#endif /* FIPS_MODULE */ + + +int ossl_ffc_params_FIPS186_4_generate(OSSL_LIB_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + int *res, BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_generate(OSSL_LIB_CTX *libctx, FFC_PARAMS *params, + int type, size_t L, size_t N, + int *res, BN_GENCB *cb); + +int ossl_ffc_params_FIPS186_4_gen_verify(OSSL_LIB_CTX *libctx, + FFC_PARAMS *params, int mode, int type, + size_t L, size_t N, int *res, + BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_gen_verify(OSSL_LIB_CTX *libctx, + FFC_PARAMS *params, int mode, int type, + size_t L, size_t N, int *res, + BN_GENCB *cb); + +int ossl_ffc_params_simple_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int paramstype, int *res); +int ossl_ffc_params_full_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int paramstype, int *res); +int ossl_ffc_params_FIPS186_4_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int type, int *res, BN_GENCB *cb); +int ossl_ffc_params_FIPS186_2_validate(OSSL_LIB_CTX *libctx, + const FFC_PARAMS *params, + int type, int *res, BN_GENCB *cb); + +int ossl_ffc_generate_private_key(BN_CTX *ctx, const FFC_PARAMS *params, + int N, int s, BIGNUM *priv); + +int ossl_ffc_params_validate_unverifiable_g(BN_CTX *ctx, BN_MONT_CTX *mont, + const BIGNUM *p, const BIGNUM *q, + const BIGNUM *g, BIGNUM *tmp, + int *ret); + +int ossl_ffc_validate_public_key(const FFC_PARAMS *params, + const BIGNUM *pub_key, int *ret); +int ossl_ffc_validate_public_key_partial(const FFC_PARAMS *params, + const BIGNUM *pub_key, int *ret); +int ossl_ffc_validate_private_key(const BIGNUM *upper, const BIGNUM *priv_key, + int *ret); + +int ossl_ffc_params_todata(const FFC_PARAMS *ffc, OSSL_PARAM_BLD *tmpl, + OSSL_PARAM params[]); +int ossl_ffc_params_fromdata(FFC_PARAMS *ffc, const OSSL_PARAM params[]); + +typedef struct dh_named_group_st DH_NAMED_GROUP; +const DH_NAMED_GROUP *ossl_ffc_name_to_dh_named_group(const char *name); +const DH_NAMED_GROUP *ossl_ffc_uid_to_dh_named_group(int uid); +#ifndef OPENSSL_NO_DH +const DH_NAMED_GROUP *ossl_ffc_numbers_to_dh_named_group(const BIGNUM *p, + const BIGNUM *q, + const BIGNUM *g); +#endif +int ossl_ffc_named_group_get_uid(const DH_NAMED_GROUP *group); +const char *ossl_ffc_named_group_get_name(const DH_NAMED_GROUP *); +#ifndef OPENSSL_NO_DH +int ossl_ffc_named_group_get_keylength(const DH_NAMED_GROUP *group); +const BIGNUM *ossl_ffc_named_group_get_q(const DH_NAMED_GROUP *group); +int ossl_ffc_named_group_set(FFC_PARAMS *ffc, const DH_NAMED_GROUP *group); +#endif + +#endif /* OSSL_INTERNAL_FFC_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/ktls.h b/deps/openssl/android/x86_64/usr/local/include/internal/ktls.h new file mode 100644 index 00000000..95492fd0 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/ktls.h @@ -0,0 +1,404 @@ +/* + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#if defined(OPENSSL_SYS_LINUX) +# ifndef OPENSSL_NO_KTLS +# include +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) +# define OPENSSL_NO_KTLS +# ifndef PEDANTIC +# warning "KTLS requires Kernel Headers >= 4.13.0" +# warning "Skipping Compilation of KTLS" +# endif +# endif +# endif +#endif + +#ifndef HEADER_INTERNAL_KTLS +# define HEADER_INTERNAL_KTLS +# pragma once + +# ifndef OPENSSL_NO_KTLS + +# if defined(__FreeBSD__) +# include +# include +# include +# include +# include +# include + +# ifndef TCP_RXTLS_ENABLE +# define OPENSSL_NO_KTLS_RX +# endif +# define OPENSSL_KTLS_AES_GCM_128 +# define OPENSSL_KTLS_AES_GCM_256 +# define OPENSSL_KTLS_TLS13 + +typedef struct tls_enable ktls_crypto_info_t; + +/* + * FreeBSD does not require any additional steps to enable KTLS before + * setting keys. + */ +static ossl_inline int ktls_enable(int fd) +{ + return 1; +} + +/* + * The TCP_TXTLS_ENABLE socket option marks the outgoing socket buffer + * as using TLS. If successful, then data sent using this socket will + * be encrypted and encapsulated in TLS records using the tls_en + * provided here. + * + * The TCP_RXTLS_ENABLE socket option marks the incoming socket buffer + * as using TLS. If successful, then data received for this socket will + * be authenticated and decrypted using the tls_en provided here. + */ +static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *tls_en, int is_tx) +{ + if (is_tx) + return setsockopt(fd, IPPROTO_TCP, TCP_TXTLS_ENABLE, + tls_en, sizeof(*tls_en)) ? 0 : 1; +# ifndef OPENSSL_NO_KTLS_RX + return setsockopt(fd, IPPROTO_TCP, TCP_RXTLS_ENABLE, tls_en, + sizeof(*tls_en)) ? 0 : 1; +# else + return 0; +# endif +} + +/* + * Send a TLS record using the tls_en provided in ktls_start and use + * record_type instead of the default SSL3_RT_APPLICATION_DATA. + * When the socket is non-blocking, then this call either returns EAGAIN or + * the entire record is pushed to TCP. It is impossible to send a partial + * record using this control message. + */ +static ossl_inline int ktls_send_ctrl_message(int fd, unsigned char record_type, + const void *data, size_t length) +{ + struct msghdr msg = { 0 }; + int cmsg_len = sizeof(record_type); + struct cmsghdr *cmsg; + char buf[CMSG_SPACE(cmsg_len)]; + struct iovec msg_iov; /* Vector of data to send/receive into */ + + msg.msg_control = buf; + msg.msg_controllen = sizeof(buf); + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_level = IPPROTO_TCP; + cmsg->cmsg_type = TLS_SET_RECORD_TYPE; + cmsg->cmsg_len = CMSG_LEN(cmsg_len); + *((unsigned char *)CMSG_DATA(cmsg)) = record_type; + msg.msg_controllen = cmsg->cmsg_len; + + msg_iov.iov_base = (void *)data; + msg_iov.iov_len = length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + return sendmsg(fd, &msg, 0); +} + +# ifdef OPENSSL_NO_KTLS_RX + +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + return -1; +} + +# else /* !defined(OPENSSL_NO_KTLS_RX) */ + +/* + * Receive a TLS record using the tls_en provided in ktls_start. The + * kernel strips any explicit IV and authentication tag, but provides + * the TLS record header via a control message. If there is an error + * with the TLS record such as an invalid header, invalid padding, or + * authentication failure recvmsg() will fail with an error. + */ +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + struct msghdr msg = { 0 }; + int cmsg_len = sizeof(struct tls_get_record); + struct tls_get_record *tgr; + struct cmsghdr *cmsg; + char buf[CMSG_SPACE(cmsg_len)]; + struct iovec msg_iov; /* Vector of data to send/receive into */ + int ret; + unsigned char *p = data; + const size_t prepend_length = SSL3_RT_HEADER_LENGTH; + + if (length <= prepend_length) { + errno = EINVAL; + return -1; + } + + msg.msg_control = buf; + msg.msg_controllen = sizeof(buf); + + msg_iov.iov_base = p + prepend_length; + msg_iov.iov_len = length - prepend_length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + ret = recvmsg(fd, &msg, 0); + if (ret <= 0) + return ret; + + if ((msg.msg_flags & (MSG_EOR | MSG_CTRUNC)) != MSG_EOR) { + errno = EMSGSIZE; + return -1; + } + + if (msg.msg_controllen == 0) { + errno = EBADMSG; + return -1; + } + + cmsg = CMSG_FIRSTHDR(&msg); + if (cmsg->cmsg_level != IPPROTO_TCP || cmsg->cmsg_type != TLS_GET_RECORD + || cmsg->cmsg_len != CMSG_LEN(cmsg_len)) { + errno = EBADMSG; + return -1; + } + + tgr = (struct tls_get_record *)CMSG_DATA(cmsg); + p[0] = tgr->tls_type; + p[1] = tgr->tls_vmajor; + p[2] = tgr->tls_vminor; + *(uint16_t *)(p + 3) = htons(ret); + + return ret + prepend_length; +} + +# endif /* OPENSSL_NO_KTLS_RX */ + +/* + * KTLS enables the sendfile system call to send data from a file over + * TLS. + */ +static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, + size_t size, int flags) +{ + off_t sbytes = 0; + int ret; + + ret = sendfile(fd, s, off, size, NULL, &sbytes, flags); + if (ret == -1 && sbytes == 0) + return -1; + return sbytes; +} + +# endif /* __FreeBSD__ */ + +# if defined(OPENSSL_SYS_LINUX) + +# include +# if LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0) +# define OPENSSL_NO_KTLS_RX +# ifndef PEDANTIC +# warning "KTLS requires Kernel Headers >= 4.17.0 for receiving" +# warning "Skipping Compilation of KTLS receive data path" +# endif +# endif +# define OPENSSL_KTLS_AES_GCM_128 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) +# define OPENSSL_KTLS_AES_GCM_256 +# define OPENSSL_KTLS_TLS13 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 2, 0) +# define OPENSSL_KTLS_AES_CCM_128 +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0) +# ifndef OPENSSL_NO_CHACHA +# define OPENSSL_KTLS_CHACHA20_POLY1305 +# endif +# endif +# endif +# endif + +# include +# include +# include +# include +# include +# include + +# ifndef SOL_TLS +# define SOL_TLS 282 +# endif + +# ifndef TCP_ULP +# define TCP_ULP 31 +# endif + +# ifndef TLS_RX +# define TLS_RX 2 +# endif + +struct tls_crypto_info_all { + union { +# ifdef OPENSSL_KTLS_AES_GCM_128 + struct tls12_crypto_info_aes_gcm_128 gcm128; +# endif +# ifdef OPENSSL_KTLS_AES_GCM_256 + struct tls12_crypto_info_aes_gcm_256 gcm256; +# endif +# ifdef OPENSSL_KTLS_AES_CCM_128 + struct tls12_crypto_info_aes_ccm_128 ccm128; +# endif +# ifdef OPENSSL_KTLS_CHACHA20_POLY1305 + struct tls12_crypto_info_chacha20_poly1305 chacha20poly1305; +# endif + }; + size_t tls_crypto_info_len; +}; + +typedef struct tls_crypto_info_all ktls_crypto_info_t; + +/* + * When successful, this socket option doesn't change the behaviour of the + * TCP socket, except changing the TCP setsockopt handler to enable the + * processing of SOL_TLS socket options. All other functionality remains the + * same. + */ +static ossl_inline int ktls_enable(int fd) +{ + return setsockopt(fd, SOL_TCP, TCP_ULP, "tls", sizeof("tls")) ? 0 : 1; +} + +/* + * The TLS_TX socket option changes the send/sendmsg handlers of the TCP socket. + * If successful, then data sent using this socket will be encrypted and + * encapsulated in TLS records using the crypto_info provided here. + * The TLS_RX socket option changes the recv/recvmsg handlers of the TCP socket. + * If successful, then data received using this socket will be decrypted, + * authenticated and decapsulated using the crypto_info provided here. + */ +static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *crypto_info, + int is_tx) +{ + return setsockopt(fd, SOL_TLS, is_tx ? TLS_TX : TLS_RX, + crypto_info, crypto_info->tls_crypto_info_len) ? 0 : 1; +} + +/* + * Send a TLS record using the crypto_info provided in ktls_start and use + * record_type instead of the default SSL3_RT_APPLICATION_DATA. + * When the socket is non-blocking, then this call either returns EAGAIN or + * the entire record is pushed to TCP. It is impossible to send a partial + * record using this control message. + */ +static ossl_inline int ktls_send_ctrl_message(int fd, unsigned char record_type, + const void *data, size_t length) +{ + struct msghdr msg; + int cmsg_len = sizeof(record_type); + struct cmsghdr *cmsg; + union { + struct cmsghdr hdr; + char buf[CMSG_SPACE(sizeof(unsigned char))]; + } cmsgbuf; + struct iovec msg_iov; /* Vector of data to send/receive into */ + + memset(&msg, 0, sizeof(msg)); + msg.msg_control = cmsgbuf.buf; + msg.msg_controllen = sizeof(cmsgbuf.buf); + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_level = SOL_TLS; + cmsg->cmsg_type = TLS_SET_RECORD_TYPE; + cmsg->cmsg_len = CMSG_LEN(cmsg_len); + *((unsigned char *)CMSG_DATA(cmsg)) = record_type; + msg.msg_controllen = cmsg->cmsg_len; + + msg_iov.iov_base = (void *)data; + msg_iov.iov_len = length; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + return sendmsg(fd, &msg, 0); +} + +/* + * KTLS enables the sendfile system call to send data from a file over TLS. + * @flags are ignored on Linux. (placeholder for FreeBSD sendfile) + * */ +static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, size_t size, int flags) +{ + return sendfile(s, fd, &off, size); +} + +# ifdef OPENSSL_NO_KTLS_RX + + +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + return -1; +} + +# else /* !defined(OPENSSL_NO_KTLS_RX) */ + +/* + * Receive a TLS record using the crypto_info provided in ktls_start. + * The kernel strips the TLS record header, IV and authentication tag, + * returning only the plaintext data or an error on failure. + * We add the TLS record header here to satisfy routines in rec_layer_s3.c + */ +static ossl_inline int ktls_read_record(int fd, void *data, size_t length) +{ + struct msghdr msg; + struct cmsghdr *cmsg; + union { + struct cmsghdr hdr; + char buf[CMSG_SPACE(sizeof(unsigned char))]; + } cmsgbuf; + struct iovec msg_iov; + int ret; + unsigned char *p = data; + const size_t prepend_length = SSL3_RT_HEADER_LENGTH; + + if (length < prepend_length + EVP_GCM_TLS_TAG_LEN) { + errno = EINVAL; + return -1; + } + + memset(&msg, 0, sizeof(msg)); + msg.msg_control = cmsgbuf.buf; + msg.msg_controllen = sizeof(cmsgbuf.buf); + + msg_iov.iov_base = p + prepend_length; + msg_iov.iov_len = length - prepend_length - EVP_GCM_TLS_TAG_LEN; + msg.msg_iov = &msg_iov; + msg.msg_iovlen = 1; + + ret = recvmsg(fd, &msg, 0); + if (ret < 0) + return ret; + + if (msg.msg_controllen > 0) { + cmsg = CMSG_FIRSTHDR(&msg); + if (cmsg->cmsg_type == TLS_GET_RECORD_TYPE) { + p[0] = *((unsigned char *)CMSG_DATA(cmsg)); + p[1] = TLS1_2_VERSION_MAJOR; + p[2] = TLS1_2_VERSION_MINOR; + /* returned length is limited to msg_iov.iov_len above */ + p[3] = (ret >> 8) & 0xff; + p[4] = ret & 0xff; + ret += prepend_length; + } + } + + return ret; +} + +# endif /* OPENSSL_NO_KTLS_RX */ + +# endif /* OPENSSL_SYS_LINUX */ +# endif /* OPENSSL_NO_KTLS */ +#endif /* HEADER_INTERNAL_KTLS */ diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/namemap.h b/deps/openssl/android/x86_64/usr/local/include/internal/namemap.h new file mode 100644 index 00000000..fd36883f --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/namemap.h @@ -0,0 +1,41 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "internal/cryptlib.h" + +typedef struct ossl_namemap_st OSSL_NAMEMAP; + +OSSL_NAMEMAP *ossl_namemap_stored(OSSL_LIB_CTX *libctx); + +OSSL_NAMEMAP *ossl_namemap_new(void); +void ossl_namemap_free(OSSL_NAMEMAP *namemap); +int ossl_namemap_empty(OSSL_NAMEMAP *namemap); + +int ossl_namemap_add_name(OSSL_NAMEMAP *namemap, int number, const char *name); + +/* + * The number<->name relationship is 1<->many + * Therefore, the name->number mapping is a simple function, while the + * number->name mapping is an iterator. + */ +int ossl_namemap_name2num(const OSSL_NAMEMAP *namemap, const char *name); +int ossl_namemap_name2num_n(const OSSL_NAMEMAP *namemap, + const char *name, size_t name_len); +const char *ossl_namemap_num2name(const OSSL_NAMEMAP *namemap, int number, + size_t idx); +int ossl_namemap_doall_names(const OSSL_NAMEMAP *namemap, int number, + void (*fn)(const char *name, void *data), + void *data); + +/* + * A utility that handles several names in a string, divided by a given + * separator. + */ +int ossl_namemap_add_names(OSSL_NAMEMAP *namemap, int number, + const char *names, const char separator); diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/nelem.h b/deps/openssl/android/x86_64/usr/local/include/internal/nelem.h index 699ef88e..b758513b 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/nelem.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/nelem.h @@ -1,7 +1,7 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_NELEM_H # define OSSL_INTERNAL_NELEM_H +# pragma once # define OSSL_NELEM(x) (sizeof(x)/sizeof((x)[0])) #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/numbers.h b/deps/openssl/android/x86_64/usr/local/include/internal/numbers.h index f5ade522..4f4d3306 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/numbers.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/numbers.h @@ -1,7 +1,7 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,22 +9,23 @@ #ifndef OSSL_INTERNAL_NUMBERS_H # define OSSL_INTERNAL_NUMBERS_H +# pragma once # include -# if (-1 & 3) == 0x03 /* Two's complement */ +# if (-1 & 3) == 0x03 /* Two's complement */ # define __MAXUINT__(T) ((T) -1) # define __MAXINT__(T) ((T) ((((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)) ^ __MAXUINT__(T))) # define __MININT__(T) (-__MAXINT__(T) - 1) -# elif (-1 & 3) == 0x02 /* One's complement */ +# elif (-1 & 3) == 0x02 /* One's complement */ # define __MAXUINT__(T) (((T) -1) + 1) # define __MAXINT__(T) ((T) ((((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)) ^ __MAXUINT__(T))) # define __MININT__(T) (-__MAXINT__(T)) -# elif (-1 & 3) == 0x01 /* Sign/magnitude */ +# elif (-1 & 3) == 0x01 /* Sign/magnitude */ # define __MAXINT__(T) ((T) (((((T) 1) << ((sizeof(T) * CHAR_BIT) - 2)) - 1) | (((T) 1) << ((sizeof(T) * CHAR_BIT) - 2)))) # define __MAXUINT__(T) ((T) (__MAXINT__(T) | (((T) 1) << ((sizeof(T) * CHAR_BIT) - 1)))) @@ -60,9 +61,25 @@ # define UINT64_MAX __MAXUINT__(uint64_t) # endif +# ifndef INT128_MAX +# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16 +typedef __int128_t int128_t; +typedef __uint128_t uint128_t; +# define INT128_MIN __MININT__(int128_t) +# define INT128_MAX __MAXINT__(int128_t) +# define UINT128_MAX __MAXUINT__(uint128_t) +# endif +# endif + # ifndef SIZE_MAX # define SIZE_MAX __MAXUINT__(size_t) # endif +# ifndef OSSL_INTMAX_MAX +# define OSSL_INTMAX_MIN __MININT__(ossl_intmax_t) +# define OSSL_INTMAX_MAX __MAXINT__(ossl_intmax_t) +# define OSSL_UINTMAX_MAX __MAXUINT__(ossl_uintmax_t) +# endif + #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/o_dir.h b/deps/openssl/android/x86_64/usr/local/include/internal/o_dir.h index dafc8dd2..add34d14 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/o_dir.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/o_dir.h @@ -1,7 +1,7 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -38,6 +38,7 @@ #ifndef OSSL_INTERNAL_O_DIR_H # define OSSL_INTERNAL_O_DIR_H +# pragma once typedef struct OPENSSL_dir_context_st OPENSSL_DIR_CTX; diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/o_str.h b/deps/openssl/android/x86_64/usr/local/include/internal/o_str.h deleted file mode 100644 index 15c12e82..00000000 --- a/deps/openssl/android/x86_64/usr/local/include/internal/o_str.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef OSSL_INTERNAL_O_STR_H -# define OSSL_INTERNAL_O_STR_H - -# include /* to get size_t */ - -int OPENSSL_memcmp(const void *p1, const void *p2, size_t n); - -#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/packet.h b/deps/openssl/android/x86_64/usr/local/include/internal/packet.h new file mode 100644 index 00000000..ed761720 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/packet.h @@ -0,0 +1,937 @@ +/* + * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PACKET_H +# define OSSL_INTERNAL_PACKET_H +# pragma once + +# include +# include +# include +# include +# include + +# include "internal/numbers.h" + +typedef struct { + /* Pointer to where we are currently reading from */ + const unsigned char *curr; + /* Number of bytes remaining */ + size_t remaining; +} PACKET; + +/* Internal unchecked shorthand; don't use outside this file. */ +static ossl_inline void packet_forward(PACKET *pkt, size_t len) +{ + pkt->curr += len; + pkt->remaining -= len; +} + +/* + * Returns the number of bytes remaining to be read in the PACKET + */ +static ossl_inline size_t PACKET_remaining(const PACKET *pkt) +{ + return pkt->remaining; +} + +/* + * Returns a pointer to the first byte after the packet data. + * Useful for integrating with non-PACKET parsing code. + * Specifically, we use PACKET_end() to verify that a d2i_... call + * has consumed the entire packet contents. + */ +static ossl_inline const unsigned char *PACKET_end(const PACKET *pkt) +{ + return pkt->curr + pkt->remaining; +} + +/* + * Returns a pointer to the PACKET's current position. + * For use in non-PACKETized APIs. + */ +static ossl_inline const unsigned char *PACKET_data(const PACKET *pkt) +{ + return pkt->curr; +} + +/* + * Initialise a PACKET with |len| bytes held in |buf|. This does not make a + * copy of the data so |buf| must be present for the whole time that the PACKET + * is being used. + */ +__owur static ossl_inline int PACKET_buf_init(PACKET *pkt, + const unsigned char *buf, + size_t len) +{ + /* Sanity check for negative values. */ + if (len > (size_t)(SIZE_MAX / 2)) + return 0; + + pkt->curr = buf; + pkt->remaining = len; + return 1; +} + +/* Initialize a PACKET to hold zero bytes. */ +static ossl_inline void PACKET_null_init(PACKET *pkt) +{ + pkt->curr = NULL; + pkt->remaining = 0; +} + +/* + * Returns 1 if the packet has length |num| and its contents equal the |num| + * bytes read from |ptr|. Returns 0 otherwise (lengths or contents not equal). + * If lengths are equal, performs the comparison in constant time. + */ +__owur static ossl_inline int PACKET_equal(const PACKET *pkt, const void *ptr, + size_t num) +{ + if (PACKET_remaining(pkt) != num) + return 0; + return CRYPTO_memcmp(pkt->curr, ptr, num) == 0; +} + +/* + * Peek ahead and initialize |subpkt| with the next |len| bytes read from |pkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + */ +__owur static ossl_inline int PACKET_peek_sub_packet(const PACKET *pkt, + PACKET *subpkt, size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + return PACKET_buf_init(subpkt, pkt->curr, len); +} + +/* + * Initialize |subpkt| with the next |len| bytes read from |pkt|. Data is not + * copied: the |subpkt| packet will share its underlying buffer with the + * original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + */ +__owur static ossl_inline int PACKET_get_sub_packet(PACKET *pkt, + PACKET *subpkt, size_t len) +{ + if (!PACKET_peek_sub_packet(pkt, subpkt, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Peek ahead at 2 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_2(const PACKET *pkt, + unsigned int *data) +{ + if (PACKET_remaining(pkt) < 2) + return 0; + + *data = ((unsigned int)(*pkt->curr)) << 8; + *data |= *(pkt->curr + 1); + + return 1; +} + +/* Equivalent of n2s */ +/* Get 2 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_2(PACKET *pkt, unsigned int *data) +{ + if (!PACKET_peek_net_2(pkt, data)) + return 0; + + packet_forward(pkt, 2); + + return 1; +} + +/* Same as PACKET_get_net_2() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_2_len(PACKET *pkt, size_t *data) +{ + unsigned int i; + int ret = PACKET_get_net_2(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 3 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_3(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 3) + return 0; + + *data = ((unsigned long)(*pkt->curr)) << 16; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 8; + *data |= *(pkt->curr + 2); + + return 1; +} + +/* Equivalent of n2l3 */ +/* Get 3 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_3(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_net_3(pkt, data)) + return 0; + + packet_forward(pkt, 3); + + return 1; +} + +/* Same as PACKET_get_net_3() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_3_len(PACKET *pkt, size_t *data) +{ + unsigned long i; + int ret = PACKET_get_net_3(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 4 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_4(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 4) + return 0; + + *data = ((unsigned long)(*pkt->curr)) << 24; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 16; + *data |= ((unsigned long)(*(pkt->curr + 2))) << 8; + *data |= *(pkt->curr + 3); + + return 1; +} + +/* + * Peek ahead at 8 bytes in network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_peek_net_8(const PACKET *pkt, + uint64_t *data) +{ + if (PACKET_remaining(pkt) < 8) + return 0; + + *data = ((uint64_t)(*pkt->curr)) << 56; + *data |= ((uint64_t)(*(pkt->curr + 1))) << 48; + *data |= ((uint64_t)(*(pkt->curr + 2))) << 40; + *data |= ((uint64_t)(*(pkt->curr + 3))) << 32; + *data |= ((uint64_t)(*(pkt->curr + 4))) << 24; + *data |= ((uint64_t)(*(pkt->curr + 5))) << 16; + *data |= ((uint64_t)(*(pkt->curr + 6))) << 8; + *data |= *(pkt->curr + 7); + + return 1; +} + +/* Equivalent of n2l */ +/* Get 4 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_4(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_net_4(pkt, data)) + return 0; + + packet_forward(pkt, 4); + + return 1; +} + +/* Same as PACKET_get_net_4() but for a size_t */ +__owur static ossl_inline int PACKET_get_net_4_len(PACKET *pkt, size_t *data) +{ + unsigned long i; + int ret = PACKET_get_net_4(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* Get 8 bytes in network order from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_net_8(PACKET *pkt, uint64_t *data) +{ + if (!PACKET_peek_net_8(pkt, data)) + return 0; + + packet_forward(pkt, 8); + + return 1; +} + +/* Peek ahead at 1 byte from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_peek_1(const PACKET *pkt, + unsigned int *data) +{ + if (!PACKET_remaining(pkt)) + return 0; + + *data = *pkt->curr; + + return 1; +} + +/* Get 1 byte from |pkt| and store the value in |*data| */ +__owur static ossl_inline int PACKET_get_1(PACKET *pkt, unsigned int *data) +{ + if (!PACKET_peek_1(pkt, data)) + return 0; + + packet_forward(pkt, 1); + + return 1; +} + +/* Same as PACKET_get_1() but for a size_t */ +__owur static ossl_inline int PACKET_get_1_len(PACKET *pkt, size_t *data) +{ + unsigned int i; + int ret = PACKET_get_1(pkt, &i); + + if (ret) + *data = (size_t)i; + + return ret; +} + +/* + * Peek ahead at 4 bytes in reverse network order from |pkt| and store the value + * in |*data| + */ +__owur static ossl_inline int PACKET_peek_4(const PACKET *pkt, + unsigned long *data) +{ + if (PACKET_remaining(pkt) < 4) + return 0; + + *data = *pkt->curr; + *data |= ((unsigned long)(*(pkt->curr + 1))) << 8; + *data |= ((unsigned long)(*(pkt->curr + 2))) << 16; + *data |= ((unsigned long)(*(pkt->curr + 3))) << 24; + + return 1; +} + +/* Equivalent of c2l */ +/* + * Get 4 bytes in reverse network order from |pkt| and store the value in + * |*data| + */ +__owur static ossl_inline int PACKET_get_4(PACKET *pkt, unsigned long *data) +{ + if (!PACKET_peek_4(pkt, data)) + return 0; + + packet_forward(pkt, 4); + + return 1; +} + +/* + * Peek ahead at |len| bytes from the |pkt| and store a pointer to them in + * |*data|. This just points at the underlying buffer that |pkt| is using. The + * caller should not free this data directly (it will be freed when the + * underlying buffer gets freed + */ +__owur static ossl_inline int PACKET_peek_bytes(const PACKET *pkt, + const unsigned char **data, + size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + *data = pkt->curr; + + return 1; +} + +/* + * Read |len| bytes from the |pkt| and store a pointer to them in |*data|. This + * just points at the underlying buffer that |pkt| is using. The caller should + * not free this data directly (it will be freed when the underlying buffer gets + * freed + */ +__owur static ossl_inline int PACKET_get_bytes(PACKET *pkt, + const unsigned char **data, + size_t len) +{ + if (!PACKET_peek_bytes(pkt, data, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* Peek ahead at |len| bytes from |pkt| and copy them to |data| */ +__owur static ossl_inline int PACKET_peek_copy_bytes(const PACKET *pkt, + unsigned char *data, + size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + memcpy(data, pkt->curr, len); + + return 1; +} + +/* + * Read |len| bytes from |pkt| and copy them to |data|. + * The caller is responsible for ensuring that |data| can hold |len| bytes. + */ +__owur static ossl_inline int PACKET_copy_bytes(PACKET *pkt, + unsigned char *data, size_t len) +{ + if (!PACKET_peek_copy_bytes(pkt, data, len)) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Copy packet data to |dest|, and set |len| to the number of copied bytes. + * If the packet has more than |dest_len| bytes, nothing is copied. + * Returns 1 if the packet data fits in |dest_len| bytes, 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing + * done with a given PACKET). + */ +__owur static ossl_inline int PACKET_copy_all(const PACKET *pkt, + unsigned char *dest, + size_t dest_len, size_t *len) +{ + if (PACKET_remaining(pkt) > dest_len) { + *len = 0; + return 0; + } + *len = pkt->remaining; + memcpy(dest, pkt->curr, pkt->remaining); + return 1; +} + +/* + * Copy |pkt| bytes to a newly allocated buffer and store a pointer to the + * result in |*data|, and the length in |len|. + * If |*data| is not NULL, the old data is OPENSSL_free'd. + * If the packet is empty, or malloc fails, |*data| will be set to NULL. + * Returns 1 if the malloc succeeds and 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing + * done with a given PACKET). + */ +__owur static ossl_inline int PACKET_memdup(const PACKET *pkt, + unsigned char **data, size_t *len) +{ + size_t length; + + OPENSSL_free(*data); + *data = NULL; + *len = 0; + + length = PACKET_remaining(pkt); + + if (length == 0) + return 1; + + *data = OPENSSL_memdup(pkt->curr, length); + if (*data == NULL) + return 0; + + *len = length; + return 1; +} + +/* + * Read a C string from |pkt| and copy to a newly allocated, NUL-terminated + * buffer. Store a pointer to the result in |*data|. + * If |*data| is not NULL, the old data is OPENSSL_free'd. + * If the data in |pkt| does not contain a NUL-byte, the entire data is + * copied and NUL-terminated. + * Returns 1 if the malloc succeeds and 0 otherwise. + * Does not forward PACKET position (because it is typically the last thing done + * with a given PACKET). + */ +__owur static ossl_inline int PACKET_strndup(const PACKET *pkt, char **data) +{ + OPENSSL_free(*data); + + /* This will succeed on an empty packet, unless pkt->curr == NULL. */ + *data = OPENSSL_strndup((const char *)pkt->curr, PACKET_remaining(pkt)); + return (*data != NULL); +} + +/* Returns 1 if |pkt| contains at least one 0-byte, 0 otherwise. */ +static ossl_inline int PACKET_contains_zero_byte(const PACKET *pkt) +{ + return memchr(pkt->curr, 0, pkt->remaining) != NULL; +} + +/* Move the current reading position forward |len| bytes */ +__owur static ossl_inline int PACKET_forward(PACKET *pkt, size_t len) +{ + if (PACKET_remaining(pkt) < len) + return 0; + + packet_forward(pkt, len); + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a one-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_1(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_1(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Like PACKET_get_length_prefixed_1, but additionally, fails when there are + * leftover bytes in |pkt|. + */ +__owur static ossl_inline int PACKET_as_length_prefixed_1(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_1(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length) || + PACKET_remaining(&tmp) != 0) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a two-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_2(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + + if (!PACKET_get_net_2(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Like PACKET_get_length_prefixed_2, but additionally, fails when there are + * leftover bytes in |pkt|. + */ +__owur static ossl_inline int PACKET_as_length_prefixed_2(PACKET *pkt, + PACKET *subpkt) +{ + unsigned int length; + const unsigned char *data; + PACKET tmp = *pkt; + + if (!PACKET_get_net_2(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length) || + PACKET_remaining(&tmp) != 0) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* + * Reads a variable-length vector prefixed with a three-byte length, and stores + * the contents in |subpkt|. |pkt| can equal |subpkt|. + * Data is not copied: the |subpkt| packet will share its underlying buffer with + * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|. + * Upon failure, the original |pkt| and |subpkt| are not modified. + */ +__owur static ossl_inline int PACKET_get_length_prefixed_3(PACKET *pkt, + PACKET *subpkt) +{ + unsigned long length; + const unsigned char *data; + PACKET tmp = *pkt; + if (!PACKET_get_net_3(&tmp, &length) || + !PACKET_get_bytes(&tmp, &data, (size_t)length)) { + return 0; + } + + *pkt = tmp; + subpkt->curr = data; + subpkt->remaining = length; + + return 1; +} + +/* Writeable packets */ + +typedef struct wpacket_sub WPACKET_SUB; +struct wpacket_sub { + /* The parent WPACKET_SUB if we have one or NULL otherwise */ + WPACKET_SUB *parent; + + /* + * Offset into the buffer where the length of this WPACKET goes. We use an + * offset in case the buffer grows and gets reallocated. + */ + size_t packet_len; + + /* Number of bytes in the packet_len or 0 if we don't write the length */ + size_t lenbytes; + + /* Number of bytes written to the buf prior to this packet starting */ + size_t pwritten; + + /* Flags for this sub-packet */ + unsigned int flags; +}; + +typedef struct wpacket_st WPACKET; +struct wpacket_st { + /* The buffer where we store the output data */ + BUF_MEM *buf; + + /* Fixed sized buffer which can be used as an alternative to buf */ + unsigned char *staticbuf; + + /* + * Offset into the buffer where we are currently writing. We use an offset + * in case the buffer grows and gets reallocated. + */ + size_t curr; + + /* Number of bytes written so far */ + size_t written; + + /* Maximum number of bytes we will allow to be written to this WPACKET */ + size_t maxsize; + + /* Our sub-packets (always at least one if not finished) */ + WPACKET_SUB *subs; + + /* Writing from the end first? */ + unsigned int endfirst : 1; +}; + +/* Flags */ + +/* Default */ +#define WPACKET_FLAGS_NONE 0 + +/* Error on WPACKET_close() if no data written to the WPACKET */ +#define WPACKET_FLAGS_NON_ZERO_LENGTH 1 + +/* + * Abandon all changes on WPACKET_close() if no data written to the WPACKET, + * i.e. this does not write out a zero packet length + */ +#define WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH 2 + + +/* + * Initialise a WPACKET with the buffer in |buf|. The buffer must exist + * for the whole time that the WPACKET is being used. Additionally |lenbytes| of + * data is preallocated at the start of the buffer to store the length of the + * WPACKET once we know it. + */ +int WPACKET_init_len(WPACKET *pkt, BUF_MEM *buf, size_t lenbytes); + +/* + * Same as WPACKET_init_len except there is no preallocation of the WPACKET + * length. + */ +int WPACKET_init(WPACKET *pkt, BUF_MEM *buf); + +/* + * Same as WPACKET_init_len except there is no underlying buffer. No data is + * ever actually written. We just keep track of how much data would have been + * written if a buffer was there. + */ +int WPACKET_init_null(WPACKET *pkt, size_t lenbytes); + +/* + * Same as WPACKET_init_null except we set the WPACKET to assume DER length + * encoding for sub-packets. + */ +int WPACKET_init_null_der(WPACKET *pkt); + +/* + * Same as WPACKET_init_len except we do not use a growable BUF_MEM structure. + * A fixed buffer of memory |buf| of size |len| is used instead. A failure will + * occur if you attempt to write beyond the end of the buffer + */ +int WPACKET_init_static_len(WPACKET *pkt, unsigned char *buf, size_t len, + size_t lenbytes); + +/* + * Same as WPACKET_init_static_len except lenbytes is always 0, and we set the + * WPACKET to write to the end of the buffer moving towards the start and use + * DER length encoding for sub-packets. + */ +int WPACKET_init_der(WPACKET *pkt, unsigned char *buf, size_t len); + +/* + * Set the flags to be applied to the current sub-packet + */ +int WPACKET_set_flags(WPACKET *pkt, unsigned int flags); + +/* + * Closes the most recent sub-packet. It also writes out the length of the + * packet to the required location (normally the start of the WPACKET) if + * appropriate. The top level WPACKET should be closed using WPACKET_finish() + * instead of this function. + */ +int WPACKET_close(WPACKET *pkt); + +/* + * The same as WPACKET_close() but only for the top most WPACKET. Additionally + * frees memory resources for this WPACKET. + */ +int WPACKET_finish(WPACKET *pkt); + +/* + * Iterate through all the sub-packets and write out their lengths as if they + * were being closed. The lengths will be overwritten with the final lengths + * when the sub-packets are eventually closed (which may be different if more + * data is added to the WPACKET). This function fails if a sub-packet is of 0 + * length and WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH is set. + */ +int WPACKET_fill_lengths(WPACKET *pkt); + +/* + * Initialise a new sub-packet. Additionally |lenbytes| of data is preallocated + * at the start of the sub-packet to store its length once we know it. Don't + * call this directly. Use the convenience macros below instead. + */ +int WPACKET_start_sub_packet_len__(WPACKET *pkt, size_t lenbytes); + +/* + * Convenience macros for calling WPACKET_start_sub_packet_len with different + * lengths + */ +#define WPACKET_start_sub_packet_u8(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 1) +#define WPACKET_start_sub_packet_u16(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 2) +#define WPACKET_start_sub_packet_u24(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 3) +#define WPACKET_start_sub_packet_u32(pkt) \ + WPACKET_start_sub_packet_len__((pkt), 4) + +/* + * Same as WPACKET_start_sub_packet_len__() except no bytes are pre-allocated + * for the sub-packet length. + */ +int WPACKET_start_sub_packet(WPACKET *pkt); + +/* + * Allocate bytes in the WPACKET for the output. This reserves the bytes + * and counts them as "written", but doesn't actually do the writing. A pointer + * to the allocated bytes is stored in |*allocbytes|. |allocbytes| may be NULL. + * WARNING: the allocated bytes must be filled in immediately, without further + * WPACKET_* calls. If not then the underlying buffer may be realloc'd and + * change its location. + */ +int WPACKET_allocate_bytes(WPACKET *pkt, size_t len, + unsigned char **allocbytes); + +/* + * The same as WPACKET_allocate_bytes() except additionally a new sub-packet is + * started for the allocated bytes, and then closed immediately afterwards. The + * number of length bytes for the sub-packet is in |lenbytes|. Don't call this + * directly. Use the convenience macros below instead. + */ +int WPACKET_sub_allocate_bytes__(WPACKET *pkt, size_t len, + unsigned char **allocbytes, size_t lenbytes); + +/* + * Convenience macros for calling WPACKET_sub_allocate_bytes with different + * lengths + */ +#define WPACKET_sub_allocate_bytes_u8(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 1) +#define WPACKET_sub_allocate_bytes_u16(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 2) +#define WPACKET_sub_allocate_bytes_u24(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 3) +#define WPACKET_sub_allocate_bytes_u32(pkt, len, bytes) \ + WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 4) + +/* + * The same as WPACKET_allocate_bytes() except the reserved bytes are not + * actually counted as written. Typically this will be for when we don't know + * how big arbitrary data is going to be up front, but we do know what the + * maximum size will be. If this function is used, then it should be immediately + * followed by a WPACKET_allocate_bytes() call before any other WPACKET + * functions are called (unless the write to the allocated bytes is abandoned). + * + * For example: If we are generating a signature, then the size of that + * signature may not be known in advance. We can use WPACKET_reserve_bytes() to + * handle this: + * + * if (!WPACKET_sub_reserve_bytes_u16(&pkt, EVP_PKEY_get_size(pkey), &sigbytes1) + * || EVP_SignFinal(md_ctx, sigbytes1, &siglen, pkey) <= 0 + * || !WPACKET_sub_allocate_bytes_u16(&pkt, siglen, &sigbytes2) + * || sigbytes1 != sigbytes2) + * goto err; + */ +int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes); + +/* + * The "reserve_bytes" equivalent of WPACKET_sub_allocate_bytes__() + */ +int WPACKET_sub_reserve_bytes__(WPACKET *pkt, size_t len, + unsigned char **allocbytes, size_t lenbytes); + +/* + * Convenience macros for WPACKET_sub_reserve_bytes with different lengths + */ +#define WPACKET_sub_reserve_bytes_u8(pkt, len, bytes) \ + WPACKET_reserve_bytes__((pkt), (len), (bytes), 1) +#define WPACKET_sub_reserve_bytes_u16(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 2) +#define WPACKET_sub_reserve_bytes_u24(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 3) +#define WPACKET_sub_reserve_bytes_u32(pkt, len, bytes) \ + WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 4) + +/* + * Write the value stored in |val| into the WPACKET. The value will consume + * |bytes| amount of storage. An error will occur if |val| cannot be + * accommodated in |bytes| storage, e.g. attempting to write the value 256 into + * 1 byte will fail. Don't call this directly. Use the convenience macros below + * instead. + */ +int WPACKET_put_bytes__(WPACKET *pkt, uint64_t val, size_t bytes); + +/* + * Convenience macros for calling WPACKET_put_bytes with different + * lengths + */ +#define WPACKET_put_bytes_u8(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 1) +#define WPACKET_put_bytes_u16(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 2) +#define WPACKET_put_bytes_u24(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 3) +#define WPACKET_put_bytes_u32(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 4) +#define WPACKET_put_bytes_u64(pkt, val) \ + WPACKET_put_bytes__((pkt), (val), 8) + +/* Set a maximum size that we will not allow the WPACKET to grow beyond */ +int WPACKET_set_max_size(WPACKET *pkt, size_t maxsize); + +/* Copy |len| bytes of data from |*src| into the WPACKET. */ +int WPACKET_memcpy(WPACKET *pkt, const void *src, size_t len); + +/* Set |len| bytes of data to |ch| into the WPACKET. */ +int WPACKET_memset(WPACKET *pkt, int ch, size_t len); + +/* + * Copy |len| bytes of data from |*src| into the WPACKET and prefix with its + * length (consuming |lenbytes| of data for the length). Don't call this + * directly. Use the convenience macros below instead. + */ +int WPACKET_sub_memcpy__(WPACKET *pkt, const void *src, size_t len, + size_t lenbytes); + +/* Convenience macros for calling WPACKET_sub_memcpy with different lengths */ +#define WPACKET_sub_memcpy_u8(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 1) +#define WPACKET_sub_memcpy_u16(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 2) +#define WPACKET_sub_memcpy_u24(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 3) +#define WPACKET_sub_memcpy_u32(pkt, src, len) \ + WPACKET_sub_memcpy__((pkt), (src), (len), 4) + +/* + * Return the total number of bytes written so far to the underlying buffer + * including any storage allocated for length bytes + */ +int WPACKET_get_total_written(WPACKET *pkt, size_t *written); + +/* + * Returns the length of the current sub-packet. This excludes any bytes + * allocated for the length itself. + */ +int WPACKET_get_length(WPACKET *pkt, size_t *len); + +/* + * Returns a pointer to the current write location, but does not allocate any + * bytes. + */ +unsigned char *WPACKET_get_curr(WPACKET *pkt); + +/* Returns true if the underlying buffer is actually NULL */ +int WPACKET_is_null_buf(WPACKET *pkt); + +/* Release resources in a WPACKET if a failure has occurred. */ +void WPACKET_cleanup(WPACKET *pkt); + +#endif /* OSSL_INTERNAL_PACKET_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/param_build_set.h b/deps/openssl/android/x86_64/usr/local/include/internal/param_build_set.h new file mode 100644 index 00000000..126211b7 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/param_build_set.h @@ -0,0 +1,46 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PARAM_BUILD_SET_H +# define OSSL_INTERNAL_PARAM_BUILD_SET_H +# pragma once + +# include +# include +# include "internal/cryptlib.h" + +typedef union { + OSSL_UNION_ALIGN; +} OSSL_PARAM_ALIGNED_BLOCK; + +# define OSSL_PARAM_ALIGN_SIZE sizeof(OSSL_PARAM_ALIGNED_BLOCK) + +size_t ossl_param_bytes_to_blocks(size_t bytes); +void ossl_param_set_secure_block(OSSL_PARAM *last, void *secure_buffer, + size_t secure_buffer_sz); + +int ossl_param_build_set_int(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, int num); +int ossl_param_build_set_long(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, long num); +int ossl_param_build_set_utf8_string(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const char *buf); +int ossl_param_build_set_octet_string(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, + const unsigned char *data, + size_t data_len); +int ossl_param_build_set_bn(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const BIGNUM *bn); +int ossl_param_build_set_bn_pad(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *key, const BIGNUM *bn, size_t sz); +int ossl_param_build_set_multi_key_bn(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, + const char *names[], + STACK_OF(BIGNUM_const) *stk); + +#endif /* OSSL_INTERNAL_PARAM_BUILD_SET_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/passphrase.h b/deps/openssl/android/x86_64/usr/local/include/internal/passphrase.h new file mode 100644 index 00000000..54d997b0 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/passphrase.h @@ -0,0 +1,122 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PASSPHRASE_H +# define OSSL_INTERNAL_PASSPHRASE_H +# pragma once + +/* + * This is a passphrase reader bridge with bells and whistles. + * + * On one hand, an API may wish to offer all sorts of passphrase callback + * possibilities to users, or may have to do so for historical reasons. + * On the other hand, that same API may have demands from other interfaces, + * notably from the libcrypto <-> provider interface, which uses + * OSSL_PASSPHRASE_CALLBACK consistently. + * + * The structure and functions below are the fundaments for bridging one + * passphrase callback form to another. + * + * In addition, extra features are included (this may be a growing list): + * + * - password caching. This is to be used by APIs where it's likely + * that the same passphrase may be asked for more than once, but the + * user shouldn't get prompted more than once. For example, this is + * useful for OSSL_DECODER, which may have to use a passphrase while + * trying to find out what input it has. + */ + +/* + * Structure to hold whatever the calling user may specify. This structure + * is intended to be integrated into API specific structures or to be used + * as a local on-stack variable type. Therefore, no functions to allocate + * or freed it on the heap is offered. + */ +struct ossl_passphrase_data_st { + enum { + is_expl_passphrase = 1, /* Explicit passphrase given by user */ + is_pem_password, /* pem_password_cb given by user */ + is_ossl_passphrase, /* OSSL_PASSPHRASE_CALLBACK given by user */ + is_ui_method /* UI_METHOD given by user */ + } type; + union { + struct { + char *passphrase_copy; + size_t passphrase_len; + } expl_passphrase; + + struct { + pem_password_cb *password_cb; + void *password_cbarg; + } pem_password; + + struct { + OSSL_PASSPHRASE_CALLBACK *passphrase_cb; + void *passphrase_cbarg; + } ossl_passphrase; + + struct { + const UI_METHOD *ui_method; + void *ui_method_data; + } ui_method; + } _; + + /*- + * Flags section + */ + + /* Set to indicate that caching should be done */ + unsigned int flag_cache_passphrase:1; + + /*- + * Misc section: caches and other + */ + + char *cached_passphrase; + size_t cached_passphrase_len; +}; + +/* Structure manipulation */ + +void ossl_pw_clear_passphrase_data(struct ossl_passphrase_data_st *data); +void ossl_pw_clear_passphrase_cache(struct ossl_passphrase_data_st *data); + +int ossl_pw_set_passphrase(struct ossl_passphrase_data_st *data, + const unsigned char *passphrase, + size_t passphrase_len); +int ossl_pw_set_pem_password_cb(struct ossl_passphrase_data_st *data, + pem_password_cb *cb, void *cbarg); +int ossl_pw_set_ossl_passphrase_cb(struct ossl_passphrase_data_st *data, + OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg); +int ossl_pw_set_ui_method(struct ossl_passphrase_data_st *data, + const UI_METHOD *ui_method, void *ui_data); + +int ossl_pw_enable_passphrase_caching(struct ossl_passphrase_data_st *data); +int ossl_pw_disable_passphrase_caching(struct ossl_passphrase_data_st *data); + +/* Central function for direct calls */ + +int ossl_pw_get_passphrase(char *pass, size_t pass_size, size_t *pass_len, + const OSSL_PARAM params[], int verify, + struct ossl_passphrase_data_st *data); + +/* Callback functions */ + +/* + * All of these callback expect that the callback argument is a + * struct ossl_passphrase_data_st + */ + +pem_password_cb ossl_pw_pem_password; +pem_password_cb ossl_pw_pvk_password; +/* One callback for encoding (verification prompt) and one for decoding */ +OSSL_PASSPHRASE_CALLBACK ossl_pw_passphrase_callback_enc; +OSSL_PASSPHRASE_CALLBACK ossl_pw_passphrase_callback_dec; + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/property.h b/deps/openssl/android/x86_64/usr/local/include/internal/property.h new file mode 100644 index 00000000..d09274d0 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/property.h @@ -0,0 +1,99 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROPERTY_H +# define OSSL_INTERNAL_PROPERTY_H +# pragma once + +# include "internal/cryptlib.h" + +typedef struct ossl_method_store_st OSSL_METHOD_STORE; +typedef struct ossl_property_list_st OSSL_PROPERTY_LIST; + +typedef enum { + OSSL_PROPERTY_TYPE_STRING, OSSL_PROPERTY_TYPE_NUMBER, + OSSL_PROPERTY_TYPE_VALUE_UNDEFINED +} OSSL_PROPERTY_TYPE; +typedef struct ossl_property_definition_st OSSL_PROPERTY_DEFINITION; + +/* Initialisation */ +int ossl_property_parse_init(OSSL_LIB_CTX *ctx); + +/* Property definition parser */ +OSSL_PROPERTY_LIST *ossl_parse_property(OSSL_LIB_CTX *ctx, const char *defn); +/* Property query parser */ +OSSL_PROPERTY_LIST *ossl_parse_query(OSSL_LIB_CTX *ctx, const char *s, + int create_values); +/* Property checker of query vs definition */ +int ossl_property_match_count(const OSSL_PROPERTY_LIST *query, + const OSSL_PROPERTY_LIST *defn); +int ossl_property_is_enabled(OSSL_LIB_CTX *ctx, const char *property_name, + const OSSL_PROPERTY_LIST *prop_list); +/* Free a parsed property list */ +void ossl_property_free(OSSL_PROPERTY_LIST *p); + +/* Get a property from a property list */ +const OSSL_PROPERTY_DEFINITION * +ossl_property_find_property(const OSSL_PROPERTY_LIST *list, + OSSL_LIB_CTX *libctx, const char *name); +OSSL_PROPERTY_TYPE ossl_property_get_type(const OSSL_PROPERTY_DEFINITION *prop); +const char *ossl_property_get_string_value(OSSL_LIB_CTX *libctx, + const OSSL_PROPERTY_DEFINITION *prop); +int64_t ossl_property_get_number_value(const OSSL_PROPERTY_DEFINITION *prop); + + +/* Implementation store functions */ +OSSL_METHOD_STORE *ossl_method_store_new(OSSL_LIB_CTX *ctx); +void ossl_method_store_free(OSSL_METHOD_STORE *store); + +int ossl_method_lock_store(OSSL_METHOD_STORE *store); +int ossl_method_unlock_store(OSSL_METHOD_STORE *store); + +int ossl_method_store_add(OSSL_METHOD_STORE *store, const OSSL_PROVIDER *prov, + int nid, const char *properties, void *method, + int (*method_up_ref)(void *), + void (*method_destruct)(void *)); +int ossl_method_store_remove(OSSL_METHOD_STORE *store, int nid, + const void *method); +void ossl_method_store_do_all(OSSL_METHOD_STORE *store, + void (*fn)(int id, void *method, void *fnarg), + void *fnarg); +int ossl_method_store_fetch(OSSL_METHOD_STORE *store, + int nid, const char *prop_query, + const OSSL_PROVIDER **prov, void **method); +int ossl_method_store_remove_all_provided(OSSL_METHOD_STORE *store, + const OSSL_PROVIDER *prov); + +/* Get the global properties associate with the specified library context */ +OSSL_PROPERTY_LIST **ossl_ctx_global_properties(OSSL_LIB_CTX *ctx, + int loadconfig); + +/* property query cache functions */ +int ossl_method_store_cache_get(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov, + int nid, const char *prop_query, void **result); +int ossl_method_store_cache_set(OSSL_METHOD_STORE *store, OSSL_PROVIDER *prov, + int nid, const char *prop_query, void *result, + int (*method_up_ref)(void *), + void (*method_destruct)(void *)); + +__owur int ossl_method_store_cache_flush_all(OSSL_METHOD_STORE *store); + +/* Merge two property queries together */ +OSSL_PROPERTY_LIST *ossl_property_merge(const OSSL_PROPERTY_LIST *a, + const OSSL_PROPERTY_LIST *b); + +size_t ossl_property_list_to_string(OSSL_LIB_CTX *ctx, + const OSSL_PROPERTY_LIST *list, char *buf, + size_t bufsize); + +int ossl_global_properties_no_mirrored(OSSL_LIB_CTX *libctx); +void ossl_global_properties_stop_mirroring(OSSL_LIB_CTX *libctx); + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/propertyerr.h b/deps/openssl/android/x86_64/usr/local/include/internal/propertyerr.h new file mode 100644 index 00000000..fbee53f1 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/propertyerr.h @@ -0,0 +1,43 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROPERTYERR_H +# define OSSL_INTERNAL_PROPERTYERR_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int ossl_err_load_PROP_strings(void); + +/* + * PROP reason codes. + */ +# define PROP_R_NAME_TOO_LONG 100 +# define PROP_R_NOT_AN_ASCII_CHARACTER 101 +# define PROP_R_NOT_AN_HEXADECIMAL_DIGIT 102 +# define PROP_R_NOT_AN_IDENTIFIER 103 +# define PROP_R_NOT_AN_OCTAL_DIGIT 104 +# define PROP_R_NOT_A_DECIMAL_DIGIT 105 +# define PROP_R_NO_MATCHING_STRING_DELIMITER 106 +# define PROP_R_NO_VALUE 107 +# define PROP_R_PARSE_FAILED 108 +# define PROP_R_STRING_TOO_LONG 109 +# define PROP_R_TRAILING_CHARACTERS 110 + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/provider.h b/deps/openssl/android/x86_64/usr/local/include/internal/provider.h new file mode 100644 index 00000000..18937f84 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/provider.h @@ -0,0 +1,119 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_PROVIDER_H +# define OSSL_INTERNAL_PROVIDER_H +# pragma once + +# include +# include +# include "internal/dso.h" +# include "internal/symhacks.h" + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * namespaces: + * + * ossl_provider_ Provider Object internal API + * OSSL_PROVIDER Provider Object + */ + +/* Provider Object finder, constructor and destructor */ +OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name, + int noconfig); +OSSL_PROVIDER *ossl_provider_new(OSSL_LIB_CTX *libctx, const char *name, + OSSL_provider_init_fn *init_function, + int noconfig); +int ossl_provider_up_ref(OSSL_PROVIDER *prov); +void ossl_provider_free(OSSL_PROVIDER *prov); + +/* Setters */ +int ossl_provider_set_module_path(OSSL_PROVIDER *prov, const char *module_path); +int ossl_provider_add_parameter(OSSL_PROVIDER *prov, const char *name, + const char *value); + +int ossl_provider_is_child(const OSSL_PROVIDER *prov); +int ossl_provider_set_child(OSSL_PROVIDER *prov, const OSSL_CORE_HANDLE *handle); +const OSSL_CORE_HANDLE *ossl_provider_get_parent(OSSL_PROVIDER *prov); +int ossl_provider_up_ref_parent(OSSL_PROVIDER *prov, int activate); +int ossl_provider_free_parent(OSSL_PROVIDER *prov, int deactivate); +int ossl_provider_default_props_update(OSSL_LIB_CTX *libctx, const char *props); + +/* Disable fallback loading */ +int ossl_provider_disable_fallback_loading(OSSL_LIB_CTX *libctx); + +/* + * Activate the Provider + * If the Provider is a module, the module will be loaded + */ +int ossl_provider_activate(OSSL_PROVIDER *prov, int upcalls, int aschild); +int ossl_provider_deactivate(OSSL_PROVIDER *prov, int removechildren); +int ossl_provider_add_to_store(OSSL_PROVIDER *prov, OSSL_PROVIDER **actualprov, + int retain_fallbacks); + +/* Return pointer to the provider's context */ +void *ossl_provider_ctx(const OSSL_PROVIDER *prov); + +/* Iterate over all loaded providers */ +int ossl_provider_doall_activated(OSSL_LIB_CTX *, + int (*cb)(OSSL_PROVIDER *provider, + void *cbdata), + void *cbdata); + +/* Getters for other library functions */ +const char *ossl_provider_name(const OSSL_PROVIDER *prov); +const DSO *ossl_provider_dso(const OSSL_PROVIDER *prov); +const char *ossl_provider_module_name(const OSSL_PROVIDER *prov); +const char *ossl_provider_module_path(const OSSL_PROVIDER *prov); +void *ossl_provider_prov_ctx(const OSSL_PROVIDER *prov); +const OSSL_DISPATCH *ossl_provider_get0_dispatch(const OSSL_PROVIDER *prov); +OSSL_LIB_CTX *ossl_provider_libctx(const OSSL_PROVIDER *prov); + +/* Thin wrappers around calls to the provider */ +void ossl_provider_teardown(const OSSL_PROVIDER *prov); +const OSSL_PARAM *ossl_provider_gettable_params(const OSSL_PROVIDER *prov); +int ossl_provider_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]); +int ossl_provider_get_capabilities(const OSSL_PROVIDER *prov, + const char *capability, + OSSL_CALLBACK *cb, + void *arg); +int ossl_provider_self_test(const OSSL_PROVIDER *prov); +const OSSL_ALGORITHM *ossl_provider_query_operation(const OSSL_PROVIDER *prov, + int operation_id, + int *no_cache); +void ossl_provider_unquery_operation(const OSSL_PROVIDER *prov, + int operation_id, + const OSSL_ALGORITHM *algs); + +/* + * Cache of bits to see if we already added methods for an operation in + * the "permanent" method store. + * They should never be called for temporary method stores! + */ +int ossl_provider_set_operation_bit(OSSL_PROVIDER *provider, size_t bitnum); +int ossl_provider_test_operation_bit(OSSL_PROVIDER *provider, size_t bitnum, + int *result); + +/* Configuration */ +void ossl_provider_add_conf_module(void); + +/* Child providers */ +int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx, + const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +void ossl_provider_deinit_child(OSSL_LIB_CTX *ctx); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/refcount.h b/deps/openssl/android/x86_64/usr/local/include/internal/refcount.h index 8fb536ea..3392d3b4 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/refcount.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/refcount.h @@ -1,35 +1,34 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #ifndef OSSL_INTERNAL_REFCOUNT_H # define OSSL_INTERNAL_REFCOUNT_H +# pragma once -/* Used to checking reference counts, most while doing perl5 stuff :-) */ -# if defined(OPENSSL_NO_STDIO) -# if defined(REF_PRINT) -# error "REF_PRINT requires stdio" +# include +# include + +# if defined(OPENSSL_THREADS) && !defined(OPENSSL_DEV_NO_ATOMICS) +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ + && !defined(__STDC_NO_ATOMICS__) +# include +# define HAVE_C11_ATOMICS # endif -# endif -# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ - && !defined(__STDC_NO_ATOMICS__) -# include -# define HAVE_C11_ATOMICS -# endif +# if defined(HAVE_C11_ATOMICS) && defined(ATOMIC_INT_LOCK_FREE) \ + && ATOMIC_INT_LOCK_FREE > 0 -# if defined(HAVE_C11_ATOMICS) && defined(ATOMIC_INT_LOCK_FREE) \ - && ATOMIC_INT_LOCK_FREE > 0 - -# define HAVE_ATOMICS 1 +# define HAVE_ATOMICS 1 typedef _Atomic int CRYPTO_REF_COUNT; -static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, void *lock) +static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, + ossl_unused void *lock) { *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1; return 1; @@ -45,7 +44,8 @@ static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, void *lock) * to mutable members doesn't have to be serialized anymore, which would * otherwise imply an acquire fence. Hence conditional acquire fence... */ -static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, void *lock) +static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, + ossl_unused void *lock) { *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1; if (*ret == 0) @@ -53,78 +53,108 @@ static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, void *lock) return 1; } -# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) && __GCC_ATOMIC_INT_LOCK_FREE > 0 +# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) && __GCC_ATOMIC_INT_LOCK_FREE > 0 -# define HAVE_ATOMICS 1 +# define HAVE_ATOMICS 1 typedef int CRYPTO_REF_COUNT; -static __inline__ int CRYPTO_UP_REF(int *val, int *ret, void *lock) +static __inline__ int CRYPTO_UP_REF(int *val, int *ret, ossl_unused void *lock) { *ret = __atomic_fetch_add(val, 1, __ATOMIC_RELAXED) + 1; return 1; } -static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, void *lock) +static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, + ossl_unused void *lock) { *ret = __atomic_fetch_sub(val, 1, __ATOMIC_RELAXED) - 1; if (*ret == 0) __atomic_thread_fence(__ATOMIC_ACQUIRE); return 1; } +# elif defined(__ICL) && defined(_WIN32) +# define HAVE_ATOMICS 1 +typedef volatile int CRYPTO_REF_COUNT; -# elif defined(_MSC_VER) && _MSC_VER>=1200 +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) +{ + *ret = _InterlockedExchangeAdd((void *)val, 1) + 1; + return 1; +} -# define HAVE_ATOMICS 1 +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) +{ + *ret = _InterlockedExchangeAdd((void *)val, -1) - 1; + return 1; +} + +# elif defined(_MSC_VER) && _MSC_VER>=1200 + +# define HAVE_ATOMICS 1 typedef volatile int CRYPTO_REF_COUNT; -# if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) -# include -# if defined(_M_ARM64) && !defined(_ARM_BARRIER_ISH) -# define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH -# endif +# if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) +# include +# if defined(_M_ARM64) && !defined(_ARM_BARRIER_ISH) +# define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH +# endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd_nf(val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd_nf(val, -1) - 1; if (*ret == 0) __dmb(_ARM_BARRIER_ISH); return 1; } -# else -# if !defined(_WIN32_WCE) -# pragma intrinsic(_InterlockedExchangeAdd) # else -# if _WIN32_WCE >= 0x600 - extern long __cdecl _InterlockedExchangeAdd(long volatile*, long); +# if !defined(_WIN32_WCE) +# pragma intrinsic(_InterlockedExchangeAdd) # else - /* under Windows CE we still have old-style Interlocked* functions */ - extern long __cdecl InterlockedExchangeAdd(long volatile*, long); -# define _InterlockedExchangeAdd InterlockedExchangeAdd +# if _WIN32_WCE >= 0x600 + extern long __cdecl _InterlockedExchangeAdd(long volatile*, long); +# else + /* under Windows CE we still have old-style Interlocked* functions */ + extern long __cdecl InterlockedExchangeAdd(long volatile*, long); +# define _InterlockedExchangeAdd InterlockedExchangeAdd +# endif # endif -# endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd(val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, void *lock) +static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, + ossl_unused void *lock) { *ret = _InterlockedExchangeAdd(val, -1) - 1; return 1; } -# endif +# endif -# else +# endif +# endif /* !OPENSSL_DEV_NO_ATOMICS */ + +/* + * All the refcounting implementations above define HAVE_ATOMICS, so if it's + * still undefined here (such as when OPENSSL_DEV_NO_ATOMICS is defined), it + * means we need to implement a fallback. This fallback uses locks. + */ +# ifndef HAVE_ATOMICS typedef int CRYPTO_REF_COUNT; @@ -140,11 +170,9 @@ typedef int CRYPTO_REF_COUNT; # define REF_ASSERT_ISNT(i) # endif -# ifdef REF_PRINT -# define REF_PRINT_COUNT(a, b) \ - fprintf(stderr, "%p:%4d:%s\n", b, b->references, a) -# else -# define REF_PRINT_COUNT(a, b) -# endif +# define REF_PRINT_EX(text, count, object) \ + OSSL_TRACE3(REF_COUNT, "%p:%4d:%s\n", (object), (count), (text)); +# define REF_PRINT_COUNT(text, object) \ + REF_PRINT_EX(text, object->references, (void *)object) #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/sha3.h b/deps/openssl/android/x86_64/usr/local/include/internal/sha3.h new file mode 100644 index 00000000..80ad86e5 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/sha3.h @@ -0,0 +1,54 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* This header can move into provider when legacy support is removed */ +#ifndef OSSL_INTERNAL_SHA3_H +# define OSSL_INTERNAL_SHA3_H +# pragma once + +# include +# include + +# define KECCAK1600_WIDTH 1600 +# define SHA3_MDSIZE(bitlen) (bitlen / 8) +# define KMAC_MDSIZE(bitlen) 2 * (bitlen / 8) +# define SHA3_BLOCKSIZE(bitlen) (KECCAK1600_WIDTH - bitlen * 2) / 8 + +typedef struct keccak_st KECCAK1600_CTX; + +typedef size_t (sha3_absorb_fn)(void *vctx, const void *inp, size_t len); +typedef int (sha3_final_fn)(unsigned char *md, void *vctx); + +typedef struct prov_sha3_meth_st +{ + sha3_absorb_fn *absorb; + sha3_final_fn *final; +} PROV_SHA3_METHOD; + +struct keccak_st { + uint64_t A[5][5]; + size_t block_size; /* cached ctx->digest->block_size */ + size_t md_size; /* output length, variable in XOF */ + size_t bufsz; /* used bytes in below buffer */ + unsigned char buf[KECCAK1600_WIDTH / 8 - 32]; + unsigned char pad; + PROV_SHA3_METHOD meth; +}; + +void ossl_sha3_reset(KECCAK1600_CTX *ctx); +int ossl_sha3_init(KECCAK1600_CTX *ctx, unsigned char pad, size_t bitlen); +int ossl_keccak_kmac_init(KECCAK1600_CTX *ctx, unsigned char pad, + size_t bitlen); +int ossl_sha3_update(KECCAK1600_CTX *ctx, const void *_inp, size_t len); +int ossl_sha3_final(unsigned char *md, KECCAK1600_CTX *ctx); + +size_t SHA3_absorb(uint64_t A[5][5], const unsigned char *inp, size_t len, + size_t r); + +#endif /* OSSL_INTERNAL_SHA3_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/sizes.h b/deps/openssl/android/x86_64/usr/local/include/internal/sizes.h new file mode 100644 index 00000000..f6496c81 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/sizes.h @@ -0,0 +1,22 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_SIZES_H +# define OSSL_INTERNAL_SIZES_H +# pragma once + +/* + * Max sizes used to allocate buffers with a fixed sizes, for example for + * stack allocations, structure fields, ... + */ +# define OSSL_MAX_NAME_SIZE 50 /* Algorithm name */ +# define OSSL_MAX_PROPQUERY_SIZE 256 /* Property query strings */ +# define OSSL_MAX_ALGORITHM_ID_SIZE 256 /* AlgorithmIdentifier DER */ + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/sm3.h b/deps/openssl/android/x86_64/usr/local/include/internal/sm3.h similarity index 56% rename from deps/openssl/android/x86_64/usr/local/include/crypto/sm3.h rename to deps/openssl/android/x86_64/usr/local/include/internal/sm3.h index 97e74603..db1d61f0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/sm3.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/sm3.h @@ -1,15 +1,17 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2017 Ribose Inc. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef OSSL_CRYPTO_SM3_H -# define OSSL_CRYPTO_SM3_H +/* This header can move into provider when legacy support is removed */ +#ifndef OSSL_INTERNAL_SM3_H +# define OSSL_INTERNAL_SM3_H +# pragma once # include @@ -30,10 +32,8 @@ typedef struct SM3state_st { unsigned int num; } SM3_CTX; -int sm3_init(SM3_CTX *c); -int sm3_update(SM3_CTX *c, const void *data, size_t len); -int sm3_final(unsigned char *md, SM3_CTX *c); +int ossl_sm3_init(SM3_CTX *c); +int ossl_sm3_update(SM3_CTX *c, const void *data, size_t len); +int ossl_sm3_final(unsigned char *md, SM3_CTX *c); -void sm3_block_data_order(SM3_CTX *c, const void *p, size_t num); - -#endif +#endif /* OSSL_INTERNAL_SM3_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/sockets.h b/deps/openssl/android/x86_64/usr/local/include/internal/sockets.h index 4fc1aecd..1f5fefcc 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/sockets.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/sockets.h @@ -1,15 +1,17 @@ /* * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ - #ifndef OSSL_INTERNAL_SOCKETS_H # define OSSL_INTERNAL_SOCKETS_H +# pragma once + +# include # if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) # define NO_SYS_PARAM_H @@ -26,6 +28,8 @@ # elif defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) # if defined(__DJGPP__) +# define WATT32 +# define WATT32_NO_OLDIES # include # include # include @@ -73,7 +77,7 @@ struct servent *PASCAL getservbyname(const char *, const char *); # include # else # include -# ifndef NO_SYS_UN_H +# if !defined(NO_SYS_UN_H) && defined(AF_UNIX) && !defined(OPENSSL_NO_UNIX_SOCK) # include # ifndef UNIX_PATH_MAX # define UNIX_PATH_MAX sizeof(((struct sockaddr_un *)NULL)->sun_path) @@ -121,6 +125,15 @@ struct servent *PASCAL getservbyname(const char *, const char *); # endif # endif +/* + * Some platforms define AF_UNIX, but don't support it + */ +# if !defined(OPENSSL_NO_UNIX_SOCK) +# if !defined(AF_UNIX) || defined(NO_SYS_UN_H) +# define OPENSSL_NO_UNIX_SOCK +# endif +# endif + # define get_last_socket_error() errno # define clear_socket_error() errno=0 @@ -132,8 +145,6 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define readsocket(s,b,n) recv((s),(b),(n),0) # define writesocket(s,b,n) send((s),(b),(n),0) # elif defined(__DJGPP__) -# define WATT32 -# define WATT32_NO_OLDIES # define closesocket(s) close_s(s) # define readsocket(s,b,n) read_s(s,b,n) # define writesocket(s,b,n) send(s,b,n,0) @@ -147,6 +158,17 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define closesocket(s) close(s) # define readsocket(s,b,n) read((s),(b),(n)) # define writesocket(s,b,n) write((s),(char *)(b),(n)) +# elif defined(OPENSSL_SYS_TANDEM) +# if defined(OPENSSL_TANDEM_FLOSS) +# include +# define readsocket(s,b,n) floss_read((s),(b),(n)) +# define writesocket(s,b,n) floss_write((s),(b),(n)) +# else +# define readsocket(s,b,n) read((s),(b),(n)) +# define writesocket(s,b,n) write((s),(b),(n)) +# endif +# define ioctlsocket(a,b,c) ioctl(a,b,c) +# define closesocket(s) close(s) # else # define ioctlsocket(a,b,c) ioctl(a,b,c) # define closesocket(s) close(s) @@ -154,4 +176,11 @@ struct servent *PASCAL getservbyname(const char *, const char *); # define writesocket(s,b,n) write((s),(b),(n)) # endif +/* also in apps/include/apps.h */ +# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINCE) +# define openssl_fdset(a, b) FD_SET((unsigned int)(a), b) +# else +# define openssl_fdset(a, b) FD_SET(a, b) +# endif + #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/sslconf.h b/deps/openssl/android/x86_64/usr/local/include/internal/sslconf.h index 92c8941d..fd7f7e33 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/sslconf.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/sslconf.h @@ -1,7 +1,7 @@ /* - * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,6 +9,7 @@ #ifndef OSSL_INTERNAL_SSLCONF_H # define OSSL_INTERNAL_SSLCONF_H +# pragma once typedef struct ssl_conf_cmd_st SSL_CONF_CMD; diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/symhacks.h b/deps/openssl/android/x86_64/usr/local/include/internal/symhacks.h new file mode 100644 index 00000000..33bae51e --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/symhacks.h @@ -0,0 +1,27 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_SYMHACKS_H +# define OSSL_INTERNAL_SYMHACKS_H +# pragma once + +# include + +# if defined(OPENSSL_SYS_VMS) + +/* ossl_provider_gettable_params vs OSSL_PROVIDER_gettable_params */ +# undef ossl_provider_gettable_params +# define ossl_provider_gettable_params ossl_int_prov_gettable_params +/* ossl_provider_get_params vs OSSL_PROVIDER_get_params */ +# undef ossl_provider_get_params +# define ossl_provider_get_params ossl_int_prov_get_params + +# endif + +#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/thread_once.h b/deps/openssl/android/x86_64/usr/local/include/internal/thread_once.h index 8f8aa6e1..d6cb2eee 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/thread_once.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/thread_once.h @@ -1,17 +1,28 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OSSL_INTERNAL_THREAD_ONCE_H +# define OSSL_INTERNAL_THREAD_ONCE_H +# pragma once + +# include +/* + * Initialisation of global data should never happen via "RUN_ONCE" inside the + * FIPS module. Global data should instead always be associated with a specific + * OSSL_LIB_CTX object. In this way data will get cleaned up correctly when the + * module gets unloaded. + */ +# if !defined(FIPS_MODULE) || defined(ALLOW_RUN_ONCE_IN_FIPS) /* * DEFINE_RUN_ONCE: Define an initialiser function that should be run exactly - * once. It takes no arguments and returns and int result (1 for success or + * once. It takes no arguments and returns an int result (1 for success or * 0 for failure). Typical usage might be: * * DEFINE_RUN_ONCE(myinitfunc) @@ -23,7 +34,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE(init) \ +# define DEFINE_RUN_ONCE(init) \ static int init(void); \ int init##_ossl_ret_ = 0; \ void init##_ossl_(void) \ @@ -36,14 +47,14 @@ * DECLARE_RUN_ONCE: Declare an initialiser function that should be run exactly * once that has been defined in another file via DEFINE_RUN_ONCE(). */ -#define DECLARE_RUN_ONCE(init) \ +# define DECLARE_RUN_ONCE(init) \ extern int init##_ossl_ret_; \ void init##_ossl_(void); /* * DEFINE_RUN_ONCE_STATIC: Define an initialiser function that should be run * exactly once. This function will be declared as static within the file. It - * takes no arguments and returns and int result (1 for success or 0 for + * takes no arguments and returns an int result (1 for success or 0 for * failure). Typical usage might be: * * DEFINE_RUN_ONCE_STATIC(myinitfunc) @@ -55,7 +66,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE_STATIC(init) \ +# define DEFINE_RUN_ONCE_STATIC(init) \ static int init(void); \ static int init##_ossl_ret_ = 0; \ static void init##_ossl_(void) \ @@ -96,7 +107,7 @@ * return 0; * } */ -#define DEFINE_RUN_ONCE_STATIC_ALT(initalt, init) \ +# define DEFINE_RUN_ONCE_STATIC_ALT(initalt, init) \ static int initalt(void); \ static void initalt##_ossl_(void) \ { \ @@ -115,7 +126,7 @@ * * (*) by convention, since the init function must return 1 on success. */ -#define RUN_ONCE(once, init) \ +# define RUN_ONCE(once, init) \ (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0) /* @@ -133,5 +144,8 @@ * * (*) by convention, since the init function must return 1 on success. */ -#define RUN_ONCE_ALT(once, initalt, init) \ +# define RUN_ONCE_ALT(once, initalt, init) \ (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0) + +# endif /* FIPS_MODULE */ +#endif /* OSSL_INTERNAL_THREAD_ONCE_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/tlsgroups.h b/deps/openssl/android/x86_64/usr/local/include/internal/tlsgroups.h new file mode 100644 index 00000000..8a35ced1 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/tlsgroups.h @@ -0,0 +1,50 @@ +/* + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_TLSGROUPS_H +# define OSSL_INTERNAL_TLSGROUPS_H +# pragma once + +# define OSSL_TLS_GROUP_ID_sect163k1 0x0001 +# define OSSL_TLS_GROUP_ID_sect163r1 0x0002 +# define OSSL_TLS_GROUP_ID_sect163r2 0x0003 +# define OSSL_TLS_GROUP_ID_sect193r1 0x0004 +# define OSSL_TLS_GROUP_ID_sect193r2 0x0005 +# define OSSL_TLS_GROUP_ID_sect233k1 0x0006 +# define OSSL_TLS_GROUP_ID_sect233r1 0x0007 +# define OSSL_TLS_GROUP_ID_sect239k1 0x0008 +# define OSSL_TLS_GROUP_ID_sect283k1 0x0009 +# define OSSL_TLS_GROUP_ID_sect283r1 0x000A +# define OSSL_TLS_GROUP_ID_sect409k1 0x000B +# define OSSL_TLS_GROUP_ID_sect409r1 0x000C +# define OSSL_TLS_GROUP_ID_sect571k1 0x000D +# define OSSL_TLS_GROUP_ID_sect571r1 0x000E +# define OSSL_TLS_GROUP_ID_secp160k1 0x000F +# define OSSL_TLS_GROUP_ID_secp160r1 0x0010 +# define OSSL_TLS_GROUP_ID_secp160r2 0x0011 +# define OSSL_TLS_GROUP_ID_secp192k1 0x0012 +# define OSSL_TLS_GROUP_ID_secp192r1 0x0013 +# define OSSL_TLS_GROUP_ID_secp224k1 0x0014 +# define OSSL_TLS_GROUP_ID_secp224r1 0x0015 +# define OSSL_TLS_GROUP_ID_secp256k1 0x0016 +# define OSSL_TLS_GROUP_ID_secp256r1 0x0017 +# define OSSL_TLS_GROUP_ID_secp384r1 0x0018 +# define OSSL_TLS_GROUP_ID_secp521r1 0x0019 +# define OSSL_TLS_GROUP_ID_brainpoolP256r1 0x001A +# define OSSL_TLS_GROUP_ID_brainpoolP384r1 0x001B +# define OSSL_TLS_GROUP_ID_brainpoolP512r1 0x001C +# define OSSL_TLS_GROUP_ID_x25519 0x001D +# define OSSL_TLS_GROUP_ID_x448 0x001E +# define OSSL_TLS_GROUP_ID_ffdhe2048 0x0100 +# define OSSL_TLS_GROUP_ID_ffdhe3072 0x0101 +# define OSSL_TLS_GROUP_ID_ffdhe4096 0x0102 +# define OSSL_TLS_GROUP_ID_ffdhe6144 0x0103 +# define OSSL_TLS_GROUP_ID_ffdhe8192 0x0104 + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/tsan_assist.h b/deps/openssl/android/x86_64/usr/local/include/internal/tsan_assist.h index cc30162e..17205d10 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/tsan_assist.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/tsan_assist.h @@ -1,7 +1,7 @@ /* - * Copyright 2018-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2018-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -56,8 +56,7 @@ # define TSAN_QUALIFIER _Atomic # define tsan_load(ptr) atomic_load_explicit((ptr), memory_order_relaxed) # define tsan_store(ptr, val) atomic_store_explicit((ptr), (val), memory_order_relaxed) -# define tsan_counter(ptr) atomic_fetch_add_explicit((ptr), 1, memory_order_relaxed) -# define tsan_decr(ptr) atomic_fetch_add_explicit((ptr), -1, memory_order_relaxed) +# define tsan_add(ptr, n) atomic_fetch_add_explicit((ptr), (n), memory_order_relaxed) # define tsan_ld_acq(ptr) atomic_load_explicit((ptr), memory_order_acquire) # define tsan_st_rel(ptr, val) atomic_store_explicit((ptr), (val), memory_order_release) # endif @@ -69,8 +68,7 @@ # define TSAN_QUALIFIER volatile # define tsan_load(ptr) __atomic_load_n((ptr), __ATOMIC_RELAXED) # define tsan_store(ptr, val) __atomic_store_n((ptr), (val), __ATOMIC_RELAXED) -# define tsan_counter(ptr) __atomic_fetch_add((ptr), 1, __ATOMIC_RELAXED) -# define tsan_decr(ptr) __atomic_fetch_add((ptr), -1, __ATOMIC_RELAXED) +# define tsan_add(ptr, n) __atomic_fetch_add((ptr), (n), __ATOMIC_RELAXED) # define tsan_ld_acq(ptr) __atomic_load_n((ptr), __ATOMIC_ACQUIRE) # define tsan_st_rel(ptr, val) __atomic_store_n((ptr), (val), __ATOMIC_RELEASE) # endif @@ -113,13 +111,10 @@ # pragma intrinsic(_InterlockedExchangeAdd) # ifdef _WIN64 # pragma intrinsic(_InterlockedExchangeAdd64) -# define tsan_counter(ptr) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), 1) \ - : _InterlockedExchangeAdd((ptr), 1)) -# define tsan_decr(ptr) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), -1) \ - : _InterlockedExchangeAdd((ptr), -1)) +# define tsan_add(ptr, n) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), (n)) \ + : _InterlockedExchangeAdd((ptr), (n))) # else -# define tsan_counter(ptr) _InterlockedExchangeAdd((ptr), 1) -# define tsan_decr(ptr) _InterlockedExchangeAdd((ptr), -1) +# define tsan_add(ptr, n) _InterlockedExchangeAdd((ptr), (n)) # endif # if !defined(_ISO_VOLATILE) # define tsan_ld_acq(ptr) (*(ptr)) @@ -130,11 +125,16 @@ #ifndef TSAN_QUALIFIER -# define TSAN_QUALIFIER volatile +# ifdef OPENSSL_THREADS +# define TSAN_QUALIFIER volatile +# define TSAN_REQUIRES_LOCKING +# else /* OPENSSL_THREADS */ +# define TSAN_QUALIFIER +# endif /* OPENSSL_THREADS */ + # define tsan_load(ptr) (*(ptr)) # define tsan_store(ptr, val) (*(ptr) = (val)) -# define tsan_counter(ptr) ((*(ptr))++) -# define tsan_decr(ptr) ((*(ptr))--) +# define tsan_add(ptr, n) (*(ptr) += (n)) /* * Lack of tsan_ld_acq and tsan_ld_rel means that compiler support is not * sophisticated enough to support them. Code that relies on them should be @@ -142,3 +142,7 @@ */ #endif + +#define tsan_counter(ptr) tsan_add((ptr), 1) +#define tsan_decr(ptr) tsan_add((ptr), -1) + diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/unicode.h b/deps/openssl/android/x86_64/usr/local/include/internal/unicode.h new file mode 100644 index 00000000..a6de8352 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/unicode.h @@ -0,0 +1,31 @@ +/* + * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_UNICODE_H +# define OSSL_INTERNAL_UNICODE_H +# pragma once + +typedef enum { + SURROGATE_MIN = 0xd800UL, + SURROGATE_MAX = 0xdfffUL, + UNICODE_MAX = 0x10ffffUL, + UNICODE_LIMIT +} UNICODE_CONSTANTS; + +static ossl_unused ossl_inline int is_unicode_surrogate(unsigned long value) +{ + return value >= SURROGATE_MIN && value <= SURROGATE_MAX; +} + +static ossl_unused ossl_inline int is_unicode_valid(unsigned long value) +{ + return value <= UNICODE_MAX && !is_unicode_surrogate(value); +} + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H b/deps/openssl/android/x86_64/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H index ad0a5f56..d251d0a0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H b/deps/openssl/android/x86_64/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H index 5f5513e8..91ac6b33 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H @@ -1,7 +1,7 @@ /* * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/aes.h b/deps/openssl/android/x86_64/usr/local/include/openssl/aes.h index 245c552a..d0f9dfc6 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/aes.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/aes.h @@ -1,14 +1,20 @@ /* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_AES_H -# define HEADER_AES_H +#ifndef OPENSSL_AES_H +# define OPENSSL_AES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_AES_H +# endif # include @@ -17,72 +23,85 @@ extern "C" { # endif -# define AES_ENCRYPT 1 -# define AES_DECRYPT 0 - -/* - * Because array size can't be a const in C, the following two are macros. - * Both sizes are in bytes. - */ -# define AES_MAXNR 14 # define AES_BLOCK_SIZE 16 +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define AES_ENCRYPT 1 +# define AES_DECRYPT 0 + +# define AES_MAXNR 14 + + /* This should be a hidden type, but EVP requires that the size be known */ struct aes_key_st { -# ifdef AES_LONG +# ifdef AES_LONG unsigned long rd_key[4 * (AES_MAXNR + 1)]; -# else +# else unsigned int rd_key[4 * (AES_MAXNR + 1)]; -# endif +# endif int rounds; }; typedef struct aes_key_st AES_KEY; -const char *AES_options(void); - +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *AES_options(void); +OSSL_DEPRECATEDIN_3_0 int AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 int AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); - +OSSL_DEPRECATEDIN_3_0 void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); +OSSL_DEPRECATEDIN_3_0 void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); - +OSSL_DEPRECATEDIN_3_0 void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); +OSSL_DEPRECATEDIN_3_0 void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num); + /* NB: the IV is _two_ blocks long */ +OSSL_DEPRECATEDIN_3_0 void AES_ige_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); /* NB: the IV is _four_ blocks long */ +OSSL_DEPRECATEDIN_3_0 void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const AES_KEY *key, - const AES_KEY *key2, const unsigned char *ivec, - const int enc); - + size_t length, const AES_KEY *key, const AES_KEY *key2, + const unsigned char *ivec, const int enc); +OSSL_DEPRECATEDIN_3_0 int AES_wrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); + unsigned char *out, const unsigned char *in, + unsigned int inlen); +OSSL_DEPRECATEDIN_3_0 int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, unsigned int inlen); + unsigned char *out, const unsigned char *in, + unsigned int inlen); +# endif # ifdef __cplusplus diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h index 9522eec1..85ae8d58 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h @@ -1,15 +1,29 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/asn1.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1_H -# define HEADER_ASN1_H + +#ifndef OPENSSL_ASN1_H +# define OPENSSL_ASN1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1_H +# endif + +# ifndef OPENSSL_NO_STDIO +# include +# endif # include # include # include @@ -18,10 +32,8 @@ # include # include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif +# include +# include # ifdef OPENSSL_BUILD_SHLIBCRYPTO # undef OPENSSL_EXTERN @@ -115,8 +127,36 @@ extern "C" { # define SMIME_OLDMIME 0x400 # define SMIME_CRLFEOL 0x800 # define SMIME_STREAM 0x1000 - struct X509_algor_st; -DEFINE_STACK_OF(X509_ALGOR) + +/* Stacks for types not otherwise defined in this header */ +SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) +#define sk_X509_ALGOR_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_value(sk, idx) ((X509_ALGOR *)OPENSSL_sk_value(ossl_check_const_X509_ALGOR_sk_type(sk), (idx))) +#define sk_X509_ALGOR_new(cmp) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new(ossl_check_X509_ALGOR_compfunc_type(cmp))) +#define sk_X509_ALGOR_new_null() ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_null()) +#define sk_X509_ALGOR_new_reserve(cmp, n) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_new_reserve(ossl_check_X509_ALGOR_compfunc_type(cmp), (n))) +#define sk_X509_ALGOR_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ALGOR_sk_type(sk), (n)) +#define sk_X509_ALGOR_free(sk) OPENSSL_sk_free(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_delete(sk, i) ((X509_ALGOR *)OPENSSL_sk_delete(ossl_check_X509_ALGOR_sk_type(sk), (i))) +#define sk_X509_ALGOR_delete_ptr(sk, ptr) ((X509_ALGOR *)OPENSSL_sk_delete_ptr(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr))) +#define sk_X509_ALGOR_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_pop(sk) ((X509_ALGOR *)OPENSSL_sk_pop(ossl_check_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_shift(sk) ((X509_ALGOR *)OPENSSL_sk_shift(ossl_check_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ALGOR_sk_type(sk),ossl_check_X509_ALGOR_freefunc_type(freefunc)) +#define sk_X509_ALGOR_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), (idx)) +#define sk_X509_ALGOR_set(sk, idx, ptr) ((X509_ALGOR *)OPENSSL_sk_set(ossl_check_X509_ALGOR_sk_type(sk), (idx), ossl_check_X509_ALGOR_type(ptr))) +#define sk_X509_ALGOR_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr)) +#define sk_X509_ALGOR_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_type(ptr), pnum) +#define sk_X509_ALGOR_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ALGOR_sk_type(sk)) +#define sk_X509_ALGOR_dup(sk) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_dup(ossl_check_const_X509_ALGOR_sk_type(sk))) +#define sk_X509_ALGOR_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ALGOR) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_copyfunc_type(copyfunc), ossl_check_X509_ALGOR_freefunc_type(freefunc))) +#define sk_X509_ALGOR_set_cmp_func(sk, cmp) ((sk_X509_ALGOR_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ALGOR_sk_type(sk), ossl_check_X509_ALGOR_compfunc_type(cmp))) + + # define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ /* @@ -183,15 +223,41 @@ typedef struct ASN1_ENCODING_st { (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) # define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) -typedef struct asn1_string_table_st { +struct asn1_string_table_st { int nid; long minsize; long maxsize; unsigned long mask; unsigned long flags; -} ASN1_STRING_TABLE; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING_TABLE, ASN1_STRING_TABLE, ASN1_STRING_TABLE) +#define sk_ASN1_STRING_TABLE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_value(sk, idx) ((ASN1_STRING_TABLE *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), (idx))) +#define sk_ASN1_STRING_TABLE_new(cmp) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp))) +#define sk_ASN1_STRING_TABLE_new_null() ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_STRING_TABLE_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_TABLE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (n)) +#define sk_ASN1_STRING_TABLE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_delete(sk, i) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (i))) +#define sk_ASN1_STRING_TABLE_delete_ptr(sk, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr))) +#define sk_ASN1_STRING_TABLE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_pop(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_shift(sk) ((ASN1_STRING_TABLE *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_TABLE_sk_type(sk),ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc)) +#define sk_ASN1_STRING_TABLE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), (idx)) +#define sk_ASN1_STRING_TABLE_set(sk, idx, ptr) ((ASN1_STRING_TABLE *)OPENSSL_sk_set(ossl_check_ASN1_STRING_TABLE_sk_type(sk), (idx), ossl_check_ASN1_STRING_TABLE_type(ptr))) +#define sk_ASN1_STRING_TABLE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr)) +#define sk_ASN1_STRING_TABLE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_type(ptr), pnum) +#define sk_ASN1_STRING_TABLE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk)) +#define sk_ASN1_STRING_TABLE_dup(sk) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk))) +#define sk_ASN1_STRING_TABLE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING_TABLE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_TABLE_freefunc_type(freefunc))) +#define sk_ASN1_STRING_TABLE_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_TABLE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_TABLE_sk_type(sk), ossl_check_ASN1_STRING_TABLE_compfunc_type(cmp))) -DEFINE_STACK_OF(ASN1_STRING_TABLE) /* size limits: this stuff is taken straight from RFC2459 */ @@ -214,50 +280,79 @@ typedef struct ASN1_VALUE_st ASN1_VALUE; /* Declare ASN1 functions: the implement macro in in asn1t.h */ -# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ -# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) +# define DECLARE_ASN1_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_FUNCTIONS(type) \ + DECLARE_ASN1_FUNCTIONS_attr(extern, type) -# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) +# define DECLARE_ASN1_ALLOC_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_attr(extern, type) -# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + DECLARE_ASN1_ITEM_attr(attr, itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(extern, type, itname, name) -# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ - type *d2i_##name(type **a, const unsigned char **in, long len); \ - int i2d_##name(const type *a, unsigned char **out); \ - DECLARE_ASN1_ITEM(name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, name, name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_NDEF_FUNCTION(name) \ - int i2d_##name##_NDEF(name *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + attr type *d2i_##name(type **a, const unsigned char **in, long len); \ + attr int i2d_##name(const type *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(extern, type, name) -# define DECLARE_ASN1_FUNCTIONS_const(name) \ - DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ - DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) +# define DECLARE_ASN1_NDEF_FUNCTION_attr(attr, name) \ + attr int i2d_##name##_NDEF(const name *a, unsigned char **out); +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + DECLARE_ASN1_NDEF_FUNCTION_attr(extern, name) -# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ - type *name##_new(void); \ - void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + attr type *name##_new(void); \ + attr void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(extern, type, name) -# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ - DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) +# define DECLARE_ASN1_DUP_FUNCTION_attr(attr, type) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, type) +# define DECLARE_ASN1_DUP_FUNCTION(type) \ + DECLARE_ASN1_DUP_FUNCTION_attr(extern, type) -# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ - const ASN1_PCTX *pctx); +# define DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, name) \ + attr type *name##_dup(const type *a); +# define DECLARE_ASN1_DUP_FUNCTION_name(type, name) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(extern, type, name) + +# define DECLARE_ASN1_PRINT_FUNCTION_attr(attr, stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, stname) +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_attr(extern, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, fname) \ + attr int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx); +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(extern, stname, fname) # define D2I_OF(type) type *(*)(type **,const unsigned char **,long) -# define I2D_OF(type) int (*)(type *,unsigned char **) -# define I2D_OF_const(type) int (*)(const type *,unsigned char **) +# define I2D_OF(type) int (*)(const type *,unsigned char **) # define CHECKED_D2I_OF(type, d2i) \ ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) @@ -271,10 +366,11 @@ typedef struct ASN1_VALUE_st ASN1_VALUE; ((void**) (1 ? p : (type**)0)) # define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) -# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(const type *,unsigned char **) # define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) -TYPEDEF_D2I2D_OF(void); +typedef void *d2i_of_void(void **, const unsigned char **, long); +typedef int i2d_of_void(const void *, unsigned char **); /*- * The following macros and typedefs allow an ASN1_ITEM @@ -312,23 +408,6 @@ TYPEDEF_D2I2D_OF(void); * */ -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* ASN1_ITEM pointer exported type */ -typedef const ASN1_ITEM ASN1_ITEM_EXP; - -/* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr) - -/* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) - -# define ASN1_ITEM_rptr(ref) (&(ref##_it)) - -# define DECLARE_ASN1_ITEM(name) \ - OPENSSL_EXTERN const ASN1_ITEM name##_it; - -# else /* * Platforms that can't easily handle shared global variables are declared as @@ -339,17 +418,17 @@ typedef const ASN1_ITEM ASN1_ITEM_EXP; typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); /* Macro to obtain ASN1_ITEM pointer from exported type */ -# define ASN1_ITEM_ptr(iptr) (iptr()) +# define ASN1_ITEM_ptr(iptr) (iptr()) /* Macro to include ASN1_ITEM pointer from base type */ -# define ASN1_ITEM_ref(iptr) (iptr##_it) +# define ASN1_ITEM_ref(iptr) (iptr##_it) -# define ASN1_ITEM_rptr(ref) (ref##_it()) +# define ASN1_ITEM_rptr(ref) (ref##_it()) -# define DECLARE_ASN1_ITEM(name) \ - const ASN1_ITEM * name##_it(void); - -# endif +# define DECLARE_ASN1_ITEM_attr(attr, name) \ + attr const ASN1_ITEM * name##_it(void); +# define DECLARE_ASN1_ITEM(name) \ + DECLARE_ASN1_ITEM_attr(extern, name) /* Parameters used by ASN1_STRING_print_ex() */ @@ -362,6 +441,11 @@ typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); # define ASN1_STRFLGS_ESC_CTRL 2 # define ASN1_STRFLGS_ESC_MSB 4 +/* Lower 8 bits are reserved as an output type specifier */ +# define ASN1_DTFLGS_TYPE_MASK 0x0FUL +# define ASN1_DTFLGS_RFC822 0x00UL +# define ASN1_DTFLGS_ISO8601 0x01UL + /* * This flag determines how we do escaping: normally RC2253 backslash only, * set this to use backslash and quote. @@ -435,13 +519,8 @@ typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); ASN1_STRFLGS_DUMP_UNKNOWN | \ ASN1_STRFLGS_DUMP_DER) -DEFINE_STACK_OF(ASN1_INTEGER) -DEFINE_STACK_OF(ASN1_GENERALSTRING) - -DEFINE_STACK_OF(ASN1_UTF8STRING) - -typedef struct asn1_type_st { +struct asn1_type_st { int type; union { char *ptr; @@ -470,14 +549,40 @@ typedef struct asn1_type_st { ASN1_STRING *sequence; ASN1_VALUE *asn1_value; } value; -} ASN1_TYPE; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_TYPE, ASN1_TYPE, ASN1_TYPE) +#define sk_ASN1_TYPE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_value(sk, idx) ((ASN1_TYPE *)OPENSSL_sk_value(ossl_check_const_ASN1_TYPE_sk_type(sk), (idx))) +#define sk_ASN1_TYPE_new(cmp) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new(ossl_check_ASN1_TYPE_compfunc_type(cmp))) +#define sk_ASN1_TYPE_new_null() ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_TYPE_new_reserve(cmp, n) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_TYPE_compfunc_type(cmp), (n))) +#define sk_ASN1_TYPE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_TYPE_sk_type(sk), (n)) +#define sk_ASN1_TYPE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_delete(sk, i) ((ASN1_TYPE *)OPENSSL_sk_delete(ossl_check_ASN1_TYPE_sk_type(sk), (i))) +#define sk_ASN1_TYPE_delete_ptr(sk, ptr) ((ASN1_TYPE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr))) +#define sk_ASN1_TYPE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_pop(sk) ((ASN1_TYPE *)OPENSSL_sk_pop(ossl_check_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_shift(sk) ((ASN1_TYPE *)OPENSSL_sk_shift(ossl_check_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_TYPE_sk_type(sk),ossl_check_ASN1_TYPE_freefunc_type(freefunc)) +#define sk_ASN1_TYPE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), (idx)) +#define sk_ASN1_TYPE_set(sk, idx, ptr) ((ASN1_TYPE *)OPENSSL_sk_set(ossl_check_ASN1_TYPE_sk_type(sk), (idx), ossl_check_ASN1_TYPE_type(ptr))) +#define sk_ASN1_TYPE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr)) +#define sk_ASN1_TYPE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_type(ptr), pnum) +#define sk_ASN1_TYPE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_TYPE_sk_type(sk)) +#define sk_ASN1_TYPE_dup(sk) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_TYPE_sk_type(sk))) +#define sk_ASN1_TYPE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_TYPE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_copyfunc_type(copyfunc), ossl_check_ASN1_TYPE_freefunc_type(freefunc))) +#define sk_ASN1_TYPE_set_cmp_func(sk, cmp) ((sk_ASN1_TYPE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_TYPE_sk_type(sk), ossl_check_ASN1_TYPE_compfunc_type(cmp))) -DEFINE_STACK_OF(ASN1_TYPE) typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) /* This is used to contain a list of bit names */ typedef struct BIT_STRING_BITNAME_st { @@ -515,7 +620,8 @@ typedef struct BIT_STRING_BITNAME_st { B_ASN1_BMPSTRING|\ B_ASN1_UTF8STRING -DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) +DECLARE_ASN1_ALLOC_FUNCTIONS_name(ASN1_TYPE, ASN1_TYPE) +DECLARE_ASN1_ENCODE_FUNCTIONS(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) int ASN1_TYPE_get(const ASN1_TYPE *a); void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); @@ -525,21 +631,41 @@ int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); -ASN1_OBJECT *ASN1_OBJECT_new(void); -void ASN1_OBJECT_free(ASN1_OBJECT *a); -int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); -ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, - long length); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_OBJECT, ASN1_OBJECT, ASN1_OBJECT) +#define sk_ASN1_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_value(sk, idx) ((ASN1_OBJECT *)OPENSSL_sk_value(ossl_check_const_ASN1_OBJECT_sk_type(sk), (idx))) +#define sk_ASN1_OBJECT_new(cmp) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new(ossl_check_ASN1_OBJECT_compfunc_type(cmp))) +#define sk_ASN1_OBJECT_new_null() ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_null()) +#define sk_ASN1_OBJECT_new_reserve(cmp, n) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_OBJECT_compfunc_type(cmp), (n))) +#define sk_ASN1_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_OBJECT_sk_type(sk), (n)) +#define sk_ASN1_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_delete(sk, i) ((ASN1_OBJECT *)OPENSSL_sk_delete(ossl_check_ASN1_OBJECT_sk_type(sk), (i))) +#define sk_ASN1_OBJECT_delete_ptr(sk, ptr) ((ASN1_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr))) +#define sk_ASN1_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_pop(sk) ((ASN1_OBJECT *)OPENSSL_sk_pop(ossl_check_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_shift(sk) ((ASN1_OBJECT *)OPENSSL_sk_shift(ossl_check_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_OBJECT_sk_type(sk),ossl_check_ASN1_OBJECT_freefunc_type(freefunc)) +#define sk_ASN1_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), (idx)) +#define sk_ASN1_OBJECT_set(sk, idx, ptr) ((ASN1_OBJECT *)OPENSSL_sk_set(ossl_check_ASN1_OBJECT_sk_type(sk), (idx), ossl_check_ASN1_OBJECT_type(ptr))) +#define sk_ASN1_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr)) +#define sk_ASN1_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_type(ptr), pnum) +#define sk_ASN1_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_OBJECT_sk_type(sk)) +#define sk_ASN1_OBJECT_dup(sk) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_ASN1_OBJECT_sk_type(sk))) +#define sk_ASN1_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_copyfunc_type(copyfunc), ossl_check_ASN1_OBJECT_freefunc_type(freefunc))) +#define sk_ASN1_OBJECT_set_cmp_func(sk, cmp) ((sk_ASN1_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_OBJECT_sk_type(sk), ossl_check_ASN1_OBJECT_compfunc_type(cmp))) -DECLARE_ASN1_ITEM(ASN1_OBJECT) -DEFINE_STACK_OF(ASN1_OBJECT) +DECLARE_ASN1_FUNCTIONS(ASN1_OBJECT) ASN1_STRING *ASN1_STRING_new(void); void ASN1_STRING_free(ASN1_STRING *a); void ASN1_STRING_clear_free(ASN1_STRING *a); int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); -ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); +DECLARE_ASN1_DUP_FUNCTION(ASN1_STRING) ASN1_STRING *ASN1_STRING_type_new(int type); int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); /* @@ -549,9 +675,13 @@ int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); int ASN1_STRING_length(const ASN1_STRING *x); -void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# endif int ASN1_STRING_type(const ASN1_STRING *x); -DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 unsigned char *ASN1_STRING_data(ASN1_STRING *x); +# endif const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) @@ -567,10 +697,39 @@ int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, BIT_STRING_BITNAME *tbl); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_INTEGER, ASN1_INTEGER, ASN1_INTEGER) +#define sk_ASN1_INTEGER_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_value(sk, idx) ((ASN1_INTEGER *)OPENSSL_sk_value(ossl_check_const_ASN1_INTEGER_sk_type(sk), (idx))) +#define sk_ASN1_INTEGER_new(cmp) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new(ossl_check_ASN1_INTEGER_compfunc_type(cmp))) +#define sk_ASN1_INTEGER_new_null() ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_null()) +#define sk_ASN1_INTEGER_new_reserve(cmp, n) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_INTEGER_compfunc_type(cmp), (n))) +#define sk_ASN1_INTEGER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_INTEGER_sk_type(sk), (n)) +#define sk_ASN1_INTEGER_free(sk) OPENSSL_sk_free(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_delete(sk, i) ((ASN1_INTEGER *)OPENSSL_sk_delete(ossl_check_ASN1_INTEGER_sk_type(sk), (i))) +#define sk_ASN1_INTEGER_delete_ptr(sk, ptr) ((ASN1_INTEGER *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr))) +#define sk_ASN1_INTEGER_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_pop(sk) ((ASN1_INTEGER *)OPENSSL_sk_pop(ossl_check_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_shift(sk) ((ASN1_INTEGER *)OPENSSL_sk_shift(ossl_check_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_INTEGER_sk_type(sk),ossl_check_ASN1_INTEGER_freefunc_type(freefunc)) +#define sk_ASN1_INTEGER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), (idx)) +#define sk_ASN1_INTEGER_set(sk, idx, ptr) ((ASN1_INTEGER *)OPENSSL_sk_set(ossl_check_ASN1_INTEGER_sk_type(sk), (idx), ossl_check_ASN1_INTEGER_type(ptr))) +#define sk_ASN1_INTEGER_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr)) +#define sk_ASN1_INTEGER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_type(ptr), pnum) +#define sk_ASN1_INTEGER_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_INTEGER_sk_type(sk)) +#define sk_ASN1_INTEGER_dup(sk) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_dup(ossl_check_const_ASN1_INTEGER_sk_type(sk))) +#define sk_ASN1_INTEGER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_INTEGER) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_copyfunc_type(copyfunc), ossl_check_ASN1_INTEGER_freefunc_type(freefunc))) +#define sk_ASN1_INTEGER_set_cmp_func(sk, cmp) ((sk_ASN1_INTEGER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_INTEGER_sk_type(sk), ossl_check_ASN1_INTEGER_compfunc_type(cmp))) + + + DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, long length); -ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); +DECLARE_ASN1_DUP_FUNCTION(ASN1_INTEGER) int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) @@ -594,12 +753,40 @@ int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, const ASN1_TIME *to); DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) -ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); +DECLARE_ASN1_DUP_FUNCTION(ASN1_OCTET_STRING) int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, const ASN1_OCTET_STRING *b); int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, int len); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_UTF8STRING, ASN1_UTF8STRING, ASN1_UTF8STRING) +#define sk_ASN1_UTF8STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_value(sk, idx) ((ASN1_UTF8STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), (idx))) +#define sk_ASN1_UTF8STRING_new(cmp) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp))) +#define sk_ASN1_UTF8STRING_new_null() ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_UTF8STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_UTF8STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_UTF8STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_UTF8STRING_sk_type(sk), (n)) +#define sk_ASN1_UTF8STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_delete(sk, i) ((ASN1_UTF8STRING *)OPENSSL_sk_delete(ossl_check_ASN1_UTF8STRING_sk_type(sk), (i))) +#define sk_ASN1_UTF8STRING_delete_ptr(sk, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr))) +#define sk_ASN1_UTF8STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_pop(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_pop(ossl_check_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_shift(sk) ((ASN1_UTF8STRING *)OPENSSL_sk_shift(ossl_check_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_UTF8STRING_sk_type(sk),ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc)) +#define sk_ASN1_UTF8STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), (idx)) +#define sk_ASN1_UTF8STRING_set(sk, idx, ptr) ((ASN1_UTF8STRING *)OPENSSL_sk_set(ossl_check_ASN1_UTF8STRING_sk_type(sk), (idx), ossl_check_ASN1_UTF8STRING_type(ptr))) +#define sk_ASN1_UTF8STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr)) +#define sk_ASN1_UTF8STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_type(ptr), pnum) +#define sk_ASN1_UTF8STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_UTF8STRING_sk_type(sk)) +#define sk_ASN1_UTF8STRING_dup(sk) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_UTF8STRING_sk_type(sk))) +#define sk_ASN1_UTF8STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_UTF8STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_copyfunc_type(copyfunc), ossl_check_ASN1_UTF8STRING_freefunc_type(freefunc))) +#define sk_ASN1_UTF8STRING_set_cmp_func(sk, cmp) ((sk_ASN1_UTF8STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_UTF8STRING_sk_type(sk), ossl_check_ASN1_UTF8STRING_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) @@ -609,6 +796,34 @@ DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) int UTF8_getc(const unsigned char *str, int len, unsigned long *val); int UTF8_putc(unsigned char *str, int len, unsigned long value); +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_GENERALSTRING, ASN1_GENERALSTRING, ASN1_GENERALSTRING) +#define sk_ASN1_GENERALSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_value(sk, idx) ((ASN1_GENERALSTRING *)OPENSSL_sk_value(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), (idx))) +#define sk_ASN1_GENERALSTRING_new(cmp) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp))) +#define sk_ASN1_GENERALSTRING_new_null() ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_GENERALSTRING_new_reserve(cmp, n) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp), (n))) +#define sk_ASN1_GENERALSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (n)) +#define sk_ASN1_GENERALSTRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_delete(sk, i) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (i))) +#define sk_ASN1_GENERALSTRING_delete_ptr(sk, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr))) +#define sk_ASN1_GENERALSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_pop(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_pop(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_shift(sk) ((ASN1_GENERALSTRING *)OPENSSL_sk_shift(ossl_check_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_GENERALSTRING_sk_type(sk),ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc)) +#define sk_ASN1_GENERALSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), (idx)) +#define sk_ASN1_GENERALSTRING_set(sk, idx, ptr) ((ASN1_GENERALSTRING *)OPENSSL_sk_set(ossl_check_ASN1_GENERALSTRING_sk_type(sk), (idx), ossl_check_ASN1_GENERALSTRING_type(ptr))) +#define sk_ASN1_GENERALSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr)) +#define sk_ASN1_GENERALSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_type(ptr), pnum) +#define sk_ASN1_GENERALSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk)) +#define sk_ASN1_GENERALSTRING_dup(sk) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk))) +#define sk_ASN1_GENERALSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_GENERALSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_copyfunc_type(copyfunc), ossl_check_ASN1_GENERALSTRING_freefunc_type(freefunc))) +#define sk_ASN1_GENERALSTRING_set_cmp_func(sk, cmp) ((sk_ASN1_GENERALSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_GENERALSTRING_sk_type(sk), ossl_check_ASN1_GENERALSTRING_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) @@ -621,6 +836,10 @@ DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) DECLARE_ASN1_FUNCTIONS(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_UTCTIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_GENERALIZEDTIME) + DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); @@ -685,19 +904,23 @@ int ASN1_put_eoc(unsigned char **pp); int ASN1_object_size(int constructed, int length, int tag); /* Used to implement other functions */ -void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, const void *x); # define ASN1_dup_of(type,i2d,d2i,x) \ ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ - CHECKED_D2I_OF(type, d2i), \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_dup_of_const(type,i2d,d2i,x) \ - ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ CHECKED_D2I_OF(type, d2i), \ CHECKED_PTR_OF(const type, x))) -void *ASN1_item_dup(const ASN1_ITEM *it, void *x); +void *ASN1_item_dup(const ASN1_ITEM *it, const void *x); +int ASN1_item_sign_ex(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, const ASN1_OCTET_STRING *id, + EVP_PKEY *pkey, const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); +int ASN1_item_verify_ex(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + const ASN1_OCTET_STRING *id, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); /* ASN1 alloc/free macros for when a type is only used internally */ @@ -714,20 +937,17 @@ void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); in, \ CHECKED_PPTR_OF(type, x))) +void *ASN1_item_d2i_fp_ex(const ASN1_ITEM *it, FILE *in, void *x, + OSSL_LIB_CTX *libctx, const char *propq); void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); -int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, const void *x); # define ASN1_i2d_fp_of(type,i2d,out,x) \ (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ - (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ out, \ CHECKED_PTR_OF(const type, x))) -int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, const void *x); int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); # endif @@ -741,23 +961,22 @@ void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); in, \ CHECKED_PPTR_OF(type, x))) -void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); -int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); +void *ASN1_item_d2i_bio_ex(const ASN1_ITEM *it, BIO *in, void *pval, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *pval); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, const void *x); # define ASN1_i2d_bio_of(type,i2d,out,x) \ (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ - out, \ - CHECKED_PTR_OF(type, x))) - -# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ - (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ out, \ CHECKED_PTR_OF(const type, x))) -int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, const void *x); +BIO *ASN1_item_i2d_mem_bio(const ASN1_ITEM *it, const ASN1_VALUE *val); int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); -int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); +int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm); +int ASN1_TIME_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); @@ -804,11 +1023,16 @@ void ASN1_STRING_TABLE_cleanup(void); /* Old API compatible functions */ ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_new_ex(const ASN1_ITEM *it, OSSL_LIB_CTX *libctx, + const char *propq); void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i_ex(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it); -int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); -int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, +int ASN1_item_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); void ASN1_add_oid_module(void); @@ -839,7 +1063,7 @@ int ASN1_str2mask(const char *str, unsigned long *pmask); /* Don't show structure name even at top level */ # define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 -int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, +int ASN1_item_print(BIO *out, const ASN1_VALUE *ifld, int indent, const ASN1_ITEM *it, const ASN1_PCTX *pctx); ASN1_PCTX *ASN1_PCTX_new(void); void ASN1_PCTX_free(ASN1_PCTX *p); @@ -864,22 +1088,43 @@ void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); const BIO_METHOD *BIO_f_asn1(void); +/* cannot constify val because of CMS_stream() */ BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const ASN1_ITEM *it); int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const char *hdr, const ASN1_ITEM *it); +/* cannot constify val because of CMS_dataFinal() */ int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, int ctype_nid, int econt_nid, STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +int SMIME_write_ASN1_ex(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1_ex(BIO *bio, int flags, BIO **bcont, + const ASN1_ITEM *it, ASN1_VALUE **x, + OSSL_LIB_CTX *libctx, const char *propq); int SMIME_crlf_copy(BIO *in, BIO *out, int flags); int SMIME_text(BIO *in, BIO *out); const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); const ASN1_ITEM *ASN1_ITEM_get(size_t i); +/* Legacy compatibility */ +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_const(type) DECLARE_ASN1_FUNCTIONS(type) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name) +# define I2D_OF_const(type) I2D_OF(type) +# define ASN1_dup_of_const(type,i2d,d2i,x) ASN1_dup_of(type,i2d,d2i,x) +# define ASN1_i2d_fp_of_const(type,i2d,out,x) ASN1_i2d_fp_of(type,i2d,out,x) +# define ASN1_i2d_bio_of_const(type,i2d,out,x) ASN1_i2d_bio_of(type,i2d,out,x) + # ifdef __cplusplus } # endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h.in new file mode 100644 index 00000000..d478bc96 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h.in @@ -0,0 +1,964 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ASN1_H +# define OPENSSL_ASN1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1_H +# endif + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include +# include +# include + +# include +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define V_ASN1_UNIVERSAL 0x00 +# define V_ASN1_APPLICATION 0x40 +# define V_ASN1_CONTEXT_SPECIFIC 0x80 +# define V_ASN1_PRIVATE 0xc0 + +# define V_ASN1_CONSTRUCTED 0x20 +# define V_ASN1_PRIMITIVE_TAG 0x1f +# define V_ASN1_PRIMATIVE_TAG /*compat*/ V_ASN1_PRIMITIVE_TAG + +# define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ +# define V_ASN1_OTHER -3/* used in ASN1_TYPE */ +# define V_ASN1_ANY -4/* used in ASN1 template code */ + +# define V_ASN1_UNDEF -1 +/* ASN.1 tag values */ +# define V_ASN1_EOC 0 +# define V_ASN1_BOOLEAN 1 /**/ +# define V_ASN1_INTEGER 2 +# define V_ASN1_BIT_STRING 3 +# define V_ASN1_OCTET_STRING 4 +# define V_ASN1_NULL 5 +# define V_ASN1_OBJECT 6 +# define V_ASN1_OBJECT_DESCRIPTOR 7 +# define V_ASN1_EXTERNAL 8 +# define V_ASN1_REAL 9 +# define V_ASN1_ENUMERATED 10 +# define V_ASN1_UTF8STRING 12 +# define V_ASN1_SEQUENCE 16 +# define V_ASN1_SET 17 +# define V_ASN1_NUMERICSTRING 18 /**/ +# define V_ASN1_PRINTABLESTRING 19 +# define V_ASN1_T61STRING 20 +# define V_ASN1_TELETEXSTRING 20/* alias */ +# define V_ASN1_VIDEOTEXSTRING 21 /**/ +# define V_ASN1_IA5STRING 22 +# define V_ASN1_UTCTIME 23 +# define V_ASN1_GENERALIZEDTIME 24 /**/ +# define V_ASN1_GRAPHICSTRING 25 /**/ +# define V_ASN1_ISO64STRING 26 /**/ +# define V_ASN1_VISIBLESTRING 26/* alias */ +# define V_ASN1_GENERALSTRING 27 /**/ +# define V_ASN1_UNIVERSALSTRING 28 /**/ +# define V_ASN1_BMPSTRING 30 + +/* + * NB the constants below are used internally by ASN1_INTEGER + * and ASN1_ENUMERATED to indicate the sign. They are *not* on + * the wire tag values. + */ + +# define V_ASN1_NEG 0x100 +# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) +# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) + +/* For use with d2i_ASN1_type_bytes() */ +# define B_ASN1_NUMERICSTRING 0x0001 +# define B_ASN1_PRINTABLESTRING 0x0002 +# define B_ASN1_T61STRING 0x0004 +# define B_ASN1_TELETEXSTRING 0x0004 +# define B_ASN1_VIDEOTEXSTRING 0x0008 +# define B_ASN1_IA5STRING 0x0010 +# define B_ASN1_GRAPHICSTRING 0x0020 +# define B_ASN1_ISO64STRING 0x0040 +# define B_ASN1_VISIBLESTRING 0x0040 +# define B_ASN1_GENERALSTRING 0x0080 +# define B_ASN1_UNIVERSALSTRING 0x0100 +# define B_ASN1_OCTET_STRING 0x0200 +# define B_ASN1_BIT_STRING 0x0400 +# define B_ASN1_BMPSTRING 0x0800 +# define B_ASN1_UNKNOWN 0x1000 +# define B_ASN1_UTF8STRING 0x2000 +# define B_ASN1_UTCTIME 0x4000 +# define B_ASN1_GENERALIZEDTIME 0x8000 +# define B_ASN1_SEQUENCE 0x10000 +/* For use with ASN1_mbstring_copy() */ +# define MBSTRING_FLAG 0x1000 +# define MBSTRING_UTF8 (MBSTRING_FLAG) +# define MBSTRING_ASC (MBSTRING_FLAG|1) +# define MBSTRING_BMP (MBSTRING_FLAG|2) +# define MBSTRING_UNIV (MBSTRING_FLAG|4) +# define SMIME_OLDMIME 0x400 +# define SMIME_CRLFEOL 0x800 +# define SMIME_STREAM 0x1000 + +/* Stacks for types not otherwise defined in this header */ +{- + generate_stack_macros("X509_ALGOR"); +-} + + +# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +/* + * This indicates that the ASN1_STRING is not a real value but just a place + * holder for the location where indefinite length constructed data should be + * inserted in the memory buffer + */ +# define ASN1_STRING_FLAG_NDEF 0x010 + +/* + * This flag is used by the CMS code to indicate that a string is not + * complete and is a place holder for content when it had all been accessed. + * The flag will be reset when content has been written to it. + */ + +# define ASN1_STRING_FLAG_CONT 0x020 +/* + * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING + * type. + */ +# define ASN1_STRING_FLAG_MSTRING 0x040 +/* String is embedded and only content should be freed */ +# define ASN1_STRING_FLAG_EMBED 0x080 +/* String should be parsed in RFC 5280's time format */ +# define ASN1_STRING_FLAG_X509_TIME 0x100 +/* This is the base type that holds just about everything :-) */ +struct asn1_string_st { + int length; + int type; + unsigned char *data; + /* + * The value of the following field depends on the type being held. It + * is mostly being used for BIT_STRING so if the input data has a + * non-zero 'unused bits' value, it will be handled correctly + */ + long flags; +}; + +/* + * ASN1_ENCODING structure: this is used to save the received encoding of an + * ASN1 type. This is useful to get round problems with invalid encodings + * which can break signatures. + */ + +typedef struct ASN1_ENCODING_st { + unsigned char *enc; /* DER encoding */ + long len; /* Length of encoding */ + int modified; /* set to 1 if 'enc' is invalid */ +} ASN1_ENCODING; + +/* Used with ASN1 LONG type: if a long is set to this it is omitted */ +# define ASN1_LONG_UNDEF 0x7fffffffL + +# define STABLE_FLAGS_MALLOC 0x01 +/* + * A zero passed to ASN1_STRING_TABLE_new_add for the flags is interpreted + * as "don't change" and STABLE_FLAGS_MALLOC is always set. By setting + * STABLE_FLAGS_MALLOC only we can clear the existing value. Use the alias + * STABLE_FLAGS_CLEAR to reflect this. + */ +# define STABLE_FLAGS_CLEAR STABLE_FLAGS_MALLOC +# define STABLE_NO_MASK 0x02 +# define DIRSTRING_TYPE \ + (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) +# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) + +struct asn1_string_table_st { + int nid; + long minsize; + long maxsize; + unsigned long mask; + unsigned long flags; +}; + +{- + generate_stack_macros("ASN1_STRING_TABLE"); +-} + +/* size limits: this stuff is taken straight from RFC2459 */ + +# define ub_name 32768 +# define ub_common_name 64 +# define ub_locality_name 128 +# define ub_state_name 128 +# define ub_organization_name 64 +# define ub_organization_unit_name 64 +# define ub_title 64 +# define ub_email_address 128 + +/* + * Declarations for template structures: for full definitions see asn1t.h + */ +typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; +typedef struct ASN1_TLC_st ASN1_TLC; +/* This is just an opaque pointer */ +typedef struct ASN1_VALUE_st ASN1_VALUE; + +/* Declare ASN1 functions: the implement macro in in asn1t.h */ + +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ + +# define DECLARE_ASN1_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_FUNCTIONS(type) \ + DECLARE_ASN1_FUNCTIONS_attr(extern, type) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_attr(attr, type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, type) +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_attr(extern, type) + +# define DECLARE_ASN1_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + DECLARE_ASN1_ITEM_attr(attr, itname) +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(extern, type, itname, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(attr, type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_attr(attr, type, name, name) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(attr, type, name) \ + attr type *d2i_##name(type **a, const unsigned char **in, long len); \ + attr int i2d_##name(const type *a, unsigned char **out); +# define DECLARE_ASN1_ENCODE_FUNCTIONS_only(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(extern, type, name) + +# define DECLARE_ASN1_NDEF_FUNCTION_attr(attr, name) \ + attr int i2d_##name##_NDEF(const name *a, unsigned char **out); +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + DECLARE_ASN1_NDEF_FUNCTION_attr(extern, name) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(attr, type, name) \ + attr type *name##_new(void); \ + attr void name##_free(type *a); +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name_attr(extern, type, name) + +# define DECLARE_ASN1_DUP_FUNCTION_attr(attr, type) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, type) +# define DECLARE_ASN1_DUP_FUNCTION(type) \ + DECLARE_ASN1_DUP_FUNCTION_attr(extern, type) + +# define DECLARE_ASN1_DUP_FUNCTION_name_attr(attr, type, name) \ + attr type *name##_dup(const type *a); +# define DECLARE_ASN1_DUP_FUNCTION_name(type, name) \ + DECLARE_ASN1_DUP_FUNCTION_name_attr(extern, type, name) + +# define DECLARE_ASN1_PRINT_FUNCTION_attr(attr, stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, stname) +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_attr(extern, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname_attr(attr, stname, fname) \ + attr int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx); +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname_attr(extern, stname, fname) + +# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) +# define I2D_OF(type) int (*)(const type *,unsigned char **) + +# define CHECKED_D2I_OF(type, d2i) \ + ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) +# define CHECKED_I2D_OF(type, i2d) \ + ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) +# define CHECKED_NEW_OF(type, xnew) \ + ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) +# define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +# define CHECKED_PPTR_OF(type, p) \ + ((void**) (1 ? p : (type**)0)) + +# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(const type *,unsigned char **) +# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) + +typedef void *d2i_of_void(void **, const unsigned char **, long); +typedef int i2d_of_void(const void *, unsigned char **); + +/*- + * The following macros and typedefs allow an ASN1_ITEM + * to be embedded in a structure and referenced. Since + * the ASN1_ITEM pointers need to be globally accessible + * (possibly from shared libraries) they may exist in + * different forms. On platforms that support it the + * ASN1_ITEM structure itself will be globally exported. + * Other platforms will export a function that returns + * an ASN1_ITEM pointer. + * + * To handle both cases transparently the macros below + * should be used instead of hard coding an ASN1_ITEM + * pointer in a structure. + * + * The structure will look like this: + * + * typedef struct SOMETHING_st { + * ... + * ASN1_ITEM_EXP *iptr; + * ... + * } SOMETHING; + * + * It would be initialised as e.g.: + * + * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; + * + * and the actual pointer extracted with: + * + * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); + * + * Finally an ASN1_ITEM pointer can be extracted from an + * appropriate reference with: ASN1_ITEM_rptr(X509). This + * would be used when a function takes an ASN1_ITEM * argument. + * + */ + + +/* + * Platforms that can't easily handle shared global variables are declared as + * functions returning ASN1_ITEM pointers. + */ + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr()) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (iptr##_it) + +# define ASN1_ITEM_rptr(ref) (ref##_it()) + +# define DECLARE_ASN1_ITEM_attr(attr, name) \ + attr const ASN1_ITEM * name##_it(void); +# define DECLARE_ASN1_ITEM(name) \ + DECLARE_ASN1_ITEM_attr(extern, name) + +/* Parameters used by ASN1_STRING_print_ex() */ + +/* + * These determine which characters to escape: RFC2253 special characters, + * control characters and MSB set characters + */ + +# define ASN1_STRFLGS_ESC_2253 1 +# define ASN1_STRFLGS_ESC_CTRL 2 +# define ASN1_STRFLGS_ESC_MSB 4 + +/* Lower 8 bits are reserved as an output type specifier */ +# define ASN1_DTFLGS_TYPE_MASK 0x0FUL +# define ASN1_DTFLGS_RFC822 0x00UL +# define ASN1_DTFLGS_ISO8601 0x01UL + +/* + * This flag determines how we do escaping: normally RC2253 backslash only, + * set this to use backslash and quote. + */ + +# define ASN1_STRFLGS_ESC_QUOTE 8 + +/* These three flags are internal use only. */ + +/* Character is a valid PrintableString character */ +# define CHARTYPE_PRINTABLESTRING 0x10 +/* Character needs escaping if it is the first character */ +# define CHARTYPE_FIRST_ESC_2253 0x20 +/* Character needs escaping if it is the last character */ +# define CHARTYPE_LAST_ESC_2253 0x40 + +/* + * NB the internal flags are safely reused below by flags handled at the top + * level. + */ + +/* + * If this is set we convert all character strings to UTF8 first + */ + +# define ASN1_STRFLGS_UTF8_CONVERT 0x10 + +/* + * If this is set we don't attempt to interpret content: just assume all + * strings are 1 byte per character. This will produce some pretty odd + * looking output! + */ + +# define ASN1_STRFLGS_IGNORE_TYPE 0x20 + +/* If this is set we include the string type in the output */ +# define ASN1_STRFLGS_SHOW_TYPE 0x40 + +/* + * This determines which strings to display and which to 'dump' (hex dump of + * content octets or DER encoding). We can only dump non character strings or + * everything. If we don't dump 'unknown' they are interpreted as character + * strings with 1 octet per character and are subject to the usual escaping + * options. + */ + +# define ASN1_STRFLGS_DUMP_ALL 0x80 +# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 + +/* + * These determine what 'dumping' does, we can dump the content octets or the + * DER encoding: both use the RFC2253 #XXXXX notation. + */ + +# define ASN1_STRFLGS_DUMP_DER 0x200 + +/* + * This flag specifies that RC2254 escaping shall be performed. + */ +#define ASN1_STRFLGS_ESC_2254 0x400 + +/* + * All the string flags consistent with RFC2253, escaping control characters + * isn't essential in RFC2253 but it is advisable anyway. + */ + +# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ + ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + ASN1_STRFLGS_UTF8_CONVERT | \ + ASN1_STRFLGS_DUMP_UNKNOWN | \ + ASN1_STRFLGS_DUMP_DER) + + +struct asn1_type_st { + int type; + union { + char *ptr; + ASN1_BOOLEAN boolean; + ASN1_STRING *asn1_string; + ASN1_OBJECT *object; + ASN1_INTEGER *integer; + ASN1_ENUMERATED *enumerated; + ASN1_BIT_STRING *bit_string; + ASN1_OCTET_STRING *octet_string; + ASN1_PRINTABLESTRING *printablestring; + ASN1_T61STRING *t61string; + ASN1_IA5STRING *ia5string; + ASN1_GENERALSTRING *generalstring; + ASN1_BMPSTRING *bmpstring; + ASN1_UNIVERSALSTRING *universalstring; + ASN1_UTCTIME *utctime; + ASN1_GENERALIZEDTIME *generalizedtime; + ASN1_VISIBLESTRING *visiblestring; + ASN1_UTF8STRING *utf8string; + /* + * set and sequence are left complete and still contain the set or + * sequence bytes + */ + ASN1_STRING *set; + ASN1_STRING *sequence; + ASN1_VALUE *asn1_value; + } value; +}; + +{- + generate_stack_macros("ASN1_TYPE"); +-} + +typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; + +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_name(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) + +/* This is used to contain a list of bit names */ +typedef struct BIT_STRING_BITNAME_st { + int bitnum; + const char *lname; + const char *sname; +} BIT_STRING_BITNAME; + +# define B_ASN1_TIME \ + B_ASN1_UTCTIME | \ + B_ASN1_GENERALIZEDTIME + +# define B_ASN1_PRINTABLE \ + B_ASN1_NUMERICSTRING| \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_T61STRING| \ + B_ASN1_IA5STRING| \ + B_ASN1_BIT_STRING| \ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING|\ + B_ASN1_SEQUENCE|\ + B_ASN1_UNKNOWN + +# define B_ASN1_DIRECTORYSTRING \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_TELETEXSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_UTF8STRING + +# define B_ASN1_DISPLAYTEXT \ + B_ASN1_IA5STRING| \ + B_ASN1_VISIBLESTRING| \ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING + +DECLARE_ASN1_ALLOC_FUNCTIONS_name(ASN1_TYPE, ASN1_TYPE) +DECLARE_ASN1_ENCODE_FUNCTIONS(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) + +int ASN1_TYPE_get(const ASN1_TYPE *a); +void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); +int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); +int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); + +ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); +void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); + +{- + generate_stack_macros("ASN1_OBJECT"); +-} + +DECLARE_ASN1_FUNCTIONS(ASN1_OBJECT) + +ASN1_STRING *ASN1_STRING_new(void); +void ASN1_STRING_free(ASN1_STRING *a); +void ASN1_STRING_clear_free(ASN1_STRING *a); +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); +DECLARE_ASN1_DUP_FUNCTION(ASN1_STRING) +ASN1_STRING *ASN1_STRING_type_new(int type); +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); + /* + * Since this is used to store all sorts of things, via macros, for now, + * make its data void * + */ +int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); +int ASN1_STRING_length(const ASN1_STRING *x); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ASN1_STRING_length_set(ASN1_STRING *x, int n); +# endif +int ASN1_STRING_type(const ASN1_STRING *x); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 unsigned char *ASN1_STRING_data(ASN1_STRING *x); +# endif +const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); + +DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) +int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); +int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); +int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n); +int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, + const unsigned char *flags, int flags_len); + +int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, + BIT_STRING_BITNAME *tbl, int indent); +int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, + BIT_STRING_BITNAME *tbl); + +{- + generate_stack_macros("ASN1_INTEGER"); +-} + + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, + long length); +DECLARE_ASN1_DUP_FUNCTION(ASN1_INTEGER) +int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); + +DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) + +int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); +ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); +ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); +int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); + +int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, + time_t t); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, + time_t t, int offset_day, + long offset_sec); +int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); + +int ASN1_TIME_diff(int *pday, int *psec, + const ASN1_TIME *from, const ASN1_TIME *to); + +DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) +DECLARE_ASN1_DUP_FUNCTION(ASN1_OCTET_STRING) +int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, + const ASN1_OCTET_STRING *b); +int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, + int len); + +{- + generate_stack_macros("ASN1_UTF8STRING"); +-} + +DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_NULL) +DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) + +int UTF8_getc(const unsigned char *str, int len, unsigned long *val); +int UTF8_putc(unsigned char *str, int len, unsigned long value); + +{- + generate_stack_macros("ASN1_GENERALSTRING"); +-} + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) +DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_TIME) + +DECLARE_ASN1_DUP_FUNCTION(ASN1_TIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_UTCTIME) +DECLARE_ASN1_DUP_FUNCTION(ASN1_GENERALIZEDTIME) + +DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) + +ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); +ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_TIME_check(const ASN1_TIME *t); +ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t, + ASN1_GENERALIZEDTIME **out); +int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); +int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str); +int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); +int ASN1_TIME_normalize(ASN1_TIME *s); +int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t); +int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b); + +int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); +int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); +int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); +int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); +int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); +int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); +int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); +int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a); + +int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); +ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, + const char *sn, const char *ln); + +int ASN1_INTEGER_get_int64(int64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r); +int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r); + +int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); +long ASN1_INTEGER_get(const ASN1_INTEGER *a); +ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); +BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); + +int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_ENUMERATED *a); +int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r); + + +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); +ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai); +BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn); + +/* General */ +/* given a string, return the correct type, max is the maximum length */ +int ASN1_PRINTABLE_type(const unsigned char *s, int max); + +unsigned long ASN1_tag2bit(int tag); + +/* SPECIALS */ +int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, + int *pclass, long omax); +int ASN1_check_infinite_end(unsigned char **p, long len); +int ASN1_const_check_infinite_end(const unsigned char **p, long len); +void ASN1_put_object(unsigned char **pp, int constructed, int length, + int tag, int xclass); +int ASN1_put_eoc(unsigned char **pp); +int ASN1_object_size(int constructed, int length, int tag); + +/* Used to implement other functions */ +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, const void *x); + +# define ASN1_dup_of(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(const type, x))) + +void *ASN1_item_dup(const ASN1_ITEM *it, const void *x); +int ASN1_item_sign_ex(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, const ASN1_OCTET_STRING *id, + EVP_PKEY *pkey, const EVP_MD *md, OSSL_LIB_CTX *libctx, + const char *propq); +int ASN1_item_verify_ex(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + const ASN1_OCTET_STRING *id, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); + +/* ASN1 alloc/free macros for when a type is only used internally */ + +# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) +# define M_ASN1_free_of(x, type) \ + ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) + +# ifndef OPENSSL_NO_STDIO +void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); + +# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_fp_ex(const ASN1_ITEM *it, FILE *in, void *x, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, const void *x); + +# define ASN1_i2d_fp_of(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, const void *x); +int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); +# endif + +int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); + +void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); + +# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_bio_ex(const ASN1_ITEM *it, BIO *in, void *pval, + OSSL_LIB_CTX *libctx, const char *propq); +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *pval); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, const void *x); + +# define ASN1_i2d_bio_of(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, const void *x); +BIO *ASN1_item_i2d_mem_bio(const ASN1_ITEM *it, const ASN1_VALUE *val); +int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); +int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); +int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm); +int ASN1_TIME_print_ex(BIO *bp, const ASN1_TIME *tm, unsigned long flags); +int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); +int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); +int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); +int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, + unsigned char *buf, int off); +int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); +int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, + int dump); +const char *ASN1_tag2str(int tag); + +/* Used to load and write Netscape format cert */ + +int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); + +int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); +int ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, int max_len); +int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ASN1_TYPE_get_int_octetstring(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); + +ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, + ASN1_OCTET_STRING **oct); + +void ASN1_STRING_set_default_mask(unsigned long mask); +int ASN1_STRING_set_default_mask_asc(const char *p); +unsigned long ASN1_STRING_get_default_mask(void); +int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask); +int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask, + long minsize, long maxsize); + +ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, + const unsigned char *in, int inlen, + int inform, int nid); +ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); +int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); +void ASN1_STRING_TABLE_cleanup(void); + +/* ASN1 template functions */ + +/* Old API compatible functions */ +ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_new_ex(const ASN1_ITEM *it, OSSL_LIB_CTX *libctx, + const char *propq); +void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i_ex(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it); +int ASN1_item_i2d(const ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(const ASN1_VALUE *val, unsigned char **out, + const ASN1_ITEM *it); + +void ASN1_add_oid_module(void); +void ASN1_add_stable_module(void); + +ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); +ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); +int ASN1_str2mask(const char *str, unsigned long *pmask); + +/* ASN1 Print flags */ + +/* Indicate missing OPTIONAL fields */ +# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 +/* Mark start and end of SEQUENCE */ +# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 +/* Mark start and end of SEQUENCE/SET OF */ +# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 +/* Show the ASN1 type of primitives */ +# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 +/* Don't show ASN1 type of ANY */ +# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 +/* Don't show ASN1 type of MSTRINGs */ +# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 +/* Don't show field names in SEQUENCE */ +# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 +/* Show structure names of each SEQUENCE field */ +# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 +/* Don't show structure name even at top level */ +# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 + +int ASN1_item_print(BIO *out, const ASN1_VALUE *ifld, int indent, + const ASN1_ITEM *it, const ASN1_PCTX *pctx); +ASN1_PCTX *ASN1_PCTX_new(void); +void ASN1_PCTX_free(ASN1_PCTX *p); +unsigned long ASN1_PCTX_get_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); + +ASN1_SCTX *ASN1_SCTX_new(int (*scan_cb) (ASN1_SCTX *ctx)); +void ASN1_SCTX_free(ASN1_SCTX *p); +const ASN1_ITEM *ASN1_SCTX_get_item(ASN1_SCTX *p); +const ASN1_TEMPLATE *ASN1_SCTX_get_template(ASN1_SCTX *p); +unsigned long ASN1_SCTX_get_flags(ASN1_SCTX *p); +void ASN1_SCTX_set_app_data(ASN1_SCTX *p, void *data); +void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); + +const BIO_METHOD *BIO_f_asn1(void); + +/* cannot constify val because of CMS_stream() */ +BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); + +int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const ASN1_ITEM *it); +int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const char *hdr, const ASN1_ITEM *it); +/* cannot constify val because of CMS_dataFinal() */ +int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +int SMIME_write_ASN1_ex(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1_ex(BIO *bio, int flags, BIO **bcont, + const ASN1_ITEM *it, ASN1_VALUE **x, + OSSL_LIB_CTX *libctx, const char *propq); +int SMIME_crlf_copy(BIO *in, BIO *out, int flags); +int SMIME_text(BIO *in, BIO *out); + +const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); +const ASN1_ITEM *ASN1_ITEM_get(size_t i); + +/* Legacy compatibility */ +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) +# define DECLARE_ASN1_FUNCTIONS_const(type) DECLARE_ASN1_FUNCTIONS(type) +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name) +# define I2D_OF_const(type) I2D_OF(type) +# define ASN1_dup_of_const(type,i2d,d2i,x) ASN1_dup_of(type,i2d,d2i,x) +# define ASN1_i2d_fp_of_const(type,i2d,out,x) ASN1_i2d_fp_of(type,i2d,out,x) +# define ASN1_i2d_bio_of_const(type,i2d,out,x) ASN1_i2d_bio_of(type,i2d,out,x) + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1_mac.h b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1_mac.h index 7ac1782a..fdcb9836 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1_mac.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1_mac.h @@ -1,7 +1,7 @@ /* * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1err.h b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1err.h index e1ad1fef..d4276220 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1err.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1err.h @@ -1,140 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1ERR_H -# define HEADER_ASN1ERR_H +#ifndef OPENSSL_ASN1ERR_H +# define OPENSSL_ASN1ERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASN1_strings(void); -/* - * ASN1 function codes. - */ -# define ASN1_F_A2D_ASN1_OBJECT 100 -# define ASN1_F_A2I_ASN1_INTEGER 102 -# define ASN1_F_A2I_ASN1_STRING 103 -# define ASN1_F_APPEND_EXP 176 -# define ASN1_F_ASN1_BIO_INIT 113 -# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 -# define ASN1_F_ASN1_CB 177 -# define ASN1_F_ASN1_CHECK_TLEN 104 -# define ASN1_F_ASN1_COLLECT 106 -# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 -# define ASN1_F_ASN1_D2I_FP 109 -# define ASN1_F_ASN1_D2I_READ_BIO 107 -# define ASN1_F_ASN1_DIGEST 184 -# define ASN1_F_ASN1_DO_ADB 110 -# define ASN1_F_ASN1_DO_LOCK 233 -# define ASN1_F_ASN1_DUP 111 -# define ASN1_F_ASN1_ENC_SAVE 115 -# define ASN1_F_ASN1_EX_C2I 204 -# define ASN1_F_ASN1_FIND_END 190 -# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 -# define ASN1_F_ASN1_GENERATE_V3 178 -# define ASN1_F_ASN1_GET_INT64 224 -# define ASN1_F_ASN1_GET_OBJECT 114 -# define ASN1_F_ASN1_GET_UINT64 225 -# define ASN1_F_ASN1_I2D_BIO 116 -# define ASN1_F_ASN1_I2D_FP 117 -# define ASN1_F_ASN1_ITEM_D2I_FP 206 -# define ASN1_F_ASN1_ITEM_DUP 191 -# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 -# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 -# define ASN1_F_ASN1_ITEM_EX_I2D 144 -# define ASN1_F_ASN1_ITEM_FLAGS_I2D 118 -# define ASN1_F_ASN1_ITEM_I2D_BIO 192 -# define ASN1_F_ASN1_ITEM_I2D_FP 193 -# define ASN1_F_ASN1_ITEM_PACK 198 -# define ASN1_F_ASN1_ITEM_SIGN 195 -# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 -# define ASN1_F_ASN1_ITEM_UNPACK 199 -# define ASN1_F_ASN1_ITEM_VERIFY 197 -# define ASN1_F_ASN1_MBSTRING_NCOPY 122 -# define ASN1_F_ASN1_OBJECT_NEW 123 -# define ASN1_F_ASN1_OUTPUT_DATA 214 -# define ASN1_F_ASN1_PCTX_NEW 205 -# define ASN1_F_ASN1_PRIMITIVE_NEW 119 -# define ASN1_F_ASN1_SCTX_NEW 221 -# define ASN1_F_ASN1_SIGN 128 -# define ASN1_F_ASN1_STR2TYPE 179 -# define ASN1_F_ASN1_STRING_GET_INT64 227 -# define ASN1_F_ASN1_STRING_GET_UINT64 230 -# define ASN1_F_ASN1_STRING_SET 186 -# define ASN1_F_ASN1_STRING_TABLE_ADD 129 -# define ASN1_F_ASN1_STRING_TO_BN 228 -# define ASN1_F_ASN1_STRING_TYPE_NEW 130 -# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 -# define ASN1_F_ASN1_TEMPLATE_NEW 133 -# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 -# define ASN1_F_ASN1_TIME_ADJ 217 -# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 -# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 -# define ASN1_F_ASN1_UTCTIME_ADJ 218 -# define ASN1_F_ASN1_VERIFY 137 -# define ASN1_F_B64_READ_ASN1 209 -# define ASN1_F_B64_WRITE_ASN1 210 -# define ASN1_F_BIO_NEW_NDEF 208 -# define ASN1_F_BITSTR_CB 180 -# define ASN1_F_BN_TO_ASN1_STRING 229 -# define ASN1_F_C2I_ASN1_BIT_STRING 189 -# define ASN1_F_C2I_ASN1_INTEGER 194 -# define ASN1_F_C2I_ASN1_OBJECT 196 -# define ASN1_F_C2I_IBUF 226 -# define ASN1_F_C2I_UINT64_INT 101 -# define ASN1_F_COLLECT_DATA 140 -# define ASN1_F_D2I_ASN1_OBJECT 147 -# define ASN1_F_D2I_ASN1_UINTEGER 150 -# define ASN1_F_D2I_AUTOPRIVATEKEY 207 -# define ASN1_F_D2I_PRIVATEKEY 154 -# define ASN1_F_D2I_PUBLICKEY 155 -# define ASN1_F_DO_BUF 142 -# define ASN1_F_DO_CREATE 124 -# define ASN1_F_DO_DUMP 125 -# define ASN1_F_DO_TCREATE 222 -# define ASN1_F_I2A_ASN1_OBJECT 126 -# define ASN1_F_I2D_ASN1_BIO_STREAM 211 -# define ASN1_F_I2D_ASN1_OBJECT 143 -# define ASN1_F_I2D_DSA_PUBKEY 161 -# define ASN1_F_I2D_EC_PUBKEY 181 -# define ASN1_F_I2D_PRIVATEKEY 163 -# define ASN1_F_I2D_PUBLICKEY 164 -# define ASN1_F_I2D_RSA_PUBKEY 165 -# define ASN1_F_LONG_C2I 166 -# define ASN1_F_NDEF_PREFIX 127 -# define ASN1_F_NDEF_SUFFIX 136 -# define ASN1_F_OID_MODULE_INIT 174 -# define ASN1_F_PARSE_TAGGING 182 -# define ASN1_F_PKCS5_PBE2_SET_IV 167 -# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 231 -# define ASN1_F_PKCS5_PBE_SET 202 -# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 -# define ASN1_F_PKCS5_PBKDF2_SET 219 -# define ASN1_F_PKCS5_SCRYPT_SET 232 -# define ASN1_F_SMIME_READ_ASN1 212 -# define ASN1_F_SMIME_TEXT 213 -# define ASN1_F_STABLE_GET 138 -# define ASN1_F_STBL_MODULE_INIT 223 -# define ASN1_F_UINT32_C2I 105 -# define ASN1_F_UINT32_NEW 139 -# define ASN1_F_UINT64_C2I 112 -# define ASN1_F_UINT64_NEW 141 -# define ASN1_F_X509_CRL_ADD0_REVOKED 169 -# define ASN1_F_X509_INFO_NEW 170 -# define ASN1_F_X509_NAME_ENCODE 203 -# define ASN1_F_X509_NAME_EX_D2I 158 -# define ASN1_F_X509_NAME_EX_NEW 171 -# define ASN1_F_X509_PKEY_NEW 173 /* * ASN1 reason codes. @@ -199,6 +81,7 @@ int ERR_load_ASN1_strings(void); # define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 # define ASN1_R_INVALID_UTF8STRING 134 # define ASN1_R_INVALID_VALUE 219 +# define ASN1_R_LENGTH_TOO_LONG 231 # define ASN1_R_LIST_ERROR 188 # define ASN1_R_MIME_NO_CONTENT_TYPE 206 # define ASN1_R_MIME_PARSE_ERROR 207 @@ -239,6 +122,7 @@ int ERR_load_ASN1_strings(void); # define ASN1_R_TYPE_NOT_PRIMITIVE 195 # define ASN1_R_UNEXPECTED_EOC 159 # define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 +# define ASN1_R_UNKNOWN_DIGEST 229 # define ASN1_R_UNKNOWN_FORMAT 160 # define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 # define ASN1_R_UNKNOWN_OBJECT_TYPE 162 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1t.h b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1t.h index a450ba0d..74ba47d0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1t.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1t.h @@ -1,14 +1,25 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/asn1t.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASN1T_H -# define HEADER_ASN1T_H + + +#ifndef OPENSSL_ASN1T_H +# define OPENSSL_ASN1T_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1T_H +# endif # include # include @@ -25,44 +36,73 @@ extern "C" { #endif -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION +/*- + * These are the possible values for the itype field of the + * ASN1_ITEM structure and determine how it is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application-specific + * data and functions. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 +# define ASN1_ITYPE_SEQUENCE 0x1 +# define ASN1_ITYPE_CHOICE 0x2 +/* unused value 0x3 */ +# define ASN1_ITYPE_EXTERN 0x4 +# define ASN1_ITYPE_MSTRING 0x5 +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 /* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) /* Macros for start and end of ASN1_ITEM definition */ -# define ASN1_ITEM_start(itname) \ - const ASN1_ITEM itname##_it = { - -# define static_ASN1_ITEM_start(itname) \ - static const ASN1_ITEM itname##_it = { - -# define ASN1_ITEM_end(itname) \ - }; - -# else - -/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ -# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) - -/* Macros for start and end of ASN1_ITEM definition */ - -# define ASN1_ITEM_start(itname) \ +# define ASN1_ITEM_start(itname) \ const ASN1_ITEM * itname##_it(void) \ { \ static const ASN1_ITEM local_it = { -# define static_ASN1_ITEM_start(itname) \ +# define static_ASN1_ITEM_start(itname) \ static ASN1_ITEM_start(itname) -# define ASN1_ITEM_end(itname) \ +# define ASN1_ITEM_end(itname) \ }; \ return &local_it; \ } -# endif - /* Macros to aid ASN1 template writing */ # define ASN1_ITEM_TEMPLATE(tname) \ @@ -152,19 +192,25 @@ extern "C" { ASN1_SEQUENCE_cb(tname, cb) # define ASN1_SEQUENCE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ ASN1_SEQUENCE(tname) -# define ASN1_BROKEN_SEQUENCE(tname) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ +# define ASN1_SEQUENCE_const_cb(tname, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, NULL, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_cb_const_cb(tname, cb, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, cb, 0, const_cb}; \ ASN1_SEQUENCE(tname) # define ASN1_SEQUENCE_ref(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0, NULL}; \ ASN1_SEQUENCE(tname) # define ASN1_SEQUENCE_enc(tname, enc, cb) \ - static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc), NULL}; \ ASN1_SEQUENCE(tname) # define ASN1_NDEF_SEQUENCE_END(tname) \ @@ -190,9 +236,6 @@ extern "C" { #tname \ ASN1_ITEM_end(tname) -# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) -# define static_ASN1_BROKEN_SEQUENCE_END(stname) \ - static_ASN1_SEQUENCE_END_ref(stname, stname) # define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) @@ -261,7 +304,7 @@ extern "C" { static const ASN1_TEMPLATE tname##_ch_tt[] # define ASN1_CHOICE_cb(tname, cb) \ - static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ ASN1_CHOICE(tname) # define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) @@ -332,13 +375,9 @@ extern "C" { /* Any defined by macros: the field used is in the table itself */ -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } -# else -# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } -# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } -# endif +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } + /* Plain simple type */ # define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) /* Embedded simple type */ @@ -418,23 +457,7 @@ extern "C" { # define ASN1_ADB(name) \ static const ASN1_ADB_TABLE name##_adbtbl[] -# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ - ;\ - static const ASN1_ADB name##_adb = {\ - flags,\ - offsetof(name, field),\ - adb_cb,\ - name##_adbtbl,\ - sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ - def,\ - none\ - } - -# else - -# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ ;\ static const ASN1_ITEM *name##_adb(void) \ { \ @@ -452,8 +475,6 @@ extern "C" { } \ void dummy_function(void) -# endif - # define ADB_ENTRY(val, template) {val, template} # define ASN1_ADB_TEMPLATE(name) \ @@ -584,64 +605,12 @@ struct ASN1_ITEM_st { const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains * the contents */ long tcount; /* Number of templates if SEQUENCE or CHOICE */ - const void *funcs; /* functions that handle this type */ + const void *funcs; /* further data and type-specific functions */ + /* funcs can be ASN1_PRIMITIVE_FUNCS*, ASN1_EXTERN_FUNCS*, or ASN1_AUX* */ long size; /* Structure size (usually) */ const char *sname; /* Structure name */ }; -/*- - * These are values for the itype field and - * determine how the type is interpreted. - * - * For PRIMITIVE types the underlying type - * determines the behaviour if items is NULL. - * - * Otherwise templates must contain a single - * template and the type is treated in the - * same way as the type specified in the template. - * - * For SEQUENCE types the templates field points - * to the members, the size field is the - * structure size. - * - * For CHOICE types the templates field points - * to each possible member (typically a union) - * and the 'size' field is the offset of the - * selector. - * - * The 'funcs' field is used for application - * specific functions. - * - * The EXTERN type uses a new style d2i/i2d. - * The new style should be used where possible - * because it avoids things like the d2i IMPLICIT - * hack. - * - * MSTRING is a multiple string type, it is used - * for a CHOICE of character strings where the - * actual strings all occupy an ASN1_STRING - * structure. In this case the 'utype' field - * has a special meaning, it is used as a mask - * of acceptable types using the B_ASN1 constants. - * - * NDEF_SEQUENCE is the same as SEQUENCE except - * that it will use indefinite length constructed - * encoding if requested. - * - */ - -# define ASN1_ITYPE_PRIMITIVE 0x0 - -# define ASN1_ITYPE_SEQUENCE 0x1 - -# define ASN1_ITYPE_CHOICE 0x2 - -# define ASN1_ITYPE_EXTERN 0x4 - -# define ASN1_ITYPE_MSTRING 0x5 - -# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 - /* * Cache for ASN1 tag and length, so we don't keep re-reading it for things * like CHOICE @@ -661,21 +630,27 @@ typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx); -typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, +typedef int ASN1_ex_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx, OSSL_LIB_CTX *libctx, + const char *propq); +typedef int ASN1_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef int ASN1_ex_new_ex_func(ASN1_VALUE **pval, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); -typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, +typedef int ASN1_ex_print_func(BIO *out, const ASN1_VALUE **pval, int indent, const char *fname, const ASN1_PCTX *pctx); -typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, +typedef int ASN1_primitive_i2c(const ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); -typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, +typedef int ASN1_primitive_print(BIO *out, const ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx); @@ -687,6 +662,8 @@ typedef struct ASN1_EXTERN_FUNCS_st { ASN1_ex_d2i *asn1_ex_d2i; ASN1_ex_i2d *asn1_ex_i2d; ASN1_ex_print_func *asn1_ex_print; + ASN1_ex_new_ex_func *asn1_ex_new_ex; + ASN1_ex_d2i_ex *asn1_ex_d2i_ex; } ASN1_EXTERN_FUNCS; typedef struct ASN1_PRIMITIVE_FUNCS_st { @@ -711,18 +688,25 @@ typedef struct ASN1_PRIMITIVE_FUNCS_st { * error has occurred and the main operation should be abandoned. If major * changes in the default behaviour are required then an external type is * more appropriate. + * For the operations ASN1_OP_I2D_PRE, ASN1_OP_I2D_POST, ASN1_OP_PRINT_PRE, and + * ASN1_OP_PRINT_POST, meanwhile a variant of the callback with const parameter + * 'in' is provided to make clear statically that its input is not modified. If + * and only if this variant is in use the flag ASN1_AFLG_CONST_CB must be set. */ typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, void *exarg); +typedef int ASN1_aux_const_cb(int operation, const ASN1_VALUE **in, + const ASN1_ITEM *it, void *exarg); typedef struct ASN1_AUX_st { void *app_data; int flags; int ref_offset; /* Offset of reference value */ - int ref_lock; /* Lock type to use */ + int ref_lock; /* Offset of lock value */ ASN1_aux_cb *asn1_cb; int enc_offset; /* Offset of ASN1_ENCODING structure */ + ASN1_aux_const_cb *asn1_const_cb; /* for ASN1_OP_I2D_ and ASN1_OP_PRINT_ */ } ASN1_AUX; /* For print related callbacks exarg points to this structure */ @@ -750,6 +734,8 @@ typedef struct ASN1_STREAM_ARG_st { # define ASN1_AFLG_ENCODING 2 /* The Sequence length is invalid */ # define ASN1_AFLG_BROKEN 4 +/* Use the new asn1_const_cb */ +# define ASN1_AFLG_CONST_CB 8 /* operation values for asn1_cb */ @@ -767,6 +753,10 @@ typedef struct ASN1_STREAM_ARG_st { # define ASN1_OP_STREAM_POST 11 # define ASN1_OP_DETACHED_PRE 12 # define ASN1_OP_DETACHED_POST 13 +# define ASN1_OP_DUP_PRE 14 +# define ASN1_OP_DUP_POST 15 +# define ASN1_OP_GET0_LIBCTX 16 +# define ASN1_OP_GET0_PROPQ 17 /* Macro to implement a primitive type */ # define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) @@ -836,15 +826,15 @@ typedef struct ASN1_STREAM_ARG_st { { \ return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ } \ - int i2d_##fname(stname *a, unsigned char **out) \ + int i2d_##fname(const stname *a, unsigned char **out) \ { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ } # define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ - int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ + int i2d_##stname##_NDEF(const stname *a, unsigned char **out) \ { \ - return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + return ASN1_item_ndef_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ } # define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ @@ -854,28 +844,14 @@ typedef struct ASN1_STREAM_ARG_st { return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ ASN1_ITEM_rptr(stname)); \ } \ - static int i2d_##stname(stname *a, unsigned char **out) \ + static int i2d_##stname(const stname *a, unsigned char **out) \ { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, \ ASN1_ITEM_rptr(stname)); \ } -/* - * This includes evil casts to remove const: they will go away when full ASN1 - * constification is done. - */ -# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ - { \ - return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ - } \ - int i2d_##fname(const stname *a, unsigned char **out) \ - { \ - return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ - } - # define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ - stname * stname##_dup(stname *x) \ + stname * stname##_dup(const stname *x) \ { \ return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ } @@ -884,20 +860,13 @@ typedef struct ASN1_STREAM_ARG_st { IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) # define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ - int fname##_print_ctx(BIO *out, stname *x, int indent, \ + int fname##_print_ctx(BIO *out, const stname *x, int indent, \ const ASN1_PCTX *pctx) \ { \ - return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ + return ASN1_item_print(out, (const ASN1_VALUE *)x, indent, \ ASN1_ITEM_rptr(itname), pctx); \ } -# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ - IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) - -# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ - IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) - /* external definitions for primitive types */ DECLARE_ASN1_ITEM(ASN1_BOOLEAN) @@ -915,7 +884,7 @@ DECLARE_ASN1_ITEM(ZINT64) DECLARE_ASN1_ITEM(UINT64) DECLARE_ASN1_ITEM(ZUINT64) -# if OPENSSL_API_COMPAT < 0x10200000L +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * LONG and ZLONG are strongly discouraged for use as stored data, as the * underlying C type (long) differs in size depending on the architecture. @@ -925,7 +894,34 @@ DECLARE_ASN1_ITEM(LONG) DECLARE_ASN1_ITEM(ZLONG) # endif -DEFINE_STACK_OF(ASN1_VALUE) +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_VALUE, ASN1_VALUE, ASN1_VALUE) +#define sk_ASN1_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_value(sk, idx) ((ASN1_VALUE *)OPENSSL_sk_value(ossl_check_const_ASN1_VALUE_sk_type(sk), (idx))) +#define sk_ASN1_VALUE_new(cmp) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new(ossl_check_ASN1_VALUE_compfunc_type(cmp))) +#define sk_ASN1_VALUE_new_null() ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_null()) +#define sk_ASN1_VALUE_new_reserve(cmp, n) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_VALUE_compfunc_type(cmp), (n))) +#define sk_ASN1_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_VALUE_sk_type(sk), (n)) +#define sk_ASN1_VALUE_free(sk) OPENSSL_sk_free(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_delete(sk, i) ((ASN1_VALUE *)OPENSSL_sk_delete(ossl_check_ASN1_VALUE_sk_type(sk), (i))) +#define sk_ASN1_VALUE_delete_ptr(sk, ptr) ((ASN1_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr))) +#define sk_ASN1_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_pop(sk) ((ASN1_VALUE *)OPENSSL_sk_pop(ossl_check_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_shift(sk) ((ASN1_VALUE *)OPENSSL_sk_shift(ossl_check_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_VALUE_sk_type(sk),ossl_check_ASN1_VALUE_freefunc_type(freefunc)) +#define sk_ASN1_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), (idx)) +#define sk_ASN1_VALUE_set(sk, idx, ptr) ((ASN1_VALUE *)OPENSSL_sk_set(ossl_check_ASN1_VALUE_sk_type(sk), (idx), ossl_check_ASN1_VALUE_type(ptr))) +#define sk_ASN1_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr)) +#define sk_ASN1_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_type(ptr), pnum) +#define sk_ASN1_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_VALUE_sk_type(sk)) +#define sk_ASN1_VALUE_dup(sk) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_dup(ossl_check_const_ASN1_VALUE_sk_type(sk))) +#define sk_ASN1_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_copyfunc_type(copyfunc), ossl_check_ASN1_VALUE_freefunc_type(freefunc))) +#define sk_ASN1_VALUE_set_cmp_func(sk, cmp) ((sk_ASN1_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_VALUE_sk_type(sk), ossl_check_ASN1_VALUE_compfunc_type(cmp))) + + /* Functions used internally by the ASN1 code */ @@ -936,9 +932,14 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx); -int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, +int ASN1_item_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); +/* Legacy compatibility */ +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) IMPLEMENT_ASN1_FUNCTIONS(name) +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) + #ifdef __cplusplus } #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1t.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1t.h.in new file mode 100644 index 00000000..b536fe51 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1t.h.in @@ -0,0 +1,923 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ASN1T_H +# define OPENSSL_ASN1T_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASN1T_H +# endif + +# include +# include +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +/* ASN1 template defines, structures and functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * These are the possible values for the itype field of the + * ASN1_ITEM structure and determine how it is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application-specific + * data and functions. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 +# define ASN1_ITYPE_SEQUENCE 0x1 +# define ASN1_ITYPE_CHOICE 0x2 +/* unused value 0x3 */ +# define ASN1_ITYPE_EXTERN 0x4 +# define ASN1_ITYPE_MSTRING 0x5 +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + const ASN1_ITEM * itname##_it(void) \ + { \ + static const ASN1_ITEM local_it = { + +# define static_ASN1_ITEM_start(itname) \ + static ASN1_ITEM_start(itname) + +# define ASN1_ITEM_end(itname) \ + }; \ + return &local_it; \ + } + +/* Macros to aid ASN1 template writing */ + +# define ASN1_ITEM_TEMPLATE(tname) \ + static const ASN1_TEMPLATE tname##_item_tt + +# define ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) + +/* This is a ASN1 type which just embeds a template */ + +/*- + * This pair helps declare a SEQUENCE. We can do: + * + * ASN1_SEQUENCE(stname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END(stname) + * + * This will produce an ASN1_ITEM called stname_it + * for a structure called stname. + * + * If you want the same structure but a different + * name then use: + * + * ASN1_SEQUENCE(itname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END_name(stname, itname) + * + * This will create an item called itname_it using + * a structure called stname. + */ + +# define ASN1_SEQUENCE(tname) \ + static const ASN1_TEMPLATE tname##_seq_tt[] + +# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) + +# define static_ASN1_SEQUENCE_END(stname) static_ASN1_SEQUENCE_END_name(stname, stname) + +# define ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE(tname) \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ + ASN1_SEQUENCE_cb(tname, cb) + +# define ASN1_SEQUENCE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_const_cb(tname, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, NULL, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_cb_const_cb(tname, cb, const_cb) \ + static const ASN1_AUX tname##_aux = \ + {NULL, ASN1_AFLG_CONST_CB, 0, 0, cb, 0, const_cb}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_ref(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0, NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_enc(tname, enc, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc), NULL}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) + + +# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) +# define static_ASN1_SEQUENCE_END_cb(stname, tname) static_ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/*- + * This pair helps declare a CHOICE type. We can do: + * + * ASN1_CHOICE(chname) = { + * ... CHOICE options ... + * ASN1_CHOICE_END(chname) + * + * This will produce an ASN1_ITEM called chname_it + * for a structure called chname. The structure + * definition must look like this: + * typedef struct { + * int type; + * union { + * ASN1_SOMETHING *opt1; + * ASN1_SOMEOTHER *opt2; + * } value; + * } chname; + * + * the name of the selector must be 'type'. + * to use an alternative selector name use the + * ASN1_CHOICE_END_selector() version. + */ + +# define ASN1_CHOICE(tname) \ + static const ASN1_TEMPLATE tname##_ch_tt[] + +# define ASN1_CHOICE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0, NULL}; \ + ASN1_CHOICE(tname) + +# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) + +# define static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname) + +# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) + +# define static_ASN1_CHOICE_END_name(stname, tname) static_ASN1_CHOICE_END_selector(stname, tname, type) + +# define ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_CHOICE_END_cb(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/* This helps with the template wrapper form of ASN1_ITEM */ + +# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ + (flags), (tag), 0,\ + #name, ASN1_ITEM_ref(type) } + +/* These help with SEQUENCE or CHOICE components */ + +/* used to declare other types */ + +# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ + (flags), (tag), offsetof(stname, field),\ + #field, ASN1_ITEM_ref(type) } + +/* implicit and explicit helper macros */ + +# define ASN1_IMP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | (ex), tag, stname, field, type) + +# define ASN1_EXP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | (ex), tag, stname, field, type) + +/* Any defined by macros: the field used is in the table itself */ + +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } + +/* Plain simple type */ +# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) +/* Embedded simple type */ +# define ASN1_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_EMBED,0, stname, field, type) + +/* OPTIONAL simple type */ +# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) +# define ASN1_OPT_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED, 0, stname, field, type) + +/* IMPLICIT tagged simple type */ +# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) +# define ASN1_IMP_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) + +/* IMPLICIT tagged OPTIONAL simple type */ +# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_IMP_OPT_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* Same as above but EXPLICIT */ + +# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) +# define ASN1_EXP_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) +# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_EXP_OPT_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* SEQUENCE OF type */ +# define ASN1_SEQUENCE_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) + +/* OPTIONAL SEQUENCE OF */ +# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Same as above but for SET OF */ + +# define ASN1_SET_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) + +# define ASN1_SET_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ + +# define ASN1_IMP_SET_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_EXP_SET_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +/* EXPLICIT using indefinite length constructed form */ +# define ASN1_NDEF_EXP(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) + +/* EXPLICIT OPTIONAL using indefinite length constructed form */ +# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) + +/* Macros for the ASN1_ADB structure */ + +# define ASN1_ADB(name) \ + static const ASN1_ADB_TABLE name##_adbtbl[] + +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ + ;\ + static const ASN1_ITEM *name##_adb(void) \ + { \ + static const ASN1_ADB internal_adb = \ + {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + }; \ + return (const ASN1_ITEM *) &internal_adb; \ + } \ + void dummy_function(void) + +# define ADB_ENTRY(val, template) {val, template} + +# define ASN1_ADB_TEMPLATE(name) \ + static const ASN1_TEMPLATE name##_tt + +/* + * This is the ASN1 template structure that defines a wrapper round the + * actual type. It determines the actual position of the field in the value + * structure, various flags such as OPTIONAL and the field name. + */ + +struct ASN1_TEMPLATE_st { + unsigned long flags; /* Various flags */ + long tag; /* tag, not used if no tagging */ + unsigned long offset; /* Offset of this field in structure */ + const char *field_name; /* Field name */ + ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ +}; + +/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ + +# define ASN1_TEMPLATE_item(t) (t->item_ptr) +# define ASN1_TEMPLATE_adb(t) (t->item_ptr) + +typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; +typedef struct ASN1_ADB_st ASN1_ADB; + +struct ASN1_ADB_st { + unsigned long flags; /* Various flags */ + unsigned long offset; /* Offset of selector field */ + int (*adb_cb)(long *psel); /* Application callback */ + const ASN1_ADB_TABLE *tbl; /* Table of possible types */ + long tblcount; /* Number of entries in tbl */ + const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ + const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ +}; + +struct ASN1_ADB_TABLE_st { + long value; /* NID for an object or value for an int */ + const ASN1_TEMPLATE tt; /* item for this value */ +}; + +/* template flags */ + +/* Field is optional */ +# define ASN1_TFLG_OPTIONAL (0x1) + +/* Field is a SET OF */ +# define ASN1_TFLG_SET_OF (0x1 << 1) + +/* Field is a SEQUENCE OF */ +# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) + +/* + * Special case: this refers to a SET OF that will be sorted into DER order + * when encoded *and* the corresponding STACK will be modified to match the + * new order. + */ +# define ASN1_TFLG_SET_ORDER (0x3 << 1) + +/* Mask for SET OF or SEQUENCE OF */ +# define ASN1_TFLG_SK_MASK (0x3 << 1) + +/* + * These flags mean the tag should be taken from the tag field. If EXPLICIT + * then the underlying type is used for the inner tag. + */ + +/* IMPLICIT tagging */ +# define ASN1_TFLG_IMPTAG (0x1 << 3) + +/* EXPLICIT tagging, inner tag from underlying type */ +# define ASN1_TFLG_EXPTAG (0x2 << 3) + +# define ASN1_TFLG_TAG_MASK (0x3 << 3) + +/* context specific IMPLICIT */ +# define ASN1_TFLG_IMPLICIT (ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT) + +/* context specific EXPLICIT */ +# define ASN1_TFLG_EXPLICIT (ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT) + +/* + * If tagging is in force these determine the type of tag to use. Otherwise + * the tag is determined by the underlying type. These values reflect the + * actual octet format. + */ + +/* Universal tag */ +# define ASN1_TFLG_UNIVERSAL (0x0<<6) +/* Application tag */ +# define ASN1_TFLG_APPLICATION (0x1<<6) +/* Context specific tag */ +# define ASN1_TFLG_CONTEXT (0x2<<6) +/* Private tag */ +# define ASN1_TFLG_PRIVATE (0x3<<6) + +# define ASN1_TFLG_TAG_CLASS (0x3<<6) + +/* + * These are for ANY DEFINED BY type. In this case the 'item' field points to + * an ASN1_ADB structure which contains a table of values to decode the + * relevant type + */ + +# define ASN1_TFLG_ADB_MASK (0x3<<8) + +# define ASN1_TFLG_ADB_OID (0x1<<8) + +# define ASN1_TFLG_ADB_INT (0x1<<9) + +/* + * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes + * indefinite length constructed encoding to be used if required. + */ + +# define ASN1_TFLG_NDEF (0x1<<11) + +/* Field is embedded and not a pointer */ +# define ASN1_TFLG_EMBED (0x1 << 12) + +/* This is the actual ASN1 item itself */ + +struct ASN1_ITEM_st { + char itype; /* The item type, primitive, SEQUENCE, CHOICE + * or extern */ + long utype; /* underlying type */ + const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains + * the contents */ + long tcount; /* Number of templates if SEQUENCE or CHOICE */ + const void *funcs; /* further data and type-specific functions */ + /* funcs can be ASN1_PRIMITIVE_FUNCS*, ASN1_EXTERN_FUNCS*, or ASN1_AUX* */ + long size; /* Structure size (usually) */ + const char *sname; /* Structure name */ +}; + +/* + * Cache for ASN1 tag and length, so we don't keep re-reading it for things + * like CHOICE + */ + +struct ASN1_TLC_st { + char valid; /* Values below are valid */ + int ret; /* return value */ + long plen; /* length */ + int ptag; /* class value */ + int pclass; /* class value */ + int hdrlen; /* header length */ +}; + +/* Typedefs for ASN1 function pointers */ +typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +typedef int ASN1_ex_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx, OSSL_LIB_CTX *libctx, + const char *propq); +typedef int ASN1_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); +typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef int ASN1_ex_new_ex_func(ASN1_VALUE **pval, const ASN1_ITEM *it, + OSSL_LIB_CTX *libctx, const char *propq); +typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); + +typedef int ASN1_ex_print_func(BIO *out, const ASN1_VALUE **pval, + int indent, const char *fname, + const ASN1_PCTX *pctx); + +typedef int ASN1_primitive_i2c(const ASN1_VALUE **pval, unsigned char *cont, + int *putype, const ASN1_ITEM *it); +typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, + int len, int utype, char *free_cont, + const ASN1_ITEM *it); +typedef int ASN1_primitive_print(BIO *out, const ASN1_VALUE **pval, + const ASN1_ITEM *it, int indent, + const ASN1_PCTX *pctx); + +typedef struct ASN1_EXTERN_FUNCS_st { + void *app_data; + ASN1_ex_new_func *asn1_ex_new; + ASN1_ex_free_func *asn1_ex_free; + ASN1_ex_free_func *asn1_ex_clear; + ASN1_ex_d2i *asn1_ex_d2i; + ASN1_ex_i2d *asn1_ex_i2d; + ASN1_ex_print_func *asn1_ex_print; + ASN1_ex_new_ex_func *asn1_ex_new_ex; + ASN1_ex_d2i_ex *asn1_ex_d2i_ex; +} ASN1_EXTERN_FUNCS; + +typedef struct ASN1_PRIMITIVE_FUNCS_st { + void *app_data; + unsigned long flags; + ASN1_ex_new_func *prim_new; + ASN1_ex_free_func *prim_free; + ASN1_ex_free_func *prim_clear; + ASN1_primitive_c2i *prim_c2i; + ASN1_primitive_i2c *prim_i2c; + ASN1_primitive_print *prim_print; +} ASN1_PRIMITIVE_FUNCS; + +/* + * This is the ASN1_AUX structure: it handles various miscellaneous + * requirements. For example the use of reference counts and an informational + * callback. The "informational callback" is called at various points during + * the ASN1 encoding and decoding. It can be used to provide minor + * customisation of the structures used. This is most useful where the + * supplied routines *almost* do the right thing but need some extra help at + * a few points. If the callback returns zero then it is assumed a fatal + * error has occurred and the main operation should be abandoned. If major + * changes in the default behaviour are required then an external type is + * more appropriate. + * For the operations ASN1_OP_I2D_PRE, ASN1_OP_I2D_POST, ASN1_OP_PRINT_PRE, and + * ASN1_OP_PRINT_POST, meanwhile a variant of the callback with const parameter + * 'in' is provided to make clear statically that its input is not modified. If + * and only if this variant is in use the flag ASN1_AFLG_CONST_CB must be set. + */ + +typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, + void *exarg); +typedef int ASN1_aux_const_cb(int operation, const ASN1_VALUE **in, + const ASN1_ITEM *it, void *exarg); + +typedef struct ASN1_AUX_st { + void *app_data; + int flags; + int ref_offset; /* Offset of reference value */ + int ref_lock; /* Offset of lock value */ + ASN1_aux_cb *asn1_cb; + int enc_offset; /* Offset of ASN1_ENCODING structure */ + ASN1_aux_const_cb *asn1_const_cb; /* for ASN1_OP_I2D_ and ASN1_OP_PRINT_ */ +} ASN1_AUX; + +/* For print related callbacks exarg points to this structure */ +typedef struct ASN1_PRINT_ARG_st { + BIO *out; + int indent; + const ASN1_PCTX *pctx; +} ASN1_PRINT_ARG; + +/* For streaming related callbacks exarg points to this structure */ +typedef struct ASN1_STREAM_ARG_st { + /* BIO to stream through */ + BIO *out; + /* BIO with filters appended */ + BIO *ndef_bio; + /* Streaming I/O boundary */ + unsigned char **boundary; +} ASN1_STREAM_ARG; + +/* Flags in ASN1_AUX */ + +/* Use a reference count */ +# define ASN1_AFLG_REFCOUNT 1 +/* Save the encoding of structure (useful for signatures) */ +# define ASN1_AFLG_ENCODING 2 +/* The Sequence length is invalid */ +# define ASN1_AFLG_BROKEN 4 +/* Use the new asn1_const_cb */ +# define ASN1_AFLG_CONST_CB 8 + +/* operation values for asn1_cb */ + +# define ASN1_OP_NEW_PRE 0 +# define ASN1_OP_NEW_POST 1 +# define ASN1_OP_FREE_PRE 2 +# define ASN1_OP_FREE_POST 3 +# define ASN1_OP_D2I_PRE 4 +# define ASN1_OP_D2I_POST 5 +# define ASN1_OP_I2D_PRE 6 +# define ASN1_OP_I2D_POST 7 +# define ASN1_OP_PRINT_PRE 8 +# define ASN1_OP_PRINT_POST 9 +# define ASN1_OP_STREAM_PRE 10 +# define ASN1_OP_STREAM_POST 11 +# define ASN1_OP_DETACHED_PRE 12 +# define ASN1_OP_DETACHED_POST 13 +# define ASN1_OP_DUP_PRE 14 +# define ASN1_OP_DUP_POST 15 +# define ASN1_OP_GET0_LIBCTX 16 +# define ASN1_OP_GET0_PROPQ 17 + +/* Macro to implement a primitive type */ +# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) +# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ + ASN1_ITEM_end(itname) + +/* Macro to implement a multi string type */ +# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ + ASN1_ITEM_end(itname) + +# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ + ASN1_ITEM_start(sname) \ + ASN1_ITYPE_EXTERN, \ + tag, \ + NULL, \ + 0, \ + &fptrs, \ + 0, \ + #sname \ + ASN1_ITEM_end(sname) + +/* Macro to implement standard functions in terms of ASN1_ITEM structures */ + +# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) + +# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ + IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) + +# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ + pre stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + pre void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ + stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ + int i2d_##stname##_NDEF(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_ndef_i2d((const ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + } + +# define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ + static stname *d2i_##stname(stname **a, \ + const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ + ASN1_ITEM_rptr(stname)); \ + } \ + static int i2d_##stname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((const ASN1_VALUE *)a, out, \ + ASN1_ITEM_rptr(stname)); \ + } + +# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ + stname * stname##_dup(const stname *x) \ + { \ + return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ + } + +# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ + IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ + int fname##_print_ctx(BIO *out, const stname *x, int indent, \ + const ASN1_PCTX *pctx) \ + { \ + return ASN1_item_print(out, (const ASN1_VALUE *)x, indent, \ + ASN1_ITEM_rptr(itname), pctx); \ + } + +/* external definitions for primitive types */ + +DECLARE_ASN1_ITEM(ASN1_BOOLEAN) +DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_SEQUENCE) +DECLARE_ASN1_ITEM(CBIGNUM) +DECLARE_ASN1_ITEM(BIGNUM) +DECLARE_ASN1_ITEM(INT32) +DECLARE_ASN1_ITEM(ZINT32) +DECLARE_ASN1_ITEM(UINT32) +DECLARE_ASN1_ITEM(ZUINT32) +DECLARE_ASN1_ITEM(INT64) +DECLARE_ASN1_ITEM(ZINT64) +DECLARE_ASN1_ITEM(UINT64) +DECLARE_ASN1_ITEM(ZUINT64) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * LONG and ZLONG are strongly discouraged for use as stored data, as the + * underlying C type (long) differs in size depending on the architecture. + * They are designed with 32-bit longs in mind. + */ +DECLARE_ASN1_ITEM(LONG) +DECLARE_ASN1_ITEM(ZLONG) +# endif + +{- + generate_stack_macros("ASN1_VALUE"); +-} + + +/* Functions used internally by the ASN1 code */ + +int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); +void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); + +int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +int ASN1_item_ex_i2d(const ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); + +/* Legacy compatibility */ +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) IMPLEMENT_ASN1_FUNCTIONS(name) +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/async.h b/deps/openssl/android/x86_64/usr/local/include/openssl/async.h index 7052b890..bc27d5db 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/async.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/async.h @@ -1,7 +1,7 @@ /* * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -9,8 +9,14 @@ #include -#ifndef HEADER_ASYNC_H -# define HEADER_ASYNC_H +#ifndef OPENSSL_ASYNC_H +# define OPENSSL_ASYNC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ASYNC_H +# endif #if defined(_WIN32) # if defined(BASETYPES) || defined(_WINDEF_H) @@ -31,12 +37,18 @@ extern "C" { typedef struct async_job_st ASYNC_JOB; typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; +typedef int (*ASYNC_callback_fn)(void *arg); #define ASYNC_ERR 0 #define ASYNC_NO_JOBS 1 #define ASYNC_PAUSE 2 #define ASYNC_FINISH 3 +#define ASYNC_STATUS_UNSUPPORTED 0 +#define ASYNC_STATUS_ERR 1 +#define ASYNC_STATUS_OK 2 +#define ASYNC_STATUS_EAGAIN 3 + int ASYNC_init_thread(size_t max_size, size_t init_size); void ASYNC_cleanup_thread(void); @@ -52,6 +64,14 @@ int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, OSSL_ASYNC_FD *fd, void **custom_data); int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, size_t *numfds); +int ASYNC_WAIT_CTX_get_callback(ASYNC_WAIT_CTX *ctx, + ASYNC_callback_fn *callback, + void **callback_arg); +int ASYNC_WAIT_CTX_set_callback(ASYNC_WAIT_CTX *ctx, + ASYNC_callback_fn callback, + void *callback_arg); +int ASYNC_WAIT_CTX_set_status(ASYNC_WAIT_CTX *ctx, int status); +int ASYNC_WAIT_CTX_get_status(ASYNC_WAIT_CTX *ctx); int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, size_t *numaddfds, OSSL_ASYNC_FD *delfd, size_t *numdelfds); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/asyncerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/asyncerr.h index 91afbbb2..c093f7be 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/asyncerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/asyncerr.h @@ -1,35 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ASYNCERR_H -# define HEADER_ASYNCERR_H +#ifndef OPENSSL_ASYNCERR_H +# define OPENSSL_ASYNCERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ASYNC_strings(void); -/* - * ASYNC function codes. - */ -# define ASYNC_F_ASYNC_CTX_NEW 100 -# define ASYNC_F_ASYNC_INIT_THREAD 101 -# define ASYNC_F_ASYNC_JOB_NEW 102 -# define ASYNC_F_ASYNC_PAUSE_JOB 103 -# define ASYNC_F_ASYNC_START_FUNC 104 -# define ASYNC_F_ASYNC_START_JOB 105 -# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 106 /* * ASYNC reason codes. diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h b/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h index ae559a51..e16cf622 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h @@ -1,14 +1,24 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/bio.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BIO_H -# define HEADER_BIO_H + +#ifndef OPENSSL_BIO_H +# define OPENSSL_BIO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BIO_H +# endif # include @@ -19,6 +29,7 @@ # include # include +# include #ifdef __cplusplus extern "C" { @@ -55,6 +66,7 @@ extern "C" { # ifndef OPENSSL_NO_SCTP # define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) # endif +# define BIO_TYPE_CORE_TO_PROV (25|BIO_TYPE_SOURCE_SINK) #define BIO_TYPE_START 128 @@ -97,7 +109,7 @@ extern "C" { # define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ # define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ -# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation timed out */ /* #ifdef IP_MTU_DISCOVER */ # define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ @@ -141,6 +153,34 @@ extern "C" { # define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 +/* + * internal BIO: + * # define BIO_CTRL_SET_KTLS_SEND 72 + * # define BIO_CTRL_SET_KTLS_SEND_CTRL_MSG 74 + * # define BIO_CTRL_CLEAR_KTLS_CTRL_MSG 75 + */ + +# define BIO_CTRL_GET_KTLS_SEND 73 +# define BIO_CTRL_GET_KTLS_RECV 76 + +# define BIO_CTRL_DGRAM_SCTP_WAIT_FOR_DRY 77 +# define BIO_CTRL_DGRAM_SCTP_MSG_WAITING 78 + +/* BIO_f_prefix controls */ +# define BIO_CTRL_SET_PREFIX 79 +# define BIO_CTRL_SET_INDENT 80 +# define BIO_CTRL_GET_INDENT 81 + +# ifndef OPENSSL_NO_KTLS +# define BIO_get_ktls_send(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL) > 0) +# define BIO_get_ktls_recv(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL) > 0) +# else +# define BIO_get_ktls_send(b) (0) +# define BIO_get_ktls_recv(b) (0) +# endif + /* modifiers */ # define BIO_FP_READ 0x02 # define BIO_FP_WRITE 0x04 @@ -152,12 +192,9 @@ extern "C" { # define BIO_FLAGS_IO_SPECIAL 0x04 # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) # define BIO_FLAGS_SHOULD_RETRY 0x08 -# ifndef BIO_FLAGS_UPLINK -/* - * "UPLINK" flag denotes file descriptors provided by application. It - * defaults to 0, as most platforms don't require UPLINK interface. - */ -# define BIO_FLAGS_UPLINK 0 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* This #define was replaced by an internal constant and should not be used. */ +# define BIO_FLAGS_UPLINK 0 # endif # define BIO_FLAGS_BASE64_NO_NL 0x100 @@ -171,6 +208,8 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 +/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ + typedef union bio_addr_st BIO_ADDR; typedef struct bio_addrinfo_st BIO_ADDRINFO; @@ -233,16 +272,23 @@ void BIO_clear_flags(BIO *b, int flags); # define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) # define BIO_cb_post(a) ((a)&BIO_CB_RETURN) +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, long argl, long ret); +OSSL_DEPRECATEDIN_3_0 BIO_callback_fn BIO_get_callback(const BIO *b); +OSSL_DEPRECATEDIN_3_0 void BIO_set_callback(BIO *b, BIO_callback_fn callback); +OSSL_DEPRECATEDIN_3_0 long BIO_debug_callback(BIO *bio, int cmd, + const char *argp, int argi, + long argl, long ret); +# endif + typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, size_t len, int argi, long argl, int ret, size_t *processed); -BIO_callback_fn BIO_get_callback(const BIO *b); -void BIO_set_callback(BIO *b, BIO_callback_fn callback); - BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); +long BIO_debug_callback_ex(BIO *bio, int oper, const char *argp, size_t len, + int argi, long argl, int ret, size_t *processed); char *BIO_get_callback_arg(const BIO *b); void BIO_set_callback_arg(BIO *b, char *arg); @@ -255,12 +301,42 @@ int BIO_method_type(const BIO *b); typedef int BIO_info_cb(BIO *, int, int); typedef BIO_info_cb bio_info_cb; /* backward compatibility */ -DEFINE_STACK_OF(BIO) +SKM_DEFINE_STACK_OF_INTERNAL(BIO, BIO, BIO) +#define sk_BIO_num(sk) OPENSSL_sk_num(ossl_check_const_BIO_sk_type(sk)) +#define sk_BIO_value(sk, idx) ((BIO *)OPENSSL_sk_value(ossl_check_const_BIO_sk_type(sk), (idx))) +#define sk_BIO_new(cmp) ((STACK_OF(BIO) *)OPENSSL_sk_new(ossl_check_BIO_compfunc_type(cmp))) +#define sk_BIO_new_null() ((STACK_OF(BIO) *)OPENSSL_sk_new_null()) +#define sk_BIO_new_reserve(cmp, n) ((STACK_OF(BIO) *)OPENSSL_sk_new_reserve(ossl_check_BIO_compfunc_type(cmp), (n))) +#define sk_BIO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_BIO_sk_type(sk), (n)) +#define sk_BIO_free(sk) OPENSSL_sk_free(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_zero(sk) OPENSSL_sk_zero(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_delete(sk, i) ((BIO *)OPENSSL_sk_delete(ossl_check_BIO_sk_type(sk), (i))) +#define sk_BIO_delete_ptr(sk, ptr) ((BIO *)OPENSSL_sk_delete_ptr(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr))) +#define sk_BIO_push(sk, ptr) OPENSSL_sk_push(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_pop(sk) ((BIO *)OPENSSL_sk_pop(ossl_check_BIO_sk_type(sk))) +#define sk_BIO_shift(sk) ((BIO *)OPENSSL_sk_shift(ossl_check_BIO_sk_type(sk))) +#define sk_BIO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_BIO_sk_type(sk),ossl_check_BIO_freefunc_type(freefunc)) +#define sk_BIO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr), (idx)) +#define sk_BIO_set(sk, idx, ptr) ((BIO *)OPENSSL_sk_set(ossl_check_BIO_sk_type(sk), (idx), ossl_check_BIO_type(ptr))) +#define sk_BIO_find(sk, ptr) OPENSSL_sk_find(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr)) +#define sk_BIO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_BIO_sk_type(sk), ossl_check_BIO_type(ptr), pnum) +#define sk_BIO_sort(sk) OPENSSL_sk_sort(ossl_check_BIO_sk_type(sk)) +#define sk_BIO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_BIO_sk_type(sk)) +#define sk_BIO_dup(sk) ((STACK_OF(BIO) *)OPENSSL_sk_dup(ossl_check_const_BIO_sk_type(sk))) +#define sk_BIO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(BIO) *)OPENSSL_sk_deep_copy(ossl_check_const_BIO_sk_type(sk), ossl_check_BIO_copyfunc_type(copyfunc), ossl_check_BIO_freefunc_type(freefunc))) +#define sk_BIO_set_cmp_func(sk, cmp) ((sk_BIO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_BIO_sk_type(sk), ossl_check_BIO_compfunc_type(cmp))) + + /* Prefix and suffix callback in ASN1 BIO */ typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, void *parg); +typedef void (*BIO_dgram_sctp_notification_handler_fn) (BIO *b, + void *context, + void *buf); # ifndef OPENSSL_NO_SCTP /* SCTP parameter structs */ struct bio_dgram_sctp_sndinfo { @@ -400,12 +476,11 @@ struct bio_dgram_sctp_prinfo { # define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR # define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) # define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) - -/* BIO_s_accept() and BIO_s_connect() */ -# define BIO_do_connect(b) BIO_do_handshake(b) -# define BIO_do_accept(b) BIO_do_handshake(b) # endif /* OPENSSL_NO_SOCK */ +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) + # define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) /* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ @@ -524,10 +599,15 @@ int BIO_ctrl_reset_read_request(BIO *b); # define BIO_dgram_get_mtu_overhead(b) \ (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) +/* ctrl macros for BIO_f_prefix */ +# define BIO_set_prefix(b,p) BIO_ctrl((b), BIO_CTRL_SET_PREFIX, 0, (void *)(p)) +# define BIO_set_indent(b,i) BIO_ctrl((b), BIO_CTRL_SET_INDENT, (i), NULL) +# define BIO_get_indent(b) BIO_ctrl((b), BIO_CTRL_GET_INDENT, 0, NULL) + #define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) int BIO_set_ex_data(BIO *bio, int idx, void *data); -void *BIO_get_ex_data(BIO *bio, int idx); +void *BIO_get_ex_data(const BIO *bio, int idx); uint64_t BIO_number_read(BIO *bio); uint64_t BIO_number_written(BIO *bio); @@ -543,9 +623,11 @@ int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, const BIO_METHOD *BIO_s_file(void); BIO *BIO_new_file(const char *filename, const char *mode); +BIO *BIO_new_from_core_bio(OSSL_LIB_CTX *libctx, OSSL_CORE_BIO *corebio); # ifndef OPENSSL_NO_STDIO BIO *BIO_new_fp(FILE *stream, int close_flag); # endif +BIO *BIO_new_ex(OSSL_LIB_CTX *libctx, const BIO_METHOD *method); BIO *BIO_new(const BIO_METHOD *type); int BIO_free(BIO *a); void BIO_set_data(BIO *a, void *ptr); @@ -559,6 +641,7 @@ int BIO_up_ref(BIO *a); int BIO_read(BIO *b, void *data, int dlen); int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); int BIO_gets(BIO *bp, char *buf, int size); +int BIO_get_line(BIO *bio, char *buf, int size); int BIO_write(BIO *b, const void *data, int dlen); int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); int BIO_puts(BIO *bp, const char *buf); @@ -583,9 +666,6 @@ int BIO_nread(BIO *bio, char **buf, int num); int BIO_nwrite0(BIO *bio, char **buf); int BIO_nwrite(BIO *bio, char **buf, int num); -long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, - long argl, long ret); - const BIO_METHOD *BIO_s_mem(void); const BIO_METHOD *BIO_s_secmem(void); BIO *BIO_new_mem_buf(const void *buf, int len); @@ -600,8 +680,11 @@ const BIO_METHOD *BIO_s_bio(void); const BIO_METHOD *BIO_s_null(void); const BIO_METHOD *BIO_f_null(void); const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_readbuffer(void); const BIO_METHOD *BIO_f_linebuffer(void); const BIO_METHOD *BIO_f_nbio_test(void); +const BIO_METHOD *BIO_f_prefix(void); +const BIO_METHOD *BIO_s_core(void); # ifndef OPENSSL_NO_DGRAM const BIO_METHOD *BIO_s_datagram(void); int BIO_dgram_non_fatal_error(int error); @@ -611,10 +694,8 @@ const BIO_METHOD *BIO_s_datagram_sctp(void); BIO *BIO_new_dgram_sctp(int fd, int close_flag); int BIO_dgram_is_sctp(BIO *bio); int BIO_dgram_sctp_notification_cb(BIO *b, - void (*handle_notifications) (BIO *bio, - void *context, - void *buf), - void *context); + BIO_dgram_sctp_notification_handler_fn handle_notifications, + void *context); int BIO_dgram_sctp_wait_for_dry(BIO *b); int BIO_dgram_sctp_msg_waiting(BIO *b); # endif @@ -623,21 +704,24 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_socket_wait(int fd, int for_read, time_t max_time); # endif +int BIO_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds); +int BIO_do_connect_retry(BIO *bio, int timeout, int nap_milliseconds); int BIO_fd_should_retry(int i); int BIO_fd_non_fatal_error(int error); int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len); + void *u, const void *s, int len); int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), - void *u, const char *s, int len, int indent); -int BIO_dump(BIO *b, const char *bytes, int len); -int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); + void *u, const void *s, int len, int indent); +int BIO_dump(BIO *b, const void *bytes, int len); +int BIO_dump_indent(BIO *b, const void *bytes, int len, int indent); # ifndef OPENSSL_NO_STDIO -int BIO_dump_fp(FILE *fp, const char *s, int len); -int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); +int BIO_dump_fp(FILE *fp, const void *s, int len); +int BIO_dump_indent_fp(FILE *fp, const void *s, int len, int indent); # endif -int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, +int BIO_hex_string(BIO *out, int indent, int width, const void *data, int datalen); # ifndef OPENSSL_NO_SOCK @@ -678,16 +762,17 @@ int BIO_sock_error(int sock); int BIO_socket_ioctl(int fd, long type, void *arg); int BIO_socket_nbio(int fd, int mode); int BIO_sock_init(void); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define BIO_sock_cleanup() while(0) continue # endif int BIO_set_tcp_ndelay(int sock, int turn_on); - -DEPRECATEDIN_1_1_0(struct hostent *BIO_gethostbyname(const char *name)) -DEPRECATEDIN_1_1_0(int BIO_get_port(const char *str, unsigned short *port_ptr)) -DEPRECATEDIN_1_1_0(int BIO_get_host_ip(const char *str, unsigned char *ip)) -DEPRECATEDIN_1_1_0(int BIO_get_accept_socket(char *host_port, int mode)) -DEPRECATEDIN_1_1_0(int BIO_accept(int sock, char **ip_port)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 struct hostent *BIO_gethostbyname(const char *name); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_port(const char *str, unsigned short *port_ptr); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_host_ip(const char *str, unsigned char *ip); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_accept_socket(char *host_port, int mode); +OSSL_DEPRECATEDIN_1_1_0 int BIO_accept(int sock, char **ip_port); +# endif union BIO_sock_info_u { BIO_ADDR *addr; @@ -734,6 +819,7 @@ void BIO_copy_next_retry(BIO *b); # define ossl_bio__attr__(x) # if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__MINGW32__) && !defined(__MINGW64__) \ && !defined(__APPLE__) /* * Because we support the 'z' modifier, which made its appearance in C99, diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h.in new file mode 100644 index 00000000..c521e41e --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h.in @@ -0,0 +1,864 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_BIO_H +# define OPENSSL_BIO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BIO_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* There are the classes of BIOs */ +# define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */ +# define BIO_TYPE_FILTER 0x0200 +# define BIO_TYPE_SOURCE_SINK 0x0400 + +/* These are the 'types' of BIOs */ +# define BIO_TYPE_NONE 0 +# define BIO_TYPE_MEM ( 1|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_FILE ( 2|BIO_TYPE_SOURCE_SINK) + +# define BIO_TYPE_FD ( 4|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_SOCKET ( 5|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_NULL ( 6|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_SSL ( 7|BIO_TYPE_FILTER) +# define BIO_TYPE_MD ( 8|BIO_TYPE_FILTER) +# define BIO_TYPE_BUFFER ( 9|BIO_TYPE_FILTER) +# define BIO_TYPE_CIPHER (10|BIO_TYPE_FILTER) +# define BIO_TYPE_BASE64 (11|BIO_TYPE_FILTER) +# define BIO_TYPE_CONNECT (12|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ACCEPT (13|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) + +# define BIO_TYPE_NBIO_TEST (16|BIO_TYPE_FILTER)/* server proxy BIO */ +# define BIO_TYPE_NULL_FILTER (17|BIO_TYPE_FILTER) +# define BIO_TYPE_BIO (19|BIO_TYPE_SOURCE_SINK)/* half a BIO pair */ +# define BIO_TYPE_LINEBUFFER (20|BIO_TYPE_FILTER) +# define BIO_TYPE_DGRAM (21|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ASN1 (22|BIO_TYPE_FILTER) +# define BIO_TYPE_COMP (23|BIO_TYPE_FILTER) +# ifndef OPENSSL_NO_SCTP +# define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# endif +# define BIO_TYPE_CORE_TO_PROV (25|BIO_TYPE_SOURCE_SINK) + +#define BIO_TYPE_START 128 + +/* + * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. + * BIO_set_fp(in,stdin,BIO_NOCLOSE); + */ +# define BIO_NOCLOSE 0x00 +# define BIO_CLOSE 0x01 + +/* + * These are used in the following macros and are passed to BIO_ctrl() + */ +# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ +# define BIO_CTRL_EOF 2/* opt - are we at the eof */ +# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ +# define BIO_CTRL_SET 4/* man - set the 'IO' type */ +# define BIO_CTRL_GET 5/* man - get the 'IO' type */ +# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ +# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ +# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ +# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ +# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ +# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ +# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ +# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ +# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ +# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ + +# define BIO_CTRL_PEEK 29/* BIO_f_buffer special */ +# define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ + +/* dgram BIO stuff */ +# define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ +# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected + * socket to be passed in */ +# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ +# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ + +# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation timed out */ + +/* #ifdef IP_MTU_DISCOVER */ +# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ +/* #endif */ + +# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ +# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 +# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ +# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. + * want to use this if asking + * the kernel fails */ + +# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was + * exceed in the previous write + * operation */ + +# define BIO_CTRL_DGRAM_GET_PEER 46 +# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ + +# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout + * to adjust socket timeouts */ +# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 + +# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 + +/* Deliberately outside of OPENSSL_NO_SCTP - used in bss_dgram.c */ +# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 +# ifndef OPENSSL_NO_SCTP +/* SCTP stuff */ +# define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 +# define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 +# define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 +# define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 +# define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 +# define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 +# define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 +# define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 +# define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 +# define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 +# endif + +# define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 + +/* + * internal BIO: + * # define BIO_CTRL_SET_KTLS_SEND 72 + * # define BIO_CTRL_SET_KTLS_SEND_CTRL_MSG 74 + * # define BIO_CTRL_CLEAR_KTLS_CTRL_MSG 75 + */ + +# define BIO_CTRL_GET_KTLS_SEND 73 +# define BIO_CTRL_GET_KTLS_RECV 76 + +# define BIO_CTRL_DGRAM_SCTP_WAIT_FOR_DRY 77 +# define BIO_CTRL_DGRAM_SCTP_MSG_WAITING 78 + +/* BIO_f_prefix controls */ +# define BIO_CTRL_SET_PREFIX 79 +# define BIO_CTRL_SET_INDENT 80 +# define BIO_CTRL_GET_INDENT 81 + +# ifndef OPENSSL_NO_KTLS +# define BIO_get_ktls_send(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL) > 0) +# define BIO_get_ktls_recv(b) \ + (BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL) > 0) +# else +# define BIO_get_ktls_send(b) (0) +# define BIO_get_ktls_recv(b) (0) +# endif + +/* modifiers */ +# define BIO_FP_READ 0x02 +# define BIO_FP_WRITE 0x04 +# define BIO_FP_APPEND 0x08 +# define BIO_FP_TEXT 0x10 + +# define BIO_FLAGS_READ 0x01 +# define BIO_FLAGS_WRITE 0x02 +# define BIO_FLAGS_IO_SPECIAL 0x04 +# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) +# define BIO_FLAGS_SHOULD_RETRY 0x08 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* This #define was replaced by an internal constant and should not be used. */ +# define BIO_FLAGS_UPLINK 0 +# endif + +# define BIO_FLAGS_BASE64_NO_NL 0x100 + +/* + * This is used with memory BIOs: + * BIO_FLAGS_MEM_RDONLY means we shouldn't free up or change the data in any way; + * BIO_FLAGS_NONCLEAR_RST means we shouldn't clear data on reset. + */ +# define BIO_FLAGS_MEM_RDONLY 0x200 +# define BIO_FLAGS_NONCLEAR_RST 0x400 +# define BIO_FLAGS_IN_EOF 0x800 + +/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ + +typedef union bio_addr_st BIO_ADDR; +typedef struct bio_addrinfo_st BIO_ADDRINFO; + +int BIO_get_new_index(void); +void BIO_set_flags(BIO *b, int flags); +int BIO_test_flags(const BIO *b, int flags); +void BIO_clear_flags(BIO *b, int flags); + +# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) +# define BIO_set_retry_special(b) \ + BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_read(b) \ + BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_write(b) \ + BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) + +/* These are normally used internally in BIOs */ +# define BIO_clear_retry_flags(b) \ + BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_get_retry_flags(b) \ + BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) + +/* These should be used by the application to tell why we should retry */ +# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) +# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) +# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) +# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) +# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) + +/* + * The next three are used in conjunction with the BIO_should_io_special() + * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int + * *reason); will walk the BIO stack and return the 'reason' for the special + * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return + * the code. + */ +/* + * Returned from the SSL bio when the certificate retrieval code had an error + */ +# define BIO_RR_SSL_X509_LOOKUP 0x01 +/* Returned from the connect BIO when a connect would have blocked */ +# define BIO_RR_CONNECT 0x02 +/* Returned from the accept BIO when an accept would have blocked */ +# define BIO_RR_ACCEPT 0x03 + +/* These are passed by the BIO callback */ +# define BIO_CB_FREE 0x01 +# define BIO_CB_READ 0x02 +# define BIO_CB_WRITE 0x03 +# define BIO_CB_PUTS 0x04 +# define BIO_CB_GETS 0x05 +# define BIO_CB_CTRL 0x06 + +/* + * The callback is called before and after the underling operation, The + * BIO_CB_RETURN flag indicates if it is after the call + */ +# define BIO_CB_RETURN 0x80 +# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) +# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) +# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, + long argl, long ret); +OSSL_DEPRECATEDIN_3_0 BIO_callback_fn BIO_get_callback(const BIO *b); +OSSL_DEPRECATEDIN_3_0 void BIO_set_callback(BIO *b, BIO_callback_fn callback); +OSSL_DEPRECATEDIN_3_0 long BIO_debug_callback(BIO *bio, int cmd, + const char *argp, int argi, + long argl, long ret); +# endif + +typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, + size_t len, int argi, + long argl, int ret, size_t *processed); +BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); +void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); +long BIO_debug_callback_ex(BIO *bio, int oper, const char *argp, size_t len, + int argi, long argl, int ret, size_t *processed); + +char *BIO_get_callback_arg(const BIO *b); +void BIO_set_callback_arg(BIO *b, char *arg); + +typedef struct bio_method_st BIO_METHOD; + +const char *BIO_method_name(const BIO *b); +int BIO_method_type(const BIO *b); + +typedef int BIO_info_cb(BIO *, int, int); +typedef BIO_info_cb bio_info_cb; /* backward compatibility */ + +{- + generate_stack_macros("BIO"); +-} + + +/* Prefix and suffix callback in ASN1 BIO */ +typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, + void *parg); + +typedef void (*BIO_dgram_sctp_notification_handler_fn) (BIO *b, + void *context, + void *buf); +# ifndef OPENSSL_NO_SCTP +/* SCTP parameter structs */ +struct bio_dgram_sctp_sndinfo { + uint16_t snd_sid; + uint16_t snd_flags; + uint32_t snd_ppid; + uint32_t snd_context; +}; + +struct bio_dgram_sctp_rcvinfo { + uint16_t rcv_sid; + uint16_t rcv_ssn; + uint16_t rcv_flags; + uint32_t rcv_ppid; + uint32_t rcv_tsn; + uint32_t rcv_cumtsn; + uint32_t rcv_context; +}; + +struct bio_dgram_sctp_prinfo { + uint16_t pr_policy; + uint32_t pr_value; +}; +# endif + +/* + * #define BIO_CONN_get_param_hostname BIO_ctrl + */ + +# define BIO_C_SET_CONNECT 100 +# define BIO_C_DO_STATE_MACHINE 101 +# define BIO_C_SET_NBIO 102 +/* # define BIO_C_SET_PROXY_PARAM 103 */ +# define BIO_C_SET_FD 104 +# define BIO_C_GET_FD 105 +# define BIO_C_SET_FILE_PTR 106 +# define BIO_C_GET_FILE_PTR 107 +# define BIO_C_SET_FILENAME 108 +# define BIO_C_SET_SSL 109 +# define BIO_C_GET_SSL 110 +# define BIO_C_SET_MD 111 +# define BIO_C_GET_MD 112 +# define BIO_C_GET_CIPHER_STATUS 113 +# define BIO_C_SET_BUF_MEM 114 +# define BIO_C_GET_BUF_MEM_PTR 115 +# define BIO_C_GET_BUFF_NUM_LINES 116 +# define BIO_C_SET_BUFF_SIZE 117 +# define BIO_C_SET_ACCEPT 118 +# define BIO_C_SSL_MODE 119 +# define BIO_C_GET_MD_CTX 120 +/* # define BIO_C_GET_PROXY_PARAM 121 */ +# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ +# define BIO_C_GET_CONNECT 123 +# define BIO_C_GET_ACCEPT 124 +# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 +# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 +# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 +# define BIO_C_FILE_SEEK 128 +# define BIO_C_GET_CIPHER_CTX 129 +# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input + * value */ +# define BIO_C_SET_BIND_MODE 131 +# define BIO_C_GET_BIND_MODE 132 +# define BIO_C_FILE_TELL 133 +# define BIO_C_GET_SOCKS 134 +# define BIO_C_SET_SOCKS 135 + +# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ +# define BIO_C_GET_WRITE_BUF_SIZE 137 +# define BIO_C_MAKE_BIO_PAIR 138 +# define BIO_C_DESTROY_BIO_PAIR 139 +# define BIO_C_GET_WRITE_GUARANTEE 140 +# define BIO_C_GET_READ_REQUEST 141 +# define BIO_C_SHUTDOWN_WR 142 +# define BIO_C_NREAD0 143 +# define BIO_C_NREAD 144 +# define BIO_C_NWRITE0 145 +# define BIO_C_NWRITE 146 +# define BIO_C_RESET_READ_REQUEST 147 +# define BIO_C_SET_MD_CTX 148 + +# define BIO_C_SET_PREFIX 149 +# define BIO_C_GET_PREFIX 150 +# define BIO_C_SET_SUFFIX 151 +# define BIO_C_GET_SUFFIX 152 + +# define BIO_C_SET_EX_ARG 153 +# define BIO_C_GET_EX_ARG 154 + +# define BIO_C_SET_CONNECT_MODE 155 + +# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) +# define BIO_get_app_data(s) BIO_get_ex_data(s,0) + +# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +# ifndef OPENSSL_NO_SOCK +/* IP families we support, for BIO_s_connect() and BIO_s_accept() */ +/* Note: the underlying operating system may not support some of them */ +# define BIO_FAMILY_IPV4 4 +# define BIO_FAMILY_IPV6 6 +# define BIO_FAMILY_IPANY 256 + +/* BIO_s_connect() */ +# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0, \ + (char *)(name)) +# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1, \ + (char *)(port)) +# define BIO_set_conn_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2, \ + (char *)(addr)) +# define BIO_set_conn_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f) +# define BIO_get_conn_hostname(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)) +# define BIO_get_conn_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)) +# define BIO_get_conn_address(b) ((const BIO_ADDR *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)) +# define BIO_get_conn_ip_family(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) +# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) + +/* BIO_s_accept() */ +# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \ + (char *)(name)) +# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1, \ + (char *)(port)) +# define BIO_get_accept_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)) +# define BIO_get_accept_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1)) +# define BIO_get_peer_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2)) +# define BIO_get_peer_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3)) +/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ +# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(n)?(void *)"a":NULL) +# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3, \ + (char *)(bio)) +# define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f) +# define BIO_get_accept_ip_family(b) BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL) + +/* Aliases kept for backward compatibility */ +# define BIO_BIND_NORMAL 0 +# define BIO_BIND_REUSEADDR BIO_SOCK_REUSEADDR +# define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR +# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) +# define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) +# endif /* OPENSSL_NO_SOCK */ + +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) + +# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ +# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) +# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)(c)) + +/* BIO_s_file() */ +# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)(fp)) +# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)(fpp)) + +/* BIO_s_fd() and BIO_s_file() */ +# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) +# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) + +/* + * name is cast to lose const, but might be better to route through a + * function so we can do it safely + */ +# ifdef CONST_STRICT +/* + * If you are wondering why this isn't defined, its because CONST_STRICT is + * purely a compile-time kludge to allow const to be checked. + */ +int BIO_read_filename(BIO *b, const char *name); +# else +# define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ,(char *)(name)) +# endif +# define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_WRITE,name) +# define BIO_append_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_APPEND,name) +# define BIO_rw_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) + +/* + * WARNING WARNING, this ups the reference count on the read bio of the SSL + * structure. This is because the ssl read BIO is now pointed to by the + * next_bio field in the bio. So when you free the BIO, make sure you are + * doing a BIO_free_all() to catch the underlying BIO. + */ +# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)(ssl)) +# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)(sslp)) +# define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) +# define BIO_set_ssl_renegotiate_bytes(b,num) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) +# define BIO_get_num_renegotiates(b) \ + BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) +# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) + +/* defined in evp.h */ +/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)(md)) */ + +# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)(pp)) +# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)(bm)) +# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0, \ + (char *)(pp)) +# define BIO_set_mem_eof_return(b,v) \ + BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) + +/* For the BIO_f_buffer() type */ +# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) +# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) +# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) +# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) +# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) + +/* Don't use the next one unless you know what you are doing :-) */ +# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) + +# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) +# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) +# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) +# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) +# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) +# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) +/* ...pending macros have inappropriate return type */ +size_t BIO_ctrl_pending(BIO *b); +size_t BIO_ctrl_wpending(BIO *b); +# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) +# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ + cbp) +# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) + +/* For the BIO_f_buffer() type */ +# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) +# define BIO_buffer_peek(b,s,l) BIO_ctrl(b,BIO_CTRL_PEEK,(l),(s)) + +/* For BIO_s_bio() */ +# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) +# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) +# define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) +# define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) +# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) +/* macros with inappropriate type -- but ...pending macros use int too: */ +# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) +# define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) +size_t BIO_ctrl_get_write_guarantee(BIO *b); +size_t BIO_ctrl_get_read_request(BIO *b); +int BIO_ctrl_reset_read_request(BIO *b); + +/* ctrl macros for dgram */ +# define BIO_ctrl_dgram_connect(b,peer) \ + (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)(peer)) +# define BIO_ctrl_set_connected(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (char *)(peer)) +# define BIO_dgram_recv_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) +# define BIO_dgram_send_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) +# define BIO_dgram_get_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)(peer)) +# define BIO_dgram_set_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)(peer)) +# define BIO_dgram_get_mtu_overhead(b) \ + (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) + +/* ctrl macros for BIO_f_prefix */ +# define BIO_set_prefix(b,p) BIO_ctrl((b), BIO_CTRL_SET_PREFIX, 0, (void *)(p)) +# define BIO_set_indent(b,i) BIO_ctrl((b), BIO_CTRL_SET_INDENT, (i), NULL) +# define BIO_get_indent(b) BIO_ctrl((b), BIO_CTRL_GET_INDENT, 0, NULL) + +#define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) +int BIO_set_ex_data(BIO *bio, int idx, void *data); +void *BIO_get_ex_data(const BIO *bio, int idx); +uint64_t BIO_number_read(BIO *bio); +uint64_t BIO_number_written(BIO *bio); + +/* For BIO_f_asn1() */ +int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, + asn1_ps_func *prefix_free); +int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, + asn1_ps_func **pprefix_free); +int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, + asn1_ps_func *suffix_free); +int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, + asn1_ps_func **psuffix_free); + +const BIO_METHOD *BIO_s_file(void); +BIO *BIO_new_file(const char *filename, const char *mode); +BIO *BIO_new_from_core_bio(OSSL_LIB_CTX *libctx, OSSL_CORE_BIO *corebio); +# ifndef OPENSSL_NO_STDIO +BIO *BIO_new_fp(FILE *stream, int close_flag); +# endif +BIO *BIO_new_ex(OSSL_LIB_CTX *libctx, const BIO_METHOD *method); +BIO *BIO_new(const BIO_METHOD *type); +int BIO_free(BIO *a); +void BIO_set_data(BIO *a, void *ptr); +void *BIO_get_data(BIO *a); +void BIO_set_init(BIO *a, int init); +int BIO_get_init(BIO *a); +void BIO_set_shutdown(BIO *a, int shut); +int BIO_get_shutdown(BIO *a); +void BIO_vfree(BIO *a); +int BIO_up_ref(BIO *a); +int BIO_read(BIO *b, void *data, int dlen); +int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); +int BIO_gets(BIO *bp, char *buf, int size); +int BIO_get_line(BIO *bio, char *buf, int size); +int BIO_write(BIO *b, const void *data, int dlen); +int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); +int BIO_puts(BIO *bp, const char *buf); +int BIO_indent(BIO *b, int indent, int max); +long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); +long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); +void *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); +long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); +BIO *BIO_push(BIO *b, BIO *append); +BIO *BIO_pop(BIO *b); +void BIO_free_all(BIO *a); +BIO *BIO_find_type(BIO *b, int bio_type); +BIO *BIO_next(BIO *b); +void BIO_set_next(BIO *b, BIO *next); +BIO *BIO_get_retry_BIO(BIO *bio, int *reason); +int BIO_get_retry_reason(BIO *bio); +void BIO_set_retry_reason(BIO *bio, int reason); +BIO *BIO_dup_chain(BIO *in); + +int BIO_nread0(BIO *bio, char **buf); +int BIO_nread(BIO *bio, char **buf, int num); +int BIO_nwrite0(BIO *bio, char **buf); +int BIO_nwrite(BIO *bio, char **buf, int num); + +const BIO_METHOD *BIO_s_mem(void); +const BIO_METHOD *BIO_s_secmem(void); +BIO *BIO_new_mem_buf(const void *buf, int len); +# ifndef OPENSSL_NO_SOCK +const BIO_METHOD *BIO_s_socket(void); +const BIO_METHOD *BIO_s_connect(void); +const BIO_METHOD *BIO_s_accept(void); +# endif +const BIO_METHOD *BIO_s_fd(void); +const BIO_METHOD *BIO_s_log(void); +const BIO_METHOD *BIO_s_bio(void); +const BIO_METHOD *BIO_s_null(void); +const BIO_METHOD *BIO_f_null(void); +const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_readbuffer(void); +const BIO_METHOD *BIO_f_linebuffer(void); +const BIO_METHOD *BIO_f_nbio_test(void); +const BIO_METHOD *BIO_f_prefix(void); +const BIO_METHOD *BIO_s_core(void); +# ifndef OPENSSL_NO_DGRAM +const BIO_METHOD *BIO_s_datagram(void); +int BIO_dgram_non_fatal_error(int error); +BIO *BIO_new_dgram(int fd, int close_flag); +# ifndef OPENSSL_NO_SCTP +const BIO_METHOD *BIO_s_datagram_sctp(void); +BIO *BIO_new_dgram_sctp(int fd, int close_flag); +int BIO_dgram_is_sctp(BIO *bio); +int BIO_dgram_sctp_notification_cb(BIO *b, + BIO_dgram_sctp_notification_handler_fn handle_notifications, + void *context); +int BIO_dgram_sctp_wait_for_dry(BIO *b); +int BIO_dgram_sctp_msg_waiting(BIO *b); +# endif +# endif + +# ifndef OPENSSL_NO_SOCK +int BIO_sock_should_retry(int i); +int BIO_sock_non_fatal_error(int error); +int BIO_socket_wait(int fd, int for_read, time_t max_time); +# endif +int BIO_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds); +int BIO_do_connect_retry(BIO *bio, int timeout, int nap_milliseconds); + +int BIO_fd_should_retry(int i); +int BIO_fd_non_fatal_error(int error); +int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const void *s, int len); +int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const void *s, int len, int indent); +int BIO_dump(BIO *b, const void *bytes, int len); +int BIO_dump_indent(BIO *b, const void *bytes, int len, int indent); +# ifndef OPENSSL_NO_STDIO +int BIO_dump_fp(FILE *fp, const void *s, int len); +int BIO_dump_indent_fp(FILE *fp, const void *s, int len, int indent); +# endif +int BIO_hex_string(BIO *out, int indent, int width, const void *data, + int datalen); + +# ifndef OPENSSL_NO_SOCK +BIO_ADDR *BIO_ADDR_new(void); +int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, + const void *where, size_t wherelen, unsigned short port); +void BIO_ADDR_free(BIO_ADDR *); +void BIO_ADDR_clear(BIO_ADDR *ap); +int BIO_ADDR_family(const BIO_ADDR *ap); +int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); +unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); +char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_path_string(const BIO_ADDR *ap); + +const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai); +const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai); +void BIO_ADDRINFO_free(BIO_ADDRINFO *bai); + +enum BIO_hostserv_priorities { + BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV +}; +int BIO_parse_hostserv(const char *hostserv, char **host, char **service, + enum BIO_hostserv_priorities hostserv_prio); +enum BIO_lookup_type { + BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER +}; +int BIO_lookup(const char *host, const char *service, + enum BIO_lookup_type lookup_type, + int family, int socktype, BIO_ADDRINFO **res); +int BIO_lookup_ex(const char *host, const char *service, + int lookup_type, int family, int socktype, int protocol, + BIO_ADDRINFO **res); +int BIO_sock_error(int sock); +int BIO_socket_ioctl(int fd, long type, void *arg); +int BIO_socket_nbio(int fd, int mode); +int BIO_sock_init(void); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define BIO_sock_cleanup() while(0) continue +# endif +int BIO_set_tcp_ndelay(int sock, int turn_on); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 struct hostent *BIO_gethostbyname(const char *name); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_port(const char *str, unsigned short *port_ptr); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_host_ip(const char *str, unsigned char *ip); +OSSL_DEPRECATEDIN_1_1_0 int BIO_get_accept_socket(char *host_port, int mode); +OSSL_DEPRECATEDIN_1_1_0 int BIO_accept(int sock, char **ip_port); +# endif + +union BIO_sock_info_u { + BIO_ADDR *addr; +}; +enum BIO_sock_info_type { + BIO_SOCK_INFO_ADDRESS +}; +int BIO_sock_info(int sock, + enum BIO_sock_info_type type, union BIO_sock_info_u *info); + +# define BIO_SOCK_REUSEADDR 0x01 +# define BIO_SOCK_V6_ONLY 0x02 +# define BIO_SOCK_KEEPALIVE 0x04 +# define BIO_SOCK_NONBLOCK 0x08 +# define BIO_SOCK_NODELAY 0x10 + +int BIO_socket(int domain, int socktype, int protocol, int options); +int BIO_connect(int sock, const BIO_ADDR *addr, int options); +int BIO_bind(int sock, const BIO_ADDR *addr, int options); +int BIO_listen(int sock, const BIO_ADDR *addr, int options); +int BIO_accept_ex(int accept_sock, BIO_ADDR *addr, int options); +int BIO_closesocket(int sock); + +BIO *BIO_new_socket(int sock, int close_flag); +BIO *BIO_new_connect(const char *host_port); +BIO *BIO_new_accept(const char *host_port); +# endif /* OPENSSL_NO_SOCK*/ + +BIO *BIO_new_fd(int fd, int close_flag); + +int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, + BIO **bio2, size_t writebuf2); +/* + * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. + * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default + * value. + */ + +void BIO_copy_next_retry(BIO *b); + +/* + * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); + */ + +# define ossl_bio__attr__(x) +# if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__MINGW32__) && !defined(__MINGW64__) \ + && !defined(__APPLE__) + /* + * Because we support the 'z' modifier, which made its appearance in C99, + * we can't use __attribute__ with pre C99 dialects. + */ +# if __STDC_VERSION__ >= 199901L +# undef ossl_bio__attr__ +# define ossl_bio__attr__ __attribute__ +# if __GNUC__*10 + __GNUC_MINOR__ >= 44 +# define ossl_bio__printf__ __gnu_printf__ +# else +# define ossl_bio__printf__ __printf__ +# endif +# endif +# endif +int BIO_printf(BIO *bio, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 3))); +int BIO_vprintf(BIO *bio, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 0))); +int BIO_snprintf(char *buf, size_t n, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 4))); +int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 0))); +# undef ossl_bio__attr__ +# undef ossl_bio__printf__ + + +BIO_METHOD *BIO_meth_new(int type, const char *name); +void BIO_meth_free(BIO_METHOD *biom); +int (*BIO_meth_get_write(const BIO_METHOD *biom)) (BIO *, const char *, int); +int (*BIO_meth_get_write_ex(const BIO_METHOD *biom)) (BIO *, const char *, size_t, + size_t *); +int BIO_meth_set_write(BIO_METHOD *biom, + int (*write) (BIO *, const char *, int)); +int BIO_meth_set_write_ex(BIO_METHOD *biom, + int (*bwrite) (BIO *, const char *, size_t, size_t *)); +int (*BIO_meth_get_read(const BIO_METHOD *biom)) (BIO *, char *, int); +int (*BIO_meth_get_read_ex(const BIO_METHOD *biom)) (BIO *, char *, size_t, size_t *); +int BIO_meth_set_read(BIO_METHOD *biom, + int (*read) (BIO *, char *, int)); +int BIO_meth_set_read_ex(BIO_METHOD *biom, + int (*bread) (BIO *, char *, size_t, size_t *)); +int (*BIO_meth_get_puts(const BIO_METHOD *biom)) (BIO *, const char *); +int BIO_meth_set_puts(BIO_METHOD *biom, + int (*puts) (BIO *, const char *)); +int (*BIO_meth_get_gets(const BIO_METHOD *biom)) (BIO *, char *, int); +int BIO_meth_set_gets(BIO_METHOD *biom, + int (*gets) (BIO *, char *, int)); +long (*BIO_meth_get_ctrl(const BIO_METHOD *biom)) (BIO *, int, long, void *); +int BIO_meth_set_ctrl(BIO_METHOD *biom, + long (*ctrl) (BIO *, int, long, void *)); +int (*BIO_meth_get_create(const BIO_METHOD *bion)) (BIO *); +int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); +int (*BIO_meth_get_destroy(const BIO_METHOD *biom)) (BIO *); +int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); +long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom)) + (BIO *, int, BIO_info_cb *); +int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, + long (*callback_ctrl) (BIO *, int, + BIO_info_cb *)); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/bioerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/bioerr.h index 46e2c96e..787b30af 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/bioerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/bioerr.h @@ -1,84 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BIOERR_H -# define HEADER_BIOERR_H +#ifndef OPENSSL_BIOERR_H +# define OPENSSL_BIOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BIO_strings(void); -/* - * BIO function codes. - */ -# define BIO_F_ACPT_STATE 100 -# define BIO_F_ADDRINFO_WRAP 148 -# define BIO_F_ADDR_STRINGS 134 -# define BIO_F_BIO_ACCEPT 101 -# define BIO_F_BIO_ACCEPT_EX 137 -# define BIO_F_BIO_ACCEPT_NEW 152 -# define BIO_F_BIO_ADDR_NEW 144 -# define BIO_F_BIO_BIND 147 -# define BIO_F_BIO_CALLBACK_CTRL 131 -# define BIO_F_BIO_CONNECT 138 -# define BIO_F_BIO_CONNECT_NEW 153 -# define BIO_F_BIO_CTRL 103 -# define BIO_F_BIO_GETS 104 -# define BIO_F_BIO_GET_HOST_IP 106 -# define BIO_F_BIO_GET_NEW_INDEX 102 -# define BIO_F_BIO_GET_PORT 107 -# define BIO_F_BIO_LISTEN 139 -# define BIO_F_BIO_LOOKUP 135 -# define BIO_F_BIO_LOOKUP_EX 143 -# define BIO_F_BIO_MAKE_PAIR 121 -# define BIO_F_BIO_METH_NEW 146 -# define BIO_F_BIO_NEW 108 -# define BIO_F_BIO_NEW_DGRAM_SCTP 145 -# define BIO_F_BIO_NEW_FILE 109 -# define BIO_F_BIO_NEW_MEM_BUF 126 -# define BIO_F_BIO_NREAD 123 -# define BIO_F_BIO_NREAD0 124 -# define BIO_F_BIO_NWRITE 125 -# define BIO_F_BIO_NWRITE0 122 -# define BIO_F_BIO_PARSE_HOSTSERV 136 -# define BIO_F_BIO_PUTS 110 -# define BIO_F_BIO_READ 111 -# define BIO_F_BIO_READ_EX 105 -# define BIO_F_BIO_READ_INTERN 120 -# define BIO_F_BIO_SOCKET 140 -# define BIO_F_BIO_SOCKET_NBIO 142 -# define BIO_F_BIO_SOCK_INFO 141 -# define BIO_F_BIO_SOCK_INIT 112 -# define BIO_F_BIO_WRITE 113 -# define BIO_F_BIO_WRITE_EX 119 -# define BIO_F_BIO_WRITE_INTERN 128 -# define BIO_F_BUFFER_CTRL 114 -# define BIO_F_CONN_CTRL 127 -# define BIO_F_CONN_STATE 115 -# define BIO_F_DGRAM_SCTP_NEW 149 -# define BIO_F_DGRAM_SCTP_READ 132 -# define BIO_F_DGRAM_SCTP_WRITE 133 -# define BIO_F_DOAPR_OUTCH 150 -# define BIO_F_FILE_CTRL 116 -# define BIO_F_FILE_READ 130 -# define BIO_F_LINEBUFFER_CTRL 129 -# define BIO_F_LINEBUFFER_NEW 151 -# define BIO_F_MEM_WRITE 117 -# define BIO_F_NBIOF_NEW 154 -# define BIO_F_SLG_WRITE 155 -# define BIO_F_SSL_NEW 118 /* * BIO reason codes. @@ -89,6 +27,7 @@ int ERR_load_BIO_strings(void); # define BIO_R_BAD_FOPEN_MODE 101 # define BIO_R_BROKEN_PIPE 124 # define BIO_R_CONNECT_ERROR 103 +# define BIO_R_CONNECT_TIMEOUT 147 # define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 # define BIO_R_GETSOCKNAME_ERROR 132 # define BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS 133 @@ -105,7 +44,9 @@ int ERR_load_BIO_strings(void); # define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 # define BIO_R_NO_PORT_DEFINED 113 # define BIO_R_NO_SUCH_FILE 128 -# define BIO_R_NULL_PARAMETER 115 +# define BIO_R_NULL_PARAMETER 115 /* unused */ +# define BIO_R_TRANSFER_ERROR 104 +# define BIO_R_TRANSFER_TIMEOUT 105 # define BIO_R_UNABLE_TO_BIND_SOCKET 117 # define BIO_R_UNABLE_TO_CREATE_SOCKET 118 # define BIO_R_UNABLE_TO_KEEPALIVE 137 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/blowfish.h b/deps/openssl/android/x86_64/usr/local/include/openssl/blowfish.h index cd3e460e..667d6423 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/blowfish.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/blowfish.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BLOWFISH_H -# define HEADER_BLOWFISH_H +#ifndef OPENSSL_BLOWFISH_H +# define OPENSSL_BLOWFISH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BLOWFISH_H +# endif # include @@ -18,40 +24,51 @@ extern "C" { # endif -# define BF_ENCRYPT 1 -# define BF_DECRYPT 0 +# define BF_BLOCK 8 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define BF_ENCRYPT 1 +# define BF_DECRYPT 0 /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! BF_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define BF_LONG unsigned int +# define BF_LONG unsigned int -# define BF_ROUNDS 16 -# define BF_BLOCK 8 +# define BF_ROUNDS 16 typedef struct bf_key_st { BF_LONG P[BF_ROUNDS + 2]; BF_LONG S[4 * 256]; } BF_KEY; -void BF_set_key(BF_KEY *key, int len, const unsigned char *data); - -void BF_encrypt(BF_LONG *data, const BF_KEY *key); -void BF_decrypt(BF_LONG *data, const BF_KEY *key); - -void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, - const BF_KEY *key, int enc); -void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - const BF_KEY *schedule, unsigned char *ivec, int enc); -void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, const BF_KEY *schedule, - unsigned char *ivec, int *num); -const char *BF_options(void); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void BF_set_key(BF_KEY *key, int len, + const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void BF_encrypt(BF_LONG *data, const BF_KEY *key); +OSSL_DEPRECATEDIN_3_0 void BF_decrypt(BF_LONG *data, const BF_KEY *key); +OSSL_DEPRECATEDIN_3_0 void BF_ecb_encrypt(const unsigned char *in, + unsigned char *out, const BF_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void BF_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + const BF_KEY *schedule, + unsigned char *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void BF_cfb64_encrypt(const unsigned char *in, + unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void BF_ofb64_encrypt(const unsigned char *in, + unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num); +OSSL_DEPRECATEDIN_3_0 const char *BF_options(void); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/bn.h b/deps/openssl/android/x86_64/usr/local/include/openssl/bn.h index d8776604..27b127a5 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/bn.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/bn.h @@ -1,22 +1,28 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BN_H -# define HEADER_BN_H +#ifndef OPENSSL_BN_H +# define OPENSSL_BN_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BN_H +# endif # include # ifndef OPENSSL_NO_STDIO # include # endif # include -# include +# include # include # include @@ -61,7 +67,7 @@ extern "C" { # define BN_FLG_CONSTTIME 0x04 # define BN_FLG_SECURE 0x08 -# if OPENSSL_API_COMPAT < 0x00908000L +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 /* deprecated name for the flag */ # define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME # define BN_FLG_FREE 0x8000 /* used for debugging */ @@ -103,8 +109,9 @@ void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), void *BN_GENCB_get_arg(BN_GENCB *cb); -# define BN_prime_checks 0 /* default: select number of iterations based - * on the size of the number */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define BN_prime_checks 0 /* default: select number of iterations based + * on the size of the number */ /* * BN_prime_checks_for_size() returns the number of Miller-Rabin iterations @@ -169,14 +176,15 @@ void *BN_GENCB_get_arg(BN_GENCB *cb); * (b) >= 6 | >= 12 | 34 | 64 bit */ -# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ - (b) >= 1345 ? 4 : \ - (b) >= 476 ? 5 : \ - (b) >= 400 ? 6 : \ - (b) >= 347 ? 7 : \ - (b) >= 308 ? 8 : \ - (b) >= 55 ? 27 : \ - /* b >= 6 */ 34) +# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ + (b) >= 1345 ? 4 : \ + (b) >= 476 ? 5 : \ + (b) >= 400 ? 6 : \ + (b) >= 347 ? 7 : \ + (b) >= 308 ? 8 : \ + (b) >= 55 ? 27 : \ + /* b >= 6 */ 34) +# endif # define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) @@ -190,7 +198,7 @@ int BN_is_odd(const BIGNUM *a); void BN_zero_ex(BIGNUM *a); -# if OPENSSL_API_COMPAT >= 0x00908000L +# if OPENSSL_API_LEVEL > 908 # define BN_zero(a) BN_zero_ex(a) # else # define BN_zero(a) (BN_set_word((a),0)) @@ -198,18 +206,32 @@ void BN_zero_ex(BIGNUM *a); const BIGNUM *BN_value_one(void); char *BN_options(void); +BN_CTX *BN_CTX_new_ex(OSSL_LIB_CTX *ctx); BN_CTX *BN_CTX_new(void); +BN_CTX *BN_CTX_secure_new_ex(OSSL_LIB_CTX *ctx); BN_CTX *BN_CTX_secure_new(void); void BN_CTX_free(BN_CTX *c); void BN_CTX_start(BN_CTX *ctx); BIGNUM *BN_CTX_get(BN_CTX *ctx); void BN_CTX_end(BN_CTX *ctx); +int BN_rand_ex(BIGNUM *rnd, int bits, int top, int bottom, + unsigned int strength, BN_CTX *ctx); int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_priv_rand_ex(BIGNUM *rnd, int bits, int top, int bottom, + unsigned int strength, BN_CTX *ctx); int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_rand_range_ex(BIGNUM *r, const BIGNUM *range, unsigned int strength, + BN_CTX *ctx); int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_priv_rand_range_ex(BIGNUM *r, const BIGNUM *range, + unsigned int strength, BN_CTX *ctx); int BN_priv_rand_range(BIGNUM *rnd, const BIGNUM *range); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); +OSSL_DEPRECATEDIN_3_0 int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); +# endif int BN_num_bits(const BIGNUM *a); int BN_num_bits_word(BN_ULONG l); int BN_security_bits(int L, int N); @@ -223,6 +245,8 @@ int BN_bn2bin(const BIGNUM *a, unsigned char *to); int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_native2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2nativepad(const BIGNUM *a, unsigned char *to, int tolen); BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); int BN_bn2mpi(const BIGNUM *a, unsigned char *to); int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); @@ -292,6 +316,11 @@ int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, BN_CTX *ctx, BN_MONT_CTX *m_ctx); int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_exp_mont_consttime_x2(BIGNUM *rr1, const BIGNUM *a1, const BIGNUM *p1, + const BIGNUM *m1, BN_MONT_CTX *in_mont1, + BIGNUM *rr2, const BIGNUM *a2, const BIGNUM *p2, + const BIGNUM *m2, BN_MONT_CTX *in_mont2, + BN_CTX *ctx); int BN_mask_bits(BIGNUM *a, int n); # ifndef OPENSSL_NO_STDIO @@ -315,6 +344,7 @@ int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns * -2 for * error */ +int BN_are_coprime(BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); BIGNUM *BN_mod_inverse(BIGNUM *ret, const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); BIGNUM *BN_mod_sqrt(BIGNUM *ret, @@ -323,38 +353,51 @@ BIGNUM *BN_mod_sqrt(BIGNUM *ret, void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); /* Deprecated versions */ -DEPRECATEDIN_0_9_8(BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, - const BIGNUM *add, - const BIGNUM *rem, - void (*callback) (int, int, - void *), - void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg)) -DEPRECATEDIN_0_9_8(int - BN_is_prime_fasttest(const BIGNUM *p, int nchecks, - void (*callback) (int, int, void *), - BN_CTX *ctx, void *cb_arg, - int do_trial_division)) - -/* Newer versions */ -int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, - const BIGNUM *rem, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 +BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, const BIGNUM *rem, + void (*callback) (int, int, void *), + void *cb_arg); +OSSL_DEPRECATEDIN_0_9_8 +int BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg); +OSSL_DEPRECATEDIN_0_9_8 +int BN_is_prime_fasttest(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg, + int do_trial_division); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, int do_trial_division, BN_GENCB *cb); +# endif +/* Newer versions */ +int BN_generate_prime_ex2(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb, + BN_CTX *ctx); +int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, + const BIGNUM *rem, BN_GENCB *cb); +int BN_check_prime(const BIGNUM *p, BN_CTX *ctx, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, const BIGNUM *Xp, const BIGNUM *Xp1, const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb); +# endif BN_MONT_CTX *BN_MONT_CTX_new(void); int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, @@ -398,10 +441,12 @@ BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, BN_CTX *ctx, BN_MONT_CTX *m_ctx), BN_MONT_CTX *m_ctx); - -DEPRECATEDIN_0_9_8(void BN_set_params(int mul, int high, int low, int mont)) -DEPRECATEDIN_0_9_8(int BN_get_params(int which)) /* 0, mul, 1 high, 2 low, 3 - * mont */ +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 +void BN_set_params(int mul, int high, int low, int mont); +OSSL_DEPRECATEDIN_0_9_8 +int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */ +# endif BN_RECP_CTX *BN_RECP_CTX_new(void); void BN_RECP_CTX_free(BN_RECP_CTX *recp); @@ -519,16 +564,16 @@ BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); -# if OPENSSL_API_COMPAT < 0x10100000L -# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 -# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 -# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 -# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 -# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 -# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 -# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 -# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 -# endif +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 +# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 +# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 +# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 +# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 +# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 +# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 +# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 +# endif int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/bnerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/bnerr.h index 5c83777f..7c3f6ef3 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/bnerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/bnerr.h @@ -1,78 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BNERR_H -# define HEADER_BNERR_H +#ifndef OPENSSL_BNERR_H +# define OPENSSL_BNERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BN_strings(void); -/* - * BN function codes. - */ -# define BN_F_BNRAND 127 -# define BN_F_BNRAND_RANGE 138 -# define BN_F_BN_BLINDING_CONVERT_EX 100 -# define BN_F_BN_BLINDING_CREATE_PARAM 128 -# define BN_F_BN_BLINDING_INVERT_EX 101 -# define BN_F_BN_BLINDING_NEW 102 -# define BN_F_BN_BLINDING_UPDATE 103 -# define BN_F_BN_BN2DEC 104 -# define BN_F_BN_BN2HEX 105 -# define BN_F_BN_COMPUTE_WNAF 142 -# define BN_F_BN_CTX_GET 116 -# define BN_F_BN_CTX_NEW 106 -# define BN_F_BN_CTX_START 129 -# define BN_F_BN_DIV 107 -# define BN_F_BN_DIV_RECP 130 -# define BN_F_BN_EXP 123 -# define BN_F_BN_EXPAND_INTERNAL 120 -# define BN_F_BN_GENCB_NEW 143 -# define BN_F_BN_GENERATE_DSA_NONCE 140 -# define BN_F_BN_GENERATE_PRIME_EX 141 -# define BN_F_BN_GF2M_MOD 131 -# define BN_F_BN_GF2M_MOD_EXP 132 -# define BN_F_BN_GF2M_MOD_MUL 133 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 -# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 -# define BN_F_BN_GF2M_MOD_SQR 136 -# define BN_F_BN_GF2M_MOD_SQRT 137 -# define BN_F_BN_LSHIFT 145 -# define BN_F_BN_MOD_EXP2_MONT 118 -# define BN_F_BN_MOD_EXP_MONT 109 -# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 -# define BN_F_BN_MOD_EXP_MONT_WORD 117 -# define BN_F_BN_MOD_EXP_RECP 125 -# define BN_F_BN_MOD_EXP_SIMPLE 126 -# define BN_F_BN_MOD_INVERSE 110 -# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 -# define BN_F_BN_MOD_LSHIFT_QUICK 119 -# define BN_F_BN_MOD_SQRT 121 -# define BN_F_BN_MONT_CTX_NEW 149 -# define BN_F_BN_MPI2BN 112 -# define BN_F_BN_NEW 113 -# define BN_F_BN_POOL_GET 147 -# define BN_F_BN_RAND 114 -# define BN_F_BN_RAND_RANGE 122 -# define BN_F_BN_RECP_CTX_NEW 150 -# define BN_F_BN_RSHIFT 146 -# define BN_F_BN_SET_WORDS 144 -# define BN_F_BN_STACK_PUSH 148 -# define BN_F_BN_USUB 115 -# define BN_F_OSSL_BN_RSA_DO_UNBLIND 151 /* * BN reason codes. @@ -92,7 +36,9 @@ int ERR_load_BN_strings(void); # define BN_R_NOT_A_SQUARE 111 # define BN_R_NOT_INITIALIZED 107 # define BN_R_NO_INVERSE 108 +# define BN_R_NO_PRIME_CANDIDATE 121 # define BN_R_NO_SOLUTION 116 +# define BN_R_NO_SUITABLE_DIGEST 120 # define BN_R_PRIVATE_KEY_TOO_LARGE 117 # define BN_R_P_IS_NOT_PRIME 112 # define BN_R_TOO_MANY_ITERATIONS 113 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/buffer.h b/deps/openssl/android/x86_64/usr/local/include/openssl/buffer.h index d2765766..5773b986 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/buffer.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/buffer.h @@ -1,17 +1,23 @@ /* * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BUFFER_H -# define HEADER_BUFFER_H +#ifndef OPENSSL_BUFFER_H +# define OPENSSL_BUFFER_H +# pragma once -# include -# ifndef HEADER_CRYPTO_H +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_BUFFER_H +# endif + +# include +# ifndef OPENSSL_CRYPTO_H # include # endif # include @@ -24,16 +30,14 @@ extern "C" { # include # include -/* - * These names are outdated as of OpenSSL 1.1; a future release - * will move them to be deprecated. - */ -# define BUF_strdup(s) OPENSSL_strdup(s) -# define BUF_strndup(s, size) OPENSSL_strndup(s, size) -# define BUF_memdup(data, size) OPENSSL_memdup(data, size) -# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) -# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) -# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define BUF_strdup(s) OPENSSL_strdup(s) +# define BUF_strndup(s, size) OPENSSL_strndup(s, size) +# define BUF_memdup(data, size) OPENSSL_memdup(data, size) +# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) +# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) +# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) +# endif struct buf_mem_st { size_t length; /* current number of bytes */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/buffererr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/buffererr.h index 04f6ff7a..d18b1f8f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/buffererr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/buffererr.h @@ -1,31 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_BUFERR_H -# define HEADER_BUFERR_H +#ifndef OPENSSL_BUFFERERR_H +# define OPENSSL_BUFFERERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_BUF_strings(void); -/* - * BUF function codes. - */ -# define BUF_F_BUF_MEM_GROW 100 -# define BUF_F_BUF_MEM_GROW_CLEAN 105 -# define BUF_F_BUF_MEM_NEW 101 /* * BUF reason codes. diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/camellia.h b/deps/openssl/android/x86_64/usr/local/include/openssl/camellia.h index 151f3c13..88c2279e 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/camellia.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/camellia.h @@ -1,14 +1,20 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CAMELLIA_H -# define HEADER_CAMELLIA_H +#ifndef OPENSSL_CAMELLIA_H +# define OPENSSL_CAMELLIA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CAMELLIA_H +# endif # include @@ -18,8 +24,12 @@ extern "C" { #endif -# define CAMELLIA_ENCRYPT 1 -# define CAMELLIA_DECRYPT 0 +# define CAMELLIA_BLOCK_SIZE 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define CAMELLIA_ENCRYPT 1 +# define CAMELLIA_DECRYPT 0 /* * Because array size can't be a const in C, the following two are macros. @@ -28,9 +38,8 @@ extern "C" { /* This should be a hidden type, but EVP requires that the size be known */ -# define CAMELLIA_BLOCK_SIZE 16 -# define CAMELLIA_TABLE_BYTE_LEN 272 -# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) +# define CAMELLIA_TABLE_BYTE_LEN 272 +# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match * with WORD */ @@ -44,36 +53,61 @@ struct camellia_key_st { }; typedef struct camellia_key_st CAMELLIA_KEY; -int Camellia_set_key(const unsigned char *userKey, const int bits, - CAMELLIA_KEY *key); - -void Camellia_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); -void Camellia_decrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key); - -void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, - const CAMELLIA_KEY *key, const int enc); -void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, const int enc); -void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num, const int enc); -void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const CAMELLIA_KEY *key, - unsigned char *ivec, int *num); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int Camellia_set_key(const unsigned char *userKey, + const int bits, + CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_encrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_decrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key); +OSSL_DEPRECATEDIN_3_0 void Camellia_ecb_encrypt(const unsigned char *in, + unsigned char *out, + const CAMELLIA_KEY *key, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cbc_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb128_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb1_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_cfb8_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num, + const int enc); +OSSL_DEPRECATEDIN_3_0 void Camellia_ofb128_encrypt(const unsigned char *in, + unsigned char *out, + size_t length, + const CAMELLIA_KEY *key, + unsigned char *ivec, + int *num); +OSSL_DEPRECATEDIN_3_0 void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const CAMELLIA_KEY *key, unsigned char ivec[CAMELLIA_BLOCK_SIZE], unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], unsigned int *num); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cast.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cast.h index 2cc89ae0..0bf217be 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cast.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cast.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CAST_H -# define HEADER_CAST_H +#ifndef OPENSSL_CAST_H +# define OPENSSL_CAST_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CAST_H +# endif # include @@ -17,33 +23,45 @@ extern "C" { # endif -# define CAST_ENCRYPT 1 -# define CAST_DECRYPT 0 - -# define CAST_LONG unsigned int - # define CAST_BLOCK 8 # define CAST_KEY_LENGTH 16 +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +# define CAST_ENCRYPT 1 +# define CAST_DECRYPT 0 + +# define CAST_LONG unsigned int + typedef struct cast_key_st { CAST_LONG data[32]; int short_key; /* Use reduced rounds for short key */ } CAST_KEY; +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, const CAST_KEY *key, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); +OSSL_DEPRECATEDIN_3_0 void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); +OSSL_DEPRECATEDIN_3_0 void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *ks, unsigned char *iv, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *schedule, unsigned char *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *schedule, unsigned char *ivec, int *num); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cmac.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cmac.h index 3535a9ab..f5086183 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cmac.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cmac.h @@ -1,41 +1,52 @@ /* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMAC_H -# define HEADER_CMAC_H +#ifndef OPENSSL_CMAC_H +# define OPENSSL_CMAC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMAC_H +# endif # ifndef OPENSSL_NO_CMAC -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -# include +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* Opaque */ typedef struct CMAC_CTX_st CMAC_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CMAC_CTX *CMAC_CTX_new(void); +OSSL_DEPRECATEDIN_3_0 void CMAC_CTX_cleanup(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void CMAC_CTX_free(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); +OSSL_DEPRECATEDIN_3_0 int CMAC_Init(CMAC_CTX *ctx, + const void *key, size_t keylen, + const EVP_CIPHER *cipher, ENGINE *impl); +OSSL_DEPRECATEDIN_3_0 int CMAC_Update(CMAC_CTX *ctx, + const void *data, size_t dlen); +OSSL_DEPRECATEDIN_3_0 int CMAC_Final(CMAC_CTX *ctx, + unsigned char *out, size_t *poutlen); +OSSL_DEPRECATEDIN_3_0 int CMAC_resume(CMAC_CTX *ctx); +# endif -CMAC_CTX *CMAC_CTX_new(void); -void CMAC_CTX_cleanup(CMAC_CTX *ctx); -void CMAC_CTX_free(CMAC_CTX *ctx); -EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); -int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); - -int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, - const EVP_CIPHER *cipher, ENGINE *impl); -int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); -int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); -int CMAC_resume(CMAC_CTX *ctx); - -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h new file mode 100644 index 00000000..49825570 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h @@ -0,0 +1,597 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/cmp.h.in + * + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +#ifndef OPENSSL_CMP_H +# define OPENSSL_CMP_H + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include +# include +# include + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CMP_PVNO 2 + +/*- + * PKIFailureInfo ::= BIT STRING { + * -- since we can fail in more than one way! + * -- More codes may be added in the future if/when required. + * badAlg (0), + * -- unrecognized or unsupported Algorithm Identifier + * badMessageCheck (1), + * -- integrity check failed (e.g., signature did not verify) + * badRequest (2), + * -- transaction not permitted or supported + * badTime (3), + * -- messageTime was not sufficiently close to the system time, + * -- as defined by local policy + * badCertId (4), + * -- no certificate could be found matching the provided criteria + * badDataFormat (5), + * -- the data submitted has the wrong format + * wrongAuthority (6), + * -- the authority indicated in the request is different from the + * -- one creating the response token + * incorrectData (7), + * -- the requester's data is incorrect (for notary services) + * missingTimeStamp (8), + * -- when the timestamp is missing but should be there + * -- (by policy) + * badPOP (9), + * -- the proof-of-possession failed + * certRevoked (10), + * -- the certificate has already been revoked + * certConfirmed (11), + * -- the certificate has already been confirmed + * wrongIntegrity (12), + * -- invalid integrity, password based instead of signature or + * -- vice versa + * badRecipientNonce (13), + * -- invalid recipient nonce, either missing or wrong value + * timeNotAvailable (14), + * -- the TSA's time source is not available + * unacceptedPolicy (15), + * -- the requested TSA policy is not supported by the TSA. + * unacceptedExtension (16), + * -- the requested extension is not supported by the TSA. + * addInfoNotAvailable (17), + * -- the additional information requested could not be + * -- understood or is not available + * badSenderNonce (18), + * -- invalid sender nonce, either missing or wrong size + * badCertTemplate (19), + * -- invalid cert. template or missing mandatory information + * signerNotTrusted (20), + * -- signer of the message unknown or not trusted + * transactionIdInUse (21), + * -- the transaction identifier is already in use + * unsupportedVersion (22), + * -- the version of the message is not supported + * notAuthorized (23), + * -- the sender was not authorized to make the preceding + * -- request or perform the preceding action + * systemUnavail (24), + * -- the request cannot be handled due to system unavailability + * systemFailure (25), + * -- the request cannot be handled due to system failure + * duplicateCertReq (26) + * -- certificate cannot be issued because a duplicate + * -- certificate already exists + * } + */ +# define OSSL_CMP_PKIFAILUREINFO_badAlg 0 +# define OSSL_CMP_PKIFAILUREINFO_badMessageCheck 1 +# define OSSL_CMP_PKIFAILUREINFO_badRequest 2 +# define OSSL_CMP_PKIFAILUREINFO_badTime 3 +# define OSSL_CMP_PKIFAILUREINFO_badCertId 4 +# define OSSL_CMP_PKIFAILUREINFO_badDataFormat 5 +# define OSSL_CMP_PKIFAILUREINFO_wrongAuthority 6 +# define OSSL_CMP_PKIFAILUREINFO_incorrectData 7 +# define OSSL_CMP_PKIFAILUREINFO_missingTimeStamp 8 +# define OSSL_CMP_PKIFAILUREINFO_badPOP 9 +# define OSSL_CMP_PKIFAILUREINFO_certRevoked 10 +# define OSSL_CMP_PKIFAILUREINFO_certConfirmed 11 +# define OSSL_CMP_PKIFAILUREINFO_wrongIntegrity 12 +# define OSSL_CMP_PKIFAILUREINFO_badRecipientNonce 13 +# define OSSL_CMP_PKIFAILUREINFO_timeNotAvailable 14 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedPolicy 15 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedExtension 16 +# define OSSL_CMP_PKIFAILUREINFO_addInfoNotAvailable 17 +# define OSSL_CMP_PKIFAILUREINFO_badSenderNonce 18 +# define OSSL_CMP_PKIFAILUREINFO_badCertTemplate 19 +# define OSSL_CMP_PKIFAILUREINFO_signerNotTrusted 20 +# define OSSL_CMP_PKIFAILUREINFO_transactionIdInUse 21 +# define OSSL_CMP_PKIFAILUREINFO_unsupportedVersion 22 +# define OSSL_CMP_PKIFAILUREINFO_notAuthorized 23 +# define OSSL_CMP_PKIFAILUREINFO_systemUnavail 24 +# define OSSL_CMP_PKIFAILUREINFO_systemFailure 25 +# define OSSL_CMP_PKIFAILUREINFO_duplicateCertReq 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN \ + ((1 << (OSSL_CMP_PKIFAILUREINFO_MAX + 1)) - 1) +# if OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN > INT_MAX +# error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int +# endif + +typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; + +# define OSSL_CMP_CTX_FAILINFO_badAlg (1 << 0) +# define OSSL_CMP_CTX_FAILINFO_badMessageCheck (1 << 1) +# define OSSL_CMP_CTX_FAILINFO_badRequest (1 << 2) +# define OSSL_CMP_CTX_FAILINFO_badTime (1 << 3) +# define OSSL_CMP_CTX_FAILINFO_badCertId (1 << 4) +# define OSSL_CMP_CTX_FAILINFO_badDataFormat (1 << 5) +# define OSSL_CMP_CTX_FAILINFO_wrongAuthority (1 << 6) +# define OSSL_CMP_CTX_FAILINFO_incorrectData (1 << 7) +# define OSSL_CMP_CTX_FAILINFO_missingTimeStamp (1 << 8) +# define OSSL_CMP_CTX_FAILINFO_badPOP (1 << 9) +# define OSSL_CMP_CTX_FAILINFO_certRevoked (1 << 10) +# define OSSL_CMP_CTX_FAILINFO_certConfirmed (1 << 11) +# define OSSL_CMP_CTX_FAILINFO_wrongIntegrity (1 << 12) +# define OSSL_CMP_CTX_FAILINFO_badRecipientNonce (1 << 13) +# define OSSL_CMP_CTX_FAILINFO_timeNotAvailable (1 << 14) +# define OSSL_CMP_CTX_FAILINFO_unacceptedPolicy (1 << 15) +# define OSSL_CMP_CTX_FAILINFO_unacceptedExtension (1 << 16) +# define OSSL_CMP_CTX_FAILINFO_addInfoNotAvailable (1 << 17) +# define OSSL_CMP_CTX_FAILINFO_badSenderNonce (1 << 18) +# define OSSL_CMP_CTX_FAILINFO_badCertTemplate (1 << 19) +# define OSSL_CMP_CTX_FAILINFO_signerNotTrusted (1 << 20) +# define OSSL_CMP_CTX_FAILINFO_transactionIdInUse (1 << 21) +# define OSSL_CMP_CTX_FAILINFO_unsupportedVersion (1 << 22) +# define OSSL_CMP_CTX_FAILINFO_notAuthorized (1 << 23) +# define OSSL_CMP_CTX_FAILINFO_systemUnavail (1 << 24) +# define OSSL_CMP_CTX_FAILINFO_systemFailure (1 << 25) +# define OSSL_CMP_CTX_FAILINFO_duplicateCertReq (1 << 26) + +/*- + * PKIStatus ::= INTEGER { + * accepted (0), + * -- you got exactly what you asked for + * grantedWithMods (1), + * -- you got something like what you asked for; the + * -- requester is responsible for ascertaining the differences + * rejection (2), + * -- you don't get it, more information elsewhere in the message + * waiting (3), + * -- the request body part has not yet been processed; expect to + * -- hear more later (note: proper handling of this status + * -- response MAY use the polling req/rep PKIMessages specified + * -- in Section 5.3.22; alternatively, polling in the underlying + * -- transport layer MAY have some utility in this regard) + * revocationWarning (4), + * -- this message contains a warning that a revocation is + * -- imminent + * revocationNotification (5), + * -- notification that a revocation has occurred + * keyUpdateWarning (6) + * -- update already done for the oldCertId specified in + * -- CertReqMsg + * } + */ +# define OSSL_CMP_PKISTATUS_request -3 +# define OSSL_CMP_PKISTATUS_trans -2 +# define OSSL_CMP_PKISTATUS_unspecified -1 +# define OSSL_CMP_PKISTATUS_accepted 0 +# define OSSL_CMP_PKISTATUS_grantedWithMods 1 +# define OSSL_CMP_PKISTATUS_rejection 2 +# define OSSL_CMP_PKISTATUS_waiting 3 +# define OSSL_CMP_PKISTATUS_revocationWarning 4 +# define OSSL_CMP_PKISTATUS_revocationNotification 5 +# define OSSL_CMP_PKISTATUS_keyUpdateWarning 6 + +typedef ASN1_INTEGER OSSL_CMP_PKISTATUS; +DECLARE_ASN1_ITEM(OSSL_CMP_PKISTATUS) + +# define OSSL_CMP_CERTORENCCERT_CERTIFICATE 0 +# define OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT 1 + +/* data type declarations */ +typedef struct ossl_cmp_ctx_st OSSL_CMP_CTX; +typedef struct ossl_cmp_pkiheader_st OSSL_CMP_PKIHEADER; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER) +typedef struct ossl_cmp_msg_st OSSL_CMP_MSG; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_MSG) +DECLARE_ASN1_ENCODE_FUNCTIONS(OSSL_CMP_MSG, OSSL_CMP_MSG, OSSL_CMP_MSG) +typedef struct ossl_cmp_certstatus_st OSSL_CMP_CERTSTATUS; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS, OSSL_CMP_CERTSTATUS) +#define sk_OSSL_CMP_CERTSTATUS_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_value(sk, idx) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTSTATUS_new(cmp) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTSTATUS_new_null() ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTSTATUS_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTSTATUS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTSTATUS_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_delete(sk, i) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTSTATUS_delete_ptr(sk, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))) +#define sk_OSSL_CMP_CERTSTATUS_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_pop(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_shift(sk) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk),ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTSTATUS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTSTATUS_set(sk, idx, ptr) ((OSSL_CMP_CERTSTATUS *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr))) +#define sk_OSSL_CMP_CERTSTATUS_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr)) +#define sk_OSSL_CMP_CERTSTATUS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_type(ptr), pnum) +#define sk_OSSL_CMP_CERTSTATUS_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk)) +#define sk_OSSL_CMP_CERTSTATUS_dup(sk) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk))) +#define sk_OSSL_CMP_CERTSTATUS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTSTATUS) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTSTATUS_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTSTATUS_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTSTATUS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTSTATUS_sk_type(sk), ossl_check_OSSL_CMP_CERTSTATUS_compfunc_type(cmp))) + +typedef struct ossl_cmp_itav_st OSSL_CMP_ITAV; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_ITAV, OSSL_CMP_ITAV, OSSL_CMP_ITAV) +#define sk_OSSL_CMP_ITAV_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_value(sk, idx) ((OSSL_CMP_ITAV *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), (idx))) +#define sk_OSSL_CMP_ITAV_new(cmp) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp))) +#define sk_OSSL_CMP_ITAV_new_null() ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_ITAV_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_ITAV_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (n)) +#define sk_OSSL_CMP_ITAV_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_delete(sk, i) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (i))) +#define sk_OSSL_CMP_ITAV_delete_ptr(sk, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr))) +#define sk_OSSL_CMP_ITAV_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_pop(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_shift(sk) ((OSSL_CMP_ITAV *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_ITAV_sk_type(sk),ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc)) +#define sk_OSSL_CMP_ITAV_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), (idx)) +#define sk_OSSL_CMP_ITAV_set(sk, idx, ptr) ((OSSL_CMP_ITAV *)OPENSSL_sk_set(ossl_check_OSSL_CMP_ITAV_sk_type(sk), (idx), ossl_check_OSSL_CMP_ITAV_type(ptr))) +#define sk_OSSL_CMP_ITAV_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr)) +#define sk_OSSL_CMP_ITAV_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_type(ptr), pnum) +#define sk_OSSL_CMP_ITAV_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk)) +#define sk_OSSL_CMP_ITAV_dup(sk) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk))) +#define sk_OSSL_CMP_ITAV_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_ITAV) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_ITAV_freefunc_type(freefunc))) +#define sk_OSSL_CMP_ITAV_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_ITAV_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_ITAV_sk_type(sk), ossl_check_OSSL_CMP_ITAV_compfunc_type(cmp))) + +typedef struct ossl_cmp_revrepcontent_st OSSL_CMP_REVREPCONTENT; +typedef struct ossl_cmp_pkisi_st OSSL_CMP_PKISI; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKISI) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_PKISI, OSSL_CMP_PKISI, OSSL_CMP_PKISI) +#define sk_OSSL_CMP_PKISI_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_value(sk, idx) ((OSSL_CMP_PKISI *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), (idx))) +#define sk_OSSL_CMP_PKISI_new(cmp) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp))) +#define sk_OSSL_CMP_PKISI_new_null() ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_PKISI_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_PKISI_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (n)) +#define sk_OSSL_CMP_PKISI_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_delete(sk, i) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (i))) +#define sk_OSSL_CMP_PKISI_delete_ptr(sk, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr))) +#define sk_OSSL_CMP_PKISI_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_pop(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_shift(sk) ((OSSL_CMP_PKISI *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_PKISI_sk_type(sk),ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc)) +#define sk_OSSL_CMP_PKISI_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), (idx)) +#define sk_OSSL_CMP_PKISI_set(sk, idx, ptr) ((OSSL_CMP_PKISI *)OPENSSL_sk_set(ossl_check_OSSL_CMP_PKISI_sk_type(sk), (idx), ossl_check_OSSL_CMP_PKISI_type(ptr))) +#define sk_OSSL_CMP_PKISI_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr)) +#define sk_OSSL_CMP_PKISI_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_type(ptr), pnum) +#define sk_OSSL_CMP_PKISI_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk)) +#define sk_OSSL_CMP_PKISI_dup(sk) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk))) +#define sk_OSSL_CMP_PKISI_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_PKISI) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_PKISI_freefunc_type(freefunc))) +#define sk_OSSL_CMP_PKISI_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_PKISI_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_PKISI_sk_type(sk), ossl_check_OSSL_CMP_PKISI_compfunc_type(cmp))) + +typedef struct ossl_cmp_certrepmessage_st OSSL_CMP_CERTREPMESSAGE; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE, OSSL_CMP_CERTREPMESSAGE) +#define sk_OSSL_CMP_CERTREPMESSAGE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_value(sk, idx) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTREPMESSAGE_new(cmp) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_null() ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTREPMESSAGE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTREPMESSAGE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTREPMESSAGE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_delete(sk, i) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTREPMESSAGE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))) +#define sk_OSSL_CMP_CERTREPMESSAGE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_pop(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_shift(sk) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk),ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTREPMESSAGE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTREPMESSAGE_set(sk, idx, ptr) ((OSSL_CMP_CERTREPMESSAGE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr))) +#define sk_OSSL_CMP_CERTREPMESSAGE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr)) +#define sk_OSSL_CMP_CERTREPMESSAGE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_type(ptr), pnum) +#define sk_OSSL_CMP_CERTREPMESSAGE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk)) +#define sk_OSSL_CMP_CERTREPMESSAGE_dup(sk) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk))) +#define sk_OSSL_CMP_CERTREPMESSAGE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTREPMESSAGE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTREPMESSAGE_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTREPMESSAGE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTREPMESSAGE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTREPMESSAGE_sk_type(sk), ossl_check_OSSL_CMP_CERTREPMESSAGE_compfunc_type(cmp))) + +typedef struct ossl_cmp_pollrep_st OSSL_CMP_POLLREP; +typedef STACK_OF(OSSL_CMP_POLLREP) OSSL_CMP_POLLREPCONTENT; +typedef struct ossl_cmp_certresponse_st OSSL_CMP_CERTRESPONSE; +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE, OSSL_CMP_CERTRESPONSE) +#define sk_OSSL_CMP_CERTRESPONSE_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_value(sk, idx) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_value(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx))) +#define sk_OSSL_CMP_CERTRESPONSE_new(cmp) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp))) +#define sk_OSSL_CMP_CERTRESPONSE_new_null() ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CMP_CERTRESPONSE_new_reserve(cmp, n) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp), (n))) +#define sk_OSSL_CMP_CERTRESPONSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (n)) +#define sk_OSSL_CMP_CERTRESPONSE_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_delete(sk, i) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (i))) +#define sk_OSSL_CMP_CERTRESPONSE_delete_ptr(sk, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))) +#define sk_OSSL_CMP_CERTRESPONSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_pop(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_pop(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_shift(sk) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_shift(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk),ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc)) +#define sk_OSSL_CMP_CERTRESPONSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), (idx)) +#define sk_OSSL_CMP_CERTRESPONSE_set(sk, idx, ptr) ((OSSL_CMP_CERTRESPONSE *)OPENSSL_sk_set(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), (idx), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr))) +#define sk_OSSL_CMP_CERTRESPONSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr)) +#define sk_OSSL_CMP_CERTRESPONSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_type(ptr), pnum) +#define sk_OSSL_CMP_CERTRESPONSE_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk)) +#define sk_OSSL_CMP_CERTRESPONSE_dup(sk) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk))) +#define sk_OSSL_CMP_CERTRESPONSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CMP_CERTRESPONSE) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_copyfunc_type(copyfunc), ossl_check_OSSL_CMP_CERTRESPONSE_freefunc_type(freefunc))) +#define sk_OSSL_CMP_CERTRESPONSE_set_cmp_func(sk, cmp) ((sk_OSSL_CMP_CERTRESPONSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CMP_CERTRESPONSE_sk_type(sk), ossl_check_OSSL_CMP_CERTRESPONSE_compfunc_type(cmp))) + +typedef STACK_OF(ASN1_UTF8STRING) OSSL_CMP_PKIFREETEXT; + +/* + * function DECLARATIONS + */ + +/* from cmp_asn.c */ +OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value); +void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type, + ASN1_TYPE *value); +ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav); +ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav); +int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **itav_sk_p, + OSSL_CMP_ITAV *itav); +void OSSL_CMP_ITAV_free(OSSL_CMP_ITAV *itav); +void OSSL_CMP_MSG_free(OSSL_CMP_MSG *msg); + +/* from cmp_ctx.c */ +OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx); +/* CMP general options: */ +# define OSSL_CMP_OPT_LOG_VERBOSITY 0 +/* CMP transfer options: */ +# define OSSL_CMP_OPT_KEEP_ALIVE 10 +# define OSSL_CMP_OPT_MSG_TIMEOUT 11 +# define OSSL_CMP_OPT_TOTAL_TIMEOUT 12 +/* CMP request options: */ +# define OSSL_CMP_OPT_VALIDITY_DAYS 20 +# define OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT 21 +# define OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL 22 +# define OSSL_CMP_OPT_POLICIES_CRITICAL 23 +# define OSSL_CMP_OPT_POPO_METHOD 24 +# define OSSL_CMP_OPT_IMPLICIT_CONFIRM 25 +# define OSSL_CMP_OPT_DISABLE_CONFIRM 26 +# define OSSL_CMP_OPT_REVOCATION_REASON 27 +/* CMP protection options: */ +# define OSSL_CMP_OPT_UNPROTECTED_SEND 30 +# define OSSL_CMP_OPT_UNPROTECTED_ERRORS 31 +# define OSSL_CMP_OPT_OWF_ALGNID 32 +# define OSSL_CMP_OPT_MAC_ALGNID 33 +# define OSSL_CMP_OPT_DIGEST_ALGNID 34 +# define OSSL_CMP_OPT_IGNORE_KEYUSAGE 35 +# define OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR 36 +int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val); +int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt); +/* CMP-specific callback for logging and outputting the error queue: */ +int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb); +# define OSSL_CMP_CTX_set_log_verbosity(ctx, level) \ + OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_LOG_VERBOSITY, level) +void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx); +/* message transfer: */ +int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path); +int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address); +int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port); +int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name); +int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names); +int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, OSSL_HTTP_bio_cb_t cb); +int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx); +typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t) (OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); +int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_transfer_cb_t cb); +int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); +/* server authentication: */ +int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store); +X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs); +STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx); +/* client authentication: */ +int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted, + STACK_OF(X509) *candidates); +int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey); +int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx, + const unsigned char *ref, int len); +int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx, + const unsigned char *sec, int len); +/* CMP message header and extra certificates: */ +int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, + STACK_OF(X509) *extraCertsOut); +/* certificate template: */ +int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey); +EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv); +int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx, + const GENERAL_NAME *name); +int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts); +int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo); +int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr); +/* misc body contents: */ +int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +/* certificate confirmation: */ +typedef int (*OSSL_CMP_certConf_cb_t) (OSSL_CMP_CTX *ctx, X509 *cert, + int fail_info, const char **txt); +int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info, + const char **text); +int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb); +int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx); +/* result fetching: */ +int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx); +OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx); +# define OSSL_CMP_PKISI_BUFLEN 1024 +X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *id); +int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *nonce); + +/* from cmp_status.c */ +char *OSSL_CMP_CTX_snprint_PKIStatus(const OSSL_CMP_CTX *ctx, char *buf, + size_t bufsize); +char *OSSL_CMP_snprint_PKIStatusInfo(const OSSL_CMP_PKISI *statusInfo, + char *buf, size_t bufsize); +OSSL_CMP_PKISI * +OSSL_CMP_STATUSINFO_new(int status, int fail_info, const char *text); + +/* from cmp_hdr.c */ +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_transactionID(const + OSSL_CMP_PKIHEADER *hdr); +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_recipNonce(const OSSL_CMP_PKIHEADER *hdr); + +/* from cmp_msg.c */ +OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_recipNonce(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid); +OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg); +OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg); +int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg); + +/* from cmp_vfy.c */ +int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg); +int OSSL_CMP_validate_cert_path(const OSSL_CMP_CTX *ctx, + X509_STORE *trusted_store, X509 *cert); + +/* from cmp_http.c */ +OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); + +/* from cmp_server.c */ +typedef struct ossl_cmp_srv_ctx_st OSSL_CMP_SRV_CTX; +OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_MSG * OSSL_CMP_CTX_server_perform(OSSL_CMP_CTX *client_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_SRV_CTX *OSSL_CMP_SRV_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_SRV_CTX_free(OSSL_CMP_SRV_CTX *srv_ctx); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_cert_request_cb_t) + (OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *req, int certReqId, + const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr, + X509 **certOut, STACK_OF(X509) **chainOut, STACK_OF(X509) **caPubs); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_rr_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +typedef int (*OSSL_CMP_SRV_genm_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const STACK_OF(OSSL_CMP_ITAV) *in, + STACK_OF(OSSL_CMP_ITAV) **out); +typedef void (*OSSL_CMP_SRV_error_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const OSSL_CMP_PKISI *statusInfo, + const ASN1_INTEGER *errorCode, + const OSSL_CMP_PKIFREETEXT *errDetails); +typedef int (*OSSL_CMP_SRV_certConf_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + int certReqId, + const ASN1_OCTET_STRING *certHash, + const OSSL_CMP_PKISI *si); +typedef int (*OSSL_CMP_SRV_pollReq_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, int certReqId, + OSSL_CMP_MSG **certReq, + int64_t *check_after); +int OSSL_CMP_SRV_CTX_init(OSSL_CMP_SRV_CTX *srv_ctx, void *custom_ctx, + OSSL_CMP_SRV_cert_request_cb_t process_cert_request, + OSSL_CMP_SRV_rr_cb_t process_rr, + OSSL_CMP_SRV_genm_cb_t process_genm, + OSSL_CMP_SRV_error_cb_t process_error, + OSSL_CMP_SRV_certConf_cb_t process_certConf, + OSSL_CMP_SRV_pollReq_cb_t process_pollReq); +OSSL_CMP_CTX *OSSL_CMP_SRV_CTX_get0_cmp_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +void *OSSL_CMP_SRV_CTX_get0_custom_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +int OSSL_CMP_SRV_CTX_set_send_unprotected_errors(OSSL_CMP_SRV_CTX *srv_ctx, + int val); +int OSSL_CMP_SRV_CTX_set_accept_unprotected(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_accept_raverified(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(OSSL_CMP_SRV_CTX *srv_ctx, + int val); + +/* from cmp_client.c */ +X509 *OSSL_CMP_exec_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm); +# define OSSL_CMP_IR 0 +# define OSSL_CMP_CR 2 +# define OSSL_CMP_P10CR 4 +# define OSSL_CMP_KUR 7 +# define OSSL_CMP_exec_IR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_IR, NULL) +# define OSSL_CMP_exec_CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_CR, NULL) +# define OSSL_CMP_exec_P10CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_P10CR, NULL) +# define OSSL_CMP_exec_KUR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_KUR, NULL) +int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm, int *checkAfter); +int OSSL_CMP_exec_RR_ses(OSSL_CMP_CTX *ctx); +STACK_OF(OSSL_CMP_ITAV) *OSSL_CMP_exec_GENM_ses(OSSL_CMP_CTX *ctx); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_H) */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h.in new file mode 100644 index 00000000..fb5ae671 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h.in @@ -0,0 +1,478 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CMP_H +# define OPENSSL_CMP_H + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include +# include +# include + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CMP_PVNO 2 + +/*- + * PKIFailureInfo ::= BIT STRING { + * -- since we can fail in more than one way! + * -- More codes may be added in the future if/when required. + * badAlg (0), + * -- unrecognized or unsupported Algorithm Identifier + * badMessageCheck (1), + * -- integrity check failed (e.g., signature did not verify) + * badRequest (2), + * -- transaction not permitted or supported + * badTime (3), + * -- messageTime was not sufficiently close to the system time, + * -- as defined by local policy + * badCertId (4), + * -- no certificate could be found matching the provided criteria + * badDataFormat (5), + * -- the data submitted has the wrong format + * wrongAuthority (6), + * -- the authority indicated in the request is different from the + * -- one creating the response token + * incorrectData (7), + * -- the requester's data is incorrect (for notary services) + * missingTimeStamp (8), + * -- when the timestamp is missing but should be there + * -- (by policy) + * badPOP (9), + * -- the proof-of-possession failed + * certRevoked (10), + * -- the certificate has already been revoked + * certConfirmed (11), + * -- the certificate has already been confirmed + * wrongIntegrity (12), + * -- invalid integrity, password based instead of signature or + * -- vice versa + * badRecipientNonce (13), + * -- invalid recipient nonce, either missing or wrong value + * timeNotAvailable (14), + * -- the TSA's time source is not available + * unacceptedPolicy (15), + * -- the requested TSA policy is not supported by the TSA. + * unacceptedExtension (16), + * -- the requested extension is not supported by the TSA. + * addInfoNotAvailable (17), + * -- the additional information requested could not be + * -- understood or is not available + * badSenderNonce (18), + * -- invalid sender nonce, either missing or wrong size + * badCertTemplate (19), + * -- invalid cert. template or missing mandatory information + * signerNotTrusted (20), + * -- signer of the message unknown or not trusted + * transactionIdInUse (21), + * -- the transaction identifier is already in use + * unsupportedVersion (22), + * -- the version of the message is not supported + * notAuthorized (23), + * -- the sender was not authorized to make the preceding + * -- request or perform the preceding action + * systemUnavail (24), + * -- the request cannot be handled due to system unavailability + * systemFailure (25), + * -- the request cannot be handled due to system failure + * duplicateCertReq (26) + * -- certificate cannot be issued because a duplicate + * -- certificate already exists + * } + */ +# define OSSL_CMP_PKIFAILUREINFO_badAlg 0 +# define OSSL_CMP_PKIFAILUREINFO_badMessageCheck 1 +# define OSSL_CMP_PKIFAILUREINFO_badRequest 2 +# define OSSL_CMP_PKIFAILUREINFO_badTime 3 +# define OSSL_CMP_PKIFAILUREINFO_badCertId 4 +# define OSSL_CMP_PKIFAILUREINFO_badDataFormat 5 +# define OSSL_CMP_PKIFAILUREINFO_wrongAuthority 6 +# define OSSL_CMP_PKIFAILUREINFO_incorrectData 7 +# define OSSL_CMP_PKIFAILUREINFO_missingTimeStamp 8 +# define OSSL_CMP_PKIFAILUREINFO_badPOP 9 +# define OSSL_CMP_PKIFAILUREINFO_certRevoked 10 +# define OSSL_CMP_PKIFAILUREINFO_certConfirmed 11 +# define OSSL_CMP_PKIFAILUREINFO_wrongIntegrity 12 +# define OSSL_CMP_PKIFAILUREINFO_badRecipientNonce 13 +# define OSSL_CMP_PKIFAILUREINFO_timeNotAvailable 14 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedPolicy 15 +# define OSSL_CMP_PKIFAILUREINFO_unacceptedExtension 16 +# define OSSL_CMP_PKIFAILUREINFO_addInfoNotAvailable 17 +# define OSSL_CMP_PKIFAILUREINFO_badSenderNonce 18 +# define OSSL_CMP_PKIFAILUREINFO_badCertTemplate 19 +# define OSSL_CMP_PKIFAILUREINFO_signerNotTrusted 20 +# define OSSL_CMP_PKIFAILUREINFO_transactionIdInUse 21 +# define OSSL_CMP_PKIFAILUREINFO_unsupportedVersion 22 +# define OSSL_CMP_PKIFAILUREINFO_notAuthorized 23 +# define OSSL_CMP_PKIFAILUREINFO_systemUnavail 24 +# define OSSL_CMP_PKIFAILUREINFO_systemFailure 25 +# define OSSL_CMP_PKIFAILUREINFO_duplicateCertReq 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX 26 +# define OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN \ + ((1 << (OSSL_CMP_PKIFAILUREINFO_MAX + 1)) - 1) +# if OSSL_CMP_PKIFAILUREINFO_MAX_BIT_PATTERN > INT_MAX +# error CMP_PKIFAILUREINFO_MAX bit pattern does not fit in type int +# endif + +typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; + +# define OSSL_CMP_CTX_FAILINFO_badAlg (1 << 0) +# define OSSL_CMP_CTX_FAILINFO_badMessageCheck (1 << 1) +# define OSSL_CMP_CTX_FAILINFO_badRequest (1 << 2) +# define OSSL_CMP_CTX_FAILINFO_badTime (1 << 3) +# define OSSL_CMP_CTX_FAILINFO_badCertId (1 << 4) +# define OSSL_CMP_CTX_FAILINFO_badDataFormat (1 << 5) +# define OSSL_CMP_CTX_FAILINFO_wrongAuthority (1 << 6) +# define OSSL_CMP_CTX_FAILINFO_incorrectData (1 << 7) +# define OSSL_CMP_CTX_FAILINFO_missingTimeStamp (1 << 8) +# define OSSL_CMP_CTX_FAILINFO_badPOP (1 << 9) +# define OSSL_CMP_CTX_FAILINFO_certRevoked (1 << 10) +# define OSSL_CMP_CTX_FAILINFO_certConfirmed (1 << 11) +# define OSSL_CMP_CTX_FAILINFO_wrongIntegrity (1 << 12) +# define OSSL_CMP_CTX_FAILINFO_badRecipientNonce (1 << 13) +# define OSSL_CMP_CTX_FAILINFO_timeNotAvailable (1 << 14) +# define OSSL_CMP_CTX_FAILINFO_unacceptedPolicy (1 << 15) +# define OSSL_CMP_CTX_FAILINFO_unacceptedExtension (1 << 16) +# define OSSL_CMP_CTX_FAILINFO_addInfoNotAvailable (1 << 17) +# define OSSL_CMP_CTX_FAILINFO_badSenderNonce (1 << 18) +# define OSSL_CMP_CTX_FAILINFO_badCertTemplate (1 << 19) +# define OSSL_CMP_CTX_FAILINFO_signerNotTrusted (1 << 20) +# define OSSL_CMP_CTX_FAILINFO_transactionIdInUse (1 << 21) +# define OSSL_CMP_CTX_FAILINFO_unsupportedVersion (1 << 22) +# define OSSL_CMP_CTX_FAILINFO_notAuthorized (1 << 23) +# define OSSL_CMP_CTX_FAILINFO_systemUnavail (1 << 24) +# define OSSL_CMP_CTX_FAILINFO_systemFailure (1 << 25) +# define OSSL_CMP_CTX_FAILINFO_duplicateCertReq (1 << 26) + +/*- + * PKIStatus ::= INTEGER { + * accepted (0), + * -- you got exactly what you asked for + * grantedWithMods (1), + * -- you got something like what you asked for; the + * -- requester is responsible for ascertaining the differences + * rejection (2), + * -- you don't get it, more information elsewhere in the message + * waiting (3), + * -- the request body part has not yet been processed; expect to + * -- hear more later (note: proper handling of this status + * -- response MAY use the polling req/rep PKIMessages specified + * -- in Section 5.3.22; alternatively, polling in the underlying + * -- transport layer MAY have some utility in this regard) + * revocationWarning (4), + * -- this message contains a warning that a revocation is + * -- imminent + * revocationNotification (5), + * -- notification that a revocation has occurred + * keyUpdateWarning (6) + * -- update already done for the oldCertId specified in + * -- CertReqMsg + * } + */ +# define OSSL_CMP_PKISTATUS_request -3 +# define OSSL_CMP_PKISTATUS_trans -2 +# define OSSL_CMP_PKISTATUS_unspecified -1 +# define OSSL_CMP_PKISTATUS_accepted 0 +# define OSSL_CMP_PKISTATUS_grantedWithMods 1 +# define OSSL_CMP_PKISTATUS_rejection 2 +# define OSSL_CMP_PKISTATUS_waiting 3 +# define OSSL_CMP_PKISTATUS_revocationWarning 4 +# define OSSL_CMP_PKISTATUS_revocationNotification 5 +# define OSSL_CMP_PKISTATUS_keyUpdateWarning 6 + +typedef ASN1_INTEGER OSSL_CMP_PKISTATUS; +DECLARE_ASN1_ITEM(OSSL_CMP_PKISTATUS) + +# define OSSL_CMP_CERTORENCCERT_CERTIFICATE 0 +# define OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT 1 + +/* data type declarations */ +typedef struct ossl_cmp_ctx_st OSSL_CMP_CTX; +typedef struct ossl_cmp_pkiheader_st OSSL_CMP_PKIHEADER; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER) +typedef struct ossl_cmp_msg_st OSSL_CMP_MSG; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_MSG) +DECLARE_ASN1_ENCODE_FUNCTIONS(OSSL_CMP_MSG, OSSL_CMP_MSG, OSSL_CMP_MSG) +typedef struct ossl_cmp_certstatus_st OSSL_CMP_CERTSTATUS; +{- + generate_stack_macros("OSSL_CMP_CERTSTATUS"); +-} +typedef struct ossl_cmp_itav_st OSSL_CMP_ITAV; +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV) +{- + generate_stack_macros("OSSL_CMP_ITAV"); +-} +typedef struct ossl_cmp_revrepcontent_st OSSL_CMP_REVREPCONTENT; +typedef struct ossl_cmp_pkisi_st OSSL_CMP_PKISI; +DECLARE_ASN1_FUNCTIONS(OSSL_CMP_PKISI) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI) +{- + generate_stack_macros("OSSL_CMP_PKISI"); +-} +typedef struct ossl_cmp_certrepmessage_st OSSL_CMP_CERTREPMESSAGE; +{- + generate_stack_macros("OSSL_CMP_CERTREPMESSAGE"); +-} +typedef struct ossl_cmp_pollrep_st OSSL_CMP_POLLREP; +typedef STACK_OF(OSSL_CMP_POLLREP) OSSL_CMP_POLLREPCONTENT; +typedef struct ossl_cmp_certresponse_st OSSL_CMP_CERTRESPONSE; +{- + generate_stack_macros("OSSL_CMP_CERTRESPONSE"); +-} +typedef STACK_OF(ASN1_UTF8STRING) OSSL_CMP_PKIFREETEXT; + +/* + * function DECLARATIONS + */ + +/* from cmp_asn.c */ +OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value); +void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type, + ASN1_TYPE *value); +ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav); +ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav); +int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **itav_sk_p, + OSSL_CMP_ITAV *itav); +void OSSL_CMP_ITAV_free(OSSL_CMP_ITAV *itav); +void OSSL_CMP_MSG_free(OSSL_CMP_MSG *msg); + +/* from cmp_ctx.c */ +OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx); +/* CMP general options: */ +# define OSSL_CMP_OPT_LOG_VERBOSITY 0 +/* CMP transfer options: */ +# define OSSL_CMP_OPT_KEEP_ALIVE 10 +# define OSSL_CMP_OPT_MSG_TIMEOUT 11 +# define OSSL_CMP_OPT_TOTAL_TIMEOUT 12 +/* CMP request options: */ +# define OSSL_CMP_OPT_VALIDITY_DAYS 20 +# define OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT 21 +# define OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL 22 +# define OSSL_CMP_OPT_POLICIES_CRITICAL 23 +# define OSSL_CMP_OPT_POPO_METHOD 24 +# define OSSL_CMP_OPT_IMPLICIT_CONFIRM 25 +# define OSSL_CMP_OPT_DISABLE_CONFIRM 26 +# define OSSL_CMP_OPT_REVOCATION_REASON 27 +/* CMP protection options: */ +# define OSSL_CMP_OPT_UNPROTECTED_SEND 30 +# define OSSL_CMP_OPT_UNPROTECTED_ERRORS 31 +# define OSSL_CMP_OPT_OWF_ALGNID 32 +# define OSSL_CMP_OPT_MAC_ALGNID 33 +# define OSSL_CMP_OPT_DIGEST_ALGNID 34 +# define OSSL_CMP_OPT_IGNORE_KEYUSAGE 35 +# define OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR 36 +int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val); +int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt); +/* CMP-specific callback for logging and outputting the error queue: */ +int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb); +# define OSSL_CMP_CTX_set_log_verbosity(ctx, level) \ + OSSL_CMP_CTX_set_option(ctx, OSSL_CMP_OPT_LOG_VERBOSITY, level) +void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx); +/* message transfer: */ +int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path); +int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address); +int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port); +int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name); +int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names); +int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, OSSL_HTTP_bio_cb_t cb); +int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx); +typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t) (OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); +int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_transfer_cb_t cb); +int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); +/* server authentication: */ +int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store); +X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs); +STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx); +/* client authentication: */ +int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted, + STACK_OF(X509) *candidates); +int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey); +int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx, + const unsigned char *ref, int len); +int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx, + const unsigned char *sec, int len); +/* CMP message header and extra certificates: */ +int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, + STACK_OF(X509) *extraCertsOut); +/* certificate template: */ +int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey); +EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv); +int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name); +int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx, + const GENERAL_NAME *name); +int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts); +int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo); +int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert); +int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr); +/* misc body contents: */ +int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +/* certificate confirmation: */ +typedef int (*OSSL_CMP_certConf_cb_t) (OSSL_CMP_CTX *ctx, X509 *cert, + int fail_info, const char **txt); +int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info, + const char **text); +int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb); +int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx); +/* result fetching: */ +int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx); +OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx); +# define OSSL_CMP_PKISI_BUFLEN 1024 +X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx); +STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx); +int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *id); +int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx, + const ASN1_OCTET_STRING *nonce); + +/* from cmp_status.c */ +char *OSSL_CMP_CTX_snprint_PKIStatus(const OSSL_CMP_CTX *ctx, char *buf, + size_t bufsize); +char *OSSL_CMP_snprint_PKIStatusInfo(const OSSL_CMP_PKISI *statusInfo, + char *buf, size_t bufsize); +OSSL_CMP_PKISI * +OSSL_CMP_STATUSINFO_new(int status, int fail_info, const char *text); + +/* from cmp_hdr.c */ +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_transactionID(const + OSSL_CMP_PKIHEADER *hdr); +ASN1_OCTET_STRING *OSSL_CMP_HDR_get0_recipNonce(const OSSL_CMP_PKIHEADER *hdr); + +/* from cmp_msg.c */ +OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +int OSSL_CMP_MSG_update_recipNonce(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg); +OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid); +OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg); +OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg); +int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg); + +/* from cmp_vfy.c */ +int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg); +int OSSL_CMP_validate_cert_path(const OSSL_CMP_CTX *ctx, + X509_STORE *trusted_store, X509 *cert); + +/* from cmp_http.c */ +OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, + const OSSL_CMP_MSG *req); + +/* from cmp_server.c */ +typedef struct ossl_cmp_srv_ctx_st OSSL_CMP_SRV_CTX; +OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_MSG * OSSL_CMP_CTX_server_perform(OSSL_CMP_CTX *client_ctx, + const OSSL_CMP_MSG *req); +OSSL_CMP_SRV_CTX *OSSL_CMP_SRV_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +void OSSL_CMP_SRV_CTX_free(OSSL_CMP_SRV_CTX *srv_ctx); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_cert_request_cb_t) + (OSSL_CMP_SRV_CTX *srv_ctx, const OSSL_CMP_MSG *req, int certReqId, + const OSSL_CRMF_MSG *crm, const X509_REQ *p10cr, + X509 **certOut, STACK_OF(X509) **chainOut, STACK_OF(X509) **caPubs); +typedef OSSL_CMP_PKISI *(*OSSL_CMP_SRV_rr_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +typedef int (*OSSL_CMP_SRV_genm_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const STACK_OF(OSSL_CMP_ITAV) *in, + STACK_OF(OSSL_CMP_ITAV) **out); +typedef void (*OSSL_CMP_SRV_error_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + const OSSL_CMP_PKISI *statusInfo, + const ASN1_INTEGER *errorCode, + const OSSL_CMP_PKIFREETEXT *errDetails); +typedef int (*OSSL_CMP_SRV_certConf_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, + int certReqId, + const ASN1_OCTET_STRING *certHash, + const OSSL_CMP_PKISI *si); +typedef int (*OSSL_CMP_SRV_pollReq_cb_t)(OSSL_CMP_SRV_CTX *srv_ctx, + const OSSL_CMP_MSG *req, int certReqId, + OSSL_CMP_MSG **certReq, + int64_t *check_after); +int OSSL_CMP_SRV_CTX_init(OSSL_CMP_SRV_CTX *srv_ctx, void *custom_ctx, + OSSL_CMP_SRV_cert_request_cb_t process_cert_request, + OSSL_CMP_SRV_rr_cb_t process_rr, + OSSL_CMP_SRV_genm_cb_t process_genm, + OSSL_CMP_SRV_error_cb_t process_error, + OSSL_CMP_SRV_certConf_cb_t process_certConf, + OSSL_CMP_SRV_pollReq_cb_t process_pollReq); +OSSL_CMP_CTX *OSSL_CMP_SRV_CTX_get0_cmp_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +void *OSSL_CMP_SRV_CTX_get0_custom_ctx(const OSSL_CMP_SRV_CTX *srv_ctx); +int OSSL_CMP_SRV_CTX_set_send_unprotected_errors(OSSL_CMP_SRV_CTX *srv_ctx, + int val); +int OSSL_CMP_SRV_CTX_set_accept_unprotected(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_accept_raverified(OSSL_CMP_SRV_CTX *srv_ctx, int val); +int OSSL_CMP_SRV_CTX_set_grant_implicit_confirm(OSSL_CMP_SRV_CTX *srv_ctx, + int val); + +/* from cmp_client.c */ +X509 *OSSL_CMP_exec_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm); +# define OSSL_CMP_IR 0 +# define OSSL_CMP_CR 2 +# define OSSL_CMP_P10CR 4 +# define OSSL_CMP_KUR 7 +# define OSSL_CMP_exec_IR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_IR, NULL) +# define OSSL_CMP_exec_CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_CR, NULL) +# define OSSL_CMP_exec_P10CR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_P10CR, NULL) +# define OSSL_CMP_exec_KUR_ses(ctx) \ + OSSL_CMP_exec_certreq(ctx, OSSL_CMP_KUR, NULL) +int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, + const OSSL_CRMF_MSG *crm, int *checkAfter); +int OSSL_CMP_exec_RR_ses(OSSL_CMP_CTX *ctx); +STACK_OF(OSSL_CMP_ITAV) *OSSL_CMP_exec_GENM_ses(OSSL_CMP_CTX *ctx); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_H) */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cmp_util.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cmp_util.h new file mode 100644 index 00000000..9a168922 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cmp_util.h @@ -0,0 +1,56 @@ +/* + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CMP_UTIL_H +# define OPENSSL_CMP_UTIL_H +# pragma once + +# include +# ifndef OPENSSL_NO_CMP + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +int OSSL_CMP_log_open(void); +void OSSL_CMP_log_close(void); +# define OSSL_CMP_LOG_PREFIX "CMP " + +/* + * generalized logging/error callback mirroring the severity levels of syslog.h + */ +typedef int OSSL_CMP_severity; +# define OSSL_CMP_LOG_EMERG 0 +# define OSSL_CMP_LOG_ALERT 1 +# define OSSL_CMP_LOG_CRIT 2 +# define OSSL_CMP_LOG_ERR 3 +# define OSSL_CMP_LOG_WARNING 4 +# define OSSL_CMP_LOG_NOTICE 5 +# define OSSL_CMP_LOG_INFO 6 +# define OSSL_CMP_LOG_DEBUG 7 +# define OSSL_CMP_LOG_TRACE 8 +# define OSSL_CMP_LOG_MAX OSSL_CMP_LOG_TRACE +typedef int (*OSSL_CMP_log_cb_t)(const char *func, const char *file, int line, + OSSL_CMP_severity level, const char *msg); + +int OSSL_CMP_print_to_bio(BIO *bio, const char *component, const char *file, + int line, OSSL_CMP_severity level, const char *msg); +/* use of the logging callback for outputting error queue */ +void OSSL_CMP_print_errors_cb(OSSL_CMP_log_cb_t log_fn); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CMP) */ +#endif /* !defined(OPENSSL_CMP_UTIL_H) */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cmperr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cmperr.h new file mode 100644 index 00000000..49fd5e39 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cmperr.h @@ -0,0 +1,116 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CMPERR_H +# define OPENSSL_CMPERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CMP + + +/* + * CMP reason codes. + */ +# define CMP_R_ALGORITHM_NOT_SUPPORTED 139 +# define CMP_R_BAD_CHECKAFTER_IN_POLLREP 167 +# define CMP_R_BAD_REQUEST_ID 108 +# define CMP_R_CERTHASH_UNMATCHED 156 +# define CMP_R_CERTID_NOT_FOUND 109 +# define CMP_R_CERTIFICATE_NOT_ACCEPTED 169 +# define CMP_R_CERTIFICATE_NOT_FOUND 112 +# define CMP_R_CERTREQMSG_NOT_FOUND 157 +# define CMP_R_CERTRESPONSE_NOT_FOUND 113 +# define CMP_R_CERT_AND_KEY_DO_NOT_MATCH 114 +# define CMP_R_CHECKAFTER_OUT_OF_RANGE 181 +# define CMP_R_ENCOUNTERED_KEYUPDATEWARNING 176 +# define CMP_R_ENCOUNTERED_WAITING 162 +# define CMP_R_ERROR_CALCULATING_PROTECTION 115 +# define CMP_R_ERROR_CREATING_CERTCONF 116 +# define CMP_R_ERROR_CREATING_CERTREP 117 +# define CMP_R_ERROR_CREATING_CERTREQ 163 +# define CMP_R_ERROR_CREATING_ERROR 118 +# define CMP_R_ERROR_CREATING_GENM 119 +# define CMP_R_ERROR_CREATING_GENP 120 +# define CMP_R_ERROR_CREATING_PKICONF 122 +# define CMP_R_ERROR_CREATING_POLLREP 123 +# define CMP_R_ERROR_CREATING_POLLREQ 124 +# define CMP_R_ERROR_CREATING_RP 125 +# define CMP_R_ERROR_CREATING_RR 126 +# define CMP_R_ERROR_PARSING_PKISTATUS 107 +# define CMP_R_ERROR_PROCESSING_MESSAGE 158 +# define CMP_R_ERROR_PROTECTING_MESSAGE 127 +# define CMP_R_ERROR_SETTING_CERTHASH 128 +# define CMP_R_ERROR_UNEXPECTED_CERTCONF 160 +# define CMP_R_ERROR_VALIDATING_PROTECTION 140 +# define CMP_R_ERROR_VALIDATING_SIGNATURE 171 +# define CMP_R_FAILED_BUILDING_OWN_CHAIN 164 +# define CMP_R_FAILED_EXTRACTING_PUBKEY 141 +# define CMP_R_FAILURE_OBTAINING_RANDOM 110 +# define CMP_R_FAIL_INFO_OUT_OF_RANGE 129 +# define CMP_R_INVALID_ARGS 100 +# define CMP_R_INVALID_OPTION 174 +# define CMP_R_MISSING_CERTID 165 +# define CMP_R_MISSING_KEY_INPUT_FOR_CREATING_PROTECTION 130 +# define CMP_R_MISSING_KEY_USAGE_DIGITALSIGNATURE 142 +# define CMP_R_MISSING_P10CSR 121 +# define CMP_R_MISSING_PBM_SECRET 166 +# define CMP_R_MISSING_PRIVATE_KEY 131 +# define CMP_R_MISSING_PRIVATE_KEY_FOR_POPO 190 +# define CMP_R_MISSING_PROTECTION 143 +# define CMP_R_MISSING_PUBLIC_KEY 183 +# define CMP_R_MISSING_REFERENCE_CERT 168 +# define CMP_R_MISSING_SECRET 178 +# define CMP_R_MISSING_SENDER_IDENTIFICATION 111 +# define CMP_R_MISSING_TRUST_ANCHOR 179 +# define CMP_R_MISSING_TRUST_STORE 144 +# define CMP_R_MULTIPLE_REQUESTS_NOT_SUPPORTED 161 +# define CMP_R_MULTIPLE_RESPONSES_NOT_SUPPORTED 170 +# define CMP_R_MULTIPLE_SAN_SOURCES 102 +# define CMP_R_NO_STDIO 194 +# define CMP_R_NO_SUITABLE_SENDER_CERT 145 +# define CMP_R_NULL_ARGUMENT 103 +# define CMP_R_PKIBODY_ERROR 146 +# define CMP_R_PKISTATUSINFO_NOT_FOUND 132 +# define CMP_R_POLLING_FAILED 172 +# define CMP_R_POTENTIALLY_INVALID_CERTIFICATE 147 +# define CMP_R_RECEIVED_ERROR 180 +# define CMP_R_RECIPNONCE_UNMATCHED 148 +# define CMP_R_REQUEST_NOT_ACCEPTED 149 +# define CMP_R_REQUEST_REJECTED_BY_SERVER 182 +# define CMP_R_SENDER_GENERALNAME_TYPE_NOT_SUPPORTED 150 +# define CMP_R_SRVCERT_DOES_NOT_VALIDATE_MSG 151 +# define CMP_R_TOTAL_TIMEOUT 184 +# define CMP_R_TRANSACTIONID_UNMATCHED 152 +# define CMP_R_TRANSFER_ERROR 159 +# define CMP_R_UNEXPECTED_PKIBODY 133 +# define CMP_R_UNEXPECTED_PKISTATUS 185 +# define CMP_R_UNEXPECTED_PVNO 153 +# define CMP_R_UNKNOWN_ALGORITHM_ID 134 +# define CMP_R_UNKNOWN_CERT_TYPE 135 +# define CMP_R_UNKNOWN_PKISTATUS 186 +# define CMP_R_UNSUPPORTED_ALGORITHM 136 +# define CMP_R_UNSUPPORTED_KEY_TYPE 137 +# define CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC 154 +# define CMP_R_VALUE_TOO_LARGE 175 +# define CMP_R_VALUE_TOO_SMALL 177 +# define CMP_R_WRONG_ALGORITHM_OID 138 +# define CMP_R_WRONG_CERTID 189 +# define CMP_R_WRONG_CERTID_IN_RP 187 +# define CMP_R_WRONG_PBM_VALUE 155 +# define CMP_R_WRONG_RP_COMPONENT_COUNT 188 +# define CMP_R_WRONG_SERIAL_IN_RP 173 + +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h index c7627968..3b453e6a 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h @@ -1,14 +1,25 @@ /* - * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/cms.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMS_H -# define HEADER_CMS_H + + +#ifndef OPENSSL_CMS_H +# define OPENSSL_CMS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMS_H +# endif # include @@ -30,14 +41,118 @@ typedef struct CMS_Receipt_st CMS_Receipt; typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; -DEFINE_STACK_OF(CMS_SignerInfo) -DEFINE_STACK_OF(CMS_RecipientEncryptedKey) -DEFINE_STACK_OF(CMS_RecipientInfo) -DEFINE_STACK_OF(CMS_RevocationInfoChoice) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_SignerInfo, CMS_SignerInfo, CMS_SignerInfo) +#define sk_CMS_SignerInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_value(sk, idx) ((CMS_SignerInfo *)OPENSSL_sk_value(ossl_check_const_CMS_SignerInfo_sk_type(sk), (idx))) +#define sk_CMS_SignerInfo_new(cmp) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new(ossl_check_CMS_SignerInfo_compfunc_type(cmp))) +#define sk_CMS_SignerInfo_new_null() ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_null()) +#define sk_CMS_SignerInfo_new_reserve(cmp, n) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_SignerInfo_compfunc_type(cmp), (n))) +#define sk_CMS_SignerInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_SignerInfo_sk_type(sk), (n)) +#define sk_CMS_SignerInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_delete(sk, i) ((CMS_SignerInfo *)OPENSSL_sk_delete(ossl_check_CMS_SignerInfo_sk_type(sk), (i))) +#define sk_CMS_SignerInfo_delete_ptr(sk, ptr) ((CMS_SignerInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr))) +#define sk_CMS_SignerInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_pop(sk) ((CMS_SignerInfo *)OPENSSL_sk_pop(ossl_check_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_shift(sk) ((CMS_SignerInfo *)OPENSSL_sk_shift(ossl_check_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_SignerInfo_sk_type(sk),ossl_check_CMS_SignerInfo_freefunc_type(freefunc)) +#define sk_CMS_SignerInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), (idx)) +#define sk_CMS_SignerInfo_set(sk, idx, ptr) ((CMS_SignerInfo *)OPENSSL_sk_set(ossl_check_CMS_SignerInfo_sk_type(sk), (idx), ossl_check_CMS_SignerInfo_type(ptr))) +#define sk_CMS_SignerInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr)) +#define sk_CMS_SignerInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_type(ptr), pnum) +#define sk_CMS_SignerInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_SignerInfo_sk_type(sk)) +#define sk_CMS_SignerInfo_dup(sk) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_SignerInfo_sk_type(sk))) +#define sk_CMS_SignerInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_SignerInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_copyfunc_type(copyfunc), ossl_check_CMS_SignerInfo_freefunc_type(freefunc))) +#define sk_CMS_SignerInfo_set_cmp_func(sk, cmp) ((sk_CMS_SignerInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_SignerInfo_sk_type(sk), ossl_check_CMS_SignerInfo_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey) +#define sk_CMS_RecipientEncryptedKey_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_value(sk, idx) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), (idx))) +#define sk_CMS_RecipientEncryptedKey_new(cmp) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp))) +#define sk_CMS_RecipientEncryptedKey_new_null() ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_null()) +#define sk_CMS_RecipientEncryptedKey_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientEncryptedKey_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (n)) +#define sk_CMS_RecipientEncryptedKey_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_delete(sk, i) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (i))) +#define sk_CMS_RecipientEncryptedKey_delete_ptr(sk, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr))) +#define sk_CMS_RecipientEncryptedKey_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_pop(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_pop(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_shift(sk) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_shift(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk),ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc)) +#define sk_CMS_RecipientEncryptedKey_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), (idx)) +#define sk_CMS_RecipientEncryptedKey_set(sk, idx, ptr) ((CMS_RecipientEncryptedKey *)OPENSSL_sk_set(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), (idx), ossl_check_CMS_RecipientEncryptedKey_type(ptr))) +#define sk_CMS_RecipientEncryptedKey_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr)) +#define sk_CMS_RecipientEncryptedKey_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_type(ptr), pnum) +#define sk_CMS_RecipientEncryptedKey_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk)) +#define sk_CMS_RecipientEncryptedKey_dup(sk) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk))) +#define sk_CMS_RecipientEncryptedKey_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientEncryptedKey) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_copyfunc_type(copyfunc), ossl_check_CMS_RecipientEncryptedKey_freefunc_type(freefunc))) +#define sk_CMS_RecipientEncryptedKey_set_cmp_func(sk, cmp) ((sk_CMS_RecipientEncryptedKey_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientEncryptedKey_sk_type(sk), ossl_check_CMS_RecipientEncryptedKey_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RecipientInfo, CMS_RecipientInfo, CMS_RecipientInfo) +#define sk_CMS_RecipientInfo_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_value(sk, idx) ((CMS_RecipientInfo *)OPENSSL_sk_value(ossl_check_const_CMS_RecipientInfo_sk_type(sk), (idx))) +#define sk_CMS_RecipientInfo_new(cmp) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new(ossl_check_CMS_RecipientInfo_compfunc_type(cmp))) +#define sk_CMS_RecipientInfo_new_null() ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_null()) +#define sk_CMS_RecipientInfo_new_reserve(cmp, n) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RecipientInfo_compfunc_type(cmp), (n))) +#define sk_CMS_RecipientInfo_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RecipientInfo_sk_type(sk), (n)) +#define sk_CMS_RecipientInfo_free(sk) OPENSSL_sk_free(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_delete(sk, i) ((CMS_RecipientInfo *)OPENSSL_sk_delete(ossl_check_CMS_RecipientInfo_sk_type(sk), (i))) +#define sk_CMS_RecipientInfo_delete_ptr(sk, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr))) +#define sk_CMS_RecipientInfo_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_pop(sk) ((CMS_RecipientInfo *)OPENSSL_sk_pop(ossl_check_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_shift(sk) ((CMS_RecipientInfo *)OPENSSL_sk_shift(ossl_check_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RecipientInfo_sk_type(sk),ossl_check_CMS_RecipientInfo_freefunc_type(freefunc)) +#define sk_CMS_RecipientInfo_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), (idx)) +#define sk_CMS_RecipientInfo_set(sk, idx, ptr) ((CMS_RecipientInfo *)OPENSSL_sk_set(ossl_check_CMS_RecipientInfo_sk_type(sk), (idx), ossl_check_CMS_RecipientInfo_type(ptr))) +#define sk_CMS_RecipientInfo_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr)) +#define sk_CMS_RecipientInfo_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_type(ptr), pnum) +#define sk_CMS_RecipientInfo_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RecipientInfo_sk_type(sk)) +#define sk_CMS_RecipientInfo_dup(sk) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_dup(ossl_check_const_CMS_RecipientInfo_sk_type(sk))) +#define sk_CMS_RecipientInfo_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RecipientInfo) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_copyfunc_type(copyfunc), ossl_check_CMS_RecipientInfo_freefunc_type(freefunc))) +#define sk_CMS_RecipientInfo_set_cmp_func(sk, cmp) ((sk_CMS_RecipientInfo_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RecipientInfo_sk_type(sk), ossl_check_CMS_RecipientInfo_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CMS_RevocationInfoChoice, CMS_RevocationInfoChoice, CMS_RevocationInfoChoice) +#define sk_CMS_RevocationInfoChoice_num(sk) OPENSSL_sk_num(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_value(sk, idx) ((CMS_RevocationInfoChoice *)OPENSSL_sk_value(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), (idx))) +#define sk_CMS_RevocationInfoChoice_new(cmp) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp))) +#define sk_CMS_RevocationInfoChoice_new_null() ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_null()) +#define sk_CMS_RevocationInfoChoice_new_reserve(cmp, n) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_new_reserve(ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp), (n))) +#define sk_CMS_RevocationInfoChoice_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (n)) +#define sk_CMS_RevocationInfoChoice_free(sk) OPENSSL_sk_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_zero(sk) OPENSSL_sk_zero(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_delete(sk, i) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (i))) +#define sk_CMS_RevocationInfoChoice_delete_ptr(sk, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_delete_ptr(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr))) +#define sk_CMS_RevocationInfoChoice_push(sk, ptr) OPENSSL_sk_push(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_pop(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_pop(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_shift(sk) ((CMS_RevocationInfoChoice *)OPENSSL_sk_shift(ossl_check_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CMS_RevocationInfoChoice_sk_type(sk),ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc)) +#define sk_CMS_RevocationInfoChoice_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), (idx)) +#define sk_CMS_RevocationInfoChoice_set(sk, idx, ptr) ((CMS_RevocationInfoChoice *)OPENSSL_sk_set(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), (idx), ossl_check_CMS_RevocationInfoChoice_type(ptr))) +#define sk_CMS_RevocationInfoChoice_find(sk, ptr) OPENSSL_sk_find(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr)) +#define sk_CMS_RevocationInfoChoice_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_type(ptr), pnum) +#define sk_CMS_RevocationInfoChoice_sort(sk) OPENSSL_sk_sort(ossl_check_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk)) +#define sk_CMS_RevocationInfoChoice_dup(sk) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_dup(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk))) +#define sk_CMS_RevocationInfoChoice_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CMS_RevocationInfoChoice) *)OPENSSL_sk_deep_copy(ossl_check_const_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_copyfunc_type(copyfunc), ossl_check_CMS_RevocationInfoChoice_freefunc_type(freefunc))) +#define sk_CMS_RevocationInfoChoice_set_cmp_func(sk, cmp) ((sk_CMS_RevocationInfoChoice_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CMS_RevocationInfoChoice_sk_type(sk), ossl_check_CMS_RevocationInfoChoice_compfunc_type(cmp))) + + DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) +CMS_ContentInfo *CMS_ContentInfo_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + # define CMS_SIGNERINFO_ISSUER_SERIAL 0 # define CMS_SIGNERINFO_KEYIDENTIFIER 1 @@ -73,6 +188,8 @@ DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) # define CMS_DEBUG_DECRYPT 0x20000 # define CMS_KEY_PARAM 0x40000 # define CMS_ASCIICRLF 0x80000 +# define CMS_CADES 0x100000 +# define CMS_USE_ORIGINATOR_KEYID 0x200000 const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); @@ -83,8 +200,8 @@ ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); int CMS_is_detached(CMS_ContentInfo *cms); int CMS_set_detached(CMS_ContentInfo *cms, int detached); -# ifdef HEADER_PEM_H -DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) +# ifdef OPENSSL_PEM_H +DECLARE_PEM_rw(CMS, CMS_ContentInfo) # endif int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); @@ -95,6 +212,7 @@ int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +CMS_ContentInfo *SMIME_read_CMS_ex(BIO *bio, int flags, BIO **bcont, CMS_ContentInfo **ci); int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, @@ -103,6 +221,10 @@ int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, unsigned int flags); +CMS_ContentInfo *CMS_sign_ex(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, X509 *signcert, EVP_PKEY *pkey, @@ -110,11 +232,16 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); +CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, unsigned int flags); +CMS_ContentInfo *CMS_digest_create_ex(BIO *in, const EVP_MD *md, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, const unsigned char *key, size_t keylen, @@ -123,6 +250,11 @@ int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, const unsigned char *key, size_t keylen, unsigned int flags); +CMS_ContentInfo *CMS_EncryptedData_encrypt_ex(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags, + OSSL_LIB_CTX *ctx, + const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, const unsigned char *key, size_t keylen); @@ -138,11 +270,16 @@ STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); +CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, BIO *dcont, BIO *out, unsigned int flags); int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms, EVP_PKEY *pk, + X509 *cert, X509 *peer); int CMS_decrypt_set1_key(CMS_ContentInfo *cms, unsigned char *key, size_t keylen, const unsigned char *id, size_t idlen); @@ -152,9 +289,19 @@ int CMS_decrypt_set1_password(CMS_ContentInfo *cms, STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo * +CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, + const char *propq); CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo *CMS_EnvelopedData_create_ex(const EVP_CIPHER *cipher, + OSSL_LIB_CTX *ctx, + const char *propq); + CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, X509 *recip, unsigned int flags); +CMS_RecipientInfo *CMS_add1_recipient(CMS_ContentInfo *cms, X509 *recip, + EVP_PKEY *originatorPrivKey, X509 * originator, unsigned int flags); int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, @@ -197,7 +344,7 @@ CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, const EVP_CIPHER *kekciph); int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); -int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(const CMS_ContentInfo *cms, CMS_RecipientInfo *ri); int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags); @@ -261,7 +408,8 @@ int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, const char *attrname, int type, const void *bytes, int len); -void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, const ASN1_OBJECT *oid, +void *CMS_signed_get0_data_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *oid, int lastpos, int type); int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); @@ -285,11 +433,16 @@ void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, int lastpos, int type); int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); -CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, - int allorfirst, - STACK_OF(GENERAL_NAMES) - *receiptList, STACK_OF(GENERAL_NAMES) - *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo, + OSSL_LIB_CTX *ctx); + int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, ASN1_STRING **pcid, @@ -319,6 +472,7 @@ int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, X509 *cert); int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +int CMS_RecipientInfo_kari_set0_pkey_and_peer(CMS_RecipientInfo *ri, EVP_PKEY *pk, X509 *peer); EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri, diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h.in new file mode 100644 index 00000000..da20ddf2 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h.in @@ -0,0 +1,395 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CMS_H +# define OPENSSL_CMS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CMS_H +# endif + +# include + +# ifndef OPENSSL_NO_CMS +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct CMS_ContentInfo_st CMS_ContentInfo; +typedef struct CMS_SignerInfo_st CMS_SignerInfo; +typedef struct CMS_CertificateChoices CMS_CertificateChoices; +typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; +typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; +typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; +typedef struct CMS_Receipt_st CMS_Receipt; +typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; +typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; + +{- + generate_stack_macros("CMS_SignerInfo") + .generate_stack_macros("CMS_RecipientEncryptedKey") + .generate_stack_macros("CMS_RecipientInfo") + .generate_stack_macros("CMS_RevocationInfoChoice"); +-} + +DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) +DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) +DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) + +CMS_ContentInfo *CMS_ContentInfo_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +# define CMS_SIGNERINFO_ISSUER_SERIAL 0 +# define CMS_SIGNERINFO_KEYIDENTIFIER 1 + +# define CMS_RECIPINFO_NONE -1 +# define CMS_RECIPINFO_TRANS 0 +# define CMS_RECIPINFO_AGREE 1 +# define CMS_RECIPINFO_KEK 2 +# define CMS_RECIPINFO_PASS 3 +# define CMS_RECIPINFO_OTHER 4 + +/* S/MIME related flags */ + +# define CMS_TEXT 0x1 +# define CMS_NOCERTS 0x2 +# define CMS_NO_CONTENT_VERIFY 0x4 +# define CMS_NO_ATTR_VERIFY 0x8 +# define CMS_NOSIGS \ + (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) +# define CMS_NOINTERN 0x10 +# define CMS_NO_SIGNER_CERT_VERIFY 0x20 +# define CMS_NOVERIFY 0x20 +# define CMS_DETACHED 0x40 +# define CMS_BINARY 0x80 +# define CMS_NOATTR 0x100 +# define CMS_NOSMIMECAP 0x200 +# define CMS_NOOLDMIMETYPE 0x400 +# define CMS_CRLFEOL 0x800 +# define CMS_STREAM 0x1000 +# define CMS_NOCRL 0x2000 +# define CMS_PARTIAL 0x4000 +# define CMS_REUSE_DIGEST 0x8000 +# define CMS_USE_KEYID 0x10000 +# define CMS_DEBUG_DECRYPT 0x20000 +# define CMS_KEY_PARAM 0x40000 +# define CMS_ASCIICRLF 0x80000 +# define CMS_CADES 0x100000 +# define CMS_USE_ORIGINATOR_KEYID 0x200000 + +const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); + +BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); +int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); + +ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); +int CMS_is_detached(CMS_ContentInfo *cms); +int CMS_set_detached(CMS_ContentInfo *cms, int detached); + +# ifdef OPENSSL_PEM_H +DECLARE_PEM_rw(CMS, CMS_ContentInfo) +# endif +int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); +CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); +int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); + +BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); +int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); +int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, + int flags); +CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +CMS_ContentInfo *SMIME_read_CMS_ex(BIO *bio, int flags, BIO **bcont, CMS_ContentInfo **ci); +int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); + +int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, + unsigned int flags); + +CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags); +CMS_ContentInfo *CMS_sign_ex(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); + +CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, + X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, unsigned int flags); + +int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); +CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); +CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); + +int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create_ex(BIO *in, const EVP_MD *md, + unsigned int flags, OSSL_LIB_CTX *ctx, + const char *propq); + +int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, + const unsigned char *key, size_t keylen, + BIO *dcont, BIO *out, unsigned int flags); + +CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags); +CMS_ContentInfo *CMS_EncryptedData_encrypt_ex(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags, + OSSL_LIB_CTX *ctx, + const char *propq); + +int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, + const unsigned char *key, size_t keylen); + +int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); + +int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, + STACK_OF(X509) *certs, + X509_STORE *store, unsigned int flags); + +STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); + +CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags); +CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags, + OSSL_LIB_CTX *ctx, const char *propq); + +int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, + BIO *dcont, BIO *out, unsigned int flags); + +int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_pkey_and_peer(CMS_ContentInfo *cms, EVP_PKEY *pk, + X509 *cert, X509 *peer); +int CMS_decrypt_set1_key(CMS_ContentInfo *cms, + unsigned char *key, size_t keylen, + const unsigned char *id, size_t idlen); +int CMS_decrypt_set1_password(CMS_ContentInfo *cms, + unsigned char *pass, ossl_ssize_t passlen); + +STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); +int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); +EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo * +CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, + const char *propq); +CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_ContentInfo *CMS_EnvelopedData_create_ex(const EVP_CIPHER *cipher, + OSSL_LIB_CTX *ctx, + const char *propq); + +CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, + X509 *recip, unsigned int flags); +CMS_RecipientInfo *CMS_add1_recipient(CMS_ContentInfo *cms, X509 *recip, + EVP_PKEY *originatorPrivKey, X509 * originator, unsigned int flags); +int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); +int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); +int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, + EVP_PKEY **pk, X509 **recip, + X509_ALGOR **palg); +int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, + unsigned char *key, size_t keylen, + unsigned char *id, size_t idlen, + ASN1_GENERALIZEDTIME *date, + ASN1_OBJECT *otherTypeId, + ASN1_TYPE *otherType); + +int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pid, + ASN1_GENERALIZEDTIME **pdate, + ASN1_OBJECT **potherid, + ASN1_TYPE **pothertype); + +int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, + unsigned char *key, size_t keylen); + +int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, + const unsigned char *id, size_t idlen); + +int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, + unsigned char *pass, + ossl_ssize_t passlen); + +CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, + int iter, int wrap_nid, + int pbe_nid, + unsigned char *pass, + ossl_ssize_t passlen, + const EVP_CIPHER *kekciph); + +int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(const CMS_ContentInfo *cms, CMS_RecipientInfo *ri); + +int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); + +int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); +const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); + +CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); +int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); +int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); +STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); + +CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); +int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); +int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); +STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); + +int CMS_SignedData_init(CMS_ContentInfo *cms); +CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, + X509 *signer, EVP_PKEY *pk, const EVP_MD *md, + unsigned int flags); +EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); +EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); +STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); + +void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); +int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); +int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + unsigned int flags); +void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, + X509 **signer, X509_ALGOR **pdig, + X509_ALGOR **psig); +ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); +int CMS_SignerInfo_sign(CMS_SignerInfo *si); +int CMS_SignerInfo_verify(CMS_SignerInfo *si); +int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); + +int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); +int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, + int algnid, int keysize); +int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); + +int CMS_signed_get_attr_count(const CMS_SignerInfo *si); +int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_signed_get0_data_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); +int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( + unsigned char *id, int idlen, int allorfirst, + STACK_OF(GENERAL_NAMES) *receiptList, + STACK_OF(GENERAL_NAMES) *receiptsTo, + OSSL_LIB_CTX *ctx); + +int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); +void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, + ASN1_STRING **pcid, + int *pallorfirst, + STACK_OF(GENERAL_NAMES) **plist, + STACK_OF(GENERAL_NAMES) **prto); +int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pukm); +STACK_OF(CMS_RecipientEncryptedKey) +*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); + +int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, + X509_ALGOR **pubalg, + ASN1_BIT_STRING **pubkey, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); + +int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, + ASN1_OCTET_STRING **keyid, + ASN1_GENERALIZEDTIME **tm, + CMS_OtherKeyAttribute **other, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, + X509 *cert); +int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +int CMS_RecipientInfo_kari_set0_pkey_and_peer(CMS_RecipientInfo *ri, EVP_PKEY *pk, X509 *peer); +EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); +int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, + CMS_RecipientInfo *ri, + CMS_RecipientEncryptedKey *rek); + +int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, + ASN1_OCTET_STRING *ukm, int keylen); + +/* Backward compatibility for spelling errors. */ +# define CMS_R_UNKNOWN_DIGEST_ALGORITM CMS_R_UNKNOWN_DIGEST_ALGORITHM +# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE \ + CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cmserr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cmserr.h index d589f592..d48c2a4a 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cmserr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cmserr.h @@ -1,115 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CMSERR_H -# define HEADER_CMSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_CMSERR_H +# define OPENSSL_CMSERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_CMS -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CMS_strings(void); - -/* - * CMS function codes. - */ -# define CMS_F_CHECK_CONTENT 99 -# define CMS_F_CMS_ADD0_CERT 164 -# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 -# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 -# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 -# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 -# define CMS_F_CMS_ADD1_SIGNER 102 -# define CMS_F_CMS_ADD1_SIGNINGTIME 103 -# define CMS_F_CMS_COMPRESS 104 -# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 -# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 -# define CMS_F_CMS_COPY_CONTENT 107 -# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 -# define CMS_F_CMS_DATA 109 -# define CMS_F_CMS_DATAFINAL 110 -# define CMS_F_CMS_DATAINIT 111 -# define CMS_F_CMS_DECRYPT 112 -# define CMS_F_CMS_DECRYPT_SET1_KEY 113 -# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 -# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 -# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 -# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 -# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 -# define CMS_F_CMS_DIGEST_VERIFY 118 -# define CMS_F_CMS_ENCODE_RECEIPT 161 -# define CMS_F_CMS_ENCRYPT 119 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 179 -# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 -# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 -# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 -# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 -# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 -# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 -# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 -# define CMS_F_CMS_ENV_ASN1_CTRL 171 -# define CMS_F_CMS_FINAL 127 -# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 -# define CMS_F_CMS_GET0_CONTENT 129 -# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 -# define CMS_F_CMS_GET0_ENVELOPED 131 -# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 -# define CMS_F_CMS_GET0_SIGNED 133 -# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 -# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 -# define CMS_F_CMS_RECEIPT_VERIFY 160 -# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 -# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 -# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 -# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 -# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 -# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 -# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 -# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 -# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 -# define CMS_F_CMS_SD_ASN1_CTRL 170 -# define CMS_F_CMS_SET1_IAS 176 -# define CMS_F_CMS_SET1_KEYID 177 -# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 -# define CMS_F_CMS_SET_DETACHED 147 -# define CMS_F_CMS_SIGN 148 -# define CMS_F_CMS_SIGNED_DATA_INIT 149 -# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 -# define CMS_F_CMS_SIGNERINFO_SIGN 151 -# define CMS_F_CMS_SIGNERINFO_VERIFY 152 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 -# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 -# define CMS_F_CMS_SIGN_RECEIPT 163 -# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 183 -# define CMS_F_CMS_STREAM 155 -# define CMS_F_CMS_UNCOMPRESS 156 -# define CMS_F_CMS_VERIFY 157 -# define CMS_F_KEK_UNWRAP_KEY 180 /* * CMS reason codes. @@ -119,6 +28,8 @@ int ERR_load_CMS_strings(void); # define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 # define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 # define CMS_R_CERTIFICATE_VERIFY_ERROR 100 +# define CMS_R_CIPHER_AEAD_SET_TAG_ERROR 184 +# define CMS_R_CIPHER_GET_TAG 185 # define CMS_R_CIPHER_INITIALISATION_ERROR 101 # define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 # define CMS_R_CMS_DATAFINAL_ERROR 103 @@ -132,14 +43,19 @@ int ERR_load_CMS_strings(void); # define CMS_R_CONTENT_VERIFY_ERROR 109 # define CMS_R_CTRL_ERROR 110 # define CMS_R_CTRL_FAILURE 111 +# define CMS_R_DECODE_ERROR 187 # define CMS_R_DECRYPT_ERROR 112 # define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 # define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 # define CMS_R_ERROR_SETTING_KEY 115 # define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 +# define CMS_R_ESS_SIGNING_CERTID_MISMATCH_ERROR 183 # define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 # define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 # define CMS_R_INVALID_KEY_LENGTH 118 +# define CMS_R_INVALID_LABEL 190 +# define CMS_R_INVALID_OAEP_PARAMETERS 191 +# define CMS_R_KDF_PARAMETER_ERROR 186 # define CMS_R_MD_BIO_INIT_ERROR 119 # define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 # define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 @@ -170,9 +86,11 @@ int ERR_load_CMS_strings(void); # define CMS_R_NO_PUBLIC_KEY 134 # define CMS_R_NO_RECEIPT_REQUEST 168 # define CMS_R_NO_SIGNERS 135 +# define CMS_R_PEER_KEY_ERROR 188 # define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 # define CMS_R_RECEIPT_DECODE_ERROR 169 # define CMS_R_RECIPIENT_ERROR 137 +# define CMS_R_SHARED_INFO_ERROR 189 # define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 # define CMS_R_SIGNFINAL_ERROR 139 # define CMS_R_SMIME_TEXT_ERROR 140 @@ -189,8 +107,10 @@ int ERR_load_CMS_strings(void); # define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 # define CMS_R_UNSUPPORTED_CONTENT_ENCRYPTION_ALGORITHM 194 # define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 +# define CMS_R_UNSUPPORTED_ENCRYPTION_TYPE 192 # define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 # define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 +# define CMS_R_UNSUPPORTED_LABEL_SOURCE 193 # define CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE 155 # define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 # define CMS_R_UNSUPPORTED_TYPE 156 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/comp.h b/deps/openssl/android/x86_64/usr/local/include/openssl/comp.h index d814d3cf..06ff5810 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/comp.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/comp.h @@ -1,14 +1,20 @@ /* * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_COMP_H -# define HEADER_COMP_H +#ifndef OPENSSL_COMP_H +# define OPENSSL_COMP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_COMP_H +# endif # include @@ -35,11 +41,11 @@ int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, COMP_METHOD *COMP_zlib(void); -#if OPENSSL_API_COMPAT < 0x10100000L -#define COMP_zlib_cleanup() while(0) continue +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define COMP_zlib_cleanup() while(0) continue #endif -# ifdef HEADER_BIO_H +# ifdef OPENSSL_BIO_H # ifdef ZLIB const BIO_METHOD *BIO_f_zlib(void); # endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/comperr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/comperr.h index 90231e9a..01dd3e6b 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/comperr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/comperr.h @@ -1,37 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_COMPERR_H -# define HEADER_COMPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_COMPERR_H +# define OPENSSL_COMPERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_COMP -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_COMP_strings(void); - -/* - * COMP function codes. - */ -# define COMP_F_BIO_ZLIB_FLUSH 99 -# define COMP_F_BIO_ZLIB_NEW 100 -# define COMP_F_BIO_ZLIB_READ 101 -# define COMP_F_BIO_ZLIB_WRITE 102 -# define COMP_F_COMP_CTX_NEW 103 /* * COMP reason codes. diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h b/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h index 7336cd2f..e8fcf315 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h @@ -1,21 +1,35 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/conf.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONF_H -# define HEADER_CONF_H + + +#ifndef OPENSSL_CONF_H +# define OPENSSL_CONF_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_H +# endif # include # include # include # include -# include +# include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -27,33 +41,63 @@ typedef struct { char *value; } CONF_VALUE; -DEFINE_STACK_OF(CONF_VALUE) -DEFINE_LHASH_OF(CONF_VALUE); +SKM_DEFINE_STACK_OF_INTERNAL(CONF_VALUE, CONF_VALUE, CONF_VALUE) +#define sk_CONF_VALUE_num(sk) OPENSSL_sk_num(ossl_check_const_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_value(sk, idx) ((CONF_VALUE *)OPENSSL_sk_value(ossl_check_const_CONF_VALUE_sk_type(sk), (idx))) +#define sk_CONF_VALUE_new(cmp) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new(ossl_check_CONF_VALUE_compfunc_type(cmp))) +#define sk_CONF_VALUE_new_null() ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_null()) +#define sk_CONF_VALUE_new_reserve(cmp, n) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_new_reserve(ossl_check_CONF_VALUE_compfunc_type(cmp), (n))) +#define sk_CONF_VALUE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CONF_VALUE_sk_type(sk), (n)) +#define sk_CONF_VALUE_free(sk) OPENSSL_sk_free(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_zero(sk) OPENSSL_sk_zero(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_delete(sk, i) ((CONF_VALUE *)OPENSSL_sk_delete(ossl_check_CONF_VALUE_sk_type(sk), (i))) +#define sk_CONF_VALUE_delete_ptr(sk, ptr) ((CONF_VALUE *)OPENSSL_sk_delete_ptr(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr))) +#define sk_CONF_VALUE_push(sk, ptr) OPENSSL_sk_push(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_pop(sk) ((CONF_VALUE *)OPENSSL_sk_pop(ossl_check_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_shift(sk) ((CONF_VALUE *)OPENSSL_sk_shift(ossl_check_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CONF_VALUE_sk_type(sk),ossl_check_CONF_VALUE_freefunc_type(freefunc)) +#define sk_CONF_VALUE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), (idx)) +#define sk_CONF_VALUE_set(sk, idx, ptr) ((CONF_VALUE *)OPENSSL_sk_set(ossl_check_CONF_VALUE_sk_type(sk), (idx), ossl_check_CONF_VALUE_type(ptr))) +#define sk_CONF_VALUE_find(sk, ptr) OPENSSL_sk_find(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr)) +#define sk_CONF_VALUE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_type(ptr), pnum) +#define sk_CONF_VALUE_sort(sk) OPENSSL_sk_sort(ossl_check_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CONF_VALUE_sk_type(sk)) +#define sk_CONF_VALUE_dup(sk) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_dup(ossl_check_const_CONF_VALUE_sk_type(sk))) +#define sk_CONF_VALUE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CONF_VALUE) *)OPENSSL_sk_deep_copy(ossl_check_const_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_copyfunc_type(copyfunc), ossl_check_CONF_VALUE_freefunc_type(freefunc))) +#define sk_CONF_VALUE_set_cmp_func(sk, cmp) ((sk_CONF_VALUE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CONF_VALUE_sk_type(sk), ossl_check_CONF_VALUE_compfunc_type(cmp))) +DEFINE_LHASH_OF_INTERNAL(CONF_VALUE); +#define lh_CONF_VALUE_new(hfn, cmp) ((LHASH_OF(CONF_VALUE) *)OPENSSL_LH_new(ossl_check_CONF_VALUE_lh_hashfunc_type(hfn), ossl_check_CONF_VALUE_lh_compfunc_type(cmp))) +#define lh_CONF_VALUE_free(lh) OPENSSL_LH_free(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_flush(lh) OPENSSL_LH_flush(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_insert(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_insert(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_delete(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_delete(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_retrieve(lh, ptr) ((CONF_VALUE *)OPENSSL_LH_retrieve(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_const_CONF_VALUE_lh_plain_type(ptr))) +#define lh_CONF_VALUE_error(lh) OPENSSL_LH_error(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_num_items(lh) OPENSSL_LH_num_items(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_CONF_VALUE_lh_type(lh), out) +#define lh_CONF_VALUE_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_CONF_VALUE_lh_type(lh)) +#define lh_CONF_VALUE_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_CONF_VALUE_lh_type(lh), dl) +#define lh_CONF_VALUE_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_doallfunc_type(dfn)) + struct conf_st; struct conf_method_st; typedef struct conf_method_st CONF_METHOD; -struct conf_method_st { - const char *name; - CONF *(*create) (CONF_METHOD *meth); - int (*init) (CONF *conf); - int (*destroy) (CONF *conf); - int (*destroy_data) (CONF *conf); - int (*load_bio) (CONF *conf, BIO *bp, long *eline); - int (*dump) (const CONF *conf, BIO *bp); - int (*is_number) (const CONF *conf, char c); - int (*to_int) (const CONF *conf, char c); - int (*load) (CONF *conf, const char *name, long *eline); -}; +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include +# endif /* Module definitions */ - typedef struct conf_imodule_st CONF_IMODULE; typedef struct conf_module_st CONF_MODULE; -DEFINE_STACK_OF(CONF_MODULE) -DEFINE_STACK_OF(CONF_IMODULE) +STACK_OF(CONF_MODULE); +STACK_OF(CONF_IMODULE); /* DSO module function typedefs */ typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); @@ -87,10 +131,11 @@ void CONF_free(LHASH_OF(CONF_VALUE) *conf); int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); #endif int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void OPENSSL_config(const char *config_name); +#endif -DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) - -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OPENSSL_no_config() \ OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) #endif @@ -100,15 +145,13 @@ DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) * that wasn't the case, the above functions would have been replaced */ -struct conf_st { - CONF_METHOD *meth; - void *meth_data; - LHASH_OF(CONF_VALUE) *data; -}; - +CONF *NCONF_new_ex(OSSL_LIB_CTX *libctx, CONF_METHOD *meth); +OSSL_LIB_CTX *NCONF_get0_libctx(const CONF *conf); CONF *NCONF_new(CONF_METHOD *meth); CONF_METHOD *NCONF_default(void); -CONF_METHOD *NCONF_WIN32(void); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CONF_METHOD *NCONF_WIN32(void); +#endif void NCONF_free(CONF *conf); void NCONF_free_data(CONF *conf); @@ -117,6 +160,7 @@ int NCONF_load(CONF *conf, const char *file, long *eline); int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); # endif int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(OPENSSL_CSTRING) *NCONF_get_section_names(const CONF *conf); STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, const char *section); char *NCONF_get_string(const CONF *conf, const char *group, const char *name); @@ -133,11 +177,13 @@ int NCONF_dump_bio(const CONF *conf, BIO *out); int CONF_modules_load(const CONF *cnf, const char *appname, unsigned long flags); +int CONF_modules_load_file_ex(OSSL_LIB_CTX *libctx, const char *filename, + const char *appname, unsigned long flags); int CONF_modules_load_file(const char *filename, const char *appname, unsigned long flags); void CONF_modules_unload(int all); void CONF_modules_finish(void); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define CONF_modules_free() while(0) continue #endif int CONF_module_add(const char *name, conf_init_func *ifunc, diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h.in new file mode 100644 index 00000000..044b3eb5 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h.in @@ -0,0 +1,177 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros generate_lhash_macros); +-} + +#ifndef OPENSSL_CONF_H +# define OPENSSL_CONF_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_H +# endif + +# include +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + char *section; + char *name; + char *value; +} CONF_VALUE; + +{- + generate_stack_macros("CONF_VALUE") + .generate_lhash_macros("CONF_VALUE"); +-} + +struct conf_st; +struct conf_method_st; +typedef struct conf_method_st CONF_METHOD; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include +# endif + +/* Module definitions */ +typedef struct conf_imodule_st CONF_IMODULE; +typedef struct conf_module_st CONF_MODULE; + +STACK_OF(CONF_MODULE); +STACK_OF(CONF_IMODULE); + +/* DSO module function typedefs */ +typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); +typedef void conf_finish_func (CONF_IMODULE *md); + +# define CONF_MFLAGS_IGNORE_ERRORS 0x1 +# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 +# define CONF_MFLAGS_SILENT 0x4 +# define CONF_MFLAGS_NO_DSO 0x8 +# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 +# define CONF_MFLAGS_DEFAULT_SECTION 0x20 + +int CONF_set_default_method(CONF_METHOD *meth); +void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); +LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, + long *eline); +# ifndef OPENSSL_NO_STDIO +LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, + long *eline); +# endif +LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, + long *eline); +STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, + const char *section); +char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +void CONF_free(LHASH_OF(CONF_VALUE) *conf); +#ifndef OPENSSL_NO_STDIO +int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); +#endif +int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void OPENSSL_config(const char *config_name); +#endif + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OPENSSL_no_config() \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) +#endif + +/* + * New conf code. The semantics are different from the functions above. If + * that wasn't the case, the above functions would have been replaced + */ + +CONF *NCONF_new_ex(OSSL_LIB_CTX *libctx, CONF_METHOD *meth); +OSSL_LIB_CTX *NCONF_get0_libctx(const CONF *conf); +CONF *NCONF_new(CONF_METHOD *meth); +CONF_METHOD *NCONF_default(void); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 CONF_METHOD *NCONF_WIN32(void); +#endif +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf, const char *file, long *eline); +# ifndef OPENSSL_NO_STDIO +int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); +# endif +int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(OPENSSL_CSTRING) *NCONF_get_section_names(const CONF *conf); +STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, + const char *section); +char *NCONF_get_string(const CONF *conf, const char *group, const char *name); +int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, + long *result); +#ifndef OPENSSL_NO_STDIO +int NCONF_dump_fp(const CONF *conf, FILE *out); +#endif +int NCONF_dump_bio(const CONF *conf, BIO *out); + +#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) + +/* Module functions */ + +int CONF_modules_load(const CONF *cnf, const char *appname, + unsigned long flags); +int CONF_modules_load_file_ex(OSSL_LIB_CTX *libctx, const char *filename, + const char *appname, unsigned long flags); +int CONF_modules_load_file(const char *filename, const char *appname, + unsigned long flags); +void CONF_modules_unload(int all); +void CONF_modules_finish(void); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define CONF_modules_free() while(0) continue +#endif +int CONF_module_add(const char *name, conf_init_func *ifunc, + conf_finish_func *ffunc); + +const char *CONF_imodule_get_name(const CONF_IMODULE *md); +const char *CONF_imodule_get_value(const CONF_IMODULE *md); +void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); +void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); +CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); +unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); +void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); +void *CONF_module_get_usr_data(CONF_MODULE *pmod); +void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); + +char *CONF_get1_default_config_file(void); + +int CONF_parse_list(const char *list, int sep, int nospc, + int (*list_cb) (const char *elem, int len, void *usr), + void *arg); + +void OPENSSL_load_builtin_modules(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/conf_api.h b/deps/openssl/android/x86_64/usr/local/include/openssl/conf_api.h index a0275ad7..ed67d577 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/conf_api.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/conf_api.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONF_API_H -# define HEADER_CONF_API_H +#ifndef OPENSSL_CONF_API_H +# define OPENSSL_CONF_API_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CONF_API_H +# endif # include # include diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/conferr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/conferr.h index 32b92291..496e2e1e 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/conferr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/conferr.h @@ -1,57 +1,30 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CONFERR_H -# define HEADER_CONFERR_H +#ifndef OPENSSL_CONFERR_H +# define OPENSSL_CONFERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CONF_strings(void); -/* - * CONF function codes. - */ -# define CONF_F_CONF_DUMP_FP 104 -# define CONF_F_CONF_LOAD 100 -# define CONF_F_CONF_LOAD_FP 103 -# define CONF_F_CONF_PARSE_LIST 119 -# define CONF_F_DEF_LOAD 120 -# define CONF_F_DEF_LOAD_BIO 121 -# define CONF_F_GET_NEXT_FILE 107 -# define CONF_F_MODULE_ADD 122 -# define CONF_F_MODULE_INIT 115 -# define CONF_F_MODULE_LOAD_DSO 117 -# define CONF_F_MODULE_RUN 118 -# define CONF_F_NCONF_DUMP_BIO 105 -# define CONF_F_NCONF_DUMP_FP 106 -# define CONF_F_NCONF_GET_NUMBER_E 112 -# define CONF_F_NCONF_GET_SECTION 108 -# define CONF_F_NCONF_GET_STRING 109 -# define CONF_F_NCONF_LOAD 113 -# define CONF_F_NCONF_LOAD_BIO 110 -# define CONF_F_NCONF_LOAD_FP 114 -# define CONF_F_NCONF_NEW 111 -# define CONF_F_PROCESS_INCLUDE 116 -# define CONF_F_SSL_MODULE_INIT 123 -# define CONF_F_STR_COPY 101 /* * CONF reason codes. */ # define CONF_R_ERROR_LOADING_DSO 110 +# define CONF_R_INVALID_PRAGMA 122 # define CONF_R_LIST_CANNOT_BE_NULL 115 +# define CONF_R_MANDATORY_BRACES_IN_VARIABLE_EXPANSION 123 # define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 # define CONF_R_MISSING_EQUAL_SIGN 101 # define CONF_R_MISSING_INIT_FUNCTION 112 @@ -63,7 +36,9 @@ int ERR_load_CONF_strings(void); # define CONF_R_NO_SUCH_FILE 114 # define CONF_R_NO_VALUE 108 # define CONF_R_NUMBER_TOO_LARGE 121 +# define CONF_R_OPENSSL_CONF_REFERENCES_MISSING_SECTION 124 # define CONF_R_RECURSIVE_DIRECTORY_INCLUDE 111 +# define CONF_R_RELATIVE_PATH 125 # define CONF_R_SSL_COMMAND_SECTION_EMPTY 117 # define CONF_R_SSL_COMMAND_SECTION_NOT_FOUND 118 # define CONF_R_SSL_SECTION_EMPTY 119 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h b/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h new file mode 100644 index 00000000..227149ee --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h @@ -0,0 +1,137 @@ +/* + * WARNING: do not edit! + * Generated by configdata.pm from Configurations/common0.tmpl, Configurations/unix-Makefile.tmpl + * via Makefile.in + * + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFIGURATION_H +# define OPENSSL_CONFIGURATION_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +# ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +# endif + +/* + * OpenSSL was configured with the following options: + */ + +# define OPENSSL_CONFIGURED_API 30100 +# ifndef OPENSSL_RAND_SEED_OS +# define OPENSSL_RAND_SEED_OS +# endif +# ifndef OPENSSL_NO_ACVP_TESTS +# define OPENSSL_NO_ACVP_TESTS +# endif +# ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +# endif +# ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +# endif +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +# endif +# ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# endif +# ifndef OPENSSL_NO_DEVCRYPTOENG +# define OPENSSL_NO_DEVCRYPTOENG +# endif +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +# endif +# ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +# endif +# ifndef OPENSSL_NO_EXTERNAL_TESTS +# define OPENSSL_NO_EXTERNAL_TESTS +# endif +# ifndef OPENSSL_NO_FIPS_SECURITYCHECKS +# define OPENSSL_NO_FIPS_SECURITYCHECKS +# endif +# ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +# endif +# ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +# endif +# ifndef OPENSSL_NO_KTLS +# define OPENSSL_NO_KTLS +# endif +# ifndef OPENSSL_NO_LOADERENG +# define OPENSSL_NO_LOADERENG +# endif +# ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +# endif +# ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +# endif +# ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +# endif +# ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +# endif +# ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +# endif +# ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +# endif +# ifndef OPENSSL_NO_TESTS +# define OPENSSL_NO_TESTS +# endif +# ifndef OPENSSL_NO_TRACE +# define OPENSSL_NO_TRACE +# endif +# ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +# endif +# ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +# endif +# ifndef OPENSSL_NO_UPLINK +# define OPENSSL_NO_UPLINK +# endif +# ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +# endif +# ifndef OPENSSL_NO_DYNAMIC_ENGINE +# define OPENSSL_NO_DYNAMIC_ENGINE +# endif + + +/* Generate 80386 code? */ +# undef I386_ONLY + +/* + * The following are cipher-specific, but are part of the public API. + */ +# if !defined(OPENSSL_SYS_UEFI) +# undef BN_LLONG +/* Only one for the following should be defined */ +# define SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# undef THIRTY_TWO_BIT +# endif + +# define RC4_INT unsigned int + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_CONFIGURATION_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h.in new file mode 100644 index 00000000..b84dc1df --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h.in @@ -0,0 +1,69 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFIGURATION_H +# define OPENSSL_CONFIGURATION_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +# ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +# endif + +/* + * OpenSSL was configured with the following options: + */ + +{- if (@{$config{openssl_sys_defines}}) { + foreach (@{$config{openssl_sys_defines}}) { + $OUT .= "# ifndef $_\n"; + $OUT .= "# define $_ 1\n"; + $OUT .= "# endif\n"; + } + } + foreach (@{$config{openssl_api_defines}}) { + (my $macro, my $value) = $_ =~ /^(.*?)=(.*?)$/; + $OUT .= "# define $macro $value\n"; + } + if (@{$config{openssl_feature_defines}}) { + foreach (@{$config{openssl_feature_defines}}) { + $OUT .= "# ifndef $_\n"; + $OUT .= "# define $_\n"; + $OUT .= "# endif\n"; + } + } + ""; +-} + +/* Generate 80386 code? */ +{- $config{processor} eq "386" ? "# define" : "# undef" -} I386_ONLY + +/* + * The following are cipher-specific, but are part of the public API. + */ +# if !defined(OPENSSL_SYS_UEFI) +{- $config{bn_ll} ? "# define" : "# undef" -} BN_LLONG +/* Only one for the following should be defined */ +{- $config{b64l} ? "# define" : "# undef" -} SIXTY_FOUR_BIT_LONG +{- $config{b64} ? "# define" : "# undef" -} SIXTY_FOUR_BIT +{- $config{b32} ? "# define" : "# undef" -} THIRTY_TWO_BIT +# endif + +# define RC4_INT {- $config{rc4_int} -} + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_CONFIGURATION_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/conftypes.h b/deps/openssl/android/x86_64/usr/local/include/openssl/conftypes.h new file mode 100644 index 00000000..17cefaa4 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/conftypes.h @@ -0,0 +1,44 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CONFTYPES_H +# define OPENSSL_CONFTYPES_H +# pragma once + +#ifndef OPENSSL_CONF_H +# include +#endif + +/* + * The contents of this file are deprecated and will be made opaque + */ +struct conf_method_st { + const char *name; + CONF *(*create) (CONF_METHOD *meth); + int (*init) (CONF *conf); + int (*destroy) (CONF *conf); + int (*destroy_data) (CONF *conf); + int (*load_bio) (CONF *conf, BIO *bp, long *eline); + int (*dump) (const CONF *conf, BIO *bp); + int (*is_number) (const CONF *conf, char c); + int (*to_int) (const CONF *conf, char c); + int (*load) (CONF *conf, const char *name, long *eline); +}; + +struct conf_st { + CONF_METHOD *meth; + void *meth_data; + LHASH_OF(CONF_VALUE) *data; + int flag_dollarid; + int flag_abspath; + char *includedir; + OSSL_LIB_CTX *libctx; +}; + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/core.h b/deps/openssl/android/x86_64/usr/local/include/openssl/core.h new file mode 100644 index 00000000..9683ac70 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/core.h @@ -0,0 +1,233 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_H +# define OPENSSL_CORE_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Base types + * ---------- + * + * These are the types that the OpenSSL core and providers have in common + * to communicate data between them. + */ + +/* Opaque handles to be used with core upcall functions from providers */ +typedef struct ossl_core_handle_st OSSL_CORE_HANDLE; +typedef struct openssl_core_ctx_st OPENSSL_CORE_CTX; +typedef struct ossl_core_bio_st OSSL_CORE_BIO; + +/* + * Dispatch table element. function_id numbers and the functions are defined + * in core_dispatch.h, see macros with 'OSSL_CORE_MAKE_FUNC' in their names. + * + * An array of these is always terminated by function_id == 0 + */ +struct ossl_dispatch_st { + int function_id; + void (*function)(void); +}; + +/* + * Other items, essentially an int<->pointer map element. + * + * We make this type distinct from OSSL_DISPATCH to ensure that dispatch + * tables remain tables with function pointers only. + * + * This is used whenever we need to pass things like a table of error reason + * codes <-> reason string maps, ... + * + * Usage determines which field works as key if any, rather than field order. + * + * An array of these is always terminated by id == 0 && ptr == NULL + */ +struct ossl_item_st { + unsigned int id; + void *ptr; +}; + +/* + * Type to tie together algorithm names, property definition string and + * the algorithm implementation in the form of a dispatch table. + * + * An array of these is always terminated by algorithm_names == NULL + */ +struct ossl_algorithm_st { + const char *algorithm_names; /* key */ + const char *property_definition; /* key */ + const OSSL_DISPATCH *implementation; + const char *algorithm_description; +}; + +/* + * Type to pass object data in a uniform way, without exposing the object + * structure. + * + * An array of these is always terminated by key == NULL + */ +struct ossl_param_st { + const char *key; /* the name of the parameter */ + unsigned int data_type; /* declare what kind of content is in buffer */ + void *data; /* value being passed in or out */ + size_t data_size; /* data size */ + size_t return_size; /* returned content size */ +}; + +/* Currently supported OSSL_PARAM data types */ +/* + * OSSL_PARAM_INTEGER and OSSL_PARAM_UNSIGNED_INTEGER + * are arbitrary length and therefore require an arbitrarily sized buffer, + * since they may be used to pass numbers larger than what is natively + * available. + * + * The number must be buffered in native form, i.e. MSB first on B_ENDIAN + * systems and LSB first on L_ENDIAN systems. This means that arbitrary + * native integers can be stored in the buffer, just make sure that the + * buffer size is correct and the buffer itself is properly aligned (for + * example by having the buffer field point at a C integer). + */ +# define OSSL_PARAM_INTEGER 1 +# define OSSL_PARAM_UNSIGNED_INTEGER 2 +/*- + * OSSL_PARAM_REAL + * is a C binary floating point values in native form and alignment. + */ +# define OSSL_PARAM_REAL 3 +/*- + * OSSL_PARAM_UTF8_STRING + * is a printable string. It is expected to be printed as it is. + */ +# define OSSL_PARAM_UTF8_STRING 4 +/*- + * OSSL_PARAM_OCTET_STRING + * is a string of bytes with no further specification. It is expected to be + * printed as a hexdump. + */ +# define OSSL_PARAM_OCTET_STRING 5 +/*- + * OSSL_PARAM_UTF8_PTR + * is a pointer to a printable string. It is expected to be printed as it is. + * + * The difference between this and OSSL_PARAM_UTF8_STRING is that only pointers + * are manipulated for this type. + * + * This is more relevant for parameter requests, where the responding + * function doesn't need to copy the data to the provided buffer, but + * sets the provided buffer to point at the actual data instead. + * + * WARNING! Using these is FRAGILE, as it assumes that the actual + * data and its location are constant. + * + * EXTRA WARNING! If you are not completely sure you most likely want + * to use the OSSL_PARAM_UTF8_STRING type. + */ +# define OSSL_PARAM_UTF8_PTR 6 +/*- + * OSSL_PARAM_OCTET_PTR + * is a pointer to a string of bytes with no further specification. It is + * expected to be printed as a hexdump. + * + * The difference between this and OSSL_PARAM_OCTET_STRING is that only pointers + * are manipulated for this type. + * + * This is more relevant for parameter requests, where the responding + * function doesn't need to copy the data to the provided buffer, but + * sets the provided buffer to point at the actual data instead. + * + * WARNING! Using these is FRAGILE, as it assumes that the actual + * data and its location are constant. + * + * EXTRA WARNING! If you are not completely sure you most likely want + * to use the OSSL_PARAM_OCTET_STRING type. + */ +# define OSSL_PARAM_OCTET_PTR 7 + +/* + * Typedef for the thread stop handling callback. Used both internally and by + * providers. + * + * Providers may register for notifications about threads stopping by + * registering a callback to hear about such events. Providers register the + * callback using the OSSL_FUNC_CORE_THREAD_START function in the |in| dispatch + * table passed to OSSL_provider_init(). The arg passed back to a provider will + * be the provider side context object. + */ +typedef void (*OSSL_thread_stop_handler_fn)(void *arg); + + +/*- + * Provider entry point + * -------------------- + * + * This function is expected to be present in any dynamically loadable + * provider module. By definition, if this function doesn't exist in a + * module, that module is not an OpenSSL provider module. + */ +/*- + * |handle| pointer to opaque type OSSL_CORE_HANDLE. This can be used + * together with some functions passed via |in| to query data. + * |in| is the array of functions that the Core passes to the provider. + * |out| will be the array of base functions that the provider passes + * back to the Core. + * |provctx| a provider side context object, optionally created if the + * provider needs it. This value is passed to other provider + * functions, notably other context constructors. + */ +typedef int (OSSL_provider_init_fn)(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in, + const OSSL_DISPATCH **out, + void **provctx); +# ifdef __VMS +# pragma names save +# pragma names uppercase,truncated +# endif +OPENSSL_EXPORT OSSL_provider_init_fn OSSL_provider_init; +# ifdef __VMS +# pragma names restore +# endif + +/* + * Generic callback function signature. + * + * The expectation is that any provider function that wants to offer + * a callback / hook can do so by taking an argument with this type, + * as well as a pointer to caller-specific data. When calling the + * callback, the provider function can populate an OSSL_PARAM array + * with data of its choice and pass that in the callback call, along + * with the caller data argument. + * + * libcrypto may use the OSSL_PARAM array to create arguments for an + * application callback it knows about. + */ +typedef int (OSSL_CALLBACK)(const OSSL_PARAM params[], void *arg); +typedef int (OSSL_INOUT_CALLBACK)(const OSSL_PARAM in_params[], + OSSL_PARAM out_params[], void *arg); +/* + * Passphrase callback function signature + * + * This is similar to the generic callback function above, but adds a + * result parameter. + */ +typedef int (OSSL_PASSPHRASE_CALLBACK)(char *pass, size_t pass_size, + size_t *pass_len, + const OSSL_PARAM params[], void *arg); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/core_dispatch.h b/deps/openssl/android/x86_64/usr/local/include/openssl/core_dispatch.h new file mode 100644 index 00000000..11e3c861 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/core_dispatch.h @@ -0,0 +1,943 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_NUMBERS_H +# define OPENSSL_CORE_NUMBERS_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Identities + * ---------- + * + * All series start with 1, to allow 0 to be an array terminator. + * For any FUNC identity, we also provide a function signature typedef + * and a static inline function to extract a function pointer from a + * OSSL_DISPATCH element in a type safe manner. + * + * Names: + * for any function base name 'foo' (uppercase form 'FOO'), we will have + * the following: + * - a macro for the identity with the name OSSL_FUNC_'FOO' or derivatives + * thereof (to be specified further down) + * - a function signature typedef with the name OSSL_FUNC_'foo'_fn + * - a function pointer extractor function with the name OSSL_FUNC_'foo' + */ + +/* + * Helper macro to create the function signature typedef and the extractor + * |type| is the return-type of the function, |name| is the name of the + * function to fetch, and |args| is a parenthesized list of parameters + * for the function (that is, it is |name|'s function signature). + * Note: This is considered a "reserved" internal macro. Applications should + * not use this or assume its existence. + */ +#define OSSL_CORE_MAKE_FUNC(type,name,args) \ + typedef type (OSSL_FUNC_##name##_fn)args; \ + static ossl_unused ossl_inline \ + OSSL_FUNC_##name##_fn *OSSL_FUNC_##name(const OSSL_DISPATCH *opf) \ + { \ + return (OSSL_FUNC_##name##_fn *)opf->function; \ + } + +/* + * Core function identities, for the two OSSL_DISPATCH tables being passed + * in the OSSL_provider_init call. + * + * 0 serves as a marker for the end of the OSSL_DISPATCH array, and must + * therefore NEVER be used as a function identity. + */ +/* Functions provided by the Core to the provider, reserved numbers 1-1023 */ +# define OSSL_FUNC_CORE_GETTABLE_PARAMS 1 +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + core_gettable_params,(const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_GET_PARAMS 2 +OSSL_CORE_MAKE_FUNC(int,core_get_params,(const OSSL_CORE_HANDLE *prov, + OSSL_PARAM params[])) +# define OSSL_FUNC_CORE_THREAD_START 3 +OSSL_CORE_MAKE_FUNC(int,core_thread_start,(const OSSL_CORE_HANDLE *prov, + OSSL_thread_stop_handler_fn handfn, + void *arg)) +# define OSSL_FUNC_CORE_GET_LIBCTX 4 +OSSL_CORE_MAKE_FUNC(OPENSSL_CORE_CTX *,core_get_libctx, + (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_NEW_ERROR 5 +OSSL_CORE_MAKE_FUNC(void,core_new_error,(const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_SET_ERROR_DEBUG 6 +OSSL_CORE_MAKE_FUNC(void,core_set_error_debug, + (const OSSL_CORE_HANDLE *prov, + const char *file, int line, const char *func)) +# define OSSL_FUNC_CORE_VSET_ERROR 7 +OSSL_CORE_MAKE_FUNC(void,core_vset_error, + (const OSSL_CORE_HANDLE *prov, + uint32_t reason, const char *fmt, va_list args)) +# define OSSL_FUNC_CORE_SET_ERROR_MARK 8 +OSSL_CORE_MAKE_FUNC(int, core_set_error_mark, (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK 9 +OSSL_CORE_MAKE_FUNC(int, core_clear_last_error_mark, + (const OSSL_CORE_HANDLE *prov)) +# define OSSL_FUNC_CORE_POP_ERROR_TO_MARK 10 +OSSL_CORE_MAKE_FUNC(int, core_pop_error_to_mark, (const OSSL_CORE_HANDLE *prov)) + + +/* Functions to access the OBJ database */ + +#define OSSL_FUNC_CORE_OBJ_ADD_SIGID 11 +#define OSSL_FUNC_CORE_OBJ_CREATE 12 + +OSSL_CORE_MAKE_FUNC(int, core_obj_add_sigid, + (const OSSL_CORE_HANDLE *prov, const char *sign_name, + const char *digest_name, const char *pkey_name)) +OSSL_CORE_MAKE_FUNC(int, core_obj_create, + (const OSSL_CORE_HANDLE *prov, const char *oid, + const char *sn, const char *ln)) + +/* Memory allocation, freeing, clearing. */ +#define OSSL_FUNC_CRYPTO_MALLOC 20 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_malloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_ZALLOC 21 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_zalloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_FREE 22 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_free, (void *ptr, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_CLEAR_FREE 23 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_clear_free, (void *ptr, size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_REALLOC 24 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_realloc, (void *addr, size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_CLEAR_REALLOC 25 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_clear_realloc, (void *addr, size_t old_num, size_t num, + const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_MALLOC 26 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_secure_malloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_ZALLOC 27 +OSSL_CORE_MAKE_FUNC(void *, + CRYPTO_secure_zalloc, (size_t num, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_FREE 28 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_secure_free, (void *ptr, const char *file, int line)) +#define OSSL_FUNC_CRYPTO_SECURE_CLEAR_FREE 29 +OSSL_CORE_MAKE_FUNC(void, + CRYPTO_secure_clear_free, (void *ptr, size_t num, const char *file, + int line)) +#define OSSL_FUNC_CRYPTO_SECURE_ALLOCATED 30 +OSSL_CORE_MAKE_FUNC(int, + CRYPTO_secure_allocated, (const void *ptr)) +#define OSSL_FUNC_OPENSSL_CLEANSE 31 +OSSL_CORE_MAKE_FUNC(void, + OPENSSL_cleanse, (void *ptr, size_t len)) + +/* Bio functions provided by the core */ +#define OSSL_FUNC_BIO_NEW_FILE 40 +#define OSSL_FUNC_BIO_NEW_MEMBUF 41 +#define OSSL_FUNC_BIO_READ_EX 42 +#define OSSL_FUNC_BIO_WRITE_EX 43 +#define OSSL_FUNC_BIO_UP_REF 44 +#define OSSL_FUNC_BIO_FREE 45 +#define OSSL_FUNC_BIO_VPRINTF 46 +#define OSSL_FUNC_BIO_VSNPRINTF 47 +#define OSSL_FUNC_BIO_PUTS 48 +#define OSSL_FUNC_BIO_GETS 49 +#define OSSL_FUNC_BIO_CTRL 50 + + +OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_file, (const char *filename, + const char *mode)) +OSSL_CORE_MAKE_FUNC(OSSL_CORE_BIO *, BIO_new_membuf, (const void *buf, int len)) +OSSL_CORE_MAKE_FUNC(int, BIO_read_ex, (OSSL_CORE_BIO *bio, void *data, + size_t data_len, size_t *bytes_read)) +OSSL_CORE_MAKE_FUNC(int, BIO_write_ex, (OSSL_CORE_BIO *bio, const void *data, + size_t data_len, size_t *written)) +OSSL_CORE_MAKE_FUNC(int, BIO_gets, (OSSL_CORE_BIO *bio, char *buf, int size)) +OSSL_CORE_MAKE_FUNC(int, BIO_puts, (OSSL_CORE_BIO *bio, const char *str)) +OSSL_CORE_MAKE_FUNC(int, BIO_up_ref, (OSSL_CORE_BIO *bio)) +OSSL_CORE_MAKE_FUNC(int, BIO_free, (OSSL_CORE_BIO *bio)) +OSSL_CORE_MAKE_FUNC(int, BIO_vprintf, (OSSL_CORE_BIO *bio, const char *format, + va_list args)) +OSSL_CORE_MAKE_FUNC(int, BIO_vsnprintf, + (char *buf, size_t n, const char *fmt, va_list args)) +OSSL_CORE_MAKE_FUNC(int, BIO_ctrl, (OSSL_CORE_BIO *bio, + int cmd, long num, void *ptr)) + +#define OSSL_FUNC_SELF_TEST_CB 100 +OSSL_CORE_MAKE_FUNC(void, self_test_cb, (OPENSSL_CORE_CTX *ctx, OSSL_CALLBACK **cb, + void **cbarg)) + +/* Functions to get seed material from the operating system */ +#define OSSL_FUNC_GET_ENTROPY 101 +#define OSSL_FUNC_CLEANUP_ENTROPY 102 +#define OSSL_FUNC_GET_NONCE 103 +#define OSSL_FUNC_CLEANUP_NONCE 104 +OSSL_CORE_MAKE_FUNC(size_t, get_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, int entropy, + size_t min_len, size_t max_len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_entropy, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) +OSSL_CORE_MAKE_FUNC(size_t, get_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char **pout, size_t min_len, + size_t max_len, const void *salt, + size_t salt_len)) +OSSL_CORE_MAKE_FUNC(void, cleanup_nonce, (const OSSL_CORE_HANDLE *handle, + unsigned char *buf, size_t len)) + +/* Functions to access the core's providers */ +#define OSSL_FUNC_PROVIDER_REGISTER_CHILD_CB 105 +#define OSSL_FUNC_PROVIDER_DEREGISTER_CHILD_CB 106 +#define OSSL_FUNC_PROVIDER_NAME 107 +#define OSSL_FUNC_PROVIDER_GET0_PROVIDER_CTX 108 +#define OSSL_FUNC_PROVIDER_GET0_DISPATCH 109 +#define OSSL_FUNC_PROVIDER_UP_REF 110 +#define OSSL_FUNC_PROVIDER_FREE 111 + +OSSL_CORE_MAKE_FUNC(int, provider_register_child_cb, + (const OSSL_CORE_HANDLE *handle, + int (*create_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata), + int (*remove_cb)(const OSSL_CORE_HANDLE *provider, void *cbdata), + int (*global_props_cb)(const char *props, void *cbdata), + void *cbdata)) +OSSL_CORE_MAKE_FUNC(void, provider_deregister_child_cb, + (const OSSL_CORE_HANDLE *handle)) +OSSL_CORE_MAKE_FUNC(const char *, provider_name, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(void *, provider_get0_provider_ctx, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(const OSSL_DISPATCH *, provider_get0_dispatch, + (const OSSL_CORE_HANDLE *prov)) +OSSL_CORE_MAKE_FUNC(int, provider_up_ref, + (const OSSL_CORE_HANDLE *prov, int activate)) +OSSL_CORE_MAKE_FUNC(int, provider_free, + (const OSSL_CORE_HANDLE *prov, int deactivate)) + +/* Functions provided by the provider to the Core, reserved numbers 1024-1535 */ +# define OSSL_FUNC_PROVIDER_TEARDOWN 1024 +OSSL_CORE_MAKE_FUNC(void,provider_teardown,(void *provctx)) +# define OSSL_FUNC_PROVIDER_GETTABLE_PARAMS 1025 +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + provider_gettable_params,(void *provctx)) +# define OSSL_FUNC_PROVIDER_GET_PARAMS 1026 +OSSL_CORE_MAKE_FUNC(int,provider_get_params,(void *provctx, + OSSL_PARAM params[])) +# define OSSL_FUNC_PROVIDER_QUERY_OPERATION 1027 +OSSL_CORE_MAKE_FUNC(const OSSL_ALGORITHM *,provider_query_operation, + (void *provctx, int operation_id, int *no_store)) +# define OSSL_FUNC_PROVIDER_UNQUERY_OPERATION 1028 +OSSL_CORE_MAKE_FUNC(void, provider_unquery_operation, + (void *provctx, int operation_id, const OSSL_ALGORITHM *)) +# define OSSL_FUNC_PROVIDER_GET_REASON_STRINGS 1029 +OSSL_CORE_MAKE_FUNC(const OSSL_ITEM *,provider_get_reason_strings, + (void *provctx)) +# define OSSL_FUNC_PROVIDER_GET_CAPABILITIES 1030 +OSSL_CORE_MAKE_FUNC(int, provider_get_capabilities, (void *provctx, + const char *capability, OSSL_CALLBACK *cb, void *arg)) +# define OSSL_FUNC_PROVIDER_SELF_TEST 1031 +OSSL_CORE_MAKE_FUNC(int, provider_self_test, (void *provctx)) + +/* Operations */ + +# define OSSL_OP_DIGEST 1 +# define OSSL_OP_CIPHER 2 /* Symmetric Ciphers */ +# define OSSL_OP_MAC 3 +# define OSSL_OP_KDF 4 +# define OSSL_OP_RAND 5 +# define OSSL_OP_KEYMGMT 10 +# define OSSL_OP_KEYEXCH 11 +# define OSSL_OP_SIGNATURE 12 +# define OSSL_OP_ASYM_CIPHER 13 +# define OSSL_OP_KEM 14 +/* New section for non-EVP operations */ +# define OSSL_OP_ENCODER 20 +# define OSSL_OP_DECODER 21 +# define OSSL_OP_STORE 22 +/* Highest known operation number */ +# define OSSL_OP__HIGHEST 22 + +/* Digests */ + +# define OSSL_FUNC_DIGEST_NEWCTX 1 +# define OSSL_FUNC_DIGEST_INIT 2 +# define OSSL_FUNC_DIGEST_UPDATE 3 +# define OSSL_FUNC_DIGEST_FINAL 4 +# define OSSL_FUNC_DIGEST_DIGEST 5 +# define OSSL_FUNC_DIGEST_FREECTX 6 +# define OSSL_FUNC_DIGEST_DUPCTX 7 +# define OSSL_FUNC_DIGEST_GET_PARAMS 8 +# define OSSL_FUNC_DIGEST_SET_CTX_PARAMS 9 +# define OSSL_FUNC_DIGEST_GET_CTX_PARAMS 10 +# define OSSL_FUNC_DIGEST_GETTABLE_PARAMS 11 +# define OSSL_FUNC_DIGEST_SETTABLE_CTX_PARAMS 12 +# define OSSL_FUNC_DIGEST_GETTABLE_CTX_PARAMS 13 + +OSSL_CORE_MAKE_FUNC(void *, digest_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, digest_init, (void *dctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_update, + (void *dctx, const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, digest_final, + (void *dctx, + unsigned char *out, size_t *outl, size_t outsz)) +OSSL_CORE_MAKE_FUNC(int, digest_digest, + (void *provctx, const unsigned char *in, size_t inl, + unsigned char *out, size_t *outl, size_t outsz)) + +OSSL_CORE_MAKE_FUNC(void, digest_freectx, (void *dctx)) +OSSL_CORE_MAKE_FUNC(void *, digest_dupctx, (void *dctx)) + +OSSL_CORE_MAKE_FUNC(int, digest_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_set_ctx_params, + (void *vctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, digest_get_ctx_params, + (void *vctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_settable_ctx_params, + (void *dctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, digest_gettable_ctx_params, + (void *dctx, void *provctx)) + +/* Symmetric Ciphers */ + +# define OSSL_FUNC_CIPHER_NEWCTX 1 +# define OSSL_FUNC_CIPHER_ENCRYPT_INIT 2 +# define OSSL_FUNC_CIPHER_DECRYPT_INIT 3 +# define OSSL_FUNC_CIPHER_UPDATE 4 +# define OSSL_FUNC_CIPHER_FINAL 5 +# define OSSL_FUNC_CIPHER_CIPHER 6 +# define OSSL_FUNC_CIPHER_FREECTX 7 +# define OSSL_FUNC_CIPHER_DUPCTX 8 +# define OSSL_FUNC_CIPHER_GET_PARAMS 9 +# define OSSL_FUNC_CIPHER_GET_CTX_PARAMS 10 +# define OSSL_FUNC_CIPHER_SET_CTX_PARAMS 11 +# define OSSL_FUNC_CIPHER_GETTABLE_PARAMS 12 +# define OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS 13 +# define OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS 14 + +OSSL_CORE_MAKE_FUNC(void *, cipher_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, cipher_encrypt_init, (void *cctx, + const unsigned char *key, + size_t keylen, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_decrypt_init, (void *cctx, + const unsigned char *key, + size_t keylen, + const unsigned char *iv, + size_t ivlen, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_update, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize, + const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, cipher_final, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize)) +OSSL_CORE_MAKE_FUNC(int, cipher_cipher, + (void *cctx, + unsigned char *out, size_t *outl, size_t outsize, + const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(void, cipher_freectx, (void *cctx)) +OSSL_CORE_MAKE_FUNC(void *, cipher_dupctx, (void *cctx)) +OSSL_CORE_MAKE_FUNC(int, cipher_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_get_ctx_params, (void *cctx, + OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, cipher_set_ctx_params, (void *cctx, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_settable_ctx_params, + (void *cctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, cipher_gettable_ctx_params, + (void *cctx, void *provctx)) + +/* MACs */ + +# define OSSL_FUNC_MAC_NEWCTX 1 +# define OSSL_FUNC_MAC_DUPCTX 2 +# define OSSL_FUNC_MAC_FREECTX 3 +# define OSSL_FUNC_MAC_INIT 4 +# define OSSL_FUNC_MAC_UPDATE 5 +# define OSSL_FUNC_MAC_FINAL 6 +# define OSSL_FUNC_MAC_GET_PARAMS 7 +# define OSSL_FUNC_MAC_GET_CTX_PARAMS 8 +# define OSSL_FUNC_MAC_SET_CTX_PARAMS 9 +# define OSSL_FUNC_MAC_GETTABLE_PARAMS 10 +# define OSSL_FUNC_MAC_GETTABLE_CTX_PARAMS 11 +# define OSSL_FUNC_MAC_SETTABLE_CTX_PARAMS 12 + +OSSL_CORE_MAKE_FUNC(void *, mac_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, mac_dupctx, (void *src)) +OSSL_CORE_MAKE_FUNC(void, mac_freectx, (void *mctx)) +OSSL_CORE_MAKE_FUNC(int, mac_init, (void *mctx, const unsigned char *key, + size_t keylen, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_update, + (void *mctx, const unsigned char *in, size_t inl)) +OSSL_CORE_MAKE_FUNC(int, mac_final, + (void *mctx, + unsigned char *out, size_t *outl, size_t outsize)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_gettable_ctx_params, + (void *mctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, mac_settable_ctx_params, + (void *mctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, mac_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_get_ctx_params, + (void *mctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, mac_set_ctx_params, + (void *mctx, const OSSL_PARAM params[])) + +/* KDFs and PRFs */ + +# define OSSL_FUNC_KDF_NEWCTX 1 +# define OSSL_FUNC_KDF_DUPCTX 2 +# define OSSL_FUNC_KDF_FREECTX 3 +# define OSSL_FUNC_KDF_RESET 4 +# define OSSL_FUNC_KDF_DERIVE 5 +# define OSSL_FUNC_KDF_GETTABLE_PARAMS 6 +# define OSSL_FUNC_KDF_GETTABLE_CTX_PARAMS 7 +# define OSSL_FUNC_KDF_SETTABLE_CTX_PARAMS 8 +# define OSSL_FUNC_KDF_GET_PARAMS 9 +# define OSSL_FUNC_KDF_GET_CTX_PARAMS 10 +# define OSSL_FUNC_KDF_SET_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, kdf_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, kdf_dupctx, (void *src)) +OSSL_CORE_MAKE_FUNC(void, kdf_freectx, (void *kctx)) +OSSL_CORE_MAKE_FUNC(void, kdf_reset, (void *kctx)) +OSSL_CORE_MAKE_FUNC(int, kdf_derive, (void *kctx, unsigned char *key, + size_t keylen, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_gettable_ctx_params, + (void *kctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kdf_settable_ctx_params, + (void *kctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kdf_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kdf_get_ctx_params, + (void *kctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kdf_set_ctx_params, + (void *kctx, const OSSL_PARAM params[])) + +/* RAND */ + +# define OSSL_FUNC_RAND_NEWCTX 1 +# define OSSL_FUNC_RAND_FREECTX 2 +# define OSSL_FUNC_RAND_INSTANTIATE 3 +# define OSSL_FUNC_RAND_UNINSTANTIATE 4 +# define OSSL_FUNC_RAND_GENERATE 5 +# define OSSL_FUNC_RAND_RESEED 6 +# define OSSL_FUNC_RAND_NONCE 7 +# define OSSL_FUNC_RAND_ENABLE_LOCKING 8 +# define OSSL_FUNC_RAND_LOCK 9 +# define OSSL_FUNC_RAND_UNLOCK 10 +# define OSSL_FUNC_RAND_GETTABLE_PARAMS 11 +# define OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS 12 +# define OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS 13 +# define OSSL_FUNC_RAND_GET_PARAMS 14 +# define OSSL_FUNC_RAND_GET_CTX_PARAMS 15 +# define OSSL_FUNC_RAND_SET_CTX_PARAMS 16 +# define OSSL_FUNC_RAND_VERIFY_ZEROIZATION 17 +# define OSSL_FUNC_RAND_GET_SEED 18 +# define OSSL_FUNC_RAND_CLEAR_SEED 19 + +OSSL_CORE_MAKE_FUNC(void *,rand_newctx, + (void *provctx, void *parent, + const OSSL_DISPATCH *parent_calls)) +OSSL_CORE_MAKE_FUNC(void,rand_freectx, (void *vctx)) +OSSL_CORE_MAKE_FUNC(int,rand_instantiate, + (void *vdrbg, unsigned int strength, + int prediction_resistance, + const unsigned char *pstr, size_t pstr_len, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_uninstantiate, (void *vdrbg)) +OSSL_CORE_MAKE_FUNC(int,rand_generate, + (void *vctx, unsigned char *out, size_t outlen, + unsigned int strength, int prediction_resistance, + const unsigned char *addin, size_t addin_len)) +OSSL_CORE_MAKE_FUNC(int,rand_reseed, + (void *vctx, int prediction_resistance, + const unsigned char *ent, size_t ent_len, + const unsigned char *addin, size_t addin_len)) +OSSL_CORE_MAKE_FUNC(size_t,rand_nonce, + (void *vctx, unsigned char *out, unsigned int strength, + size_t min_noncelen, size_t max_noncelen)) +OSSL_CORE_MAKE_FUNC(int,rand_enable_locking, (void *vctx)) +OSSL_CORE_MAKE_FUNC(int,rand_lock, (void *vctx)) +OSSL_CORE_MAKE_FUNC(void,rand_unlock, (void *vctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_params, (void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_gettable_ctx_params, + (void *vctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *,rand_settable_ctx_params, + (void *vctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int,rand_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_get_ctx_params, + (void *vctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int,rand_set_ctx_params, + (void *vctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(void,rand_set_callbacks, + (void *vctx, OSSL_INOUT_CALLBACK *get_entropy, + OSSL_CALLBACK *cleanup_entropy, + OSSL_INOUT_CALLBACK *get_nonce, + OSSL_CALLBACK *cleanup_nonce, void *arg)) +OSSL_CORE_MAKE_FUNC(int,rand_verify_zeroization, + (void *vctx)) +OSSL_CORE_MAKE_FUNC(size_t,rand_get_seed, + (void *vctx, unsigned char **buffer, + int entropy, size_t min_len, size_t max_len, + int prediction_resistance, + const unsigned char *adin, size_t adin_len)) +OSSL_CORE_MAKE_FUNC(void,rand_clear_seed, + (void *vctx, unsigned char *buffer, size_t b_len)) + +/*- + * Key management + * + * The Key Management takes care of provider side key objects, and includes + * all current functionality to create them, destroy them, set parameters + * and key material, etc, essentially everything that manipulates the keys + * themselves and their parameters. + * + * The key objects are commonly referred to as |keydata|, and it MUST be able + * to contain parameters if the key has any, the public key and the private + * key. All parts are optional, but their presence determines what can be + * done with the key object in terms of encryption, signature, and so on. + * The assumption from libcrypto is that the key object contains any of the + * following data combinations: + * + * - parameters only + * - public key only + * - public key + private key + * - parameters + public key + * - parameters + public key + private key + * + * What "parameters", "public key" and "private key" means in detail is left + * to the implementation. In the case of DH and DSA, they would typically + * include domain parameters, while for certain variants of RSA, they would + * typically include PSS or OAEP parameters. + * + * Key objects are created with OSSL_FUNC_keymgmt_new() and destroyed with + * OSSL_FUNC_keymgmt_free(). Key objects can have data filled in with + * OSSL_FUNC_keymgmt_import(). + * + * Three functions are made available to check what selection of data is + * present in a key object: OSSL_FUNC_keymgmt_has_parameters(), + * OSSL_FUNC_keymgmt_has_public_key(), and OSSL_FUNC_keymgmt_has_private_key(), + */ + +/* Key data subset selection - individual bits */ +# define OSSL_KEYMGMT_SELECT_PRIVATE_KEY 0x01 +# define OSSL_KEYMGMT_SELECT_PUBLIC_KEY 0x02 +# define OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS 0x04 +# define OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS 0x80 + +/* Key data subset selection - combinations */ +# define OSSL_KEYMGMT_SELECT_ALL_PARAMETERS \ + ( OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS \ + | OSSL_KEYMGMT_SELECT_OTHER_PARAMETERS) +# define OSSL_KEYMGMT_SELECT_KEYPAIR \ + ( OSSL_KEYMGMT_SELECT_PRIVATE_KEY | OSSL_KEYMGMT_SELECT_PUBLIC_KEY ) +# define OSSL_KEYMGMT_SELECT_ALL \ + ( OSSL_KEYMGMT_SELECT_KEYPAIR | OSSL_KEYMGMT_SELECT_ALL_PARAMETERS ) + +# define OSSL_KEYMGMT_VALIDATE_FULL_CHECK 0 +# define OSSL_KEYMGMT_VALIDATE_QUICK_CHECK 1 + +/* Basic key object creation */ +# define OSSL_FUNC_KEYMGMT_NEW 1 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_new, (void *provctx)) + +/* Generation, a more complex constructor */ +# define OSSL_FUNC_KEYMGMT_GEN_INIT 2 +# define OSSL_FUNC_KEYMGMT_GEN_SET_TEMPLATE 3 +# define OSSL_FUNC_KEYMGMT_GEN_SET_PARAMS 4 +# define OSSL_FUNC_KEYMGMT_GEN_SETTABLE_PARAMS 5 +# define OSSL_FUNC_KEYMGMT_GEN 6 +# define OSSL_FUNC_KEYMGMT_GEN_CLEANUP 7 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen_init, + (void *provctx, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_template, + (void *genctx, void *templ)) +OSSL_CORE_MAKE_FUNC(int, keymgmt_gen_set_params, + (void *genctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, + keymgmt_gen_settable_params, + (void *genctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(void *, keymgmt_gen, + (void *genctx, OSSL_CALLBACK *cb, void *cbarg)) +OSSL_CORE_MAKE_FUNC(void, keymgmt_gen_cleanup, (void *genctx)) + +/* Key loading by object reference */ +# define OSSL_FUNC_KEYMGMT_LOAD 8 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_load, + (const void *reference, size_t reference_sz)) + +/* Basic key object destruction */ +# define OSSL_FUNC_KEYMGMT_FREE 10 +OSSL_CORE_MAKE_FUNC(void, keymgmt_free, (void *keydata)) + +/* Key object information, with discovery */ +#define OSSL_FUNC_KEYMGMT_GET_PARAMS 11 +#define OSSL_FUNC_KEYMGMT_GETTABLE_PARAMS 12 +OSSL_CORE_MAKE_FUNC(int, keymgmt_get_params, + (void *keydata, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_gettable_params, + (void *provctx)) + +#define OSSL_FUNC_KEYMGMT_SET_PARAMS 13 +#define OSSL_FUNC_KEYMGMT_SETTABLE_PARAMS 14 +OSSL_CORE_MAKE_FUNC(int, keymgmt_set_params, + (void *keydata, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_settable_params, + (void *provctx)) + +/* Key checks - discovery of supported operations */ +# define OSSL_FUNC_KEYMGMT_QUERY_OPERATION_NAME 20 +OSSL_CORE_MAKE_FUNC(const char *, keymgmt_query_operation_name, + (int operation_id)) + +/* Key checks - key data content checks */ +# define OSSL_FUNC_KEYMGMT_HAS 21 +OSSL_CORE_MAKE_FUNC(int, keymgmt_has, (const void *keydata, int selection)) + +/* Key checks - validation */ +# define OSSL_FUNC_KEYMGMT_VALIDATE 22 +OSSL_CORE_MAKE_FUNC(int, keymgmt_validate, (const void *keydata, int selection, + int checktype)) + +/* Key checks - matching */ +# define OSSL_FUNC_KEYMGMT_MATCH 23 +OSSL_CORE_MAKE_FUNC(int, keymgmt_match, + (const void *keydata1, const void *keydata2, + int selection)) + +/* Import and export functions, with discovery */ +# define OSSL_FUNC_KEYMGMT_IMPORT 40 +# define OSSL_FUNC_KEYMGMT_IMPORT_TYPES 41 +# define OSSL_FUNC_KEYMGMT_EXPORT 42 +# define OSSL_FUNC_KEYMGMT_EXPORT_TYPES 43 +OSSL_CORE_MAKE_FUNC(int, keymgmt_import, + (void *keydata, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_import_types, + (int selection)) +OSSL_CORE_MAKE_FUNC(int, keymgmt_export, + (void *keydata, int selection, + OSSL_CALLBACK *param_cb, void *cbarg)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types, + (int selection)) + +/* Dup function, constructor */ +# define OSSL_FUNC_KEYMGMT_DUP 44 +OSSL_CORE_MAKE_FUNC(void *, keymgmt_dup, + (const void *keydata_from, int selection)) + +/* Key Exchange */ + +# define OSSL_FUNC_KEYEXCH_NEWCTX 1 +# define OSSL_FUNC_KEYEXCH_INIT 2 +# define OSSL_FUNC_KEYEXCH_DERIVE 3 +# define OSSL_FUNC_KEYEXCH_SET_PEER 4 +# define OSSL_FUNC_KEYEXCH_FREECTX 5 +# define OSSL_FUNC_KEYEXCH_DUPCTX 6 +# define OSSL_FUNC_KEYEXCH_SET_CTX_PARAMS 7 +# define OSSL_FUNC_KEYEXCH_SETTABLE_CTX_PARAMS 8 +# define OSSL_FUNC_KEYEXCH_GET_CTX_PARAMS 9 +# define OSSL_FUNC_KEYEXCH_GETTABLE_CTX_PARAMS 10 + +OSSL_CORE_MAKE_FUNC(void *, keyexch_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, keyexch_derive, (void *ctx, unsigned char *secret, + size_t *secretlen, size_t outlen)) +OSSL_CORE_MAKE_FUNC(int, keyexch_set_peer, (void *ctx, void *provkey)) +OSSL_CORE_MAKE_FUNC(void, keyexch_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, keyexch_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_set_ctx_params, (void *ctx, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_settable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, keyexch_get_ctx_params, (void *ctx, + OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keyexch_gettable_ctx_params, + (void *ctx, void *provctx)) + +/* Signature */ + +# define OSSL_FUNC_SIGNATURE_NEWCTX 1 +# define OSSL_FUNC_SIGNATURE_SIGN_INIT 2 +# define OSSL_FUNC_SIGNATURE_SIGN 3 +# define OSSL_FUNC_SIGNATURE_VERIFY_INIT 4 +# define OSSL_FUNC_SIGNATURE_VERIFY 5 +# define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER_INIT 6 +# define OSSL_FUNC_SIGNATURE_VERIFY_RECOVER 7 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_INIT 8 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_UPDATE 9 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN_FINAL 10 +# define OSSL_FUNC_SIGNATURE_DIGEST_SIGN 11 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_INIT 12 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_UPDATE 13 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY_FINAL 14 +# define OSSL_FUNC_SIGNATURE_DIGEST_VERIFY 15 +# define OSSL_FUNC_SIGNATURE_FREECTX 16 +# define OSSL_FUNC_SIGNATURE_DUPCTX 17 +# define OSSL_FUNC_SIGNATURE_GET_CTX_PARAMS 18 +# define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_PARAMS 19 +# define OSSL_FUNC_SIGNATURE_SET_CTX_PARAMS 20 +# define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_PARAMS 21 +# define OSSL_FUNC_SIGNATURE_GET_CTX_MD_PARAMS 22 +# define OSSL_FUNC_SIGNATURE_GETTABLE_CTX_MD_PARAMS 23 +# define OSSL_FUNC_SIGNATURE_SET_CTX_MD_PARAMS 24 +# define OSSL_FUNC_SIGNATURE_SETTABLE_CTX_MD_PARAMS 25 + +OSSL_CORE_MAKE_FUNC(void *, signature_newctx, (void *provctx, + const char *propq)) +OSSL_CORE_MAKE_FUNC(int, signature_sign_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_sign, (void *ctx, unsigned char *sig, + size_t *siglen, size_t sigsize, + const unsigned char *tbs, + size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_verify_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_verify, (void *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_verify_recover_init, + (void *ctx, void *provkey, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_verify_recover, + (void *ctx, unsigned char *rout, size_t *routlen, + size_t routsize, const unsigned char *sig, size_t siglen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_init, + (void *ctx, const char *mdname, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_update, + (void *ctx, const unsigned char *data, size_t datalen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign_final, + (void *ctx, unsigned char *sig, size_t *siglen, + size_t sigsize)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_sign, + (void *ctx, unsigned char *sigret, size_t *siglen, + size_t sigsize, const unsigned char *tbs, size_t tbslen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_init, + (void *ctx, const char *mdname, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_update, + (void *ctx, const unsigned char *data, size_t datalen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify_final, + (void *ctx, const unsigned char *sig, size_t siglen)) +OSSL_CORE_MAKE_FUNC(int, signature_digest_verify, + (void *ctx, const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen)) +OSSL_CORE_MAKE_FUNC(void, signature_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, signature_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, signature_get_ctx_md_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_gettable_ctx_md_params, + (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, signature_set_ctx_md_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, signature_settable_ctx_md_params, + (void *ctx)) + + +/* Asymmetric Ciphers */ + +# define OSSL_FUNC_ASYM_CIPHER_NEWCTX 1 +# define OSSL_FUNC_ASYM_CIPHER_ENCRYPT_INIT 2 +# define OSSL_FUNC_ASYM_CIPHER_ENCRYPT 3 +# define OSSL_FUNC_ASYM_CIPHER_DECRYPT_INIT 4 +# define OSSL_FUNC_ASYM_CIPHER_DECRYPT 5 +# define OSSL_FUNC_ASYM_CIPHER_FREECTX 6 +# define OSSL_FUNC_ASYM_CIPHER_DUPCTX 7 +# define OSSL_FUNC_ASYM_CIPHER_GET_CTX_PARAMS 8 +# define OSSL_FUNC_ASYM_CIPHER_GETTABLE_CTX_PARAMS 9 +# define OSSL_FUNC_ASYM_CIPHER_SET_CTX_PARAMS 10 +# define OSSL_FUNC_ASYM_CIPHER_SETTABLE_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, asym_cipher_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_encrypt, (void *ctx, unsigned char *out, + size_t *outlen, + size_t outsize, + const unsigned char *in, + size_t inlen)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_decrypt, (void *ctx, unsigned char *out, + size_t *outlen, + size_t outsize, + const unsigned char *in, + size_t inlen)) +OSSL_CORE_MAKE_FUNC(void, asym_cipher_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, asym_cipher_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_get_ctx_params, + (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, asym_cipher_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_settable_ctx_params, + (void *ctx, void *provctx)) + +/* Asymmetric Key encapsulation */ +# define OSSL_FUNC_KEM_NEWCTX 1 +# define OSSL_FUNC_KEM_ENCAPSULATE_INIT 2 +# define OSSL_FUNC_KEM_ENCAPSULATE 3 +# define OSSL_FUNC_KEM_DECAPSULATE_INIT 4 +# define OSSL_FUNC_KEM_DECAPSULATE 5 +# define OSSL_FUNC_KEM_FREECTX 6 +# define OSSL_FUNC_KEM_DUPCTX 7 +# define OSSL_FUNC_KEM_GET_CTX_PARAMS 8 +# define OSSL_FUNC_KEM_GETTABLE_CTX_PARAMS 9 +# define OSSL_FUNC_KEM_SET_CTX_PARAMS 10 +# define OSSL_FUNC_KEM_SETTABLE_CTX_PARAMS 11 + +OSSL_CORE_MAKE_FUNC(void *, kem_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kem_encapsulate_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_encapsulate, (void *ctx, + unsigned char *out, size_t *outlen, + unsigned char *secret, + size_t *secretlen)) +OSSL_CORE_MAKE_FUNC(int, kem_decapsulate_init, (void *ctx, void *provkey, + const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, kem_decapsulate, (void *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)) +OSSL_CORE_MAKE_FUNC(void, kem_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(void *, kem_dupctx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, kem_get_ctx_params, (void *ctx, OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_gettable_ctx_params, + (void *ctx, void *provctx)) +OSSL_CORE_MAKE_FUNC(int, kem_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, kem_settable_ctx_params, + (void *ctx, void *provctx)) + +/* Encoders and decoders */ +# define OSSL_FUNC_ENCODER_NEWCTX 1 +# define OSSL_FUNC_ENCODER_FREECTX 2 +# define OSSL_FUNC_ENCODER_GET_PARAMS 3 +# define OSSL_FUNC_ENCODER_GETTABLE_PARAMS 4 +# define OSSL_FUNC_ENCODER_SET_CTX_PARAMS 5 +# define OSSL_FUNC_ENCODER_SETTABLE_CTX_PARAMS 6 +# define OSSL_FUNC_ENCODER_DOES_SELECTION 10 +# define OSSL_FUNC_ENCODER_ENCODE 11 +# define OSSL_FUNC_ENCODER_IMPORT_OBJECT 20 +# define OSSL_FUNC_ENCODER_FREE_OBJECT 21 +OSSL_CORE_MAKE_FUNC(void *, encoder_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void, encoder_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, encoder_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, encoder_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, encoder_settable_ctx_params, + (void *provctx)) + +OSSL_CORE_MAKE_FUNC(int, encoder_does_selection, + (void *provctx, int selection)) +OSSL_CORE_MAKE_FUNC(int, encoder_encode, + (void *ctx, OSSL_CORE_BIO *out, + const void *obj_raw, const OSSL_PARAM obj_abstract[], + int selection, + OSSL_PASSPHRASE_CALLBACK *cb, void *cbarg)) + +OSSL_CORE_MAKE_FUNC(void *, encoder_import_object, + (void *ctx, int selection, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(void, encoder_free_object, (void *obj)) + +# define OSSL_FUNC_DECODER_NEWCTX 1 +# define OSSL_FUNC_DECODER_FREECTX 2 +# define OSSL_FUNC_DECODER_GET_PARAMS 3 +# define OSSL_FUNC_DECODER_GETTABLE_PARAMS 4 +# define OSSL_FUNC_DECODER_SET_CTX_PARAMS 5 +# define OSSL_FUNC_DECODER_SETTABLE_CTX_PARAMS 6 +# define OSSL_FUNC_DECODER_DOES_SELECTION 10 +# define OSSL_FUNC_DECODER_DECODE 11 +# define OSSL_FUNC_DECODER_EXPORT_OBJECT 20 +OSSL_CORE_MAKE_FUNC(void *, decoder_newctx, (void *provctx)) +OSSL_CORE_MAKE_FUNC(void, decoder_freectx, (void *ctx)) +OSSL_CORE_MAKE_FUNC(int, decoder_get_params, (OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_gettable_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, decoder_set_ctx_params, + (void *ctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, decoder_settable_ctx_params, + (void *provctx)) + +OSSL_CORE_MAKE_FUNC(int, decoder_does_selection, + (void *provctx, int selection)) +OSSL_CORE_MAKE_FUNC(int, decoder_decode, + (void *ctx, OSSL_CORE_BIO *in, int selection, + OSSL_CALLBACK *data_cb, void *data_cbarg, + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) +OSSL_CORE_MAKE_FUNC(int, decoder_export_object, + (void *ctx, const void *objref, size_t objref_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg)) + +/*- + * Store + * + * Objects are scanned by using the 'open', 'load', 'eof' and 'close' + * functions, which implement an OSSL_STORE loader. + * + * store_load() works in a way that's very similar to the decoders, in + * that they pass an abstract object through a callback, either as a DER + * octet string or as an object reference, which libcrypto will have to + * deal with. + */ + +#define OSSL_FUNC_STORE_OPEN 1 +#define OSSL_FUNC_STORE_ATTACH 2 +#define OSSL_FUNC_STORE_SETTABLE_CTX_PARAMS 3 +#define OSSL_FUNC_STORE_SET_CTX_PARAMS 4 +#define OSSL_FUNC_STORE_LOAD 5 +#define OSSL_FUNC_STORE_EOF 6 +#define OSSL_FUNC_STORE_CLOSE 7 +#define OSSL_FUNC_STORE_EXPORT_OBJECT 8 +OSSL_CORE_MAKE_FUNC(void *, store_open, (void *provctx, const char *uri)) +OSSL_CORE_MAKE_FUNC(void *, store_attach, (void *provctx, OSSL_CORE_BIO *in)) +OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, store_settable_ctx_params, + (void *provctx)) +OSSL_CORE_MAKE_FUNC(int, store_set_ctx_params, + (void *loaderctx, const OSSL_PARAM params[])) +OSSL_CORE_MAKE_FUNC(int, store_load, + (void *loaderctx, + OSSL_CALLBACK *object_cb, void *object_cbarg, + OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) +OSSL_CORE_MAKE_FUNC(int, store_eof, (void *loaderctx)) +OSSL_CORE_MAKE_FUNC(int, store_close, (void *loaderctx)) +OSSL_CORE_MAKE_FUNC(int, store_export_object, + (void *loaderctx, const void *objref, size_t objref_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg)) + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h b/deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h new file mode 100644 index 00000000..5e3c132f --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h @@ -0,0 +1,560 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_NAMES_H +# define OPENSSL_CORE_NAMES_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* Well known parameter names that core passes to providers */ +#define OSSL_PROV_PARAM_CORE_VERSION "openssl-version" /* utf8_ptr */ +#define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name" /* utf8_ptr */ +#define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename" /* utf8_ptr */ + +/* Well known parameter names that Providers can define */ +#define OSSL_PROV_PARAM_NAME "name" /* utf8_ptr */ +#define OSSL_PROV_PARAM_VERSION "version" /* utf8_ptr */ +#define OSSL_PROV_PARAM_BUILDINFO "buildinfo" /* utf8_ptr */ +#define OSSL_PROV_PARAM_STATUS "status" /* uint */ +#define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks" /* uint */ +#define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" /* uint */ +#define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" /* uint */ + +/* Self test callback parameters */ +#define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase" /* utf8_string */ +#define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type" /* utf8_string */ +#define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc" /* utf8_string */ + +/*- + * Provider-native object abstractions + * + * These are used when a provider wants to pass object data or an object + * reference back to libcrypto. This is only useful for provider functions + * that take a callback to which an OSSL_PARAM array with these parameters + * can be passed. + * + * This set of parameter names is explained in detail in provider-object(7) + * (doc/man7/provider-object.pod) + */ +#define OSSL_OBJECT_PARAM_TYPE "type" /* INTEGER */ +#define OSSL_OBJECT_PARAM_DATA_TYPE "data-type" /* UTF8_STRING */ +#define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure" /* UTF8_STRING */ +#define OSSL_OBJECT_PARAM_REFERENCE "reference" /* OCTET_STRING */ +#define OSSL_OBJECT_PARAM_DATA "data" /* OCTET_STRING or UTF8_STRING */ +#define OSSL_OBJECT_PARAM_DESC "desc" /* UTF8_STRING */ + +/* + * Algorithm parameters + * If "engine" or "properties" are specified, they should always be paired + * with the algorithm type. + * Note these are common names that are shared by many types (such as kdf, mac, + * and pkey) e.g: see OSSL_MAC_PARAM_DIGEST below. + */ +#define OSSL_ALG_PARAM_DIGEST "digest" /* utf8_string */ +#define OSSL_ALG_PARAM_CIPHER "cipher" /* utf8_string */ +#define OSSL_ALG_PARAM_ENGINE "engine" /* utf8_string */ +#define OSSL_ALG_PARAM_MAC "mac" /* utf8_string */ +#define OSSL_ALG_PARAM_PROPERTIES "properties"/* utf8_string */ + +/* cipher parameters */ +#define OSSL_CIPHER_PARAM_PADDING "padding" /* uint */ +#define OSSL_CIPHER_PARAM_USE_BITS "use-bits" /* uint */ +#define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version" /* uint */ +#define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac" /* octet_ptr */ +#define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size" /* size_t */ +#define OSSL_CIPHER_PARAM_MODE "mode" /* uint */ +#define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD "aead" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_CTS "cts" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" /* int, 0 or 1 */ +#define OSSL_CIPHER_PARAM_KEYLEN "keylen" /* size_t */ +#define OSSL_CIPHER_PARAM_IVLEN "ivlen" /* size_t */ +#define OSSL_CIPHER_PARAM_IV "iv" /* octet_string OR octet_ptr */ +#define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv" /* octet_string OR octet_ptr */ +#define OSSL_CIPHER_PARAM_NUM "num" /* uint */ +#define OSSL_CIPHER_PARAM_ROUNDS "rounds" /* uint */ +#define OSSL_CIPHER_PARAM_AEAD_TAG "tag" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv" /* octet_string */ +#define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN +#define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" /* size_t */ +#define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" /* octet_string */ +#define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" /* octet_string */ +#define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" /* size_t */ +#define OSSL_CIPHER_PARAM_SPEED "speed" /* uint */ +#define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" /* utf8_string */ +/* For passing the AlgorithmIdentifier parameter in DER form */ +#define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS "alg_id_param" /* octet_string */ + +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT \ + "tls1multi_maxsndfrag" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE \ + "tls1multi_maxbufsz" /* size_t */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE \ + "tls1multi_interleave" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD \ + "tls1multi_aad" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN \ + "tls1multi_aadpacklen" /* uint */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC \ + "tls1multi_enc" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN \ + "tls1multi_encin" /* octet_string */ +#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN \ + "tls1multi_enclen" /* size_t */ + +/* OSSL_CIPHER_PARAM_CTS_MODE Values */ +#define OSSL_CIPHER_CTS_MODE_CS1 "CS1" +#define OSSL_CIPHER_CTS_MODE_CS2 "CS2" +#define OSSL_CIPHER_CTS_MODE_CS3 "CS3" + +/* digest parameters */ +#define OSSL_DIGEST_PARAM_XOFLEN "xoflen" /* size_t */ +#define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" /* octet string */ +#define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" /* uint */ +#define OSSL_DIGEST_PARAM_MICALG "micalg" /* utf8 string */ +#define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" /* size_t */ +#define OSSL_DIGEST_PARAM_SIZE "size" /* size_t */ +#define OSSL_DIGEST_PARAM_XOF "xof" /* int, 0 or 1 */ +#define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" /* int, 0 or 1 */ + +/* Known DIGEST names (not a complete list) */ +#define OSSL_DIGEST_NAME_MD5 "MD5" +#define OSSL_DIGEST_NAME_MD5_SHA1 "MD5-SHA1" +#define OSSL_DIGEST_NAME_SHA1 "SHA1" +#define OSSL_DIGEST_NAME_SHA2_224 "SHA2-224" +#define OSSL_DIGEST_NAME_SHA2_256 "SHA2-256" +#define OSSL_DIGEST_NAME_SHA2_384 "SHA2-384" +#define OSSL_DIGEST_NAME_SHA2_512 "SHA2-512" +#define OSSL_DIGEST_NAME_SHA2_512_224 "SHA2-512/224" +#define OSSL_DIGEST_NAME_SHA2_512_256 "SHA2-512/256" +#define OSSL_DIGEST_NAME_MD2 "MD2" +#define OSSL_DIGEST_NAME_MD4 "MD4" +#define OSSL_DIGEST_NAME_MDC2 "MDC2" +#define OSSL_DIGEST_NAME_RIPEMD160 "RIPEMD160" +#define OSSL_DIGEST_NAME_SHA3_224 "SHA3-224" +#define OSSL_DIGEST_NAME_SHA3_256 "SHA3-256" +#define OSSL_DIGEST_NAME_SHA3_384 "SHA3-384" +#define OSSL_DIGEST_NAME_SHA3_512 "SHA3-512" +#define OSSL_DIGEST_NAME_KECCAK_KMAC128 "KECCAK-KMAC-128" +#define OSSL_DIGEST_NAME_KECCAK_KMAC256 "KECCAK-KMAC-256" +#define OSSL_DIGEST_NAME_SM3 "SM3" + +/* MAC parameters */ +#define OSSL_MAC_PARAM_KEY "key" /* octet string */ +#define OSSL_MAC_PARAM_IV "iv" /* octet string */ +#define OSSL_MAC_PARAM_CUSTOM "custom" /* utf8 string */ +#define OSSL_MAC_PARAM_SALT "salt" /* octet string */ +#define OSSL_MAC_PARAM_XOF "xof" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot" /* int, 0 or 1 */ +#define OSSL_MAC_PARAM_C_ROUNDS "c-rounds" /* unsigned int */ +#define OSSL_MAC_PARAM_D_ROUNDS "d-rounds" /* unsigned int */ + +/* + * If "engine" or "properties" are specified, they should always be paired + * with "cipher" or "digest". + */ +#define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ +#define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ +#define OSSL_MAC_PARAM_SIZE "size" /* size_t */ +#define OSSL_MAC_PARAM_BLOCK_SIZE "block-size" /* size_t */ +#define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size" /* size_t */ + +/* Known MAC names */ +#define OSSL_MAC_NAME_BLAKE2BMAC "BLAKE2BMAC" +#define OSSL_MAC_NAME_BLAKE2SMAC "BLAKE2SMAC" +#define OSSL_MAC_NAME_CMAC "CMAC" +#define OSSL_MAC_NAME_GMAC "GMAC" +#define OSSL_MAC_NAME_HMAC "HMAC" +#define OSSL_MAC_NAME_KMAC128 "KMAC128" +#define OSSL_MAC_NAME_KMAC256 "KMAC256" +#define OSSL_MAC_NAME_POLY1305 "POLY1305" +#define OSSL_MAC_NAME_SIPHASH "SIPHASH" + +/* KDF / PRF parameters */ +#define OSSL_KDF_PARAM_SECRET "secret" /* octet string */ +#define OSSL_KDF_PARAM_KEY "key" /* octet string */ +#define OSSL_KDF_PARAM_SALT "salt" /* octet string */ +#define OSSL_KDF_PARAM_PASSWORD "pass" /* octet string */ +#define OSSL_KDF_PARAM_PREFIX "prefix" /* octet string */ +#define OSSL_KDF_PARAM_LABEL "label" /* octet string */ +#define OSSL_KDF_PARAM_DATA "data" /* octet string */ +#define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ +#define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC /* utf8 string */ +#define OSSL_KDF_PARAM_MAC_SIZE "maclen" /* size_t */ +#define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ +#define OSSL_KDF_PARAM_ITER "iter" /* unsigned int */ +#define OSSL_KDF_PARAM_MODE "mode" /* utf8 string or int */ +#define OSSL_KDF_PARAM_PKCS5 "pkcs5" /* int */ +#define OSSL_KDF_PARAM_UKM "ukm" /* octet string */ +#define OSSL_KDF_PARAM_CEK_ALG "cekalg" /* utf8 string */ +#define OSSL_KDF_PARAM_SCRYPT_N "n" /* uint64_t */ +#define OSSL_KDF_PARAM_SCRYPT_R "r" /* uint32_t */ +#define OSSL_KDF_PARAM_SCRYPT_P "p" /* uint32_t */ +#define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes" /* uint64_t */ +#define OSSL_KDF_PARAM_INFO "info" /* octet string */ +#define OSSL_KDF_PARAM_SEED "seed" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" /* octet string */ +#define OSSL_KDF_PARAM_SSHKDF_TYPE "type" /* int */ +#define OSSL_KDF_PARAM_SIZE "size" /* size_t */ +#define OSSL_KDF_PARAM_CONSTANT "constant" /* octet string */ +#define OSSL_KDF_PARAM_PKCS12_ID "id" /* int */ +#define OSSL_KDF_PARAM_KBKDF_USE_L "use-l" /* int */ +#define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator" /* int */ +#define OSSL_KDF_PARAM_KBKDF_R "r" /* int */ +#define OSSL_KDF_PARAM_X942_ACVPINFO "acvp-info" +#define OSSL_KDF_PARAM_X942_PARTYUINFO "partyu-info" +#define OSSL_KDF_PARAM_X942_PARTYVINFO "partyv-info" +#define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo" +#define OSSL_KDF_PARAM_X942_SUPP_PRIVINFO "supp-privinfo" +#define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits" + +/* Known KDF names */ +#define OSSL_KDF_NAME_HKDF "HKDF" +#define OSSL_KDF_NAME_TLS1_3_KDF "TLS13-KDF" +#define OSSL_KDF_NAME_PBKDF1 "PBKDF1" +#define OSSL_KDF_NAME_PBKDF2 "PBKDF2" +#define OSSL_KDF_NAME_SCRYPT "SCRYPT" +#define OSSL_KDF_NAME_SSHKDF "SSHKDF" +#define OSSL_KDF_NAME_SSKDF "SSKDF" +#define OSSL_KDF_NAME_TLS1_PRF "TLS1-PRF" +#define OSSL_KDF_NAME_X942KDF_ASN1 "X942KDF-ASN1" +#define OSSL_KDF_NAME_X942KDF_CONCAT "X942KDF-CONCAT" +#define OSSL_KDF_NAME_X963KDF "X963KDF" +#define OSSL_KDF_NAME_KBKDF "KBKDF" +#define OSSL_KDF_NAME_KRB5KDF "KRB5KDF" + +/* Known RAND names */ +#define OSSL_RAND_PARAM_STATE "state" +#define OSSL_RAND_PARAM_STRENGTH "strength" +#define OSSL_RAND_PARAM_MAX_REQUEST "max_request" +#define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy" +#define OSSL_RAND_PARAM_TEST_NONCE "test_nonce" + +/* RAND/DRBG names */ +#define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests" +#define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval" +#define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen" +#define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen" +#define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen" +#define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen" +#define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen" +#define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen" +#define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter" +#define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time" +#define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +#define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +#define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC +#define OSSL_DRBG_PARAM_USE_DF "use_derivation_function" + +/* DRBG call back parameters */ +#define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required" +#define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance" +#define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length" +#define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length" +#define OSSL_DRBG_PARAM_RANDOM_DATA "random_data" +#define OSSL_DRBG_PARAM_SIZE "size" + +/* PKEY parameters */ +/* Common PKEY parameters */ +#define OSSL_PKEY_PARAM_BITS "bits" /* integer */ +#define OSSL_PKEY_PARAM_MAX_SIZE "max-size" /* integer */ +#define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" /* integer */ +#define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ +#define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE /* utf8 string */ +#define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +#define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" /* utf8 string */ +#define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" /* utf8 string */ +#define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" +#define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size" +#define OSSL_PKEY_PARAM_MASKGENFUNC "mgf" +#define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest" +#define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties" +#define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" +#define OSSL_PKEY_PARAM_GROUP_NAME "group" +#define OSSL_PKEY_PARAM_DIST_ID "distid" +#define OSSL_PKEY_PARAM_PUB_KEY "pub" +#define OSSL_PKEY_PARAM_PRIV_KEY "priv" + +/* Diffie-Hellman/DSA Parameters */ +#define OSSL_PKEY_PARAM_FFC_P "p" +#define OSSL_PKEY_PARAM_FFC_G "g" +#define OSSL_PKEY_PARAM_FFC_Q "q" +#define OSSL_PKEY_PARAM_FFC_GINDEX "gindex" +#define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter" +#define OSSL_PKEY_PARAM_FFC_SEED "seed" +#define OSSL_PKEY_PARAM_FFC_COFACTOR "j" +#define OSSL_PKEY_PARAM_FFC_H "hindex" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g" +#define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy" + +/* Diffie-Hellman params */ +#define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" +#define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len" + +/* Elliptic Curve Domain Parameters */ +#define OSSL_PKEY_PARAM_EC_PUB_X "qx" +#define OSSL_PKEY_PARAM_EC_PUB_Y "qy" + +/* Elliptic Curve Explicit Domain Parameters */ +#define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" +#define OSSL_PKEY_PARAM_EC_P "p" +#define OSSL_PKEY_PARAM_EC_A "a" +#define OSSL_PKEY_PARAM_EC_B "b" +#define OSSL_PKEY_PARAM_EC_GENERATOR "generator" +#define OSSL_PKEY_PARAM_EC_ORDER "order" +#define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" +#define OSSL_PKEY_PARAM_EC_SEED "seed" +#define OSSL_PKEY_PARAM_EC_CHAR2_M "m" +#define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type" +#define OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS "tp" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K1 "k1" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K2 "k2" +#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K3 "k3" +#define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" + +/* Elliptic Curve Key Parameters */ +#define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" +#define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH \ + OSSL_PKEY_PARAM_USE_COFACTOR_FLAG + +/* RSA Keys */ +/* + * n, e, d are the usual public and private key components + * + * rsa-num is the number of factors, including p and q + * rsa-factor is used for each factor: p, q, r_i (i = 3, ...) + * rsa-exponent is used for each exponent: dP, dQ, d_i (i = 3, ...) + * rsa-coefficient is used for each coefficient: qInv, t_i (i = 3, ...) + * + * The number of rsa-factor items must be equal to the number of rsa-exponent + * items, and the number of rsa-coefficients must be one less. + * (the base i for the coefficients is 2, not 1, at least as implied by + * RFC 8017) + */ +#define OSSL_PKEY_PARAM_RSA_N "n" +#define OSSL_PKEY_PARAM_RSA_E "e" +#define OSSL_PKEY_PARAM_RSA_D "d" +#define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor" +#define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" +#define OSSL_PKEY_PARAM_RSA_FACTOR1 OSSL_PKEY_PARAM_RSA_FACTOR"1" +#define OSSL_PKEY_PARAM_RSA_FACTOR2 OSSL_PKEY_PARAM_RSA_FACTOR"2" +#define OSSL_PKEY_PARAM_RSA_FACTOR3 OSSL_PKEY_PARAM_RSA_FACTOR"3" +#define OSSL_PKEY_PARAM_RSA_FACTOR4 OSSL_PKEY_PARAM_RSA_FACTOR"4" +#define OSSL_PKEY_PARAM_RSA_FACTOR5 OSSL_PKEY_PARAM_RSA_FACTOR"5" +#define OSSL_PKEY_PARAM_RSA_FACTOR6 OSSL_PKEY_PARAM_RSA_FACTOR"6" +#define OSSL_PKEY_PARAM_RSA_FACTOR7 OSSL_PKEY_PARAM_RSA_FACTOR"7" +#define OSSL_PKEY_PARAM_RSA_FACTOR8 OSSL_PKEY_PARAM_RSA_FACTOR"8" +#define OSSL_PKEY_PARAM_RSA_FACTOR9 OSSL_PKEY_PARAM_RSA_FACTOR"9" +#define OSSL_PKEY_PARAM_RSA_FACTOR10 OSSL_PKEY_PARAM_RSA_FACTOR"10" +#define OSSL_PKEY_PARAM_RSA_EXPONENT1 OSSL_PKEY_PARAM_RSA_EXPONENT"1" +#define OSSL_PKEY_PARAM_RSA_EXPONENT2 OSSL_PKEY_PARAM_RSA_EXPONENT"2" +#define OSSL_PKEY_PARAM_RSA_EXPONENT3 OSSL_PKEY_PARAM_RSA_EXPONENT"3" +#define OSSL_PKEY_PARAM_RSA_EXPONENT4 OSSL_PKEY_PARAM_RSA_EXPONENT"4" +#define OSSL_PKEY_PARAM_RSA_EXPONENT5 OSSL_PKEY_PARAM_RSA_EXPONENT"5" +#define OSSL_PKEY_PARAM_RSA_EXPONENT6 OSSL_PKEY_PARAM_RSA_EXPONENT"6" +#define OSSL_PKEY_PARAM_RSA_EXPONENT7 OSSL_PKEY_PARAM_RSA_EXPONENT"7" +#define OSSL_PKEY_PARAM_RSA_EXPONENT8 OSSL_PKEY_PARAM_RSA_EXPONENT"8" +#define OSSL_PKEY_PARAM_RSA_EXPONENT9 OSSL_PKEY_PARAM_RSA_EXPONENT"9" +#define OSSL_PKEY_PARAM_RSA_EXPONENT10 OSSL_PKEY_PARAM_RSA_EXPONENT"10" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 OSSL_PKEY_PARAM_RSA_COEFFICIENT"1" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 OSSL_PKEY_PARAM_RSA_COEFFICIENT"2" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 OSSL_PKEY_PARAM_RSA_COEFFICIENT"3" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 OSSL_PKEY_PARAM_RSA_COEFFICIENT"4" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 OSSL_PKEY_PARAM_RSA_COEFFICIENT"5" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 OSSL_PKEY_PARAM_RSA_COEFFICIENT"6" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 OSSL_PKEY_PARAM_RSA_COEFFICIENT"7" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 OSSL_PKEY_PARAM_RSA_COEFFICIENT"8" +#define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 OSSL_PKEY_PARAM_RSA_COEFFICIENT"9" + +/* RSA padding modes */ +#define OSSL_PKEY_RSA_PAD_MODE_NONE "none" +#define OSSL_PKEY_RSA_PAD_MODE_PKCSV15 "pkcs1" +#define OSSL_PKEY_RSA_PAD_MODE_OAEP "oaep" +#define OSSL_PKEY_RSA_PAD_MODE_X931 "x931" +#define OSSL_PKEY_RSA_PAD_MODE_PSS "pss" + +/* RSA pss padding salt length */ +#define OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST "digest" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_MAX "max" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO "auto" +#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX "auto-digestmax" + +/* Key generation parameters */ +#define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS +#define OSSL_PKEY_PARAM_RSA_PRIMES "primes" +#define OSSL_PKEY_PARAM_RSA_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_PKEY_PARAM_RSA_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_PKEY_PARAM_RSA_MASKGENFUNC OSSL_PKEY_PARAM_MASKGENFUNC +#define OSSL_PKEY_PARAM_RSA_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen" + +/* Key generation parameters */ +#define OSSL_PKEY_PARAM_FFC_TYPE "type" +#define OSSL_PKEY_PARAM_FFC_PBITS "pbits" +#define OSSL_PKEY_PARAM_FFC_QBITS "qbits" +#define OSSL_PKEY_PARAM_FFC_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_PKEY_PARAM_FFC_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES + +#define OSSL_PKEY_PARAM_EC_ENCODING "encoding" /* utf8_string */ +#define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format" +#define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" +#define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public" + +/* OSSL_PKEY_PARAM_EC_ENCODING values */ +#define OSSL_PKEY_EC_ENCODING_EXPLICIT "explicit" +#define OSSL_PKEY_EC_ENCODING_GROUP "named_curve" + +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_UNCOMPRESSED "uncompressed" +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_COMPRESSED "compressed" +#define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_HYBRID "hybrid" + +#define OSSL_PKEY_EC_GROUP_CHECK_DEFAULT "default" +#define OSSL_PKEY_EC_GROUP_CHECK_NAMED "named" +#define OSSL_PKEY_EC_GROUP_CHECK_NAMED_NIST "named-nist" + +/* Key Exchange parameters */ +#define OSSL_EXCHANGE_PARAM_PAD "pad" /* uint */ +#define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode" /* int */ +#define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props" /* utf8_string */ +#define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen" /* size_t */ +/* The following parameter is an octet_string on set and an octet_ptr on get */ +#define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm" + +/* Signature parameters */ +#define OSSL_SIGNATURE_PARAM_ALGORITHM_ID "algorithm-id" +#define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE +#define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" +#define OSSL_SIGNATURE_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES \ + OSSL_PKEY_PARAM_MGF1_PROPERTIES +#define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE + +/* Asym cipher parameters */ +#define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES +#define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE +#define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE +#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST \ + OSSL_PKEY_PARAM_MGF1_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS \ + OSSL_PKEY_PARAM_MGF1_PROPERTIES +#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST OSSL_ALG_PARAM_DIGEST +#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS "digest-props" +/* The following parameter is an octet_string on set and an octet_ptr on get */ +#define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label" +#define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version" +#define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version" + +/* + * Encoder / decoder parameters + */ +#define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER +#define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES +/* Currently PVK only, but reusable for others as needed */ +#define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level" +#define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters" /* integer */ + +#define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES + +/* Passphrase callback parameters */ +#define OSSL_PASSPHRASE_PARAM_INFO "info" + +/* Keygen callback parameters, from provider to libcrypto */ +#define OSSL_GEN_PARAM_POTENTIAL "potential" /* integer */ +#define OSSL_GEN_PARAM_ITERATION "iteration" /* integer */ + +/* ACVP Test parameters : These should not be used normally */ +#define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1" +#define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2" +#define OSSL_PKEY_PARAM_RSA_TEST_XP "xp" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" +#define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq" +#define OSSL_PKEY_PARAM_RSA_TEST_P1 "p1" +#define OSSL_PKEY_PARAM_RSA_TEST_P2 "p2" +#define OSSL_PKEY_PARAM_RSA_TEST_Q1 "q1" +#define OSSL_PKEY_PARAM_RSA_TEST_Q2 "q2" +#define OSSL_SIGNATURE_PARAM_KAT "kat" + +/* KEM parameters */ +#define OSSL_KEM_PARAM_OPERATION "operation" + +/* OSSL_KEM_PARAM_OPERATION values */ +#define OSSL_KEM_PARAM_OPERATION_RSASVE "RSASVE" + +/* Capabilities */ + +/* TLS-GROUP Capability */ +#define OSSL_CAPABILITY_TLS_GROUP_NAME "tls-group-name" +#define OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL "tls-group-name-internal" +#define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id" +#define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg" +#define OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS "tls-group-sec-bits" +#define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem" +#define OSSL_CAPABILITY_TLS_GROUP_MIN_TLS "tls-min-tls" +#define OSSL_CAPABILITY_TLS_GROUP_MAX_TLS "tls-max-tls" +#define OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS "tls-min-dtls" +#define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls" + +/*- + * storemgmt parameters + */ + +/* + * Used by storemgmt_ctx_set_params(): + * + * - OSSL_STORE_PARAM_EXPECT is an INTEGER, and the value is any of the + * OSSL_STORE_INFO numbers. This is used to set the expected type of + * object loaded. + * + * - OSSL_STORE_PARAM_SUBJECT, OSSL_STORE_PARAM_ISSUER, + * OSSL_STORE_PARAM_SERIAL, OSSL_STORE_PARAM_FINGERPRINT, + * OSSL_STORE_PARAM_DIGEST, OSSL_STORE_PARAM_ALIAS + * are used as search criteria. + * (OSSL_STORE_PARAM_DIGEST is used with OSSL_STORE_PARAM_FINGERPRINT) + */ +#define OSSL_STORE_PARAM_EXPECT "expect" /* INTEGER */ +#define OSSL_STORE_PARAM_SUBJECT "subject" /* DER blob => OCTET_STRING */ +#define OSSL_STORE_PARAM_ISSUER "name" /* DER blob => OCTET_STRING */ +#define OSSL_STORE_PARAM_SERIAL "serial" /* INTEGER */ +#define OSSL_STORE_PARAM_DIGEST "digest" /* UTF8_STRING */ +#define OSSL_STORE_PARAM_FINGERPRINT "fingerprint" /* OCTET_STRING */ +#define OSSL_STORE_PARAM_ALIAS "alias" /* UTF8_STRING */ + +/* You may want to pass properties for the provider implementation to use */ +#define OSSL_STORE_PARAM_PROPERTIES "properties" /* utf8_string */ +/* OSSL_DECODER input type if a decoder is used by the store */ +#define OSSL_STORE_PARAM_INPUT_TYPE "input-type" /* UTF8_STRING */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/core_object.h b/deps/openssl/android/x86_64/usr/local/include/openssl/core_object.h new file mode 100644 index 00000000..62ccf39d --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/core_object.h @@ -0,0 +1,41 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CORE_OBJECT_H +# define OPENSSL_CORE_OBJECT_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * Known object types + * + * These numbers are used as values for the OSSL_PARAM parameter + * OSSL_OBJECT_PARAM_TYPE. + * + * For most of these types, there's a corresponding libcrypto object type. + * The corresponding type is indicated with a comment after the number. + */ +# define OSSL_OBJECT_UNKNOWN 0 +# define OSSL_OBJECT_NAME 1 /* char * */ +# define OSSL_OBJECT_PKEY 2 /* EVP_PKEY * */ +# define OSSL_OBJECT_CERT 3 /* X509 * */ +# define OSSL_OBJECT_CRL 4 /* X509_CRL * */ + +/* + * The rest of the associated OSSL_PARAM elements is described in core_names.h + */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h b/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h new file mode 100644 index 00000000..71b747ed --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h @@ -0,0 +1,227 @@ +/*- + * WARNING: do not edit! + * Generated by Makefile from include/openssl/crmf.h.in + * + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * CRMF (RFC 4211) implementation by M. Peylo, M. Viljanen, and D. von Oheimb. + */ + + + +#ifndef OPENSSL_CRMF_H +# define OPENSSL_CRMF_H + +# include + +# ifndef OPENSSL_NO_CRMF +# include +# include +# include +# include /* for GENERAL_NAME etc. */ + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CRMF_POPOPRIVKEY_THISMESSAGE 0 +# define OSSL_CRMF_POPOPRIVKEY_SUBSEQUENTMESSAGE 1 +# define OSSL_CRMF_POPOPRIVKEY_DHMAC 2 +# define OSSL_CRMF_POPOPRIVKEY_AGREEMAC 3 +# define OSSL_CRMF_POPOPRIVKEY_ENCRYPTEDKEY 4 + +# define OSSL_CRMF_SUBSEQUENTMESSAGE_ENCRCERT 0 +# define OSSL_CRMF_SUBSEQUENTMESSAGE_CHALLENGERESP 1 + +typedef struct ossl_crmf_encryptedvalue_st OSSL_CRMF_ENCRYPTEDVALUE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDVALUE) +typedef struct ossl_crmf_msg_st OSSL_CRMF_MSG; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSG) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_MSG, OSSL_CRMF_MSG, OSSL_CRMF_MSG) +#define sk_OSSL_CRMF_MSG_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_value(sk, idx) ((OSSL_CRMF_MSG *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), (idx))) +#define sk_OSSL_CRMF_MSG_new(cmp) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp))) +#define sk_OSSL_CRMF_MSG_new_null() ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CRMF_MSG_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_MSG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (n)) +#define sk_OSSL_CRMF_MSG_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_delete(sk, i) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (i))) +#define sk_OSSL_CRMF_MSG_delete_ptr(sk, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr))) +#define sk_OSSL_CRMF_MSG_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_pop(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_shift(sk) ((OSSL_CRMF_MSG *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_MSG_sk_type(sk),ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_MSG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), (idx)) +#define sk_OSSL_CRMF_MSG_set(sk, idx, ptr) ((OSSL_CRMF_MSG *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_MSG_sk_type(sk), (idx), ossl_check_OSSL_CRMF_MSG_type(ptr))) +#define sk_OSSL_CRMF_MSG_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr)) +#define sk_OSSL_CRMF_MSG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_type(ptr), pnum) +#define sk_OSSL_CRMF_MSG_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk)) +#define sk_OSSL_CRMF_MSG_dup(sk) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk))) +#define sk_OSSL_CRMF_MSG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_MSG) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_MSG_freefunc_type(freefunc))) +#define sk_OSSL_CRMF_MSG_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_MSG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_MSG_sk_type(sk), ossl_check_OSSL_CRMF_MSG_compfunc_type(cmp))) + +typedef struct ossl_crmf_attributetypeandvalue_st OSSL_CRMF_ATTRIBUTETYPEANDVALUE; +typedef struct ossl_crmf_pbmparameter_st OSSL_CRMF_PBMPARAMETER; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PBMPARAMETER) +typedef struct ossl_crmf_poposigningkey_st OSSL_CRMF_POPOSIGNINGKEY; +typedef struct ossl_crmf_certrequest_st OSSL_CRMF_CERTREQUEST; +typedef struct ossl_crmf_certid_st OSSL_CRMF_CERTID; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTID) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID) +SKM_DEFINE_STACK_OF_INTERNAL(OSSL_CRMF_CERTID, OSSL_CRMF_CERTID, OSSL_CRMF_CERTID) +#define sk_OSSL_CRMF_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_value(sk, idx) ((OSSL_CRMF_CERTID *)OPENSSL_sk_value(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), (idx))) +#define sk_OSSL_CRMF_CERTID_new(cmp) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp))) +#define sk_OSSL_CRMF_CERTID_new_null() ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_null()) +#define sk_OSSL_CRMF_CERTID_new_reserve(cmp, n) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp), (n))) +#define sk_OSSL_CRMF_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (n)) +#define sk_OSSL_CRMF_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_delete(sk, i) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (i))) +#define sk_OSSL_CRMF_CERTID_delete_ptr(sk, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr))) +#define sk_OSSL_CRMF_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_pop(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_pop(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_shift(sk) ((OSSL_CRMF_CERTID *)OPENSSL_sk_shift(ossl_check_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OSSL_CRMF_CERTID_sk_type(sk),ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc)) +#define sk_OSSL_CRMF_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), (idx)) +#define sk_OSSL_CRMF_CERTID_set(sk, idx, ptr) ((OSSL_CRMF_CERTID *)OPENSSL_sk_set(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), (idx), ossl_check_OSSL_CRMF_CERTID_type(ptr))) +#define sk_OSSL_CRMF_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr)) +#define sk_OSSL_CRMF_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_type(ptr), pnum) +#define sk_OSSL_CRMF_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk)) +#define sk_OSSL_CRMF_CERTID_dup(sk) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk))) +#define sk_OSSL_CRMF_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OSSL_CRMF_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_copyfunc_type(copyfunc), ossl_check_OSSL_CRMF_CERTID_freefunc_type(freefunc))) +#define sk_OSSL_CRMF_CERTID_set_cmp_func(sk, cmp) ((sk_OSSL_CRMF_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OSSL_CRMF_CERTID_sk_type(sk), ossl_check_OSSL_CRMF_CERTID_compfunc_type(cmp))) + + +typedef struct ossl_crmf_pkipublicationinfo_st OSSL_CRMF_PKIPUBLICATIONINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PKIPUBLICATIONINFO) +typedef struct ossl_crmf_singlepubinfo_st OSSL_CRMF_SINGLEPUBINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_SINGLEPUBINFO) +typedef struct ossl_crmf_certtemplate_st OSSL_CRMF_CERTTEMPLATE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTTEMPLATE) +typedef STACK_OF(OSSL_CRMF_MSG) OSSL_CRMF_MSGS; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSGS) + +typedef struct ossl_crmf_optionalvalidity_st OSSL_CRMF_OPTIONALVALIDITY; + +/* crmf_pbm.c */ +OSSL_CRMF_PBMPARAMETER *OSSL_CRMF_pbmp_new(OSSL_LIB_CTX *libctx, size_t slen, + int owfnid, size_t itercnt, + int macnid); +int OSSL_CRMF_pbm_new(OSSL_LIB_CTX *libctx, const char *propq, + const OSSL_CRMF_PBMPARAMETER *pbmp, + const unsigned char *msg, size_t msglen, + const unsigned char *sec, size_t seclen, + unsigned char **mac, size_t *maclen); + +/* crmf_lib.c */ +int OSSL_CRMF_MSG_set1_regCtrl_regToken(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *tok); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_regToken(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_authenticator(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *auth); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_authenticator(const OSSL_CRMF_MSG *msg); +int +OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + OSSL_CRMF_SINGLEPUBINFO *spi); +# define OSSL_CRMF_PUB_METHOD_DONTCARE 0 +# define OSSL_CRMF_PUB_METHOD_X500 1 +# define OSSL_CRMF_PUB_METHOD_WEB 2 +# define OSSL_CRMF_PUB_METHOD_LDAP 3 +int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi, + int method, GENERAL_NAME *nm); +# define OSSL_CRMF_PUB_ACTION_DONTPUBLISH 0 +# define OSSL_CRMF_PUB_ACTION_PLEASEPUBLISH 1 +int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + int action); +int OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_PKIPUBLICATIONINFO *pi); +OSSL_CRMF_PKIPUBLICATIONINFO +*OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey(OSSL_CRMF_MSG *msg, + const X509_PUBKEY *pubkey); +X509_PUBKEY +*OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_oldCertID(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTID *cid); +OSSL_CRMF_CERTID +*OSSL_CRMF_MSG_get0_regCtrl_oldCertID(const OSSL_CRMF_MSG *msg); +OSSL_CRMF_CERTID *OSSL_CRMF_CERTID_gen(const X509_NAME *issuer, + const ASN1_INTEGER *serial); + +int OSSL_CRMF_MSG_set1_regInfo_utf8Pairs(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *utf8pairs); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regInfo_utf8Pairs(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regInfo_certReq(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTREQUEST *cr); +OSSL_CRMF_CERTREQUEST +*OSSL_CRMF_MSG_get0_regInfo_certReq(const OSSL_CRMF_MSG *msg); + +int OSSL_CRMF_MSG_set0_validity(OSSL_CRMF_MSG *crm, + ASN1_TIME *notBefore, ASN1_TIME *notAfter); +int OSSL_CRMF_MSG_set_certReqId(OSSL_CRMF_MSG *crm, int rid); +int OSSL_CRMF_MSG_get_certReqId(const OSSL_CRMF_MSG *crm); +int OSSL_CRMF_MSG_set0_extensions(OSSL_CRMF_MSG *crm, X509_EXTENSIONS *exts); + +int OSSL_CRMF_MSG_push0_extension(OSSL_CRMF_MSG *crm, X509_EXTENSION *ext); +# define OSSL_CRMF_POPO_NONE -1 +# define OSSL_CRMF_POPO_RAVERIFIED 0 +# define OSSL_CRMF_POPO_SIGNATURE 1 +# define OSSL_CRMF_POPO_KEYENC 2 +# define OSSL_CRMF_POPO_KEYAGREE 3 +int OSSL_CRMF_MSG_create_popo(int meth, OSSL_CRMF_MSG *crm, + EVP_PKEY *pkey, const EVP_MD *digest, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, + int rid, int acceptRAVerified, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); +const ASN1_INTEGER +*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_subject(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_issuer(const OSSL_CRMF_CERTTEMPLATE *tmpl); +X509_EXTENSIONS +*OSSL_CRMF_CERTTEMPLATE_get0_extensions(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTID_get0_issuer(const OSSL_CRMF_CERTID *cid); +const ASN1_INTEGER +*OSSL_CRMF_CERTID_get0_serialNumber(const OSSL_CRMF_CERTID *cid); +int OSSL_CRMF_CERTTEMPLATE_fill(OSSL_CRMF_CERTTEMPLATE *tmpl, + EVP_PKEY *pubkey, + const X509_NAME *subject, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +X509 +*OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(const OSSL_CRMF_ENCRYPTEDVALUE *ecert, + OSSL_LIB_CTX *libctx, const char *propq, + EVP_PKEY *pkey); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CRMF) */ +#endif /* !defined(OPENSSL_CRMF_H) */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h.in new file mode 100644 index 00000000..4d37ea6d --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h.in @@ -0,0 +1,180 @@ +/*- + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Nokia 2007-2019 + * Copyright Siemens AG 2015-2019 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * CRMF (RFC 4211) implementation by M. Peylo, M. Viljanen, and D. von Oheimb. + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CRMF_H +# define OPENSSL_CRMF_H + +# include + +# ifndef OPENSSL_NO_CRMF +# include +# include +# include +# include /* for GENERAL_NAME etc. */ + +/* explicit #includes not strictly needed since implied by the above: */ +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_CRMF_POPOPRIVKEY_THISMESSAGE 0 +# define OSSL_CRMF_POPOPRIVKEY_SUBSEQUENTMESSAGE 1 +# define OSSL_CRMF_POPOPRIVKEY_DHMAC 2 +# define OSSL_CRMF_POPOPRIVKEY_AGREEMAC 3 +# define OSSL_CRMF_POPOPRIVKEY_ENCRYPTEDKEY 4 + +# define OSSL_CRMF_SUBSEQUENTMESSAGE_ENCRCERT 0 +# define OSSL_CRMF_SUBSEQUENTMESSAGE_CHALLENGERESP 1 + +typedef struct ossl_crmf_encryptedvalue_st OSSL_CRMF_ENCRYPTEDVALUE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_ENCRYPTEDVALUE) +typedef struct ossl_crmf_msg_st OSSL_CRMF_MSG; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSG) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_MSG) +{- + generate_stack_macros("OSSL_CRMF_MSG"); +-} +typedef struct ossl_crmf_attributetypeandvalue_st OSSL_CRMF_ATTRIBUTETYPEANDVALUE; +typedef struct ossl_crmf_pbmparameter_st OSSL_CRMF_PBMPARAMETER; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PBMPARAMETER) +typedef struct ossl_crmf_poposigningkey_st OSSL_CRMF_POPOSIGNINGKEY; +typedef struct ossl_crmf_certrequest_st OSSL_CRMF_CERTREQUEST; +typedef struct ossl_crmf_certid_st OSSL_CRMF_CERTID; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTID) +DECLARE_ASN1_DUP_FUNCTION(OSSL_CRMF_CERTID) +{- + generate_stack_macros("OSSL_CRMF_CERTID"); +-} + +typedef struct ossl_crmf_pkipublicationinfo_st OSSL_CRMF_PKIPUBLICATIONINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_PKIPUBLICATIONINFO) +typedef struct ossl_crmf_singlepubinfo_st OSSL_CRMF_SINGLEPUBINFO; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_SINGLEPUBINFO) +typedef struct ossl_crmf_certtemplate_st OSSL_CRMF_CERTTEMPLATE; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_CERTTEMPLATE) +typedef STACK_OF(OSSL_CRMF_MSG) OSSL_CRMF_MSGS; +DECLARE_ASN1_FUNCTIONS(OSSL_CRMF_MSGS) + +typedef struct ossl_crmf_optionalvalidity_st OSSL_CRMF_OPTIONALVALIDITY; + +/* crmf_pbm.c */ +OSSL_CRMF_PBMPARAMETER *OSSL_CRMF_pbmp_new(OSSL_LIB_CTX *libctx, size_t slen, + int owfnid, size_t itercnt, + int macnid); +int OSSL_CRMF_pbm_new(OSSL_LIB_CTX *libctx, const char *propq, + const OSSL_CRMF_PBMPARAMETER *pbmp, + const unsigned char *msg, size_t msglen, + const unsigned char *sec, size_t seclen, + unsigned char **mac, size_t *maclen); + +/* crmf_lib.c */ +int OSSL_CRMF_MSG_set1_regCtrl_regToken(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *tok); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_regToken(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_authenticator(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *auth); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regCtrl_authenticator(const OSSL_CRMF_MSG *msg); +int +OSSL_CRMF_MSG_PKIPublicationInfo_push0_SinglePubInfo(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + OSSL_CRMF_SINGLEPUBINFO *spi); +# define OSSL_CRMF_PUB_METHOD_DONTCARE 0 +# define OSSL_CRMF_PUB_METHOD_X500 1 +# define OSSL_CRMF_PUB_METHOD_WEB 2 +# define OSSL_CRMF_PUB_METHOD_LDAP 3 +int OSSL_CRMF_MSG_set0_SinglePubInfo(OSSL_CRMF_SINGLEPUBINFO *spi, + int method, GENERAL_NAME *nm); +# define OSSL_CRMF_PUB_ACTION_DONTPUBLISH 0 +# define OSSL_CRMF_PUB_ACTION_PLEASEPUBLISH 1 +int OSSL_CRMF_MSG_set_PKIPublicationInfo_action(OSSL_CRMF_PKIPUBLICATIONINFO *pi, + int action); +int OSSL_CRMF_MSG_set1_regCtrl_pkiPublicationInfo(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_PKIPUBLICATIONINFO *pi); +OSSL_CRMF_PKIPUBLICATIONINFO +*OSSL_CRMF_MSG_get0_regCtrl_pkiPublicationInfo(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_protocolEncrKey(OSSL_CRMF_MSG *msg, + const X509_PUBKEY *pubkey); +X509_PUBKEY +*OSSL_CRMF_MSG_get0_regCtrl_protocolEncrKey(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regCtrl_oldCertID(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTID *cid); +OSSL_CRMF_CERTID +*OSSL_CRMF_MSG_get0_regCtrl_oldCertID(const OSSL_CRMF_MSG *msg); +OSSL_CRMF_CERTID *OSSL_CRMF_CERTID_gen(const X509_NAME *issuer, + const ASN1_INTEGER *serial); + +int OSSL_CRMF_MSG_set1_regInfo_utf8Pairs(OSSL_CRMF_MSG *msg, + const ASN1_UTF8STRING *utf8pairs); +ASN1_UTF8STRING +*OSSL_CRMF_MSG_get0_regInfo_utf8Pairs(const OSSL_CRMF_MSG *msg); +int OSSL_CRMF_MSG_set1_regInfo_certReq(OSSL_CRMF_MSG *msg, + const OSSL_CRMF_CERTREQUEST *cr); +OSSL_CRMF_CERTREQUEST +*OSSL_CRMF_MSG_get0_regInfo_certReq(const OSSL_CRMF_MSG *msg); + +int OSSL_CRMF_MSG_set0_validity(OSSL_CRMF_MSG *crm, + ASN1_TIME *notBefore, ASN1_TIME *notAfter); +int OSSL_CRMF_MSG_set_certReqId(OSSL_CRMF_MSG *crm, int rid); +int OSSL_CRMF_MSG_get_certReqId(const OSSL_CRMF_MSG *crm); +int OSSL_CRMF_MSG_set0_extensions(OSSL_CRMF_MSG *crm, X509_EXTENSIONS *exts); + +int OSSL_CRMF_MSG_push0_extension(OSSL_CRMF_MSG *crm, X509_EXTENSION *ext); +# define OSSL_CRMF_POPO_NONE -1 +# define OSSL_CRMF_POPO_RAVERIFIED 0 +# define OSSL_CRMF_POPO_SIGNATURE 1 +# define OSSL_CRMF_POPO_KEYENC 2 +# define OSSL_CRMF_POPO_KEYAGREE 3 +int OSSL_CRMF_MSG_create_popo(int meth, OSSL_CRMF_MSG *crm, + EVP_PKEY *pkey, const EVP_MD *digest, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, + int rid, int acceptRAVerified, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); +const ASN1_INTEGER +*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_subject(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTTEMPLATE_get0_issuer(const OSSL_CRMF_CERTTEMPLATE *tmpl); +X509_EXTENSIONS +*OSSL_CRMF_CERTTEMPLATE_get0_extensions(const OSSL_CRMF_CERTTEMPLATE *tmpl); +const X509_NAME +*OSSL_CRMF_CERTID_get0_issuer(const OSSL_CRMF_CERTID *cid); +const ASN1_INTEGER +*OSSL_CRMF_CERTID_get0_serialNumber(const OSSL_CRMF_CERTID *cid); +int OSSL_CRMF_CERTTEMPLATE_fill(OSSL_CRMF_CERTTEMPLATE *tmpl, + EVP_PKEY *pubkey, + const X509_NAME *subject, + const X509_NAME *issuer, + const ASN1_INTEGER *serial); +X509 +*OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(const OSSL_CRMF_ENCRYPTEDVALUE *ecert, + OSSL_LIB_CTX *libctx, const char *propq, + EVP_PKEY *pkey); + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_CRMF) */ +#endif /* !defined(OPENSSL_CRMF_H) */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/crmferr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/crmferr.h new file mode 100644 index 00000000..b242b922 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/crmferr.h @@ -0,0 +1,50 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_CRMFERR_H +# define OPENSSL_CRMFERR_H +# pragma once + +# include +# include +# include + + +# ifndef OPENSSL_NO_CRMF + + +/* + * CRMF reason codes. + */ +# define CRMF_R_BAD_PBM_ITERATIONCOUNT 100 +# define CRMF_R_CRMFERROR 102 +# define CRMF_R_ERROR 103 +# define CRMF_R_ERROR_DECODING_CERTIFICATE 104 +# define CRMF_R_ERROR_DECRYPTING_CERTIFICATE 105 +# define CRMF_R_ERROR_DECRYPTING_SYMMETRIC_KEY 106 +# define CRMF_R_FAILURE_OBTAINING_RANDOM 107 +# define CRMF_R_ITERATIONCOUNT_BELOW_100 108 +# define CRMF_R_MALFORMED_IV 101 +# define CRMF_R_NULL_ARGUMENT 109 +# define CRMF_R_POPOSKINPUT_NOT_SUPPORTED 113 +# define CRMF_R_POPO_INCONSISTENT_PUBLIC_KEY 117 +# define CRMF_R_POPO_MISSING 121 +# define CRMF_R_POPO_MISSING_PUBLIC_KEY 118 +# define CRMF_R_POPO_MISSING_SUBJECT 119 +# define CRMF_R_POPO_RAVERIFIED_NOT_ACCEPTED 120 +# define CRMF_R_SETTING_MAC_ALGOR_FAILURE 110 +# define CRMF_R_SETTING_OWF_ALGOR_FAILURE 111 +# define CRMF_R_UNSUPPORTED_ALGORITHM 112 +# define CRMF_R_UNSUPPORTED_CIPHER 114 +# define CRMF_R_UNSUPPORTED_METHOD_FOR_CREATING_POPO 115 +# define CRMF_R_UNSUPPORTED_POPO_METHOD 116 + +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h b/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h index 7d0b5262..ab01aae8 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h @@ -1,15 +1,26 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/crypto.h.in + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CRYPTO_H -# define HEADER_CRYPTO_H + + +#ifndef OPENSSL_CRYPTO_H +# define OPENSSL_CRYPTO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CRYPTO_H +# endif # include # include @@ -22,9 +33,10 @@ # include # include -# include +# include # include # include +# include # ifdef CHARSET_EBCDIC # include @@ -36,7 +48,7 @@ */ # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif @@ -44,7 +56,7 @@ extern "C" { #endif -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSLeay OpenSSL_version_num # define SSLeay_version OpenSSL_version # define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER @@ -62,58 +74,24 @@ typedef struct { int dummy; } CRYPTO_dynlock; -# endif /* OPENSSL_API_COMPAT */ +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ typedef void CRYPTO_RWLOCK; CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); -int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); -int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); - -/* - * The following can be used to detect memory leaks in the library. If - * used, it turns on malloc checking - */ -# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ -# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ -# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ - -struct crypto_ex_data_st { - STACK_OF(void) *sk; -}; -DEFINE_STACK_OF(void) - -/* - * Per class, we have a STACK of function pointers. - */ -# define CRYPTO_EX_INDEX_SSL 0 -# define CRYPTO_EX_INDEX_SSL_CTX 1 -# define CRYPTO_EX_INDEX_SSL_SESSION 2 -# define CRYPTO_EX_INDEX_X509 3 -# define CRYPTO_EX_INDEX_X509_STORE 4 -# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 -# define CRYPTO_EX_INDEX_DH 6 -# define CRYPTO_EX_INDEX_DSA 7 -# define CRYPTO_EX_INDEX_EC_KEY 8 -# define CRYPTO_EX_INDEX_RSA 9 -# define CRYPTO_EX_INDEX_ENGINE 10 -# define CRYPTO_EX_INDEX_UI 11 -# define CRYPTO_EX_INDEX_BIO 12 -# define CRYPTO_EX_INDEX_APP 13 -# define CRYPTO_EX_INDEX_UI_METHOD 14 -# define CRYPTO_EX_INDEX_DRBG 15 -# define CRYPTO_EX_INDEX__COUNT 16 +int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); /* No longer needed, so this is a no-op */ #define OPENSSL_malloc_init() while(0) continue -int CRYPTO_mem_ctrl(int mode); - # define OPENSSL_malloc(num) \ CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) # define OPENSSL_zalloc(num) \ @@ -146,32 +124,127 @@ int CRYPTO_mem_ctrl(int mode); size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); size_t OPENSSL_strnlen(const char *str, size_t maxlen); -char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); -unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); +int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength, + const unsigned char *buf, size_t buflen, + const char sep); +char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen); +int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, size_t *buflen, + const char *str, const char sep); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *buflen); int OPENSSL_hexchar2int(unsigned char c); +int OPENSSL_strcasecmp(const char *s1, const char *s2); +int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n); # define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) +/* + * These functions return the values of OPENSSL_VERSION_MAJOR, + * OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, OPENSSL_VERSION_PRE_RELEASE + * and OPENSSL_VERSION_BUILD_METADATA, respectively. + */ +unsigned int OPENSSL_version_major(void); +unsigned int OPENSSL_version_minor(void); +unsigned int OPENSSL_version_patch(void); +const char *OPENSSL_version_pre_release(void); +const char *OPENSSL_version_build_metadata(void); + unsigned long OpenSSL_version_num(void); const char *OpenSSL_version(int type); -# define OPENSSL_VERSION 0 -# define OPENSSL_CFLAGS 1 -# define OPENSSL_BUILT_ON 2 -# define OPENSSL_PLATFORM 3 -# define OPENSSL_DIR 4 -# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION_STRING 6 +# define OPENSSL_FULL_VERSION_STRING 7 +# define OPENSSL_MODULES_DIR 8 +# define OPENSSL_CPU_INFO 9 + +const char *OPENSSL_info(int type); +/* + * The series starts at 1001 to avoid confusion with the OpenSSL_version + * types. + */ +# define OPENSSL_INFO_CONFIG_DIR 1001 +# define OPENSSL_INFO_ENGINES_DIR 1002 +# define OPENSSL_INFO_MODULES_DIR 1003 +# define OPENSSL_INFO_DSO_EXTENSION 1004 +# define OPENSSL_INFO_DIR_FILENAME_SEPARATOR 1005 +# define OPENSSL_INFO_LIST_SEPARATOR 1006 +# define OPENSSL_INFO_SEED_SOURCE 1007 +# define OPENSSL_INFO_CPU_SETTINGS 1008 int OPENSSL_issetugid(void); +struct crypto_ex_data_st { + OSSL_LIB_CTX *ctx; + STACK_OF(void) *sk; +}; + +SKM_DEFINE_STACK_OF_INTERNAL(void, void, void) +#define sk_void_num(sk) OPENSSL_sk_num(ossl_check_const_void_sk_type(sk)) +#define sk_void_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_void_sk_type(sk), (idx))) +#define sk_void_new(cmp) ((STACK_OF(void) *)OPENSSL_sk_new(ossl_check_void_compfunc_type(cmp))) +#define sk_void_new_null() ((STACK_OF(void) *)OPENSSL_sk_new_null()) +#define sk_void_new_reserve(cmp, n) ((STACK_OF(void) *)OPENSSL_sk_new_reserve(ossl_check_void_compfunc_type(cmp), (n))) +#define sk_void_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_void_sk_type(sk), (n)) +#define sk_void_free(sk) OPENSSL_sk_free(ossl_check_void_sk_type(sk)) +#define sk_void_zero(sk) OPENSSL_sk_zero(ossl_check_void_sk_type(sk)) +#define sk_void_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_void_sk_type(sk), (i))) +#define sk_void_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr))) +#define sk_void_push(sk, ptr) OPENSSL_sk_push(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_void_sk_type(sk))) +#define sk_void_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_void_sk_type(sk))) +#define sk_void_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_void_sk_type(sk),ossl_check_void_freefunc_type(freefunc)) +#define sk_void_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), (idx)) +#define sk_void_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_void_sk_type(sk), (idx), ossl_check_void_type(ptr))) +#define sk_void_find(sk, ptr) OPENSSL_sk_find(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr)) +#define sk_void_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr), pnum) +#define sk_void_sort(sk) OPENSSL_sk_sort(ossl_check_void_sk_type(sk)) +#define sk_void_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_void_sk_type(sk)) +#define sk_void_dup(sk) ((STACK_OF(void) *)OPENSSL_sk_dup(ossl_check_const_void_sk_type(sk))) +#define sk_void_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(void) *)OPENSSL_sk_deep_copy(ossl_check_const_void_sk_type(sk), ossl_check_void_copyfunc_type(copyfunc), ossl_check_void_freefunc_type(freefunc))) +#define sk_void_set_cmp_func(sk, cmp) ((sk_void_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_void_sk_type(sk), ossl_check_void_compfunc_type(cmp))) + + + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX_UI_METHOD 14 +# define CRYPTO_EX_INDEX_RAND_DRBG 15 +# define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG +# define CRYPTO_EX_INDEX_OSSL_LIB_CTX 16 +# define CRYPTO_EX_INDEX_EVP_PKEY 17 +# define CRYPTO_EX_INDEX__COUNT 18 + typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, - void *from_d, int idx, long argl, void *argp); + void **from_d, int idx, long argl, void *argp); __owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, - CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, - CRYPTO_EX_free *free_func); + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); /* No longer use an index. */ int CRYPTO_free_ex_index(int class_index, int idx); @@ -185,6 +258,10 @@ int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +/* Allocate a single item in the CRYPTO_EX_DATA variable */ +int CRYPTO_alloc_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad, + int idx); + /* * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular * index (relative to the class type involved) @@ -192,7 +269,7 @@ void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * This function cleans up all "ex_data" state. It mustn't be called under * potential race-conditions. @@ -239,11 +316,11 @@ typedef struct crypto_threadid_st { # define CRYPTO_THREADID_cpy(dest, src) # define CRYPTO_THREADID_hash(id) (0UL) -# if OPENSSL_API_COMPAT < 0x10000000L +# ifndef OPENSSL_NO_DEPRECATED_1_0_0 # define CRYPTO_set_id_callback(func) # define CRYPTO_get_id_callback() (NULL) # define CRYPTO_thread_id() (0UL) -# endif /* OPENSSL_API_COMPAT < 0x10000000L */ +# endif /* OPENSSL_NO_DEPRECATED_1_0_0 */ # define CRYPTO_set_dynlock_create_callback(dyn_create_function) # define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) @@ -251,33 +328,34 @@ typedef struct crypto_threadid_st { # define CRYPTO_get_dynlock_create_callback() (NULL) # define CRYPTO_get_dynlock_lock_callback() (NULL) # define CRYPTO_get_dynlock_destroy_callback() (NULL) -# endif /* OPENSSL_API_COMPAT < 0x10100000L */ +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ -int CRYPTO_set_mem_functions( - void *(*m) (size_t, const char *, int), - void *(*r) (void *, size_t, const char *, int), - void (*f) (void *, const char *, int)); -int CRYPTO_set_mem_debug(int flag); -void CRYPTO_get_mem_functions( - void *(**m) (size_t, const char *, int), - void *(**r) (void *, size_t, const char *, int), - void (**f) (void *, const char *, int)); +typedef void *(*CRYPTO_malloc_fn)(size_t num, const char *file, int line); +typedef void *(*CRYPTO_realloc_fn)(void *addr, size_t num, const char *file, + int line); +typedef void (*CRYPTO_free_fn)(void *addr, const char *file, int line); +int CRYPTO_set_mem_functions(CRYPTO_malloc_fn malloc_fn, + CRYPTO_realloc_fn realloc_fn, + CRYPTO_free_fn free_fn); +void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn, + CRYPTO_realloc_fn *realloc_fn, + CRYPTO_free_fn *free_fn); -void *CRYPTO_malloc(size_t num, const char *file, int line); -void *CRYPTO_zalloc(size_t num, const char *file, int line); -void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); -char *CRYPTO_strdup(const char *str, const char *file, int line); -char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strdup(const char *str, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); void CRYPTO_free(void *ptr, const char *file, int line); void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, const char *file, int line); -int CRYPTO_secure_malloc_init(size_t sz, int minsize); +int CRYPTO_secure_malloc_init(size_t sz, size_t minsize); int CRYPTO_secure_malloc_done(void); -void *CRYPTO_secure_malloc(size_t num, const char *file, int line); -void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); void CRYPTO_secure_free(void *ptr, const char *file, int line); void CRYPTO_secure_clear_free(void *ptr, size_t num, const char *file, int line); @@ -289,38 +367,53 @@ size_t CRYPTO_secure_used(void); void OPENSSL_cleanse(void *ptr, size_t len); # ifndef OPENSSL_NO_CRYPTO_MDEBUG -# define OPENSSL_mem_debug_push(info) \ - CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) -# define OPENSSL_mem_debug_pop() \ - CRYPTO_mem_debug_pop() -int CRYPTO_mem_debug_push(const char *info, const char *file, int line); -int CRYPTO_mem_debug_pop(void); -void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); - -/*- - * Debugging functions (enabled by CRYPTO_set_mem_debug(1)) - * The flag argument has the following significance: - * 0: called before the actual memory allocation has taken place - * 1: called after the actual memory allocation has taken place +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking */ -void CRYPTO_mem_debug_malloc(void *addr, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag, - const char *file, int line); -void CRYPTO_mem_debug_free(void *addr, int flag, - const char *file, int line); +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ -int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u), - void *u); -# ifndef OPENSSL_NO_STDIO -int CRYPTO_mem_leaks_fp(FILE *); +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() # endif -int CRYPTO_mem_leaks(BIO *bio); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_set_mem_debug(int flag); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_ctrl(int mode); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_push(const char *info, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_pop(void); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_malloc(void *addr, size_t num, + int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, + size_t num, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 +int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), + void *u); +# endif +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks_fp(FILE *); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks(BIO *bio); # endif +# endif /* OPENSSL_NO_CRYPTO_MDEBUG */ /* die if we have to */ ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) # endif # define OPENSSL_assert(e) \ @@ -328,14 +421,13 @@ ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line int OPENSSL_isservice(void); -int FIPS_mode(void); -int FIPS_mode_set(int r); - void OPENSSL_init(void); # ifdef OPENSSL_SYS_UNIX -void OPENSSL_fork_prepare(void); -void OPENSSL_fork_parent(void); -void OPENSSL_fork_child(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_prepare(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_parent(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_child(void); +# endif # endif struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); @@ -369,11 +461,17 @@ int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); # define OPENSSL_INIT_ENGINE_CAPI 0x00002000L # define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L # define OPENSSL_INIT_ENGINE_AFALG 0x00008000L -/* OPENSSL_INIT_ZLIB 0x00010000L */ +/* FREE: 0x00010000L */ # define OPENSSL_INIT_ATFORK 0x00020000L /* OPENSSL_INIT_BASE_ONLY 0x00040000L */ # define OPENSSL_INIT_NO_ATEXIT 0x00080000L -/* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */ +/* OPENSSL_INIT flag range 0x03f00000 reserved for OPENSSL_init_ssl() */ +/* FREE: 0x04000000L */ +/* FREE: 0x08000000L */ +/* FREE: 0x10000000L */ +/* FREE: 0x20000000L */ +/* FREE: 0x40000000L */ +/* FREE: 0x80000000L */ /* Max OPENSSL_INIT flag value is 0x80000000 */ /* openssl and dasync not counted as builtin */ @@ -382,12 +480,12 @@ int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ OPENSSL_INIT_ENGINE_PADLOCK) - /* Library initialisation functions */ void OPENSSL_cleanup(void); int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); int OPENSSL_atexit(void (*handler)(void)); void OPENSSL_thread_stop(void); +void OPENSSL_thread_stop_ex(OSSL_LIB_CTX *ctx); /* Low-level control of initialization */ OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); @@ -412,7 +510,13 @@ typedef LONG CRYPTO_ONCE; # define CRYPTO_ONCE_STATIC_INIT 0 # endif # else -# include +# if defined(__TANDEM) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# else +# include +# endif typedef pthread_once_t CRYPTO_ONCE; typedef pthread_key_t CRYPTO_THREAD_LOCAL; typedef pthread_t CRYPTO_THREAD_ID; @@ -438,6 +542,15 @@ int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); +OSSL_LIB_CTX *OSSL_LIB_CTX_new(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_from_dispatch(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_child(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file); +void OSSL_LIB_CTX_free(OSSL_LIB_CTX *); +OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx); # ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h.in new file mode 100644 index 00000000..fb0c7cbb --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h.in @@ -0,0 +1,535 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CRYPTO_H +# define OPENSSL_CRYPTO_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CRYPTO_H +# endif + +# include +# include + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif + +# include +# include +# include +# include +# include +# include + +# ifdef CHARSET_EBCDIC +# include +# endif + +/* + * Resolve problems on some operating systems with symbol names that clash + * one way or another + */ +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSLeay OpenSSL_version_num +# define SSLeay_version OpenSSL_version +# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER +# define SSLEAY_VERSION OPENSSL_VERSION +# define SSLEAY_CFLAGS OPENSSL_CFLAGS +# define SSLEAY_BUILT_ON OPENSSL_BUILT_ON +# define SSLEAY_PLATFORM OPENSSL_PLATFORM +# define SSLEAY_DIR OPENSSL_DIR + +/* + * Old type for allocating dynamic locks. No longer used. Use the new thread + * API instead. + */ +typedef struct { + int dummy; +} CRYPTO_dynlock; + +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ + +typedef void CRYPTO_RWLOCK; + +CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); +__owur int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +__owur int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); +void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); + +int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_or(uint64_t *val, uint64_t op, uint64_t *ret, + CRYPTO_RWLOCK *lock); +int CRYPTO_atomic_load(uint64_t *val, uint64_t *ret, CRYPTO_RWLOCK *lock); + +/* No longer needed, so this is a no-op */ +#define OPENSSL_malloc_init() while(0) continue + +# define OPENSSL_malloc(num) \ + CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_zalloc(num) \ + CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_realloc(addr, num) \ + CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_realloc(addr, old_num, num) \ + CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_free(addr, num) \ + CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_free(addr) \ + CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_memdup(str, s) \ + CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strdup(str) \ + CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strndup(str, n) \ + CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_malloc(num) \ + CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_zalloc(num) \ + CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_free(addr) \ + CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_clear_free(addr, num) \ + CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_actual_size(ptr) \ + CRYPTO_secure_actual_size(ptr) + +size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); +size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); +size_t OPENSSL_strnlen(const char *str, size_t maxlen); +int OPENSSL_buf2hexstr_ex(char *str, size_t str_n, size_t *strlength, + const unsigned char *buf, size_t buflen, + const char sep); +char *OPENSSL_buf2hexstr(const unsigned char *buf, long buflen); +int OPENSSL_hexstr2buf_ex(unsigned char *buf, size_t buf_n, size_t *buflen, + const char *str, const char sep); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *buflen); +int OPENSSL_hexchar2int(unsigned char c); +int OPENSSL_strcasecmp(const char *s1, const char *s2); +int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n); + +# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) + +/* + * These functions return the values of OPENSSL_VERSION_MAJOR, + * OPENSSL_VERSION_MINOR, OPENSSL_VERSION_PATCH, OPENSSL_VERSION_PRE_RELEASE + * and OPENSSL_VERSION_BUILD_METADATA, respectively. + */ +unsigned int OPENSSL_version_major(void); +unsigned int OPENSSL_version_minor(void); +unsigned int OPENSSL_version_patch(void); +const char *OPENSSL_version_pre_release(void); +const char *OPENSSL_version_build_metadata(void); + +unsigned long OpenSSL_version_num(void); +const char *OpenSSL_version(int type); +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 +# define OPENSSL_VERSION_STRING 6 +# define OPENSSL_FULL_VERSION_STRING 7 +# define OPENSSL_MODULES_DIR 8 +# define OPENSSL_CPU_INFO 9 + +const char *OPENSSL_info(int type); +/* + * The series starts at 1001 to avoid confusion with the OpenSSL_version + * types. + */ +# define OPENSSL_INFO_CONFIG_DIR 1001 +# define OPENSSL_INFO_ENGINES_DIR 1002 +# define OPENSSL_INFO_MODULES_DIR 1003 +# define OPENSSL_INFO_DSO_EXTENSION 1004 +# define OPENSSL_INFO_DIR_FILENAME_SEPARATOR 1005 +# define OPENSSL_INFO_LIST_SEPARATOR 1006 +# define OPENSSL_INFO_SEED_SOURCE 1007 +# define OPENSSL_INFO_CPU_SETTINGS 1008 + +int OPENSSL_issetugid(void); + +struct crypto_ex_data_st { + OSSL_LIB_CTX *ctx; + STACK_OF(void) *sk; +}; + +{- + generate_stack_macros("void"); +-} + + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX_UI_METHOD 14 +# define CRYPTO_EX_INDEX_RAND_DRBG 15 +# define CRYPTO_EX_INDEX_DRBG CRYPTO_EX_INDEX_RAND_DRBG +# define CRYPTO_EX_INDEX_OSSL_LIB_CTX 16 +# define CRYPTO_EX_INDEX_EVP_PKEY 17 +# define CRYPTO_EX_INDEX__COUNT 18 + +typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, + void **from_d, int idx, long argl, void *argp); +__owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, + CRYPTO_EX_new *new_func, + CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +/* No longer use an index. */ +int CRYPTO_free_ex_index(int class_index, int idx); + +/* + * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a + * given class (invokes whatever per-class callbacks are applicable) + */ +int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, + const CRYPTO_EX_DATA *from); + +void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); + +/* Allocate a single item in the CRYPTO_EX_DATA variable */ +int CRYPTO_alloc_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad, + int idx); + +/* + * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular + * index (relative to the class type involved) + */ +int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); +void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * This function cleans up all "ex_data" state. It mustn't be called under + * potential race-conditions. + */ +# define CRYPTO_cleanup_all_ex_data() while(0) continue + +/* + * The old locking functions have been removed completely without compatibility + * macros. This is because the old functions either could not properly report + * errors, or the returned error values were not clearly documented. + * Replacing the locking functions with no-ops would cause race condition + * issues in the affected applications. It is far better for them to fail at + * compile time. + * On the other hand, the locking callbacks are no longer used. Consequently, + * the callback management functions can be safely replaced with no-op macros. + */ +# define CRYPTO_num_locks() (1) +# define CRYPTO_set_locking_callback(func) +# define CRYPTO_get_locking_callback() (NULL) +# define CRYPTO_set_add_lock_callback(func) +# define CRYPTO_get_add_lock_callback() (NULL) + +/* + * These defines where used in combination with the old locking callbacks, + * they are not called anymore, but old code that's not called might still + * use them. + */ +# define CRYPTO_LOCK 1 +# define CRYPTO_UNLOCK 2 +# define CRYPTO_READ 4 +# define CRYPTO_WRITE 8 + +/* This structure is no longer used */ +typedef struct crypto_threadid_st { + int dummy; +} CRYPTO_THREADID; +/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ +# define CRYPTO_THREADID_set_numeric(id, val) +# define CRYPTO_THREADID_set_pointer(id, ptr) +# define CRYPTO_THREADID_set_callback(threadid_func) (0) +# define CRYPTO_THREADID_get_callback() (NULL) +# define CRYPTO_THREADID_current(id) +# define CRYPTO_THREADID_cmp(a, b) (-1) +# define CRYPTO_THREADID_cpy(dest, src) +# define CRYPTO_THREADID_hash(id) (0UL) + +# ifndef OPENSSL_NO_DEPRECATED_1_0_0 +# define CRYPTO_set_id_callback(func) +# define CRYPTO_get_id_callback() (NULL) +# define CRYPTO_thread_id() (0UL) +# endif /* OPENSSL_NO_DEPRECATED_1_0_0 */ + +# define CRYPTO_set_dynlock_create_callback(dyn_create_function) +# define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) +# define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function) +# define CRYPTO_get_dynlock_create_callback() (NULL) +# define CRYPTO_get_dynlock_lock_callback() (NULL) +# define CRYPTO_get_dynlock_destroy_callback() (NULL) +# endif /* OPENSSL_NO_DEPRECATED_1_1_0 */ + +typedef void *(*CRYPTO_malloc_fn)(size_t num, const char *file, int line); +typedef void *(*CRYPTO_realloc_fn)(void *addr, size_t num, const char *file, + int line); +typedef void (*CRYPTO_free_fn)(void *addr, const char *file, int line); +int CRYPTO_set_mem_functions(CRYPTO_malloc_fn malloc_fn, + CRYPTO_realloc_fn realloc_fn, + CRYPTO_free_fn free_fn); +void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn, + CRYPTO_realloc_fn *realloc_fn, + CRYPTO_free_fn *free_fn); + +OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strdup(const char *str, const char *file, int line); +OSSL_CRYPTO_ALLOC char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +void CRYPTO_free(void *ptr, const char *file, int line); +void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); +void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); +void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, + const char *file, int line); + +int CRYPTO_secure_malloc_init(size_t sz, size_t minsize); +int CRYPTO_secure_malloc_done(void); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +void CRYPTO_secure_free(void *ptr, const char *file, int line); +void CRYPTO_secure_clear_free(void *ptr, size_t num, + const char *file, int line); +int CRYPTO_secure_allocated(const void *ptr); +int CRYPTO_secure_malloc_initialized(void); +size_t CRYPTO_secure_actual_size(void *ptr); +size_t CRYPTO_secure_used(void); + +void OPENSSL_cleanse(void *ptr, size_t len); + +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking + */ +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ + +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_set_mem_debug(int flag); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_ctrl(int mode); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_push(const char *info, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_debug_pop(void); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_malloc(void *addr, size_t num, + int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, + size_t num, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); +OSSL_DEPRECATEDIN_3_0 +int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), + void *u); +# endif +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks_fp(FILE *); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int CRYPTO_mem_leaks(BIO *bio); +# endif +# endif /* OPENSSL_NO_CRYPTO_MDEBUG */ + +/* die if we have to */ +ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) +# endif +# define OPENSSL_assert(e) \ + (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1)) + +int OPENSSL_isservice(void); + +void OPENSSL_init(void); +# ifdef OPENSSL_SYS_UNIX +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_prepare(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_parent(void); +OSSL_DEPRECATEDIN_3_0 void OPENSSL_fork_child(void); +# endif +# endif + +struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); +int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec); +int OPENSSL_gmtime_diff(int *pday, int *psec, + const struct tm *from, const struct tm *to); + +/* + * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. + * It takes an amount of time dependent on |len|, but independent of the + * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements + * into a defined order as the return value when a != b is undefined, other + * than to be non-zero. + */ +int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); + +/* Standard initialisation options */ +# define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L +# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L +# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L +# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L +# define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L +# define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L +# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L +# define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L +# define OPENSSL_INIT_ASYNC 0x00000100L +# define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L +# define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L +# define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L +# define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L +# define OPENSSL_INIT_ENGINE_CAPI 0x00002000L +# define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L +# define OPENSSL_INIT_ENGINE_AFALG 0x00008000L +/* FREE: 0x00010000L */ +# define OPENSSL_INIT_ATFORK 0x00020000L +/* OPENSSL_INIT_BASE_ONLY 0x00040000L */ +# define OPENSSL_INIT_NO_ATEXIT 0x00080000L +/* OPENSSL_INIT flag range 0x03f00000 reserved for OPENSSL_init_ssl() */ +/* FREE: 0x04000000L */ +/* FREE: 0x08000000L */ +/* FREE: 0x10000000L */ +/* FREE: 0x20000000L */ +/* FREE: 0x40000000L */ +/* FREE: 0x80000000L */ +/* Max OPENSSL_INIT flag value is 0x80000000 */ + +/* openssl and dasync not counted as builtin */ +# define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ + (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ + | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ + OPENSSL_INIT_ENGINE_PADLOCK) + +/* Library initialisation functions */ +void OPENSSL_cleanup(void); +int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +int OPENSSL_atexit(void (*handler)(void)); +void OPENSSL_thread_stop(void); +void OPENSSL_thread_stop_ex(OSSL_LIB_CTX *ctx); + +/* Low-level control of initialization */ +OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); +# ifndef OPENSSL_NO_STDIO +int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings, + const char *config_filename); +void OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *settings, + unsigned long flags); +int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, + const char *config_appname); +# endif +void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings); + +# if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) +# if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include in order to use this */ +typedef DWORD CRYPTO_THREAD_LOCAL; +typedef DWORD CRYPTO_THREAD_ID; + +typedef LONG CRYPTO_ONCE; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif +# else +# if defined(__TANDEM) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# else +# include +# endif +typedef pthread_once_t CRYPTO_ONCE; +typedef pthread_key_t CRYPTO_THREAD_LOCAL; +typedef pthread_t CRYPTO_THREAD_ID; + +# define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT +# endif +# endif + +# if !defined(CRYPTO_ONCE_STATIC_INIT) +typedef unsigned int CRYPTO_ONCE; +typedef unsigned int CRYPTO_THREAD_LOCAL; +typedef unsigned int CRYPTO_THREAD_ID; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif + +int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); + +int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)); +void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key); +int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val); +int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); + +CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); +int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); + +OSSL_LIB_CTX *OSSL_LIB_CTX_new(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_from_dispatch(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +OSSL_LIB_CTX *OSSL_LIB_CTX_new_child(const OSSL_CORE_HANDLE *handle, + const OSSL_DISPATCH *in); +int OSSL_LIB_CTX_load_config(OSSL_LIB_CTX *ctx, const char *config_file); +void OSSL_LIB_CTX_free(OSSL_LIB_CTX *); +OSSL_LIB_CTX *OSSL_LIB_CTX_get0_global_default(void); +OSSL_LIB_CTX *OSSL_LIB_CTX_set0_default(OSSL_LIB_CTX *libctx); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cryptoerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cryptoerr.h index 3db5a4ee..e84b12df 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cryptoerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cryptoerr.h @@ -1,57 +1,55 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CRYPTOERR_H -# define HEADER_CRYPTOERR_H +#ifndef OPENSSL_CRYPTOERR_H +# define OPENSSL_CRYPTOERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CRYPTO_strings(void); -/* - * CRYPTO function codes. - */ -# define CRYPTO_F_CMAC_CTX_NEW 120 -# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 -# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 -# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 -# define CRYPTO_F_CRYPTO_MEMDUP 115 -# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 -# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 121 -# define CRYPTO_F_CRYPTO_OCB128_INIT 122 -# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 -# define CRYPTO_F_FIPS_MODE_SET 109 -# define CRYPTO_F_GET_AND_LOCK 113 -# define CRYPTO_F_OPENSSL_ATEXIT 114 -# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 -# define CRYPTO_F_OPENSSL_FOPEN 119 -# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 -# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 -# define CRYPTO_F_OPENSSL_LH_NEW 126 -# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 127 -# define CRYPTO_F_OPENSSL_SK_DUP 128 -# define CRYPTO_F_PKEY_HMAC_INIT 123 -# define CRYPTO_F_PKEY_POLY1305_INIT 124 -# define CRYPTO_F_PKEY_SIPHASH_INIT 125 -# define CRYPTO_F_SK_RESERVE 129 /* * CRYPTO reason codes. */ -# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 +# define CRYPTO_R_BAD_ALGORITHM_NAME 117 +# define CRYPTO_R_CONFLICTING_NAMES 118 +# define CRYPTO_R_HEX_STRING_TOO_SHORT 121 # define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 +# define CRYPTO_R_INSUFFICIENT_DATA_SPACE 106 +# define CRYPTO_R_INSUFFICIENT_PARAM_SIZE 107 +# define CRYPTO_R_INSUFFICIENT_SECURE_DATA_SPACE 108 +# define CRYPTO_R_INTEGER_OVERFLOW 127 +# define CRYPTO_R_INVALID_NEGATIVE_VALUE 122 +# define CRYPTO_R_INVALID_NULL_ARGUMENT 109 +# define CRYPTO_R_INVALID_OSSL_PARAM_TYPE 110 +# define CRYPTO_R_NO_PARAMS_TO_MERGE 131 +# define CRYPTO_R_NO_SPACE_FOR_TERMINATING_NULL 128 # define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 +# define CRYPTO_R_PARAM_CANNOT_BE_REPRESENTED_EXACTLY 123 +# define CRYPTO_R_PARAM_NOT_INTEGER_TYPE 124 +# define CRYPTO_R_PARAM_OF_INCOMPATIBLE_TYPE 129 +# define CRYPTO_R_PARAM_UNSIGNED_INTEGER_NEGATIVE_VALUE_UNSUPPORTED 125 +# define CRYPTO_R_PARAM_UNSUPPORTED_FLOATING_POINT_FORMAT 130 +# define CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION 126 +# define CRYPTO_R_PROVIDER_ALREADY_EXISTS 104 +# define CRYPTO_R_PROVIDER_SECTION_ERROR 105 +# define CRYPTO_R_RANDOM_SECTION_ERROR 119 +# define CRYPTO_R_SECURE_MALLOC_FAILURE 111 +# define CRYPTO_R_STRING_TOO_LONG 112 +# define CRYPTO_R_TOO_MANY_BYTES 113 +# define CRYPTO_R_TOO_MANY_RECORDS 114 +# define CRYPTO_R_TOO_SMALL_BUFFER 116 +# define CRYPTO_R_UNKNOWN_NAME_IN_RANDOM_SECTION 120 +# define CRYPTO_R_ZERO_LENGTH_NUMBER 115 #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cryptoerr_legacy.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cryptoerr_legacy.h new file mode 100644 index 00000000..ccab33a5 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cryptoerr_legacy.h @@ -0,0 +1,1466 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file preserves symbols from pre-3.0 OpenSSL. + * It should never be included directly, as it's already included + * by the public {lib}err.h headers, and since it will go away some + * time in the future. + */ + +#ifndef OPENSSL_CRYPTOERR_LEGACY_H +# define OPENSSL_CRYPTOERR_LEGACY_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ERR_load_ASN1_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_ASYNC_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BIO_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BN_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_BUF_strings(void); +# ifndef OPENSSL_NO_CMS +OSSL_DEPRECATEDIN_3_0 int ERR_load_CMS_strings(void); +# endif +# ifndef OPENSSL_NO_COMP +OSSL_DEPRECATEDIN_3_0 int ERR_load_COMP_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_CONF_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_CRYPTO_strings(void); +# ifndef OPENSSL_NO_CT +OSSL_DEPRECATEDIN_3_0 int ERR_load_CT_strings(void); +# endif +# ifndef OPENSSL_NO_DH +OSSL_DEPRECATEDIN_3_0 int ERR_load_DH_strings(void); +# endif +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 int ERR_load_DSA_strings(void); +# endif +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 int ERR_load_EC_strings(void); +# endif +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int ERR_load_ENGINE_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_ERR_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_EVP_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_KDF_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_OBJ_strings(void); +# ifndef OPENSSL_NO_OCSP +OSSL_DEPRECATEDIN_3_0 int ERR_load_OCSP_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_PEM_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS12_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_PKCS7_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_RAND_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_RSA_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_OSSL_STORE_strings(void); +# ifndef OPENSSL_NO_TS +OSSL_DEPRECATEDIN_3_0 int ERR_load_TS_strings(void); +# endif +OSSL_DEPRECATEDIN_3_0 int ERR_load_UI_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_X509_strings(void); +OSSL_DEPRECATEDIN_3_0 int ERR_load_X509V3_strings(void); + +/* Collected _F_ macros from OpenSSL 1.1.1 */ + +/* + * ASN1 function codes. + */ +# define ASN1_F_A2D_ASN1_OBJECT 0 +# define ASN1_F_A2I_ASN1_INTEGER 0 +# define ASN1_F_A2I_ASN1_STRING 0 +# define ASN1_F_APPEND_EXP 0 +# define ASN1_F_ASN1_BIO_INIT 0 +# define ASN1_F_ASN1_BIT_STRING_SET_BIT 0 +# define ASN1_F_ASN1_CB 0 +# define ASN1_F_ASN1_CHECK_TLEN 0 +# define ASN1_F_ASN1_COLLECT 0 +# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 0 +# define ASN1_F_ASN1_D2I_FP 0 +# define ASN1_F_ASN1_D2I_READ_BIO 0 +# define ASN1_F_ASN1_DIGEST 0 +# define ASN1_F_ASN1_DO_ADB 0 +# define ASN1_F_ASN1_DO_LOCK 0 +# define ASN1_F_ASN1_DUP 0 +# define ASN1_F_ASN1_ENC_SAVE 0 +# define ASN1_F_ASN1_EX_C2I 0 +# define ASN1_F_ASN1_FIND_END 0 +# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 0 +# define ASN1_F_ASN1_GENERATE_V3 0 +# define ASN1_F_ASN1_GET_INT64 0 +# define ASN1_F_ASN1_GET_OBJECT 0 +# define ASN1_F_ASN1_GET_UINT64 0 +# define ASN1_F_ASN1_I2D_BIO 0 +# define ASN1_F_ASN1_I2D_FP 0 +# define ASN1_F_ASN1_ITEM_D2I_FP 0 +# define ASN1_F_ASN1_ITEM_DUP 0 +# define ASN1_F_ASN1_ITEM_EMBED_D2I 0 +# define ASN1_F_ASN1_ITEM_EMBED_NEW 0 +# define ASN1_F_ASN1_ITEM_FLAGS_I2D 0 +# define ASN1_F_ASN1_ITEM_I2D_BIO 0 +# define ASN1_F_ASN1_ITEM_I2D_FP 0 +# define ASN1_F_ASN1_ITEM_PACK 0 +# define ASN1_F_ASN1_ITEM_SIGN 0 +# define ASN1_F_ASN1_ITEM_SIGN_CTX 0 +# define ASN1_F_ASN1_ITEM_UNPACK 0 +# define ASN1_F_ASN1_ITEM_VERIFY 0 +# define ASN1_F_ASN1_MBSTRING_NCOPY 0 +# define ASN1_F_ASN1_OBJECT_NEW 0 +# define ASN1_F_ASN1_OUTPUT_DATA 0 +# define ASN1_F_ASN1_PCTX_NEW 0 +# define ASN1_F_ASN1_PRIMITIVE_NEW 0 +# define ASN1_F_ASN1_SCTX_NEW 0 +# define ASN1_F_ASN1_SIGN 0 +# define ASN1_F_ASN1_STR2TYPE 0 +# define ASN1_F_ASN1_STRING_GET_INT64 0 +# define ASN1_F_ASN1_STRING_GET_UINT64 0 +# define ASN1_F_ASN1_STRING_SET 0 +# define ASN1_F_ASN1_STRING_TABLE_ADD 0 +# define ASN1_F_ASN1_STRING_TO_BN 0 +# define ASN1_F_ASN1_STRING_TYPE_NEW 0 +# define ASN1_F_ASN1_TEMPLATE_EX_D2I 0 +# define ASN1_F_ASN1_TEMPLATE_NEW 0 +# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 0 +# define ASN1_F_ASN1_TIME_ADJ 0 +# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 0 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 0 +# define ASN1_F_ASN1_UTCTIME_ADJ 0 +# define ASN1_F_ASN1_VERIFY 0 +# define ASN1_F_B64_READ_ASN1 0 +# define ASN1_F_B64_WRITE_ASN1 0 +# define ASN1_F_BIO_NEW_NDEF 0 +# define ASN1_F_BITSTR_CB 0 +# define ASN1_F_BN_TO_ASN1_STRING 0 +# define ASN1_F_C2I_ASN1_BIT_STRING 0 +# define ASN1_F_C2I_ASN1_INTEGER 0 +# define ASN1_F_C2I_ASN1_OBJECT 0 +# define ASN1_F_C2I_IBUF 0 +# define ASN1_F_C2I_UINT64_INT 0 +# define ASN1_F_COLLECT_DATA 0 +# define ASN1_F_D2I_ASN1_OBJECT 0 +# define ASN1_F_D2I_ASN1_UINTEGER 0 +# define ASN1_F_D2I_AUTOPRIVATEKEY 0 +# define ASN1_F_D2I_PRIVATEKEY 0 +# define ASN1_F_D2I_PUBLICKEY 0 +# define ASN1_F_DO_BUF 0 +# define ASN1_F_DO_CREATE 0 +# define ASN1_F_DO_DUMP 0 +# define ASN1_F_DO_TCREATE 0 +# define ASN1_F_I2A_ASN1_OBJECT 0 +# define ASN1_F_I2D_ASN1_BIO_STREAM 0 +# define ASN1_F_I2D_ASN1_OBJECT 0 +# define ASN1_F_I2D_DSA_PUBKEY 0 +# define ASN1_F_I2D_EC_PUBKEY 0 +# define ASN1_F_I2D_PRIVATEKEY 0 +# define ASN1_F_I2D_PUBLICKEY 0 +# define ASN1_F_I2D_RSA_PUBKEY 0 +# define ASN1_F_LONG_C2I 0 +# define ASN1_F_NDEF_PREFIX 0 +# define ASN1_F_NDEF_SUFFIX 0 +# define ASN1_F_OID_MODULE_INIT 0 +# define ASN1_F_PARSE_TAGGING 0 +# define ASN1_F_PKCS5_PBE2_SET_IV 0 +# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 0 +# define ASN1_F_PKCS5_PBE_SET 0 +# define ASN1_F_PKCS5_PBE_SET0_ALGOR 0 +# define ASN1_F_PKCS5_PBKDF2_SET 0 +# define ASN1_F_PKCS5_SCRYPT_SET 0 +# define ASN1_F_SMIME_READ_ASN1 0 +# define ASN1_F_SMIME_TEXT 0 +# define ASN1_F_STABLE_GET 0 +# define ASN1_F_STBL_MODULE_INIT 0 +# define ASN1_F_UINT32_C2I 0 +# define ASN1_F_UINT32_NEW 0 +# define ASN1_F_UINT64_C2I 0 +# define ASN1_F_UINT64_NEW 0 +# define ASN1_F_X509_CRL_ADD0_REVOKED 0 +# define ASN1_F_X509_INFO_NEW 0 +# define ASN1_F_X509_NAME_ENCODE 0 +# define ASN1_F_X509_NAME_EX_D2I 0 +# define ASN1_F_X509_NAME_EX_NEW 0 +# define ASN1_F_X509_PKEY_NEW 0 + +/* + * ASYNC function codes. + */ +# define ASYNC_F_ASYNC_CTX_NEW 0 +# define ASYNC_F_ASYNC_INIT_THREAD 0 +# define ASYNC_F_ASYNC_JOB_NEW 0 +# define ASYNC_F_ASYNC_PAUSE_JOB 0 +# define ASYNC_F_ASYNC_START_FUNC 0 +# define ASYNC_F_ASYNC_START_JOB 0 +# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 0 + +/* + * BIO function codes. + */ +# define BIO_F_ACPT_STATE 0 +# define BIO_F_ADDRINFO_WRAP 0 +# define BIO_F_ADDR_STRINGS 0 +# define BIO_F_BIO_ACCEPT 0 +# define BIO_F_BIO_ACCEPT_EX 0 +# define BIO_F_BIO_ACCEPT_NEW 0 +# define BIO_F_BIO_ADDR_NEW 0 +# define BIO_F_BIO_BIND 0 +# define BIO_F_BIO_CALLBACK_CTRL 0 +# define BIO_F_BIO_CONNECT 0 +# define BIO_F_BIO_CONNECT_NEW 0 +# define BIO_F_BIO_CTRL 0 +# define BIO_F_BIO_GETS 0 +# define BIO_F_BIO_GET_HOST_IP 0 +# define BIO_F_BIO_GET_NEW_INDEX 0 +# define BIO_F_BIO_GET_PORT 0 +# define BIO_F_BIO_LISTEN 0 +# define BIO_F_BIO_LOOKUP 0 +# define BIO_F_BIO_LOOKUP_EX 0 +# define BIO_F_BIO_MAKE_PAIR 0 +# define BIO_F_BIO_METH_NEW 0 +# define BIO_F_BIO_NEW 0 +# define BIO_F_BIO_NEW_DGRAM_SCTP 0 +# define BIO_F_BIO_NEW_FILE 0 +# define BIO_F_BIO_NEW_MEM_BUF 0 +# define BIO_F_BIO_NREAD 0 +# define BIO_F_BIO_NREAD0 0 +# define BIO_F_BIO_NWRITE 0 +# define BIO_F_BIO_NWRITE0 0 +# define BIO_F_BIO_PARSE_HOSTSERV 0 +# define BIO_F_BIO_PUTS 0 +# define BIO_F_BIO_READ 0 +# define BIO_F_BIO_READ_EX 0 +# define BIO_F_BIO_READ_INTERN 0 +# define BIO_F_BIO_SOCKET 0 +# define BIO_F_BIO_SOCKET_NBIO 0 +# define BIO_F_BIO_SOCK_INFO 0 +# define BIO_F_BIO_SOCK_INIT 0 +# define BIO_F_BIO_WRITE 0 +# define BIO_F_BIO_WRITE_EX 0 +# define BIO_F_BIO_WRITE_INTERN 0 +# define BIO_F_BUFFER_CTRL 0 +# define BIO_F_CONN_CTRL 0 +# define BIO_F_CONN_STATE 0 +# define BIO_F_DGRAM_SCTP_NEW 0 +# define BIO_F_DGRAM_SCTP_READ 0 +# define BIO_F_DGRAM_SCTP_WRITE 0 +# define BIO_F_DOAPR_OUTCH 0 +# define BIO_F_FILE_CTRL 0 +# define BIO_F_FILE_READ 0 +# define BIO_F_LINEBUFFER_CTRL 0 +# define BIO_F_LINEBUFFER_NEW 0 +# define BIO_F_MEM_WRITE 0 +# define BIO_F_NBIOF_NEW 0 +# define BIO_F_SLG_WRITE 0 +# define BIO_F_SSL_NEW 0 + +/* + * BN function codes. + */ +# define BN_F_BNRAND 0 +# define BN_F_BNRAND_RANGE 0 +# define BN_F_BN_BLINDING_CONVERT_EX 0 +# define BN_F_BN_BLINDING_CREATE_PARAM 0 +# define BN_F_BN_BLINDING_INVERT_EX 0 +# define BN_F_BN_BLINDING_NEW 0 +# define BN_F_BN_BLINDING_UPDATE 0 +# define BN_F_BN_BN2DEC 0 +# define BN_F_BN_BN2HEX 0 +# define BN_F_BN_COMPUTE_WNAF 0 +# define BN_F_BN_CTX_GET 0 +# define BN_F_BN_CTX_NEW 0 +# define BN_F_BN_CTX_START 0 +# define BN_F_BN_DIV 0 +# define BN_F_BN_DIV_RECP 0 +# define BN_F_BN_EXP 0 +# define BN_F_BN_EXPAND_INTERNAL 0 +# define BN_F_BN_GENCB_NEW 0 +# define BN_F_BN_GENERATE_DSA_NONCE 0 +# define BN_F_BN_GENERATE_PRIME_EX 0 +# define BN_F_BN_GF2M_MOD 0 +# define BN_F_BN_GF2M_MOD_EXP 0 +# define BN_F_BN_GF2M_MOD_MUL 0 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 0 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 0 +# define BN_F_BN_GF2M_MOD_SQR 0 +# define BN_F_BN_GF2M_MOD_SQRT 0 +# define BN_F_BN_LSHIFT 0 +# define BN_F_BN_MOD_EXP2_MONT 0 +# define BN_F_BN_MOD_EXP_MONT 0 +# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 0 +# define BN_F_BN_MOD_EXP_MONT_WORD 0 +# define BN_F_BN_MOD_EXP_RECP 0 +# define BN_F_BN_MOD_EXP_SIMPLE 0 +# define BN_F_BN_MOD_INVERSE 0 +# define BN_F_BN_MOD_INVERSE_NO_BRANCH 0 +# define BN_F_BN_MOD_LSHIFT_QUICK 0 +# define BN_F_BN_MOD_SQRT 0 +# define BN_F_BN_MONT_CTX_NEW 0 +# define BN_F_BN_MPI2BN 0 +# define BN_F_BN_NEW 0 +# define BN_F_BN_POOL_GET 0 +# define BN_F_BN_RAND 0 +# define BN_F_BN_RAND_RANGE 0 +# define BN_F_BN_RECP_CTX_NEW 0 +# define BN_F_BN_RSHIFT 0 +# define BN_F_BN_SET_WORDS 0 +# define BN_F_BN_STACK_PUSH 0 +# define BN_F_BN_USUB 0 + +/* + * BUF function codes. + */ +# define BUF_F_BUF_MEM_GROW 0 +# define BUF_F_BUF_MEM_GROW_CLEAN 0 +# define BUF_F_BUF_MEM_NEW 0 + +# ifndef OPENSSL_NO_CMS +/* + * CMS function codes. + */ +# define CMS_F_CHECK_CONTENT 0 +# define CMS_F_CMS_ADD0_CERT 0 +# define CMS_F_CMS_ADD0_RECIPIENT_KEY 0 +# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 0 +# define CMS_F_CMS_ADD1_RECEIPTREQUEST 0 +# define CMS_F_CMS_ADD1_RECIPIENT_CERT 0 +# define CMS_F_CMS_ADD1_SIGNER 0 +# define CMS_F_CMS_ADD1_SIGNINGTIME 0 +# define CMS_F_CMS_COMPRESS 0 +# define CMS_F_CMS_COMPRESSEDDATA_CREATE 0 +# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 0 +# define CMS_F_CMS_COPY_CONTENT 0 +# define CMS_F_CMS_COPY_MESSAGEDIGEST 0 +# define CMS_F_CMS_DATA 0 +# define CMS_F_CMS_DATAFINAL 0 +# define CMS_F_CMS_DATAINIT 0 +# define CMS_F_CMS_DECRYPT 0 +# define CMS_F_CMS_DECRYPT_SET1_KEY 0 +# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 0 +# define CMS_F_CMS_DECRYPT_SET1_PKEY 0 +# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 0 +# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 0 +# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 0 +# define CMS_F_CMS_DIGEST_VERIFY 0 +# define CMS_F_CMS_ENCODE_RECEIPT 0 +# define CMS_F_CMS_ENCRYPT 0 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 0 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 0 +# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 0 +# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 0 +# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 0 +# define CMS_F_CMS_ENVELOPEDDATA_CREATE 0 +# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 0 +# define CMS_F_CMS_ENVELOPED_DATA_INIT 0 +# define CMS_F_CMS_ENV_ASN1_CTRL 0 +# define CMS_F_CMS_FINAL 0 +# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 0 +# define CMS_F_CMS_GET0_CONTENT 0 +# define CMS_F_CMS_GET0_ECONTENT_TYPE 0 +# define CMS_F_CMS_GET0_ENVELOPED 0 +# define CMS_F_CMS_GET0_REVOCATION_CHOICES 0 +# define CMS_F_CMS_GET0_SIGNED 0 +# define CMS_F_CMS_MSGSIGDIGEST_ADD1 0 +# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 0 +# define CMS_F_CMS_RECEIPT_VERIFY 0 +# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 0 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 0 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 0 +# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 0 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 0 +# define CMS_F_CMS_SD_ASN1_CTRL 0 +# define CMS_F_CMS_SET1_IAS 0 +# define CMS_F_CMS_SET1_KEYID 0 +# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 0 +# define CMS_F_CMS_SET_DETACHED 0 +# define CMS_F_CMS_SIGN 0 +# define CMS_F_CMS_SIGNED_DATA_INIT 0 +# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 0 +# define CMS_F_CMS_SIGNERINFO_SIGN 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 0 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 0 +# define CMS_F_CMS_SIGN_RECEIPT 0 +# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 0 +# define CMS_F_CMS_STREAM 0 +# define CMS_F_CMS_UNCOMPRESS 0 +# define CMS_F_CMS_VERIFY 0 +# define CMS_F_KEK_UNWRAP_KEY 0 +# endif + +# ifndef OPENSSL_NO_COMP +/* + * COMP function codes. + */ +# define COMP_F_BIO_ZLIB_FLUSH 0 +# define COMP_F_BIO_ZLIB_NEW 0 +# define COMP_F_BIO_ZLIB_READ 0 +# define COMP_F_BIO_ZLIB_WRITE 0 +# define COMP_F_COMP_CTX_NEW 0 +# endif + +/* + * CONF function codes. + */ +# define CONF_F_CONF_DUMP_FP 0 +# define CONF_F_CONF_LOAD 0 +# define CONF_F_CONF_LOAD_FP 0 +# define CONF_F_CONF_PARSE_LIST 0 +# define CONF_F_DEF_LOAD 0 +# define CONF_F_DEF_LOAD_BIO 0 +# define CONF_F_GET_NEXT_FILE 0 +# define CONF_F_MODULE_ADD 0 +# define CONF_F_MODULE_INIT 0 +# define CONF_F_MODULE_LOAD_DSO 0 +# define CONF_F_MODULE_RUN 0 +# define CONF_F_NCONF_DUMP_BIO 0 +# define CONF_F_NCONF_DUMP_FP 0 +# define CONF_F_NCONF_GET_NUMBER_E 0 +# define CONF_F_NCONF_GET_SECTION 0 +# define CONF_F_NCONF_GET_STRING 0 +# define CONF_F_NCONF_LOAD 0 +# define CONF_F_NCONF_LOAD_BIO 0 +# define CONF_F_NCONF_LOAD_FP 0 +# define CONF_F_NCONF_NEW 0 +# define CONF_F_PROCESS_INCLUDE 0 +# define CONF_F_SSL_MODULE_INIT 0 +# define CONF_F_STR_COPY 0 + +/* + * CRYPTO function codes. + */ +# define CRYPTO_F_CMAC_CTX_NEW 0 +# define CRYPTO_F_CRYPTO_DUP_EX_DATA 0 +# define CRYPTO_F_CRYPTO_FREE_EX_DATA 0 +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 0 +# define CRYPTO_F_CRYPTO_MEMDUP 0 +# define CRYPTO_F_CRYPTO_NEW_EX_DATA 0 +# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 0 +# define CRYPTO_F_CRYPTO_OCB128_INIT 0 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 0 +# define CRYPTO_F_GET_AND_LOCK 0 +# define CRYPTO_F_OPENSSL_ATEXIT 0 +# define CRYPTO_F_OPENSSL_BUF2HEXSTR 0 +# define CRYPTO_F_OPENSSL_FOPEN 0 +# define CRYPTO_F_OPENSSL_HEXSTR2BUF 0 +# define CRYPTO_F_OPENSSL_INIT_CRYPTO 0 +# define CRYPTO_F_OPENSSL_LH_NEW 0 +# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 0 +# define CRYPTO_F_OPENSSL_SK_DUP 0 +# define CRYPTO_F_PKEY_HMAC_INIT 0 +# define CRYPTO_F_PKEY_POLY1305_INIT 0 +# define CRYPTO_F_PKEY_SIPHASH_INIT 0 +# define CRYPTO_F_SK_RESERVE 0 + +# ifndef OPENSSL_NO_CT +/* + * CT function codes. + */ +# define CT_F_CTLOG_NEW 0 +# define CT_F_CTLOG_NEW_FROM_BASE64 0 +# define CT_F_CTLOG_NEW_FROM_CONF 0 +# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 0 +# define CT_F_CTLOG_STORE_LOAD_FILE 0 +# define CT_F_CTLOG_STORE_LOAD_LOG 0 +# define CT_F_CTLOG_STORE_NEW 0 +# define CT_F_CT_BASE64_DECODE 0 +# define CT_F_CT_POLICY_EVAL_CTX_NEW 0 +# define CT_F_CT_V1_LOG_ID_FROM_PKEY 0 +# define CT_F_I2O_SCT 0 +# define CT_F_I2O_SCT_LIST 0 +# define CT_F_I2O_SCT_SIGNATURE 0 +# define CT_F_O2I_SCT 0 +# define CT_F_O2I_SCT_LIST 0 +# define CT_F_O2I_SCT_SIGNATURE 0 +# define CT_F_SCT_CTX_NEW 0 +# define CT_F_SCT_CTX_VERIFY 0 +# define CT_F_SCT_NEW 0 +# define CT_F_SCT_NEW_FROM_BASE64 0 +# define CT_F_SCT_SET0_LOG_ID 0 +# define CT_F_SCT_SET1_EXTENSIONS 0 +# define CT_F_SCT_SET1_LOG_ID 0 +# define CT_F_SCT_SET1_SIGNATURE 0 +# define CT_F_SCT_SET_LOG_ENTRY_TYPE 0 +# define CT_F_SCT_SET_SIGNATURE_NID 0 +# define CT_F_SCT_SET_VERSION 0 +# endif + +# ifndef OPENSSL_NO_DH +/* + * DH function codes. + */ +# define DH_F_COMPUTE_KEY 0 +# define DH_F_DHPARAMS_PRINT_FP 0 +# define DH_F_DH_BUILTIN_GENPARAMS 0 +# define DH_F_DH_CHECK_EX 0 +# define DH_F_DH_CHECK_PARAMS_EX 0 +# define DH_F_DH_CHECK_PUB_KEY_EX 0 +# define DH_F_DH_CMS_DECRYPT 0 +# define DH_F_DH_CMS_SET_PEERKEY 0 +# define DH_F_DH_CMS_SET_SHARED_INFO 0 +# define DH_F_DH_METH_DUP 0 +# define DH_F_DH_METH_NEW 0 +# define DH_F_DH_METH_SET1_NAME 0 +# define DH_F_DH_NEW_BY_NID 0 +# define DH_F_DH_NEW_METHOD 0 +# define DH_F_DH_PARAM_DECODE 0 +# define DH_F_DH_PKEY_PUBLIC_CHECK 0 +# define DH_F_DH_PRIV_DECODE 0 +# define DH_F_DH_PRIV_ENCODE 0 +# define DH_F_DH_PUB_DECODE 0 +# define DH_F_DH_PUB_ENCODE 0 +# define DH_F_DO_DH_PRINT 0 +# define DH_F_GENERATE_KEY 0 +# define DH_F_PKEY_DH_CTRL_STR 0 +# define DH_F_PKEY_DH_DERIVE 0 +# define DH_F_PKEY_DH_INIT 0 +# define DH_F_PKEY_DH_KEYGEN 0 +# endif + +# ifndef OPENSSL_NO_DSA +/* + * DSA function codes. + */ +# define DSA_F_DSAPARAMS_PRINT 0 +# define DSA_F_DSAPARAMS_PRINT_FP 0 +# define DSA_F_DSA_BUILTIN_PARAMGEN 0 +# define DSA_F_DSA_BUILTIN_PARAMGEN2 0 +# define DSA_F_DSA_DO_SIGN 0 +# define DSA_F_DSA_DO_VERIFY 0 +# define DSA_F_DSA_METH_DUP 0 +# define DSA_F_DSA_METH_NEW 0 +# define DSA_F_DSA_METH_SET1_NAME 0 +# define DSA_F_DSA_NEW_METHOD 0 +# define DSA_F_DSA_PARAM_DECODE 0 +# define DSA_F_DSA_PRINT_FP 0 +# define DSA_F_DSA_PRIV_DECODE 0 +# define DSA_F_DSA_PRIV_ENCODE 0 +# define DSA_F_DSA_PUB_DECODE 0 +# define DSA_F_DSA_PUB_ENCODE 0 +# define DSA_F_DSA_SIGN 0 +# define DSA_F_DSA_SIGN_SETUP 0 +# define DSA_F_DSA_SIG_NEW 0 +# define DSA_F_OLD_DSA_PRIV_DECODE 0 +# define DSA_F_PKEY_DSA_CTRL 0 +# define DSA_F_PKEY_DSA_CTRL_STR 0 +# define DSA_F_PKEY_DSA_KEYGEN 0 +# endif + +# ifndef OPENSSL_NO_EC +/* + * EC function codes. + */ +# define EC_F_BN_TO_FELEM 0 +# define EC_F_D2I_ECPARAMETERS 0 +# define EC_F_D2I_ECPKPARAMETERS 0 +# define EC_F_D2I_ECPRIVATEKEY 0 +# define EC_F_DO_EC_KEY_PRINT 0 +# define EC_F_ECDH_CMS_DECRYPT 0 +# define EC_F_ECDH_CMS_SET_SHARED_INFO 0 +# define EC_F_ECDH_COMPUTE_KEY 0 +# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 0 +# define EC_F_ECDSA_DO_SIGN_EX 0 +# define EC_F_ECDSA_DO_VERIFY 0 +# define EC_F_ECDSA_SIGN_EX 0 +# define EC_F_ECDSA_SIGN_SETUP 0 +# define EC_F_ECDSA_SIG_NEW 0 +# define EC_F_ECDSA_VERIFY 0 +# define EC_F_ECD_ITEM_VERIFY 0 +# define EC_F_ECKEY_PARAM2TYPE 0 +# define EC_F_ECKEY_PARAM_DECODE 0 +# define EC_F_ECKEY_PRIV_DECODE 0 +# define EC_F_ECKEY_PRIV_ENCODE 0 +# define EC_F_ECKEY_PUB_DECODE 0 +# define EC_F_ECKEY_PUB_ENCODE 0 +# define EC_F_ECKEY_TYPE2PARAM 0 +# define EC_F_ECPARAMETERS_PRINT 0 +# define EC_F_ECPARAMETERS_PRINT_FP 0 +# define EC_F_ECPKPARAMETERS_PRINT 0 +# define EC_F_ECPKPARAMETERS_PRINT_FP 0 +# define EC_F_ECP_NISTZ256_GET_AFFINE 0 +# define EC_F_ECP_NISTZ256_INV_MOD_ORD 0 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 0 +# define EC_F_ECP_NISTZ256_POINTS_MUL 0 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 0 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 0 +# define EC_F_ECX_KEY_OP 0 +# define EC_F_ECX_PRIV_ENCODE 0 +# define EC_F_ECX_PUB_ENCODE 0 +# define EC_F_EC_ASN1_GROUP2CURVE 0 +# define EC_F_EC_ASN1_GROUP2FIELDID 0 +# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 0 +# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 0 +# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 0 +# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 0 +# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 0 +# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 0 +# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 0 +# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 0 +# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_GFP_MONT_FIELD_DECODE 0 +# define EC_F_EC_GFP_MONT_FIELD_ENCODE 0 +# define EC_F_EC_GFP_MONT_FIELD_INV 0 +# define EC_F_EC_GFP_MONT_FIELD_MUL 0 +# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 0 +# define EC_F_EC_GFP_MONT_FIELD_SQR 0 +# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP224_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP256_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_NISTP521_POINTS_MUL 0 +# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_NIST_FIELD_MUL 0 +# define EC_F_EC_GFP_NIST_FIELD_SQR 0 +# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_FIELD_INV 0 +# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 0 +# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 0 +# define EC_F_EC_GFP_SIMPLE_OCT2POINT 0 +# define EC_F_EC_GFP_SIMPLE_POINT2OCT 0 +# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 0 +# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_GROUP_CHECK 0 +# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 0 +# define EC_F_EC_GROUP_COPY 0 +# define EC_F_EC_GROUP_GET_CURVE 0 +# define EC_F_EC_GROUP_GET_CURVE_GF2M 0 +# define EC_F_EC_GROUP_GET_CURVE_GFP 0 +# define EC_F_EC_GROUP_GET_DEGREE 0 +# define EC_F_EC_GROUP_GET_ECPARAMETERS 0 +# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 0 +# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 0 +# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 0 +# define EC_F_EC_GROUP_NEW 0 +# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 0 +# define EC_F_EC_GROUP_NEW_FROM_DATA 0 +# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 0 +# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 0 +# define EC_F_EC_GROUP_SET_CURVE 0 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 0 +# define EC_F_EC_GROUP_SET_CURVE_GFP 0 +# define EC_F_EC_GROUP_SET_GENERATOR 0 +# define EC_F_EC_GROUP_SET_SEED 0 +# define EC_F_EC_KEY_CHECK_KEY 0 +# define EC_F_EC_KEY_COPY 0 +# define EC_F_EC_KEY_GENERATE_KEY 0 +# define EC_F_EC_KEY_NEW 0 +# define EC_F_EC_KEY_NEW_METHOD 0 +# define EC_F_EC_KEY_OCT2PRIV 0 +# define EC_F_EC_KEY_PRINT 0 +# define EC_F_EC_KEY_PRINT_FP 0 +# define EC_F_EC_KEY_PRIV2BUF 0 +# define EC_F_EC_KEY_PRIV2OCT 0 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 0 +# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 0 +# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 0 +# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 0 +# define EC_F_EC_PKEY_CHECK 0 +# define EC_F_EC_PKEY_PARAM_CHECK 0 +# define EC_F_EC_POINTS_MAKE_AFFINE 0 +# define EC_F_EC_POINTS_MUL 0 +# define EC_F_EC_POINT_ADD 0 +# define EC_F_EC_POINT_BN2POINT 0 +# define EC_F_EC_POINT_CMP 0 +# define EC_F_EC_POINT_COPY 0 +# define EC_F_EC_POINT_DBL 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_INVERT 0 +# define EC_F_EC_POINT_IS_AT_INFINITY 0 +# define EC_F_EC_POINT_IS_ON_CURVE 0 +# define EC_F_EC_POINT_MAKE_AFFINE 0 +# define EC_F_EC_POINT_NEW 0 +# define EC_F_EC_POINT_OCT2POINT 0 +# define EC_F_EC_POINT_POINT2BUF 0 +# define EC_F_EC_POINT_POINT2OCT 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 0 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 0 +# define EC_F_EC_POINT_SET_TO_INFINITY 0 +# define EC_F_EC_PRE_COMP_NEW 0 +# define EC_F_EC_SCALAR_MUL_LADDER 0 +# define EC_F_EC_WNAF_MUL 0 +# define EC_F_EC_WNAF_PRECOMPUTE_MULT 0 +# define EC_F_I2D_ECPARAMETERS 0 +# define EC_F_I2D_ECPKPARAMETERS 0 +# define EC_F_I2D_ECPRIVATEKEY 0 +# define EC_F_I2O_ECPUBLICKEY 0 +# define EC_F_NISTP224_PRE_COMP_NEW 0 +# define EC_F_NISTP256_PRE_COMP_NEW 0 +# define EC_F_NISTP521_PRE_COMP_NEW 0 +# define EC_F_O2I_ECPUBLICKEY 0 +# define EC_F_OLD_EC_PRIV_DECODE 0 +# define EC_F_OSSL_ECDH_COMPUTE_KEY 0 +# define EC_F_OSSL_ECDSA_SIGN_SIG 0 +# define EC_F_OSSL_ECDSA_VERIFY_SIG 0 +# define EC_F_PKEY_ECD_CTRL 0 +# define EC_F_PKEY_ECD_DIGESTSIGN 0 +# define EC_F_PKEY_ECD_DIGESTSIGN25519 0 +# define EC_F_PKEY_ECD_DIGESTSIGN448 0 +# define EC_F_PKEY_ECX_DERIVE 0 +# define EC_F_PKEY_EC_CTRL 0 +# define EC_F_PKEY_EC_CTRL_STR 0 +# define EC_F_PKEY_EC_DERIVE 0 +# define EC_F_PKEY_EC_INIT 0 +# define EC_F_PKEY_EC_KDF_DERIVE 0 +# define EC_F_PKEY_EC_KEYGEN 0 +# define EC_F_PKEY_EC_PARAMGEN 0 +# define EC_F_PKEY_EC_SIGN 0 +# define EC_F_VALIDATE_ECX_DERIVE 0 +# endif + +# ifndef OPENSSL_NO_ENGINE +/* + * ENGINE function codes. + */ +# define ENGINE_F_DIGEST_UPDATE 0 +# define ENGINE_F_DYNAMIC_CTRL 0 +# define ENGINE_F_DYNAMIC_GET_DATA_CTX 0 +# define ENGINE_F_DYNAMIC_LOAD 0 +# define ENGINE_F_DYNAMIC_SET_DATA_CTX 0 +# define ENGINE_F_ENGINE_ADD 0 +# define ENGINE_F_ENGINE_BY_ID 0 +# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 0 +# define ENGINE_F_ENGINE_CTRL 0 +# define ENGINE_F_ENGINE_CTRL_CMD 0 +# define ENGINE_F_ENGINE_CTRL_CMD_STRING 0 +# define ENGINE_F_ENGINE_FINISH 0 +# define ENGINE_F_ENGINE_GET_CIPHER 0 +# define ENGINE_F_ENGINE_GET_DIGEST 0 +# define ENGINE_F_ENGINE_GET_FIRST 0 +# define ENGINE_F_ENGINE_GET_LAST 0 +# define ENGINE_F_ENGINE_GET_NEXT 0 +# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 0 +# define ENGINE_F_ENGINE_GET_PKEY_METH 0 +# define ENGINE_F_ENGINE_GET_PREV 0 +# define ENGINE_F_ENGINE_INIT 0 +# define ENGINE_F_ENGINE_LIST_ADD 0 +# define ENGINE_F_ENGINE_LIST_REMOVE 0 +# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 0 +# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 0 +# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 0 +# define ENGINE_F_ENGINE_NEW 0 +# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 0 +# define ENGINE_F_ENGINE_REMOVE 0 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 0 +# define ENGINE_F_ENGINE_SET_ID 0 +# define ENGINE_F_ENGINE_SET_NAME 0 +# define ENGINE_F_ENGINE_TABLE_REGISTER 0 +# define ENGINE_F_ENGINE_UNLOCKED_FINISH 0 +# define ENGINE_F_ENGINE_UP_REF 0 +# define ENGINE_F_INT_CLEANUP_ITEM 0 +# define ENGINE_F_INT_CTRL_HELPER 0 +# define ENGINE_F_INT_ENGINE_CONFIGURE 0 +# define ENGINE_F_INT_ENGINE_MODULE_INIT 0 +# define ENGINE_F_OSSL_HMAC_INIT 0 +# endif + +/* + * EVP function codes. + */ +# define EVP_F_AESNI_INIT_KEY 0 +# define EVP_F_AESNI_XTS_INIT_KEY 0 +# define EVP_F_AES_GCM_CTRL 0 +# define EVP_F_AES_INIT_KEY 0 +# define EVP_F_AES_OCB_CIPHER 0 +# define EVP_F_AES_T4_INIT_KEY 0 +# define EVP_F_AES_T4_XTS_INIT_KEY 0 +# define EVP_F_AES_WRAP_CIPHER 0 +# define EVP_F_AES_XTS_INIT_KEY 0 +# define EVP_F_ALG_MODULE_INIT 0 +# define EVP_F_ARIA_CCM_INIT_KEY 0 +# define EVP_F_ARIA_GCM_CTRL 0 +# define EVP_F_ARIA_GCM_INIT_KEY 0 +# define EVP_F_ARIA_INIT_KEY 0 +# define EVP_F_B64_NEW 0 +# define EVP_F_CAMELLIA_INIT_KEY 0 +# define EVP_F_CHACHA20_POLY1305_CTRL 0 +# define EVP_F_CMLL_T4_INIT_KEY 0 +# define EVP_F_DES_EDE3_WRAP_CIPHER 0 +# define EVP_F_DO_SIGVER_INIT 0 +# define EVP_F_ENC_NEW 0 +# define EVP_F_EVP_CIPHERINIT_EX 0 +# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 0 +# define EVP_F_EVP_CIPHER_CTX_COPY 0 +# define EVP_F_EVP_CIPHER_CTX_CTRL 0 +# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 0 +# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 0 +# define EVP_F_EVP_DECRYPTFINAL_EX 0 +# define EVP_F_EVP_DECRYPTUPDATE 0 +# define EVP_F_EVP_DIGESTFINALXOF 0 +# define EVP_F_EVP_DIGESTINIT_EX 0 +# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 0 +# define EVP_F_EVP_ENCRYPTFINAL_EX 0 +# define EVP_F_EVP_ENCRYPTUPDATE 0 +# define EVP_F_EVP_MD_CTX_COPY_EX 0 +# define EVP_F_EVP_MD_SIZE 0 +# define EVP_F_EVP_OPENINIT 0 +# define EVP_F_EVP_PBE_ALG_ADD 0 +# define EVP_F_EVP_PBE_ALG_ADD_TYPE 0 +# define EVP_F_EVP_PBE_CIPHERINIT 0 +# define EVP_F_EVP_PBE_SCRYPT 0 +# define EVP_F_EVP_PKCS82PKEY 0 +# define EVP_F_EVP_PKEY2PKCS8 0 +# define EVP_F_EVP_PKEY_ASN1_ADD0 0 +# define EVP_F_EVP_PKEY_CHECK 0 +# define EVP_F_EVP_PKEY_COPY_PARAMETERS 0 +# define EVP_F_EVP_PKEY_CTX_CTRL 0 +# define EVP_F_EVP_PKEY_CTX_CTRL_STR 0 +# define EVP_F_EVP_PKEY_CTX_DUP 0 +# define EVP_F_EVP_PKEY_CTX_MD 0 +# define EVP_F_EVP_PKEY_DECRYPT 0 +# define EVP_F_EVP_PKEY_DECRYPT_INIT 0 +# define EVP_F_EVP_PKEY_DECRYPT_OLD 0 +# define EVP_F_EVP_PKEY_DERIVE 0 +# define EVP_F_EVP_PKEY_DERIVE_INIT 0 +# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 0 +# define EVP_F_EVP_PKEY_ENCRYPT 0 +# define EVP_F_EVP_PKEY_ENCRYPT_INIT 0 +# define EVP_F_EVP_PKEY_ENCRYPT_OLD 0 +# define EVP_F_EVP_PKEY_GET0_DH 0 +# define EVP_F_EVP_PKEY_GET0_DSA 0 +# define EVP_F_EVP_PKEY_GET0_EC_KEY 0 +# define EVP_F_EVP_PKEY_GET0_HMAC 0 +# define EVP_F_EVP_PKEY_GET0_POLY1305 0 +# define EVP_F_EVP_PKEY_GET0_RSA 0 +# define EVP_F_EVP_PKEY_GET0_SIPHASH 0 +# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 0 +# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 0 +# define EVP_F_EVP_PKEY_KEYGEN 0 +# define EVP_F_EVP_PKEY_KEYGEN_INIT 0 +# define EVP_F_EVP_PKEY_METH_ADD0 0 +# define EVP_F_EVP_PKEY_METH_NEW 0 +# define EVP_F_EVP_PKEY_NEW 0 +# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 0 +# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 0 +# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 0 +# define EVP_F_EVP_PKEY_PARAMGEN 0 +# define EVP_F_EVP_PKEY_PARAMGEN_INIT 0 +# define EVP_F_EVP_PKEY_PARAM_CHECK 0 +# define EVP_F_EVP_PKEY_PUBLIC_CHECK 0 +# define EVP_F_EVP_PKEY_SET1_ENGINE 0 +# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 0 +# define EVP_F_EVP_PKEY_SIGN 0 +# define EVP_F_EVP_PKEY_SIGN_INIT 0 +# define EVP_F_EVP_PKEY_VERIFY 0 +# define EVP_F_EVP_PKEY_VERIFY_INIT 0 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER 0 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 0 +# define EVP_F_EVP_SIGNFINAL 0 +# define EVP_F_EVP_VERIFYFINAL 0 +# define EVP_F_INT_CTX_NEW 0 +# define EVP_F_OK_NEW 0 +# define EVP_F_PKCS5_PBE_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 0 +# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 0 +# define EVP_F_PKEY_SET_TYPE 0 +# define EVP_F_RC2_MAGIC_TO_METH 0 +# define EVP_F_RC5_CTRL 0 +# define EVP_F_R_32_12_16_INIT_KEY 0 +# define EVP_F_S390X_AES_GCM_CTRL 0 +# define EVP_F_UPDATE 0 + +/* + * KDF function codes. + */ +# define KDF_F_PKEY_HKDF_CTRL_STR 0 +# define KDF_F_PKEY_HKDF_DERIVE 0 +# define KDF_F_PKEY_HKDF_INIT 0 +# define KDF_F_PKEY_SCRYPT_CTRL_STR 0 +# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 0 +# define KDF_F_PKEY_SCRYPT_DERIVE 0 +# define KDF_F_PKEY_SCRYPT_INIT 0 +# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 0 +# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 0 +# define KDF_F_PKEY_TLS1_PRF_DERIVE 0 +# define KDF_F_PKEY_TLS1_PRF_INIT 0 +# define KDF_F_TLS1_PRF_ALG 0 + +/* + * KDF reason codes. + */ +# define KDF_R_INVALID_DIGEST 0 +# define KDF_R_MISSING_ITERATION_COUNT 0 +# define KDF_R_MISSING_KEY 0 +# define KDF_R_MISSING_MESSAGE_DIGEST 0 +# define KDF_R_MISSING_PARAMETER 0 +# define KDF_R_MISSING_PASS 0 +# define KDF_R_MISSING_SALT 0 +# define KDF_R_MISSING_SECRET 0 +# define KDF_R_MISSING_SEED 0 +# define KDF_R_UNKNOWN_PARAMETER_TYPE 0 +# define KDF_R_VALUE_ERROR 0 +# define KDF_R_VALUE_MISSING 0 + +/* + * OBJ function codes. + */ +# define OBJ_F_OBJ_ADD_OBJECT 0 +# define OBJ_F_OBJ_ADD_SIGID 0 +# define OBJ_F_OBJ_CREATE 0 +# define OBJ_F_OBJ_DUP 0 +# define OBJ_F_OBJ_NAME_NEW_INDEX 0 +# define OBJ_F_OBJ_NID2LN 0 +# define OBJ_F_OBJ_NID2OBJ 0 +# define OBJ_F_OBJ_NID2SN 0 +# define OBJ_F_OBJ_TXT2OBJ 0 + +# ifndef OPENSSL_NO_OCSP +/* + * OCSP function codes. + */ +# define OCSP_F_D2I_OCSP_NONCE 0 +# define OCSP_F_OCSP_BASIC_ADD1_STATUS 0 +# define OCSP_F_OCSP_BASIC_SIGN 0 +# define OCSP_F_OCSP_BASIC_SIGN_CTX 0 +# define OCSP_F_OCSP_BASIC_VERIFY 0 +# define OCSP_F_OCSP_CERT_ID_NEW 0 +# define OCSP_F_OCSP_CHECK_DELEGATED 0 +# define OCSP_F_OCSP_CHECK_IDS 0 +# define OCSP_F_OCSP_CHECK_ISSUER 0 +# define OCSP_F_OCSP_CHECK_VALIDITY 0 +# define OCSP_F_OCSP_MATCH_ISSUERID 0 +# define OCSP_F_OCSP_PARSE_URL 0 +# define OCSP_F_OCSP_REQUEST_SIGN 0 +# define OCSP_F_OCSP_REQUEST_VERIFY 0 +# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 0 +# define OCSP_F_PARSE_HTTP_LINE1 0 +# endif + +/* + * PEM function codes. + */ +# define PEM_F_B2I_DSS 0 +# define PEM_F_B2I_PVK_BIO 0 +# define PEM_F_B2I_RSA 0 +# define PEM_F_CHECK_BITLEN_DSA 0 +# define PEM_F_CHECK_BITLEN_RSA 0 +# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 0 +# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 0 +# define PEM_F_DO_B2I 0 +# define PEM_F_DO_B2I_BIO 0 +# define PEM_F_DO_BLOB_HEADER 0 +# define PEM_F_DO_I2B 0 +# define PEM_F_DO_PK8PKEY 0 +# define PEM_F_DO_PK8PKEY_FP 0 +# define PEM_F_DO_PVK_BODY 0 +# define PEM_F_DO_PVK_HEADER 0 +# define PEM_F_GET_HEADER_AND_DATA 0 +# define PEM_F_GET_NAME 0 +# define PEM_F_I2B_PVK 0 +# define PEM_F_I2B_PVK_BIO 0 +# define PEM_F_LOAD_IV 0 +# define PEM_F_PEM_ASN1_READ 0 +# define PEM_F_PEM_ASN1_READ_BIO 0 +# define PEM_F_PEM_ASN1_WRITE 0 +# define PEM_F_PEM_ASN1_WRITE_BIO 0 +# define PEM_F_PEM_DEF_CALLBACK 0 +# define PEM_F_PEM_DO_HEADER 0 +# define PEM_F_PEM_GET_EVP_CIPHER_INFO 0 +# define PEM_F_PEM_READ 0 +# define PEM_F_PEM_READ_BIO 0 +# define PEM_F_PEM_READ_BIO_DHPARAMS 0 +# define PEM_F_PEM_READ_BIO_EX 0 +# define PEM_F_PEM_READ_BIO_PARAMETERS 0 +# define PEM_F_PEM_READ_BIO_PRIVATEKEY 0 +# define PEM_F_PEM_READ_DHPARAMS 0 +# define PEM_F_PEM_READ_PRIVATEKEY 0 +# define PEM_F_PEM_SIGNFINAL 0 +# define PEM_F_PEM_WRITE 0 +# define PEM_F_PEM_WRITE_BIO 0 +# define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL 0 +# define PEM_F_PEM_WRITE_PRIVATEKEY 0 +# define PEM_F_PEM_X509_INFO_READ 0 +# define PEM_F_PEM_X509_INFO_READ_BIO 0 +# define PEM_F_PEM_X509_INFO_WRITE_BIO 0 + +/* + * PKCS12 function codes. + */ +# define PKCS12_F_OPENSSL_ASC2UNI 0 +# define PKCS12_F_OPENSSL_UNI2ASC 0 +# define PKCS12_F_OPENSSL_UNI2UTF8 0 +# define PKCS12_F_OPENSSL_UTF82UNI 0 +# define PKCS12_F_PKCS12_CREATE 0 +# define PKCS12_F_PKCS12_GEN_MAC 0 +# define PKCS12_F_PKCS12_INIT 0 +# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 0 +# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 0 +# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 0 +# define PKCS12_F_PKCS12_KEY_GEN_ASC 0 +# define PKCS12_F_PKCS12_KEY_GEN_UNI 0 +# define PKCS12_F_PKCS12_KEY_GEN_UTF8 0 +# define PKCS12_F_PKCS12_NEWPASS 0 +# define PKCS12_F_PKCS12_PACK_P7DATA 0 +# define PKCS12_F_PKCS12_PACK_P7ENCDATA 0 +# define PKCS12_F_PKCS12_PARSE 0 +# define PKCS12_F_PKCS12_PBE_CRYPT 0 +# define PKCS12_F_PKCS12_PBE_KEYIVGEN 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 0 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 0 +# define PKCS12_F_PKCS12_SETUP_MAC 0 +# define PKCS12_F_PKCS12_SET_MAC 0 +# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 0 +# define PKCS12_F_PKCS12_UNPACK_P7DATA 0 +# define PKCS12_F_PKCS12_VERIFY_MAC 0 +# define PKCS12_F_PKCS8_ENCRYPT 0 +# define PKCS12_F_PKCS8_SET0_PBE 0 + +/* + * PKCS7 function codes. + */ +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 0 +# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 0 +# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 0 +# define PKCS7_F_PKCS7_ADD_CERTIFICATE 0 +# define PKCS7_F_PKCS7_ADD_CRL 0 +# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 0 +# define PKCS7_F_PKCS7_ADD_SIGNATURE 0 +# define PKCS7_F_PKCS7_ADD_SIGNER 0 +# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 0 +# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 0 +# define PKCS7_F_PKCS7_CTRL 0 +# define PKCS7_F_PKCS7_DATADECODE 0 +# define PKCS7_F_PKCS7_DATAFINAL 0 +# define PKCS7_F_PKCS7_DATAINIT 0 +# define PKCS7_F_PKCS7_DATAVERIFY 0 +# define PKCS7_F_PKCS7_DECRYPT 0 +# define PKCS7_F_PKCS7_DECRYPT_RINFO 0 +# define PKCS7_F_PKCS7_ENCODE_RINFO 0 +# define PKCS7_F_PKCS7_ENCRYPT 0 +# define PKCS7_F_PKCS7_FINAL 0 +# define PKCS7_F_PKCS7_FIND_DIGEST 0 +# define PKCS7_F_PKCS7_GET0_SIGNERS 0 +# define PKCS7_F_PKCS7_RECIP_INFO_SET 0 +# define PKCS7_F_PKCS7_SET_CIPHER 0 +# define PKCS7_F_PKCS7_SET_CONTENT 0 +# define PKCS7_F_PKCS7_SET_DIGEST 0 +# define PKCS7_F_PKCS7_SET_TYPE 0 +# define PKCS7_F_PKCS7_SIGN 0 +# define PKCS7_F_PKCS7_SIGNATUREVERIFY 0 +# define PKCS7_F_PKCS7_SIGNER_INFO_SET 0 +# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 0 +# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 0 +# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 0 +# define PKCS7_F_PKCS7_VERIFY 0 + +/* + * RAND function codes. + */ +# define RAND_F_DATA_COLLECT_METHOD 0 +# define RAND_F_DRBG_BYTES 0 +# define RAND_F_DRBG_GET_ENTROPY 0 +# define RAND_F_DRBG_SETUP 0 +# define RAND_F_GET_ENTROPY 0 +# define RAND_F_RAND_BYTES 0 +# define RAND_F_RAND_DRBG_ENABLE_LOCKING 0 +# define RAND_F_RAND_DRBG_GENERATE 0 +# define RAND_F_RAND_DRBG_GET_ENTROPY 0 +# define RAND_F_RAND_DRBG_GET_NONCE 0 +# define RAND_F_RAND_DRBG_INSTANTIATE 0 +# define RAND_F_RAND_DRBG_NEW 0 +# define RAND_F_RAND_DRBG_RESEED 0 +# define RAND_F_RAND_DRBG_RESTART 0 +# define RAND_F_RAND_DRBG_SET 0 +# define RAND_F_RAND_DRBG_SET_DEFAULTS 0 +# define RAND_F_RAND_DRBG_UNINSTANTIATE 0 +# define RAND_F_RAND_LOAD_FILE 0 +# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 0 +# define RAND_F_RAND_POOL_ADD 0 +# define RAND_F_RAND_POOL_ADD_BEGIN 0 +# define RAND_F_RAND_POOL_ADD_END 0 +# define RAND_F_RAND_POOL_ATTACH 0 +# define RAND_F_RAND_POOL_BYTES_NEEDED 0 +# define RAND_F_RAND_POOL_GROW 0 +# define RAND_F_RAND_POOL_NEW 0 +# define RAND_F_RAND_PSEUDO_BYTES 0 +# define RAND_F_RAND_WRITE_FILE 0 + +/* + * RSA function codes. + */ +# define RSA_F_CHECK_PADDING_MD 0 +# define RSA_F_ENCODE_PKCS1 0 +# define RSA_F_INT_RSA_VERIFY 0 +# define RSA_F_OLD_RSA_PRIV_DECODE 0 +# define RSA_F_PKEY_PSS_INIT 0 +# define RSA_F_PKEY_RSA_CTRL 0 +# define RSA_F_PKEY_RSA_CTRL_STR 0 +# define RSA_F_PKEY_RSA_SIGN 0 +# define RSA_F_PKEY_RSA_VERIFY 0 +# define RSA_F_PKEY_RSA_VERIFYRECOVER 0 +# define RSA_F_RSA_ALGOR_TO_MD 0 +# define RSA_F_RSA_BUILTIN_KEYGEN 0 +# define RSA_F_RSA_CHECK_KEY 0 +# define RSA_F_RSA_CHECK_KEY_EX 0 +# define RSA_F_RSA_CMS_DECRYPT 0 +# define RSA_F_RSA_CMS_VERIFY 0 +# define RSA_F_RSA_ITEM_VERIFY 0 +# define RSA_F_RSA_METH_DUP 0 +# define RSA_F_RSA_METH_NEW 0 +# define RSA_F_RSA_METH_SET1_NAME 0 +# define RSA_F_RSA_MGF1_TO_MD 0 +# define RSA_F_RSA_MULTIP_INFO_NEW 0 +# define RSA_F_RSA_NEW_METHOD 0 +# define RSA_F_RSA_NULL 0 +# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 0 +# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 0 +# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 0 +# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 0 +# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 0 +# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 0 +# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 0 +# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 0 +# define RSA_F_RSA_PADDING_ADD_NONE 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 0 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 0 +# define RSA_F_RSA_PADDING_ADD_SSLV23 0 +# define RSA_F_RSA_PADDING_ADD_X931 0 +# define RSA_F_RSA_PADDING_CHECK_NONE 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 0 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 0 +# define RSA_F_RSA_PADDING_CHECK_SSLV23 0 +# define RSA_F_RSA_PADDING_CHECK_X931 0 +# define RSA_F_RSA_PARAM_DECODE 0 +# define RSA_F_RSA_PRINT 0 +# define RSA_F_RSA_PRINT_FP 0 +# define RSA_F_RSA_PRIV_DECODE 0 +# define RSA_F_RSA_PRIV_ENCODE 0 +# define RSA_F_RSA_PSS_GET_PARAM 0 +# define RSA_F_RSA_PSS_TO_CTX 0 +# define RSA_F_RSA_PUB_DECODE 0 +# define RSA_F_RSA_SETUP_BLINDING 0 +# define RSA_F_RSA_SIGN 0 +# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 0 +# define RSA_F_RSA_VERIFY 0 +# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 0 +# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 0 +# define RSA_F_SETUP_TBUF 0 + +/* + * OSSL_STORE function codes. + */ +# define OSSL_STORE_F_FILE_CTRL 0 +# define OSSL_STORE_F_FILE_FIND 0 +# define OSSL_STORE_F_FILE_GET_PASS 0 +# define OSSL_STORE_F_FILE_LOAD 0 +# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 0 +# define OSSL_STORE_F_FILE_NAME_TO_URI 0 +# define OSSL_STORE_F_FILE_OPEN 0 +# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 0 +# define OSSL_STORE_F_OSSL_STORE_EXPECT 0 +# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 0 +# define OSSL_STORE_F_OSSL_STORE_FIND 0 +# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 0 +# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 0 +# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 0 +# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 0 +# define OSSL_STORE_F_OSSL_STORE_OPEN 0 +# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 0 +# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 0 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 0 +# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 0 +# define OSSL_STORE_F_TRY_DECODE_PARAMS 0 +# define OSSL_STORE_F_TRY_DECODE_PKCS12 0 +# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 0 + +# ifndef OPENSSL_NO_TS +/* + * TS function codes. + */ +# define TS_F_DEF_SERIAL_CB 0 +# define TS_F_DEF_TIME_CB 0 +# define TS_F_ESS_ADD_SIGNING_CERT 0 +# define TS_F_ESS_ADD_SIGNING_CERT_V2 0 +# define TS_F_ESS_CERT_ID_NEW_INIT 0 +# define TS_F_ESS_CERT_ID_V2_NEW_INIT 0 +# define TS_F_ESS_SIGNING_CERT_NEW_INIT 0 +# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 0 +# define TS_F_INT_TS_RESP_VERIFY_TOKEN 0 +# define TS_F_PKCS7_TO_TS_TST_INFO 0 +# define TS_F_TS_ACCURACY_SET_MICROS 0 +# define TS_F_TS_ACCURACY_SET_MILLIS 0 +# define TS_F_TS_ACCURACY_SET_SECONDS 0 +# define TS_F_TS_CHECK_IMPRINTS 0 +# define TS_F_TS_CHECK_NONCES 0 +# define TS_F_TS_CHECK_POLICY 0 +# define TS_F_TS_CHECK_SIGNING_CERTS 0 +# define TS_F_TS_CHECK_STATUS_INFO 0 +# define TS_F_TS_COMPUTE_IMPRINT 0 +# define TS_F_TS_CONF_INVALID 0 +# define TS_F_TS_CONF_LOAD_CERT 0 +# define TS_F_TS_CONF_LOAD_CERTS 0 +# define TS_F_TS_CONF_LOAD_KEY 0 +# define TS_F_TS_CONF_LOOKUP_FAIL 0 +# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 0 +# define TS_F_TS_GET_STATUS_TEXT 0 +# define TS_F_TS_MSG_IMPRINT_SET_ALGO 0 +# define TS_F_TS_REQ_SET_MSG_IMPRINT 0 +# define TS_F_TS_REQ_SET_NONCE 0 +# define TS_F_TS_REQ_SET_POLICY_ID 0 +# define TS_F_TS_RESP_CREATE_RESPONSE 0 +# define TS_F_TS_RESP_CREATE_TST_INFO 0 +# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 0 +# define TS_F_TS_RESP_CTX_ADD_MD 0 +# define TS_F_TS_RESP_CTX_ADD_POLICY 0 +# define TS_F_TS_RESP_CTX_NEW 0 +# define TS_F_TS_RESP_CTX_SET_ACCURACY 0 +# define TS_F_TS_RESP_CTX_SET_CERTS 0 +# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 0 +# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 0 +# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 0 +# define TS_F_TS_RESP_GET_POLICY 0 +# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 0 +# define TS_F_TS_RESP_SET_STATUS_INFO 0 +# define TS_F_TS_RESP_SET_TST_INFO 0 +# define TS_F_TS_RESP_SIGN 0 +# define TS_F_TS_RESP_VERIFY_SIGNATURE 0 +# define TS_F_TS_TST_INFO_SET_ACCURACY 0 +# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 0 +# define TS_F_TS_TST_INFO_SET_NONCE 0 +# define TS_F_TS_TST_INFO_SET_POLICY_ID 0 +# define TS_F_TS_TST_INFO_SET_SERIAL 0 +# define TS_F_TS_TST_INFO_SET_TIME 0 +# define TS_F_TS_TST_INFO_SET_TSA 0 +# define TS_F_TS_VERIFY 0 +# define TS_F_TS_VERIFY_CERT 0 +# define TS_F_TS_VERIFY_CTX_NEW 0 +# endif + +/* + * UI function codes. + */ +# define UI_F_CLOSE_CONSOLE 0 +# define UI_F_ECHO_CONSOLE 0 +# define UI_F_GENERAL_ALLOCATE_BOOLEAN 0 +# define UI_F_GENERAL_ALLOCATE_PROMPT 0 +# define UI_F_NOECHO_CONSOLE 0 +# define UI_F_OPEN_CONSOLE 0 +# define UI_F_UI_CONSTRUCT_PROMPT 0 +# define UI_F_UI_CREATE_METHOD 0 +# define UI_F_UI_CTRL 0 +# define UI_F_UI_DUP_ERROR_STRING 0 +# define UI_F_UI_DUP_INFO_STRING 0 +# define UI_F_UI_DUP_INPUT_BOOLEAN 0 +# define UI_F_UI_DUP_INPUT_STRING 0 +# define UI_F_UI_DUP_USER_DATA 0 +# define UI_F_UI_DUP_VERIFY_STRING 0 +# define UI_F_UI_GET0_RESULT 0 +# define UI_F_UI_GET_RESULT_LENGTH 0 +# define UI_F_UI_NEW_METHOD 0 +# define UI_F_UI_PROCESS 0 +# define UI_F_UI_SET_RESULT 0 +# define UI_F_UI_SET_RESULT_EX 0 + +/* + * X509 function codes. + */ +# define X509_F_ADD_CERT_DIR 0 +# define X509_F_BUILD_CHAIN 0 +# define X509_F_BY_FILE_CTRL 0 +# define X509_F_CHECK_NAME_CONSTRAINTS 0 +# define X509_F_CHECK_POLICY 0 +# define X509_F_DANE_I2D 0 +# define X509_F_DIR_CTRL 0 +# define X509_F_GET_CERT_BY_SUBJECT 0 +# define X509_F_I2D_X509_AUX 0 +# define X509_F_LOOKUP_CERTS_SK 0 +# define X509_F_NETSCAPE_SPKI_B64_DECODE 0 +# define X509_F_NETSCAPE_SPKI_B64_ENCODE 0 +# define X509_F_NEW_DIR 0 +# define X509_F_X509AT_ADD1_ATTR 0 +# define X509_F_X509V3_ADD_EXT 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 0 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 0 +# define X509_F_X509_ATTRIBUTE_GET0_DATA 0 +# define X509_F_X509_ATTRIBUTE_SET1_DATA 0 +# define X509_F_X509_CHECK_PRIVATE_KEY 0 +# define X509_F_X509_CRL_DIFF 0 +# define X509_F_X509_CRL_METHOD_NEW 0 +# define X509_F_X509_CRL_PRINT_FP 0 +# define X509_F_X509_EXTENSION_CREATE_BY_NID 0 +# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 0 +# define X509_F_X509_GET_PUBKEY_PARAMETERS 0 +# define X509_F_X509_LOAD_CERT_CRL_FILE 0 +# define X509_F_X509_LOAD_CERT_FILE 0 +# define X509_F_X509_LOAD_CRL_FILE 0 +# define X509_F_X509_LOOKUP_METH_NEW 0 +# define X509_F_X509_LOOKUP_NEW 0 +# define X509_F_X509_NAME_ADD_ENTRY 0 +# define X509_F_X509_NAME_CANON 0 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 0 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 0 +# define X509_F_X509_NAME_ENTRY_SET_OBJECT 0 +# define X509_F_X509_NAME_ONELINE 0 +# define X509_F_X509_NAME_PRINT 0 +# define X509_F_X509_OBJECT_NEW 0 +# define X509_F_X509_PRINT_EX_FP 0 +# define X509_F_X509_PUBKEY_DECODE 0 +# define X509_F_X509_PUBKEY_GET 0 +# define X509_F_X509_PUBKEY_GET0 0 +# define X509_F_X509_PUBKEY_SET 0 +# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 0 +# define X509_F_X509_REQ_PRINT_EX 0 +# define X509_F_X509_REQ_PRINT_FP 0 +# define X509_F_X509_REQ_TO_X509 0 +# define X509_F_X509_STORE_ADD_CERT 0 +# define X509_F_X509_STORE_ADD_CRL 0 +# define X509_F_X509_STORE_ADD_LOOKUP 0 +# define X509_F_X509_STORE_CTX_GET1_ISSUER 0 +# define X509_F_X509_STORE_CTX_INIT 0 +# define X509_F_X509_STORE_CTX_NEW 0 +# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 0 +# define X509_F_X509_STORE_NEW 0 +# define X509_F_X509_TO_X509_REQ 0 +# define X509_F_X509_TRUST_ADD 0 +# define X509_F_X509_TRUST_SET 0 +# define X509_F_X509_VERIFY_CERT 0 +# define X509_F_X509_VERIFY_PARAM_NEW 0 + +/* + * X509V3 function codes. + */ +# define X509V3_F_A2I_GENERAL_NAME 0 +# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 0 +# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 0 +# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 0 +# define X509V3_F_BIGNUM_TO_STRING 0 +# define X509V3_F_COPY_EMAIL 0 +# define X509V3_F_COPY_ISSUER 0 +# define X509V3_F_DO_DIRNAME 0 +# define X509V3_F_DO_EXT_I2D 0 +# define X509V3_F_DO_EXT_NCONF 0 +# define X509V3_F_GNAMES_FROM_SECTNAME 0 +# define X509V3_F_I2S_ASN1_ENUMERATED 0 +# define X509V3_F_I2S_ASN1_IA5STRING 0 +# define X509V3_F_I2S_ASN1_INTEGER 0 +# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 0 +# define X509V3_F_LEVEL_ADD_NODE 0 +# define X509V3_F_NOTICE_SECTION 0 +# define X509V3_F_NREF_NOS 0 +# define X509V3_F_POLICY_CACHE_CREATE 0 +# define X509V3_F_POLICY_CACHE_NEW 0 +# define X509V3_F_POLICY_DATA_NEW 0 +# define X509V3_F_POLICY_SECTION 0 +# define X509V3_F_PROCESS_PCI_VALUE 0 +# define X509V3_F_R2I_CERTPOL 0 +# define X509V3_F_R2I_PCI 0 +# define X509V3_F_S2I_ASN1_IA5STRING 0 +# define X509V3_F_S2I_ASN1_INTEGER 0 +# define X509V3_F_S2I_ASN1_OCTET_STRING 0 +# define X509V3_F_S2I_SKEY_ID 0 +# define X509V3_F_SET_DIST_POINT_NAME 0 +# define X509V3_F_SXNET_ADD_ID_ASC 0 +# define X509V3_F_SXNET_ADD_ID_INTEGER 0 +# define X509V3_F_SXNET_ADD_ID_ULONG 0 +# define X509V3_F_SXNET_GET_ID_ASC 0 +# define X509V3_F_SXNET_GET_ID_ULONG 0 +# define X509V3_F_TREE_INIT 0 +# define X509V3_F_V2I_ASIDENTIFIERS 0 +# define X509V3_F_V2I_ASN1_BIT_STRING 0 +# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 0 +# define X509V3_F_V2I_AUTHORITY_KEYID 0 +# define X509V3_F_V2I_BASIC_CONSTRAINTS 0 +# define X509V3_F_V2I_CRLD 0 +# define X509V3_F_V2I_EXTENDED_KEY_USAGE 0 +# define X509V3_F_V2I_GENERAL_NAMES 0 +# define X509V3_F_V2I_GENERAL_NAME_EX 0 +# define X509V3_F_V2I_IDP 0 +# define X509V3_F_V2I_IPADDRBLOCKS 0 +# define X509V3_F_V2I_ISSUER_ALT 0 +# define X509V3_F_V2I_NAME_CONSTRAINTS 0 +# define X509V3_F_V2I_POLICY_CONSTRAINTS 0 +# define X509V3_F_V2I_POLICY_MAPPINGS 0 +# define X509V3_F_V2I_SUBJECT_ALT 0 +# define X509V3_F_V2I_TLS_FEATURE 0 +# define X509V3_F_V3_GENERIC_EXTENSION 0 +# define X509V3_F_X509V3_ADD1_I2D 0 +# define X509V3_F_X509V3_ADD_VALUE 0 +# define X509V3_F_X509V3_EXT_ADD 0 +# define X509V3_F_X509V3_EXT_ADD_ALIAS 0 +# define X509V3_F_X509V3_EXT_I2D 0 +# define X509V3_F_X509V3_EXT_NCONF 0 +# define X509V3_F_X509V3_GET_SECTION 0 +# define X509V3_F_X509V3_GET_STRING 0 +# define X509V3_F_X509V3_GET_VALUE_BOOL 0 +# define X509V3_F_X509V3_PARSE_LIST 0 +# define X509V3_F_X509_PURPOSE_ADD 0 +# define X509V3_F_X509_PURPOSE_SET 0 + +/* + * Compatibility defines. + */ +# define EVP_R_OPERATON_NOT_INITIALIZED EVP_R_OPERATION_NOT_INITIALIZED + +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h index ebdba34d..b6dd8c35 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h @@ -1,19 +1,30 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ct.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CT_H -# define HEADER_CT_H + + +#ifndef OPENSSL_CT_H +# define OPENSSL_CT_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CT_H +# endif # include # ifndef OPENSSL_NO_CT -# include +# include # include # include # include @@ -28,6 +39,61 @@ extern "C" { /* All hashes are SHA256 in v1 of Certificate Transparency */ # define CT_V1_HASHLEN SHA256_DIGEST_LENGTH +SKM_DEFINE_STACK_OF_INTERNAL(SCT, SCT, SCT) +#define sk_SCT_num(sk) OPENSSL_sk_num(ossl_check_const_SCT_sk_type(sk)) +#define sk_SCT_value(sk, idx) ((SCT *)OPENSSL_sk_value(ossl_check_const_SCT_sk_type(sk), (idx))) +#define sk_SCT_new(cmp) ((STACK_OF(SCT) *)OPENSSL_sk_new(ossl_check_SCT_compfunc_type(cmp))) +#define sk_SCT_new_null() ((STACK_OF(SCT) *)OPENSSL_sk_new_null()) +#define sk_SCT_new_reserve(cmp, n) ((STACK_OF(SCT) *)OPENSSL_sk_new_reserve(ossl_check_SCT_compfunc_type(cmp), (n))) +#define sk_SCT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SCT_sk_type(sk), (n)) +#define sk_SCT_free(sk) OPENSSL_sk_free(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_zero(sk) OPENSSL_sk_zero(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_delete(sk, i) ((SCT *)OPENSSL_sk_delete(ossl_check_SCT_sk_type(sk), (i))) +#define sk_SCT_delete_ptr(sk, ptr) ((SCT *)OPENSSL_sk_delete_ptr(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr))) +#define sk_SCT_push(sk, ptr) OPENSSL_sk_push(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_pop(sk) ((SCT *)OPENSSL_sk_pop(ossl_check_SCT_sk_type(sk))) +#define sk_SCT_shift(sk) ((SCT *)OPENSSL_sk_shift(ossl_check_SCT_sk_type(sk))) +#define sk_SCT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SCT_sk_type(sk),ossl_check_SCT_freefunc_type(freefunc)) +#define sk_SCT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), (idx)) +#define sk_SCT_set(sk, idx, ptr) ((SCT *)OPENSSL_sk_set(ossl_check_SCT_sk_type(sk), (idx), ossl_check_SCT_type(ptr))) +#define sk_SCT_find(sk, ptr) OPENSSL_sk_find(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr)) +#define sk_SCT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SCT_sk_type(sk), ossl_check_SCT_type(ptr), pnum) +#define sk_SCT_sort(sk) OPENSSL_sk_sort(ossl_check_SCT_sk_type(sk)) +#define sk_SCT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SCT_sk_type(sk)) +#define sk_SCT_dup(sk) ((STACK_OF(SCT) *)OPENSSL_sk_dup(ossl_check_const_SCT_sk_type(sk))) +#define sk_SCT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SCT) *)OPENSSL_sk_deep_copy(ossl_check_const_SCT_sk_type(sk), ossl_check_SCT_copyfunc_type(copyfunc), ossl_check_SCT_freefunc_type(freefunc))) +#define sk_SCT_set_cmp_func(sk, cmp) ((sk_SCT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SCT_sk_type(sk), ossl_check_SCT_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(CTLOG, CTLOG, CTLOG) +#define sk_CTLOG_num(sk) OPENSSL_sk_num(ossl_check_const_CTLOG_sk_type(sk)) +#define sk_CTLOG_value(sk, idx) ((CTLOG *)OPENSSL_sk_value(ossl_check_const_CTLOG_sk_type(sk), (idx))) +#define sk_CTLOG_new(cmp) ((STACK_OF(CTLOG) *)OPENSSL_sk_new(ossl_check_CTLOG_compfunc_type(cmp))) +#define sk_CTLOG_new_null() ((STACK_OF(CTLOG) *)OPENSSL_sk_new_null()) +#define sk_CTLOG_new_reserve(cmp, n) ((STACK_OF(CTLOG) *)OPENSSL_sk_new_reserve(ossl_check_CTLOG_compfunc_type(cmp), (n))) +#define sk_CTLOG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_CTLOG_sk_type(sk), (n)) +#define sk_CTLOG_free(sk) OPENSSL_sk_free(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_zero(sk) OPENSSL_sk_zero(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_delete(sk, i) ((CTLOG *)OPENSSL_sk_delete(ossl_check_CTLOG_sk_type(sk), (i))) +#define sk_CTLOG_delete_ptr(sk, ptr) ((CTLOG *)OPENSSL_sk_delete_ptr(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr))) +#define sk_CTLOG_push(sk, ptr) OPENSSL_sk_push(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_pop(sk) ((CTLOG *)OPENSSL_sk_pop(ossl_check_CTLOG_sk_type(sk))) +#define sk_CTLOG_shift(sk) ((CTLOG *)OPENSSL_sk_shift(ossl_check_CTLOG_sk_type(sk))) +#define sk_CTLOG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_CTLOG_sk_type(sk),ossl_check_CTLOG_freefunc_type(freefunc)) +#define sk_CTLOG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), (idx)) +#define sk_CTLOG_set(sk, idx, ptr) ((CTLOG *)OPENSSL_sk_set(ossl_check_CTLOG_sk_type(sk), (idx), ossl_check_CTLOG_type(ptr))) +#define sk_CTLOG_find(sk, ptr) OPENSSL_sk_find(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr)) +#define sk_CTLOG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_type(ptr), pnum) +#define sk_CTLOG_sort(sk) OPENSSL_sk_sort(ossl_check_CTLOG_sk_type(sk)) +#define sk_CTLOG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_CTLOG_sk_type(sk)) +#define sk_CTLOG_dup(sk) ((STACK_OF(CTLOG) *)OPENSSL_sk_dup(ossl_check_const_CTLOG_sk_type(sk))) +#define sk_CTLOG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(CTLOG) *)OPENSSL_sk_deep_copy(ossl_check_const_CTLOG_sk_type(sk), ossl_check_CTLOG_copyfunc_type(copyfunc), ossl_check_CTLOG_freefunc_type(freefunc))) +#define sk_CTLOG_set_cmp_func(sk, cmp) ((sk_CTLOG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_CTLOG_sk_type(sk), ossl_check_CTLOG_compfunc_type(cmp))) + + + typedef enum { CT_LOG_ENTRY_TYPE_NOT_SET = -1, CT_LOG_ENTRY_TYPE_X509 = 0, @@ -55,18 +121,23 @@ typedef enum { SCT_VALIDATION_STATUS_UNKNOWN_VERSION } sct_validation_status_t; -DEFINE_STACK_OF(SCT) -DEFINE_STACK_OF(CTLOG) - /****************************************** * CT policy evaluation context functions * ******************************************/ /* - * Creates a new, empty policy evaluation context. + * Creates a new, empty policy evaluation context associated with the given + * library context and property query string. * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished * with the CT_POLICY_EVAL_CTX. */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new_ex(OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CT_POLICY_EVAL_CTX_new_ex() but the default library + * context and property query string is used. + */ CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); /* Deletes a policy evaluation context and anything it owns. */ @@ -317,7 +388,7 @@ __owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, /********************************* - * SCT parsing and serialisation * + * SCT parsing and serialization * *********************************/ /* @@ -403,19 +474,39 @@ SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); ********************/ /* - * Creates a new CT log instance with the given |public_key| and |name|. + * Creates a new CT log instance with the given |public_key| and |name| and + * associates it with the give library context |libctx| and property query + * string |propq|. * Takes ownership of |public_key| but copies |name|. * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. * Should be deleted by the caller using CTLOG_free when no longer needed. */ +CTLOG *CTLOG_new_ex(EVP_PKEY *public_key, const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_ex except that the default library context and + * property query string are used. + */ CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); /* * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER - * in |pkey_base64|. The |name| is a string to help users identify this log. + * in |pkey_base64| and associated with the given library context |libctx| and + * property query string |propq|. The |name| is a string to help users identify + * this log. * Returns 1 on success, 0 on failure. * Should be deleted by the caller using CTLOG_free when no longer needed. */ +int CTLOG_new_from_base64_ex(CTLOG **ct_log, const char *pkey_base64, + const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_from_base64_ex() except that the default + * library context and property query string are used. + * Returns 1 on success, 0 on failure. + */ int CTLOG_new_from_base64(CTLOG ** ct_log, const char *pkey_base64, const char *name); @@ -437,7 +528,15 @@ EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); **************************/ /* - * Creates a new CT log store. + * Creates a new CT log store and associates it with the given libctx and + * property query string. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +/* + * Same as CTLOG_STORE_new_ex except that the default libctx and + * property query string are used. * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. */ CTLOG_STORE *CTLOG_STORE_new(void); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h.in new file mode 100644 index 00000000..16086b33 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h.in @@ -0,0 +1,525 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_CT_H +# define OPENSSL_CT_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_CT_H +# endif + +# include + +# ifndef OPENSSL_NO_CT +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + + +/* Minimum RSA key size, from RFC6962 */ +# define SCT_MIN_RSA_BITS 2048 + +/* All hashes are SHA256 in v1 of Certificate Transparency */ +# define CT_V1_HASHLEN SHA256_DIGEST_LENGTH + +{- + generate_stack_macros("SCT") + .generate_stack_macros("CTLOG"); +-} + + +typedef enum { + CT_LOG_ENTRY_TYPE_NOT_SET = -1, + CT_LOG_ENTRY_TYPE_X509 = 0, + CT_LOG_ENTRY_TYPE_PRECERT = 1 +} ct_log_entry_type_t; + +typedef enum { + SCT_VERSION_NOT_SET = -1, + SCT_VERSION_V1 = 0 +} sct_version_t; + +typedef enum { + SCT_SOURCE_UNKNOWN, + SCT_SOURCE_TLS_EXTENSION, + SCT_SOURCE_X509V3_EXTENSION, + SCT_SOURCE_OCSP_STAPLED_RESPONSE +} sct_source_t; + +typedef enum { + SCT_VALIDATION_STATUS_NOT_SET, + SCT_VALIDATION_STATUS_UNKNOWN_LOG, + SCT_VALIDATION_STATUS_VALID, + SCT_VALIDATION_STATUS_INVALID, + SCT_VALIDATION_STATUS_UNVERIFIED, + SCT_VALIDATION_STATUS_UNKNOWN_VERSION +} sct_validation_status_t; + +/****************************************** + * CT policy evaluation context functions * + ******************************************/ + +/* + * Creates a new, empty policy evaluation context associated with the given + * library context and property query string. + * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished + * with the CT_POLICY_EVAL_CTX. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new_ex(OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CT_POLICY_EVAL_CTX_new_ex() but the default library + * context and property query string is used. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); + +/* Deletes a policy evaluation context and anything it owns. */ +void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx); + +/* Gets the peer certificate that the SCTs are for */ +X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the certificate associated with the received SCTs. + * Increments the reference count of cert. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert); + +/* Gets the issuer of the aforementioned certificate */ +X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the issuer of the certificate associated with the received SCTs. + * Increments the reference count of issuer. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer); + +/* Gets the CT logs that are trusted sources of SCTs */ +const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx); + +/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */ +void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx, + CTLOG_STORE *log_store); + +/* + * Gets the time, in milliseconds since the Unix epoch, that will be used as the + * current time when checking whether an SCT was issued in the future. + * Such SCTs will fail validation, as required by RFC6962. + */ +uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the time to evaluate SCTs against, in milliseconds since the Unix epoch. + * If an SCT's timestamp is after this time, it will be interpreted as having + * been issued in the future. RFC6962 states that "TLS clients MUST reject SCTs + * whose timestamp is in the future", so an SCT will not validate in this case. + */ +void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms); + +/***************** + * SCT functions * + *****************/ + +/* + * Creates a new, blank SCT. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new(void); + +/* + * Creates a new SCT from some base64-encoded strings. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new_from_base64(unsigned char version, + const char *logid_base64, + ct_log_entry_type_t entry_type, + uint64_t timestamp, + const char *extensions_base64, + const char *signature_base64); + +/* + * Frees the SCT and the underlying data structures. + */ +void SCT_free(SCT *sct); + +/* + * Free a stack of SCTs, and the underlying SCTs themselves. + * Intended to be compatible with X509V3_EXT_FREE. + */ +void SCT_LIST_free(STACK_OF(SCT) *a); + +/* + * Returns the version of the SCT. + */ +sct_version_t SCT_get_version(const SCT *sct); + +/* + * Set the version of an SCT. + * Returns 1 on success, 0 if the version is unrecognized. + */ +__owur int SCT_set_version(SCT *sct, sct_version_t version); + +/* + * Returns the log entry type of the SCT. + */ +ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct); + +/* + * Set the log entry type of an SCT. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type); + +/* + * Gets the ID of the log that an SCT came from. + * Ownership of the log ID remains with the SCT. + * Returns the length of the log ID. + */ +size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id); + +/* + * Set the log ID of an SCT to point directly to the *log_id specified. + * The SCT takes ownership of the specified pointer. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len); + +/* + * Set the log ID of an SCT. + * This makes a copy of the log_id. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_log_id(SCT *sct, const unsigned char *log_id, + size_t log_id_len); + +/* + * Returns the timestamp for the SCT (epoch time in milliseconds). + */ +uint64_t SCT_get_timestamp(const SCT *sct); + +/* + * Set the timestamp of an SCT (epoch time in milliseconds). + */ +void SCT_set_timestamp(SCT *sct, uint64_t timestamp); + +/* + * Return the NID for the signature used by the SCT. + * For CT v1, this will be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256 (or NID_undef if incorrect/unset). + */ +int SCT_get_signature_nid(const SCT *sct); + +/* + * Set the signature type of an SCT + * For CT v1, this should be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_signature_nid(SCT *sct, int nid); + +/* + * Set *ext to point to the extension data for the SCT. ext must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext); + +/* + * Set the extensions of an SCT to point directly to the *ext specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len); + +/* + * Set the extensions of an SCT. + * This takes a copy of the ext. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_extensions(SCT *sct, const unsigned char *ext, + size_t ext_len); + +/* + * Set *sig to point to the signature for the SCT. sig must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_signature(const SCT *sct, unsigned char **sig); + +/* + * Set the signature of an SCT to point directly to the *sig specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len); + +/* + * Set the signature of an SCT to be a copy of the *sig specified. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_signature(SCT *sct, const unsigned char *sig, + size_t sig_len); + +/* + * The origin of this SCT, e.g. TLS extension, OCSP response, etc. + */ +sct_source_t SCT_get_source(const SCT *sct); + +/* + * Set the origin of this SCT, e.g. TLS extension, OCSP response, etc. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_source(SCT *sct, sct_source_t source); + +/* + * Returns a text string describing the validation status of |sct|. + */ +const char *SCT_validation_status_string(const SCT *sct); + +/* + * Pretty-prints an |sct| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * If |logs| is not NULL, it will be used to lookup the CT log that the SCT came + * from, so that the log name can be printed. + */ +void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs); + +/* + * Pretty-prints an |sct_list| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * SCTs will be delimited by |separator|. + * If |logs| is not NULL, it will be used to lookup the CT log that each SCT + * came from, so that the log names can be printed. + */ +void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent, + const char *separator, const CTLOG_STORE *logs); + +/* + * Gets the last result of validating this SCT. + * If it has not been validated yet, returns SCT_VALIDATION_STATUS_NOT_SET. + */ +sct_validation_status_t SCT_get_validation_status(const SCT *sct); + +/* + * Validates the given SCT with the provided context. + * Sets the "validation_status" field of the SCT. + * Returns 1 if the SCT is valid and the signature verifies. + * Returns 0 if the SCT is invalid or could not be verified. + * Returns -1 if an error occurs. + */ +__owur int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx); + +/* + * Validates the given list of SCTs with the provided context. + * Sets the "validation_status" field of each SCT. + * Returns 1 if there are no invalid SCTs and all signatures verify. + * Returns 0 if at least one SCT is invalid or could not be verified. + * Returns a negative integer if an error occurs. + */ +__owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, + CT_POLICY_EVAL_CTX *ctx); + + +/********************************* + * SCT parsing and serialization * + *********************************/ + +/* + * Serialize (to TLS format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just return the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Convert TLS format SCT list to a stack of SCTs. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + size_t len); + +/* + * Serialize (to DER format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just returns the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Parses an SCT list in DER format and returns it. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + long len); + +/* + * Serialize (to TLS format) an |sct| and write it to |out|. + * If |out| is null, no SCT will be output but the length will still be returned. + * If |out| points to a null pointer, a string will be allocated to hold the + * TLS-format SCT. It is the responsibility of the caller to free it. + * If |out| points to an allocated string, the TLS-format SCT will be written + * to it. + * The length of the SCT in TLS format will be returned. + */ +__owur int i2o_SCT(const SCT *sct, unsigned char **out); + +/* + * Parses an SCT in TLS format and returns it. + * If |psct| is not null, it will end up pointing to the parsed SCT. If it + * already points to a non-null pointer, the pointer will be free'd. + * |in| should be a pointer to a string containing the TLS-format SCT. + * |in| will be advanced to the end of the SCT if parsing succeeds. + * |len| should be the length of the SCT in |in|. + * Returns NULL if an error occurs. + * If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len' + * fields will be populated (with |in| and |len| respectively). + */ +SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); + +/******************** + * CT log functions * + ********************/ + +/* + * Creates a new CT log instance with the given |public_key| and |name| and + * associates it with the give library context |libctx| and property query + * string |propq|. + * Takes ownership of |public_key| but copies |name|. + * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +CTLOG *CTLOG_new_ex(EVP_PKEY *public_key, const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_ex except that the default library context and + * property query string are used. + */ +CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); + +/* + * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER + * in |pkey_base64| and associated with the given library context |libctx| and + * property query string |propq|. The |name| is a string to help users identify + * this log. + * Returns 1 on success, 0 on failure. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +int CTLOG_new_from_base64_ex(CTLOG **ct_log, const char *pkey_base64, + const char *name, OSSL_LIB_CTX *libctx, + const char *propq); + +/* + * The same as CTLOG_new_from_base64_ex() except that the default + * library context and property query string are used. + * Returns 1 on success, 0 on failure. + */ +int CTLOG_new_from_base64(CTLOG ** ct_log, + const char *pkey_base64, const char *name); + +/* + * Deletes a CT log instance and its fields. + */ +void CTLOG_free(CTLOG *log); + +/* Gets the name of the CT log */ +const char *CTLOG_get0_name(const CTLOG *log); +/* Gets the ID of the CT log */ +void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id, + size_t *log_id_len); +/* Gets the public key of the CT log */ +EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); + +/************************** + * CT log store functions * + **************************/ + +/* + * Creates a new CT log store and associates it with the given libctx and + * property query string. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +/* + * Same as CTLOG_STORE_new_ex except that the default libctx and + * property query string are used. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new(void); + +/* + * Deletes a CT log store and all of the CT log instances held within. + */ +void CTLOG_STORE_free(CTLOG_STORE *store); + +/* + * Finds a CT log in the store based on its log ID. + * Returns the CT log, or NULL if no match is found. + */ +const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store, + const uint8_t *log_id, + size_t log_id_len); + +/* + * Loads a CT log list into a |store| from a |file|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); + +/* + * Loads the default CT log list into a |store|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cterr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cterr.h index feb7bc56..935d32d8 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cterr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cterr.h @@ -1,59 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_CTERR_H -# define HEADER_CTERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_CTERR_H +# define OPENSSL_CTERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_CT -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_CT_strings(void); - -/* - * CT function codes. - */ -# define CT_F_CTLOG_NEW 117 -# define CT_F_CTLOG_NEW_FROM_BASE64 118 -# define CT_F_CTLOG_NEW_FROM_CONF 119 -# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 -# define CT_F_CTLOG_STORE_LOAD_FILE 123 -# define CT_F_CTLOG_STORE_LOAD_LOG 130 -# define CT_F_CTLOG_STORE_NEW 131 -# define CT_F_CT_BASE64_DECODE 124 -# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 -# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 -# define CT_F_I2O_SCT 107 -# define CT_F_I2O_SCT_LIST 108 -# define CT_F_I2O_SCT_SIGNATURE 109 -# define CT_F_O2I_SCT 110 -# define CT_F_O2I_SCT_LIST 111 -# define CT_F_O2I_SCT_SIGNATURE 112 -# define CT_F_SCT_CTX_NEW 126 -# define CT_F_SCT_CTX_VERIFY 128 -# define CT_F_SCT_NEW 100 -# define CT_F_SCT_NEW_FROM_BASE64 127 -# define CT_F_SCT_SET0_LOG_ID 101 -# define CT_F_SCT_SET1_EXTENSIONS 114 -# define CT_F_SCT_SET1_LOG_ID 115 -# define CT_F_SCT_SET1_SIGNATURE 116 -# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 -# define CT_F_SCT_SET_SIGNATURE_NID 103 -# define CT_F_SCT_SET_VERSION 104 /* * CT reason codes. diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/decoder.h b/deps/openssl/android/x86_64/usr/local/include/openssl/decoder.h new file mode 100644 index 00000000..d4ee2cf4 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/decoder.h @@ -0,0 +1,133 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_DECODER_H +# define OPENSSL_DECODER_H +# pragma once + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_DECODER *OSSL_DECODER_fetch(OSSL_LIB_CTX *libctx, const char *name, + const char *properties); +int OSSL_DECODER_up_ref(OSSL_DECODER *encoder); +void OSSL_DECODER_free(OSSL_DECODER *encoder); + +const OSSL_PROVIDER *OSSL_DECODER_get0_provider(const OSSL_DECODER *encoder); +const char *OSSL_DECODER_get0_properties(const OSSL_DECODER *encoder); +const char *OSSL_DECODER_get0_name(const OSSL_DECODER *decoder); +const char *OSSL_DECODER_get0_description(const OSSL_DECODER *decoder); +int OSSL_DECODER_is_a(const OSSL_DECODER *encoder, const char *name); + +void OSSL_DECODER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_DECODER *encoder, void *arg), + void *arg); +int OSSL_DECODER_names_do_all(const OSSL_DECODER *encoder, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *OSSL_DECODER_gettable_params(OSSL_DECODER *decoder); +int OSSL_DECODER_get_params(OSSL_DECODER *decoder, OSSL_PARAM params[]); + +const OSSL_PARAM *OSSL_DECODER_settable_ctx_params(OSSL_DECODER *encoder); +OSSL_DECODER_CTX *OSSL_DECODER_CTX_new(void); +int OSSL_DECODER_CTX_set_params(OSSL_DECODER_CTX *ctx, + const OSSL_PARAM params[]); +void OSSL_DECODER_CTX_free(OSSL_DECODER_CTX *ctx); + +/* Utilities that help set specific parameters */ +int OSSL_DECODER_CTX_set_passphrase(OSSL_DECODER_CTX *ctx, + const unsigned char *kstr, size_t klen); +int OSSL_DECODER_CTX_set_pem_password_cb(OSSL_DECODER_CTX *ctx, + pem_password_cb *cb, void *cbarg); +int OSSL_DECODER_CTX_set_passphrase_cb(OSSL_DECODER_CTX *ctx, + OSSL_PASSPHRASE_CALLBACK *cb, + void *cbarg); +int OSSL_DECODER_CTX_set_passphrase_ui(OSSL_DECODER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); + +/* + * Utilities to read the object to decode, with the result sent to cb. + * These will discover all provided methods + */ + +int OSSL_DECODER_CTX_set_selection(OSSL_DECODER_CTX *ctx, int selection); +int OSSL_DECODER_CTX_set_input_type(OSSL_DECODER_CTX *ctx, + const char *input_type); +int OSSL_DECODER_CTX_set_input_structure(OSSL_DECODER_CTX *ctx, + const char *input_structure); +int OSSL_DECODER_CTX_add_decoder(OSSL_DECODER_CTX *ctx, OSSL_DECODER *decoder); +int OSSL_DECODER_CTX_add_extra(OSSL_DECODER_CTX *ctx, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_DECODER_CTX_get_num_decoders(OSSL_DECODER_CTX *ctx); + +typedef struct ossl_decoder_instance_st OSSL_DECODER_INSTANCE; +OSSL_DECODER * +OSSL_DECODER_INSTANCE_get_decoder(OSSL_DECODER_INSTANCE *decoder_inst); +void * +OSSL_DECODER_INSTANCE_get_decoder_ctx(OSSL_DECODER_INSTANCE *decoder_inst); +const char * +OSSL_DECODER_INSTANCE_get_input_type(OSSL_DECODER_INSTANCE *decoder_inst); +const char * +OSSL_DECODER_INSTANCE_get_input_structure(OSSL_DECODER_INSTANCE *decoder_inst, + int *was_set); + +typedef int OSSL_DECODER_CONSTRUCT(OSSL_DECODER_INSTANCE *decoder_inst, + const OSSL_PARAM *params, + void *construct_data); +typedef void OSSL_DECODER_CLEANUP(void *construct_data); + +int OSSL_DECODER_CTX_set_construct(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_CONSTRUCT *construct); +int OSSL_DECODER_CTX_set_construct_data(OSSL_DECODER_CTX *ctx, + void *construct_data); +int OSSL_DECODER_CTX_set_cleanup(OSSL_DECODER_CTX *ctx, + OSSL_DECODER_CLEANUP *cleanup); +OSSL_DECODER_CONSTRUCT *OSSL_DECODER_CTX_get_construct(OSSL_DECODER_CTX *ctx); +void *OSSL_DECODER_CTX_get_construct_data(OSSL_DECODER_CTX *ctx); +OSSL_DECODER_CLEANUP *OSSL_DECODER_CTX_get_cleanup(OSSL_DECODER_CTX *ctx); + +int OSSL_DECODER_export(OSSL_DECODER_INSTANCE *decoder_inst, + void *reference, size_t reference_sz, + OSSL_CALLBACK *export_cb, void *export_cbarg); + +int OSSL_DECODER_from_bio(OSSL_DECODER_CTX *ctx, BIO *in); +#ifndef OPENSSL_NO_STDIO +int OSSL_DECODER_from_fp(OSSL_DECODER_CTX *ctx, FILE *in); +#endif +int OSSL_DECODER_from_data(OSSL_DECODER_CTX *ctx, const unsigned char **pdata, + size_t *pdata_len); + +/* + * Create the OSSL_DECODER_CTX with an associated type. This will perform + * an implicit OSSL_DECODER_fetch(), suitable for the object of that type. + */ +OSSL_DECODER_CTX * +OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey, + const char *input_type, + const char *input_struct, + const char *keytype, int selection, + OSSL_LIB_CTX *libctx, const char *propquery); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/decodererr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/decodererr.h new file mode 100644 index 00000000..4212a38b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/decodererr.h @@ -0,0 +1,28 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_DECODERERR_H +# define OPENSSL_DECODERERR_H +# pragma once + +# include +# include +# include + + + +/* + * OSSL_DECODER reason codes. + */ +# define OSSL_DECODER_R_COULD_NOT_DECODE_OBJECT 101 +# define OSSL_DECODER_R_DECODER_NOT_FOUND 102 +# define OSSL_DECODER_R_MISSING_GET_PARAMS 100 + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/des.h b/deps/openssl/android/x86_64/usr/local/include/openssl/des.h index be4abbdf..09798a61 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/des.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/des.h @@ -1,29 +1,36 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DES_H -# define HEADER_DES_H +#ifndef OPENSSL_DES_H +# define OPENSSL_DES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DES_H +# endif # include # ifndef OPENSSL_NO_DES -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif -# include +# endif +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int DES_LONG; -# ifdef OPENSSL_BUILD_SHLIBCRYPTO -# undef OPENSSL_EXTERN -# define OPENSSL_EXTERN OPENSSL_EXPORT -# endif +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif typedef unsigned char DES_cblock[8]; typedef /* const */ unsigned char const_DES_cblock[8]; @@ -42,53 +49,62 @@ typedef struct DES_ks { } ks[16]; } DES_key_schedule; -# define DES_KEY_SZ (sizeof(DES_cblock)) -# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) +# define DES_KEY_SZ (sizeof(DES_cblock)) +# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) -# define DES_ENCRYPT 1 -# define DES_DECRYPT 0 +# define DES_ENCRYPT 1 +# define DES_DECRYPT 0 -# define DES_CBC_MODE 0 -# define DES_PCBC_MODE 1 +# define DES_CBC_MODE 0 +# define DES_PCBC_MODE 1 -# define DES_ecb2_encrypt(i,o,k1,k2,e) \ +# define DES_ecb2_encrypt(i,o,k1,k2,e) \ DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) -# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ +# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) -# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ +# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) -# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ +# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) -OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ -# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) - -const char *DES_options(void); +# define DES_fixup_key_parity DES_set_odd_parity +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *DES_options(void); +OSSL_DEPRECATEDIN_3_0 void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, int enc); +OSSL_DEPRECATEDIN_3_0 DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, long length, DES_key_schedule *schedule, const_DES_cblock *ivec); +# endif /* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, const_DES_cblock *inw, - const_DES_cblock *outw, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + const_DES_cblock *inw, const_DES_cblock *outw, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec, int enc); + long length, DES_key_schedule *schedule, DES_cblock *ivec, + int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks, int enc); +# endif /* * This is the DES encryption function that gets called by just about every @@ -100,7 +116,10 @@ void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, * long's and ks is the DES_key_schedule to use. enc, is non zero specifies * encryption, zero if decryption. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); +# endif /* * This functions is the same as DES_encrypt1() except that the DES initial @@ -110,65 +129,83 @@ void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() * DES_encrypt1() DES_encrypt1() except faster :-). */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); - -void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); -void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, - DES_key_schedule *ks2, DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 +void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 +void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, - long length, - DES_key_schedule *ks1, DES_key_schedule *ks2, - DES_key_schedule *ks3, DES_cblock *ivec, int enc); + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int *num); +OSSL_DEPRECATEDIN_3_0 char *DES_fcrypt(const char *buf, const char *salt, char *ret); +OSSL_DEPRECATEDIN_3_0 char *DES_crypt(const char *buf, const char *salt); +OSSL_DEPRECATEDIN_3_0 void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, - long length, DES_key_schedule *schedule, - DES_cblock *ivec); + long length, DES_key_schedule *schedule, DES_cblock *ivec); +OSSL_DEPRECATEDIN_3_0 void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc); +OSSL_DEPRECATEDIN_3_0 DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], long length, int out_count, DES_cblock *seed); -int DES_random_key(DES_cblock *ret); -void DES_set_odd_parity(DES_cblock *key); -int DES_check_key_parity(const_DES_cblock *key); -int DES_is_weak_key(const_DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_random_key(DES_cblock *ret); +OSSL_DEPRECATEDIN_3_0 void DES_set_odd_parity(DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_check_key_parity(const_DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 int DES_is_weak_key(const_DES_cblock *key); +# endif /* * DES_set_key (= set_key = DES_key_sched = key_sched) calls - * DES_set_key_checked if global variable DES_check_key is set, - * DES_set_key_unchecked otherwise. + * DES_set_key_checked */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); +OSSL_DEPRECATEDIN_3_0 void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); -void DES_string_to_key(const char *str, DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 void DES_string_to_key(const char *str, DES_cblock *key); +OSSL_DEPRECATEDIN_3_0 void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); +OSSL_DEPRECATEDIN_3_0 void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec, int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec, int *num); +# endif -# define DES_fixup_key_parity DES_set_odd_parity - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/dh.h b/deps/openssl/android/x86_64/usr/local/include/openssl/dh.h index 6c6ff363..8bc17448 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/dh.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/dh.h @@ -1,316 +1,62 @@ /* * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DH_H -# define HEADER_DH_H +#ifndef OPENSSL_DH_H +# define OPENSSL_DH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DH_H +# endif # include - -# ifndef OPENSSL_NO_DH -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include +# include # ifdef __cplusplus extern "C" { # endif -# ifndef OPENSSL_DH_MAX_MODULUS_BITS -# define OPENSSL_DH_MAX_MODULUS_BITS 10000 -# endif -# ifndef OPENSSL_DH_CHECK_MAX_MODULUS_BITS -# define OPENSSL_DH_CHECK_MAX_MODULUS_BITS 32768 -# endif +#include -# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 +/* DH parameter generation types used by EVP_PKEY_CTX_set_dh_paramgen_type() */ +# define DH_PARAMGEN_TYPE_GENERATOR 0 /* Use a safe prime generator */ +# define DH_PARAMGEN_TYPE_FIPS_186_2 1 /* Use FIPS186-2 standard */ +# define DH_PARAMGEN_TYPE_FIPS_186_4 2 /* Use FIPS186-4 standard */ +# define DH_PARAMGEN_TYPE_GROUP 3 /* Use a named safe prime group */ -# define DH_FLAG_CACHE_MONT_P 0x01 +int EVP_PKEY_CTX_set_dh_paramgen_type(EVP_PKEY_CTX *ctx, int typ); +int EVP_PKEY_CTX_set_dh_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); +int EVP_PKEY_CTX_set_dh_paramgen_seed(EVP_PKEY_CTX *ctx, + const unsigned char *seed, + size_t seedlen); +int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int pbits); +int EVP_PKEY_CTX_set_dh_paramgen_subprime_len(EVP_PKEY_CTX *ctx, int qlen); +int EVP_PKEY_CTX_set_dh_paramgen_generator(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid); +int EVP_PKEY_CTX_set_dh_rfc5114(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dhx_rfc5114(EVP_PKEY_CTX *ctx, int gen); +int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad); -# if OPENSSL_API_COMPAT < 0x10100000L -/* - * Does nothing. Previously this switched off constant time behaviour. - */ -# define DH_FLAG_NO_EXP_CONSTTIME 0x00 -# endif - -/* - * If this flag is set the DH method is FIPS compliant and can be used in - * FIPS mode. This is set in the validated module method. If an application - * sets this flag in its own methods it is its responsibility to ensure the - * result is compliant. - */ - -# define DH_FLAG_FIPS_METHOD 0x0400 - -/* - * If this flag is set the operations normally disabled in FIPS mode are - * permitted it is then the applications responsibility to ensure that the - * usage is compliant. - */ - -# define DH_FLAG_NON_FIPS_ALLOW 0x0400 - -/* Already defined in ossl_typ.h */ -/* typedef struct dh_st DH; */ -/* typedef struct dh_method DH_METHOD; */ - -DECLARE_ASN1_ITEM(DHparams) - -# define DH_GENERATOR_2 2 -/* #define DH_GENERATOR_3 3 */ -# define DH_GENERATOR_5 5 - -/* DH_check error codes */ -# define DH_CHECK_P_NOT_PRIME 0x01 -# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 -# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 -# define DH_NOT_SUITABLE_GENERATOR 0x08 -# define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 -# define DH_CHECK_INVALID_J_VALUE 0x40 - -/* DH_check_pub_key error codes */ -# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 -# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 -# define DH_CHECK_PUBKEY_INVALID 0x04 - -/* - * primes p where (p-1)/2 is prime too are called "safe"; we define this for - * backward compatibility: - */ -# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME - -# define d2i_DHparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) -# define d2i_DHparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) -# define i2d_DHparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) - -# define d2i_DHxparams_fp(fp,x) \ - (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ - (char *(*)())d2i_DHxparams, \ - (fp), \ - (unsigned char **)(x)) -# define i2d_DHxparams_fp(fp,x) \ - ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) -# define d2i_DHxparams_bio(bp,x) \ - ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) -# define i2d_DHxparams_bio(bp,x) \ - ASN1_i2d_bio_of_const(DH, i2d_DHxparams, bp, x) - -DH *DHparams_dup(DH *); - -const DH_METHOD *DH_OpenSSL(void); - -void DH_set_default_method(const DH_METHOD *meth); -const DH_METHOD *DH_get_default_method(void); -int DH_set_method(DH *dh, const DH_METHOD *meth); -DH *DH_new_method(ENGINE *engine); - -DH *DH_new(void); -void DH_free(DH *dh); -int DH_up_ref(DH *dh); -int DH_bits(const DH *dh); -int DH_size(const DH *dh); -int DH_security_bits(const DH *dh); -#define DH_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) -int DH_set_ex_data(DH *d, int idx, void *arg); -void *DH_get_ex_data(DH *d, int idx); - -/* Deprecated version */ -DEPRECATEDIN_0_9_8(DH *DH_generate_parameters(int prime_len, int generator, - void (*callback) (int, int, - void *), - void *cb_arg)) - -/* New version */ -int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, - BN_GENCB *cb); - -int DH_check_params_ex(const DH *dh); -int DH_check_ex(const DH *dh); -int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); -int DH_check_params(const DH *dh, int *ret); -int DH_check(const DH *dh, int *codes); -int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); -int DH_generate_key(DH *dh); -int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); -DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); -int i2d_DHparams(const DH *a, unsigned char **pp); -DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); -int i2d_DHxparams(const DH *a, unsigned char **pp); -# ifndef OPENSSL_NO_STDIO -int DHparams_print_fp(FILE *fp, const DH *x); -# endif -int DHparams_print(BIO *bp, const DH *x); - -/* RFC 5114 parameters */ -DH *DH_get_1024_160(void); -DH *DH_get_2048_224(void); -DH *DH_get_2048_256(void); - -/* Named parameters, currently RFC7919 */ -DH *DH_new_by_nid(int nid); -int DH_get_nid(const DH *dh); - -# ifndef OPENSSL_NO_CMS -/* RFC2631 KDF */ -int DH_KDF_X9_42(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - ASN1_OBJECT *key_oid, - const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); -# endif - -void DH_get0_pqg(const DH *dh, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DH_get0_key(const DH *dh, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DH_get0_p(const DH *dh); -const BIGNUM *DH_get0_q(const DH *dh); -const BIGNUM *DH_get0_g(const DH *dh); -const BIGNUM *DH_get0_priv_key(const DH *dh); -const BIGNUM *DH_get0_pub_key(const DH *dh); -void DH_clear_flags(DH *dh, int flags); -int DH_test_flags(const DH *dh, int flags); -void DH_set_flags(DH *dh, int flags); -ENGINE *DH_get0_engine(DH *d); -long DH_get_length(const DH *dh); -int DH_set_length(DH *dh, long length); - -DH_METHOD *DH_meth_new(const char *name, int flags); -void DH_meth_free(DH_METHOD *dhm); -DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); -const char *DH_meth_get0_name(const DH_METHOD *dhm); -int DH_meth_set1_name(DH_METHOD *dhm, const char *name); -int DH_meth_get_flags(const DH_METHOD *dhm); -int DH_meth_set_flags(DH_METHOD *dhm, int flags); -void *DH_meth_get0_app_data(const DH_METHOD *dhm); -int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); -int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *)); -int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) - (unsigned char *key, const BIGNUM *pub_key, DH *dh); -int DH_meth_set_compute_key(DH_METHOD *dhm, - int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh)); -int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) - (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *, BN_MONT_CTX *); -int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, - int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, - const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); -int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); -int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); -int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); -int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) - (DH *, int, int, BN_GENCB *); -int DH_meth_set_generate_params(DH_METHOD *dhm, - int (*generate_params) (DH *, int, int, BN_GENCB *)); - - -# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) - -# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) - -# define EVP_PKEY_CTX_set_dh_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, \ - EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_DH_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_dh_pad(ctx, pad) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_PAD, pad, NULL) - -# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)(oid)) - -# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)(poid)) - -# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)(plen)) - -# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)(p)) +int EVP_PKEY_CTX_set_dh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +int EVP_PKEY_CTX_get_dh_kdf_type(EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_set0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT *oid); +int EVP_PKEY_CTX_get0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT **oid); +int EVP_PKEY_CTX_set_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_get_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_set_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +int EVP_PKEY_CTX_get_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); +int EVP_PKEY_CTX_set0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_get0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); +#endif # define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) @@ -331,13 +77,259 @@ int DH_meth_set_generate_params(DH_METHOD *dhm, /* KDF types */ # define EVP_PKEY_DH_KDF_NONE 1 -# ifndef OPENSSL_NO_CMS # define EVP_PKEY_DH_KDF_X9_42 2 + +# ifndef OPENSSL_NO_STDIO +# include # endif - - -# ifdef __cplusplus -} +# ifndef OPENSSL_NO_DH +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include # endif +# include + +# ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +# endif + +# ifndef OPENSSL_DH_CHECK_MAX_MODULUS_BITS +# define OPENSSL_DH_CHECK_MAX_MODULUS_BITS 32768 +# endif + +# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 + +# define DH_FLAG_CACHE_MONT_P 0x01 + +# define DH_FLAG_TYPE_MASK 0xF000 +# define DH_FLAG_TYPE_DH 0x0000 +# define DH_FLAG_TYPE_DHX 0x1000 + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DH_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * If this flag is set the DH method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define DH_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DH_FLAG_NON_FIPS_ALLOW 0x0400 +# endif + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +DECLARE_ASN1_ITEM(DHparams) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DH_GENERATOR_2 2 +# define DH_GENERATOR_3 3 +# define DH_GENERATOR_5 5 + +/* DH_check error codes */ +/* + * NB: These values must align with the equivalently named macros in + * internal/ffc.h. + */ +# define DH_CHECK_P_NOT_PRIME 0x01 +# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 +# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 +# define DH_NOT_SUITABLE_GENERATOR 0x08 +# define DH_CHECK_Q_NOT_PRIME 0x10 +# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_J_VALUE 0x40 +# define DH_MODULUS_TOO_SMALL 0x80 +# define DH_MODULUS_TOO_LARGE 0x100 + +/* DH_check_pub_key error codes */ +# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 +# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 +# define DH_CHECK_PUBKEY_INVALID 0x04 + +/* + * primes p where (p-1)/2 is prime too are called "safe"; we define this for + * backward compatibility: + */ +# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME + +# define d2i_DHparams_fp(fp, x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) +# define d2i_DHparams_bio(bp, x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) +# define i2d_DHparams_bio(bp, x) \ + ASN1_i2d_bio_of(DH, i2d_DHparams, bp, x) + +# define d2i_DHxparams_fp(fp,x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHxparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHxparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) +# define d2i_DHxparams_bio(bp, x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) +# define i2d_DHxparams_bio(bp, x) \ + ASN1_i2d_bio_of(DH, i2d_DHxparams, bp, x) + +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, DH, DHparams) + +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *DH_OpenSSL(void); + +OSSL_DEPRECATEDIN_3_0 void DH_set_default_method(const DH_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *DH_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 int DH_set_method(DH *dh, const DH_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 DH *DH_new_method(ENGINE *engine); + +OSSL_DEPRECATEDIN_3_0 DH *DH_new(void); +OSSL_DEPRECATEDIN_3_0 void DH_free(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_up_ref(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_bits(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_size(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_security_bits(const DH *dh); + +# define DH_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) + +OSSL_DEPRECATEDIN_3_0 int DH_set_ex_data(DH *d, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *DH_get_ex_data(const DH *d, int idx); + +OSSL_DEPRECATEDIN_3_0 int DH_generate_parameters_ex(DH *dh, int prime_len, + int generator, + BN_GENCB *cb); + +OSSL_DEPRECATEDIN_3_0 int DH_check_params_ex(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_check_ex(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); +OSSL_DEPRECATEDIN_3_0 int DH_check_params(const DH *dh, int *ret); +OSSL_DEPRECATEDIN_3_0 int DH_check(const DH *dh, int *codes); +OSSL_DEPRECATEDIN_3_0 int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, + int *codes); +OSSL_DEPRECATEDIN_3_0 int DH_generate_key(DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_compute_key(unsigned char *key, + const BIGNUM *pub_key, DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_compute_key_padded(unsigned char *key, + const BIGNUM *pub_key, DH *dh); + +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, DH, DHparams) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, DH, DHxparams) + +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int DHparams_print_fp(FILE *fp, const DH *x); +# endif +OSSL_DEPRECATEDIN_3_0 int DHparams_print(BIO *bp, const DH *x); + +/* RFC 5114 parameters */ +OSSL_DEPRECATEDIN_3_0 DH *DH_get_1024_160(void); +OSSL_DEPRECATEDIN_3_0 DH *DH_get_2048_224(void); +OSSL_DEPRECATEDIN_3_0 DH *DH_get_2048_256(void); + +/* Named parameters, currently RFC7919 and RFC3526 */ +OSSL_DEPRECATEDIN_3_0 DH *DH_new_by_nid(int nid); +OSSL_DEPRECATEDIN_3_0 int DH_get_nid(const DH *dh); + +/* RFC2631 KDF */ +OSSL_DEPRECATEDIN_3_0 int DH_KDF_X9_42(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + ASN1_OBJECT *key_oid, + const unsigned char *ukm, + size_t ukmlen, const EVP_MD *md); + +OSSL_DEPRECATEDIN_3_0 void DH_get0_pqg(const DH *dh, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +OSSL_DEPRECATEDIN_3_0 int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 void DH_get0_key(const DH *dh, const BIGNUM **pub_key, + const BIGNUM **priv_key); +OSSL_DEPRECATEDIN_3_0 int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_p(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_q(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_g(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_priv_key(const DH *dh); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DH_get0_pub_key(const DH *dh); +OSSL_DEPRECATEDIN_3_0 void DH_clear_flags(DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 int DH_test_flags(const DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 void DH_set_flags(DH *dh, int flags); +OSSL_DEPRECATEDIN_3_0 ENGINE *DH_get0_engine(DH *d); +OSSL_DEPRECATEDIN_3_0 long DH_get_length(const DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_set_length(DH *dh, long length); + +OSSL_DEPRECATEDIN_3_0 DH_METHOD *DH_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void DH_meth_free(DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 const char *DH_meth_get0_name(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set1_name(DH_METHOD *dhm, const char *name); +OSSL_DEPRECATEDIN_3_0 int DH_meth_get_flags(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_flags(DH_METHOD *dhm, int flags); +OSSL_DEPRECATEDIN_3_0 void *DH_meth_get0_app_data(const DH_METHOD *dhm); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_generate_key(DH_METHOD *dhm, + int (*generate_key) (DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) + (unsigned char *key, + const BIGNUM *pub_key, + DH *dh); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_compute_key(DH_METHOD *dhm, + int (*compute_key) + (unsigned char *key, + const BIGNUM *pub_key, + DH *dh)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) + (const DH *, BIGNUM *, + const BIGNUM *, + const BIGNUM *, + const BIGNUM *, BN_CTX *, + BN_MONT_CTX *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, + int (*bn_mod_exp) + (const DH *, BIGNUM *, + const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, + BN_MONT_CTX *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); +OSSL_DEPRECATEDIN_3_0 int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) + (DH *, int, int, + BN_GENCB *); +OSSL_DEPRECATEDIN_3_0 int DH_meth_set_generate_params(DH_METHOD *dhm, + int (*generate_params) + (DH *, int, int, + BN_GENCB *)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 DH *DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, + void *), + void *cb_arg); +# endif + +# endif +# ifdef __cplusplus +} # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/dherr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/dherr.h index 528c8198..5d2a762a 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/dherr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/dherr.h @@ -1,63 +1,29 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DHERR_H -# define HEADER_DHERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_DHERR_H +# define OPENSSL_DHERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_DH -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DH_strings(void); - -/* - * DH function codes. - */ -# define DH_F_COMPUTE_KEY 102 -# define DH_F_DHPARAMS_PRINT_FP 101 -# define DH_F_DH_BUILTIN_GENPARAMS 106 -# define DH_F_DH_CHECK 126 -# define DH_F_DH_CHECK_EX 121 -# define DH_F_DH_CHECK_PARAMS_EX 122 -# define DH_F_DH_CHECK_PUB_KEY_EX 123 -# define DH_F_DH_CMS_DECRYPT 114 -# define DH_F_DH_CMS_SET_PEERKEY 115 -# define DH_F_DH_CMS_SET_SHARED_INFO 116 -# define DH_F_DH_METH_DUP 117 -# define DH_F_DH_METH_NEW 118 -# define DH_F_DH_METH_SET1_NAME 119 -# define DH_F_DH_NEW_BY_NID 104 -# define DH_F_DH_NEW_METHOD 105 -# define DH_F_DH_PARAM_DECODE 107 -# define DH_F_DH_PKEY_PUBLIC_CHECK 124 -# define DH_F_DH_PRIV_DECODE 110 -# define DH_F_DH_PRIV_ENCODE 111 -# define DH_F_DH_PUB_DECODE 108 -# define DH_F_DH_PUB_ENCODE 109 -# define DH_F_DO_DH_PRINT 100 -# define DH_F_GENERATE_KEY 103 -# define DH_F_PKEY_DH_CTRL_STR 120 -# define DH_F_PKEY_DH_DERIVE 112 -# define DH_F_PKEY_DH_INIT 125 -# define DH_F_PKEY_DH_KEYGEN 113 /* * DH reason codes. */ +# define DH_R_BAD_FFC_PARAMETERS 127 # define DH_R_BAD_GENERATOR 101 # define DH_R_BN_DECODE_ERROR 109 # define DH_R_BN_ERROR 106 @@ -73,10 +39,12 @@ int ERR_load_DH_strings(void); # define DH_R_INVALID_PARAMETER_NAME 110 # define DH_R_INVALID_PARAMETER_NID 114 # define DH_R_INVALID_PUBKEY 102 +# define DH_R_INVALID_SECRET 128 # define DH_R_KDF_PARAMETER_ERROR 112 # define DH_R_KEYS_NOT_SET 108 # define DH_R_MISSING_PUBKEY 125 # define DH_R_MODULUS_TOO_LARGE 103 +# define DH_R_MODULUS_TOO_SMALL 126 # define DH_R_NOT_SUITABLE_GENERATOR 120 # define DH_R_NO_PARAMETERS_SET 107 # define DH_R_NO_PRIVATE_VALUE 100 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/dsa.h b/deps/openssl/android/x86_64/usr/local/include/openssl/dsa.h index 6d8a18a4..160404cc 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/dsa.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/dsa.h @@ -1,44 +1,85 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DSA_H -# define HEADER_DSA_H +#ifndef OPENSSL_DSA_H +# define OPENSSL_DSA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DSA_H +# endif # include +# include + +# include # ifndef OPENSSL_NO_DSA +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif +# endif + # ifdef __cplusplus extern "C" { # endif -# include -# include -# include -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include -# ifndef OPENSSL_DSA_MAX_MODULUS_BITS -# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 -# endif +int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits); +int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx, int qbits); +int EVP_PKEY_CTX_set_dsa_paramgen_md_props(EVP_PKEY_CTX *ctx, + const char *md_name, + const char *md_properties); +int EVP_PKEY_CTX_set_dsa_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); +int EVP_PKEY_CTX_set_dsa_paramgen_type(EVP_PKEY_CTX *ctx, const char *name); +int EVP_PKEY_CTX_set_dsa_paramgen_seed(EVP_PKEY_CTX *ctx, + const unsigned char *seed, + size_t seedlen); +int EVP_PKEY_CTX_set_dsa_paramgen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 +# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) -# define DSA_FLAG_CACHE_MONT_P 0x01 -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DSA +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 + +typedef struct DSA_SIG_st DSA_SIG; +DSA_SIG *DSA_SIG_new(void); +void DSA_SIG_free(DSA_SIG *a); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(DSA_SIG, DSA_SIG) +void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); +int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); + + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * Does nothing. Previously this switched off constant time behaviour. */ -# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 -# endif +# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DSA_FLAG_CACHE_MONT_P 0x01 /* * If this flag is set the DSA method is FIPS compliant and can be used in @@ -47,7 +88,7 @@ extern "C" { * result is compliant. */ -# define DSA_FLAG_FIPS_METHOD 0x0400 +# define DSA_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are @@ -55,190 +96,185 @@ extern "C" { * usage is compliant. */ -# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 -# define DSA_FLAG_FIPS_CHECKED 0x0800 +# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 +# define DSA_FLAG_FIPS_CHECKED 0x0800 /* Already defined in ossl_typ.h */ /* typedef struct dsa_st DSA; */ /* typedef struct dsa_method DSA_METHOD; */ -typedef struct DSA_SIG_st DSA_SIG; +# define d2i_DSAparams_fp(fp, x) \ + (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ + (char *(*)())d2i_DSAparams, (fp), \ + (unsigned char **)(x)) +# define i2d_DSAparams_fp(fp, x) \ + ASN1_i2d_fp(i2d_DSAparams, (fp), (unsigned char *)(x)) +# define d2i_DSAparams_bio(bp, x) \ + ASN1_d2i_bio_of(DSA, DSA_new, d2i_DSAparams, bp, x) +# define i2d_DSAparams_bio(bp, x) \ + ASN1_i2d_bio_of(DSA, i2d_DSAparams, bp, x) -# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ - (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) -# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ - (unsigned char *)(x)) -# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) -# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, DSA, DSAparams) +OSSL_DEPRECATEDIN_3_0 DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, + DSA *dsa); +OSSL_DEPRECATEDIN_3_0 int DSA_do_verify(const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); -DSA *DSAparams_dup(DSA *x); -DSA_SIG *DSA_SIG_new(void); -void DSA_SIG_free(DSA_SIG *a); -int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); -DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); -void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); -int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_OpenSSL(void); -DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); -int DSA_do_verify(const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); +OSSL_DEPRECATEDIN_3_0 void DSA_set_default_method(const DSA_METHOD *); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 int DSA_set_method(DSA *dsa, const DSA_METHOD *); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_get_method(DSA *d); -const DSA_METHOD *DSA_OpenSSL(void); - -void DSA_set_default_method(const DSA_METHOD *); -const DSA_METHOD *DSA_get_default_method(void); -int DSA_set_method(DSA *dsa, const DSA_METHOD *); -const DSA_METHOD *DSA_get_method(DSA *d); - -DSA *DSA_new(void); -DSA *DSA_new_method(ENGINE *engine); -void DSA_free(DSA *r); +OSSL_DEPRECATEDIN_3_0 DSA *DSA_new(void); +OSSL_DEPRECATEDIN_3_0 DSA *DSA_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 void DSA_free(DSA *r); /* "up" the DSA object's reference count */ -int DSA_up_ref(DSA *r); -int DSA_size(const DSA *); -int DSA_bits(const DSA *d); -int DSA_security_bits(const DSA *d); +OSSL_DEPRECATEDIN_3_0 int DSA_up_ref(DSA *r); +OSSL_DEPRECATEDIN_3_0 int DSA_size(const DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_bits(const DSA *d); +OSSL_DEPRECATEDIN_3_0 int DSA_security_bits(const DSA *d); /* next 4 return -1 on error */ -DEPRECATEDIN_1_2_0(int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)) -int DSA_sign(int type, const unsigned char *dgst, int dlen, - unsigned char *sig, unsigned int *siglen, DSA *dsa); -int DSA_verify(int type, const unsigned char *dgst, int dgst_len, - const unsigned char *sigbuf, int siglen, DSA *dsa); -#define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) -int DSA_set_ex_data(DSA *d, int idx, void *arg); -void *DSA_get_ex_data(DSA *d, int idx); +OSSL_DEPRECATEDIN_3_0 int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp); +OSSL_DEPRECATEDIN_3_0 int DSA_sign(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, DSA *dsa); +OSSL_DEPRECATEDIN_3_0 int DSA_verify(int type, const unsigned char *dgst, + int dgst_len, const unsigned char *sigbuf, + int siglen, DSA *dsa); -DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); -DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); +# define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) +OSSL_DEPRECATEDIN_3_0 int DSA_set_ex_data(DSA *d, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *DSA_get_ex_data(const DSA *d, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAPrivateKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, + DSA, DSAparams) +# endif + +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 /* Deprecated version */ -DEPRECATEDIN_0_9_8(DSA *DSA_generate_parameters(int bits, - unsigned char *seed, - int seed_len, - int *counter_ret, - unsigned long *h_ret, void - (*callback) (int, int, - void *), - void *cb_arg)) +OSSL_DEPRECATEDIN_0_9_8 +DSA *DSA_generate_parameters(int bits, unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, + void (*callback) (int, int, void *), + void *cb_arg); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* New version */ -int DSA_generate_parameters_ex(DSA *dsa, int bits, - const unsigned char *seed, int seed_len, - int *counter_ret, unsigned long *h_ret, - BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int DSA_generate_parameters_ex(DSA *dsa, int bits, + const unsigned char *seed, + int seed_len, + int *counter_ret, + unsigned long *h_ret, + BN_GENCB *cb); -int DSA_generate_key(DSA *a); -int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); -int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); -int i2d_DSAparams(const DSA *a, unsigned char **pp); +OSSL_DEPRECATEDIN_3_0 int DSA_generate_key(DSA *a); -int DSAparams_print(BIO *bp, const DSA *x); -int DSA_print(BIO *bp, const DSA *x, int off); -# ifndef OPENSSL_NO_STDIO -int DSAparams_print_fp(FILE *fp, const DSA *x); -int DSA_print_fp(FILE *bp, const DSA *x, int off); -# endif +OSSL_DEPRECATEDIN_3_0 int DSAparams_print(BIO *bp, const DSA *x); +OSSL_DEPRECATEDIN_3_0 int DSA_print(BIO *bp, const DSA *x, int off); +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int DSAparams_print_fp(FILE *fp, const DSA *x); +OSSL_DEPRECATEDIN_3_0 int DSA_print_fp(FILE *bp, const DSA *x, int off); +# endif -# define DSS_prime_checks 64 +# define DSS_prime_checks 64 /* * Primality test according to FIPS PUB 186-4, Appendix C.3. Since we only * have one value here we set the number of checks to 64 which is the 128 bit * security level that is the highest level and valid for creating a 3072 bit * DSA key. */ -# define DSA_is_prime(n, callback, cb_arg) \ - BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) +# define DSA_is_prime(n, callback, cb_arg) \ + BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) -# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DH /* * Convert DSA structure (key or just parameters) into DH structure (be * careful to avoid small subgroup attacks when using this!) */ -DH *DSA_dup_DH(const DSA *r); -# endif +OSSL_DEPRECATEDIN_3_0 DH *DSA_dup_DH(const DSA *r); +# endif -# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_q_bits(ctx, qbits) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, qbits, NULL) -# define EVP_PKEY_CTX_set_dsa_paramgen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ - EVP_PKEY_CTRL_DSA_PARAMGEN_MD, 0, (void *)(md)) +OSSL_DEPRECATEDIN_3_0 void DSA_get0_pqg(const DSA *d, const BIGNUM **p, + const BIGNUM **q, const BIGNUM **g); +OSSL_DEPRECATEDIN_3_0 int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 void DSA_get0_key(const DSA *d, const BIGNUM **pub_key, + const BIGNUM **priv_key); +OSSL_DEPRECATEDIN_3_0 int DSA_set0_key(DSA *d, BIGNUM *pub_key, + BIGNUM *priv_key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_p(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_q(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_g(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_pub_key(const DSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *DSA_get0_priv_key(const DSA *d); +OSSL_DEPRECATEDIN_3_0 void DSA_clear_flags(DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 int DSA_test_flags(const DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 void DSA_set_flags(DSA *d, int flags); +OSSL_DEPRECATEDIN_3_0 ENGINE *DSA_get0_engine(DSA *d); -# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) - -void DSA_get0_pqg(const DSA *d, - const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); -int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); -void DSA_get0_key(const DSA *d, - const BIGNUM **pub_key, const BIGNUM **priv_key); -int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); -const BIGNUM *DSA_get0_p(const DSA *d); -const BIGNUM *DSA_get0_q(const DSA *d); -const BIGNUM *DSA_get0_g(const DSA *d); -const BIGNUM *DSA_get0_pub_key(const DSA *d); -const BIGNUM *DSA_get0_priv_key(const DSA *d); -void DSA_clear_flags(DSA *d, int flags); -int DSA_test_flags(const DSA *d, int flags); -void DSA_set_flags(DSA *d, int flags); -ENGINE *DSA_get0_engine(DSA *d); - -DSA_METHOD *DSA_meth_new(const char *name, int flags); -void DSA_meth_free(DSA_METHOD *dsam); -DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); -const char *DSA_meth_get0_name(const DSA_METHOD *dsam); -int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); -int DSA_meth_get_flags(const DSA_METHOD *dsam); -int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); -void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); -int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); -DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 DSA_METHOD *DSA_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void DSA_meth_free(DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 const char *DSA_meth_get0_name(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set1_name(DSA_METHOD *dsam, + const char *name); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_get_flags(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); +OSSL_DEPRECATEDIN_3_0 void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set0_app_data(DSA_METHOD *dsam, + void *app_data); +OSSL_DEPRECATEDIN_3_0 DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) (const unsigned char *, int, DSA *); -int DSA_meth_set_sign(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign(DSA_METHOD *dsam, DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); -int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); -int DSA_meth_set_sign_setup(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign_setup(DSA_METHOD *dsam, int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); -int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) (const unsigned char *, int, DSA_SIG *, DSA *); -int DSA_meth_set_verify(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_verify(DSA_METHOD *dsam, int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); -int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_mod_exp(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_mod_exp(DSA_METHOD *dsam, int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); -int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); -int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); -int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); -int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); -int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_init(DSA_METHOD *dsam, + int (*init)(DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_finish(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_finish(DSA_METHOD *dsam, + int (*finish)(DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) (DSA *, int, const unsigned char *, int, int *, unsigned long *, BN_GENCB *); -int DSA_meth_set_paramgen(DSA_METHOD *dsam, +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_paramgen(DSA_METHOD *dsam, int (*paramgen) (DSA *, int, const unsigned char *, int, int *, unsigned long *, BN_GENCB *)); -int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); -int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); +OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_keygen(const DSA_METHOD *dsam))(DSA *); +OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_keygen(DSA_METHOD *dsam, + int (*keygen) (DSA *)); - -# ifdef __cplusplus -} # endif # endif +# ifdef __cplusplus +} +# endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/dsaerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/dsaerr.h index 495a1ac8..26ada57d 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/dsaerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/dsaerr.h @@ -1,59 +1,29 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DSAERR_H -# define HEADER_DSAERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_DSAERR_H +# define OPENSSL_DSAERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_DSA -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_DSA_strings(void); - -/* - * DSA function codes. - */ -# define DSA_F_DSAPARAMS_PRINT 100 -# define DSA_F_DSAPARAMS_PRINT_FP 101 -# define DSA_F_DSA_BUILTIN_PARAMGEN 125 -# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 -# define DSA_F_DSA_DO_SIGN 112 -# define DSA_F_DSA_DO_VERIFY 113 -# define DSA_F_DSA_METH_DUP 127 -# define DSA_F_DSA_METH_NEW 128 -# define DSA_F_DSA_METH_SET1_NAME 129 -# define DSA_F_DSA_NEW_METHOD 103 -# define DSA_F_DSA_PARAM_DECODE 119 -# define DSA_F_DSA_PRINT_FP 105 -# define DSA_F_DSA_PRIV_DECODE 115 -# define DSA_F_DSA_PRIV_ENCODE 116 -# define DSA_F_DSA_PUB_DECODE 117 -# define DSA_F_DSA_PUB_ENCODE 118 -# define DSA_F_DSA_SIGN 106 -# define DSA_F_DSA_SIGN_SETUP 107 -# define DSA_F_DSA_SIG_NEW 102 -# define DSA_F_OLD_DSA_PRIV_DECODE 122 -# define DSA_F_PKEY_DSA_CTRL 120 -# define DSA_F_PKEY_DSA_CTRL_STR 104 -# define DSA_F_PKEY_DSA_KEYGEN 121 /* * DSA reason codes. */ +# define DSA_R_BAD_FFC_PARAMETERS 114 # define DSA_R_BAD_Q_VALUE 102 # define DSA_R_BN_DECODE_ERROR 108 # define DSA_R_BN_ERROR 109 @@ -65,8 +35,10 @@ int ERR_load_DSA_strings(void); # define DSA_R_MODULUS_TOO_LARGE 103 # define DSA_R_NO_PARAMETERS_SET 107 # define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_P_NOT_PRIME 115 # define DSA_R_Q_NOT_PRIME 113 # define DSA_R_SEED_LEN_SMALL 110 +# define DSA_R_TOO_MANY_RETRIES 116 # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/dtls1.h b/deps/openssl/android/x86_64/usr/local/include/openssl/dtls1.h index d55ca9c3..5dc6b541 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/dtls1.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/dtls1.h @@ -1,36 +1,42 @@ /* - * Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_DTLS1_H -# define HEADER_DTLS1_H +#ifndef OPENSSL_DTLS1_H +# define OPENSSL_DTLS1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_DTLS1_H +# endif + +# include #ifdef __cplusplus extern "C" { #endif -# define DTLS1_VERSION 0xFEFF -# define DTLS1_2_VERSION 0xFEFD -# define DTLS_MIN_VERSION DTLS1_VERSION -# define DTLS_MAX_VERSION DTLS1_2_VERSION -# define DTLS1_VERSION_MAJOR 0xFE +#include -# define DTLS1_BAD_VER 0x0100 +/* DTLS*_VERSION constants are defined in prov_ssl.h */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DTLS_MIN_VERSION DTLS1_VERSION +# define DTLS_MAX_VERSION DTLS1_2_VERSION +# endif +# define DTLS1_VERSION_MAJOR 0xFE /* Special value for method supporting multiple versions */ # define DTLS_ANY_VERSION 0x1FFFF /* lengths of messages */ -/* - * Actually the max cookie length in DTLS is 255. But we can't change this now - * due to compatibility concerns. - */ -# define DTLS1_COOKIE_LENGTH 256 + +# define DTLS1_COOKIE_LENGTH 255 # define DTLS1_RT_HEADER_LENGTH 13 @@ -43,10 +49,6 @@ extern "C" { # define DTLS1_AL_HEADER_LENGTH 2 -/* Timeout multipliers */ -# define DTLS1_TMO_READ_COUNT 2 -# define DTLS1_TMO_WRITE_COUNT 2 - # define DTLS1_TMO_ALERT_COUNT 12 #ifdef __cplusplus diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/e_os2.h b/deps/openssl/android/x86_64/usr/local/include/openssl/e_os2.h index 5c88e519..32e142a9 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/e_os2.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/e_os2.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_E_OS2_H -# define HEADER_E_OS2_H +#ifndef OPENSSL_E_OS2_H +# define OPENSSL_E_OS2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_E_OS2_H +# endif # include @@ -96,11 +102,11 @@ extern "C" { # endif /* ------------------------------- OpenVMS -------------------------------- */ -# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYS_VMS) +# if defined(__VMS) || defined(VMS) # if !defined(OPENSSL_SYS_VMS) # undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_VMS # endif -# define OPENSSL_SYS_VMS # if defined(__DECC) # define OPENSSL_SYS_VMS_DECC # elif defined(__DECCXX) @@ -132,19 +138,25 @@ extern "C" { # endif # endif +/* ---------------------------- HP NonStop -------------------------------- */ +# ifdef __TANDEM +# ifdef _STRING +# include +# endif +# define OPENSSL_USE_BUILD_DATE +# if defined(OPENSSL_THREADS) && defined(_SPT_MODEL_) +# define SPT_THREAD_SIGNAL 1 +# define SPT_THREAD_AWARE 1 +# include +# elif defined(OPENSSL_THREADS) && defined(_PUT_MODEL_) +# include +# endif +# endif + /** * That's it for OS-specific stuff *****************************************************************************/ -/* Specials for I/O an exit */ -# ifdef OPENSSL_SYS_MSDOS -# define OPENSSL_UNISTD_IO -# define OPENSSL_DECLARE_EXIT extern void exit(int); -# else -# define OPENSSL_UNISTD_IO OPENSSL_UNISTD -# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ -# endif - /*- * OPENSSL_EXTERN is normally used to declare a symbol with possible extra * attributes to handle its presence in a shared library. @@ -172,29 +184,6 @@ extern "C" { # define OPENSSL_EXTERN extern # endif -/*- - * Macros to allow global variables to be reached through function calls when - * required (if a shared library version requires it, for example. - * The way it's done allows definitions like this: - * - * // in foobar.c - * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) - * // in foobar.h - * OPENSSL_DECLARE_GLOBAL(int,foobar); - * #define foobar OPENSSL_GLOBAL_REF(foobar) - */ -# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ - type *_shadow_##name(void) \ - { static type _hide_##name=value; return &_hide_##name; } -# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) -# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) -# else -# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) type _shadow_##name=value; -# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name -# define OPENSSL_GLOBAL_REF(name) _shadow_##name -# endif - # ifdef _WIN32 # ifdef _WIN64 # define ossl_ssize_t __int64 @@ -221,13 +210,15 @@ extern "C" { # endif # endif -# ifdef DEBUG_UNUSED +# if defined(UNUSEDRESULT_DEBUG) # define __owur __attribute__((__warn_unused_result__)) # else # define __owur # endif /* Standard integer types */ +# define OPENSSL_NO_INTTYPES_H +# define OPENSSL_NO_STDINT_H # if defined(OPENSSL_SYS_UEFI) typedef INT8 int8_t; typedef UINT8 uint8_t; @@ -241,6 +232,9 @@ typedef UINT64 uint64_t; defined(__osf__) || defined(__sgi) || defined(__hpux) || \ defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) # include +# undef OPENSSL_NO_INTTYPES_H +/* Because the specs say that inttypes.h includes stdint.h if present */ +# undef OPENSSL_NO_STDINT_H # elif defined(_MSC_VER) && _MSC_VER<1600 /* * minimally required typdefs for systems not supporting inttypes.h or @@ -254,8 +248,21 @@ typedef int int32_t; typedef unsigned int uint32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; +# elif defined(OPENSSL_SYS_TANDEM) +# include +# include # else # include +# undef OPENSSL_NO_STDINT_H +# endif +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ + defined(INTMAX_MAX) && defined(UINTMAX_MAX) +typedef intmax_t ossl_intmax_t; +typedef uintmax_t ossl_uintmax_t; +# else +/* Fall back to the largest we know we require and can handle */ +typedef int64_t ossl_intmax_t; +typedef uint64_t ossl_uintmax_t; # endif /* ossl_inline: portable inline definition usable in public headers */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ebcdic.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ebcdic.h index aa012855..e0ae1aa8 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ebcdic.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ebcdic.h @@ -1,14 +1,20 @@ /* * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EBCDIC_H -# define HEADER_EBCDIC_H +#ifndef OPENSSL_EBCDIC_H +# define OPENSSL_EBCDIC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_EBCDIC_H +# endif # include diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ec.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ec.h index 24baf53c..be9fb2f0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ec.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ec.h @@ -1,33 +1,78 @@ /* - * Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EC_H -# define HEADER_EC_H +#ifndef OPENSSL_EC_H +# define OPENSSL_EC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_EC_H +# endif # include +# include + +# include -# ifndef OPENSSL_NO_EC -# include -# include -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# endif -# include # ifdef __cplusplus extern "C" { # endif -# ifndef OPENSSL_ECC_MAX_FIELD_BITS -# define OPENSSL_ECC_MAX_FIELD_BITS 661 +/* Values for EVP_PKEY_CTX_set_ec_param_enc() */ +# define OPENSSL_EC_EXPLICIT_CURVE 0x000 +# define OPENSSL_EC_NAMED_CURVE 0x001 + +int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid); +int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, int param_enc); +int EVP_PKEY_CTX_set_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx, int cofactor_mode); +int EVP_PKEY_CTX_get_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_set_ecdh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); +int EVP_PKEY_CTX_get_ecdh_kdf_type(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_set_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_get_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); + +int EVP_PKEY_CTX_set_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); +int EVP_PKEY_CTX_get_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); + +int EVP_PKEY_CTX_set0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, + int len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_get0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); # endif +# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) + +/* KDF types */ +# define EVP_PKEY_ECDH_KDF_NONE 1 +# define EVP_PKEY_ECDH_KDF_X9_63 2 +/* + * The old name for EVP_PKEY_ECDH_KDF_X9_63 + * The ECDH KDF specification has been mistakenly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility + */ +# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 + /** Enum for the point conversion form as defined in X9.62 (ECDSA) * for the encoding of a elliptic curve point (x,y) */ typedef enum { @@ -41,7 +86,27 @@ typedef enum { POINT_CONVERSION_HYBRID = 6 } point_conversion_form_t; +const char *OSSL_EC_curve_nid2name(int nid); + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# ifndef OPENSSL_NO_EC +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include + +# ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef struct ec_method_st EC_METHOD; +# endif typedef struct ec_group_st EC_GROUP; typedef struct ec_point_st EC_POINT; typedef struct ecpk_parameters_st ECPKPARAMETERS; @@ -51,40 +116,41 @@ typedef struct ec_parameters_st ECPARAMETERS; /* EC_METHODs for curves over GF(p) */ /********************************************************************/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Returns the basic GFp ec methods which provides the basis for the * optimized methods. * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_simple_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_simple_method(void); /** Returns GFp methods using montgomery multiplication. * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_mont_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_mont_method(void); /** Returns GFp methods using optimized methods for NIST recommended curves * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nist_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nist_method(void); -# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 /** Returns 64-bit optimized methods for nistp224 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp224_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp224_method(void); /** Returns 64-bit optimized methods for nistp256 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp256_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp256_method(void); /** Returns 64-bit optimized methods for nistp521 * \return EC_METHOD object */ -const EC_METHOD *EC_GFp_nistp521_method(void); -# endif +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp521_method(void); +# endif /* OPENSSL_NO_EC_NISTP_64_GCC_128 */ -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /********************************************************************/ /* EC_METHOD for curves over GF(2^m) */ /********************************************************************/ @@ -92,30 +158,44 @@ const EC_METHOD *EC_GFp_nistp521_method(void); /** Returns the basic GF2m ec method * \return EC_METHOD object */ -const EC_METHOD *EC_GF2m_simple_method(void); +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GF2m_simple_method(void); -# endif +# endif /********************************************************************/ /* EC_GROUP functions */ /********************************************************************/ -/** Creates a new EC_GROUP object - * \param meth EC_METHOD to use +/** + * Creates a new EC_GROUP object + * \param meth EC_METHOD to use * \return newly created EC_GROUP object or NULL in case of an error. */ -EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); + +/** Clears and frees a EC_GROUP object + * \param group EC_GROUP object to be cleared and freed. + */ +OSSL_DEPRECATEDIN_3_0 void EC_GROUP_clear_free(EC_GROUP *group); + +/** Returns the EC_METHOD of the EC_GROUP object. + * \param group EC_GROUP object + * \return EC_METHOD used in this EC_GROUP object. + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); + +/** Returns the field type of the EC_METHOD. + * \param meth EC_METHOD object + * \return NID of the underlying field type OID. + */ +OSSL_DEPRECATEDIN_3_0 int EC_METHOD_get_field_type(const EC_METHOD *meth); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Frees a EC_GROUP object * \param group EC_GROUP object to be freed. */ void EC_GROUP_free(EC_GROUP *group); -/** Clears and frees a EC_GROUP object - * \param group EC_GROUP object to be cleared and freed. - */ -void EC_GROUP_clear_free(EC_GROUP *group); - /** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. * \param dst destination EC_GROUP object * \param src source EC_GROUP object @@ -123,25 +203,13 @@ void EC_GROUP_clear_free(EC_GROUP *group); */ int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); -/** Creates a new EC_GROUP object and copies the copies the content +/** Creates a new EC_GROUP object and copies the content * form src to the newly created EC_KEY object * \param src source EC_GROUP object * \return newly created EC_GROUP object or NULL in case of an error. */ EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); -/** Returns the EC_METHOD of the EC_GROUP object. - * \param group EC_GROUP object - * \return EC_METHOD used in this EC_GROUP object. - */ -const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); - -/** Returns the field type of the EC_METHOD. - * \param meth EC_METHOD object - * \return NID of the underlying field type OID. - */ -int EC_METHOD_get_field_type(const EC_METHOD *meth); - /** Sets the generator and its order/cofactor of a EC_GROUP object. * \param group EC_GROUP object * \param generator EC_POINT object with the generator. @@ -212,6 +280,18 @@ void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); */ int EC_GROUP_get_curve_name(const EC_GROUP *group); +/** Gets the field of an EC_GROUP + * \param group EC_GROUP object + * \return the group field + */ +const BIGNUM *EC_GROUP_get0_field(const EC_GROUP *group); + +/** Returns the field type of the EC_GROUP. + * \param group EC_GROUP object + * \return NID of the underlying field type OID. + */ +int EC_GROUP_get_field_type(const EC_GROUP *group); + void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); int EC_GROUP_get_asn1_flag(const EC_GROUP *group); @@ -223,7 +303,7 @@ unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); size_t EC_GROUP_get_seed_len(const EC_GROUP *); size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); -/** Sets the parameters of a ec curve defined by y^2 = x^3 + a*x + b (for GFp) +/** Sets the parameters of an ec curve defined by y^2 = x^3 + a*x + b (for GFp) * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -249,6 +329,7 @@ int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the parameters of an ec curve. Synonym for EC_GROUP_set_curve * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -258,9 +339,11 @@ int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, - const BIGNUM *a, const BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_set_curve_GFp(EC_GROUP *group, + const BIGNUM *p, + const BIGNUM *a, + const BIGNUM *b, + BN_CTX *ctx); /** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve * \param group EC_GROUP object @@ -271,11 +354,12 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, - BIGNUM *a, BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_get_curve_GFp(const EC_GROUP *group, + BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /** Sets the parameter of an ec curve. Synonym for EC_GROUP_set_curve * \param group EC_GROUP object * \param p BIGNUM with the prime number (GFp) or the polynomial @@ -285,9 +369,11 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, - const BIGNUM *a, const BIGNUM *b, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_set_curve_GF2m(EC_GROUP *group, + const BIGNUM *p, + const BIGNUM *a, + const BIGNUM *b, + BN_CTX *ctx); /** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve * \param group EC_GROUP object @@ -298,10 +384,13 @@ DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, - BIGNUM *a, BIGNUM *b, - BN_CTX *ctx)) -# endif +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, + BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); +# endif /* OPENSSL_NO_EC2M */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + /** Returns the number of bits needed to represent a field element * \param group EC_GROUP object * \return number of bits needed to represent a field element @@ -345,7 +434,7 @@ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); */ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M /** Creates a new EC_GROUP object with the specified parameters defined * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) * \param p BIGNUM with the polynomial defining the underlying field @@ -356,10 +445,38 @@ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, */ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -# endif +# endif -/** Creates a EC_GROUP object with a curve specified by a NID - * \param nid NID of the OID of the curve name +/** + * Creates a EC_GROUP object with a curve specified by parameters. + * The parameters may be explicit or a named curve, + * \param params A list of parameters describing the group. + * \param libctx The associated library context or NULL for the default + * context + * \param propq A property query string + * \return newly created EC_GROUP object with specified parameters or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[], + OSSL_LIB_CTX *libctx, const char *propq); + +/** + * Creates a EC_GROUP object with a curve specified by a NID + * \param libctx The associated library context or NULL for the default + * context + * \param propq A property query string + * \param nid NID of the OID of the curve name + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_by_curve_name_ex(OSSL_LIB_CTX *libctx, const char *propq, + int nid); + +/** + * Creates a EC_GROUP object with a curve specified by a NID. Same as + * EC_GROUP_new_by_curve_name_ex but the libctx and propq are always + * NULL. + * \param nid NID of the OID of the curve name * \return newly created EC_GROUP object with specified curve or NULL * if an error occurred */ @@ -416,6 +533,8 @@ size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); const char *EC_curve_nid2nist(int nid); int EC_curve_nist2nid(const char *name); +int EC_GROUP_check_named_curve(const EC_GROUP *group, int nist_only, + BN_CTX *ctx); /********************************************************************/ /* EC_POINT functions */ @@ -452,12 +571,6 @@ int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); */ EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); -/** Returns the EC_METHOD used in EC_POINT object - * \param point EC_POINT object - * \return the EC_METHOD used - */ -const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); - /** Sets a point to infinity (neutral element) * \param group underlying EC_GROUP object * \param point EC_POINT to set to infinity @@ -465,6 +578,13 @@ const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); */ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** Returns the EC_METHOD used in EC_POINT object + * \param point EC_POINT object + * \return the EC_METHOD used + */ +OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); + /** Sets the jacobian projective coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object * \param p EC_POINT object @@ -474,10 +594,10 @@ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, const BIGNUM *x, - const BIGNUM *y, const BIGNUM *z, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_Jprojective_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, + BN_CTX *ctx); /** Gets the jacobian projective coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object @@ -488,10 +608,10 @@ int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, BIGNUM *x, - BIGNUM *y, BIGNUM *z, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_Jprojective_coordinates_GFp + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Sets the affine coordinates of an EC_POINT * \param group underlying EC_GROUP object @@ -516,6 +636,7 @@ int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p, int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_set_affine_coordinates * \param group underlying EC_GROUP object @@ -525,11 +646,9 @@ int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - const BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_affine_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); /** Gets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_get_affine_coordinates @@ -540,11 +659,10 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, - const EC_POINT *p, - BIGNUM *x, - BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_affine_coordinates_GFp + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Sets the x9.62 compressed coordinates of a EC_POINT * \param group underlying EC_GROUP object @@ -558,6 +676,7 @@ int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, const BIGNUM *x, int y_bit, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of * EC_POINT_set_compressed_coordinates * \param group underlying EC_GROUP object @@ -567,12 +686,10 @@ int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - int y_bit, - BN_CTX *ctx)) -# ifndef OPENSSL_NO_EC2M +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_compressed_coordinates_GFp + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); +# ifndef OPENSSL_NO_EC2M /** Sets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_set_affine_coordinates * \param group underlying EC_GROUP object @@ -582,11 +699,9 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *g * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - const BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_affine_coordinates_GF2m + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); /** Gets the affine coordinates of an EC_POINT. A synonym of * EC_POINT_get_affine_coordinates @@ -597,11 +712,9 @@ DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *grou * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, - const EC_POINT *p, - BIGNUM *x, - BIGNUM *y, - BN_CTX *ctx)) +OSSL_DEPRECATEDIN_3_0 int EC_POINT_get_affine_coordinates_GF2m + (const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); /** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of * EC_POINT_set_compressed_coordinates @@ -612,12 +725,12 @@ DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *grou * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, - EC_POINT *p, - const BIGNUM *x, - int y_bit, - BN_CTX *ctx)) -# endif +OSSL_DEPRECATEDIN_3_0 int EC_POINT_set_compressed_coordinates_GF2m + (const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, BN_CTX *ctx); +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + /** Encodes a EC_POINT object to a octet string * \param group underlying EC_GROUP object * \param p EC_POINT object @@ -656,10 +769,16 @@ size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point, unsigned char **pbuf, BN_CTX *ctx); /* other interfaces to point2oct/oct2point: */ -BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, - point_conversion_form_t form, BIGNUM *, BN_CTX *); -EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, - EC_POINT *, BN_CTX *); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 BIGNUM *EC_POINT_point2bn(const EC_GROUP *, + const EC_POINT *, + point_conversion_form_t form, + BIGNUM *, BN_CTX *); +OSSL_DEPRECATEDIN_3_0 EC_POINT *EC_POINT_bn2point(const EC_GROUP *, + const BIGNUM *, + EC_POINT *, BN_CTX *); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, point_conversion_form_t form, BN_CTX *); EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, @@ -724,9 +843,11 @@ int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); -int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); -int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, - EC_POINT *points[], BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EC_POINT_make_affine(const EC_GROUP *group, + EC_POINT *point, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, + EC_POINT *points[], BN_CTX *ctx); /** Computes r = generator * n + sum_{i=0}^{num-1} p[i] * m[i] * \param group underlying EC_GROUP object @@ -738,9 +859,11 @@ int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, - size_t num, const EC_POINT *p[], const BIGNUM *m[], - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, + const BIGNUM *n, size_t num, + const EC_POINT *p[], const BIGNUM *m[], + BN_CTX *ctx); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /** Computes r = generator * n + q * m * \param group underlying EC_GROUP object @@ -754,18 +877,20 @@ int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Stores multiples of generator for faster point multiplication * \param group EC_GROUP object * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred */ -int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); /** Reports whether a precomputation has been done * \param group EC_GROUP object * \return 1 if a pre-computation has been done and 0 otherwise */ -int EC_GROUP_have_precompute_mult(const EC_GROUP *group); +OSSL_DEPRECATEDIN_3_0 int EC_GROUP_have_precompute_mult(const EC_GROUP *group); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /********************************************************************/ /* ASN1 stuff */ @@ -781,101 +906,135 @@ DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) * represent the field elements */ int EC_GROUP_get_basis_type(const EC_GROUP *); -# ifndef OPENSSL_NO_EC2M +# ifndef OPENSSL_NO_EC2M int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, unsigned int *k2, unsigned int *k3); -# endif - -# define OPENSSL_EC_EXPLICIT_CURVE 0x000 -# define OPENSSL_EC_NAMED_CURVE 0x001 +# endif EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); -# define d2i_ECPKParameters_bio(bp,x) \ +# define d2i_ECPKParameters_bio(bp,x) \ ASN1_d2i_bio_of(EC_GROUP, NULL, d2i_ECPKParameters, bp, x) -# define i2d_ECPKParameters_bio(bp,x) \ - ASN1_i2d_bio_of_const(EC_GROUP, i2d_ECPKParameters, bp, x) -# define d2i_ECPKParameters_fp(fp,x) \ +# define i2d_ECPKParameters_bio(bp,x) \ + ASN1_i2d_bio_of(EC_GROUP, i2d_ECPKParameters, bp, x) +# define d2i_ECPKParameters_fp(fp,x) \ (EC_GROUP *)ASN1_d2i_fp(NULL, (d2i_of_void *)d2i_ECPKParameters, (fp), \ (void **)(x)) -# define i2d_ECPKParameters_fp(fp,x) \ +# define i2d_ECPKParameters_fp(fp,x) \ ASN1_i2d_fp((i2d_of_void *)i2d_ECPKParameters, (fp), (void *)(x)) -int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); -# ifndef OPENSSL_NO_STDIO -int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); -# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ECPKParameters_print(BIO *bp, const EC_GROUP *x, + int off); +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, + int off); +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /********************************************************************/ /* EC_KEY functions */ /********************************************************************/ /* some values for the encoding_flag */ -# define EC_PKEY_NO_PARAMETERS 0x001 -# define EC_PKEY_NO_PUBKEY 0x002 +# define EC_PKEY_NO_PARAMETERS 0x001 +# define EC_PKEY_NO_PUBKEY 0x002 /* some values for the flags field */ -# define EC_FLAG_NON_FIPS_ALLOW 0x1 -# define EC_FLAG_FIPS_CHECKED 0x2 -# define EC_FLAG_COFACTOR_ECDH 0x1000 +# define EC_FLAG_SM2_RANGE 0x0004 +# define EC_FLAG_COFACTOR_ECDH 0x1000 +# define EC_FLAG_CHECK_NAMED_GROUP 0x2000 +# define EC_FLAG_CHECK_NAMED_GROUP_NIST 0x4000 +# define EC_FLAG_CHECK_NAMED_GROUP_MASK \ + (EC_FLAG_CHECK_NAMED_GROUP | EC_FLAG_CHECK_NAMED_GROUP_NIST) -/** Creates a new EC_KEY object. +/* Deprecated flags - it was using 0x01..0x02 */ +# define EC_FLAG_NON_FIPS_ALLOW 0x0000 +# define EC_FLAG_FIPS_CHECKED 0x0000 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/** + * Creates a new EC_KEY object. + * \param ctx The library context for to use for this EC_KEY. May be NULL in + * which case the default library context is used. * \return EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_new(void); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_ex(OSSL_LIB_CTX *ctx, const char *propq); -int EC_KEY_get_flags(const EC_KEY *key); +/** + * Creates a new EC_KEY object. Same as calling EC_KEY_new_ex with a + * NULL library context + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new(void); -void EC_KEY_set_flags(EC_KEY *key, int flags); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_get_flags(const EC_KEY *key); -void EC_KEY_clear_flags(EC_KEY *key, int flags); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_flags(EC_KEY *key, int flags); -int EC_KEY_decoded_from_explicit_params(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_clear_flags(EC_KEY *key, int flags); -/** Creates a new EC_KEY object using a named curve as underlying +OSSL_DEPRECATEDIN_3_0 int EC_KEY_decoded_from_explicit_params(const EC_KEY *key); + +/** + * Creates a new EC_KEY object using a named curve as underlying * EC_GROUP object. + * \param ctx The library context for to use for this EC_KEY. May be NULL in + * which case the default library context is used. + * \param propq Any property query string + * \param nid NID of the named curve. + * \return EC_KEY object or NULL if an error occurred. + */ +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_by_curve_name_ex(OSSL_LIB_CTX *ctx, + const char *propq, + int nid); + +/** + * Creates a new EC_KEY object using a named curve as underlying + * EC_GROUP object. Same as calling EC_KEY_new_by_curve_name_ex with a NULL + * library context and property query string. * \param nid NID of the named curve. * \return EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_new_by_curve_name(int nid); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_by_curve_name(int nid); /** Frees a EC_KEY object. * \param key EC_KEY object to be freed. */ -void EC_KEY_free(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_free(EC_KEY *key); /** Copies a EC_KEY object. * \param dst destination EC_KEY object * \param src src EC_KEY object * \return dst or NULL if an error occurred. */ -EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); /** Creates a new EC_KEY object and copies the content from src to it. * \param src the source EC_KEY object * \return newly created EC_KEY object or NULL if an error occurred. */ -EC_KEY *EC_KEY_dup(const EC_KEY *src); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_dup(const EC_KEY *src); /** Increases the internal reference count of a EC_KEY object. * \param key EC_KEY object * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_up_ref(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_up_ref(EC_KEY *key); /** Returns the ENGINE object of a EC_KEY object * \param eckey EC_KEY object * \return the ENGINE object (possibly NULL). */ -ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); /** Returns the EC_GROUP object of a EC_KEY object * \param key EC_KEY object * \return the EC_GROUP object (possibly NULL). */ -const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); /** Sets the EC_GROUP of a EC_KEY object. * \param key EC_KEY object @@ -883,13 +1042,13 @@ const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); * object will use an own copy of the EC_GROUP). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); /** Returns the private key of a EC_KEY object. * \param key EC_KEY object * \return a BIGNUM with the private key (possibly NULL). */ -const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); /** Sets the private key of a EC_KEY object. * \param key EC_KEY object @@ -897,13 +1056,13 @@ const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); * will use an own copy of the BIGNUM). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); /** Returns the public key of a EC_KEY object. * \param key the EC_KEY object * \return a EC_POINT object with the public key (possibly NULL) */ -const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); /** Sets the public key of a EC_KEY object. * \param key EC_KEY object @@ -911,20 +1070,24 @@ const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); * will use an own copy of the EC_POINT object). * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); -unsigned EC_KEY_get_enc_flags(const EC_KEY *key); -void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); -point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); -void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); +OSSL_DEPRECATEDIN_3_0 unsigned EC_KEY_get_enc_flags(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); +OSSL_DEPRECATEDIN_3_0 point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_conv_form(EC_KEY *eckey, + point_conversion_form_t cform); +# endif /*OPENSSL_NO_DEPRECATED_3_0 */ -#define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ +# define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) -int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); -void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); /* wrapper functions for the underlying EC_GROUP object */ -void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); /** Creates a table of pre-computed multiples of the generator to * accelerate further EC_KEY operations. @@ -932,25 +1095,25 @@ void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); /** Creates a new ec private (and optional a new public) key. * \param key EC_KEY object * \return 1 on success and 0 if an error occurred. */ -int EC_KEY_generate_key(EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_generate_key(EC_KEY *key); /** Verifies that a private and/or public key is valid. * \param key the EC_KEY object * \return 1 on success and 0 otherwise. */ -int EC_KEY_check_key(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_check_key(const EC_KEY *key); /** Indicates if an EC_KEY can be used for signing. * \param eckey the EC_KEY object * \return 1 if can can sign and 0 otherwise. */ -int EC_KEY_can_sign(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_can_sign(const EC_KEY *eckey); /** Sets a public key from affine coordinates performing * necessary NIST PKV tests. @@ -959,8 +1122,9 @@ int EC_KEY_can_sign(const EC_KEY *eckey); * \param y public key y coordinate * \return 1 on success and 0 otherwise. */ -int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, - BIGNUM *y); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, + BIGNUM *x, + BIGNUM *y); /** Encodes an EC_KEY public key to an allocated octet string * \param key key to encode @@ -969,8 +1133,9 @@ int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, * \param ctx BN_CTX object (optional) * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, - unsigned char **pbuf, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_key2buf(const EC_KEY *key, + point_conversion_form_t form, + unsigned char **pbuf, BN_CTX *ctx); /** Decodes a EC_KEY public key from a octet string * \param key key to decode @@ -980,8 +1145,8 @@ size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, * \return 1 on success and 0 if an error occurred */ -int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, - BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, + size_t len, BN_CTX *ctx); /** Decodes an EC_KEY private key from an octet string * \param key key to decode @@ -990,7 +1155,8 @@ int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, * \return 1 on success and 0 if an error occurred */ -int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, + size_t len); /** Encodes a EC_KEY private key to an octet string * \param key key to encode @@ -1000,14 +1166,16 @@ int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_priv2oct(const EC_KEY *key, unsigned char *buf, size_t len); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_priv2oct(const EC_KEY *key, + unsigned char *buf, size_t len); /** Encodes an EC_KEY private key to an allocated octet string * \param eckey key to encode * \param pbuf returns pointer to allocated buffer * \return the length of the encoded octet string or 0 if an error occurred */ -size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); +OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_priv2buf(const EC_KEY *eckey, + unsigned char **pbuf); /********************************************************************/ /* de- and encoding functions for SEC1 ECPrivateKey */ @@ -1019,7 +1187,9 @@ size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); * \param len length of the DER encoded private key * \return the decoded private key or NULL if an error occurred. */ -EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey(EC_KEY **key, + const unsigned char **in, + long len); /** Encodes a private key object and stores the result in a buffer. * \param key the EC_KEY object to encode @@ -1027,7 +1197,8 @@ EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); * of bytes needed). * \return 1 on success and 0 if an error occurred. */ -int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey(const EC_KEY *key, + unsigned char **out); /********************************************************************/ /* de- and encoding functions for EC parameters */ @@ -1040,7 +1211,9 @@ int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); * \return a EC_KEY object with the decoded parameters or NULL if an error * occurred. */ -EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECParameters(EC_KEY **key, + const unsigned char **in, + long len); /** Encodes ec parameter and stores the result in a buffer. * \param key the EC_KEY object with ec parameters to encode @@ -1048,36 +1221,38 @@ EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); * of bytes needed). * \return 1 on success and 0 if an error occurred. */ -int i2d_ECParameters(EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2d_ECParameters(const EC_KEY *key, + unsigned char **out); /********************************************************************/ /* de- and encoding functions for EC public key */ /* (octet string, not DER -- hence 'o2i' and 'i2o') */ /********************************************************************/ -/** Decodes a ec public key from a octet string. +/** Decodes an ec public key from a octet string. * \param key a pointer to a EC_KEY object which should be used * \param in memory buffer with the encoded public key * \param len length of the encoded public key * \return EC_KEY object with decoded public key or NULL if an error * occurred. */ -EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); +OSSL_DEPRECATEDIN_3_0 EC_KEY *o2i_ECPublicKey(EC_KEY **key, + const unsigned char **in, long len); -/** Encodes a ec public key in an octet string. +/** Encodes an ec public key in an octet string. * \param key the EC_KEY object with the public key * \param out the buffer for the result (if NULL the function returns number * of bytes needed). * \return 1 on success and 0 if an error occurred */ -int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); +OSSL_DEPRECATEDIN_3_0 int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); /** Prints out the ec parameters on human readable form. * \param bp BIO object to which the information is printed * \param key EC_KEY object * \return 1 on success and 0 if an error occurred */ -int ECParameters_print(BIO *bp, const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int ECParameters_print(BIO *bp, const EC_KEY *key); /** Prints out the contents of a EC_KEY object * \param bp BIO object to which the information is printed @@ -1085,15 +1260,15 @@ int ECParameters_print(BIO *bp, const EC_KEY *key); * \param off line offset * \return 1 on success and 0 if an error occurred */ -int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); -# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_STDIO /** Prints out the ec parameters on human readable form. * \param fp file descriptor to which the information is printed * \param key EC_KEY object * \return 1 on success and 0 if an error occurred */ -int ECParameters_print_fp(FILE *fp, const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int ECParameters_print_fp(FILE *fp, const EC_KEY *key); /** Prints out the contents of a EC_KEY object * \param fp file descriptor to which the information is printed @@ -1101,31 +1276,33 @@ int ECParameters_print_fp(FILE *fp, const EC_KEY *key); * \param off line offset * \return 1 on success and 0 if an error occurred */ -int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); +# endif /* OPENSSL_NO_STDIO */ -# endif - -const EC_KEY_METHOD *EC_KEY_OpenSSL(void); -const EC_KEY_METHOD *EC_KEY_get_default_method(void); -void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); -const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); -int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); -EC_KEY *EC_KEY_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); +OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_method(ENGINE *engine); /** The old name for ecdh_KDF_X9_63 * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, * it is actually specified in ANSI X9.63. * This identifier is retained for backwards compatibility */ -int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, - const unsigned char *Z, size_t Zlen, - const unsigned char *sinfo, size_t sinfolen, - const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const unsigned char *sinfo, + size_t sinfolen, const EVP_MD *md); -int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, - const EC_KEY *ecdh, - void *(*KDF) (const void *in, size_t inlen, - void *out, size_t *outlen)); +OSSL_DEPRECATEDIN_3_0 int ECDH_compute_key(void *out, size_t outlen, + const EC_POINT *pub_key, + const EC_KEY *ecdh, + void *(*KDF)(const void *in, + size_t inlen, void *out, + size_t *outlen)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ typedef struct ECDSA_SIG_st ECDSA_SIG; @@ -1139,23 +1316,22 @@ ECDSA_SIG *ECDSA_SIG_new(void); */ void ECDSA_SIG_free(ECDSA_SIG *sig); -/** DER encode content of ECDSA_SIG object (note: this function modifies *pp +/** i2d_ECDSA_SIG encodes content of ECDSA_SIG (note: this function modifies *pp * (*pp += length of the DER encoded signature)). * \param sig pointer to the ECDSA_SIG object * \param pp pointer to a unsigned char pointer for the output or NULL * \return the length of the DER encoded ECDSA_SIG object or a negative value * on error */ -int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ECDSA_SIG, ECDSA_SIG) -/** Decodes a DER encoded ECDSA signature (note: this function changes *pp +/** d2i_ECDSA_SIG decodes an ECDSA signature (note: this function modifies *pp * (*pp += len)). * \param sig pointer to ECDSA_SIG pointer (may be NULL) * \param pp memory buffer with the DER encoded signature * \param len length of the buffer * \return pointer to the decoded ECDSA_SIG structure (or NULL) */ -ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); /** Accessor for r and s fields of ECDSA_SIG * \param sig pointer to ECDSA_SIG structure @@ -1176,11 +1352,12 @@ const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig); /** Setter for r and s fields of ECDSA_SIG * \param sig pointer to ECDSA_SIG structure - * \param r pointer to BIGNUM for r (may be NULL) - * \param s pointer to BIGNUM for s (may be NULL) + * \param r pointer to BIGNUM for r + * \param s pointer to BIGNUM for s */ int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); +# ifndef OPENSSL_NO_DEPRECATED_3_0 /** Computes the ECDSA signature of the given hash value using * the supplied private key and returns the created signature. * \param dgst pointer to the hash value @@ -1188,8 +1365,8 @@ int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); * \param eckey EC_KEY object containing a private EC key * \return pointer to a ECDSA_SIG structure or NULL if an error occurred */ -ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, - EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, + int dgst_len, EC_KEY *eckey); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1201,9 +1378,9 @@ ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, * \param eckey EC_KEY object containing a private EC key * \return pointer to a ECDSA_SIG structure or NULL if an error occurred */ -ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, - const BIGNUM *kinv, const BIGNUM *rp, - EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, + int dgstlen, const BIGNUM *kinv, + const BIGNUM *rp, EC_KEY *eckey); /** Verifies that the supplied signature is a valid ECDSA * signature of the supplied hash value using the supplied public key. @@ -1214,8 +1391,8 @@ ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, * \return 1 if the signature is valid, 0 if the signature is invalid * and -1 on error */ -int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, + const ECDSA_SIG *sig, EC_KEY *eckey); /** Precompute parts of the signing operation * \param eckey EC_KEY object containing a private EC key @@ -1224,7 +1401,8 @@ int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, * \param rp BIGNUM pointer for x coordinate of k * generator * \return 1 on success and 0 otherwise */ -int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, + BIGNUM **kinv, BIGNUM **rp); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1236,8 +1414,9 @@ int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); * \param eckey EC_KEY object containing a private EC key * \return 1 on success and 0 otherwise */ -int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign(int type, const unsigned char *dgst, + int dgstlen, unsigned char *sig, + unsigned int *siglen, EC_KEY *eckey); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). @@ -1252,9 +1431,10 @@ int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, * \param eckey EC_KEY object containing a private EC key * \return 1 on success and 0 otherwise */ -int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_sign_ex(int type, const unsigned char *dgst, + int dgstlen, unsigned char *sig, + unsigned int *siglen, const BIGNUM *kinv, + const BIGNUM *rp, EC_KEY *eckey); /** Verifies that the given signature is valid ECDSA signature * of the supplied hash value using the specified public key. @@ -1267,218 +1447,126 @@ int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, * \return 1 if the signature is valid, 0 if the signature is invalid * and -1 on error */ -int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_verify(int type, const unsigned char *dgst, + int dgstlen, const unsigned char *sig, + int siglen, EC_KEY *eckey); /** Returns the maximum length of the DER encoded signature * \param eckey EC_KEY object * \return numbers of bytes required for the DER encoded signature */ -int ECDSA_size(const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 int ECDSA_size(const EC_KEY *eckey); /********************************************************************/ /* EC_KEY_METHOD constructors, destructors, writers and accessors */ /********************************************************************/ -EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); -void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); -void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, - int (*init)(EC_KEY *key), - void (*finish)(EC_KEY *key), - int (*copy)(EC_KEY *dest, const EC_KEY *src), - int (*set_group)(EC_KEY *key, const EC_GROUP *grp), - int (*set_private)(EC_KEY *key, - const BIGNUM *priv_key), - int (*set_public)(EC_KEY *key, - const EC_POINT *pub_key)); +OSSL_DEPRECATEDIN_3_0 EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_init + (EC_KEY_METHOD *meth, + int (*init)(EC_KEY *key), + void (*finish)(EC_KEY *key), + int (*copy)(EC_KEY *dest, const EC_KEY *src), + int (*set_group)(EC_KEY *key, const EC_GROUP *grp), + int (*set_private)(EC_KEY *key, const BIGNUM *priv_key), + int (*set_public)(EC_KEY *key, const EC_POINT *pub_key)); -void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, - int (*keygen)(EC_KEY *key)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, + int (*keygen)(EC_KEY *key)); -void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, - int (*ckey)(unsigned char **psec, - size_t *pseclen, - const EC_POINT *pub_key, - const EC_KEY *ecdh)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_compute_key + (EC_KEY_METHOD *meth, + int (*ckey)(unsigned char **psec, size_t *pseclen, + const EC_POINT *pub_key, const EC_KEY *ecdh)); -void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, - int (*sign)(int type, const unsigned char *dgst, - int dlen, unsigned char *sig, - unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *r, - EC_KEY *eckey), - int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, - BIGNUM **kinvp, BIGNUM **rp), - ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, - int dgst_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_sign + (EC_KEY_METHOD *meth, + int (*sign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); -void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth, - int (*verify)(int type, const unsigned - char *dgst, int dgst_len, - const unsigned char *sigbuf, - int sig_len, EC_KEY *eckey), - int (*verify_sig)(const unsigned char *dgst, +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_verify + (EC_KEY_METHOD *meth, + int (*verify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (*verify_sig)(const unsigned char *dgst, + int dgst_len, const ECDSA_SIG *sig, + EC_KEY *eckey)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_init + (const EC_KEY_METHOD *meth, + int (**pinit)(EC_KEY *key), + void (**pfinish)(EC_KEY *key), + int (**pcopy)(EC_KEY *dest, const EC_KEY *src), + int (**pset_group)(EC_KEY *key, const EC_GROUP *grp), + int (**pset_private)(EC_KEY *key, const BIGNUM *priv_key), + int (**pset_public)(EC_KEY *key, const EC_POINT *pub_key)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_keygen + (const EC_KEY_METHOD *meth, int (**pkeygen)(EC_KEY *key)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_compute_key + (const EC_KEY_METHOD *meth, + int (**pck)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_sign + (const EC_KEY_METHOD *meth, + int (**psign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, int dgst_len, - const ECDSA_SIG *sig, + const BIGNUM *in_kinv, + const BIGNUM *in_r, EC_KEY *eckey)); -void EC_KEY_METHOD_get_init(const EC_KEY_METHOD *meth, - int (**pinit)(EC_KEY *key), - void (**pfinish)(EC_KEY *key), - int (**pcopy)(EC_KEY *dest, const EC_KEY *src), - int (**pset_group)(EC_KEY *key, - const EC_GROUP *grp), - int (**pset_private)(EC_KEY *key, - const BIGNUM *priv_key), - int (**pset_public)(EC_KEY *key, - const EC_POINT *pub_key)); +OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_get_verify + (const EC_KEY_METHOD *meth, + int (**pverify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (**pverify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ -void EC_KEY_METHOD_get_keygen(const EC_KEY_METHOD *meth, - int (**pkeygen)(EC_KEY *key)); +# define EVP_EC_gen(curve) \ + EVP_PKEY_Q_keygen(NULL, NULL, "EC", (char *)(strstr(curve, ""))) + /* strstr is used to enable type checking for the variadic string arg */ +# define ECParameters_dup(x) ASN1_dup_of(EC_KEY, i2d_ECParameters, \ + d2i_ECParameters, x) -void EC_KEY_METHOD_get_compute_key(const EC_KEY_METHOD *meth, - int (**pck)(unsigned char **psec, - size_t *pseclen, - const EC_POINT *pub_key, - const EC_KEY *ecdh)); - -void EC_KEY_METHOD_get_sign(const EC_KEY_METHOD *meth, - int (**psign)(int type, const unsigned char *dgst, - int dlen, unsigned char *sig, - unsigned int *siglen, - const BIGNUM *kinv, const BIGNUM *r, - EC_KEY *eckey), - int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, - BIGNUM **kinvp, BIGNUM **rp), - ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, - int dgst_len, - const BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); - -void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth, - int (**pverify)(int type, const unsigned - char *dgst, int dgst_len, - const unsigned char *sigbuf, - int sig_len, EC_KEY *eckey), - int (**pverify_sig)(const unsigned char *dgst, - int dgst_len, - const ECDSA_SIG *sig, - EC_KEY *eckey)); - -# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) - -# ifndef __cplusplus -# if defined(__SUNPRO_C) -# if __SUNPRO_C >= 0x520 -# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# ifndef __cplusplus +# if defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif # endif # endif + # endif - -# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) - -# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) - -# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) - -# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) - -# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) - -# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, \ - (void *)(plen)) - -# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)(p)) - -# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ - EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)(p)) - -/* SM2 will skip the operation check so no need to pass operation here */ -# define EVP_PKEY_CTX_set1_id(ctx, id, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_SET1_ID, (int)id_len, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id(ctx, id) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID, 0, (void*)(id)) - -# define EVP_PKEY_CTX_get1_id_len(ctx, id_len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ - EVP_PKEY_CTRL_GET1_ID_LEN, 0, (void*)(id_len)) - -# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) -# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_SET1_ID (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET1_ID (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_GET1_ID_LEN (EVP_PKEY_ALG_CTRL + 13) -/* KDF types */ -# define EVP_PKEY_ECDH_KDF_NONE 1 -# define EVP_PKEY_ECDH_KDF_X9_63 2 -/** The old name for EVP_PKEY_ECDH_KDF_X9_63 - * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, - * it is actually specified in ANSI X9.63. - * This identifier is retained for backwards compatibility - */ -# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 - - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ecdh.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ecdh.h index 681f3d5e..56bd4cc2 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ecdh.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ecdh.h @@ -1,7 +1,7 @@ /* * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ecdsa.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ecdsa.h index 681f3d5e..56bd4cc2 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ecdsa.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ecdsa.h @@ -1,7 +1,7 @@ /* * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ecerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ecerr.h index 51738113..f15f91f6 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ecerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ecerr.h @@ -1,206 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ECERR_H -# define HEADER_ECERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_ECERR_H +# define OPENSSL_ECERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_EC -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EC_strings(void); - -/* - * EC function codes. - */ -# define EC_F_BN_TO_FELEM 224 -# define EC_F_D2I_ECPARAMETERS 144 -# define EC_F_D2I_ECPKPARAMETERS 145 -# define EC_F_D2I_ECPRIVATEKEY 146 -# define EC_F_DO_EC_KEY_PRINT 221 -# define EC_F_ECDH_CMS_DECRYPT 238 -# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 -# define EC_F_ECDH_COMPUTE_KEY 246 -# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 -# define EC_F_ECDSA_DO_SIGN_EX 251 -# define EC_F_ECDSA_DO_VERIFY 252 -# define EC_F_ECDSA_SIGN_EX 254 -# define EC_F_ECDSA_SIGN_SETUP 248 -# define EC_F_ECDSA_SIG_NEW 265 -# define EC_F_ECDSA_VERIFY 253 -# define EC_F_ECD_ITEM_VERIFY 270 -# define EC_F_ECKEY_PARAM2TYPE 223 -# define EC_F_ECKEY_PARAM_DECODE 212 -# define EC_F_ECKEY_PRIV_DECODE 213 -# define EC_F_ECKEY_PRIV_ENCODE 214 -# define EC_F_ECKEY_PUB_DECODE 215 -# define EC_F_ECKEY_PUB_ENCODE 216 -# define EC_F_ECKEY_TYPE2PARAM 220 -# define EC_F_ECPARAMETERS_PRINT 147 -# define EC_F_ECPARAMETERS_PRINT_FP 148 -# define EC_F_ECPKPARAMETERS_PRINT 149 -# define EC_F_ECPKPARAMETERS_PRINT_FP 150 -# define EC_F_ECP_NISTZ256_GET_AFFINE 240 -# define EC_F_ECP_NISTZ256_INV_MOD_ORD 275 -# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 -# define EC_F_ECP_NISTZ256_POINTS_MUL 241 -# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 -# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 -# define EC_F_ECX_KEY_OP 266 -# define EC_F_ECX_PRIV_ENCODE 267 -# define EC_F_ECX_PUB_ENCODE 268 -# define EC_F_EC_ASN1_GROUP2CURVE 153 -# define EC_F_EC_ASN1_GROUP2FIELDID 154 -# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 -# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 296 -# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 -# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 -# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 285 -# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 288 -# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 -# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 -# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 289 -# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 -# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 -# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 -# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 -# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 -# define EC_F_EC_GFP_MONT_FIELD_INV 297 -# define EC_F_EC_GFP_MONT_FIELD_MUL 131 -# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 -# define EC_F_EC_GFP_MONT_FIELD_SQR 132 -# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 -# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 -# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 -# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 -# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 -# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 -# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 -# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 -# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 -# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 -# define EC_F_EC_GFP_NIST_FIELD_MUL 200 -# define EC_F_EC_GFP_NIST_FIELD_SQR 201 -# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 -# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 287 -# define EC_F_EC_GFP_SIMPLE_FIELD_INV 298 -# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 -# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 -# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 -# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 -# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 -# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 -# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 -# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 -# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 -# define EC_F_EC_GROUP_CHECK 170 -# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 -# define EC_F_EC_GROUP_COPY 106 -# define EC_F_EC_GROUP_GET_CURVE 291 -# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 -# define EC_F_EC_GROUP_GET_CURVE_GFP 130 -# define EC_F_EC_GROUP_GET_DEGREE 173 -# define EC_F_EC_GROUP_GET_ECPARAMETERS 261 -# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 -# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 -# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 -# define EC_F_EC_GROUP_NEW 108 -# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 -# define EC_F_EC_GROUP_NEW_FROM_DATA 175 -# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 263 -# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 -# define EC_F_EC_GROUP_SET_CURVE 292 -# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 -# define EC_F_EC_GROUP_SET_CURVE_GFP 109 -# define EC_F_EC_GROUP_SET_GENERATOR 111 -# define EC_F_EC_GROUP_SET_SEED 286 -# define EC_F_EC_KEY_CHECK_KEY 177 -# define EC_F_EC_KEY_COPY 178 -# define EC_F_EC_KEY_GENERATE_KEY 179 -# define EC_F_EC_KEY_NEW 182 -# define EC_F_EC_KEY_NEW_METHOD 245 -# define EC_F_EC_KEY_OCT2PRIV 255 -# define EC_F_EC_KEY_PRINT 180 -# define EC_F_EC_KEY_PRINT_FP 181 -# define EC_F_EC_KEY_PRIV2BUF 279 -# define EC_F_EC_KEY_PRIV2OCT 256 -# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 -# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 -# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 -# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 -# define EC_F_EC_PKEY_CHECK 273 -# define EC_F_EC_PKEY_PARAM_CHECK 274 -# define EC_F_EC_POINTS_MAKE_AFFINE 136 -# define EC_F_EC_POINTS_MUL 290 -# define EC_F_EC_POINT_ADD 112 -# define EC_F_EC_POINT_BN2POINT 280 -# define EC_F_EC_POINT_CMP 113 -# define EC_F_EC_POINT_COPY 114 -# define EC_F_EC_POINT_DBL 115 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 293 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 -# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 -# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 -# define EC_F_EC_POINT_INVERT 210 -# define EC_F_EC_POINT_IS_AT_INFINITY 118 -# define EC_F_EC_POINT_IS_ON_CURVE 119 -# define EC_F_EC_POINT_MAKE_AFFINE 120 -# define EC_F_EC_POINT_NEW 121 -# define EC_F_EC_POINT_OCT2POINT 122 -# define EC_F_EC_POINT_POINT2BUF 281 -# define EC_F_EC_POINT_POINT2OCT 123 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 294 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 -# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 295 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 -# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 -# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 -# define EC_F_EC_POINT_SET_TO_INFINITY 127 -# define EC_F_EC_PRE_COMP_NEW 196 -# define EC_F_EC_SCALAR_MUL_LADDER 284 -# define EC_F_EC_WNAF_MUL 187 -# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 -# define EC_F_I2D_ECPARAMETERS 190 -# define EC_F_I2D_ECPKPARAMETERS 191 -# define EC_F_I2D_ECPRIVATEKEY 192 -# define EC_F_I2O_ECPUBLICKEY 151 -# define EC_F_NISTP224_PRE_COMP_NEW 227 -# define EC_F_NISTP256_PRE_COMP_NEW 236 -# define EC_F_NISTP521_PRE_COMP_NEW 237 -# define EC_F_O2I_ECPUBLICKEY 152 -# define EC_F_OLD_EC_PRIV_DECODE 222 -# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 -# define EC_F_OSSL_ECDSA_SIGN_SIG 249 -# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 -# define EC_F_PKEY_ECD_CTRL 271 -# define EC_F_PKEY_ECD_DIGESTSIGN 272 -# define EC_F_PKEY_ECD_DIGESTSIGN25519 276 -# define EC_F_PKEY_ECD_DIGESTSIGN448 277 -# define EC_F_PKEY_ECX_DERIVE 269 -# define EC_F_PKEY_EC_CTRL 197 -# define EC_F_PKEY_EC_CTRL_STR 198 -# define EC_F_PKEY_EC_DERIVE 217 -# define EC_F_PKEY_EC_INIT 282 -# define EC_F_PKEY_EC_KDF_DERIVE 283 -# define EC_F_PKEY_EC_KEYGEN 199 -# define EC_F_PKEY_EC_PARAMGEN 219 -# define EC_F_PKEY_EC_SIGN 218 -# define EC_F_VALIDATE_ECX_DERIVE 278 /* * EC reason codes. @@ -212,17 +30,22 @@ int ERR_load_EC_strings(void); # define EC_R_CANNOT_INVERT 165 # define EC_R_COORDINATES_OUT_OF_RANGE 146 # define EC_R_CURVE_DOES_NOT_SUPPORT_ECDH 160 +# define EC_R_CURVE_DOES_NOT_SUPPORT_ECDSA 170 # define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 -# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 # define EC_R_DECODE_ERROR 142 # define EC_R_DISCRIMINANT_IS_ZERO 118 # define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 +# define EC_R_EXPLICIT_PARAMS_NOT_SUPPORTED 127 +# define EC_R_FAILED_MAKING_PUBLIC_KEY 166 # define EC_R_FIELD_TOO_LARGE 143 # define EC_R_GF2M_NOT_SUPPORTED 147 # define EC_R_GROUP2PKPARAMETERS_FAILURE 120 # define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 # define EC_R_INCOMPATIBLE_OBJECTS 101 +# define EC_R_INVALID_A 168 # define EC_R_INVALID_ARGUMENT 112 +# define EC_R_INVALID_B 169 +# define EC_R_INVALID_COFACTOR 171 # define EC_R_INVALID_COMPRESSED_POINT 110 # define EC_R_INVALID_COMPRESSION_BIT 109 # define EC_R_INVALID_CURVE 141 @@ -231,12 +54,17 @@ int ERR_load_EC_strings(void); # define EC_R_INVALID_ENCODING 102 # define EC_R_INVALID_FIELD 103 # define EC_R_INVALID_FORM 104 +# define EC_R_INVALID_GENERATOR 173 # define EC_R_INVALID_GROUP_ORDER 122 # define EC_R_INVALID_KEY 116 +# define EC_R_INVALID_LENGTH 117 +# define EC_R_INVALID_NAMED_GROUP_CONVERSION 174 # define EC_R_INVALID_OUTPUT_LENGTH 161 +# define EC_R_INVALID_P 172 # define EC_R_INVALID_PEER_KEY 133 # define EC_R_INVALID_PENTANOMIAL_BASIS 132 # define EC_R_INVALID_PRIVATE_KEY 123 +# define EC_R_INVALID_SEED 175 # define EC_R_INVALID_TRINOMIAL_BASIS 137 # define EC_R_KDF_PARAMETER_ERROR 148 # define EC_R_KEYS_NOT_SET 140 @@ -255,7 +83,6 @@ int ERR_load_EC_strings(void); # define EC_R_OPERATION_NOT_SUPPORTED 152 # define EC_R_PASSED_NULL_PARAMETER 134 # define EC_R_PEER_KEY_ERROR 149 -# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 # define EC_R_POINT_ARITHMETIC_FAILURE 155 # define EC_R_POINT_AT_INFINITY 106 # define EC_R_POINT_COORDINATES_BLIND_FAILURE 163 @@ -263,6 +90,7 @@ int ERR_load_EC_strings(void); # define EC_R_RANDOM_NUMBER_GENERATION_FAILED 158 # define EC_R_SHARED_INFO_ERROR 150 # define EC_R_SLOT_FULL 108 +# define EC_R_TOO_MANY_RETRIES 176 # define EC_R_UNDEFINED_GENERATOR 113 # define EC_R_UNDEFINED_ORDER 128 # define EC_R_UNKNOWN_COFACTOR 164 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/encoder.h b/deps/openssl/android/x86_64/usr/local/include/openssl/encoder.h new file mode 100644 index 00000000..c37a6f16 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/encoder.h @@ -0,0 +1,124 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ENCODER_H +# define OPENSSL_ENCODER_H +# pragma once + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_ENCODER *OSSL_ENCODER_fetch(OSSL_LIB_CTX *libctx, const char *name, + const char *properties); +int OSSL_ENCODER_up_ref(OSSL_ENCODER *encoder); +void OSSL_ENCODER_free(OSSL_ENCODER *encoder); + +const OSSL_PROVIDER *OSSL_ENCODER_get0_provider(const OSSL_ENCODER *encoder); +const char *OSSL_ENCODER_get0_properties(const OSSL_ENCODER *encoder); +const char *OSSL_ENCODER_get0_name(const OSSL_ENCODER *kdf); +const char *OSSL_ENCODER_get0_description(const OSSL_ENCODER *kdf); +int OSSL_ENCODER_is_a(const OSSL_ENCODER *encoder, const char *name); + +void OSSL_ENCODER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_ENCODER *encoder, void *arg), + void *arg); +int OSSL_ENCODER_names_do_all(const OSSL_ENCODER *encoder, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *OSSL_ENCODER_gettable_params(OSSL_ENCODER *encoder); +int OSSL_ENCODER_get_params(OSSL_ENCODER *encoder, OSSL_PARAM params[]); + +const OSSL_PARAM *OSSL_ENCODER_settable_ctx_params(OSSL_ENCODER *encoder); +OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new(void); +int OSSL_ENCODER_CTX_set_params(OSSL_ENCODER_CTX *ctx, + const OSSL_PARAM params[]); +void OSSL_ENCODER_CTX_free(OSSL_ENCODER_CTX *ctx); + +/* Utilities that help set specific parameters */ +int OSSL_ENCODER_CTX_set_passphrase(OSSL_ENCODER_CTX *ctx, + const unsigned char *kstr, size_t klen); +int OSSL_ENCODER_CTX_set_pem_password_cb(OSSL_ENCODER_CTX *ctx, + pem_password_cb *cb, void *cbarg); +int OSSL_ENCODER_CTX_set_passphrase_cb(OSSL_ENCODER_CTX *ctx, + OSSL_PASSPHRASE_CALLBACK *cb, + void *cbarg); +int OSSL_ENCODER_CTX_set_passphrase_ui(OSSL_ENCODER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); +int OSSL_ENCODER_CTX_set_cipher(OSSL_ENCODER_CTX *ctx, + const char *cipher_name, + const char *propquery); +int OSSL_ENCODER_CTX_set_selection(OSSL_ENCODER_CTX *ctx, int selection); +int OSSL_ENCODER_CTX_set_output_type(OSSL_ENCODER_CTX *ctx, + const char *output_type); +int OSSL_ENCODER_CTX_set_output_structure(OSSL_ENCODER_CTX *ctx, + const char *output_structure); + +/* Utilities to add encoders */ +int OSSL_ENCODER_CTX_add_encoder(OSSL_ENCODER_CTX *ctx, OSSL_ENCODER *encoder); +int OSSL_ENCODER_CTX_add_extra(OSSL_ENCODER_CTX *ctx, + OSSL_LIB_CTX *libctx, const char *propq); +int OSSL_ENCODER_CTX_get_num_encoders(OSSL_ENCODER_CTX *ctx); + +typedef struct ossl_encoder_instance_st OSSL_ENCODER_INSTANCE; +OSSL_ENCODER * +OSSL_ENCODER_INSTANCE_get_encoder(OSSL_ENCODER_INSTANCE *encoder_inst); +void * +OSSL_ENCODER_INSTANCE_get_encoder_ctx(OSSL_ENCODER_INSTANCE *encoder_inst); +const char * +OSSL_ENCODER_INSTANCE_get_output_type(OSSL_ENCODER_INSTANCE *encoder_inst); +const char * +OSSL_ENCODER_INSTANCE_get_output_structure(OSSL_ENCODER_INSTANCE *encoder_inst); + +typedef const void *OSSL_ENCODER_CONSTRUCT(OSSL_ENCODER_INSTANCE *encoder_inst, + void *construct_data); +typedef void OSSL_ENCODER_CLEANUP(void *construct_data); + +int OSSL_ENCODER_CTX_set_construct(OSSL_ENCODER_CTX *ctx, + OSSL_ENCODER_CONSTRUCT *construct); +int OSSL_ENCODER_CTX_set_construct_data(OSSL_ENCODER_CTX *ctx, + void *construct_data); +int OSSL_ENCODER_CTX_set_cleanup(OSSL_ENCODER_CTX *ctx, + OSSL_ENCODER_CLEANUP *cleanup); + +/* Utilities to output the object to encode */ +int OSSL_ENCODER_to_bio(OSSL_ENCODER_CTX *ctx, BIO *out); +#ifndef OPENSSL_NO_STDIO +int OSSL_ENCODER_to_fp(OSSL_ENCODER_CTX *ctx, FILE *fp); +#endif +int OSSL_ENCODER_to_data(OSSL_ENCODER_CTX *ctx, unsigned char **pdata, + size_t *pdata_len); + +/* + * Create the OSSL_ENCODER_CTX with an associated type. This will perform + * an implicit OSSL_ENCODER_fetch(), suitable for the object of that type. + * This is more useful than calling OSSL_ENCODER_CTX_new(). + */ +OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new_for_pkey(const EVP_PKEY *pkey, + int selection, + const char *output_type, + const char *output_struct, + const char *propquery); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/encodererr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/encodererr.h new file mode 100644 index 00000000..5e318b14 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/encodererr.h @@ -0,0 +1,28 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ENCODERERR_H +# define OPENSSL_ENCODERERR_H +# pragma once + +# include +# include +# include + + + +/* + * OSSL_ENCODER reason codes. + */ +# define OSSL_ENCODER_R_ENCODER_NOT_FOUND 101 +# define OSSL_ENCODER_R_INCORRECT_PROPERTY_QUERY 100 +# define OSSL_ENCODER_R_MISSING_GET_PARAMS 102 + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/engine.h b/deps/openssl/android/x86_64/usr/local/include/openssl/engine.h index d707eaeb..2fbc82c3 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/engine.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/engine.h @@ -2,52 +2,58 @@ * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENGINE_H -# define HEADER_ENGINE_H +#ifndef OPENSSL_ENGINE_H +# define OPENSSL_ENGINE_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ENGINE_H +# endif # include # ifndef OPENSSL_NO_ENGINE -# if OPENSSL_API_COMPAT < 0x10100000L -# include -# include -# include -# include -# include -# include -# include -# include -# endif -# include -# include -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# include +# include +# include +# include +# include +# endif +# include +# include +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif /* * These flags are used to control combinations of algorithm (methods) by * bitwise "OR"ing. */ -# define ENGINE_METHOD_RSA (unsigned int)0x0001 -# define ENGINE_METHOD_DSA (unsigned int)0x0002 -# define ENGINE_METHOD_DH (unsigned int)0x0004 -# define ENGINE_METHOD_RAND (unsigned int)0x0008 -# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 -# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 -# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 -# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 -# define ENGINE_METHOD_EC (unsigned int)0x0800 +# define ENGINE_METHOD_RSA (unsigned int)0x0001 +# define ENGINE_METHOD_DSA (unsigned int)0x0002 +# define ENGINE_METHOD_DH (unsigned int)0x0004 +# define ENGINE_METHOD_RAND (unsigned int)0x0008 +# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 +# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 +# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 +# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 +# define ENGINE_METHOD_EC (unsigned int)0x0800 /* Obvious all-or-nothing cases. */ -# define ENGINE_METHOD_ALL (unsigned int)0xFFFF -# define ENGINE_METHOD_NONE (unsigned int)0x0000 +# define ENGINE_METHOD_ALL (unsigned int)0xFFFF +# define ENGINE_METHOD_NONE (unsigned int)0x0000 /* * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used @@ -55,7 +61,7 @@ extern "C" { * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to * initialise registered ENGINEs if they are not already initialised. */ -# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 +# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 /* ENGINE flags that can be set by ENGINE_set_flags(). */ /* Not used */ @@ -67,7 +73,7 @@ extern "C" { * these control commands on behalf of the ENGINE using their "cmd_defns" * data. */ -# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 +# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 /* * This flag is for ENGINEs who return new duplicate structures when found @@ -79,7 +85,7 @@ extern "C" { * ENGINE_by_id() just increments the existing ENGINE's structural reference * count. */ -# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 +# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 /* * This flag if for an ENGINE that does not want its methods registered as @@ -87,7 +93,7 @@ extern "C" { * usable as default methods. */ -# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 +# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 /* * ENGINEs can support their own command types, and these flags are used in @@ -102,23 +108,23 @@ extern "C" { */ /* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 +# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 /* * accepts string input (cast from 'void*' to 'const char *', 4th parameter * to ENGINE_ctrl) */ -# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 +# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 /* * Indicates that the control command takes *no* input. Ie. the control * command is unparameterised. */ -# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 +# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 /* * Indicates that the control command is internal. This control command won't * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() * function. */ -# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 +# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 /* * NB: These 3 control commands are deprecated and should not be used. @@ -137,21 +143,21 @@ extern "C" { * sense to some engines. In such a case, they do nothing but return the * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. */ -# define ENGINE_CTRL_SET_LOGSTREAM 1 -# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 -# define ENGINE_CTRL_HUP 3/* Close and reinitialise +# define ENGINE_CTRL_SET_LOGSTREAM 1 +# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 +# define ENGINE_CTRL_HUP 3/* Close and reinitialise * any handles/connections * etc. */ -# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ -# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used +# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ +# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used * when calling the password * callback and the user * interface */ -# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, +# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, * given a string that * represents a file name * or so */ -# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given +# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given * section in the already * loaded configuration */ @@ -175,22 +181,22 @@ extern "C" { * worth checking this first if the caller is trying to "discover" the * engine's capabilities and doesn't want errors generated unnecessarily. */ -# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 +# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 /* * Returns a positive command number for the first command supported by the * engine. Returns zero if no ctrl commands are supported. */ -# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 +# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 /* * The 'long' argument specifies a command implemented by the engine, and the * return value is the next command supported, or zero if there are no more. */ -# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 +# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 /* * The 'void*' argument is a command name (cast from 'const char *'), and the * return value is the command that corresponds to it. */ -# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 +# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 /* * The next two allow a command to be converted into its corresponding string * form. In each case, the 'long' argument supplies the command. In the @@ -199,23 +205,23 @@ extern "C" { * string buffer large enough, and it will be populated with the name of the * command (WITH a trailing EOL). */ -# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 -# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 +# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 +# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 /* The next two are similar but give a "short description" of a command. */ -# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 -# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 +# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 +# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 /* * With this command, the return value is the OR'd combination of * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given * engine-specific ctrl command expects. */ -# define ENGINE_CTRL_GET_CMD_FLAGS 18 +# define ENGINE_CTRL_GET_CMD_FLAGS 18 /* * ENGINE implementations should start the numbering of their own control * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). */ -# define ENGINE_CMD_BASE 200 +# define ENGINE_CMD_BASE 200 /* * NB: These 2 nCipher "chil" control commands are deprecated, and their @@ -226,17 +232,17 @@ extern "C" { */ /* Flags specific to the nCipher "chil" engine */ -# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 - /* - * Depending on the value of the (long)i argument, this sets or - * unsets the SimpleForkCheck flag in the CHIL API to enable or - * disable checking and workarounds for applications that fork(). - */ -# define ENGINE_CTRL_CHIL_NO_LOCKING 101 - /* - * This prevents the initialisation function from providing mutex - * callbacks to the nCipher library. - */ +# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 + /* + * Depending on the value of the (long)i argument, this sets or + * unsets the SimpleForkCheck flag in the CHIL API to enable or + * disable checking and workarounds for applications that fork(). + */ +# define ENGINE_CTRL_CHIL_NO_LOCKING 101 + /* + * This prevents the initialisation function from providing mutex + * callbacks to the nCipher library. + */ /* * If an ENGINE supports its own specific control commands and wishes the @@ -308,44 +314,58 @@ typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, */ /* Get the first/last "ENGINE" type available. */ -ENGINE *ENGINE_get_first(void); -ENGINE *ENGINE_get_last(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_first(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_last(void); +# endif /* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ -ENGINE *ENGINE_get_next(ENGINE *e); -ENGINE *ENGINE_get_prev(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_next(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_prev(ENGINE *e); +# endif /* Add another "ENGINE" type into the array. */ -int ENGINE_add(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_add(ENGINE *e); +# endif /* Remove an existing "ENGINE" type from the array. */ -int ENGINE_remove(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_remove(ENGINE *e); +# endif /* Retrieve an engine from the list by its unique "id" value. */ -ENGINE *ENGINE_by_id(const char *id); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_by_id(const char *id); +# endif -#if OPENSSL_API_COMPAT < 0x10100000L -# define ENGINE_load_openssl() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) -# define ENGINE_load_dynamic() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) -# ifndef OPENSSL_NO_STATIC_ENGINE -# define ENGINE_load_padlock() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) -# define ENGINE_load_capi() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) -# define ENGINE_load_afalg() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) -# endif -# define ENGINE_load_cryptodev() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) -# define ENGINE_load_rdrand() \ - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) -#endif -void ENGINE_load_builtin_engines(void); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define ENGINE_load_openssl() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) +# define ENGINE_load_dynamic() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) +# ifndef OPENSSL_NO_STATIC_ENGINE +# define ENGINE_load_padlock() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) +# define ENGINE_load_capi() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) +# define ENGINE_load_afalg() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) +# endif +# define ENGINE_load_cryptodev() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) +# define ENGINE_load_rdrand() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void ENGINE_load_builtin_engines(void); +# endif /* * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation * "registry" handling. */ -unsigned int ENGINE_get_table_flags(void); -void ENGINE_set_table_flags(unsigned int flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned int ENGINE_get_table_flags(void); +OSSL_DEPRECATEDIN_3_0 void ENGINE_set_table_flags(unsigned int flags); +# endif /*- Manage registration of ENGINEs per "table". For each type, there are 3 * functions; @@ -354,42 +374,35 @@ void ENGINE_set_table_flags(unsigned int flags); * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list * Cleanup is automatically registered from each table when required. */ - -int ENGINE_register_RSA(ENGINE *e); -void ENGINE_unregister_RSA(ENGINE *e); -void ENGINE_register_all_RSA(void); - -int ENGINE_register_DSA(ENGINE *e); -void ENGINE_unregister_DSA(ENGINE *e); -void ENGINE_register_all_DSA(void); - -int ENGINE_register_EC(ENGINE *e); -void ENGINE_unregister_EC(ENGINE *e); -void ENGINE_register_all_EC(void); - -int ENGINE_register_DH(ENGINE *e); -void ENGINE_unregister_DH(ENGINE *e); -void ENGINE_register_all_DH(void); - -int ENGINE_register_RAND(ENGINE *e); -void ENGINE_unregister_RAND(ENGINE *e); -void ENGINE_register_all_RAND(void); - -int ENGINE_register_ciphers(ENGINE *e); -void ENGINE_unregister_ciphers(ENGINE *e); -void ENGINE_register_all_ciphers(void); - -int ENGINE_register_digests(ENGINE *e); -void ENGINE_unregister_digests(ENGINE *e); -void ENGINE_register_all_digests(void); - -int ENGINE_register_pkey_meths(ENGINE *e); -void ENGINE_unregister_pkey_meths(ENGINE *e); -void ENGINE_register_all_pkey_meths(void); - -int ENGINE_register_pkey_asn1_meths(ENGINE *e); -void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); -void ENGINE_register_all_pkey_asn1_meths(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_RSA(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_DSA(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_EC(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_DH(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_RAND(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_ciphers(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_digests(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_pkey_meths(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_pkey_asn1_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 void ENGINE_register_all_pkey_asn1_meths(void); +# endif /* * These functions register all support from the above categories. Note, use @@ -397,8 +410,10 @@ void ENGINE_register_all_pkey_asn1_meths(void); * may not need. If you only need a subset of functionality, consider using * more selective initialisation. */ -int ENGINE_register_complete(ENGINE *e); -int ENGINE_register_all_complete(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_complete(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_register_all_complete(void); +# endif /* * Send parameterised control commands to the engine. The possibilities to @@ -410,7 +425,10 @@ int ENGINE_register_all_complete(void); * commands that require an operational ENGINE, and only use functional * references in such situations. */ -int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, + void (*f) (void)); +# endif /* * This function tests if an ENGINE-specific command is usable as a @@ -418,7 +436,9 @@ int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). */ -int ENGINE_cmd_is_executable(ENGINE *e, int cmd); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_cmd_is_executable(ENGINE *e, int cmd); +# endif /* * This function works like ENGINE_ctrl() with the exception of taking a @@ -426,8 +446,11 @@ int ENGINE_cmd_is_executable(ENGINE *e, int cmd); * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation * on how to use the cmd_name and cmd_optional. */ -int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, - long i, void *p, void (*f) (void), int cmd_optional); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, + long i, void *p, void (*f) (void), + int cmd_optional); +# endif /* * This function passes a command-name and argument to an ENGINE. The @@ -451,8 +474,11 @@ int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, * applications can work consistently with the same configuration for the * same ENGINE-enabled devices, across applications. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, int cmd_optional); +# endif /* * These functions are useful for manufacturing new ENGINE structures. They @@ -462,45 +488,59 @@ int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, * These are also here so that the ENGINE structure doesn't have to be * exposed and break binary compatibility! */ -ENGINE *ENGINE_new(void); -int ENGINE_free(ENGINE *e); -int ENGINE_up_ref(ENGINE *e); -int ENGINE_set_id(ENGINE *e, const char *id); -int ENGINE_set_name(ENGINE *e, const char *name); -int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); -int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); -int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); -int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); -int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); -int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_new(void); +OSSL_DEPRECATEDIN_3_0 int ENGINE_free(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_up_ref(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_id(ENGINE *e, const char *id); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_name(ENGINE *e, const char *name); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_destroy_function(ENGINE *e,ENGINE_GEN_INT_FUNC_PTR destroy_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); -int ENGINE_set_load_privkey_function(ENGINE *e, - ENGINE_LOAD_KEY_PTR loadpriv_f); +OSSL_DEPRECATEDIN_3_0 +int ENGINE_set_load_privkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpriv_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, - ENGINE_SSL_CLIENT_CERT_PTR - loadssl_f); + ENGINE_SSL_CLIENT_CERT_PTR loadssl_f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); -int ENGINE_set_flags(ENGINE *e, int flags); -int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_flags(ENGINE *e, int flags); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_cmd_defns(ENGINE *e, + const ENGINE_CMD_DEFN *defns); +# endif /* These functions allow control over any per-structure ENGINE data. */ -#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ +# define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) -int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); -void *ENGINE_get_ex_data(const ENGINE *e, int idx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *ENGINE_get_ex_data(const ENGINE *e, int idx); +# endif -#if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* * This function previously cleaned up anything that needs it. Auto-deinit will * now take care of it so it is no longer required to call this function. */ -# define ENGINE_cleanup() while(0) continue -#endif +# define ENGINE_cleanup() while(0) continue +# endif /* * These return values from within the ENGINE structure. These can be useful @@ -508,37 +548,55 @@ void *ENGINE_get_ex_data(const ENGINE *e, int idx); * which you obtained. Using the result for functional purposes if you only * obtained a structural reference may be problematic! */ -const char *ENGINE_get_id(const ENGINE *e); -const char *ENGINE_get_name(const ENGINE *e); -const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); -const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); -const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); -const DH_METHOD *ENGINE_get_DH(const ENGINE *e); -const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ENGINE_get_id(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const char *ENGINE_get_name(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); -ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE - *e); +OSSL_DEPRECATEDIN_3_0 +ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, const char *str, int len); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, - const char *str, - int len); + const char *str, int len); +OSSL_DEPRECATEDIN_3_0 const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); -int ENGINE_get_flags(const ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_get_flags(const ENGINE *e); +# endif /* * FUNCTIONAL functions. These functions deal with ENGINE structures that @@ -554,31 +612,40 @@ int ENGINE_get_flags(const ENGINE *e); */ /* - * Initialise a engine type for use (or up its reference count if it's + * Initialise an engine type for use (or up its reference count if it's * already in use). This will fail if the engine is not currently operational * and cannot initialise. */ -int ENGINE_init(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_init(ENGINE *e); +# endif /* - * Free a functional reference to a engine type. This does not require a + * Free a functional reference to an engine type. This does not require a * corresponding call to ENGINE_free as it also releases a structural * reference. */ -int ENGINE_finish(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_finish(ENGINE *e); +# endif /* * The following functions handle keys that are stored in some secondary * location, handled by the engine. The storage may be on a card or * whatever. */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data); +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data); -int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, - STACK_OF(X509_NAME) *ca_dn, X509 **pcert, - EVP_PKEY **ppkey, STACK_OF(X509) **pother, +OSSL_DEPRECATEDIN_3_0 +int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, STACK_OF(X509_NAME) *ca_dn, + X509 **pcert, EVP_PKEY **ppkey, + STACK_OF(X509) **pother, UI_METHOD *ui_method, void *callback_data); +# endif /* * This returns a pointer for the current ENGINE structure that is (by @@ -586,20 +653,26 @@ int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, * incremented reference, so it should be free'd (ENGINE_finish) before it is * discarded. */ -ENGINE *ENGINE_get_default_RSA(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RSA(void); +# endif /* Same for the other "methods" */ -ENGINE *ENGINE_get_default_DSA(void); -ENGINE *ENGINE_get_default_EC(void); -ENGINE *ENGINE_get_default_DH(void); -ENGINE *ENGINE_get_default_RAND(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_DSA(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_EC(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_DH(void); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RAND(void); +# endif /* * These functions can be used to get a functional reference to perform * ciphering or digesting corresponding to "nid". */ -ENGINE *ENGINE_get_cipher_engine(int nid); -ENGINE *ENGINE_get_digest_engine(int nid); -ENGINE *ENGINE_get_pkey_meth_engine(int nid); -ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_cipher_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_digest_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_pkey_meth_engine(int nid); +OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); +# endif /* * This sets a new default ENGINE structure for performing RSA operations. If @@ -607,17 +680,22 @@ ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); * its reference count up'd so the caller should still free their own * reference 'e'. */ -int ENGINE_set_default_RSA(ENGINE *e); -int ENGINE_set_default_string(ENGINE *e, const char *def_list); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_RSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_string(ENGINE *e, + const char *def_list); +# endif /* Same for the other "methods" */ -int ENGINE_set_default_DSA(ENGINE *e); -int ENGINE_set_default_EC(ENGINE *e); -int ENGINE_set_default_DH(ENGINE *e); -int ENGINE_set_default_RAND(ENGINE *e); -int ENGINE_set_default_ciphers(ENGINE *e); -int ENGINE_set_default_digests(ENGINE *e); -int ENGINE_set_default_pkey_meths(ENGINE *e); -int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_DSA(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_EC(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_DH(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_RAND(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_ciphers(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_digests(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_pkey_meths(ENGINE *e); +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); +# endif /* * The combination "set" - the flags are bitwise "OR"d from the @@ -626,9 +704,10 @@ int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); * application requires only specific functionality, consider using more * selective functions. */ -int ENGINE_set_default(ENGINE *e, unsigned int flags); - -void ENGINE_add_conf_module(void); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default(ENGINE *e, unsigned int flags); +OSSL_DEPRECATEDIN_3_0 void ENGINE_add_conf_module(void); +# endif /* Deprecated functions ... */ /* int ENGINE_clear_defaults(void); */ @@ -638,12 +717,12 @@ void ENGINE_add_conf_module(void); /**************************/ /* Binary/behaviour compatibility levels */ -# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 +# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 /* * Binary versions older than this are too old for us (whether we're a loader * or a loadee) */ -# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 +# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 /* * When compiling an ENGINE entirely as an external shared library, loadable @@ -687,7 +766,7 @@ typedef struct st_dynamic_fns { * IMPLEMENT_DYNAMIC_CHECK_FN(). */ typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); -# define IMPLEMENT_DYNAMIC_CHECK_FN() \ +# define IMPLEMENT_DYNAMIC_CHECK_FN() \ OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ if (v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ @@ -713,7 +792,7 @@ typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); */ typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, const dynamic_fns *fns); -# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ +# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ OPENSSL_EXPORT \ int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ OPENSSL_EXPORT \ @@ -740,13 +819,15 @@ typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, */ void *ENGINE_get_static_state(void); -# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) -DEPRECATEDIN_1_1_0(void ENGINE_setup_bsd_cryptodev(void)) -# endif +# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ENGINE_setup_bsd_cryptodev(void); +# endif +# endif # ifdef __cplusplus } # endif -# endif -#endif +# endif /* OPENSSL_NO_ENGINE */ +#endif /* OPENSSL_ENGINE_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/engineerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/engineerr.h index 05e84bd2..d439b682 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/engineerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/engineerr.h @@ -1,72 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENGINEERR_H -# define HEADER_ENGINEERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_ENGINEERR_H +# define OPENSSL_ENGINEERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_ENGINE -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_ENGINE_strings(void); - -/* - * ENGINE function codes. - */ -# define ENGINE_F_DIGEST_UPDATE 198 -# define ENGINE_F_DYNAMIC_CTRL 180 -# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 -# define ENGINE_F_DYNAMIC_LOAD 182 -# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 -# define ENGINE_F_ENGINE_ADD 105 -# define ENGINE_F_ENGINE_BY_ID 106 -# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 -# define ENGINE_F_ENGINE_CTRL 142 -# define ENGINE_F_ENGINE_CTRL_CMD 178 -# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 -# define ENGINE_F_ENGINE_FINISH 107 -# define ENGINE_F_ENGINE_GET_CIPHER 185 -# define ENGINE_F_ENGINE_GET_DIGEST 186 -# define ENGINE_F_ENGINE_GET_FIRST 195 -# define ENGINE_F_ENGINE_GET_LAST 196 -# define ENGINE_F_ENGINE_GET_NEXT 115 -# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 -# define ENGINE_F_ENGINE_GET_PKEY_METH 192 -# define ENGINE_F_ENGINE_GET_PREV 116 -# define ENGINE_F_ENGINE_INIT 119 -# define ENGINE_F_ENGINE_LIST_ADD 120 -# define ENGINE_F_ENGINE_LIST_REMOVE 121 -# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 -# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 -# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 -# define ENGINE_F_ENGINE_NEW 122 -# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 197 -# define ENGINE_F_ENGINE_REMOVE 123 -# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 -# define ENGINE_F_ENGINE_SET_ID 129 -# define ENGINE_F_ENGINE_SET_NAME 130 -# define ENGINE_F_ENGINE_TABLE_REGISTER 184 -# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 -# define ENGINE_F_ENGINE_UP_REF 190 -# define ENGINE_F_INT_CLEANUP_ITEM 199 -# define ENGINE_F_INT_CTRL_HELPER 172 -# define ENGINE_F_INT_ENGINE_CONFIGURE 188 -# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 -# define ENGINE_F_OSSL_HMAC_INIT 200 /* * ENGINE reason codes. diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/err.h b/deps/openssl/android/x86_64/usr/local/include/openssl/err.h index b49f8812..2abf2483 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/err.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/err.h @@ -1,14 +1,22 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ERR_H -# define HEADER_ERR_H + + +#ifndef OPENSSL_ERR_H +# define OPENSSL_ERR_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ERR_H +# endif # include @@ -17,38 +25,47 @@ # include # endif -# include +# include # include # include +# include #ifdef __cplusplus extern "C" { #endif -# ifndef OPENSSL_NO_ERR -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) -# else -# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_FILENAMES +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,fn,ln) +# else +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,NULL,0) +# endif # endif +# include # include # define ERR_TXT_MALLOCED 0x01 # define ERR_TXT_STRING 0x02 -# define ERR_FLAG_MARK 0x01 -# define ERR_FLAG_CLEAR 0x02 +# if !defined(OPENSSL_NO_DEPRECATED_3_0) || defined(OSSL_FORCE_ERR_STATE) +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 -# define ERR_NUM_ERRORS 16 -typedef struct err_state_st { +# define ERR_NUM_ERRORS 16 +struct err_state_st { int err_flags[ERR_NUM_ERRORS]; + int err_marks[ERR_NUM_ERRORS]; unsigned long err_buffer[ERR_NUM_ERRORS]; char *err_data[ERR_NUM_ERRORS]; + size_t err_data_size[ERR_NUM_ERRORS]; int err_data_flags[ERR_NUM_ERRORS]; - const char *err_file[ERR_NUM_ERRORS]; + char *err_file[ERR_NUM_ERRORS]; int err_line[ERR_NUM_ERRORS]; + char *err_func[ERR_NUM_ERRORS]; int top, bottom; -} ERR_STATE; +}; +# endif /* library */ # define ERR_LIB_NONE 1 @@ -95,171 +112,384 @@ typedef struct err_state_st { # define ERR_LIB_ASYNC 51 # define ERR_LIB_KDF 52 # define ERR_LIB_SM2 53 +# define ERR_LIB_ESS 54 +# define ERR_LIB_PROP 55 +# define ERR_LIB_CRMF 56 +# define ERR_LIB_PROV 57 +# define ERR_LIB_CMP 58 +# define ERR_LIB_OSSL_ENCODER 59 +# define ERR_LIB_OSSL_DECODER 60 +# define ERR_LIB_HTTP 61 # define ERR_LIB_USER 128 -# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define OSSL_STOREerr(f,r) ERR_PUT_error(ERR_LIB_OSSL_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) -# define SM2err(f,r) ERR_PUT_error(ERR_LIB_SM2,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define ASN1err(f, r) ERR_raise_data(ERR_LIB_ASN1, (r), NULL) +# define ASYNCerr(f, r) ERR_raise_data(ERR_LIB_ASYNC, (r), NULL) +# define BIOerr(f, r) ERR_raise_data(ERR_LIB_BIO, (r), NULL) +# define BNerr(f, r) ERR_raise_data(ERR_LIB_BN, (r), NULL) +# define BUFerr(f, r) ERR_raise_data(ERR_LIB_BUF, (r), NULL) +# define CMPerr(f, r) ERR_raise_data(ERR_LIB_CMP, (r), NULL) +# define CMSerr(f, r) ERR_raise_data(ERR_LIB_CMS, (r), NULL) +# define COMPerr(f, r) ERR_raise_data(ERR_LIB_COMP, (r), NULL) +# define CONFerr(f, r) ERR_raise_data(ERR_LIB_CONF, (r), NULL) +# define CRMFerr(f, r) ERR_raise_data(ERR_LIB_CRMF, (r), NULL) +# define CRYPTOerr(f, r) ERR_raise_data(ERR_LIB_CRYPTO, (r), NULL) +# define CTerr(f, r) ERR_raise_data(ERR_LIB_CT, (r), NULL) +# define DHerr(f, r) ERR_raise_data(ERR_LIB_DH, (r), NULL) +# define DSAerr(f, r) ERR_raise_data(ERR_LIB_DSA, (r), NULL) +# define DSOerr(f, r) ERR_raise_data(ERR_LIB_DSO, (r), NULL) +# define ECDHerr(f, r) ERR_raise_data(ERR_LIB_ECDH, (r), NULL) +# define ECDSAerr(f, r) ERR_raise_data(ERR_LIB_ECDSA, (r), NULL) +# define ECerr(f, r) ERR_raise_data(ERR_LIB_EC, (r), NULL) +# define ENGINEerr(f, r) ERR_raise_data(ERR_LIB_ENGINE, (r), NULL) +# define ESSerr(f, r) ERR_raise_data(ERR_LIB_ESS, (r), NULL) +# define EVPerr(f, r) ERR_raise_data(ERR_LIB_EVP, (r), NULL) +# define FIPSerr(f, r) ERR_raise_data(ERR_LIB_FIPS, (r), NULL) +# define HMACerr(f, r) ERR_raise_data(ERR_LIB_HMAC, (r), NULL) +# define HTTPerr(f, r) ERR_raise_data(ERR_LIB_HTTP, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define OBJerr(f, r) ERR_raise_data(ERR_LIB_OBJ, (r), NULL) +# define OCSPerr(f, r) ERR_raise_data(ERR_LIB_OCSP, (r), NULL) +# define OSSL_STOREerr(f, r) ERR_raise_data(ERR_LIB_OSSL_STORE, (r), NULL) +# define PEMerr(f, r) ERR_raise_data(ERR_LIB_PEM, (r), NULL) +# define PKCS12err(f, r) ERR_raise_data(ERR_LIB_PKCS12, (r), NULL) +# define PKCS7err(f, r) ERR_raise_data(ERR_LIB_PKCS7, (r), NULL) +# define PROPerr(f, r) ERR_raise_data(ERR_LIB_PROP, (r), NULL) +# define PROVerr(f, r) ERR_raise_data(ERR_LIB_PROV, (r), NULL) +# define RANDerr(f, r) ERR_raise_data(ERR_LIB_RAND, (r), NULL) +# define RSAerr(f, r) ERR_raise_data(ERR_LIB_RSA, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define SM2err(f, r) ERR_raise_data(ERR_LIB_SM2, (r), NULL) +# define SSLerr(f, r) ERR_raise_data(ERR_LIB_SSL, (r), NULL) +# define SYSerr(f, r) ERR_raise_data(ERR_LIB_SYS, (r), NULL) +# define TSerr(f, r) ERR_raise_data(ERR_LIB_TS, (r), NULL) +# define UIerr(f, r) ERR_raise_data(ERR_LIB_UI, (r), NULL) +# define X509V3err(f, r) ERR_raise_data(ERR_LIB_X509V3, (r), NULL) +# define X509err(f, r) ERR_raise_data(ERR_LIB_X509, (r), NULL) +# endif -# define ERR_PACK(l,f,r) ( \ - (((unsigned int)(l) & 0x0FF) << 24L) | \ - (((unsigned int)(f) & 0xFFF) << 12L) | \ - (((unsigned int)(r) & 0xFFF) ) ) -# define ERR_GET_LIB(l) (int)(((l) >> 24L) & 0x0FFL) -# define ERR_GET_FUNC(l) (int)(((l) >> 12L) & 0xFFFL) -# define ERR_GET_REASON(l) (int)( (l) & 0xFFFL) -# define ERR_FATAL_ERROR(l) (int)( (l) & ERR_R_FATAL) +/*- + * The error code packs differently depending on if it records a system + * error or an OpenSSL error. + * + * A system error packs like this (we follow POSIX and only allow positive + * numbers that fit in an |int|): + * + * +-+-------------------------------------------------------------+ + * |1| system error number | + * +-+-------------------------------------------------------------+ + * + * An OpenSSL error packs like this: + * + * <---------------------------- 32 bits --------------------------> + * <--- 8 bits ---><------------------ 23 bits -----------------> + * +-+---------------+---------------------------------------------+ + * |0| library | reason | + * +-+---------------+---------------------------------------------+ + * + * A few of the reason bits are reserved as flags with special meaning: + * + * <5 bits-<>--------- 19 bits -----------------> + * +-------+-+-----------------------------------+ + * | rflags| | reason | + * +-------+-+-----------------------------------+ + * ^ + * | + * ERR_RFLAG_FATAL = ERR_R_FATAL + * + * The reason flags are part of the overall reason code for practical + * reasons, as they provide an easy way to place different types of + * reason codes in different numeric ranges. + * + * The currently known reason flags are: + * + * ERR_RFLAG_FATAL Flags that the reason code is considered fatal. + * For backward compatibility reasons, this flag + * is also the code for ERR_R_FATAL (that reason + * code served the dual purpose of flag and reason + * code in one in pre-3.0 OpenSSL). + * ERR_RFLAG_COMMON Flags that the reason code is common to all + * libraries. All ERR_R_ macros must use this flag, + * and no other _R_ macro is allowed to use it. + */ -/* OS functions */ -# define SYS_F_FOPEN 1 -# define SYS_F_CONNECT 2 -# define SYS_F_GETSERVBYNAME 3 -# define SYS_F_SOCKET 4 -# define SYS_F_IOCTLSOCKET 5 -# define SYS_F_BIND 6 -# define SYS_F_LISTEN 7 -# define SYS_F_ACCEPT 8 -# define SYS_F_WSASTARTUP 9/* Winsock stuff */ -# define SYS_F_OPENDIR 10 -# define SYS_F_FREAD 11 -# define SYS_F_GETADDRINFO 12 -# define SYS_F_GETNAMEINFO 13 -# define SYS_F_SETSOCKOPT 14 -# define SYS_F_GETSOCKOPT 15 -# define SYS_F_GETSOCKNAME 16 -# define SYS_F_GETHOSTBYNAME 17 -# define SYS_F_FFLUSH 18 -# define SYS_F_OPEN 19 -# define SYS_F_CLOSE 20 -# define SYS_F_IOCTL 21 -# define SYS_F_STAT 22 -# define SYS_F_FCNTL 23 -# define SYS_F_FSTAT 24 - -/* reasons */ -# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ -# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ -# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ -# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ -# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ -# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ -# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ -# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ -# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ -# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ -# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ -# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ -# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ -# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ -# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ -# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ -# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ -# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ -# define ERR_R_OSSL_STORE_LIB ERR_LIB_OSSL_STORE/* 44 */ - -# define ERR_R_NESTED_ASN1_ERROR 58 -# define ERR_R_MISSING_ASN1_EOS 63 - -/* fatal error */ -# define ERR_R_FATAL 64 -# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) -# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) -# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) -# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) -# define ERR_R_DISABLED (5|ERR_R_FATAL) -# define ERR_R_INIT_FAIL (6|ERR_R_FATAL) -# define ERR_R_PASSED_INVALID_ARGUMENT (7) -# define ERR_R_OPERATION_FAIL (8|ERR_R_FATAL) +/* Macros to help decode recorded system errors */ +# define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1) +# define ERR_SYSTEM_MASK ((unsigned int)INT_MAX) /* - * 99 is the maximum possible ERR_R_... code, higher values are reserved for - * the individual libraries + * Macros to help decode recorded OpenSSL errors + * As expressed above, RFLAGS and REASON overlap by one bit to allow + * ERR_R_FATAL to use ERR_RFLAG_FATAL as its reason code. */ +# define ERR_LIB_OFFSET 23L +# define ERR_LIB_MASK 0xFF +# define ERR_RFLAGS_OFFSET 18L +# define ERR_RFLAGS_MASK 0x1F +# define ERR_REASON_MASK 0X7FFFFF + +/* + * Reason flags are defined pre-shifted to easily combine with the reason + * number. + */ +# define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET) +# define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET) + +# define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0) + +static ossl_unused ossl_inline int ERR_GET_LIB(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return ERR_LIB_SYS; + return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK; +} + +static ossl_unused ossl_inline int ERR_GET_RFLAGS(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return 0; + return errcode & (ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET); +} + +static ossl_unused ossl_inline int ERR_GET_REASON(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return errcode & ERR_SYSTEM_MASK; + return errcode & ERR_REASON_MASK; +} + +static ossl_unused ossl_inline int ERR_FATAL_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_FATAL) != 0; +} + +static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_COMMON) != 0; +} + +/* + * ERR_PACK is a helper macro to properly pack OpenSSL error codes and may + * only be used for that purpose. System errors are packed internally. + * ERR_PACK takes reason flags and reason code combined in |reason|. + * ERR_PACK ignores |func|, that parameter is just legacy from pre-3.0 OpenSSL. + */ +# define ERR_PACK(lib,func,reason) \ + ( (((unsigned long)(lib) & ERR_LIB_MASK ) << ERR_LIB_OFFSET) | \ + (((unsigned long)(reason) & ERR_REASON_MASK)) ) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SYS_F_FOPEN 0 +# define SYS_F_CONNECT 0 +# define SYS_F_GETSERVBYNAME 0 +# define SYS_F_SOCKET 0 +# define SYS_F_IOCTLSOCKET 0 +# define SYS_F_BIND 0 +# define SYS_F_LISTEN 0 +# define SYS_F_ACCEPT 0 +# define SYS_F_WSASTARTUP 0 +# define SYS_F_OPENDIR 0 +# define SYS_F_FREAD 0 +# define SYS_F_GETADDRINFO 0 +# define SYS_F_GETNAMEINFO 0 +# define SYS_F_SETSOCKOPT 0 +# define SYS_F_GETSOCKOPT 0 +# define SYS_F_GETSOCKNAME 0 +# define SYS_F_GETHOSTBYNAME 0 +# define SYS_F_FFLUSH 0 +# define SYS_F_OPEN 0 +# define SYS_F_CLOSE 0 +# define SYS_F_IOCTL 0 +# define SYS_F_STAT 0 +# define SYS_F_FCNTL 0 +# define SYS_F_FSTAT 0 +# define SYS_F_SENDFILE 0 +# endif + +/* + * All ERR_R_ codes must be combined with ERR_RFLAG_COMMON. + */ + +/* "we came from here" global reason codes, range 1..255 */ +# define ERR_R_SYS_LIB (ERR_LIB_SYS/* 2 */ | ERR_RFLAG_COMMON) +# define ERR_R_BN_LIB (ERR_LIB_BN/* 3 */ | ERR_RFLAG_COMMON) +# define ERR_R_RSA_LIB (ERR_LIB_RSA/* 4 */ | ERR_RFLAG_COMMON) +# define ERR_R_DH_LIB (ERR_LIB_DH/* 5 */ | ERR_RFLAG_COMMON) +# define ERR_R_EVP_LIB (ERR_LIB_EVP/* 6 */ | ERR_RFLAG_COMMON) +# define ERR_R_BUF_LIB (ERR_LIB_BUF/* 7 */ | ERR_RFLAG_COMMON) +# define ERR_R_OBJ_LIB (ERR_LIB_OBJ/* 8 */ | ERR_RFLAG_COMMON) +# define ERR_R_PEM_LIB (ERR_LIB_PEM/* 9 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSA_LIB (ERR_LIB_DSA/* 10 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509_LIB (ERR_LIB_X509/* 11 */ | ERR_RFLAG_COMMON) +# define ERR_R_ASN1_LIB (ERR_LIB_ASN1/* 13 */ | ERR_RFLAG_COMMON) +# define ERR_R_CONF_LIB (ERR_LIB_CONF/* 14 */ | ERR_RFLAG_COMMON) +# define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO/* 15 */ | ERR_RFLAG_COMMON) +# define ERR_R_EC_LIB (ERR_LIB_EC/* 16 */ | ERR_RFLAG_COMMON) +# define ERR_R_SSL_LIB (ERR_LIB_SSL/* 20 */ | ERR_RFLAG_COMMON) +# define ERR_R_BIO_LIB (ERR_LIB_BIO/* 32 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS7_LIB (ERR_LIB_PKCS7/* 33 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509V3_LIB (ERR_LIB_X509V3/* 34 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS12_LIB (ERR_LIB_PKCS12/* 35 */ | ERR_RFLAG_COMMON) +# define ERR_R_RAND_LIB (ERR_LIB_RAND/* 36 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSO_LIB (ERR_LIB_DSO/* 37 */ | ERR_RFLAG_COMMON) +# define ERR_R_ENGINE_LIB (ERR_LIB_ENGINE/* 38 */ | ERR_RFLAG_COMMON) +# define ERR_R_UI_LIB (ERR_LIB_UI/* 40 */ | ERR_RFLAG_COMMON) +# define ERR_R_ECDSA_LIB (ERR_LIB_ECDSA/* 42 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_STORE_LIB (ERR_LIB_OSSL_STORE/* 44 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMS_LIB (ERR_LIB_CMS/* 46 */ | ERR_RFLAG_COMMON) +# define ERR_R_TS_LIB (ERR_LIB_TS/* 47 */ | ERR_RFLAG_COMMON) +# define ERR_R_CT_LIB (ERR_LIB_CT/* 50 */ | ERR_RFLAG_COMMON) +# define ERR_R_PROV_LIB (ERR_LIB_PROV/* 57 */ | ERR_RFLAG_COMMON) +# define ERR_R_ESS_LIB (ERR_LIB_ESS/* 54 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMP_LIB (ERR_LIB_CMP/* 58 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_ENCODER_LIB (ERR_LIB_OSSL_ENCODER/* 59 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_DECODER_LIB (ERR_LIB_OSSL_DECODER/* 60 */ | ERR_RFLAG_COMMON) + +/* Other common error codes, range 256..2^ERR_RFLAGS_OFFSET-1 */ +# define ERR_R_FATAL (ERR_RFLAG_FATAL|ERR_RFLAG_COMMON) +# define ERR_R_MALLOC_FAILURE (256|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (257|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (258|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (259|ERR_R_FATAL) +# define ERR_R_DISABLED (260|ERR_R_FATAL) +# define ERR_R_INIT_FAIL (261|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (262|ERR_RFLAG_COMMON) +# define ERR_R_OPERATION_FAIL (263|ERR_R_FATAL) +# define ERR_R_INVALID_PROVIDER_FUNCTIONS (264|ERR_R_FATAL) +# define ERR_R_INTERRUPTED_OR_CANCELLED (265|ERR_RFLAG_COMMON) +# define ERR_R_NESTED_ASN1_ERROR (266|ERR_RFLAG_COMMON) +# define ERR_R_MISSING_ASN1_EOS (267|ERR_RFLAG_COMMON) +# define ERR_R_UNSUPPORTED (268|ERR_RFLAG_COMMON) +# define ERR_R_FETCH_FAILED (269|ERR_RFLAG_COMMON) +# define ERR_R_INVALID_PROPERTY_DEFINITION (270|ERR_RFLAG_COMMON) +# define ERR_R_UNABLE_TO_GET_READ_LOCK (271|ERR_R_FATAL) +# define ERR_R_UNABLE_TO_GET_WRITE_LOCK (272|ERR_R_FATAL) typedef struct ERR_string_data_st { unsigned long error; const char *string; } ERR_STRING_DATA; -DEFINE_LHASH_OF(ERR_STRING_DATA); +DEFINE_LHASH_OF_INTERNAL(ERR_STRING_DATA); +#define lh_ERR_STRING_DATA_new(hfn, cmp) ((LHASH_OF(ERR_STRING_DATA) *)OPENSSL_LH_new(ossl_check_ERR_STRING_DATA_lh_hashfunc_type(hfn), ossl_check_ERR_STRING_DATA_lh_compfunc_type(cmp))) +#define lh_ERR_STRING_DATA_free(lh) OPENSSL_LH_free(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_flush(lh) OPENSSL_LH_flush(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_insert(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_insert(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_delete(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_delete(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_retrieve(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_retrieve(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr))) +#define lh_ERR_STRING_DATA_error(lh) OPENSSL_LH_error(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_num_items(lh) OPENSSL_LH_num_items(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_ERR_STRING_DATA_lh_type(lh), out) +#define lh_ERR_STRING_DATA_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh)) +#define lh_ERR_STRING_DATA_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_ERR_STRING_DATA_lh_type(lh), dl) +#define lh_ERR_STRING_DATA_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_doallfunc_type(dfn)) + + +/* 12 lines and some on an 80 column terminal */ +#define ERR_MAX_DATA_SIZE 1024 + +/* Building blocks */ +void ERR_new(void); +void ERR_set_debug(const char *file, int line, const char *func); +void ERR_set_error(int lib, int reason, const char *fmt, ...); +void ERR_vset_error(int lib, int reason, const char *fmt, va_list args); + +/* Main error raising functions */ +# define ERR_raise(lib, reason) ERR_raise_data((lib),(reason),NULL) +# define ERR_raise_data \ + (ERR_new(), \ + ERR_set_debug(OPENSSL_FILE,OPENSSL_LINE,OPENSSL_FUNC), \ + ERR_set_error) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* Backward compatibility */ +# define ERR_put_error(lib, func, reason, file, line) \ + (ERR_new(), \ + ERR_set_debug((file), (line), OPENSSL_FUNC), \ + ERR_set_error((lib), (reason), NULL)) +# endif -void ERR_put_error(int lib, int func, int reason, const char *file, int line); void ERR_set_error_data(char *data, int flags); unsigned long ERR_get_error(void); +unsigned long ERR_get_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_get_error_line(const char **file, int *line); +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_get_error_line_data(const char **file, int *line, const char **data, int *flags); +#endif unsigned long ERR_peek_error(void); unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_func(const char **func); +unsigned long ERR_peek_error_data(const char **data, int *flags); +unsigned long ERR_peek_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_peek_error_line_data(const char **file, int *line, const char **data, int *flags); +# endif unsigned long ERR_peek_last_error(void); unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_func(const char **func); +unsigned long ERR_peek_last_error_data(const char **data, int *flags); +unsigned long ERR_peek_last_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned long ERR_peek_last_error_line_data(const char **file, int *line, const char **data, int *flags); +# endif + void ERR_clear_error(void); + char *ERR_error_string(unsigned long e, char *buf); void ERR_error_string_n(unsigned long e, char *buf, size_t len); const char *ERR_lib_error_string(unsigned long e); -const char *ERR_func_error_string(unsigned long e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ERR_func_error_string(unsigned long e); +# endif const char *ERR_reason_error_string(unsigned long e); + void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), void *u); # ifndef OPENSSL_NO_STDIO void ERR_print_errors_fp(FILE *fp); # endif void ERR_print_errors(BIO *bp); + void ERR_add_error_data(int num, ...); void ERR_add_error_vdata(int num, va_list args); +void ERR_add_error_txt(const char *sepr, const char *txt); +void ERR_add_error_mem_bio(const char *sep, BIO *bio); + int ERR_load_strings(int lib, ERR_STRING_DATA *str); int ERR_load_strings_const(const ERR_STRING_DATA *str); int ERR_unload_strings(int lib, ERR_STRING_DATA *str); -int ERR_load_ERR_strings(void); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define ERR_load_crypto_strings() \ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) # define ERR_free_strings() while(0) continue #endif - -DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) -DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid)) -ERR_STATE *ERR_get_state(void); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ERR_remove_thread_state(void *); +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_0_0 +OSSL_DEPRECATEDIN_1_0_0 void ERR_remove_state(unsigned long pid); +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ERR_STATE *ERR_get_state(void); +#endif int ERR_get_next_error_library(void); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/err.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/err.h.in new file mode 100644 index 00000000..11dc2163 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/err.h.in @@ -0,0 +1,493 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_lhash_macros); +-} + +#ifndef OPENSSL_ERR_H +# define OPENSSL_ERR_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ERR_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# include +# endif + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_FILENAMES +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,fn,ln) +# else +# define ERR_PUT_error(l,f,r,fn,ln) ERR_put_error(l,f,r,NULL,0) +# endif +# endif + +# include +# include + +# define ERR_TXT_MALLOCED 0x01 +# define ERR_TXT_STRING 0x02 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) || defined(OSSL_FORCE_ERR_STATE) +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 + +# define ERR_NUM_ERRORS 16 +struct err_state_st { + int err_flags[ERR_NUM_ERRORS]; + int err_marks[ERR_NUM_ERRORS]; + unsigned long err_buffer[ERR_NUM_ERRORS]; + char *err_data[ERR_NUM_ERRORS]; + size_t err_data_size[ERR_NUM_ERRORS]; + int err_data_flags[ERR_NUM_ERRORS]; + char *err_file[ERR_NUM_ERRORS]; + int err_line[ERR_NUM_ERRORS]; + char *err_func[ERR_NUM_ERRORS]; + int top, bottom; +}; +# endif + +/* library */ +# define ERR_LIB_NONE 1 +# define ERR_LIB_SYS 2 +# define ERR_LIB_BN 3 +# define ERR_LIB_RSA 4 +# define ERR_LIB_DH 5 +# define ERR_LIB_EVP 6 +# define ERR_LIB_BUF 7 +# define ERR_LIB_OBJ 8 +# define ERR_LIB_PEM 9 +# define ERR_LIB_DSA 10 +# define ERR_LIB_X509 11 +/* #define ERR_LIB_METH 12 */ +# define ERR_LIB_ASN1 13 +# define ERR_LIB_CONF 14 +# define ERR_LIB_CRYPTO 15 +# define ERR_LIB_EC 16 +# define ERR_LIB_SSL 20 +/* #define ERR_LIB_SSL23 21 */ +/* #define ERR_LIB_SSL2 22 */ +/* #define ERR_LIB_SSL3 23 */ +/* #define ERR_LIB_RSAREF 30 */ +/* #define ERR_LIB_PROXY 31 */ +# define ERR_LIB_BIO 32 +# define ERR_LIB_PKCS7 33 +# define ERR_LIB_X509V3 34 +# define ERR_LIB_PKCS12 35 +# define ERR_LIB_RAND 36 +# define ERR_LIB_DSO 37 +# define ERR_LIB_ENGINE 38 +# define ERR_LIB_OCSP 39 +# define ERR_LIB_UI 40 +# define ERR_LIB_COMP 41 +# define ERR_LIB_ECDSA 42 +# define ERR_LIB_ECDH 43 +# define ERR_LIB_OSSL_STORE 44 +# define ERR_LIB_FIPS 45 +# define ERR_LIB_CMS 46 +# define ERR_LIB_TS 47 +# define ERR_LIB_HMAC 48 +/* # define ERR_LIB_JPAKE 49 */ +# define ERR_LIB_CT 50 +# define ERR_LIB_ASYNC 51 +# define ERR_LIB_KDF 52 +# define ERR_LIB_SM2 53 +# define ERR_LIB_ESS 54 +# define ERR_LIB_PROP 55 +# define ERR_LIB_CRMF 56 +# define ERR_LIB_PROV 57 +# define ERR_LIB_CMP 58 +# define ERR_LIB_OSSL_ENCODER 59 +# define ERR_LIB_OSSL_DECODER 60 +# define ERR_LIB_HTTP 61 + +# define ERR_LIB_USER 128 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define ASN1err(f, r) ERR_raise_data(ERR_LIB_ASN1, (r), NULL) +# define ASYNCerr(f, r) ERR_raise_data(ERR_LIB_ASYNC, (r), NULL) +# define BIOerr(f, r) ERR_raise_data(ERR_LIB_BIO, (r), NULL) +# define BNerr(f, r) ERR_raise_data(ERR_LIB_BN, (r), NULL) +# define BUFerr(f, r) ERR_raise_data(ERR_LIB_BUF, (r), NULL) +# define CMPerr(f, r) ERR_raise_data(ERR_LIB_CMP, (r), NULL) +# define CMSerr(f, r) ERR_raise_data(ERR_LIB_CMS, (r), NULL) +# define COMPerr(f, r) ERR_raise_data(ERR_LIB_COMP, (r), NULL) +# define CONFerr(f, r) ERR_raise_data(ERR_LIB_CONF, (r), NULL) +# define CRMFerr(f, r) ERR_raise_data(ERR_LIB_CRMF, (r), NULL) +# define CRYPTOerr(f, r) ERR_raise_data(ERR_LIB_CRYPTO, (r), NULL) +# define CTerr(f, r) ERR_raise_data(ERR_LIB_CT, (r), NULL) +# define DHerr(f, r) ERR_raise_data(ERR_LIB_DH, (r), NULL) +# define DSAerr(f, r) ERR_raise_data(ERR_LIB_DSA, (r), NULL) +# define DSOerr(f, r) ERR_raise_data(ERR_LIB_DSO, (r), NULL) +# define ECDHerr(f, r) ERR_raise_data(ERR_LIB_ECDH, (r), NULL) +# define ECDSAerr(f, r) ERR_raise_data(ERR_LIB_ECDSA, (r), NULL) +# define ECerr(f, r) ERR_raise_data(ERR_LIB_EC, (r), NULL) +# define ENGINEerr(f, r) ERR_raise_data(ERR_LIB_ENGINE, (r), NULL) +# define ESSerr(f, r) ERR_raise_data(ERR_LIB_ESS, (r), NULL) +# define EVPerr(f, r) ERR_raise_data(ERR_LIB_EVP, (r), NULL) +# define FIPSerr(f, r) ERR_raise_data(ERR_LIB_FIPS, (r), NULL) +# define HMACerr(f, r) ERR_raise_data(ERR_LIB_HMAC, (r), NULL) +# define HTTPerr(f, r) ERR_raise_data(ERR_LIB_HTTP, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define OBJerr(f, r) ERR_raise_data(ERR_LIB_OBJ, (r), NULL) +# define OCSPerr(f, r) ERR_raise_data(ERR_LIB_OCSP, (r), NULL) +# define OSSL_STOREerr(f, r) ERR_raise_data(ERR_LIB_OSSL_STORE, (r), NULL) +# define PEMerr(f, r) ERR_raise_data(ERR_LIB_PEM, (r), NULL) +# define PKCS12err(f, r) ERR_raise_data(ERR_LIB_PKCS12, (r), NULL) +# define PKCS7err(f, r) ERR_raise_data(ERR_LIB_PKCS7, (r), NULL) +# define PROPerr(f, r) ERR_raise_data(ERR_LIB_PROP, (r), NULL) +# define PROVerr(f, r) ERR_raise_data(ERR_LIB_PROV, (r), NULL) +# define RANDerr(f, r) ERR_raise_data(ERR_LIB_RAND, (r), NULL) +# define RSAerr(f, r) ERR_raise_data(ERR_LIB_RSA, (r), NULL) +# define KDFerr(f, r) ERR_raise_data(ERR_LIB_KDF, (r), NULL) +# define SM2err(f, r) ERR_raise_data(ERR_LIB_SM2, (r), NULL) +# define SSLerr(f, r) ERR_raise_data(ERR_LIB_SSL, (r), NULL) +# define SYSerr(f, r) ERR_raise_data(ERR_LIB_SYS, (r), NULL) +# define TSerr(f, r) ERR_raise_data(ERR_LIB_TS, (r), NULL) +# define UIerr(f, r) ERR_raise_data(ERR_LIB_UI, (r), NULL) +# define X509V3err(f, r) ERR_raise_data(ERR_LIB_X509V3, (r), NULL) +# define X509err(f, r) ERR_raise_data(ERR_LIB_X509, (r), NULL) +# endif + +/*- + * The error code packs differently depending on if it records a system + * error or an OpenSSL error. + * + * A system error packs like this (we follow POSIX and only allow positive + * numbers that fit in an |int|): + * + * +-+-------------------------------------------------------------+ + * |1| system error number | + * +-+-------------------------------------------------------------+ + * + * An OpenSSL error packs like this: + * + * <---------------------------- 32 bits --------------------------> + * <--- 8 bits ---><------------------ 23 bits -----------------> + * +-+---------------+---------------------------------------------+ + * |0| library | reason | + * +-+---------------+---------------------------------------------+ + * + * A few of the reason bits are reserved as flags with special meaning: + * + * <5 bits-<>--------- 19 bits -----------------> + * +-------+-+-----------------------------------+ + * | rflags| | reason | + * +-------+-+-----------------------------------+ + * ^ + * | + * ERR_RFLAG_FATAL = ERR_R_FATAL + * + * The reason flags are part of the overall reason code for practical + * reasons, as they provide an easy way to place different types of + * reason codes in different numeric ranges. + * + * The currently known reason flags are: + * + * ERR_RFLAG_FATAL Flags that the reason code is considered fatal. + * For backward compatibility reasons, this flag + * is also the code for ERR_R_FATAL (that reason + * code served the dual purpose of flag and reason + * code in one in pre-3.0 OpenSSL). + * ERR_RFLAG_COMMON Flags that the reason code is common to all + * libraries. All ERR_R_ macros must use this flag, + * and no other _R_ macro is allowed to use it. + */ + +/* Macros to help decode recorded system errors */ +# define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1) +# define ERR_SYSTEM_MASK ((unsigned int)INT_MAX) + +/* + * Macros to help decode recorded OpenSSL errors + * As expressed above, RFLAGS and REASON overlap by one bit to allow + * ERR_R_FATAL to use ERR_RFLAG_FATAL as its reason code. + */ +# define ERR_LIB_OFFSET 23L +# define ERR_LIB_MASK 0xFF +# define ERR_RFLAGS_OFFSET 18L +# define ERR_RFLAGS_MASK 0x1F +# define ERR_REASON_MASK 0X7FFFFF + +/* + * Reason flags are defined pre-shifted to easily combine with the reason + * number. + */ +# define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET) +# define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET) + +# define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0) + +static ossl_unused ossl_inline int ERR_GET_LIB(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return ERR_LIB_SYS; + return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK; +} + +static ossl_unused ossl_inline int ERR_GET_RFLAGS(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return 0; + return errcode & (ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET); +} + +static ossl_unused ossl_inline int ERR_GET_REASON(unsigned long errcode) +{ + if (ERR_SYSTEM_ERROR(errcode)) + return errcode & ERR_SYSTEM_MASK; + return errcode & ERR_REASON_MASK; +} + +static ossl_unused ossl_inline int ERR_FATAL_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_FATAL) != 0; +} + +static ossl_unused ossl_inline int ERR_COMMON_ERROR(unsigned long errcode) +{ + return (ERR_GET_RFLAGS(errcode) & ERR_RFLAG_COMMON) != 0; +} + +/* + * ERR_PACK is a helper macro to properly pack OpenSSL error codes and may + * only be used for that purpose. System errors are packed internally. + * ERR_PACK takes reason flags and reason code combined in |reason|. + * ERR_PACK ignores |func|, that parameter is just legacy from pre-3.0 OpenSSL. + */ +# define ERR_PACK(lib,func,reason) \ + ( (((unsigned long)(lib) & ERR_LIB_MASK ) << ERR_LIB_OFFSET) | \ + (((unsigned long)(reason) & ERR_REASON_MASK)) ) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SYS_F_FOPEN 0 +# define SYS_F_CONNECT 0 +# define SYS_F_GETSERVBYNAME 0 +# define SYS_F_SOCKET 0 +# define SYS_F_IOCTLSOCKET 0 +# define SYS_F_BIND 0 +# define SYS_F_LISTEN 0 +# define SYS_F_ACCEPT 0 +# define SYS_F_WSASTARTUP 0 +# define SYS_F_OPENDIR 0 +# define SYS_F_FREAD 0 +# define SYS_F_GETADDRINFO 0 +# define SYS_F_GETNAMEINFO 0 +# define SYS_F_SETSOCKOPT 0 +# define SYS_F_GETSOCKOPT 0 +# define SYS_F_GETSOCKNAME 0 +# define SYS_F_GETHOSTBYNAME 0 +# define SYS_F_FFLUSH 0 +# define SYS_F_OPEN 0 +# define SYS_F_CLOSE 0 +# define SYS_F_IOCTL 0 +# define SYS_F_STAT 0 +# define SYS_F_FCNTL 0 +# define SYS_F_FSTAT 0 +# define SYS_F_SENDFILE 0 +# endif + +/* + * All ERR_R_ codes must be combined with ERR_RFLAG_COMMON. + */ + +/* "we came from here" global reason codes, range 1..255 */ +# define ERR_R_SYS_LIB (ERR_LIB_SYS/* 2 */ | ERR_RFLAG_COMMON) +# define ERR_R_BN_LIB (ERR_LIB_BN/* 3 */ | ERR_RFLAG_COMMON) +# define ERR_R_RSA_LIB (ERR_LIB_RSA/* 4 */ | ERR_RFLAG_COMMON) +# define ERR_R_DH_LIB (ERR_LIB_DH/* 5 */ | ERR_RFLAG_COMMON) +# define ERR_R_EVP_LIB (ERR_LIB_EVP/* 6 */ | ERR_RFLAG_COMMON) +# define ERR_R_BUF_LIB (ERR_LIB_BUF/* 7 */ | ERR_RFLAG_COMMON) +# define ERR_R_OBJ_LIB (ERR_LIB_OBJ/* 8 */ | ERR_RFLAG_COMMON) +# define ERR_R_PEM_LIB (ERR_LIB_PEM/* 9 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSA_LIB (ERR_LIB_DSA/* 10 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509_LIB (ERR_LIB_X509/* 11 */ | ERR_RFLAG_COMMON) +# define ERR_R_ASN1_LIB (ERR_LIB_ASN1/* 13 */ | ERR_RFLAG_COMMON) +# define ERR_R_CONF_LIB (ERR_LIB_CONF/* 14 */ | ERR_RFLAG_COMMON) +# define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO/* 15 */ | ERR_RFLAG_COMMON) +# define ERR_R_EC_LIB (ERR_LIB_EC/* 16 */ | ERR_RFLAG_COMMON) +# define ERR_R_SSL_LIB (ERR_LIB_SSL/* 20 */ | ERR_RFLAG_COMMON) +# define ERR_R_BIO_LIB (ERR_LIB_BIO/* 32 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS7_LIB (ERR_LIB_PKCS7/* 33 */ | ERR_RFLAG_COMMON) +# define ERR_R_X509V3_LIB (ERR_LIB_X509V3/* 34 */ | ERR_RFLAG_COMMON) +# define ERR_R_PKCS12_LIB (ERR_LIB_PKCS12/* 35 */ | ERR_RFLAG_COMMON) +# define ERR_R_RAND_LIB (ERR_LIB_RAND/* 36 */ | ERR_RFLAG_COMMON) +# define ERR_R_DSO_LIB (ERR_LIB_DSO/* 37 */ | ERR_RFLAG_COMMON) +# define ERR_R_ENGINE_LIB (ERR_LIB_ENGINE/* 38 */ | ERR_RFLAG_COMMON) +# define ERR_R_UI_LIB (ERR_LIB_UI/* 40 */ | ERR_RFLAG_COMMON) +# define ERR_R_ECDSA_LIB (ERR_LIB_ECDSA/* 42 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_STORE_LIB (ERR_LIB_OSSL_STORE/* 44 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMS_LIB (ERR_LIB_CMS/* 46 */ | ERR_RFLAG_COMMON) +# define ERR_R_TS_LIB (ERR_LIB_TS/* 47 */ | ERR_RFLAG_COMMON) +# define ERR_R_CT_LIB (ERR_LIB_CT/* 50 */ | ERR_RFLAG_COMMON) +# define ERR_R_PROV_LIB (ERR_LIB_PROV/* 57 */ | ERR_RFLAG_COMMON) +# define ERR_R_ESS_LIB (ERR_LIB_ESS/* 54 */ | ERR_RFLAG_COMMON) +# define ERR_R_CMP_LIB (ERR_LIB_CMP/* 58 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_ENCODER_LIB (ERR_LIB_OSSL_ENCODER/* 59 */ | ERR_RFLAG_COMMON) +# define ERR_R_OSSL_DECODER_LIB (ERR_LIB_OSSL_DECODER/* 60 */ | ERR_RFLAG_COMMON) + +/* Other common error codes, range 256..2^ERR_RFLAGS_OFFSET-1 */ +# define ERR_R_FATAL (ERR_RFLAG_FATAL|ERR_RFLAG_COMMON) +# define ERR_R_MALLOC_FAILURE (256|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (257|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (258|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (259|ERR_R_FATAL) +# define ERR_R_DISABLED (260|ERR_R_FATAL) +# define ERR_R_INIT_FAIL (261|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (262|ERR_RFLAG_COMMON) +# define ERR_R_OPERATION_FAIL (263|ERR_R_FATAL) +# define ERR_R_INVALID_PROVIDER_FUNCTIONS (264|ERR_R_FATAL) +# define ERR_R_INTERRUPTED_OR_CANCELLED (265|ERR_RFLAG_COMMON) +# define ERR_R_NESTED_ASN1_ERROR (266|ERR_RFLAG_COMMON) +# define ERR_R_MISSING_ASN1_EOS (267|ERR_RFLAG_COMMON) +# define ERR_R_UNSUPPORTED (268|ERR_RFLAG_COMMON) +# define ERR_R_FETCH_FAILED (269|ERR_RFLAG_COMMON) +# define ERR_R_INVALID_PROPERTY_DEFINITION (270|ERR_RFLAG_COMMON) +# define ERR_R_UNABLE_TO_GET_READ_LOCK (271|ERR_R_FATAL) +# define ERR_R_UNABLE_TO_GET_WRITE_LOCK (272|ERR_R_FATAL) + +typedef struct ERR_string_data_st { + unsigned long error; + const char *string; +} ERR_STRING_DATA; + +{- + generate_lhash_macros("ERR_STRING_DATA"); +-} + +/* 12 lines and some on an 80 column terminal */ +#define ERR_MAX_DATA_SIZE 1024 + +/* Building blocks */ +void ERR_new(void); +void ERR_set_debug(const char *file, int line, const char *func); +void ERR_set_error(int lib, int reason, const char *fmt, ...); +void ERR_vset_error(int lib, int reason, const char *fmt, va_list args); + +/* Main error raising functions */ +# define ERR_raise(lib, reason) ERR_raise_data((lib),(reason),NULL) +# define ERR_raise_data \ + (ERR_new(), \ + ERR_set_debug(OPENSSL_FILE,OPENSSL_LINE,OPENSSL_FUNC), \ + ERR_set_error) + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* Backward compatibility */ +# define ERR_put_error(lib, func, reason, file, line) \ + (ERR_new(), \ + ERR_set_debug((file), (line), OPENSSL_FUNC), \ + ERR_set_error((lib), (reason), NULL)) +# endif + +void ERR_set_error_data(char *data, int flags); + +unsigned long ERR_get_error(void); +unsigned long ERR_get_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_get_error_line(const char **file, int *line); +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_get_error_line_data(const char **file, int *line, + const char **data, int *flags); +#endif +unsigned long ERR_peek_error(void); +unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_func(const char **func); +unsigned long ERR_peek_error_data(const char **data, int *flags); +unsigned long ERR_peek_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_peek_error_line_data(const char **file, int *line, + const char **data, int *flags); +# endif +unsigned long ERR_peek_last_error(void); +unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_func(const char **func); +unsigned long ERR_peek_last_error_data(const char **data, int *flags); +unsigned long ERR_peek_last_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +unsigned long ERR_peek_last_error_line_data(const char **file, int *line, + const char **data, int *flags); +# endif + +void ERR_clear_error(void); + +char *ERR_error_string(unsigned long e, char *buf); +void ERR_error_string_n(unsigned long e, char *buf, size_t len); +const char *ERR_lib_error_string(unsigned long e); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *ERR_func_error_string(unsigned long e); +# endif +const char *ERR_reason_error_string(unsigned long e); + +void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), + void *u); +# ifndef OPENSSL_NO_STDIO +void ERR_print_errors_fp(FILE *fp); +# endif +void ERR_print_errors(BIO *bp); + +void ERR_add_error_data(int num, ...); +void ERR_add_error_vdata(int num, va_list args); +void ERR_add_error_txt(const char *sepr, const char *txt); +void ERR_add_error_mem_bio(const char *sep, BIO *bio); + +int ERR_load_strings(int lib, ERR_STRING_DATA *str); +int ERR_load_strings_const(const ERR_STRING_DATA *str); +int ERR_unload_strings(int lib, ERR_STRING_DATA *str); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define ERR_load_crypto_strings() \ + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# define ERR_free_strings() while(0) continue +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void ERR_remove_thread_state(void *); +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_0_0 +OSSL_DEPRECATEDIN_1_0_0 void ERR_remove_state(unsigned long pid); +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 ERR_STATE *ERR_get_state(void); +#endif + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); +int ERR_clear_last_mark(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ess.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ess.h new file mode 100644 index 00000000..4055bebb --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ess.h @@ -0,0 +1,128 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ess.h.in + * + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + + + +#ifndef OPENSSL_ESS_H +# define OPENSSL_ESS_H +# pragma once + +# include + +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + + +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID, ESS_CERT_ID, ESS_CERT_ID) +#define sk_ESS_CERT_ID_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_value(sk, idx) ((ESS_CERT_ID *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_sk_type(sk), (idx))) +#define sk_ESS_CERT_ID_new(cmp) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_compfunc_type(cmp))) +#define sk_ESS_CERT_ID_new_null() ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_null()) +#define sk_ESS_CERT_ID_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_sk_type(sk), (n)) +#define sk_ESS_CERT_ID_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_delete(sk, i) ((ESS_CERT_ID *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_sk_type(sk), (i))) +#define sk_ESS_CERT_ID_delete_ptr(sk, ptr) ((ESS_CERT_ID *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr))) +#define sk_ESS_CERT_ID_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_pop(sk) ((ESS_CERT_ID *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_shift(sk) ((ESS_CERT_ID *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_sk_type(sk),ossl_check_ESS_CERT_ID_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), (idx)) +#define sk_ESS_CERT_ID_set(sk, idx, ptr) ((ESS_CERT_ID *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_type(ptr))) +#define sk_ESS_CERT_ID_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr)) +#define sk_ESS_CERT_ID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_type(ptr), pnum) +#define sk_ESS_CERT_ID_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_sk_type(sk)) +#define sk_ESS_CERT_ID_dup(sk) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_sk_type(sk))) +#define sk_ESS_CERT_ID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_freefunc_type(freefunc))) +#define sk_ESS_CERT_ID_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_sk_type(sk), ossl_check_ESS_CERT_ID_compfunc_type(cmp))) + + + +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; + +SKM_DEFINE_STACK_OF_INTERNAL(ESS_CERT_ID_V2, ESS_CERT_ID_V2, ESS_CERT_ID_V2) +#define sk_ESS_CERT_ID_V2_num(sk) OPENSSL_sk_num(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_value(sk, idx) ((ESS_CERT_ID_V2 *)OPENSSL_sk_value(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), (idx))) +#define sk_ESS_CERT_ID_V2_new(cmp) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp))) +#define sk_ESS_CERT_ID_V2_new_null() ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_null()) +#define sk_ESS_CERT_ID_V2_new_reserve(cmp, n) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_new_reserve(ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp), (n))) +#define sk_ESS_CERT_ID_V2_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (n)) +#define sk_ESS_CERT_ID_V2_free(sk) OPENSSL_sk_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_zero(sk) OPENSSL_sk_zero(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_delete(sk, i) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (i))) +#define sk_ESS_CERT_ID_V2_delete_ptr(sk, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_delete_ptr(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr))) +#define sk_ESS_CERT_ID_V2_push(sk, ptr) OPENSSL_sk_push(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_pop(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_pop(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_shift(sk) ((ESS_CERT_ID_V2 *)OPENSSL_sk_shift(ossl_check_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ESS_CERT_ID_V2_sk_type(sk),ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc)) +#define sk_ESS_CERT_ID_V2_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), (idx)) +#define sk_ESS_CERT_ID_V2_set(sk, idx, ptr) ((ESS_CERT_ID_V2 *)OPENSSL_sk_set(ossl_check_ESS_CERT_ID_V2_sk_type(sk), (idx), ossl_check_ESS_CERT_ID_V2_type(ptr))) +#define sk_ESS_CERT_ID_V2_find(sk, ptr) OPENSSL_sk_find(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr)) +#define sk_ESS_CERT_ID_V2_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_type(ptr), pnum) +#define sk_ESS_CERT_ID_V2_sort(sk) OPENSSL_sk_sort(ossl_check_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk)) +#define sk_ESS_CERT_ID_V2_dup(sk) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_dup(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk))) +#define sk_ESS_CERT_ID_V2_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ESS_CERT_ID_V2) *)OPENSSL_sk_deep_copy(ossl_check_const_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_copyfunc_type(copyfunc), ossl_check_ESS_CERT_ID_V2_freefunc_type(freefunc))) +#define sk_ESS_CERT_ID_V2_set_cmp_func(sk, cmp) ((sk_ESS_CERT_ID_V2_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ESS_CERT_ID_V2_sk_type(sk), ossl_check_ESS_CERT_ID_V2_compfunc_type(cmp))) + + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_ISSUER_SERIAL) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_ISSUER_SERIAL, ESS_ISSUER_SERIAL) +DECLARE_ASN1_DUP_FUNCTION(ESS_ISSUER_SERIAL) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID, ESS_CERT_ID) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID_V2) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID_V2, ESS_CERT_ID_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2) + +ESS_SIGNING_CERT *OSSL_ESS_signing_cert_new_init(const X509 *signcert, + const STACK_OF(X509) *certs, + int set_issuer_serial); +ESS_SIGNING_CERT_V2 *OSSL_ESS_signing_cert_v2_new_init(const EVP_MD *hash_alg, + const X509 *signcert, + const + STACK_OF(X509) *certs, + int set_issuer_serial); +int OSSL_ESS_check_signing_certs(const ESS_SIGNING_CERT *ss, + const ESS_SIGNING_CERT_V2 *ssv2, + const STACK_OF(X509) *chain, + int require_signing_cert); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ess.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/ess.h.in new file mode 100644 index 00000000..d1a685b9 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ess.h.in @@ -0,0 +1,81 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_ESS_H +# define OPENSSL_ESS_H +# pragma once + +# include + +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + + +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +{- + generate_stack_macros("ESS_CERT_ID"); +-} + + +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; + +{- + generate_stack_macros("ESS_CERT_ID_V2"); +-} + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_ISSUER_SERIAL) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_ISSUER_SERIAL, ESS_ISSUER_SERIAL) +DECLARE_ASN1_DUP_FUNCTION(ESS_ISSUER_SERIAL) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID, ESS_CERT_ID) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT) + +DECLARE_ASN1_ALLOC_FUNCTIONS(ESS_CERT_ID_V2) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(ESS_CERT_ID_V2, ESS_CERT_ID_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2) + +DECLARE_ASN1_FUNCTIONS(ESS_SIGNING_CERT_V2) +DECLARE_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2) + +ESS_SIGNING_CERT *OSSL_ESS_signing_cert_new_init(const X509 *signcert, + const STACK_OF(X509) *certs, + int set_issuer_serial); +ESS_SIGNING_CERT_V2 *OSSL_ESS_signing_cert_v2_new_init(const EVP_MD *hash_alg, + const X509 *signcert, + const + STACK_OF(X509) *certs, + int set_issuer_serial); +int OSSL_ESS_check_signing_certs(const ESS_SIGNING_CERT *ss, + const ESS_SIGNING_CERT_V2 *ssv2, + const STACK_OF(X509) *chain, + int require_signing_cert); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/esserr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/esserr.h new file mode 100644 index 00000000..165ce7c4 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/esserr.h @@ -0,0 +1,32 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_ESSERR_H +# define OPENSSL_ESSERR_H +# pragma once + +# include +# include +# include + +/* + * ESS reason codes. + */ +# define ESS_R_EMPTY_ESS_CERT_ID_LIST 107 +# define ESS_R_ESS_CERT_DIGEST_ERROR 103 +# define ESS_R_ESS_CERT_ID_NOT_FOUND 104 +# define ESS_R_ESS_CERT_ID_WRONG_ORDER 105 +# define ESS_R_ESS_DIGEST_ALG_UNKNOWN 106 +# define ESS_R_ESS_SIGNING_CERTIFICATE_ERROR 102 +# define ESS_R_ESS_SIGNING_CERT_ADD_ERROR 100 +# define ESS_R_ESS_SIGNING_CERT_V2_ADD_ERROR 101 +# define ESS_R_MISSING_SIGNING_CERTIFICATE_ATTRIBUTE 108 + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/evp.h b/deps/openssl/android/x86_64/usr/local/include/openssl/evp.h index a411f3f2..86f4e22c 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/evp.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/evp.h @@ -1,20 +1,35 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_ENVELOPE_H -# define HEADER_ENVELOPE_H +#ifndef OPENSSL_EVP_H +# define OPENSSL_EVP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_ENVELOPE_H +# endif + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif # include -# include +# include +# include +# include # include # include # include +# include # define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ # define EVP_MAX_KEY_LENGTH 64 @@ -27,16 +42,18 @@ # include -# define EVP_PK_RSA 0x0001 -# define EVP_PK_DSA 0x0002 -# define EVP_PK_DH 0x0004 -# define EVP_PK_EC 0x0008 -# define EVP_PKT_SIGN 0x0010 -# define EVP_PKT_ENC 0x0020 -# define EVP_PKT_EXCH 0x0040 -# define EVP_PKS_RSA 0x0100 -# define EVP_PKS_DSA 0x0200 -# define EVP_PKS_EC 0x0400 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define EVP_PK_RSA 0x0001 +# define EVP_PK_DSA 0x0002 +# define EVP_PK_DH 0x0004 +# define EVP_PK_EC 0x0008 +# define EVP_PKT_SIGN 0x0010 +# define EVP_PKT_ENC 0x0020 +# define EVP_PKT_EXCH 0x0040 +# define EVP_PKS_RSA 0x0100 +# define EVP_PKS_DSA 0x0200 +# define EVP_PKS_EC 0x0400 +# endif # define EVP_PKEY_NONE NID_undef # define EVP_PKEY_RSA NID_rsaEncryption @@ -62,53 +79,81 @@ # define EVP_PKEY_ED25519 NID_ED25519 # define EVP_PKEY_X448 NID_X448 # define EVP_PKEY_ED448 NID_ED448 +/* Special indicator that the object is uniquely provider side */ +# define EVP_PKEY_KEYMGMT -1 + +/* Easy to use macros for EVP_PKEY related selections */ +# define EVP_PKEY_KEY_PARAMETERS \ + ( OSSL_KEYMGMT_SELECT_ALL_PARAMETERS ) +# define EVP_PKEY_PUBLIC_KEY \ + ( EVP_PKEY_KEY_PARAMETERS | OSSL_KEYMGMT_SELECT_PUBLIC_KEY ) +# define EVP_PKEY_KEYPAIR \ + ( EVP_PKEY_PUBLIC_KEY | OSSL_KEYMGMT_SELECT_PRIVATE_KEY ) #ifdef __cplusplus extern "C" { #endif +int EVP_set_default_properties(OSSL_LIB_CTX *libctx, const char *propq); +int EVP_default_properties_is_fips_enabled(OSSL_LIB_CTX *libctx); +int EVP_default_properties_enable_fips(OSSL_LIB_CTX *libctx, int enable); + # define EVP_PKEY_MO_SIGN 0x0001 # define EVP_PKEY_MO_VERIFY 0x0002 # define EVP_PKEY_MO_ENCRYPT 0x0004 # define EVP_PKEY_MO_DECRYPT 0x0008 # ifndef EVP_MD -EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); -EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); -void EVP_MD_meth_free(EVP_MD *md); - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); +OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 void EVP_MD_meth_free(EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, const void *data, size_t count)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, unsigned char *md)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, const EVP_MD_CTX *from)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, int p1, void *p2)); - -int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); -int EVP_MD_meth_get_result_size(const EVP_MD *md); -int EVP_MD_meth_get_app_datasize(const EVP_MD *md); -unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_result_size(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_app_datasize(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, - const void *data, - size_t count); + const void *data, size_t count); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, unsigned char *md); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, const EVP_MD_CTX *from); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); - +# endif /* digest can only handle a single block */ # define EVP_MD_FLAG_ONESHOT 0x0001 @@ -139,6 +184,7 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, # define EVP_MD_CTRL_DIGALGID 0x1 # define EVP_MD_CTRL_MICALG 0x2 # define EVP_MD_CTRL_XOF_LEN 0x3 +# define EVP_MD_CTRL_TLSTREE 0x4 /* Minimum Algorithm specific ctrl value */ @@ -159,8 +205,8 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, * don't accidentally reuse the values for other purposes. */ -# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS - * digest in FIPS mode */ +/* This flag has no effect from openssl-3.0 onwards */ +# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008 /* * The following PAD options are also currently ignored in 1.0.0, digest @@ -181,52 +227,68 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, */ # define EVP_MD_CTX_FLAG_FINALISE 0x0200 /* NOTE: 0x0400 is reserved for internal usage */ - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); +OSSL_DEPRECATEDIN_3_0 EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); +OSSL_DEPRECATEDIN_3_0 void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); - +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher, int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher, int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, int (*cleanup) (EVP_CIPHER_CTX *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *)); +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr)); - -int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - const unsigned char *key, - const unsigned char *iv, - int enc); -int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, - unsigned char *out, - const unsigned char *in, - size_t inl); -int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); -int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - ASN1_TYPE *); -int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, - int type, int arg, - void *ptr); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +OSSL_DEPRECATEDIN_3_0 int +(*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, int type, + int arg, void *ptr); +# endif /* Values for cipher flags */ @@ -243,6 +305,7 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CIPH_XTS_MODE 0x10001 # define EVP_CIPH_WRAP_MODE 0x10002 # define EVP_CIPH_OCB_MODE 0x10003 +# define EVP_CIPH_SIV_MODE 0x10004 # define EVP_CIPH_MODE 0xF0007 /* Set if variable length cipher */ # define EVP_CIPH_VARIABLE_LENGTH 0x8 @@ -262,22 +325,32 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CIPH_CUSTOM_COPY 0x400 /* Don't use standard iv length function */ # define EVP_CIPH_CUSTOM_IV_LENGTH 0x800 -/* Allow use default ASN1 get/set iv */ -# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 +/* Legacy and no longer relevant: Allow use default ASN1 get/set iv */ +# define EVP_CIPH_FLAG_DEFAULT_ASN1 0 +/* Free: 0x1000 */ /* Buffer length in bits not bytes: CFB1 mode only */ # define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 -/* Note if suitable for use in FIPS mode */ -# define EVP_CIPH_FLAG_FIPS 0x4000 -/* Allow non FIPS cipher in FIPS mode */ -# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 +/* Deprecated FIPS flag: was 0x4000 */ +# define EVP_CIPH_FLAG_FIPS 0 +/* Deprecated FIPS flag: was 0x8000 */ +# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0 + /* * Cipher handles any and all padding logic as well as finalisation. */ +# define EVP_CIPH_FLAG_CTS 0x4000 # define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 # define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 # define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 /* Cipher can handle pipeline operations */ # define EVP_CIPH_FLAG_PIPELINE 0X800000 +/* For provider implementations that handle ASN1 get/set param themselves */ +# define EVP_CIPH_FLAG_CUSTOM_ASN1 0x1000000 +/* For ciphers generating unprotected CMS attributes */ +# define EVP_CIPH_FLAG_CIPHER_WITH_MAC 0x2000000 +/* For supplementary wrap cipher support */ +# define EVP_CIPH_FLAG_GET_WRAP_CIPHER 0x4000000 +# define EVP_CIPH_FLAG_INVERSE_CIPHER 0x8000000 /* * Cipher context flag to indicate we can handle wrap mode: if allowed in @@ -350,8 +423,17 @@ int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, # define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23 /* Set the input buffer lengths to use for a pipelined operation */ # define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24 - +/* Get the IV length used by the cipher */ # define EVP_CTRL_GET_IVLEN 0x25 +/* 0x26 is unused */ +/* Tell the cipher it's doing a speed test (SIV disallows multiple ops) */ +# define EVP_CTRL_SET_SPEED 0x27 +/* Get the unprotectedAttrs from cipher ctx */ +# define EVP_CTRL_PROCESS_UNPROTECTED 0x28 +/* Get the supplementary wrap cipher */ +#define EVP_CTRL_GET_WRAP_CIPHER 0x29 +/* TLSTREE key diversification */ +#define EVP_CTRL_TLSTREE 0x2A /* Padding modes */ #define EVP_PADDING_PKCS7 1 @@ -405,33 +487,39 @@ typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); -# ifndef OPENSSL_NO_RSA +typedef int (EVP_PBE_KEYGEN_EX) (EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *cipher, const EVP_MD *md, + int en_de, OSSL_LIB_CTX *libctx, const char *propq); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 # define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ - (char *)(rsa)) + (rsa)) # endif # ifndef OPENSSL_NO_DSA # define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ - (char *)(dsa)) + (dsa)) # endif -# ifndef OPENSSL_NO_DH -# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ - (char *)(dh)) +# if !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_DEPRECATED_3_0) +# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,(dh)) # endif -# ifndef OPENSSL_NO_EC -# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ - (char *)(eckey)) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +# define EVP_PKEY_assign_EC_KEY(pkey,eckey) \ + EVP_PKEY_assign((pkey), EVP_PKEY_EC, (eckey)) +# endif # endif # ifndef OPENSSL_NO_SIPHASH -# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),EVP_PKEY_SIPHASH,\ - (char *)(shkey)) +# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),\ + EVP_PKEY_SIPHASH,(shkey)) # endif # ifndef OPENSSL_NO_POLY1305 -# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),EVP_PKEY_POLY1305,\ - (char *)(polykey)) +# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),\ + EVP_PKEY_POLY1305,(polykey)) # endif /* Add some extra combinations */ @@ -440,58 +528,126 @@ typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, # define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) # define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) -int EVP_MD_type(const EVP_MD *md); -# define EVP_MD_nid(e) EVP_MD_type(e) -# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) -int EVP_MD_pkey_type(const EVP_MD *md); -int EVP_MD_size(const EVP_MD *md); -int EVP_MD_block_size(const EVP_MD *md); -unsigned long EVP_MD_flags(const EVP_MD *md); +int EVP_MD_get_type(const EVP_MD *md); +# define EVP_MD_type EVP_MD_get_type +# define EVP_MD_nid EVP_MD_get_type +const char *EVP_MD_get0_name(const EVP_MD *md); +# define EVP_MD_name EVP_MD_get0_name +const char *EVP_MD_get0_description(const EVP_MD *md); +int EVP_MD_is_a(const EVP_MD *md, const char *name); +int EVP_MD_names_do_all(const EVP_MD *md, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PROVIDER *EVP_MD_get0_provider(const EVP_MD *md); +int EVP_MD_get_pkey_type(const EVP_MD *md); +# define EVP_MD_pkey_type EVP_MD_get_pkey_type +int EVP_MD_get_size(const EVP_MD *md); +# define EVP_MD_size EVP_MD_get_size +int EVP_MD_get_block_size(const EVP_MD *md); +# define EVP_MD_block_size EVP_MD_get_block_size +unsigned long EVP_MD_get_flags(const EVP_MD *md); +# define EVP_MD_flags EVP_MD_get_flags +const EVP_MD *EVP_MD_CTX_get0_md(const EVP_MD_CTX *ctx); +EVP_MD *EVP_MD_CTX_get1_md(EVP_MD_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, const void *data, size_t count); +OSSL_DEPRECATEDIN_3_0 void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count)); -# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) -# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) -EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); +# endif +# define EVP_MD_CTX_get0_name(e) EVP_MD_get0_name(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_get_size(e) EVP_MD_get_size(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_size EVP_MD_CTX_get_size +# define EVP_MD_CTX_get_block_size(e) EVP_MD_get_block_size(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_block_size EVP_MD_CTX_get_block_size +# define EVP_MD_CTX_get_type(e) EVP_MD_get_type(EVP_MD_CTX_get0_md(e)) +# define EVP_MD_CTX_type EVP_MD_CTX_get_type +EVP_PKEY_CTX *EVP_MD_CTX_get_pkey_ctx(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_pkey_ctx EVP_MD_CTX_get_pkey_ctx void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); -void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); +void *EVP_MD_CTX_get0_md_data(const EVP_MD_CTX *ctx); +# define EVP_MD_CTX_md_data EVP_MD_CTX_get0_md_data -int EVP_CIPHER_nid(const EVP_CIPHER *cipher); -# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) -int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); +int EVP_CIPHER_get_nid(const EVP_CIPHER *cipher); +# define EVP_CIPHER_nid EVP_CIPHER_get_nid +const char *EVP_CIPHER_get0_name(const EVP_CIPHER *cipher); +# define EVP_CIPHER_name EVP_CIPHER_get0_name +const char *EVP_CIPHER_get0_description(const EVP_CIPHER *cipher); +int EVP_CIPHER_is_a(const EVP_CIPHER *cipher, const char *name); +int EVP_CIPHER_names_do_all(const EVP_CIPHER *cipher, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PROVIDER *EVP_CIPHER_get0_provider(const EVP_CIPHER *cipher); +int EVP_CIPHER_get_block_size(const EVP_CIPHER *cipher); +# define EVP_CIPHER_block_size EVP_CIPHER_get_block_size +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher); -int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); -int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); -unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); -# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) +# endif +int EVP_CIPHER_get_key_length(const EVP_CIPHER *cipher); +# define EVP_CIPHER_key_length EVP_CIPHER_get_key_length +int EVP_CIPHER_get_iv_length(const EVP_CIPHER *cipher); +# define EVP_CIPHER_iv_length EVP_CIPHER_get_iv_length +unsigned long EVP_CIPHER_get_flags(const EVP_CIPHER *cipher); +# define EVP_CIPHER_flags EVP_CIPHER_get_flags +int EVP_CIPHER_get_mode(const EVP_CIPHER *cipher); +# define EVP_CIPHER_mode EVP_CIPHER_get_mode +int EVP_CIPHER_get_type(const EVP_CIPHER *cipher); +# define EVP_CIPHER_type EVP_CIPHER_get_type +EVP_CIPHER *EVP_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_CIPHER_up_ref(EVP_CIPHER *cipher); +void EVP_CIPHER_free(EVP_CIPHER *cipher); +const EVP_CIPHER *EVP_CIPHER_CTX_get0_cipher(const EVP_CIPHER_CTX *ctx); +EVP_CIPHER *EVP_CIPHER_CTX_get1_cipher(EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_is_encrypting(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_encrypting EVP_CIPHER_CTX_is_encrypting +int EVP_CIPHER_CTX_get_nid(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_nid EVP_CIPHER_CTX_get_nid +int EVP_CIPHER_CTX_get_block_size(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_block_size EVP_CIPHER_CTX_get_block_size +int EVP_CIPHER_CTX_get_key_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_key_length EVP_CIPHER_CTX_get_key_length +int EVP_CIPHER_CTX_get_iv_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_iv_length EVP_CIPHER_CTX_get_iv_length +int EVP_CIPHER_CTX_get_tag_length(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_tag_length EVP_CIPHER_CTX_get_tag_length +# ifndef OPENSSL_NO_DEPRECATED_3_0 const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); -const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); -unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +# endif +int EVP_CIPHER_CTX_get_updated_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len); +int EVP_CIPHER_CTX_get_original_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx); -int EVP_CIPHER_CTX_num(const EVP_CIPHER_CTX *ctx); -void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +# endif +int EVP_CIPHER_CTX_get_num(const EVP_CIPHER_CTX *ctx); +# define EVP_CIPHER_CTX_num EVP_CIPHER_CTX_get_num +int EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +EVP_CIPHER_CTX *EVP_CIPHER_CTX_dup(const EVP_CIPHER_CTX *in); int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx); void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); -# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) -# if OPENSSL_API_COMPAT < 0x10100000L -# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c)) +# define EVP_CIPHER_CTX_get0_name(c) EVP_CIPHER_get0_name(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_get_type(c) EVP_CIPHER_get_type(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_type EVP_CIPHER_CTX_get_type +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_get_flags(EVP_CIPHER_CTX_get0_cipher(c)) # endif -# define EVP_CIPHER_CTX_mode(c) EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)) +# define EVP_CIPHER_CTX_get_mode(c) EVP_CIPHER_get_mode(EVP_CIPHER_CTX_get0_cipher(c)) +# define EVP_CIPHER_CTX_mode EVP_CIPHER_CTX_get_mode # define EVP_ENCODE_LENGTH(l) ((((l)+2)/3*4)+((l)/48+1)*2+80) # define EVP_DECODE_LENGTH(l) (((l)+3)/4*3+80) @@ -504,22 +660,17 @@ void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); # define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) # define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) -# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # ifdef CONST_STRICT void BIO_set_md(BIO *, const EVP_MD *md); # else -# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)(md)) +# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(void *)(md)) # endif -# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)(mdp)) -# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0, \ - (char *)(mdcp)) -# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0, \ - (char *)(mdcp)) +# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(mdp)) +# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(mdcp)) +# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(mdcp)) # define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) -# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0, \ - (char *)(c_pp)) +# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(c_pp)) /*__owur*/ int EVP_Cipher(EVP_CIPHER_CTX *c, unsigned char *out, @@ -534,6 +685,14 @@ void BIO_set_md(BIO *, const EVP_MD *md); # define EVP_delete_digest_alias(alias) \ OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); +int EVP_MD_get_params(const EVP_MD *digest, OSSL_PARAM params[]); +int EVP_MD_CTX_set_params(EVP_MD_CTX *ctx, const OSSL_PARAM params[]); +int EVP_MD_CTX_get_params(EVP_MD_CTX *ctx, OSSL_PARAM params[]); +const OSSL_PARAM *EVP_MD_gettable_params(const EVP_MD *digest); +const OSSL_PARAM *EVP_MD_settable_ctx_params(const EVP_MD *md); +const OSSL_PARAM *EVP_MD_gettable_ctx_params(const EVP_MD *md); +const OSSL_PARAM *EVP_MD_CTX_settable_params(EVP_MD_CTX *ctx); +const OSSL_PARAM *EVP_MD_CTX_gettable_params(EVP_MD_CTX *ctx); int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); EVP_MD_CTX *EVP_MD_CTX_new(void); int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); @@ -541,10 +700,13 @@ void EVP_MD_CTX_free(EVP_MD_CTX *ctx); # define EVP_MD_CTX_create() EVP_MD_CTX_new() # define EVP_MD_CTX_init(ctx) EVP_MD_CTX_reset((ctx)) # define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx)) +__owur EVP_MD_CTX *EVP_MD_CTX_dup(const EVP_MD_CTX *in); __owur int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); +__owur int EVP_DigestInit_ex2(EVP_MD_CTX *ctx, const EVP_MD *type, + const OSSL_PARAM params[]); __owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); __owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, @@ -554,6 +716,9 @@ __owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, __owur int EVP_Digest(const void *data, size_t count, unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl); +__owur int EVP_Q_digest(OSSL_LIB_CTX *libctx, const char *name, + const char *propq, const void *data, size_t datalen, + unsigned char *md, size_t *mdlen); __owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); __owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); @@ -562,6 +727,12 @@ __owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, __owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t len); +__owur EVP_MD *EVP_MD_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); + +int EVP_MD_up_ref(EVP_MD *md); +void EVP_MD_free(EVP_MD *md); + int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, const char *prompt, int verify); @@ -583,6 +754,10 @@ __owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); +__owur int EVP_EncryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, + const unsigned char *iv, + const OSSL_PARAM params[]); /*__owur*/ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); /*__owur*/ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, @@ -596,6 +771,10 @@ __owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); +__owur int EVP_DecryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, + const unsigned char *iv, + const OSSL_PARAM params[]); /*__owur*/ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); __owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, @@ -610,6 +789,9 @@ __owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc); +__owur int EVP_CipherInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv, + int enc, const OSSL_PARAM params[]); __owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); __owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, @@ -619,6 +801,9 @@ __owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, __owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, EVP_PKEY *pkey); +__owur int EVP_SignFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, + EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, + const char *propq); __owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen, const unsigned char *tbs, @@ -626,24 +811,36 @@ __owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, __owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, unsigned int siglen, EVP_PKEY *pkey); +__owur int EVP_VerifyFinal_ex(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey, + OSSL_LIB_CTX *libctx, const char *propq); __owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, size_t siglen, const unsigned char *tbs, size_t tbslen); +int EVP_DigestSignInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const char *mdname, OSSL_LIB_CTX *libctx, + const char *props, EVP_PKEY *pkey, + const OSSL_PARAM params[]); /*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen); +int EVP_DigestVerifyInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const char *mdname, OSSL_LIB_CTX *libctx, + const char *props, EVP_PKEY *pkey, + const OSSL_PARAM params[]); __owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); +int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, size_t siglen); -# ifndef OPENSSL_NO_RSA __owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *ek, int ekl, const unsigned char *iv, EVP_PKEY *priv); @@ -653,11 +850,10 @@ __owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek, int *ekl, unsigned char *iv, EVP_PKEY **pubk, int npubk); __owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); -# endif EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); -int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); +int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, const EVP_ENCODE_CTX *sctx); int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, @@ -672,7 +868,7 @@ int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c) # define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c) # endif @@ -683,6 +879,14 @@ int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); +int EVP_CIPHER_get_params(EVP_CIPHER *cipher, OSSL_PARAM params[]); +int EVP_CIPHER_CTX_set_params(EVP_CIPHER_CTX *ctx, const OSSL_PARAM params[]); +int EVP_CIPHER_CTX_get_params(EVP_CIPHER_CTX *ctx, OSSL_PARAM params[]); +const OSSL_PARAM *EVP_CIPHER_gettable_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_settable_ctx_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_gettable_ctx_params(const EVP_CIPHER *cipher); +const OSSL_PARAM *EVP_CIPHER_CTX_settable_params(EVP_CIPHER_CTX *ctx); +const OSSL_PARAM *EVP_CIPHER_CTX_gettable_params(EVP_CIPHER_CTX *ctx); const BIO_METHOD *BIO_f_md(void); const BIO_METHOD *BIO_f_base64(void); @@ -719,6 +923,7 @@ const EVP_MD *EVP_sha3_384(void); const EVP_MD *EVP_sha3_512(void); const EVP_MD *EVP_shake128(void); const EVP_MD *EVP_shake256(void); + # ifndef OPENSSL_NO_MDC2 const EVP_MD *EVP_mdc2(void); # endif @@ -939,7 +1144,7 @@ const EVP_CIPHER *EVP_sm4_ofb(void); const EVP_CIPHER *EVP_sm4_ctr(void); # endif -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OPENSSL_add_all_algorithms_conf() \ OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ | OPENSSL_INIT_ADD_ALL_DIGESTS \ @@ -974,6 +1179,9 @@ void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, void EVP_CIPHER_do_all_sorted(void (*fn) (const EVP_CIPHER *ciph, const char *from, const char *to, void *x), void *arg); +void EVP_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_CIPHER *cipher, void *arg), + void *arg); void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, const char *from, const char *to, void *x), @@ -981,81 +1189,237 @@ void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, void EVP_MD_do_all_sorted(void (*fn) (const EVP_MD *ciph, const char *from, const char *to, void *x), void *arg); +void EVP_MD_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_MD *md, void *arg), + void *arg); -int EVP_PKEY_decrypt_old(unsigned char *dec_key, - const unsigned char *enc_key, int enc_key_len, - EVP_PKEY *private_key); -int EVP_PKEY_encrypt_old(unsigned char *enc_key, - const unsigned char *key, int key_len, - EVP_PKEY *pub_key); +/* MAC stuff */ + +EVP_MAC *EVP_MAC_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); +int EVP_MAC_up_ref(EVP_MAC *mac); +void EVP_MAC_free(EVP_MAC *mac); +const char *EVP_MAC_get0_name(const EVP_MAC *mac); +const char *EVP_MAC_get0_description(const EVP_MAC *mac); +int EVP_MAC_is_a(const EVP_MAC *mac, const char *name); +const OSSL_PROVIDER *EVP_MAC_get0_provider(const EVP_MAC *mac); +int EVP_MAC_get_params(EVP_MAC *mac, OSSL_PARAM params[]); + +EVP_MAC_CTX *EVP_MAC_CTX_new(EVP_MAC *mac); +void EVP_MAC_CTX_free(EVP_MAC_CTX *ctx); +EVP_MAC_CTX *EVP_MAC_CTX_dup(const EVP_MAC_CTX *src); +EVP_MAC *EVP_MAC_CTX_get0_mac(EVP_MAC_CTX *ctx); +int EVP_MAC_CTX_get_params(EVP_MAC_CTX *ctx, OSSL_PARAM params[]); +int EVP_MAC_CTX_set_params(EVP_MAC_CTX *ctx, const OSSL_PARAM params[]); + +size_t EVP_MAC_CTX_get_mac_size(EVP_MAC_CTX *ctx); +size_t EVP_MAC_CTX_get_block_size(EVP_MAC_CTX *ctx); +unsigned char *EVP_Q_mac(OSSL_LIB_CTX *libctx, const char *name, const char *propq, + const char *subalg, const OSSL_PARAM *params, + const void *key, size_t keylen, + const unsigned char *data, size_t datalen, + unsigned char *out, size_t outsize, size_t *outlen); +int EVP_MAC_init(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen, + const OSSL_PARAM params[]); +int EVP_MAC_update(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen); +int EVP_MAC_final(EVP_MAC_CTX *ctx, + unsigned char *out, size_t *outl, size_t outsize); +int EVP_MAC_finalXOF(EVP_MAC_CTX *ctx, unsigned char *out, size_t outsize); +const OSSL_PARAM *EVP_MAC_gettable_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_gettable_ctx_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_settable_ctx_params(const EVP_MAC *mac); +const OSSL_PARAM *EVP_MAC_CTX_gettable_params(EVP_MAC_CTX *ctx); +const OSSL_PARAM *EVP_MAC_CTX_settable_params(EVP_MAC_CTX *ctx); + +void EVP_MAC_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_MAC *mac, void *arg), + void *arg); +int EVP_MAC_names_do_all(const EVP_MAC *mac, + void (*fn)(const char *name, void *data), + void *data); + +/* RAND stuff */ +EVP_RAND *EVP_RAND_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); +int EVP_RAND_up_ref(EVP_RAND *rand); +void EVP_RAND_free(EVP_RAND *rand); +const char *EVP_RAND_get0_name(const EVP_RAND *rand); +const char *EVP_RAND_get0_description(const EVP_RAND *md); +int EVP_RAND_is_a(const EVP_RAND *rand, const char *name); +const OSSL_PROVIDER *EVP_RAND_get0_provider(const EVP_RAND *rand); +int EVP_RAND_get_params(EVP_RAND *rand, OSSL_PARAM params[]); + +EVP_RAND_CTX *EVP_RAND_CTX_new(EVP_RAND *rand, EVP_RAND_CTX *parent); +int EVP_RAND_CTX_up_ref(EVP_RAND_CTX *ctx); +void EVP_RAND_CTX_free(EVP_RAND_CTX *ctx); +EVP_RAND *EVP_RAND_CTX_get0_rand(EVP_RAND_CTX *ctx); +int EVP_RAND_CTX_get_params(EVP_RAND_CTX *ctx, OSSL_PARAM params[]); +int EVP_RAND_CTX_set_params(EVP_RAND_CTX *ctx, const OSSL_PARAM params[]); +const OSSL_PARAM *EVP_RAND_gettable_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_gettable_ctx_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_settable_ctx_params(const EVP_RAND *rand); +const OSSL_PARAM *EVP_RAND_CTX_gettable_params(EVP_RAND_CTX *ctx); +const OSSL_PARAM *EVP_RAND_CTX_settable_params(EVP_RAND_CTX *ctx); + +void EVP_RAND_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_RAND *rand, void *arg), + void *arg); +int EVP_RAND_names_do_all(const EVP_RAND *rand, + void (*fn)(const char *name, void *data), + void *data); + +__owur int EVP_RAND_instantiate(EVP_RAND_CTX *ctx, unsigned int strength, + int prediction_resistance, + const unsigned char *pstr, size_t pstr_len, + const OSSL_PARAM params[]); +int EVP_RAND_uninstantiate(EVP_RAND_CTX *ctx); +__owur int EVP_RAND_generate(EVP_RAND_CTX *ctx, unsigned char *out, + size_t outlen, unsigned int strength, + int prediction_resistance, + const unsigned char *addin, size_t addin_len); +int EVP_RAND_reseed(EVP_RAND_CTX *ctx, int prediction_resistance, + const unsigned char *ent, size_t ent_len, + const unsigned char *addin, size_t addin_len); +__owur int EVP_RAND_nonce(EVP_RAND_CTX *ctx, unsigned char *out, size_t outlen); +__owur int EVP_RAND_enable_locking(EVP_RAND_CTX *ctx); + +int EVP_RAND_verify_zeroization(EVP_RAND_CTX *ctx); +unsigned int EVP_RAND_get_strength(EVP_RAND_CTX *ctx); +int EVP_RAND_get_state(EVP_RAND_CTX *ctx); + +# define EVP_RAND_STATE_UNINITIALISED 0 +# define EVP_RAND_STATE_READY 1 +# define EVP_RAND_STATE_ERROR 2 + +/* PKEY stuff */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_decrypt_old(unsigned char *dec_key, + const unsigned char *enc_key, + int enc_key_len, + EVP_PKEY *private_key); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_encrypt_old(unsigned char *enc_key, + const unsigned char *key, + int key_len, EVP_PKEY *pub_key); +# endif +int EVP_PKEY_is_a(const EVP_PKEY *pkey, const char *name); +int EVP_PKEY_type_names_do_all(const EVP_PKEY *pkey, + void (*fn)(const char *name, void *data), + void *data); int EVP_PKEY_type(int type); -int EVP_PKEY_id(const EVP_PKEY *pkey); -int EVP_PKEY_base_id(const EVP_PKEY *pkey); -int EVP_PKEY_bits(const EVP_PKEY *pkey); -int EVP_PKEY_security_bits(const EVP_PKEY *pkey); -int EVP_PKEY_size(const EVP_PKEY *pkey); +int EVP_PKEY_get_id(const EVP_PKEY *pkey); +# define EVP_PKEY_id EVP_PKEY_get_id +int EVP_PKEY_get_base_id(const EVP_PKEY *pkey); +# define EVP_PKEY_base_id EVP_PKEY_get_base_id +int EVP_PKEY_get_bits(const EVP_PKEY *pkey); +# define EVP_PKEY_bits EVP_PKEY_get_bits +int EVP_PKEY_get_security_bits(const EVP_PKEY *pkey); +# define EVP_PKEY_security_bits EVP_PKEY_get_security_bits +int EVP_PKEY_get_size(const EVP_PKEY *pkey); +# define EVP_PKEY_size EVP_PKEY_get_size +int EVP_PKEY_can_sign(const EVP_PKEY *pkey); int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); -int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type); -# ifndef OPENSSL_NO_ENGINE +int EVP_PKEY_set_type_by_keymgmt(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e); +OSSL_DEPRECATEDIN_3_0 ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); -# endif +# endif +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); +OSSL_DEPRECATEDIN_3_0 void *EVP_PKEY_get0(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); -# ifndef OPENSSL_NO_POLY1305 +# ifndef OPENSSL_NO_POLY1305 +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); -# endif -# ifndef OPENSSL_NO_SIPHASH +# endif +# ifndef OPENSSL_NO_SIPHASH +OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); -# endif +# endif -# ifndef OPENSSL_NO_RSA struct rsa_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); -struct rsa_st *EVP_PKEY_get0_RSA(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct rsa_st *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DSA + +# ifndef OPENSSL_NO_DSA struct dsa_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); -struct dsa_st *EVP_PKEY_get0_DSA(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct dsa_st *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_DH +# endif + +# ifndef OPENSSL_NO_DH struct dh_st; -int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); -struct dh_st *EVP_PKEY_get0_DH(EVP_PKEY *pkey); -struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); -# endif -# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); +OSSL_DEPRECATEDIN_3_0 const struct dh_st *EVP_PKEY_get0_DH(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); +# endif + +# ifndef OPENSSL_NO_EC struct ec_key_st; +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); -struct ec_key_st *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +const struct ec_key_st *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); -# endif +# endif +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ EVP_PKEY *EVP_PKEY_new(void); int EVP_PKEY_up_ref(EVP_PKEY *pkey); +EVP_PKEY *EVP_PKEY_dup(EVP_PKEY *pkey); void EVP_PKEY_free(EVP_PKEY *pkey); +const char *EVP_PKEY_get0_description(const EVP_PKEY *pkey); +const OSSL_PROVIDER *EVP_PKEY_get0_provider(const EVP_PKEY *key); EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, long length); -int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); +int i2d_PublicKey(const EVP_PKEY *a, unsigned char **pp); + +EVP_PKEY *d2i_PrivateKey_ex(int type, EVP_PKEY **a, const unsigned char **pp, + long length, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length); +EVP_PKEY *d2i_AutoPrivateKey_ex(EVP_PKEY **a, const unsigned char **pp, + long length, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, long length); -int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); +int i2d_PrivateKey(const EVP_PKEY *a, unsigned char **pp); + +int i2d_KeyParams(const EVP_PKEY *a, unsigned char **pp); +EVP_PKEY *d2i_KeyParams(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_KeyParams_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_KeyParams_bio(int type, EVP_PKEY **a, BIO *in); int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); -int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); +int EVP_PKEY_parameters_eq(const EVP_PKEY *a, const EVP_PKEY *b); +int EVP_PKEY_eq(const EVP_PKEY *a, const EVP_PKEY *b); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); +# endif int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); @@ -1063,14 +1427,43 @@ int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); +# ifndef OPENSSL_NO_STDIO +int EVP_PKEY_print_public_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_private_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_params_fp(FILE *fp, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +# endif int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); +int EVP_PKEY_get_default_digest_name(EVP_PKEY *pkey, + char *mdname, size_t mdname_sz); +int EVP_PKEY_digestsign_supports_digest(EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, + const char *name, const char *propq); -int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, - const unsigned char *pt, size_t ptlen); -size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *pkey, unsigned char **ppt); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * For backwards compatibility. Use EVP_PKEY_set1_encoded_public_key in + * preference + */ +# define EVP_PKEY_set1_tls_encodedpoint(pkey, pt, ptlen) \ + EVP_PKEY_set1_encoded_public_key((pkey), (pt), (ptlen)) +# endif -int EVP_CIPHER_type(const EVP_CIPHER *ctx); +int EVP_PKEY_set1_encoded_public_key(EVP_PKEY *pkey, + const unsigned char *pub, size_t publen); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* + * For backwards compatibility. Use EVP_PKEY_get1_encoded_public_key in + * preference + */ +# define EVP_PKEY_get1_tls_encodedpoint(pkey, ppt) \ + EVP_PKEY_get1_encoded_public_key((pkey), (ppt)) +# endif + +size_t EVP_PKEY_get1_encoded_public_key(EVP_PKEY *pkey, unsigned char **ppub); /* calls methods */ int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); @@ -1084,6 +1477,10 @@ int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); +int PKCS5_PBE_keyivgen_ex(EVP_CIPHER_CTX *cctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de, OSSL_LIB_CTX *libctx, + const char *propq); int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, const unsigned char *salt, int saltlen, int iter, int keylen, unsigned char *out); @@ -1093,16 +1490,29 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); +int PKCS5_v2_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); #ifndef OPENSSL_NO_SCRYPT int EVP_PBE_scrypt(const char *pass, size_t passlen, const unsigned char *salt, size_t saltlen, uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, unsigned char *key, size_t keylen); +int EVP_PBE_scrypt_ex(const char *pass, size_t passlen, + const unsigned char *salt, size_t saltlen, + uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, + unsigned char *key, size_t keylen, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *c, const EVP_MD *md, int en_de); +int PKCS5_v2_scrypt_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *c, const EVP_MD *md, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); #endif void PKCS5_PBE_add(void); @@ -1110,6 +1520,10 @@ void PKCS5_PBE_add(void); int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); +int EVP_PBE_CipherInit_ex(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, + ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); + /* PBE type */ /* Can appear as the outermost AlgorithmIdentifier */ @@ -1125,6 +1539,8 @@ int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, EVP_PBE_KEYGEN *keygen); int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, EVP_PBE_KEYGEN **pkeygen); +int EVP_PBE_find_ex(int type, int pbe_nid, int *pcnid, int *pmnid, + EVP_PBE_KEYGEN **pkeygen, EVP_PBE_KEYGEN_EX **pkeygen_ex); void EVP_PBE_cleanup(void); int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); @@ -1141,6 +1557,7 @@ int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); # define ASN1_PKEY_CTRL_SET1_TLS_ENCPT 0x9 # define ASN1_PKEY_CTRL_GET1_TLS_ENCPT 0xa +# define ASN1_PKEY_CTRL_CMS_IS_RI_TYPE_SUPPORTED 0xb int EVP_PKEY_asn1_get_count(void); const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); @@ -1163,7 +1580,7 @@ void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, int (*pub_decode) (EVP_PKEY *pk, - X509_PUBKEY *pub), + const X509_PUBKEY *pub), int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk), int (*pub_cmp) (const EVP_PKEY *a, @@ -1207,13 +1624,13 @@ void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, - void *asn, - X509_ALGOR *a, - ASN1_BIT_STRING *sig, + const void *data, + const X509_ALGOR *a, + const ASN1_BIT_STRING *sig, EVP_PKEY *pkey), int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, - void *asn, + const void *data, X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig)); @@ -1254,17 +1671,31 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, int (*pkey_security_bits) (const EVP_PKEY *pk)); +int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); + +int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, const void *id, int len); +int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id); +int EVP_PKEY_CTX_get1_id_len(EVP_PKEY_CTX *ctx, size_t *id_len); + +int EVP_PKEY_CTX_set_kem_op(EVP_PKEY_CTX *ctx, const char *op); + +const char *EVP_PKEY_get0_type_name(const EVP_PKEY *key); + # define EVP_PKEY_OP_UNDEFINED 0 # define EVP_PKEY_OP_PARAMGEN (1<<1) # define EVP_PKEY_OP_KEYGEN (1<<2) -# define EVP_PKEY_OP_SIGN (1<<3) -# define EVP_PKEY_OP_VERIFY (1<<4) -# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) -# define EVP_PKEY_OP_SIGNCTX (1<<6) -# define EVP_PKEY_OP_VERIFYCTX (1<<7) -# define EVP_PKEY_OP_ENCRYPT (1<<8) -# define EVP_PKEY_OP_DECRYPT (1<<9) -# define EVP_PKEY_OP_DERIVE (1<<10) +# define EVP_PKEY_OP_FROMDATA (1<<3) +# define EVP_PKEY_OP_SIGN (1<<4) +# define EVP_PKEY_OP_VERIFY (1<<5) +# define EVP_PKEY_OP_VERIFYRECOVER (1<<6) +# define EVP_PKEY_OP_SIGNCTX (1<<7) +# define EVP_PKEY_OP_VERIFYCTX (1<<8) +# define EVP_PKEY_OP_ENCRYPT (1<<9) +# define EVP_PKEY_OP_DECRYPT (1<<10) +# define EVP_PKEY_OP_DERIVE (1<<11) +# define EVP_PKEY_OP_ENCAPSULATE (1<<12) +# define EVP_PKEY_OP_DECAPSULATE (1<<13) # define EVP_PKEY_OP_TYPE_SIG \ (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ @@ -1277,44 +1708,32 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, (EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT | EVP_PKEY_OP_DERIVE) # define EVP_PKEY_OP_TYPE_GEN \ - (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) + (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) -# define EVP_PKEY_CTX_set_signature_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_MD, 0, (void *)(md)) -# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ - EVP_PKEY_CTRL_GET_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set_mac_key(ctx, key, len) \ - EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)(key)) +int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, const unsigned char *key, + int keylen); # define EVP_PKEY_CTRL_MD 1 # define EVP_PKEY_CTRL_PEER_KEY 2 - -# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 -# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 - -# define EVP_PKEY_CTRL_PKCS7_SIGN 5 - # define EVP_PKEY_CTRL_SET_MAC_KEY 6 - # define EVP_PKEY_CTRL_DIGESTINIT 7 - /* Used by GOST key encryption in TLS */ # define EVP_PKEY_CTRL_SET_IV 8 - -# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 -# define EVP_PKEY_CTRL_CMS_DECRYPT 10 -# define EVP_PKEY_CTRL_CMS_SIGN 11 - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 +# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 +# define EVP_PKEY_CTRL_PKCS7_SIGN 5 +# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 +# define EVP_PKEY_CTRL_CMS_DECRYPT 10 +# define EVP_PKEY_CTRL_CMS_SIGN 11 +# endif # define EVP_PKEY_CTRL_CIPHER 12 - # define EVP_PKEY_CTRL_GET_MD 13 - # define EVP_PKEY_CTRL_SET_DIGEST_SIZE 14 +# define EVP_PKEY_CTRL_SET1_ID 15 +# define EVP_PKEY_CTRL_GET1_ID 16 +# define EVP_PKEY_CTRL_GET1_ID_LEN 17 # define EVP_PKEY_ALG_CTRL 0x1000 @@ -1323,23 +1742,53 @@ void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, * Method handles all operations: don't assume any digest related defaults. */ # define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); +OSSL_DEPRECATEDIN_3_0 EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, + const EVP_PKEY_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, + const EVP_PKEY_METHOD *src); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); +OSSL_DEPRECATEDIN_3_0 size_t EVP_PKEY_meth_get_count(void); +OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); +# endif -const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); -EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); -void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, - const EVP_PKEY_METHOD *meth); -void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); -void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); -int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); -size_t EVP_PKEY_meth_get_count(void); -const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); +EVP_KEYMGMT *EVP_KEYMGMT_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_KEYMGMT_up_ref(EVP_KEYMGMT *keymgmt); +void EVP_KEYMGMT_free(EVP_KEYMGMT *keymgmt); +const OSSL_PROVIDER *EVP_KEYMGMT_get0_provider(const EVP_KEYMGMT *keymgmt); +const char *EVP_KEYMGMT_get0_name(const EVP_KEYMGMT *keymgmt); +const char *EVP_KEYMGMT_get0_description(const EVP_KEYMGMT *keymgmt); +int EVP_KEYMGMT_is_a(const EVP_KEYMGMT *keymgmt, const char *name); +void EVP_KEYMGMT_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEYMGMT *keymgmt, void *arg), + void *arg); +int EVP_KEYMGMT_names_do_all(const EVP_KEYMGMT *keymgmt, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_KEYMGMT_gettable_params(const EVP_KEYMGMT *keymgmt); +const OSSL_PARAM *EVP_KEYMGMT_settable_params(const EVP_KEYMGMT *keymgmt); +const OSSL_PARAM *EVP_KEYMGMT_gen_settable_params(const EVP_KEYMGMT *keymgmt); EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); -EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_from_name(OSSL_LIB_CTX *libctx, + const char *name, + const char *propquery); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_from_pkey(OSSL_LIB_CTX *libctx, + EVP_PKEY *pkey, const char *propquery); +EVP_PKEY_CTX *EVP_PKEY_CTX_dup(const EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_is_a(EVP_PKEY_CTX *ctx, const char *keytype); +int EVP_PKEY_CTX_get_params(EVP_PKEY_CTX *ctx, OSSL_PARAM *params); +const OSSL_PARAM *EVP_PKEY_CTX_gettable_params(const EVP_PKEY_CTX *ctx); +int EVP_PKEY_CTX_set_params(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params); +const OSSL_PARAM *EVP_PKEY_CTX_settable_params(const EVP_PKEY_CTX *ctx); int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, int cmd, int p1, void *p2); int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, @@ -1357,9 +1806,16 @@ void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key, int keylen); +EVP_PKEY *EVP_PKEY_new_raw_private_key_ex(OSSL_LIB_CTX *libctx, + const char *keytype, + const char *propq, + const unsigned char *priv, size_t len); EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e, const unsigned char *priv, size_t len); +EVP_PKEY *EVP_PKEY_new_raw_public_key_ex(OSSL_LIB_CTX *libctx, + const char *keytype, const char *propq, + const unsigned char *pub, size_t len); EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e, const unsigned char *pub, size_t len); @@ -1368,11 +1824,14 @@ int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, size_t *len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv, size_t len, const EVP_CIPHER *cipher); +# endif void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); -void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); +void *EVP_PKEY_CTX_get_data(const EVP_PKEY_CTX *ctx); EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); @@ -1380,285 +1839,333 @@ EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); +void EVP_SIGNATURE_free(EVP_SIGNATURE *signature); +int EVP_SIGNATURE_up_ref(EVP_SIGNATURE *signature); +OSSL_PROVIDER *EVP_SIGNATURE_get0_provider(const EVP_SIGNATURE *signature); +EVP_SIGNATURE *EVP_SIGNATURE_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_SIGNATURE_is_a(const EVP_SIGNATURE *signature, const char *name); +const char *EVP_SIGNATURE_get0_name(const EVP_SIGNATURE *signature); +const char *EVP_SIGNATURE_get0_description(const EVP_SIGNATURE *signature); +void EVP_SIGNATURE_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_SIGNATURE *signature, + void *data), + void *data); +int EVP_SIGNATURE_names_do_all(const EVP_SIGNATURE *signature, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_SIGNATURE_gettable_ctx_params(const EVP_SIGNATURE *sig); +const OSSL_PARAM *EVP_SIGNATURE_settable_ctx_params(const EVP_SIGNATURE *sig); + +void EVP_ASYM_CIPHER_free(EVP_ASYM_CIPHER *cipher); +int EVP_ASYM_CIPHER_up_ref(EVP_ASYM_CIPHER *cipher); +OSSL_PROVIDER *EVP_ASYM_CIPHER_get0_provider(const EVP_ASYM_CIPHER *cipher); +EVP_ASYM_CIPHER *EVP_ASYM_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_ASYM_CIPHER_is_a(const EVP_ASYM_CIPHER *cipher, const char *name); +const char *EVP_ASYM_CIPHER_get0_name(const EVP_ASYM_CIPHER *cipher); +const char *EVP_ASYM_CIPHER_get0_description(const EVP_ASYM_CIPHER *cipher); +void EVP_ASYM_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_ASYM_CIPHER *cipher, + void *arg), + void *arg); +int EVP_ASYM_CIPHER_names_do_all(const EVP_ASYM_CIPHER *cipher, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_ASYM_CIPHER_gettable_ctx_params(const EVP_ASYM_CIPHER *ciph); +const OSSL_PARAM *EVP_ASYM_CIPHER_settable_ctx_params(const EVP_ASYM_CIPHER *ciph); + +void EVP_KEM_free(EVP_KEM *wrap); +int EVP_KEM_up_ref(EVP_KEM *wrap); +OSSL_PROVIDER *EVP_KEM_get0_provider(const EVP_KEM *wrap); +EVP_KEM *EVP_KEM_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +int EVP_KEM_is_a(const EVP_KEM *wrap, const char *name); +const char *EVP_KEM_get0_name(const EVP_KEM *wrap); +const char *EVP_KEM_get0_description(const EVP_KEM *wrap); +void EVP_KEM_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEM *wrap, void *arg), void *arg); +int EVP_KEM_names_do_all(const EVP_KEM *wrap, + void (*fn)(const char *name, void *data), void *data); +const OSSL_PARAM *EVP_KEM_gettable_ctx_params(const EVP_KEM *kem); +const OSSL_PARAM *EVP_KEM_settable_ctx_params(const EVP_KEM *kem); + int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_sign_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, const unsigned char *tbs, size_t tbslen); int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs, size_t tbslen); int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_recover_init_ex(EVP_PKEY_CTX *ctx, + const OSSL_PARAM params[]); int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, unsigned char *rout, size_t *routlen, const unsigned char *sig, size_t siglen); int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_encrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen); int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_decrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen); int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_derive_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_derive_set_peer_ex(EVP_PKEY_CTX *ctx, EVP_PKEY *peer, + int validate_peer); int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); +int EVP_PKEY_encapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_encapsulate(EVP_PKEY_CTX *ctx, + unsigned char *wrappedkey, size_t *wrappedkeylen, + unsigned char *genkey, size_t *genkeylen); +int EVP_PKEY_decapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); +int EVP_PKEY_decapsulate(EVP_PKEY_CTX *ctx, + unsigned char *unwrapped, size_t *unwrappedlen, + const unsigned char *wrapped, size_t wrappedlen); + typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); +int EVP_PKEY_fromdata_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_fromdata(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey, int selection, + OSSL_PARAM param[]); +const OSSL_PARAM *EVP_PKEY_fromdata_settable(EVP_PKEY_CTX *ctx, int selection); + +int EVP_PKEY_todata(const EVP_PKEY *pkey, int selection, OSSL_PARAM **params); +int EVP_PKEY_export(const EVP_PKEY *pkey, int selection, + OSSL_CALLBACK *export_cb, void *export_cbarg); + +const OSSL_PARAM *EVP_PKEY_gettable_params(const EVP_PKEY *pkey); +int EVP_PKEY_get_params(const EVP_PKEY *pkey, OSSL_PARAM params[]); +int EVP_PKEY_get_int_param(const EVP_PKEY *pkey, const char *key_name, + int *out); +int EVP_PKEY_get_size_t_param(const EVP_PKEY *pkey, const char *key_name, + size_t *out); +int EVP_PKEY_get_bn_param(const EVP_PKEY *pkey, const char *key_name, + BIGNUM **bn); +int EVP_PKEY_get_utf8_string_param(const EVP_PKEY *pkey, const char *key_name, + char *str, size_t max_buf_sz, size_t *out_sz); +int EVP_PKEY_get_octet_string_param(const EVP_PKEY *pkey, const char *key_name, + unsigned char *buf, size_t max_buf_sz, + size_t *out_sz); + +const OSSL_PARAM *EVP_PKEY_settable_params(const EVP_PKEY *pkey); +int EVP_PKEY_set_params(EVP_PKEY *pkey, OSSL_PARAM params[]); +int EVP_PKEY_set_int_param(EVP_PKEY *pkey, const char *key_name, int in); +int EVP_PKEY_set_size_t_param(EVP_PKEY *pkey, const char *key_name, size_t in); +int EVP_PKEY_set_bn_param(EVP_PKEY *pkey, const char *key_name, + const BIGNUM *bn); +int EVP_PKEY_set_utf8_string_param(EVP_PKEY *pkey, const char *key_name, + const char *str); +int EVP_PKEY_set_octet_string_param(EVP_PKEY *pkey, const char *key_name, + const unsigned char *buf, size_t bsize); + +int EVP_PKEY_get_ec_point_conv_form(const EVP_PKEY *pkey); +int EVP_PKEY_get_field_type(const EVP_PKEY *pkey); + +EVP_PKEY *EVP_PKEY_Q_keygen(OSSL_LIB_CTX *libctx, const char *propq, + const char *type, ...); int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_generate(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_check(EVP_PKEY_CTX *ctx); int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_public_check_quick(EVP_PKEY_CTX *ctx); int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_param_check_quick(EVP_PKEY_CTX *ctx); +int EVP_PKEY_private_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_pairwise_check(EVP_PKEY_CTX *ctx); + +# define EVP_PKEY_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EVP_PKEY, l, p, newf, dupf, freef) +int EVP_PKEY_set_ex_data(EVP_PKEY *key, int idx, void *arg); +void *EVP_PKEY_get_ex_data(const EVP_PKEY *key, int idx); void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); - -void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, - int (*init) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, - int (*copy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, - void (*cleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, - int (*paramgen_init) (EVP_PKEY_CTX *ctx), - int (*paramgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, - int (*keygen_init) (EVP_PKEY_CTX *ctx), - int (*keygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, - int (*sign_init) (EVP_PKEY_CTX *ctx), - int (*sign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, - int (*verify_init) (EVP_PKEY_CTX *ctx), - int (*verify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, - int (*verify_recover_init) (EVP_PKEY_CTX - *ctx), - int (*verify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, - int (*signctx_init) (EVP_PKEY_CTX *ctx, +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, + int (*init) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_copy + (EVP_PKEY_METHOD *pmeth, int (*copy) (EVP_PKEY_CTX *dst, + const EVP_PKEY_CTX *src)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_cleanup + (EVP_PKEY_METHOD *pmeth, void (*cleanup) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_paramgen + (EVP_PKEY_METHOD *pmeth, int (*paramgen_init) (EVP_PKEY_CTX *ctx), + int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_keygen + (EVP_PKEY_METHOD *pmeth, int (*keygen_init) (EVP_PKEY_CTX *ctx), + int (*keygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_sign + (EVP_PKEY_METHOD *pmeth, int (*sign_init) (EVP_PKEY_CTX *ctx), + int (*sign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verify + (EVP_PKEY_METHOD *pmeth, int (*verify_init) (EVP_PKEY_CTX *ctx), + int (*verify) (EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verify_recover + (EVP_PKEY_METHOD *pmeth, int (*verify_recover_init) (EVP_PKEY_CTX *ctx), + int (*verify_recover) (EVP_PKEY_CTX *ctx, unsigned char *sig, + size_t *siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_signctx + (EVP_PKEY_METHOD *pmeth, int (*signctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*signctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verifyctx + (EVP_PKEY_METHOD *pmeth, int (*verifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), - int (*signctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, - int (*verifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (*verifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, + int (*verifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_encrypt + (EVP_PKEY_METHOD *pmeth, int (*encrypt_init) (EVP_PKEY_CTX *ctx), + int (*encryptfn) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_decrypt + (EVP_PKEY_METHOD *pmeth, int (*decrypt_init) (EVP_PKEY_CTX *ctx), + int (*decrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_derive + (EVP_PKEY_METHOD *pmeth, int (*derive_init) (EVP_PKEY_CTX *ctx), + int (*derive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_ctrl + (EVP_PKEY_METHOD *pmeth, int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (*ctrl_str) (EVP_PKEY_CTX *ctx, const char *type, const char *value)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestsign + (EVP_PKEY_METHOD *pmeth, + int (*digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestverify + (EVP_PKEY_METHOD *pmeth, + int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_public_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_param_check + (EVP_PKEY_METHOD *pmeth, int (*check) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digest_custom + (EVP_PKEY_METHOD *pmeth, int (*digest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_init + (const EVP_PKEY_METHOD *pmeth, int (**pinit) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_copy + (const EVP_PKEY_METHOD *pmeth, int (**pcopy) (EVP_PKEY_CTX *dst, + const EVP_PKEY_CTX *src)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_cleanup + (const EVP_PKEY_METHOD *pmeth, void (**pcleanup) (EVP_PKEY_CTX *ctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_paramgen + (const EVP_PKEY_METHOD *pmeth, int (**pparamgen_init) (EVP_PKEY_CTX *ctx), + int (**pparamgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_keygen + (const EVP_PKEY_METHOD *pmeth, int (**pkeygen_init) (EVP_PKEY_CTX *ctx), + int (**pkeygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_sign + (const EVP_PKEY_METHOD *pmeth, int (**psign_init) (EVP_PKEY_CTX *ctx), + int (**psign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify + (const EVP_PKEY_METHOD *pmeth, int (**pverify_init) (EVP_PKEY_CTX *ctx), + int (**pverify) (EVP_PKEY_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify_recover + (const EVP_PKEY_METHOD *pmeth, + int (**pverify_recover_init) (EVP_PKEY_CTX *ctx), + int (**pverify_recover) (EVP_PKEY_CTX *ctx, unsigned char *sig, + size_t *siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_signctx + (const EVP_PKEY_METHOD *pmeth, + int (**psignctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), + int (**psignctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verifyctx + (const EVP_PKEY_METHOD *pmeth, + int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), + int (**pverifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, + int siglen, EVP_MD_CTX *mctx)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_encrypt + (const EVP_PKEY_METHOD *pmeth, int (**pencrypt_init) (EVP_PKEY_CTX *ctx), + int (**pencryptfn) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_decrypt + (const EVP_PKEY_METHOD *pmeth, int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), + int (**pdecrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_derive + (const EVP_PKEY_METHOD *pmeth, int (**pderive_init) (EVP_PKEY_CTX *ctx), + int (**pderive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_ctrl + (const EVP_PKEY_METHOD *pmeth, + int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, void *p2), + int (**pctrl_str) (EVP_PKEY_CTX *ctx, const char *type, + const char *value)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestsign + (const EVP_PKEY_METHOD *pmeth, + int (**digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestverify + (const EVP_PKEY_METHOD *pmeth, + int (**digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, + size_t tbslen)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_public_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_param_check + (const EVP_PKEY_METHOD *pmeth, int (**pcheck) (EVP_PKEY *pkey)); +OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digest_custom + (const EVP_PKEY_METHOD *pmeth, + int (**pdigest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)); +# endif -void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, - int (*encrypt_init) (EVP_PKEY_CTX *ctx), - int (*encryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); +void EVP_KEYEXCH_free(EVP_KEYEXCH *exchange); +int EVP_KEYEXCH_up_ref(EVP_KEYEXCH *exchange); +EVP_KEYEXCH *EVP_KEYEXCH_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, + const char *properties); +OSSL_PROVIDER *EVP_KEYEXCH_get0_provider(const EVP_KEYEXCH *exchange); +int EVP_KEYEXCH_is_a(const EVP_KEYEXCH *keyexch, const char *name); +const char *EVP_KEYEXCH_get0_name(const EVP_KEYEXCH *keyexch); +const char *EVP_KEYEXCH_get0_description(const EVP_KEYEXCH *keyexch); +void EVP_KEYEXCH_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KEYEXCH *keyexch, void *data), + void *data); +int EVP_KEYEXCH_names_do_all(const EVP_KEYEXCH *keyexch, + void (*fn)(const char *name, void *data), + void *data); +const OSSL_PARAM *EVP_KEYEXCH_gettable_ctx_params(const EVP_KEYEXCH *keyexch); +const OSSL_PARAM *EVP_KEYEXCH_settable_ctx_params(const EVP_KEYEXCH *keyexch); -void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, - int (*decrypt_init) (EVP_PKEY_CTX *ctx), - int (*decrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, - int (*derive_init) (EVP_PKEY_CTX *ctx), - int (*derive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, - int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (*ctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_PKEY_meth_set_digestsign(EVP_PKEY_METHOD *pmeth, - int (*digestsign) (EVP_MD_CTX *ctx, - unsigned char *sig, - size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_digestverify(EVP_PKEY_METHOD *pmeth, - int (*digestverify) (EVP_MD_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, - int (*check) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth, - int (*digest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth, - int (**pinit) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth, - int (**pcopy) (EVP_PKEY_CTX *dst, - EVP_PKEY_CTX *src)); - -void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth, - void (**pcleanup) (EVP_PKEY_CTX *ctx)); - -void EVP_PKEY_meth_get_paramgen(const EVP_PKEY_METHOD *pmeth, - int (**pparamgen_init) (EVP_PKEY_CTX *ctx), - int (**pparamgen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_keygen(const EVP_PKEY_METHOD *pmeth, - int (**pkeygen_init) (EVP_PKEY_CTX *ctx), - int (**pkeygen) (EVP_PKEY_CTX *ctx, - EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_sign(const EVP_PKEY_METHOD *pmeth, - int (**psign_init) (EVP_PKEY_CTX *ctx), - int (**psign) (EVP_PKEY_CTX *ctx, - unsigned char *sig, size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_verify(const EVP_PKEY_METHOD *pmeth, - int (**pverify_init) (EVP_PKEY_CTX *ctx), - int (**pverify) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_verify_recover(const EVP_PKEY_METHOD *pmeth, - int (**pverify_recover_init) (EVP_PKEY_CTX - *ctx), - int (**pverify_recover) (EVP_PKEY_CTX - *ctx, - unsigned char - *sig, - size_t *siglen, - const unsigned - char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_signctx(const EVP_PKEY_METHOD *pmeth, - int (**psignctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (**psignctx) (EVP_PKEY_CTX *ctx, - unsigned char *sig, - size_t *siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_verifyctx(const EVP_PKEY_METHOD *pmeth, - int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx), - int (**pverifyctx) (EVP_PKEY_CTX *ctx, - const unsigned char *sig, - int siglen, - EVP_MD_CTX *mctx)); - -void EVP_PKEY_meth_get_encrypt(const EVP_PKEY_METHOD *pmeth, - int (**pencrypt_init) (EVP_PKEY_CTX *ctx), - int (**pencryptfn) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_get_decrypt(const EVP_PKEY_METHOD *pmeth, - int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), - int (**pdecrypt) (EVP_PKEY_CTX *ctx, - unsigned char *out, - size_t *outlen, - const unsigned char *in, - size_t inlen)); - -void EVP_PKEY_meth_get_derive(const EVP_PKEY_METHOD *pmeth, - int (**pderive_init) (EVP_PKEY_CTX *ctx), - int (**pderive) (EVP_PKEY_CTX *ctx, - unsigned char *key, - size_t *keylen)); - -void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth, - int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, - void *p2), - int (**pctrl_str) (EVP_PKEY_CTX *ctx, - const char *type, - const char *value)); - -void EVP_PKEY_meth_get_digestsign(EVP_PKEY_METHOD *pmeth, - int (**digestsign) (EVP_MD_CTX *ctx, - unsigned char *sig, - size_t *siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_digestverify(EVP_PKEY_METHOD *pmeth, - int (**digestverify) (EVP_MD_CTX *ctx, - const unsigned char *sig, - size_t siglen, - const unsigned char *tbs, - size_t tbslen)); - -void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth, - int (**pcheck) (EVP_PKEY *pkey)); - -void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth, - int (**pdigest_custom) (EVP_PKEY_CTX *ctx, - EVP_MD_CTX *mctx)); void EVP_add_alg_module(void); +int EVP_PKEY_CTX_set_group_name(EVP_PKEY_CTX *ctx, const char *name); +int EVP_PKEY_CTX_get_group_name(EVP_PKEY_CTX *ctx, char *name, size_t namelen); +int EVP_PKEY_get_group_name(const EVP_PKEY *pkey, char *name, size_t name_sz, + size_t *gname_len); + +OSSL_LIB_CTX *EVP_PKEY_CTX_get0_libctx(EVP_PKEY_CTX *ctx); +const char *EVP_PKEY_CTX_get0_propq(const EVP_PKEY_CTX *ctx); +const OSSL_PROVIDER *EVP_PKEY_CTX_get0_provider(const EVP_PKEY_CTX *ctx); # ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/evperr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/evperr.h index b4ea90ae..a5053f6c 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/evperr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/evperr.h @@ -2,190 +2,117 @@ * Generated by util/mkerr.pl DO NOT EDIT * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_EVPERR_H -# define HEADER_EVPERR_H +#ifndef OPENSSL_EVPERR_H +# define OPENSSL_EVPERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_EVP_strings(void); -/* - * EVP function codes. - */ -# define EVP_F_AESNI_INIT_KEY 165 -# define EVP_F_AESNI_XTS_INIT_KEY 207 -# define EVP_F_AES_GCM_CTRL 196 -# define EVP_F_AES_INIT_KEY 133 -# define EVP_F_AES_OCB_CIPHER 169 -# define EVP_F_AES_T4_INIT_KEY 178 -# define EVP_F_AES_T4_XTS_INIT_KEY 208 -# define EVP_F_AES_WRAP_CIPHER 170 -# define EVP_F_AES_XTS_INIT_KEY 209 -# define EVP_F_ALG_MODULE_INIT 177 -# define EVP_F_ARIA_CCM_INIT_KEY 175 -# define EVP_F_ARIA_GCM_CTRL 197 -# define EVP_F_ARIA_GCM_INIT_KEY 176 -# define EVP_F_ARIA_INIT_KEY 185 -# define EVP_F_B64_NEW 198 -# define EVP_F_CAMELLIA_INIT_KEY 159 -# define EVP_F_CHACHA20_POLY1305_CTRL 182 -# define EVP_F_CMLL_T4_INIT_KEY 179 -# define EVP_F_DES_EDE3_WRAP_CIPHER 171 -# define EVP_F_DO_SIGVER_INIT 161 -# define EVP_F_ENC_NEW 199 -# define EVP_F_EVP_CIPHERINIT_EX 123 -# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 204 -# define EVP_F_EVP_CIPHER_CTX_COPY 163 -# define EVP_F_EVP_CIPHER_CTX_CTRL 124 -# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 -# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 205 -# define EVP_F_EVP_DECRYPTFINAL_EX 101 -# define EVP_F_EVP_DECRYPTUPDATE 166 -# define EVP_F_EVP_DIGESTFINALXOF 174 -# define EVP_F_EVP_DIGESTINIT_EX 128 -# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 219 -# define EVP_F_EVP_ENCRYPTFINAL_EX 127 -# define EVP_F_EVP_ENCRYPTUPDATE 167 -# define EVP_F_EVP_MD_CTX_COPY_EX 110 -# define EVP_F_EVP_MD_SIZE 162 -# define EVP_F_EVP_OPENINIT 102 -# define EVP_F_EVP_PBE_ALG_ADD 115 -# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 -# define EVP_F_EVP_PBE_CIPHERINIT 116 -# define EVP_F_EVP_PBE_SCRYPT 181 -# define EVP_F_EVP_PKCS82PKEY 111 -# define EVP_F_EVP_PKEY2PKCS8 113 -# define EVP_F_EVP_PKEY_ASN1_ADD0 188 -# define EVP_F_EVP_PKEY_CHECK 186 -# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 -# define EVP_F_EVP_PKEY_CTX_CTRL 137 -# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 -# define EVP_F_EVP_PKEY_CTX_DUP 156 -# define EVP_F_EVP_PKEY_CTX_MD 168 -# define EVP_F_EVP_PKEY_DECRYPT 104 -# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 -# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 -# define EVP_F_EVP_PKEY_DERIVE 153 -# define EVP_F_EVP_PKEY_DERIVE_INIT 154 -# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 -# define EVP_F_EVP_PKEY_ENCRYPT 105 -# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 -# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 -# define EVP_F_EVP_PKEY_GET0_DH 119 -# define EVP_F_EVP_PKEY_GET0_DSA 120 -# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 -# define EVP_F_EVP_PKEY_GET0_HMAC 183 -# define EVP_F_EVP_PKEY_GET0_POLY1305 184 -# define EVP_F_EVP_PKEY_GET0_RSA 121 -# define EVP_F_EVP_PKEY_GET0_SIPHASH 172 -# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 202 -# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 203 -# define EVP_F_EVP_PKEY_KEYGEN 146 -# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 -# define EVP_F_EVP_PKEY_METH_ADD0 194 -# define EVP_F_EVP_PKEY_METH_NEW 195 -# define EVP_F_EVP_PKEY_NEW 106 -# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 193 -# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 191 -# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 192 -# define EVP_F_EVP_PKEY_PARAMGEN 148 -# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 -# define EVP_F_EVP_PKEY_PARAM_CHECK 189 -# define EVP_F_EVP_PKEY_PUBLIC_CHECK 190 -# define EVP_F_EVP_PKEY_SET1_ENGINE 187 -# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 206 -# define EVP_F_EVP_PKEY_SIGN 140 -# define EVP_F_EVP_PKEY_SIGN_INIT 141 -# define EVP_F_EVP_PKEY_VERIFY 142 -# define EVP_F_EVP_PKEY_VERIFY_INIT 143 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 -# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 -# define EVP_F_EVP_SIGNFINAL 107 -# define EVP_F_EVP_VERIFYFINAL 108 -# define EVP_F_INT_CTX_NEW 157 -# define EVP_F_OK_NEW 200 -# define EVP_F_PKCS5_PBE_KEYIVGEN 117 -# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 -# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 -# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 180 -# define EVP_F_PKEY_SET_TYPE 158 -# define EVP_F_RC2_MAGIC_TO_METH 109 -# define EVP_F_RC5_CTRL 125 -# define EVP_F_R_32_12_16_INIT_KEY 242 -# define EVP_F_S390X_AES_GCM_CTRL 201 -# define EVP_F_UPDATE 173 /* * EVP reason codes. */ # define EVP_R_AES_KEY_SETUP_FAILED 143 # define EVP_R_ARIA_KEY_SETUP_FAILED 176 +# define EVP_R_BAD_ALGORITHM_NAME 200 # define EVP_R_BAD_DECRYPT 100 # define EVP_R_BAD_KEY_LENGTH 195 # define EVP_R_BUFFER_TOO_SMALL 155 +# define EVP_R_CACHE_CONSTANTS_FAILED 225 # define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 +# define EVP_R_CANNOT_GET_PARAMETERS 197 +# define EVP_R_CANNOT_SET_PARAMETERS 198 +# define EVP_R_CIPHER_NOT_GCM_MODE 184 # define EVP_R_CIPHER_PARAMETER_ERROR 122 # define EVP_R_COMMAND_NOT_SUPPORTED 147 +# define EVP_R_CONFLICTING_ALGORITHM_NAME 201 # define EVP_R_COPY_ERROR 173 # define EVP_R_CTRL_NOT_IMPLEMENTED 132 # define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 # define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 # define EVP_R_DECODE_ERROR 114 +# define EVP_R_DEFAULT_QUERY_PARSE_ERROR 210 # define EVP_R_DIFFERENT_KEY_TYPES 101 # define EVP_R_DIFFERENT_PARAMETERS 153 # define EVP_R_ERROR_LOADING_SECTION 165 -# define EVP_R_ERROR_SETTING_FIPS_MODE 166 # define EVP_R_EXPECTING_AN_HMAC_KEY 174 # define EVP_R_EXPECTING_AN_RSA_KEY 127 # define EVP_R_EXPECTING_A_DH_KEY 128 # define EVP_R_EXPECTING_A_DSA_KEY 129 +# define EVP_R_EXPECTING_A_ECX_KEY 219 # define EVP_R_EXPECTING_A_EC_KEY 142 # define EVP_R_EXPECTING_A_POLY1305_KEY 164 # define EVP_R_EXPECTING_A_SIPHASH_KEY 175 -# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 +# define EVP_R_FINAL_ERROR 188 +# define EVP_R_GENERATE_ERROR 214 # define EVP_R_GET_RAW_KEY_FAILED 182 # define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 +# define EVP_R_INACCESSIBLE_DOMAIN_PARAMETERS 204 +# define EVP_R_INACCESSIBLE_KEY 203 # define EVP_R_INITIALIZATION_ERROR 134 # define EVP_R_INPUT_NOT_INITIALIZED 111 +# define EVP_R_INVALID_CUSTOM_LENGTH 185 # define EVP_R_INVALID_DIGEST 152 -# define EVP_R_INVALID_FIPS_MODE 168 # define EVP_R_INVALID_IV_LENGTH 194 # define EVP_R_INVALID_KEY 163 # define EVP_R_INVALID_KEY_LENGTH 130 +# define EVP_R_INVALID_LENGTH 221 +# define EVP_R_INVALID_NULL_ALGORITHM 218 # define EVP_R_INVALID_OPERATION 148 -# define EVP_R_KEYGEN_FAILURE 120 +# define EVP_R_INVALID_PROVIDER_FUNCTIONS 193 +# define EVP_R_INVALID_SALT_LENGTH 186 +# define EVP_R_INVALID_SECRET_LENGTH 223 +# define EVP_R_INVALID_SEED_LENGTH 220 +# define EVP_R_INVALID_VALUE 222 +# define EVP_R_KEYMGMT_EXPORT_FAILURE 205 # define EVP_R_KEY_SETUP_FAILED 180 +# define EVP_R_LOCKING_NOT_SUPPORTED 213 # define EVP_R_MEMORY_LIMIT_EXCEEDED 172 # define EVP_R_MESSAGE_DIGEST_IS_NULL 159 # define EVP_R_METHOD_NOT_SUPPORTED 144 # define EVP_R_MISSING_PARAMETERS 103 +# define EVP_R_NOT_ABLE_TO_COPY_CTX 190 # define EVP_R_NOT_XOF_OR_INVALID_LENGTH 178 # define EVP_R_NO_CIPHER_SET 131 # define EVP_R_NO_DEFAULT_DIGEST 158 # define EVP_R_NO_DIGEST_SET 139 +# define EVP_R_NO_IMPORT_FUNCTION 206 +# define EVP_R_NO_KEYMGMT_AVAILABLE 199 +# define EVP_R_NO_KEYMGMT_PRESENT 196 # define EVP_R_NO_KEY_SET 154 # define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_NULL_MAC_PKEY_CTX 208 # define EVP_R_ONLY_ONESHOT_SUPPORTED 177 +# define EVP_R_OPERATION_NOT_INITIALIZED 151 # define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 -# define EVP_R_OPERATON_NOT_INITIALIZED 151 -# define EVP_R_OUTPUT_WOULD_OVERFLOW 184 +# define EVP_R_OUTPUT_WOULD_OVERFLOW 202 +# define EVP_R_PARAMETER_TOO_LARGE 187 # define EVP_R_PARTIALLY_OVERLAPPING 162 # define EVP_R_PBKDF2_ERROR 181 # define EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 179 # define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 # define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 # define EVP_R_PUBLIC_KEY_NOT_RSA 106 +# define EVP_R_SETTING_XOF_FAILED 227 +# define EVP_R_SET_DEFAULT_PROPERTY_FAILURE 209 +# define EVP_R_TOO_MANY_RECORDS 183 +# define EVP_R_UNABLE_TO_ENABLE_LOCKING 212 +# define EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE 215 +# define EVP_R_UNABLE_TO_GET_RANDOM_STRENGTH 216 +# define EVP_R_UNABLE_TO_LOCK_CONTEXT 211 +# define EVP_R_UNABLE_TO_SET_CALLBACKS 217 # define EVP_R_UNKNOWN_CIPHER 160 # define EVP_R_UNKNOWN_DIGEST 161 +# define EVP_R_UNKNOWN_KEY_TYPE 207 # define EVP_R_UNKNOWN_OPTION 169 # define EVP_R_UNKNOWN_PBE_ALGORITHM 121 # define EVP_R_UNSUPPORTED_ALGORITHM 156 @@ -193,12 +120,15 @@ int ERR_load_EVP_strings(void); # define EVP_R_UNSUPPORTED_KEYLENGTH 123 # define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 # define EVP_R_UNSUPPORTED_KEY_SIZE 108 +# define EVP_R_UNSUPPORTED_KEY_TYPE 224 # define EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS 135 # define EVP_R_UNSUPPORTED_PRF 125 # define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 # define EVP_R_UNSUPPORTED_SALT_TYPE 126 +# define EVP_R_UPDATE_ERROR 189 # define EVP_R_WRAP_MODE_NOT_ALLOWED 170 # define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 -# define EVP_R_XTS_DUPLICATED_KEYS 183 +# define EVP_R_XTS_DATA_UNIT_IS_TOO_LARGE 191 +# define EVP_R_XTS_DUPLICATED_KEYS 192 #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/fips_names.h b/deps/openssl/android/x86_64/usr/local/include/openssl/fips_names.h new file mode 100644 index 00000000..5c77f6d6 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/fips_names.h @@ -0,0 +1,77 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPS_NAMES_H +# define OPENSSL_FIPS_NAMES_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Parameter names that the FIPS Provider defines + */ + +/* + * The calculated MAC of the module file (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_MODULE_MAC "module-mac" +/* + * A version number for the fips install process (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_VERSION "install-version" +/* + * The calculated MAC of the install status indicator (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_MAC "install-mac" +/* + * The install status indicator (Used for FIPS Self Testing) + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_INSTALL_STATUS "install-status" + +/* + * A boolean that determines if the FIPS conditional test errors result in + * the module entering an error state. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_CONDITIONAL_ERRORS "conditional-errors" + +/* + * A boolean that determines if the runtime FIPS security checks are performed. + * This is enabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_SECURITY_CHECKS "security-checks" + +/* + * A boolean that determines if the runtime FIPS check for TLS1_PRF EMS is performed. + * This is disabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" + +/* + * A boolean that determines if truncated digests can be used with Hash and HMAC + * DRBGs. FIPS 140-3 IG D.R disallows such use for efficiency rather than + * security reasons. + * This is disabled by default. + * Type: OSSL_PARAM_UTF8_STRING + */ +# define OSSL_PROV_FIPS_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" + +# ifdef __cplusplus +} +# endif + +#endif /* OPENSSL_FIPS_NAMES_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/fipskey.h b/deps/openssl/android/x86_64/usr/local/include/openssl/fipskey.h new file mode 100644 index 00000000..42ba014b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/fipskey.h @@ -0,0 +1,36 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/fipskey.h.in + * + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPSKEY_H +# define OPENSSL_FIPSKEY_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * The FIPS validation HMAC key, usable as an array initializer. + */ +#define FIPS_KEY_ELEMENTS \ + 0xf4, 0x55, 0x66, 0x50, 0xac, 0x31, 0xd3, 0x54, 0x61, 0x61, 0x0b, 0xac, 0x4e, 0xd8, 0x1b, 0x1a, 0x18, 0x1b, 0x2d, 0x8a, 0x43, 0xea, 0x28, 0x54, 0xcb, 0xae, 0x22, 0xca, 0x74, 0x56, 0x08, 0x13 + +/* + * The FIPS validation key, as a string. + */ +#define FIPS_KEY_STRING "f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/fipskey.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/fipskey.h.in new file mode 100644 index 00000000..56b947e8 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/fipskey.h.in @@ -0,0 +1,35 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_FIPSKEY_H +# define OPENSSL_FIPSKEY_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * The FIPS validation HMAC key, usable as an array initializer. + */ +#define FIPS_KEY_ELEMENTS \ + {- join(', ', map { "0x$_" } unpack("(A2)*", $config{FIPSKEY})) -} + +/* + * The FIPS validation key, as a string. + */ +#define FIPS_KEY_STRING "{- $config{FIPSKEY} -}" + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/hmac.h b/deps/openssl/android/x86_64/usr/local/include/openssl/hmac.h index 458efc1d..f9e1bff3 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/hmac.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/hmac.h @@ -1,51 +1,62 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_HMAC_H -# define HEADER_HMAC_H +#ifndef OPENSSL_HMAC_H +# define OPENSSL_HMAC_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_HMAC_H +# endif # include # include -# if OPENSSL_API_COMPAT < 0x10200000L -# define HMAC_MAX_MD_CBLOCK 128 /* Deprecated */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HMAC_MAX_MD_CBLOCK 200 /* Deprecated */ # endif -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -size_t HMAC_size(const HMAC_CTX *e); -HMAC_CTX *HMAC_CTX_new(void); -int HMAC_CTX_reset(HMAC_CTX *ctx); -void HMAC_CTX_free(HMAC_CTX *ctx); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 size_t HMAC_size(const HMAC_CTX *e); +OSSL_DEPRECATEDIN_3_0 HMAC_CTX *HMAC_CTX_new(void); +OSSL_DEPRECATEDIN_3_0 int HMAC_CTX_reset(HMAC_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void HMAC_CTX_free(HMAC_CTX *ctx); +# endif +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur int HMAC_Init(HMAC_CTX *ctx, + const void *key, int len, + const EVP_MD *md); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +OSSL_DEPRECATEDIN_3_0 int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, + unsigned int *len); +OSSL_DEPRECATEDIN_3_0 __owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); +OSSL_DEPRECATEDIN_3_0 void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); +OSSL_DEPRECATEDIN_3_0 const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); +# endif -DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md)) - -/*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, - const EVP_MD *md, ENGINE *impl); -/*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, - size_t len); -/*__owur*/ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, - unsigned int *len); unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, - const unsigned char *d, size_t n, unsigned char *md, - unsigned int *md_len); -__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); + const unsigned char *data, size_t data_len, + unsigned char *md, unsigned int *md_len); -void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); -const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); - -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/http.h b/deps/openssl/android/x86_64/usr/local/include/openssl/http.h new file mode 100644 index 00000000..f7ab2142 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/http.h @@ -0,0 +1,109 @@ +/* + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright Siemens AG 2018-2020 + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_HTTP_H +# define OPENSSL_HTTP_H +# pragma once + +# include + +# include +# include +# include + + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_HTTP_NAME "http" +# define OSSL_HTTPS_NAME "https" +# define OSSL_HTTP_PREFIX OSSL_HTTP_NAME"://" +# define OSSL_HTTPS_PREFIX OSSL_HTTPS_NAME"://" +# define OSSL_HTTP_PORT "80" +# define OSSL_HTTPS_PORT "443" +# define OPENSSL_NO_PROXY "NO_PROXY" +# define OPENSSL_HTTP_PROXY "HTTP_PROXY" +# define OPENSSL_HTTPS_PROXY "HTTPS_PROXY" + +#define OSSL_HTTP_DEFAULT_MAX_LINE_LEN (4 * 1024) +#define OSSL_HTTP_DEFAULT_MAX_RESP_LEN (100 * 1024) + +/* Low-level HTTP API */ +OSSL_HTTP_REQ_CTX *OSSL_HTTP_REQ_CTX_new(BIO *wbio, BIO *rbio, int buf_size); +void OSSL_HTTP_REQ_CTX_free(OSSL_HTTP_REQ_CTX *rctx); +int OSSL_HTTP_REQ_CTX_set_request_line(OSSL_HTTP_REQ_CTX *rctx, int method_POST, + const char *server, const char *port, + const char *path); +int OSSL_HTTP_REQ_CTX_add1_header(OSSL_HTTP_REQ_CTX *rctx, + const char *name, const char *value); +int OSSL_HTTP_REQ_CTX_set_expected(OSSL_HTTP_REQ_CTX *rctx, + const char *content_type, int asn1, + int timeout, int keep_alive); +int OSSL_HTTP_REQ_CTX_set1_req(OSSL_HTTP_REQ_CTX *rctx, const char *content_type, + const ASN1_ITEM *it, const ASN1_VALUE *req); +int OSSL_HTTP_REQ_CTX_nbio(OSSL_HTTP_REQ_CTX *rctx); +int OSSL_HTTP_REQ_CTX_nbio_d2i(OSSL_HTTP_REQ_CTX *rctx, + ASN1_VALUE **pval, const ASN1_ITEM *it); +BIO *OSSL_HTTP_REQ_CTX_exchange(OSSL_HTTP_REQ_CTX *rctx); +BIO *OSSL_HTTP_REQ_CTX_get0_mem_bio(const OSSL_HTTP_REQ_CTX *rctx); +size_t OSSL_HTTP_REQ_CTX_get_resp_len(const OSSL_HTTP_REQ_CTX *rctx); +void OSSL_HTTP_REQ_CTX_set_max_response_length(OSSL_HTTP_REQ_CTX *rctx, + unsigned long len); +int OSSL_HTTP_is_alive(const OSSL_HTTP_REQ_CTX *rctx); + +/* High-level HTTP API */ +typedef BIO *(*OSSL_HTTP_bio_cb_t)(BIO *bio, void *arg, int connect, int detail); +OSSL_HTTP_REQ_CTX *OSSL_HTTP_open(const char *server, const char *port, + const char *proxy, const char *no_proxy, + int use_ssl, BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, int overall_timeout); +int OSSL_HTTP_proxy_connect(BIO *bio, const char *server, const char *port, + const char *proxyuser, const char *proxypass, + int timeout, BIO *bio_err, const char *prog); +int OSSL_HTTP_set1_request(OSSL_HTTP_REQ_CTX *rctx, const char *path, + const STACK_OF(CONF_VALUE) *headers, + const char *content_type, BIO *req, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout, int keep_alive); +BIO *OSSL_HTTP_exchange(OSSL_HTTP_REQ_CTX *rctx, char **redirection_url); +BIO *OSSL_HTTP_get(const char *url, const char *proxy, const char *no_proxy, + BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, const STACK_OF(CONF_VALUE) *headers, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout); +BIO *OSSL_HTTP_transfer(OSSL_HTTP_REQ_CTX **prctx, + const char *server, const char *port, + const char *path, int use_ssl, + const char *proxy, const char *no_proxy, + BIO *bio, BIO *rbio, + OSSL_HTTP_bio_cb_t bio_update_fn, void *arg, + int buf_size, const STACK_OF(CONF_VALUE) *headers, + const char *content_type, BIO *req, + const char *expected_content_type, int expect_asn1, + size_t max_resp_len, int timeout, int keep_alive); +int OSSL_HTTP_close(OSSL_HTTP_REQ_CTX *rctx, int ok); + +/* Auxiliary functions */ +int OSSL_parse_url(const char *url, char **pscheme, char **puser, char **phost, + char **pport, int *pport_num, + char **ppath, char **pquery, char **pfrag); +int OSSL_HTTP_parse_url(const char *url, int *pssl, char **puser, char **phost, + char **pport, int *pport_num, + char **ppath, char **pquery, char **pfrag); +const char *OSSL_HTTP_adapt_proxy(const char *proxy, const char *no_proxy, + const char *server, int use_ssl); + +# ifdef __cplusplus +} +# endif +#endif /* !defined(OPENSSL_HTTP_H) */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/httperr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/httperr.h new file mode 100644 index 00000000..ee089592 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/httperr.h @@ -0,0 +1,55 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_HTTPERR_H +# define OPENSSL_HTTPERR_H +# pragma once + +# include +# include +# include + + + +/* + * HTTP reason codes. + */ +# define HTTP_R_ASN1_LEN_EXCEEDS_MAX_RESP_LEN 108 +# define HTTP_R_CONNECT_FAILURE 100 +# define HTTP_R_ERROR_PARSING_ASN1_LENGTH 109 +# define HTTP_R_ERROR_PARSING_CONTENT_LENGTH 119 +# define HTTP_R_ERROR_PARSING_URL 101 +# define HTTP_R_ERROR_RECEIVING 103 +# define HTTP_R_ERROR_SENDING 102 +# define HTTP_R_FAILED_READING_DATA 128 +# define HTTP_R_HEADER_PARSE_ERROR 126 +# define HTTP_R_INCONSISTENT_CONTENT_LENGTH 120 +# define HTTP_R_INVALID_PORT_NUMBER 123 +# define HTTP_R_INVALID_URL_PATH 125 +# define HTTP_R_INVALID_URL_SCHEME 124 +# define HTTP_R_MAX_RESP_LEN_EXCEEDED 117 +# define HTTP_R_MISSING_ASN1_ENCODING 110 +# define HTTP_R_MISSING_CONTENT_TYPE 121 +# define HTTP_R_MISSING_REDIRECT_LOCATION 111 +# define HTTP_R_RECEIVED_ERROR 105 +# define HTTP_R_RECEIVED_WRONG_HTTP_VERSION 106 +# define HTTP_R_REDIRECTION_FROM_HTTPS_TO_HTTP 112 +# define HTTP_R_REDIRECTION_NOT_ENABLED 116 +# define HTTP_R_RESPONSE_LINE_TOO_LONG 113 +# define HTTP_R_RESPONSE_PARSE_ERROR 104 +# define HTTP_R_RETRY_TIMEOUT 129 +# define HTTP_R_SERVER_CANCELED_CONNECTION 127 +# define HTTP_R_SOCK_NOT_SUPPORTED 122 +# define HTTP_R_STATUS_CODE_UNSUPPORTED 114 +# define HTTP_R_TLS_NOT_ENABLED 107 +# define HTTP_R_TOO_MANY_REDIRECTIONS 115 +# define HTTP_R_UNEXPECTED_CONTENT_TYPE 118 + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/idea.h b/deps/openssl/android/x86_64/usr/local/include/openssl/idea.h index 4334f3ea..1f9bb3b3 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/idea.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/idea.h @@ -1,64 +1,82 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_IDEA_H -# define HEADER_IDEA_H +#ifndef OPENSSL_IDEA_H +# define OPENSSL_IDEA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_IDEA_H +# endif # include # ifndef OPENSSL_NO_IDEA -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define IDEA_BLOCK 8 +# define IDEA_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int IDEA_INT; -# define IDEA_ENCRYPT 1 -# define IDEA_DECRYPT 0 - -# define IDEA_BLOCK 8 -# define IDEA_KEY_LENGTH 16 +# define IDEA_ENCRYPT 1 +# define IDEA_DECRYPT 0 typedef struct idea_key_st { IDEA_INT data[9][6]; } IDEA_KEY_SCHEDULE; +#endif +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *IDEA_options(void); +OSSL_DEPRECATEDIN_3_0 void IDEA_ecb_encrypt(const unsigned char *in, + unsigned char *out, + IDEA_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void IDEA_set_encrypt_key(const unsigned char *key, + IDEA_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, + IDEA_KEY_SCHEDULE *dk); +OSSL_DEPRECATEDIN_3_0 void IDEA_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int enc); +OSSL_DEPRECATEDIN_3_0 void IDEA_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void IDEA_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + IDEA_KEY_SCHEDULE *ks, + unsigned char *iv, int *num); +OSSL_DEPRECATEDIN_3_0 void IDEA_encrypt(unsigned long *in, + IDEA_KEY_SCHEDULE *ks); +#endif -const char *IDEA_options(void); -void IDEA_ecb_encrypt(const unsigned char *in, unsigned char *out, - IDEA_KEY_SCHEDULE *ks); -void IDEA_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); -void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); -void IDEA_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int enc); -void IDEA_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num, int enc); -void IDEA_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, - int *num); -void IDEA_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define idea_options IDEA_options +# define idea_ecb_encrypt IDEA_ecb_encrypt +# define idea_set_encrypt_key IDEA_set_encrypt_key +# define idea_set_decrypt_key IDEA_set_decrypt_key +# define idea_cbc_encrypt IDEA_cbc_encrypt +# define idea_cfb64_encrypt IDEA_cfb64_encrypt +# define idea_ofb64_encrypt IDEA_ofb64_encrypt +# define idea_encrypt IDEA_encrypt +# endif -# if OPENSSL_API_COMPAT < 0x10100000L -# define idea_options IDEA_options -# define idea_ecb_encrypt IDEA_ecb_encrypt -# define idea_set_encrypt_key IDEA_set_encrypt_key -# define idea_set_decrypt_key IDEA_set_decrypt_key -# define idea_cbc_encrypt IDEA_cbc_encrypt -# define idea_cfb64_encrypt IDEA_cfb64_encrypt -# define idea_ofb64_encrypt IDEA_ofb64_encrypt -# define idea_encrypt IDEA_encrypt -# endif - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/kdf.h b/deps/openssl/android/x86_64/usr/local/include/openssl/kdf.h index 5abd4c37..0983230a 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/kdf.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/kdf.h @@ -1,19 +1,76 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_KDF_H -# define HEADER_KDF_H +#ifndef OPENSSL_KDF_H +# define OPENSSL_KDF_H +# pragma once -# include -#ifdef __cplusplus +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_KDF_H +# endif + +# include +# include +# include +# include + +# ifdef __cplusplus extern "C" { -#endif +# endif + +int EVP_KDF_up_ref(EVP_KDF *kdf); +void EVP_KDF_free(EVP_KDF *kdf); +EVP_KDF *EVP_KDF_fetch(OSSL_LIB_CTX *libctx, const char *algorithm, + const char *properties); + +EVP_KDF_CTX *EVP_KDF_CTX_new(EVP_KDF *kdf); +void EVP_KDF_CTX_free(EVP_KDF_CTX *ctx); +EVP_KDF_CTX *EVP_KDF_CTX_dup(const EVP_KDF_CTX *src); +const char *EVP_KDF_get0_description(const EVP_KDF *kdf); +int EVP_KDF_is_a(const EVP_KDF *kdf, const char *name); +const char *EVP_KDF_get0_name(const EVP_KDF *kdf); +const OSSL_PROVIDER *EVP_KDF_get0_provider(const EVP_KDF *kdf); +const EVP_KDF *EVP_KDF_CTX_kdf(EVP_KDF_CTX *ctx); + +void EVP_KDF_CTX_reset(EVP_KDF_CTX *ctx); +size_t EVP_KDF_CTX_get_kdf_size(EVP_KDF_CTX *ctx); +int EVP_KDF_derive(EVP_KDF_CTX *ctx, unsigned char *key, size_t keylen, + const OSSL_PARAM params[]); +int EVP_KDF_get_params(EVP_KDF *kdf, OSSL_PARAM params[]); +int EVP_KDF_CTX_get_params(EVP_KDF_CTX *ctx, OSSL_PARAM params[]); +int EVP_KDF_CTX_set_params(EVP_KDF_CTX *ctx, const OSSL_PARAM params[]); +const OSSL_PARAM *EVP_KDF_gettable_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_gettable_ctx_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_settable_ctx_params(const EVP_KDF *kdf); +const OSSL_PARAM *EVP_KDF_CTX_gettable_params(EVP_KDF_CTX *ctx); +const OSSL_PARAM *EVP_KDF_CTX_settable_params(EVP_KDF_CTX *ctx); + +void EVP_KDF_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(EVP_KDF *kdf, void *arg), + void *arg); +int EVP_KDF_names_do_all(const EVP_KDF *kdf, + void (*fn)(const char *name, void *data), + void *data); + +# define EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND 0 +# define EVP_KDF_HKDF_MODE_EXTRACT_ONLY 1 +# define EVP_KDF_HKDF_MODE_EXPAND_ONLY 2 + +#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_CLI_TO_SRV 65 +#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_SRV_TO_CLI 66 +#define EVP_KDF_SSHKDF_TYPE_ENCRYPTION_KEY_CLI_TO_SRV 67 +#define EVP_KDF_SSHKDF_TYPE_ENCRYPTION_KEY_SRV_TO_CLI 68 +#define EVP_KDF_SSHKDF_TYPE_INTEGRITY_KEY_CLI_TO_SRV 69 +#define EVP_KDF_SSHKDF_TYPE_INTEGRITY_KEY_SRV_TO_CLI 70 + +/**** The legacy PKEY-based KDF API follows. ****/ # define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) # define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) @@ -30,68 +87,52 @@ extern "C" { # define EVP_PKEY_CTRL_SCRYPT_P (EVP_PKEY_ALG_CTRL + 12) # define EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES (EVP_PKEY_ALG_CTRL + 13) -# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND 0 -# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 1 -# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY 2 +# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND \ + EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND +# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY \ + EVP_KDF_HKDF_MODE_EXTRACT_ONLY +# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY \ + EVP_KDF_HKDF_MODE_EXPAND_ONLY -# define EVP_PKEY_CTX_set_tls1_prf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_MD, 0, (void *)(md)) +int EVP_PKEY_CTX_set_tls1_prf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, sec, seclen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)(sec)) +int EVP_PKEY_CTX_set1_tls1_prf_secret(EVP_PKEY_CTX *pctx, + const unsigned char *sec, int seclen); -# define EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed, seedlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)(seed)) +int EVP_PKEY_CTX_add1_tls1_prf_seed(EVP_PKEY_CTX *pctx, + const unsigned char *seed, int seedlen); -# define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MD, 0, (void *)(md)) +int EVP_PKEY_CTX_set_hkdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); -# define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)(salt)) +int EVP_PKEY_CTX_set1_hkdf_salt(EVP_PKEY_CTX *ctx, + const unsigned char *salt, int saltlen); -# define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)(key)) +int EVP_PKEY_CTX_set1_hkdf_key(EVP_PKEY_CTX *ctx, + const unsigned char *key, int keylen); -# define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)(info)) +int EVP_PKEY_CTX_add1_hkdf_info(EVP_PKEY_CTX *ctx, + const unsigned char *info, int infolen); -# define EVP_PKEY_CTX_hkdf_mode(pctx, mode) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_HKDF_MODE, mode, NULL) +int EVP_PKEY_CTX_set_hkdf_mode(EVP_PKEY_CTX *ctx, int mode); +# define EVP_PKEY_CTX_hkdf_mode EVP_PKEY_CTX_set_hkdf_mode -# define EVP_PKEY_CTX_set1_pbe_pass(pctx, pass, passlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_PASS, passlen, (void *)(pass)) +int EVP_PKEY_CTX_set1_pbe_pass(EVP_PKEY_CTX *ctx, const char *pass, + int passlen); -# define EVP_PKEY_CTX_set1_scrypt_salt(pctx, salt, saltlen) \ - EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_SALT, saltlen, (void *)(salt)) +int EVP_PKEY_CTX_set1_scrypt_salt(EVP_PKEY_CTX *ctx, + const unsigned char *salt, int saltlen); -# define EVP_PKEY_CTX_set_scrypt_N(pctx, n) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_N, n) +int EVP_PKEY_CTX_set_scrypt_N(EVP_PKEY_CTX *ctx, uint64_t n); -# define EVP_PKEY_CTX_set_scrypt_r(pctx, r) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_R, r) +int EVP_PKEY_CTX_set_scrypt_r(EVP_PKEY_CTX *ctx, uint64_t r); -# define EVP_PKEY_CTX_set_scrypt_p(pctx, p) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_P, p) +int EVP_PKEY_CTX_set_scrypt_p(EVP_PKEY_CTX *ctx, uint64_t p); -# define EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx, maxmem_bytes) \ - EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ - EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES, maxmem_bytes) +int EVP_PKEY_CTX_set_scrypt_maxmem_bytes(EVP_PKEY_CTX *ctx, + uint64_t maxmem_bytes); -# ifdef __cplusplus +# ifdef __cplusplus } # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/kdferr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/kdferr.h index 3f51bd02..963d766d 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/kdferr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/kdferr.h @@ -1,55 +1,16 @@ /* - * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_KDFERR_H -# define HEADER_KDFERR_H +#ifndef OPENSSL_KDFERR_H +# define OPENSSL_KDFERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +#include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_KDF_strings(void); - -/* - * KDF function codes. - */ -# define KDF_F_PKEY_HKDF_CTRL_STR 103 -# define KDF_F_PKEY_HKDF_DERIVE 102 -# define KDF_F_PKEY_HKDF_INIT 108 -# define KDF_F_PKEY_SCRYPT_CTRL_STR 104 -# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 105 -# define KDF_F_PKEY_SCRYPT_DERIVE 109 -# define KDF_F_PKEY_SCRYPT_INIT 106 -# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 107 -# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 -# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 -# define KDF_F_PKEY_TLS1_PRF_INIT 110 -# define KDF_F_TLS1_PRF_ALG 111 - -/* - * KDF reason codes. - */ -# define KDF_R_INVALID_DIGEST 100 -# define KDF_R_MISSING_ITERATION_COUNT 109 -# define KDF_R_MISSING_KEY 104 -# define KDF_R_MISSING_MESSAGE_DIGEST 105 -# define KDF_R_MISSING_PARAMETER 101 -# define KDF_R_MISSING_PASS 110 -# define KDF_R_MISSING_SALT 111 -# define KDF_R_MISSING_SECRET 107 -# define KDF_R_MISSING_SEED 106 -# define KDF_R_UNKNOWN_PARAMETER_TYPE 103 -# define KDF_R_VALUE_ERROR 108 -# define KDF_R_VALUE_MISSING 102 - -#endif +#endif /* !defined(OPENSSL_KDFERR_H) */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h b/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h index 2e42d727..f4155df1 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h @@ -1,21 +1,32 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ + + /* * Header for dynamic hash table routines Author - Eric Young */ -#ifndef HEADER_LHASH_H -# define HEADER_LHASH_H +#ifndef OPENSSL_LHASH_H +# define OPENSSL_LHASH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_LHASH_H +# endif # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -72,6 +83,7 @@ typedef struct lhash_st OPENSSL_LHASH; int OPENSSL_LH_error(OPENSSL_LHASH *lh); OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void OPENSSL_LH_flush(OPENSSL_LHASH *lh); void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); @@ -83,15 +95,19 @@ unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); # ifndef OPENSSL_NO_STDIO -void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); -void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); # endif -void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define _LHASH OPENSSL_LHASH # define LHASH_NODE OPENSSL_LH_NODE # define lh_error OPENSSL_LH_error @@ -118,63 +134,145 @@ void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); # define LHASH_OF(type) struct lhash_st_##type -# define DEFINE_LHASH_OF(type) \ - LHASH_OF(type) { union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; }; \ - static ossl_unused ossl_inline LHASH_OF(type) *lh_##type##_new(unsigned long (*hfn)(const type *), \ - int (*cfn)(const type *, const type *)) \ +/* Helper macro for internal use */ +# define DEFINE_LHASH_OF_INTERNAL(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + typedef int (*lh_##type##_compfunc)(const type *a, const type *b); \ + typedef unsigned long (*lh_##type##_hashfunc)(const type *a); \ + typedef void (*lh_##type##_doallfunc)(type *a); \ + static ossl_unused ossl_inline type *\ + ossl_check_##type##_lh_plain_type(type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const type * \ + ossl_check_const_##type##_lh_plain_type(const type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_LHASH * \ + ossl_check_const_##type##_lh_type(const LHASH_OF(type) *lh) \ + { \ + return (const OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LHASH * \ + ossl_check_##type##_lh_type(LHASH_OF(type) *lh) \ + { \ + return (OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_COMPFUNC \ + ossl_check_##type##_lh_compfunc_type(lh_##type##_compfunc cmp) \ + { \ + return (OPENSSL_LH_COMPFUNC)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_HASHFUNC \ + ossl_check_##type##_lh_hashfunc_type(lh_##type##_hashfunc hfn) \ + { \ + return (OPENSSL_LH_HASHFUNC)hfn; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_DOALL_FUNC \ + ossl_check_##type##_lh_doallfunc_type(lh_##type##_doallfunc dfn) \ + { \ + return (OPENSSL_LH_DOALL_FUNC)dfn; \ + } \ + LHASH_OF(type) + +# ifndef OPENSSL_NO_DEPRECATED_3_1 +# define DEFINE_LHASH_OF_DEPRECATED(type) \ + static ossl_unused ossl_inline void \ + lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } +# else +# define DEFINE_LHASH_OF_DEPRECATED(type) +# endif + +# define DEFINE_LHASH_OF_EX(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + static ossl_unused ossl_inline LHASH_OF(type) * \ + lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ { \ return (LHASH_OF(type) *) \ OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ } \ - static ossl_unused ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline void \ + lh_##type##_free(LHASH_OF(type) *lh) \ { \ OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline type *lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + static ossl_unused ossl_inline void \ + lh_##type##_flush(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_flush((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ { \ return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline type *lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + static ossl_unused ossl_inline type * \ + lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ { \ return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline type *lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + static ossl_unused ossl_inline type * \ + lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ { \ return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ } \ - static ossl_unused ossl_inline int lh_##type##_error(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline int \ + lh_##type##_error(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline unsigned long lh_##type##_num_items(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_num_items(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline void lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline void lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline void lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ - { \ - OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ - } \ - static ossl_unused ossl_inline unsigned long lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_get_down_load(LHASH_OF(type) *lh) \ { \ return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ } \ - static ossl_unused ossl_inline void lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + static ossl_unused ossl_inline void \ + lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ { \ OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ } \ - static ossl_unused ossl_inline void lh_##type##_doall(LHASH_OF(type) *lh, \ - void (*doall)(type *)) \ + static ossl_unused ossl_inline void \ + lh_##type##_doall(LHASH_OF(type) *lh, void (*doall)(type *)) \ { \ OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_arg(LHASH_OF(type) *lh, \ + void (*doallarg)(type *, void *), void *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)doallarg, arg); \ + } \ + LHASH_OF(type) + +# define DEFINE_LHASH_OF(type) \ + DEFINE_LHASH_OF_EX(type); \ + DEFINE_LHASH_OF_DEPRECATED(type) \ LHASH_OF(type) #define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ @@ -189,50 +287,42 @@ void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); void (*fn)(cbargtype *, argtype *), \ argtype *arg) \ { \ - OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ } \ LHASH_OF(type) -DEFINE_LHASH_OF(OPENSSL_STRING); -# ifdef _MSC_VER -/* - * push and pop this warning: - * warning C4090: 'function': different 'const' qualifiers - */ -# pragma warning (push) -# pragma warning (disable: 4090) -# endif +DEFINE_LHASH_OF_INTERNAL(OPENSSL_STRING); +#define lh_OPENSSL_STRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_STRING) *)OPENSSL_LH_new(ossl_check_OPENSSL_STRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_STRING_lh_compfunc_type(cmp))) +#define lh_OPENSSL_STRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_insert(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_delete(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_retrieve(lh, ptr) ((OPENSSL_STRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_const_OPENSSL_STRING_lh_plain_type(ptr))) +#define lh_OPENSSL_STRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_STRING_lh_type(lh), out) +#define lh_OPENSSL_STRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_STRING_lh_type(lh)) +#define lh_OPENSSL_STRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_STRING_lh_type(lh), dl) +#define lh_OPENSSL_STRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_STRING_lh_type(lh), ossl_check_OPENSSL_STRING_lh_doallfunc_type(dfn)) +DEFINE_LHASH_OF_INTERNAL(OPENSSL_CSTRING); +#define lh_OPENSSL_CSTRING_new(hfn, cmp) ((LHASH_OF(OPENSSL_CSTRING) *)OPENSSL_LH_new(ossl_check_OPENSSL_CSTRING_lh_hashfunc_type(hfn), ossl_check_OPENSSL_CSTRING_lh_compfunc_type(cmp))) +#define lh_OPENSSL_CSTRING_free(lh) OPENSSL_LH_free(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_flush(lh) OPENSSL_LH_flush(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_insert(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_insert(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_delete(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_delete(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_retrieve(lh, ptr) ((OPENSSL_CSTRING *)OPENSSL_LH_retrieve(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_const_OPENSSL_CSTRING_lh_plain_type(ptr))) +#define lh_OPENSSL_CSTRING_error(lh) OPENSSL_LH_error(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_num_items(lh) OPENSSL_LH_num_items(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_node_stats_bio(lh, out) OPENSSL_LH_node_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh, out) OPENSSL_LH_node_usage_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_stats_bio(lh, out) OPENSSL_LH_stats_bio(ossl_check_const_OPENSSL_CSTRING_lh_type(lh), out) +#define lh_OPENSSL_CSTRING_get_down_load(lh) OPENSSL_LH_get_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh)) +#define lh_OPENSSL_CSTRING_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_OPENSSL_CSTRING_lh_type(lh), dl) +#define lh_OPENSSL_CSTRING_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_OPENSSL_CSTRING_lh_type(lh), ossl_check_OPENSSL_CSTRING_lh_doallfunc_type(dfn)) -DEFINE_LHASH_OF(OPENSSL_CSTRING); - -# ifdef _MSC_VER -# pragma warning (pop) -# endif - -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_LH_new -# pragma weak OPENSSL_LH_free -# pragma weak OPENSSL_LH_insert -# pragma weak OPENSSL_LH_delete -# pragma weak OPENSSL_LH_retrieve -# pragma weak OPENSSL_LH_error -# pragma weak OPENSSL_LH_num_items -# pragma weak OPENSSL_LH_node_stats_bio -# pragma weak OPENSSL_LH_node_usage_stats_bio -# pragma weak OPENSSL_LH_stats_bio -# pragma weak OPENSSL_LH_get_down_load -# pragma weak OPENSSL_LH_set_down_load -# pragma weak OPENSSL_LH_doall -# pragma weak OPENSSL_LH_doall_arg -# endif /* __SUNPRO_C */ #ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h.in new file mode 100644 index 00000000..dc344a54 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h.in @@ -0,0 +1,306 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_lhash_macros); +-} + +/* + * Header for dynamic hash table routines Author - Eric Young + */ + +#ifndef OPENSSL_LHASH_H +# define OPENSSL_LHASH_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_LHASH_H +# endif + +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st OPENSSL_LH_NODE; +typedef int (*OPENSSL_LH_COMPFUNC) (const void *, const void *); +typedef unsigned long (*OPENSSL_LH_HASHFUNC) (const void *); +typedef void (*OPENSSL_LH_DOALL_FUNC) (void *); +typedef void (*OPENSSL_LH_DOALL_FUNCARG) (void *, void *); +typedef struct lhash_st OPENSSL_LHASH; + +/* + * Macros for declaring and implementing type-safe wrappers for LHASH + * callbacks. This way, callbacks can be provided to LHASH structures without + * function pointer casting and the macro-defined callbacks provide + * per-variable casting before deferring to the underlying type-specific + * callbacks. NB: It is possible to place a "static" in front of both the + * DECLARE and IMPLEMENT macros if the functions are strictly internal. + */ + +/* First: "hash" functions */ +# define DECLARE_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *); +# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *arg) { \ + const o_type *a = arg; \ + return name##_hash(a); } +# define LHASH_HASH_FN(name) name##_LHASH_HASH + +/* Second: "compare" functions */ +# define DECLARE_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *, const void *); +# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ + const o_type *a = arg1; \ + const o_type *b = arg2; \ + return name##_cmp(a,b); } +# define LHASH_COMP_FN(name) name##_LHASH_COMP + +/* Fourth: "doall_arg" functions */ +# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *, void *); +# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ + o_type *a = arg1; \ + a_type *b = arg2; \ + name##_doall_arg(a, b); } +# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG + + +# define LH_LOAD_MULT 256 + +int OPENSSL_LH_error(OPENSSL_LHASH *lh); +OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); +void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void OPENSSL_LH_flush(OPENSSL_LHASH *lh); +void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); +void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); +void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); +void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func); +void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg); +unsigned long OPENSSL_LH_strhash(const char *c); +unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh); +unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); +void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); + +# ifndef OPENSSL_NO_STDIO +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_1 +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +OSSL_DEPRECATEDIN_3_1 void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define _LHASH OPENSSL_LHASH +# define LHASH_NODE OPENSSL_LH_NODE +# define lh_error OPENSSL_LH_error +# define lh_new OPENSSL_LH_new +# define lh_free OPENSSL_LH_free +# define lh_insert OPENSSL_LH_insert +# define lh_delete OPENSSL_LH_delete +# define lh_retrieve OPENSSL_LH_retrieve +# define lh_doall OPENSSL_LH_doall +# define lh_doall_arg OPENSSL_LH_doall_arg +# define lh_strhash OPENSSL_LH_strhash +# define lh_num_items OPENSSL_LH_num_items +# ifndef OPENSSL_NO_STDIO +# define lh_stats OPENSSL_LH_stats +# define lh_node_stats OPENSSL_LH_node_stats +# define lh_node_usage_stats OPENSSL_LH_node_usage_stats +# endif +# define lh_stats_bio OPENSSL_LH_stats_bio +# define lh_node_stats_bio OPENSSL_LH_node_stats_bio +# define lh_node_usage_stats_bio OPENSSL_LH_node_usage_stats_bio +# endif + +/* Type checking... */ + +# define LHASH_OF(type) struct lhash_st_##type + +/* Helper macro for internal use */ +# define DEFINE_LHASH_OF_INTERNAL(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + typedef int (*lh_##type##_compfunc)(const type *a, const type *b); \ + typedef unsigned long (*lh_##type##_hashfunc)(const type *a); \ + typedef void (*lh_##type##_doallfunc)(type *a); \ + static ossl_unused ossl_inline type *\ + ossl_check_##type##_lh_plain_type(type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const type * \ + ossl_check_const_##type##_lh_plain_type(const type *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_LHASH * \ + ossl_check_const_##type##_lh_type(const LHASH_OF(type) *lh) \ + { \ + return (const OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LHASH * \ + ossl_check_##type##_lh_type(LHASH_OF(type) *lh) \ + { \ + return (OPENSSL_LHASH *)lh; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_COMPFUNC \ + ossl_check_##type##_lh_compfunc_type(lh_##type##_compfunc cmp) \ + { \ + return (OPENSSL_LH_COMPFUNC)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_HASHFUNC \ + ossl_check_##type##_lh_hashfunc_type(lh_##type##_hashfunc hfn) \ + { \ + return (OPENSSL_LH_HASHFUNC)hfn; \ + } \ + static ossl_unused ossl_inline OPENSSL_LH_DOALL_FUNC \ + ossl_check_##type##_lh_doallfunc_type(lh_##type##_doallfunc dfn) \ + { \ + return (OPENSSL_LH_DOALL_FUNC)dfn; \ + } \ + LHASH_OF(type) + +# ifndef OPENSSL_NO_DEPRECATED_3_1 +# define DEFINE_LHASH_OF_DEPRECATED(type) \ + static ossl_unused ossl_inline void \ + lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } +# else +# define DEFINE_LHASH_OF_DEPRECATED(type) +# endif + +# define DEFINE_LHASH_OF_EX(type) \ + LHASH_OF(type) { \ + union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; \ + }; \ + static ossl_unused ossl_inline LHASH_OF(type) * \ + lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ + { \ + return (LHASH_OF(type) *) \ + OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_free(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_flush(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_flush((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + { \ + return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type * \ + lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline int \ + lh_##type##_error(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_num_items(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long \ + lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + { \ + OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall(LHASH_OF(type) *lh, void (*doall)(type *)) \ + { \ + OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ + } \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_arg(LHASH_OF(type) *lh, \ + void (*doallarg)(type *, void *), void *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)doallarg, arg); \ + } \ + LHASH_OF(type) + +# define DEFINE_LHASH_OF(type) \ + DEFINE_LHASH_OF_EX(type); \ + DEFINE_LHASH_OF_DEPRECATED(type) \ + LHASH_OF(type) + +#define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ + int_implement_lhash_doall(type, argtype, const type) + +#define IMPLEMENT_LHASH_DOALL_ARG(type, argtype) \ + int_implement_lhash_doall(type, argtype, type) + +#define int_implement_lhash_doall(type, argtype, cbargtype) \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ + void (*fn)(cbargtype *, argtype *), \ + argtype *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, \ + (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + } \ + LHASH_OF(type) + +{- + generate_lhash_macros("OPENSSL_STRING") + .generate_lhash_macros("OPENSSL_CSTRING"); +-} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/macros.h b/deps/openssl/android/x86_64/usr/local/include/openssl/macros.h new file mode 100644 index 00000000..a614cd66 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/macros.h @@ -0,0 +1,325 @@ +/* + * Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_MACROS_H +# define OPENSSL_MACROS_H +# pragma once + +#include +#include + + +/* Helper macros for CPP string composition */ +# define OPENSSL_MSTR_HELPER(x) #x +# define OPENSSL_MSTR(x) OPENSSL_MSTR_HELPER(x) + +/* + * Sometimes OPENSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +# define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Generic deprecation macro + * + * If OPENSSL_SUPPRESS_DEPRECATED is defined, then OSSL_DEPRECATED and + * OSSL_DEPRECATED_FOR become no-ops + */ +# ifndef OSSL_DEPRECATED +# undef OSSL_DEPRECATED_FOR +# ifndef OPENSSL_SUPPRESS_DEPRECATED +# if defined(_MSC_VER) + /* + * MSVC supports __declspec(deprecated) since MSVC 2003 (13.10), + * and __declspec(deprecated(message)) since MSVC 2005 (14.00) + */ +# if _MSC_VER >= 1400 +# define OSSL_DEPRECATED(since) \ + __declspec(deprecated("Since OpenSSL " # since)) +# define OSSL_DEPRECATED_FOR(since, message) \ + __declspec(deprecated("Since OpenSSL " # since ";" message)) +# elif _MSC_VER >= 1310 +# define OSSL_DEPRECATED(since) __declspec(deprecated) +# define OSSL_DEPRECATED_FOR(since, message) __declspec(deprecated) +# endif +# elif defined(__GNUC__) + /* + * According to GCC documentation, deprecations with message appeared in + * GCC 4.5.0 + */ +# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# define OSSL_DEPRECATED(since) \ + __attribute__((deprecated("Since OpenSSL " # since))) +# define OSSL_DEPRECATED_FOR(since, message) \ + __attribute__((deprecated("Since OpenSSL " # since ";" message))) +# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# define OSSL_DEPRECATED(since) __attribute__((deprecated)) +# define OSSL_DEPRECATED_FOR(since, message) __attribute__((deprecated)) +# endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# define OSSL_DEPRECATED(since) __attribute__ ((deprecated)) +# define OSSL_DEPRECATED_FOR(since, message) __attribute__ ((deprecated)) +# endif +# endif +# endif +# endif + +/* + * Still not defined? Then define no-op macros. This means these macros + * are unsuitable for use in a typedef. + */ +# ifndef OSSL_DEPRECATED +# define OSSL_DEPRECATED(since) extern +# define OSSL_DEPRECATED_FOR(since, message) extern +# endif + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . If this is + * undefined, the value of the macro OPENSSL_CONFIGURED_API (defined in + * ) is the default. + * + * For any version number up until version 1.1.x, is expected to be + * the calculated version number 0xMNNFFPPSL. + * For version numbers 3.0 and on, is expected to be a computation + * of the major and minor numbers in decimal using this formula: + * + * MAJOR * 10000 + MINOR * 100 + * + * So version 3.0 becomes 30000, version 3.2 becomes 30200, etc. + */ + +/* + * We use the OPENSSL_API_COMPAT value to define API level macros. These + * macros are used to enable or disable features at that API version boundary. + */ + +# ifdef OPENSSL_API_LEVEL +# error "OPENSSL_API_LEVEL must not be defined by application" +# endif + +/* + * We figure out what API level was intended by simple numeric comparison. + * The lowest old style number we recognise is 0x00908000L, so we take some + * safety margin and assume that anything below 0x00900000L is a new style + * number. This allows new versions up to and including v943.71.83. + */ +# ifdef OPENSSL_API_COMPAT +# if OPENSSL_API_COMPAT < 0x900000L +# define OPENSSL_API_LEVEL (OPENSSL_API_COMPAT) +# else +# define OPENSSL_API_LEVEL \ + (((OPENSSL_API_COMPAT >> 28) & 0xF) * 10000 \ + + ((OPENSSL_API_COMPAT >> 20) & 0xFF) * 100 \ + + ((OPENSSL_API_COMPAT >> 12) & 0xFF)) +# endif +# endif + +/* + * If OPENSSL_API_COMPAT wasn't given, we use default numbers to set + * the API compatibility level. + */ +# ifndef OPENSSL_API_LEVEL +# if OPENSSL_CONFIGURED_API > 0 +# define OPENSSL_API_LEVEL (OPENSSL_CONFIGURED_API) +# else +# define OPENSSL_API_LEVEL \ + (OPENSSL_VERSION_MAJOR * 10000 + OPENSSL_VERSION_MINOR * 100) +# endif +# endif + +# if OPENSSL_API_LEVEL > OPENSSL_CONFIGURED_API +# error "The requested API level higher than the configured API compatibility level" +# endif + +/* + * Check of sane values. + */ +/* Can't go higher than the current version. */ +# if OPENSSL_API_LEVEL > (OPENSSL_VERSION_MAJOR * 10000 + OPENSSL_VERSION_MINOR * 100) +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif +/* OpenSSL will have no version 2.y.z */ +# if OPENSSL_API_LEVEL < 30000 && OPENSSL_API_LEVEL >= 20000 +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif +/* Below 0.9.8 is unacceptably low */ +# if OPENSSL_API_LEVEL < 908 +# error "OPENSSL_API_COMPAT expresses an impossible API compatibility level" +# endif + +/* + * Define macros for deprecation and simulated removal purposes. + * + * The macros OSSL_DEPRECATED_{major}_{minor} are always defined for + * all OpenSSL versions we care for. They can be used as attributes + * in function declarations where appropriate. + * + * The macros OPENSSL_NO_DEPRECATED_{major}_{minor} are defined for + * all OpenSSL versions up to or equal to the version given with + * OPENSSL_API_COMPAT. They are used as guards around anything that's + * deprecated up to that version, as an effect of the developer option + * 'no-deprecated'. + */ + +# undef OPENSSL_NO_DEPRECATED_3_0 +# undef OPENSSL_NO_DEPRECATED_1_1_1 +# undef OPENSSL_NO_DEPRECATED_1_1_0 +# undef OPENSSL_NO_DEPRECATED_1_0_2 +# undef OPENSSL_NO_DEPRECATED_1_0_1 +# undef OPENSSL_NO_DEPRECATED_1_0_0 +# undef OPENSSL_NO_DEPRECATED_0_9_8 + +# if OPENSSL_API_LEVEL >= 30100 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_1 OSSL_DEPRECATED(3.1) +# define OSSL_DEPRECATEDIN_3_1_FOR(msg) OSSL_DEPRECATED_FOR(3.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_1 +# endif +# else +# define OSSL_DEPRECATEDIN_3_1 +# define OSSL_DEPRECATEDIN_3_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 30000 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_3_0 OSSL_DEPRECATED(3.0) +# define OSSL_DEPRECATEDIN_3_0_FOR(msg) OSSL_DEPRECATED_FOR(3.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_3_0 +# endif +# else +# define OSSL_DEPRECATEDIN_3_0 +# define OSSL_DEPRECATEDIN_3_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10101 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_1_1 OSSL_DEPRECATED(1.1.1) +# define OSSL_DEPRECATEDIN_1_1_1_FOR(msg) OSSL_DEPRECATED_FOR(1.1.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_1_1 +# endif +# else +# define OSSL_DEPRECATEDIN_1_1_1 +# define OSSL_DEPRECATEDIN_1_1_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10100 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_1_0 OSSL_DEPRECATED(1.1.0) +# define OSSL_DEPRECATEDIN_1_1_0_FOR(msg) OSSL_DEPRECATED_FOR(1.1.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_1_0 +# endif +# else +# define OSSL_DEPRECATEDIN_1_1_0 +# define OSSL_DEPRECATEDIN_1_1_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10002 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_2 OSSL_DEPRECATED(1.0.2) +# define OSSL_DEPRECATEDIN_1_0_2_FOR(msg) OSSL_DEPRECATED_FOR(1.0.2, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_2 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_2 +# define OSSL_DEPRECATEDIN_1_0_2_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10001 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_1 OSSL_DEPRECATED(1.0.1) +# define OSSL_DEPRECATEDIN_1_0_1_FOR(msg) OSSL_DEPRECATED_FOR(1.0.1, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_1 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_1 +# define OSSL_DEPRECATEDIN_1_0_1_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 10000 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_1_0_0 OSSL_DEPRECATED(1.0.0) +# define OSSL_DEPRECATEDIN_1_0_0_FOR(msg) OSSL_DEPRECATED_FOR(1.0.0, msg) +# else +# define OPENSSL_NO_DEPRECATED_1_0_0 +# endif +# else +# define OSSL_DEPRECATEDIN_1_0_0 +# define OSSL_DEPRECATEDIN_1_0_0_FOR(msg) +# endif +# if OPENSSL_API_LEVEL >= 908 +# ifndef OPENSSL_NO_DEPRECATED +# define OSSL_DEPRECATEDIN_0_9_8 OSSL_DEPRECATED(0.9.8) +# define OSSL_DEPRECATEDIN_0_9_8_FOR(msg) OSSL_DEPRECATED_FOR(0.9.8, msg) +# else +# define OPENSSL_NO_DEPRECATED_0_9_8 +# endif +# else +# define OSSL_DEPRECATEDIN_0_9_8 +# define OSSL_DEPRECATEDIN_0_9_8_FOR(msg) +# endif + +/* + * Make our own variants of __FILE__ and __LINE__, depending on configuration + */ + +# ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +# endif + +/* + * __func__ was standardized in C99, so for any compiler that claims + * to implement that language level or newer, we assume we can safely + * use that symbol. + * + * GNU C also provides __FUNCTION__ since version 2, which predates + * C99. We can, however, only use this if __STDC_VERSION__ exists, + * as it's otherwise not allowed according to ISO C standards (C90). + * (compiling with GNU C's -pedantic tells us so) + * + * If none of the above applies, we check if the compiler is MSVC, + * and use __FUNCTION__ if that's the case. + */ +# ifndef OPENSSL_FUNC +# if defined(__STDC_VERSION__) +# if __STDC_VERSION__ >= 199901L +# define OPENSSL_FUNC __func__ +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define OPENSSL_FUNC __FUNCTION__ +# endif +# elif defined(_MSC_VER) +# define OPENSSL_FUNC __FUNCTION__ +# endif +/* + * If all these possibilities are exhausted, we give up and use a + * static string. + */ +# ifndef OPENSSL_FUNC +# define OPENSSL_FUNC "(unknown function)" +# endif +# endif + +# ifndef OSSL_CRYPTO_ALLOC +# if defined(__GNUC__) +# define OSSL_CRYPTO_ALLOC __attribute__((__malloc__)) +# elif defined(_MSC_VER) +# define OSSL_CRYPTO_ALLOC __declspec(restrict) +# else +# define OSSL_CRYPTO_ALLOC +# endif +# endif + +#endif /* OPENSSL_MACROS_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/md2.h b/deps/openssl/android/x86_64/usr/local/include/openssl/md2.h index 7faf8e3d..5d4cb77e 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/md2.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/md2.h @@ -1,27 +1,36 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD2_H -# define HEADER_MD2_H +#ifndef OPENSSL_MD2_H +# define OPENSSL_MD2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD2_H +# endif # include # ifndef OPENSSL_NO_MD2 -# include -# ifdef __cplusplus +# include +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define MD2_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) typedef unsigned char MD2_INT; -# define MD2_DIGEST_LENGTH 16 -# define MD2_BLOCK 16 +# define MD2_BLOCK 16 typedef struct MD2state_st { unsigned int num; @@ -29,16 +38,19 @@ typedef struct MD2state_st { MD2_INT cksm[MD2_BLOCK]; MD2_INT state[MD2_BLOCK]; } MD2_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *MD2_options(void); +OSSL_DEPRECATEDIN_3_0 int MD2_Init(MD2_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD2_Update(MD2_CTX *c, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int MD2_Final(unsigned char *md, MD2_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD2(const unsigned char *d, size_t n, + unsigned char *md); +# endif -const char *MD2_options(void); -int MD2_Init(MD2_CTX *c); -int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len); -int MD2_Final(unsigned char *md, MD2_CTX *c); -unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } +# endif # endif -# endif - #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/md4.h b/deps/openssl/android/x86_64/usr/local/include/openssl/md4.h index 940e29db..6c150a6c 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/md4.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/md4.h @@ -1,34 +1,43 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD4_H -# define HEADER_MD4_H +#ifndef OPENSSL_MD4_H +# define OPENSSL_MD4_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD4_H +# endif # include # ifndef OPENSSL_NO_MD4 -# include -# include -# ifdef __cplusplus +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif + +# define MD4_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! MD4_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define MD4_LONG unsigned int +# define MD4_LONG unsigned int -# define MD4_CBLOCK 64 -# define MD4_LBLOCK (MD4_CBLOCK/4) -# define MD4_DIGEST_LENGTH 16 +# define MD4_CBLOCK 64 +# define MD4_LBLOCK (MD4_CBLOCK/4) typedef struct MD4state_st { MD4_LONG A, B, C, D; @@ -36,16 +45,19 @@ typedef struct MD4state_st { MD4_LONG data[MD4_LBLOCK]; unsigned int num; } MD4_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MD4_Init(MD4_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD4_Update(MD4_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int MD4_Final(unsigned char *md, MD4_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD4(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void MD4_Transform(MD4_CTX *c, const unsigned char *b); +# endif -int MD4_Init(MD4_CTX *c); -int MD4_Update(MD4_CTX *c, const void *data, size_t len); -int MD4_Final(unsigned char *md, MD4_CTX *c); -unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); -void MD4_Transform(MD4_CTX *c, const unsigned char *b); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/md5.h b/deps/openssl/android/x86_64/usr/local/include/openssl/md5.h index 2deb7721..77a57734 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/md5.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/md5.h @@ -1,34 +1,42 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MD5_H -# define HEADER_MD5_H +#ifndef OPENSSL_MD5_H +# define OPENSSL_MD5_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MD5_H +# endif # include # ifndef OPENSSL_NO_MD5 -# include -# include -# ifdef __cplusplus +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif +# define MD5_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) /* * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! MD5_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define MD5_LONG unsigned int +# define MD5_LONG unsigned int -# define MD5_CBLOCK 64 -# define MD5_LBLOCK (MD5_CBLOCK/4) -# define MD5_DIGEST_LENGTH 16 +# define MD5_CBLOCK 64 +# define MD5_LBLOCK (MD5_CBLOCK/4) typedef struct MD5state_st { MD5_LONG A, B, C, D; @@ -36,15 +44,19 @@ typedef struct MD5state_st { MD5_LONG data[MD5_LBLOCK]; unsigned int num; } MD5_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MD5_Init(MD5_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MD5_Update(MD5_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int MD5_Final(unsigned char *md, MD5_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MD5(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void MD5_Transform(MD5_CTX *c, const unsigned char *b); +# endif -int MD5_Init(MD5_CTX *c); -int MD5_Update(MD5_CTX *c, const void *data, size_t len); -int MD5_Final(unsigned char *md, MD5_CTX *c); -unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); -void MD5_Transform(MD5_CTX *c, const unsigned char *b); -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/mdc2.h b/deps/openssl/android/x86_64/usr/local/include/openssl/mdc2.h index aabd2bfa..5a7ee289 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/mdc2.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/mdc2.h @@ -1,42 +1,55 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MDC2_H -# define HEADER_MDC2_H +#ifndef OPENSSL_MDC2_H +# define OPENSSL_MDC2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MDC2_H +# endif # include -#ifndef OPENSSL_NO_MDC2 -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_MDC2 +# include +# include +# ifdef __cplusplus extern "C" { -# endif +# endif -# define MDC2_BLOCK 8 -# define MDC2_DIGEST_LENGTH 16 +# define MDC2_DIGEST_LENGTH 16 + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +# define MDC2_BLOCK 8 typedef struct mdc2_ctx_st { unsigned int num; unsigned char data[MDC2_BLOCK]; DES_cblock h, hh; - int pad_type; /* either 1 or 2, default 1 */ + unsigned int pad_type; /* either 1 or 2, default 1 */ } MDC2_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int MDC2_Init(MDC2_CTX *c); +OSSL_DEPRECATEDIN_3_0 int MDC2_Update(MDC2_CTX *c, const unsigned char *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int MDC2_Final(unsigned char *md, MDC2_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *MDC2(const unsigned char *d, size_t n, + unsigned char *md); +# endif -int MDC2_Init(MDC2_CTX *c); -int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); -int MDC2_Final(unsigned char *md, MDC2_CTX *c); -unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/modes.h b/deps/openssl/android/x86_64/usr/local/include/openssl/modes.h index d544f98d..e1907991 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/modes.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/modes.h @@ -1,16 +1,23 @@ /* * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_MODES_H -# define HEADER_MODES_H +#ifndef OPENSSL_MODES_H +# define OPENSSL_MODES_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_MODES_H +# endif # include +# include # ifdef __cplusplus extern "C" { @@ -22,6 +29,10 @@ typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], int enc); +typedef void (*ecb128_f) (const unsigned char *in, unsigned char *out, + size_t len, const void *key, + int enc); + typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, size_t blocks, const void *key, const unsigned char ivec[16]); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/obj_mac.h b/deps/openssl/android/x86_64/usr/local/include/openssl/obj_mac.h index 53516a06..0e860276 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/obj_mac.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/obj_mac.h @@ -2,13 +2,17 @@ * WARNING: do not edit! * Generated by crypto/objects/objects.pl * - * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +#ifndef OPENSSL_OBJ_MAC_H +# define OPENSSL_OBJ_MAC_H +# pragma once + #define SN_undef "UNDEF" #define LN_undef "undefined" #define NID_undef 0 @@ -44,6 +48,11 @@ #define NID_identified_organization 676 #define OBJ_identified_organization OBJ_iso,3L +#define SN_gmac "GMAC" +#define LN_gmac "gmac" +#define NID_gmac 1195 +#define OBJ_gmac OBJ_iso,0L,9797L,3L,4L + #define SN_hmac_md5 "HMAC-MD5" #define LN_hmac_md5 "hmac-md5" #define NID_hmac_md5 780 @@ -845,6 +854,14 @@ #define NID_id_smime_ct_authEnvelopedData 1059 #define OBJ_id_smime_ct_authEnvelopedData OBJ_id_smime_ct,23L +#define SN_id_ct_routeOriginAuthz "id-ct-routeOriginAuthz" +#define NID_id_ct_routeOriginAuthz 1234 +#define OBJ_id_ct_routeOriginAuthz OBJ_id_smime_ct,24L + +#define SN_id_ct_rpkiManifest "id-ct-rpkiManifest" +#define NID_id_ct_rpkiManifest 1235 +#define OBJ_id_ct_rpkiManifest OBJ_id_smime_ct,26L + #define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" #define NID_id_ct_asciiTextWithCRLF 787 #define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L @@ -853,6 +870,22 @@ #define NID_id_ct_xml 1060 #define OBJ_id_ct_xml OBJ_id_smime_ct,28L +#define SN_id_ct_rpkiGhostbusters "id-ct-rpkiGhostbusters" +#define NID_id_ct_rpkiGhostbusters 1236 +#define OBJ_id_ct_rpkiGhostbusters OBJ_id_smime_ct,35L + +#define SN_id_ct_resourceTaggedAttest "id-ct-resourceTaggedAttest" +#define NID_id_ct_resourceTaggedAttest 1237 +#define OBJ_id_ct_resourceTaggedAttest OBJ_id_smime_ct,36L + +#define SN_id_ct_geofeedCSVwithCRLF "id-ct-geofeedCSVwithCRLF" +#define NID_id_ct_geofeedCSVwithCRLF 1246 +#define OBJ_id_ct_geofeedCSVwithCRLF OBJ_id_smime_ct,47L + +#define SN_id_ct_signedChecklist "id-ct-signedChecklist" +#define NID_id_ct_signedChecklist 1247 +#define OBJ_id_ct_signedChecklist OBJ_id_smime_ct,48L + #define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" #define NID_id_smime_aa_receiptRequest 212 #define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L @@ -1179,6 +1212,11 @@ #define NID_sm3WithRSAEncryption 1144 #define OBJ_sm3WithRSAEncryption OBJ_sm_scheme,504L +#define SN_SM2_with_SM3 "SM2-SM3" +#define LN_SM2_with_SM3 "SM2-with-SM3" +#define NID_SM2_with_SM3 1204 +#define OBJ_SM2_with_SM3 OBJ_sm_scheme,501L + #define LN_hmacWithSHA224 "hmacWithSHA224" #define NID_hmacWithSHA224 798 #define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L @@ -1385,6 +1423,10 @@ #define NID_id_qcs 267 #define OBJ_id_qcs OBJ_id_pkix,11L +#define SN_id_cp "id-cp" +#define NID_id_cp 1238 +#define OBJ_id_cp OBJ_id_pkix,14L + #define SN_id_cct "id-cct" #define NID_id_cct 268 #define OBJ_id_cct OBJ_id_pkix,12L @@ -1518,6 +1560,14 @@ #define NID_tlsfeature 1020 #define OBJ_tlsfeature OBJ_id_pe,24L +#define SN_sbgp_ipAddrBlockv2 "sbgp-ipAddrBlockv2" +#define NID_sbgp_ipAddrBlockv2 1239 +#define OBJ_sbgp_ipAddrBlockv2 OBJ_id_pe,28L + +#define SN_sbgp_autonomousSysNumv2 "sbgp-autonomousSysNumv2" +#define NID_sbgp_autonomousSysNumv2 1240 +#define OBJ_sbgp_autonomousSysNumv2 OBJ_id_pe,29L + #define SN_id_qt_cps "id-qt-cps" #define LN_id_qt_cps "Policy Qualifier CPS" #define NID_id_qt_cps 164 @@ -1637,6 +1687,26 @@ #define NID_cmcRA 1132 #define OBJ_cmcRA OBJ_id_kp,28L +#define SN_cmcArchive "cmcArchive" +#define LN_cmcArchive "CMC Archive Server" +#define NID_cmcArchive 1219 +#define OBJ_cmcArchive OBJ_id_kp,29L + +#define SN_id_kp_bgpsec_router "id-kp-bgpsec-router" +#define LN_id_kp_bgpsec_router "BGPsec Router" +#define NID_id_kp_bgpsec_router 1220 +#define OBJ_id_kp_bgpsec_router OBJ_id_kp,30L + +#define SN_id_kp_BrandIndicatorforMessageIdentification "id-kp-BrandIndicatorforMessageIdentification" +#define LN_id_kp_BrandIndicatorforMessageIdentification "Brand Indicator for Message Identification" +#define NID_id_kp_BrandIndicatorforMessageIdentification 1221 +#define OBJ_id_kp_BrandIndicatorforMessageIdentification OBJ_id_kp,31L + +#define SN_cmKGA "cmKGA" +#define LN_cmKGA "Certificate Management Key Generation Authority" +#define NID_cmKGA 1222 +#define OBJ_cmKGA OBJ_id_kp,32L + #define SN_id_it_caProtEncCert "id-it-caProtEncCert" #define NID_id_it_caProtEncCert 298 #define OBJ_id_it_caProtEncCert OBJ_id_it,1L @@ -1701,6 +1771,18 @@ #define NID_id_it_suppLangTags 784 #define OBJ_id_it_suppLangTags OBJ_id_it,16L +#define SN_id_it_caCerts "id-it-caCerts" +#define NID_id_it_caCerts 1223 +#define OBJ_id_it_caCerts OBJ_id_it,17L + +#define SN_id_it_rootCaKeyUpdate "id-it-rootCaKeyUpdate" +#define NID_id_it_rootCaKeyUpdate 1224 +#define OBJ_id_it_rootCaKeyUpdate OBJ_id_it,18L + +#define SN_id_it_certReqTemplate "id-it-certReqTemplate" +#define NID_id_it_certReqTemplate 1225 +#define OBJ_id_it_certReqTemplate OBJ_id_it,19L + #define SN_id_regCtrl "id-regCtrl" #define NID_id_regCtrl 313 #define OBJ_id_regCtrl OBJ_id_pkip,1L @@ -1846,6 +1928,26 @@ #define NID_id_on_permanentIdentifier 858 #define OBJ_id_on_permanentIdentifier OBJ_id_on,3L +#define SN_XmppAddr "id-on-xmppAddr" +#define LN_XmppAddr "XmppAddr" +#define NID_XmppAddr 1209 +#define OBJ_XmppAddr OBJ_id_on,5L + +#define SN_SRVName "id-on-dnsSRV" +#define LN_SRVName "SRVName" +#define NID_SRVName 1210 +#define OBJ_SRVName OBJ_id_on,7L + +#define SN_NAIRealm "id-on-NAIRealm" +#define LN_NAIRealm "NAIRealm" +#define NID_NAIRealm 1211 +#define OBJ_NAIRealm OBJ_id_on,8L + +#define SN_id_on_SmtpUTF8Mailbox "id-on-SmtpUTF8Mailbox" +#define LN_id_on_SmtpUTF8Mailbox "Smtp UTF8 Mailbox" +#define NID_id_on_SmtpUTF8Mailbox 1208 +#define OBJ_id_on_SmtpUTF8Mailbox OBJ_id_on,9L + #define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" #define NID_id_pda_dateOfBirth 348 #define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L @@ -1894,6 +1996,14 @@ #define NID_id_qcs_pkixQCSyntax_v1 359 #define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L +#define SN_ipAddr_asNumber "ipAddr-asNumber" +#define NID_ipAddr_asNumber 1241 +#define OBJ_ipAddr_asNumber OBJ_id_cp,2L + +#define SN_ipAddr_asNumberv2 "ipAddr-asNumberv2" +#define NID_ipAddr_asNumberv2 1242 +#define OBJ_ipAddr_asNumberv2 OBJ_id_cp,3L + #define SN_id_cct_crs "id-cct-crs" #define NID_id_cct_crs 360 #define OBJ_id_cct_crs OBJ_id_cct,1L @@ -1946,6 +2056,21 @@ #define NID_caRepository 785 #define OBJ_caRepository OBJ_id_ad,5L +#define SN_rpkiManifest "rpkiManifest" +#define LN_rpkiManifest "RPKI Manifest" +#define NID_rpkiManifest 1243 +#define OBJ_rpkiManifest OBJ_id_ad,10L + +#define SN_signedObject "signedObject" +#define LN_signedObject "Signed Object" +#define NID_signedObject 1244 +#define OBJ_signedObject OBJ_id_ad,11L + +#define SN_rpkiNotify "rpkiNotify" +#define LN_rpkiNotify "RPKI Notify" +#define NID_rpkiNotify 1245 +#define OBJ_rpkiNotify OBJ_id_ad,13L + #define OBJ_id_pkix_OCSP OBJ_ad_OCSP #define SN_id_pkix_OCSP_basic "basicOCSPResponse" @@ -2113,15 +2238,25 @@ #define NID_ripemd160WithRSA 119 #define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L +#define SN_blake2bmac "BLAKE2BMAC" +#define LN_blake2bmac "blake2bmac" +#define NID_blake2bmac 1201 +#define OBJ_blake2bmac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L + +#define SN_blake2smac "BLAKE2SMAC" +#define LN_blake2smac "blake2smac" +#define NID_blake2smac 1202 +#define OBJ_blake2smac 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L + #define SN_blake2b512 "BLAKE2b512" #define LN_blake2b512 "blake2b512" #define NID_blake2b512 1056 -#define OBJ_blake2b512 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L,16L +#define OBJ_blake2b512 OBJ_blake2bmac,16L #define SN_blake2s256 "BLAKE2s256" #define LN_blake2s256 "blake2s256" #define NID_blake2s256 1057 -#define OBJ_blake2s256 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L,8L +#define OBJ_blake2s256 OBJ_blake2smac,8L #define SN_sxnet "SXNetID" #define LN_sxnet "Strong Extranet ID" @@ -2971,6 +3106,16 @@ #define NID_hmac_sha3_512 1105 #define OBJ_hmac_sha3_512 OBJ_nist_hashalgs,16L +#define SN_kmac128 "KMAC128" +#define LN_kmac128 "kmac128" +#define NID_kmac128 1196 +#define OBJ_kmac128 OBJ_nist_hashalgs,19L + +#define SN_kmac256 "KMAC256" +#define LN_kmac256 "kmac256" +#define NID_kmac256 1197 +#define OBJ_kmac256 OBJ_nist_hashalgs,20L + #define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L #define SN_dsa_with_SHA224 "dsa_with_SHA224" @@ -4230,25 +4375,25 @@ #define NID_id_tc26_cipher_gostr3412_2015_magma 1173 #define OBJ_id_tc26_cipher_gostr3412_2015_magma OBJ_id_tc26_cipher,1L -#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm "id-tc26-cipher-gostr3412-2015-magma-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm 1174 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L +#define SN_magma_ctr_acpkm "magma-ctr-acpkm" +#define NID_magma_ctr_acpkm 1174 +#define OBJ_magma_ctr_acpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L -#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac 1175 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L +#define SN_magma_ctr_acpkm_omac "magma-ctr-acpkm-omac" +#define NID_magma_ctr_acpkm_omac 1175 +#define OBJ_magma_ctr_acpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L #define SN_id_tc26_cipher_gostr3412_2015_kuznyechik "id-tc26-cipher-gostr3412-2015-kuznyechik" #define NID_id_tc26_cipher_gostr3412_2015_kuznyechik 1176 #define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik OBJ_id_tc26_cipher,2L -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm 1177 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L +#define SN_kuznyechik_ctr_acpkm "kuznyechik-ctr-acpkm" +#define NID_kuznyechik_ctr_acpkm 1177 +#define OBJ_kuznyechik_ctr_acpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L -#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac" -#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac 1178 -#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L +#define SN_kuznyechik_ctr_acpkm_omac "kuznyechik-ctr-acpkm-omac" +#define NID_kuznyechik_ctr_acpkm_omac 1178 +#define OBJ_kuznyechik_ctr_acpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L #define SN_id_tc26_agreement "id-tc26-agreement" #define NID_id_tc26_agreement 991 @@ -4270,17 +4415,17 @@ #define NID_id_tc26_wrap_gostr3412_2015_magma 1180 #define OBJ_id_tc26_wrap_gostr3412_2015_magma OBJ_id_tc26_wrap,1L -#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 "id-tc26-wrap-gostr3412-2015-magma-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 1181 -#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L +#define SN_magma_kexp15 "magma-kexp15" +#define NID_magma_kexp15 1181 +#define OBJ_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L #define SN_id_tc26_wrap_gostr3412_2015_kuznyechik "id-tc26-wrap-gostr3412-2015-kuznyechik" #define NID_id_tc26_wrap_gostr3412_2015_kuznyechik 1182 #define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik OBJ_id_tc26_wrap,2L -#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 "id-tc26-wrap-gostr3412-2015-kuznyechik-kexp15" -#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 1183 -#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L +#define SN_kuznyechik_kexp15 "kuznyechik-kexp15" +#define NID_kuznyechik_kexp15 1183 +#define OBJ_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L #define SN_id_tc26_constants "id-tc26-constants" #define NID_id_tc26_constants 994 @@ -4370,6 +4515,11 @@ #define NID_SNILS 1006 #define OBJ_SNILS OBJ_member_body,643L,100L,3L +#define SN_OGRNIP "OGRNIP" +#define LN_OGRNIP "OGRNIP" +#define NID_OGRNIP 1226 +#define OBJ_OGRNIP OBJ_member_body,643L,100L,5L + #define SN_subjectSignTool "subjectSignTool" #define LN_subjectSignTool "Signing Tool of Subject" #define NID_subjectSignTool 1007 @@ -4380,23 +4530,58 @@ #define NID_issuerSignTool 1008 #define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L -#define SN_grasshopper_ecb "grasshopper-ecb" -#define NID_grasshopper_ecb 1012 +#define SN_classSignTool "classSignTool" +#define LN_classSignTool "Class of Signing Tool" +#define NID_classSignTool 1227 +#define OBJ_classSignTool OBJ_member_body,643L,100L,113L -#define SN_grasshopper_ctr "grasshopper-ctr" -#define NID_grasshopper_ctr 1013 +#define SN_classSignToolKC1 "classSignToolKC1" +#define LN_classSignToolKC1 "Class of Signing Tool KC1" +#define NID_classSignToolKC1 1228 +#define OBJ_classSignToolKC1 OBJ_member_body,643L,100L,113L,1L -#define SN_grasshopper_ofb "grasshopper-ofb" -#define NID_grasshopper_ofb 1014 +#define SN_classSignToolKC2 "classSignToolKC2" +#define LN_classSignToolKC2 "Class of Signing Tool KC2" +#define NID_classSignToolKC2 1229 +#define OBJ_classSignToolKC2 OBJ_member_body,643L,100L,113L,2L -#define SN_grasshopper_cbc "grasshopper-cbc" -#define NID_grasshopper_cbc 1015 +#define SN_classSignToolKC3 "classSignToolKC3" +#define LN_classSignToolKC3 "Class of Signing Tool KC3" +#define NID_classSignToolKC3 1230 +#define OBJ_classSignToolKC3 OBJ_member_body,643L,100L,113L,3L -#define SN_grasshopper_cfb "grasshopper-cfb" -#define NID_grasshopper_cfb 1016 +#define SN_classSignToolKB1 "classSignToolKB1" +#define LN_classSignToolKB1 "Class of Signing Tool KB1" +#define NID_classSignToolKB1 1231 +#define OBJ_classSignToolKB1 OBJ_member_body,643L,100L,113L,4L -#define SN_grasshopper_mac "grasshopper-mac" -#define NID_grasshopper_mac 1017 +#define SN_classSignToolKB2 "classSignToolKB2" +#define LN_classSignToolKB2 "Class of Signing Tool KB2" +#define NID_classSignToolKB2 1232 +#define OBJ_classSignToolKB2 OBJ_member_body,643L,100L,113L,5L + +#define SN_classSignToolKA1 "classSignToolKA1" +#define LN_classSignToolKA1 "Class of Signing Tool KA1" +#define NID_classSignToolKA1 1233 +#define OBJ_classSignToolKA1 OBJ_member_body,643L,100L,113L,6L + +#define SN_kuznyechik_ecb "kuznyechik-ecb" +#define NID_kuznyechik_ecb 1012 + +#define SN_kuznyechik_ctr "kuznyechik-ctr" +#define NID_kuznyechik_ctr 1013 + +#define SN_kuznyechik_ofb "kuznyechik-ofb" +#define NID_kuznyechik_ofb 1014 + +#define SN_kuznyechik_cbc "kuznyechik-cbc" +#define NID_kuznyechik_cbc 1015 + +#define SN_kuznyechik_cfb "kuznyechik-cfb" +#define NID_kuznyechik_cfb 1016 + +#define SN_kuznyechik_mac "kuznyechik-mac" +#define NID_kuznyechik_mac 1017 #define SN_magma_ecb "magma-ecb" #define NID_magma_ecb 1187 @@ -4970,6 +5155,22 @@ #define LN_hkdf "hkdf" #define NID_hkdf 1036 +#define SN_sshkdf "SSHKDF" +#define LN_sshkdf "sshkdf" +#define NID_sshkdf 1203 + +#define SN_sskdf "SSKDF" +#define LN_sskdf "sskdf" +#define NID_sskdf 1205 + +#define SN_x942kdf "X942KDF" +#define LN_x942kdf "x942kdf" +#define NID_x942kdf 1207 + +#define SN_x963kdf "X963KDF" +#define LN_x963kdf "x963kdf" +#define NID_x963kdf 1206 + #define SN_id_pkinit "id-pkinit" #define NID_id_pkinit 1031 #define OBJ_id_pkinit 1L,3L,6L,1L,5L,2L,3L @@ -5036,6 +5237,10 @@ #define LN_kx_gost "kx-gost" #define NID_kx_gost 1045 +#define SN_kx_gost18 "KxGOST18" +#define LN_kx_gost18 "kx-gost18" +#define NID_kx_gost18 1218 + #define SN_kx_any "KxANY" #define LN_kx_any "kx-any" #define NID_kx_any 1063 @@ -5099,6 +5304,24 @@ #define SN_ffdhe8192 "ffdhe8192" #define NID_ffdhe8192 1130 +#define SN_modp_1536 "modp_1536" +#define NID_modp_1536 1212 + +#define SN_modp_2048 "modp_2048" +#define NID_modp_2048 1213 + +#define SN_modp_3072 "modp_3072" +#define NID_modp_3072 1214 + +#define SN_modp_4096 "modp_4096" +#define NID_modp_4096 1215 + +#define SN_modp_6144 "modp_6144" +#define NID_modp_6144 1216 + +#define SN_modp_8192 "modp_8192" +#define NID_modp_8192 1217 + #define SN_ISO_UA "ISO-UA" #define NID_ISO_UA 1150 #define OBJ_ISO_UA OBJ_member_body,804L @@ -5196,3 +5419,63 @@ #define LN_uacurve9 "DSTU curve 9" #define NID_uacurve9 1169 #define OBJ_uacurve9 OBJ_dstu4145le,2L,9L + +#define SN_aes_128_siv "AES-128-SIV" +#define LN_aes_128_siv "aes-128-siv" +#define NID_aes_128_siv 1198 + +#define SN_aes_192_siv "AES-192-SIV" +#define LN_aes_192_siv "aes-192-siv" +#define NID_aes_192_siv 1199 + +#define SN_aes_256_siv "AES-256-SIV" +#define LN_aes_256_siv "aes-256-siv" +#define NID_aes_256_siv 1200 + +#endif /* OPENSSL_OBJ_MAC_H */ + +#ifndef OPENSSL_NO_DEPRECATED_3_0 + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm SN_magma_ctr_acpkm +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm NID_magma_ctr_acpkm +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_magma_ctr_acpkm + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac SN_magma_ctr_acpkm_omac +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac NID_magma_ctr_acpkm_omac +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_magma_ctr_acpkm_omac + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm SN_kuznyechik_ctr_acpkm +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm NID_kuznyechik_ctr_acpkm +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_kuznyechik_ctr_acpkm + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac SN_kuznyechik_ctr_acpkm_omac +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac NID_kuznyechik_ctr_acpkm_omac +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_kuznyechik_ctr_acpkm_omac + +#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 SN_magma_kexp15 +#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 NID_magma_kexp15 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_magma_kexp15 + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 SN_kuznyechik_kexp15 +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 NID_kuznyechik_kexp15 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_kuznyechik_kexp15 + +#define SN_grasshopper_ecb SN_kuznyechik_ecb +#define NID_grasshopper_ecb NID_kuznyechik_ecb + +#define SN_grasshopper_ctr SN_kuznyechik_ctr +#define NID_grasshopper_ctr NID_kuznyechik_ctr + +#define SN_grasshopper_ofb SN_kuznyechik_ofb +#define NID_grasshopper_ofb NID_kuznyechik_ofb + +#define SN_grasshopper_cbc SN_kuznyechik_cbc +#define NID_grasshopper_cbc NID_kuznyechik_cbc + +#define SN_grasshopper_cfb SN_kuznyechik_cfb +#define NID_grasshopper_cfb NID_kuznyechik_cfb + +#define SN_grasshopper_mac SN_kuznyechik_mac +#define NID_grasshopper_mac NID_kuznyechik_mac + +#endif /* OPENSSL_NO_DEPRECATED_3_0 */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/objects.h b/deps/openssl/android/x86_64/usr/local/include/openssl/objects.h index 5e8b5762..9ea91c27 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/objects.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/objects.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OBJECTS_H -# define HEADER_OBJECTS_H +#ifndef OPENSSL_OBJECTS_H +# define OPENSSL_OBJECTS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OBJECTS_H +# endif # include # include @@ -20,7 +26,9 @@ # define OBJ_NAME_TYPE_CIPHER_METH 0x02 # define OBJ_NAME_TYPE_PKEY_METH 0x03 # define OBJ_NAME_TYPE_COMP_METH 0x04 -# define OBJ_NAME_TYPE_NUM 0x05 +# define OBJ_NAME_TYPE_MAC_METH 0x05 +# define OBJ_NAME_TYPE_KDF_METH 0x06 +# define OBJ_NAME_TYPE_NUM 0x07 # define OBJ_NAME_ALIAS 0x8000 @@ -55,7 +63,7 @@ void OBJ_NAME_do_all_sorted(int type, void (*fn) (const OBJ_NAME *, void *arg), void *arg); -ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); +DECLARE_ASN1_DUP_FUNCTION_name(ASN1_OBJECT, OBJ) ASN1_OBJECT *OBJ_nid2obj(int n); const char *OBJ_nid2ln(int n); const char *OBJ_nid2sn(int n); @@ -155,7 +163,7 @@ const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, int OBJ_new_nid(int num); int OBJ_add_object(const ASN1_OBJECT *obj); int OBJ_create(const char *oid, const char *sn, const char *ln); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OBJ_cleanup() while(0) continue #endif int OBJ_create_objects(BIO *in); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/objectserr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/objectserr.h index 02e166f1..585217f6 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/objectserr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/objectserr.h @@ -1,42 +1,28 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OBJERR_H -# define HEADER_OBJERR_H +#ifndef OPENSSL_OBJECTSERR_H +# define OPENSSL_OBJECTSERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OBJ_strings(void); -/* - * OBJ function codes. - */ -# define OBJ_F_OBJ_ADD_OBJECT 105 -# define OBJ_F_OBJ_ADD_SIGID 107 -# define OBJ_F_OBJ_CREATE 100 -# define OBJ_F_OBJ_DUP 101 -# define OBJ_F_OBJ_NAME_NEW_INDEX 106 -# define OBJ_F_OBJ_NID2LN 102 -# define OBJ_F_OBJ_NID2OBJ 103 -# define OBJ_F_OBJ_NID2SN 104 -# define OBJ_F_OBJ_TXT2OBJ 108 /* * OBJ reason codes. */ # define OBJ_R_OID_EXISTS 102 # define OBJ_R_UNKNOWN_NID 101 +# define OBJ_R_UNKNOWN_OBJECT_NAME 103 #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ocsp.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ocsp.h index 4d759a49..142b1831 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ocsp.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ocsp.h @@ -1,16 +1,29 @@ /* - * Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ocsp.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OCSP_H -# define HEADER_OCSP_H -#include + +#ifndef OPENSSL_OCSP_H +# define OPENSSL_OCSP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OCSP_H +# endif + +# include +# include +# include /* * These definitions are outside the OPENSSL_NO_OCSP guard because although for @@ -26,30 +39,34 @@ * superseded (4), * cessationOfOperation (5), * certificateHold (6), - * removeFromCRL (8) } + * -- value 7 is not used + * removeFromCRL (8), + * privilegeWithdrawn (9), + * aACompromise (10) } */ -# define OCSP_REVOKED_STATUS_NOSTATUS -1 -# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 -# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 -# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 -# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 -# define OCSP_REVOKED_STATUS_SUPERSEDED 4 -# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 -# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 -# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9 +# define OCSP_REVOKED_STATUS_AACOMPROMISE 10 # ifndef OPENSSL_NO_OCSP -# include # include # include # include # include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif /* Various flags and values */ @@ -67,19 +84,68 @@ extern "C" { # define OCSP_TRUSTOTHER 0x200 # define OCSP_RESPID_KEY 0x400 # define OCSP_NOTIME 0x800 +# define OCSP_PARTIAL_CHAIN 0x1000 typedef struct ocsp_cert_id_st OCSP_CERTID; - -DEFINE_STACK_OF(OCSP_CERTID) - typedef struct ocsp_one_request_st OCSP_ONEREQ; - -DEFINE_STACK_OF(OCSP_ONEREQ) - typedef struct ocsp_req_info_st OCSP_REQINFO; typedef struct ocsp_signature_st OCSP_SIGNATURE; typedef struct ocsp_request_st OCSP_REQUEST; +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_CERTID, OCSP_CERTID, OCSP_CERTID) +#define sk_OCSP_CERTID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_value(sk, idx) ((OCSP_CERTID *)OPENSSL_sk_value(ossl_check_const_OCSP_CERTID_sk_type(sk), (idx))) +#define sk_OCSP_CERTID_new(cmp) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new(ossl_check_OCSP_CERTID_compfunc_type(cmp))) +#define sk_OCSP_CERTID_new_null() ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_null()) +#define sk_OCSP_CERTID_new_reserve(cmp, n) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_CERTID_compfunc_type(cmp), (n))) +#define sk_OCSP_CERTID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_CERTID_sk_type(sk), (n)) +#define sk_OCSP_CERTID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_delete(sk, i) ((OCSP_CERTID *)OPENSSL_sk_delete(ossl_check_OCSP_CERTID_sk_type(sk), (i))) +#define sk_OCSP_CERTID_delete_ptr(sk, ptr) ((OCSP_CERTID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr))) +#define sk_OCSP_CERTID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_pop(sk) ((OCSP_CERTID *)OPENSSL_sk_pop(ossl_check_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_shift(sk) ((OCSP_CERTID *)OPENSSL_sk_shift(ossl_check_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_CERTID_sk_type(sk),ossl_check_OCSP_CERTID_freefunc_type(freefunc)) +#define sk_OCSP_CERTID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), (idx)) +#define sk_OCSP_CERTID_set(sk, idx, ptr) ((OCSP_CERTID *)OPENSSL_sk_set(ossl_check_OCSP_CERTID_sk_type(sk), (idx), ossl_check_OCSP_CERTID_type(ptr))) +#define sk_OCSP_CERTID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr)) +#define sk_OCSP_CERTID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_type(ptr), pnum) +#define sk_OCSP_CERTID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_CERTID_sk_type(sk)) +#define sk_OCSP_CERTID_dup(sk) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_CERTID_sk_type(sk))) +#define sk_OCSP_CERTID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_CERTID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_copyfunc_type(copyfunc), ossl_check_OCSP_CERTID_freefunc_type(freefunc))) +#define sk_OCSP_CERTID_set_cmp_func(sk, cmp) ((sk_OCSP_CERTID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_CERTID_sk_type(sk), ossl_check_OCSP_CERTID_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_ONEREQ, OCSP_ONEREQ, OCSP_ONEREQ) +#define sk_OCSP_ONEREQ_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_value(sk, idx) ((OCSP_ONEREQ *)OPENSSL_sk_value(ossl_check_const_OCSP_ONEREQ_sk_type(sk), (idx))) +#define sk_OCSP_ONEREQ_new(cmp) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new(ossl_check_OCSP_ONEREQ_compfunc_type(cmp))) +#define sk_OCSP_ONEREQ_new_null() ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_null()) +#define sk_OCSP_ONEREQ_new_reserve(cmp, n) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_ONEREQ_compfunc_type(cmp), (n))) +#define sk_OCSP_ONEREQ_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_ONEREQ_sk_type(sk), (n)) +#define sk_OCSP_ONEREQ_free(sk) OPENSSL_sk_free(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_delete(sk, i) ((OCSP_ONEREQ *)OPENSSL_sk_delete(ossl_check_OCSP_ONEREQ_sk_type(sk), (i))) +#define sk_OCSP_ONEREQ_delete_ptr(sk, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr))) +#define sk_OCSP_ONEREQ_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_pop(sk) ((OCSP_ONEREQ *)OPENSSL_sk_pop(ossl_check_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_shift(sk) ((OCSP_ONEREQ *)OPENSSL_sk_shift(ossl_check_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_ONEREQ_sk_type(sk),ossl_check_OCSP_ONEREQ_freefunc_type(freefunc)) +#define sk_OCSP_ONEREQ_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), (idx)) +#define sk_OCSP_ONEREQ_set(sk, idx, ptr) ((OCSP_ONEREQ *)OPENSSL_sk_set(ossl_check_OCSP_ONEREQ_sk_type(sk), (idx), ossl_check_OCSP_ONEREQ_type(ptr))) +#define sk_OCSP_ONEREQ_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr)) +#define sk_OCSP_ONEREQ_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_type(ptr), pnum) +#define sk_OCSP_ONEREQ_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_ONEREQ_sk_type(sk)) +#define sk_OCSP_ONEREQ_dup(sk) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_dup(ossl_check_const_OCSP_ONEREQ_sk_type(sk))) +#define sk_OCSP_ONEREQ_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_ONEREQ) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_copyfunc_type(copyfunc), ossl_check_OCSP_ONEREQ_freefunc_type(freefunc))) +#define sk_OCSP_ONEREQ_set_cmp_func(sk, cmp) ((sk_OCSP_ONEREQ_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_ONEREQ_sk_type(sk), ossl_check_OCSP_ONEREQ_compfunc_type(cmp))) + + # define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 # define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 # define OCSP_RESPONSE_STATUS_INTERNALERROR 2 @@ -92,7 +158,33 @@ typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; # define V_OCSP_RESPID_NAME 0 # define V_OCSP_RESPID_KEY 1 -DEFINE_STACK_OF(OCSP_RESPID) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_RESPID, OCSP_RESPID, OCSP_RESPID) +#define sk_OCSP_RESPID_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_value(sk, idx) ((OCSP_RESPID *)OPENSSL_sk_value(ossl_check_const_OCSP_RESPID_sk_type(sk), (idx))) +#define sk_OCSP_RESPID_new(cmp) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new(ossl_check_OCSP_RESPID_compfunc_type(cmp))) +#define sk_OCSP_RESPID_new_null() ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_null()) +#define sk_OCSP_RESPID_new_reserve(cmp, n) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_RESPID_compfunc_type(cmp), (n))) +#define sk_OCSP_RESPID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_RESPID_sk_type(sk), (n)) +#define sk_OCSP_RESPID_free(sk) OPENSSL_sk_free(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_delete(sk, i) ((OCSP_RESPID *)OPENSSL_sk_delete(ossl_check_OCSP_RESPID_sk_type(sk), (i))) +#define sk_OCSP_RESPID_delete_ptr(sk, ptr) ((OCSP_RESPID *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr))) +#define sk_OCSP_RESPID_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_pop(sk) ((OCSP_RESPID *)OPENSSL_sk_pop(ossl_check_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_shift(sk) ((OCSP_RESPID *)OPENSSL_sk_shift(ossl_check_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_RESPID_sk_type(sk),ossl_check_OCSP_RESPID_freefunc_type(freefunc)) +#define sk_OCSP_RESPID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), (idx)) +#define sk_OCSP_RESPID_set(sk, idx, ptr) ((OCSP_RESPID *)OPENSSL_sk_set(ossl_check_OCSP_RESPID_sk_type(sk), (idx), ossl_check_OCSP_RESPID_type(ptr))) +#define sk_OCSP_RESPID_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr)) +#define sk_OCSP_RESPID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_type(ptr), pnum) +#define sk_OCSP_RESPID_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_RESPID_sk_type(sk)) +#define sk_OCSP_RESPID_dup(sk) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_dup(ossl_check_const_OCSP_RESPID_sk_type(sk))) +#define sk_OCSP_RESPID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_RESPID) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_copyfunc_type(copyfunc), ossl_check_OCSP_RESPID_freefunc_type(freefunc))) +#define sk_OCSP_RESPID_set_cmp_func(sk, cmp) ((sk_OCSP_RESPID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_RESPID_sk_type(sk), ossl_check_OCSP_RESPID_compfunc_type(cmp))) + typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; @@ -103,7 +195,33 @@ typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; typedef struct ocsp_single_response_st OCSP_SINGLERESP; -DEFINE_STACK_OF(OCSP_SINGLERESP) +SKM_DEFINE_STACK_OF_INTERNAL(OCSP_SINGLERESP, OCSP_SINGLERESP, OCSP_SINGLERESP) +#define sk_OCSP_SINGLERESP_num(sk) OPENSSL_sk_num(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_value(sk, idx) ((OCSP_SINGLERESP *)OPENSSL_sk_value(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), (idx))) +#define sk_OCSP_SINGLERESP_new(cmp) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp))) +#define sk_OCSP_SINGLERESP_new_null() ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_null()) +#define sk_OCSP_SINGLERESP_new_reserve(cmp, n) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_new_reserve(ossl_check_OCSP_SINGLERESP_compfunc_type(cmp), (n))) +#define sk_OCSP_SINGLERESP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OCSP_SINGLERESP_sk_type(sk), (n)) +#define sk_OCSP_SINGLERESP_free(sk) OPENSSL_sk_free(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_zero(sk) OPENSSL_sk_zero(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_delete(sk, i) ((OCSP_SINGLERESP *)OPENSSL_sk_delete(ossl_check_OCSP_SINGLERESP_sk_type(sk), (i))) +#define sk_OCSP_SINGLERESP_delete_ptr(sk, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_delete_ptr(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr))) +#define sk_OCSP_SINGLERESP_push(sk, ptr) OPENSSL_sk_push(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_pop(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_pop(ossl_check_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_shift(sk) ((OCSP_SINGLERESP *)OPENSSL_sk_shift(ossl_check_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OCSP_SINGLERESP_sk_type(sk),ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc)) +#define sk_OCSP_SINGLERESP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), (idx)) +#define sk_OCSP_SINGLERESP_set(sk, idx, ptr) ((OCSP_SINGLERESP *)OPENSSL_sk_set(ossl_check_OCSP_SINGLERESP_sk_type(sk), (idx), ossl_check_OCSP_SINGLERESP_type(ptr))) +#define sk_OCSP_SINGLERESP_find(sk, ptr) OPENSSL_sk_find(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr)) +#define sk_OCSP_SINGLERESP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_type(ptr), pnum) +#define sk_OCSP_SINGLERESP_sort(sk) OPENSSL_sk_sort(ossl_check_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OCSP_SINGLERESP_sk_type(sk)) +#define sk_OCSP_SINGLERESP_dup(sk) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_dup(ossl_check_const_OCSP_SINGLERESP_sk_type(sk))) +#define sk_OCSP_SINGLERESP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OCSP_SINGLERESP) *)OPENSSL_sk_deep_copy(ossl_check_const_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_copyfunc_type(copyfunc), ossl_check_OCSP_SINGLERESP_freefunc_type(freefunc))) +#define sk_OCSP_SINGLERESP_set_cmp_func(sk, cmp) ((sk_OCSP_SINGLERESP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OCSP_SINGLERESP_sk_type(sk), ossl_check_OCSP_SINGLERESP_compfunc_type(cmp))) + typedef struct ocsp_response_data_st OCSP_RESPDATA; @@ -143,28 +261,37 @@ typedef struct ocsp_service_locator_st OCSP_SERVICELOC; ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) # define OCSP_CERTSTATUS_dup(cs)\ - (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ - (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) + (OCSP_CERTSTATUS*)ASN1_dup((i2d_of_void *)i2d_OCSP_CERTSTATUS,\ + (d2i_of_void *)d2i_OCSP_CERTSTATUS,(char *)(cs)) -OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); +DECLARE_ASN1_DUP_FUNCTION(OCSP_CERTID) +OSSL_HTTP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, + const OCSP_REQUEST *req, int buf_size); OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); -OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, - int maxline); -int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); -int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); -OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); -void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); -void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); -int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, - ASN1_VALUE *val); -int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, - const ASN1_ITEM *it); -BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); -int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); -int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); -int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, - const char *name, const char *value); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef OSSL_HTTP_REQ_CTX OCSP_REQ_CTX; +# define OCSP_REQ_CTX_new(io, buf_size) \ + OSSL_HTTP_REQ_CTX_new(io, io, buf_size) +# define OCSP_REQ_CTX_free OSSL_HTTP_REQ_CTX_free +# define OCSP_REQ_CTX_http(rctx, op, path) \ + (OSSL_HTTP_REQ_CTX_set_expected(rctx, NULL, 1 /* asn1 */, 0, 0) && \ + OSSL_HTTP_REQ_CTX_set_request_line(rctx, strcmp(op, "POST") == 0, \ + NULL, NULL, path)) +# define OCSP_REQ_CTX_add1_header OSSL_HTTP_REQ_CTX_add1_header +# define OCSP_REQ_CTX_i2d(r, it, req) \ + OSSL_HTTP_REQ_CTX_set1_req(r, "application/ocsp-request", it, req) +# define OCSP_REQ_CTX_set1_req(r, req) \ + OCSP_REQ_CTX_i2d(r, ASN1_ITEM_rptr(OCSP_REQUEST), (ASN1_VALUE *)(req)) +# define OCSP_REQ_CTX_nbio OSSL_HTTP_REQ_CTX_nbio +# define OCSP_REQ_CTX_nbio_d2i OSSL_HTTP_REQ_CTX_nbio_d2i +# define OCSP_sendreq_nbio(p, r) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(r, (ASN1_VALUE **)(p), \ + ASN1_ITEM_rptr(OCSP_RESPONSE)) +# define OCSP_REQ_CTX_get0_mem_bio OSSL_HTTP_REQ_CTX_get0_mem_bio +# define OCSP_set_max_response_length OSSL_HTTP_REQ_CTX_set_max_response_length +# endif OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, const X509 *issuer); @@ -181,7 +308,7 @@ int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); -int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); +int OCSP_request_set1_name(OCSP_REQUEST *req, const X509_NAME *nm); int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); int OCSP_request_sign(OCSP_REQUEST *req, @@ -226,8 +353,8 @@ int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, X509_STORE *store, unsigned long flags); -int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, - int *pssl); +# define OCSP_parse_url(url, host, port, path, ssl) \ + OSSL_HTTP_parse_url(url, ssl, NULL, host, port, NULL, path, NULL, NULL) int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); @@ -254,7 +381,11 @@ int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, X509 *signer, EVP_MD_CTX *ctx, STACK_OF(X509) *certs, unsigned long flags); int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key_ex(OCSP_RESPID *respid, X509 *cert, + OSSL_LIB_CTX *libctx, const char *propq); int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match_ex(OCSP_RESPID *respid, X509 *cert, OSSL_LIB_CTX *libctx, + const char *propq); int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); @@ -263,7 +394,7 @@ X509_EXTENSION *OCSP_accept_responses_new(char **oids); X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); -X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, const char **urls); +X509_EXTENSION *OCSP_url_svcloc_new(const X509_NAME *issuer, const char **urls); int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); @@ -348,5 +479,5 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, # ifdef __cplusplus } # endif -# endif +# endif /* !defined(OPENSSL_NO_OCSP) */ #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ocsp.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/ocsp.h.in new file mode 100644 index 00000000..e2cc2716 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ocsp.h.in @@ -0,0 +1,387 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_OCSP_H +# define OPENSSL_OCSP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OCSP_H +# endif + +# include +# include +# include + +/* + * These definitions are outside the OPENSSL_NO_OCSP guard because although for + * historical reasons they have OCSP_* names, they can actually be used + * independently of OCSP. E.g. see RFC5280 + */ +/*- + * CRLReason ::= ENUMERATED { + * unspecified (0), + * keyCompromise (1), + * cACompromise (2), + * affiliationChanged (3), + * superseded (4), + * cessationOfOperation (5), + * certificateHold (6), + * -- value 7 is not used + * removeFromCRL (8), + * privilegeWithdrawn (9), + * aACompromise (10) } + */ +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 +# define OCSP_REVOKED_STATUS_PRIVILEGEWITHDRAWN 9 +# define OCSP_REVOKED_STATUS_AACOMPROMISE 10 + + +# ifndef OPENSSL_NO_OCSP + +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Various flags and values */ + +# define OCSP_DEFAULT_NONCE_LENGTH 16 + +# define OCSP_NOCERTS 0x1 +# define OCSP_NOINTERN 0x2 +# define OCSP_NOSIGS 0x4 +# define OCSP_NOCHAIN 0x8 +# define OCSP_NOVERIFY 0x10 +# define OCSP_NOEXPLICIT 0x20 +# define OCSP_NOCASIGN 0x40 +# define OCSP_NODELEGATED 0x80 +# define OCSP_NOCHECKS 0x100 +# define OCSP_TRUSTOTHER 0x200 +# define OCSP_RESPID_KEY 0x400 +# define OCSP_NOTIME 0x800 +# define OCSP_PARTIAL_CHAIN 0x1000 + +typedef struct ocsp_cert_id_st OCSP_CERTID; +typedef struct ocsp_one_request_st OCSP_ONEREQ; +typedef struct ocsp_req_info_st OCSP_REQINFO; +typedef struct ocsp_signature_st OCSP_SIGNATURE; +typedef struct ocsp_request_st OCSP_REQUEST; + +{- + generate_stack_macros("OCSP_CERTID") + .generate_stack_macros("OCSP_ONEREQ"); +-} + +# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 +# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 +# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 +# define OCSP_RESPONSE_STATUS_TRYLATER 3 +# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 +# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 + +typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; + +# define V_OCSP_RESPID_NAME 0 +# define V_OCSP_RESPID_KEY 1 + +{- + generate_stack_macros("OCSP_RESPID"); +-} + +typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; + +# define V_OCSP_CERTSTATUS_GOOD 0 +# define V_OCSP_CERTSTATUS_REVOKED 1 +# define V_OCSP_CERTSTATUS_UNKNOWN 2 + +typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; +typedef struct ocsp_single_response_st OCSP_SINGLERESP; + +{- + generate_stack_macros("OCSP_SINGLERESP"); +-} + +typedef struct ocsp_response_data_st OCSP_RESPDATA; + +typedef struct ocsp_basic_response_st OCSP_BASICRESP; + +typedef struct ocsp_crl_id_st OCSP_CRLID; +typedef struct ocsp_service_locator_st OCSP_SERVICELOC; + +# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" +# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" + +# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) + +# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) + +# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ + (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST, \ + bp,(char **)(x),cb,NULL) + +# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb) (OCSP_RESPONSE *)PEM_ASN1_read_bio(\ + (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE, \ + bp,(char **)(x),cb,NULL) + +# define PEM_write_bio_OCSP_REQUEST(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define PEM_write_bio_OCSP_RESPONSE(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) + +# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) + +# define ASN1_BIT_STRING_digest(data,type,md,len) \ + ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) + +# define OCSP_CERTSTATUS_dup(cs)\ + (OCSP_CERTSTATUS*)ASN1_dup((i2d_of_void *)i2d_OCSP_CERTSTATUS,\ + (d2i_of_void *)d2i_OCSP_CERTSTATUS,(char *)(cs)) + +DECLARE_ASN1_DUP_FUNCTION(OCSP_CERTID) + +OSSL_HTTP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, + const OCSP_REQUEST *req, int buf_size); +OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef OSSL_HTTP_REQ_CTX OCSP_REQ_CTX; +# define OCSP_REQ_CTX_new(io, buf_size) \ + OSSL_HTTP_REQ_CTX_new(io, io, buf_size) +# define OCSP_REQ_CTX_free OSSL_HTTP_REQ_CTX_free +# define OCSP_REQ_CTX_http(rctx, op, path) \ + (OSSL_HTTP_REQ_CTX_set_expected(rctx, NULL, 1 /* asn1 */, 0, 0) && \ + OSSL_HTTP_REQ_CTX_set_request_line(rctx, strcmp(op, "POST") == 0, \ + NULL, NULL, path)) +# define OCSP_REQ_CTX_add1_header OSSL_HTTP_REQ_CTX_add1_header +# define OCSP_REQ_CTX_i2d(r, it, req) \ + OSSL_HTTP_REQ_CTX_set1_req(r, "application/ocsp-request", it, req) +# define OCSP_REQ_CTX_set1_req(r, req) \ + OCSP_REQ_CTX_i2d(r, ASN1_ITEM_rptr(OCSP_REQUEST), (ASN1_VALUE *)(req)) +# define OCSP_REQ_CTX_nbio OSSL_HTTP_REQ_CTX_nbio +# define OCSP_REQ_CTX_nbio_d2i OSSL_HTTP_REQ_CTX_nbio_d2i +# define OCSP_sendreq_nbio(p, r) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(r, (ASN1_VALUE **)(p), \ + ASN1_ITEM_rptr(OCSP_RESPONSE)) +# define OCSP_REQ_CTX_get0_mem_bio OSSL_HTTP_REQ_CTX_get0_mem_bio +# define OCSP_set_max_response_length OSSL_HTTP_REQ_CTX_set_max_response_length +# endif + +OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, + const X509 *issuer); + +OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, + const X509_NAME *issuerName, + const ASN1_BIT_STRING *issuerKey, + const ASN1_INTEGER *serialNumber); + +OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); + +int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); +int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); +int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); +int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); + +int OCSP_request_set1_name(OCSP_REQUEST *req, const X509_NAME *nm); +int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); + +int OCSP_request_sign(OCSP_REQUEST *req, + X509 *signer, + EVP_PKEY *key, + const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); + +int OCSP_response_status(OCSP_RESPONSE *resp); +OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); + +const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); +const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs); +const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer, + STACK_OF(X509) *extra_certs); + +int OCSP_resp_count(OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); +const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(const OCSP_BASICRESP* bs); +const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, + const ASN1_OCTET_STRING **pid, + const X509_NAME **pname); +int OCSP_resp_get1_id(const OCSP_BASICRESP *bs, + ASN1_OCTET_STRING **pid, + X509_NAME **pname); + +int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); +int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, + int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, + ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); + +int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, + X509_STORE *store, unsigned long flags); + +# define OCSP_parse_url(url, host, port, path, ssl) \ + OSSL_HTTP_parse_url(url, ssl, NULL, host, port, NULL, path, NULL, NULL) + +int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); +int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); + +int OCSP_request_onereq_count(OCSP_REQUEST *req); +OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); +OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); +int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, + ASN1_OCTET_STRING **pikeyHash, + ASN1_INTEGER **pserial, OCSP_CERTID *cid); +int OCSP_request_is_signed(OCSP_REQUEST *req); +OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, + OCSP_CERTID *cid, + int status, int reason, + ASN1_TIME *revtime, + ASN1_TIME *thisupd, + ASN1_TIME *nextupd); +int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); +int OCSP_basic_sign(OCSP_BASICRESP *brsp, + X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, + X509 *signer, EVP_MD_CTX *ctx, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key_ex(OCSP_RESPID *respid, X509 *cert, + OSSL_LIB_CTX *libctx, const char *propq); +int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match_ex(OCSP_RESPID *respid, X509 *cert, OSSL_LIB_CTX *libctx, + const char *propq); +int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); + +X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); + +X509_EXTENSION *OCSP_accept_responses_new(char **oids); + +X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); + +X509_EXTENSION *OCSP_url_svcloc_new(const X509_NAME *issuer, const char **urls); + +int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); +int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); +int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); +X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); +X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); +void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, + int *idx); +int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); + +int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); +int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); +int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, const ASN1_OBJECT *obj, int lastpos); +int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); +X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); +X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); +void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); +int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); + +int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); +int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); +int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); +X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); +void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, + int *idx); +int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); + +int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); +int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); +int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); +X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); +void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, + int *idx); +int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); +const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x); + +DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) +DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) +DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) +DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) +DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) +DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) +DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) + +const char *OCSP_response_status_str(long s); +const char *OCSP_cert_status_str(long s); +const char *OCSP_crl_reason_str(long s); + +int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); +int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); + +int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, + X509_STORE *st, unsigned long flags); + + +# ifdef __cplusplus +} +# endif +# endif /* !defined(OPENSSL_NO_OCSP) */ +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ocsperr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ocsperr.h index 8dd9e01a..46a0523c 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ocsperr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ocsperr.h @@ -1,57 +1,34 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OCSPERR_H -# define HEADER_OCSPERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_OCSPERR_H +# define OPENSSL_OCSPERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_OCSP -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OCSP_strings(void); - -/* - * OCSP function codes. - */ -# define OCSP_F_D2I_OCSP_NONCE 102 -# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 -# define OCSP_F_OCSP_BASIC_SIGN 104 -# define OCSP_F_OCSP_BASIC_SIGN_CTX 119 -# define OCSP_F_OCSP_BASIC_VERIFY 105 -# define OCSP_F_OCSP_CERT_ID_NEW 101 -# define OCSP_F_OCSP_CHECK_DELEGATED 106 -# define OCSP_F_OCSP_CHECK_IDS 107 -# define OCSP_F_OCSP_CHECK_ISSUER 108 -# define OCSP_F_OCSP_CHECK_VALIDITY 115 -# define OCSP_F_OCSP_MATCH_ISSUERID 109 -# define OCSP_F_OCSP_PARSE_URL 114 -# define OCSP_F_OCSP_REQUEST_SIGN 110 -# define OCSP_F_OCSP_REQUEST_VERIFY 116 -# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 -# define OCSP_F_PARSE_HTTP_LINE1 118 /* * OCSP reason codes. */ # define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 # define OCSP_R_DIGEST_ERR 102 +# define OCSP_R_DIGEST_NAME_ERR 106 +# define OCSP_R_DIGEST_SIZE_ERR 107 # define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 # define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 -# define OCSP_R_ERROR_PARSING_URL 121 # define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 # define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 # define OCSP_R_NOT_BASIC_RESPONSE 104 @@ -63,8 +40,6 @@ int ERR_load_OCSP_strings(void); # define OCSP_R_REQUEST_NOT_SIGNED 128 # define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 # define OCSP_R_ROOT_CA_NOT_TRUSTED 112 -# define OCSP_R_SERVER_RESPONSE_ERROR 114 -# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 # define OCSP_R_SIGNATURE_FAILURE 117 # define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 # define OCSP_R_STATUS_EXPIRED 125 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/opensslconf.h b/deps/openssl/android/x86_64/usr/local/include/openssl/opensslconf.h index 1cf2b594..1e83371f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/opensslconf.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/opensslconf.h @@ -1,200 +1,17 @@ /* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/opensslconf.h.in + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#include +#ifndef OPENSSL_OPENSSLCONF_H +# define OPENSSL_OPENSSLCONF_H +# pragma once -#ifdef __cplusplus -extern "C" { -#endif +# include +# include -#ifdef OPENSSL_ALGORITHM_DEFINES -# error OPENSSL_ALGORITHM_DEFINES no longer supported -#endif - -/* - * OpenSSL was configured with the following options: - */ - -#ifndef OPENSSL_NO_MD2 -# define OPENSSL_NO_MD2 -#endif -#ifndef OPENSSL_NO_RC5 -# define OPENSSL_NO_RC5 -#endif -#ifndef OPENSSL_RAND_SEED_OS -# define OPENSSL_RAND_SEED_OS -#endif -#ifndef OPENSSL_NO_AFALGENG -# define OPENSSL_NO_AFALGENG -#endif -#ifndef OPENSSL_NO_ASAN -# define OPENSSL_NO_ASAN -#endif -#ifndef OPENSSL_NO_CRYPTO_MDEBUG -# define OPENSSL_NO_CRYPTO_MDEBUG -#endif -#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE -#endif -#ifndef OPENSSL_NO_DEVCRYPTOENG -# define OPENSSL_NO_DEVCRYPTOENG -#endif -#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -# define OPENSSL_NO_EC_NISTP_64_GCC_128 -#endif -#ifndef OPENSSL_NO_EGD -# define OPENSSL_NO_EGD -#endif -#ifndef OPENSSL_NO_EXTERNAL_TESTS -# define OPENSSL_NO_EXTERNAL_TESTS -#endif -#ifndef OPENSSL_NO_FUZZ_AFL -# define OPENSSL_NO_FUZZ_AFL -#endif -#ifndef OPENSSL_NO_FUZZ_LIBFUZZER -# define OPENSSL_NO_FUZZ_LIBFUZZER -#endif -#ifndef OPENSSL_NO_HEARTBEATS -# define OPENSSL_NO_HEARTBEATS -#endif -#ifndef OPENSSL_NO_MSAN -# define OPENSSL_NO_MSAN -#endif -#ifndef OPENSSL_NO_SCTP -# define OPENSSL_NO_SCTP -#endif -#ifndef OPENSSL_NO_SSL_TRACE -# define OPENSSL_NO_SSL_TRACE -#endif -#ifndef OPENSSL_NO_SSL3 -# define OPENSSL_NO_SSL3 -#endif -#ifndef OPENSSL_NO_SSL3_METHOD -# define OPENSSL_NO_SSL3_METHOD -#endif -#ifndef OPENSSL_NO_TESTS -# define OPENSSL_NO_TESTS -#endif -#ifndef OPENSSL_NO_UBSAN -# define OPENSSL_NO_UBSAN -#endif -#ifndef OPENSSL_NO_UNIT_TEST -# define OPENSSL_NO_UNIT_TEST -#endif -#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS -# define OPENSSL_NO_WEAK_SSL_CIPHERS -#endif -#ifndef OPENSSL_NO_DYNAMIC_ENGINE -# define OPENSSL_NO_DYNAMIC_ENGINE -#endif - - -/* - * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers - * don't like that. This will hopefully silence them. - */ -#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; - -/* - * Applications should use -DOPENSSL_API_COMPAT= to suppress the - * declarations of functions deprecated in or before . Otherwise, they - * still won't see them if the library has been built to disable deprecated - * functions. - */ -#ifndef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# elif defined(__SUNPRO_C) -# if (__SUNPRO_C >= 0x5130) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# endif -#endif - -#ifndef OPENSSL_FILE -# ifdef OPENSSL_NO_FILENAMES -# define OPENSSL_FILE "" -# define OPENSSL_LINE 0 -# else -# define OPENSSL_FILE __FILE__ -# define OPENSSL_LINE __LINE__ -# endif -#endif - -#ifndef OPENSSL_MIN_API -# define OPENSSL_MIN_API 0 -#endif - -#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API -# undef OPENSSL_API_COMPAT -# define OPENSSL_API_COMPAT OPENSSL_MIN_API -#endif - -/* - * Do not deprecate things to be deprecated in version 1.2.0 before the - * OpenSSL version number matches. - */ -#if OPENSSL_VERSION_NUMBER < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) f; -#elif OPENSSL_API_COMPAT < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_2_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10100000L -# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_1_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10000000L -# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_0_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x00908000L -# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_0_9_8(f) -#endif - -/* Generate 80386 code? */ -#undef I386_ONLY - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD - -#undef OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* - * The following are cipher-specific, but are part of the public API. - */ -#if !defined(OPENSSL_SYS_UEFI) -# undef BN_LLONG -/* Only one for the following should be defined */ -# define SIXTY_FOUR_BIT_LONG -# undef SIXTY_FOUR_BIT -# undef THIRTY_TWO_BIT -#endif - -#define RC4_INT unsigned int - -#ifdef __cplusplus -} -#endif +#endif /* OPENSSL_OPENSSLCONF_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/opensslconf.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/opensslconf.h.in deleted file mode 100644 index 06270922..00000000 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/opensslconf.h.in +++ /dev/null @@ -1,160 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef OPENSSL_ALGORITHM_DEFINES -# error OPENSSL_ALGORITHM_DEFINES no longer supported -#endif - -/* - * OpenSSL was configured with the following options: - */ - -{- if (@{$config{openssl_sys_defines}}) { - foreach (@{$config{openssl_sys_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_ 1\n"; - $OUT .= "#endif\n"; - } - } - foreach (@{$config{openssl_api_defines}}) { - (my $macro, my $value) = $_ =~ /^(.*?)=(.*?)$/; - $OUT .= "#define $macro $value\n"; - } - if (@{$config{openssl_algorithm_defines}}) { - foreach (@{$config{openssl_algorithm_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - if (@{$config{openssl_thread_defines}}) { - foreach (@{$config{openssl_thread_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - if (@{$config{openssl_other_defines}}) { - foreach (@{$config{openssl_other_defines}}) { - $OUT .= "#ifndef $_\n"; - $OUT .= "# define $_\n"; - $OUT .= "#endif\n"; - } - } - ""; --} - -/* - * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers - * don't like that. This will hopefully silence them. - */ -#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; - -/* - * Applications should use -DOPENSSL_API_COMPAT= to suppress the - * declarations of functions deprecated in or before . Otherwise, they - * still won't see them if the library has been built to disable deprecated - * functions. - */ -#ifndef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f; -# ifdef __GNUC__ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# elif defined(__SUNPRO_C) -# if (__SUNPRO_C >= 0x5130) -# undef DECLARE_DEPRECATED -# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); -# endif -# endif -#endif - -#ifndef OPENSSL_FILE -# ifdef OPENSSL_NO_FILENAMES -# define OPENSSL_FILE "" -# define OPENSSL_LINE 0 -# else -# define OPENSSL_FILE __FILE__ -# define OPENSSL_LINE __LINE__ -# endif -#endif - -#ifndef OPENSSL_MIN_API -# define OPENSSL_MIN_API 0 -#endif - -#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API -# undef OPENSSL_API_COMPAT -# define OPENSSL_API_COMPAT OPENSSL_MIN_API -#endif - -/* - * Do not deprecate things to be deprecated in version 1.2.0 before the - * OpenSSL version number matches. - */ -#if OPENSSL_VERSION_NUMBER < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) f; -#elif OPENSSL_API_COMPAT < 0x10200000L -# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_2_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10100000L -# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_1_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x10000000L -# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_1_0_0(f) -#endif - -#if OPENSSL_API_COMPAT < 0x00908000L -# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) -#else -# define DEPRECATEDIN_0_9_8(f) -#endif - -/* Generate 80386 code? */ -{- $config{processor} eq "386" ? "#define" : "#undef" -} I386_ONLY - -#undef OPENSSL_UNISTD -#define OPENSSL_UNISTD {- $target{unistd} -} - -{- $config{export_var_as_fn} ? "#define" : "#undef" -} OPENSSL_EXPORT_VAR_AS_FUNCTION - -/* - * The following are cipher-specific, but are part of the public API. - */ -#if !defined(OPENSSL_SYS_UEFI) -{- $config{bn_ll} ? "# define" : "# undef" -} BN_LLONG -/* Only one for the following should be defined */ -{- $config{b64l} ? "# define" : "# undef" -} SIXTY_FOUR_BIT_LONG -{- $config{b64} ? "# define" : "# undef" -} SIXTY_FOUR_BIT -{- $config{b32} ? "# define" : "# undef" -} THIRTY_TWO_BIT -#endif - -#define RC4_INT {- $config{rc4_int} -} - -#ifdef __cplusplus -} -#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h b/deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h index 5667d471..6b7364f4 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h @@ -1,101 +1,114 @@ /* - * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslv.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OPENSSLV_H -# define HEADER_OPENSSLV_H +#ifndef OPENSSL_OPENSSLV_H +# define OPENSSL_OPENSSLV_H +# pragma once -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif -/*- - * Numeric release version identifier: - * MNNFFPPS: major minor fix patch status - * The status nibble has one of the values 0 for development, 1 to e for betas - * 1 to 14, and f for release. The patch level is exactly that. - * For example: - * 0.9.3-dev 0x00903000 - * 0.9.3-beta1 0x00903001 - * 0.9.3-beta2-dev 0x00903002 - * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) - * 0.9.3 0x0090300f - * 0.9.3a 0x0090301f - * 0.9.4 0x0090400f - * 1.2.3z 0x102031af - * - * For continuity reasons (because 0.9.5 is already out, and is coded - * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level - * part is slightly different, by setting the highest bit. This means - * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start - * with 0x0090600S... - * - * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) - * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for - * major minor fix final patch/beta) +/* + * SECTION 1: VERSION DATA. These will change for each release */ -# define OPENSSL_VERSION_NUMBER 0x1010117fL -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1w 11 Sep 2023" -/*- - * The macros below are to be used for shared library (.so, .dll, ...) - * versioning. That kind of versioning works a bit differently between - * operating systems. The most usual scheme is to set a major and a minor - * number, and have the runtime loader check that the major number is equal - * to what it was at application link time, while the minor number has to - * be greater or equal to what it was at application link time. With this - * scheme, the version number is usually part of the file name, like this: +/* + * Base version macros * - * libcrypto.so.0.9 - * - * Some unixen also make a softlink with the major version number only: - * - * libcrypto.so.0 - * - * On Tru64 and IRIX 6.x it works a little bit differently. There, the - * shared library version is stored in the file, and is actually a series - * of versions, separated by colons. The rightmost version present in the - * library when linking an application is stored in the application to be - * matched at run time. When the application is run, a check is done to - * see if the library version stored in the application matches any of the - * versions in the version string of the library itself. - * This version string can be constructed in any way, depending on what - * kind of matching is desired. However, to implement the same scheme as - * the one used in the other unixen, all compatible versions, from lowest - * to highest, should be part of the string. Consecutive builds would - * give the following versions strings: - * - * 3.0 - * 3.0:3.1 - * 3.0:3.1:3.2 - * 4.0 - * 4.0:4.1 - * - * Notice how version 4 is completely incompatible with version, and - * therefore give the breach you can see. - * - * There may be other schemes as well that I haven't yet discovered. - * - * So, here's the way it works here: first of all, the library version - * number doesn't need at all to match the overall OpenSSL version. - * However, it's nice and more understandable if it actually does. - * The current library version is stored in the macro SHLIB_VERSION_NUMBER, - * which is just a piece of text in the format "M.m.e" (Major, minor, edit). - * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, - * we need to keep a history of version numbers, which is done in the - * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and - * should only keep the versions that are binary compatible with the current. + * These macros express version number MAJOR.MINOR.PATCH exactly */ -# define SHLIB_VERSION_HISTORY "" -# define SHLIB_VERSION_NUMBER "1.1" +# define OPENSSL_VERSION_MAJOR 3 +# define OPENSSL_VERSION_MINOR 1 +# define OPENSSL_VERSION_PATCH 3 +/* + * Additional version information + * + * These are also part of the new version scheme, but aren't part + * of the version number itself. + */ -#ifdef __cplusplus +/* Could be: #define OPENSSL_VERSION_PRE_RELEASE "-alpha.1" */ +# define OPENSSL_VERSION_PRE_RELEASE "" +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+fips" */ +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+vendor.1" */ +# define OPENSSL_VERSION_BUILD_METADATA "" + +/* + * Note: The OpenSSL Project will never define OPENSSL_VERSION_BUILD_METADATA + * to be anything but the empty string. Its use is entirely reserved for + * others + */ + +/* + * Shared library version + * + * This is strictly to express ABI version, which may or may not + * be related to the API version expressed with the macros above. + * This is defined in free form. + */ +# define OPENSSL_SHLIB_VERSION 3 + +/* + * SECTION 2: USEFUL MACROS + */ + +/* For checking general API compatibility when preprocessing */ +# define OPENSSL_VERSION_PREREQ(maj,min) \ + ((OPENSSL_VERSION_MAJOR << 16) + OPENSSL_VERSION_MINOR >= ((maj) << 16) + (min)) + +/* + * Macros to get the version in easily digested string form, both the short + * "MAJOR.MINOR.PATCH" variant (where MAJOR, MINOR and PATCH are replaced + * with the values from the corresponding OPENSSL_VERSION_ macros) and the + * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and + * OPENSSL_VERSION_BUILD_METADATA_STR appended. + */ +# define OPENSSL_VERSION_STR "3.1.3" +# define OPENSSL_FULL_VERSION_STR "3.1.3" + +/* + * SECTION 3: ADDITIONAL METADATA + * + * These strings are defined separately to allow them to be parsable. + */ +# define OPENSSL_RELEASE_DATE "19 Sep 2023" + +/* + * SECTION 4: BACKWARD COMPATIBILITY + */ + +# define OPENSSL_VERSION_TEXT "OpenSSL 3.1.3 19 Sep 2023" + +/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ +# ifdef OPENSSL_VERSION_PRE_RELEASE +# define _OPENSSL_VERSION_PRE_RELEASE 0x0L +# else +# define _OPENSSL_VERSION_PRE_RELEASE 0xfL +# endif +# define OPENSSL_VERSION_NUMBER \ + ( (OPENSSL_VERSION_MAJOR<<28) \ + |(OPENSSL_VERSION_MINOR<<20) \ + |(OPENSSL_VERSION_PATCH<<4) \ + |_OPENSSL_VERSION_PRE_RELEASE ) + +# ifdef __cplusplus } -#endif -#endif /* HEADER_OPENSSLV_H */ +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OPENSSLV_H +# endif + +#endif /* OPENSSL_OPENSSLV_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h.in new file mode 100644 index 00000000..3f47a2ac --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h.in @@ -0,0 +1,113 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_OPENSSLV_H +# define OPENSSL_OPENSSLV_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * SECTION 1: VERSION DATA. These will change for each release + */ + +/* + * Base version macros + * + * These macros express version number MAJOR.MINOR.PATCH exactly + */ +# define OPENSSL_VERSION_MAJOR {- $config{major} -} +# define OPENSSL_VERSION_MINOR {- $config{minor} -} +# define OPENSSL_VERSION_PATCH {- $config{patch} -} + +/* + * Additional version information + * + * These are also part of the new version scheme, but aren't part + * of the version number itself. + */ + +/* Could be: #define OPENSSL_VERSION_PRE_RELEASE "-alpha.1" */ +# define OPENSSL_VERSION_PRE_RELEASE "{- $config{prerelease} -}" +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+fips" */ +/* Could be: #define OPENSSL_VERSION_BUILD_METADATA "+vendor.1" */ +# define OPENSSL_VERSION_BUILD_METADATA "{- $config{build_metadata} -}" + +/* + * Note: The OpenSSL Project will never define OPENSSL_VERSION_BUILD_METADATA + * to be anything but the empty string. Its use is entirely reserved for + * others + */ + +/* + * Shared library version + * + * This is strictly to express ABI version, which may or may not + * be related to the API version expressed with the macros above. + * This is defined in free form. + */ +# define OPENSSL_SHLIB_VERSION {- $config{shlib_version} -} + +/* + * SECTION 2: USEFUL MACROS + */ + +/* For checking general API compatibility when preprocessing */ +# define OPENSSL_VERSION_PREREQ(maj,min) \ + ((OPENSSL_VERSION_MAJOR << 16) + OPENSSL_VERSION_MINOR >= ((maj) << 16) + (min)) + +/* + * Macros to get the version in easily digested string form, both the short + * "MAJOR.MINOR.PATCH" variant (where MAJOR, MINOR and PATCH are replaced + * with the values from the corresponding OPENSSL_VERSION_ macros) and the + * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and + * OPENSSL_VERSION_BUILD_METADATA_STR appended. + */ +# define OPENSSL_VERSION_STR "{- $config{version} -}" +# define OPENSSL_FULL_VERSION_STR "{- $config{full_version} -}" + +/* + * SECTION 3: ADDITIONAL METADATA + * + * These strings are defined separately to allow them to be parsable. + */ +# define OPENSSL_RELEASE_DATE "{- $config{release_date} -}" + +/* + * SECTION 4: BACKWARD COMPATIBILITY + */ + +# define OPENSSL_VERSION_TEXT "OpenSSL {- "$config{full_version} $config{release_date}" -}" + +/* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ +# ifdef OPENSSL_VERSION_PRE_RELEASE +# define _OPENSSL_VERSION_PRE_RELEASE 0x0L +# else +# define _OPENSSL_VERSION_PRE_RELEASE 0xfL +# endif +# define OPENSSL_VERSION_NUMBER \ + ( (OPENSSL_VERSION_MAJOR<<28) \ + |(OPENSSL_VERSION_MINOR<<20) \ + |(OPENSSL_VERSION_PATCH<<4) \ + |_OPENSSL_VERSION_PRE_RELEASE ) + +# ifdef __cplusplus +} +# endif + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OPENSSLV_H +# endif + +#endif /* OPENSSL_OPENSSLV_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ossl_typ.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ossl_typ.h index e0edfaaf..82a58988 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ossl_typ.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ossl_typ.h @@ -1,197 +1,16 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OPENSSL_TYPES_H -# define HEADER_OPENSSL_TYPES_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -# include - -# ifdef NO_ASN1_TYPEDEFS -# define ASN1_INTEGER ASN1_STRING -# define ASN1_ENUMERATED ASN1_STRING -# define ASN1_BIT_STRING ASN1_STRING -# define ASN1_OCTET_STRING ASN1_STRING -# define ASN1_PRINTABLESTRING ASN1_STRING -# define ASN1_T61STRING ASN1_STRING -# define ASN1_IA5STRING ASN1_STRING -# define ASN1_UTCTIME ASN1_STRING -# define ASN1_GENERALIZEDTIME ASN1_STRING -# define ASN1_TIME ASN1_STRING -# define ASN1_GENERALSTRING ASN1_STRING -# define ASN1_UNIVERSALSTRING ASN1_STRING -# define ASN1_BMPSTRING ASN1_STRING -# define ASN1_VISIBLESTRING ASN1_STRING -# define ASN1_UTF8STRING ASN1_STRING -# define ASN1_BOOLEAN int -# define ASN1_NULL int -# else -typedef struct asn1_string_st ASN1_INTEGER; -typedef struct asn1_string_st ASN1_ENUMERATED; -typedef struct asn1_string_st ASN1_BIT_STRING; -typedef struct asn1_string_st ASN1_OCTET_STRING; -typedef struct asn1_string_st ASN1_PRINTABLESTRING; -typedef struct asn1_string_st ASN1_T61STRING; -typedef struct asn1_string_st ASN1_IA5STRING; -typedef struct asn1_string_st ASN1_GENERALSTRING; -typedef struct asn1_string_st ASN1_UNIVERSALSTRING; -typedef struct asn1_string_st ASN1_BMPSTRING; -typedef struct asn1_string_st ASN1_UTCTIME; -typedef struct asn1_string_st ASN1_TIME; -typedef struct asn1_string_st ASN1_GENERALIZEDTIME; -typedef struct asn1_string_st ASN1_VISIBLESTRING; -typedef struct asn1_string_st ASN1_UTF8STRING; -typedef struct asn1_string_st ASN1_STRING; -typedef int ASN1_BOOLEAN; -typedef int ASN1_NULL; -# endif - -typedef struct asn1_object_st ASN1_OBJECT; - -typedef struct ASN1_ITEM_st ASN1_ITEM; -typedef struct asn1_pctx_st ASN1_PCTX; -typedef struct asn1_sctx_st ASN1_SCTX; - -# ifdef _WIN32 -# undef X509_NAME -# undef X509_EXTENSIONS -# undef PKCS7_ISSUER_AND_SERIAL -# undef PKCS7_SIGNER_INFO -# undef OCSP_REQUEST -# undef OCSP_RESPONSE -# endif - -# ifdef BIGNUM -# undef BIGNUM -# endif -struct dane_st; -typedef struct bio_st BIO; -typedef struct bignum_st BIGNUM; -typedef struct bignum_ctx BN_CTX; -typedef struct bn_blinding_st BN_BLINDING; -typedef struct bn_mont_ctx_st BN_MONT_CTX; -typedef struct bn_recp_ctx_st BN_RECP_CTX; -typedef struct bn_gencb_st BN_GENCB; - -typedef struct buf_mem_st BUF_MEM; - -typedef struct evp_cipher_st EVP_CIPHER; -typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; -typedef struct evp_md_st EVP_MD; -typedef struct evp_md_ctx_st EVP_MD_CTX; -typedef struct evp_pkey_st EVP_PKEY; - -typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; - -typedef struct evp_pkey_method_st EVP_PKEY_METHOD; -typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; - -typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; - -typedef struct hmac_ctx_st HMAC_CTX; - -typedef struct dh_st DH; -typedef struct dh_method DH_METHOD; - -typedef struct dsa_st DSA; -typedef struct dsa_method DSA_METHOD; - -typedef struct rsa_st RSA; -typedef struct rsa_meth_st RSA_METHOD; -typedef struct rsa_pss_params_st RSA_PSS_PARAMS; - -typedef struct ec_key_st EC_KEY; -typedef struct ec_key_method_st EC_KEY_METHOD; - -typedef struct rand_meth_st RAND_METHOD; -typedef struct rand_drbg_st RAND_DRBG; - -typedef struct ssl_dane_st SSL_DANE; -typedef struct x509_st X509; -typedef struct X509_algor_st X509_ALGOR; -typedef struct X509_crl_st X509_CRL; -typedef struct x509_crl_method_st X509_CRL_METHOD; -typedef struct x509_revoked_st X509_REVOKED; -typedef struct X509_name_st X509_NAME; -typedef struct X509_pubkey_st X509_PUBKEY; -typedef struct x509_store_st X509_STORE; -typedef struct x509_store_ctx_st X509_STORE_CTX; - -typedef struct x509_object_st X509_OBJECT; -typedef struct x509_lookup_st X509_LOOKUP; -typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; -typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; - -typedef struct x509_sig_info_st X509_SIG_INFO; - -typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; - -typedef struct v3_ext_ctx X509V3_CTX; -typedef struct conf_st CONF; -typedef struct ossl_init_settings_st OPENSSL_INIT_SETTINGS; - -typedef struct ui_st UI; -typedef struct ui_method_st UI_METHOD; - -typedef struct engine_st ENGINE; -typedef struct ssl_st SSL; -typedef struct ssl_ctx_st SSL_CTX; - -typedef struct comp_ctx_st COMP_CTX; -typedef struct comp_method_st COMP_METHOD; - -typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; -typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; -typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; -typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; - -typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; -typedef struct DIST_POINT_st DIST_POINT; -typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; -typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; - -typedef struct crypto_ex_data_st CRYPTO_EX_DATA; - -typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; -typedef struct ocsp_response_st OCSP_RESPONSE; -typedef struct ocsp_responder_id_st OCSP_RESPID; - -typedef struct sct_st SCT; -typedef struct sct_ctx_st SCT_CTX; -typedef struct ctlog_st CTLOG; -typedef struct ctlog_store_st CTLOG_STORE; -typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; - -typedef struct ossl_store_info_st OSSL_STORE_INFO; -typedef struct ossl_store_search_st OSSL_STORE_SEARCH; - -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ - defined(INTMAX_MAX) && defined(UINTMAX_MAX) -typedef intmax_t ossl_intmax_t; -typedef uintmax_t ossl_uintmax_t; -#else /* - * Not long long, because the C-library can only be expected to provide - * strtoll(), strtoull() at the same time as intmax_t and strtoimax(), - * strtoumax(). Since we use these for parsing arguments, we need the - * conversion functions, not just the sizes. + * The original was renamed to + * + * This header file only exists for compatibility reasons with older + * applications which #include . */ -typedef long ossl_intmax_t; -typedef unsigned long ossl_uintmax_t; -#endif - -#ifdef __cplusplus -} -#endif -#endif /* def HEADER_OPENSSL_TYPES_H */ +# include diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/param_build.h b/deps/openssl/android/x86_64/usr/local/include/openssl/param_build.h new file mode 100644 index 00000000..f29fdb29 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/param_build.h @@ -0,0 +1,63 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PARAM_BUILD_H +# define OPENSSL_PARAM_BUILD_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +OSSL_PARAM_BLD *OSSL_PARAM_BLD_new(void); +OSSL_PARAM *OSSL_PARAM_BLD_to_param(OSSL_PARAM_BLD *bld); +void OSSL_PARAM_BLD_free(OSSL_PARAM_BLD *bld); + +int OSSL_PARAM_BLD_push_int(OSSL_PARAM_BLD *bld, const char *key, int val); +int OSSL_PARAM_BLD_push_uint(OSSL_PARAM_BLD *bld, const char *key, + unsigned int val); +int OSSL_PARAM_BLD_push_long(OSSL_PARAM_BLD *bld, const char *key, + long int val); +int OSSL_PARAM_BLD_push_ulong(OSSL_PARAM_BLD *bld, const char *key, + unsigned long int val); +int OSSL_PARAM_BLD_push_int32(OSSL_PARAM_BLD *bld, const char *key, + int32_t val); +int OSSL_PARAM_BLD_push_uint32(OSSL_PARAM_BLD *bld, const char *key, + uint32_t val); +int OSSL_PARAM_BLD_push_int64(OSSL_PARAM_BLD *bld, const char *key, + int64_t val); +int OSSL_PARAM_BLD_push_uint64(OSSL_PARAM_BLD *bld, const char *key, + uint64_t val); +int OSSL_PARAM_BLD_push_size_t(OSSL_PARAM_BLD *bld, const char *key, + size_t val); +int OSSL_PARAM_BLD_push_time_t(OSSL_PARAM_BLD *bld, const char *key, + time_t val); +int OSSL_PARAM_BLD_push_double(OSSL_PARAM_BLD *bld, const char *key, + double val); +int OSSL_PARAM_BLD_push_BN(OSSL_PARAM_BLD *bld, const char *key, + const BIGNUM *bn); +int OSSL_PARAM_BLD_push_BN_pad(OSSL_PARAM_BLD *bld, const char *key, + const BIGNUM *bn, size_t sz); +int OSSL_PARAM_BLD_push_utf8_string(OSSL_PARAM_BLD *bld, const char *key, + const char *buf, size_t bsize); +int OSSL_PARAM_BLD_push_utf8_ptr(OSSL_PARAM_BLD *bld, const char *key, + char *buf, size_t bsize); +int OSSL_PARAM_BLD_push_octet_string(OSSL_PARAM_BLD *bld, const char *key, + const void *buf, size_t bsize); +int OSSL_PARAM_BLD_push_octet_ptr(OSSL_PARAM_BLD *bld, const char *key, + void *buf, size_t bsize); + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_PARAM_BUILD_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/params.h b/deps/openssl/android/x86_64/usr/local/include/openssl/params.h new file mode 100644 index 00000000..d75eab07 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/params.h @@ -0,0 +1,160 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PARAMS_H +# define OPENSSL_PARAMS_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# define OSSL_PARAM_UNMODIFIED ((size_t)-1) + +# define OSSL_PARAM_END \ + { NULL, 0, NULL, 0, 0 } + +# define OSSL_PARAM_DEFN(key, type, addr, sz) \ + { (key), (type), (addr), (sz), OSSL_PARAM_UNMODIFIED } + +/* Basic parameter types without return sizes */ +# define OSSL_PARAM_int(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int)) +# define OSSL_PARAM_uint(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(unsigned int)) +# define OSSL_PARAM_long(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(long int)) +# define OSSL_PARAM_ulong(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(unsigned long int)) +# define OSSL_PARAM_int32(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int32_t)) +# define OSSL_PARAM_uint32(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(uint32_t)) +# define OSSL_PARAM_int64(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(int64_t)) +# define OSSL_PARAM_uint64(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), \ + sizeof(uint64_t)) +# define OSSL_PARAM_size_t(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (addr), sizeof(size_t)) +# define OSSL_PARAM_time_t(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_INTEGER, (addr), sizeof(time_t)) +# define OSSL_PARAM_double(key, addr) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_REAL, (addr), sizeof(double)) + +# define OSSL_PARAM_BN(key, bn, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UNSIGNED_INTEGER, (bn), (sz)) +# define OSSL_PARAM_utf8_string(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UTF8_STRING, (addr), sz) +# define OSSL_PARAM_octet_string(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_OCTET_STRING, (addr), sz) + +# define OSSL_PARAM_utf8_ptr(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_UTF8_PTR, (addr), sz) +# define OSSL_PARAM_octet_ptr(key, addr, sz) \ + OSSL_PARAM_DEFN((key), OSSL_PARAM_OCTET_PTR, (addr), sz) + +/* Search an OSSL_PARAM array for a matching name */ +OSSL_PARAM *OSSL_PARAM_locate(OSSL_PARAM *p, const char *key); +const OSSL_PARAM *OSSL_PARAM_locate_const(const OSSL_PARAM *p, const char *key); + +/* Basic parameter type run-time construction */ +OSSL_PARAM OSSL_PARAM_construct_int(const char *key, int *buf); +OSSL_PARAM OSSL_PARAM_construct_uint(const char *key, unsigned int *buf); +OSSL_PARAM OSSL_PARAM_construct_long(const char *key, long int *buf); +OSSL_PARAM OSSL_PARAM_construct_ulong(const char *key, unsigned long int *buf); +OSSL_PARAM OSSL_PARAM_construct_int32(const char *key, int32_t *buf); +OSSL_PARAM OSSL_PARAM_construct_uint32(const char *key, uint32_t *buf); +OSSL_PARAM OSSL_PARAM_construct_int64(const char *key, int64_t *buf); +OSSL_PARAM OSSL_PARAM_construct_uint64(const char *key, uint64_t *buf); +OSSL_PARAM OSSL_PARAM_construct_size_t(const char *key, size_t *buf); +OSSL_PARAM OSSL_PARAM_construct_time_t(const char *key, time_t *buf); +OSSL_PARAM OSSL_PARAM_construct_BN(const char *key, unsigned char *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_double(const char *key, double *buf); +OSSL_PARAM OSSL_PARAM_construct_utf8_string(const char *key, char *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_utf8_ptr(const char *key, char **buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_octet_string(const char *key, void *buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, + size_t bsize); +OSSL_PARAM OSSL_PARAM_construct_end(void); + +int OSSL_PARAM_allocate_from_text(OSSL_PARAM *to, + const OSSL_PARAM *paramdefs, + const char *key, const char *value, + size_t value_n, int *found); + +int OSSL_PARAM_get_int(const OSSL_PARAM *p, int *val); +int OSSL_PARAM_get_uint(const OSSL_PARAM *p, unsigned int *val); +int OSSL_PARAM_get_long(const OSSL_PARAM *p, long int *val); +int OSSL_PARAM_get_ulong(const OSSL_PARAM *p, unsigned long int *val); +int OSSL_PARAM_get_int32(const OSSL_PARAM *p, int32_t *val); +int OSSL_PARAM_get_uint32(const OSSL_PARAM *p, uint32_t *val); +int OSSL_PARAM_get_int64(const OSSL_PARAM *p, int64_t *val); +int OSSL_PARAM_get_uint64(const OSSL_PARAM *p, uint64_t *val); +int OSSL_PARAM_get_size_t(const OSSL_PARAM *p, size_t *val); +int OSSL_PARAM_get_time_t(const OSSL_PARAM *p, time_t *val); + +int OSSL_PARAM_set_int(OSSL_PARAM *p, int val); +int OSSL_PARAM_set_uint(OSSL_PARAM *p, unsigned int val); +int OSSL_PARAM_set_long(OSSL_PARAM *p, long int val); +int OSSL_PARAM_set_ulong(OSSL_PARAM *p, unsigned long int val); +int OSSL_PARAM_set_int32(OSSL_PARAM *p, int32_t val); +int OSSL_PARAM_set_uint32(OSSL_PARAM *p, uint32_t val); +int OSSL_PARAM_set_int64(OSSL_PARAM *p, int64_t val); +int OSSL_PARAM_set_uint64(OSSL_PARAM *p, uint64_t val); +int OSSL_PARAM_set_size_t(OSSL_PARAM *p, size_t val); +int OSSL_PARAM_set_time_t(OSSL_PARAM *p, time_t val); + +int OSSL_PARAM_get_double(const OSSL_PARAM *p, double *val); +int OSSL_PARAM_set_double(OSSL_PARAM *p, double val); + +int OSSL_PARAM_get_BN(const OSSL_PARAM *p, BIGNUM **val); +int OSSL_PARAM_set_BN(OSSL_PARAM *p, const BIGNUM *val); + +int OSSL_PARAM_get_utf8_string(const OSSL_PARAM *p, char **val, size_t max_len); +int OSSL_PARAM_set_utf8_string(OSSL_PARAM *p, const char *val); + +int OSSL_PARAM_get_octet_string(const OSSL_PARAM *p, void **val, size_t max_len, + size_t *used_len); +int OSSL_PARAM_set_octet_string(OSSL_PARAM *p, const void *val, size_t len); + +int OSSL_PARAM_get_utf8_ptr(const OSSL_PARAM *p, const char **val); +int OSSL_PARAM_set_utf8_ptr(OSSL_PARAM *p, const char *val); + +int OSSL_PARAM_get_octet_ptr(const OSSL_PARAM *p, const void **val, + size_t *used_len); +int OSSL_PARAM_set_octet_ptr(OSSL_PARAM *p, const void *val, + size_t used_len); + +int OSSL_PARAM_get_utf8_string_ptr(const OSSL_PARAM *p, const char **val); +int OSSL_PARAM_get_octet_string_ptr(const OSSL_PARAM *p, const void **val, + size_t *used_len); + +int OSSL_PARAM_modified(const OSSL_PARAM *p); +void OSSL_PARAM_set_all_unmodified(OSSL_PARAM *p); + +OSSL_PARAM *OSSL_PARAM_dup(const OSSL_PARAM *p); +OSSL_PARAM *OSSL_PARAM_merge(const OSSL_PARAM *p1, const OSSL_PARAM *p2); +void OSSL_PARAM_free(OSSL_PARAM *p); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pem.h b/deps/openssl/android/x86_64/usr/local/include/openssl/pem.h index 2ef5b5d0..000d9c89 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pem.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pem.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEM_H -# define HEADER_PEM_H +#ifndef OPENSSL_PEM_H +# define OPENSSL_PEM_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PEM_H +# endif # include # include @@ -16,6 +22,9 @@ # include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -60,98 +69,130 @@ extern "C" { * IMPLEMENT_PEM_rw_cb(...) */ +# define PEM_read_cb_fnsig(name, type, INTYPE, readname) \ + type *PEM_##readname##_##name(INTYPE *out, type **x, \ + pem_password_cb *cb, void *u) +# define PEM_read_cb_ex_fnsig(name, type, INTYPE, readname) \ + type *PEM_##readname##_##name##_ex(INTYPE *out, type **x, \ + pem_password_cb *cb, void *u, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) + +# define PEM_write_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name(OUTTYPE *out, const type *x) +# define PEM_write_cb_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name(OUTTYPE *out, const type *x, \ + const EVP_CIPHER *enc, \ + const unsigned char *kstr, int klen, \ + pem_password_cb *cb, void *u) +# define PEM_write_ex_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name##_ex(OUTTYPE *out, const type *x, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) +# define PEM_write_cb_ex_fnsig(name, type, OUTTYPE, writename) \ + int PEM_##writename##_##name##_ex(OUTTYPE *out, const type *x, \ + const EVP_CIPHER *enc, \ + const unsigned char *kstr, int klen, \ + pem_password_cb *cb, void *u, \ + OSSL_LIB_CTX *libctx, \ + const char *propq) + # ifdef OPENSSL_NO_STDIO # define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ # define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# endif # define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# endif # else -# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ -type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ -} +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ + type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str, fp, \ + (void **)x, cb, u); \ + } -# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ -} +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ + PEM_write_fnsig(name, type, FILE, write) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1, str, out, \ + x, NULL, NULL, 0, NULL, NULL); \ + } -# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, const type *x) \ -{ \ -return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp(name, type, str, asn1) +# endif -# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } - -# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ -int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, \ - void *u) \ - { \ - return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ - } +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ + PEM_write_cb_fnsig(name, type, FILE, write) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1, str, out, \ + x, enc, kstr, klen, cb, u); \ + } +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) +# endif # endif -# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ -type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ -{ \ -return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ -} +# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ + type *PEM_read_bio_##name(BIO *bp, type **x, \ + pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str, bp, \ + (void **)x, cb, u); \ + } -# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ -} +# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ + PEM_write_fnsig(name, type, BIO, write_bio) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1, str, out, \ + x, NULL,NULL,0,NULL,NULL); \ + } -# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, const type *x) \ -{ \ -return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ -} +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio(name, type, str, asn1) +# endif -# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ - } +# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ + PEM_write_cb_fnsig(name, type, BIO, write_bio) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1, str, out, \ + x, enc, kstr, klen, cb, u); \ + } -# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ -int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ - { \ - return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ - } +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_write(name, type, str, asn1) \ IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ IMPLEMENT_PEM_write_fp(name, type, str, asn1) -# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) -# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ @@ -161,9 +202,11 @@ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_write(name, type, str, asn1) -# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_write_const(name, type, str, asn1) +# endif # define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ IMPLEMENT_PEM_read(name, type, str, asn1) \ @@ -171,64 +214,160 @@ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ /* These are the same except they are for the declarations */ +/* + * The mysterious 'extern' that's passed to some macros is innocuous, + * and is there to quiet pre-C99 compilers that may complain about empty + * arguments in macro calls. + */ # if defined(OPENSSL_NO_STDIO) -# define DECLARE_PEM_read_fp(name, type) /**/ -# define DECLARE_PEM_write_fp(name, type) /**/ -# define DECLARE_PEM_write_fp_const(name, type) /**/ -# define DECLARE_PEM_write_cb_fp(name, type) /**/ +# define DECLARE_PEM_read_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_read_fp_ex_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_fp_ex_attr(attr, name, type) /**/ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const_attr(attr, name, type) /**/ +# endif +# define DECLARE_PEM_write_cb_fp_attr(attr, name, type) /**/ +# define DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) /**/ + # else -# define DECLARE_PEM_read_fp(name, type) \ - type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); +# define DECLARE_PEM_read_fp_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, FILE, read); +# define DECLARE_PEM_read_fp_ex_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, FILE, read); \ + attr PEM_read_cb_ex_fnsig(name, type, FILE, read); -# define DECLARE_PEM_write_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x); - -# define DECLARE_PEM_write_fp_const(name, type) \ - int PEM_write_##name(FILE *fp, const type *x); - -# define DECLARE_PEM_write_cb_fp(name, type) \ - int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); +# define DECLARE_PEM_write_fp_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); +# define DECLARE_PEM_write_fp_ex_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); \ + attr PEM_write_ex_fnsig(name, type, FILE, write); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, FILE, write); +# endif +# define DECLARE_PEM_write_cb_fp_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, FILE, write); +# define DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, FILE, write); \ + attr PEM_write_cb_ex_fnsig(name, type, FILE, write); # endif -# define DECLARE_PEM_read_bio(name, type) \ - type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); +# define DECLARE_PEM_read_fp(name, type) \ + DECLARE_PEM_read_fp_attr(extern, name, type) +# define DECLARE_PEM_write_fp(name, type) \ + DECLARE_PEM_write_fp_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_fp_const(name, type) \ + DECLARE_PEM_write_fp_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_fp(name, type) \ + DECLARE_PEM_write_cb_fp_attr(extern, name, type) -# define DECLARE_PEM_write_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x); +# define DECLARE_PEM_read_bio_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, BIO, read_bio); +# define DECLARE_PEM_read_bio_ex_attr(attr, name, type) \ + attr PEM_read_cb_fnsig(name, type, BIO, read_bio); \ + attr PEM_read_cb_ex_fnsig(name, type, BIO, read_bio); +# define DECLARE_PEM_read_bio(name, type) \ + DECLARE_PEM_read_bio_attr(extern, name, type) +# define DECLARE_PEM_read_bio_ex(name, type) \ + DECLARE_PEM_read_bio_ex_attr(extern, name, type) -# define DECLARE_PEM_write_bio_const(name, type) \ - int PEM_write_bio_##name(BIO *bp, const type *x); +# define DECLARE_PEM_write_bio_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio_ex_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); \ + attr PEM_write_ex_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio(name, type) \ + DECLARE_PEM_write_bio_attr(extern, name, type) +# define DECLARE_PEM_write_bio_ex(name, type) \ + DECLARE_PEM_write_bio_ex_attr(extern, name, type) -# define DECLARE_PEM_write_cb_bio(name, type) \ - int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ - unsigned char *kstr, int klen, pem_password_cb *cb, void *u); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_bio_const_attr(attr, name, type) \ + attr PEM_write_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_bio_const(name, type) \ + DECLARE_PEM_write_bio_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_bio_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_cb_bio_ex_attr(attr, name, type) \ + attr PEM_write_cb_fnsig(name, type, BIO, write_bio); \ + attr PEM_write_cb_ex_fnsig(name, type, BIO, write_bio); +# define DECLARE_PEM_write_cb_bio(name, type) \ + DECLARE_PEM_write_cb_bio_attr(extern, name, type) +# define DECLARE_PEM_write_cb_ex_bio(name, type) \ + DECLARE_PEM_write_cb_bio_ex_attr(extern, name, type) + +# define DECLARE_PEM_write_attr(attr, name, type) \ + DECLARE_PEM_write_bio_attr(attr, name, type) \ + DECLARE_PEM_write_fp_attr(attr, name, type) +# define DECLARE_PEM_write_ex_attr(attr, name, type) \ + DECLARE_PEM_write_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_write_fp_ex_attr(attr, name, type) # define DECLARE_PEM_write(name, type) \ - DECLARE_PEM_write_bio(name, type) \ - DECLARE_PEM_write_fp(name, type) -# define DECLARE_PEM_write_const(name, type) \ - DECLARE_PEM_write_bio_const(name, type) \ - DECLARE_PEM_write_fp_const(name, type) -# define DECLARE_PEM_write_cb(name, type) \ - DECLARE_PEM_write_cb_bio(name, type) \ - DECLARE_PEM_write_cb_fp(name, type) -# define DECLARE_PEM_read(name, type) \ - DECLARE_PEM_read_bio(name, type) \ - DECLARE_PEM_read_fp(name, type) + DECLARE_PEM_write_attr(extern, name, type) +# define DECLARE_PEM_write_ex(name, type) \ + DECLARE_PEM_write_ex_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_write_const_attr(attr, name, type) \ + DECLARE_PEM_write_bio_const_attr(attr, name, type) \ + DECLARE_PEM_write_fp_const_attr(attr, name, type) +# define DECLARE_PEM_write_const(name, type) \ + DECLARE_PEM_write_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_write_cb_attr(attr, name, type) \ + DECLARE_PEM_write_cb_bio_attr(attr, name, type) \ + DECLARE_PEM_write_cb_fp_attr(attr, name, type) +# define DECLARE_PEM_write_cb_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_fp_ex_attr(attr, name, type) +# define DECLARE_PEM_write_cb(name, type) \ + DECLARE_PEM_write_cb_attr(extern, name, type) +# define DECLARE_PEM_write_cb_ex(name, type) \ + DECLARE_PEM_write_cb_ex_attr(extern, name, type) +# define DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_read_bio_attr(attr, name, type) \ + DECLARE_PEM_read_fp_attr(attr, name, type) +# define DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_read_bio_ex_attr(attr, name, type) \ + DECLARE_PEM_read_fp_ex_attr(attr, name, type) +# define DECLARE_PEM_read(name, type) \ + DECLARE_PEM_read_attr(extern, name, type) +# define DECLARE_PEM_read_ex(name, type) \ + DECLARE_PEM_read_ex_attr(extern, name, type) +# define DECLARE_PEM_rw_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_attr(attr, name, type) +# define DECLARE_PEM_rw_ex_attr(attr, name, type) \ + DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_write_ex_attr(attr, name, type) # define DECLARE_PEM_rw(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write(name, type) -# define DECLARE_PEM_rw_const(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_const(name, type) + DECLARE_PEM_rw_attr(extern, name, type) +# define DECLARE_PEM_rw_ex(name, type) \ + DECLARE_PEM_rw_ex_attr(extern, name, type) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define DECLARE_PEM_rw_const_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_const_attr(attr, name, type) +# define DECLARE_PEM_rw_const(name, type) \ + DECLARE_PEM_rw_const_attr(extern, name, type) +# endif +# define DECLARE_PEM_rw_cb_attr(attr, name, type) \ + DECLARE_PEM_read_attr(attr, name, type) \ + DECLARE_PEM_write_cb_attr(attr, name, type) +# define DECLARE_PEM_rw_cb_ex_attr(attr, name, type) \ + DECLARE_PEM_read_ex_attr(attr, name, type) \ + DECLARE_PEM_write_cb_ex_attr(attr, name, type) # define DECLARE_PEM_rw_cb(name, type) \ - DECLARE_PEM_read(name, type) \ - DECLARE_PEM_write_cb(name, type) -typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + DECLARE_PEM_rw_cb_attr(extern, name, type) +# define DECLARE_PEM_rw_cb_ex(name, type) \ + DECLARE_PEM_rw_cb_ex_attr(extern, name, type) int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, @@ -251,14 +390,20 @@ int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, void *u); void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, pem_password_cb *cb, void *u); -int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, - const EVP_CIPHER *enc, unsigned char *kstr, int klen, +int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, + const void *x, const EVP_CIPHER *enc, + const unsigned char *kstr, int klen, pem_password_cb *cb, void *u); STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); -int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, - unsigned char *kstr, int klen, +STACK_OF(X509_INFO) +*PEM_X509_INFO_read_bio_ex(BIO *bp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u, OSSL_LIB_CTX *libctx, + const char *propq); + +int PEM_X509_INFO_write_bio(BIO *bp, const X509_INFO *xi, EVP_CIPHER *enc, + const unsigned char *kstr, int klen, pem_password_cb *cd, void *u); #ifndef OPENSSL_NO_STDIO @@ -269,21 +414,25 @@ int PEM_write(FILE *fp, const char *name, const char *hdr, void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, pem_password_cb *cb, void *u); int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, - void *x, const EVP_CIPHER *enc, unsigned char *kstr, - int klen, pem_password_cb *callback, void *u); + const void *x, const EVP_CIPHER *enc, + const unsigned char *kstr, int klen, + pem_password_cb *callback, void *u); STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); +STACK_OF(X509_INFO) +*PEM_X509_INFO_read_ex(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, + void *u, OSSL_LIB_CTX *libctx, const char *propq); #endif int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); -int PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); +int PEM_SignUpdate(EVP_MD_CTX *ctx, const unsigned char *d, unsigned int cnt); int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, unsigned int *siglen, EVP_PKEY *pkey); /* The default pem_password_cb that's used internally */ int PEM_def_callback(char *buf, int num, int rwflag, void *userdata); void PEM_proc_type(char *buf, int type); -void PEM_dek_info(char *buf, const char *type, int len, char *str); +void PEM_dek_info(char *buf, const char *type, int len, const char *str); # include @@ -292,85 +441,99 @@ DECLARE_PEM_rw(X509_AUX, X509) DECLARE_PEM_rw(X509_REQ, X509_REQ) DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) DECLARE_PEM_rw(X509_CRL, X509_CRL) +DECLARE_PEM_rw(X509_PUBKEY, X509_PUBKEY) DECLARE_PEM_rw(PKCS7, PKCS7) DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) DECLARE_PEM_rw(PKCS8, X509_SIG) DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) -# ifndef OPENSSL_NO_RSA -DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) -DECLARE_PEM_rw_const(RSAPublicKey, RSA) -DECLARE_PEM_rw(RSA_PUBKEY, RSA) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, RSAPrivateKey, RSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, RSAPublicKey, RSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, RSA_PUBKEY, RSA) # endif -# ifndef OPENSSL_NO_DSA -DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) -DECLARE_PEM_rw(DSA_PUBKEY, DSA) -DECLARE_PEM_rw_const(DSAparams, DSA) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, DSAPrivateKey, DSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DSA_PUBKEY, DSA) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DSAparams, DSA) +# endif # endif -# ifndef OPENSSL_NO_EC -DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) -DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) -DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) -# endif -# ifndef OPENSSL_NO_DH -DECLARE_PEM_rw_const(DHparams, DH) -DECLARE_PEM_write_const(DHxparams, DH) -# endif -DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) -DECLARE_PEM_rw(PUBKEY, EVP_PKEY) -int PEM_write_bio_PrivateKey_traditional(BIO *bp, EVP_PKEY *x, +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, ECPKParameters, EC_GROUP) +DECLARE_PEM_rw_cb_attr(OSSL_DEPRECATEDIN_3_0, ECPrivateKey, EC_KEY) +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, EC_PUBKEY, EC_KEY) +# endif +# endif + +# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DHparams, DH) +DECLARE_PEM_write_attr(OSSL_DEPRECATEDIN_3_0, DHxparams, DH) +# endif +# endif +DECLARE_PEM_rw_cb_ex(PrivateKey, EVP_PKEY) +DECLARE_PEM_rw_ex(PUBKEY, EVP_PKEY) + +int PEM_write_bio_PrivateKey_traditional(BIO *bp, const EVP_PKEY *x, const EVP_CIPHER *enc, - unsigned char *kstr, int klen, + const unsigned char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, +/* Why do these take a signed char *kstr? */ +int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, - char *, int, pem_password_cb *, void *); -int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, +int PEM_write_bio_PKCS8PrivateKey(BIO *, const EVP_PKEY *, const EVP_CIPHER *, + const char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_bio(BIO *bp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u); # ifndef OPENSSL_NO_STDIO -int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_fp(FILE *fp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, - char *kstr, int klen, +int PEM_write_PKCS8PrivateKey_nid(FILE *fp, const EVP_PKEY *x, int nid, + const char *kstr, int klen, pem_password_cb *cb, void *u); EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u); -int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, - char *kstr, int klen, pem_password_cb *cd, - void *u); +int PEM_write_PKCS8PrivateKey(FILE *fp, const EVP_PKEY *x, const EVP_CIPHER *enc, + const char *kstr, int klen, + pem_password_cb *cd, void *u); # endif +EVP_PKEY *PEM_read_bio_Parameters_ex(BIO *bp, EVP_PKEY **x, + OSSL_LIB_CTX *libctx, const char *propq); EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); -int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); +int PEM_write_bio_Parameters(BIO *bp, const EVP_PKEY *x); -# ifndef OPENSSL_NO_DSA EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); EVP_PKEY *b2i_PrivateKey_bio(BIO *in); EVP_PKEY *b2i_PublicKey_bio(BIO *in); -int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); -int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); -# ifndef OPENSSL_NO_RC4 +int i2b_PrivateKey_bio(BIO *out, const EVP_PKEY *pk); +int i2b_PublicKey_bio(BIO *out, const EVP_PKEY *pk); EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); -int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, +EVP_PKEY *b2i_PVK_bio_ex(BIO *in, pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); +int i2b_PVK_bio(BIO *out, const EVP_PKEY *pk, int enclevel, pem_password_cb *cb, void *u); -# endif -# endif +int i2b_PVK_bio_ex(BIO *out, const EVP_PKEY *pk, int enclevel, + pem_password_cb *cb, void *u, + OSSL_LIB_CTX *libctx, const char *propq); # ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pem2.h b/deps/openssl/android/x86_64/usr/local/include/openssl/pem2.h index 038fe790..a8a5325b 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pem2.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pem2.h @@ -1,13 +1,19 @@ /* * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEM2_H -# define HEADER_PEM2_H +#ifndef OPENSSL_PEM2_H +# define OPENSSL_PEM2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PEM2_H +# endif # include #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pemerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/pemerr.h index 4f7e3574..18f6d9ef 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pemerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pemerr.h @@ -1,71 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PEMERR_H -# define HEADER_PEMERR_H +#ifndef OPENSSL_PEMERR_H +# define OPENSSL_PEMERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PEM_strings(void); -/* - * PEM function codes. - */ -# define PEM_F_B2I_DSS 127 -# define PEM_F_B2I_PVK_BIO 128 -# define PEM_F_B2I_RSA 129 -# define PEM_F_CHECK_BITLEN_DSA 130 -# define PEM_F_CHECK_BITLEN_RSA 131 -# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 -# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 -# define PEM_F_DO_B2I 132 -# define PEM_F_DO_B2I_BIO 133 -# define PEM_F_DO_BLOB_HEADER 134 -# define PEM_F_DO_I2B 146 -# define PEM_F_DO_PK8PKEY 126 -# define PEM_F_DO_PK8PKEY_FP 125 -# define PEM_F_DO_PVK_BODY 135 -# define PEM_F_DO_PVK_HEADER 136 -# define PEM_F_GET_HEADER_AND_DATA 143 -# define PEM_F_GET_NAME 144 -# define PEM_F_I2B_PVK 137 -# define PEM_F_I2B_PVK_BIO 138 -# define PEM_F_LOAD_IV 101 -# define PEM_F_PEM_ASN1_READ 102 -# define PEM_F_PEM_ASN1_READ_BIO 103 -# define PEM_F_PEM_ASN1_WRITE 104 -# define PEM_F_PEM_ASN1_WRITE_BIO 105 -# define PEM_F_PEM_DEF_CALLBACK 100 -# define PEM_F_PEM_DO_HEADER 106 -# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 -# define PEM_F_PEM_READ 108 -# define PEM_F_PEM_READ_BIO 109 -# define PEM_F_PEM_READ_BIO_DHPARAMS 141 -# define PEM_F_PEM_READ_BIO_EX 145 -# define PEM_F_PEM_READ_BIO_PARAMETERS 140 -# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 -# define PEM_F_PEM_READ_DHPARAMS 142 -# define PEM_F_PEM_READ_PRIVATEKEY 124 -# define PEM_F_PEM_SIGNFINAL 112 -# define PEM_F_PEM_WRITE 113 -# define PEM_F_PEM_WRITE_BIO 114 -# define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL 147 -# define PEM_F_PEM_WRITE_PRIVATEKEY 139 -# define PEM_F_PEM_X509_INFO_READ 115 -# define PEM_F_PEM_X509_INFO_READ_BIO 116 -# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 /* * PEM reason codes. @@ -80,8 +31,10 @@ int ERR_load_PEM_strings(void); # define PEM_R_BIO_WRITE_FAILURE 118 # define PEM_R_CIPHER_IS_NULL 127 # define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 +# define PEM_R_EXPECTING_DSS_KEY_BLOB 131 # define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 # define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_EXPECTING_RSA_KEY_BLOB 132 # define PEM_R_HEADER_TOO_LONG 128 # define PEM_R_INCONSISTENT_HEADER 121 # define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h index 3f43dad6..9e20fc1a 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h @@ -1,18 +1,33 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/pkcs12.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS12_H -# define HEADER_PKCS12_H + + +#ifndef OPENSSL_PKCS12_H +# define OPENSSL_PKCS12_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS12_H +# endif # include +# include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -46,7 +61,33 @@ typedef struct PKCS12_st PKCS12; typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; -DEFINE_STACK_OF(PKCS12_SAFEBAG) +SKM_DEFINE_STACK_OF_INTERNAL(PKCS12_SAFEBAG, PKCS12_SAFEBAG, PKCS12_SAFEBAG) +#define sk_PKCS12_SAFEBAG_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_value(sk, idx) ((PKCS12_SAFEBAG *)OPENSSL_sk_value(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), (idx))) +#define sk_PKCS12_SAFEBAG_new(cmp) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp))) +#define sk_PKCS12_SAFEBAG_new_null() ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_null()) +#define sk_PKCS12_SAFEBAG_new_reserve(cmp, n) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_new_reserve(ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp), (n))) +#define sk_PKCS12_SAFEBAG_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (n)) +#define sk_PKCS12_SAFEBAG_free(sk) OPENSSL_sk_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_delete(sk, i) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (i))) +#define sk_PKCS12_SAFEBAG_delete_ptr(sk, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_delete_ptr(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr))) +#define sk_PKCS12_SAFEBAG_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_pop(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_pop(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_shift(sk) ((PKCS12_SAFEBAG *)OPENSSL_sk_shift(ossl_check_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS12_SAFEBAG_sk_type(sk),ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc)) +#define sk_PKCS12_SAFEBAG_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), (idx)) +#define sk_PKCS12_SAFEBAG_set(sk, idx, ptr) ((PKCS12_SAFEBAG *)OPENSSL_sk_set(ossl_check_PKCS12_SAFEBAG_sk_type(sk), (idx), ossl_check_PKCS12_SAFEBAG_type(ptr))) +#define sk_PKCS12_SAFEBAG_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr)) +#define sk_PKCS12_SAFEBAG_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_type(ptr), pnum) +#define sk_PKCS12_SAFEBAG_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk)) +#define sk_PKCS12_SAFEBAG_dup(sk) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_dup(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk))) +#define sk_PKCS12_SAFEBAG_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS12_SAFEBAG) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_copyfunc_type(copyfunc), ossl_check_PKCS12_SAFEBAG_freefunc_type(freefunc))) +#define sk_PKCS12_SAFEBAG_set_cmp_func(sk, cmp) ((sk_PKCS12_SAFEBAG_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS12_SAFEBAG_sk_type(sk), ossl_check_PKCS12_SAFEBAG_compfunc_type(cmp))) + typedef struct pkcs12_bag_st PKCS12_BAGS; @@ -55,7 +96,7 @@ typedef struct pkcs12_bag_st PKCS12_BAGS; /* Compatibility macros */ -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define M_PKCS12_bag_type PKCS12_bag_type # define M_PKCS12_cert_bag_type PKCS12_cert_bag_type @@ -71,8 +112,10 @@ typedef struct pkcs12_bag_st PKCS12_BAGS; # define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt #endif - -DEPRECATEDIN_1_1_0(ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, int attr_nid)) +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +#endif ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); int PKCS12_mac_present(const PKCS12 *p12); @@ -87,6 +130,8 @@ const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); +const ASN1_TYPE *PKCS12_SAFEBAG_get0_bag_obj(const PKCS12_SAFEBAG *bag); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_bag_type(const PKCS12_SAFEBAG *bag); X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); @@ -97,6 +142,7 @@ const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_secret(int type, int vtype, const unsigned char *value, int len); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, @@ -105,23 +151,50 @@ PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8inf); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt_ex(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *ctx, + const char *propq); PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, int nid1, int nid2); PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt_ex(const X509_SIG *p8, const char *pass, + int passlen, OSSL_LIB_CTX *ctx, + const char *propq); PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey_ex(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen, + OSSL_LIB_CTX *ctx, + const char *propq); X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +X509_SIG *PKCS8_encrypt_ex(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8, + OSSL_LIB_CTX *ctx, const char *propq); X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +X509_SIG *PKCS8_set0_pbe_ex(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe, + OSSL_LIB_CTX *ctx, const char *propq); PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, STACK_OF(PKCS12_SAFEBAG) *bags); +PKCS7 *PKCS12_pack_p7encdata_ex(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags, + OSSL_LIB_CTX *ctx, const char *propq); + STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, int passlen); @@ -138,6 +211,10 @@ int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, int namelen); int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, const unsigned char *name, int namelen); +int PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type, + const unsigned char *bytes, int len); +int PKCS12_add1_attr_by_txt(PKCS12_SAFEBAG *bag, const char *attrname, int type, + const unsigned char *bytes, int len); int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid); @@ -149,26 +226,62 @@ unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, const unsigned char *in, int inlen, unsigned char **data, int *datalen, int en_de); +unsigned char *PKCS12_pbe_crypt_ex(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de, OSSL_LIB_CTX *libctx, + const char *propq); void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, const char *pass, int passlen, const ASN1_OCTET_STRING *oct, int zbuf); +void *PKCS12_item_decrypt_d2i_ex(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf, + OSSL_LIB_CTX *libctx, + const char *propq); ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, const ASN1_ITEM *it, const char *pass, int passlen, void *obj, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt_ex(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf, + OSSL_LIB_CTX *ctx, + const char *propq); PKCS12 *PKCS12_init(int mode); +PKCS12 *PKCS12_init_ex(int mode, OSSL_LIB_CTX *ctx, const char *propq); + int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_asc_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni_ex(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_utf8_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); + int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md_type, int en_de); +int PKCS12_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, unsigned char *mac, unsigned int *maclen); int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); @@ -198,18 +311,35 @@ int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, int mac_iter, int keytype); +PKCS12 *PKCS12_create_ex(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype, + OSSL_LIB_CTX *ctx, const char *propq); PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, EVP_PKEY *key, int key_usage, int iter, int key_nid, const char *pass); +PKCS12_SAFEBAG *PKCS12_add_key_ex(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_secret(STACK_OF(PKCS12_SAFEBAG) **pbags, + int nid_type, const unsigned char *value, int len); int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, int safe_nid, int iter, const char *pass); -PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +int PKCS12_add_safe_ex(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); -int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +PKCS12 *PKCS12_add_safes_ex(STACK_OF(PKCS7) *safes, int p7_nid, + OSSL_LIB_CTX *ctx, const char *propq); + +int i2d_PKCS12_bio(BIO *bp, const PKCS12 *p12); # ifndef OPENSSL_NO_STDIO -int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); +int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12); # endif PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); # ifndef OPENSSL_NO_STDIO diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h.in new file mode 100644 index 00000000..cf956b41 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h.in @@ -0,0 +1,330 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_PKCS12_H +# define OPENSSL_PKCS12_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS12_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define PKCS12_KEY_ID 1 +# define PKCS12_IV_ID 2 +# define PKCS12_MAC_ID 3 + +/* Default iteration count */ +# ifndef PKCS12_DEFAULT_ITER +# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER +# endif + +# define PKCS12_MAC_KEY_LENGTH 20 + +# define PKCS12_SALT_LEN 8 + +/* It's not clear if these are actually needed... */ +# define PKCS12_key_gen PKCS12_key_gen_utf8 +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_utf8 + +/* MS key usage constants */ + +# define KEY_EX 0x10 +# define KEY_SIG 0x80 + +typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA; + +typedef struct PKCS12_st PKCS12; + +typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; + +{- + generate_stack_macros("PKCS12_SAFEBAG"); +-} + +typedef struct pkcs12_bag_st PKCS12_BAGS; + +# define PKCS12_ERROR 0 +# define PKCS12_OK 1 + +/* Compatibility macros */ + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 + +# define M_PKCS12_bag_type PKCS12_bag_type +# define M_PKCS12_cert_bag_type PKCS12_cert_bag_type +# define M_PKCS12_crl_bag_type PKCS12_cert_bag_type + +# define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert +# define PKCS12_certbag2scrl PKCS12_SAFEBAG_get1_crl +# define PKCS12_bag_type PKCS12_SAFEBAG_get_nid +# define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid +# define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert +# define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl +# define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf +# define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt + +#endif +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +#endif + +ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); +int PKCS12_mac_present(const PKCS12 *p12); +void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, + const X509_ALGOR **pmacalg, + const ASN1_OCTET_STRING **psalt, + const ASN1_INTEGER **piter, + const PKCS12 *p12); + +const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); +const ASN1_TYPE *PKCS12_SAFEBAG_get0_bag_obj(const PKCS12_SAFEBAG *bag); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_bag_type(const PKCS12_SAFEBAG *bag); + +X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); +X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); +const STACK_OF(PKCS12_SAFEBAG) * +PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); +const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); +const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); + +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_secret(int type, int vtype, const unsigned char *value, int len); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt_ex(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf, + OSSL_LIB_CTX *ctx, + const char *propq); + +PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, + int nid1, int nid2); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, + int passlen); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt_ex(const X509_SIG *p8, const char *pass, + int passlen, OSSL_LIB_CTX *ctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey_ex(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen, + OSSL_LIB_CTX *ctx, + const char *propq); +X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +X509_SIG *PKCS8_encrypt_ex(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8, + OSSL_LIB_CTX *ctx, const char *propq); +X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +X509_SIG *PKCS8_set0_pbe_ex(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe, + OSSL_LIB_CTX *ctx, const char *propq); +PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); +PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags); +PKCS7 *PKCS12_pack_p7encdata_ex(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags, + OSSL_LIB_CTX *ctx, const char *propq); + +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, + int passlen); + +int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); +STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12); + +int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, + int namelen); +int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_utf8(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, + const unsigned char *name, int namelen); +int PKCS12_add1_attr_by_NID(PKCS12_SAFEBAG *bag, int nid, int type, + const unsigned char *bytes, int len); +int PKCS12_add1_attr_by_txt(PKCS12_SAFEBAG *bag, const char *attrname, int type, + const unsigned char *bytes, int len); +int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); +ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, + int attr_nid); +char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); +const STACK_OF(X509_ATTRIBUTE) * +PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag); +unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de); +unsigned char *PKCS12_pbe_crypt_ex(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de, OSSL_LIB_CTX *libctx, + const char *propq); +void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf); +void *PKCS12_item_decrypt_d2i_ex(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf, + OSSL_LIB_CTX *libctx, + const char *propq); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt_ex(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf, + OSSL_LIB_CTX *ctx, + const char *propq); +PKCS12 *PKCS12_init(int mode); +PKCS12 *PKCS12_init_ex(int mode, OSSL_LIB_CTX *ctx, const char *propq); + +int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_asc_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); +int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni_ex(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); +int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_utf8_ex(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type, + OSSL_LIB_CTX *ctx, const char *propq); + +int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de); +int PKCS12_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de, + OSSL_LIB_CTX *libctx, const char *propq); +int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *mac, unsigned int *maclen); +int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); +int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + const EVP_MD *md_type); +int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, + int saltlen, const EVP_MD *md_type); +unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2asc(const unsigned char *uni, int unilen); +unsigned char *OPENSSL_utf82uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2utf8(const unsigned char *uni, int unilen); + +DECLARE_ASN1_FUNCTIONS(PKCS12) +DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) +DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) +DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) + +DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) +DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) + +void PKCS12_PBE_add(void); +int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, + STACK_OF(X509) **ca); +PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype); +PKCS12 *PKCS12_create_ex(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); +PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass); +PKCS12_SAFEBAG *PKCS12_add_key_ex(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12_SAFEBAG *PKCS12_add_secret(STACK_OF(PKCS12_SAFEBAG) **pbags, + int nid_type, const unsigned char *value, int len); +int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass); +int PKCS12_add_safe_ex(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass, + OSSL_LIB_CTX *ctx, const char *propq); + +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); +PKCS12 *PKCS12_add_safes_ex(STACK_OF(PKCS7) *safes, int p7_nid, + OSSL_LIB_CTX *ctx, const char *propq); + +int i2d_PKCS12_bio(BIO *bp, const PKCS12 *p12); +# ifndef OPENSSL_NO_STDIO +int i2d_PKCS12_fp(FILE *fp, const PKCS12 *p12); +# endif +PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); +# ifndef OPENSSL_NO_STDIO +PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); +# endif +int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12err.h b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12err.h index eff5eb26..933c8329 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12err.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12err.h @@ -1,57 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS12ERR_H -# define HEADER_PKCS12ERR_H +#ifndef OPENSSL_PKCS12ERR_H +# define OPENSSL_PKCS12ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS12_strings(void); -/* - * PKCS12 function codes. - */ -# define PKCS12_F_OPENSSL_ASC2UNI 121 -# define PKCS12_F_OPENSSL_UNI2ASC 124 -# define PKCS12_F_OPENSSL_UNI2UTF8 127 -# define PKCS12_F_OPENSSL_UTF82UNI 129 -# define PKCS12_F_PKCS12_CREATE 105 -# define PKCS12_F_PKCS12_GEN_MAC 107 -# define PKCS12_F_PKCS12_INIT 109 -# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 -# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 -# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 -# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 -# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 -# define PKCS12_F_PKCS12_KEY_GEN_UTF8 116 -# define PKCS12_F_PKCS12_NEWPASS 128 -# define PKCS12_F_PKCS12_PACK_P7DATA 114 -# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 -# define PKCS12_F_PKCS12_PARSE 118 -# define PKCS12_F_PKCS12_PBE_CRYPT 119 -# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 112 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 -# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 -# define PKCS12_F_PKCS12_SETUP_MAC 122 -# define PKCS12_F_PKCS12_SET_MAC 123 -# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 -# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 -# define PKCS12_F_PKCS12_VERIFY_MAC 126 -# define PKCS12_F_PKCS8_ENCRYPT 125 -# define PKCS12_F_PKCS8_SET0_PBE 132 /* * PKCS12 reason codes. @@ -64,6 +29,7 @@ int ERR_load_PKCS12_strings(void); # define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 # define PKCS12_R_INVALID_NULL_ARGUMENT 104 # define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 +# define PKCS12_R_INVALID_TYPE 112 # define PKCS12_R_IV_GEN_ERROR 106 # define PKCS12_R_KEY_GEN_ERROR 107 # define PKCS12_R_MAC_ABSENT 108 @@ -72,9 +38,7 @@ int ERR_load_PKCS12_strings(void); # define PKCS12_R_MAC_STRING_SET_ERROR 111 # define PKCS12_R_MAC_VERIFY_FAILURE 113 # define PKCS12_R_PARSE_ERROR 114 -# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 # define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 -# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 # define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 # define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h index 9b66e002..543c80cb 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h @@ -1,27 +1,42 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/pkcs7.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS7_H -# define HEADER_PKCS7_H + + +#ifndef OPENSSL_PKCS7_H +# define OPENSSL_PKCS7_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS7_H +# endif # include # include # include # include -# include +# include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { #endif + /*- Encryption_ID DES-CBC Digest_ID MD5 @@ -29,6 +44,11 @@ Digest_Encryption_ID rsaEncryption Key_Encryption_ID rsaEncryption */ +typedef struct PKCS7_CTX_st { + OSSL_LIB_CTX *libctx; + char *propq; +} PKCS7_CTX; + typedef struct pkcs7_issuer_and_serial_st { X509_NAME *issuer; ASN1_INTEGER *serial; @@ -44,9 +64,35 @@ typedef struct pkcs7_signer_info_st { STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ /* The private key to sign with */ EVP_PKEY *pkey; + const PKCS7_CTX *ctx; } PKCS7_SIGNER_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO, PKCS7_SIGNER_INFO) +#define sk_PKCS7_SIGNER_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_value(sk, idx) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), (idx))) +#define sk_PKCS7_SIGNER_INFO_new(cmp) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp))) +#define sk_PKCS7_SIGNER_INFO_new_null() ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_SIGNER_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_SIGNER_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (n)) +#define sk_PKCS7_SIGNER_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_delete(sk, i) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (i))) +#define sk_PKCS7_SIGNER_INFO_delete_ptr(sk, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr))) +#define sk_PKCS7_SIGNER_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_pop(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_shift(sk) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk),ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_SIGNER_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), (idx)) +#define sk_PKCS7_SIGNER_INFO_set(sk, idx, ptr) ((PKCS7_SIGNER_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), (idx), ossl_check_PKCS7_SIGNER_INFO_type(ptr))) +#define sk_PKCS7_SIGNER_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr)) +#define sk_PKCS7_SIGNER_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_type(ptr), pnum) +#define sk_PKCS7_SIGNER_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk)) +#define sk_PKCS7_SIGNER_INFO_dup(sk) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk))) +#define sk_PKCS7_SIGNER_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_SIGNER_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_SIGNER_INFO_freefunc_type(freefunc))) +#define sk_PKCS7_SIGNER_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_SIGNER_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_SIGNER_INFO_sk_type(sk), ossl_check_PKCS7_SIGNER_INFO_compfunc_type(cmp))) -DEFINE_STACK_OF(PKCS7_SIGNER_INFO) typedef struct pkcs7_recip_info_st { ASN1_INTEGER *version; /* version 0 */ @@ -54,9 +100,36 @@ typedef struct pkcs7_recip_info_st { X509_ALGOR *key_enc_algor; ASN1_OCTET_STRING *enc_key; X509 *cert; /* get the pub-key from this */ + const PKCS7_CTX *ctx; } PKCS7_RECIP_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO, PKCS7_RECIP_INFO) +#define sk_PKCS7_RECIP_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_value(sk, idx) ((PKCS7_RECIP_INFO *)OPENSSL_sk_value(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), (idx))) +#define sk_PKCS7_RECIP_INFO_new(cmp) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp))) +#define sk_PKCS7_RECIP_INFO_new_null() ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_RECIP_INFO_new_reserve(cmp, n) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp), (n))) +#define sk_PKCS7_RECIP_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (n)) +#define sk_PKCS7_RECIP_INFO_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_delete(sk, i) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (i))) +#define sk_PKCS7_RECIP_INFO_delete_ptr(sk, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr))) +#define sk_PKCS7_RECIP_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_pop(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_pop(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_shift(sk) ((PKCS7_RECIP_INFO *)OPENSSL_sk_shift(ossl_check_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_RECIP_INFO_sk_type(sk),ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc)) +#define sk_PKCS7_RECIP_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), (idx)) +#define sk_PKCS7_RECIP_INFO_set(sk, idx, ptr) ((PKCS7_RECIP_INFO *)OPENSSL_sk_set(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), (idx), ossl_check_PKCS7_RECIP_INFO_type(ptr))) +#define sk_PKCS7_RECIP_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr)) +#define sk_PKCS7_RECIP_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_type(ptr), pnum) +#define sk_PKCS7_RECIP_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk)) +#define sk_PKCS7_RECIP_INFO_dup(sk) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk))) +#define sk_PKCS7_RECIP_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7_RECIP_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_copyfunc_type(copyfunc), ossl_check_PKCS7_RECIP_INFO_freefunc_type(freefunc))) +#define sk_PKCS7_RECIP_INFO_set_cmp_func(sk, cmp) ((sk_PKCS7_RECIP_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_RECIP_INFO_sk_type(sk), ossl_check_PKCS7_RECIP_INFO_compfunc_type(cmp))) + -DEFINE_STACK_OF(PKCS7_RECIP_INFO) typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ @@ -76,6 +149,7 @@ typedef struct pkcs7_enc_content_st { X509_ALGOR *algorithm; ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ const EVP_CIPHER *cipher; + const PKCS7_CTX *ctx; } PKCS7_ENC_CONTENT; typedef struct pkcs7_enveloped_st { @@ -141,9 +215,36 @@ typedef struct pkcs7_st { /* Anything else */ ASN1_TYPE *other; } d; + PKCS7_CTX ctx; } PKCS7; +SKM_DEFINE_STACK_OF_INTERNAL(PKCS7, PKCS7, PKCS7) +#define sk_PKCS7_num(sk) OPENSSL_sk_num(ossl_check_const_PKCS7_sk_type(sk)) +#define sk_PKCS7_value(sk, idx) ((PKCS7 *)OPENSSL_sk_value(ossl_check_const_PKCS7_sk_type(sk), (idx))) +#define sk_PKCS7_new(cmp) ((STACK_OF(PKCS7) *)OPENSSL_sk_new(ossl_check_PKCS7_compfunc_type(cmp))) +#define sk_PKCS7_new_null() ((STACK_OF(PKCS7) *)OPENSSL_sk_new_null()) +#define sk_PKCS7_new_reserve(cmp, n) ((STACK_OF(PKCS7) *)OPENSSL_sk_new_reserve(ossl_check_PKCS7_compfunc_type(cmp), (n))) +#define sk_PKCS7_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PKCS7_sk_type(sk), (n)) +#define sk_PKCS7_free(sk) OPENSSL_sk_free(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_zero(sk) OPENSSL_sk_zero(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_delete(sk, i) ((PKCS7 *)OPENSSL_sk_delete(ossl_check_PKCS7_sk_type(sk), (i))) +#define sk_PKCS7_delete_ptr(sk, ptr) ((PKCS7 *)OPENSSL_sk_delete_ptr(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr))) +#define sk_PKCS7_push(sk, ptr) OPENSSL_sk_push(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_pop(sk) ((PKCS7 *)OPENSSL_sk_pop(ossl_check_PKCS7_sk_type(sk))) +#define sk_PKCS7_shift(sk) ((PKCS7 *)OPENSSL_sk_shift(ossl_check_PKCS7_sk_type(sk))) +#define sk_PKCS7_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PKCS7_sk_type(sk),ossl_check_PKCS7_freefunc_type(freefunc)) +#define sk_PKCS7_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), (idx)) +#define sk_PKCS7_set(sk, idx, ptr) ((PKCS7 *)OPENSSL_sk_set(ossl_check_PKCS7_sk_type(sk), (idx), ossl_check_PKCS7_type(ptr))) +#define sk_PKCS7_find(sk, ptr) OPENSSL_sk_find(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr)) +#define sk_PKCS7_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_type(ptr), pnum) +#define sk_PKCS7_sort(sk) OPENSSL_sk_sort(ossl_check_PKCS7_sk_type(sk)) +#define sk_PKCS7_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PKCS7_sk_type(sk)) +#define sk_PKCS7_dup(sk) ((STACK_OF(PKCS7) *)OPENSSL_sk_dup(ossl_check_const_PKCS7_sk_type(sk))) +#define sk_PKCS7_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PKCS7) *)OPENSSL_sk_deep_copy(ossl_check_const_PKCS7_sk_type(sk), ossl_check_PKCS7_copyfunc_type(copyfunc), ossl_check_PKCS7_freefunc_type(freefunc))) +#define sk_PKCS7_set_cmp_func(sk, cmp) ((sk_PKCS7_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PKCS7_sk_type(sk), ossl_check_PKCS7_compfunc_type(cmp))) + -DEFINE_STACK_OF(PKCS7) # define PKCS7_OP_SET_DETACHED_SIGNATURE 1 # define PKCS7_OP_GET_DETACHED_SIGNATURE 2 @@ -208,11 +309,11 @@ int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, unsigned int *len); # ifndef OPENSSL_NO_STDIO PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); -int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); +int i2d_PKCS7_fp(FILE *fp, const PKCS7 *p7); # endif -PKCS7 *PKCS7_dup(PKCS7 *p7); +DECLARE_ASN1_DUP_FUNCTION(PKCS7) PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); -int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); +int i2d_PKCS7_bio(BIO *bp, const PKCS7 *p7); int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); @@ -225,6 +326,7 @@ DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) DECLARE_ASN1_FUNCTIONS(PKCS7) +PKCS7 *PKCS7_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) @@ -234,6 +336,7 @@ DECLARE_ASN1_PRINT_FUNCTION(PKCS7) long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); +int PKCS7_type_is_other(PKCS7 *p7); int PKCS7_set_type(PKCS7 *p7, int type); int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); @@ -269,13 +372,14 @@ int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7); ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, void *data); int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, void *value); -ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); -ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_attribute(const PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(const PKCS7_SIGNER_INFO *si, int nid); int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, @@ -283,6 +387,9 @@ int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, int flags); +PKCS7 *PKCS7_sign_ex(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags, OSSL_LIB_CTX *libctx, + const char *propq); PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, X509 *signcert, EVP_PKEY *pkey, @@ -295,6 +402,9 @@ STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags); PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, int flags); +PKCS7 *PKCS7_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, int flags, + OSSL_LIB_CTX *libctx, const char *propq); int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags); @@ -309,6 +419,7 @@ int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, const unsigned char *md, int mdlen); int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7_ex(BIO *bio, BIO **bcont, PKCS7 **p7); PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h.in new file mode 100644 index 00000000..0a0c415b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h.in @@ -0,0 +1,359 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_PKCS7_H +# define OPENSSL_PKCS7_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_PKCS7_H +# endif + +# include +# include +# include + +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/*- +Encryption_ID DES-CBC +Digest_ID MD5 +Digest_Encryption_ID rsaEncryption +Key_Encryption_ID rsaEncryption +*/ + +typedef struct PKCS7_CTX_st { + OSSL_LIB_CTX *libctx; + char *propq; +} PKCS7_CTX; + +typedef struct pkcs7_issuer_and_serial_st { + X509_NAME *issuer; + ASN1_INTEGER *serial; +} PKCS7_ISSUER_AND_SERIAL; + +typedef struct pkcs7_signer_info_st { + ASN1_INTEGER *version; /* version 1 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *digest_alg; + STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ + X509_ALGOR *digest_enc_alg; + ASN1_OCTET_STRING *enc_digest; + STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ + /* The private key to sign with */ + EVP_PKEY *pkey; + const PKCS7_CTX *ctx; +} PKCS7_SIGNER_INFO; +{- + generate_stack_macros("PKCS7_SIGNER_INFO"); +-} + +typedef struct pkcs7_recip_info_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *key_enc_algor; + ASN1_OCTET_STRING *enc_key; + X509 *cert; /* get the pub-key from this */ + const PKCS7_CTX *ctx; +} PKCS7_RECIP_INFO; +{- + generate_stack_macros("PKCS7_RECIP_INFO"); +-} + + +typedef struct pkcs7_signed_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + struct pkcs7_st *contents; +} PKCS7_SIGNED; +/* + * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about + * merging the two + */ + +typedef struct pkcs7_enc_content_st { + ASN1_OBJECT *content_type; + X509_ALGOR *algorithm; + ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ + const EVP_CIPHER *cipher; + const PKCS7_CTX *ctx; +} PKCS7_ENC_CONTENT; + +typedef struct pkcs7_enveloped_st { + ASN1_INTEGER *version; /* version 0 */ + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENVELOPE; + +typedef struct pkcs7_signedandenveloped_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + PKCS7_ENC_CONTENT *enc_data; + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; +} PKCS7_SIGN_ENVELOPE; + +typedef struct pkcs7_digest_st { + ASN1_INTEGER *version; /* version 0 */ + X509_ALGOR *md; /* md used */ + struct pkcs7_st *contents; + ASN1_OCTET_STRING *digest; +} PKCS7_DIGEST; + +typedef struct pkcs7_encrypted_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENCRYPT; + +typedef struct pkcs7_st { + /* + * The following is non NULL if it contains ASN1 encoding of this + * structure + */ + unsigned char *asn1; + long length; +# define PKCS7_S_HEADER 0 +# define PKCS7_S_BODY 1 +# define PKCS7_S_TAIL 2 + int state; /* used during processing */ + int detached; + ASN1_OBJECT *type; + /* content as defined by the type */ + /* + * all encryption/message digests are applied to the 'contents', leaving + * out the 'type' field. + */ + union { + char *ptr; + /* NID_pkcs7_data */ + ASN1_OCTET_STRING *data; + /* NID_pkcs7_signed */ + PKCS7_SIGNED *sign; + /* NID_pkcs7_enveloped */ + PKCS7_ENVELOPE *enveloped; + /* NID_pkcs7_signedAndEnveloped */ + PKCS7_SIGN_ENVELOPE *signed_and_enveloped; + /* NID_pkcs7_digest */ + PKCS7_DIGEST *digest; + /* NID_pkcs7_encrypted */ + PKCS7_ENCRYPT *encrypted; + /* Anything else */ + ASN1_TYPE *other; + } d; + PKCS7_CTX ctx; +} PKCS7; +{- + generate_stack_macros("PKCS7"); +-} + + +# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 +# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 + +# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) +# define PKCS7_get_attributes(si) ((si)->unauth_attr) + +# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) +# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) +# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) +# define PKCS7_type_is_signedAndEnveloped(a) \ + (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) +# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) +# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) + +# define PKCS7_set_detached(p,v) \ + PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) +# define PKCS7_get_detached(p) \ + PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) + +# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) + +/* S/MIME related flags */ + +# define PKCS7_TEXT 0x1 +# define PKCS7_NOCERTS 0x2 +# define PKCS7_NOSIGS 0x4 +# define PKCS7_NOCHAIN 0x8 +# define PKCS7_NOINTERN 0x10 +# define PKCS7_NOVERIFY 0x20 +# define PKCS7_DETACHED 0x40 +# define PKCS7_BINARY 0x80 +# define PKCS7_NOATTR 0x100 +# define PKCS7_NOSMIMECAP 0x200 +# define PKCS7_NOOLDMIMETYPE 0x400 +# define PKCS7_CRLFEOL 0x800 +# define PKCS7_STREAM 0x1000 +# define PKCS7_NOCRL 0x2000 +# define PKCS7_PARTIAL 0x4000 +# define PKCS7_REUSE_DIGEST 0x8000 +# define PKCS7_NO_DUAL_CONTENT 0x10000 + +/* Flags: for compatibility with older code */ + +# define SMIME_TEXT PKCS7_TEXT +# define SMIME_NOCERTS PKCS7_NOCERTS +# define SMIME_NOSIGS PKCS7_NOSIGS +# define SMIME_NOCHAIN PKCS7_NOCHAIN +# define SMIME_NOINTERN PKCS7_NOINTERN +# define SMIME_NOVERIFY PKCS7_NOVERIFY +# define SMIME_DETACHED PKCS7_DETACHED +# define SMIME_BINARY PKCS7_BINARY +# define SMIME_NOATTR PKCS7_NOATTR + +/* CRLF ASCII canonicalisation */ +# define SMIME_ASCIICRLF 0x80000 + +DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) + +int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, + const EVP_MD *type, unsigned char *md, + unsigned int *len); +# ifndef OPENSSL_NO_STDIO +PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); +int i2d_PKCS7_fp(FILE *fp, const PKCS7 *p7); +# endif +DECLARE_ASN1_DUP_FUNCTION(PKCS7) +PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); +int i2d_PKCS7_bio(BIO *bp, const PKCS7 *p7); +int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); +int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); + +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) +DECLARE_ASN1_FUNCTIONS(PKCS7) +PKCS7 *PKCS7_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) +DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) + +DECLARE_ASN1_NDEF_FUNCTION(PKCS7) +DECLARE_ASN1_PRINT_FUNCTION(PKCS7) + +long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); + +int PKCS7_type_is_other(PKCS7 *p7); +int PKCS7_set_type(PKCS7 *p7, int type); +int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); +int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); +int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, + const EVP_MD *dgst); +int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); +int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); +int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); +int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_content_new(PKCS7 *p7, int nid); +int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, + BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, + X509 *x509); + +BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); +int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); +BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); + +PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, + EVP_PKEY *pkey, const EVP_MD *dgst); +X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); +STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); + +PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); +void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, + X509_ALGOR **pdig, X509_ALGOR **psig); +void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); +int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); +int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); +int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); +int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); + +PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_get_octet_string(PKCS7 *p7); +ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, + void *data); +int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, + void *value); +ASN1_TYPE *PKCS7_get_attribute(const PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(const PKCS7_SIGNER_INFO *si, int nid); +int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); + +PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags); +PKCS7 *PKCS7_sign_ex(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags, OSSL_LIB_CTX *libctx, + const char *propq); + +PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, + X509 *signcert, EVP_PKEY *pkey, + const EVP_MD *md, int flags); + +int PKCS7_final(PKCS7 *p7, BIO *data, int flags); +int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, + BIO *indata, BIO *out, int flags); +STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, + int flags); +PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, + int flags); +PKCS7 *PKCS7_encrypt_ex(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, int flags, + OSSL_LIB_CTX *libctx, const char *propq); +int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, + int flags); + +int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, + STACK_OF(X509_ALGOR) *cap); +STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); +int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); + +int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); +int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); +int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, + const unsigned char *md, int mdlen); + +int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7_ex(BIO *bio, BIO **bcont, PKCS7 **p7); +PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); + +BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7err.h b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7err.h index 02e0299a..ceb1a501 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7err.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7err.h @@ -1,62 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_PKCS7ERR_H -# define HEADER_PKCS7ERR_H +#ifndef OPENSSL_PKCS7ERR_H +# define OPENSSL_PKCS7ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_PKCS7_strings(void); -/* - * PKCS7 function codes. - */ -# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 -# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 -# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 -# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 -# define PKCS7_F_PKCS7_ADD_CRL 101 -# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 -# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 -# define PKCS7_F_PKCS7_ADD_SIGNER 103 -# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 -# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 -# define PKCS7_F_PKCS7_CTRL 104 -# define PKCS7_F_PKCS7_DATADECODE 112 -# define PKCS7_F_PKCS7_DATAFINAL 128 -# define PKCS7_F_PKCS7_DATAINIT 105 -# define PKCS7_F_PKCS7_DATAVERIFY 107 -# define PKCS7_F_PKCS7_DECRYPT 114 -# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 -# define PKCS7_F_PKCS7_ENCODE_RINFO 132 -# define PKCS7_F_PKCS7_ENCRYPT 115 -# define PKCS7_F_PKCS7_FINAL 134 -# define PKCS7_F_PKCS7_FIND_DIGEST 127 -# define PKCS7_F_PKCS7_GET0_SIGNERS 124 -# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 -# define PKCS7_F_PKCS7_SET_CIPHER 108 -# define PKCS7_F_PKCS7_SET_CONTENT 109 -# define PKCS7_F_PKCS7_SET_DIGEST 126 -# define PKCS7_F_PKCS7_SET_TYPE 110 -# define PKCS7_F_PKCS7_SIGN 116 -# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 -# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 -# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 -# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 -# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 -# define PKCS7_F_PKCS7_VERIFY 117 /* * PKCS7 reason codes. diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/prov_ssl.h b/deps/openssl/android/x86_64/usr/local/include/openssl/prov_ssl.h new file mode 100644 index 00000000..d3e0896c --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/prov_ssl.h @@ -0,0 +1,34 @@ +/* + * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROV_SSL_H +# define OPENSSL_PROV_SSL_H +# pragma once + +# ifdef __cplusplus +extern "C" { +# endif + +/* SSL/TLS related defines useful to providers */ + +# define SSL_MAX_MASTER_KEY_LENGTH 48 + +# define SSL3_VERSION 0x0300 +# define TLS1_VERSION 0x0301 +# define TLS1_1_VERSION 0x0302 +# define TLS1_2_VERSION 0x0303 +# define TLS1_3_VERSION 0x0304 +# define DTLS1_VERSION 0xFEFF +# define DTLS1_2_VERSION 0xFEFD +# define DTLS1_BAD_VER 0x0100 + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_PROV_SSL_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/proverr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/proverr.h new file mode 100644 index 00000000..5d5c16d9 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/proverr.h @@ -0,0 +1,149 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROVERR_H +# define OPENSSL_PROVERR_H +# pragma once + +# include +# include +# include + + + +/* + * PROV reason codes. + */ +# define PROV_R_ADDITIONAL_INPUT_TOO_LONG 184 +# define PROV_R_ALGORITHM_MISMATCH 173 +# define PROV_R_ALREADY_INSTANTIATED 185 +# define PROV_R_BAD_DECRYPT 100 +# define PROV_R_BAD_ENCODING 141 +# define PROV_R_BAD_LENGTH 142 +# define PROV_R_BAD_TLS_CLIENT_VERSION 161 +# define PROV_R_BN_ERROR 160 +# define PROV_R_CIPHER_OPERATION_FAILED 102 +# define PROV_R_DERIVATION_FUNCTION_INIT_FAILED 205 +# define PROV_R_DIGEST_NOT_ALLOWED 174 +# define PROV_R_EMS_NOT_ENABLED 233 +# define PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK 186 +# define PROV_R_ERROR_INSTANTIATING_DRBG 188 +# define PROV_R_ERROR_RETRIEVING_ENTROPY 189 +# define PROV_R_ERROR_RETRIEVING_NONCE 190 +# define PROV_R_FAILED_DURING_DERIVATION 164 +# define PROV_R_FAILED_TO_CREATE_LOCK 180 +# define PROV_R_FAILED_TO_DECRYPT 162 +# define PROV_R_FAILED_TO_GENERATE_KEY 121 +# define PROV_R_FAILED_TO_GET_PARAMETER 103 +# define PROV_R_FAILED_TO_SET_PARAMETER 104 +# define PROV_R_FAILED_TO_SIGN 175 +# define PROV_R_FIPS_MODULE_CONDITIONAL_ERROR 227 +# define PROV_R_FIPS_MODULE_ENTERING_ERROR_STATE 224 +# define PROV_R_FIPS_MODULE_IN_ERROR_STATE 225 +# define PROV_R_GENERATE_ERROR 191 +# define PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 165 +# define PROV_R_INDICATOR_INTEGRITY_FAILURE 210 +# define PROV_R_INSUFFICIENT_DRBG_STRENGTH 181 +# define PROV_R_INVALID_AAD 108 +# define PROV_R_INVALID_CONFIG_DATA 211 +# define PROV_R_INVALID_CONSTANT_LENGTH 157 +# define PROV_R_INVALID_CURVE 176 +# define PROV_R_INVALID_CUSTOM_LENGTH 111 +# define PROV_R_INVALID_DATA 115 +# define PROV_R_INVALID_DIGEST 122 +# define PROV_R_INVALID_DIGEST_LENGTH 166 +# define PROV_R_INVALID_DIGEST_SIZE 218 +# define PROV_R_INVALID_INPUT_LENGTH 230 +# define PROV_R_INVALID_ITERATION_COUNT 123 +# define PROV_R_INVALID_IV_LENGTH 109 +# define PROV_R_INVALID_KEY 158 +# define PROV_R_INVALID_KEY_LENGTH 105 +# define PROV_R_INVALID_MAC 151 +# define PROV_R_INVALID_MGF1_MD 167 +# define PROV_R_INVALID_MODE 125 +# define PROV_R_INVALID_OUTPUT_LENGTH 217 +# define PROV_R_INVALID_PADDING_MODE 168 +# define PROV_R_INVALID_PUBINFO 198 +# define PROV_R_INVALID_SALT_LENGTH 112 +# define PROV_R_INVALID_SEED_LENGTH 154 +# define PROV_R_INVALID_SIGNATURE_SIZE 179 +# define PROV_R_INVALID_STATE 212 +# define PROV_R_INVALID_TAG 110 +# define PROV_R_INVALID_TAG_LENGTH 118 +# define PROV_R_INVALID_UKM_LENGTH 200 +# define PROV_R_INVALID_X931_DIGEST 170 +# define PROV_R_IN_ERROR_STATE 192 +# define PROV_R_KEY_SETUP_FAILED 101 +# define PROV_R_KEY_SIZE_TOO_SMALL 171 +# define PROV_R_LENGTH_TOO_LARGE 202 +# define PROV_R_MISMATCHING_DOMAIN_PARAMETERS 203 +# define PROV_R_MISSING_CEK_ALG 144 +# define PROV_R_MISSING_CIPHER 155 +# define PROV_R_MISSING_CONFIG_DATA 213 +# define PROV_R_MISSING_CONSTANT 156 +# define PROV_R_MISSING_KEY 128 +# define PROV_R_MISSING_MAC 150 +# define PROV_R_MISSING_MESSAGE_DIGEST 129 +# define PROV_R_MISSING_OID 209 +# define PROV_R_MISSING_PASS 130 +# define PROV_R_MISSING_SALT 131 +# define PROV_R_MISSING_SECRET 132 +# define PROV_R_MISSING_SEED 140 +# define PROV_R_MISSING_SESSION_ID 133 +# define PROV_R_MISSING_TYPE 134 +# define PROV_R_MISSING_XCGHASH 135 +# define PROV_R_MODULE_INTEGRITY_FAILURE 214 +# define PROV_R_NOT_A_PRIVATE_KEY 221 +# define PROV_R_NOT_A_PUBLIC_KEY 220 +# define PROV_R_NOT_INSTANTIATED 193 +# define PROV_R_NOT_PARAMETERS 226 +# define PROV_R_NOT_SUPPORTED 136 +# define PROV_R_NOT_XOF_OR_INVALID_LENGTH 113 +# define PROV_R_NO_KEY_SET 114 +# define PROV_R_NO_PARAMETERS_SET 177 +# define PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 178 +# define PROV_R_OUTPUT_BUFFER_TOO_SMALL 106 +# define PROV_R_PARENT_CANNOT_GENERATE_RANDOM_NUMBERS 228 +# define PROV_R_PARENT_CANNOT_SUPPLY_ENTROPY_SEED 187 +# define PROV_R_PARENT_LOCKING_NOT_ENABLED 182 +# define PROV_R_PARENT_STRENGTH_TOO_WEAK 194 +# define PROV_R_PATH_MUST_BE_ABSOLUTE 219 +# define PROV_R_PERSONALISATION_STRING_TOO_LONG 195 +# define PROV_R_PSS_SALTLEN_TOO_SMALL 172 +# define PROV_R_REQUEST_TOO_LARGE_FOR_DRBG 196 +# define PROV_R_REQUIRE_CTR_MODE_CIPHER 206 +# define PROV_R_RESEED_ERROR 197 +# define PROV_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 222 +# define PROV_R_SEED_SOURCES_MUST_NOT_HAVE_A_PARENT 229 +# define PROV_R_SELF_TEST_KAT_FAILURE 215 +# define PROV_R_SELF_TEST_POST_FAILURE 216 +# define PROV_R_TAG_NOT_NEEDED 120 +# define PROV_R_TAG_NOT_SET 119 +# define PROV_R_TOO_MANY_RECORDS 126 +# define PROV_R_UNABLE_TO_FIND_CIPHERS 207 +# define PROV_R_UNABLE_TO_GET_PARENT_STRENGTH 199 +# define PROV_R_UNABLE_TO_GET_PASSPHRASE 159 +# define PROV_R_UNABLE_TO_INITIALISE_CIPHERS 208 +# define PROV_R_UNABLE_TO_LOAD_SHA256 147 +# define PROV_R_UNABLE_TO_LOCK_PARENT 201 +# define PROV_R_UNABLE_TO_RESEED 204 +# define PROV_R_UNSUPPORTED_CEK_ALG 145 +# define PROV_R_UNSUPPORTED_KEY_SIZE 153 +# define PROV_R_UNSUPPORTED_MAC_TYPE 137 +# define PROV_R_UNSUPPORTED_NUMBER_OF_ROUNDS 152 +# define PROV_R_URI_AUTHORITY_UNSUPPORTED 223 +# define PROV_R_VALUE_ERROR 138 +# define PROV_R_WRONG_FINAL_BLOCK_LENGTH 107 +# define PROV_R_WRONG_OUTPUT_BUFFER_SIZE 139 +# define PROV_R_XOF_DIGESTS_NOT_ALLOWED 183 +# define PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE 148 +# define PROV_R_XTS_DUPLICATED_KEYS 149 + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/provider.h b/deps/openssl/android/x86_64/usr/local/include/openssl/provider.h new file mode 100644 index 00000000..dc86ff58 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/provider.h @@ -0,0 +1,60 @@ +/* + * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_PROVIDER_H +# define OPENSSL_PROVIDER_H +# pragma once + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* Set the default provider search path */ +int OSSL_PROVIDER_set_default_search_path(OSSL_LIB_CTX *, const char *path); + +/* Load and unload a provider */ +OSSL_PROVIDER *OSSL_PROVIDER_load(OSSL_LIB_CTX *, const char *name); +OSSL_PROVIDER *OSSL_PROVIDER_try_load(OSSL_LIB_CTX *, const char *name, + int retain_fallbacks); +int OSSL_PROVIDER_unload(OSSL_PROVIDER *prov); +int OSSL_PROVIDER_available(OSSL_LIB_CTX *, const char *name); +int OSSL_PROVIDER_do_all(OSSL_LIB_CTX *ctx, + int (*cb)(OSSL_PROVIDER *provider, void *cbdata), + void *cbdata); + +const OSSL_PARAM *OSSL_PROVIDER_gettable_params(const OSSL_PROVIDER *prov); +int OSSL_PROVIDER_get_params(const OSSL_PROVIDER *prov, OSSL_PARAM params[]); +int OSSL_PROVIDER_self_test(const OSSL_PROVIDER *prov); +int OSSL_PROVIDER_get_capabilities(const OSSL_PROVIDER *prov, + const char *capability, + OSSL_CALLBACK *cb, + void *arg); + +const OSSL_ALGORITHM *OSSL_PROVIDER_query_operation(const OSSL_PROVIDER *prov, + int operation_id, + int *no_cache); +void OSSL_PROVIDER_unquery_operation(const OSSL_PROVIDER *prov, + int operation_id, const OSSL_ALGORITHM *algs); +void *OSSL_PROVIDER_get0_provider_ctx(const OSSL_PROVIDER *prov); +const OSSL_DISPATCH *OSSL_PROVIDER_get0_dispatch(const OSSL_PROVIDER *prov); + +/* Add a built in providers */ +int OSSL_PROVIDER_add_builtin(OSSL_LIB_CTX *, const char *name, + OSSL_provider_init_fn *init_fn); + +/* Information */ +const char *OSSL_PROVIDER_get0_name(const OSSL_PROVIDER *prov); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/rand.h b/deps/openssl/android/x86_64/usr/local/include/openssl/rand.h index 38a2a271..90e0f0a0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/rand.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/rand.h @@ -1,24 +1,42 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RAND_H -# define HEADER_RAND_H +#ifndef OPENSSL_RAND_H +# define OPENSSL_RAND_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RAND_H +# endif # include -# include +# include # include # include +# include #ifdef __cplusplus extern "C" { #endif +/* + * Default security strength (in the sense of [NIST SP 800-90Ar1]) + * + * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that + * of the cipher by collecting less entropy. The current DRBG implementation + * does not take RAND_DRBG_STRENGTH into account and sets the strength of the + * DRBG to that of the cipher. + */ +# define RAND_DRBG_STRENGTH 256 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 struct rand_meth_st { int (*seed) (const void *buf, int num); int (*bytes) (unsigned char *buf, int num); @@ -28,26 +46,55 @@ struct rand_meth_st { int (*status) (void); }; -int RAND_set_rand_method(const RAND_METHOD *meth); -const RAND_METHOD *RAND_get_rand_method(void); -# ifndef OPENSSL_NO_ENGINE -int RAND_set_rand_engine(ENGINE *engine); -# endif +OSSL_DEPRECATEDIN_3_0 int RAND_set_rand_method(const RAND_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const RAND_METHOD *RAND_get_rand_method(void); +# ifndef OPENSSL_NO_ENGINE +OSSL_DEPRECATEDIN_3_0 int RAND_set_rand_engine(ENGINE *engine); +# endif -RAND_METHOD *RAND_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 RAND_METHOD *RAND_OpenSSL(void); +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define RAND_cleanup() while(0) continue # endif int RAND_bytes(unsigned char *buf, int num); int RAND_priv_bytes(unsigned char *buf, int num); -DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) + +/* + * Equivalent of RAND_priv_bytes() but additionally taking an OSSL_LIB_CTX and + * a strength. + */ +int RAND_priv_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num, + unsigned int strength); + +/* + * Equivalent of RAND_bytes() but additionally taking an OSSL_LIB_CTX and + * a strength. + */ +int RAND_bytes_ex(OSSL_LIB_CTX *ctx, unsigned char *buf, size_t num, + unsigned int strength); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 int RAND_pseudo_bytes(unsigned char *buf, int num); +# endif + +EVP_RAND_CTX *RAND_get0_primary(OSSL_LIB_CTX *ctx); +EVP_RAND_CTX *RAND_get0_public(OSSL_LIB_CTX *ctx); +EVP_RAND_CTX *RAND_get0_private(OSSL_LIB_CTX *ctx); +int RAND_set0_public(OSSL_LIB_CTX *ctx, EVP_RAND_CTX *rand); +int RAND_set0_private(OSSL_LIB_CTX *ctx, EVP_RAND_CTX *rand); + +int RAND_set_DRBG_type(OSSL_LIB_CTX *ctx, const char *drbg, const char *propq, + const char *cipher, const char *digest); +int RAND_set_seed_source_type(OSSL_LIB_CTX *ctx, const char *seed, + const char *propq); void RAND_seed(const void *buf, int num); void RAND_keep_random_devices_open(int keep); # if defined(__ANDROID__) && defined(__NDK_FPABI__) -__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ +__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ # endif void RAND_add(const void *buf, int num, double randomness); int RAND_load_file(const char *file, long max_bytes); @@ -65,11 +112,12 @@ int RAND_poll(void); # if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) /* application has to include in order to use these */ -DEPRECATEDIN_1_1_0(void RAND_screen(void)) -DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void RAND_screen(void); +OSSL_DEPRECATEDIN_1_1_0 int RAND_event(UINT, WPARAM, LPARAM); +# endif # endif - #ifdef __cplusplus } #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/rand_drbg.h b/deps/openssl/android/x86_64/usr/local/include/openssl/rand_drbg.h deleted file mode 100644 index 45b731b7..00000000 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/rand_drbg.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef HEADER_DRBG_RAND_H -# define HEADER_DRBG_RAND_H - -# include -# include -# include - -/* - * RAND_DRBG flags - * - * Note: if new flags are added, the constant `rand_drbg_used_flags` - * in drbg_lib.c needs to be updated accordingly. - */ - -/* In CTR mode, disable derivation function ctr_df */ -# define RAND_DRBG_FLAG_CTR_NO_DF 0x1 - - -# if OPENSSL_API_COMPAT < 0x10200000L -/* This #define was replaced by an internal constant and should not be used. */ -# define RAND_DRBG_USED_FLAGS (RAND_DRBG_FLAG_CTR_NO_DF) -# endif - -/* - * Default security strength (in the sense of [NIST SP 800-90Ar1]) - * - * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that - * of the cipher by collecting less entropy. The current DRBG implementation - * does not take RAND_DRBG_STRENGTH into account and sets the strength of the - * DRBG to that of the cipher. - * - * RAND_DRBG_STRENGTH is currently only used for the legacy RAND - * implementation. - * - * Currently supported ciphers are: NID_aes_128_ctr, NID_aes_192_ctr and - * NID_aes_256_ctr - */ -# define RAND_DRBG_STRENGTH 256 -/* Default drbg type */ -# define RAND_DRBG_TYPE NID_aes_256_ctr -/* Default drbg flags */ -# define RAND_DRBG_FLAGS 0 - - -# ifdef __cplusplus -extern "C" { -# endif - -/* - * Object lifetime functions. - */ -RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent); -RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent); -int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags); -int RAND_DRBG_set_defaults(int type, unsigned int flags); -int RAND_DRBG_instantiate(RAND_DRBG *drbg, - const unsigned char *pers, size_t perslen); -int RAND_DRBG_uninstantiate(RAND_DRBG *drbg); -void RAND_DRBG_free(RAND_DRBG *drbg); - -/* - * Object "use" functions. - */ -int RAND_DRBG_reseed(RAND_DRBG *drbg, - const unsigned char *adin, size_t adinlen, - int prediction_resistance); -int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen, - int prediction_resistance, - const unsigned char *adin, size_t adinlen); -int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen); - -int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval); -int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval); - -int RAND_DRBG_set_reseed_defaults( - unsigned int master_reseed_interval, - unsigned int slave_reseed_interval, - time_t master_reseed_time_interval, - time_t slave_reseed_time_interval - ); - -RAND_DRBG *RAND_DRBG_get0_master(void); -RAND_DRBG *RAND_DRBG_get0_public(void); -RAND_DRBG *RAND_DRBG_get0_private(void); - -/* - * EXDATA - */ -# define RAND_DRBG_get_ex_new_index(l, p, newf, dupf, freef) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG, l, p, newf, dupf, freef) -int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *arg); -void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx); - -/* - * Callback function typedefs - */ -typedef size_t (*RAND_DRBG_get_entropy_fn)(RAND_DRBG *drbg, - unsigned char **pout, - int entropy, size_t min_len, - size_t max_len, - int prediction_resistance); -typedef void (*RAND_DRBG_cleanup_entropy_fn)(RAND_DRBG *ctx, - unsigned char *out, size_t outlen); -typedef size_t (*RAND_DRBG_get_nonce_fn)(RAND_DRBG *drbg, unsigned char **pout, - int entropy, size_t min_len, - size_t max_len); -typedef void (*RAND_DRBG_cleanup_nonce_fn)(RAND_DRBG *drbg, - unsigned char *out, size_t outlen); - -int RAND_DRBG_set_callbacks(RAND_DRBG *drbg, - RAND_DRBG_get_entropy_fn get_entropy, - RAND_DRBG_cleanup_entropy_fn cleanup_entropy, - RAND_DRBG_get_nonce_fn get_nonce, - RAND_DRBG_cleanup_nonce_fn cleanup_nonce); - - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/randerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/randerr.h index 79d57905..b5e08e43 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/randerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/randerr.h @@ -1,54 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RANDERR_H -# define HEADER_RANDERR_H +#ifndef OPENSSL_RANDERR_H +# define OPENSSL_RANDERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RAND_strings(void); -/* - * RAND function codes. - */ -# define RAND_F_DATA_COLLECT_METHOD 127 -# define RAND_F_DRBG_BYTES 101 -# define RAND_F_DRBG_GET_ENTROPY 105 -# define RAND_F_DRBG_SETUP 117 -# define RAND_F_GET_ENTROPY 106 -# define RAND_F_RAND_BYTES 100 -# define RAND_F_RAND_DRBG_ENABLE_LOCKING 119 -# define RAND_F_RAND_DRBG_GENERATE 107 -# define RAND_F_RAND_DRBG_GET_ENTROPY 120 -# define RAND_F_RAND_DRBG_GET_NONCE 123 -# define RAND_F_RAND_DRBG_INSTANTIATE 108 -# define RAND_F_RAND_DRBG_NEW 109 -# define RAND_F_RAND_DRBG_RESEED 110 -# define RAND_F_RAND_DRBG_RESTART 102 -# define RAND_F_RAND_DRBG_SET 104 -# define RAND_F_RAND_DRBG_SET_DEFAULTS 121 -# define RAND_F_RAND_DRBG_UNINSTANTIATE 118 -# define RAND_F_RAND_LOAD_FILE 111 -# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 122 -# define RAND_F_RAND_POOL_ADD 103 -# define RAND_F_RAND_POOL_ADD_BEGIN 113 -# define RAND_F_RAND_POOL_ADD_END 114 -# define RAND_F_RAND_POOL_ATTACH 124 -# define RAND_F_RAND_POOL_BYTES_NEEDED 115 -# define RAND_F_RAND_POOL_GROW 125 -# define RAND_F_RAND_POOL_NEW 116 -# define RAND_F_RAND_PSEUDO_BYTES 126 -# define RAND_F_RAND_WRITE_FILE 112 /* * RAND reason codes. @@ -71,6 +39,7 @@ int ERR_load_RAND_strings(void); # define RAND_R_FUNC_NOT_IMPLEMENTED 101 # define RAND_R_FWRITE_ERROR 123 # define RAND_R_GENERATE_ERROR 112 +# define RAND_R_INSUFFICIENT_DRBG_STRENGTH 139 # define RAND_R_INTERNAL_ERROR 113 # define RAND_R_IN_ERROR_STATE 114 # define RAND_R_NOT_A_REGULAR_FILE 122 @@ -88,6 +57,11 @@ int ERR_load_RAND_strings(void); # define RAND_R_SELFTEST_FAILURE 119 # define RAND_R_TOO_LITTLE_NONCE_REQUESTED 135 # define RAND_R_TOO_MUCH_NONCE_REQUESTED 136 +# define RAND_R_UNABLE_TO_CREATE_DRBG 143 +# define RAND_R_UNABLE_TO_FETCH_DRBG 144 +# define RAND_R_UNABLE_TO_GET_PARENT_RESEED_PROP_COUNTER 141 +# define RAND_R_UNABLE_TO_GET_PARENT_STRENGTH 138 +# define RAND_R_UNABLE_TO_LOCK_PARENT 140 # define RAND_R_UNSUPPORTED_DRBG_FLAGS 132 # define RAND_R_UNSUPPORTED_DRBG_TYPE 120 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/rc2.h b/deps/openssl/android/x86_64/usr/local/include/openssl/rc2.h index 585f9e4c..ff633fd8 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/rc2.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/rc2.h @@ -1,51 +1,68 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC2_H -# define HEADER_RC2_H +#ifndef OPENSSL_RC2_H +# define OPENSSL_RC2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC2_H +# endif # include # ifndef OPENSSL_NO_RC2 -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif +# define RC2_BLOCK 8 +# define RC2_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef unsigned int RC2_INT; -# define RC2_ENCRYPT 1 -# define RC2_DECRYPT 0 - -# define RC2_BLOCK 8 -# define RC2_KEY_LENGTH 16 +# define RC2_ENCRYPT 1 +# define RC2_DECRYPT 0 typedef struct rc2_key_st { RC2_INT data[64]; } RC2_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void RC2_set_key(RC2_KEY *key, int len, + const unsigned char *data, int bits); +OSSL_DEPRECATEDIN_3_0 void RC2_ecb_encrypt(const unsigned char *in, + unsigned char *out, RC2_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_encrypt(unsigned long *data, RC2_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC2_decrypt(unsigned long *data, RC2_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC2_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *ks, unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *schedule, + unsigned char *ivec, + int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void RC2_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC2_KEY *schedule, + unsigned char *ivec, + int *num); +# endif -void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); -void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC2_KEY *key, int enc); -void RC2_encrypt(unsigned long *data, RC2_KEY *key); -void RC2_decrypt(unsigned long *data, RC2_KEY *key); -void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - RC2_KEY *ks, unsigned char *iv, int enc); -void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num, int enc); -void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC2_KEY *schedule, unsigned char *ivec, - int *num); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/rc4.h b/deps/openssl/android/x86_64/usr/local/include/openssl/rc4.h index 86803b37..600b2885 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/rc4.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/rc4.h @@ -1,36 +1,47 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC4_H -# define HEADER_RC4_H +#ifndef OPENSSL_RC4_H +# define OPENSSL_RC4_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC4_H +# endif # include # ifndef OPENSSL_NO_RC4 -# include -#ifdef __cplusplus +# include +# ifdef __cplusplus extern "C" { -#endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 typedef struct rc4_key_st { RC4_INT x, y; RC4_INT data[256]; } RC4_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 const char *RC4_options(void); +OSSL_DEPRECATEDIN_3_0 void RC4_set_key(RC4_KEY *key, int len, + const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 void RC4(RC4_KEY *key, size_t len, + const unsigned char *indata, + unsigned char *outdata); +# endif -const char *RC4_options(void); -void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, - unsigned char *outdata); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/rc5.h b/deps/openssl/android/x86_64/usr/local/include/openssl/rc5.h index 793f88e4..de833523 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/rc5.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/rc5.h @@ -1,63 +1,79 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RC5_H -# define HEADER_RC5_H +#ifndef OPENSSL_RC5_H +# define OPENSSL_RC5_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RC5_H +# endif # include # ifndef OPENSSL_NO_RC5 -# ifdef __cplusplus +# ifdef __cplusplus extern "C" { -# endif +# endif -# define RC5_ENCRYPT 1 -# define RC5_DECRYPT 0 +# define RC5_32_BLOCK 8 +# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ -# define RC5_32_INT unsigned int +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define RC5_ENCRYPT 1 +# define RC5_DECRYPT 0 -# define RC5_32_BLOCK 8 -# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ +# define RC5_32_INT unsigned int /* * This are the only values supported. Tweak the code if you want more The * most supported modes will be RC5-32/12/16 RC5-32/16/8 */ -# define RC5_8_ROUNDS 8 -# define RC5_12_ROUNDS 12 -# define RC5_16_ROUNDS 16 +# define RC5_8_ROUNDS 8 +# define RC5_12_ROUNDS 12 +# define RC5_16_ROUNDS 16 typedef struct rc5_key_st { /* Number of rounds */ int rounds; RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)]; } RC5_32_KEY; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RC5_32_set_key(RC5_32_KEY *key, int len, + const unsigned char *data, + int rounds); +OSSL_DEPRECATEDIN_3_0 void RC5_32_ecb_encrypt(const unsigned char *in, + unsigned char *out, + RC5_32_KEY *key, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); +OSSL_DEPRECATEDIN_3_0 void RC5_32_cbc_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *ks, unsigned char *iv, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_cfb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *schedule, + unsigned char *ivec, int *num, + int enc); +OSSL_DEPRECATEDIN_3_0 void RC5_32_ofb64_encrypt(const unsigned char *in, + unsigned char *out, long length, + RC5_32_KEY *schedule, + unsigned char *ivec, int *num); +# endif -void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, - int rounds); -void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out, - RC5_32_KEY *key, int enc); -void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); -void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *ks, unsigned char *iv, - int enc); -void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num, int enc); -void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out, - long length, RC5_32_KEY *schedule, - unsigned char *ivec, int *num); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ripemd.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ripemd.h index c42026aa..900ee317 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ripemd.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ripemd.h @@ -1,29 +1,38 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RIPEMD_H -# define HEADER_RIPEMD_H +#ifndef OPENSSL_RIPEMD_H +# define OPENSSL_RIPEMD_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RIPEMD_H +# endif # include -#ifndef OPENSSL_NO_RMD160 -# include -# include -# ifdef __cplusplus +# ifndef OPENSSL_NO_RMD160 +# include +# include + +# define RIPEMD160_DIGEST_LENGTH 20 + +# ifdef __cplusplus extern "C" { -# endif +# endif +# if !defined(OPENSSL_NO_DEPRECATED_3_0) -# define RIPEMD160_LONG unsigned int +# define RIPEMD160_LONG unsigned int -# define RIPEMD160_CBLOCK 64 -# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) -# define RIPEMD160_DIGEST_LENGTH 20 +# define RIPEMD160_CBLOCK 64 +# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) typedef struct RIPEMD160state_st { RIPEMD160_LONG A, B, C, D, E; @@ -31,17 +40,20 @@ typedef struct RIPEMD160state_st { RIPEMD160_LONG data[RIPEMD160_LBLOCK]; unsigned int num; } RIPEMD160_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Init(RIPEMD160_CTX *c); +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, + size_t len); +OSSL_DEPRECATEDIN_3_0 int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *RIPEMD160(const unsigned char *d, size_t n, + unsigned char *md); +OSSL_DEPRECATEDIN_3_0 void RIPEMD160_Transform(RIPEMD160_CTX *c, + const unsigned char *b); +# endif -int RIPEMD160_Init(RIPEMD160_CTX *c); -int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); -int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); -unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); -void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); - -# ifdef __cplusplus +# ifdef __cplusplus } +# endif # endif -# endif - - #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/rsa.h b/deps/openssl/android/x86_64/usr/local/include/openssl/rsa.h index 5e76365c..d0c95992 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/rsa.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/rsa.h @@ -1,70 +1,78 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RSA_H -# define HEADER_RSA_H +#ifndef OPENSSL_RSA_H +# define OPENSSL_RSA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_RSA_H +# endif # include -# ifndef OPENSSL_NO_RSA # include # include # include -# include -# if OPENSSL_API_COMPAT < 0x10100000L +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif # include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + # ifdef __cplusplus extern "C" { # endif -/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ - # ifndef OPENSSL_RSA_MAX_MODULUS_BITS # define OPENSSL_RSA_MAX_MODULUS_BITS 16384 # endif -# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024 - -# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS -# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 -# endif -# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS - -/* exponent limit enforced for "large" modulus only */ -# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 -# endif - # define RSA_3 0x3L # define RSA_F4 0x10001L +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ + +# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 2048 + +# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS +# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 +# endif + +/* exponent limit enforced for "large" modulus only */ +# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS +# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 +# endif /* based on RFC 8017 appendix A.1.2 */ -# define RSA_ASN1_VERSION_DEFAULT 0 -# define RSA_ASN1_VERSION_MULTI 1 +# define RSA_ASN1_VERSION_DEFAULT 0 +# define RSA_ASN1_VERSION_MULTI 1 -# define RSA_DEFAULT_PRIME_NUM 2 +# define RSA_DEFAULT_PRIME_NUM 2 -# define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private - * match */ - -# define RSA_FLAG_CACHE_PUBLIC 0x0002 -# define RSA_FLAG_CACHE_PRIVATE 0x0004 -# define RSA_FLAG_BLINDING 0x0008 -# define RSA_FLAG_THREAD_SAFE 0x0010 +# define RSA_METHOD_FLAG_NO_CHECK 0x0001 +# define RSA_FLAG_CACHE_PUBLIC 0x0002 +# define RSA_FLAG_CACHE_PRIVATE 0x0004 +# define RSA_FLAG_BLINDING 0x0008 +# define RSA_FLAG_THREAD_SAFE 0x0010 /* * This flag means the private key operations will be handled by rsa_mod_exp * and that they do not depend on the private key components being present: * for example a key stored in external hardware. Without this flag * bn_mod_exp gets called when private key components are absent. */ -# define RSA_FLAG_EXT_PKEY 0x0020 +# define RSA_FLAG_EXT_PKEY 0x0020 /* * new with 0.9.6j and 0.9.7b; the built-in @@ -72,14 +80,14 @@ extern "C" { * default (ignoring RSA_FLAG_BLINDING), * but other engines might not need it */ -# define RSA_FLAG_NO_BLINDING 0x0080 -# if OPENSSL_API_COMPAT < 0x10100000L +# define RSA_FLAG_NO_BLINDING 0x0080 +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ /* * Does nothing. Previously this switched off constant time behaviour. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define RSA_FLAG_NO_CONSTTIME 0x0000 # endif -# if OPENSSL_API_COMPAT < 0x00908000L /* deprecated name for the flag*/ /* * new with 0.9.7h; the built-in RSA @@ -89,79 +97,78 @@ extern "C" { * faster variable sliding window method to * be used for all exponents. */ +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 # define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME # endif -# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_RSA_PADDING, pad, NULL) +/*- + * New with 3.0: use part of the flags to denote exact type of RSA key, + * some of which are limited to specific signature and encryption schemes. + * These different types share the same RSA structure, but indicate the + * use of certain fields in that structure. + * Currently known are: + * RSA - this is the "normal" unlimited RSA structure (typenum 0) + * RSASSA-PSS - indicates that the PSS parameters are used. + * RSAES-OAEP - no specific field used for the moment, but OAEP padding + * is expected. (currently unused) + * + * 4 bits allow for 16 types + */ +# define RSA_FLAG_TYPE_MASK 0xF000 +# define RSA_FLAG_TYPE_RSA 0x0000 +# define RSA_FLAG_TYPE_RSASSAPSS 0x1000 +# define RSA_FLAG_TYPE_RSAESOAEP 0x2000 -# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ - RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) +int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad_mode); +int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad_mode); + +int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int saltlen); +int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *saltlen); + +int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int bits); +int EVP_PKEY_CTX_set1_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); +int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes); +int EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(EVP_PKEY_CTX *ctx, int saltlen); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); +# endif -# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) /* Salt length matches digest */ # define RSA_PSS_SALTLEN_DIGEST -1 /* Verify only: auto detect salt length */ # define RSA_PSS_SALTLEN_AUTO -2 /* Set salt length to maximum possible */ # define RSA_PSS_SALTLEN_MAX -3 +/* Auto-detect on verify, set salt length to min(maximum possible, digest + * length) on sign */ +# define RSA_PSS_SALTLEN_AUTO_DIGEST_MAX -4 /* Old compatible max salt length for sign only */ # define RSA_PSS_SALTLEN_MAX_SIGN -2 -# define EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx, len) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) +int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); +int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_get_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, char *name, + size_t namelen); +int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md_name(EVP_PKEY_CTX *ctx, + const char *mdname); -# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ - RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ - EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, plen) +int EVP_PKEY_CTX_set_rsa_pss_keygen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_pss_keygen_md_name(EVP_PKEY_CTX *ctx, + const char *mdname, + const char *mdprops); -# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) - -# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) - -# define EVP_PKEY_CTX_set_rsa_keygen_primes(ctx, primes) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES, primes, NULL) - -# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ - EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)(md)) - -# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ - RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)(pmd)) - -# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)(l)) - -# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ - EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)(l)) - -# define EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx, md) \ - EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, \ - EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_MD, \ - 0, (void *)(md)) +int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); +int EVP_PKEY_CTX_set_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); +int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); +int EVP_PKEY_CTX_get_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, char *name, + size_t namelen); +int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, void *label, int llen); +int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) @@ -182,104 +189,135 @@ extern "C" { # define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) -# define RSA_PKCS1_PADDING 1 -# define RSA_SSLV23_PADDING 2 -# define RSA_NO_PADDING 3 -# define RSA_PKCS1_OAEP_PADDING 4 -# define RSA_X931_PADDING 5 -/* EVP_PKEY_ only */ -# define RSA_PKCS1_PSS_PADDING 6 +# define RSA_PKCS1_PADDING 1 +# define RSA_NO_PADDING 3 +# define RSA_PKCS1_OAEP_PADDING 4 +# define RSA_X931_PADDING 5 -# define RSA_PKCS1_PADDING_SIZE 11 +/* EVP_PKEY_ only */ +# define RSA_PKCS1_PSS_PADDING 6 +# define RSA_PKCS1_WITH_TLS_PADDING 7 + +# define RSA_PKCS1_PADDING_SIZE 11 # define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) # define RSA_get_app_data(s) RSA_get_ex_data(s,0) -RSA *RSA_new(void); -RSA *RSA_new_method(ENGINE *engine); -int RSA_bits(const RSA *rsa); -int RSA_size(const RSA *rsa); -int RSA_security_bits(const RSA *rsa); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *RSA_new(void); +OSSL_DEPRECATEDIN_3_0 RSA *RSA_new_method(ENGINE *engine); +OSSL_DEPRECATEDIN_3_0 int RSA_bits(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_size(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_security_bits(const RSA *rsa); -int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); -int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); -int RSA_set0_crt_params(RSA *r,BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); -int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], - BIGNUM *coeffs[], int pnum); -void RSA_get0_key(const RSA *r, - const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); -void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); -int RSA_get_multi_prime_extra_count(const RSA *r); -int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]); -void RSA_get0_crt_params(const RSA *r, - const BIGNUM **dmp1, const BIGNUM **dmq1, - const BIGNUM **iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_crt_params(RSA *r, + BIGNUM *dmp1, BIGNUM *dmq1, + BIGNUM *iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_set0_multi_prime_params(RSA *r, + BIGNUM *primes[], + BIGNUM *exps[], + BIGNUM *coeffs[], + int pnum); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_key(const RSA *r, + const BIGNUM **n, const BIGNUM **e, + const BIGNUM **d); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_factors(const RSA *r, + const BIGNUM **p, const BIGNUM **q); +OSSL_DEPRECATEDIN_3_0 int RSA_get_multi_prime_extra_count(const RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_get0_multi_prime_factors(const RSA *r, + const BIGNUM *primes[]); +OSSL_DEPRECATEDIN_3_0 void RSA_get0_crt_params(const RSA *r, + const BIGNUM **dmp1, + const BIGNUM **dmq1, + const BIGNUM **iqmp); +OSSL_DEPRECATEDIN_3_0 int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], const BIGNUM *coeffs[]); -const BIGNUM *RSA_get0_n(const RSA *d); -const BIGNUM *RSA_get0_e(const RSA *d); -const BIGNUM *RSA_get0_d(const RSA *d); -const BIGNUM *RSA_get0_p(const RSA *d); -const BIGNUM *RSA_get0_q(const RSA *d); -const BIGNUM *RSA_get0_dmp1(const RSA *r); -const BIGNUM *RSA_get0_dmq1(const RSA *r); -const BIGNUM *RSA_get0_iqmp(const RSA *r); -const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); -void RSA_clear_flags(RSA *r, int flags); -int RSA_test_flags(const RSA *r, int flags); -void RSA_set_flags(RSA *r, int flags); -int RSA_get_version(RSA *r); -ENGINE *RSA_get0_engine(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_n(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_e(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_d(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_p(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_q(const RSA *d); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmp1(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_dmq1(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const BIGNUM *RSA_get0_iqmp(const RSA *r); +OSSL_DEPRECATEDIN_3_0 const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); +OSSL_DEPRECATEDIN_3_0 void RSA_clear_flags(RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 int RSA_test_flags(const RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 void RSA_set_flags(RSA *r, int flags); +OSSL_DEPRECATEDIN_3_0 int RSA_get_version(RSA *r); +OSSL_DEPRECATEDIN_3_0 ENGINE *RSA_get0_engine(const RSA *r); +# endif /* !OPENSSL_NO_DEPRECATED_3_0 */ + +# define EVP_RSA_gen(bits) \ + EVP_PKEY_Q_keygen(NULL, NULL, "RSA", (size_t)(0 + (bits))) /* Deprecated version */ -DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void - (*callback) (int, int, void *), - void *cb_arg)) +# ifndef OPENSSL_NO_DEPRECATED_0_9_8 +OSSL_DEPRECATEDIN_0_9_8 RSA *RSA_generate_key(int bits, unsigned long e, void + (*callback) (int, int, void *), + void *cb_arg); +# endif /* New version */ -int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, + BN_GENCB *cb); /* Multi-prime version */ -int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, - BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_generate_multi_prime_key(RSA *rsa, int bits, + int primes, BIGNUM *e, + BN_GENCB *cb); -int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, - BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2, - const BIGNUM *Xp, const BIGNUM *Xq1, const BIGNUM *Xq2, - const BIGNUM *Xq, const BIGNUM *e, BN_GENCB *cb); -int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, - BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, + BIGNUM *q1, BIGNUM *q2, + const BIGNUM *Xp1, const BIGNUM *Xp2, + const BIGNUM *Xp, const BIGNUM *Xq1, + const BIGNUM *Xq2, const BIGNUM *Xq, + const BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_X931_generate_key_ex(RSA *rsa, int bits, + const BIGNUM *e, + BN_GENCB *cb); -int RSA_check_key(const RSA *); -int RSA_check_key_ex(const RSA *, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_check_key(const RSA *); +OSSL_DEPRECATEDIN_3_0 int RSA_check_key_ex(const RSA *, BN_GENCB *cb); /* next 4 return -1 on error */ -int RSA_public_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_public_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -int RSA_private_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -void RSA_free(RSA *r); +OSSL_DEPRECATEDIN_3_0 +int RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 void RSA_free(RSA *r); /* "up" the RSA object's reference count */ -int RSA_up_ref(RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_up_ref(RSA *r); +OSSL_DEPRECATEDIN_3_0 int RSA_flags(const RSA *r); -int RSA_flags(const RSA *r); - -void RSA_set_default_method(const RSA_METHOD *meth); -const RSA_METHOD *RSA_get_default_method(void); -const RSA_METHOD *RSA_null_method(void); -const RSA_METHOD *RSA_get_method(const RSA *rsa); -int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 void RSA_set_default_method(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_default_method(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_null_method(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_get_method(const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); /* these are the actual RSA functions */ -const RSA_METHOD *RSA_PKCS1_OpenSSL(void); +OSSL_DEPRECATEDIN_3_0 const RSA_METHOD *RSA_PKCS1_OpenSSL(void); + +DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, + RSA, RSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_name_attr(OSSL_DEPRECATEDIN_3_0, + RSA, RSAPrivateKey) +# endif /* !OPENSSL_NO_DEPRECATED_3_0 */ int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2); -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) -DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) - struct rsa_pss_params_st { X509_ALGOR *hashAlgorithm; X509_ALGOR *maskGenAlgorithm; @@ -290,6 +328,7 @@ struct rsa_pss_params_st { }; DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) +DECLARE_ASN1_DUP_FUNCTION(RSA_PSS_PARAMS) typedef struct rsa_oaep_params_st { X509_ALGOR *hashFunc; @@ -301,101 +340,119 @@ typedef struct rsa_oaep_params_st { DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) -# ifndef OPENSSL_NO_STDIO -int RSA_print_fp(FILE *fp, const RSA *r, int offset); -# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_STDIO +OSSL_DEPRECATEDIN_3_0 int RSA_print_fp(FILE *fp, const RSA *r, int offset); +# endif -int RSA_print(BIO *bp, const RSA *r, int offset); +OSSL_DEPRECATEDIN_3_0 int RSA_print(BIO *bp, const RSA *r, int offset); /* * The following 2 functions sign and verify a X509_SIG ASN1 object inside * PKCS#1 padded RSA encryption */ -int RSA_sign(int type, const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify(int type, const unsigned char *m, unsigned int m_length, - const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_sign(int type, const unsigned char *m, + unsigned int m_length, unsigned char *sigret, + unsigned int *siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_verify(int type, const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, RSA *rsa); /* * The following 2 function sign and verify a ASN1_OCTET_STRING object inside * PKCS#1 padded RSA encryption */ +OSSL_DEPRECATEDIN_3_0 int RSA_sign_ASN1_OCTET_STRING(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, RSA *rsa); -int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, - unsigned int m_length, unsigned char *sigbuf, - unsigned int siglen, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int RSA_verify_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigbuf, unsigned int siglen, + RSA *rsa); -int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); -void RSA_blinding_off(RSA *rsa); -BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 void RSA_blinding_off(RSA *rsa); +OSSL_DEPRECATEDIN_3_0 BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); -int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, - long seedlen, const EVP_MD *dgst); +OSSL_DEPRECATEDIN_3_0 int PKCS1_MGF1(unsigned char *mask, long len, + const unsigned char *seed, long seedlen, + const EVP_MD *dgst); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *f, int fl, const unsigned char *p, int pl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len, const unsigned char *p, int pl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, const unsigned char *from, int flen, const unsigned char *param, int plen, const EVP_MD *md, const EVP_MD *mgf1md); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, const unsigned char *from, int flen, - int num, const unsigned char *param, - int plen, const EVP_MD *md, - const EVP_MD *mgf1md); -int RSA_padding_add_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl); -int RSA_padding_check_SSLv23(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_none(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, - int fl); -int RSA_padding_check_X931(unsigned char *to, int tlen, - const unsigned char *f, int fl, int rsa_len); -int RSA_X931_hash_id(int nid); + int num, + const unsigned char *param, int plen, + const EVP_MD *md, const EVP_MD *mgf1md); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_none(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_none(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_check_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +OSSL_DEPRECATEDIN_3_0 int RSA_X931_hash_id(int nid); +OSSL_DEPRECATEDIN_3_0 int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, const EVP_MD *Hash, const unsigned char *EM, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, const unsigned char *mHash, const EVP_MD *Hash, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, const EVP_MD *Hash, const EVP_MD *mgf1Hash, const unsigned char *EM, int sLen); +OSSL_DEPRECATEDIN_3_0 int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, const unsigned char *mHash, const EVP_MD *Hash, const EVP_MD *mgf1Hash, int sLen); -#define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ +# define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) -int RSA_set_ex_data(RSA *r, int idx, void *arg); -void *RSA_get_ex_data(const RSA *r, int idx); +OSSL_DEPRECATEDIN_3_0 int RSA_set_ex_data(RSA *r, int idx, void *arg); +OSSL_DEPRECATEDIN_3_0 void *RSA_get_ex_data(const RSA *r, int idx); -RSA *RSAPublicKey_dup(RSA *rsa); -RSA *RSAPrivateKey_dup(RSA *rsa); +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPublicKey) +DECLARE_ASN1_DUP_FUNCTION_name_attr(OSSL_DEPRECATEDIN_3_0, RSA, RSAPrivateKey) /* * If this flag is set the RSA method is FIPS compliant and can be used in @@ -404,7 +461,7 @@ RSA *RSAPrivateKey_dup(RSA *rsa); * result is compliant. */ -# define RSA_FLAG_FIPS_METHOD 0x0400 +# define RSA_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are @@ -412,58 +469,80 @@ RSA *RSAPrivateKey_dup(RSA *rsa); * usage is compliant. */ -# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 +# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 /* * Application has decided PRNG is good enough to generate a key: don't * check. */ -# define RSA_FLAG_CHECKED 0x0800 +# define RSA_FLAG_CHECKED 0x0800 -RSA_METHOD *RSA_meth_new(const char *name, int flags); -void RSA_meth_free(RSA_METHOD *meth); -RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); -const char *RSA_meth_get0_name(const RSA_METHOD *meth); -int RSA_meth_set1_name(RSA_METHOD *meth, const char *name); -int RSA_meth_get_flags(const RSA_METHOD *meth); -int RSA_meth_set_flags(RSA_METHOD *meth, int flags); -void *RSA_meth_get0_app_data(const RSA_METHOD *meth); -int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data); -int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_new(const char *name, int flags); +OSSL_DEPRECATEDIN_3_0 void RSA_meth_free(RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 const char *RSA_meth_get0_name(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set1_name(RSA_METHOD *meth, + const char *name); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_get_flags(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_flags(RSA_METHOD *meth, int flags); +OSSL_DEPRECATEDIN_3_0 void *RSA_meth_get0_app_data(const RSA_METHOD *meth); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set0_app_data(RSA_METHOD *meth, + void *app_data); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_pub_enc(RSA_METHOD *rsa, int (*pub_enc) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_pub_dec(RSA_METHOD *rsa, int (*pub_dec) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_priv_enc(RSA_METHOD *rsa, int (*priv_enc) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) - (int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) (int flen, + const unsigned char *from, + unsigned char *to, + RSA *rsa, int padding); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_priv_dec(RSA_METHOD *rsa, int (*priv_dec) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding)); -int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) (BIGNUM *r0, + const BIGNUM *i, + RSA *rsa, BN_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_mod_exp(RSA_METHOD *rsa, int (*mod_exp) (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx)); -int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) - (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, @@ -471,43 +550,61 @@ int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx)); +OSSL_DEPRECATEDIN_3_0 int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); +OSSL_DEPRECATEDIN_3_0 int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); -int (*RSA_meth_get_sign(const RSA_METHOD *meth)) - (int type, - const unsigned char *m, unsigned int m_length, - unsigned char *sigret, unsigned int *siglen, - const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_sign(const RSA_METHOD *meth)) (int type, + const unsigned char *m, + unsigned int m_length, + unsigned char *sigret, + unsigned int *siglen, + const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_sign(RSA_METHOD *rsa, int (*sign) (int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, const RSA *rsa)); -int (*RSA_meth_get_verify(const RSA_METHOD *meth)) - (int dtype, const unsigned char *m, - unsigned int m_length, const unsigned char *sigbuf, - unsigned int siglen, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_verify(const RSA_METHOD *meth)) (int dtype, + const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, + const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_verify(RSA_METHOD *rsa, int (*verify) (int dtype, const unsigned char *m, unsigned int m_length, const unsigned char *sigbuf, unsigned int siglen, const RSA *rsa)); -int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) (RSA *rsa, int bits, + BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_keygen(RSA_METHOD *rsa, int (*keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb)); -int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) - (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 +int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) (RSA *rsa, + int bits, + int primes, + BIGNUM *e, + BN_GENCB *cb); +OSSL_DEPRECATEDIN_3_0 int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, int (*keygen) (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb)); +#endif /* !OPENSSL_NO_DEPRECATED_3_0 */ -# ifdef __cplusplus +# ifdef __cplusplus } -# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/rsaerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/rsaerr.h index 59b15e13..c58463c7 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/rsaerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/rsaerr.h @@ -1,91 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_RSAERR_H -# define HEADER_RSAERR_H +#ifndef OPENSSL_RSAERR_H +# define OPENSSL_RSAERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_RSA_strings(void); -/* - * RSA function codes. - */ -# define RSA_F_CHECK_PADDING_MD 140 -# define RSA_F_ENCODE_PKCS1 146 -# define RSA_F_INT_RSA_VERIFY 145 -# define RSA_F_OLD_RSA_PRIV_DECODE 147 -# define RSA_F_PKEY_PSS_INIT 165 -# define RSA_F_PKEY_RSA_CTRL 143 -# define RSA_F_PKEY_RSA_CTRL_STR 144 -# define RSA_F_PKEY_RSA_SIGN 142 -# define RSA_F_PKEY_RSA_VERIFY 149 -# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 -# define RSA_F_RSA_ALGOR_TO_MD 156 -# define RSA_F_RSA_BUILTIN_KEYGEN 129 -# define RSA_F_RSA_CHECK_KEY 123 -# define RSA_F_RSA_CHECK_KEY_EX 160 -# define RSA_F_RSA_CMS_DECRYPT 159 -# define RSA_F_RSA_CMS_VERIFY 158 -# define RSA_F_RSA_ITEM_VERIFY 148 -# define RSA_F_RSA_METH_DUP 161 -# define RSA_F_RSA_METH_NEW 162 -# define RSA_F_RSA_METH_SET1_NAME 163 -# define RSA_F_RSA_MGF1_TO_MD 157 -# define RSA_F_RSA_MULTIP_INFO_NEW 166 -# define RSA_F_RSA_NEW_METHOD 106 -# define RSA_F_RSA_NULL 124 -# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 -# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 -# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 -# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 -# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 101 -# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 -# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 -# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 -# define RSA_F_RSA_PADDING_ADD_NONE 107 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 -# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 154 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 -# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 -# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 -# define RSA_F_RSA_PADDING_ADD_SSLV23 110 -# define RSA_F_RSA_PADDING_ADD_X931 127 -# define RSA_F_RSA_PADDING_CHECK_NONE 111 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 153 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 -# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 -# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 -# define RSA_F_RSA_PADDING_CHECK_X931 128 -# define RSA_F_RSA_PARAM_DECODE 164 -# define RSA_F_RSA_PRINT 115 -# define RSA_F_RSA_PRINT_FP 116 -# define RSA_F_RSA_PRIV_DECODE 150 -# define RSA_F_RSA_PRIV_ENCODE 138 -# define RSA_F_RSA_PSS_GET_PARAM 151 -# define RSA_F_RSA_PSS_TO_CTX 155 -# define RSA_F_RSA_PUB_DECODE 139 -# define RSA_F_RSA_SETUP_BLINDING 136 -# define RSA_F_RSA_SIGN 117 -# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 -# define RSA_F_RSA_VERIFY 119 -# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 -# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 126 -# define RSA_F_SETUP_TBUF 167 /* * RSA reason codes. @@ -114,24 +45,30 @@ int ERR_load_RSA_strings(void); # define RSA_R_INVALID_DIGEST 157 # define RSA_R_INVALID_DIGEST_LENGTH 143 # define RSA_R_INVALID_HEADER 137 +# define RSA_R_INVALID_KEYPAIR 171 +# define RSA_R_INVALID_KEY_LENGTH 173 # define RSA_R_INVALID_LABEL 160 +# define RSA_R_INVALID_LENGTH 181 # define RSA_R_INVALID_MESSAGE_LENGTH 131 # define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_MODULUS 174 # define RSA_R_INVALID_MULTI_PRIME_KEY 167 # define RSA_R_INVALID_OAEP_PARAMETERS 161 # define RSA_R_INVALID_PADDING 138 # define RSA_R_INVALID_PADDING_MODE 141 # define RSA_R_INVALID_PSS_PARAMETERS 149 # define RSA_R_INVALID_PSS_SALTLEN 146 +# define RSA_R_INVALID_REQUEST 175 # define RSA_R_INVALID_SALT_LENGTH 150 +# define RSA_R_INVALID_STRENGTH 176 # define RSA_R_INVALID_TRAILER 139 # define RSA_R_INVALID_X931_DIGEST 142 # define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 # define RSA_R_KEY_PRIME_NUM_INVALID 165 # define RSA_R_KEY_SIZE_TOO_SMALL 120 # define RSA_R_LAST_OCTET_INVALID 134 -# define RSA_R_MISSING_PRIVATE_KEY 179 # define RSA_R_MGF1_DIGEST_NOT_ALLOWED 152 +# define RSA_R_MISSING_PRIVATE_KEY 179 # define RSA_R_MODULUS_TOO_LARGE 105 # define RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R 168 # define RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D 169 @@ -143,10 +80,13 @@ int ERR_load_RSA_strings(void); # define RSA_R_OAEP_DECODING_ERROR 121 # define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 # define RSA_R_PADDING_CHECK_FAILED 114 +# define RSA_R_PAIRWISE_TEST_FAILURE 177 # define RSA_R_PKCS_DECODING_ERROR 159 # define RSA_R_PSS_SALTLEN_TOO_SMALL 164 +# define RSA_R_PUB_EXPONENT_OUT_OF_RANGE 178 # define RSA_R_P_NOT_PRIME 128 # define RSA_R_Q_NOT_PRIME 129 +# define RSA_R_RANDOMNESS_SOURCE_STRENGTH_INSUFFICIENT 180 # define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 # define RSA_R_SLEN_CHECK_FAILED 136 # define RSA_R_SLEN_RECOVERY_FAILED 135 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/safestack.h b/deps/openssl/android/x86_64/usr/local/include/openssl/safestack.h index 38b55789..0499700b 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/safestack.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/safestack.h @@ -1,14 +1,25 @@ /* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/safestack.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SAFESTACK_H -# define HEADER_SAFESTACK_H + + +#ifndef OPENSSL_SAFESTACK_H +# define OPENSSL_SAFESTACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SAFESTACK_H +# endif # include # include @@ -19,6 +30,37 @@ extern "C" { # define STACK_OF(type) struct stack_st_##type +/* Helper macro for internal use */ +# define SKM_DEFINE_STACK_OF_INTERNAL(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ + { \ + return (const OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ + { \ + return (OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ + { \ + return (OPENSSL_sk_compfunc)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ + { \ + return (OPENSSL_sk_copyfunc)cpy; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ + { \ + return (OPENSSL_sk_freefunc)fr; \ + } + # define SKM_DEFINE_STACK_OF(t1, t2, t3) \ STACK_OF(t1); \ typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ @@ -101,6 +143,10 @@ extern "C" { { \ return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ } \ + static ossl_unused ossl_inline int sk_##t1##_find_all(STACK_OF(t1) *sk, t2 *ptr, int *pnum) \ + { \ + return OPENSSL_sk_find_all((OPENSSL_STACK *)sk, (const void *)ptr, pnum); \ + } \ static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ { \ OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ @@ -126,11 +172,11 @@ extern "C" { return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ } -# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) # define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) # define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ SKM_DEFINE_STACK_OF(t1, const t2, t2) -# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) /*- * Strings are special: normally an lhash entry will point to a single @@ -156,50 +202,94 @@ typedef const char *OPENSSL_CSTRING; * chars. So, we have to implement STRING specially for STACK_OF. This is * dealt with in the autogenerated macros below. */ -DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char) -DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_STRING, char, char) +#define sk_OPENSSL_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_value(sk, idx) ((char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_STRING_sk_type(sk), (idx))) +#define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_STRING_compfunc_type(cmp))) +#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_STRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_STRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_STRING_sk_type(sk), (n)) +#define sk_OPENSSL_STRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_delete(sk, i) ((char *)OPENSSL_sk_delete(ossl_check_OPENSSL_STRING_sk_type(sk), (i))) +#define sk_OPENSSL_STRING_delete_ptr(sk, ptr) ((char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr))) +#define sk_OPENSSL_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_pop(sk) ((char *)OPENSSL_sk_pop(ossl_check_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_shift(sk) ((char *)OPENSSL_sk_shift(ossl_check_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_STRING_sk_type(sk),ossl_check_OPENSSL_STRING_freefunc_type(freefunc)) +#define sk_OPENSSL_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), (idx)) +#define sk_OPENSSL_STRING_set(sk, idx, ptr) ((char *)OPENSSL_sk_set(ossl_check_OPENSSL_STRING_sk_type(sk), (idx), ossl_check_OPENSSL_STRING_type(ptr))) +#define sk_OPENSSL_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr)) +#define sk_OPENSSL_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr), pnum) +#define sk_OPENSSL_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_STRING_sk_type(sk)) +#define sk_OPENSSL_STRING_dup(sk) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_STRING_sk_type(sk))) +#define sk_OPENSSL_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_STRING_freefunc_type(freefunc))) +#define sk_OPENSSL_STRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_CSTRING, const char, char) +#define sk_OPENSSL_CSTRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_value(sk, idx) ((const char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), (idx))) +#define sk_OPENSSL_CSTRING_new(cmp) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp))) +#define sk_OPENSSL_CSTRING_new_null() ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_CSTRING_new_reserve(cmp, n) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_CSTRING_compfunc_type(cmp), (n))) +#define sk_OPENSSL_CSTRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_CSTRING_sk_type(sk), (n)) +#define sk_OPENSSL_CSTRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_delete(sk, i) ((const char *)OPENSSL_sk_delete(ossl_check_OPENSSL_CSTRING_sk_type(sk), (i))) +#define sk_OPENSSL_CSTRING_delete_ptr(sk, ptr) ((const char *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr))) +#define sk_OPENSSL_CSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_pop(sk) ((const char *)OPENSSL_sk_pop(ossl_check_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_shift(sk) ((const char *)OPENSSL_sk_shift(ossl_check_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_CSTRING_sk_type(sk),ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc)) +#define sk_OPENSSL_CSTRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), (idx)) +#define sk_OPENSSL_CSTRING_set(sk, idx, ptr) ((const char *)OPENSSL_sk_set(ossl_check_OPENSSL_CSTRING_sk_type(sk), (idx), ossl_check_OPENSSL_CSTRING_type(ptr))) +#define sk_OPENSSL_CSTRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr)) +#define sk_OPENSSL_CSTRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr), pnum) +#define sk_OPENSSL_CSTRING_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_CSTRING_sk_type(sk)) +#define sk_OPENSSL_CSTRING_dup(sk) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_CSTRING_sk_type(sk))) +#define sk_OPENSSL_CSTRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_copyfunc_type(copyfunc), ossl_check_OPENSSL_CSTRING_freefunc_type(freefunc))) +#define sk_OPENSSL_CSTRING_set_cmp_func(sk, cmp) ((sk_OPENSSL_CSTRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_compfunc_type(cmp))) + +#if !defined(OPENSSL_NO_DEPRECATED_3_0) /* - * Similarly, we sometimes use a block of characters, NOT nul-terminated. + * This is not used by OpenSSL. A block of bytes, NOT nul-terminated. * These should also be distinguished from "normal" stacks. */ typedef void *OPENSSL_BLOCK; -DEFINE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) +SKM_DEFINE_STACK_OF_INTERNAL(OPENSSL_BLOCK, void, void) +#define sk_OPENSSL_BLOCK_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_value(sk, idx) ((void *)OPENSSL_sk_value(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), (idx))) +#define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp))) +#define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_null()) +#define sk_OPENSSL_BLOCK_new_reserve(cmp, n) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_new_reserve(ossl_check_OPENSSL_BLOCK_compfunc_type(cmp), (n))) +#define sk_OPENSSL_BLOCK_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_OPENSSL_BLOCK_sk_type(sk), (n)) +#define sk_OPENSSL_BLOCK_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_zero(sk) OPENSSL_sk_zero(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_delete(sk, i) ((void *)OPENSSL_sk_delete(ossl_check_OPENSSL_BLOCK_sk_type(sk), (i))) +#define sk_OPENSSL_BLOCK_delete_ptr(sk, ptr) ((void *)OPENSSL_sk_delete_ptr(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr))) +#define sk_OPENSSL_BLOCK_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_shift(sk) ((void *)OPENSSL_sk_shift(ossl_check_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_BLOCK_sk_type(sk),ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc)) +#define sk_OPENSSL_BLOCK_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), (idx)) +#define sk_OPENSSL_BLOCK_set(sk, idx, ptr) ((void *)OPENSSL_sk_set(ossl_check_OPENSSL_BLOCK_sk_type(sk), (idx), ossl_check_OPENSSL_BLOCK_type(ptr))) +#define sk_OPENSSL_BLOCK_find(sk, ptr) OPENSSL_sk_find(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr)) +#define sk_OPENSSL_BLOCK_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_type(ptr), pnum) +#define sk_OPENSSL_BLOCK_sort(sk) OPENSSL_sk_sort(ossl_check_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_OPENSSL_BLOCK_sk_type(sk)) +#define sk_OPENSSL_BLOCK_dup(sk) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_BLOCK_sk_type(sk))) +#define sk_OPENSSL_BLOCK_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(OPENSSL_BLOCK) *)OPENSSL_sk_deep_copy(ossl_check_const_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_copyfunc_type(copyfunc), ossl_check_OPENSSL_BLOCK_freefunc_type(freefunc))) +#define sk_OPENSSL_BLOCK_set_cmp_func(sk, cmp) ((sk_OPENSSL_BLOCK_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_OPENSSL_BLOCK_sk_type(sk), ossl_check_OPENSSL_BLOCK_compfunc_type(cmp))) -/* - * If called without higher optimization (min. -xO3) the Oracle Developer - * Studio compiler generates code for the defined (static inline) functions - * above. - * This would later lead to the linker complaining about missing symbols when - * this header file is included but the resulting object is not linked against - * the Crypto library (openssl#6912). - */ -# ifdef __SUNPRO_C -# pragma weak OPENSSL_sk_num -# pragma weak OPENSSL_sk_value -# pragma weak OPENSSL_sk_new -# pragma weak OPENSSL_sk_new_null -# pragma weak OPENSSL_sk_new_reserve -# pragma weak OPENSSL_sk_reserve -# pragma weak OPENSSL_sk_free -# pragma weak OPENSSL_sk_zero -# pragma weak OPENSSL_sk_delete -# pragma weak OPENSSL_sk_delete_ptr -# pragma weak OPENSSL_sk_push -# pragma weak OPENSSL_sk_unshift -# pragma weak OPENSSL_sk_pop -# pragma weak OPENSSL_sk_shift -# pragma weak OPENSSL_sk_pop_free -# pragma weak OPENSSL_sk_insert -# pragma weak OPENSSL_sk_set -# pragma weak OPENSSL_sk_find -# pragma weak OPENSSL_sk_find_ex -# pragma weak OPENSSL_sk_sort -# pragma weak OPENSSL_sk_is_sorted -# pragma weak OPENSSL_sk_dup -# pragma weak OPENSSL_sk_deep_copy -# pragma weak OPENSSL_sk_set_cmp_func -# endif /* __SUNPRO_C */ +#endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/safestack.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/safestack.h.in new file mode 100644 index 00000000..6b366079 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/safestack.h.in @@ -0,0 +1,227 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_string_macros + generate_stack_const_string_macros + generate_stack_block_macros); +-} + +#ifndef OPENSSL_SAFESTACK_H +# define OPENSSL_SAFESTACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SAFESTACK_H +# endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define STACK_OF(type) struct stack_st_##type + +/* Helper macro for internal use */ +# define SKM_DEFINE_STACK_OF_INTERNAL(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline t2 *ossl_check_##t1##_type(t2 *ptr) \ + { \ + return ptr; \ + } \ + static ossl_unused ossl_inline const OPENSSL_STACK *ossl_check_const_##t1##_sk_type(const STACK_OF(t1) *sk) \ + { \ + return (const OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_STACK *ossl_check_##t1##_sk_type(STACK_OF(t1) *sk) \ + { \ + return (OPENSSL_STACK *)sk; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_compfunc ossl_check_##t1##_compfunc_type(sk_##t1##_compfunc cmp) \ + { \ + return (OPENSSL_sk_compfunc)cmp; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_copyfunc ossl_check_##t1##_copyfunc_type(sk_##t1##_copyfunc cpy) \ + { \ + return (OPENSSL_sk_copyfunc)cpy; \ + } \ + static ossl_unused ossl_inline OPENSSL_sk_freefunc ossl_check_##t1##_freefunc_type(sk_##t1##_freefunc fr) \ + { \ + return (OPENSSL_sk_freefunc)fr; \ + } + +# define SKM_DEFINE_STACK_OF(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ + { \ + return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_reserve(sk_##t1##_compfunc compare, int n) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \ + { \ + return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_free((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ + { \ + return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \ + (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ + { \ + OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ + { \ + return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find_all(STACK_OF(t1) *sk, t2 *ptr, int *pnum) \ + { \ + return OPENSSL_sk_find_all((OPENSSL_STACK *)sk, (const void *)ptr, pnum); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) * sk_##t1##_dup(const STACK_OF(t1) *sk) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \ + sk_##t1##_copyfunc copyfunc, \ + sk_##t1##_freefunc freefunc) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, \ + (OPENSSL_sk_copyfunc)copyfunc, \ + (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \ + { \ + return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ + } + +# define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) +# define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ + SKM_DEFINE_STACK_OF(t1, const t2, t2) + +/*- + * Strings are special: normally an lhash entry will point to a single + * (somewhat) mutable object. In the case of strings: + * + * a) Instead of a single char, there is an array of chars, NUL-terminated. + * b) The string may have be immutable. + * + * So, they need their own declarations. Especially important for + * type-checking tools, such as Deputy. + * + * In practice, however, it appears to be hard to have a const + * string. For now, I'm settling for dealing with the fact it is a + * string at all. + */ +typedef char *OPENSSL_STRING; +typedef const char *OPENSSL_CSTRING; + +/*- + * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but + * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned + * above, instead of a single char each entry is a NUL-terminated array of + * chars. So, we have to implement STRING specially for STACK_OF. This is + * dealt with in the autogenerated macros below. + */ +{- + generate_stack_string_macros() + .generate_stack_const_string_macros(); +-} + +#if !defined(OPENSSL_NO_DEPRECATED_3_0) +/* + * This is not used by OpenSSL. A block of bytes, NOT nul-terminated. + * These should also be distinguished from "normal" stacks. + */ +typedef void *OPENSSL_BLOCK; +{- + generate_stack_block_macros(); +-} +#endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/seed.h b/deps/openssl/android/x86_64/usr/local/include/openssl/seed.h index de10b085..edb218ae 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/seed.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/seed.h @@ -1,7 +1,7 @@ /* - * Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -32,65 +32,82 @@ * SUCH DAMAGE. */ -#ifndef HEADER_SEED_H -# define HEADER_SEED_H +#ifndef OPENSSL_SEED_H +# define OPENSSL_SEED_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SEED_H +# endif # include # ifndef OPENSSL_NO_SEED -# include -# include +# include +# include +# include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif - -/* look whether we need 'long' to get 32 bits */ -# ifdef AES_LONG -# ifndef SEED_LONG -# define SEED_LONG 1 # endif -# endif -# include +# define SEED_BLOCK_SIZE 16 +# define SEED_KEY_LENGTH 16 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* look whether we need 'long' to get 32 bits */ +# ifdef AES_LONG +# ifndef SEED_LONG +# define SEED_LONG 1 +# endif +# endif -# define SEED_BLOCK_SIZE 16 -# define SEED_KEY_LENGTH 16 typedef struct seed_key_st { -# ifdef SEED_LONG +# ifdef SEED_LONG unsigned long data[32]; -# else +# else unsigned int data[32]; -# endif +# endif } SEED_KEY_SCHEDULE; - +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], SEED_KEY_SCHEDULE *ks); - +OSSL_DEPRECATEDIN_3_0 void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks); +OSSL_DEPRECATEDIN_3_0 void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks); - -void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, +OSSL_DEPRECATEDIN_3_0 +void SEED_ecb_encrypt(const unsigned char *in, + unsigned char *out, const SEED_KEY_SCHEDULE *ks, int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int enc); + unsigned char ivec[SEED_BLOCK_SIZE], + int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num, - int enc); + unsigned char ivec[SEED_BLOCK_SIZE], + int *num, int enc); +OSSL_DEPRECATEDIN_3_0 void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, - unsigned char ivec[SEED_BLOCK_SIZE], int *num); + unsigned char ivec[SEED_BLOCK_SIZE], + int *num); +# endif -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/self_test.h b/deps/openssl/android/x86_64/usr/local/include/openssl/self_test.h new file mode 100644 index 00000000..337a3190 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/self_test.h @@ -0,0 +1,94 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_SELF_TEST_H +# define OPENSSL_SELF_TEST_H +# pragma once + +# include /* OSSL_CALLBACK */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* The test event phases */ +# define OSSL_SELF_TEST_PHASE_NONE "None" +# define OSSL_SELF_TEST_PHASE_START "Start" +# define OSSL_SELF_TEST_PHASE_CORRUPT "Corrupt" +# define OSSL_SELF_TEST_PHASE_PASS "Pass" +# define OSSL_SELF_TEST_PHASE_FAIL "Fail" + +/* Test event categories */ +# define OSSL_SELF_TEST_TYPE_NONE "None" +# define OSSL_SELF_TEST_TYPE_MODULE_INTEGRITY "Module_Integrity" +# define OSSL_SELF_TEST_TYPE_INSTALL_INTEGRITY "Install_Integrity" +# define OSSL_SELF_TEST_TYPE_CRNG "Continuous_RNG_Test" +# define OSSL_SELF_TEST_TYPE_PCT "Conditional_PCT" +# define OSSL_SELF_TEST_TYPE_PCT_KAT "Conditional_KAT" +# define OSSL_SELF_TEST_TYPE_KAT_INTEGRITY "KAT_Integrity" +# define OSSL_SELF_TEST_TYPE_KAT_CIPHER "KAT_Cipher" +# define OSSL_SELF_TEST_TYPE_KAT_ASYM_CIPHER "KAT_AsymmetricCipher" +# define OSSL_SELF_TEST_TYPE_KAT_DIGEST "KAT_Digest" +# define OSSL_SELF_TEST_TYPE_KAT_SIGNATURE "KAT_Signature" +# define OSSL_SELF_TEST_TYPE_PCT_SIGNATURE "PCT_Signature" +# define OSSL_SELF_TEST_TYPE_KAT_KDF "KAT_KDF" +# define OSSL_SELF_TEST_TYPE_KAT_KA "KAT_KA" +# define OSSL_SELF_TEST_TYPE_DRBG "DRBG" + +/* Test event sub categories */ +# define OSSL_SELF_TEST_DESC_NONE "None" +# define OSSL_SELF_TEST_DESC_INTEGRITY_HMAC "HMAC" +# define OSSL_SELF_TEST_DESC_PCT_RSA_PKCS1 "RSA" +# define OSSL_SELF_TEST_DESC_PCT_ECDSA "ECDSA" +# define OSSL_SELF_TEST_DESC_PCT_DSA "DSA" +# define OSSL_SELF_TEST_DESC_CIPHER_AES_GCM "AES_GCM" +# define OSSL_SELF_TEST_DESC_CIPHER_AES_ECB "AES_ECB_Decrypt" +# define OSSL_SELF_TEST_DESC_CIPHER_TDES "TDES" +# define OSSL_SELF_TEST_DESC_ASYM_RSA_ENC "RSA_Encrypt" +# define OSSL_SELF_TEST_DESC_ASYM_RSA_DEC "RSA_Decrypt" +# define OSSL_SELF_TEST_DESC_MD_SHA1 "SHA1" +# define OSSL_SELF_TEST_DESC_MD_SHA2 "SHA2" +# define OSSL_SELF_TEST_DESC_MD_SHA3 "SHA3" +# define OSSL_SELF_TEST_DESC_SIGN_DSA "DSA" +# define OSSL_SELF_TEST_DESC_SIGN_RSA "RSA" +# define OSSL_SELF_TEST_DESC_SIGN_ECDSA "ECDSA" +# define OSSL_SELF_TEST_DESC_DRBG_CTR "CTR" +# define OSSL_SELF_TEST_DESC_DRBG_HASH "HASH" +# define OSSL_SELF_TEST_DESC_DRBG_HMAC "HMAC" +# define OSSL_SELF_TEST_DESC_KA_DH "DH" +# define OSSL_SELF_TEST_DESC_KA_ECDH "ECDH" +# define OSSL_SELF_TEST_DESC_KDF_HKDF "HKDF" +# define OSSL_SELF_TEST_DESC_KDF_SSKDF "SSKDF" +# define OSSL_SELF_TEST_DESC_KDF_X963KDF "X963KDF" +# define OSSL_SELF_TEST_DESC_KDF_X942KDF "X942KDF" +# define OSSL_SELF_TEST_DESC_KDF_PBKDF2 "PBKDF2" +# define OSSL_SELF_TEST_DESC_KDF_SSHKDF "SSHKDF" +# define OSSL_SELF_TEST_DESC_KDF_TLS12_PRF "TLS12_PRF" +# define OSSL_SELF_TEST_DESC_KDF_KBKDF "KBKDF" +# define OSSL_SELF_TEST_DESC_KDF_TLS13_EXTRACT "TLS13_KDF_EXTRACT" +# define OSSL_SELF_TEST_DESC_KDF_TLS13_EXPAND "TLS13_KDF_EXPAND" +# define OSSL_SELF_TEST_DESC_RNG "RNG" + +void OSSL_SELF_TEST_set_callback(OSSL_LIB_CTX *libctx, OSSL_CALLBACK *cb, + void *cbarg); +void OSSL_SELF_TEST_get_callback(OSSL_LIB_CTX *libctx, OSSL_CALLBACK **cb, + void **cbarg); + +OSSL_SELF_TEST *OSSL_SELF_TEST_new(OSSL_CALLBACK *cb, void *cbarg); +void OSSL_SELF_TEST_free(OSSL_SELF_TEST *st); + +void OSSL_SELF_TEST_onbegin(OSSL_SELF_TEST *st, const char *type, + const char *desc); +int OSSL_SELF_TEST_oncorrupt_byte(OSSL_SELF_TEST *st, unsigned char *bytes); +void OSSL_SELF_TEST_onend(OSSL_SELF_TEST *st, int ret); + +# ifdef __cplusplus +} +# endif +#endif /* OPENSSL_SELF_TEST_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/sha.h b/deps/openssl/android/x86_64/usr/local/include/openssl/sha.h index 6a1eb0de..6e65a040 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/sha.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/sha.h @@ -1,35 +1,43 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SHA_H -# define HEADER_SHA_H +#ifndef OPENSSL_SHA_H +# define OPENSSL_SHA_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SHA_H +# endif # include # include -#ifdef __cplusplus +# ifdef __cplusplus extern "C" { -#endif +# endif +# define SHA_DIGEST_LENGTH 20 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! SHA_LONG has to be at least 32 bits wide. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -# define SHA_LONG unsigned int +# define SHA_LONG unsigned int -# define SHA_LBLOCK 16 -# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a - * contiguous array of 32 bit wide - * big-endian values. */ -# define SHA_LAST_BLOCK (SHA_CBLOCK-8) -# define SHA_DIGEST_LENGTH 20 +# define SHA_LBLOCK 16 +# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA_LAST_BLOCK (SHA_CBLOCK-8) typedef struct SHAstate_st { SHA_LONG h0, h1, h2, h3, h4; @@ -38,13 +46,16 @@ typedef struct SHAstate_st { unsigned int num; } SHA_CTX; -int SHA1_Init(SHA_CTX *c); -int SHA1_Update(SHA_CTX *c, const void *data, size_t len); -int SHA1_Final(unsigned char *md, SHA_CTX *c); -unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); -void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +OSSL_DEPRECATEDIN_3_0 int SHA1_Init(SHA_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA1_Update(SHA_CTX *c, const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA1_Final(unsigned char *md, SHA_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA1_Transform(SHA_CTX *c, const unsigned char *data); +# endif -# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a +unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a * contiguous array of 32 bit wide * big-endian values. */ @@ -55,21 +66,27 @@ typedef struct SHA256state_st { unsigned int num, md_len; } SHA256_CTX; -int SHA224_Init(SHA256_CTX *c); -int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA224_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA224_Init(SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA224_Update(SHA256_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA224_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA256_Init(SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA256_Update(SHA256_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA256_Final(unsigned char *md, SHA256_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA256_Transform(SHA256_CTX *c, + const unsigned char *data); +# endif + unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); -int SHA256_Init(SHA256_CTX *c); -int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); -int SHA256_Final(unsigned char *md, SHA256_CTX *c); unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); -void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); # define SHA224_DIGEST_LENGTH 28 # define SHA256_DIGEST_LENGTH 32 # define SHA384_DIGEST_LENGTH 48 # define SHA512_DIGEST_LENGTH 64 +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 * being exactly 64-bit wide. See Implementation Notes in sha512.c @@ -80,17 +97,14 @@ void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); * contiguous array of 64 bit * wide big-endian values. */ -# define SHA512_CBLOCK (SHA_LBLOCK*8) -# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) -# define SHA_LONG64 unsigned __int64 -# define U64(C) C##UI64 -# elif defined(__arch64__) -# define SHA_LONG64 unsigned long -# define U64(C) C##UL -# else -# define SHA_LONG64 unsigned long long -# define U64(C) C##ULL -# endif +# define SHA512_CBLOCK (SHA_LBLOCK*8) +# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +# define SHA_LONG64 unsigned __int64 +# elif defined(__arch64__) +# define SHA_LONG64 unsigned long +# else +# define SHA_LONG64 unsigned long long +# endif typedef struct SHA512state_st { SHA_LONG64 h[8]; @@ -102,18 +116,23 @@ typedef struct SHA512state_st { unsigned int num, md_len; } SHA512_CTX; -int SHA384_Init(SHA512_CTX *c); -int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA384_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA384_Init(SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA384_Update(SHA512_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA384_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA512_Init(SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 int SHA512_Update(SHA512_CTX *c, + const void *data, size_t len); +OSSL_DEPRECATEDIN_3_0 int SHA512_Final(unsigned char *md, SHA512_CTX *c); +OSSL_DEPRECATEDIN_3_0 void SHA512_Transform(SHA512_CTX *c, + const unsigned char *data); +# endif + unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); -int SHA512_Init(SHA512_CTX *c); -int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); -int SHA512_Final(unsigned char *md, SHA512_CTX *c); unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); -void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/srp.h b/deps/openssl/android/x86_64/usr/local/include/openssl/srp.h index aaf13558..a48766c6 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/srp.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/srp.h @@ -1,8 +1,11 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/srp.h.in + * + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2004, EdelKey Project. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -11,8 +14,16 @@ * for the EdelKey project. */ -#ifndef HEADER_SRP_H -# define HEADER_SRP_H + + +#ifndef OPENSSL_SRP_H +# define OPENSSL_SRP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SRP_H +# endif #include @@ -27,13 +38,40 @@ extern "C" { # endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 + typedef struct SRP_gN_cache_st { char *b64_bn; BIGNUM *bn; } SRP_gN_cache; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN_cache, SRP_gN_cache, SRP_gN_cache) +#define sk_SRP_gN_cache_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_value(sk, idx) ((SRP_gN_cache *)OPENSSL_sk_value(ossl_check_const_SRP_gN_cache_sk_type(sk), (idx))) +#define sk_SRP_gN_cache_new(cmp) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new(ossl_check_SRP_gN_cache_compfunc_type(cmp))) +#define sk_SRP_gN_cache_new_null() ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_null()) +#define sk_SRP_gN_cache_new_reserve(cmp, n) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_cache_compfunc_type(cmp), (n))) +#define sk_SRP_gN_cache_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_cache_sk_type(sk), (n)) +#define sk_SRP_gN_cache_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_delete(sk, i) ((SRP_gN_cache *)OPENSSL_sk_delete(ossl_check_SRP_gN_cache_sk_type(sk), (i))) +#define sk_SRP_gN_cache_delete_ptr(sk, ptr) ((SRP_gN_cache *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr))) +#define sk_SRP_gN_cache_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_pop(sk) ((SRP_gN_cache *)OPENSSL_sk_pop(ossl_check_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_shift(sk) ((SRP_gN_cache *)OPENSSL_sk_shift(ossl_check_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_cache_sk_type(sk),ossl_check_SRP_gN_cache_freefunc_type(freefunc)) +#define sk_SRP_gN_cache_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), (idx)) +#define sk_SRP_gN_cache_set(sk, idx, ptr) ((SRP_gN_cache *)OPENSSL_sk_set(ossl_check_SRP_gN_cache_sk_type(sk), (idx), ossl_check_SRP_gN_cache_type(ptr))) +#define sk_SRP_gN_cache_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr)) +#define sk_SRP_gN_cache_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_type(ptr), pnum) +#define sk_SRP_gN_cache_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_cache_sk_type(sk)) +#define sk_SRP_gN_cache_dup(sk) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_cache_sk_type(sk))) +#define sk_SRP_gN_cache_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN_cache) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_copyfunc_type(copyfunc), ossl_check_SRP_gN_cache_freefunc_type(freefunc))) +#define sk_SRP_gN_cache_set_cmp_func(sk, cmp) ((sk_SRP_gN_cache_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_cache_sk_type(sk), ossl_check_SRP_gN_cache_compfunc_type(cmp))) -DEFINE_STACK_OF(SRP_gN_cache) typedef struct SRP_user_pwd_st { /* Owned by us. */ @@ -46,10 +84,47 @@ typedef struct SRP_user_pwd_st { /* Owned by us. */ char *info; } SRP_user_pwd; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_user_pwd, SRP_user_pwd, SRP_user_pwd) +#define sk_SRP_user_pwd_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_value(sk, idx) ((SRP_user_pwd *)OPENSSL_sk_value(ossl_check_const_SRP_user_pwd_sk_type(sk), (idx))) +#define sk_SRP_user_pwd_new(cmp) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new(ossl_check_SRP_user_pwd_compfunc_type(cmp))) +#define sk_SRP_user_pwd_new_null() ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_null()) +#define sk_SRP_user_pwd_new_reserve(cmp, n) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_new_reserve(ossl_check_SRP_user_pwd_compfunc_type(cmp), (n))) +#define sk_SRP_user_pwd_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_user_pwd_sk_type(sk), (n)) +#define sk_SRP_user_pwd_free(sk) OPENSSL_sk_free(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_delete(sk, i) ((SRP_user_pwd *)OPENSSL_sk_delete(ossl_check_SRP_user_pwd_sk_type(sk), (i))) +#define sk_SRP_user_pwd_delete_ptr(sk, ptr) ((SRP_user_pwd *)OPENSSL_sk_delete_ptr(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr))) +#define sk_SRP_user_pwd_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_pop(sk) ((SRP_user_pwd *)OPENSSL_sk_pop(ossl_check_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_shift(sk) ((SRP_user_pwd *)OPENSSL_sk_shift(ossl_check_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_user_pwd_sk_type(sk),ossl_check_SRP_user_pwd_freefunc_type(freefunc)) +#define sk_SRP_user_pwd_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), (idx)) +#define sk_SRP_user_pwd_set(sk, idx, ptr) ((SRP_user_pwd *)OPENSSL_sk_set(ossl_check_SRP_user_pwd_sk_type(sk), (idx), ossl_check_SRP_user_pwd_type(ptr))) +#define sk_SRP_user_pwd_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr)) +#define sk_SRP_user_pwd_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_type(ptr), pnum) +#define sk_SRP_user_pwd_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_user_pwd_sk_type(sk)) +#define sk_SRP_user_pwd_dup(sk) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_dup(ossl_check_const_SRP_user_pwd_sk_type(sk))) +#define sk_SRP_user_pwd_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_user_pwd) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_copyfunc_type(copyfunc), ossl_check_SRP_user_pwd_freefunc_type(freefunc))) +#define sk_SRP_user_pwd_set_cmp_func(sk, cmp) ((sk_SRP_user_pwd_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_user_pwd_sk_type(sk), ossl_check_SRP_user_pwd_compfunc_type(cmp))) + +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_user_pwd_new(void); +OSSL_DEPRECATEDIN_3_0 void SRP_user_pwd_free(SRP_user_pwd *user_pwd); -DEFINE_STACK_OF(SRP_user_pwd) +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_set_gN(SRP_user_pwd *user_pwd, const BIGNUM *g, + const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set1_ids(SRP_user_pwd *user_pwd, const char *id, + const char *info); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set0_sv(SRP_user_pwd *user_pwd, BIGNUM *s, BIGNUM *v); typedef struct SRP_VBASE_st { STACK_OF(SRP_user_pwd) *users_pwd; @@ -68,64 +143,139 @@ typedef struct SRP_gN_st { const BIGNUM *g; const BIGNUM *N; } SRP_gN; +SKM_DEFINE_STACK_OF_INTERNAL(SRP_gN, SRP_gN, SRP_gN) +#define sk_SRP_gN_num(sk) OPENSSL_sk_num(ossl_check_const_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_value(sk, idx) ((SRP_gN *)OPENSSL_sk_value(ossl_check_const_SRP_gN_sk_type(sk), (idx))) +#define sk_SRP_gN_new(cmp) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new(ossl_check_SRP_gN_compfunc_type(cmp))) +#define sk_SRP_gN_new_null() ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_null()) +#define sk_SRP_gN_new_reserve(cmp, n) ((STACK_OF(SRP_gN) *)OPENSSL_sk_new_reserve(ossl_check_SRP_gN_compfunc_type(cmp), (n))) +#define sk_SRP_gN_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRP_gN_sk_type(sk), (n)) +#define sk_SRP_gN_free(sk) OPENSSL_sk_free(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_zero(sk) OPENSSL_sk_zero(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_delete(sk, i) ((SRP_gN *)OPENSSL_sk_delete(ossl_check_SRP_gN_sk_type(sk), (i))) +#define sk_SRP_gN_delete_ptr(sk, ptr) ((SRP_gN *)OPENSSL_sk_delete_ptr(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr))) +#define sk_SRP_gN_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_pop(sk) ((SRP_gN *)OPENSSL_sk_pop(ossl_check_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_shift(sk) ((SRP_gN *)OPENSSL_sk_shift(ossl_check_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRP_gN_sk_type(sk),ossl_check_SRP_gN_freefunc_type(freefunc)) +#define sk_SRP_gN_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), (idx)) +#define sk_SRP_gN_set(sk, idx, ptr) ((SRP_gN *)OPENSSL_sk_set(ossl_check_SRP_gN_sk_type(sk), (idx), ossl_check_SRP_gN_type(ptr))) +#define sk_SRP_gN_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr)) +#define sk_SRP_gN_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_type(ptr), pnum) +#define sk_SRP_gN_sort(sk) OPENSSL_sk_sort(ossl_check_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRP_gN_sk_type(sk)) +#define sk_SRP_gN_dup(sk) ((STACK_OF(SRP_gN) *)OPENSSL_sk_dup(ossl_check_const_SRP_gN_sk_type(sk))) +#define sk_SRP_gN_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRP_gN) *)OPENSSL_sk_deep_copy(ossl_check_const_SRP_gN_sk_type(sk), ossl_check_SRP_gN_copyfunc_type(copyfunc), ossl_check_SRP_gN_freefunc_type(freefunc))) +#define sk_SRP_gN_set_cmp_func(sk, cmp) ((sk_SRP_gN_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRP_gN_sk_type(sk), ossl_check_SRP_gN_compfunc_type(cmp))) -DEFINE_STACK_OF(SRP_gN) + +OSSL_DEPRECATEDIN_3_0 SRP_VBASE *SRP_VBASE_new(char *seed_key); +OSSL_DEPRECATEDIN_3_0 void SRP_VBASE_free(SRP_VBASE *vb); +OSSL_DEPRECATEDIN_3_0 int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); -/* This method ignores the configured seed and fails for an unknown user. */ -DEPRECATEDIN_1_1_0(SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)) +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_add0_user(SRP_VBASE *vb, SRP_user_pwd *user_pwd); + /* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +OSSL_DEPRECATEDIN_3_0 SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier_ex(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 char *SRP_create_verifier(const char *user, const char *pass, char **salt, char **verifier, const char *N, const char *g); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN_ex(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g, OSSL_LIB_CTX *libctx, + const char *propq); +OSSL_DEPRECATEDIN_3_0 int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, const BIGNUM *N, const BIGNUM *g); -# define SRP_NO_ERROR 0 -# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 -# define SRP_ERR_VBASE_BN_LIB 2 -# define SRP_ERR_OPEN_FILE 3 -# define SRP_ERR_MEMORY 4 +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 -# define DB_srptype 0 -# define DB_srpverifier 1 -# define DB_srpsalt 2 -# define DB_srpid 3 -# define DB_srpgN 4 -# define DB_srpinfo 5 -# undef DB_NUMBER -# define DB_NUMBER 6 +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 -# define DB_SRP_INDEX 'I' -# define DB_SRP_VALID 'V' -# define DB_SRP_REVOKED 'R' -# define DB_SRP_MODIF 'v' +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' /* see srp.c */ +OSSL_DEPRECATEDIN_3_0 char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 SRP_gN *SRP_get_default_gN(const char *id); /* server side .... */ +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, const BIGNUM *b, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B_ex(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v, OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, const BIGNUM *v); + +OSSL_DEPRECATEDIN_3_0 int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u_ex(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); /* client side .... */ + +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x_ex(const BIGNUM *s, const char *user, const char *pass, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key_ex(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +OSSL_DEPRECATEDIN_3_0 int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); -# define SRP_MINIMAL_N 1024 +# define SRP_MINIMAL_N 1024 + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/* This method ignores the configured seed and fails for an unknown user. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 +SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/srp.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/srp.h.in new file mode 100644 index 00000000..dfbe845b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/srp.h.in @@ -0,0 +1,214 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2004, EdelKey Project. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * Originally written by Christophe Renou and Peter Sylvester, + * for the EdelKey project. + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_SRP_H +# define OPENSSL_SRP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SRP_H +# endif + +#include + +#ifndef OPENSSL_NO_SRP +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 + +typedef struct SRP_gN_cache_st { + char *b64_bn; + BIGNUM *bn; +} SRP_gN_cache; +{- + generate_stack_macros("SRP_gN_cache"); +-} + + +typedef struct SRP_user_pwd_st { + /* Owned by us. */ + char *id; + BIGNUM *s; + BIGNUM *v; + /* Not owned by us. */ + const BIGNUM *g; + const BIGNUM *N; + /* Owned by us. */ + char *info; +} SRP_user_pwd; +{- + generate_stack_macros("SRP_user_pwd"); +-} + +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_user_pwd_new(void); +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_free(SRP_user_pwd *user_pwd); + +OSSL_DEPRECATEDIN_3_0 +void SRP_user_pwd_set_gN(SRP_user_pwd *user_pwd, const BIGNUM *g, + const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set1_ids(SRP_user_pwd *user_pwd, const char *id, + const char *info); +OSSL_DEPRECATEDIN_3_0 +int SRP_user_pwd_set0_sv(SRP_user_pwd *user_pwd, BIGNUM *s, BIGNUM *v); + +typedef struct SRP_VBASE_st { + STACK_OF(SRP_user_pwd) *users_pwd; + STACK_OF(SRP_gN_cache) *gN_cache; +/* to simulate a user */ + char *seed_key; + const BIGNUM *default_g; + const BIGNUM *default_N; +} SRP_VBASE; + +/* + * Internal structure storing N and g pair + */ +typedef struct SRP_gN_st { + char *id; + const BIGNUM *g; + const BIGNUM *N; +} SRP_gN; +{- + generate_stack_macros("SRP_gN"); +-} + + +OSSL_DEPRECATEDIN_3_0 +SRP_VBASE *SRP_VBASE_new(char *seed_key); +OSSL_DEPRECATEDIN_3_0 +void SRP_VBASE_free(SRP_VBASE *vb); +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); + +OSSL_DEPRECATEDIN_3_0 +int SRP_VBASE_add0_user(SRP_VBASE *vb, SRP_user_pwd *user_pwd); + +/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +OSSL_DEPRECATEDIN_3_0 +SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); + +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier_ex(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +char *SRP_create_verifier(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN_ex(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g, OSSL_LIB_CTX *libctx, + const char *propq); +OSSL_DEPRECATEDIN_3_0 +int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g); + +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 + +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 + +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' + +/* see srp.c */ +OSSL_DEPRECATEDIN_3_0 +char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +SRP_gN *SRP_get_default_gN(const char *id); + +/* server side .... */ +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, + const BIGNUM *b, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B_ex(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v, OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v); + +OSSL_DEPRECATEDIN_3_0 +int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u_ex(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); + +/* client side .... */ + +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x_ex(const BIGNUM *s, const char *user, const char *pass, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key_ex(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u, + OSSL_LIB_CTX *libctx, const char *propq); +OSSL_DEPRECATEDIN_3_0 +BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +OSSL_DEPRECATEDIN_3_0 +int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); + +# define SRP_MINIMAL_N 1024 + +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +/* This method ignores the configured seed and fails for an unknown user. */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 +SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/srtp.h b/deps/openssl/android/x86_64/usr/local/include/openssl/srtp.h index 0b57c235..d64606e5 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/srtp.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/srtp.h @@ -1,7 +1,7 @@ /* * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -13,8 +13,14 @@ * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. */ -#ifndef HEADER_D1_SRTP_H -# define HEADER_D1_SRTP_H +#ifndef OPENSSL_SRTP_H +# define OPENSSL_SRTP_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_D1_SRTP_H +# endif # include diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h index 9af0c899..942f20e6 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h @@ -1,22 +1,33 @@ /* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ssl.h.in + * * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL_H -# define HEADER_SSL_H + + +#ifndef OPENSSL_SSL_H +# define OPENSSL_SSL_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL_H +# endif # include # include # include # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # include # include @@ -30,6 +41,10 @@ # include # include # include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -47,7 +62,7 @@ extern "C" { # define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) # define SSL_MAX_KEY_ARG_LENGTH 8 -# define SSL_MAX_MASTER_KEY_LENGTH 48 +/* SSL_MAX_MASTER_KEY_LENGTH is defined in prov_ssl.h */ /* The maximum number of encrypt/decrypt pipelines we can support */ # define SSL_MAX_PIPELINES 32 @@ -81,6 +96,7 @@ extern "C" { # define SSL_TXT_kECDHEPSK "kECDHEPSK" # define SSL_TXT_kDHEPSK "kDHEPSK" # define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kGOST18 "kGOST18" # define SSL_TXT_kSRP "kSRP" # define SSL_TXT_aRSA "aRSA" @@ -130,6 +146,8 @@ extern "C" { # define SSL_TXT_ARIA_GCM "ARIAGCM" # define SSL_TXT_ARIA128 "ARIA128" # define SSL_TXT_ARIA256 "ARIA256" +# define SSL_TXT_GOST2012_GOST8912_GOST8912 "GOST2012-GOST8912-GOST8912" +# define SSL_TXT_CBC "CBC" # define SSL_TXT_MD5 "MD5" # define SSL_TXT_SHA1 "SHA1" @@ -169,17 +187,20 @@ extern "C" { * The following cipher list is used by default. It also is substituted when * an application-defined cipher list string starts with 'DEFAULT'. * This applies to ciphersuites for TLSv1.2 and below. + * DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list() + * Update both macro and function simultaneously + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* + * This is the default set of TLSv1.3 ciphersuites + * DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites() + * Update both macro and function simultaneously */ -# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" -/* This is the default set of TLSv1.3 ciphersuites */ -# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) # define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ "TLS_CHACHA20_POLY1305_SHA256:" \ "TLS_AES_128_GCM_SHA256" -# else -# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ - "TLS_AES_128_GCM_SHA256" -#endif +# endif /* * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always * starts with a reasonable order, and all we have to do for DEFAULT is @@ -223,8 +244,34 @@ typedef struct srtp_protection_profile_st { const char *name; unsigned long id; } SRTP_PROTECTION_PROFILE; +SKM_DEFINE_STACK_OF_INTERNAL(SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE, SRTP_PROTECTION_PROFILE) +#define sk_SRTP_PROTECTION_PROFILE_num(sk) OPENSSL_sk_num(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_value(sk, idx) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_value(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx))) +#define sk_SRTP_PROTECTION_PROFILE_new(cmp) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp))) +#define sk_SRTP_PROTECTION_PROFILE_new_null() ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_null()) +#define sk_SRTP_PROTECTION_PROFILE_new_reserve(cmp, n) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_new_reserve(ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp), (n))) +#define sk_SRTP_PROTECTION_PROFILE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (n)) +#define sk_SRTP_PROTECTION_PROFILE_free(sk) OPENSSL_sk_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_zero(sk) OPENSSL_sk_zero(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_delete(sk, i) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (i))) +#define sk_SRTP_PROTECTION_PROFILE_delete_ptr(sk, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_delete_ptr(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))) +#define sk_SRTP_PROTECTION_PROFILE_push(sk, ptr) OPENSSL_sk_push(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_pop(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_pop(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_shift(sk) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_shift(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk),ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc)) +#define sk_SRTP_PROTECTION_PROFILE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), (idx)) +#define sk_SRTP_PROTECTION_PROFILE_set(sk, idx, ptr) ((SRTP_PROTECTION_PROFILE *)OPENSSL_sk_set(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), (idx), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr))) +#define sk_SRTP_PROTECTION_PROFILE_find(sk, ptr) OPENSSL_sk_find(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr)) +#define sk_SRTP_PROTECTION_PROFILE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_type(ptr), pnum) +#define sk_SRTP_PROTECTION_PROFILE_sort(sk) OPENSSL_sk_sort(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk)) +#define sk_SRTP_PROTECTION_PROFILE_dup(sk) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_dup(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk))) +#define sk_SRTP_PROTECTION_PROFILE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SRTP_PROTECTION_PROFILE) *)OPENSSL_sk_deep_copy(ossl_check_const_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_copyfunc_type(copyfunc), ossl_check_SRTP_PROTECTION_PROFILE_freefunc_type(freefunc))) +#define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(sk, cmp) ((sk_SRTP_PROTECTION_PROFILE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SRTP_PROTECTION_PROFILE_sk_type(sk), ossl_check_SRTP_PROTECTION_PROFILE_compfunc_type(cmp))) + -DEFINE_STACK_OF(SRTP_PROTECTION_PROFILE) typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, int len, void *arg); @@ -293,161 +340,134 @@ typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, /* Typedef for verification callback */ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); -/* - * Some values are reserved until OpenSSL 1.2.0 because they were previously - * included in SSL_OP_ALL in a 1.1.x release. - * - * Reserved value (until OpenSSL 1.2.0) 0x00000001U - * Reserved value (until OpenSSL 1.2.0) 0x00000002U - */ -/* Allow initial connection to servers that don't support RI */ -# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U +/* Typedef for SSL async callback */ +typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); -/* Reserved value (until OpenSSL 1.2.0) 0x00000008U */ -# define SSL_OP_TLSEXT_PADDING 0x00000010U -/* Reserved value (until OpenSSL 1.2.0) 0x00000020U */ -# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U -/* - * Reserved value (until OpenSSL 1.2.0) 0x00000080U - * Reserved value (until OpenSSL 1.2.0) 0x00000100U - * Reserved value (until OpenSSL 1.2.0) 0x00000200U - */ - -/* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ -# define SSL_OP_ALLOW_NO_DHE_KEX 0x00000400U +#define SSL_OP_BIT(n) ((uint64_t)1 << (uint64_t)n) /* - * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in - * OpenSSL 0.9.6d. Usually (depending on the application protocol) the - * workaround is not needed. Unfortunately some broken SSL/TLS - * implementations cannot handle it at all, which is why we include it in - * SSL_OP_ALL. Added in 0.9.6e + * SSL/TLS connection options. */ -# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800U - -/* DTLS options */ -# define SSL_OP_NO_QUERY_MTU 0x00001000U -/* Turn on Cookie Exchange (on relevant for servers) */ -# define SSL_OP_COOKIE_EXCHANGE 0x00002000U -/* Don't use RFC4507 ticket extension */ -# define SSL_OP_NO_TICKET 0x00004000U + /* Disable Extended master secret */ +# define SSL_OP_NO_EXTENDED_MASTER_SECRET SSL_OP_BIT(0) + /* Cleanse plaintext copies of data delivered to the application */ +# define SSL_OP_CLEANSE_PLAINTEXT SSL_OP_BIT(1) + /* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT SSL_OP_BIT(2) + /* Enable support for Kernel TLS */ +# define SSL_OP_ENABLE_KTLS SSL_OP_BIT(3) +# define SSL_OP_TLSEXT_PADDING SSL_OP_BIT(4) +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG SSL_OP_BIT(6) +# define SSL_OP_IGNORE_UNEXPECTED_EOF SSL_OP_BIT(7) +# define SSL_OP_ALLOW_CLIENT_RENEGOTIATION SSL_OP_BIT(8) +# define SSL_OP_DISABLE_TLSEXT_CA_NAMES SSL_OP_BIT(9) + /* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX SSL_OP_BIT(10) + /* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added + * in OpenSSL 0.9.6d. Usually (depending on the application protocol) + * the workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it + * in SSL_OP_ALL. Added in 0.9.6e + */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS SSL_OP_BIT(11) + /* DTLS options */ +# define SSL_OP_NO_QUERY_MTU SSL_OP_BIT(12) + /* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE SSL_OP_BIT(13) + /* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET SSL_OP_BIT(14) # ifndef OPENSSL_NO_DTLS1_METHOD -/* Use Cisco's "speshul" version of DTLS_BAD_VER - * (only with deprecated DTLSv1_client_method()) */ -# define SSL_OP_CISCO_ANYCONNECT 0x00008000U + /* + * Use Cisco's version identifier of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) + */ +# define SSL_OP_CISCO_ANYCONNECT SSL_OP_BIT(15) # endif - -/* As server, disallow session resumption on renegotiation */ -# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000U -/* Don't use compression even if supported */ -# define SSL_OP_NO_COMPRESSION 0x00020000U -/* Permit unsafe legacy renegotiation */ -# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U -/* Disable encrypt-then-mac */ -# define SSL_OP_NO_ENCRYPT_THEN_MAC 0x00080000U + /* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_BIT(16) + /* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION SSL_OP_BIT(17) + /* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_BIT(18) + /* Disable encrypt-then-mac */ +# define SSL_OP_NO_ENCRYPT_THEN_MAC SSL_OP_BIT(19) + /* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future + * version of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT SSL_OP_BIT(20) + /* + * Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE + */ +# define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21) + /* + * Set on servers to choose the cipher according to server's preferences. + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_BIT(22) + /* + * If set, a server will allow a client to issue a SSLv3.0 version + * number as latest version supported in the premaster secret, even when + * TLSv1.0 (version 3.1) was announced in the client hello. Normally + * this is forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG SSL_OP_BIT(23) + /* + * Switches off automatic TLSv1.3 anti-replay protection for early data. + * This is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY SSL_OP_BIT(24) +# define SSL_OP_NO_SSLv3 SSL_OP_BIT(25) +# define SSL_OP_NO_TLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_TLSv1_2 SSL_OP_BIT(27) +# define SSL_OP_NO_TLSv1_1 SSL_OP_BIT(28) +# define SSL_OP_NO_TLSv1_3 SSL_OP_BIT(29) +# define SSL_OP_NO_DTLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_DTLSv1_2 SSL_OP_BIT(27) + /* Disallow all renegotiation */ +# define SSL_OP_NO_RENEGOTIATION SSL_OP_BIT(30) + /* + * Make server add server-hello extension from early version of + * cryptopro draft, when GOST ciphersuite is negotiated. Required for + * interoperability with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG SSL_OP_BIT(31) /* - * Enable TLSv1.3 Compatibility mode. This is on by default. A future version - * of OpenSSL may have this disabled by default. + * Option "collections." */ -# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT 0x00100000U +# define SSL_OP_NO_SSL_MASK \ + ( SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 \ + | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 ) +# define SSL_OP_NO_DTLS_MASK \ + ( SSL_OP_NO_DTLSv1 | SSL_OP_NO_DTLSv1_2 ) -/* Prioritize Chacha20Poly1305 when client does. - * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE */ -# define SSL_OP_PRIORITIZE_CHACHA 0x00200000U +/* Various bug workarounds that should be rather harmless. */ +# define SSL_OP_ALL \ + ( SSL_OP_CRYPTOPRO_TLSEXT_BUG | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS \ + | SSL_OP_TLSEXT_PADDING | SSL_OP_SAFARI_ECDHE_ECDSA_BUG ) /* - * Set on servers to choose the cipher according to the server's preferences + * OBSOLETE OPTIONS retained for compatibility */ -# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000U -/* - * If set, a server will allow a client to issue a SSLv3.0 version number as - * latest version supported in the premaster secret, even when TLSv1.0 - * (version 3.1) was announced in the client hello. Normally this is - * forbidden to prevent version rollback attacks. - */ -# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000U -/* - * Switches off automatic TLSv1.3 anti-replay protection for early data. This - * is a server-side option only (no effect on the client). - */ -# define SSL_OP_NO_ANTI_REPLAY 0x01000000U - -# define SSL_OP_NO_SSLv3 0x02000000U -# define SSL_OP_NO_TLSv1 0x04000000U -# define SSL_OP_NO_TLSv1_2 0x08000000U -# define SSL_OP_NO_TLSv1_1 0x10000000U -# define SSL_OP_NO_TLSv1_3 0x20000000U - -# define SSL_OP_NO_DTLSv1 0x04000000U -# define SSL_OP_NO_DTLSv1_2 0x08000000U - -# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\ - SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2|SSL_OP_NO_TLSv1_3) -# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2) - -/* Disallow all renegotiation */ -# define SSL_OP_NO_RENEGOTIATION 0x40000000U - -/* - * Make server add server-hello extension from early version of cryptopro - * draft, when GOST ciphersuite is negotiated. Required for interoperability - * with CryptoPro CSP 3.x - */ -# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000U - -/* - * SSL_OP_ALL: various bug workarounds that should be rather harmless. - * This used to be 0x000FFFFFL before 0.9.7. - * This used to be 0x80000BFFU before 1.1.1. - */ -# define SSL_OP_ALL (SSL_OP_CRYPTOPRO_TLSEXT_BUG|\ - SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS|\ - SSL_OP_LEGACY_SERVER_CONNECT|\ - SSL_OP_TLSEXT_PADDING|\ - SSL_OP_SAFARI_ECDHE_ECDSA_BUG) - -/* OBSOLETE OPTIONS: retained for compatibility */ - -/* Removed from OpenSSL 1.1.0. Was 0x00000001L */ -/* Related to removed SSLv2. */ # define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000002L */ -/* Related to removed SSLv2. */ # define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 -/* Removed from OpenSSL 0.9.8q and 1.0.0c. Was 0x00000008L */ -/* Dead forever, see CVE-2010-4180 */ # define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 -/* Removed from OpenSSL 1.0.1h and 1.0.2. Was 0x00000010L */ -/* Refers to ancient SSLREF and SSLv2. */ # define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000020 */ # define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 -/* Removed from OpenSSL 0.9.7h and 0.9.8b. Was 0x00000040L */ # define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000080 */ -/* Ancient SSLeay version. */ # define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000100L */ # define SSL_OP_TLS_D5_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00000200L */ # define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00080000L */ # define SSL_OP_SINGLE_ECDH_USE 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x00100000L */ # define SSL_OP_SINGLE_DH_USE 0x0 -/* Removed from OpenSSL 1.0.1k and 1.0.2. Was 0x00200000L */ # define SSL_OP_EPHEMERAL_RSA 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x01000000L */ # define SSL_OP_NO_SSLv2 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x08000000L */ # define SSL_OP_PKCS1_CHECK_1 0x0 -/* Removed from OpenSSL 1.0.1. Was 0x10000000L */ # define SSL_OP_PKCS1_CHECK_2 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x20000000L */ # define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 -/* Removed from OpenSSL 1.1.0. Was 0x40000000L */ # define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 /* @@ -571,6 +591,7 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); # define SSL_CONF_TYPE_FILE 0x2 # define SSL_CONF_TYPE_DIR 0x3 # define SSL_CONF_TYPE_NONE 0x4 +# define SSL_CONF_TYPE_STORE 0x5 /* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ # define SSL_COOKIE_LENGTH 4096 @@ -580,12 +601,12 @@ typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); * cannot be used to clear bits. */ -unsigned long SSL_CTX_get_options(const SSL_CTX *ctx); -unsigned long SSL_get_options(const SSL *s); -unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_clear_options(SSL *s, unsigned long op); -unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); -unsigned long SSL_set_options(SSL *s, unsigned long op); +uint64_t SSL_CTX_get_options(const SSL_CTX *ctx); +uint64_t SSL_get_options(const SSL *s); +uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_clear_options(SSL *s, uint64_t op); +uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_set_options(SSL *s, uint64_t op); # define SSL_CTX_set_mode(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) @@ -609,11 +630,6 @@ unsigned long SSL_set_options(SSL *s, unsigned long op); # define SSL_get_secure_renegotiation_support(ssl) \ SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_heartbeat(ssl) \ - SSL_ctrl((ssl),SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT,0,NULL) -# endif - # define SSL_CTX_set_cert_flags(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) # define SSL_set_cert_flags(s,op) \ @@ -638,19 +654,20 @@ void SSL_set_msg_callback(SSL *ssl, SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) # ifndef OPENSSL_NO_SRP - /* see tls_srp.c */ -__owur int SSL_SRP_CTX_init(SSL *s); -__owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); -int SSL_SRP_CTX_free(SSL *ctx); -int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); -__owur int SSL_srp_server_param_with_username(SSL *s, int *ad); -__owur int SRP_Calc_A_param(SSL *s); - +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_SRP_CTX_init(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_SRP_CTX_free(SSL *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_srp_server_param_with_username(SSL *s, + int *ad); +OSSL_DEPRECATEDIN_3_0 __owur int SRP_Calc_A_param(SSL *s); +# endif # endif /* 100k max cert list */ -# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 +# define SSL_MAX_CERT_LIST_DEFAULT (1024*100) # define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) @@ -679,6 +696,7 @@ typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, # define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 # define SSL_SESS_CACHE_NO_INTERNAL \ (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) +# define SSL_SESS_CACHE_UPDATE_TIME 0x0400 LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); # define SSL_CTX_sess_number(ctx) \ @@ -818,8 +836,8 @@ void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, * the maximum length of the buffer given to callbacks containing the * resulting identity/psk */ -# define PSK_MAX_IDENTITY_LEN 128 -# define PSK_MAX_PSK_LEN 256 +# define PSK_MAX_IDENTITY_LEN 256 +# define PSK_MAX_PSK_LEN 512 typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, const char *hint, char *identity, @@ -896,18 +914,22 @@ __owur int SSL_extension_supported(unsigned int ext_type); # define SSL_ASYNC_PAUSED 5 # define SSL_ASYNC_NO_JOBS 6 # define SSL_CLIENT_HELLO_CB 7 +# define SSL_RETRY_VERIFY 8 /* These will only be used when doing non-blocking IO */ # define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) # define SSL_want_read(s) (SSL_want(s) == SSL_READING) # define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) # define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) +# define SSL_want_retry_verify(s) (SSL_want(s) == SSL_RETRY_VERIFY) # define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) # define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) # define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) # define SSL_MAC_FLAG_READ_MAC_STREAM 1 # define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 +# define SSL_MAC_FLAG_READ_MAC_TLSTREE 4 +# define SSL_MAC_FLAG_WRITE_MAC_TLSTREE 8 /* * A callback for logging out TLS key material. This callback should log out @@ -955,8 +977,59 @@ extern "C" { * These need to be after the above set of includes due to a compiler bug * in VisualStudio 2015 */ -DEFINE_STACK_OF_CONST(SSL_CIPHER) -DEFINE_STACK_OF(SSL_COMP) +SKM_DEFINE_STACK_OF_INTERNAL(SSL_CIPHER, const SSL_CIPHER, SSL_CIPHER) +#define sk_SSL_CIPHER_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_value(sk, idx) ((const SSL_CIPHER *)OPENSSL_sk_value(ossl_check_const_SSL_CIPHER_sk_type(sk), (idx))) +#define sk_SSL_CIPHER_new(cmp) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new(ossl_check_SSL_CIPHER_compfunc_type(cmp))) +#define sk_SSL_CIPHER_new_null() ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_null()) +#define sk_SSL_CIPHER_new_reserve(cmp, n) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_new_reserve(ossl_check_SSL_CIPHER_compfunc_type(cmp), (n))) +#define sk_SSL_CIPHER_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_CIPHER_sk_type(sk), (n)) +#define sk_SSL_CIPHER_free(sk) OPENSSL_sk_free(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_delete(sk, i) ((const SSL_CIPHER *)OPENSSL_sk_delete(ossl_check_SSL_CIPHER_sk_type(sk), (i))) +#define sk_SSL_CIPHER_delete_ptr(sk, ptr) ((const SSL_CIPHER *)OPENSSL_sk_delete_ptr(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr))) +#define sk_SSL_CIPHER_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_pop(sk) ((const SSL_CIPHER *)OPENSSL_sk_pop(ossl_check_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_shift(sk) ((const SSL_CIPHER *)OPENSSL_sk_shift(ossl_check_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_CIPHER_sk_type(sk),ossl_check_SSL_CIPHER_freefunc_type(freefunc)) +#define sk_SSL_CIPHER_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), (idx)) +#define sk_SSL_CIPHER_set(sk, idx, ptr) ((const SSL_CIPHER *)OPENSSL_sk_set(ossl_check_SSL_CIPHER_sk_type(sk), (idx), ossl_check_SSL_CIPHER_type(ptr))) +#define sk_SSL_CIPHER_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr)) +#define sk_SSL_CIPHER_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_type(ptr), pnum) +#define sk_SSL_CIPHER_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_CIPHER_sk_type(sk)) +#define sk_SSL_CIPHER_dup(sk) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_dup(ossl_check_const_SSL_CIPHER_sk_type(sk))) +#define sk_SSL_CIPHER_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_CIPHER) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_copyfunc_type(copyfunc), ossl_check_SSL_CIPHER_freefunc_type(freefunc))) +#define sk_SSL_CIPHER_set_cmp_func(sk, cmp) ((sk_SSL_CIPHER_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_CIPHER_sk_type(sk), ossl_check_SSL_CIPHER_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(SSL_COMP, SSL_COMP, SSL_COMP) +#define sk_SSL_COMP_num(sk) OPENSSL_sk_num(ossl_check_const_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_value(sk, idx) ((SSL_COMP *)OPENSSL_sk_value(ossl_check_const_SSL_COMP_sk_type(sk), (idx))) +#define sk_SSL_COMP_new(cmp) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new(ossl_check_SSL_COMP_compfunc_type(cmp))) +#define sk_SSL_COMP_new_null() ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_null()) +#define sk_SSL_COMP_new_reserve(cmp, n) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_new_reserve(ossl_check_SSL_COMP_compfunc_type(cmp), (n))) +#define sk_SSL_COMP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SSL_COMP_sk_type(sk), (n)) +#define sk_SSL_COMP_free(sk) OPENSSL_sk_free(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_zero(sk) OPENSSL_sk_zero(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_delete(sk, i) ((SSL_COMP *)OPENSSL_sk_delete(ossl_check_SSL_COMP_sk_type(sk), (i))) +#define sk_SSL_COMP_delete_ptr(sk, ptr) ((SSL_COMP *)OPENSSL_sk_delete_ptr(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))) +#define sk_SSL_COMP_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_pop(sk) ((SSL_COMP *)OPENSSL_sk_pop(ossl_check_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_shift(sk) ((SSL_COMP *)OPENSSL_sk_shift(ossl_check_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_COMP_sk_type(sk),ossl_check_SSL_COMP_freefunc_type(freefunc)) +#define sk_SSL_COMP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), (idx)) +#define sk_SSL_COMP_set(sk, idx, ptr) ((SSL_COMP *)OPENSSL_sk_set(ossl_check_SSL_COMP_sk_type(sk), (idx), ossl_check_SSL_COMP_type(ptr))) +#define sk_SSL_COMP_find(sk, ptr) OPENSSL_sk_find(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr)) +#define sk_SSL_COMP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr), pnum) +#define sk_SSL_COMP_sort(sk) OPENSSL_sk_sort(ossl_check_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SSL_COMP_sk_type(sk)) +#define sk_SSL_COMP_dup(sk) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_dup(ossl_check_const_SSL_COMP_sk_type(sk))) +#define sk_SSL_COMP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_deep_copy(ossl_check_const_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_copyfunc_type(copyfunc), ossl_check_SSL_COMP_freefunc_type(freefunc))) +#define sk_SSL_COMP_set_cmp_func(sk, cmp) ((sk_SSL_COMP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_compfunc_type(cmp))) + /* compatibility */ # define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) @@ -967,7 +1040,9 @@ DEFINE_STACK_OF(SSL_COMP) # define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) # define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ (char *)(arg))) -DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void SSL_set_debug(SSL *s, int debug); +# endif /* TLSv1.3 KeyUpdate message types */ /* -1 used so that this is an invalid value for the on-the-wire protocol */ @@ -1102,7 +1177,7 @@ size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); # define SSL_VERIFY_CLIENT_ONCE 0x04 # define SSL_VERIFY_POST_HANDSHAKE 0x08 -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define OpenSSL_add_ssl_algorithms() SSL_library_init() # define SSLeay_add_ssl_algorithms() SSL_library_init() # endif @@ -1190,9 +1265,14 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_ERROR_WANT_ASYNC 9 # define SSL_ERROR_WANT_ASYNC_JOB 10 # define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 -# define SSL_CTRL_SET_TMP_DH 3 -# define SSL_CTRL_SET_TMP_ECDH 4 -# define SSL_CTRL_SET_TMP_DH_CB 6 +# define SSL_ERROR_WANT_RETRY_VERIFY 12 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# endif + # define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 # define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 # define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 @@ -1246,7 +1326,9 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 # define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 -# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# endif # define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 # define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 # define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 @@ -1254,11 +1336,6 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 # define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 # define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT 85 -# define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING 86 -# define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS 87 -# endif # define DTLS_CTRL_GET_TIMEOUT 73 # define DTLS_CTRL_HANDLE_TIMEOUT 74 # define SSL_CTRL_GET_RI_SUPPORT 76 @@ -1305,6 +1382,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_CTRL_GET_MAX_PROTO_VERSION 131 # define SSL_CTRL_GET_SIGNATURE_NID 132 # define SSL_CTRL_GET_TMP_KEY 133 +# define SSL_CTRL_GET_NEGOTIATED_GROUP 134 +# define SSL_CTRL_SET_RETRY_VERIFY 136 # define SSL_CTRL_GET_VERIFY_CERT_STORE 137 # define SSL_CTRL_GET_CHAIN_CERT_STORE 138 # define SSL_CERT_SET_FIRST 1 @@ -1320,18 +1399,24 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) # define SSL_total_renegotiations(ssl) \ SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) -# define SSL_CTX_set_tmp_dh(ctx,dh) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_dh(ctx,dh) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif # define SSL_CTX_set_dh_auto(ctx, onoff) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) # define SSL_set_dh_auto(s, onoff) \ SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) -# define SSL_set_tmp_dh(ssl,dh) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_set_tmp_dh(ssl,dh) \ SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) -# define SSL_set_tmp_ecdh(ssl,ecdh) \ +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif # define SSL_CTX_add_extra_chain_cert(ctx,x509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) # define SSL_CTX_get_extra_chain_certs(ctx,px509) \ @@ -1400,6 +1485,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) #define SSL_get0_chain_cert_store(s,st) \ SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) + # define SSL_get1_groups(s, glist) \ SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) # define SSL_CTX_set1_groups(ctx, glist, glistlen) \ @@ -1412,6 +1498,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) # define SSL_get_shared_group(s, n) \ SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) +# define SSL_get_negotiated_group(s) \ + SSL_ctrl(s,SSL_CTRL_GET_NEGOTIATED_GROUP,0,NULL) # define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) # define SSL_CTX_set1_sigalgs_list(ctx, s) \ @@ -1464,12 +1552,17 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_group_to_name(SSL *s, int id); + /* Backwards compatibility, original 1.1.0 names */ # define SSL_CTRL_GET_SERVER_TMP_KEY \ SSL_CTRL_GET_PEER_TMP_KEY # define SSL_get_server_tmp_key(s, pk) \ SSL_get_peer_tmp_key(s, pk) +int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey); +int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey); + /* * The following symbol names are old and obsolete. They are kept * for compatibility reasons only and should not be used anymore. @@ -1487,7 +1580,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_shared_curve SSL_get_shared_group -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* Provide some compatibility macros for removed functionality. */ # define SSL_CTX_need_tmp_RSA(ctx) 0 # define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 @@ -1511,6 +1604,8 @@ void BIO_ssl_shutdown(BIO *ssl_bio); __owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); __owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +__owur SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq, + const SSL_METHOD *meth); int SSL_CTX_up_ref(SSL_CTX *ctx); void SSL_CTX_free(SSL_CTX *); __owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); @@ -1565,10 +1660,11 @@ __owur SSL_verify_cb SSL_get_verify_callback(const SSL *s); void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); void SSL_set_verify_depth(SSL *s, int depth); void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); -# ifndef OPENSSL_NO_RSA -__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); -__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, - long len); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, + const unsigned char *d, long len); # endif __owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); __owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, @@ -1591,14 +1687,16 @@ __owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, size_t serverinfo_length); __owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); -#ifndef OPENSSL_NO_RSA +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); #endif __owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); __owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); -#ifndef OPENSSL_NO_RSA +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); #endif @@ -1610,12 +1708,17 @@ __owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, __owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); __owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); __owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur STACK_OF(X509_NAME) +*SSL_load_client_CA_file_ex(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); __owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *file); int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *dir); +int SSL_add_store_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *uri); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_load_error_strings() \ OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) @@ -1659,7 +1762,7 @@ __owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, __owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); __owur SSL_SESSION *SSL_SESSION_new(void); -__owur SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src); +__owur SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src); const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len); const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, @@ -1672,7 +1775,7 @@ int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); int SSL_SESSION_up_ref(SSL_SESSION *ses); void SSL_SESSION_free(SSL_SESSION *ses); -__owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); +__owur int i2d_SSL_SESSION(const SSL_SESSION *in, unsigned char **pp); __owur int SSL_set_session(SSL *to, SSL_SESSION *session); int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); @@ -1684,8 +1787,13 @@ __owur int SSL_has_matching_session_id(const SSL *s, SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length); -# ifdef HEADER_X509_H -__owur X509 *SSL_get_peer_certificate(const SSL *s); +# ifdef OPENSSL_X509_H +__owur X509 *SSL_get0_peer_certificate(const SSL *s); +__owur X509 *SSL_get1_peer_certificate(const SSL *s); +/* Deprecated in 3.0.0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_get_peer_certificate SSL_get1_peer_certificate +# endif # endif __owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); @@ -1700,8 +1808,10 @@ void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, void *arg); void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg); -# ifndef OPENSSL_NO_RSA +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len); # endif @@ -1751,10 +1861,10 @@ __owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, uint8_t mtype, uint8_t ord); __owur int SSL_dane_enable(SSL *s, const char *basedomain); __owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, - uint8_t mtype, unsigned const char *data, size_t dlen); + uint8_t mtype, const unsigned char *data, size_t dlen); __owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); __owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, - uint8_t *mtype, unsigned const char **data, + uint8_t *mtype, const unsigned char **data, size_t *dlen); /* * Bridge opacity barrier between libcrypt and libssl, also needed to support @@ -1776,27 +1886,34 @@ __owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); __owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); # ifndef OPENSSL_NO_SRP -int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); -int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); -int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, char *(*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, int (*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, int (*cb) (SSL *, int *, void *)); -int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); +OSSL_DEPRECATEDIN_3_0 int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, BIGNUM *sa, BIGNUM *v, char *info); +OSSL_DEPRECATEDIN_3_0 int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, const char *grp); -__owur BIGNUM *SSL_get_srp_g(SSL *s); -__owur BIGNUM *SSL_get_srp_N(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_g(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_N(SSL *s); -__owur char *SSL_get_srp_username(SSL *s); -__owur char *SSL_get_srp_userinfo(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_username(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_userinfo(SSL *s); +# endif # endif /* @@ -1832,6 +1949,12 @@ __owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); __owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, size_t *numaddfds, OSSL_ASYNC_FD *delfd, size_t *numdelfds); +__owur int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback); +__owur int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg); +__owur int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback); +__owur int SSL_set_async_callback_arg(SSL *s, void *arg); +__owur int SSL_get_async_status(SSL *s, int *status); + # endif __owur int SSL_accept(SSL *ssl); __owur int SSL_stateless(SSL *s); @@ -1847,6 +1970,8 @@ __owur int SSL_read_early_data(SSL *s, void *buf, size_t num, size_t *readbytes); __owur int SSL_peek(SSL *ssl, void *buf, int num); __owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +__owur ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, + int flags); __owur int SSL_write(SSL *ssl, const void *buf, int num); __owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); __owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, @@ -1866,12 +1991,17 @@ __owur int SSL_get_error(const SSL *s, int ret_code); __owur const char *SSL_get_version(const SSL *s); /* This sets the 'default' SSL version that SSL_new() will create */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); +# endif # ifndef OPENSSL_NO_SSL3_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_client_method(void); +# endif # endif #define SSLv23_method TLS_method @@ -1884,34 +2014,44 @@ __owur const SSL_METHOD *TLS_server_method(void); __owur const SSL_METHOD *TLS_client_method(void); # ifndef OPENSSL_NO_TLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_TLS1_1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_TLS1_2_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_client_method(void); +# endif # endif # ifndef OPENSSL_NO_DTLS1_METHOD -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_client_method(void); +# endif # endif # ifndef OPENSSL_NO_DTLS1_2_METHOD /* DTLSv1.2 */ -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) -DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_client_method(void); +# endif # endif __owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ @@ -1931,6 +2071,7 @@ int SSL_get_key_update_type(const SSL *s); int SSL_renegotiate(SSL *s); int SSL_renegotiate_abbreviated(SSL *s); __owur int SSL_renegotiate_pending(const SSL *s); +int SSL_new_session_ticket(SSL *s); int SSL_shutdown(SSL *s); __owur int SSL_verify_client_post_handshake(SSL *s); void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); @@ -1964,7 +2105,7 @@ void SSL_set_accept_state(SSL *s); __owur long SSL_get_default_timeout(const SSL *s); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_library_init() OPENSSL_init_ssl(0, NULL) # endif @@ -1993,8 +2134,13 @@ __owur int SSL_client_version(const SSL *s); __owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); __owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); __owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); -__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, - const char *CApath); +__owur int SSL_CTX_set_default_verify_store(SSL_CTX *ctx); +__owur int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile); +__owur int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath); +__owur int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore); +__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, + const char *CAfile, + const char *CApath); # define SSL_get0_session SSL_get_session/* just peek at pointer */ __owur SSL_SESSION *SSL_get_session(const SSL *ssl); __owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ @@ -2071,18 +2217,24 @@ __owur int SSL_get_ex_data_X509_STORE_CTX_idx(void); SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) # define SSL_set_max_pipelines(ssl,m) \ SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_retry_verify(ssl) \ + (SSL_ctrl(ssl,SSL_CTRL_SET_RETRY_VERIFY,0,NULL) > 0) void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); void SSL_set_default_read_buffer_len(SSL *s, size_t len); # ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* NB: the |keylength| is only applicable when is_export is true */ +OSSL_DEPRECATEDIN_3_0 void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*dh) (SSL *ssl, int is_export, int keylength)); +OSSL_DEPRECATEDIN_3_0 void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export, int keylength)); +# endif # endif __owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); @@ -2093,7 +2245,7 @@ __owur int SSL_COMP_get_id(const SSL_COMP *comp); STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); __owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) *meths); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_COMP_free_compression_methods() while(0) continue # endif __owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); @@ -2133,7 +2285,7 @@ void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); -void SSL_set_record_padding_callback(SSL *ssl, +int SSL_set_record_padding_callback(SSL *ssl, size_t (*cb) (SSL *ssl, int type, size_t len, void *arg)); void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); @@ -2145,7 +2297,7 @@ size_t SSL_get_num_tickets(const SSL *s); int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define SSL_cache_hit(s) SSL_session_reused(s) # endif @@ -2427,8 +2579,6 @@ int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); -extern const char SSL_version_str[]; - typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); @@ -2442,6 +2592,10 @@ void SSL_set_allow_early_data_cb(SSL *s, SSL_allow_early_data_cb_fn cb, void *arg); +/* store the default cipher strings inside the library */ +const char *OSSL_default_cipher_list(void); +const char *OSSL_default_ciphersuites(void); + # ifdef __cplusplus } # endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h.in new file mode 100644 index 00000000..f03f52fb --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h.in @@ -0,0 +1,2530 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. All rights reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros generate_const_stack_macros); +-} + +#ifndef OPENSSL_SSL_H +# define OPENSSL_SSL_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# endif +# include +# include +# include +# include + +# include +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* OpenSSL version number for ASN.1 encoding of the session information */ +/*- + * Version 0 - initial version + * Version 1 - added the optional peer certificate + */ +# define SSL_SESSION_ASN1_VERSION 0x0001 + +# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 +# define SSL_MAX_SID_CTX_LENGTH 32 + +# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) +# define SSL_MAX_KEY_ARG_LENGTH 8 +/* SSL_MAX_MASTER_KEY_LENGTH is defined in prov_ssl.h */ + +/* The maximum number of encrypt/decrypt pipelines we can support */ +# define SSL_MAX_PIPELINES 32 + +/* text strings for the ciphers */ + +/* These are used to specify which ciphers to use and not to use */ + +# define SSL_TXT_LOW "LOW" +# define SSL_TXT_MEDIUM "MEDIUM" +# define SSL_TXT_HIGH "HIGH" +# define SSL_TXT_FIPS "FIPS" + +# define SSL_TXT_aNULL "aNULL" +# define SSL_TXT_eNULL "eNULL" +# define SSL_TXT_NULL "NULL" + +# define SSL_TXT_kRSA "kRSA" +# define SSL_TXT_kDHr "kDHr"/* this cipher class has been removed */ +# define SSL_TXT_kDHd "kDHd"/* this cipher class has been removed */ +# define SSL_TXT_kDH "kDH"/* this cipher class has been removed */ +# define SSL_TXT_kEDH "kEDH"/* alias for kDHE */ +# define SSL_TXT_kDHE "kDHE" +# define SSL_TXT_kECDHr "kECDHr"/* this cipher class has been removed */ +# define SSL_TXT_kECDHe "kECDHe"/* this cipher class has been removed */ +# define SSL_TXT_kECDH "kECDH"/* this cipher class has been removed */ +# define SSL_TXT_kEECDH "kEECDH"/* alias for kECDHE */ +# define SSL_TXT_kECDHE "kECDHE" +# define SSL_TXT_kPSK "kPSK" +# define SSL_TXT_kRSAPSK "kRSAPSK" +# define SSL_TXT_kECDHEPSK "kECDHEPSK" +# define SSL_TXT_kDHEPSK "kDHEPSK" +# define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kGOST18 "kGOST18" +# define SSL_TXT_kSRP "kSRP" + +# define SSL_TXT_aRSA "aRSA" +# define SSL_TXT_aDSS "aDSS" +# define SSL_TXT_aDH "aDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDH "aECDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDSA "aECDSA" +# define SSL_TXT_aPSK "aPSK" +# define SSL_TXT_aGOST94 "aGOST94" +# define SSL_TXT_aGOST01 "aGOST01" +# define SSL_TXT_aGOST12 "aGOST12" +# define SSL_TXT_aGOST "aGOST" +# define SSL_TXT_aSRP "aSRP" + +# define SSL_TXT_DSS "DSS" +# define SSL_TXT_DH "DH" +# define SSL_TXT_DHE "DHE"/* same as "kDHE:-ADH" */ +# define SSL_TXT_EDH "EDH"/* alias for DHE */ +# define SSL_TXT_ADH "ADH" +# define SSL_TXT_RSA "RSA" +# define SSL_TXT_ECDH "ECDH" +# define SSL_TXT_EECDH "EECDH"/* alias for ECDHE" */ +# define SSL_TXT_ECDHE "ECDHE"/* same as "kECDHE:-AECDH" */ +# define SSL_TXT_AECDH "AECDH" +# define SSL_TXT_ECDSA "ECDSA" +# define SSL_TXT_PSK "PSK" +# define SSL_TXT_SRP "SRP" + +# define SSL_TXT_DES "DES" +# define SSL_TXT_3DES "3DES" +# define SSL_TXT_RC4 "RC4" +# define SSL_TXT_RC2 "RC2" +# define SSL_TXT_IDEA "IDEA" +# define SSL_TXT_SEED "SEED" +# define SSL_TXT_AES128 "AES128" +# define SSL_TXT_AES256 "AES256" +# define SSL_TXT_AES "AES" +# define SSL_TXT_AES_GCM "AESGCM" +# define SSL_TXT_AES_CCM "AESCCM" +# define SSL_TXT_AES_CCM_8 "AESCCM8" +# define SSL_TXT_CAMELLIA128 "CAMELLIA128" +# define SSL_TXT_CAMELLIA256 "CAMELLIA256" +# define SSL_TXT_CAMELLIA "CAMELLIA" +# define SSL_TXT_CHACHA20 "CHACHA20" +# define SSL_TXT_GOST "GOST89" +# define SSL_TXT_ARIA "ARIA" +# define SSL_TXT_ARIA_GCM "ARIAGCM" +# define SSL_TXT_ARIA128 "ARIA128" +# define SSL_TXT_ARIA256 "ARIA256" +# define SSL_TXT_GOST2012_GOST8912_GOST8912 "GOST2012-GOST8912-GOST8912" +# define SSL_TXT_CBC "CBC" + +# define SSL_TXT_MD5 "MD5" +# define SSL_TXT_SHA1 "SHA1" +# define SSL_TXT_SHA "SHA"/* same as "SHA1" */ +# define SSL_TXT_GOST94 "GOST94" +# define SSL_TXT_GOST89MAC "GOST89MAC" +# define SSL_TXT_GOST12 "GOST12" +# define SSL_TXT_GOST89MAC12 "GOST89MAC12" +# define SSL_TXT_SHA256 "SHA256" +# define SSL_TXT_SHA384 "SHA384" + +# define SSL_TXT_SSLV3 "SSLv3" +# define SSL_TXT_TLSV1 "TLSv1" +# define SSL_TXT_TLSV1_1 "TLSv1.1" +# define SSL_TXT_TLSV1_2 "TLSv1.2" + +# define SSL_TXT_ALL "ALL" + +/*- + * COMPLEMENTOF* definitions. These identifiers are used to (de-select) + * ciphers normally not being used. + * Example: "RC4" will activate all ciphers using RC4 including ciphers + * without authentication, which would normally disabled by DEFAULT (due + * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" + * will make sure that it is also disabled in the specific selection. + * COMPLEMENTOF* identifiers are portable between version, as adjustments + * to the default cipher setup will also be included here. + * + * COMPLEMENTOFDEFAULT does not experience the same special treatment that + * DEFAULT gets, as only selection is being done and no sorting as needed + * for DEFAULT. + */ +# define SSL_TXT_CMPALL "COMPLEMENTOFALL" +# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" + +/* + * The following cipher list is used by default. It also is substituted when + * an application-defined cipher list string starts with 'DEFAULT'. + * This applies to ciphersuites for TLSv1.2 and below. + * DEPRECATED IN 3.0.0, in favor of OSSL_default_cipher_list() + * Update both macro and function simultaneously + */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* + * This is the default set of TLSv1.3 ciphersuites + * DEPRECATED IN 3.0.0, in favor of OSSL_default_ciphersuites() + * Update both macro and function simultaneously + */ +# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ + "TLS_CHACHA20_POLY1305_SHA256:" \ + "TLS_AES_128_GCM_SHA256" +# endif +/* + * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always + * starts with a reasonable order, and all we have to do for DEFAULT is + * throwing out anonymous and unencrypted ciphersuites! (The latter are not + * actually enabled by ALL, but "ALL:RSA" would enable some of them.) + */ + +/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ +# define SSL_SENT_SHUTDOWN 1 +# define SSL_RECEIVED_SHUTDOWN 2 + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 +# define SSL_FILETYPE_PEM X509_FILETYPE_PEM + +/* + * This is needed to stop compilers complaining about the 'struct ssl_st *' + * function parameters used to prototype callbacks in SSL_CTX. + */ +typedef struct ssl_st *ssl_crock_st; +typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; +typedef struct ssl_method_st SSL_METHOD; +typedef struct ssl_cipher_st SSL_CIPHER; +typedef struct ssl_session_st SSL_SESSION; +typedef struct tls_sigalgs_st TLS_SIGALGS; +typedef struct ssl_conf_ctx_st SSL_CONF_CTX; +typedef struct ssl_comp_st SSL_COMP; + +STACK_OF(SSL_CIPHER); +STACK_OF(SSL_COMP); + +/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ +typedef struct srtp_protection_profile_st { + const char *name; + unsigned long id; +} SRTP_PROTECTION_PROFILE; +{- + generate_stack_macros("SRTP_PROTECTION_PROFILE"); +-} + + +typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, + int len, void *arg); +typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, + STACK_OF(SSL_CIPHER) *peer_ciphers, + const SSL_CIPHER **cipher, void *arg); + +/* Extension context codes */ +/* This extension is only allowed in TLS */ +#define SSL_EXT_TLS_ONLY 0x0001 +/* This extension is only allowed in DTLS */ +#define SSL_EXT_DTLS_ONLY 0x0002 +/* Some extensions may be allowed in DTLS but we don't implement them for it */ +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x0004 +/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ +#define SSL_EXT_SSL3_ALLOWED 0x0008 +/* Extension is only defined for TLS1.2 and below */ +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +/* Extension is only defined for TLS1.3 and above */ +#define SSL_EXT_TLS1_3_ONLY 0x0020 +/* Ignore this extension during parsing if we are resuming */ +#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 +#define SSL_EXT_CLIENT_HELLO 0x0080 +/* Really means TLS1.2 or below */ +#define SSL_EXT_TLS1_2_SERVER_HELLO 0x0100 +#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 +#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 +#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 +#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 +#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 +#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 + +/* Typedefs for handling custom extensions */ + +typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type, + const unsigned char **out, size_t *outlen, + int *al, void *add_arg); + +typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type, + const unsigned char *out, void *add_arg); + +typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type, + const unsigned char *in, size_t inlen, + int *al, void *parse_arg); + + +typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char **out, + size_t *outlen, X509 *x, + size_t chainidx, + int *al, void *add_arg); + +typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *out, + void *add_arg); + +typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *in, + size_t inlen, X509 *x, + size_t chainidx, + int *al, void *parse_arg); + +/* Typedef for verification callback */ +typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); + +/* Typedef for SSL async callback */ +typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); + +#define SSL_OP_BIT(n) ((uint64_t)1 << (uint64_t)n) + +/* + * SSL/TLS connection options. + */ + /* Disable Extended master secret */ +# define SSL_OP_NO_EXTENDED_MASTER_SECRET SSL_OP_BIT(0) + /* Cleanse plaintext copies of data delivered to the application */ +# define SSL_OP_CLEANSE_PLAINTEXT SSL_OP_BIT(1) + /* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT SSL_OP_BIT(2) + /* Enable support for Kernel TLS */ +# define SSL_OP_ENABLE_KTLS SSL_OP_BIT(3) +# define SSL_OP_TLSEXT_PADDING SSL_OP_BIT(4) +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG SSL_OP_BIT(6) +# define SSL_OP_IGNORE_UNEXPECTED_EOF SSL_OP_BIT(7) +# define SSL_OP_ALLOW_CLIENT_RENEGOTIATION SSL_OP_BIT(8) +# define SSL_OP_DISABLE_TLSEXT_CA_NAMES SSL_OP_BIT(9) + /* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX SSL_OP_BIT(10) + /* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added + * in OpenSSL 0.9.6d. Usually (depending on the application protocol) + * the workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it + * in SSL_OP_ALL. Added in 0.9.6e + */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS SSL_OP_BIT(11) + /* DTLS options */ +# define SSL_OP_NO_QUERY_MTU SSL_OP_BIT(12) + /* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE SSL_OP_BIT(13) + /* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET SSL_OP_BIT(14) +# ifndef OPENSSL_NO_DTLS1_METHOD + /* + * Use Cisco's version identifier of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) + */ +# define SSL_OP_CISCO_ANYCONNECT SSL_OP_BIT(15) +# endif + /* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION SSL_OP_BIT(16) + /* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION SSL_OP_BIT(17) + /* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION SSL_OP_BIT(18) + /* Disable encrypt-then-mac */ +# define SSL_OP_NO_ENCRYPT_THEN_MAC SSL_OP_BIT(19) + /* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future + * version of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT SSL_OP_BIT(20) + /* + * Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE + */ +# define SSL_OP_PRIORITIZE_CHACHA SSL_OP_BIT(21) + /* + * Set on servers to choose the cipher according to server's preferences. + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE SSL_OP_BIT(22) + /* + * If set, a server will allow a client to issue a SSLv3.0 version + * number as latest version supported in the premaster secret, even when + * TLSv1.0 (version 3.1) was announced in the client hello. Normally + * this is forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG SSL_OP_BIT(23) + /* + * Switches off automatic TLSv1.3 anti-replay protection for early data. + * This is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY SSL_OP_BIT(24) +# define SSL_OP_NO_SSLv3 SSL_OP_BIT(25) +# define SSL_OP_NO_TLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_TLSv1_2 SSL_OP_BIT(27) +# define SSL_OP_NO_TLSv1_1 SSL_OP_BIT(28) +# define SSL_OP_NO_TLSv1_3 SSL_OP_BIT(29) +# define SSL_OP_NO_DTLSv1 SSL_OP_BIT(26) +# define SSL_OP_NO_DTLSv1_2 SSL_OP_BIT(27) + /* Disallow all renegotiation */ +# define SSL_OP_NO_RENEGOTIATION SSL_OP_BIT(30) + /* + * Make server add server-hello extension from early version of + * cryptopro draft, when GOST ciphersuite is negotiated. Required for + * interoperability with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG SSL_OP_BIT(31) + +/* + * Option "collections." + */ +# define SSL_OP_NO_SSL_MASK \ + ( SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 \ + | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 ) +# define SSL_OP_NO_DTLS_MASK \ + ( SSL_OP_NO_DTLSv1 | SSL_OP_NO_DTLSv1_2 ) + +/* Various bug workarounds that should be rather harmless. */ +# define SSL_OP_ALL \ + ( SSL_OP_CRYPTOPRO_TLSEXT_BUG | SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS \ + | SSL_OP_TLSEXT_PADDING | SSL_OP_SAFARI_ECDHE_ECDSA_BUG ) + +/* + * OBSOLETE OPTIONS retained for compatibility + */ + +# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 +# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 +# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 +# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 +# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 +# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 +# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 +# define SSL_OP_TLS_D5_BUG 0x0 +# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 +# define SSL_OP_SINGLE_ECDH_USE 0x0 +# define SSL_OP_SINGLE_DH_USE 0x0 +# define SSL_OP_EPHEMERAL_RSA 0x0 +# define SSL_OP_NO_SSLv2 0x0 +# define SSL_OP_PKCS1_CHECK_1 0x0 +# define SSL_OP_PKCS1_CHECK_2 0x0 +# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 +# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 + +/* + * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success + * when just a single record has been written): + */ +# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001U +/* + * Make it possible to retry SSL_write() with changed buffer location (buffer + * contents must stay the same!); this is not the default to avoid the + * misconception that non-blocking SSL_write() behaves like non-blocking + * write(): + */ +# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U +/* + * Never bother the application with retries if the transport is blocking: + */ +# define SSL_MODE_AUTO_RETRY 0x00000004U +/* Don't attempt to automatically build certificate chain */ +# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U +/* + * Save RAM by releasing read and write buffers when they're empty. (SSL3 and + * TLS only.) Released buffers are freed. + */ +# define SSL_MODE_RELEASE_BUFFERS 0x00000010U +/* + * Send the current time in the Random fields of the ClientHello and + * ServerHello records for compatibility with hypothetical implementations + * that require it. + */ +# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U +# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U +/* + * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications + * that reconnect with a downgraded protocol version; see + * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your + * application attempts a normal handshake. Only use this in explicit + * fallback retries, following the guidance in + * draft-ietf-tls-downgrade-scsv-00. + */ +# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U +/* + * Support Asynchronous operation + */ +# define SSL_MODE_ASYNC 0x00000100U + +/* + * When using DTLS/SCTP, include the terminating zero in the label + * used for computing the endpoint-pair shared secret. Required for + * interoperability with implementations having this bug like these + * older version of OpenSSL: + * - OpenSSL 1.0.0 series + * - OpenSSL 1.0.1 series + * - OpenSSL 1.0.2 series + * - OpenSSL 1.1.0 series + * - OpenSSL 1.1.1 and 1.1.1a + */ +# define SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG 0x00000400U + +/* Cert related flags */ +/* + * Many implementations ignore some aspects of the TLS standards such as + * enforcing certificate chain algorithms. When this is set we enforce them. + */ +# define SSL_CERT_FLAG_TLS_STRICT 0x00000001U + +/* Suite B modes, takes same values as certificate verify flags */ +# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 + +/* Perform all sorts of protocol violations for testing purposes */ +# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 + +/* Flags for building certificate chains */ +/* Treat any existing certificates as untrusted CAs */ +# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 +/* Don't include root CA in chain */ +# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 +/* Just check certificates already there */ +# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 +/* Ignore verification errors */ +# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 +/* Clear verification errors from queue */ +# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 + +/* Flags returned by SSL_check_chain */ +/* Certificate can be used with this session */ +# define CERT_PKEY_VALID 0x1 +/* Certificate can also be used for signing */ +# define CERT_PKEY_SIGN 0x2 +/* EE certificate signing algorithm OK */ +# define CERT_PKEY_EE_SIGNATURE 0x10 +/* CA signature algorithms OK */ +# define CERT_PKEY_CA_SIGNATURE 0x20 +/* EE certificate parameters OK */ +# define CERT_PKEY_EE_PARAM 0x40 +/* CA certificate parameters OK */ +# define CERT_PKEY_CA_PARAM 0x80 +/* Signing explicitly allowed as opposed to SHA1 fallback */ +# define CERT_PKEY_EXPLICIT_SIGN 0x100 +/* Client CA issuer names match (always set for server cert) */ +# define CERT_PKEY_ISSUER_NAME 0x200 +/* Cert type matches client types (always set for server cert) */ +# define CERT_PKEY_CERT_TYPE 0x400 +/* Cert chain suitable to Suite B */ +# define CERT_PKEY_SUITEB 0x800 + +# define SSL_CONF_FLAG_CMDLINE 0x1 +# define SSL_CONF_FLAG_FILE 0x2 +# define SSL_CONF_FLAG_CLIENT 0x4 +# define SSL_CONF_FLAG_SERVER 0x8 +# define SSL_CONF_FLAG_SHOW_ERRORS 0x10 +# define SSL_CONF_FLAG_CERTIFICATE 0x20 +# define SSL_CONF_FLAG_REQUIRE_PRIVATE 0x40 +/* Configuration value types */ +# define SSL_CONF_TYPE_UNKNOWN 0x0 +# define SSL_CONF_TYPE_STRING 0x1 +# define SSL_CONF_TYPE_FILE 0x2 +# define SSL_CONF_TYPE_DIR 0x3 +# define SSL_CONF_TYPE_NONE 0x4 +# define SSL_CONF_TYPE_STORE 0x5 + +/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ +# define SSL_COOKIE_LENGTH 4096 + +/* + * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they + * cannot be used to clear bits. + */ + +uint64_t SSL_CTX_get_options(const SSL_CTX *ctx); +uint64_t SSL_get_options(const SSL *s); +uint64_t SSL_CTX_clear_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_clear_options(SSL *s, uint64_t op); +uint64_t SSL_CTX_set_options(SSL_CTX *ctx, uint64_t op); +uint64_t SSL_set_options(SSL *s, uint64_t op); + +# define SSL_CTX_set_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) +# define SSL_CTX_clear_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_CTX_get_mode(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) +# define SSL_clear_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_set_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) +# define SSL_get_mode(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) +# define SSL_set_mtu(ssl, mtu) \ + SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) +# define DTLS_set_link_mtu(ssl, mtu) \ + SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) +# define DTLS_get_link_min_mtu(ssl) \ + SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) + +# define SSL_get_secure_renegotiation_support(ssl) \ + SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) + +# define SSL_CTX_set_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_set_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_CTX_clear_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) +# define SSL_clear_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) + +void SSL_CTX_set_msg_callback(SSL_CTX *ctx, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +void SSL_set_msg_callback(SSL *ssl, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) +# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) + +# define SSL_get_extms_support(s) \ + SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) + +# ifndef OPENSSL_NO_SRP +/* see tls_srp.c */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_SRP_CTX_init(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_SRP_CTX_free(SSL *ctx); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 __owur int SSL_srp_server_param_with_username(SSL *s, + int *ad); +OSSL_DEPRECATEDIN_3_0 __owur int SRP_Calc_A_param(SSL *s); +# endif +# endif + +/* 100k max cert list */ +# define SSL_MAX_CERT_LIST_DEFAULT (1024*100) + +# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) + +/* + * This callback type is used inside SSL_CTX, SSL, and in the functions that + * set them. It is used to override the generation of SSL/TLS session IDs in + * a server. Return value should be zero on an error, non-zero to proceed. + * Also, callbacks should themselves check if the id they generate is unique + * otherwise the SSL handshake will fail with an error - callbacks can do + * this using the 'ssl' value they're passed by; + * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in + * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32 + * bytes. The callback can alter this length to be less if desired. It is + * also an error for the callback to set the size to zero. + */ +typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, + unsigned int *id_len); + +# define SSL_SESS_CACHE_OFF 0x0000 +# define SSL_SESS_CACHE_CLIENT 0x0001 +# define SSL_SESS_CACHE_SERVER 0x0002 +# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) +# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 +/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ +# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 +# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 +# define SSL_SESS_CACHE_NO_INTERNAL \ + (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) +# define SSL_SESS_CACHE_UPDATE_TIME 0x0400 + +LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); +# define SSL_CTX_sess_number(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) +# define SSL_CTX_sess_connect(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) +# define SSL_CTX_sess_connect_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) +# define SSL_CTX_sess_connect_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) +# define SSL_CTX_sess_accept_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) +# define SSL_CTX_sess_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) +# define SSL_CTX_sess_cb_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) +# define SSL_CTX_sess_misses(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) +# define SSL_CTX_sess_timeouts(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) +# define SSL_CTX_sess_cache_full(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) + +void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, + int (*new_session_cb) (struct ssl_st *ssl, + SSL_SESSION *sess)); +int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + SSL_SESSION *sess); +void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, + void (*remove_session_cb) (struct ssl_ctx_st + *ctx, + SSL_SESSION *sess)); +void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, + SSL_SESSION *sess); +void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, + SSL_SESSION *(*get_session_cb) (struct ssl_st + *ssl, + const unsigned char + *data, int len, + int *copy)); +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + const unsigned char *data, + int len, int *copy); +void SSL_CTX_set_info_callback(SSL_CTX *ctx, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, + int val); +void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, + int (*client_cert_cb) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey)); +int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey); +# ifndef OPENSSL_NO_ENGINE +__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); +# endif +void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, + int (*app_gen_cookie_cb) (SSL *ssl, + unsigned char + *cookie, + unsigned int + *cookie_len)); +void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, + int (*app_verify_cookie_cb) (SSL *ssl, + const unsigned + char *cookie, + unsigned int + cookie_len)); + +void SSL_CTX_set_stateless_cookie_generate_cb( + SSL_CTX *ctx, + int (*gen_stateless_cookie_cb) (SSL *ssl, + unsigned char *cookie, + size_t *cookie_len)); +void SSL_CTX_set_stateless_cookie_verify_cb( + SSL_CTX *ctx, + int (*verify_stateless_cookie_cb) (SSL *ssl, + const unsigned char *cookie, + size_t cookie_len)); +# ifndef OPENSSL_NO_NEXTPROTONEG + +typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned int *outlen, + void *arg); +void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, + SSL_CTX_npn_advertised_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb + +typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s, + unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, + SSL_CTX_npn_select_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb + +void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, + unsigned *len); +# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated +# endif + +__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, + const unsigned char *in, unsigned int inlen, + const unsigned char *client, + unsigned int client_len); + +# define OPENSSL_NPN_UNSUPPORTED 0 +# define OPENSSL_NPN_NEGOTIATED 1 +# define OPENSSL_NPN_NO_OVERLAP 2 + +__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, + unsigned int protos_len); +__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, + unsigned int protos_len); +typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, + SSL_CTX_alpn_select_cb_func cb, + void *arg); +void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, + unsigned int *len); + +# ifndef OPENSSL_NO_PSK +/* + * the maximum length of the buffer given to callbacks containing the + * resulting identity/psk + */ +# define PSK_MAX_IDENTITY_LEN 256 +# define PSK_MAX_PSK_LEN 512 +typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, + const char *hint, + char *identity, + unsigned int max_identity_len, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb); +void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb); + +typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl, + const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb); +void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb); + +__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); +__owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); +const char *SSL_get_psk_identity_hint(const SSL *s); +const char *SSL_get_psk_identity(const SSL *s); +# endif + +typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl, + const unsigned char *identity, + size_t identity_len, + SSL_SESSION **sess); +typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md, + const unsigned char **id, + size_t *idlen, + SSL_SESSION **sess); + +void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb); +void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx, + SSL_psk_find_session_cb_func cb); +void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb); +void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx, + SSL_psk_use_session_cb_func cb); + +/* Register callbacks to handle custom TLS Extensions for client or server. */ + +__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, + unsigned int ext_type); + +__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type, + unsigned int context, + SSL_custom_ext_add_cb_ex add_cb, + SSL_custom_ext_free_cb_ex free_cb, + void *add_arg, + SSL_custom_ext_parse_cb_ex parse_cb, + void *parse_arg); + +__owur int SSL_extension_supported(unsigned int ext_type); + +# define SSL_NOTHING 1 +# define SSL_WRITING 2 +# define SSL_READING 3 +# define SSL_X509_LOOKUP 4 +# define SSL_ASYNC_PAUSED 5 +# define SSL_ASYNC_NO_JOBS 6 +# define SSL_CLIENT_HELLO_CB 7 +# define SSL_RETRY_VERIFY 8 + +/* These will only be used when doing non-blocking IO */ +# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) +# define SSL_want_read(s) (SSL_want(s) == SSL_READING) +# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) +# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) +# define SSL_want_retry_verify(s) (SSL_want(s) == SSL_RETRY_VERIFY) +# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) +# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) +# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) + +# define SSL_MAC_FLAG_READ_MAC_STREAM 1 +# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 +# define SSL_MAC_FLAG_READ_MAC_TLSTREE 4 +# define SSL_MAC_FLAG_WRITE_MAC_TLSTREE 8 + +/* + * A callback for logging out TLS key material. This callback should log out + * |line| followed by a newline. + */ +typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line); + +/* + * SSL_CTX_set_keylog_callback configures a callback to log key material. This + * is intended for debugging use with tools like Wireshark. The cb function + * should log line followed by a newline. + */ +void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb); + +/* + * SSL_CTX_get_keylog_callback returns the callback configured by + * SSL_CTX_set_keylog_callback. + */ +SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx); + +int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data); +uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx); +int SSL_set_max_early_data(SSL *s, uint32_t max_early_data); +uint32_t SSL_get_max_early_data(const SSL *s); +int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data); +uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx); +int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data); +uint32_t SSL_get_recv_max_early_data(const SSL *s); + +#ifdef __cplusplus +} +#endif + +# include +# include +# include /* This is mostly sslv3 with a few tweaks */ +# include /* Datagram TLS */ +# include /* Support for the use_srtp extension */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These need to be after the above set of includes due to a compiler bug + * in VisualStudio 2015 + */ +{- + generate_const_stack_macros("SSL_CIPHER") + .generate_stack_macros("SSL_COMP"); +-} + +/* compatibility */ +# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) +# define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) +# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0, \ + (char *)(a))) +# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) +# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) +# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ + (char *)(arg))) +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 void SSL_set_debug(SSL *s, int debug); +# endif + +/* TLSv1.3 KeyUpdate message types */ +/* -1 used so that this is an invalid value for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NONE -1 +/* Values as defined for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NOT_REQUESTED 0 +#define SSL_KEY_UPDATE_REQUESTED 1 + +/* + * The valid handshake states (one for each type message sent and one for each + * type of message received). There are also two "special" states: + * TLS = TLS or DTLS state + * DTLS = DTLS specific state + * CR/SR = Client Read/Server Read + * CW/SW = Client Write/Server Write + * + * The "special" states are: + * TLS_ST_BEFORE = No handshake has been initiated yet + * TLS_ST_OK = A handshake has been successfully completed + */ +typedef enum { + TLS_ST_BEFORE, + TLS_ST_OK, + DTLS_ST_CR_HELLO_VERIFY_REQUEST, + TLS_ST_CR_SRVR_HELLO, + TLS_ST_CR_CERT, + TLS_ST_CR_CERT_STATUS, + TLS_ST_CR_KEY_EXCH, + TLS_ST_CR_CERT_REQ, + TLS_ST_CR_SRVR_DONE, + TLS_ST_CR_SESSION_TICKET, + TLS_ST_CR_CHANGE, + TLS_ST_CR_FINISHED, + TLS_ST_CW_CLNT_HELLO, + TLS_ST_CW_CERT, + TLS_ST_CW_KEY_EXCH, + TLS_ST_CW_CERT_VRFY, + TLS_ST_CW_CHANGE, + TLS_ST_CW_NEXT_PROTO, + TLS_ST_CW_FINISHED, + TLS_ST_SW_HELLO_REQ, + TLS_ST_SR_CLNT_HELLO, + DTLS_ST_SW_HELLO_VERIFY_REQUEST, + TLS_ST_SW_SRVR_HELLO, + TLS_ST_SW_CERT, + TLS_ST_SW_KEY_EXCH, + TLS_ST_SW_CERT_REQ, + TLS_ST_SW_SRVR_DONE, + TLS_ST_SR_CERT, + TLS_ST_SR_KEY_EXCH, + TLS_ST_SR_CERT_VRFY, + TLS_ST_SR_NEXT_PROTO, + TLS_ST_SR_CHANGE, + TLS_ST_SR_FINISHED, + TLS_ST_SW_SESSION_TICKET, + TLS_ST_SW_CERT_STATUS, + TLS_ST_SW_CHANGE, + TLS_ST_SW_FINISHED, + TLS_ST_SW_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_CERT_VRFY, + TLS_ST_SW_CERT_VRFY, + TLS_ST_CR_HELLO_REQ, + TLS_ST_SW_KEY_UPDATE, + TLS_ST_CW_KEY_UPDATE, + TLS_ST_SR_KEY_UPDATE, + TLS_ST_CR_KEY_UPDATE, + TLS_ST_EARLY_DATA, + TLS_ST_PENDING_EARLY_DATA_END, + TLS_ST_CW_END_OF_EARLY_DATA, + TLS_ST_SR_END_OF_EARLY_DATA +} OSSL_HANDSHAKE_STATE; + +/* + * Most of the following state values are no longer used and are defined to be + * the closest equivalent value in the current state machine code. Not all + * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT + * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP, + * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT. + */ + +# define SSL_ST_CONNECT 0x1000 +# define SSL_ST_ACCEPT 0x2000 + +# define SSL_ST_MASK 0x0FFF + +# define SSL_CB_LOOP 0x01 +# define SSL_CB_EXIT 0x02 +# define SSL_CB_READ 0x04 +# define SSL_CB_WRITE 0x08 +# define SSL_CB_ALERT 0x4000/* used in callback */ +# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) +# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) +# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) +# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) +# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) +# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) +# define SSL_CB_HANDSHAKE_START 0x10 +# define SSL_CB_HANDSHAKE_DONE 0x20 + +/* Is the SSL_connection established? */ +# define SSL_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a)) +# define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a)) +int SSL_in_init(const SSL *s); +int SSL_in_before(const SSL *s); +int SSL_is_init_finished(const SSL *s); + +/* + * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you + * should not need these + */ +# define SSL_ST_READ_HEADER 0xF0 +# define SSL_ST_READ_BODY 0xF1 +# define SSL_ST_READ_DONE 0xF2 + +/*- + * Obtain latest Finished message + * -- that we sent (SSL_get_finished) + * -- that we expected from peer (SSL_get_peer_finished). + * Returns length (0 == no Finished so far), copies up to 'count' bytes. + */ +size_t SSL_get_finished(const SSL *s, void *buf, size_t count); +size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); + +/* + * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are + * 'ored' with SSL_VERIFY_PEER if they are desired + */ +# define SSL_VERIFY_NONE 0x00 +# define SSL_VERIFY_PEER 0x01 +# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 +# define SSL_VERIFY_CLIENT_ONCE 0x04 +# define SSL_VERIFY_POST_HANDSHAKE 0x08 + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define OpenSSL_add_ssl_algorithms() SSL_library_init() +# define SSLeay_add_ssl_algorithms() SSL_library_init() +# endif + +/* More backward compatibility */ +# define SSL_get_cipher(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_cipher_bits(s,np) \ + SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) +# define SSL_get_cipher_version(s) \ + SSL_CIPHER_get_version(SSL_get_current_cipher(s)) +# define SSL_get_cipher_name(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_time(a) SSL_SESSION_get_time(a) +# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) +# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) +# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) + +# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) +# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) + +DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) +# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value + * from SSL_AD_... */ +/* These alert types are for SSLv3 and TLSv1 */ +# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY +/* fatal */ +# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE +/* fatal */ +# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC +# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED +# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW +/* fatal */ +# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE +/* fatal */ +# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE +/* Not for TLS */ +# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE +# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE +# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE +# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED +# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED +# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN +/* fatal */ +# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER +/* fatal */ +# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA +/* fatal */ +# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED +/* fatal */ +# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR +# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR +/* fatal */ +# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION +/* fatal */ +# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION +/* fatal */ +# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY +/* fatal */ +# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR +# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED +# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION +# define SSL_AD_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION +# define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED +# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION +# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE +# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME +# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE +# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE +/* fatal */ +# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY +/* fatal */ +# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK +# define SSL_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL +# define SSL_ERROR_NONE 0 +# define SSL_ERROR_SSL 1 +# define SSL_ERROR_WANT_READ 2 +# define SSL_ERROR_WANT_WRITE 3 +# define SSL_ERROR_WANT_X509_LOOKUP 4 +# define SSL_ERROR_SYSCALL 5/* look at error stack/return + * value/errno */ +# define SSL_ERROR_ZERO_RETURN 6 +# define SSL_ERROR_WANT_CONNECT 7 +# define SSL_ERROR_WANT_ACCEPT 8 +# define SSL_ERROR_WANT_ASYNC 9 +# define SSL_ERROR_WANT_ASYNC_JOB 10 +# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 +# define SSL_ERROR_WANT_RETRY_VERIFY 12 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# endif + +# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 +# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 +# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 +# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 +# define SSL_CTRL_GET_FLAGS 13 +# define SSL_CTRL_EXTRA_CHAIN_CERT 14 +# define SSL_CTRL_SET_MSG_CALLBACK 15 +# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 +/* only applies to datagram connections */ +# define SSL_CTRL_SET_MTU 17 +/* Stats */ +# define SSL_CTRL_SESS_NUMBER 20 +# define SSL_CTRL_SESS_CONNECT 21 +# define SSL_CTRL_SESS_CONNECT_GOOD 22 +# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 +# define SSL_CTRL_SESS_ACCEPT 24 +# define SSL_CTRL_SESS_ACCEPT_GOOD 25 +# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 +# define SSL_CTRL_SESS_HIT 27 +# define SSL_CTRL_SESS_CB_HIT 28 +# define SSL_CTRL_SESS_MISSES 29 +# define SSL_CTRL_SESS_TIMEOUTS 30 +# define SSL_CTRL_SESS_CACHE_FULL 31 +# define SSL_CTRL_MODE 33 +# define SSL_CTRL_GET_READ_AHEAD 40 +# define SSL_CTRL_SET_READ_AHEAD 41 +# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 +# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 +# define SSL_CTRL_SET_SESS_CACHE_MODE 44 +# define SSL_CTRL_GET_SESS_CACHE_MODE 45 +# define SSL_CTRL_GET_MAX_CERT_LIST 50 +# define SSL_CTRL_SET_MAX_CERT_LIST 51 +# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 +/* see tls1.h for macros based on these */ +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 +# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 +# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 +# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 +# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 */ +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# endif +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 +# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 +# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 +# define SSL_CTRL_SET_SRP_ARG 78 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 +# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 +# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 +# define DTLS_CTRL_GET_TIMEOUT 73 +# define DTLS_CTRL_HANDLE_TIMEOUT 74 +# define SSL_CTRL_GET_RI_SUPPORT 76 +# define SSL_CTRL_CLEAR_MODE 78 +# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB 79 +# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 +# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 +# define SSL_CTRL_CHAIN 88 +# define SSL_CTRL_CHAIN_CERT 89 +# define SSL_CTRL_GET_GROUPS 90 +# define SSL_CTRL_SET_GROUPS 91 +# define SSL_CTRL_SET_GROUPS_LIST 92 +# define SSL_CTRL_GET_SHARED_GROUP 93 +# define SSL_CTRL_SET_SIGALGS 97 +# define SSL_CTRL_SET_SIGALGS_LIST 98 +# define SSL_CTRL_CERT_FLAGS 99 +# define SSL_CTRL_CLEAR_CERT_FLAGS 100 +# define SSL_CTRL_SET_CLIENT_SIGALGS 101 +# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 +# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 +# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 +# define SSL_CTRL_BUILD_CERT_CHAIN 105 +# define SSL_CTRL_SET_VERIFY_CERT_STORE 106 +# define SSL_CTRL_SET_CHAIN_CERT_STORE 107 +# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 +# define SSL_CTRL_GET_PEER_TMP_KEY 109 +# define SSL_CTRL_GET_RAW_CIPHERLIST 110 +# define SSL_CTRL_GET_EC_POINT_FORMATS 111 +# define SSL_CTRL_GET_CHAIN_CERTS 115 +# define SSL_CTRL_SELECT_CURRENT_CERT 116 +# define SSL_CTRL_SET_CURRENT_CERT 117 +# define SSL_CTRL_SET_DH_AUTO 118 +# define DTLS_CTRL_SET_LINK_MTU 120 +# define DTLS_CTRL_GET_LINK_MIN_MTU 121 +# define SSL_CTRL_GET_EXTMS_SUPPORT 122 +# define SSL_CTRL_SET_MIN_PROTO_VERSION 123 +# define SSL_CTRL_SET_MAX_PROTO_VERSION 124 +# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT 125 +# define SSL_CTRL_SET_MAX_PIPELINES 126 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE 127 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB 128 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG 129 +# define SSL_CTRL_GET_MIN_PROTO_VERSION 130 +# define SSL_CTRL_GET_MAX_PROTO_VERSION 131 +# define SSL_CTRL_GET_SIGNATURE_NID 132 +# define SSL_CTRL_GET_TMP_KEY 133 +# define SSL_CTRL_GET_NEGOTIATED_GROUP 134 +# define SSL_CTRL_SET_RETRY_VERIFY 136 +# define SSL_CTRL_GET_VERIFY_CERT_STORE 137 +# define SSL_CTRL_GET_CHAIN_CERT_STORE 138 +# define SSL_CERT_SET_FIRST 1 +# define SSL_CERT_SET_NEXT 2 +# define SSL_CERT_SET_SERVER 3 +# define DTLSv1_get_timeout(ssl, arg) \ + SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg)) +# define DTLSv1_handle_timeout(ssl) \ + SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) +# define SSL_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_clear_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_total_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_dh(ctx,dh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# endif +# define SSL_CTX_set_dh_auto(ctx, onoff) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# define SSL_set_dh_auto(s, onoff) \ + SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_set_tmp_dh(ssl,dh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# endif +# define SSL_CTX_add_extra_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_get_extra_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) +# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) +# define SSL_CTX_clear_extra_chain_certs(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) +# define SSL_CTX_set0_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_CTX_set1_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_CTX_add0_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_add1_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_CTX_get0_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_CTX_clear_chain_certs(ctx) \ + SSL_CTX_set0_chain(ctx,NULL) +# define SSL_CTX_build_cert_chain(ctx, flags) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_CTX_select_current_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_CTX_set_current_cert(ctx, op) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_CTX_set0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +# define SSL_CTX_get0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +# define SSL_CTX_get0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set0_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_set1_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_add0_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_add1_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_get0_chain_certs(s,px509) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_clear_chain_certs(s) \ + SSL_set0_chain(s,NULL) +# define SSL_build_cert_chain(s, flags) \ + SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_select_current_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_set_current_cert(s,op) \ + SSL_ctrl(s,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_set0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_set1_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +#define SSL_get0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_set0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set1_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +#define SSL_get0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) + +# define SSL_get1_groups(s, glist) \ + SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) +# define SSL_CTX_set1_groups(ctx, glist, glistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(int *)(glist)) +# define SSL_CTX_set1_groups_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s)) +# define SSL_set1_groups(s, glist, glistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) +# define SSL_set1_groups_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) +# define SSL_get_shared_group(s, n) \ + SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) +# define SSL_get_negotiated_group(s) \ + SSL_ctrl(s,SSL_CTRL_GET_NEGOTIATED_GROUP,0,NULL) +# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(str)) +# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_client_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_client_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(str)) +# define SSL_get0_certificate_types(s, clist) \ + SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)(clist)) +# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen, \ + (char *)(clist)) +# define SSL_set1_client_certificate_types(s, clist, clistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)(clist)) +# define SSL_get_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NID,0,pn) +# define SSL_get_peer_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) +# define SSL_get_peer_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_TMP_KEY,0,pk) +# define SSL_get_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_TMP_KEY,0,pk) +# define SSL_get0_raw_cipherlist(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,plst) +# define SSL_get0_ec_point_formats(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst) +# define SSL_CTX_set_min_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_CTX_set_max_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_CTX_get_min_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_CTX_get_max_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +# define SSL_set_min_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_set_max_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_get_min_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_get_max_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) + +const char *SSL_group_to_name(SSL *s, int id); + +/* Backwards compatibility, original 1.1.0 names */ +# define SSL_CTRL_GET_SERVER_TMP_KEY \ + SSL_CTRL_GET_PEER_TMP_KEY +# define SSL_get_server_tmp_key(s, pk) \ + SSL_get_peer_tmp_key(s, pk) + +int SSL_set0_tmp_dh_pkey(SSL *s, EVP_PKEY *dhpkey); +int SSL_CTX_set0_tmp_dh_pkey(SSL_CTX *ctx, EVP_PKEY *dhpkey); + +/* + * The following symbol names are old and obsolete. They are kept + * for compatibility reasons only and should not be used anymore. + */ +# define SSL_CTRL_GET_CURVES SSL_CTRL_GET_GROUPS +# define SSL_CTRL_SET_CURVES SSL_CTRL_SET_GROUPS +# define SSL_CTRL_SET_CURVES_LIST SSL_CTRL_SET_GROUPS_LIST +# define SSL_CTRL_GET_SHARED_CURVE SSL_CTRL_GET_SHARED_GROUP + +# define SSL_get1_curves SSL_get1_groups +# define SSL_CTX_set1_curves SSL_CTX_set1_groups +# define SSL_CTX_set1_curves_list SSL_CTX_set1_groups_list +# define SSL_set1_curves SSL_set1_groups +# define SSL_set1_curves_list SSL_set1_groups_list +# define SSL_get_shared_curve SSL_get_shared_group + + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* Provide some compatibility macros for removed functionality. */ +# define SSL_CTX_need_tmp_RSA(ctx) 0 +# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 +# define SSL_need_tmp_RSA(ssl) 0 +# define SSL_set_tmp_rsa(ssl,rsa) 1 +# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +/* + * We "pretend" to call the callback to avoid warnings about unused static + * functions. + */ +# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) +# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) +# endif +__owur const BIO_METHOD *BIO_f_ssl(void); +__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client); +__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from); +void BIO_ssl_shutdown(BIO *ssl_bio); + +__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); +__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +__owur SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq, + const SSL_METHOD *meth); +int SSL_CTX_up_ref(SSL_CTX *ctx); +void SSL_CTX_free(SSL_CTX *); +__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); +__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx); +__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); +void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); +void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *); +__owur int SSL_want(const SSL *s); +__owur int SSL_clear(SSL *s); + +void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); + +__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +__owur const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s); +__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); +__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +__owur const char *OPENSSL_cipher_name(const char *rfc_name); +__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); +__owur uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); +__owur const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c); +__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c); + +__owur int SSL_get_fd(const SSL *s); +__owur int SSL_get_rfd(const SSL *s); +__owur int SSL_get_wfd(const SSL *s); +__owur const char *SSL_get_cipher_list(const SSL *s, int n); +__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size); +__owur int SSL_get_read_ahead(const SSL *s); +__owur int SSL_pending(const SSL *s); +__owur int SSL_has_pending(const SSL *s); +# ifndef OPENSSL_NO_SOCK +__owur int SSL_set_fd(SSL *s, int fd); +__owur int SSL_set_rfd(SSL *s, int fd); +__owur int SSL_set_wfd(SSL *s, int fd); +# endif +void SSL_set0_rbio(SSL *s, BIO *rbio); +void SSL_set0_wbio(SSL *s, BIO *wbio); +void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); +__owur BIO *SSL_get_rbio(const SSL *s); +__owur BIO *SSL_get_wbio(const SSL *s); +__owur int SSL_set_cipher_list(SSL *s, const char *str); +__owur int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str); +__owur int SSL_set_ciphersuites(SSL *s, const char *str); +void SSL_set_read_ahead(SSL *s, int yes); +__owur int SSL_get_verify_mode(const SSL *s); +__owur int SSL_get_verify_depth(const SSL *s); +__owur SSL_verify_cb SSL_get_verify_callback(const SSL *s); +void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); +void SSL_set_verify_depth(SSL *s, int depth); +void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 __owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, + const unsigned char *d, long len); +# endif +__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, + long len); +__owur int SSL_use_certificate(SSL *ssl, X509 *x); +__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); +__owur int SSL_use_cert_and_key(SSL *ssl, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + + +/* serverinfo file format versions */ +# define SSL_SERVERINFOV1 1 +# define SSL_SERVERINFOV2 2 + +/* Set serverinfo data for the current active cert. */ +__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, + const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +#endif + +__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +#endif +__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, + int type); +/* PEM type */ +__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); +__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); +__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur STACK_OF(X509_NAME) +*SSL_load_client_CA_file_ex(const char *file, OSSL_LIB_CTX *libctx, + const char *propq); +__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *file); +int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *dir); +int SSL_add_store_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *uri); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_load_error_strings() \ + OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# endif + +__owur const char *SSL_state_string(const SSL *s); +__owur const char *SSL_rstate_string(const SSL *s); +__owur const char *SSL_state_string_long(const SSL *s); +__owur const char *SSL_rstate_string_long(const SSL *s); +__owur long SSL_SESSION_get_time(const SSL_SESSION *s); +__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); +__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s); +__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); +__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); +__owur int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); + +__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); +__owur int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname); +void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s, + const unsigned char **alpn, + size_t *len); +__owur int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, + const unsigned char *alpn, + size_t len); +__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); +__owur int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher); +__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s); +__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s); +void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick, + size_t *len); +__owur uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s); +__owur int SSL_SESSION_set_max_early_data(SSL_SESSION *s, + uint32_t max_early_data); +__owur int SSL_copy_session_id(SSL *to, const SSL *from); +__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); +__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, + unsigned int sid_len); +__owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); + +__owur SSL_SESSION *SSL_SESSION_new(void); +__owur SSL_SESSION *SSL_SESSION_dup(const SSL_SESSION *src); +const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, + unsigned int *len); +const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, + unsigned int *len); +__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); +# ifndef OPENSSL_NO_STDIO +int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); +# endif +int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); +int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); +int SSL_SESSION_up_ref(SSL_SESSION *ses); +void SSL_SESSION_free(SSL_SESSION *ses); +__owur int i2d_SSL_SESSION(const SSL_SESSION *in, unsigned char **pp); +__owur int SSL_set_session(SSL *to, SSL_SESSION *session); +int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); +int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); +__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb); +__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb); +__owur int SSL_has_matching_session_id(const SSL *s, + const unsigned char *id, + unsigned int id_len); +SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, + long length); + +# ifdef OPENSSL_X509_H +__owur X509 *SSL_get0_peer_certificate(const SSL *s); +__owur X509 *SSL_get1_peer_certificate(const SSL *s); +/* Deprecated in 3.0.0 */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_get_peer_certificate SSL_get1_peer_certificate +# endif +# endif + +__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); + +__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +__owur SSL_verify_cb SSL_CTX_get_verify_callback(const SSL_CTX *ctx); +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb callback); +void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); +void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, + int (*cb) (X509_STORE_CTX *, void *), + void *arg); +void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), + void *arg); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, + long len); +# endif +__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, + const unsigned char *d, long len); +__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +__owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, + const unsigned char *d); +__owur int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + +void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); +void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); +pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx); +void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx); +void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb); +void SSL_set_default_passwd_cb_userdata(SSL *s, void *u); +pem_password_cb *SSL_get_default_passwd_cb(SSL *s); +void *SSL_get_default_passwd_cb_userdata(SSL *s); + +__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx); +__owur int SSL_check_private_key(const SSL *ctx); + +__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +SSL *SSL_new(SSL_CTX *ctx); +int SSL_up_ref(SSL *s); +int SSL_is_dtls(const SSL *s); +__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +__owur int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose); +__owur int SSL_set_purpose(SSL *ssl, int purpose); +__owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust); +__owur int SSL_set_trust(SSL *ssl, int trust); + +__owur int SSL_set1_host(SSL *s, const char *hostname); +__owur int SSL_add1_host(SSL *s, const char *hostname); +__owur const char *SSL_get0_peername(SSL *s); +void SSL_set_hostflags(SSL *s, unsigned int flags); + +__owur int SSL_CTX_dane_enable(SSL_CTX *ctx); +__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, + uint8_t mtype, uint8_t ord); +__owur int SSL_dane_enable(SSL *s, const char *basedomain); +__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, + uint8_t mtype, const unsigned char *data, size_t dlen); +__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); +__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, + uint8_t *mtype, const unsigned char **data, + size_t *dlen); +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +SSL_DANE *SSL_get0_dane(SSL *ssl); +/* + * DANE flags + */ +unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags); +unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags); + +__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); +__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); + +__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); +__owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); + +# ifndef OPENSSL_NO_SRP +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, + char *(*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, + int (*cb) (SSL *, void *)); +OSSL_DEPRECATEDIN_3_0 +int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, + int (*cb) (SSL *, int *, void *)); +OSSL_DEPRECATEDIN_3_0 int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); + +OSSL_DEPRECATEDIN_3_0 +int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, + BIGNUM *sa, BIGNUM *v, char *info); +OSSL_DEPRECATEDIN_3_0 +int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, + const char *grp); + +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_g(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur BIGNUM *SSL_get_srp_N(SSL *s); + +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_username(SSL *s); +OSSL_DEPRECATEDIN_3_0 __owur char *SSL_get_srp_userinfo(SSL *s); +# endif +# endif + +/* + * ClientHello callback and helpers. + */ + +# define SSL_CLIENT_HELLO_SUCCESS 1 +# define SSL_CLIENT_HELLO_ERROR 0 +# define SSL_CLIENT_HELLO_RETRY (-1) + +typedef int (*SSL_client_hello_cb_fn) (SSL *s, int *al, void *arg); +void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb, + void *arg); +int SSL_client_hello_isv2(SSL *s); +unsigned int SSL_client_hello_get0_legacy_version(SSL *s); +size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_compression_methods(SSL *s, + const unsigned char **out); +int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen); +int SSL_client_hello_get0_ext(SSL *s, unsigned int type, + const unsigned char **out, size_t *outlen); + +void SSL_certs_clear(SSL *s); +void SSL_free(SSL *ssl); +# ifdef OSSL_ASYNC_FD +/* + * Windows application developer has to include windows.h to use these. + */ +__owur int SSL_waiting_for_async(SSL *s); +__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); +__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +__owur int SSL_CTX_set_async_callback(SSL_CTX *ctx, SSL_async_callback_fn callback); +__owur int SSL_CTX_set_async_callback_arg(SSL_CTX *ctx, void *arg); +__owur int SSL_set_async_callback(SSL *s, SSL_async_callback_fn callback); +__owur int SSL_set_async_callback_arg(SSL *s, void *arg); +__owur int SSL_get_async_status(SSL *s, int *status); + +# endif +__owur int SSL_accept(SSL *ssl); +__owur int SSL_stateless(SSL *s); +__owur int SSL_connect(SSL *ssl); +__owur int SSL_read(SSL *ssl, void *buf, int num); +__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); + +# define SSL_READ_EARLY_DATA_ERROR 0 +# define SSL_READ_EARLY_DATA_SUCCESS 1 +# define SSL_READ_EARLY_DATA_FINISH 2 + +__owur int SSL_read_early_data(SSL *s, void *buf, size_t num, + size_t *readbytes); +__owur int SSL_peek(SSL *ssl, void *buf, int num); +__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +__owur ossl_ssize_t SSL_sendfile(SSL *s, int fd, off_t offset, size_t size, + int flags); +__owur int SSL_write(SSL *ssl, const void *buf, int num); +__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); +__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, + size_t *written); +long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); +long SSL_callback_ctrl(SSL *, int, void (*)(void)); +long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); +long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); + +# define SSL_EARLY_DATA_NOT_SENT 0 +# define SSL_EARLY_DATA_REJECTED 1 +# define SSL_EARLY_DATA_ACCEPTED 2 + +__owur int SSL_get_early_data_status(const SSL *s); + +__owur int SSL_get_error(const SSL *s, int ret_code); +__owur const char *SSL_get_version(const SSL *s); + +/* This sets the 'default' SSL version that SSL_new() will create */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); +# endif + +# ifndef OPENSSL_NO_SSL3_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *SSLv3_client_method(void); +# endif +# endif + +#define SSLv23_method TLS_method +#define SSLv23_server_method TLS_server_method +#define SSLv23_client_method TLS_client_method + +/* Negotiate highest available SSL/TLS version */ +__owur const SSL_METHOD *TLS_method(void); +__owur const SSL_METHOD *TLS_server_method(void); +__owur const SSL_METHOD *TLS_client_method(void); + +# ifndef OPENSSL_NO_TLS1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_TLS1_1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_TLS1_2_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *TLSv1_2_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_DTLS1_METHOD +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_client_method(void); +# endif +# endif + +# ifndef OPENSSL_NO_DTLS1_2_METHOD +/* DTLSv1.2 */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_server_method(void); +OSSL_DEPRECATEDIN_1_1_0 __owur const SSL_METHOD *DTLSv1_2_client_method(void); +# endif +# endif + +__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ + +__owur size_t DTLS_get_data_mtu(const SSL *s); + +__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); +__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s); + +__owur int SSL_do_handshake(SSL *s); +int SSL_key_update(SSL *s, int updatetype); +int SSL_get_key_update_type(const SSL *s); +int SSL_renegotiate(SSL *s); +int SSL_renegotiate_abbreviated(SSL *s); +__owur int SSL_renegotiate_pending(const SSL *s); +int SSL_new_session_ticket(SSL *s); +int SSL_shutdown(SSL *s); +__owur int SSL_verify_client_post_handshake(SSL *s); +void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); +void SSL_set_post_handshake_auth(SSL *s, int val); + +__owur const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx); +__owur const SSL_METHOD *SSL_get_ssl_method(const SSL *s); +__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +__owur const char *SSL_alert_type_string_long(int value); +__owur const char *SSL_alert_type_string(int value); +__owur const char *SSL_alert_desc_string_long(int value); +__owur const char *SSL_alert_desc_string(int value); + +void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s); +__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx); +__owur int SSL_add1_to_CA_list(SSL *ssl, const X509 *x); +__owur int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x); +__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s); + +void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); +__owur int SSL_add_client_CA(SSL *ssl, X509 *x); +__owur int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); + +void SSL_set_connect_state(SSL *s); +void SSL_set_accept_state(SSL *s); + +__owur long SSL_get_default_timeout(const SSL *s); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_library_init() OPENSSL_init_ssl(0, NULL) +# endif + +__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); +__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk); + +__owur SSL *SSL_dup(SSL *ssl); + +__owur X509 *SSL_get_certificate(const SSL *ssl); +/* + * EVP_PKEY + */ +struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); + +__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); +__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); + +void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); +__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +void SSL_set_quiet_shutdown(SSL *ssl, int mode); +__owur int SSL_get_quiet_shutdown(const SSL *ssl); +void SSL_set_shutdown(SSL *ssl, int mode); +__owur int SSL_get_shutdown(const SSL *ssl); +__owur int SSL_version(const SSL *ssl); +__owur int SSL_client_version(const SSL *s); +__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_store(SSL_CTX *ctx); +__owur int SSL_CTX_load_verify_file(SSL_CTX *ctx, const char *CAfile); +__owur int SSL_CTX_load_verify_dir(SSL_CTX *ctx, const char *CApath); +__owur int SSL_CTX_load_verify_store(SSL_CTX *ctx, const char *CAstore); +__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, + const char *CAfile, + const char *CApath); +# define SSL_get0_session SSL_get_session/* just peek at pointer */ +__owur SSL_SESSION *SSL_get_session(const SSL *ssl); +__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ +__owur SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); +SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); +void SSL_set_info_callback(SSL *ssl, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, + int val); +__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); + +void SSL_set_verify_result(SSL *ssl, long v); +__owur long SSL_get_verify_result(const SSL *ssl); +__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s); + +__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *sess, + unsigned char *out, size_t outlen); +__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess, + const unsigned char *in, size_t len); +uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *sess); + +#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) +__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data); +void *SSL_get_ex_data(const SSL *ssl, int idx); +#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef) +__owur int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); +void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); +#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef) +__owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); +void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); + +__owur int SSL_get_ex_data_X509_STORE_CTX_idx(void); + +# define SSL_CTX_sess_set_cache_size(ctx,t) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) +# define SSL_CTX_sess_get_cache_size(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) +# define SSL_CTX_set_session_cache_mode(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) +# define SSL_CTX_get_session_cache_mode(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) + +# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) +# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) +# define SSL_CTX_get_read_ahead(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) +# define SSL_CTX_set_read_ahead(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) +# define SSL_CTX_get_max_cert_list(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_CTX_set_max_cert_list(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) +# define SSL_get_max_cert_list(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_set_max_cert_list(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) + +# define SSL_CTX_set_max_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_set_max_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_split_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_set_split_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_max_pipelines(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_max_pipelines(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_retry_verify(ssl) \ + (SSL_ctrl(ssl,SSL_CTRL_SET_RETRY_VERIFY,0,NULL) > 0) + +void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); +void SSL_set_default_read_buffer_len(SSL *s, size_t len); + +# ifndef OPENSSL_NO_DH +# ifndef OPENSSL_NO_DEPRECATED_3_0 +/* NB: the |keylength| is only applicable when is_export is true */ +OSSL_DEPRECATEDIN_3_0 +void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +OSSL_DEPRECATEDIN_3_0 +void SSL_set_tmp_dh_callback(SSL *ssl, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +# endif +# endif + +__owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); +__owur const COMP_METHOD *SSL_get_current_expansion(const SSL *s); +__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp); +__owur const char *SSL_COMP_get0_name(const SSL_COMP *comp); +__owur int SSL_COMP_get_id(const SSL_COMP *comp); +STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) + *meths); +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_COMP_free_compression_methods() while(0) continue +# endif +__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); + +const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); +int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); +int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); +int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len, + int isv2format, STACK_OF(SSL_CIPHER) **sk, + STACK_OF(SSL_CIPHER) **scsvs); + +/* TLS extensions functions */ +__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); + +__owur int SSL_set_session_ticket_ext_cb(SSL *s, + tls_session_ticket_ext_cb_fn cb, + void *arg); + +/* Pre-shared secret session resumption functions */ +__owur int SSL_set_session_secret_cb(SSL *s, + tls_session_secret_cb_fn session_secret_cb, + void *arg); + +void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, + int (*cb) (SSL *ssl, + int + is_forward_secure)); + +void SSL_set_not_resumable_session_callback(SSL *ssl, + int (*cb) (SSL *ssl, + int is_forward_secure)); + +void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); +void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); +int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); + +int SSL_set_record_padding_callback(SSL *ssl, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); +void *SSL_get_record_padding_callback_arg(const SSL *ssl); +int SSL_set_block_padding(SSL *ssl, size_t block_size); + +int SSL_set_num_tickets(SSL *s, size_t num_tickets); +size_t SSL_get_num_tickets(const SSL *s); +int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); +size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define SSL_cache_hit(s) SSL_session_reused(s) +# endif + +__owur int SSL_session_reused(const SSL *s); +__owur int SSL_is_server(const SSL *s); + +__owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void); +int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); +void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); +unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); +__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, + unsigned int flags); +__owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); + +void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); +void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); + +__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); +__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); +__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); + +void SSL_add_ssl_module(void); +int SSL_config(SSL *s, const char *name); +int SSL_CTX_config(SSL_CTX *ctx, const char *name); + +# ifndef OPENSSL_NO_SSL_TRACE +void SSL_trace(int write_p, int version, int content_type, + const void *buf, size_t len, SSL *ssl, void *arg); +# endif + +# ifndef OPENSSL_NO_SOCK +int DTLSv1_listen(SSL *s, BIO_ADDR *client); +# endif + +# ifndef OPENSSL_NO_CT + +/* + * A callback for verifying that the received SCTs are sufficient. + * Expected to return 1 if they are sufficient, otherwise 0. + * May return a negative integer if an error occurs. + * A connection should be aborted if the SCTs are deemed insufficient. + */ +typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, + const STACK_OF(SCT) *scts, void *arg); + +/* + * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate + * the received SCTs. + * If the callback returns a non-positive result, the connection is terminated. + * Call this function before beginning a handshake. + * If a NULL |callback| is provided, SCT validation is disabled. + * |arg| is arbitrary userdata that will be passed to the callback whenever it + * is invoked. Ownership of |arg| remains with the caller. + * + * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response + * will be requested. + */ +int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback, + void *arg); +int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, + ssl_ct_validation_cb callback, + void *arg); +#define SSL_disable_ct(s) \ + ((void) SSL_set_validation_callback((s), NULL, NULL)) +#define SSL_CTX_disable_ct(ctx) \ + ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL)) + +/* + * The validation type enumerates the available behaviours of the built-in SSL + * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct(). + * The underlying callback is a static function in libssl. + */ +enum { + SSL_CT_VALIDATION_PERMISSIVE = 0, + SSL_CT_VALIDATION_STRICT +}; + +/* + * Enable CT by setting up a callback that implements one of the built-in + * validation variants. The SSL_CT_VALIDATION_PERMISSIVE variant always + * continues the handshake, the application can make appropriate decisions at + * handshake completion. The SSL_CT_VALIDATION_STRICT variant requires at + * least one valid SCT, or else handshake termination will be requested. The + * handshake may continue anyway if SSL_VERIFY_NONE is in effect. + */ +int SSL_enable_ct(SSL *s, int validation_mode); +int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode); + +/* + * Report whether a non-NULL callback is enabled. + */ +int SSL_ct_is_enabled(const SSL *s); +int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx); + +/* Gets the SCTs received from a connection */ +const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s); + +/* + * Loads the CT log list from the default location. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx); + +/* + * Loads the CT log list from the specified file path. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path); + +/* + * Sets the CT log list used by all SSL connections created from this SSL_CTX. + * Ownership of the CTLOG_STORE is transferred to the SSL_CTX. + */ +void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs); + +/* + * Gets the CT log list used by all SSL connections created from this SSL_CTX. + * This will be NULL unless one of the following functions has been called: + * - SSL_CTX_set_default_ctlog_list_file + * - SSL_CTX_set_ctlog_list_file + * - SSL_CTX_set_ctlog_store + */ +const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx); + +# endif /* OPENSSL_NO_CT */ + +/* What the "other" parameter contains in security callback */ +/* Mask for type */ +# define SSL_SECOP_OTHER_TYPE 0xffff0000 +# define SSL_SECOP_OTHER_NONE 0 +# define SSL_SECOP_OTHER_CIPHER (1 << 16) +# define SSL_SECOP_OTHER_CURVE (2 << 16) +# define SSL_SECOP_OTHER_DH (3 << 16) +# define SSL_SECOP_OTHER_PKEY (4 << 16) +# define SSL_SECOP_OTHER_SIGALG (5 << 16) +# define SSL_SECOP_OTHER_CERT (6 << 16) + +/* Indicated operation refers to peer key or certificate */ +# define SSL_SECOP_PEER 0x1000 + +/* Values for "op" parameter in security callback */ + +/* Called to filter ciphers */ +/* Ciphers client supports */ +# define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER) +/* Cipher shared by client/server */ +# define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER) +/* Sanity check of cipher server selects */ +# define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER) +/* Curves supported by client */ +# define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE) +/* Curves shared by client/server */ +# define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE) +/* Sanity check of curve server selects */ +# define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE) +/* Temporary DH key */ +# define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_PKEY) +/* SSL/TLS version */ +# define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE) +/* Session tickets */ +# define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE) +/* Supported signature algorithms sent to peer */ +# define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG) +/* Shared signature algorithm */ +# define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG) +/* Sanity check signature algorithm allowed */ +# define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG) +/* Used to get mask of supported public key signature algorithms */ +# define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG) +/* Use to see if compression is allowed */ +# define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE) +/* EE key in certificate */ +# define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT) +/* CA key in certificate */ +# define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT) +/* CA digest algorithm in certificate */ +# define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT) +/* Peer EE key in certificate */ +# define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER) +/* Peer CA key in certificate */ +# define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER) +/* Peer CA digest algorithm in certificate */ +# define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER) + +void SSL_set_security_level(SSL *s, int level); +__owur int SSL_get_security_level(const SSL *s); +void SSL_set_security_callback(SSL *s, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, + const SSL_CTX *ctx, int op, + int bits, int nid, void *other, + void *ex); +void SSL_set0_security_ex_data(SSL *s, void *ex); +__owur void *SSL_get0_security_ex_data(const SSL *s); + +void SSL_CTX_set_security_level(SSL_CTX *ctx, int level); +__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx); +void SSL_CTX_set_security_callback(SSL_CTX *ctx, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s, + const SSL_CTX *ctx, + int op, int bits, + int nid, + void *other, + void *ex); +void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex); +__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx); + +/* OPENSSL_INIT flag 0x010000 reserved for internal use */ +# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L +# define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L + +# define OPENSSL_INIT_SSL_DEFAULT \ + (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS) + +int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); + +# ifndef OPENSSL_NO_UNIT_TEST +__owur const struct openssl_ssl_test_functions *SSL_test_functions(void); +# endif + +__owur int SSL_free_buffers(SSL *ssl); +__owur int SSL_alloc_buffers(SSL *ssl); + +/* Status codes passed to the decrypt session ticket callback. Some of these + * are for internal use only and are never passed to the callback. */ +typedef int SSL_TICKET_STATUS; + +/* Support for ticket appdata */ +/* fatal error, malloc failure */ +# define SSL_TICKET_FATAL_ERR_MALLOC 0 +/* fatal error, either from parsing or decrypting the ticket */ +# define SSL_TICKET_FATAL_ERR_OTHER 1 +/* No ticket present */ +# define SSL_TICKET_NONE 2 +/* Empty ticket present */ +# define SSL_TICKET_EMPTY 3 +/* the ticket couldn't be decrypted */ +# define SSL_TICKET_NO_DECRYPT 4 +/* a ticket was successfully decrypted */ +# define SSL_TICKET_SUCCESS 5 +/* same as above but the ticket needs to be renewed */ +# define SSL_TICKET_SUCCESS_RENEW 6 + +/* Return codes for the decrypt session ticket callback */ +typedef int SSL_TICKET_RETURN; + +/* An error occurred */ +#define SSL_TICKET_RETURN_ABORT 0 +/* Do not use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE 1 +/* Do not use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE_RENEW 2 +/* Use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE 3 +/* Use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE_RENEW 4 + +typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg); +typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss, + const unsigned char *keyname, + size_t keyname_length, + SSL_TICKET_STATUS status, + void *arg); +int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, + SSL_CTX_generate_session_ticket_fn gen_cb, + SSL_CTX_decrypt_session_ticket_fn dec_cb, + void *arg); +int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); +int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); + +typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); + +void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); + + +typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg); +void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx, + SSL_allow_early_data_cb_fn cb, + void *arg); +void SSL_set_allow_early_data_cb(SSL *s, + SSL_allow_early_data_cb_fn cb, + void *arg); + +/* store the default cipher strings inside the library */ +const char *OSSL_default_cipher_list(void); +const char *OSSL_default_ciphersuites(void); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl2.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl2.h index 5321bd27..428ead05 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl2.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl2.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL2_H -# define HEADER_SSL2_H +#ifndef OPENSSL_SSL2_H +# define OPENSSL_SSL2_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL2_H +# endif #ifdef __cplusplus extern "C" { diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl3.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl3.h index 07effba2..49bd51f2 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl3.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl3.h @@ -1,15 +1,21 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSL3_H -# define HEADER_SSL3_H +#ifndef OPENSSL_SSL3_H +# define OPENSSL_SSL3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SSL3_H +# endif # include # include @@ -206,7 +212,7 @@ extern "C" { # define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" # define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" -# define SSL3_VERSION 0x0300 +/* SSL3_VERSION is defined in prov_ssl.h */ # define SSL3_VERSION_MAJOR 0x03 # define SSL3_VERSION_MINOR 0x00 @@ -214,7 +220,6 @@ extern "C" { # define SSL3_RT_ALERT 21 # define SSL3_RT_HANDSHAKE 22 # define SSL3_RT_APPLICATION_DATA 23 -# define DTLS1_RT_HEARTBEAT 24 /* Pseudo content types to indicate additional parameters */ # define TLS1_RT_CRYPTO 0x1000 @@ -265,7 +270,7 @@ extern "C" { * SSL3_CT_NUMBER is used to size arrays and it must be large enough to * contain all of the cert types defined for *either* SSLv3 and TLSv1. */ -# define SSL3_CT_NUMBER 10 +# define SSL3_CT_NUMBER 12 # if defined(TLS_CT_NUMBER) # if TLS_CT_NUMBER != SSL3_CT_NUMBER diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/sslerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/sslerr.h index 701d61c6..f1882558 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/sslerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/sslerr.h @@ -1,456 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SSLERR_H -# define HEADER_SSLERR_H +#ifndef OPENSSL_SSLERR_H +# define OPENSSL_SSLERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_SSL_strings(void); -/* - * SSL function codes. - */ -# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 438 -# define SSL_F_ADD_KEY_SHARE 512 -# define SSL_F_BYTES_TO_CIPHER_LIST 519 -# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 -# define SSL_F_CIPHERSUITE_CB 622 -# define SSL_F_CONSTRUCT_CA_NAMES 552 -# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 553 -# define SSL_F_CONSTRUCT_STATEFUL_TICKET 636 -# define SSL_F_CONSTRUCT_STATELESS_TICKET 637 -# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 539 -# define SSL_F_CREATE_TICKET_PREQUEL 638 -# define SSL_F_CT_MOVE_SCTS 345 -# define SSL_F_CT_STRICT 349 -# define SSL_F_CUSTOM_EXT_ADD 554 -# define SSL_F_CUSTOM_EXT_PARSE 555 -# define SSL_F_D2I_SSL_SESSION 103 -# define SSL_F_DANE_CTX_ENABLE 347 -# define SSL_F_DANE_MTYPE_SET 393 -# define SSL_F_DANE_TLSA_ADD 394 -# define SSL_F_DERIVE_SECRET_KEY_AND_IV 514 -# define SSL_F_DO_DTLS1_WRITE 245 -# define SSL_F_DO_SSL3_WRITE 104 -# define SSL_F_DTLS1_BUFFER_RECORD 247 -# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 -# define SSL_F_DTLS1_HEARTBEAT 305 -# define SSL_F_DTLS1_HM_FRAGMENT_NEW 623 -# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 -# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 -# define SSL_F_DTLS1_PROCESS_RECORD 257 -# define SSL_F_DTLS1_READ_BYTES 258 -# define SSL_F_DTLS1_READ_FAILED 339 -# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 -# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 -# define SSL_F_DTLS1_WRITE_BYTES 545 -# define SSL_F_DTLSV1_LISTEN 350 -# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 -# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 -# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 -# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 -# define SSL_F_DTLS_RECORD_LAYER_NEW 635 -# define SSL_F_DTLS_WAIT_FOR_DRY 592 -# define SSL_F_EARLY_DATA_COUNT_OK 532 -# define SSL_F_FINAL_EARLY_DATA 556 -# define SSL_F_FINAL_EC_PT_FORMATS 485 -# define SSL_F_FINAL_EMS 486 -# define SSL_F_FINAL_KEY_SHARE 503 -# define SSL_F_FINAL_MAXFRAGMENTLEN 557 -# define SSL_F_FINAL_PSK 639 -# define SSL_F_FINAL_RENEGOTIATE 483 -# define SSL_F_FINAL_SERVER_NAME 558 -# define SSL_F_FINAL_SIG_ALGS 497 -# define SSL_F_GET_CERT_VERIFY_TBS_DATA 588 -# define SSL_F_NSS_KEYLOG_INT 500 -# define SSL_F_OPENSSL_INIT_SSL 342 -# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 436 -# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 598 -# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 430 -# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 593 -# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 594 -# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 -# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 599 -# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 437 -# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 600 -# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 431 -# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 601 -# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 602 -# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 640 -# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 603 -# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 -# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 604 -# define SSL_F_PARSE_CA_NAMES 541 -# define SSL_F_PITEM_NEW 624 -# define SSL_F_PQUEUE_NEW 625 -# define SSL_F_PROCESS_KEY_SHARE_EXT 439 -# define SSL_F_READ_STATE_MACHINE 352 -# define SSL_F_SET_CLIENT_CIPHERSUITE 540 -# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 595 -# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 589 -# define SSL_F_SRP_VERIFY_SERVER_PARAM 596 -# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 -# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 -# define SSL_F_SSL3_CTRL 213 -# define SSL_F_SSL3_CTX_CTRL 133 -# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 -# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 -# define SSL_F_SSL3_ENC 608 -# define SSL_F_SSL3_FINAL_FINISH_MAC 285 -# define SSL_F_SSL3_FINISH_MAC 587 -# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 -# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 -# define SSL_F_SSL3_GET_RECORD 143 -# define SSL_F_SSL3_INIT_FINISHED_MAC 397 -# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 -# define SSL_F_SSL3_READ_BYTES 148 -# define SSL_F_SSL3_READ_N 149 -# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 -# define SSL_F_SSL3_SETUP_READ_BUFFER 156 -# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 -# define SSL_F_SSL3_WRITE_BYTES 158 -# define SSL_F_SSL3_WRITE_PENDING 159 -# define SSL_F_SSL_ADD_CERT_CHAIN 316 -# define SSL_F_SSL_ADD_CERT_TO_BUF 319 -# define SSL_F_SSL_ADD_CERT_TO_WPACKET 493 -# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 -# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 -# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 -# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 -# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 -# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 -# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 -# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 -# define SSL_F_SSL_BAD_METHOD 160 -# define SSL_F_SSL_BUILD_CERT_CHAIN 332 -# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 -# define SSL_F_SSL_CACHE_CIPHERLIST 520 -# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 346 -# define SSL_F_SSL_CERT_DUP 221 -# define SSL_F_SSL_CERT_NEW 162 -# define SSL_F_SSL_CERT_SET0_CHAIN 340 -# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 -# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 -# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 606 -# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 -# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 607 -# define SSL_F_SSL_CIPHER_DESCRIPTION 626 -# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 425 -# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 -# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 -# define SSL_F_SSL_CLEAR 164 -# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 627 -# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 -# define SSL_F_SSL_CONF_CMD 334 -# define SSL_F_SSL_CREATE_CIPHER_LIST 166 -# define SSL_F_SSL_CTRL 232 -# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 -# define SSL_F_SSL_CTX_ENABLE_CT 398 -# define SSL_F_SSL_CTX_MAKE_PROFILES 309 -# define SSL_F_SSL_CTX_NEW 169 -# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 -# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 -# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 -# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 396 -# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 -# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 -# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 551 -# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 -# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 -# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 -# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 -# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 -# define SSL_F_SSL_CTX_USE_SERVERINFO 336 -# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 543 -# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 -# define SSL_F_SSL_DANE_DUP 403 -# define SSL_F_SSL_DANE_ENABLE 395 -# define SSL_F_SSL_DERIVE 590 -# define SSL_F_SSL_DO_CONFIG 391 -# define SSL_F_SSL_DO_HANDSHAKE 180 -# define SSL_F_SSL_DUP_CA_LIST 408 -# define SSL_F_SSL_ENABLE_CT 402 -# define SSL_F_SSL_GENERATE_PKEY_GROUP 559 -# define SSL_F_SSL_GENERATE_SESSION_ID 547 -# define SSL_F_SSL_GET_NEW_SESSION 181 -# define SSL_F_SSL_GET_PREV_SESSION 217 -# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 -# define SSL_F_SSL_GET_SIGN_PKEY 183 -# define SSL_F_SSL_HANDSHAKE_HASH 560 -# define SSL_F_SSL_INIT_WBIO_BUFFER 184 -# define SSL_F_SSL_KEY_UPDATE 515 -# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 -# define SSL_F_SSL_LOG_MASTER_SECRET 498 -# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 499 -# define SSL_F_SSL_MODULE_INIT 392 -# define SSL_F_SSL_NEW 186 -# define SSL_F_SSL_NEXT_PROTO_VALIDATE 565 -# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 -# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 -# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 -# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 -# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 -# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 -# define SSL_F_SSL_PEEK 270 -# define SSL_F_SSL_PEEK_EX 432 -# define SSL_F_SSL_PEEK_INTERNAL 522 -# define SSL_F_SSL_READ 223 -# define SSL_F_SSL_READ_EARLY_DATA 529 -# define SSL_F_SSL_READ_EX 434 -# define SSL_F_SSL_READ_INTERNAL 523 -# define SSL_F_SSL_RENEGOTIATE 516 -# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 546 -# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 -# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 -# define SSL_F_SSL_SESSION_DUP 348 -# define SSL_F_SSL_SESSION_NEW 189 -# define SSL_F_SSL_SESSION_PRINT_FP 190 -# define SSL_F_SSL_SESSION_SET1_ID 423 -# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 -# define SSL_F_SSL_SET_ALPN_PROTOS 344 -# define SSL_F_SSL_SET_CERT 191 -# define SSL_F_SSL_SET_CERT_AND_KEY 621 -# define SSL_F_SSL_SET_CIPHER_LIST 271 -# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 -# define SSL_F_SSL_SET_FD 192 -# define SSL_F_SSL_SET_PKEY 193 -# define SSL_F_SSL_SET_RFD 194 -# define SSL_F_SSL_SET_SESSION 195 -# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 -# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 -# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 550 -# define SSL_F_SSL_SET_WFD 196 -# define SSL_F_SSL_SHUTDOWN 224 -# define SSL_F_SSL_SRP_CTX_INIT 313 -# define SSL_F_SSL_START_ASYNC_JOB 389 -# define SSL_F_SSL_UNDEFINED_FUNCTION 197 -# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 -# define SSL_F_SSL_USE_CERTIFICATE 198 -# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 -# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 -# define SSL_F_SSL_USE_PRIVATEKEY 201 -# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 -# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 -# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 -# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 -# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 -# define SSL_F_SSL_VALIDATE_CT 400 -# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 -# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 616 -# define SSL_F_SSL_WRITE 208 -# define SSL_F_SSL_WRITE_EARLY_DATA 526 -# define SSL_F_SSL_WRITE_EARLY_FINISH 527 -# define SSL_F_SSL_WRITE_EX 433 -# define SSL_F_SSL_WRITE_INTERNAL 524 -# define SSL_F_STATE_MACHINE 353 -# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 -# define SSL_F_TLS12_COPY_SIGALGS 533 -# define SSL_F_TLS13_CHANGE_CIPHER_STATE 440 -# define SSL_F_TLS13_ENC 609 -# define SSL_F_TLS13_FINAL_FINISH_MAC 605 -# define SSL_F_TLS13_GENERATE_SECRET 591 -# define SSL_F_TLS13_HKDF_EXPAND 561 -# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 617 -# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 618 -# define SSL_F_TLS13_SETUP_KEY_BLOCK 441 -# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 -# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 -# define SSL_F_TLS1_ENC 401 -# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 -# define SSL_F_TLS1_GET_CURVELIST 338 -# define SSL_F_TLS1_PRF 284 -# define SSL_F_TLS1_SAVE_U16 628 -# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 -# define SSL_F_TLS1_SET_GROUPS 629 -# define SSL_F_TLS1_SET_RAW_SIGALGS 630 -# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 -# define SSL_F_TLS1_SET_SHARED_SIGALGS 631 -# define SSL_F_TLS1_SET_SIGALGS 632 -# define SSL_F_TLS_CHOOSE_SIGALG 513 -# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 -# define SSL_F_TLS_COLLECT_EXTENSIONS 435 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 542 -# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 429 -# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 494 -# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 496 -# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 427 -# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 -# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 -# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 -# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 -# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 -# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 -# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 484 -# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 487 -# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 488 -# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 489 -# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 466 -# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 355 -# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 535 -# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 530 -# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 467 -# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 468 -# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 469 -# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 356 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 357 -# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 470 -# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 549 -# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 471 -# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 472 -# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 619 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 501 -# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 509 -# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 473 -# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 474 -# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 475 -# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 476 -# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 477 -# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 478 -# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 479 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 480 -# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 481 -# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 482 -# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 358 -# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 443 -# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 536 -# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 447 -# define SSL_F_TLS_CONSTRUCT_FINISHED 359 -# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 -# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 510 -# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 517 -# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 -# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 426 -# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 490 -# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 491 -# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 492 -# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 451 -# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 374 -# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 613 -# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 452 -# define SSL_F_TLS_CONSTRUCT_STOC_DONE 375 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 531 -# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 525 -# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 453 -# define SSL_F_TLS_CONSTRUCT_STOC_EMS 454 -# define SSL_F_TLS_CONSTRUCT_STOC_ETM 455 -# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 376 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 377 -# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 456 -# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 548 -# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 457 -# define SSL_F_TLS_CONSTRUCT_STOC_PSK 504 -# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 458 -# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 459 -# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 460 -# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 461 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 544 -# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 611 -# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 462 -# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 521 -# define SSL_F_TLS_FINISH_HANDSHAKE 597 -# define SSL_F_TLS_GET_MESSAGE_BODY 351 -# define SSL_F_TLS_GET_MESSAGE_HEADER 387 -# define SSL_F_TLS_HANDLE_ALPN 562 -# define SSL_F_TLS_HANDLE_STATUS_REQUEST 563 -# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 566 -# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 449 -# define SSL_F_TLS_PARSE_CTOS_ALPN 567 -# define SSL_F_TLS_PARSE_CTOS_COOKIE 614 -# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 568 -# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 569 -# define SSL_F_TLS_PARSE_CTOS_EMS 570 -# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 463 -# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 571 -# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 620 -# define SSL_F_TLS_PARSE_CTOS_PSK 505 -# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 572 -# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 464 -# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 573 -# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 574 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 575 -# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 615 -# define SSL_F_TLS_PARSE_CTOS_SRP 576 -# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 577 -# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 578 -# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 465 -# define SSL_F_TLS_PARSE_STOC_ALPN 579 -# define SSL_F_TLS_PARSE_STOC_COOKIE 534 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 538 -# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 528 -# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 580 -# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 445 -# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 581 -# define SSL_F_TLS_PARSE_STOC_NPN 582 -# define SSL_F_TLS_PARSE_STOC_PSK 502 -# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 448 -# define SSL_F_TLS_PARSE_STOC_SCT 564 -# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 583 -# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 584 -# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 585 -# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 612 -# define SSL_F_TLS_PARSE_STOC_USE_SRTP 446 -# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 -# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 -# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 -# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 610 -# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 -# define SSL_F_TLS_PROCESS_CERT_STATUS 362 -# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 495 -# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 -# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 -# define SSL_F_TLS_PROCESS_CKE_DHE 411 -# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 -# define SSL_F_TLS_PROCESS_CKE_GOST 413 -# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 -# define SSL_F_TLS_PROCESS_CKE_RSA 415 -# define SSL_F_TLS_PROCESS_CKE_SRP 416 -# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 -# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 -# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 -# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 444 -# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 537 -# define SSL_F_TLS_PROCESS_FINISHED 364 -# define SSL_F_TLS_PROCESS_HELLO_REQ 507 -# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 511 -# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 442 -# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 -# define SSL_F_TLS_PROCESS_KEY_UPDATE 518 -# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 -# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 -# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 -# define SSL_F_TLS_PROCESS_SERVER_DONE 368 -# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 -# define SSL_F_TLS_PROCESS_SKE_DHE 419 -# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 -# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 -# define SSL_F_TLS_PROCESS_SKE_SRP 422 -# define SSL_F_TLS_PSK_DO_BINDER 506 -# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 450 -# define SSL_F_TLS_SETUP_HANDSHAKE 508 -# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 -# define SSL_F_WPACKET_INTERN_INIT_LEN 633 -# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 634 -# define SSL_F_WRITE_STATE_MACHINE 586 /* * SSL reason codes. @@ -458,7 +24,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY 291 # define SSL_R_APP_DATA_IN_HANDSHAKE 100 # define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 -# define SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE 143 # define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 # define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 # define SSL_R_BAD_CIPHER 186 @@ -500,6 +65,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_BN_LIB 130 # define SSL_R_CALLBACK_FAILED 234 # define SSL_R_CANNOT_CHANGE_CIPHER 109 +# define SSL_R_CANNOT_GET_GROUP_NAME 299 # define SSL_R_CA_DN_LENGTH_MISMATCH 131 # define SSL_R_CA_KEY_TOO_SMALL 397 # define SSL_R_CA_MD_TOO_WEAK 398 @@ -509,7 +75,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_CERT_LENGTH_MISMATCH 135 # define SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED 218 # define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 -# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 # define SSL_R_CLIENTHELLO_TLSEXT 226 # define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 # define SSL_R_COMPRESSION_DISABLED 343 @@ -520,6 +85,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 # define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 # define SSL_R_COOKIE_MISMATCH 308 +# define SSL_R_COPY_PARAMETERS_FAILED 296 # define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 # define SSL_R_DANE_ALREADY_ENABLED 172 # define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 @@ -584,6 +150,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_INVALID_SRP_USERNAME 357 # define SSL_R_INVALID_STATUS_RESPONSE 328 # define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 +# define SSL_R_LEGACY_SIGALG_DISALLOWED_OR_UNSUPPORTED 333 # define SSL_R_LENGTH_MISMATCH 159 # define SSL_R_LENGTH_TOO_LONG 404 # define SSL_R_LENGTH_TOO_SHORT 160 @@ -629,13 +196,15 @@ int ERR_load_SSL_strings(void); # define SSL_R_NO_SHARED_GROUPS 410 # define SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS 376 # define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_SUITABLE_DIGEST_ALGORITHM 297 +# define SSL_R_NO_SUITABLE_GROUPS 295 # define SSL_R_NO_SUITABLE_KEY_SHARE 101 # define SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM 118 # define SSL_R_NO_VALID_SCTS 216 # define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 # define SSL_R_NULL_SSL_CTX 195 # define SSL_R_NULL_SSL_METHOD_PASSED 196 -# define SSL_R_OCSP_CALLBACK_FAILURE 294 +# define SSL_R_OCSP_CALLBACK_FAILURE 305 # define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 # define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 # define SSL_R_OVERFLOW_ERROR 237 @@ -724,8 +293,6 @@ int ERR_load_SSL_strings(void); # define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 # define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 # define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 -# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 -# define SSL_R_TLS_HEARTBEAT_PENDING 366 # define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 # define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 # define SSL_R_TOO_MANY_KEY_UPDATES 132 @@ -737,6 +304,7 @@ int ERR_load_SSL_strings(void); # define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 # define SSL_R_UNEXPECTED_CCS_MESSAGE 262 # define SSL_R_UNEXPECTED_END_OF_EARLY_DATA 178 +# define SSL_R_UNEXPECTED_EOF_WHILE_READING 294 # define SSL_R_UNEXPECTED_MESSAGE 244 # define SSL_R_UNEXPECTED_RECORD 245 # define SSL_R_UNINITIALIZED 276 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/sslerr_legacy.h b/deps/openssl/android/x86_64/usr/local/include/openssl/sslerr_legacy.h new file mode 100644 index 00000000..ccf6d3b3 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/sslerr_legacy.h @@ -0,0 +1,468 @@ +/* + * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This header file preserves symbols from pre-3.0 OpenSSL. + * It should never be included directly, as it's already included + * by the public sslerr.h headers, and since it will go away some + * time in the future. + */ + +#ifndef OPENSSL_SSLERR_LEGACY_H +# define OPENSSL_SSLERR_LEGACY_H +# pragma once + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ERR_load_SSL_strings(void); + +/* Collected _F_ macros from OpenSSL 1.1.1 */ + +/* + * SSL function codes. + */ +# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 0 +# define SSL_F_ADD_KEY_SHARE 0 +# define SSL_F_BYTES_TO_CIPHER_LIST 0 +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 0 +# define SSL_F_CIPHERSUITE_CB 0 +# define SSL_F_CONSTRUCT_CA_NAMES 0 +# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 0 +# define SSL_F_CONSTRUCT_STATEFUL_TICKET 0 +# define SSL_F_CONSTRUCT_STATELESS_TICKET 0 +# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 0 +# define SSL_F_CREATE_TICKET_PREQUEL 0 +# define SSL_F_CT_MOVE_SCTS 0 +# define SSL_F_CT_STRICT 0 +# define SSL_F_CUSTOM_EXT_ADD 0 +# define SSL_F_CUSTOM_EXT_PARSE 0 +# define SSL_F_D2I_SSL_SESSION 0 +# define SSL_F_DANE_CTX_ENABLE 0 +# define SSL_F_DANE_MTYPE_SET 0 +# define SSL_F_DANE_TLSA_ADD 0 +# define SSL_F_DERIVE_SECRET_KEY_AND_IV 0 +# define SSL_F_DO_DTLS1_WRITE 0 +# define SSL_F_DO_SSL3_WRITE 0 +# define SSL_F_DTLS1_BUFFER_RECORD 0 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 0 +# define SSL_F_DTLS1_HEARTBEAT 0 +# define SSL_F_DTLS1_HM_FRAGMENT_NEW 0 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 0 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 0 +# define SSL_F_DTLS1_PROCESS_RECORD 0 +# define SSL_F_DTLS1_READ_BYTES 0 +# define SSL_F_DTLS1_READ_FAILED 0 +# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 0 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 0 +# define SSL_F_DTLS1_WRITE_BYTES 0 +# define SSL_F_DTLSV1_LISTEN 0 +# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 0 +# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 0 +# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 0 +# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 0 +# define SSL_F_DTLS_RECORD_LAYER_NEW 0 +# define SSL_F_DTLS_WAIT_FOR_DRY 0 +# define SSL_F_EARLY_DATA_COUNT_OK 0 +# define SSL_F_FINAL_EARLY_DATA 0 +# define SSL_F_FINAL_EC_PT_FORMATS 0 +# define SSL_F_FINAL_EMS 0 +# define SSL_F_FINAL_KEY_SHARE 0 +# define SSL_F_FINAL_MAXFRAGMENTLEN 0 +# define SSL_F_FINAL_RENEGOTIATE 0 +# define SSL_F_FINAL_SERVER_NAME 0 +# define SSL_F_FINAL_SIG_ALGS 0 +# define SSL_F_GET_CERT_VERIFY_TBS_DATA 0 +# define SSL_F_NSS_KEYLOG_INT 0 +# define SSL_F_OPENSSL_INIT_SSL 0 +# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 0 +# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 0 +# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 0 +# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 0 +# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 0 +# define SSL_F_PARSE_CA_NAMES 0 +# define SSL_F_PITEM_NEW 0 +# define SSL_F_PQUEUE_NEW 0 +# define SSL_F_PROCESS_KEY_SHARE_EXT 0 +# define SSL_F_READ_STATE_MACHINE 0 +# define SSL_F_SET_CLIENT_CIPHERSUITE 0 +# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 0 +# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 0 +# define SSL_F_SRP_VERIFY_SERVER_PARAM 0 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 0 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 0 +# define SSL_F_SSL3_CTRL 0 +# define SSL_F_SSL3_CTX_CTRL 0 +# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 0 +# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 0 +# define SSL_F_SSL3_ENC 0 +# define SSL_F_SSL3_FINAL_FINISH_MAC 0 +# define SSL_F_SSL3_FINISH_MAC 0 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 0 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 0 +# define SSL_F_SSL3_GET_RECORD 0 +# define SSL_F_SSL3_INIT_FINISHED_MAC 0 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 0 +# define SSL_F_SSL3_READ_BYTES 0 +# define SSL_F_SSL3_READ_N 0 +# define SSL_F_SSL3_SETUP_KEY_BLOCK 0 +# define SSL_F_SSL3_SETUP_READ_BUFFER 0 +# define SSL_F_SSL3_SETUP_WRITE_BUFFER 0 +# define SSL_F_SSL3_WRITE_BYTES 0 +# define SSL_F_SSL3_WRITE_PENDING 0 +# define SSL_F_SSL_ADD_CERT_CHAIN 0 +# define SSL_F_SSL_ADD_CERT_TO_BUF 0 +# define SSL_F_SSL_ADD_CERT_TO_WPACKET 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 0 +# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 0 +# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_BAD_METHOD 0 +# define SSL_F_SSL_BUILD_CERT_CHAIN 0 +# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 0 +# define SSL_F_SSL_CACHE_CIPHERLIST 0 +# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 0 +# define SSL_F_SSL_CERT_DUP 0 +# define SSL_F_SSL_CERT_NEW 0 +# define SSL_F_SSL_CERT_SET0_CHAIN 0 +# define SSL_F_SSL_CHECK_PRIVATE_KEY 0 +# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 0 +# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 0 +# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 0 +# define SSL_F_SSL_CIPHER_DESCRIPTION 0 +# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 0 +# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 0 +# define SSL_F_SSL_CIPHER_STRENGTH_SORT 0 +# define SSL_F_SSL_CLEAR 0 +# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 0 +# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 0 +# define SSL_F_SSL_CONF_CMD 0 +# define SSL_F_SSL_CREATE_CIPHER_LIST 0 +# define SSL_F_SSL_CTRL 0 +# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 0 +# define SSL_F_SSL_CTX_ENABLE_CT 0 +# define SSL_F_SSL_CTX_MAKE_PROFILES 0 +# define SSL_F_SSL_CTX_NEW 0 +# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 0 +# define SSL_F_SSL_CTX_SET_CIPHER_LIST 0 +# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 0 +# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 0 +# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 0 +# define SSL_F_SSL_CTX_SET_SSL_VERSION 0 +# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 0 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 0 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 0 +# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 0 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 0 +# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 0 +# define SSL_F_SSL_DANE_DUP 0 +# define SSL_F_SSL_DANE_ENABLE 0 +# define SSL_F_SSL_DERIVE 0 +# define SSL_F_SSL_DO_CONFIG 0 +# define SSL_F_SSL_DO_HANDSHAKE 0 +# define SSL_F_SSL_DUP_CA_LIST 0 +# define SSL_F_SSL_ENABLE_CT 0 +# define SSL_F_SSL_GENERATE_PKEY_GROUP 0 +# define SSL_F_SSL_GENERATE_SESSION_ID 0 +# define SSL_F_SSL_GET_NEW_SESSION 0 +# define SSL_F_SSL_GET_PREV_SESSION 0 +# define SSL_F_SSL_GET_SERVER_CERT_INDEX 0 +# define SSL_F_SSL_GET_SIGN_PKEY 0 +# define SSL_F_SSL_HANDSHAKE_HASH 0 +# define SSL_F_SSL_INIT_WBIO_BUFFER 0 +# define SSL_F_SSL_KEY_UPDATE 0 +# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 0 +# define SSL_F_SSL_LOG_MASTER_SECRET 0 +# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_SSL_MODULE_INIT 0 +# define SSL_F_SSL_NEW 0 +# define SSL_F_SSL_NEXT_PROTO_VALIDATE 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 0 +# define SSL_F_SSL_PEEK 0 +# define SSL_F_SSL_PEEK_EX 0 +# define SSL_F_SSL_PEEK_INTERNAL 0 +# define SSL_F_SSL_READ 0 +# define SSL_F_SSL_READ_EARLY_DATA 0 +# define SSL_F_SSL_READ_EX 0 +# define SSL_F_SSL_READ_INTERNAL 0 +# define SSL_F_SSL_RENEGOTIATE 0 +# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 0 +# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 0 +# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 0 +# define SSL_F_SSL_SESSION_DUP 0 +# define SSL_F_SSL_SESSION_NEW 0 +# define SSL_F_SSL_SESSION_PRINT_FP 0 +# define SSL_F_SSL_SESSION_SET1_ID 0 +# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 0 +# define SSL_F_SSL_SET_ALPN_PROTOS 0 +# define SSL_F_SSL_SET_CERT 0 +# define SSL_F_SSL_SET_CERT_AND_KEY 0 +# define SSL_F_SSL_SET_CIPHER_LIST 0 +# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 0 +# define SSL_F_SSL_SET_FD 0 +# define SSL_F_SSL_SET_PKEY 0 +# define SSL_F_SSL_SET_RFD 0 +# define SSL_F_SSL_SET_SESSION 0 +# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 0 +# define SSL_F_SSL_SET_SESSION_TICKET_EXT 0 +# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 0 +# define SSL_F_SSL_SET_WFD 0 +# define SSL_F_SSL_SHUTDOWN 0 +# define SSL_F_SSL_SRP_CTX_INIT 0 +# define SSL_F_SSL_START_ASYNC_JOB 0 +# define SSL_F_SSL_UNDEFINED_FUNCTION 0 +# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 0 +# define SSL_F_SSL_USE_CERTIFICATE 0 +# define SSL_F_SSL_USE_CERTIFICATE_ASN1 0 +# define SSL_F_SSL_USE_CERTIFICATE_FILE 0 +# define SSL_F_SSL_USE_PRIVATEKEY 0 +# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 0 +# define SSL_F_SSL_USE_PRIVATEKEY_FILE 0 +# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 0 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 0 +# define SSL_F_SSL_VALIDATE_CT 0 +# define SSL_F_SSL_VERIFY_CERT_CHAIN 0 +# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 0 +# define SSL_F_SSL_WRITE 0 +# define SSL_F_SSL_WRITE_EARLY_DATA 0 +# define SSL_F_SSL_WRITE_EARLY_FINISH 0 +# define SSL_F_SSL_WRITE_EX 0 +# define SSL_F_SSL_WRITE_INTERNAL 0 +# define SSL_F_STATE_MACHINE 0 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 0 +# define SSL_F_TLS12_COPY_SIGALGS 0 +# define SSL_F_TLS13_CHANGE_CIPHER_STATE 0 +# define SSL_F_TLS13_ENC 0 +# define SSL_F_TLS13_FINAL_FINISH_MAC 0 +# define SSL_F_TLS13_GENERATE_SECRET 0 +# define SSL_F_TLS13_HKDF_EXPAND 0 +# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 0 +# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 0 +# define SSL_F_TLS13_SETUP_KEY_BLOCK 0 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 0 +# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 0 +# define SSL_F_TLS1_ENC 0 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 0 +# define SSL_F_TLS1_GET_CURVELIST 0 +# define SSL_F_TLS1_PRF 0 +# define SSL_F_TLS1_SAVE_U16 0 +# define SSL_F_TLS1_SETUP_KEY_BLOCK 0 +# define SSL_F_TLS1_SET_GROUPS 0 +# define SSL_F_TLS1_SET_RAW_SIGALGS 0 +# define SSL_F_TLS1_SET_SERVER_SIGALGS 0 +# define SSL_F_TLS1_SET_SHARED_SIGALGS 0 +# define SSL_F_TLS1_SET_SIGALGS 0 +# define SSL_F_TLS_CHOOSE_SIGALG 0 +# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 0 +# define SSL_F_TLS_COLLECT_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 0 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 0 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 0 +# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 0 +# define SSL_F_TLS_CONSTRUCT_CKE_DHE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_GOST 0 +# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_CONSTRUCT_CKE_RSA 0 +# define SSL_F_TLS_CONSTRUCT_CKE_SRP 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 0 +# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 0 +# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 0 +# define SSL_F_TLS_CONSTRUCT_FINISHED 0 +# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 0 +# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 0 +# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 0 +# define SSL_F_TLS_CONSTRUCT_STOC_DONE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_EMS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_ETM 0 +# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 0 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 0 +# define SSL_F_TLS_CONSTRUCT_STOC_PSK 0 +# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 0 +# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 0 +# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_FINISH_HANDSHAKE 0 +# define SSL_F_TLS_GET_MESSAGE_BODY 0 +# define SSL_F_TLS_GET_MESSAGE_HEADER 0 +# define SSL_F_TLS_HANDLE_ALPN 0 +# define SSL_F_TLS_HANDLE_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 0 +# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 0 +# define SSL_F_TLS_PARSE_CTOS_ALPN 0 +# define SSL_F_TLS_PARSE_CTOS_COOKIE 0 +# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 0 +# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 0 +# define SSL_F_TLS_PARSE_CTOS_EMS 0 +# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 0 +# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 0 +# define SSL_F_TLS_PARSE_CTOS_PSK 0 +# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 0 +# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 0 +# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 0 +# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 0 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 0 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 0 +# define SSL_F_TLS_PARSE_CTOS_SRP 0 +# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 0 +# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 0 +# define SSL_F_TLS_PARSE_STOC_ALPN 0 +# define SSL_F_TLS_PARSE_STOC_COOKIE 0 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 0 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 0 +# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 0 +# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 0 +# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 0 +# define SSL_F_TLS_PARSE_STOC_NPN 0 +# define SSL_F_TLS_PARSE_STOC_PSK 0 +# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 0 +# define SSL_F_TLS_PARSE_STOC_SCT 0 +# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 0 +# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 0 +# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 0 +# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 0 +# define SSL_F_TLS_PARSE_STOC_USE_SRTP 0 +# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 0 +# define SSL_F_TLS_PROCESS_CERT_STATUS 0 +# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 0 +# define SSL_F_TLS_PROCESS_CERT_VERIFY 0 +# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 0 +# define SSL_F_TLS_PROCESS_CKE_DHE 0 +# define SSL_F_TLS_PROCESS_CKE_ECDHE 0 +# define SSL_F_TLS_PROCESS_CKE_GOST 0 +# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_PROCESS_CKE_RSA 0 +# define SSL_F_TLS_PROCESS_CKE_SRP 0 +# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_CLIENT_HELLO 0 +# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 0 +# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 0 +# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 0 +# define SSL_F_TLS_PROCESS_FINISHED 0 +# define SSL_F_TLS_PROCESS_HELLO_REQ 0 +# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 0 +# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 0 +# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 0 +# define SSL_F_TLS_PROCESS_KEY_UPDATE 0 +# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 0 +# define SSL_F_TLS_PROCESS_NEXT_PROTO 0 +# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 0 +# define SSL_F_TLS_PROCESS_SERVER_DONE 0 +# define SSL_F_TLS_PROCESS_SERVER_HELLO 0 +# define SSL_F_TLS_PROCESS_SKE_DHE 0 +# define SSL_F_TLS_PROCESS_SKE_ECDHE 0 +# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 0 +# define SSL_F_TLS_PROCESS_SKE_SRP 0 +# define SSL_F_TLS_PSK_DO_BINDER 0 +# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 0 +# define SSL_F_TLS_SETUP_HANDSHAKE 0 +# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 0 +# define SSL_F_WPACKET_INTERN_INIT_LEN 0 +# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 0 +# define SSL_F_WRITE_STATE_MACHINE 0 +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/stack.h b/deps/openssl/android/x86_64/usr/local/include/openssl/stack.h index cfc07505..f0c5c547 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/stack.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/stack.h @@ -1,14 +1,20 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_STACK_H -# define HEADER_STACK_H +#ifndef OPENSSL_STACK_H +# define OPENSSL_STACK_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_STACK_H +# endif #ifdef __cplusplus extern "C" { @@ -39,6 +45,7 @@ void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc); void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p); int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data); int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_find_all(OPENSSL_STACK *st, const void *data, int *pnum); int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data); int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data); void *OPENSSL_sk_shift(OPENSSL_STACK *st); @@ -50,7 +57,7 @@ OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *st); void OPENSSL_sk_sort(OPENSSL_STACK *st); int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define _STACK OPENSSL_STACK # define sk_num OPENSSL_sk_num # define sk_value OPENSSL_sk_value diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/store.h b/deps/openssl/android/x86_64/usr/local/include/openssl/store.h index a40a7339..3c1445e0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/store.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/store.h @@ -1,17 +1,23 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OSSL_STORE_H -# define HEADER_OSSL_STORE_H +#ifndef OPENSSL_STORE_H +# define OPENSSL_STORE_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_OSSL_STORE_H +# endif # include -# include +# include # include # include @@ -46,10 +52,16 @@ typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, * Returns a context reference which represents the channel to communicate * through. */ -OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, - void *ui_data, - OSSL_STORE_post_process_info_fn post_process, - void *post_process_data); +OSSL_STORE_CTX * +OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, void *ui_data, + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); +OSSL_STORE_CTX * +OSSL_STORE_open_ex(const char *uri, OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data, + const OSSL_PARAM params[], + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); /* * Control / fine tune the OSSL_STORE channel. |cmd| determines what is to be @@ -57,8 +69,14 @@ OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, * determine which loader is used), except for common commands (see below). * Each command takes different arguments. */ -int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); -int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, + ... /* args */); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, + va_list args); +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 /* * Common ctrl commands that different loaders may choose to support. @@ -68,6 +86,8 @@ int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); /* Where custom commands start */ # define OSSL_STORE_C_CUSTOM_START 100 +# endif + /* * Read one data item (a key, a cert, a CRL) that is supported by the OSSL_STORE * functionality, given a context. @@ -96,6 +116,25 @@ int OSSL_STORE_error(OSSL_STORE_CTX *ctx); */ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); +/* + * Attach to a BIO. This works like OSSL_STORE_open() except it takes a + * BIO instead of a uri, along with a scheme to use when reading. + * The given UI method will be used any time the loader needs extra input, + * for example when a password or pin is needed, and will be passed the + * same user data every time it's needed in this context. + * + * Returns a context reference which represents the channel to communicate + * through. + * + * Note that this function is considered unsafe, all depending on what the + * BIO actually reads. + */ +OSSL_STORE_CTX *OSSL_STORE_attach(BIO *bio, const char *scheme, + OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data, + const OSSL_PARAM params[], + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); /*- * Extracting OpenSSL types from and creating new OSSL_STORE_INFOs @@ -109,9 +148,10 @@ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); */ # define OSSL_STORE_INFO_NAME 1 /* char * */ # define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ -# define OSSL_STORE_INFO_PKEY 3 /* EVP_PKEY * */ -# define OSSL_STORE_INFO_CERT 4 /* X509 * */ -# define OSSL_STORE_INFO_CRL 5 /* X509_CRL * */ +# define OSSL_STORE_INFO_PUBKEY 3 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_PKEY 4 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_CERT 5 /* X509 * */ +# define OSSL_STORE_INFO_CRL 6 /* X509_CRL * */ /* * Functions to generate OSSL_STORE_INFOs, one function for each type we @@ -120,9 +160,11 @@ int OSSL_STORE_close(OSSL_STORE_CTX *ctx); * In all cases, ownership of the object is transferred to the OSSL_STORE_INFO * and will therefore be freed when the OSSL_STORE_INFO is freed. */ +OSSL_STORE_INFO *OSSL_STORE_INFO_new(int type, void *data); OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PUBKEY(EVP_PKEY *pubkey); OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); @@ -131,12 +173,15 @@ OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); * Functions to try to extract data from a OSSL_STORE_INFO. */ int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info); +void *OSSL_STORE_INFO_get0_data(int type, const OSSL_STORE_INFO *info); const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info); char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info); const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info); char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PUBKEY(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PUBKEY(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info); EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info); X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info); @@ -185,7 +230,7 @@ void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search); /* Search term accessors */ int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion); -X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion); +X509_NAME *OSSL_STORE_SEARCH_get0_name(const OSSL_STORE_SEARCH *criterion); const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH *criterion); const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH @@ -198,9 +243,35 @@ const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); * to the loading channel. This MUST happen before the first OSSL_STORE_load(). */ int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type); -int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); +int OSSL_STORE_find(OSSL_STORE_CTX *ctx, const OSSL_STORE_SEARCH *search); +/*- + * Function to fetch a loader and extract data from it + * --------------------------------------------------- + */ + +typedef struct ossl_store_loader_st OSSL_STORE_LOADER; + +OSSL_STORE_LOADER *OSSL_STORE_LOADER_fetch(OSSL_LIB_CTX *libctx, + const char *scheme, + const char *properties); +int OSSL_STORE_LOADER_up_ref(OSSL_STORE_LOADER *loader); +void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); +const OSSL_PROVIDER *OSSL_STORE_LOADER_get0_provider(const OSSL_STORE_LOADER * + loader); +const char *OSSL_STORE_LOADER_get0_properties(const OSSL_STORE_LOADER *loader); +const char *OSSL_STORE_LOADER_get0_description(const OSSL_STORE_LOADER *loader); +int OSSL_STORE_LOADER_is_a(const OSSL_STORE_LOADER *loader, + const char *scheme); +void OSSL_STORE_LOADER_do_all_provided(OSSL_LIB_CTX *libctx, + void (*fn)(OSSL_STORE_LOADER *loader, + void *arg), + void *arg); +int OSSL_STORE_LOADER_names_do_all(const OSSL_STORE_LOADER *loader, + void (*fn)(const char *name, void *data), + void *data); + /*- * Function to register a loader for the given URI scheme. * ------------------------------------------------------- @@ -209,56 +280,88 @@ int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); * scheme. */ -typedef struct ossl_store_loader_st OSSL_STORE_LOADER; -OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); -const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); -const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +# ifndef OPENSSL_NO_DEPRECATED_3_0 + /* struct ossl_store_loader_ctx_st is defined differently by each loader */ typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; -typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const OSSL_STORE_LOADER - *loader, - const char *uri, - const UI_METHOD *ui_method, - void *ui_data); +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn) + (const OSSL_STORE_LOADER *loader, const char *uri, + const UI_METHOD *ui_method, void *ui_data); +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_ex_fn) + (const OSSL_STORE_LOADER *loader, + const char *uri, OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data); + +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_attach_fn) + (const OSSL_STORE_LOADER *loader, BIO *bio, + OSSL_LIB_CTX *libctx, const char *propq, + const UI_METHOD *ui_method, void *ui_data); +typedef int (*OSSL_STORE_ctrl_fn) + (OSSL_STORE_LOADER_CTX *ctx, int cmd, va_list args); +typedef int (*OSSL_STORE_expect_fn) + (OSSL_STORE_LOADER_CTX *ctx, int expected); +typedef int (*OSSL_STORE_find_fn) + (OSSL_STORE_LOADER_CTX *ctx, const OSSL_STORE_SEARCH *criteria); +typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn) + (OSSL_STORE_LOADER_CTX *ctx, const UI_METHOD *ui_method, void *ui_data); +typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); + +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, OSSL_STORE_open_fn open_function); -typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd, - va_list args); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_open_ex(OSSL_STORE_LOADER *loader, + OSSL_STORE_open_ex_fn open_ex_function); +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_LOADER_set_attach(OSSL_STORE_LOADER *loader, + OSSL_STORE_attach_fn attach_function); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, OSSL_STORE_ctrl_fn ctrl_function); -typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, OSSL_STORE_expect_fn expect_function); -typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx, - OSSL_STORE_SEARCH *criteria); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, OSSL_STORE_find_fn find_function); -typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx, - const UI_METHOD *ui_method, - void *ui_data); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, OSSL_STORE_load_fn load_function); -typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, OSSL_STORE_eof_fn eof_function); -typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, OSSL_STORE_error_fn error_function); -typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, OSSL_STORE_close_fn close_function); -void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); - +OSSL_DEPRECATEDIN_3_0 +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 +const char * OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); +OSSL_DEPRECATEDIN_3_0 OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); +# endif /*- * Functions to list STORE loaders * ------------------------------- */ -int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER - *loader, void *do_arg), +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int OSSL_STORE_do_all_loaders(void (*do_function)(const OSSL_STORE_LOADER *loader, + void *do_arg), void *do_arg); +# endif # ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/storeerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/storeerr.h index 190eab07..00529c88 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/storeerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/storeerr.h @@ -1,66 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_OSSL_STOREERR_H -# define HEADER_OSSL_STOREERR_H +#ifndef OPENSSL_STOREERR_H +# define OPENSSL_STOREERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_OSSL_STORE_strings(void); -/* - * OSSL_STORE function codes. - */ -# define OSSL_STORE_F_FILE_CTRL 129 -# define OSSL_STORE_F_FILE_FIND 138 -# define OSSL_STORE_F_FILE_GET_PASS 118 -# define OSSL_STORE_F_FILE_LOAD 119 -# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 124 -# define OSSL_STORE_F_FILE_NAME_TO_URI 126 -# define OSSL_STORE_F_FILE_OPEN 120 -# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 127 -# define OSSL_STORE_F_OSSL_STORE_EXPECT 130 -# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 128 -# define OSSL_STORE_F_OSSL_STORE_FIND 131 -# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 100 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 101 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 102 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 103 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 135 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 104 -# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 105 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 106 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 107 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 123 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 109 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 110 -# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 111 -# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 134 -# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 112 -# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 113 -# define OSSL_STORE_F_OSSL_STORE_OPEN 114 -# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 115 -# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 117 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 132 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 133 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 136 -# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 137 -# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 116 -# define OSSL_STORE_F_TRY_DECODE_PARAMS 121 -# define OSSL_STORE_F_TRY_DECODE_PKCS12 122 -# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 125 /* * OSSL_STORE reason codes. @@ -75,9 +31,11 @@ int ERR_load_OSSL_STORE_strings(void); # define OSSL_STORE_R_LOADING_STARTED 117 # define OSSL_STORE_R_NOT_A_CERTIFICATE 100 # define OSSL_STORE_R_NOT_A_CRL 101 -# define OSSL_STORE_R_NOT_A_KEY 102 # define OSSL_STORE_R_NOT_A_NAME 103 +# define OSSL_STORE_R_NOT_A_PRIVATE_KEY 102 +# define OSSL_STORE_R_NOT_A_PUBLIC_KEY 122 # define OSSL_STORE_R_NOT_PARAMETERS 104 +# define OSSL_STORE_R_NO_LOADERS_FOUND 123 # define OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR 114 # define OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE 108 # define OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 119 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/symhacks.h b/deps/openssl/android/x86_64/usr/local/include/openssl/symhacks.h index 156ea6e4..816f8f99 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/symhacks.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/symhacks.h @@ -1,14 +1,20 @@ /* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_SYMHACKS_H -# define HEADER_SYMHACKS_H +#ifndef OPENSSL_SYMHACKS_H +# define OPENSSL_SYMHACKS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_SYMHACKS_H +# endif # include @@ -28,10 +34,6 @@ # undef i2d_ECPKPARAMETERS # define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS -/* This one clashes with CMS_data_create */ -# undef cms_Data_create -# define cms_Data_create priv_cms_Data_create - # endif #endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/tls1.h b/deps/openssl/android/x86_64/usr/local/include/openssl/tls1.h index 76d9fda4..793155e1 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/tls1.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/tls1.h @@ -1,19 +1,26 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TLS1_H -# define HEADER_TLS1_H +#ifndef OPENSSL_TLS1_H +# define OPENSSL_TLS1_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TLS1_H +# endif # include # include +# include #ifdef __cplusplus extern "C" { @@ -24,11 +31,10 @@ extern "C" { # define OPENSSL_TLS_SECURITY_LEVEL 1 # endif -# define TLS1_VERSION 0x0301 -# define TLS1_1_VERSION 0x0302 -# define TLS1_2_VERSION 0x0303 -# define TLS1_3_VERSION 0x0304 -# define TLS_MAX_VERSION TLS1_3_VERSION +/* TLS*_VERSION constants are defined in prov_ssl.h */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TLS_MAX_VERSION TLS1_3_VERSION +# endif /* Special value for method supporting multiple versions */ # define TLS_ANY_VERSION 0x10000 @@ -107,9 +113,6 @@ extern "C" { /* ExtensionType value from RFC5764 */ # define TLSEXT_TYPE_use_srtp 14 -/* ExtensionType value from RFC5620 */ -# define TLSEXT_TYPE_heartbeat 15 - /* ExtensionType value from RFC7301 */ # define TLSEXT_TYPE_application_layer_protocol_negotiation 16 @@ -322,38 +325,14 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define SSL_CTX_get_tlsext_status_type(ssl) \ SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) -# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,\ (void (*)(void))cb) - -# ifndef OPENSSL_NO_HEARTBEATS -# define SSL_DTLSEXT_HB_ENABLED 0x01 -# define SSL_DTLSEXT_HB_DONT_SEND_REQUESTS 0x02 -# define SSL_DTLSEXT_HB_DONT_RECV_REQUESTS 0x04 -# define SSL_get_dtlsext_heartbeat_pending(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) -# define SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) - -# if OPENSSL_API_COMPAT < 0x10100000L -# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT \ - SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT -# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING \ - SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING -# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS \ - SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS -# define SSL_TLSEXT_HB_ENABLED \ - SSL_DTLSEXT_HB_ENABLED -# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS \ - SSL_DTLSEXT_HB_DONT_SEND_REQUESTS -# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS \ - SSL_DTLSEXT_HB_DONT_RECV_REQUESTS -# define SSL_get_tlsext_heartbeat_pending(ssl) \ - SSL_get_dtlsext_heartbeat_pending(ssl) -# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ - SSL_set_dtlsext_heartbeat_no_requests(ssl,arg) -# endif # endif +int SSL_CTX_set_tlsext_ticket_key_evp_cb + (SSL_CTX *ctx, int (*fp)(SSL *, unsigned char *, unsigned char *, + EVP_CIPHER_CTX *, EVP_MAC_CTX *, int)); /* PSK ciphersuites from 4279 */ # define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A @@ -1135,14 +1114,21 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define TLS_CT_RSA_FIXED_ECDH 65 # define TLS_CT_ECDSA_FIXED_ECDH 66 # define TLS_CT_GOST01_SIGN 22 -# define TLS_CT_GOST12_SIGN 238 -# define TLS_CT_GOST12_512_SIGN 239 +# define TLS_CT_GOST12_IANA_SIGN 67 +# define TLS_CT_GOST12_IANA_512_SIGN 68 +# define TLS_CT_GOST12_LEGACY_SIGN 238 +# define TLS_CT_GOST12_LEGACY_512_SIGN 239 + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TLS_CT_GOST12_SIGN TLS_CT_GOST12_LEGACY_SIGN +# define TLS_CT_GOST12_512_SIGN TLS_CT_GOST12_LEGACY_512_SIGN +# endif /* * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see * comment there) */ -# define TLS_CT_NUMBER 10 +# define TLS_CT_NUMBER 12 # if defined(SSL3_CT_NUMBER) # if TLS_CT_NUMBER != SSL3_CT_NUMBER @@ -1152,78 +1138,35 @@ __owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain) # define TLS1_FINISH_MAC_LENGTH 12 -# define TLS_MD_MAX_CONST_SIZE 22 -# define TLS_MD_CLIENT_FINISH_CONST "client finished" -# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 -# define TLS_MD_SERVER_FINISH_CONST "server finished" -# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 -# define TLS_MD_KEY_EXPANSION_CONST "key expansion" -# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 -# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" -# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" -# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 -# define TLS_MD_IV_BLOCK_CONST "IV block" -# define TLS_MD_IV_BLOCK_CONST_SIZE 8 -# define TLS_MD_MASTER_SECRET_CONST "master secret" -# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "extended master secret" -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 +# define TLS_MD_MAX_CONST_SIZE 22 -# ifdef CHARSET_EBCDIC -# undef TLS_MD_CLIENT_FINISH_CONST -/* - * client finished - */ -# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_FINISH_CONST -/* - * server finished - */ -# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_KEY_EXPANSION_CONST -/* - * key expansion - */ -# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" - -# undef TLS_MD_CLIENT_WRITE_KEY_CONST -/* - * client write key - */ -# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_SERVER_WRITE_KEY_CONST -/* - * server write key - */ -# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" - -# undef TLS_MD_IV_BLOCK_CONST -/* - * IV block - */ -# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" - -# undef TLS_MD_MASTER_SECRET_CONST -/* - * master secret - */ -# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# undef TLS_MD_EXTENDED_MASTER_SECRET_CONST -/* - * extended master secret - */ -# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" -# endif +/* ASCII: "client finished", in hex for EBCDIC compatibility */ +# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" +# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 +/* ASCII: "server finished", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" +# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 +/* ASCII: "server write key", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "key expansion", in hex for EBCDIC compatibility */ +# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" +# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 +/* ASCII: "client write key", in hex for EBCDIC compatibility */ +# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "server write key", in hex for EBCDIC compatibility */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +/* ASCII: "IV block", in hex for EBCDIC compatibility */ +# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" +# define TLS_MD_IV_BLOCK_CONST_SIZE 8 +/* ASCII: "master secret", in hex for EBCDIC compatibility */ +# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 +/* ASCII: "extended master secret", in hex for EBCDIC compatibility */ +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 /* TLS Session Ticket extension struct */ struct tls_session_ticket_ext_st { diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/trace.h b/deps/openssl/android/x86_64/usr/local/include/openssl/trace.h new file mode 100644 index 00000000..97e13857 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/trace.h @@ -0,0 +1,312 @@ +/* + * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OPENSSL_TRACE_H +# define OPENSSL_TRACE_H +# pragma once + +# include + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * TRACE CATEGORIES + */ + +/* + * The trace messages of the OpenSSL libraries are organized into different + * categories. For every trace category, the application can register a separate + * tracer callback. When a callback is registered, a so called trace channel is + * created for this category. This channel consists essentially of an internal + * BIO which sends all trace output it receives to the registered application + * callback. + * + * The ALL category can be used as a fallback category to register a single + * channel which receives the output from all categories. However, if the + * application intends to print the trace channel name in the line prefix, + * it is better to register channels for all categories separately. + * (This is how the openssl application does it.) + */ +# define OSSL_TRACE_CATEGORY_ALL 0 /* The fallback */ +# define OSSL_TRACE_CATEGORY_TRACE 1 +# define OSSL_TRACE_CATEGORY_INIT 2 +# define OSSL_TRACE_CATEGORY_TLS 3 +# define OSSL_TRACE_CATEGORY_TLS_CIPHER 4 +# define OSSL_TRACE_CATEGORY_CONF 5 +# define OSSL_TRACE_CATEGORY_ENGINE_TABLE 6 +# define OSSL_TRACE_CATEGORY_ENGINE_REF_COUNT 7 +# define OSSL_TRACE_CATEGORY_PKCS5V2 8 +# define OSSL_TRACE_CATEGORY_PKCS12_KEYGEN 9 +# define OSSL_TRACE_CATEGORY_PKCS12_DECRYPT 10 +# define OSSL_TRACE_CATEGORY_X509V3_POLICY 11 +# define OSSL_TRACE_CATEGORY_BN_CTX 12 +# define OSSL_TRACE_CATEGORY_CMP 13 +# define OSSL_TRACE_CATEGORY_STORE 14 +# define OSSL_TRACE_CATEGORY_DECODER 15 +# define OSSL_TRACE_CATEGORY_ENCODER 16 +# define OSSL_TRACE_CATEGORY_REF_COUNT 17 +# define OSSL_TRACE_CATEGORY_HTTP 18 +/* Count of available categories. */ +# define OSSL_TRACE_CATEGORY_NUM 19 +/* KEEP THIS LIST IN SYNC with trace_categories[] in crypto/trace.c */ + +/* Returns the trace category number for the given |name| */ +int OSSL_trace_get_category_num(const char *name); + +/* Returns the trace category name for the given |num| */ +const char *OSSL_trace_get_category_name(int num); + +/* + * TRACE CONSUMERS + */ + +/* + * Enables tracing for the given |category| by providing a BIO sink + * as |channel|. If a null pointer is passed as |channel|, an existing + * trace channel is removed and tracing for the category is disabled. + * + * Returns 1 on success and 0 on failure + */ +int OSSL_trace_set_channel(int category, BIO* channel); + +/* + * Attach a prefix and a suffix to the given |category|, to be printed at the + * beginning and at the end of each trace output group, i.e. when + * OSSL_trace_begin() and OSSL_trace_end() are called. + * If a null pointer is passed as argument, the existing prefix or suffix is + * removed. + * + * They return 1 on success and 0 on failure + */ +int OSSL_trace_set_prefix(int category, const char *prefix); +int OSSL_trace_set_suffix(int category, const char *suffix); + +/* + * OSSL_trace_cb is the type tracing callback provided by the application. + * It MUST return the number of bytes written, or 0 on error (in other words, + * it can never write zero bytes). + * + * The |buffer| will always contain text, which may consist of several lines. + * The |data| argument points to whatever data was provided by the application + * when registering the tracer function. + * + * The |category| number is given, as well as a |cmd| number, described below. + */ +typedef size_t (*OSSL_trace_cb)(const char *buffer, size_t count, + int category, int cmd, void *data); +/* + * Possible |cmd| numbers. + */ +# define OSSL_TRACE_CTRL_BEGIN 0 +# define OSSL_TRACE_CTRL_WRITE 1 +# define OSSL_TRACE_CTRL_END 2 + +/* + * Enables tracing for the given |category| by creating an internal + * trace channel which sends the output to the given |callback|. + * If a null pointer is passed as callback, an existing trace channel + * is removed and tracing for the category is disabled. + * + * NOTE: OSSL_trace_set_channel() and OSSL_trace_set_callback() are mutually + * exclusive. + * + * Returns 1 on success and 0 on failure + */ +int OSSL_trace_set_callback(int category, OSSL_trace_cb callback, void *data); + +/* + * TRACE PRODUCERS + */ + +/* + * Returns 1 if tracing for the specified category is enabled, otherwise 0 + */ +int OSSL_trace_enabled(int category); + +/* + * Wrap a group of tracing output calls. OSSL_trace_begin() locks tracing and + * returns the trace channel associated with the given category, or NULL if no + * channel is associated with the category. OSSL_trace_end() unlocks tracing. + * + * Usage: + * + * BIO *out; + * if ((out = OSSL_trace_begin(category)) != NULL) { + * ... + * BIO_fprintf(out, ...); + * ... + * OSSL_trace_end(category, out); + * } + * + * See also the convenience macros OSSL_TRACE_BEGIN and OSSL_TRACE_END below. + */ +BIO *OSSL_trace_begin(int category); +void OSSL_trace_end(int category, BIO *channel); + +/* + * OSSL_TRACE* Convenience Macros + */ + +/* + * When the tracing feature is disabled, these macros are defined to + * produce dead code, which a good compiler should eliminate. + */ + +/* + * OSSL_TRACE_BEGIN, OSSL_TRACE_END - Define a Trace Group + * + * These two macros can be used to create a block which is executed only + * if the corresponding trace category is enabled. Inside this block, a + * local variable named |trc_out| is defined, which points to the channel + * associated with the given trace category. + * + * Usage: (using 'TLS' as an example category) + * + * OSSL_TRACE_BEGIN(TLS) { + * + * BIO_fprintf(trc_out, ... ); + * + * } OSSL_TRACE_END(TLS); + * + * + * This expands to the following code + * + * do { + * BIO *trc_out = OSSL_trace_begin(OSSL_TRACE_CATEGORY_TLS); + * if (trc_out != NULL) { + * ... + * BIO_fprintf(trc_out, ...); + * } + * OSSL_trace_end(OSSL_TRACE_CATEGORY_TLS, trc_out); + * } while (0); + * + * The use of the inner '{...}' group and the trailing ';' is enforced + * by the definition of the macros in order to make the code look as much + * like C code as possible. + * + * Before returning from inside the trace block, it is necessary to + * call OSSL_TRACE_CANCEL(category). + */ + +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACE_BEGIN(category) \ + do { \ + BIO *trc_out = OSSL_trace_begin(OSSL_TRACE_CATEGORY_##category); \ + \ + if (trc_out != NULL) + +# define OSSL_TRACE_END(category) \ + OSSL_trace_end(OSSL_TRACE_CATEGORY_##category, trc_out); \ + } while (0) + +# define OSSL_TRACE_CANCEL(category) \ + OSSL_trace_end(OSSL_TRACE_CATEGORY_##category, trc_out) \ + +# else + +# define OSSL_TRACE_BEGIN(category) \ + do { \ + BIO *trc_out = NULL; \ + if (0) + +# define OSSL_TRACE_END(category) \ + } while(0) + +# define OSSL_TRACE_CANCEL(category) \ + ((void)0) + +# endif + +/* + * OSSL_TRACE_ENABLED() - Check whether tracing is enabled for |category| + * + * Usage: + * + * if (OSSL_TRACE_ENABLED(TLS)) { + * ... + * } + */ +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACE_ENABLED(category) \ + OSSL_trace_enabled(OSSL_TRACE_CATEGORY_##category) + +# else + +# define OSSL_TRACE_ENABLED(category) (0) + +# endif + +/* + * OSSL_TRACE*() - OneShot Trace Macros + * + * These macros are intended to produce a simple printf-style trace output. + * Unfortunately, C90 macros don't support variable arguments, so the + * "vararg" OSSL_TRACEV() macro has a rather weird usage pattern: + * + * OSSL_TRACEV(category, (trc_out, "format string", ...args...)); + * + * Where 'channel' is the literal symbol of this name, not a variable. + * For that reason, it is currently not intended to be used directly, + * but only as helper macro for the other oneshot trace macros + * OSSL_TRACE(), OSSL_TRACE1(), OSSL_TRACE2(), ... + * + * Usage: + * + * OSSL_TRACE(INIT, "Hello world!\n"); + * OSSL_TRACE1(TLS, "The answer is %d\n", 42); + * OSSL_TRACE2(TLS, "The ultimate question to answer %d is '%s'\n", + * 42, "What do you get when you multiply six by nine?"); + */ + +# if !defined OPENSSL_NO_TRACE && !defined FIPS_MODULE + +# define OSSL_TRACEV(category, args) \ + OSSL_TRACE_BEGIN(category) \ + BIO_printf args; \ + OSSL_TRACE_END(category) + +# else + +# define OSSL_TRACEV(category, args) ((void)0) + +# endif + +# define OSSL_TRACE(category, text) \ + OSSL_TRACEV(category, (trc_out, "%s", text)) + +# define OSSL_TRACE1(category, format, arg1) \ + OSSL_TRACEV(category, (trc_out, format, arg1)) +# define OSSL_TRACE2(category, format, arg1, arg2) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2)) +# define OSSL_TRACE3(category, format, arg1, arg2, arg3) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3)) +# define OSSL_TRACE4(category, format, arg1, arg2, arg3, arg4) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4)) +# define OSSL_TRACE5(category, format, arg1, arg2, arg3, arg4, arg5) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5)) +# define OSSL_TRACE6(category, format, arg1, arg2, arg3, arg4, arg5, arg6) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6)) +# define OSSL_TRACE7(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7)) +# define OSSL_TRACE8(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)) +# define OSSL_TRACE9(category, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) \ + OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)) + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ts.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ts.h index 3b58aa52..8ff67332 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ts.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ts.h @@ -1,14 +1,20 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2022 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TS_H -# define HEADER_TS_H +#ifndef OPENSSL_TS_H +# define OPENSSL_TS_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TS_H +# endif # include @@ -23,13 +29,16 @@ # include # include # include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif # ifdef __cplusplus extern "C" { # endif -# include -# include - typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; typedef struct TS_req_st TS_REQ; typedef struct TS_accuracy_st TS_ACCURACY; @@ -55,126 +64,61 @@ typedef struct TS_tst_info_st TS_TST_INFO; typedef struct TS_status_info_st TS_STATUS_INFO; -typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; -typedef struct ESS_cert_id ESS_CERT_ID; -typedef struct ESS_signing_cert ESS_SIGNING_CERT; - -DEFINE_STACK_OF(ESS_CERT_ID) - -typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; -typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; - -DEFINE_STACK_OF(ESS_CERT_ID_V2) typedef struct TS_resp_st TS_RESP; -TS_REQ *TS_REQ_new(void); -void TS_REQ_free(TS_REQ *a); -int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); -TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); - -TS_REQ *TS_REQ_dup(TS_REQ *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_REQ) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_REQ, TS_REQ) +DECLARE_ASN1_DUP_FUNCTION(TS_REQ) #ifndef OPENSSL_NO_STDIO TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); -int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); +int i2d_TS_REQ_fp(FILE *fp, const TS_REQ *a); #endif TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); -int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); +int i2d_TS_REQ_bio(BIO *fp, const TS_REQ *a); -TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); -void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); -int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); -TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, - const unsigned char **pp, long length); - -TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_MSG_IMPRINT) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_MSG_IMPRINT, TS_MSG_IMPRINT) +DECLARE_ASN1_DUP_FUNCTION(TS_MSG_IMPRINT) #ifndef OPENSSL_NO_STDIO TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT_fp(FILE *fp, const TS_MSG_IMPRINT *a); #endif TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT **a); -int i2d_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT_bio(BIO *bio, const TS_MSG_IMPRINT *a); -TS_RESP *TS_RESP_new(void); -void TS_RESP_free(TS_RESP *a); -int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); -TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); -TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); -TS_RESP *TS_RESP_dup(TS_RESP *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_RESP) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_RESP, TS_RESP) +DECLARE_ASN1_DUP_FUNCTION(TS_RESP) #ifndef OPENSSL_NO_STDIO TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); -int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); +int i2d_TS_RESP_fp(FILE *fp, const TS_RESP *a); #endif TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); -int i2d_TS_RESP_bio(BIO *bio, TS_RESP *a); +int i2d_TS_RESP_bio(BIO *bio, const TS_RESP *a); -TS_STATUS_INFO *TS_STATUS_INFO_new(void); -void TS_STATUS_INFO_free(TS_STATUS_INFO *a); -int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); -TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, - const unsigned char **pp, long length); -TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_STATUS_INFO) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_STATUS_INFO, TS_STATUS_INFO) +DECLARE_ASN1_DUP_FUNCTION(TS_STATUS_INFO) -TS_TST_INFO *TS_TST_INFO_new(void); -void TS_TST_INFO_free(TS_TST_INFO *a); -int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); -TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, - long length); -TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_TST_INFO) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_TST_INFO, TS_TST_INFO) +DECLARE_ASN1_DUP_FUNCTION(TS_TST_INFO) +TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); #ifndef OPENSSL_NO_STDIO TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); -int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); +int i2d_TS_TST_INFO_fp(FILE *fp, const TS_TST_INFO *a); #endif TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO **a); -int i2d_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO *a); +int i2d_TS_TST_INFO_bio(BIO *bio, const TS_TST_INFO *a); -TS_ACCURACY *TS_ACCURACY_new(void); -void TS_ACCURACY_free(TS_ACCURACY *a); -int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); -TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, - long length); -TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); - -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); -void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); -int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); -ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, - const unsigned char **pp, - long length); -ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); - -ESS_CERT_ID *ESS_CERT_ID_new(void); -void ESS_CERT_ID_free(ESS_CERT_ID *a); -int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); -ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, - long length); -ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); - -ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); -void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); -int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); -ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, - const unsigned char **pp, long length); -ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); - -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_new(void); -void ESS_CERT_ID_V2_free(ESS_CERT_ID_V2 *a); -int i2d_ESS_CERT_ID_V2(const ESS_CERT_ID_V2 *a, unsigned char **pp); -ESS_CERT_ID_V2 *d2i_ESS_CERT_ID_V2(ESS_CERT_ID_V2 **a, - const unsigned char **pp, long length); -ESS_CERT_ID_V2 *ESS_CERT_ID_V2_dup(ESS_CERT_ID_V2 *a); - -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_new(void); -void ESS_SIGNING_CERT_V2_free(ESS_SIGNING_CERT_V2 *a); -int i2d_ESS_SIGNING_CERT_V2(const ESS_SIGNING_CERT_V2 *a, unsigned char **pp); -ESS_SIGNING_CERT_V2 *d2i_ESS_SIGNING_CERT_V2(ESS_SIGNING_CERT_V2 **a, - const unsigned char **pp, - long length); -ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_dup(ESS_SIGNING_CERT_V2 *a); +DECLARE_ASN1_ALLOC_FUNCTIONS(TS_ACCURACY) +DECLARE_ASN1_ENCODE_FUNCTIONS_only(TS_ACCURACY, TS_ACCURACY) +DECLARE_ASN1_DUP_FUNCTION(TS_ACCURACY) int TS_REQ_set_version(TS_REQ *a, long version); long TS_REQ_get_version(const TS_REQ *a); @@ -322,10 +266,9 @@ typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, typedef struct TS_resp_ctx TS_RESP_CTX; -DEFINE_STACK_OF_CONST(EVP_MD) - /* Creates a response context that can be used for generating responses. */ TS_RESP_CTX *TS_RESP_CTX_new(void); +TS_RESP_CTX *TS_RESP_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); void TS_RESP_CTX_free(TS_RESP_CTX *ctx); /* This parameter must be set. */ @@ -479,7 +422,10 @@ BIO *TS_VERIFY_CTX_set_data(TS_VERIFY_CTX *ctx, BIO *b); unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, unsigned char *hexstr, long len); X509_STORE *TS_VERIFY_CTX_set_store(TS_VERIFY_CTX *ctx, X509_STORE *s); -STACK_OF(X509) *TS_VERIFY_CTS_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define TS_VERIFY_CTS_set_certs(ctx, cert) TS_VERIFY_CTX_set_certs(ctx,cert) +# endif +STACK_OF(X509) *TS_VERIFY_CTX_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); /*- * If ctx is NULL, it allocates and returns a new object, otherwise @@ -543,7 +489,7 @@ int TS_CONF_set_def_policy(CONF *conf, const char *section, int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); -int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, +int TS_CONF_set_clock_precision_digits(const CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/tserr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/tserr.h index 07f23339..e1b943e4 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/tserr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/tserr.h @@ -1,89 +1,24 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TSERR_H -# define HEADER_TSERR_H - -# ifndef HEADER_SYMHACKS_H -# include -# endif +#ifndef OPENSSL_TSERR_H +# define OPENSSL_TSERR_H +# pragma once # include +# include +# include + # ifndef OPENSSL_NO_TS -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_TS_strings(void); - -/* - * TS function codes. - */ -# define TS_F_DEF_SERIAL_CB 110 -# define TS_F_DEF_TIME_CB 111 -# define TS_F_ESS_ADD_SIGNING_CERT 112 -# define TS_F_ESS_ADD_SIGNING_CERT_V2 147 -# define TS_F_ESS_CERT_ID_NEW_INIT 113 -# define TS_F_ESS_CERT_ID_V2_NEW_INIT 156 -# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 -# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 157 -# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 -# define TS_F_PKCS7_TO_TS_TST_INFO 148 -# define TS_F_TS_ACCURACY_SET_MICROS 115 -# define TS_F_TS_ACCURACY_SET_MILLIS 116 -# define TS_F_TS_ACCURACY_SET_SECONDS 117 -# define TS_F_TS_CHECK_IMPRINTS 100 -# define TS_F_TS_CHECK_NONCES 101 -# define TS_F_TS_CHECK_POLICY 102 -# define TS_F_TS_CHECK_SIGNING_CERTS 103 -# define TS_F_TS_CHECK_STATUS_INFO 104 -# define TS_F_TS_COMPUTE_IMPRINT 145 -# define TS_F_TS_CONF_INVALID 151 -# define TS_F_TS_CONF_LOAD_CERT 153 -# define TS_F_TS_CONF_LOAD_CERTS 154 -# define TS_F_TS_CONF_LOAD_KEY 155 -# define TS_F_TS_CONF_LOOKUP_FAIL 152 -# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 -# define TS_F_TS_GET_STATUS_TEXT 105 -# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 -# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 -# define TS_F_TS_REQ_SET_NONCE 120 -# define TS_F_TS_REQ_SET_POLICY_ID 121 -# define TS_F_TS_RESP_CREATE_RESPONSE 122 -# define TS_F_TS_RESP_CREATE_TST_INFO 123 -# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 -# define TS_F_TS_RESP_CTX_ADD_MD 125 -# define TS_F_TS_RESP_CTX_ADD_POLICY 126 -# define TS_F_TS_RESP_CTX_NEW 127 -# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 -# define TS_F_TS_RESP_CTX_SET_CERTS 129 -# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 -# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 -# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 -# define TS_F_TS_RESP_GET_POLICY 133 -# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 -# define TS_F_TS_RESP_SET_STATUS_INFO 135 -# define TS_F_TS_RESP_SET_TST_INFO 150 -# define TS_F_TS_RESP_SIGN 136 -# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 -# define TS_F_TS_TST_INFO_SET_ACCURACY 137 -# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 -# define TS_F_TS_TST_INFO_SET_NONCE 139 -# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 -# define TS_F_TS_TST_INFO_SET_SERIAL 141 -# define TS_F_TS_TST_INFO_SET_TIME 142 -# define TS_F_TS_TST_INFO_SET_TSA 143 -# define TS_F_TS_VERIFY 108 -# define TS_F_TS_VERIFY_CERT 109 -# define TS_F_TS_VERIFY_CTX_NEW 144 /* * TS reason codes. diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/txt_db.h b/deps/openssl/android/x86_64/usr/local/include/openssl/txt_db.h index ec981a43..af169a30 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/txt_db.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/txt_db.h @@ -1,14 +1,20 @@ /* * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_TXT_DB_H -# define HEADER_TXT_DB_H +#ifndef OPENSSL_TXT_DB_H +# define OPENSSL_TXT_DB_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_TXT_DB_H +# endif # include # include diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/types.h b/deps/openssl/android/x86_64/usr/local/include/openssl/types.h new file mode 100644 index 00000000..5f9d8c23 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/types.h @@ -0,0 +1,239 @@ +/* + * Copyright 2001-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Unfortunate workaround to avoid symbol conflict with wincrypt.h + * See https://github.com/openssl/openssl/issues/9981 + */ +#ifdef _WIN32 +# define WINCRYPT_USE_SYMBOL_PREFIX +# undef X509_NAME +# undef X509_EXTENSIONS +# undef PKCS7_SIGNER_INFO +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +#endif + +#ifndef OPENSSL_TYPES_H +# define OPENSSL_TYPES_H + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# include +# include +# include + +typedef struct ossl_provider_st OSSL_PROVIDER; /* Provider Object */ + +# ifdef NO_ASN1_TYPEDEFS +# define ASN1_INTEGER ASN1_STRING +# define ASN1_ENUMERATED ASN1_STRING +# define ASN1_BIT_STRING ASN1_STRING +# define ASN1_OCTET_STRING ASN1_STRING +# define ASN1_PRINTABLESTRING ASN1_STRING +# define ASN1_T61STRING ASN1_STRING +# define ASN1_IA5STRING ASN1_STRING +# define ASN1_UTCTIME ASN1_STRING +# define ASN1_GENERALIZEDTIME ASN1_STRING +# define ASN1_TIME ASN1_STRING +# define ASN1_GENERALSTRING ASN1_STRING +# define ASN1_UNIVERSALSTRING ASN1_STRING +# define ASN1_BMPSTRING ASN1_STRING +# define ASN1_VISIBLESTRING ASN1_STRING +# define ASN1_UTF8STRING ASN1_STRING +# define ASN1_BOOLEAN int +# define ASN1_NULL int +# else +typedef struct asn1_string_st ASN1_INTEGER; +typedef struct asn1_string_st ASN1_ENUMERATED; +typedef struct asn1_string_st ASN1_BIT_STRING; +typedef struct asn1_string_st ASN1_OCTET_STRING; +typedef struct asn1_string_st ASN1_PRINTABLESTRING; +typedef struct asn1_string_st ASN1_T61STRING; +typedef struct asn1_string_st ASN1_IA5STRING; +typedef struct asn1_string_st ASN1_GENERALSTRING; +typedef struct asn1_string_st ASN1_UNIVERSALSTRING; +typedef struct asn1_string_st ASN1_BMPSTRING; +typedef struct asn1_string_st ASN1_UTCTIME; +typedef struct asn1_string_st ASN1_TIME; +typedef struct asn1_string_st ASN1_GENERALIZEDTIME; +typedef struct asn1_string_st ASN1_VISIBLESTRING; +typedef struct asn1_string_st ASN1_UTF8STRING; +typedef struct asn1_string_st ASN1_STRING; +typedef int ASN1_BOOLEAN; +typedef int ASN1_NULL; +# endif + +typedef struct asn1_type_st ASN1_TYPE; +typedef struct asn1_object_st ASN1_OBJECT; +typedef struct asn1_string_table_st ASN1_STRING_TABLE; + +typedef struct ASN1_ITEM_st ASN1_ITEM; +typedef struct asn1_pctx_st ASN1_PCTX; +typedef struct asn1_sctx_st ASN1_SCTX; + +# ifdef BIGNUM +# undef BIGNUM +# endif + +typedef struct bio_st BIO; +typedef struct bignum_st BIGNUM; +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; + +typedef struct buf_mem_st BUF_MEM; + +STACK_OF(BIGNUM); +STACK_OF(BIGNUM_const); + +typedef struct err_state_st ERR_STATE; + +typedef struct evp_cipher_st EVP_CIPHER; +typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; +typedef struct evp_md_st EVP_MD; +typedef struct evp_md_ctx_st EVP_MD_CTX; +typedef struct evp_mac_st EVP_MAC; +typedef struct evp_mac_ctx_st EVP_MAC_CTX; +typedef struct evp_pkey_st EVP_PKEY; + +typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; + +typedef struct evp_pkey_method_st EVP_PKEY_METHOD; +typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; + +typedef struct evp_keymgmt_st EVP_KEYMGMT; + +typedef struct evp_kdf_st EVP_KDF; +typedef struct evp_kdf_ctx_st EVP_KDF_CTX; + +typedef struct evp_rand_st EVP_RAND; +typedef struct evp_rand_ctx_st EVP_RAND_CTX; + +typedef struct evp_keyexch_st EVP_KEYEXCH; + +typedef struct evp_signature_st EVP_SIGNATURE; + +typedef struct evp_asym_cipher_st EVP_ASYM_CIPHER; + +typedef struct evp_kem_st EVP_KEM; + +typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; + +typedef struct hmac_ctx_st HMAC_CTX; + +typedef struct dh_st DH; +typedef struct dh_method DH_METHOD; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct dsa_st DSA; +typedef struct dsa_method DSA_METHOD; +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; +# endif +typedef struct rsa_pss_params_st RSA_PSS_PARAMS; + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +typedef struct ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; +# endif + +typedef struct rand_meth_st RAND_METHOD; +typedef struct rand_drbg_st RAND_DRBG; + +typedef struct ssl_dane_st SSL_DANE; +typedef struct x509_st X509; +typedef struct X509_algor_st X509_ALGOR; +typedef struct X509_crl_st X509_CRL; +typedef struct x509_crl_method_st X509_CRL_METHOD; +typedef struct x509_revoked_st X509_REVOKED; +typedef struct X509_name_st X509_NAME; +typedef struct X509_pubkey_st X509_PUBKEY; +typedef struct x509_store_st X509_STORE; +typedef struct x509_store_ctx_st X509_STORE_CTX; + +typedef struct x509_object_st X509_OBJECT; +typedef struct x509_lookup_st X509_LOOKUP; +typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; +typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; + +typedef struct x509_sig_info_st X509_SIG_INFO; + +typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; + +typedef struct v3_ext_ctx X509V3_CTX; +typedef struct conf_st CONF; +typedef struct ossl_init_settings_st OPENSSL_INIT_SETTINGS; + +typedef struct ui_st UI; +typedef struct ui_method_st UI_METHOD; + +typedef struct engine_st ENGINE; +typedef struct ssl_st SSL; +typedef struct ssl_ctx_st SSL_CTX; + +typedef struct comp_ctx_st COMP_CTX; +typedef struct comp_method_st COMP_METHOD; + +typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; +typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; +typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; +typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; + +typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; +typedef struct DIST_POINT_st DIST_POINT; +typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; +typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; + +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; + +typedef struct ossl_http_req_ctx_st OSSL_HTTP_REQ_CTX; +typedef struct ocsp_response_st OCSP_RESPONSE; +typedef struct ocsp_responder_id_st OCSP_RESPID; + +typedef struct sct_st SCT; +typedef struct sct_ctx_st SCT_CTX; +typedef struct ctlog_st CTLOG; +typedef struct ctlog_store_st CTLOG_STORE; +typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; + +typedef struct ossl_store_info_st OSSL_STORE_INFO; +typedef struct ossl_store_search_st OSSL_STORE_SEARCH; + +typedef struct ossl_lib_ctx_st OSSL_LIB_CTX; + +typedef struct ossl_dispatch_st OSSL_DISPATCH; +typedef struct ossl_item_st OSSL_ITEM; +typedef struct ossl_algorithm_st OSSL_ALGORITHM; +typedef struct ossl_param_st OSSL_PARAM; +typedef struct ossl_param_bld_st OSSL_PARAM_BLD; + +typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + +typedef struct ossl_encoder_st OSSL_ENCODER; +typedef struct ossl_encoder_ctx_st OSSL_ENCODER_CTX; +typedef struct ossl_decoder_st OSSL_DECODER; +typedef struct ossl_decoder_ctx_st OSSL_DECODER_CTX; + +typedef struct ossl_self_test_st OSSL_SELF_TEST; + +#ifdef __cplusplus +} +#endif + +#endif /* OPENSSL_TYPES_H */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ui.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ui.h index 7c721ec8..e64ec3b3 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ui.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ui.h @@ -1,27 +1,38 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/ui.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_UI_H -# define HEADER_UI_H + + +#ifndef OPENSSL_UI_H +# define OPENSSL_UI_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_UI_H +# endif # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # endif # include # include -# include +# include # include /* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ -# if OPENSSL_API_COMPAT < 0x10200000L +# ifndef OPENSSL_NO_DEPRECATED_3_0 # ifdef OPENSSL_NO_UI_CONSOLE # define OPENSSL_NO_UI # endif @@ -132,25 +143,26 @@ int UI_dup_error_string(UI *ui, const char *text); # define UI_INPUT_FLAG_USER_BASE 16 /*- - * The following function helps construct a prompt. object_desc is a - * textual short description of the object, for example "pass phrase", - * and object_name is the name of the object (might be a card name or - * a file name. + * The following function helps construct a prompt. + * phrase_desc is a textual short description of the phrase to enter, + * for example "pass phrase", and + * object_name is the name of the object + * (which might be a card name or a file name) or NULL. * The returned string shall always be allocated on the heap with * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). * * If the ui_method doesn't contain a pointer to a user-defined prompt * constructor, a default string is built, looking like this: * - * "Enter {object_desc} for {object_name}:" + * "Enter {phrase_desc} for {object_name}:" * - * So, if object_desc has the value "pass phrase" and object_name has + * So, if phrase_desc has the value "pass phrase" and object_name has * the value "foo.key", the resulting string is: * * "Enter pass phrase for foo.key:" */ char *UI_construct_prompt(UI *ui_method, - const char *object_desc, const char *object_name); + const char *phrase_desc, const char *object_name); /* * The following function is used to store a pointer to user-specific data. @@ -208,7 +220,7 @@ int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); # define UI_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) int UI_set_ex_data(UI *r, int idx, void *arg); -void *UI_get_ex_data(UI *r, int idx); +void *UI_get_ex_data(const UI *r, int idx); /* Use specific methods instead of the built-in one */ void UI_set_default_method(const UI_METHOD *meth); @@ -277,7 +289,34 @@ const UI_METHOD *UI_null(void); * about a string or a prompt, including test data for a verification prompt. */ typedef struct ui_string_st UI_STRING; -DEFINE_STACK_OF(UI_STRING) + +SKM_DEFINE_STACK_OF_INTERNAL(UI_STRING, UI_STRING, UI_STRING) +#define sk_UI_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_value(sk, idx) ((UI_STRING *)OPENSSL_sk_value(ossl_check_const_UI_STRING_sk_type(sk), (idx))) +#define sk_UI_STRING_new(cmp) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new(ossl_check_UI_STRING_compfunc_type(cmp))) +#define sk_UI_STRING_new_null() ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_null()) +#define sk_UI_STRING_new_reserve(cmp, n) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_reserve(ossl_check_UI_STRING_compfunc_type(cmp), (n))) +#define sk_UI_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_UI_STRING_sk_type(sk), (n)) +#define sk_UI_STRING_free(sk) OPENSSL_sk_free(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_delete(sk, i) ((UI_STRING *)OPENSSL_sk_delete(ossl_check_UI_STRING_sk_type(sk), (i))) +#define sk_UI_STRING_delete_ptr(sk, ptr) ((UI_STRING *)OPENSSL_sk_delete_ptr(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr))) +#define sk_UI_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_pop(sk) ((UI_STRING *)OPENSSL_sk_pop(ossl_check_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_shift(sk) ((UI_STRING *)OPENSSL_sk_shift(ossl_check_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_UI_STRING_sk_type(sk),ossl_check_UI_STRING_freefunc_type(freefunc)) +#define sk_UI_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), (idx)) +#define sk_UI_STRING_set(sk, idx, ptr) ((UI_STRING *)OPENSSL_sk_set(ossl_check_UI_STRING_sk_type(sk), (idx), ossl_check_UI_STRING_type(ptr))) +#define sk_UI_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)) +#define sk_UI_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), pnum) +#define sk_UI_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_UI_STRING_sk_type(sk)) +#define sk_UI_STRING_dup(sk) ((STACK_OF(UI_STRING) *)OPENSSL_sk_dup(ossl_check_const_UI_STRING_sk_type(sk))) +#define sk_UI_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(UI_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_UI_STRING_sk_type(sk), ossl_check_UI_STRING_copyfunc_type(copyfunc), ossl_check_UI_STRING_freefunc_type(freefunc))) +#define sk_UI_STRING_set_cmp_func(sk, cmp) ((sk_UI_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_compfunc_type(cmp))) + /* * The different types of strings that are currently supported. This is only @@ -308,7 +347,7 @@ int UI_method_set_data_duplicator(UI_METHOD *method, int UI_method_set_prompt_constructor(UI_METHOD *method, char *(*prompt_constructor) (UI *ui, const char - *object_desc, + *phrase_desc, const char *object_name)); int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ui.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/ui.h.in new file mode 100644 index 00000000..eb9a580f --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ui.h.in @@ -0,0 +1,384 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_UI_H +# define OPENSSL_UI_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_UI_H +# endif + +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# endif +# include +# include +# include +# include + +/* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifdef OPENSSL_NO_UI_CONSOLE +# define OPENSSL_NO_UI +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * All the following functions return -1 or NULL on error and in some cases + * (UI_process()) -2 if interrupted or in some other way cancelled. When + * everything is fine, they return 0, a positive value or a non-NULL pointer, + * all depending on their purpose. + */ + +/* Creators and destructor. */ +UI *UI_new(void); +UI *UI_new_method(const UI_METHOD *method); +void UI_free(UI *ui); + +/*- + The following functions are used to add strings to be printed and prompt + strings to prompt for data. The names are UI_{add,dup}__string + and UI_{add,dup}_input_boolean. + + UI_{add,dup}__string have the following meanings: + add add a text or prompt string. The pointers given to these + functions are used verbatim, no copying is done. + dup make a copy of the text or prompt string, then add the copy + to the collection of strings in the user interface. + + The function is a name for the functionality that the given + string shall be used for. It can be one of: + input use the string as data prompt. + verify use the string as verification prompt. This + is used to verify a previous input. + info use the string for informational output. + error use the string for error output. + Honestly, there's currently no difference between info and error for the + moment. + + UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", + and are typically used when one wants to prompt for a yes/no response. + + All of the functions in this group take a UI and a prompt string. + The string input and verify addition functions also take a flag argument, + a buffer for the result to end up with, a minimum input size and a maximum + input size (the result buffer MUST be large enough to be able to contain + the maximum number of characters). Additionally, the verify addition + functions takes another buffer to compare the result against. + The boolean input functions take an action description string (which should + be safe to ignore if the expected user action is obvious, for example with + a dialog box with an OK button and a Cancel button), a string of acceptable + characters to mean OK and to mean Cancel. The two last strings are checked + to make sure they don't have common characters. Additionally, the same + flag argument as for the string input is taken, as well as a result buffer. + The result buffer is required to be at least one byte long. Depending on + the answer, the first character from the OK or the Cancel character strings + will be stored in the first byte of the result buffer. No NUL will be + added, so the result is *not* a string. + + On success, the all return an index of the added information. That index + is useful when retrieving results with UI_get0_result(). */ +int UI_add_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_dup_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_add_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_dup_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_add_info_string(UI *ui, const char *text); +int UI_dup_info_string(UI *ui, const char *text); +int UI_add_error_string(UI *ui, const char *text); +int UI_dup_error_string(UI *ui, const char *text); + +/* These are the possible flags. They can be or'ed together. */ +/* Use to have echoing of input */ +# define UI_INPUT_FLAG_ECHO 0x01 +/* + * Use a default password. Where that password is found is completely up to + * the application, it might for example be in the user data set with + * UI_add_user_data(). It is not recommended to have more than one input in + * each UI being marked with this flag, or the application might get + * confused. + */ +# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 + +/*- + * The user of these routines may want to define flags of their own. The core + * UI won't look at those, but will pass them on to the method routines. They + * must use higher bits so they don't get confused with the UI bits above. + * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good + * example of use is this: + * + * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) + * +*/ +# define UI_INPUT_FLAG_USER_BASE 16 + +/*- + * The following function helps construct a prompt. + * phrase_desc is a textual short description of the phrase to enter, + * for example "pass phrase", and + * object_name is the name of the object + * (which might be a card name or a file name) or NULL. + * The returned string shall always be allocated on the heap with + * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). + * + * If the ui_method doesn't contain a pointer to a user-defined prompt + * constructor, a default string is built, looking like this: + * + * "Enter {phrase_desc} for {object_name}:" + * + * So, if phrase_desc has the value "pass phrase" and object_name has + * the value "foo.key", the resulting string is: + * + * "Enter pass phrase for foo.key:" +*/ +char *UI_construct_prompt(UI *ui_method, + const char *phrase_desc, const char *object_name); + +/* + * The following function is used to store a pointer to user-specific data. + * Any previous such pointer will be returned and replaced. + * + * For callback purposes, this function makes a lot more sense than using + * ex_data, since the latter requires that different parts of OpenSSL or + * applications share the same ex_data index. + * + * Note that the UI_OpenSSL() method completely ignores the user data. Other + * methods may not, however. + */ +void *UI_add_user_data(UI *ui, void *user_data); +/* + * Alternatively, this function is used to duplicate the user data. + * This uses the duplicator method function. The destroy function will + * be used to free the user data in this case. + */ +int UI_dup_user_data(UI *ui, void *user_data); +/* We need a user data retrieving function as well. */ +void *UI_get0_user_data(UI *ui); + +/* Return the result associated with a prompt given with the index i. */ +const char *UI_get0_result(UI *ui, int i); +int UI_get_result_length(UI *ui, int i); + +/* When all strings have been added, process the whole thing. */ +int UI_process(UI *ui); + +/* + * Give a user interface parameterised control commands. This can be used to + * send down an integer, a data pointer or a function pointer, as well as be + * used to get information from a UI. + */ +int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); + +/* The commands */ +/* + * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the + * OpenSSL error stack before printing any info or added error messages and + * before any prompting. + */ +# define UI_CTRL_PRINT_ERRORS 1 +/* + * Check if a UI_process() is possible to do again with the same instance of + * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 + * if not. + */ +# define UI_CTRL_IS_REDOABLE 2 + +/* Some methods may use extra data */ +# define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) +# define UI_get_app_data(s) UI_get_ex_data(s,0) + +# define UI_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) +int UI_set_ex_data(UI *r, int idx, void *arg); +void *UI_get_ex_data(const UI *r, int idx); + +/* Use specific methods instead of the built-in one */ +void UI_set_default_method(const UI_METHOD *meth); +const UI_METHOD *UI_get_default_method(void); +const UI_METHOD *UI_get_method(UI *ui); +const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); + +# ifndef OPENSSL_NO_UI_CONSOLE + +/* The method with all the built-in thingies */ +UI_METHOD *UI_OpenSSL(void); + +# endif + +/* + * NULL method. Literally does nothing, but may serve as a placeholder + * to avoid internal default. + */ +const UI_METHOD *UI_null(void); + +/* ---------- For method writers ---------- */ +/*- + A method contains a number of functions that implement the low level + of the User Interface. The functions are: + + an opener This function starts a session, maybe by opening + a channel to a tty, or by opening a window. + a writer This function is called to write a given string, + maybe to the tty, maybe as a field label in a + window. + a flusher This function is called to flush everything that + has been output so far. It can be used to actually + display a dialog box after it has been built. + a reader This function is called to read a given prompt, + maybe from the tty, maybe from a field in a + window. Note that it's called with all string + structures, not only the prompt ones, so it must + check such things itself. + a closer This function closes the session, maybe by closing + the channel to the tty, or closing the window. + + All these functions are expected to return: + + 0 on error. + 1 on success. + -1 on out-of-band events, for example if some prompting has + been canceled (by pressing Ctrl-C, for example). This is + only checked when returned by the flusher or the reader. + + The way this is used, the opener is first called, then the writer for all + strings, then the flusher, then the reader for all strings and finally the + closer. Note that if you want to prompt from a terminal or other command + line interface, the best is to have the reader also write the prompts + instead of having the writer do it. If you want to prompt from a dialog + box, the writer can be used to build up the contents of the box, and the + flusher to actually display the box and run the event loop until all data + has been given, after which the reader only grabs the given data and puts + them back into the UI strings. + + All method functions take a UI as argument. Additionally, the writer and + the reader take a UI_STRING. +*/ + +/* + * The UI_STRING type is the data structure that contains all the needed info + * about a string or a prompt, including test data for a verification prompt. + */ +typedef struct ui_string_st UI_STRING; + +{- + generate_stack_macros("UI_STRING"); +-} + +/* + * The different types of strings that are currently supported. This is only + * needed by method authors. + */ +enum UI_string_types { + UIT_NONE = 0, + UIT_PROMPT, /* Prompt for a string */ + UIT_VERIFY, /* Prompt for a string and verify */ + UIT_BOOLEAN, /* Prompt for a yes/no response */ + UIT_INFO, /* Send info to the user */ + UIT_ERROR /* Send an error message to the user */ +}; + +/* Create and manipulate methods */ +UI_METHOD *UI_create_method(const char *name); +void UI_destroy_method(UI_METHOD *ui_method); +int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); +int UI_method_set_writer(UI_METHOD *method, + int (*writer) (UI *ui, UI_STRING *uis)); +int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); +int UI_method_set_reader(UI_METHOD *method, + int (*reader) (UI *ui, UI_STRING *uis)); +int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); +int UI_method_set_data_duplicator(UI_METHOD *method, + void *(*duplicator) (UI *ui, void *ui_data), + void (*destructor)(UI *ui, void *ui_data)); +int UI_method_set_prompt_constructor(UI_METHOD *method, + char *(*prompt_constructor) (UI *ui, + const char + *phrase_desc, + const char + *object_name)); +int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); +int (*UI_method_get_opener(const UI_METHOD *method)) (UI *); +int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *); +int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_closer(const UI_METHOD *method)) (UI *); +char *(*UI_method_get_prompt_constructor(const UI_METHOD *method)) + (UI *, const char *, const char *); +void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *); +void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *); +const void *UI_method_get_ex_data(const UI_METHOD *method, int idx); + +/* + * The following functions are helpers for method writers to access relevant + * data from a UI_STRING. + */ + +/* Return type of the UI_STRING */ +enum UI_string_types UI_get_string_type(UI_STRING *uis); +/* Return input flags of the UI_STRING */ +int UI_get_input_flags(UI_STRING *uis); +/* Return the actual string to output (the prompt, info or error) */ +const char *UI_get0_output_string(UI_STRING *uis); +/* + * Return the optional action string to output (the boolean prompt + * instruction) + */ +const char *UI_get0_action_string(UI_STRING *uis); +/* Return the result of a prompt */ +const char *UI_get0_result_string(UI_STRING *uis); +int UI_get_result_string_length(UI_STRING *uis); +/* + * Return the string to test the result against. Only useful with verifies. + */ +const char *UI_get0_test_string(UI_STRING *uis); +/* Return the required minimum size of the result */ +int UI_get_result_minsize(UI_STRING *uis); +/* Return the required maximum size of the result */ +int UI_get_result_maxsize(UI_STRING *uis); +/* Set the result of a UI_STRING. */ +int UI_set_result(UI *ui, UI_STRING *uis, const char *result); +int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len); + +/* A couple of popular utility functions */ +int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, + int verify); +int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, + int verify); +UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/uierr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/uierr.h index bd68864d..473b04ed 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/uierr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/uierr.h @@ -1,49 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_UIERR_H -# define HEADER_UIERR_H +#ifndef OPENSSL_UIERR_H +# define OPENSSL_UIERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_UI_strings(void); -/* - * UI function codes. - */ -# define UI_F_CLOSE_CONSOLE 115 -# define UI_F_ECHO_CONSOLE 116 -# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 -# define UI_F_GENERAL_ALLOCATE_PROMPT 109 -# define UI_F_NOECHO_CONSOLE 117 -# define UI_F_OPEN_CONSOLE 114 -# define UI_F_UI_CONSTRUCT_PROMPT 121 -# define UI_F_UI_CREATE_METHOD 112 -# define UI_F_UI_CTRL 111 -# define UI_F_UI_DUP_ERROR_STRING 101 -# define UI_F_UI_DUP_INFO_STRING 102 -# define UI_F_UI_DUP_INPUT_BOOLEAN 110 -# define UI_F_UI_DUP_INPUT_STRING 103 -# define UI_F_UI_DUP_USER_DATA 118 -# define UI_F_UI_DUP_VERIFY_STRING 106 -# define UI_F_UI_GET0_RESULT 107 -# define UI_F_UI_GET_RESULT_LENGTH 119 -# define UI_F_UI_NEW_METHOD 104 -# define UI_F_UI_PROCESS 113 -# define UI_F_UI_SET_RESULT 105 -# define UI_F_UI_SET_RESULT_EX 120 /* * UI reason codes. diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/whrlpool.h b/deps/openssl/android/x86_64/usr/local/include/openssl/whrlpool.h index 20ea3503..05ba4632 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/whrlpool.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/whrlpool.h @@ -1,27 +1,36 @@ /* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_WHRLPOOL_H -# define HEADER_WHRLPOOL_H +#ifndef OPENSSL_WHRLPOOL_H +# define OPENSSL_WHRLPOOL_H +# pragma once -#include - -# ifndef OPENSSL_NO_WHIRLPOOL -# include -# include -# ifdef __cplusplus -extern "C" { +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_WHRLPOOL_H # endif -# define WHIRLPOOL_DIGEST_LENGTH (512/8) -# define WHIRLPOOL_BBLOCK 512 -# define WHIRLPOOL_COUNTER (256/8) +# include + +# ifndef OPENSSL_NO_WHIRLPOOL +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define WHIRLPOOL_DIGEST_LENGTH (512/8) + +# if !defined(OPENSSL_NO_DEPRECATED_3_0) + +# define WHIRLPOOL_BBLOCK 512 +# define WHIRLPOOL_COUNTER (256/8) typedef struct { union { @@ -33,16 +42,21 @@ typedef struct { unsigned int bitoff; size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; } WHIRLPOOL_CTX; +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, + const void *inp, size_t bytes); +OSSL_DEPRECATEDIN_3_0 void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, + const void *inp, size_t bits); +OSSL_DEPRECATEDIN_3_0 int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); +OSSL_DEPRECATEDIN_3_0 unsigned char *WHIRLPOOL(const void *inp, size_t bytes, + unsigned char *md); +# endif -int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); -int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); -void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); -int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); -unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); - -# ifdef __cplusplus +# ifdef __cplusplus } -# endif +# endif # endif #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h b/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h index 3ff86ec7..483cb9d5 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h @@ -1,18 +1,29 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509.h.in + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509_H -# define HEADER_X509_H + + +#ifndef OPENSSL_X509_H +# define OPENSSL_X509_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_H +# endif # include -# include +# include # include # include # include @@ -21,7 +32,7 @@ # include # include -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # include # include # include @@ -29,11 +40,120 @@ # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { #endif +/* Needed stacks for types defined in other headers */ +SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME, X509_NAME, X509_NAME) +#define sk_X509_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_value(sk, idx) ((X509_NAME *)OPENSSL_sk_value(ossl_check_const_X509_NAME_sk_type(sk), (idx))) +#define sk_X509_NAME_new(cmp) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new(ossl_check_X509_NAME_compfunc_type(cmp))) +#define sk_X509_NAME_new_null() ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_null()) +#define sk_X509_NAME_new_reserve(cmp, n) ((STACK_OF(X509_NAME) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_compfunc_type(cmp), (n))) +#define sk_X509_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_sk_type(sk), (n)) +#define sk_X509_NAME_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_delete(sk, i) ((X509_NAME *)OPENSSL_sk_delete(ossl_check_X509_NAME_sk_type(sk), (i))) +#define sk_X509_NAME_delete_ptr(sk, ptr) ((X509_NAME *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr))) +#define sk_X509_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_pop(sk) ((X509_NAME *)OPENSSL_sk_pop(ossl_check_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_shift(sk) ((X509_NAME *)OPENSSL_sk_shift(ossl_check_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_sk_type(sk),ossl_check_X509_NAME_freefunc_type(freefunc)) +#define sk_X509_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), (idx)) +#define sk_X509_NAME_set(sk, idx, ptr) ((X509_NAME *)OPENSSL_sk_set(ossl_check_X509_NAME_sk_type(sk), (idx), ossl_check_X509_NAME_type(ptr))) +#define sk_X509_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr)) +#define sk_X509_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_type(ptr), pnum) +#define sk_X509_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_sk_type(sk)) +#define sk_X509_NAME_dup(sk) ((STACK_OF(X509_NAME) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_sk_type(sk))) +#define sk_X509_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_sk_type(sk), ossl_check_X509_NAME_copyfunc_type(copyfunc), ossl_check_X509_NAME_freefunc_type(freefunc))) +#define sk_X509_NAME_set_cmp_func(sk, cmp) ((sk_X509_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_sk_type(sk), ossl_check_X509_NAME_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509, X509, X509) +#define sk_X509_num(sk) OPENSSL_sk_num(ossl_check_const_X509_sk_type(sk)) +#define sk_X509_value(sk, idx) ((X509 *)OPENSSL_sk_value(ossl_check_const_X509_sk_type(sk), (idx))) +#define sk_X509_new(cmp) ((STACK_OF(X509) *)OPENSSL_sk_new(ossl_check_X509_compfunc_type(cmp))) +#define sk_X509_new_null() ((STACK_OF(X509) *)OPENSSL_sk_new_null()) +#define sk_X509_new_reserve(cmp, n) ((STACK_OF(X509) *)OPENSSL_sk_new_reserve(ossl_check_X509_compfunc_type(cmp), (n))) +#define sk_X509_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_sk_type(sk), (n)) +#define sk_X509_free(sk) OPENSSL_sk_free(ossl_check_X509_sk_type(sk)) +#define sk_X509_zero(sk) OPENSSL_sk_zero(ossl_check_X509_sk_type(sk)) +#define sk_X509_delete(sk, i) ((X509 *)OPENSSL_sk_delete(ossl_check_X509_sk_type(sk), (i))) +#define sk_X509_delete_ptr(sk, ptr) ((X509 *)OPENSSL_sk_delete_ptr(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr))) +#define sk_X509_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_pop(sk) ((X509 *)OPENSSL_sk_pop(ossl_check_X509_sk_type(sk))) +#define sk_X509_shift(sk) ((X509 *)OPENSSL_sk_shift(ossl_check_X509_sk_type(sk))) +#define sk_X509_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_sk_type(sk),ossl_check_X509_freefunc_type(freefunc)) +#define sk_X509_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), (idx)) +#define sk_X509_set(sk, idx, ptr) ((X509 *)OPENSSL_sk_set(ossl_check_X509_sk_type(sk), (idx), ossl_check_X509_type(ptr))) +#define sk_X509_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr)) +#define sk_X509_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_sk_type(sk), ossl_check_X509_type(ptr), pnum) +#define sk_X509_sort(sk) OPENSSL_sk_sort(ossl_check_X509_sk_type(sk)) +#define sk_X509_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_sk_type(sk)) +#define sk_X509_dup(sk) ((STACK_OF(X509) *)OPENSSL_sk_dup(ossl_check_const_X509_sk_type(sk))) +#define sk_X509_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_sk_type(sk), ossl_check_X509_copyfunc_type(copyfunc), ossl_check_X509_freefunc_type(freefunc))) +#define sk_X509_set_cmp_func(sk, cmp) ((sk_X509_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_sk_type(sk), ossl_check_X509_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_REVOKED, X509_REVOKED, X509_REVOKED) +#define sk_X509_REVOKED_num(sk) OPENSSL_sk_num(ossl_check_const_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_value(sk, idx) ((X509_REVOKED *)OPENSSL_sk_value(ossl_check_const_X509_REVOKED_sk_type(sk), (idx))) +#define sk_X509_REVOKED_new(cmp) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new(ossl_check_X509_REVOKED_compfunc_type(cmp))) +#define sk_X509_REVOKED_new_null() ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_null()) +#define sk_X509_REVOKED_new_reserve(cmp, n) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_new_reserve(ossl_check_X509_REVOKED_compfunc_type(cmp), (n))) +#define sk_X509_REVOKED_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_REVOKED_sk_type(sk), (n)) +#define sk_X509_REVOKED_free(sk) OPENSSL_sk_free(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_zero(sk) OPENSSL_sk_zero(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_delete(sk, i) ((X509_REVOKED *)OPENSSL_sk_delete(ossl_check_X509_REVOKED_sk_type(sk), (i))) +#define sk_X509_REVOKED_delete_ptr(sk, ptr) ((X509_REVOKED *)OPENSSL_sk_delete_ptr(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr))) +#define sk_X509_REVOKED_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_pop(sk) ((X509_REVOKED *)OPENSSL_sk_pop(ossl_check_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_shift(sk) ((X509_REVOKED *)OPENSSL_sk_shift(ossl_check_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_REVOKED_sk_type(sk),ossl_check_X509_REVOKED_freefunc_type(freefunc)) +#define sk_X509_REVOKED_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), (idx)) +#define sk_X509_REVOKED_set(sk, idx, ptr) ((X509_REVOKED *)OPENSSL_sk_set(ossl_check_X509_REVOKED_sk_type(sk), (idx), ossl_check_X509_REVOKED_type(ptr))) +#define sk_X509_REVOKED_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr)) +#define sk_X509_REVOKED_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_type(ptr), pnum) +#define sk_X509_REVOKED_sort(sk) OPENSSL_sk_sort(ossl_check_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_REVOKED_sk_type(sk)) +#define sk_X509_REVOKED_dup(sk) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_dup(ossl_check_const_X509_REVOKED_sk_type(sk))) +#define sk_X509_REVOKED_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_REVOKED) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_copyfunc_type(copyfunc), ossl_check_X509_REVOKED_freefunc_type(freefunc))) +#define sk_X509_REVOKED_set_cmp_func(sk, cmp) ((sk_X509_REVOKED_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_REVOKED_sk_type(sk), ossl_check_X509_REVOKED_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_CRL, X509_CRL, X509_CRL) +#define sk_X509_CRL_num(sk) OPENSSL_sk_num(ossl_check_const_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_value(sk, idx) ((X509_CRL *)OPENSSL_sk_value(ossl_check_const_X509_CRL_sk_type(sk), (idx))) +#define sk_X509_CRL_new(cmp) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new(ossl_check_X509_CRL_compfunc_type(cmp))) +#define sk_X509_CRL_new_null() ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_null()) +#define sk_X509_CRL_new_reserve(cmp, n) ((STACK_OF(X509_CRL) *)OPENSSL_sk_new_reserve(ossl_check_X509_CRL_compfunc_type(cmp), (n))) +#define sk_X509_CRL_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_CRL_sk_type(sk), (n)) +#define sk_X509_CRL_free(sk) OPENSSL_sk_free(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_zero(sk) OPENSSL_sk_zero(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_delete(sk, i) ((X509_CRL *)OPENSSL_sk_delete(ossl_check_X509_CRL_sk_type(sk), (i))) +#define sk_X509_CRL_delete_ptr(sk, ptr) ((X509_CRL *)OPENSSL_sk_delete_ptr(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr))) +#define sk_X509_CRL_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_pop(sk) ((X509_CRL *)OPENSSL_sk_pop(ossl_check_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_shift(sk) ((X509_CRL *)OPENSSL_sk_shift(ossl_check_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_CRL_sk_type(sk),ossl_check_X509_CRL_freefunc_type(freefunc)) +#define sk_X509_CRL_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), (idx)) +#define sk_X509_CRL_set(sk, idx, ptr) ((X509_CRL *)OPENSSL_sk_set(ossl_check_X509_CRL_sk_type(sk), (idx), ossl_check_X509_CRL_type(ptr))) +#define sk_X509_CRL_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr)) +#define sk_X509_CRL_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_type(ptr), pnum) +#define sk_X509_CRL_sort(sk) OPENSSL_sk_sort(ossl_check_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_CRL_sk_type(sk)) +#define sk_X509_CRL_dup(sk) ((STACK_OF(X509_CRL) *)OPENSSL_sk_dup(ossl_check_const_X509_CRL_sk_type(sk))) +#define sk_X509_CRL_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_CRL) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_CRL_sk_type(sk), ossl_check_X509_CRL_copyfunc_type(copyfunc), ossl_check_X509_CRL_freefunc_type(freefunc))) +#define sk_X509_CRL_set_cmp_func(sk, cmp) ((sk_X509_CRL_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_CRL_sk_type(sk), ossl_check_X509_CRL_compfunc_type(cmp))) + /* Flags for X509_get_signature_info() */ /* Signature info is valid */ @@ -72,78 +192,98 @@ typedef struct X509_sig_st X509_SIG; typedef struct X509_name_entry_st X509_NAME_ENTRY; -DEFINE_STACK_OF(X509_NAME_ENTRY) +SKM_DEFINE_STACK_OF_INTERNAL(X509_NAME_ENTRY, X509_NAME_ENTRY, X509_NAME_ENTRY) +#define sk_X509_NAME_ENTRY_num(sk) OPENSSL_sk_num(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_value(sk, idx) ((X509_NAME_ENTRY *)OPENSSL_sk_value(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), (idx))) +#define sk_X509_NAME_ENTRY_new(cmp) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp))) +#define sk_X509_NAME_ENTRY_new_null() ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_null()) +#define sk_X509_NAME_ENTRY_new_reserve(cmp, n) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_new_reserve(ossl_check_X509_NAME_ENTRY_compfunc_type(cmp), (n))) +#define sk_X509_NAME_ENTRY_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_NAME_ENTRY_sk_type(sk), (n)) +#define sk_X509_NAME_ENTRY_free(sk) OPENSSL_sk_free(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_zero(sk) OPENSSL_sk_zero(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_delete(sk, i) ((X509_NAME_ENTRY *)OPENSSL_sk_delete(ossl_check_X509_NAME_ENTRY_sk_type(sk), (i))) +#define sk_X509_NAME_ENTRY_delete_ptr(sk, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_delete_ptr(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr))) +#define sk_X509_NAME_ENTRY_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_pop(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_pop(ossl_check_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_shift(sk) ((X509_NAME_ENTRY *)OPENSSL_sk_shift(ossl_check_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_NAME_ENTRY_sk_type(sk),ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc)) +#define sk_X509_NAME_ENTRY_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), (idx)) +#define sk_X509_NAME_ENTRY_set(sk, idx, ptr) ((X509_NAME_ENTRY *)OPENSSL_sk_set(ossl_check_X509_NAME_ENTRY_sk_type(sk), (idx), ossl_check_X509_NAME_ENTRY_type(ptr))) +#define sk_X509_NAME_ENTRY_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr)) +#define sk_X509_NAME_ENTRY_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_type(ptr), pnum) +#define sk_X509_NAME_ENTRY_sort(sk) OPENSSL_sk_sort(ossl_check_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_NAME_ENTRY_sk_type(sk)) +#define sk_X509_NAME_ENTRY_dup(sk) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_dup(ossl_check_const_X509_NAME_ENTRY_sk_type(sk))) +#define sk_X509_NAME_ENTRY_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_NAME_ENTRY) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_copyfunc_type(copyfunc), ossl_check_X509_NAME_ENTRY_freefunc_type(freefunc))) +#define sk_X509_NAME_ENTRY_set_cmp_func(sk, cmp) ((sk_X509_NAME_ENTRY_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_NAME_ENTRY_sk_type(sk), ossl_check_X509_NAME_ENTRY_compfunc_type(cmp))) -DEFINE_STACK_OF(X509_NAME) # define X509_EX_V_NETSCAPE_HACK 0x8000 # define X509_EX_V_INIT 0x0001 typedef struct X509_extension_st X509_EXTENSION; +SKM_DEFINE_STACK_OF_INTERNAL(X509_EXTENSION, X509_EXTENSION, X509_EXTENSION) +#define sk_X509_EXTENSION_num(sk) OPENSSL_sk_num(ossl_check_const_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_value(sk, idx) ((X509_EXTENSION *)OPENSSL_sk_value(ossl_check_const_X509_EXTENSION_sk_type(sk), (idx))) +#define sk_X509_EXTENSION_new(cmp) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new(ossl_check_X509_EXTENSION_compfunc_type(cmp))) +#define sk_X509_EXTENSION_new_null() ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_null()) +#define sk_X509_EXTENSION_new_reserve(cmp, n) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_new_reserve(ossl_check_X509_EXTENSION_compfunc_type(cmp), (n))) +#define sk_X509_EXTENSION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_EXTENSION_sk_type(sk), (n)) +#define sk_X509_EXTENSION_free(sk) OPENSSL_sk_free(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_zero(sk) OPENSSL_sk_zero(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_delete(sk, i) ((X509_EXTENSION *)OPENSSL_sk_delete(ossl_check_X509_EXTENSION_sk_type(sk), (i))) +#define sk_X509_EXTENSION_delete_ptr(sk, ptr) ((X509_EXTENSION *)OPENSSL_sk_delete_ptr(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr))) +#define sk_X509_EXTENSION_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_pop(sk) ((X509_EXTENSION *)OPENSSL_sk_pop(ossl_check_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_shift(sk) ((X509_EXTENSION *)OPENSSL_sk_shift(ossl_check_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_EXTENSION_sk_type(sk),ossl_check_X509_EXTENSION_freefunc_type(freefunc)) +#define sk_X509_EXTENSION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), (idx)) +#define sk_X509_EXTENSION_set(sk, idx, ptr) ((X509_EXTENSION *)OPENSSL_sk_set(ossl_check_X509_EXTENSION_sk_type(sk), (idx), ossl_check_X509_EXTENSION_type(ptr))) +#define sk_X509_EXTENSION_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr)) +#define sk_X509_EXTENSION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_type(ptr), pnum) +#define sk_X509_EXTENSION_sort(sk) OPENSSL_sk_sort(ossl_check_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_EXTENSION_sk_type(sk)) +#define sk_X509_EXTENSION_dup(sk) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_dup(ossl_check_const_X509_EXTENSION_sk_type(sk))) +#define sk_X509_EXTENSION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_EXTENSION) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_copyfunc_type(copyfunc), ossl_check_X509_EXTENSION_freefunc_type(freefunc))) +#define sk_X509_EXTENSION_set_cmp_func(sk, cmp) ((sk_X509_EXTENSION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_EXTENSION_sk_type(sk), ossl_check_X509_EXTENSION_compfunc_type(cmp))) typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; - -DEFINE_STACK_OF(X509_EXTENSION) - typedef struct x509_attributes_st X509_ATTRIBUTE; - -DEFINE_STACK_OF(X509_ATTRIBUTE) +SKM_DEFINE_STACK_OF_INTERNAL(X509_ATTRIBUTE, X509_ATTRIBUTE, X509_ATTRIBUTE) +#define sk_X509_ATTRIBUTE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_value(sk, idx) ((X509_ATTRIBUTE *)OPENSSL_sk_value(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), (idx))) +#define sk_X509_ATTRIBUTE_new(cmp) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp))) +#define sk_X509_ATTRIBUTE_new_null() ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_null()) +#define sk_X509_ATTRIBUTE_new_reserve(cmp, n) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_new_reserve(ossl_check_X509_ATTRIBUTE_compfunc_type(cmp), (n))) +#define sk_X509_ATTRIBUTE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_ATTRIBUTE_sk_type(sk), (n)) +#define sk_X509_ATTRIBUTE_free(sk) OPENSSL_sk_free(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_delete(sk, i) ((X509_ATTRIBUTE *)OPENSSL_sk_delete(ossl_check_X509_ATTRIBUTE_sk_type(sk), (i))) +#define sk_X509_ATTRIBUTE_delete_ptr(sk, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_delete_ptr(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr))) +#define sk_X509_ATTRIBUTE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_pop(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_pop(ossl_check_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_shift(sk) ((X509_ATTRIBUTE *)OPENSSL_sk_shift(ossl_check_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_ATTRIBUTE_sk_type(sk),ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc)) +#define sk_X509_ATTRIBUTE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), (idx)) +#define sk_X509_ATTRIBUTE_set(sk, idx, ptr) ((X509_ATTRIBUTE *)OPENSSL_sk_set(ossl_check_X509_ATTRIBUTE_sk_type(sk), (idx), ossl_check_X509_ATTRIBUTE_type(ptr))) +#define sk_X509_ATTRIBUTE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr)) +#define sk_X509_ATTRIBUTE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_type(ptr), pnum) +#define sk_X509_ATTRIBUTE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_ATTRIBUTE_sk_type(sk)) +#define sk_X509_ATTRIBUTE_dup(sk) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_dup(ossl_check_const_X509_ATTRIBUTE_sk_type(sk))) +#define sk_X509_ATTRIBUTE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_ATTRIBUTE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_copyfunc_type(copyfunc), ossl_check_X509_ATTRIBUTE_freefunc_type(freefunc))) +#define sk_X509_ATTRIBUTE_set_cmp_func(sk, cmp) ((sk_X509_ATTRIBUTE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_ATTRIBUTE_sk_type(sk), ossl_check_X509_ATTRIBUTE_compfunc_type(cmp))) typedef struct X509_req_info_st X509_REQ_INFO; - typedef struct X509_req_st X509_REQ; - typedef struct x509_cert_aux_st X509_CERT_AUX; - typedef struct x509_cinf_st X509_CINF; -DEFINE_STACK_OF(X509) - -/* This is used for a table of trust checking functions */ - -typedef struct x509_trust_st { - int trust; - int flags; - int (*check_trust) (struct x509_trust_st *, X509 *, int); - char *name; - int arg1; - void *arg2; -} X509_TRUST; - -DEFINE_STACK_OF(X509_TRUST) - -/* standard trust ids */ - -# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ - -# define X509_TRUST_COMPAT 1 -# define X509_TRUST_SSL_CLIENT 2 -# define X509_TRUST_SSL_SERVER 3 -# define X509_TRUST_EMAIL 4 -# define X509_TRUST_OBJECT_SIGN 5 -# define X509_TRUST_OCSP_SIGN 6 -# define X509_TRUST_OCSP_REQUEST 7 -# define X509_TRUST_TSA 8 - -/* Keep these up to date! */ -# define X509_TRUST_MIN 1 -# define X509_TRUST_MAX 8 - -/* trust_flags values */ -# define X509_TRUST_DYNAMIC (1U << 0) -# define X509_TRUST_DYNAMIC_NAME (1U << 1) -/* No compat trust if self-signed, preempts "DO_SS" */ -# define X509_TRUST_NO_SS_COMPAT (1U << 2) -/* Compat trust if no explicit accepted trust EKUs */ -# define X509_TRUST_DO_SS_COMPAT (1U << 3) -/* Accept "anyEKU" as a wildcard trust OID */ -# define X509_TRUST_OK_ANY_EKU (1U << 4) - -/* check_trust return codes */ - -# define X509_TRUST_TRUSTED 1 -# define X509_TRUST_REJECTED 2 -# define X509_TRUST_UNTRUSTED 3 - /* Flags for X509_print_ex() */ # define X509_FLAG_COMPAT 0 @@ -160,6 +300,7 @@ DEFINE_STACK_OF(X509_TRUST) # define X509_FLAG_NO_AUX (1L << 10) # define X509_FLAG_NO_ATTRIBUTES (1L << 11) # define X509_FLAG_NO_IDS (1L << 12) +# define X509_FLAG_EXTENSIONS_ONLY_KID (1L << 13) /* Flags specific to X509_NAME_print_ex() */ @@ -221,12 +362,8 @@ DEFINE_STACK_OF(X509_TRUST) XN_FLAG_FN_LN | \ XN_FLAG_FN_ALIGN) -DEFINE_STACK_OF(X509_REVOKED) - typedef struct X509_crl_info_st X509_CRL_INFO; -DEFINE_STACK_OF(X509_CRL) - typedef struct private_key_st { int version; /* The PKCS#8 data types */ @@ -250,8 +387,33 @@ typedef struct X509_info_st { int enc_len; char *enc_data; } X509_INFO; +SKM_DEFINE_STACK_OF_INTERNAL(X509_INFO, X509_INFO, X509_INFO) +#define sk_X509_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_value(sk, idx) ((X509_INFO *)OPENSSL_sk_value(ossl_check_const_X509_INFO_sk_type(sk), (idx))) +#define sk_X509_INFO_new(cmp) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new(ossl_check_X509_INFO_compfunc_type(cmp))) +#define sk_X509_INFO_new_null() ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_null()) +#define sk_X509_INFO_new_reserve(cmp, n) ((STACK_OF(X509_INFO) *)OPENSSL_sk_new_reserve(ossl_check_X509_INFO_compfunc_type(cmp), (n))) +#define sk_X509_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_INFO_sk_type(sk), (n)) +#define sk_X509_INFO_free(sk) OPENSSL_sk_free(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_delete(sk, i) ((X509_INFO *)OPENSSL_sk_delete(ossl_check_X509_INFO_sk_type(sk), (i))) +#define sk_X509_INFO_delete_ptr(sk, ptr) ((X509_INFO *)OPENSSL_sk_delete_ptr(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr))) +#define sk_X509_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_pop(sk) ((X509_INFO *)OPENSSL_sk_pop(ossl_check_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_shift(sk) ((X509_INFO *)OPENSSL_sk_shift(ossl_check_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_INFO_sk_type(sk),ossl_check_X509_INFO_freefunc_type(freefunc)) +#define sk_X509_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), (idx)) +#define sk_X509_INFO_set(sk, idx, ptr) ((X509_INFO *)OPENSSL_sk_set(ossl_check_X509_INFO_sk_type(sk), (idx), ossl_check_X509_INFO_type(ptr))) +#define sk_X509_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr)) +#define sk_X509_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_type(ptr), pnum) +#define sk_X509_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_INFO_sk_type(sk)) +#define sk_X509_INFO_dup(sk) ((STACK_OF(X509_INFO) *)OPENSSL_sk_dup(ossl_check_const_X509_INFO_sk_type(sk))) +#define sk_X509_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_INFO_sk_type(sk), ossl_check_X509_INFO_copyfunc_type(copyfunc), ossl_check_X509_INFO_freefunc_type(freefunc))) +#define sk_X509_INFO_set_cmp_func(sk, cmp) ((sk_X509_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_INFO_sk_type(sk), ossl_check_X509_INFO_compfunc_type(cmp))) -DEFINE_STACK_OF(X509_INFO) /* * The next 2 structures and their 8 routines are used to manipulate Netscape's @@ -336,7 +498,9 @@ X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), int (*crl_free) (X509_CRL *crl), int (*crl_lookup) (X509_CRL *crl, X509_REVOKED **ret, - ASN1_INTEGER *ser, + const + ASN1_INTEGER *serial, + const X509_NAME *issuer), int (*crl_verify) (X509_CRL *crl, EVP_PKEY *pk)); @@ -348,7 +512,10 @@ void *X509_CRL_get_meth_data(X509_CRL *crl); const char *X509_verify_cert_error_string(long n); int X509_verify(X509 *a, EVP_PKEY *r); +int X509_self_signed(X509 *cert, int verify_signature); +int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx, + const char *propq); int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); @@ -366,22 +533,18 @@ int X509_signature_print(BIO *bp, const X509_ALGOR *alg, int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); -# endif int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); -# ifndef OPENSSL_NO_OCSP -int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); -# endif int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len); +ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert, + EVP_MD **md_used, int *md_is_fallback); int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, @@ -389,89 +552,118 @@ int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, unsigned char *md, unsigned int *len); +X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include /* OSSL_HTTP_REQ_CTX_nbio_d2i */ +# define X509_http_nbio(rctx, pcert) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509)) +# define X509_CRL_http_nbio(rctx, pcrl) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL)) +# endif + # ifndef OPENSSL_NO_STDIO X509 *d2i_X509_fp(FILE *fp, X509 **x509); -int i2d_X509_fp(FILE *fp, X509 *x509); +int i2d_X509_fp(FILE *fp, const X509 *x509); X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); -int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); +int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl); X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); -int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); -int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); -int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); +int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa); # endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); -int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); -DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); -int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); -int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); -int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa); +# endif # endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); -int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); +int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk); PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); -int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); -int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); +int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey); EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); # endif X509 *d2i_X509_bio(BIO *bp, X509 **x509); -int i2d_X509_bio(BIO *bp, X509 *x509); +int i2d_X509_bio(BIO *bp, const X509 *x509); X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); -int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); +int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl); X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); -int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); -# ifndef OPENSSL_NO_RSA -RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); -int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); -RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); -int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); +int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa); # endif -# ifndef OPENSSL_NO_DSA -DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); -int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); -DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); -int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); -# endif -# ifndef OPENSSL_NO_EC -EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); -int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); -EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); -int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa); +# endif # endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); -int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); +int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk); PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO **p8inf); -int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); -int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); -int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); -int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); +int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey); EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); -X509 *X509_dup(X509 *x509); -X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); -X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); -X509_CRL *X509_CRL_dup(X509_CRL *crl); -X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); -X509_REQ *X509_REQ_dup(X509_REQ *req); -X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); +DECLARE_ASN1_DUP_FUNCTION(X509) +DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR) +DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) +DECLARE_ASN1_DUP_FUNCTION(X509_CRL) +DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION) +DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY) +DECLARE_ASN1_DUP_FUNCTION(X509_REQ) +DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED) int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval); void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, @@ -480,11 +672,13 @@ void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); -X509_NAME *X509_NAME_dup(X509_NAME *xn); -X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); +DECLARE_ASN1_DUP_FUNCTION(X509_NAME) +DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) int X509_cmp_time(const ASN1_TIME *s, time_t *t); int X509_cmp_current_time(const ASN1_TIME *s); +int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm, + const ASN1_TIME *start, const ASN1_TIME *end); ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, int offset_day, long offset_sec, time_t *t); @@ -506,24 +700,27 @@ DECLARE_ASN1_FUNCTIONS(X509_VAL) DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) +X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq); int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); -EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key); -EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key); int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); long X509_get_pathlen(X509 *x); -int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); -EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); -# ifndef OPENSSL_NO_RSA -int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); -RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY) +EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY) # endif -# ifndef OPENSSL_NO_DSA -int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); -DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY) +# endif # endif -# ifndef OPENSSL_NO_EC -int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); -EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY) +# endif # endif DECLARE_ASN1_FUNCTIONS(X509_SIG) @@ -534,6 +731,7 @@ void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) DECLARE_ASN1_FUNCTIONS(X509_REQ) +X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); @@ -545,19 +743,18 @@ DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) DECLARE_ASN1_FUNCTIONS(X509_NAME) -int X509_NAME_set(X509_NAME **xn, X509_NAME *name); +int X509_NAME_set(X509_NAME **xn, const X509_NAME *name); DECLARE_ASN1_FUNCTIONS(X509_CINF) - DECLARE_ASN1_FUNCTIONS(X509) +X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq); DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) #define X509_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) int X509_set_ex_data(X509 *r, int idx, void *arg); -void *X509_get_ex_data(X509 *r, int idx); -int i2d_X509_AUX(X509 *a, unsigned char **pp); -X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); +void *X509_get_ex_data(const X509 *r, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX) int i2d_re_X509_tbs(X509 *x, unsigned char **pp); @@ -573,29 +770,24 @@ void X509_get0_signature(const ASN1_BIT_STRING **psig, const X509_ALGOR **palg, const X509 *x); int X509_get_signature_nid(const X509 *x); -int X509_trusted(const X509 *x); +void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x); +void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x); + int X509_alias_set1(X509 *x, const unsigned char *name, int len); int X509_keyid_set1(X509 *x, const unsigned char *id, int len); unsigned char *X509_alias_get0(X509 *x, int *len); unsigned char *X509_keyid_get0(X509 *x, int *len); -int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, - int); -int X509_TRUST_set(int *t, int trust); -int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); -int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); -void X509_trust_clear(X509 *x); -void X509_reject_clear(X509 *x); - -STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); -STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); DECLARE_ASN1_FUNCTIONS(X509_REVOKED) DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) DECLARE_ASN1_FUNCTIONS(X509_CRL) +X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq); int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); int X509_CRL_get0_by_serial(X509_CRL *crl, - X509_REVOKED **ret, ASN1_INTEGER *serial); + X509_REVOKED **ret, const ASN1_INTEGER *serial); int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); X509_PKEY *X509_PKEY_new(void); @@ -609,37 +801,45 @@ X509_INFO *X509_INFO_new(void); void X509_INFO_free(X509_INFO *a); char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); - +OSSL_DEPRECATEDIN_3_0 int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, unsigned char *md, unsigned int *len); - -int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - char *data, EVP_PKEY *pkey, const EVP_MD *type); - +OSSL_DEPRECATEDIN_3_0 +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey, + const EVP_MD *type); +#endif int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, unsigned char *md, unsigned int *len); - -int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, - ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); - -int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, - X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, - EVP_PKEY *pkey, const EVP_MD *type); +int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey); +int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_MD_CTX *ctx); +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey, const EVP_MD *md); int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, ASN1_BIT_STRING *signature, - void *asn, EVP_MD_CTX *ctx); + const void *data, EVP_MD_CTX *ctx); + +#define X509_VERSION_1 0 +#define X509_VERSION_2 1 +#define X509_VERSION_3 2 long X509_get_version(const X509 *x); int X509_set_version(X509 *x, long version); int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); ASN1_INTEGER *X509_get_serialNumber(X509 *x); const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); -int X509_set_issuer_name(X509 *x, X509_NAME *name); +int X509_set_issuer_name(X509 *x, const X509_NAME *name); X509_NAME *X509_get_issuer_name(const X509 *a); -int X509_set_subject_name(X509 *x, X509_NAME *name); +int X509_set_subject_name(X509 *x, const X509_NAME *name); X509_NAME *X509_get_subject_name(const X509 *a); const ASN1_TIME * X509_get0_notBefore(const X509 *x); ASN1_TIME *X509_getm_notBefore(const X509 *x); @@ -651,7 +851,7 @@ int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); int X509_up_ref(X509 *x); int X509_get_signature_type(const X509 *x); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_get_notBefore X509_getm_notBefore # define X509_get_notAfter X509_getm_notAfter # define X509_set_notBefore X509_set1_notBefore @@ -672,12 +872,13 @@ const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); EVP_PKEY *X509_get0_pubkey(const X509 *x); EVP_PKEY *X509_get_pubkey(X509 *x); ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); -int X509_certificate_type(const X509 *x, const EVP_PKEY *pubkey); + +#define X509_REQ_VERSION_1 0 long X509_REQ_get_version(const X509_REQ *req); int X509_REQ_set_version(X509_REQ *x, long version); X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); -int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); +int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name); void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, const X509_ALGOR **palg); void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig); @@ -692,9 +893,9 @@ int X509_REQ_extension_nid(int nid); int *X509_REQ_get_extension_nids(void); void X509_REQ_set_extension_nids(int *nids); STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); -int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, - int nid); -int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); +int X509_REQ_add_extensions_nid(X509_REQ *req, + const STACK_OF(X509_EXTENSION) *exts, int nid); +int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext); int X509_REQ_get_attr_count(const X509_REQ *req); int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, @@ -712,14 +913,17 @@ int X509_REQ_add1_attr_by_txt(X509_REQ *req, const char *attrname, int type, const unsigned char *bytes, int len); +#define X509_CRL_VERSION_1 0 +#define X509_CRL_VERSION_2 1 + int X509_CRL_set_version(X509_CRL *x, long version); -int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); +int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name); int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); int X509_CRL_sort(X509_CRL *crl); int X509_CRL_up_ref(X509_CRL *crl); -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate # define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate #endif @@ -727,8 +931,10 @@ int X509_CRL_up_ref(X509_CRL *crl); long X509_CRL_get_version(const X509_CRL *crl); const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)) -DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)) +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl); +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl); +#endif X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); @@ -770,10 +976,24 @@ unsigned long X509_issuer_name_hash_old(X509 *a); unsigned long X509_subject_name_hash_old(X509 *x); # endif +# define X509_ADD_FLAG_DEFAULT 0 +# define X509_ADD_FLAG_UP_REF 0x1 +# define X509_ADD_FLAG_PREPEND 0x2 +# define X509_ADD_FLAG_NO_DUP 0x4 +# define X509_ADD_FLAG_NO_SS 0x8 +int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags); +int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags); + int X509_cmp(const X509 *a, const X509 *b); int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); -unsigned long X509_NAME_hash(X509_NAME *x); -unsigned long X509_NAME_hash_old(X509_NAME *x); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL) +OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x, + const EVP_PKEY *pubkey); +#endif +unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx, + const char *propq, int *ok); +unsigned long X509_NAME_hash_old(const X509_NAME *x); int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); @@ -802,16 +1022,17 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, int X509_REQ_print(BIO *bp, X509_REQ *req); int X509_NAME_entry_count(const X509_NAME *name); -int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); -int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, +int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid, + char *buf, int len); +int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, char *buf, int len); /* * NOTE: you should be passing -1, not 0 as lastpos. The functions that use * lastpos, search after that position on. */ -int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); -int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, +int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, int lastpos); X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); @@ -845,7 +1066,7 @@ ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); -int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder, +int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder, size_t *pderlen); int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); @@ -972,12 +1193,10 @@ int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, const char *attrname, int type, const unsigned char *bytes, int len); -int X509_verify_cert(X509_STORE_CTX *ctx); - /* lookup a cert from a X509 STACK */ -X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, - ASN1_INTEGER *serial); -X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name, + const ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name); DECLARE_ASN1_FUNCTIONS(PBEPARAM) DECLARE_ASN1_FUNCTIONS(PBE2PARAM) @@ -988,14 +1207,25 @@ DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, const unsigned char *salt, int saltlen); +int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); X509_ALGOR *PKCS5_pbe_set(int alg, int iter, const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, unsigned char *salt, int saltlen); X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, unsigned char *salt, int saltlen, unsigned char *aiv, int prf_nid); +X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid, + OSSL_LIB_CTX *libctx); #ifndef OPENSSL_NO_SCRYPT X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, @@ -1006,13 +1236,18 @@ X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, int prf_nid, int keylen); +X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen, + OSSL_LIB_CTX *libctx); /* PKCS#8 utilities */ DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); -PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); +EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey); int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, int version, int ptype, void *pval, @@ -1023,26 +1258,20 @@ int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, const STACK_OF(X509_ATTRIBUTE) * PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr); int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, const unsigned char *bytes, int len); +int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj, + int type, const unsigned char *bytes, int len); + int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, int ptype, void *pval, unsigned char *penc, int penclen); int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, const unsigned char **pk, int *ppklen, - X509_ALGOR **pa, X509_PUBKEY *pub); - -int X509_check_trust(X509 *x, int id, int flags); -int X509_TRUST_get_count(void); -X509_TRUST *X509_TRUST_get0(int idx); -int X509_TRUST_get_by_id(int id); -int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), - const char *name, int arg1, void *arg2); -void X509_TRUST_cleanup(void); -int X509_TRUST_get_flags(const X509_TRUST *xp); -char *X509_TRUST_get0_name(const X509_TRUST *xp); -int X509_TRUST_get_trust(const X509_TRUST *xp); + X509_ALGOR **pa, const X509_PUBKEY *pub); +int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b); # ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h.in new file mode 100644 index 00000000..d4df2adc --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h.in @@ -0,0 +1,1085 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509_H +# define OPENSSL_X509_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_H +# endif + +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# include +# include +# include +# endif + +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Needed stacks for types defined in other headers */ +{- + generate_stack_macros("X509_NAME") + .generate_stack_macros("X509") + .generate_stack_macros("X509_REVOKED") + .generate_stack_macros("X509_CRL"); +-} + +/* Flags for X509_get_signature_info() */ +/* Signature info is valid */ +# define X509_SIG_INFO_VALID 0x1 +/* Signature is suitable for TLS use */ +# define X509_SIG_INFO_TLS 0x2 + +# define X509_FILETYPE_PEM 1 +# define X509_FILETYPE_ASN1 2 +# define X509_FILETYPE_DEFAULT 3 + +# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 +# define X509v3_KU_NON_REPUDIATION 0x0040 +# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 +# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 +# define X509v3_KU_KEY_AGREEMENT 0x0008 +# define X509v3_KU_KEY_CERT_SIGN 0x0004 +# define X509v3_KU_CRL_SIGN 0x0002 +# define X509v3_KU_ENCIPHER_ONLY 0x0001 +# define X509v3_KU_DECIPHER_ONLY 0x8000 +# define X509v3_KU_UNDEF 0xffff + +struct X509_algor_st { + ASN1_OBJECT *algorithm; + ASN1_TYPE *parameter; +} /* X509_ALGOR */ ; + +typedef STACK_OF(X509_ALGOR) X509_ALGORS; + +typedef struct X509_val_st { + ASN1_TIME *notBefore; + ASN1_TIME *notAfter; +} X509_VAL; + +typedef struct X509_sig_st X509_SIG; + +typedef struct X509_name_entry_st X509_NAME_ENTRY; + +{- + generate_stack_macros("X509_NAME_ENTRY"); +-} + +# define X509_EX_V_NETSCAPE_HACK 0x8000 +# define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st X509_EXTENSION; +{- + generate_stack_macros("X509_EXTENSION"); +-} +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; +typedef struct x509_attributes_st X509_ATTRIBUTE; +{- + generate_stack_macros("X509_ATTRIBUTE"); +-} +typedef struct X509_req_info_st X509_REQ_INFO; +typedef struct X509_req_st X509_REQ; +typedef struct x509_cert_aux_st X509_CERT_AUX; +typedef struct x509_cinf_st X509_CINF; + +/* Flags for X509_print_ex() */ + +# define X509_FLAG_COMPAT 0 +# define X509_FLAG_NO_HEADER 1L +# define X509_FLAG_NO_VERSION (1L << 1) +# define X509_FLAG_NO_SERIAL (1L << 2) +# define X509_FLAG_NO_SIGNAME (1L << 3) +# define X509_FLAG_NO_ISSUER (1L << 4) +# define X509_FLAG_NO_VALIDITY (1L << 5) +# define X509_FLAG_NO_SUBJECT (1L << 6) +# define X509_FLAG_NO_PUBKEY (1L << 7) +# define X509_FLAG_NO_EXTENSIONS (1L << 8) +# define X509_FLAG_NO_SIGDUMP (1L << 9) +# define X509_FLAG_NO_AUX (1L << 10) +# define X509_FLAG_NO_ATTRIBUTES (1L << 11) +# define X509_FLAG_NO_IDS (1L << 12) +# define X509_FLAG_EXTENSIONS_ONLY_KID (1L << 13) + +/* Flags specific to X509_NAME_print_ex() */ + +/* The field separator information */ + +# define XN_FLAG_SEP_MASK (0xf << 16) + +# define XN_FLAG_COMPAT 0/* Traditional; use old X509_NAME_print */ +# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ +# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ +# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ +# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ + +# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ + +/* How the field name is shown */ + +# define XN_FLAG_FN_MASK (0x3 << 21) + +# define XN_FLAG_FN_SN 0/* Object short name */ +# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ +# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ +# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ + +# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ + +/* + * This determines if we dump fields we don't recognise: RFC2253 requires + * this. + */ + +# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) + +# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 + * characters */ + +/* Complete set of RFC2253 flags */ + +# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ + XN_FLAG_SEP_COMMA_PLUS | \ + XN_FLAG_DN_REV | \ + XN_FLAG_FN_SN | \ + XN_FLAG_DUMP_UNKNOWN_FIELDS) + +/* readable oneline form */ + +# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ + ASN1_STRFLGS_ESC_QUOTE | \ + XN_FLAG_SEP_CPLUS_SPC | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_SN) + +/* readable multiline form */ + +# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + XN_FLAG_SEP_MULTILINE | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_LN | \ + XN_FLAG_FN_ALIGN) + +typedef struct X509_crl_info_st X509_CRL_INFO; + +typedef struct private_key_st { + int version; + /* The PKCS#8 data types */ + X509_ALGOR *enc_algor; + ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ + /* When decrypted, the following will not be NULL */ + EVP_PKEY *dec_pkey; + /* used to encrypt and decrypt */ + int key_length; + char *key_data; + int key_free; /* true if we should auto free key_data */ + /* expanded version of 'enc_algor' */ + EVP_CIPHER_INFO cipher; +} X509_PKEY; + +typedef struct X509_info_st { + X509 *x509; + X509_CRL *crl; + X509_PKEY *x_pkey; + EVP_CIPHER_INFO enc_cipher; + int enc_len; + char *enc_data; +} X509_INFO; +{- + generate_stack_macros("X509_INFO"); +-} + +/* + * The next 2 structures and their 8 routines are used to manipulate Netscape's + * spki structures - useful if you are writing a CA web page + */ +typedef struct Netscape_spkac_st { + X509_PUBKEY *pubkey; + ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ +} NETSCAPE_SPKAC; + +typedef struct Netscape_spki_st { + NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ + X509_ALGOR sig_algor; + ASN1_BIT_STRING *signature; +} NETSCAPE_SPKI; + +/* Netscape certificate sequence structure */ +typedef struct Netscape_certificate_sequence { + ASN1_OBJECT *type; + STACK_OF(X509) *certs; +} NETSCAPE_CERT_SEQUENCE; + +/*- Unused (and iv length is wrong) +typedef struct CBCParameter_st + { + unsigned char iv[8]; + } CBC_PARAM; +*/ + +/* Password based encryption structure */ + +typedef struct PBEPARAM_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *iter; +} PBEPARAM; + +/* Password based encryption V2 structures */ + +typedef struct PBE2PARAM_st { + X509_ALGOR *keyfunc; + X509_ALGOR *encryption; +} PBE2PARAM; + +typedef struct PBKDF2PARAM_st { +/* Usually OCTET STRING but could be anything */ + ASN1_TYPE *salt; + ASN1_INTEGER *iter; + ASN1_INTEGER *keylength; + X509_ALGOR *prf; +} PBKDF2PARAM; + +#ifndef OPENSSL_NO_SCRYPT +typedef struct SCRYPT_PARAMS_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *costParameter; + ASN1_INTEGER *blockSize; + ASN1_INTEGER *parallelizationParameter; + ASN1_INTEGER *keyLength; +} SCRYPT_PARAMS; +#endif + +#ifdef __cplusplus +} +#endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define X509_EXT_PACK_UNKNOWN 1 +# define X509_EXT_PACK_STRING 2 + +# define X509_extract_key(x) X509_get_pubkey(x)/*****/ +# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) +# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) + +void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); +X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), + int (*crl_free) (X509_CRL *crl), + int (*crl_lookup) (X509_CRL *crl, + X509_REVOKED **ret, + const + ASN1_INTEGER *serial, + const + X509_NAME *issuer), + int (*crl_verify) (X509_CRL *crl, + EVP_PKEY *pk)); +void X509_CRL_METHOD_free(X509_CRL_METHOD *m); + +void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); +void *X509_CRL_get_meth_data(X509_CRL *crl); + +const char *X509_verify_cert_error_string(long n); + +int X509_verify(X509 *a, EVP_PKEY *r); +int X509_self_signed(X509 *cert, int verify_signature); + +int X509_REQ_verify_ex(X509_REQ *a, EVP_PKEY *r, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); +int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); +int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); + +NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); +char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); +EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); +int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); + +int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); + +int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); +int X509_signature_print(BIO *bp, const X509_ALGOR *alg, + const ASN1_STRING *sig); + +int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); +int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); +int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); +int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); + +int X509_pubkey_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +ASN1_OCTET_STRING *X509_digest_sig(const X509 *cert, + EVP_MD **md_used, int *md_is_fallback); +int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); + +X509 *X509_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +X509_CRL *X509_CRL_load_http(const char *url, BIO *bio, BIO *rbio, int timeout); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# include /* OSSL_HTTP_REQ_CTX_nbio_d2i */ +# define X509_http_nbio(rctx, pcert) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcert, ASN1_ITEM_rptr(X509)) +# define X509_CRL_http_nbio(rctx, pcrl) \ + OSSL_HTTP_REQ_CTX_nbio_d2i(rctx, pcrl, ASN1_ITEM_rptr(X509_CRL)) +# endif + +# ifndef OPENSSL_NO_STDIO +X509 *d2i_X509_fp(FILE *fp, X509 **x509); +int i2d_X509_fp(FILE *fp, const X509 *x509); +X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); +int i2d_X509_CRL_fp(FILE *fp, const X509_CRL *crl); +X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); +int i2d_X509_REQ_fp(FILE *fp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_fp(FILE *fp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_fp(FILE *fp, const RSA *rsa); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_fp(FILE *fp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_fp(FILE *fp, const DSA *dsa); +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_fp(FILE *fp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_fp(FILE *fp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ +X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); +int i2d_PKCS8_fp(FILE *fp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_fp(FILE *fp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_fp(FILE *fp, const X509_PUBKEY *xpk); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, const EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); +int i2d_PUBKEY_fp(FILE *fp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); +# endif + +X509 *d2i_X509_bio(BIO *bp, X509 **x509); +int i2d_X509_bio(BIO *bp, const X509 *x509); +X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); +int i2d_X509_CRL_bio(BIO *bp, const X509_CRL *crl); +X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); +int i2d_X509_REQ_bio(BIO *bp, const X509_REQ *req); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPrivateKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSAPublicKey_bio(BIO *bp, const RSA *rsa); +OSSL_DEPRECATEDIN_3_0 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +OSSL_DEPRECATEDIN_3_0 int i2d_RSA_PUBKEY_bio(BIO *bp, const RSA *rsa); +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSA_PUBKEY_bio(BIO *bp, const DSA *dsa); +OSSL_DEPRECATEDIN_3_0 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +OSSL_DEPRECATEDIN_3_0 int i2d_DSAPrivateKey_bio(BIO *bp, const DSA *dsa); +# endif +# endif + +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_EC_PUBKEY_bio(BIO *bp, const EC_KEY *eckey); +OSSL_DEPRECATEDIN_3_0 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey_bio(BIO *bp, const EC_KEY *eckey); +# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_DEPRECATED_3_0 */ + +X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); +int i2d_PKCS8_bio(BIO *bp, const X509_SIG *p8); +X509_PUBKEY *d2i_X509_PUBKEY_bio(BIO *bp, X509_PUBKEY **xpk); +int i2d_X509_PUBKEY_bio(BIO *bp, const X509_PUBKEY *xpk); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, const PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, const EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, + const char *propq); +EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); +int i2d_PUBKEY_bio(BIO *bp, const EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); + +DECLARE_ASN1_DUP_FUNCTION(X509) +DECLARE_ASN1_DUP_FUNCTION(X509_ALGOR) +DECLARE_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) +DECLARE_ASN1_DUP_FUNCTION(X509_CRL) +DECLARE_ASN1_DUP_FUNCTION(X509_EXTENSION) +DECLARE_ASN1_DUP_FUNCTION(X509_PUBKEY) +DECLARE_ASN1_DUP_FUNCTION(X509_REQ) +DECLARE_ASN1_DUP_FUNCTION(X509_REVOKED) +int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, + void *pval); +void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, + const void **ppval, const X509_ALGOR *algor); +void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); +int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); +int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); + +DECLARE_ASN1_DUP_FUNCTION(X509_NAME) +DECLARE_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) + +int X509_cmp_time(const ASN1_TIME *s, time_t *t); +int X509_cmp_current_time(const ASN1_TIME *s); +int X509_cmp_timeframe(const X509_VERIFY_PARAM *vpm, + const ASN1_TIME *start, const ASN1_TIME *end); +ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); +ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, + int offset_day, long offset_sec, time_t *t); +ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); + +const char *X509_get_default_cert_area(void); +const char *X509_get_default_cert_dir(void); +const char *X509_get_default_cert_file(void); +const char *X509_get_default_cert_dir_env(void); +const char *X509_get_default_cert_file_env(void); +const char *X509_get_default_private_dir(void); + +X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); + +DECLARE_ASN1_FUNCTIONS(X509_ALGOR) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) +DECLARE_ASN1_FUNCTIONS(X509_VAL) + +DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) + +X509_PUBKEY *X509_PUBKEY_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); +EVP_PKEY *X509_PUBKEY_get0(const X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(const X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); +long X509_get_pathlen(X509 *x); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(EVP_PKEY, PUBKEY) +EVP_PKEY *d2i_PUBKEY_ex(EVP_PKEY **a, const unsigned char **pp, long length, + OSSL_LIB_CTX *libctx, const char *propq); +# ifndef OPENSSL_NO_DEPRECATED_3_0 +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,RSA, RSA_PUBKEY) +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_DSA +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0,DSA, DSA_PUBKEY) +# endif +# endif +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# ifndef OPENSSL_NO_EC +DECLARE_ASN1_ENCODE_FUNCTIONS_only_attr(OSSL_DEPRECATEDIN_3_0, EC_KEY, EC_PUBKEY) +# endif +# endif + +DECLARE_ASN1_FUNCTIONS(X509_SIG) +void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg, + const ASN1_OCTET_STRING **pdigest); +void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, + ASN1_OCTET_STRING **pdigest); + +DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) +DECLARE_ASN1_FUNCTIONS(X509_REQ) +X509_REQ *X509_REQ_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) +X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); + +DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) + +DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) + +DECLARE_ASN1_FUNCTIONS(X509_NAME) + +int X509_NAME_set(X509_NAME **xn, const X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(X509_CINF) +DECLARE_ASN1_FUNCTIONS(X509) +X509 *X509_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) + +#define X509_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) +int X509_set_ex_data(X509 *r, int idx, void *arg); +void *X509_get_ex_data(const X509 *r, int idx); +DECLARE_ASN1_ENCODE_FUNCTIONS_only(X509,X509_AUX) + +int i2d_re_X509_tbs(X509 *x, unsigned char **pp); + +int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, + int *secbits, uint32_t *flags); +void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, + int secbits, uint32_t flags); + +int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, + uint32_t *flags); + +void X509_get0_signature(const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg, const X509 *x); +int X509_get_signature_nid(const X509 *x); + +void X509_set0_distinguishing_id(X509 *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_get0_distinguishing_id(X509 *x); +void X509_REQ_set0_distinguishing_id(X509_REQ *x, ASN1_OCTET_STRING *d_id); +ASN1_OCTET_STRING *X509_REQ_get0_distinguishing_id(X509_REQ *x); + +int X509_alias_set1(X509 *x, const unsigned char *name, int len); +int X509_keyid_set1(X509 *x, const unsigned char *id, int len); +unsigned char *X509_alias_get0(X509 *x, int *len); +unsigned char *X509_keyid_get0(X509 *x, int *len); + +DECLARE_ASN1_FUNCTIONS(X509_REVOKED) +DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) +DECLARE_ASN1_FUNCTIONS(X509_CRL) +X509_CRL *X509_CRL_new_ex(OSSL_LIB_CTX *libctx, const char *propq); + +int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +int X509_CRL_get0_by_serial(X509_CRL *crl, + X509_REVOKED **ret, const ASN1_INTEGER *serial); +int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); + +X509_PKEY *X509_PKEY_new(void); +void X509_PKEY_free(X509_PKEY *a); + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) + +X509_INFO *X509_INFO_new(void); +void X509_INFO_free(X509_INFO *a); +char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); + +#ifndef OPENSSL_NO_DEPRECATED_3_0 +OSSL_DEPRECATEDIN_3_0 +int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); +OSSL_DEPRECATEDIN_3_0 +int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, + unsigned char *md, unsigned int *len); +OSSL_DEPRECATEDIN_3_0 +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey, + const EVP_MD *type); +#endif +int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, + unsigned char *md, unsigned int *len); +int ASN1_item_verify(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey); +int ASN1_item_verify_ctx(const ASN1_ITEM *it, const X509_ALGOR *alg, + const ASN1_BIT_STRING *signature, const void *data, + EVP_MD_CTX *ctx); +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, + ASN1_BIT_STRING *signature, const void *data, + EVP_PKEY *pkey, const EVP_MD *md); +int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + const void *data, EVP_MD_CTX *ctx); + +#define X509_VERSION_1 0 +#define X509_VERSION_2 1 +#define X509_VERSION_3 2 + +long X509_get_version(const X509 *x); +int X509_set_version(X509 *x, long version); +int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +ASN1_INTEGER *X509_get_serialNumber(X509 *x); +const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); +int X509_set_issuer_name(X509 *x, const X509_NAME *name); +X509_NAME *X509_get_issuer_name(const X509 *a); +int X509_set_subject_name(X509 *x, const X509_NAME *name); +X509_NAME *X509_get_subject_name(const X509 *a); +const ASN1_TIME * X509_get0_notBefore(const X509 *x); +ASN1_TIME *X509_getm_notBefore(const X509 *x); +int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); +const ASN1_TIME *X509_get0_notAfter(const X509 *x); +ASN1_TIME *X509_getm_notAfter(const X509 *x); +int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +int X509_up_ref(X509 *x); +int X509_get_signature_type(const X509 *x); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_get_notBefore X509_getm_notBefore +# define X509_get_notAfter X509_getm_notAfter +# define X509_set_notBefore X509_set1_notBefore +# define X509_set_notAfter X509_set1_notAfter +#endif + + +/* + * This one is only used so that a binary form can output, as in + * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf) + */ +X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); +const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); +void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid, + const ASN1_BIT_STRING **psuid); +const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); + +EVP_PKEY *X509_get0_pubkey(const X509 *x); +EVP_PKEY *X509_get_pubkey(X509 *x); +ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); + +#define X509_REQ_VERSION_1 0 + +long X509_REQ_get_version(const X509_REQ *req); +int X509_REQ_set_version(X509_REQ *x, long version); +X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); +int X509_REQ_set_subject_name(X509_REQ *req, const X509_NAME *name); +void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig); +int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg); +int X509_REQ_get_signature_nid(const X509_REQ *req); +int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); +int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req); +int X509_REQ_extension_nid(int nid); +int *X509_REQ_get_extension_nids(void); +void X509_REQ_set_extension_nids(int *nids); +STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); +int X509_REQ_add_extensions_nid(X509_REQ *req, + const STACK_OF(X509_EXTENSION) *exts, int nid); +int X509_REQ_add_extensions(X509_REQ *req, const STACK_OF(X509_EXTENSION) *ext); +int X509_REQ_get_attr_count(const X509_REQ *req); +int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); +int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); +X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); +int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); +int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_NID(X509_REQ *req, + int nid, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_txt(X509_REQ *req, + const char *attrname, int type, + const unsigned char *bytes, int len); + +#define X509_CRL_VERSION_1 0 +#define X509_CRL_VERSION_2 1 + +int X509_CRL_set_version(X509_CRL *x, long version); +int X509_CRL_set_issuer_name(X509_CRL *x, const X509_NAME *name); +int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_sort(X509_CRL *crl); +int X509_CRL_up_ref(X509_CRL *crl); + +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate +# define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate +#endif + +long X509_CRL_get_version(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl); +OSSL_DEPRECATEDIN_1_1_0 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl); +#endif +X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); +const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); +STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); +void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_CRL_get_signature_nid(const X509_CRL *crl); +int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp); + +const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x); +int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x); +int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); +const STACK_OF(X509_EXTENSION) * +X509_REVOKED_get0_extensions(const X509_REVOKED *r); + +X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, + EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); + +int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); + +int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey); +int X509_chain_check_suiteb(int *perror_depth, + X509 *x, STACK_OF(X509) *chain, + unsigned long flags); +int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); +STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); + +int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_and_serial_hash(X509 *a); + +int X509_issuer_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_name_hash(X509 *a); + +int X509_subject_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_subject_name_hash(X509 *x); + +# ifndef OPENSSL_NO_MD5 +unsigned long X509_issuer_name_hash_old(X509 *a); +unsigned long X509_subject_name_hash_old(X509 *x); +# endif + +# define X509_ADD_FLAG_DEFAULT 0 +# define X509_ADD_FLAG_UP_REF 0x1 +# define X509_ADD_FLAG_PREPEND 0x2 +# define X509_ADD_FLAG_NO_DUP 0x4 +# define X509_ADD_FLAG_NO_SS 0x8 +int X509_add_cert(STACK_OF(X509) *sk, X509 *cert, int flags); +int X509_add_certs(STACK_OF(X509) *sk, STACK_OF(X509) *certs, int flags); + +int X509_cmp(const X509 *a, const X509 *b); +int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); +#ifndef OPENSSL_NO_DEPRECATED_3_0 +# define X509_NAME_hash(x) X509_NAME_hash_ex(x, NULL, NULL, NULL) +OSSL_DEPRECATEDIN_3_0 int X509_certificate_type(const X509 *x, + const EVP_PKEY *pubkey); +#endif +unsigned long X509_NAME_hash_ex(const X509_NAME *x, OSSL_LIB_CTX *libctx, + const char *propq, int *ok); +unsigned long X509_NAME_hash_old(const X509_NAME *x); + +int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); +int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); +int X509_aux_print(BIO *out, X509 *x, int indent); +# ifndef OPENSSL_NO_STDIO +int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print_fp(FILE *bp, X509 *x); +int X509_CRL_print_fp(FILE *bp, X509_CRL *x); +int X509_REQ_print_fp(FILE *bp, X509_REQ *req); +int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, + unsigned long flags); +# endif + +int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); +int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, + unsigned long flags); +int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print(BIO *bp, X509 *x); +int X509_ocspid_print(BIO *bp, X509 *x); +int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag); +int X509_CRL_print(BIO *bp, X509_CRL *x); +int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, + unsigned long cflag); +int X509_REQ_print(BIO *bp, X509_REQ *req); + +int X509_NAME_entry_count(const X509_NAME *name); +int X509_NAME_get_text_by_NID(const X509_NAME *name, int nid, + char *buf, int len); +int X509_NAME_get_text_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, + char *buf, int len); + +/* + * NOTE: you should be passing -1, not 0 as lastpos. The functions that use + * lastpos, search after that position on. + */ +int X509_NAME_get_index_by_NID(const X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(const X509_NAME *name, const ASN1_OBJECT *obj, + int lastpos); +X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); +X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); +int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, + int loc, int set); +int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len, int loc, + int set); +int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, + const char *field, int type, + const unsigned char *bytes, + int len); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, + int type, + const unsigned char *bytes, + int len); +int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, + int len); +int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj); +int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, + const unsigned char *bytes, int len); +ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); +ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); +int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); + +int X509_NAME_get0_der(const X509_NAME *nm, const unsigned char **pder, + size_t *pderlen); + +int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); +int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, + int nid, int lastpos); +int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, + const ASN1_OBJECT *obj, int lastpos); +int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, + int crit, int lastpos); +X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); +X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); +STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, + X509_EXTENSION *ex, int loc); + +int X509_get_ext_count(const X509 *x); +int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); +int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); +int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); +X509_EXTENSION *X509_get_ext(const X509 *x, int loc); +X509_EXTENSION *X509_delete_ext(X509 *x, int loc); +int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); +void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx); +int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_CRL_get_ext_count(const X509_CRL *x); +int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); +int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); +X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc); +X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); +int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); +void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx); +int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_REVOKED_get_ext_count(const X509_REVOKED *x); +int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos); +int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, + int lastpos); +X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc); +X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); +int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); +void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit, + int *idx); +int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, + unsigned long flags); + +X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, + int nid, int crit, + ASN1_OCTET_STRING *data); +X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, + const ASN1_OBJECT *obj, int crit, + ASN1_OCTET_STRING *data); +int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj); +int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); +int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); +ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); +ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); +int X509_EXTENSION_get_critical(const X509_EXTENSION *ex); + +int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); +int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, + int lastpos); +int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); +X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, + X509_ATTRIBUTE *attr); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) + **x, const ASN1_OBJECT *obj, + int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) + **x, int nid, int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) + **x, const char *attrname, + int type, + const unsigned char *bytes, + int len); +void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x, + const ASN1_OBJECT *obj, int lastpos, int type); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, + const ASN1_OBJECT *obj, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, + const char *atrname, int type, + const unsigned char *bytes, + int len); +int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); +int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, + const void *data, int len); +void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, + void *data); +int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr); +ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); +ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); + +int EVP_PKEY_get_attr_count(const EVP_PKEY *key); +int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); +int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); +X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); +int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); +int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, + int nid, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, + const char *attrname, int type, + const unsigned char *bytes, int len); + +/* lookup a cert from a X509 STACK */ +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, const X509_NAME *name, + const ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, const X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(PBEPARAM) +DECLARE_ASN1_FUNCTIONS(PBE2PARAM) +DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) +#ifndef OPENSSL_NO_SCRYPT +DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) +#endif + +int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen); +int PKCS5_pbe_set0_algor_ex(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + +X509_ALGOR *PKCS5_pbe_set(int alg, int iter, + const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe_set_ex(int alg, int iter, + const unsigned char *salt, int saltlen, + OSSL_LIB_CTX *libctx); + +X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid); +X509_ALGOR *PKCS5_pbe2_set_iv_ex(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid, + OSSL_LIB_CTX *libctx); + +#ifndef OPENSSL_NO_SCRYPT +X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, + const unsigned char *salt, int saltlen, + unsigned char *aiv, uint64_t N, uint64_t r, + uint64_t p); +#endif + +X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen); +X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen, + OSSL_LIB_CTX *libctx); + +/* PKCS#8 utilities */ + +DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) + +EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); +EVP_PKEY *EVP_PKCS82PKEY_ex(const PKCS8_PRIV_KEY_INFO *p8, OSSL_LIB_CTX *libctx, + const char *propq); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(const EVP_PKEY *pkey); + +int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, + int version, int ptype, void *pval, + unsigned char *penc, int penclen); +int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8); + +const STACK_OF(X509_ATTRIBUTE) * +PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr(PKCS8_PRIV_KEY_INFO *p8, X509_ATTRIBUTE *attr); +int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, + const unsigned char *bytes, int len); +int PKCS8_pkey_add1_attr_by_OBJ(PKCS8_PRIV_KEY_INFO *p8, const ASN1_OBJECT *obj, + int type, const unsigned char *bytes, int len); + + +int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, + int ptype, void *pval, + unsigned char *penc, int penclen); +int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, const X509_PUBKEY *pub); +int X509_PUBKEY_eq(const X509_PUBKEY *a, const X509_PUBKEY *b); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h b/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h index 25c79f1b..29b0e147 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h @@ -1,19 +1,30 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509_vfy.h.in * - * Licensed under the OpenSSL license (the "License"). You may not use + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509_VFY_H -# define HEADER_X509_VFY_H + + +#ifndef OPENSSL_X509_VFY_H +# define OPENSSL_X509_VFY_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_VFY_H +# endif /* * Protect against recursion, x509.h and x509_vfy.h each include the other. */ -# ifndef HEADER_X509_H +# ifndef OPENSSL_X509_H # include # endif @@ -49,18 +60,190 @@ typedef enum { X509_LU_X509, X509_LU_CRL } X509_LOOKUP_TYPE; -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 #define X509_LU_RETRY -1 #define X509_LU_FAIL 0 #endif -DEFINE_STACK_OF(X509_LOOKUP) -DEFINE_STACK_OF(X509_OBJECT) -DEFINE_STACK_OF(X509_VERIFY_PARAM) +SKM_DEFINE_STACK_OF_INTERNAL(X509_LOOKUP, X509_LOOKUP, X509_LOOKUP) +#define sk_X509_LOOKUP_num(sk) OPENSSL_sk_num(ossl_check_const_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_value(sk, idx) ((X509_LOOKUP *)OPENSSL_sk_value(ossl_check_const_X509_LOOKUP_sk_type(sk), (idx))) +#define sk_X509_LOOKUP_new(cmp) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new(ossl_check_X509_LOOKUP_compfunc_type(cmp))) +#define sk_X509_LOOKUP_new_null() ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_null()) +#define sk_X509_LOOKUP_new_reserve(cmp, n) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_new_reserve(ossl_check_X509_LOOKUP_compfunc_type(cmp), (n))) +#define sk_X509_LOOKUP_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_LOOKUP_sk_type(sk), (n)) +#define sk_X509_LOOKUP_free(sk) OPENSSL_sk_free(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_zero(sk) OPENSSL_sk_zero(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_delete(sk, i) ((X509_LOOKUP *)OPENSSL_sk_delete(ossl_check_X509_LOOKUP_sk_type(sk), (i))) +#define sk_X509_LOOKUP_delete_ptr(sk, ptr) ((X509_LOOKUP *)OPENSSL_sk_delete_ptr(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr))) +#define sk_X509_LOOKUP_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_pop(sk) ((X509_LOOKUP *)OPENSSL_sk_pop(ossl_check_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_shift(sk) ((X509_LOOKUP *)OPENSSL_sk_shift(ossl_check_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_LOOKUP_sk_type(sk),ossl_check_X509_LOOKUP_freefunc_type(freefunc)) +#define sk_X509_LOOKUP_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), (idx)) +#define sk_X509_LOOKUP_set(sk, idx, ptr) ((X509_LOOKUP *)OPENSSL_sk_set(ossl_check_X509_LOOKUP_sk_type(sk), (idx), ossl_check_X509_LOOKUP_type(ptr))) +#define sk_X509_LOOKUP_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr)) +#define sk_X509_LOOKUP_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_type(ptr), pnum) +#define sk_X509_LOOKUP_sort(sk) OPENSSL_sk_sort(ossl_check_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_LOOKUP_sk_type(sk)) +#define sk_X509_LOOKUP_dup(sk) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_dup(ossl_check_const_X509_LOOKUP_sk_type(sk))) +#define sk_X509_LOOKUP_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_LOOKUP) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_copyfunc_type(copyfunc), ossl_check_X509_LOOKUP_freefunc_type(freefunc))) +#define sk_X509_LOOKUP_set_cmp_func(sk, cmp) ((sk_X509_LOOKUP_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_LOOKUP_sk_type(sk), ossl_check_X509_LOOKUP_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_OBJECT, X509_OBJECT, X509_OBJECT) +#define sk_X509_OBJECT_num(sk) OPENSSL_sk_num(ossl_check_const_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_value(sk, idx) ((X509_OBJECT *)OPENSSL_sk_value(ossl_check_const_X509_OBJECT_sk_type(sk), (idx))) +#define sk_X509_OBJECT_new(cmp) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new(ossl_check_X509_OBJECT_compfunc_type(cmp))) +#define sk_X509_OBJECT_new_null() ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_null()) +#define sk_X509_OBJECT_new_reserve(cmp, n) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_new_reserve(ossl_check_X509_OBJECT_compfunc_type(cmp), (n))) +#define sk_X509_OBJECT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_OBJECT_sk_type(sk), (n)) +#define sk_X509_OBJECT_free(sk) OPENSSL_sk_free(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_zero(sk) OPENSSL_sk_zero(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_delete(sk, i) ((X509_OBJECT *)OPENSSL_sk_delete(ossl_check_X509_OBJECT_sk_type(sk), (i))) +#define sk_X509_OBJECT_delete_ptr(sk, ptr) ((X509_OBJECT *)OPENSSL_sk_delete_ptr(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr))) +#define sk_X509_OBJECT_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_pop(sk) ((X509_OBJECT *)OPENSSL_sk_pop(ossl_check_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_shift(sk) ((X509_OBJECT *)OPENSSL_sk_shift(ossl_check_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_OBJECT_sk_type(sk),ossl_check_X509_OBJECT_freefunc_type(freefunc)) +#define sk_X509_OBJECT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), (idx)) +#define sk_X509_OBJECT_set(sk, idx, ptr) ((X509_OBJECT *)OPENSSL_sk_set(ossl_check_X509_OBJECT_sk_type(sk), (idx), ossl_check_X509_OBJECT_type(ptr))) +#define sk_X509_OBJECT_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr)) +#define sk_X509_OBJECT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_type(ptr), pnum) +#define sk_X509_OBJECT_sort(sk) OPENSSL_sk_sort(ossl_check_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_OBJECT_sk_type(sk)) +#define sk_X509_OBJECT_dup(sk) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_dup(ossl_check_const_X509_OBJECT_sk_type(sk))) +#define sk_X509_OBJECT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_OBJECT) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_copyfunc_type(copyfunc), ossl_check_X509_OBJECT_freefunc_type(freefunc))) +#define sk_X509_OBJECT_set_cmp_func(sk, cmp) ((sk_X509_OBJECT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_OBJECT_sk_type(sk), ossl_check_X509_OBJECT_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(X509_VERIFY_PARAM, X509_VERIFY_PARAM, X509_VERIFY_PARAM) +#define sk_X509_VERIFY_PARAM_num(sk) OPENSSL_sk_num(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_value(sk, idx) ((X509_VERIFY_PARAM *)OPENSSL_sk_value(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), (idx))) +#define sk_X509_VERIFY_PARAM_new(cmp) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) +#define sk_X509_VERIFY_PARAM_new_null() ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_null()) +#define sk_X509_VERIFY_PARAM_new_reserve(cmp, n) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_new_reserve(ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp), (n))) +#define sk_X509_VERIFY_PARAM_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (n)) +#define sk_X509_VERIFY_PARAM_free(sk) OPENSSL_sk_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_zero(sk) OPENSSL_sk_zero(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_delete(sk, i) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (i))) +#define sk_X509_VERIFY_PARAM_delete_ptr(sk, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_delete_ptr(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr))) +#define sk_X509_VERIFY_PARAM_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_pop(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_pop(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_shift(sk) ((X509_VERIFY_PARAM *)OPENSSL_sk_shift(ossl_check_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_VERIFY_PARAM_sk_type(sk),ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc)) +#define sk_X509_VERIFY_PARAM_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), (idx)) +#define sk_X509_VERIFY_PARAM_set(sk, idx, ptr) ((X509_VERIFY_PARAM *)OPENSSL_sk_set(ossl_check_X509_VERIFY_PARAM_sk_type(sk), (idx), ossl_check_X509_VERIFY_PARAM_type(ptr))) +#define sk_X509_VERIFY_PARAM_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr)) +#define sk_X509_VERIFY_PARAM_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_type(ptr), pnum) +#define sk_X509_VERIFY_PARAM_sort(sk) OPENSSL_sk_sort(ossl_check_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk)) +#define sk_X509_VERIFY_PARAM_dup(sk) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_dup(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk))) +#define sk_X509_VERIFY_PARAM_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_VERIFY_PARAM) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_copyfunc_type(copyfunc), ossl_check_X509_VERIFY_PARAM_freefunc_type(freefunc))) +#define sk_X509_VERIFY_PARAM_set_cmp_func(sk, cmp) ((sk_X509_VERIFY_PARAM_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_VERIFY_PARAM_sk_type(sk), ossl_check_X509_VERIFY_PARAM_compfunc_type(cmp))) + + +/* This is used for a table of trust checking functions */ +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; +SKM_DEFINE_STACK_OF_INTERNAL(X509_TRUST, X509_TRUST, X509_TRUST) +#define sk_X509_TRUST_num(sk) OPENSSL_sk_num(ossl_check_const_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_value(sk, idx) ((X509_TRUST *)OPENSSL_sk_value(ossl_check_const_X509_TRUST_sk_type(sk), (idx))) +#define sk_X509_TRUST_new(cmp) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new(ossl_check_X509_TRUST_compfunc_type(cmp))) +#define sk_X509_TRUST_new_null() ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_null()) +#define sk_X509_TRUST_new_reserve(cmp, n) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_new_reserve(ossl_check_X509_TRUST_compfunc_type(cmp), (n))) +#define sk_X509_TRUST_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_TRUST_sk_type(sk), (n)) +#define sk_X509_TRUST_free(sk) OPENSSL_sk_free(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_zero(sk) OPENSSL_sk_zero(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_delete(sk, i) ((X509_TRUST *)OPENSSL_sk_delete(ossl_check_X509_TRUST_sk_type(sk), (i))) +#define sk_X509_TRUST_delete_ptr(sk, ptr) ((X509_TRUST *)OPENSSL_sk_delete_ptr(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr))) +#define sk_X509_TRUST_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_pop(sk) ((X509_TRUST *)OPENSSL_sk_pop(ossl_check_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_shift(sk) ((X509_TRUST *)OPENSSL_sk_shift(ossl_check_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_TRUST_sk_type(sk),ossl_check_X509_TRUST_freefunc_type(freefunc)) +#define sk_X509_TRUST_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), (idx)) +#define sk_X509_TRUST_set(sk, idx, ptr) ((X509_TRUST *)OPENSSL_sk_set(ossl_check_X509_TRUST_sk_type(sk), (idx), ossl_check_X509_TRUST_type(ptr))) +#define sk_X509_TRUST_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr)) +#define sk_X509_TRUST_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_type(ptr), pnum) +#define sk_X509_TRUST_sort(sk) OPENSSL_sk_sort(ossl_check_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_TRUST_sk_type(sk)) +#define sk_X509_TRUST_dup(sk) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_dup(ossl_check_const_X509_TRUST_sk_type(sk))) +#define sk_X509_TRUST_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_TRUST) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_copyfunc_type(copyfunc), ossl_check_X509_TRUST_freefunc_type(freefunc))) +#define sk_X509_TRUST_set_cmp_func(sk, cmp) ((sk_X509_TRUST_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_TRUST_sk_type(sk), ossl_check_X509_TRUST_compfunc_type(cmp))) + + +/* standard trust ids */ +# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard rejection OID and as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* check_trust return codes */ +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +int X509_TRUST_set(int *t, int trust); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const X509_TRUST *xp); + +int X509_trusted(const X509 *x); +int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); + +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_check_trust(X509 *x, int id, int flags); + +int X509_verify_cert(X509_STORE_CTX *ctx); +int X509_STORE_CTX_verify(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs, + X509_STORE *store, int with_self_signed, + OSSL_LIB_CTX *libctx, const char *propq); int X509_STORE_set_depth(X509_STORE *store, int depth); typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); @@ -73,13 +256,14 @@ typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); -typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); -typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, - X509_NAME *nm); +typedef STACK_OF(X509) + *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef STACK_OF(X509_CRL) + *(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx, + const X509_NAME *nm); typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); - void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_STORE_CTX_set_app_data(ctx,data) \ @@ -89,6 +273,8 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_L_FILE_LOAD 1 # define X509_L_ADD_DIR 2 +# define X509_L_ADD_STORE 3 +# define X509_L_LOAD_STORE 4 # define X509_LOOKUP_load_file(x,name,type) \ X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) @@ -96,102 +282,138 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_LOOKUP_add_dir(x,name,type) \ X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) -# define X509_V_OK 0 -# define X509_V_ERR_UNSPECIFIED 1 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 -# define X509_V_ERR_UNABLE_TO_GET_CRL 3 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 -# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 -# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 -# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 -# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 -# define X509_V_ERR_CERT_NOT_YET_VALID 9 -# define X509_V_ERR_CERT_HAS_EXPIRED 10 -# define X509_V_ERR_CRL_NOT_YET_VALID 11 -# define X509_V_ERR_CRL_HAS_EXPIRED 12 -# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 -# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 -# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 -# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 -# define X509_V_ERR_OUT_OF_MEM 17 -# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 -# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 -# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 -# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 -# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 -# define X509_V_ERR_CERT_REVOKED 23 -# define X509_V_ERR_INVALID_CA 24 -# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 -# define X509_V_ERR_INVALID_PURPOSE 26 -# define X509_V_ERR_CERT_UNTRUSTED 27 -# define X509_V_ERR_CERT_REJECTED 28 -/* These are 'informational' when looking for issuer cert */ -# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 -# define X509_V_ERR_AKID_SKID_MISMATCH 30 -# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 -# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 -# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 -# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 -# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 -# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 -# define X509_V_ERR_INVALID_NON_CA 37 -# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 -# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 -# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 -# define X509_V_ERR_INVALID_EXTENSION 41 -# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 -# define X509_V_ERR_NO_EXPLICIT_POLICY 43 -# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 -# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 -# define X509_V_ERR_UNNESTED_RESOURCE 46 -# define X509_V_ERR_PERMITTED_VIOLATION 47 -# define X509_V_ERR_EXCLUDED_VIOLATION 48 -# define X509_V_ERR_SUBTREE_MINMAX 49 -/* The application is not happy */ -# define X509_V_ERR_APPLICATION_VERIFICATION 50 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 -# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 -# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 -# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 -/* Another issuer check debug option */ -# define X509_V_ERR_PATH_LOOP 55 -/* Suite B mode algorithm violation */ -# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 -# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 -# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 -# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 -# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 -# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 -/* Host, email and IP check errors */ -# define X509_V_ERR_HOSTNAME_MISMATCH 62 -# define X509_V_ERR_EMAIL_MISMATCH 63 -# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 -/* DANE TLSA errors */ -# define X509_V_ERR_DANE_NO_MATCH 65 -/* security level errors */ -# define X509_V_ERR_EE_KEY_TOO_SMALL 66 -# define X509_V_ERR_CA_KEY_TOO_SMALL 67 -# define X509_V_ERR_CA_MD_TOO_WEAK 68 -/* Caller error */ -# define X509_V_ERR_INVALID_CALL 69 -/* Issuer lookup error */ -# define X509_V_ERR_STORE_LOOKUP 70 -/* Certificate transparency */ -# define X509_V_ERR_NO_VALID_SCTS 71 +# define X509_LOOKUP_add_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_STORE,(name),0,NULL) -# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 +# define X509_LOOKUP_load_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_LOAD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_file_ex(x, name, type, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_FILE_LOAD, (name), (long)(type), NULL,\ + (libctx), (propq)) + +# define X509_LOOKUP_load_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_LOAD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_LOOKUP_add_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 + +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 /* OCSP status errors */ -# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ -# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ -# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ -# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 76 -# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 77 -# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 78 -# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 79 +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ + +# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 76 +# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 77 + +/* Errors in case a check in X509_V_FLAG_X509_STRICT mode fails */ +# define X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY 78 +# define X509_V_ERR_INVALID_CA 79 +# define X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA 80 +# define X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN 81 +# define X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA 82 +# define X509_V_ERR_ISSUER_NAME_EMPTY 83 +# define X509_V_ERR_SUBJECT_NAME_EMPTY 84 +# define X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER 85 +# define X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER 86 +# define X509_V_ERR_EMPTY_SUBJECT_ALT_NAME 87 +# define X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL 88 +# define X509_V_ERR_CA_BCONS_NOT_CRITICAL 89 +# define X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL 90 +# define X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL 91 +# define X509_V_ERR_CA_CERT_MISSING_KEY_USAGE 92 +# define X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3 93 +# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94 /* Certificate verify flags */ - -# if OPENSSL_API_COMPAT < 0x10100000L +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ # endif /* Use check time instead of current time */ @@ -254,10 +476,10 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); | X509_V_FLAG_INHIBIT_MAP) int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, X509_OBJECT *x); int X509_OBJECT_up_ref_count(X509_OBJECT *a); @@ -266,102 +488,106 @@ void X509_OBJECT_free(X509_OBJECT *a); X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); -X509_CRL *X509_OBJECT_get0_X509_CRL(X509_OBJECT *a); +X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); void X509_STORE_free(X509_STORE *v); int X509_STORE_lock(X509_STORE *ctx); int X509_STORE_unlock(X509_STORE *ctx); int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); - -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); -STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); +STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, + const X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st, + const X509_NAME *nm); int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); +int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); +X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); #define X509_STORE_set_verify_func(ctx, func) \ X509_STORE_set_verify((ctx),(func)) void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_fn verify); -X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(const X509_STORE *ctx); void X509_STORE_set_verify_cb(X509_STORE *ctx, X509_STORE_CTX_verify_cb verify_cb); # define X509_STORE_set_verify_cb_func(ctx,func) \ X509_STORE_set_verify_cb((ctx),(func)) -X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE *ctx); +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(const X509_STORE *ctx); void X509_STORE_set_get_issuer(X509_STORE *ctx, X509_STORE_CTX_get_issuer_fn get_issuer); -X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *ctx); void X509_STORE_set_check_issued(X509_STORE *ctx, X509_STORE_CTX_check_issued_fn check_issued); -X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *ctx); void X509_STORE_set_check_revocation(X509_STORE *ctx, X509_STORE_CTX_check_revocation_fn check_revocation); -X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE *ctx); +X509_STORE_CTX_check_revocation_fn + X509_STORE_get_check_revocation(const X509_STORE *ctx); void X509_STORE_set_get_crl(X509_STORE *ctx, X509_STORE_CTX_get_crl_fn get_crl); -X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *ctx); void X509_STORE_set_check_crl(X509_STORE *ctx, X509_STORE_CTX_check_crl_fn check_crl); -X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *ctx); void X509_STORE_set_cert_crl(X509_STORE *ctx, X509_STORE_CTX_cert_crl_fn cert_crl); -X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *ctx); void X509_STORE_set_check_policy(X509_STORE *ctx, X509_STORE_CTX_check_policy_fn check_policy); -X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *ctx); void X509_STORE_set_lookup_certs(X509_STORE *ctx, X509_STORE_CTX_lookup_certs_fn lookup_certs); -X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *ctx); void X509_STORE_set_lookup_crls(X509_STORE *ctx, X509_STORE_CTX_lookup_crls_fn lookup_crls); #define X509_STORE_set_lookup_crls_cb(ctx, func) \ X509_STORE_set_lookup_crls((ctx), (func)) -X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(const X509_STORE *ctx); void X509_STORE_set_cleanup(X509_STORE *ctx, X509_STORE_CTX_cleanup_fn cleanup); -X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *ctx); #define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(X509_STORE *ctx, int idx); +void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); X509_STORE_CTX *X509_STORE_CTX_new(void); int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); void X509_STORE_CTX_free(X509_STORE_CTX *ctx); -int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, - X509 *x509, STACK_OF(X509) *chain); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store, + X509 *target, STACK_OF(X509) *untrusted); void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); -X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); -X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); -STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx); +X509_STORE *X509_STORE_CTX_get0_store(const X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_cb verify); -X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); -X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); -X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); -X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); -X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(const X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 # define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain # define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted # define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack @@ -377,17 +603,28 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); X509_LOOKUP_METHOD *X509_LOOKUP_file(void); +X509_LOOKUP_METHOD *X509_LOOKUP_store(void); typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret); +typedef int (*X509_LOOKUP_ctrl_ex_fn)( + X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret, + OSSL_LIB_CTX *libctx, const char *propq); + typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, + const X509_NAME *name, X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_subject_ex_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, + const char *propq); typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, - ASN1_INTEGER *serial, + const X509_NAME *name, + const ASN1_INTEGER *serial, X509_OBJECT *ret); typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, @@ -451,26 +688,37 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); -int X509_STORE_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); +int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, - X509_NAME *name); + const X509_NAME *name); int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret); +int X509_LOOKUP_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, + char **ret, OSSL_LIB_CTX *libctx, const char *propq); int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); void X509_LOOKUP_free(X509_LOOKUP *ctx); int X509_LOOKUP_init(X509_LOOKUP *ctx); int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, X509_OBJECT *ret); + const X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_subject_ex(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, const char *propq); int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, - X509_NAME *name, ASN1_INTEGER *serial, + const X509_NAME *name, + const ASN1_INTEGER *serial, X509_OBJECT *ret); int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, const unsigned char *bytes, int len, @@ -482,28 +730,42 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); +int X509_STORE_load_file(X509_STORE *ctx, const char *file); +int X509_STORE_load_path(X509_STORE *ctx, const char *path); +int X509_STORE_load_store(X509_STORE *ctx, const char *store); int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, const char *dir); + const char *file, + const char *dir); int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file_ex(X509_STORE *ctx, const char *file, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_store_ex(X509_STORE *ctx, const char *store, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_locations_ex(X509_STORE *ctx, const char *file, + const char *dir, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, + const char *propq); + #define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); -void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); -int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); +void *X509_STORE_CTX_get_ex_data(const X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); -int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); -X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); -X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); -X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); -X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx); -STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); -void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); +X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target); void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); -void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, @@ -512,11 +774,11 @@ void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, time_t t); -X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); -int X509_STORE_CTX_get_num_untrusted(X509_STORE_CTX *ctx); +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx); -X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx); void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); @@ -540,7 +802,7 @@ int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, unsigned long flags); int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, unsigned long flags); -unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); +unsigned long X509_VERIFY_PARAM_get_flags(const X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); @@ -556,6 +818,7 @@ int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, uint32_t flags); uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); +char *X509_VERIFY_PARAM_get0_host(X509_VERIFY_PARAM *param, int idx); int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen); int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, @@ -563,10 +826,12 @@ int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned int flags); unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); -char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_peername(const X509_VERIFY_PARAM *param); void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_email(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, const char *email, size_t emaillen); +char *X509_VERIFY_PARAM_get1_ip_asc(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, const unsigned char *ip, size_t iplen); int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, @@ -605,26 +870,23 @@ int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, int i); -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const - X509_POLICY_TREE - *tree); +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree); -STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const - X509_POLICY_TREE - *tree); +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree); int X509_policy_level_node_count(X509_POLICY_LEVEL *level); -X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, +X509_POLICY_NODE *X509_policy_level_get0_node(const X509_POLICY_LEVEL *level, int i); const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); -STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const - X509_POLICY_NODE - *node); -const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE - *node); +STACK_OF(POLICYQUALINFO) + *X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node); +const X509_POLICY_NODE + *X509_policy_node_get0_parent(const X509_POLICY_NODE *node); #ifdef __cplusplus } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h.in new file mode 100644 index 00000000..80f18bd7 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h.in @@ -0,0 +1,797 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509_VFY_H +# define OPENSSL_X509_VFY_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509_VFY_H +# endif + +/* + * Protect against recursion, x509.h and x509_vfy.h each include the other. + */ +# ifndef OPENSSL_X509_H +# include +# endif + +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- +SSL_CTX -> X509_STORE + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + +SSL -> X509_STORE_CTX + ->X509_STORE + +The X509_STORE holds the tables etc for verification stuff. +A X509_STORE_CTX is used while validating a single certificate. +The X509_STORE has X509_LOOKUPs for looking up certs. +The X509_STORE then calls a function to actually verify the +certificate chain. +*/ + +typedef enum { + X509_LU_NONE = 0, + X509_LU_X509, X509_LU_CRL +} X509_LOOKUP_TYPE; + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +#define X509_LU_RETRY -1 +#define X509_LU_FAIL 0 +#endif + +{- + generate_stack_macros("X509_LOOKUP") + .generate_stack_macros("X509_OBJECT") + .generate_stack_macros("X509_VERIFY_PARAM"); +-} + +/* This is used for a table of trust checking functions */ +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; +{- + generate_stack_macros("X509_TRUST"); +-} + +/* standard trust ids */ +# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard rejection OID and as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* check_trust return codes */ +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +int X509_TRUST_set(int *t, int trust); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const X509_TRUST *xp); + +int X509_trusted(const X509 *x); +int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); + +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_check_trust(X509 *x, int id, int flags); + +int X509_verify_cert(X509_STORE_CTX *ctx); +int X509_STORE_CTX_verify(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs, + X509_STORE *store, int with_self_signed, + OSSL_LIB_CTX *libctx, const char *propq); + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +int X509_STORE_CTX_print_verify_cb(int ok, X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, + X509_STORE_CTX *ctx, X509 *x); +typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, + X509 *x, X509 *issuer); +typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL **crl, X509 *x); +typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); +typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL *crl, X509 *x); +typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); +typedef STACK_OF(X509) + *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef STACK_OF(X509_CRL) + *(*X509_STORE_CTX_lookup_crls_fn)(const X509_STORE_CTX *ctx, + const X509_NAME *nm); +typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); + +void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); + +# define X509_STORE_CTX_set_app_data(ctx,data) \ + X509_STORE_CTX_set_ex_data(ctx,0,data) +# define X509_STORE_CTX_get_app_data(ctx) \ + X509_STORE_CTX_get_ex_data(ctx,0) + +# define X509_L_FILE_LOAD 1 +# define X509_L_ADD_DIR 2 +# define X509_L_ADD_STORE 3 +# define X509_L_LOAD_STORE 4 + +# define X509_LOOKUP_load_file(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_dir(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_store(x,name) \ + X509_LOOKUP_ctrl((x),X509_L_LOAD_STORE,(name),0,NULL) + +# define X509_LOOKUP_load_file_ex(x, name, type, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_FILE_LOAD, (name), (long)(type), NULL,\ + (libctx), (propq)) + +# define X509_LOOKUP_load_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_LOAD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_LOOKUP_add_store_ex(x, name, libctx, propq) \ +X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ + (libctx), (propq)) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 + +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 +/* OCSP status errors */ +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ + +# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 76 +# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 77 + +/* Errors in case a check in X509_V_FLAG_X509_STRICT mode fails */ +# define X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY 78 +# define X509_V_ERR_INVALID_CA 79 +# define X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA 80 +# define X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN 81 +# define X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA 82 +# define X509_V_ERR_ISSUER_NAME_EMPTY 83 +# define X509_V_ERR_SUBJECT_NAME_EMPTY 84 +# define X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER 85 +# define X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER 86 +# define X509_V_ERR_EMPTY_SUBJECT_ALT_NAME 87 +# define X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL 88 +# define X509_V_ERR_CA_BCONS_NOT_CRITICAL 89 +# define X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL 90 +# define X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL 91 +# define X509_V_ERR_CA_CERT_MISSING_KEY_USAGE 92 +# define X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3 93 +# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 94 + +/* Certificate verify flags */ +# ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ +# endif +/* Use check time instead of current time */ +# define X509_V_FLAG_USE_CHECK_TIME 0x2 +/* Lookup CRLs */ +# define X509_V_FLAG_CRL_CHECK 0x4 +/* Lookup CRLs for whole chain */ +# define X509_V_FLAG_CRL_CHECK_ALL 0x8 +/* Ignore unhandled critical extensions */ +# define X509_V_FLAG_IGNORE_CRITICAL 0x10 +/* Disable workarounds for broken certificates */ +# define X509_V_FLAG_X509_STRICT 0x20 +/* Enable proxy certificate validation */ +# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 +/* Enable policy checking */ +# define X509_V_FLAG_POLICY_CHECK 0x80 +/* Policy variable require-explicit-policy */ +# define X509_V_FLAG_EXPLICIT_POLICY 0x100 +/* Policy variable inhibit-any-policy */ +# define X509_V_FLAG_INHIBIT_ANY 0x200 +/* Policy variable inhibit-policy-mapping */ +# define X509_V_FLAG_INHIBIT_MAP 0x400 +/* Notify callback that policy is OK */ +# define X509_V_FLAG_NOTIFY_POLICY 0x800 +/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ +# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 +/* Delta CRL support */ +# define X509_V_FLAG_USE_DELTAS 0x2000 +/* Check self-signed CA signature */ +# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 +/* Use trusted store first */ +# define X509_V_FLAG_TRUSTED_FIRST 0x8000 +/* Suite B 128 bit only mode: not normally used */ +# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define X509_V_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define X509_V_FLAG_SUITEB_128_LOS 0x30000 +/* Allow partial chains if at least one certificate is in trusted store */ +# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 +/* + * If the initial chain is not trusted, do not attempt to build an alternative + * chain. Alternate chain checking was introduced in 1.1.0. Setting this flag + * will force the behaviour to match that of previous versions. + */ +# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 +/* Do not check certificate/CRL validity against current time */ +# define X509_V_FLAG_NO_CHECK_TIME 0x200000 + +# define X509_VP_FLAG_DEFAULT 0x1 +# define X509_VP_FLAG_OVERWRITE 0x2 +# define X509_VP_FLAG_RESET_FLAGS 0x4 +# define X509_VP_FLAG_LOCKED 0x8 +# define X509_VP_FLAG_ONCE 0x10 + +/* Internal use: mask of policy related options */ +# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ + | X509_V_FLAG_EXPLICIT_POLICY \ + | X509_V_FLAG_INHIBIT_ANY \ + | X509_V_FLAG_INHIBIT_MAP) + +int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, + const X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, + X509_LOOKUP_TYPE type, + const X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, + X509_OBJECT *x); +int X509_OBJECT_up_ref_count(X509_OBJECT *a); +X509_OBJECT *X509_OBJECT_new(void); +void X509_OBJECT_free(X509_OBJECT *a); +X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); +X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); +int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); +X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); +int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *v); +int X509_STORE_lock(X509_STORE *ctx); +int X509_STORE_unlock(X509_STORE *ctx); +int X509_STORE_up_ref(X509_STORE *v); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); +STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, + const X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(const X509_STORE_CTX *st, + const X509_NAME *nm); +int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); +int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); +int X509_STORE_set_trust(X509_STORE *ctx, int trust); +int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); +X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); + +void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); +#define X509_STORE_set_verify_func(ctx, func) \ + X509_STORE_set_verify((ctx),(func)) +void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_fn verify); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(const X509_STORE *ctx); +void X509_STORE_set_verify_cb(X509_STORE *ctx, + X509_STORE_CTX_verify_cb verify_cb); +# define X509_STORE_set_verify_cb_func(ctx,func) \ + X509_STORE_set_verify_cb((ctx),(func)) +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(const X509_STORE *ctx); +void X509_STORE_set_get_issuer(X509_STORE *ctx, + X509_STORE_CTX_get_issuer_fn get_issuer); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *ctx); +void X509_STORE_set_check_issued(X509_STORE *ctx, + X509_STORE_CTX_check_issued_fn check_issued); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *ctx); +void X509_STORE_set_check_revocation(X509_STORE *ctx, + X509_STORE_CTX_check_revocation_fn check_revocation); +X509_STORE_CTX_check_revocation_fn + X509_STORE_get_check_revocation(const X509_STORE *ctx); +void X509_STORE_set_get_crl(X509_STORE *ctx, + X509_STORE_CTX_get_crl_fn get_crl); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *ctx); +void X509_STORE_set_check_crl(X509_STORE *ctx, + X509_STORE_CTX_check_crl_fn check_crl); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *ctx); +void X509_STORE_set_cert_crl(X509_STORE *ctx, + X509_STORE_CTX_cert_crl_fn cert_crl); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *ctx); +void X509_STORE_set_check_policy(X509_STORE *ctx, + X509_STORE_CTX_check_policy_fn check_policy); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *ctx); +void X509_STORE_set_lookup_certs(X509_STORE *ctx, + X509_STORE_CTX_lookup_certs_fn lookup_certs); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *ctx); +void X509_STORE_set_lookup_crls(X509_STORE *ctx, + X509_STORE_CTX_lookup_crls_fn lookup_crls); +#define X509_STORE_set_lookup_crls_cb(ctx, func) \ + X509_STORE_set_lookup_crls((ctx), (func)) +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(const X509_STORE *ctx); +void X509_STORE_set_cleanup(X509_STORE *ctx, + X509_STORE_CTX_cleanup_fn cleanup); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *ctx); + +#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) +int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); +void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); + +X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq); +X509_STORE_CTX *X509_STORE_CTX_new(void); + +int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + +void X509_STORE_CTX_free(X509_STORE_CTX *ctx); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store, + X509 *target, STACK_OF(X509) *untrusted); +void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); + +X509_STORE *X509_STORE_CTX_get0_store(const X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_cb verify); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(const X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(const X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(const X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(const X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +# define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain +# define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted +# define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack +# define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject +# define X509_STORE_get1_certs X509_STORE_CTX_get1_certs +# define X509_STORE_get1_crls X509_STORE_CTX_get1_crls +/* the following macro is misspelled; use X509_STORE_get1_certs instead */ +# define X509_STORE_get1_cert X509_STORE_CTX_get1_certs +/* the following macro is misspelled; use X509_STORE_get1_crls instead */ +# define X509_STORE_get1_crl X509_STORE_CTX_get1_crls +#endif + +X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); +X509_LOOKUP_METHOD *X509_LOOKUP_file(void); +X509_LOOKUP_METHOD *X509_LOOKUP_store(void); + +typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +typedef int (*X509_LOOKUP_ctrl_ex_fn)( + X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret, + OSSL_LIB_CTX *libctx, const char *propq); + +typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_subject_ex_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, + const char *propq); +typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const X509_NAME *name, + const ASN1_INTEGER *serial, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const unsigned char* bytes, + int len, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const char *str, + int len, + X509_OBJECT *ret); + +X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name); +void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method, + int (*new_item) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method, + void (*free_fn) (X509_LOOKUP *ctx)); +void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method, + int (*init) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method, + int (*shutdown) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method, + X509_LOOKUP_ctrl_fn ctrl_fn); +X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_subject_fn fn); +X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_issuer_serial(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_issuer_serial_fn fn); +X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_fingerprint_fn fn); +X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_alias_fn fn); +X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( + const X509_LOOKUP_METHOD *method); + + +int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); +int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); + +int X509_STORE_CTX_get_by_subject(const X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); +X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + const X509_NAME *name); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +int X509_LOOKUP_ctrl_ex(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, + char **ret, OSSL_LIB_CTX *libctx, const char *propq); + +int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file_ex(X509_LOOKUP *ctx, const char *file, int type, + OSSL_LIB_CTX *libctx, const char *propq); + +X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); +void X509_LOOKUP_free(X509_LOOKUP *ctx); +int X509_LOOKUP_init(X509_LOOKUP *ctx); +int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_subject_ex(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, X509_OBJECT *ret, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const X509_NAME *name, + const ASN1_INTEGER *serial, + X509_OBJECT *ret); +int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const unsigned char *bytes, int len, + X509_OBJECT *ret); +int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const char *str, int len, X509_OBJECT *ret); +int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data); +void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); +X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +int X509_STORE_load_file(X509_STORE *ctx, const char *file); +int X509_STORE_load_path(X509_STORE *ctx, const char *path); +int X509_STORE_load_store(X509_STORE *ctx, const char *store); +int X509_STORE_load_locations(X509_STORE *ctx, + const char *file, + const char *dir); +int X509_STORE_set_default_paths(X509_STORE *ctx); + +int X509_STORE_load_file_ex(X509_STORE *ctx, const char *file, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_store_ex(X509_STORE *ctx, const char *store, + OSSL_LIB_CTX *libctx, const char *propq); +int X509_STORE_load_locations_ex(X509_STORE *ctx, const char *file, + const char *dir, OSSL_LIB_CTX *libctx, + const char *propq); +int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, + const char *propq); + +#define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) +int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); +void *X509_STORE_CTX_get_ex_data(const X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); +int X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); +X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); +X509 *X509_STORE_CTX_get0_current_issuer(const X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(const X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target); +void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk); +int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); +int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); +int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, + int purpose, int trust); +void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); +void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, + time_t t); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(const X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx); + +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); +int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); + +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane); +#define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0) + +/* X509_VERIFY_PARAM functions */ + +X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); +void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); +int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +unsigned long X509_VERIFY_PARAM_get_flags(const X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); +int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); +void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); +void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, int auth_level); +time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param); +void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); +int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, + ASN1_OBJECT *policy); +int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, + STACK_OF(ASN1_OBJECT) *policies); + +int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, + uint32_t flags); +uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); + +char *X509_VERIFY_PARAM_get0_host(X509_VERIFY_PARAM *param, int idx); +int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, + unsigned int flags); +unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); +char *X509_VERIFY_PARAM_get0_peername(const X509_VERIFY_PARAM *param); +void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); +char *X509_VERIFY_PARAM_get0_email(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, + const char *email, size_t emaillen); +char *X509_VERIFY_PARAM_get1_ip_asc(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, + const unsigned char *ip, size_t iplen); +int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, + const char *ipasc); + +int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); +const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); + +int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_count(void); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); +void X509_VERIFY_PARAM_table_cleanup(void); + +/* Non positive return values are errors */ +#define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */ +#define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */ +#define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */ + +/* + * Positive return values form a bit mask, all but the first are internal to + * the library and don't appear in results from X509_policy_check(). + */ +#define X509_PCY_TREE_VALID 1 /* The policy tree is valid */ +#define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */ +#define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */ + +int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, + STACK_OF(X509) *certs, + STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); + +void X509_policy_tree_free(X509_POLICY_TREE *tree); + +int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); +X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, + int i); + +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree); + +STACK_OF(X509_POLICY_NODE) + *X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree); + +int X509_policy_level_node_count(X509_POLICY_LEVEL *level); + +X509_POLICY_NODE *X509_policy_level_get0_node(const X509_POLICY_LEVEL *level, + int i); + +const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); + +STACK_OF(POLICYQUALINFO) + *X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node); +const X509_POLICY_NODE + *X509_policy_node_get0_parent(const X509_POLICY_NODE *node); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509err.h b/deps/openssl/android/x86_64/usr/local/include/openssl/x509err.h index cd08673f..34ead4b8 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509err.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509err.h @@ -1,88 +1,22 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509ERR_H -# define HEADER_X509ERR_H +#ifndef OPENSSL_X509ERR_H +# define OPENSSL_X509ERR_H +# pragma once +# include # include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509_strings(void); -/* - * X509 function codes. - */ -# define X509_F_ADD_CERT_DIR 100 -# define X509_F_BUILD_CHAIN 106 -# define X509_F_BY_FILE_CTRL 101 -# define X509_F_CHECK_NAME_CONSTRAINTS 149 -# define X509_F_CHECK_POLICY 145 -# define X509_F_DANE_I2D 107 -# define X509_F_DIR_CTRL 102 -# define X509_F_GET_CERT_BY_SUBJECT 103 -# define X509_F_I2D_X509_AUX 151 -# define X509_F_LOOKUP_CERTS_SK 152 -# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 -# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 -# define X509_F_NEW_DIR 153 -# define X509_F_X509AT_ADD1_ATTR 135 -# define X509_F_X509V3_ADD_EXT 104 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 -# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 -# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 -# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 -# define X509_F_X509_CHECK_PRIVATE_KEY 128 -# define X509_F_X509_CRL_DIFF 105 -# define X509_F_X509_CRL_METHOD_NEW 154 -# define X509_F_X509_CRL_PRINT_FP 147 -# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 -# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 -# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 -# define X509_F_X509_LOAD_CERT_CRL_FILE 132 -# define X509_F_X509_LOAD_CERT_FILE 111 -# define X509_F_X509_LOAD_CRL_FILE 112 -# define X509_F_X509_LOOKUP_METH_NEW 160 -# define X509_F_X509_LOOKUP_NEW 155 -# define X509_F_X509_NAME_ADD_ENTRY 113 -# define X509_F_X509_NAME_CANON 156 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 -# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 -# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 -# define X509_F_X509_NAME_ONELINE 116 -# define X509_F_X509_NAME_PRINT 117 -# define X509_F_X509_OBJECT_NEW 150 -# define X509_F_X509_PRINT_EX_FP 118 -# define X509_F_X509_PUBKEY_DECODE 148 -# define X509_F_X509_PUBKEY_GET 161 -# define X509_F_X509_PUBKEY_GET0 119 -# define X509_F_X509_PUBKEY_SET 120 -# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 -# define X509_F_X509_REQ_PRINT_EX 121 -# define X509_F_X509_REQ_PRINT_FP 122 -# define X509_F_X509_REQ_TO_X509 123 -# define X509_F_X509_STORE_ADD_CERT 124 -# define X509_F_X509_STORE_ADD_CRL 125 -# define X509_F_X509_STORE_ADD_LOOKUP 157 -# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 -# define X509_F_X509_STORE_CTX_INIT 143 -# define X509_F_X509_STORE_CTX_NEW 142 -# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 -# define X509_F_X509_STORE_NEW 158 -# define X509_F_X509_TO_X509_REQ 126 -# define X509_F_X509_TRUST_ADD 133 -# define X509_F_X509_TRUST_SET 141 -# define X509_F_X509_VERIFY_CERT 127 -# define X509_F_X509_VERIFY_PARAM_NEW 159 /* * X509 reason codes. @@ -92,12 +26,17 @@ int ERR_load_X509_strings(void); # define X509_R_BAD_X509_FILETYPE 100 # define X509_R_BASE64_DECODE_ERROR 118 # define X509_R_CANT_CHECK_DH_KEY 114 +# define X509_R_CERTIFICATE_VERIFICATION_FAILED 139 # define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 # define X509_R_CRL_ALREADY_DELTA 127 # define X509_R_CRL_VERIFY_FAILURE 131 +# define X509_R_DUPLICATE_ATTRIBUTE 140 +# define X509_R_ERROR_GETTING_MD_BY_NID 141 +# define X509_R_ERROR_USING_SIGINF_SET 142 # define X509_R_IDP_MISMATCH 128 # define X509_R_INVALID_ATTRIBUTES 138 # define X509_R_INVALID_DIRECTORY 113 +# define X509_R_INVALID_DISTPOINT 143 # define X509_R_INVALID_FIELD_NAME 119 # define X509_R_INVALID_TRUST 123 # define X509_R_ISSUER_MISMATCH 129 @@ -121,6 +60,7 @@ int ERR_load_X509_strings(void); # define X509_R_UNKNOWN_KEY_TYPE 117 # define X509_R_UNKNOWN_NID 109 # define X509_R_UNKNOWN_PURPOSE_ID 121 +# define X509_R_UNKNOWN_SIGID_ALGS 144 # define X509_R_UNKNOWN_TRUST_ID 120 # define X509_R_UNSUPPORTED_ALGORITHM 111 # define X509_R_WRONG_LOOKUP_TYPE 112 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h index 3a4f04c1..75016354 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h @@ -1,19 +1,33 @@ /* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/x509v3.h.in + * * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509V3_H -# define HEADER_X509V3_H + + +#ifndef OPENSSL_X509V3_H +# define OPENSSL_X509V3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509V3_H +# endif # include # include # include # include +# ifndef OPENSSL_NO_STDIO +# include +# endif #ifdef __cplusplus extern "C" { @@ -28,7 +42,7 @@ struct v3_ext_ctx; typedef void *(*X509V3_EXT_NEW)(void); typedef void (*X509V3_EXT_FREE) (void *); typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); -typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); +typedef int (*X509V3_EXT_I2D) (const void *, unsigned char **); typedef STACK_OF(CONF_VALUE) * (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, STACK_OF(CONF_VALUE) *extlist); @@ -75,9 +89,12 @@ typedef struct X509V3_CONF_METHOD_st { void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); } X509V3_CONF_METHOD; -/* Context specific info */ +/* Context specific info for producing X509 v3 extensions*/ struct v3_ext_ctx { -# define CTX_TEST 0x1 +# define X509V3_CTX_TEST 0x1 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define CTX_TEST X509V3_CTX_TEST +# endif # define X509V3_CTX_REPLACE 0x2 int flags; X509 *issuer_cert; @@ -86,12 +103,39 @@ struct v3_ext_ctx { X509_CRL *crl; X509V3_CONF_METHOD *db_meth; void *db; + EVP_PKEY *issuer_pkey; /* Maybe more here */ }; typedef struct v3_ext_method X509V3_EXT_METHOD; -DEFINE_STACK_OF(X509V3_EXT_METHOD) +SKM_DEFINE_STACK_OF_INTERNAL(X509V3_EXT_METHOD, X509V3_EXT_METHOD, X509V3_EXT_METHOD) +#define sk_X509V3_EXT_METHOD_num(sk) OPENSSL_sk_num(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_value(sk, idx) ((X509V3_EXT_METHOD *)OPENSSL_sk_value(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), (idx))) +#define sk_X509V3_EXT_METHOD_new(cmp) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp))) +#define sk_X509V3_EXT_METHOD_new_null() ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_null()) +#define sk_X509V3_EXT_METHOD_new_reserve(cmp, n) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_new_reserve(ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp), (n))) +#define sk_X509V3_EXT_METHOD_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (n)) +#define sk_X509V3_EXT_METHOD_free(sk) OPENSSL_sk_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_zero(sk) OPENSSL_sk_zero(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_delete(sk, i) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (i))) +#define sk_X509V3_EXT_METHOD_delete_ptr(sk, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_delete_ptr(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr))) +#define sk_X509V3_EXT_METHOD_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_pop(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_pop(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_shift(sk) ((X509V3_EXT_METHOD *)OPENSSL_sk_shift(ossl_check_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509V3_EXT_METHOD_sk_type(sk),ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc)) +#define sk_X509V3_EXT_METHOD_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), (idx)) +#define sk_X509V3_EXT_METHOD_set(sk, idx, ptr) ((X509V3_EXT_METHOD *)OPENSSL_sk_set(ossl_check_X509V3_EXT_METHOD_sk_type(sk), (idx), ossl_check_X509V3_EXT_METHOD_type(ptr))) +#define sk_X509V3_EXT_METHOD_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr)) +#define sk_X509V3_EXT_METHOD_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_type(ptr), pnum) +#define sk_X509V3_EXT_METHOD_sort(sk) OPENSSL_sk_sort(ossl_check_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk)) +#define sk_X509V3_EXT_METHOD_dup(sk) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_dup(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk))) +#define sk_X509V3_EXT_METHOD_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509V3_EXT_METHOD) *)OPENSSL_sk_deep_copy(ossl_check_const_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_copyfunc_type(copyfunc), ossl_check_X509V3_EXT_METHOD_freefunc_type(freefunc))) +#define sk_X509V3_EXT_METHOD_set_cmp_func(sk, cmp) ((sk_X509V3_EXT_METHOD_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509V3_EXT_METHOD_sk_type(sk), ossl_check_X509V3_EXT_METHOD_compfunc_type(cmp))) + /* ext_flags values */ # define X509V3_EXT_DYNAMIC 0x1 @@ -157,17 +201,92 @@ typedef struct ACCESS_DESCRIPTION_st { GENERAL_NAME *location; } ACCESS_DESCRIPTION; +SKM_DEFINE_STACK_OF_INTERNAL(ACCESS_DESCRIPTION, ACCESS_DESCRIPTION, ACCESS_DESCRIPTION) +#define sk_ACCESS_DESCRIPTION_num(sk) OPENSSL_sk_num(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_value(sk, idx) ((ACCESS_DESCRIPTION *)OPENSSL_sk_value(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), (idx))) +#define sk_ACCESS_DESCRIPTION_new(cmp) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp))) +#define sk_ACCESS_DESCRIPTION_new_null() ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_null()) +#define sk_ACCESS_DESCRIPTION_new_reserve(cmp, n) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_new_reserve(ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp), (n))) +#define sk_ACCESS_DESCRIPTION_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (n)) +#define sk_ACCESS_DESCRIPTION_free(sk) OPENSSL_sk_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_zero(sk) OPENSSL_sk_zero(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_delete(sk, i) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (i))) +#define sk_ACCESS_DESCRIPTION_delete_ptr(sk, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_delete_ptr(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr))) +#define sk_ACCESS_DESCRIPTION_push(sk, ptr) OPENSSL_sk_push(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_pop(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_pop(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_shift(sk) ((ACCESS_DESCRIPTION *)OPENSSL_sk_shift(ossl_check_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ACCESS_DESCRIPTION_sk_type(sk),ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc)) +#define sk_ACCESS_DESCRIPTION_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), (idx)) +#define sk_ACCESS_DESCRIPTION_set(sk, idx, ptr) ((ACCESS_DESCRIPTION *)OPENSSL_sk_set(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), (idx), ossl_check_ACCESS_DESCRIPTION_type(ptr))) +#define sk_ACCESS_DESCRIPTION_find(sk, ptr) OPENSSL_sk_find(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr)) +#define sk_ACCESS_DESCRIPTION_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_type(ptr), pnum) +#define sk_ACCESS_DESCRIPTION_sort(sk) OPENSSL_sk_sort(ossl_check_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk)) +#define sk_ACCESS_DESCRIPTION_dup(sk) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_dup(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk))) +#define sk_ACCESS_DESCRIPTION_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ACCESS_DESCRIPTION) *)OPENSSL_sk_deep_copy(ossl_check_const_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_copyfunc_type(copyfunc), ossl_check_ACCESS_DESCRIPTION_freefunc_type(freefunc))) +#define sk_ACCESS_DESCRIPTION_set_cmp_func(sk, cmp) ((sk_ACCESS_DESCRIPTION_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ACCESS_DESCRIPTION_sk_type(sk), ossl_check_ACCESS_DESCRIPTION_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAME, GENERAL_NAME, GENERAL_NAME) +#define sk_GENERAL_NAME_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_value(sk, idx) ((GENERAL_NAME *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAME_sk_type(sk), (idx))) +#define sk_GENERAL_NAME_new(cmp) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new(ossl_check_GENERAL_NAME_compfunc_type(cmp))) +#define sk_GENERAL_NAME_new_null() ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_NAME_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAME_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAME_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAME_sk_type(sk), (n)) +#define sk_GENERAL_NAME_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_delete(sk, i) ((GENERAL_NAME *)OPENSSL_sk_delete(ossl_check_GENERAL_NAME_sk_type(sk), (i))) +#define sk_GENERAL_NAME_delete_ptr(sk, ptr) ((GENERAL_NAME *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr))) +#define sk_GENERAL_NAME_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_pop(sk) ((GENERAL_NAME *)OPENSSL_sk_pop(ossl_check_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_shift(sk) ((GENERAL_NAME *)OPENSSL_sk_shift(ossl_check_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAME_sk_type(sk),ossl_check_GENERAL_NAME_freefunc_type(freefunc)) +#define sk_GENERAL_NAME_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), (idx)) +#define sk_GENERAL_NAME_set(sk, idx, ptr) ((GENERAL_NAME *)OPENSSL_sk_set(ossl_check_GENERAL_NAME_sk_type(sk), (idx), ossl_check_GENERAL_NAME_type(ptr))) +#define sk_GENERAL_NAME_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr)) +#define sk_GENERAL_NAME_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_type(ptr), pnum) +#define sk_GENERAL_NAME_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAME_sk_type(sk)) +#define sk_GENERAL_NAME_dup(sk) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAME_sk_type(sk))) +#define sk_GENERAL_NAME_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAME) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_copyfunc_type(copyfunc), ossl_check_GENERAL_NAME_freefunc_type(freefunc))) +#define sk_GENERAL_NAME_set_cmp_func(sk, cmp) ((sk_GENERAL_NAME_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAME_sk_type(sk), ossl_check_GENERAL_NAME_compfunc_type(cmp))) + + typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; - typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; - typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; - -DEFINE_STACK_OF(GENERAL_NAME) typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; -DEFINE_STACK_OF(GENERAL_NAMES) -DEFINE_STACK_OF(ACCESS_DESCRIPTION) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_NAMES, GENERAL_NAMES, GENERAL_NAMES) +#define sk_GENERAL_NAMES_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_value(sk, idx) ((GENERAL_NAMES *)OPENSSL_sk_value(ossl_check_const_GENERAL_NAMES_sk_type(sk), (idx))) +#define sk_GENERAL_NAMES_new(cmp) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new(ossl_check_GENERAL_NAMES_compfunc_type(cmp))) +#define sk_GENERAL_NAMES_new_null() ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_NAMES_new_reserve(cmp, n) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_NAMES_compfunc_type(cmp), (n))) +#define sk_GENERAL_NAMES_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_NAMES_sk_type(sk), (n)) +#define sk_GENERAL_NAMES_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_delete(sk, i) ((GENERAL_NAMES *)OPENSSL_sk_delete(ossl_check_GENERAL_NAMES_sk_type(sk), (i))) +#define sk_GENERAL_NAMES_delete_ptr(sk, ptr) ((GENERAL_NAMES *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr))) +#define sk_GENERAL_NAMES_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_pop(sk) ((GENERAL_NAMES *)OPENSSL_sk_pop(ossl_check_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_shift(sk) ((GENERAL_NAMES *)OPENSSL_sk_shift(ossl_check_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_NAMES_sk_type(sk),ossl_check_GENERAL_NAMES_freefunc_type(freefunc)) +#define sk_GENERAL_NAMES_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), (idx)) +#define sk_GENERAL_NAMES_set(sk, idx, ptr) ((GENERAL_NAMES *)OPENSSL_sk_set(ossl_check_GENERAL_NAMES_sk_type(sk), (idx), ossl_check_GENERAL_NAMES_type(ptr))) +#define sk_GENERAL_NAMES_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr)) +#define sk_GENERAL_NAMES_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_type(ptr), pnum) +#define sk_GENERAL_NAMES_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_NAMES_sk_type(sk)) +#define sk_GENERAL_NAMES_dup(sk) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_NAMES_sk_type(sk))) +#define sk_GENERAL_NAMES_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_NAMES) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_copyfunc_type(copyfunc), ossl_check_GENERAL_NAMES_freefunc_type(freefunc))) +#define sk_GENERAL_NAMES_set_cmp_func(sk, cmp) ((sk_GENERAL_NAMES_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_NAMES_sk_type(sk), ossl_check_GENERAL_NAMES_compfunc_type(cmp))) + typedef struct DIST_POINT_NAME_st { int type; @@ -200,9 +319,35 @@ struct DIST_POINT_st { int dp_reasons; }; -typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; +SKM_DEFINE_STACK_OF_INTERNAL(DIST_POINT, DIST_POINT, DIST_POINT) +#define sk_DIST_POINT_num(sk) OPENSSL_sk_num(ossl_check_const_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_value(sk, idx) ((DIST_POINT *)OPENSSL_sk_value(ossl_check_const_DIST_POINT_sk_type(sk), (idx))) +#define sk_DIST_POINT_new(cmp) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new(ossl_check_DIST_POINT_compfunc_type(cmp))) +#define sk_DIST_POINT_new_null() ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_null()) +#define sk_DIST_POINT_new_reserve(cmp, n) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_new_reserve(ossl_check_DIST_POINT_compfunc_type(cmp), (n))) +#define sk_DIST_POINT_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_DIST_POINT_sk_type(sk), (n)) +#define sk_DIST_POINT_free(sk) OPENSSL_sk_free(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_zero(sk) OPENSSL_sk_zero(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_delete(sk, i) ((DIST_POINT *)OPENSSL_sk_delete(ossl_check_DIST_POINT_sk_type(sk), (i))) +#define sk_DIST_POINT_delete_ptr(sk, ptr) ((DIST_POINT *)OPENSSL_sk_delete_ptr(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr))) +#define sk_DIST_POINT_push(sk, ptr) OPENSSL_sk_push(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_pop(sk) ((DIST_POINT *)OPENSSL_sk_pop(ossl_check_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_shift(sk) ((DIST_POINT *)OPENSSL_sk_shift(ossl_check_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_DIST_POINT_sk_type(sk),ossl_check_DIST_POINT_freefunc_type(freefunc)) +#define sk_DIST_POINT_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), (idx)) +#define sk_DIST_POINT_set(sk, idx, ptr) ((DIST_POINT *)OPENSSL_sk_set(ossl_check_DIST_POINT_sk_type(sk), (idx), ossl_check_DIST_POINT_type(ptr))) +#define sk_DIST_POINT_find(sk, ptr) OPENSSL_sk_find(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr)) +#define sk_DIST_POINT_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_type(ptr), pnum) +#define sk_DIST_POINT_sort(sk) OPENSSL_sk_sort(ossl_check_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_DIST_POINT_sk_type(sk)) +#define sk_DIST_POINT_dup(sk) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_dup(ossl_check_const_DIST_POINT_sk_type(sk))) +#define sk_DIST_POINT_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(DIST_POINT) *)OPENSSL_sk_deep_copy(ossl_check_const_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_copyfunc_type(copyfunc), ossl_check_DIST_POINT_freefunc_type(freefunc))) +#define sk_DIST_POINT_set_cmp_func(sk, cmp) ((sk_DIST_POINT_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_DIST_POINT_sk_type(sk), ossl_check_DIST_POINT_compfunc_type(cmp))) -DEFINE_STACK_OF(DIST_POINT) + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; struct AUTHORITY_KEYID_st { ASN1_OCTET_STRING *keyid; @@ -217,13 +362,47 @@ typedef struct SXNET_ID_st { ASN1_OCTET_STRING *user; } SXNETID; -DEFINE_STACK_OF(SXNETID) +SKM_DEFINE_STACK_OF_INTERNAL(SXNETID, SXNETID, SXNETID) +#define sk_SXNETID_num(sk) OPENSSL_sk_num(ossl_check_const_SXNETID_sk_type(sk)) +#define sk_SXNETID_value(sk, idx) ((SXNETID *)OPENSSL_sk_value(ossl_check_const_SXNETID_sk_type(sk), (idx))) +#define sk_SXNETID_new(cmp) ((STACK_OF(SXNETID) *)OPENSSL_sk_new(ossl_check_SXNETID_compfunc_type(cmp))) +#define sk_SXNETID_new_null() ((STACK_OF(SXNETID) *)OPENSSL_sk_new_null()) +#define sk_SXNETID_new_reserve(cmp, n) ((STACK_OF(SXNETID) *)OPENSSL_sk_new_reserve(ossl_check_SXNETID_compfunc_type(cmp), (n))) +#define sk_SXNETID_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_SXNETID_sk_type(sk), (n)) +#define sk_SXNETID_free(sk) OPENSSL_sk_free(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_zero(sk) OPENSSL_sk_zero(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_delete(sk, i) ((SXNETID *)OPENSSL_sk_delete(ossl_check_SXNETID_sk_type(sk), (i))) +#define sk_SXNETID_delete_ptr(sk, ptr) ((SXNETID *)OPENSSL_sk_delete_ptr(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr))) +#define sk_SXNETID_push(sk, ptr) OPENSSL_sk_push(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_pop(sk) ((SXNETID *)OPENSSL_sk_pop(ossl_check_SXNETID_sk_type(sk))) +#define sk_SXNETID_shift(sk) ((SXNETID *)OPENSSL_sk_shift(ossl_check_SXNETID_sk_type(sk))) +#define sk_SXNETID_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SXNETID_sk_type(sk),ossl_check_SXNETID_freefunc_type(freefunc)) +#define sk_SXNETID_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), (idx)) +#define sk_SXNETID_set(sk, idx, ptr) ((SXNETID *)OPENSSL_sk_set(ossl_check_SXNETID_sk_type(sk), (idx), ossl_check_SXNETID_type(ptr))) +#define sk_SXNETID_find(sk, ptr) OPENSSL_sk_find(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr)) +#define sk_SXNETID_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_type(ptr), pnum) +#define sk_SXNETID_sort(sk) OPENSSL_sk_sort(ossl_check_SXNETID_sk_type(sk)) +#define sk_SXNETID_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_SXNETID_sk_type(sk)) +#define sk_SXNETID_dup(sk) ((STACK_OF(SXNETID) *)OPENSSL_sk_dup(ossl_check_const_SXNETID_sk_type(sk))) +#define sk_SXNETID_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(SXNETID) *)OPENSSL_sk_deep_copy(ossl_check_const_SXNETID_sk_type(sk), ossl_check_SXNETID_copyfunc_type(copyfunc), ossl_check_SXNETID_freefunc_type(freefunc))) +#define sk_SXNETID_set_cmp_func(sk, cmp) ((sk_SXNETID_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_SXNETID_sk_type(sk), ossl_check_SXNETID_compfunc_type(cmp))) + + typedef struct SXNET_st { ASN1_INTEGER *version; STACK_OF(SXNETID) *ids; } SXNET; +typedef struct ISSUER_SIGN_TOOL_st { + ASN1_UTF8STRING *signTool; + ASN1_UTF8STRING *cATool; + ASN1_UTF8STRING *signToolCert; + ASN1_UTF8STRING *cAToolCert; +} ISSUER_SIGN_TOOL; + typedef struct NOTICEREF_st { ASN1_STRING *organization; STACK_OF(ASN1_INTEGER) *noticenos; @@ -243,23 +422,102 @@ typedef struct POLICYQUALINFO_st { } d; } POLICYQUALINFO; -DEFINE_STACK_OF(POLICYQUALINFO) +SKM_DEFINE_STACK_OF_INTERNAL(POLICYQUALINFO, POLICYQUALINFO, POLICYQUALINFO) +#define sk_POLICYQUALINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_value(sk, idx) ((POLICYQUALINFO *)OPENSSL_sk_value(ossl_check_const_POLICYQUALINFO_sk_type(sk), (idx))) +#define sk_POLICYQUALINFO_new(cmp) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new(ossl_check_POLICYQUALINFO_compfunc_type(cmp))) +#define sk_POLICYQUALINFO_new_null() ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_null()) +#define sk_POLICYQUALINFO_new_reserve(cmp, n) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYQUALINFO_compfunc_type(cmp), (n))) +#define sk_POLICYQUALINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYQUALINFO_sk_type(sk), (n)) +#define sk_POLICYQUALINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_delete(sk, i) ((POLICYQUALINFO *)OPENSSL_sk_delete(ossl_check_POLICYQUALINFO_sk_type(sk), (i))) +#define sk_POLICYQUALINFO_delete_ptr(sk, ptr) ((POLICYQUALINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr))) +#define sk_POLICYQUALINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_pop(sk) ((POLICYQUALINFO *)OPENSSL_sk_pop(ossl_check_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_shift(sk) ((POLICYQUALINFO *)OPENSSL_sk_shift(ossl_check_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYQUALINFO_sk_type(sk),ossl_check_POLICYQUALINFO_freefunc_type(freefunc)) +#define sk_POLICYQUALINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), (idx)) +#define sk_POLICYQUALINFO_set(sk, idx, ptr) ((POLICYQUALINFO *)OPENSSL_sk_set(ossl_check_POLICYQUALINFO_sk_type(sk), (idx), ossl_check_POLICYQUALINFO_type(ptr))) +#define sk_POLICYQUALINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr)) +#define sk_POLICYQUALINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_type(ptr), pnum) +#define sk_POLICYQUALINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYQUALINFO_sk_type(sk)) +#define sk_POLICYQUALINFO_dup(sk) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYQUALINFO_sk_type(sk))) +#define sk_POLICYQUALINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYQUALINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_copyfunc_type(copyfunc), ossl_check_POLICYQUALINFO_freefunc_type(freefunc))) +#define sk_POLICYQUALINFO_set_cmp_func(sk, cmp) ((sk_POLICYQUALINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYQUALINFO_sk_type(sk), ossl_check_POLICYQUALINFO_compfunc_type(cmp))) + + typedef struct POLICYINFO_st { ASN1_OBJECT *policyid; STACK_OF(POLICYQUALINFO) *qualifiers; } POLICYINFO; -typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; +SKM_DEFINE_STACK_OF_INTERNAL(POLICYINFO, POLICYINFO, POLICYINFO) +#define sk_POLICYINFO_num(sk) OPENSSL_sk_num(ossl_check_const_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_value(sk, idx) ((POLICYINFO *)OPENSSL_sk_value(ossl_check_const_POLICYINFO_sk_type(sk), (idx))) +#define sk_POLICYINFO_new(cmp) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new(ossl_check_POLICYINFO_compfunc_type(cmp))) +#define sk_POLICYINFO_new_null() ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_null()) +#define sk_POLICYINFO_new_reserve(cmp, n) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_new_reserve(ossl_check_POLICYINFO_compfunc_type(cmp), (n))) +#define sk_POLICYINFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICYINFO_sk_type(sk), (n)) +#define sk_POLICYINFO_free(sk) OPENSSL_sk_free(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_zero(sk) OPENSSL_sk_zero(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_delete(sk, i) ((POLICYINFO *)OPENSSL_sk_delete(ossl_check_POLICYINFO_sk_type(sk), (i))) +#define sk_POLICYINFO_delete_ptr(sk, ptr) ((POLICYINFO *)OPENSSL_sk_delete_ptr(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr))) +#define sk_POLICYINFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_pop(sk) ((POLICYINFO *)OPENSSL_sk_pop(ossl_check_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_shift(sk) ((POLICYINFO *)OPENSSL_sk_shift(ossl_check_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICYINFO_sk_type(sk),ossl_check_POLICYINFO_freefunc_type(freefunc)) +#define sk_POLICYINFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), (idx)) +#define sk_POLICYINFO_set(sk, idx, ptr) ((POLICYINFO *)OPENSSL_sk_set(ossl_check_POLICYINFO_sk_type(sk), (idx), ossl_check_POLICYINFO_type(ptr))) +#define sk_POLICYINFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr)) +#define sk_POLICYINFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_type(ptr), pnum) +#define sk_POLICYINFO_sort(sk) OPENSSL_sk_sort(ossl_check_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICYINFO_sk_type(sk)) +#define sk_POLICYINFO_dup(sk) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_dup(ossl_check_const_POLICYINFO_sk_type(sk))) +#define sk_POLICYINFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICYINFO) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_copyfunc_type(copyfunc), ossl_check_POLICYINFO_freefunc_type(freefunc))) +#define sk_POLICYINFO_set_cmp_func(sk, cmp) ((sk_POLICYINFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICYINFO_sk_type(sk), ossl_check_POLICYINFO_compfunc_type(cmp))) -DEFINE_STACK_OF(POLICYINFO) + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; typedef struct POLICY_MAPPING_st { ASN1_OBJECT *issuerDomainPolicy; ASN1_OBJECT *subjectDomainPolicy; } POLICY_MAPPING; -DEFINE_STACK_OF(POLICY_MAPPING) +SKM_DEFINE_STACK_OF_INTERNAL(POLICY_MAPPING, POLICY_MAPPING, POLICY_MAPPING) +#define sk_POLICY_MAPPING_num(sk) OPENSSL_sk_num(ossl_check_const_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_value(sk, idx) ((POLICY_MAPPING *)OPENSSL_sk_value(ossl_check_const_POLICY_MAPPING_sk_type(sk), (idx))) +#define sk_POLICY_MAPPING_new(cmp) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new(ossl_check_POLICY_MAPPING_compfunc_type(cmp))) +#define sk_POLICY_MAPPING_new_null() ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_null()) +#define sk_POLICY_MAPPING_new_reserve(cmp, n) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_new_reserve(ossl_check_POLICY_MAPPING_compfunc_type(cmp), (n))) +#define sk_POLICY_MAPPING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_POLICY_MAPPING_sk_type(sk), (n)) +#define sk_POLICY_MAPPING_free(sk) OPENSSL_sk_free(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_zero(sk) OPENSSL_sk_zero(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_delete(sk, i) ((POLICY_MAPPING *)OPENSSL_sk_delete(ossl_check_POLICY_MAPPING_sk_type(sk), (i))) +#define sk_POLICY_MAPPING_delete_ptr(sk, ptr) ((POLICY_MAPPING *)OPENSSL_sk_delete_ptr(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr))) +#define sk_POLICY_MAPPING_push(sk, ptr) OPENSSL_sk_push(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_pop(sk) ((POLICY_MAPPING *)OPENSSL_sk_pop(ossl_check_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_shift(sk) ((POLICY_MAPPING *)OPENSSL_sk_shift(ossl_check_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_POLICY_MAPPING_sk_type(sk),ossl_check_POLICY_MAPPING_freefunc_type(freefunc)) +#define sk_POLICY_MAPPING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), (idx)) +#define sk_POLICY_MAPPING_set(sk, idx, ptr) ((POLICY_MAPPING *)OPENSSL_sk_set(ossl_check_POLICY_MAPPING_sk_type(sk), (idx), ossl_check_POLICY_MAPPING_type(ptr))) +#define sk_POLICY_MAPPING_find(sk, ptr) OPENSSL_sk_find(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr)) +#define sk_POLICY_MAPPING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_type(ptr), pnum) +#define sk_POLICY_MAPPING_sort(sk) OPENSSL_sk_sort(ossl_check_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_POLICY_MAPPING_sk_type(sk)) +#define sk_POLICY_MAPPING_dup(sk) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_dup(ossl_check_const_POLICY_MAPPING_sk_type(sk))) +#define sk_POLICY_MAPPING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(POLICY_MAPPING) *)OPENSSL_sk_deep_copy(ossl_check_const_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_copyfunc_type(copyfunc), ossl_check_POLICY_MAPPING_freefunc_type(freefunc))) +#define sk_POLICY_MAPPING_set_cmp_func(sk, cmp) ((sk_POLICY_MAPPING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_POLICY_MAPPING_sk_type(sk), ossl_check_POLICY_MAPPING_compfunc_type(cmp))) + typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; @@ -269,7 +527,33 @@ typedef struct GENERAL_SUBTREE_st { ASN1_INTEGER *maximum; } GENERAL_SUBTREE; -DEFINE_STACK_OF(GENERAL_SUBTREE) +SKM_DEFINE_STACK_OF_INTERNAL(GENERAL_SUBTREE, GENERAL_SUBTREE, GENERAL_SUBTREE) +#define sk_GENERAL_SUBTREE_num(sk) OPENSSL_sk_num(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_value(sk, idx) ((GENERAL_SUBTREE *)OPENSSL_sk_value(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), (idx))) +#define sk_GENERAL_SUBTREE_new(cmp) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp))) +#define sk_GENERAL_SUBTREE_new_null() ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_null()) +#define sk_GENERAL_SUBTREE_new_reserve(cmp, n) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_new_reserve(ossl_check_GENERAL_SUBTREE_compfunc_type(cmp), (n))) +#define sk_GENERAL_SUBTREE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_GENERAL_SUBTREE_sk_type(sk), (n)) +#define sk_GENERAL_SUBTREE_free(sk) OPENSSL_sk_free(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_zero(sk) OPENSSL_sk_zero(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_delete(sk, i) ((GENERAL_SUBTREE *)OPENSSL_sk_delete(ossl_check_GENERAL_SUBTREE_sk_type(sk), (i))) +#define sk_GENERAL_SUBTREE_delete_ptr(sk, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_delete_ptr(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr))) +#define sk_GENERAL_SUBTREE_push(sk, ptr) OPENSSL_sk_push(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_pop(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_pop(ossl_check_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_shift(sk) ((GENERAL_SUBTREE *)OPENSSL_sk_shift(ossl_check_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_GENERAL_SUBTREE_sk_type(sk),ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc)) +#define sk_GENERAL_SUBTREE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), (idx)) +#define sk_GENERAL_SUBTREE_set(sk, idx, ptr) ((GENERAL_SUBTREE *)OPENSSL_sk_set(ossl_check_GENERAL_SUBTREE_sk_type(sk), (idx), ossl_check_GENERAL_SUBTREE_type(ptr))) +#define sk_GENERAL_SUBTREE_find(sk, ptr) OPENSSL_sk_find(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr)) +#define sk_GENERAL_SUBTREE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_type(ptr), pnum) +#define sk_GENERAL_SUBTREE_sort(sk) OPENSSL_sk_sort(ossl_check_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_GENERAL_SUBTREE_sk_type(sk)) +#define sk_GENERAL_SUBTREE_dup(sk) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_dup(ossl_check_const_GENERAL_SUBTREE_sk_type(sk))) +#define sk_GENERAL_SUBTREE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(GENERAL_SUBTREE) *)OPENSSL_sk_deep_copy(ossl_check_const_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_copyfunc_type(copyfunc), ossl_check_GENERAL_SUBTREE_freefunc_type(freefunc))) +#define sk_GENERAL_SUBTREE_set_cmp_func(sk, cmp) ((sk_GENERAL_SUBTREE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_GENERAL_SUBTREE_sk_type(sk), ossl_check_GENERAL_SUBTREE_compfunc_type(cmp))) + struct NAME_CONSTRAINTS_st { STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; @@ -325,7 +609,7 @@ struct ISSUING_DIST_POINT_st { ",name:", (val)->name, ",value:", (val)->value) # define X509V3_set_ctx_test(ctx) \ - X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, X509V3_CTX_TEST) # define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; # define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ @@ -343,6 +627,13 @@ struct ISSUING_DIST_POINT_st { 0,0,0,0, \ NULL} +#define EXT_UTF8STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_UTF8STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_UTF8STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_UTF8STRING, \ + 0,0,0,0, \ + NULL} + # define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} /* X509_PURPOSE stuff */ @@ -353,8 +644,7 @@ struct ISSUING_DIST_POINT_st { # define EXFLAG_NSCERT 0x8 # define EXFLAG_CA 0x10 -/* Really self issued not necessarily self signed */ -# define EXFLAG_SI 0x20 +# define EXFLAG_SI 0x20 /* self-issued, maybe not self-signed */ # define EXFLAG_V1 0x40 # define EXFLAG_INVALID 0x80 /* EXFLAG_SET is set to indicate that some values have been precomputed */ @@ -366,6 +656,10 @@ struct ISSUING_DIST_POINT_st { # define EXFLAG_FRESHEST 0x1000 # define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ +# define EXFLAG_BCONS_CRITICAL 0x10000 +# define EXFLAG_AKID_CRITICAL 0x20000 +# define EXFLAG_SKID_CRITICAL 0x40000 +# define EXFLAG_SAN_CRITICAL 0x80000 # define EXFLAG_NO_FINGERPRINT 0x100000 # define KU_DIGITAL_SIGNATURE 0x0080 @@ -391,7 +685,7 @@ struct ISSUING_DIST_POINT_st { # define XKU_SSL_CLIENT 0x2 # define XKU_SMIME 0x4 # define XKU_CODE_SIGN 0x8 -# define XKU_SGC 0x10 +# define XKU_SGC 0x10 /* Netscape or MS Server-Gated Crypto */ # define XKU_OCSP_SIGN 0x20 # define XKU_TIMESTAMP 0x40 # define XKU_DVCS 0x80 @@ -410,6 +704,35 @@ typedef struct x509_purpose_st { void *usr_data; } X509_PURPOSE; +SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE) +#define sk_X509_PURPOSE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_value(sk, idx) ((X509_PURPOSE *)OPENSSL_sk_value(ossl_check_const_X509_PURPOSE_sk_type(sk), (idx))) +#define sk_X509_PURPOSE_new(cmp) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new(ossl_check_X509_PURPOSE_compfunc_type(cmp))) +#define sk_X509_PURPOSE_new_null() ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_null()) +#define sk_X509_PURPOSE_new_reserve(cmp, n) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_new_reserve(ossl_check_X509_PURPOSE_compfunc_type(cmp), (n))) +#define sk_X509_PURPOSE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_PURPOSE_sk_type(sk), (n)) +#define sk_X509_PURPOSE_free(sk) OPENSSL_sk_free(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_delete(sk, i) ((X509_PURPOSE *)OPENSSL_sk_delete(ossl_check_X509_PURPOSE_sk_type(sk), (i))) +#define sk_X509_PURPOSE_delete_ptr(sk, ptr) ((X509_PURPOSE *)OPENSSL_sk_delete_ptr(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr))) +#define sk_X509_PURPOSE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_pop(sk) ((X509_PURPOSE *)OPENSSL_sk_pop(ossl_check_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_shift(sk) ((X509_PURPOSE *)OPENSSL_sk_shift(ossl_check_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_PURPOSE_sk_type(sk),ossl_check_X509_PURPOSE_freefunc_type(freefunc)) +#define sk_X509_PURPOSE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), (idx)) +#define sk_X509_PURPOSE_set(sk, idx, ptr) ((X509_PURPOSE *)OPENSSL_sk_set(ossl_check_X509_PURPOSE_sk_type(sk), (idx), ossl_check_X509_PURPOSE_type(ptr))) +#define sk_X509_PURPOSE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr)) +#define sk_X509_PURPOSE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_type(ptr), pnum) +#define sk_X509_PURPOSE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_PURPOSE_sk_type(sk)) +#define sk_X509_PURPOSE_dup(sk) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_dup(ossl_check_const_X509_PURPOSE_sk_type(sk))) +#define sk_X509_PURPOSE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_PURPOSE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_copyfunc_type(copyfunc), ossl_check_X509_PURPOSE_freefunc_type(freefunc))) +#define sk_X509_PURPOSE_set_cmp_func(sk, cmp) ((sk_X509_PURPOSE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_PURPOSE_sk_type(sk), ossl_check_X509_PURPOSE_compfunc_type(cmp))) + + + # define X509_PURPOSE_SSL_CLIENT 1 # define X509_PURPOSE_SSL_SERVER 2 # define X509_PURPOSE_NS_SSL_SERVER 3 @@ -446,13 +769,13 @@ typedef struct x509_purpose_st { # define X509V3_ADD_DELETE 5L # define X509V3_ADD_SILENT 0x10 -DEFINE_STACK_OF(X509_PURPOSE) - DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) DECLARE_ASN1_FUNCTIONS(SXNET) DECLARE_ASN1_FUNCTIONS(SXNETID) +DECLARE_ASN1_FUNCTIONS(ISSUER_SIGN_TOOL) + int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, int userlen); @@ -468,7 +791,7 @@ DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) -GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); +DECLARE_ASN1_DUP_FUNCTION(GENERAL_NAME) int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, @@ -480,6 +803,9 @@ STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *str); +char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, ASN1_UTF8STRING *utf8); +ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen, @@ -525,7 +851,7 @@ DECLARE_ASN1_FUNCTIONS(DIST_POINT) DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) -int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, const X509_NAME *iname); int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); @@ -551,13 +877,14 @@ GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, X509V3_CTX *ctx, int gen_type, const char *value, int is_nc); -# ifdef HEADER_CONF_H +# ifdef OPENSSL_CONF_H GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf); GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc); + void X509V3_conf_free(CONF_VALUE *val); X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, @@ -599,6 +926,8 @@ void X509V3_string_free(X509V3_CTX *ctx, char *str); void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, X509_REQ *req, X509_CRL *crl, int flags); +/* For API backward compatibility, this is separate from X509V3_set_ctx(): */ +int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey); int X509V3_add_value(const char *name, const char *value, STACK_OF(CONF_VALUE) **extlist); @@ -630,7 +959,7 @@ X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, int crit, unsigned long flags); -#if OPENSSL_API_COMPAT < 0x10100000L +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 /* The new declarations are in crypto.h, but the old ones were here. */ # define hex_to_string OPENSSL_buf2hexstr # define string_to_hex OPENSSL_hexstr2buf @@ -652,7 +981,7 @@ int X509_check_purpose(X509 *x, int id, int ca); int X509_supported_extension(X509_EXTENSION *ex); int X509_PURPOSE_set(int *p, int purpose); int X509_check_issued(X509 *issuer, X509 *subject); -int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); +int X509_check_akid(const X509 *issuer, const AUTHORITY_KEYID *akid); void X509_set_proxy_flag(X509 *x); void X509_set_proxy_pathlen(X509 *x, long l); long X509_get_proxy_pathlen(X509 *x); @@ -719,7 +1048,34 @@ int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, unsigned long chtype); void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); -DEFINE_STACK_OF(X509_POLICY_NODE) +SKM_DEFINE_STACK_OF_INTERNAL(X509_POLICY_NODE, X509_POLICY_NODE, X509_POLICY_NODE) +#define sk_X509_POLICY_NODE_num(sk) OPENSSL_sk_num(ossl_check_const_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_value(sk, idx) ((X509_POLICY_NODE *)OPENSSL_sk_value(ossl_check_const_X509_POLICY_NODE_sk_type(sk), (idx))) +#define sk_X509_POLICY_NODE_new(cmp) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new(ossl_check_X509_POLICY_NODE_compfunc_type(cmp))) +#define sk_X509_POLICY_NODE_new_null() ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_null()) +#define sk_X509_POLICY_NODE_new_reserve(cmp, n) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_new_reserve(ossl_check_X509_POLICY_NODE_compfunc_type(cmp), (n))) +#define sk_X509_POLICY_NODE_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_X509_POLICY_NODE_sk_type(sk), (n)) +#define sk_X509_POLICY_NODE_free(sk) OPENSSL_sk_free(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_zero(sk) OPENSSL_sk_zero(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_delete(sk, i) ((X509_POLICY_NODE *)OPENSSL_sk_delete(ossl_check_X509_POLICY_NODE_sk_type(sk), (i))) +#define sk_X509_POLICY_NODE_delete_ptr(sk, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_delete_ptr(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr))) +#define sk_X509_POLICY_NODE_push(sk, ptr) OPENSSL_sk_push(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_pop(sk) ((X509_POLICY_NODE *)OPENSSL_sk_pop(ossl_check_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_shift(sk) ((X509_POLICY_NODE *)OPENSSL_sk_shift(ossl_check_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_X509_POLICY_NODE_sk_type(sk),ossl_check_X509_POLICY_NODE_freefunc_type(freefunc)) +#define sk_X509_POLICY_NODE_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), (idx)) +#define sk_X509_POLICY_NODE_set(sk, idx, ptr) ((X509_POLICY_NODE *)OPENSSL_sk_set(ossl_check_X509_POLICY_NODE_sk_type(sk), (idx), ossl_check_X509_POLICY_NODE_type(ptr))) +#define sk_X509_POLICY_NODE_find(sk, ptr) OPENSSL_sk_find(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr)) +#define sk_X509_POLICY_NODE_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_type(ptr), pnum) +#define sk_X509_POLICY_NODE_sort(sk) OPENSSL_sk_sort(ossl_check_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_X509_POLICY_NODE_sk_type(sk)) +#define sk_X509_POLICY_NODE_dup(sk) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_dup(ossl_check_const_X509_POLICY_NODE_sk_type(sk))) +#define sk_X509_POLICY_NODE_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(X509_POLICY_NODE) *)OPENSSL_sk_deep_copy(ossl_check_const_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_copyfunc_type(copyfunc), ossl_check_X509_POLICY_NODE_freefunc_type(freefunc))) +#define sk_X509_POLICY_NODE_set_cmp_func(sk, cmp) ((sk_X509_POLICY_NODE_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_X509_POLICY_NODE_sk_type(sk), ossl_check_X509_POLICY_NODE_compfunc_type(cmp))) + + #ifndef OPENSSL_NO_RFC3779 typedef struct ASRange_st { @@ -737,8 +1093,35 @@ typedef struct ASIdOrRange_st { } u; } ASIdOrRange; +SKM_DEFINE_STACK_OF_INTERNAL(ASIdOrRange, ASIdOrRange, ASIdOrRange) +#define sk_ASIdOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_value(sk, idx) ((ASIdOrRange *)OPENSSL_sk_value(ossl_check_const_ASIdOrRange_sk_type(sk), (idx))) +#define sk_ASIdOrRange_new(cmp) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new(ossl_check_ASIdOrRange_compfunc_type(cmp))) +#define sk_ASIdOrRange_new_null() ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_null()) +#define sk_ASIdOrRange_new_reserve(cmp, n) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_new_reserve(ossl_check_ASIdOrRange_compfunc_type(cmp), (n))) +#define sk_ASIdOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASIdOrRange_sk_type(sk), (n)) +#define sk_ASIdOrRange_free(sk) OPENSSL_sk_free(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_delete(sk, i) ((ASIdOrRange *)OPENSSL_sk_delete(ossl_check_ASIdOrRange_sk_type(sk), (i))) +#define sk_ASIdOrRange_delete_ptr(sk, ptr) ((ASIdOrRange *)OPENSSL_sk_delete_ptr(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr))) +#define sk_ASIdOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_pop(sk) ((ASIdOrRange *)OPENSSL_sk_pop(ossl_check_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_shift(sk) ((ASIdOrRange *)OPENSSL_sk_shift(ossl_check_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASIdOrRange_sk_type(sk),ossl_check_ASIdOrRange_freefunc_type(freefunc)) +#define sk_ASIdOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), (idx)) +#define sk_ASIdOrRange_set(sk, idx, ptr) ((ASIdOrRange *)OPENSSL_sk_set(ossl_check_ASIdOrRange_sk_type(sk), (idx), ossl_check_ASIdOrRange_type(ptr))) +#define sk_ASIdOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr)) +#define sk_ASIdOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_type(ptr), pnum) +#define sk_ASIdOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASIdOrRange_sk_type(sk)) +#define sk_ASIdOrRange_dup(sk) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_dup(ossl_check_const_ASIdOrRange_sk_type(sk))) +#define sk_ASIdOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASIdOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_copyfunc_type(copyfunc), ossl_check_ASIdOrRange_freefunc_type(freefunc))) +#define sk_ASIdOrRange_set_cmp_func(sk, cmp) ((sk_ASIdOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASIdOrRange_sk_type(sk), ossl_check_ASIdOrRange_compfunc_type(cmp))) + + typedef STACK_OF(ASIdOrRange) ASIdOrRanges; -DEFINE_STACK_OF(ASIdOrRange) # define ASIdentifierChoice_inherit 0 # define ASIdentifierChoice_asIdsOrRanges 1 @@ -775,8 +1158,35 @@ typedef struct IPAddressOrRange_st { } u; } IPAddressOrRange; +SKM_DEFINE_STACK_OF_INTERNAL(IPAddressOrRange, IPAddressOrRange, IPAddressOrRange) +#define sk_IPAddressOrRange_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_value(sk, idx) ((IPAddressOrRange *)OPENSSL_sk_value(ossl_check_const_IPAddressOrRange_sk_type(sk), (idx))) +#define sk_IPAddressOrRange_new(cmp) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new(ossl_check_IPAddressOrRange_compfunc_type(cmp))) +#define sk_IPAddressOrRange_new_null() ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_null()) +#define sk_IPAddressOrRange_new_reserve(cmp, n) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressOrRange_compfunc_type(cmp), (n))) +#define sk_IPAddressOrRange_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressOrRange_sk_type(sk), (n)) +#define sk_IPAddressOrRange_free(sk) OPENSSL_sk_free(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_delete(sk, i) ((IPAddressOrRange *)OPENSSL_sk_delete(ossl_check_IPAddressOrRange_sk_type(sk), (i))) +#define sk_IPAddressOrRange_delete_ptr(sk, ptr) ((IPAddressOrRange *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr))) +#define sk_IPAddressOrRange_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_pop(sk) ((IPAddressOrRange *)OPENSSL_sk_pop(ossl_check_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_shift(sk) ((IPAddressOrRange *)OPENSSL_sk_shift(ossl_check_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressOrRange_sk_type(sk),ossl_check_IPAddressOrRange_freefunc_type(freefunc)) +#define sk_IPAddressOrRange_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), (idx)) +#define sk_IPAddressOrRange_set(sk, idx, ptr) ((IPAddressOrRange *)OPENSSL_sk_set(ossl_check_IPAddressOrRange_sk_type(sk), (idx), ossl_check_IPAddressOrRange_type(ptr))) +#define sk_IPAddressOrRange_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr)) +#define sk_IPAddressOrRange_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_type(ptr), pnum) +#define sk_IPAddressOrRange_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressOrRange_sk_type(sk)) +#define sk_IPAddressOrRange_dup(sk) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_dup(ossl_check_const_IPAddressOrRange_sk_type(sk))) +#define sk_IPAddressOrRange_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressOrRange) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_copyfunc_type(copyfunc), ossl_check_IPAddressOrRange_freefunc_type(freefunc))) +#define sk_IPAddressOrRange_set_cmp_func(sk, cmp) ((sk_IPAddressOrRange_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressOrRange_sk_type(sk), ossl_check_IPAddressOrRange_compfunc_type(cmp))) + + typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; -DEFINE_STACK_OF(IPAddressOrRange) # define IPAddressChoice_inherit 0 # define IPAddressChoice_addressesOrRanges 1 @@ -794,8 +1204,36 @@ typedef struct IPAddressFamily_st { IPAddressChoice *ipAddressChoice; } IPAddressFamily; +SKM_DEFINE_STACK_OF_INTERNAL(IPAddressFamily, IPAddressFamily, IPAddressFamily) +#define sk_IPAddressFamily_num(sk) OPENSSL_sk_num(ossl_check_const_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_value(sk, idx) ((IPAddressFamily *)OPENSSL_sk_value(ossl_check_const_IPAddressFamily_sk_type(sk), (idx))) +#define sk_IPAddressFamily_new(cmp) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new(ossl_check_IPAddressFamily_compfunc_type(cmp))) +#define sk_IPAddressFamily_new_null() ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_null()) +#define sk_IPAddressFamily_new_reserve(cmp, n) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_new_reserve(ossl_check_IPAddressFamily_compfunc_type(cmp), (n))) +#define sk_IPAddressFamily_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_IPAddressFamily_sk_type(sk), (n)) +#define sk_IPAddressFamily_free(sk) OPENSSL_sk_free(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_zero(sk) OPENSSL_sk_zero(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_delete(sk, i) ((IPAddressFamily *)OPENSSL_sk_delete(ossl_check_IPAddressFamily_sk_type(sk), (i))) +#define sk_IPAddressFamily_delete_ptr(sk, ptr) ((IPAddressFamily *)OPENSSL_sk_delete_ptr(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr))) +#define sk_IPAddressFamily_push(sk, ptr) OPENSSL_sk_push(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_pop(sk) ((IPAddressFamily *)OPENSSL_sk_pop(ossl_check_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_shift(sk) ((IPAddressFamily *)OPENSSL_sk_shift(ossl_check_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_IPAddressFamily_sk_type(sk),ossl_check_IPAddressFamily_freefunc_type(freefunc)) +#define sk_IPAddressFamily_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), (idx)) +#define sk_IPAddressFamily_set(sk, idx, ptr) ((IPAddressFamily *)OPENSSL_sk_set(ossl_check_IPAddressFamily_sk_type(sk), (idx), ossl_check_IPAddressFamily_type(ptr))) +#define sk_IPAddressFamily_find(sk, ptr) OPENSSL_sk_find(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr)) +#define sk_IPAddressFamily_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_type(ptr), pnum) +#define sk_IPAddressFamily_sort(sk) OPENSSL_sk_sort(ossl_check_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_IPAddressFamily_sk_type(sk)) +#define sk_IPAddressFamily_dup(sk) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_dup(ossl_check_const_IPAddressFamily_sk_type(sk))) +#define sk_IPAddressFamily_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(IPAddressFamily) *)OPENSSL_sk_deep_copy(ossl_check_const_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_copyfunc_type(copyfunc), ossl_check_IPAddressFamily_freefunc_type(freefunc))) +#define sk_IPAddressFamily_set_cmp_func(sk, cmp) ((sk_IPAddressFamily_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_IPAddressFamily_sk_type(sk), ossl_check_IPAddressFamily_compfunc_type(cmp))) + + + typedef STACK_OF(IPAddressFamily) IPAddrBlocks; -DEFINE_STACK_OF(IPAddressFamily) DECLARE_ASN1_FUNCTIONS(IPAddressRange) DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) @@ -867,7 +1305,33 @@ int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, #endif /* OPENSSL_NO_RFC3779 */ -DEFINE_STACK_OF(ASN1_STRING) +SKM_DEFINE_STACK_OF_INTERNAL(ASN1_STRING, ASN1_STRING, ASN1_STRING) +#define sk_ASN1_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_value(sk, idx) ((ASN1_STRING *)OPENSSL_sk_value(ossl_check_const_ASN1_STRING_sk_type(sk), (idx))) +#define sk_ASN1_STRING_new(cmp) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new(ossl_check_ASN1_STRING_compfunc_type(cmp))) +#define sk_ASN1_STRING_new_null() ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_null()) +#define sk_ASN1_STRING_new_reserve(cmp, n) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_new_reserve(ossl_check_ASN1_STRING_compfunc_type(cmp), (n))) +#define sk_ASN1_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ASN1_STRING_sk_type(sk), (n)) +#define sk_ASN1_STRING_free(sk) OPENSSL_sk_free(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_delete(sk, i) ((ASN1_STRING *)OPENSSL_sk_delete(ossl_check_ASN1_STRING_sk_type(sk), (i))) +#define sk_ASN1_STRING_delete_ptr(sk, ptr) ((ASN1_STRING *)OPENSSL_sk_delete_ptr(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr))) +#define sk_ASN1_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_pop(sk) ((ASN1_STRING *)OPENSSL_sk_pop(ossl_check_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_shift(sk) ((ASN1_STRING *)OPENSSL_sk_shift(ossl_check_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ASN1_STRING_sk_type(sk),ossl_check_ASN1_STRING_freefunc_type(freefunc)) +#define sk_ASN1_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), (idx)) +#define sk_ASN1_STRING_set(sk, idx, ptr) ((ASN1_STRING *)OPENSSL_sk_set(ossl_check_ASN1_STRING_sk_type(sk), (idx), ossl_check_ASN1_STRING_type(ptr))) +#define sk_ASN1_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr)) +#define sk_ASN1_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_type(ptr), pnum) +#define sk_ASN1_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ASN1_STRING_sk_type(sk)) +#define sk_ASN1_STRING_dup(sk) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_dup(ossl_check_const_ASN1_STRING_sk_type(sk))) +#define sk_ASN1_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ASN1_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_copyfunc_type(copyfunc), ossl_check_ASN1_STRING_freefunc_type(freefunc))) +#define sk_ASN1_STRING_set_cmp_func(sk, cmp) ((sk_ASN1_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ASN1_STRING_sk_type(sk), ossl_check_ASN1_STRING_compfunc_type(cmp))) + /* * Admission Syntax @@ -880,8 +1344,59 @@ DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) DECLARE_ASN1_FUNCTIONS(ADMISSIONS) DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) -DEFINE_STACK_OF(ADMISSIONS) -DEFINE_STACK_OF(PROFESSION_INFO) +SKM_DEFINE_STACK_OF_INTERNAL(PROFESSION_INFO, PROFESSION_INFO, PROFESSION_INFO) +#define sk_PROFESSION_INFO_num(sk) OPENSSL_sk_num(ossl_check_const_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_value(sk, idx) ((PROFESSION_INFO *)OPENSSL_sk_value(ossl_check_const_PROFESSION_INFO_sk_type(sk), (idx))) +#define sk_PROFESSION_INFO_new(cmp) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new(ossl_check_PROFESSION_INFO_compfunc_type(cmp))) +#define sk_PROFESSION_INFO_new_null() ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_null()) +#define sk_PROFESSION_INFO_new_reserve(cmp, n) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_new_reserve(ossl_check_PROFESSION_INFO_compfunc_type(cmp), (n))) +#define sk_PROFESSION_INFO_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_PROFESSION_INFO_sk_type(sk), (n)) +#define sk_PROFESSION_INFO_free(sk) OPENSSL_sk_free(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_zero(sk) OPENSSL_sk_zero(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_delete(sk, i) ((PROFESSION_INFO *)OPENSSL_sk_delete(ossl_check_PROFESSION_INFO_sk_type(sk), (i))) +#define sk_PROFESSION_INFO_delete_ptr(sk, ptr) ((PROFESSION_INFO *)OPENSSL_sk_delete_ptr(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr))) +#define sk_PROFESSION_INFO_push(sk, ptr) OPENSSL_sk_push(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_pop(sk) ((PROFESSION_INFO *)OPENSSL_sk_pop(ossl_check_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_shift(sk) ((PROFESSION_INFO *)OPENSSL_sk_shift(ossl_check_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_PROFESSION_INFO_sk_type(sk),ossl_check_PROFESSION_INFO_freefunc_type(freefunc)) +#define sk_PROFESSION_INFO_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), (idx)) +#define sk_PROFESSION_INFO_set(sk, idx, ptr) ((PROFESSION_INFO *)OPENSSL_sk_set(ossl_check_PROFESSION_INFO_sk_type(sk), (idx), ossl_check_PROFESSION_INFO_type(ptr))) +#define sk_PROFESSION_INFO_find(sk, ptr) OPENSSL_sk_find(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr)) +#define sk_PROFESSION_INFO_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_type(ptr), pnum) +#define sk_PROFESSION_INFO_sort(sk) OPENSSL_sk_sort(ossl_check_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_PROFESSION_INFO_sk_type(sk)) +#define sk_PROFESSION_INFO_dup(sk) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_dup(ossl_check_const_PROFESSION_INFO_sk_type(sk))) +#define sk_PROFESSION_INFO_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(PROFESSION_INFO) *)OPENSSL_sk_deep_copy(ossl_check_const_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_copyfunc_type(copyfunc), ossl_check_PROFESSION_INFO_freefunc_type(freefunc))) +#define sk_PROFESSION_INFO_set_cmp_func(sk, cmp) ((sk_PROFESSION_INFO_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_PROFESSION_INFO_sk_type(sk), ossl_check_PROFESSION_INFO_compfunc_type(cmp))) +SKM_DEFINE_STACK_OF_INTERNAL(ADMISSIONS, ADMISSIONS, ADMISSIONS) +#define sk_ADMISSIONS_num(sk) OPENSSL_sk_num(ossl_check_const_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_value(sk, idx) ((ADMISSIONS *)OPENSSL_sk_value(ossl_check_const_ADMISSIONS_sk_type(sk), (idx))) +#define sk_ADMISSIONS_new(cmp) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new(ossl_check_ADMISSIONS_compfunc_type(cmp))) +#define sk_ADMISSIONS_new_null() ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_null()) +#define sk_ADMISSIONS_new_reserve(cmp, n) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_new_reserve(ossl_check_ADMISSIONS_compfunc_type(cmp), (n))) +#define sk_ADMISSIONS_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_ADMISSIONS_sk_type(sk), (n)) +#define sk_ADMISSIONS_free(sk) OPENSSL_sk_free(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_zero(sk) OPENSSL_sk_zero(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_delete(sk, i) ((ADMISSIONS *)OPENSSL_sk_delete(ossl_check_ADMISSIONS_sk_type(sk), (i))) +#define sk_ADMISSIONS_delete_ptr(sk, ptr) ((ADMISSIONS *)OPENSSL_sk_delete_ptr(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr))) +#define sk_ADMISSIONS_push(sk, ptr) OPENSSL_sk_push(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_pop(sk) ((ADMISSIONS *)OPENSSL_sk_pop(ossl_check_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_shift(sk) ((ADMISSIONS *)OPENSSL_sk_shift(ossl_check_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_ADMISSIONS_sk_type(sk),ossl_check_ADMISSIONS_freefunc_type(freefunc)) +#define sk_ADMISSIONS_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), (idx)) +#define sk_ADMISSIONS_set(sk, idx, ptr) ((ADMISSIONS *)OPENSSL_sk_set(ossl_check_ADMISSIONS_sk_type(sk), (idx), ossl_check_ADMISSIONS_type(ptr))) +#define sk_ADMISSIONS_find(sk, ptr) OPENSSL_sk_find(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr)) +#define sk_ADMISSIONS_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_type(ptr), pnum) +#define sk_ADMISSIONS_sort(sk) OPENSSL_sk_sort(ossl_check_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_ADMISSIONS_sk_type(sk)) +#define sk_ADMISSIONS_dup(sk) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_dup(ossl_check_const_ADMISSIONS_sk_type(sk))) +#define sk_ADMISSIONS_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(ADMISSIONS) *)OPENSSL_sk_deep_copy(ossl_check_const_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_copyfunc_type(copyfunc), ossl_check_ADMISSIONS_freefunc_type(freefunc))) +#define sk_ADMISSIONS_set_cmp_func(sk, cmp) ((sk_ADMISSIONS_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_ADMISSIONS_sk_type(sk), ossl_check_ADMISSIONS_compfunc_type(cmp))) + typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h.in new file mode 100644 index 00000000..e33c9d30 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h.in @@ -0,0 +1,1020 @@ +/* + * {- join("\n * ", @autowarntext) -} + * + * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +{- +use OpenSSL::stackhash qw(generate_stack_macros); +-} + +#ifndef OPENSSL_X509V3_H +# define OPENSSL_X509V3_H +# pragma once + +# include +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define HEADER_X509V3_H +# endif + +# include +# include +# include +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward reference */ +struct v3_ext_method; +struct v3_ext_ctx; + +/* Useful typedefs */ + +typedef void *(*X509V3_EXT_NEW)(void); +typedef void (*X509V3_EXT_FREE) (void *); +typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); +typedef int (*X509V3_EXT_I2D) (const void *, unsigned char **); +typedef STACK_OF(CONF_VALUE) * + (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, + STACK_OF(CONF_VALUE) *extlist); +typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, + STACK_OF(CONF_VALUE) *values); +typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, + void *ext); +typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); +typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, + BIO *out, int indent); +typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); + +/* V3 extension structure */ + +struct v3_ext_method { + int ext_nid; + int ext_flags; +/* If this is set the following four fields are ignored */ + ASN1_ITEM_EXP *it; +/* Old style ASN1 calls */ + X509V3_EXT_NEW ext_new; + X509V3_EXT_FREE ext_free; + X509V3_EXT_D2I d2i; + X509V3_EXT_I2D i2d; +/* The following pair is used for string extensions */ + X509V3_EXT_I2S i2s; + X509V3_EXT_S2I s2i; +/* The following pair is used for multi-valued extensions */ + X509V3_EXT_I2V i2v; + X509V3_EXT_V2I v2i; +/* The following are used for raw extensions */ + X509V3_EXT_I2R i2r; + X509V3_EXT_R2I r2i; + void *usr_data; /* Any extension specific data */ +}; + +typedef struct X509V3_CONF_METHOD_st { + char *(*get_string) (void *db, const char *section, const char *value); + STACK_OF(CONF_VALUE) *(*get_section) (void *db, const char *section); + void (*free_string) (void *db, char *string); + void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); +} X509V3_CONF_METHOD; + +/* Context specific info for producing X509 v3 extensions*/ +struct v3_ext_ctx { +# define X509V3_CTX_TEST 0x1 +# ifndef OPENSSL_NO_DEPRECATED_3_0 +# define CTX_TEST X509V3_CTX_TEST +# endif +# define X509V3_CTX_REPLACE 0x2 + int flags; + X509 *issuer_cert; + X509 *subject_cert; + X509_REQ *subject_req; + X509_CRL *crl; + X509V3_CONF_METHOD *db_meth; + void *db; + EVP_PKEY *issuer_pkey; +/* Maybe more here */ +}; + +typedef struct v3_ext_method X509V3_EXT_METHOD; + +{- + generate_stack_macros("X509V3_EXT_METHOD"); +-} + +/* ext_flags values */ +# define X509V3_EXT_DYNAMIC 0x1 +# define X509V3_EXT_CTX_DEP 0x2 +# define X509V3_EXT_MULTILINE 0x4 + +typedef BIT_STRING_BITNAME ENUMERATED_NAMES; + +typedef struct BASIC_CONSTRAINTS_st { + int ca; + ASN1_INTEGER *pathlen; +} BASIC_CONSTRAINTS; + +typedef struct PKEY_USAGE_PERIOD_st { + ASN1_GENERALIZEDTIME *notBefore; + ASN1_GENERALIZEDTIME *notAfter; +} PKEY_USAGE_PERIOD; + +typedef struct otherName_st { + ASN1_OBJECT *type_id; + ASN1_TYPE *value; +} OTHERNAME; + +typedef struct EDIPartyName_st { + ASN1_STRING *nameAssigner; + ASN1_STRING *partyName; +} EDIPARTYNAME; + +typedef struct GENERAL_NAME_st { +# define GEN_OTHERNAME 0 +# define GEN_EMAIL 1 +# define GEN_DNS 2 +# define GEN_X400 3 +# define GEN_DIRNAME 4 +# define GEN_EDIPARTY 5 +# define GEN_URI 6 +# define GEN_IPADD 7 +# define GEN_RID 8 + int type; + union { + char *ptr; + OTHERNAME *otherName; /* otherName */ + ASN1_IA5STRING *rfc822Name; + ASN1_IA5STRING *dNSName; + ASN1_STRING *x400Address; + X509_NAME *directoryName; + EDIPARTYNAME *ediPartyName; + ASN1_IA5STRING *uniformResourceIdentifier; + ASN1_OCTET_STRING *iPAddress; + ASN1_OBJECT *registeredID; + /* Old names */ + ASN1_OCTET_STRING *ip; /* iPAddress */ + X509_NAME *dirn; /* dirn */ + ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, + * uniformResourceIdentifier */ + ASN1_OBJECT *rid; /* registeredID */ + ASN1_TYPE *other; /* x400Address */ + } d; +} GENERAL_NAME; + +typedef struct ACCESS_DESCRIPTION_st { + ASN1_OBJECT *method; + GENERAL_NAME *location; +} ACCESS_DESCRIPTION; + +{- + generate_stack_macros("ACCESS_DESCRIPTION") + .generate_stack_macros("GENERAL_NAME"); +-} + +typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; +typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; +typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; +typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; + +{- + generate_stack_macros("GENERAL_NAMES"); +-} + +typedef struct DIST_POINT_NAME_st { + int type; + union { + GENERAL_NAMES *fullname; + STACK_OF(X509_NAME_ENTRY) *relativename; + } name; +/* If relativename then this contains the full distribution point name */ + X509_NAME *dpname; +} DIST_POINT_NAME; +/* All existing reasons */ +# define CRLDP_ALL_REASONS 0x807f + +# define CRL_REASON_NONE -1 +# define CRL_REASON_UNSPECIFIED 0 +# define CRL_REASON_KEY_COMPROMISE 1 +# define CRL_REASON_CA_COMPROMISE 2 +# define CRL_REASON_AFFILIATION_CHANGED 3 +# define CRL_REASON_SUPERSEDED 4 +# define CRL_REASON_CESSATION_OF_OPERATION 5 +# define CRL_REASON_CERTIFICATE_HOLD 6 +# define CRL_REASON_REMOVE_FROM_CRL 8 +# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 +# define CRL_REASON_AA_COMPROMISE 10 + +struct DIST_POINT_st { + DIST_POINT_NAME *distpoint; + ASN1_BIT_STRING *reasons; + GENERAL_NAMES *CRLissuer; + int dp_reasons; +}; + +{- + generate_stack_macros("DIST_POINT"); +-} + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; + +struct AUTHORITY_KEYID_st { + ASN1_OCTET_STRING *keyid; + GENERAL_NAMES *issuer; + ASN1_INTEGER *serial; +}; + +/* Strong extranet structures */ + +typedef struct SXNET_ID_st { + ASN1_INTEGER *zone; + ASN1_OCTET_STRING *user; +} SXNETID; + +{- + generate_stack_macros("SXNETID"); +-} + + +typedef struct SXNET_st { + ASN1_INTEGER *version; + STACK_OF(SXNETID) *ids; +} SXNET; + +typedef struct ISSUER_SIGN_TOOL_st { + ASN1_UTF8STRING *signTool; + ASN1_UTF8STRING *cATool; + ASN1_UTF8STRING *signToolCert; + ASN1_UTF8STRING *cAToolCert; +} ISSUER_SIGN_TOOL; + +typedef struct NOTICEREF_st { + ASN1_STRING *organization; + STACK_OF(ASN1_INTEGER) *noticenos; +} NOTICEREF; + +typedef struct USERNOTICE_st { + NOTICEREF *noticeref; + ASN1_STRING *exptext; +} USERNOTICE; + +typedef struct POLICYQUALINFO_st { + ASN1_OBJECT *pqualid; + union { + ASN1_IA5STRING *cpsuri; + USERNOTICE *usernotice; + ASN1_TYPE *other; + } d; +} POLICYQUALINFO; + +{- + generate_stack_macros("POLICYQUALINFO"); +-} + + +typedef struct POLICYINFO_st { + ASN1_OBJECT *policyid; + STACK_OF(POLICYQUALINFO) *qualifiers; +} POLICYINFO; + +{- + generate_stack_macros("POLICYINFO"); +-} + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; + +typedef struct POLICY_MAPPING_st { + ASN1_OBJECT *issuerDomainPolicy; + ASN1_OBJECT *subjectDomainPolicy; +} POLICY_MAPPING; + +{- + generate_stack_macros("POLICY_MAPPING"); +-} + +typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; + +typedef struct GENERAL_SUBTREE_st { + GENERAL_NAME *base; + ASN1_INTEGER *minimum; + ASN1_INTEGER *maximum; +} GENERAL_SUBTREE; + +{- + generate_stack_macros("GENERAL_SUBTREE"); +-} + +struct NAME_CONSTRAINTS_st { + STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; + STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; +}; + +typedef struct POLICY_CONSTRAINTS_st { + ASN1_INTEGER *requireExplicitPolicy; + ASN1_INTEGER *inhibitPolicyMapping; +} POLICY_CONSTRAINTS; + +/* Proxy certificate structures, see RFC 3820 */ +typedef struct PROXY_POLICY_st { + ASN1_OBJECT *policyLanguage; + ASN1_OCTET_STRING *policy; +} PROXY_POLICY; + +typedef struct PROXY_CERT_INFO_EXTENSION_st { + ASN1_INTEGER *pcPathLengthConstraint; + PROXY_POLICY *proxyPolicy; +} PROXY_CERT_INFO_EXTENSION; + +DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) +DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) + +struct ISSUING_DIST_POINT_st { + DIST_POINT_NAME *distpoint; + int onlyuser; + int onlyCA; + ASN1_BIT_STRING *onlysomereasons; + int indirectCRL; + int onlyattr; +}; + +/* Values in idp_flags field */ +/* IDP present */ +# define IDP_PRESENT 0x1 +/* IDP values inconsistent */ +# define IDP_INVALID 0x2 +/* onlyuser true */ +# define IDP_ONLYUSER 0x4 +/* onlyCA true */ +# define IDP_ONLYCA 0x8 +/* onlyattr true */ +# define IDP_ONLYATTR 0x10 +/* indirectCRL true */ +# define IDP_INDIRECT 0x20 +/* onlysomereasons present */ +# define IDP_REASONS 0x40 + +# define X509V3_conf_err(val) ERR_add_error_data(6, \ + "section:", (val)->section, \ + ",name:", (val)->name, ",value:", (val)->value) + +# define X509V3_set_ctx_test(ctx) \ + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, X509V3_CTX_TEST) +# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; + +# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ + 0,0,0,0, \ + 0,0, \ + (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ + (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ + NULL, NULL, \ + table} + +# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ + 0,0,0,0, \ + NULL} + +#define EXT_UTF8STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_UTF8STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_UTF8STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_UTF8STRING, \ + 0,0,0,0, \ + NULL} + +# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + +/* X509_PURPOSE stuff */ + +# define EXFLAG_BCONS 0x1 +# define EXFLAG_KUSAGE 0x2 +# define EXFLAG_XKUSAGE 0x4 +# define EXFLAG_NSCERT 0x8 + +# define EXFLAG_CA 0x10 +# define EXFLAG_SI 0x20 /* self-issued, maybe not self-signed */ +# define EXFLAG_V1 0x40 +# define EXFLAG_INVALID 0x80 +/* EXFLAG_SET is set to indicate that some values have been precomputed */ +# define EXFLAG_SET 0x100 +# define EXFLAG_CRITICAL 0x200 +# define EXFLAG_PROXY 0x400 + +# define EXFLAG_INVALID_POLICY 0x800 +# define EXFLAG_FRESHEST 0x1000 +# define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ + +# define EXFLAG_BCONS_CRITICAL 0x10000 +# define EXFLAG_AKID_CRITICAL 0x20000 +# define EXFLAG_SKID_CRITICAL 0x40000 +# define EXFLAG_SAN_CRITICAL 0x80000 +# define EXFLAG_NO_FINGERPRINT 0x100000 + +# define KU_DIGITAL_SIGNATURE 0x0080 +# define KU_NON_REPUDIATION 0x0040 +# define KU_KEY_ENCIPHERMENT 0x0020 +# define KU_DATA_ENCIPHERMENT 0x0010 +# define KU_KEY_AGREEMENT 0x0008 +# define KU_KEY_CERT_SIGN 0x0004 +# define KU_CRL_SIGN 0x0002 +# define KU_ENCIPHER_ONLY 0x0001 +# define KU_DECIPHER_ONLY 0x8000 + +# define NS_SSL_CLIENT 0x80 +# define NS_SSL_SERVER 0x40 +# define NS_SMIME 0x20 +# define NS_OBJSIGN 0x10 +# define NS_SSL_CA 0x04 +# define NS_SMIME_CA 0x02 +# define NS_OBJSIGN_CA 0x01 +# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) + +# define XKU_SSL_SERVER 0x1 +# define XKU_SSL_CLIENT 0x2 +# define XKU_SMIME 0x4 +# define XKU_CODE_SIGN 0x8 +# define XKU_SGC 0x10 /* Netscape or MS Server-Gated Crypto */ +# define XKU_OCSP_SIGN 0x20 +# define XKU_TIMESTAMP 0x40 +# define XKU_DVCS 0x80 +# define XKU_ANYEKU 0x100 + +# define X509_PURPOSE_DYNAMIC 0x1 +# define X509_PURPOSE_DYNAMIC_NAME 0x2 + +typedef struct x509_purpose_st { + int purpose; + int trust; /* Default trust ID */ + int flags; + int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); + char *name; + char *sname; + void *usr_data; +} X509_PURPOSE; + +{- + generate_stack_macros("X509_PURPOSE"); +-} + + +# define X509_PURPOSE_SSL_CLIENT 1 +# define X509_PURPOSE_SSL_SERVER 2 +# define X509_PURPOSE_NS_SSL_SERVER 3 +# define X509_PURPOSE_SMIME_SIGN 4 +# define X509_PURPOSE_SMIME_ENCRYPT 5 +# define X509_PURPOSE_CRL_SIGN 6 +# define X509_PURPOSE_ANY 7 +# define X509_PURPOSE_OCSP_HELPER 8 +# define X509_PURPOSE_TIMESTAMP_SIGN 9 + +# define X509_PURPOSE_MIN 1 +# define X509_PURPOSE_MAX 9 + +/* Flags for X509V3_EXT_print() */ + +# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) +/* Return error for unknown extensions */ +# define X509V3_EXT_DEFAULT 0 +/* Print error for unknown extensions */ +# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) +/* ASN1 parse unknown extensions */ +# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) +/* BIO_dump unknown extensions */ +# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) + +/* Flags for X509V3_add1_i2d */ + +# define X509V3_ADD_OP_MASK 0xfL +# define X509V3_ADD_DEFAULT 0L +# define X509V3_ADD_APPEND 1L +# define X509V3_ADD_REPLACE 2L +# define X509V3_ADD_REPLACE_EXISTING 3L +# define X509V3_ADD_KEEP_EXISTING 4L +# define X509V3_ADD_DELETE 5L +# define X509V3_ADD_SILENT 0x10 + +DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) + +DECLARE_ASN1_FUNCTIONS(SXNET) +DECLARE_ASN1_FUNCTIONS(SXNETID) + +DECLARE_ASN1_FUNCTIONS(ISSUER_SIGN_TOOL) + +int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); +int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, + int userlen); +int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user, + int userlen); + +ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const char *zone); +ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); +ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); + +DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) + +DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) +DECLARE_ASN1_DUP_FUNCTION(GENERAL_NAME) +int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); + +ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, + STACK_OF(CONF_VALUE) *nval); +STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + ASN1_BIT_STRING *bits, + STACK_OF(CONF_VALUE) *extlist); +char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); +ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); +char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, ASN1_UTF8STRING *utf8); +ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, + GENERAL_NAME *gen, + STACK_OF(CONF_VALUE) *ret); +int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, + GENERAL_NAMES *gen, + STACK_OF(CONF_VALUE) *extlist); +GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); + +DECLARE_ASN1_FUNCTIONS(OTHERNAME) +DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) +int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); +void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); +void *GENERAL_NAME_get0_value(const GENERAL_NAME *a, int *ptype); +int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, + ASN1_OBJECT *oid, ASN1_TYPE *value); +int GENERAL_NAME_get0_otherName(const GENERAL_NAME *gen, + ASN1_OBJECT **poid, ASN1_TYPE **pvalue); + +char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + const ASN1_OCTET_STRING *ia5); +ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) +int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE) + +DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) +DECLARE_ASN1_FUNCTIONS(POLICYINFO) +DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) +DECLARE_ASN1_FUNCTIONS(USERNOTICE) +DECLARE_ASN1_FUNCTIONS(NOTICEREF) + +DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) +DECLARE_ASN1_FUNCTIONS(DIST_POINT) +DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) +DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) + +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, const X509_NAME *iname); + +int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); +int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); + +DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) +DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) + +DECLARE_ASN1_ITEM(POLICY_MAPPING) +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) +DECLARE_ASN1_ITEM(POLICY_MAPPINGS) + +DECLARE_ASN1_ITEM(GENERAL_SUBTREE) +DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) + +DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) +DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) + +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) +DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) + +GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, int gen_type, + const char *value, int is_nc); + +# ifdef OPENSSL_CONF_H +GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf); +GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf, + int is_nc); + +void X509V3_conf_free(CONF_VALUE *val); + +X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, + const char *value); +int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, + STACK_OF(X509_EXTENSION) **sk); +int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509 *cert); +int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_REQ *req); +int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_CRL *crl); + +X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, + X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *name, const char *value); +int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509 *cert); +int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_REQ *req); +int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_CRL *crl); + +int X509V3_add_value_bool_nf(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool); +int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint); +void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); +void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); +# endif + +char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section); +STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section); +void X509V3_string_free(X509V3_CTX *ctx, char *str); +void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); +void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, + X509_REQ *req, X509_CRL *crl, int flags); +/* For API backward compatibility, this is separate from X509V3_set_ctx(): */ +int X509V3_set_issuer_pkey(X509V3_CTX *ctx, EVP_PKEY *pkey); + +int X509V3_add_value(const char *name, const char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_uchar(const char *name, const unsigned char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_bool(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint, + STACK_OF(CONF_VALUE) **extlist); +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, + const ASN1_ENUMERATED *aint); +int X509V3_EXT_add(X509V3_EXT_METHOD *ext); +int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); +int X509V3_EXT_add_alias(int nid_to, int nid_from); +void X509V3_EXT_cleanup(void); + +const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); +const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); +int X509V3_add_standard_extensions(void); +STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); +void *X509V3_EXT_d2i(X509_EXTENSION *ext); +void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, + int *idx); + +X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); +int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, + int crit, unsigned long flags); + +#ifndef OPENSSL_NO_DEPRECATED_1_1_0 +/* The new declarations are in crypto.h, but the old ones were here. */ +# define hex_to_string OPENSSL_buf2hexstr +# define string_to_hex OPENSSL_hexstr2buf +#endif + +void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, + int ml); +int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, + int indent); +#ifndef OPENSSL_NO_STDIO +int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); +#endif +int X509V3_extensions_print(BIO *out, const char *title, + const STACK_OF(X509_EXTENSION) *exts, + unsigned long flag, int indent); + +int X509_check_ca(X509 *x); +int X509_check_purpose(X509 *x, int id, int ca); +int X509_supported_extension(X509_EXTENSION *ex); +int X509_PURPOSE_set(int *p, int purpose); +int X509_check_issued(X509 *issuer, X509 *subject); +int X509_check_akid(const X509 *issuer, const AUTHORITY_KEYID *akid); +void X509_set_proxy_flag(X509 *x); +void X509_set_proxy_pathlen(X509 *x, long l); +long X509_get_proxy_pathlen(X509 *x); + +uint32_t X509_get_extension_flags(X509 *x); +uint32_t X509_get_key_usage(X509 *x); +uint32_t X509_get_extended_key_usage(X509 *x); +const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); +const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x); +const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x); +const ASN1_INTEGER *X509_get0_authority_serial(X509 *x); + +int X509_PURPOSE_get_count(void); +X509_PURPOSE *X509_PURPOSE_get0(int idx); +int X509_PURPOSE_get_by_sname(const char *sname); +int X509_PURPOSE_get_by_id(int id); +int X509_PURPOSE_add(int id, int trust, int flags, + int (*ck) (const X509_PURPOSE *, const X509 *, int), + const char *name, const char *sname, void *arg); +char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp); +char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); +int X509_PURPOSE_get_trust(const X509_PURPOSE *xp); +void X509_PURPOSE_cleanup(void); +int X509_PURPOSE_get_id(const X509_PURPOSE *); + +STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); +STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); +void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); +STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); +/* Flags for X509_check_* functions */ + +/* + * Always check subject name for host match even if subject alt names present + */ +# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 +/* Disable wildcard matching for dnsName fields and common name. */ +# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 +/* Wildcards must not match a partial label. */ +# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 +/* Allow (non-partial) wildcards to match multiple labels. */ +# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 +/* Constraint verifier subdomain patterns to match a single labels. */ +# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 +/* Never check the subject CN */ +# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20 +/* + * Match reference identifiers starting with "." to any sub-domain. + * This is a non-public flag, turned on implicitly when the subject + * reference identity is a DNS name. + */ +# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 + +int X509_check_host(X509 *x, const char *chk, size_t chklen, + unsigned int flags, char **peername); +int X509_check_email(X509 *x, const char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); + +ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); +ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); +int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, + unsigned long chtype); + +void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); +{- + generate_stack_macros("X509_POLICY_NODE"); +-} + + +#ifndef OPENSSL_NO_RFC3779 +typedef struct ASRange_st { + ASN1_INTEGER *min, *max; +} ASRange; + +# define ASIdOrRange_id 0 +# define ASIdOrRange_range 1 + +typedef struct ASIdOrRange_st { + int type; + union { + ASN1_INTEGER *id; + ASRange *range; + } u; +} ASIdOrRange; + +{- + generate_stack_macros("ASIdOrRange"); +-} + +typedef STACK_OF(ASIdOrRange) ASIdOrRanges; + +# define ASIdentifierChoice_inherit 0 +# define ASIdentifierChoice_asIdsOrRanges 1 + +typedef struct ASIdentifierChoice_st { + int type; + union { + ASN1_NULL *inherit; + ASIdOrRanges *asIdsOrRanges; + } u; +} ASIdentifierChoice; + +typedef struct ASIdentifiers_st { + ASIdentifierChoice *asnum, *rdi; +} ASIdentifiers; + +DECLARE_ASN1_FUNCTIONS(ASRange) +DECLARE_ASN1_FUNCTIONS(ASIdOrRange) +DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) +DECLARE_ASN1_FUNCTIONS(ASIdentifiers) + +typedef struct IPAddressRange_st { + ASN1_BIT_STRING *min, *max; +} IPAddressRange; + +# define IPAddressOrRange_addressPrefix 0 +# define IPAddressOrRange_addressRange 1 + +typedef struct IPAddressOrRange_st { + int type; + union { + ASN1_BIT_STRING *addressPrefix; + IPAddressRange *addressRange; + } u; +} IPAddressOrRange; + +{- + generate_stack_macros("IPAddressOrRange"); +-} + +typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; + +# define IPAddressChoice_inherit 0 +# define IPAddressChoice_addressesOrRanges 1 + +typedef struct IPAddressChoice_st { + int type; + union { + ASN1_NULL *inherit; + IPAddressOrRanges *addressesOrRanges; + } u; +} IPAddressChoice; + +typedef struct IPAddressFamily_st { + ASN1_OCTET_STRING *addressFamily; + IPAddressChoice *ipAddressChoice; +} IPAddressFamily; + +{- + generate_stack_macros("IPAddressFamily"); +-} + + +typedef STACK_OF(IPAddressFamily) IPAddrBlocks; + +DECLARE_ASN1_FUNCTIONS(IPAddressRange) +DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) +DECLARE_ASN1_FUNCTIONS(IPAddressChoice) +DECLARE_ASN1_FUNCTIONS(IPAddressFamily) + +/* + * API tag for elements of the ASIdentifer SEQUENCE. + */ +# define V3_ASID_ASNUM 0 +# define V3_ASID_RDI 1 + +/* + * AFI values, assigned by IANA. It'd be nice to make the AFI + * handling code totally generic, but there are too many little things + * that would need to be defined for other address families for it to + * be worth the trouble. + */ +# define IANA_AFI_IPV4 1 +# define IANA_AFI_IPV6 2 + +/* + * Utilities to construct and extract values from RFC3779 extensions, + * since some of the encodings (particularly for IP address prefixes + * and ranges) are a bit tedious to work with directly. + */ +int X509v3_asid_add_inherit(ASIdentifiers *asid, int which); +int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, + ASN1_INTEGER *min, ASN1_INTEGER *max); +int X509v3_addr_add_inherit(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi); +int X509v3_addr_add_prefix(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *a, const int prefixlen); +int X509v3_addr_add_range(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *min, unsigned char *max); +unsigned X509v3_addr_get_afi(const IPAddressFamily *f); +int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, + unsigned char *min, unsigned char *max, + const int length); + +/* + * Canonical forms. + */ +int X509v3_asid_is_canonical(ASIdentifiers *asid); +int X509v3_addr_is_canonical(IPAddrBlocks *addr); +int X509v3_asid_canonize(ASIdentifiers *asid); +int X509v3_addr_canonize(IPAddrBlocks *addr); + +/* + * Tests for inheritance and containment. + */ +int X509v3_asid_inherits(ASIdentifiers *asid); +int X509v3_addr_inherits(IPAddrBlocks *addr); +int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); +int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); + +/* + * Check whether RFC 3779 extensions nest properly in chains. + */ +int X509v3_asid_validate_path(X509_STORE_CTX *); +int X509v3_addr_validate_path(X509_STORE_CTX *); +int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, + ASIdentifiers *ext, + int allow_inheritance); +int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, + IPAddrBlocks *ext, int allow_inheritance); + +#endif /* OPENSSL_NO_RFC3779 */ + +{- + generate_stack_macros("ASN1_STRING"); +-} + +/* + * Admission Syntax + */ +typedef struct NamingAuthority_st NAMING_AUTHORITY; +typedef struct ProfessionInfo_st PROFESSION_INFO; +typedef struct Admissions_st ADMISSIONS; +typedef struct AdmissionSyntax_st ADMISSION_SYNTAX; +DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) +DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) +DECLARE_ASN1_FUNCTIONS(ADMISSIONS) +DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) +{- + generate_stack_macros("PROFESSION_INFO") + .generate_stack_macros("ADMISSIONS"); +-} +typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; + +const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( + const NAMING_AUTHORITY *n); +const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL( + const NAMING_AUTHORITY *n); +const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText( + const NAMING_AUTHORITY *n); +void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n, + ASN1_OBJECT* namingAuthorityId); +void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n, + ASN1_IA5STRING* namingAuthorityUrl); +void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n, + ASN1_STRING* namingAuthorityText); + +const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_admissionAuthority( + ADMISSION_SYNTAX *as, GENERAL_NAME *aa); +const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_contentsOfAdmissions( + ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a); +const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa); +const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na); +const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a); +void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi); +const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_addProfessionInfo( + PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos); +const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_namingAuthority( + PROFESSION_INFO *pi, NAMING_AUTHORITY *na); +const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionItems( + PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as); +const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionOIDs( + PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po); +const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_registrationNumber( + PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3err.h b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3err.h index 3b9f7139..1ae3a562 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3err.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3err.h @@ -2,95 +2,21 @@ * Generated by util/mkerr.pl DO NOT EDIT * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ -#ifndef HEADER_X509V3ERR_H -# define HEADER_X509V3ERR_H +#ifndef OPENSSL_X509V3ERR_H +# define OPENSSL_X509V3ERR_H +# pragma once -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include +# include +# include -# ifdef __cplusplus -extern "C" -# endif -int ERR_load_X509V3_strings(void); -/* - * X509V3 function codes. - */ -# define X509V3_F_A2I_GENERAL_NAME 164 -# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 -# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 -# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 -# define X509V3_F_BIGNUM_TO_STRING 167 -# define X509V3_F_COPY_EMAIL 122 -# define X509V3_F_COPY_ISSUER 123 -# define X509V3_F_DO_DIRNAME 144 -# define X509V3_F_DO_EXT_I2D 135 -# define X509V3_F_DO_EXT_NCONF 151 -# define X509V3_F_GNAMES_FROM_SECTNAME 156 -# define X509V3_F_I2S_ASN1_ENUMERATED 121 -# define X509V3_F_I2S_ASN1_IA5STRING 149 -# define X509V3_F_I2S_ASN1_INTEGER 120 -# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 -# define X509V3_F_I2V_AUTHORITY_KEYID 173 -# define X509V3_F_LEVEL_ADD_NODE 168 -# define X509V3_F_NOTICE_SECTION 132 -# define X509V3_F_NREF_NOS 133 -# define X509V3_F_POLICY_CACHE_CREATE 169 -# define X509V3_F_POLICY_CACHE_NEW 170 -# define X509V3_F_POLICY_DATA_NEW 171 -# define X509V3_F_POLICY_SECTION 131 -# define X509V3_F_PROCESS_PCI_VALUE 150 -# define X509V3_F_R2I_CERTPOL 130 -# define X509V3_F_R2I_PCI 155 -# define X509V3_F_S2I_ASN1_IA5STRING 100 -# define X509V3_F_S2I_ASN1_INTEGER 108 -# define X509V3_F_S2I_ASN1_OCTET_STRING 112 -# define X509V3_F_S2I_SKEY_ID 115 -# define X509V3_F_SET_DIST_POINT_NAME 158 -# define X509V3_F_SXNET_ADD_ID_ASC 125 -# define X509V3_F_SXNET_ADD_ID_INTEGER 126 -# define X509V3_F_SXNET_ADD_ID_ULONG 127 -# define X509V3_F_SXNET_GET_ID_ASC 128 -# define X509V3_F_SXNET_GET_ID_ULONG 129 -# define X509V3_F_TREE_INIT 172 -# define X509V3_F_V2I_ASIDENTIFIERS 163 -# define X509V3_F_V2I_ASN1_BIT_STRING 101 -# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 -# define X509V3_F_V2I_AUTHORITY_KEYID 119 -# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 -# define X509V3_F_V2I_CRLD 134 -# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 -# define X509V3_F_V2I_GENERAL_NAMES 118 -# define X509V3_F_V2I_GENERAL_NAME_EX 117 -# define X509V3_F_V2I_IDP 157 -# define X509V3_F_V2I_IPADDRBLOCKS 159 -# define X509V3_F_V2I_ISSUER_ALT 153 -# define X509V3_F_V2I_NAME_CONSTRAINTS 147 -# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 -# define X509V3_F_V2I_POLICY_MAPPINGS 145 -# define X509V3_F_V2I_SUBJECT_ALT 154 -# define X509V3_F_V2I_TLS_FEATURE 165 -# define X509V3_F_V3_GENERIC_EXTENSION 116 -# define X509V3_F_X509V3_ADD1_I2D 140 -# define X509V3_F_X509V3_ADD_LEN_VALUE 174 -# define X509V3_F_X509V3_ADD_VALUE 105 -# define X509V3_F_X509V3_EXT_ADD 104 -# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 -# define X509V3_F_X509V3_EXT_I2D 136 -# define X509V3_F_X509V3_EXT_NCONF 152 -# define X509V3_F_X509V3_GET_SECTION 142 -# define X509V3_F_X509V3_GET_STRING 143 -# define X509V3_F_X509V3_GET_VALUE_BOOL 110 -# define X509V3_F_X509V3_PARSE_LIST 109 -# define X509V3_F_X509_PURPOSE_ADD 137 -# define X509V3_F_X509_PURPOSE_SET 141 /* * X509V3 reason codes. @@ -102,6 +28,7 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_DIRNAME_ERROR 149 # define X509V3_R_DISTPOINT_ALREADY_SET 160 # define X509V3_R_DUPLICATE_ZONE_ID 133 +# define X509V3_R_EMPTY_KEY_USAGE 169 # define X509V3_R_ERROR_CONVERTING_ZONE 131 # define X509V3_R_ERROR_CREATING_EXTENSION 144 # define X509V3_R_ERROR_IN_EXTENSION 128 @@ -116,13 +43,14 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_INVALID_ASNUMBER 162 # define X509V3_R_INVALID_ASRANGE 163 # define X509V3_R_INVALID_BOOLEAN_STRING 104 +# define X509V3_R_INVALID_CERTIFICATE 158 +# define X509V3_R_INVALID_EMPTY_NAME 108 # define X509V3_R_INVALID_EXTENSION_STRING 105 # define X509V3_R_INVALID_INHERITANCE 165 # define X509V3_R_INVALID_IPADDRESS 166 # define X509V3_R_INVALID_MULTIPLE_RDNS 161 # define X509V3_R_INVALID_NAME 106 # define X509V3_R_INVALID_NULL_ARGUMENT 107 -# define X509V3_R_INVALID_NULL_NAME 108 # define X509V3_R_INVALID_NULL_VALUE 109 # define X509V3_R_INVALID_NUMBER 140 # define X509V3_R_INVALID_NUMBERS 141 @@ -137,6 +65,7 @@ int ERR_load_X509V3_strings(void); # define X509V3_R_ISSUER_DECODE_ERROR 126 # define X509V3_R_MISSING_VALUE 124 # define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 +# define X509V3_R_NEGATIVE_PATHLEN 168 # define X509V3_R_NO_CONFIG_DATABASE 136 # define X509V3_R_NO_ISSUER_CERTIFICATE 121 # define X509V3_R_NO_ISSUER_DETAILS 127 diff --git a/deps/openssl/android/x86_64/usr/local/lib/libcrypto.a b/deps/openssl/android/x86_64/usr/local/lib/libcrypto.a index 456f3def5866f3a80aa8a8ae134e20e7310034ee..82a8f77549dc26891dbdb3b01fd2388b255d6fc3 100644 GIT binary patch literal 11860070 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

      B`ufa_S0aVUz2Uv3?A0yzRfGYXSv-eARja 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 z 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%0DaO=I z>rt(H^EU(kxqtZQ`Sb5O{+kB<0{)OB`iG)=$+ZvJ#-=>AnY*KX$L3`Q#?79cSfc)! z@3(hJSNC{6z-jiHrI%~>i`Io5b9ukAb)~`cPjz?l)LxuhYR+vTfhF)`IdrD|VH(N;y1mnr%m``X`(&rx^z9 z-|MkwP|YP5Rk`Bve|)!uy|X|cJ^r+_!Q)7N1G{Q2afc^eTi>bg=Zfp!H%=;aZ8pp0`OG@I zY`+dYck-D3n)l6}UKaMT9^GecQTnFBYNt|a)*T($x~bdti*26Oy1sJr=J`*4tTwIb zYtQtGb2Dl#ymMjtp_lPiRS&eXS?>DP5qG^p8;$t>rq5B&CV~Ak-N)8+{GTp=HIzU8kR-}~f=Blr0gc;j zEj86@TyUB4`O}g%wNKr(?2yxRn2vjUyW-=h`YXI%t-W!v-3jaAC$hgeqHJ5D%xs@y zPpc2CR=IXlZIxa2W&Wq@j~e`fKO_nN6dgL*a+UhTqz*Ie-{-ySbE&P{>f0%cLT}jK z2)wW@Yih|6vHc=O_pE$vHHNR>nqY#bABCHrg*=e!|qQj_4raRoAkF2qP96*TV1pJ z%4VZG*_5r^Y)#|6KmD!i??>hrCPWWj*e!EVcAa)p$0vSR^KkLpGf6Fv*BfRtY-w!2 z@V%3LHm}v}Ty1#LuXyIp($l|H)pu_m^+OA#PprGmzF6z`b6zzcF}Q5`{9$*Gt}9n3 zv3=mof_anU0?)lU6ZtIh)SfSYzwmi+-P+aOsR8LP;~GucGj6zhzZs9uWHvZmZQx^NwUXqi!D0KFQdHu46c5L^>Sl1PYb~#sgH>1hx z8CPvC?b&|mUhwG#hw^oGE|#vi*<;YGs;zFk7~)tjXI|Yt+jiQ|A2#*eoiBeZ*D9&1 z(zfP5?e{-;|KSV$D*lk9`q#sb*7I*weY2uncvtPCOA~VP9vuh_PQ94ht?~K$-)OA| z*|}`7-~OoV<#R)a4cszo-OR%0Yg}`VFLXE&p*>!&!-d05@|yp+w9)4kx<+49l^Wk} z&e(Pdlj5#liA$+Fq~h%t+2tOlm+Dj1qkY*L!$vos{>}B^ZyI0eZ+pah@6hKtT}#$z zk)fEJ`A`4xAH09_g?fQMB&qu0;(Iu*#_L&k&ZeZ4?$da8xkusJ)-f|bw;5#9D*oKP z3Eu9rpEY@q+v8&2Gv$}AKU}5Y$!_OqpZ(P7kKq?#*ze5Z;;uIrJbP4e&X0LsX{wX` z4_7#UUAudH+|0v2b@OYup~UG9`+D~(`YoWkYS+}mp5sTas{Q=lfn5`F?|$*UQ|U}M z-<6vtm6;pZG_n7g!Vf9&N6$@qVO>4xM8*5=Pab^TVZZW_?u*?gr+X=1Y)NSI%ejV~ zJFA;@sB`#Ey9yI7Roj00=(gCS{tqiGI971!^NWu9-c#1qn^W2Ce7($vU5Bh&tJL^4 z^}cl5uIu+}iq9%~wbN_cXTxix=3Wh~8@}Q4>Fm0RV^3~;ljHgIWUGJr&%g2gdpNWU z{2@uSj|t_}cRXi~ZJ#`}<+k)Sv%^Y`&@6NQwVkt-hgFT=hQ4U+RHehH%7sx4|3@W!Qm_d8k7dKxn7<+R_sKB<;fVsO)#QV$ZBh3($lE~fiW ziz;5QzQ24xz${+8ucRb+U{G=8->m&cF<9My0>5P;H8zle;G1n zLQAi^L;c=NwA*^GRBDxx!*lE0RNT(~Ic)I$1&Yy^y%wJ<_;#gh=Dg+QVxHHYw)M{IAC(ZXi<&Wsm?pCjF+r?YGTT!-3ZbR=!XPPMHPdyjwq&2iH z>HGB$UlzOw%xper$*~$aL!ZA%4!Jvir~R4ri^o6gS4F$}b@lW>+kH;Yqq6(eSv2q7 zoB+=ut5fpq+^#i#<=^^M`37+-MlSjFk5&zfx4hElp>?xCqwal~wPZqvg>SB;>zYnE z_pX1tZrbi2ol_L27G`XAKj^c~ZEN!Jy}Qm&zvjMb z^VkvIw{CwZm+V%mqRKmLiP^zv|F}sv5h+SSWfEb+6Sw8 zoESLs`leCux2{Ou-GA!+^PP4Vt}V0d%)1$FYEK?8W7LMcwdIZnzxcgYwN2eyCVn~h zaiy_KoZprF*0XD?6BkB*U(tHuqcw#St88rbqHXwz-OD?^f3zpNa@$+Cmp6Az^>qKx zVt(W+hq9+v|Dm_urR-u=+2O0$fHvd9E`NABd&AME(S`#KJ8r$I*z%%7)s3T*8XsNX zy?V29CpQI++5UB5?eY7rol><-%Rd^}r^>DBSLR-BF=#+o?EZv#-TLhEae9_CLGP8@ zdE3vn*Z#SG_~-faZ#({*2K@s5kVyaVKe5AtU@!l7BP^(u+Kb>vz?F(JM%FYMItPoS zmE1~chR0bWPB&EnUN(0$kjSB%y`T&w{!u7?fQ6_^@>M0_oZ-#EnM&A2fRUO8>Jd4( z6EP(!XSogXGi?w@aoo32NxteS@T+OEpNX9{=@}d-e;X2XvA}zi{MIw#X_Ws7v9o~% z?n>-wY{c2cV;3MwP(cysVL*;hUjJIFPSA3Q-IXhNk7f?TpFrKq9A-g`Dxw z-W`l9?M-?sK>Kwter3Xh7bkL@E#ypwcJDxT9yhlKzd7k(+)cQt`E|A6KThmyXo2Im1Rcl@Ip%V{hf@ay+j+)hj}`F)?p!1g^V?ivzZZjz<+6+L zx3s{!5qmzf!1oe+d@bmkhE@BY@ezV)s9THjhLpX>4;h*#xb zb5F$cy_6h`wy>xupGynz@%h)>6Y0HbZ{j@n$?b?=-zuER)!|FrVdt>p z`BvfNC~e6LvE%ukJ70-C@nRXc3p}2G6;kNpNz!{Ec0AuI=9h#fPj<&VhaJzi3MWS? zVxGf}=UYc|q72*x9?!p$y(Sc%=$1W)9nZItJx3{I&tb>&t-_vEed&;}bJ+2GtFUvF zBJ3P?Jl}KYhpM5o&?VI(;x6!b{*~-1)3th(G-Ai|tz>ukF2s)KTZOI4iYx3Kc0AuI zoE)XlTMj#(Z=JPJ((-}3z~lK>p{tUX_g;t{&$o)XDi?X*h1l_Yt8iSt3$f$*){#W6 z$p`KNkLO>>smev(dm(l_-%3uG??UW&zEwD?T)4u{VaM~W!pTvJ9FxP2=UWu2eBg!P zqLxJCgln$5=|UVD-*DRr%8ph!a^SpN(Q|>vm&a}^kd8zBJK*vC=V}h=Uw}MgalXe1 zi^s1M8d?^$CuU8|Md^+?&B;c*|9#w_Fg`<cHaI`lazJC8P{CmmY=OI6$Iz;|P z1nech0zvN%-!1=@j(@lO6=dq+-!1=T@aQFf>C{61)c;5Dr~PZWe&~~b^!*#lZ8o|8 z-SXe%lYiEHNcj^!`6uWhKWAm!@_*+fZ~gZ;;p=qJ5pc_YyW`)jf6jBzX+7C*`SA67 zGyHq$zs5s;hV7RBLWJX$e>ne67gYb}|8vWKisRocf4KvkNd95)?Xe#} zd_i|2`P<-M2W9)P|6lGQ|0nUuE&n9Q=Ouru6Mj%K#j{)gr#b%J@~`@k@|VKDm;4WS z$UoXc{xLrJXN?oSikygpTmC~n_5T{+bSKjPUw!KTH6HSF7S^r*A473o`tNbVKau>) z9RK(!a6Qlq-HGJ?3Osu0f6LTD|BZM(8-H&3Id|hFf1eZniR9;s4gI_2?{fk=k^D?g zFZp+S$bT+q-SXeyq`y;Lg2Hy?&Qk4i3MZU9|6J(!cgw$ujV0WPzuBojT*b7g&k5hn+%5k#j(@lOeP=20PndtM zf`2dhAM}u)>jQ52Uw~(?{8R2MnReM?J z&aMB49sfi0Ki2kiBKgj{=|u8h z2Qn}Di|PvfGyiZE+AaSozy8lTw*TcP(En|I{h!Lh@a?yJ`1-xcr~gyoA%7g6-146X z#d+y}jT8QfEk|} z{FC7y|AsizLw;HxxaI#VFfaLAo$ya2|I?0txBRWnqWp>S|6}m)CI4&>`DrELmVf3+ z-tw<cp-8QBM8gZohh*@ZHSa^1th&{~pK4;Y9Mk<)i=A9`e&V z#x4KPAh?(Q`?QgTOF3@&J01US{rA;S`zO}_a-aIA%R~M-;OCZ~!*t58)s08xN*!a3 zA8Nq)B`ux)eceev8_oa!A6~{D!k?zx00G=-&u^<8|JBYooZ(%CKezlBO`2GJasK+m z;EC=}oE#2Mw8=mG-8{7-(P|+>QBf`KnhF#}J|Fp9R4**c{j8~SM)(l?#_?yaA01@H1wb==H zFnKC&UQ{nJYqNedt!SkwUutqMon1!9Dab>-RnppQrW2Lrw!HlC4hm;HeSz6g_EoSFFGrgp;#xjl5V7_~tnHE1Kp=T?s4H}^ zw>kAnSJjq?wZ4C+`9KV}U3R}y8XLZ;&gzb&UO5Jm?WQB4(us|T+lx_ao4Ml+ zb2!qpd1F!3dd}R@8z1|gX&q2sUNwh5ufTU=){Kp%@v#TZRM#+kjfK0Dzl$8~3YcjK zgnKl{Cq5cWD;74x_Z7po;u>06Kt@ygkt-ZH>6t3{5o{$f3o5A$Y*31+2f zvz))>>DqF5nGu3!uPKjMEv5D8D!#Ga=+QI zG1l;8+&Uc3Oj#e#R6ZU{Z5S{!CF|-s4_eKY)yB$yNBw|{J5#S5HLVqu%aOQdsvFPo z%EhMjnA!c-Ff+9-peTw-aUUs=ddLi|X6n^rX8-eio*&wpy%wLECKzKn@Qa+Axw zR<%(Tt7BlGWQ_$%Dpl0t*8Bk^>VTQXMW?CmK+JmK@_1#nEqljVlpQi4uRsm4^r*_% z=8Zf>%M2e#e5pQsG;s>@Q)QpJ3Ki*D5reu0%>IKAEoN;r``<9b+l;SsPDaZUx860w zJMTOR9}=H51N+;`H~dd`scP{JNFqKY*dXg;4u1_IreeW8hsdo1l;RXerOQkzh|_R9m9V!j+HkVySCu3=RIRt*kwgwVs9iJT)u$;kL@5aOL8y$~+FgTcf5mJT*mH%W{?+bOI zeOZe%NG8+zAeLc@BYPmmI>As5&2%-=%lwe(RkaZbRhUCn4$Ng!)5)fh)W$$OjjL~? zm$TS(ELFlfdDG10O{1d`nN;P^dgREy-r~AY7v+-~)MN&IO=ZwaL2Zm-%xcP}hYx`vvT{Oq$F=1Xy%e>~s_LgK@L*s;omW3B3T3VVL=FeHM=%VK4I~HEp z+Sc;r#)d?&Aw22gx#95KOBzHeKA{d)0{2$cSo?b9{U={lRhHQNew@ zSMmPcnrlY%1X8E0I5~6D%98twzc#EmdGd%F_{N33@1)jsk1tPefc zap}+>D7dHiT!q^BX?WK63y*hjjuZH&@ks(lYn;PXXB+S2&t(`*&-n{F;s*XSeh)!7 z;-}+JpyH2x!kaBh6H4J%yA|4RpV%g?nVI^t6PE`o66FXg{bp*CKMXDtus z<>^SzvZZln2si|ndXV(9$OO*KXR!?{oOxUG|0jW$348(a10DIW%xn7pBk)fMe4W7A zwb1k*p<>|3N77&IgC7t$^Qq?ZD=HU`d|3Btyhq?%ZqfK0r|NOjFBiC^|CYdIxSZRh zBOi|ZH2=E<&PR<0@l3~P(2sVrod@DhP&R^Auc4*&uA;gdZkVO+ye_!3nhoNF_^eq? z$wdvbW=(LKNPFJ`UZ&2NISY23ZDJF{!p4Q|jR`iU{5TJfXkZs6n`hnG(l)o9FLUP3 z&A+rKZ*^WK#3!^T+LRn%Fsrext)-3R4J~bLXd-7NT4-WQ>rL*Om|!>CvzitxZk(&W z0cdNVzo02mh&8)0NQSGpztY&&Qslm{n>t|Fa~p3>(*Bcy$!oW{4dd1YiFPHij$-2? zb@TR}jf-2+>Z?n*Rd<51NzA#mXhQp43)Qc)X9I9(0=w*g7stJ1P8KZS*Tq5)cb8Kx z?6>@!i+;Zt4-JA`ao7E<6Wu&XyZBVwM~x#t>juV? zbrv1VINg8Y&nx_(<4?C=iWvX7!~aiUUg57{fN;A-_$)W>@V|`jB$-HJ;nq4G6upG0 zKRN7_A7Uo{h*k4Nxb2RAw$swN{eOUu8k2OlYe6OGK^uf;{A+cpy&Uyo$N%aaVn4Xq zo(a!h`dj7XKOHZs^CS4v{&o7@3jgk~8B&mq1l&yLBgj-9b^FKM-Nf+UFn2dGeDU8r zcW3HAAww%G(VP#|PO*LLc^fo8h zetU9GTcdheuxLSI0epW2d=|9?!3yJ0ehRj>Em+tXY(Pu20O2aAy`?#sz#x^M+mj2> z7Bx2p=PsDn*q$f?`5hn&-qv`RtqbU?v8Xk;pgqVy6}KWPY2lnjcLf(D8ru*vY-Y$~ ziN=MkEp2n!?h4*9r)>dwxBve>g!UUdb4;Pf6>8}&GNSw@4vfoh7$K?vcQz~fHy~bP zSuQ^WL~pBAl>WbE%*p_Z#h94ybZjEr?HTbUKKPBm<=9lk5t!4|sCt~wx-Y5QE>^*; z<2618&ve9O-&5;|(Ug5mUDs=z;~Khg_78Mq(`((=xbX4LyXnI9-rkume1`Kr--XY1 z-WR*@7U%sw7rw%If53(Ri}SwPh5y2NU+cpE=)7-n;ai>eoi6+t=Y6jWf75v%aN+x% zciKVIX?>PB?-ee*+<718!q0KuYg~BPd8eI@*4o!{&hW}19aCp zCO&xe0ZW}qfZyrZ2V^`;`2tsA{}i!&GkmuWTAlB*-X!D>|9oIx;ZJwMFL(No4Bx8{ z|0m!K-`$7bO%Tp+4CQ=QC;jlbT2bf!`+^gp6ZPSn;YIVx`z|UPa4W?5=%)Q=+y9V0 zy!Kxsnc`XNU&EZE^3vaIC;#bmqW--4@V^1>s93X9zts-YoeoO5nMZZ_nlJkB7fL{eW?_95i!aYU!U*gob!S&{ zB$n1Bkf>8%T#Mpt^A%nfdfi@_4+P5c3-eKHx0%{dA=e|EHTL@OyIg($AQpa^>)-am zJJwM2BluyN+UV#(02pl;9h>>UbwjLq$K{$XhqR{kvXTPd%k(pbC?Dg>Q=T^Y@$5Yy zeuN2wFHTGotubpK7R$rl!ohfF6&{=@)u9MxJF-h~tP5u0MxlQHXA(|Rvv zVd*w!A2BQS)zUyRocd~cQF0Qv%S1|^4e1JiA<6g|tQMKpOI$s+vh`M9U1)1Ad9swm z^}X;Ttt-;iAo2GvVpCubk$TNCEg^JfR=7-C5Q*GrHT7x`@jH+;L4N{Qlund;k zVCLk;8dxr^jgChkUL>^?8az9euEW|I7Nhr?!?&2-dxJ*DeJIy>4{bO5_nQ_H*Up#B zf3!MMIWmI>{2B3>$^GwS-0jd+Ix1H#&Zz&?T@9 zNK}qW9UEq>XaT|%|BBS6!ADg_#X58iR(vbRaVam@dySVuR=X9_glJ~pQY(saE}z0X zgFtraJZP+JRKadB`(L^J8W%o$xyM5ttbGlnI0_=ld}id%;i!9!ZG zYUK6S?C%x3b>MO%tpTtMh`;q<{h00)h`#hU+bxPwj65p~22B#@6WgImAHS23;a4$tV}U*OhLf zRBZwZ>VNb0so+-Iu`glgI9rBsM#uG#D>N8KMSyINihwf5ti6g+2n)7I9i~@xy>+yA zvT1c^?+0fm7^QckqYNx;QCUwwk+#`^EnSFwVw zs;_*OPMoW27`0fOJ%(XRXfR^E%na6fDi~#tK?{zr!NQ`U3cOl$HeubO#7!=?>qkVm zRz)NGQ+QWTb&wdf*g19$%(x({Z&aU9og&wCR&#~_e$a;ov-jbLnhBbzLxJS!ozNko zmi$p~oqFi~l7ko>7AQ^YsTk`~T4&^nYvM9IBc~{}#jW@AHEaTT8UoshCzT5MPI6Yw zQLJn=ByDq{sC9&%#@VrY=15N62*e?LxfixeDuYrA$fRh&^H<%^Kt7H2w3m5N!G^fx6v0-(Q!55wUA2Tp?!7>&blLK zT9^G2yy*%}wZE(#exQVd0fY&ABjo=hIuGh!Rq@G}oTVMVOb_itMxx%#1Pqdt)l?r} z$H5M--a3|OLluqY4MrS@&6`dl829~{!NTsM76PfJ6@}5UK(bzB3Q%d;mFV<3*?o`W zHBk?}sAtu}XDyJxgaaXuLvY!f@v6R}#ztbJ7~_M=jV=B_zHwZt5D z*)#AgWn|S0^Fu8twYLwob>va#wFt>w{zKGp%PxsL3V-VTUHmRPFY+jeiqI`7zkb;# zH=|`iD!~)G$OJ2l6{^&*T0(2C(wnWh6JL}mcxO`+jAX7KjHs3*vSW`b8F_22rd7Iy zLyTXTt{ST8@Q7mdf~jl^XE4hbFlH|oHb4P(+`4J>6@;>a^$p0lv2;o0wA7M;fuhBq zR)Vm&p}N~t5Pz2ba-;K~Su?$c_)u9OdO2zxvprEoJR6Yg&=Ow&d#6)PYh)xfIL!9D z;tTK_MVB@6dAl|=Q-@28d;bF6n3)BoW@hw&8Gf;Sq?s9i$jrlrik z=20`V=qRf2Sohvxu@tNhJNG4SM!&>Ny#~X#U7>wV#vNTWh1y$6Q>eWaO~$*hlzNwz zQt>RXWizrB>ianLy{6zhFnq6pWtVL#^*dOz?W1vH;?rjL8^vboNpdZr*Z4RXVcoGE z-q+#pF?cMgVi;BBFo;uXNwk@%rvldDD%d`~Z}$Ji4156dykc~0)1&*${vD<@dcT?4 z1Us^Iup={5AE0*zZMLD~Itt&no7SlPs66{h)$@$~u&SETSMIz(uQU28oEO-UZ7MOt z{mG3{>#L=a)P_N1vtYpZ8Y?Zfsc4yKGK&8yqWL1J`scJcWKCZl$uw6EqUUbsHg!XxyX(Q;FV!C07)XTu zB9-_eq)mjqBz+>=3cc|28D5{?%zhT1QPZ<2MkSxC=tBECyK0SZZ)EnjkTqf3T9hoK z0Codxy{PLR^uO=fz-%VE>=0kMg7$MhXjJ0~`$&vh{~BXHC>*t-g)C?ghYn+}wkw&! z0R<}uh3hu3a6mx;8MqKoH;HI2zRczVwGQ&G;-Q;8{R^|w%KUS*a<*#yjE)BoD7}`e z#x8NSnVtf=oV9Y|t7dv~<>sr^^pE1+dx5*}*P?Z3H)}T{DHNq@91kmLI=k+kNUfKn zAyvs^ci|!TnF@A@5@^Nk!H!~;lQ$Qu>_KE$Cw!X_4d1K4B7bsPvQnod`;*g>l{zii zpPZJg)NaWtpva=gpPZJg6fIebipZ#O$`sfUVQsplqwf8vQTHm1Q&pV^L+IqArZu?|LpN0|mfO`L>ce1i zoS81E%*+oU_0&EG8a2zPeh>1pT6{UO?P#oF1M9`vnzn$DyJE?!zh^TdhnQd+0izPw z82L>=Y22{NpttNR=;KEYZV1FP=-VeSosbKd9Zn}Z869VXUma&~eolIbP@t^Dmh5&Y zRuQB<30}|s3ItGfNu^uUiCHS_gC&)LR}|5YUhWm7rI?hfaq>%iB|C6$aOWz$i- z>pR(DPV^F2s6f2gC$3SFZ^Kw?Xw;s_-U>Y_--_!0dQ!cfodPNhmA`?{ltVf6-`|i! z2F@j_A;SjDnwZwNx!ojY^_v*VMT2C}4f| zpD_!mwBQ;AaNa@TdP=1UA?HT{x5As5?qu-kS~S3Qt5AWU8(zQ0w0=;-=sH_i;#ME` z(!?XFW#y>d>eeO~qb^ZHlJ$=E?`n!!JF~Qeb5&1#?; z1L&SYnL5I$#ii&fEnQ=DE=BO@DC)uYXE=>)baG}gC&xp|-@{bNBP>OE*(ZP)D&!Y4 zT@y=R>gdx3DuwuiLhu=$!&^2ol8|2V#=dmw}x$oF9!PKmP_SR*MF zYL!{*vwr|qNSbW|1TV_tL0GP1yV5KPv1VESav-?;O6QCWB{eeu3=$5tkVYYoBW<>Wp75I+VtpTfk#g5&XvMZzE zS0cuBPXxNnhHmV*!5l4iMZFm`AEm!q{KW(PX7^ywv^q_M`k6u4b)ke%_GReGy@qWL zhMC&aXI7yAzrcj*oQ`k3=bIUtrWHN(iY|vLvvxb*RTka`H6U$vUkPv~Jek%lt1)Kj zGBaPTjUgg-vYXb@2SeEKW=~j0t)EN=X`S^ZlPhK&t~Y-9%(Tqp9q8`Ynig8WObI$s zowGr-xpO}Lrxcs(w(!S#xEX-8^a)d`1(G2yo$L-mLp_{6jb`Qz#u}b5Q&YASEe@;n zGBZmNt4;Cr!nNpbnCTx-``CP^KB5eFjszd<3yPPZ+26t3HMG^d0F}xJHNsQM zGFH5R*w$yJ4yw6E?2y3#uMW_(Oc}>{Mdk$=rGxa+)n?#nsMVa78NJgCzubQQwV5er zs2yGxJZzIdO@Ws|Qfm(eUpBse1RUblI*g?-82kzbgNI_>SquidF&G>)I=I3FeXYhw zGK{e>if(g~x!aYX)I@aJzA2e1nYoT7~idfyTOa!@pOC+@$O2YQ4)TPKgpvDv@24zVOnO?8!iv=%x%--X;tj%GnMc;HHbNkcsj$HqU|i?@-4CO6GrO# zQ&g7!NDP1(-eRP#0DwsmC+)Vzv4WR+vp8`&1`jcLgi9vTXI|W7x0hWo<|Xf_Yr6G(@SnZb+7V46+9$Y$1|g< zW2tquX!*_V-6dw#Ks+-V$og8d>aZC&0Euct=niAbVt>pUJ&1COrZ0-Q2&?39Jn$Z$ z%VSo_5$74Jk|o$2x2c5h*2}T*{^W*wWP(f0?$?UV3w~f{!8(*_tn+l$<^?O;&p@VN z;ikq6^l(}v7Vb;#ORKb`4xqpKZswI+)<)CyD~y!^WCb&wVa|(K>tdO!kY##wmT50j zZ7XK7xnLYYRdHRW?6=gxv`mSki&3>XU0}Z+buoG(Vs4`P#dcEYf?G6!Y&M}5ZxS-g>bR5rqEIbN^Jj90k{@Iq(;JqT2#cH>qBwcdn`j?CPJ z!E9#*$kE*>iB&xn%anZFL4!;OOrlh6!Cv5UjB96_Rgc9pUzy30XIeL{jy%M{w%wZ4 zv2XB;Qh4e87)os*#{6{ow<(uBp;ga?jXm|&U+XbhsxriH?F@nSVmm{0)`D0!=W5Bc zF#VD6_11xU>rE_))nfubt%AGz8+JZG&HUMX&3w4H{gk-19lNS;W-Wungna2AP%kK1 zj4v`8BdGUN+Lg$&C>#6HQyu+hK47|FG^)^>_gCQIS-a|Zp7jP>n_?#kjgHe4H@51d zo;5S9Et*!@Np@L0@K&zA$i9JbCkpeb%+-Vc98E7>5$PYawxMhA5d07Bc(s3f)l-?f zuf$+HhCT4?E21B@Ds`-T$!D!&-N#OLy7ketSsD#LC0d%LQ&W4opoCTNG`4VW!t{1m z)uBYSxnnQV0HjOLH5(4b(v$lRV&nXq=J38=tk>=ep}xxX4tlXMpRLT;9+fodL>w@1>TmDl%4%f?rWTzbyUj)IRlimj za^3D49lHk5b6!7~+{p&`g1Qx%R&|0v9~zb6rQyR%t5a{PNSf&i zvtb=(6xLVmPkf4zTo=ISkD3kJF*&`1aeUPr-h=5u6{C3O7tChoD8VtxKms^%i>B*V zIJr%&b>{jAT3mK2&w=0GQ-r35R#U8AzBrr<2al<4-!vLknBDJUEBxkwbquX2TFkQc z60G3e4sGZbvlZQ=qh|lhpHijHNsW^NR9D-)}rQ|E|@MA{j8~x0=OVOo7LwE~@<}~vNZB^PsaZ=^D z;kWalt3M!=l1C*y&736wVgPov=95Rd@+48gw{v; zl0xY@F#WKh&|2-o(vI?=^^xf0LW$5L{LrCrTg-=*i1yHKS|5q*1%22u*eQ%sJ;bM9 z3S$H{gw`jNj}*q6TeRHr`GtbHlp(Y}p_CPdf)3CSpMIgxV%;r~Pbeb_Loqyj`h{|q z2dz&i<%OYex7&x5@AN{Sm=yT1K5d(xTweIthxhsM!Z5jC_CrcrQRwrNAKvE~g+9;x z@IFTu`ux<1eKtOz>cqG0>io-R6*3r8$N;18Rgp~Hp!tBgple=JQxj~N%Jc%J$V5Af-$ij@1S46&!f;Wz>zRLs$&ov{tOSR6! zK704on^xub!t844cLI|Kr-$5Fzo&vwFUzebeIabr`8`y z9XV-PH;y~n;&h$N3>U=I)V)i2|E|3=HZC=N#u%1>S%Ek21RAY{To##fz{)u(T%b8_V>_cuRNX()HnQv znO3bc)EU>m7zJJywO+dCO$-2*al#8ZFw5F6Z!vSNHL6bynF2fN!%rCo2MIhcy|CHZ>WSoxLuQI#A4qjezi4+`kQz zoLifWW3YNrrwR2G;WQwCZQI8*88sI_4{MdKCgaOJ_yyUK$MCnl&N>k3-;VsH2AdS| z)l3=2Ia^V#JG<CL(!NC4sFkCyJ^)` znekO-!@l>7yGK2a|3>#V8O;cO*G?i^@L%OqK>lot*SiBJA3gt0lhOM;&Oy5S#X74$ z5_%eCXs~YVvytw1$He+yj*WdcJ{;3aIGZZ`MDoFD)~J^;ix7wh9>)wzJg}ucyx!=% z1BH!ZDz#dXQl)jYFw&5n(iYe^-}812^qe#9Q})e6?Gs=%CJpw6TJV{wM7UPxD$xs6 zI2Lg{&FpERz~H?t6xx)Tfi8jimmrF%Q!MdP4enTJNL<3{OT1$^Z5!zxQeorEXqpVz zjUV1-pb)Dsc45@4vJ0U;XK62IfCp1PNt=!3X&fBp1RS(J%r1D&E^gAp?Emsr852}K z%;5!=;$an6fpuzS702_8wNYFOkCd^Li@uQG9?j%erDq}p+ANOC)DNmu-Lac74HgMB^|9?tJrr#G=(Ac#eJWSVhg=fvKQnQcm3j?pyg6)ZM8 zhE**{E@eqD4iPDZ+~|DdcNQ2OeF|x=EQgoSLC{pdLs8D0;7Zkez~)9EBXxfLzQ@-+*=hKS5}WP7 zS8A3{*h{6}uEBl_)JG=wk-)C`Agl(Qf=tU$oOjj_eMZt(bHzJpa#uuo5>_gbKc@7^JtH%l+NwyrpDR%ZUc*knI+srDGwPaS24Ck4lR3|^JnN=jmXl4~j z821-217%`XBz1Rb(CGXe1q3TRUdybMldY5s@2v1NOHfofuapt5XQ$0#St zDfSB4k!2l#GX65kkTV=(N8+2HMAxJcyjy{&fzYurI%qD)Js%aerF*)g@;<16Yqw<3 zKw1{ZSo+FX`jS}sCdgZlKa?}9xnudeemZ-CgRm?gY@a^JV=Ox=9|VWNYOg1npwEm9 zUa}VySjgK@8?iP-!K|zfr$|PeRdZbp*IA2z+2&)&dbXdmeb!^|=MY(aE^5|Hf4_1S zIHHSJ@9gm4Myx%k`6^qP-4~nix7?;6G2vb-8M8VC4TTC58G3?REYb}9+Crf1O@KSJW9u7RPkIlmaPs70( z3A6Bs{kaVV?+aTNsRM!ZcfQ-3eG@pWK>Ac)cu9 zRJ6t6&%0SXWnEry2H>z}Z()}Qipz_=KGls_9-vODsSCIoPNLzYh1^+%`mDiK#ZoE7 zqfhbThFS&QmpHukc*}gvhzARJ4O{BPDgr9-8i&6p9DW9;Ga%d7hD|-~WRXV2hbziX zDMgvW=K+WIyPO&x8V^_67T+_>D{OdWJfh?Qcb{K8`i4oJ3|r>KD>6b|-`5O2-*Wg} z&xm=+)+*T*uMUh@97Xa>9dRH2Rt2VwcmRJ7;%{}p9I+-48__!K=iWiKQfyCmI^yDW zMg|So0_tQl+Z*S(=>E~c^*gf%-S_ZEdc7xIbzFe`2jWQlG7`b*vn#%ZI1`^?!?}Vufc9iZC$UjV-_-DVXbhaO{Z=H%A>WT|a!N`C2I?ID!i;FmKJJc1c z6Ar!b(}sdTiiMn#pje$iC=vU)Se>v}h`){~X`RR~BcV4hyd6Yd_|-mquJfViSr%S= zKJUYaXCrvg(~`jp@ABbuxeuQvANBXOC zZpd>x*Mlz|`yQu@e5LAHV7~^R({YNGcB+oU%O8->PZ#+?)fvEl2zgG=ofK14q}m1G zC5jJM0&J)1UOW~ndd_#-PSs_29OEPZx%lQ4uaFNt=dQfypZ3w)E+2ffPrCfZhkl9= zJz!6HI3MOEXVORhsXlz>`^Zy*^z!2WB_BSY_Y2oYPVS8M;{P3=aOe5(`MwXn!iUdI zKKSo^;??EDf3XjrTYd0mAN>FN@PF4QU0(2!^J6~r&-jEp$%p?ntmEVI5+-98y|GNb)^?yG6((&^-_|yEaAqYo&EdDe;lOUWMUtq&S@D719EX`+? zz-77kj)OB>@K4kKi@+JS##cKyFX+>KMGvx;dvkYpumF=Kt{8M<={MA|}-YLH<@0FsQ%JP1Nz|RzX zZW6exPq^|zNB))g)8TT_m5#XNzeM0N-Fa6v9qBnOs`)%1a9N)m6Zix{e?Aisj(nuv zt`oSV=XjZp^pgKi1b#NYX?dRW!Na0Hk^FD_dOrnpx|))k@OP42%J@> z#_x7;@{#5An*x{R^kIR^a`%$JWqaB$a9NH{5&2N&^N$N$wwp8&qNAJ@_|x)F7r4x~ z3k5FA-A@HB>ltNl?(n}(@R$8|+1|;1`;~(JGAbR8a>{bS`EWYoGTik7m;C=K@LKrM z@f{)Zb41`r9h~0yr|C~-fN=a_TcGi{z}XgPT-p9O^s+y&OVG>yz;MwXN&J@rm;878 z;NSlU0(HWb?eEXZyz$FN-a`f~*?>8}y^)$pU^J4@h_{!W2Q z{%L_r`hOF+r2oCZCH>O^m-Md*T+*L(I%8|cSIYk>flK;}1upr=1TN|42wc)91up5o zBXB9tF9j~?Hw#?y-z9KK|DM1l{V5;K>p{|230%q(5xAuPg1{yJg#wrK_X}L|{||vn z`bPyW`R@?8q<>%FlK*L}^x;bIC+W`>xa1!exTOE0z$O27flKiX@=0+;D{uMhrRANjIxD;DKmDDbBQPE~38mjr%=z~69icfaC*pywR8=5tu!EV3HE z0MB%cm+a@%ivF1FC;a~~o-Ku}T7JLr?7fT>9OEVX$v;%6jZeh0=CelNED9Q5D{vNl zjc@e9_X<2D=no3KQs6Wyq@$cQ_|yE$1uoO;Y=O&uI}bpjbMuk&X_N3>^It9K#|wO$ zz-4@C@kvMil0L``2uEDhzR^lA6(mlk^lLEUareXT#ox#z@xHGWXwlKzt-KS=tC0+;nU?R@Acr^JH<;TViFVF$Q)p_R669O+2_+&?) zSDPKK;-WhT!{HVa4p^U;!M-TjQy8H@%K;Wk<#Q6{Qu89_yye>-2 zYgyRXb{8#Ho7!3yx**!T^7hL@LUrRNJn$MZn9R~|{q@()P*-O15>9;?CvbHGCvUtY zk+^R&e-kEfX<6&Kue0D2uC>v^c_oYk_ZQQm$eWOUh9drRvkD!k~lP{lfi zjuo~yL+7Kqg{iH5&R1s5xnnU>Z9&t*IkOs@7tC9LYvGFYhlzOzg6HymQ(L2oVJ=rG zVCoHDm_Flrlq`Jo7EDD(*^GP3mj8~>c)P2%FQ0R3J8y#3ugnhmdC?+7o9bqkc3toa z6uw&K&Mk6eaVA%2&I?g{6JGl@ps&&2V zSGG^m@dV4``PX)x+K+5Ah%JU^H&5aNSMmR%-2Jg!OJY3P$ERbPO2-X7Ug7U12)Ew; z$^GvR|Fb^f?~K}BRy#f!K2_-s|1JpS75*Bh-P3lS4x1sifC>2bivMy>Zo<*tmX6_b zD%Kr-Cos?ONerj$RqeN-wusB|!7Kb)P7cFqI}C6aQ5g*&en1i^FD!{&)Gr z-*m#CE%G1xb?)&0%P0Q9$##g^{@E}5|MZFf>RGmr0V)@c@n@2{!$07J&#{JdEtlGF zUzH%99d^0jbq=QWtjXVU{OfrEjl2C{w@UkW^sni4 z{Pp`2KI!-19GhaNLrDFx&eZ<-Om`0S2NpxzDlSsO&3Eb%%I&3p+&y>crNO+b&OZk2 zXZ!z4CQnvhE}m3vKLkJg-E#wCKv7GfifXZ=qu}njd){7*Sj4R->#dD3oWiA#^N;5a zwKh6v;$!cs#C~m@UeDVnu+wt3-n19tJ#hB+O>To6K45gLQC^xWaVQ`*O2*SauUv~@ zO#HHbuM6+NR>X*L{bua;#9_R8>!I2V( zuIF}LQ@!3?Y5sxDbVTiFkK8k;j>jJ#Q9Ii4`YygL`&2~jXvY~J*Do6x>ca0Qj30JI zGvl%Cbz>lM&r#)RoI0KuZ_3XZ+_Zr2N3UOI(92PJ!C4DD(}4F1son24R|a`QoU_#w zS0yDs3dLbV|6cgT{eH%MFX9(R&+=H5=W!*K){?&43YYpYYTrOBsx{8{N8yVb>}M)I z_UUrj77(d-_pt>aRyY);EDaxNVxZeYT?)<4fxkzfEbgqf`B|H?ae$%0dh6}%xtgtg zEWx-KPL1F``~)rtz`jnVsqzKAL$po{TRXFdpc|Yi$$Cb|NQmDVfz>!R$l}};wVhvI z#l@KY3|>@z;}QPzd7wu;{bQAZxW#sK+fqh*oH~6Dr{%?Q-Hme#7(FLdc+txF8Pj#! zPCmnQyr41=$*)%Azjq-fpJ54jwO+E)6O4oykTWcE=7|@L1HeR%rk^>!^ZJb zlO)09$9SsAM$}X4b*Pefxr{4)zXNK5rkCEnf{)0zI7774$s35u4AMU1ic;he5EP+& zD0Vm|0m@p-r6|hd_Bk{s~=NyKi%4#5mQr1h!M^&z% zz$n8wKnUkHeA@=OKA6E#SyjP?|XF2DMo*nz@Y( z%CYBNT^PfOWc7|qw(wXN{=n$`9v-;Qz1%)*;aeM2KC+{SgZ@QU!wa8Ev0-z$nkQUQ)_;jtaUuGk!s8{b0Cv8E)!AEv|E$Dp8EDIsvt}T&tJJF%)C6 znl5Ec*|Ls97NM-uk^Q5Veauk=r)L(*x(Kpv!o4IAuZVK4#jh==f_Se5T8MYuqE^na zMa4dIyTMRW+KJKG&VAz}nC?t0!@jN0$rQW`=q(&NQ5SyS=zJXy`MWl-eO~3l!enwX z7Q|9X^ecGjy+DVm)N%-rx^YFLPOxv2^y|omx^5zW9Q*M;Zu@htxr^|=yg%h@$0&{) zzGnm5Td@P5-e$5Ut)@CrJlF)-#m0IW>~Ug`@ogO9ZdZW4|DvB%aQNQ4!o4+qqP;iX z8Ax*m3%lU|S8QVE`UqX%D>oDc7MBOk#4hJm$UAXhT$`bLiv6mgdx@_ZvF4Oq&It(JQnN0Mjp=Y`+qgHQM2 z!!->rKAU~;FZtk{Z}#Hz2OoT~k36UP;2aysJ*+BCft~Ba|5YD+jt_spp7Iy_&~uL8 zE57W?d*Pq+!O!#I^S%%L`M~MWy-;fidToU3!*s-%78+-`bZ-2gY*^te9-98U0%r$U zVtosiiV>+a*g+A0_WU=4p*J+KA#j;4iv=#zMXu#aIe#hWWx6~qa4G*0flGNVq=0bz zk@Cy6TuFbMpqFcU%LOjO)pND{EcwiG>UuYRpTIdcrS<$DKKNcAd@>^gNB)w}jXwA{ zeejc6XyM#)HVC{F-?g0W0;gyi|5t%?4O8PmJkv3IF^rtUlEQy~E%EQXhUj!uJl9h6 zw}zI53mfe-eU86E=(Qr~ECOh)0k1jFQ0U@IYSiZsKj+yuPKl!at9AY#39S{J$G5oN;x&FTOpI9X z<63$(^@STu_tHaWSF%h`gJC#3I)dv786%v4hN*(ohQ(s^#&7h4i4u93Xxy4onfw@- zNYLn@^7Krp{#6Iw>6f_G8_Q3os#!MYTr|viUdW9|*Nfjeg# z)8~GuAhNkmWg~U(U-EQZ%MK3u7S+zK#h06zX3iPwd0lWg_7HQU2u*pyRb`ktagxI5 z__nRy-1};jYz}^L&>zoH#I%n3gxDjoZUdr~>74c%PmixOI=+mMFlWYjJA3l&Oj8{K z>G*v~fr!d||AIDD366`N?Qu9G_|HIfT4O#oo5nj&#N&K8_*0%>?`b%HIFH4KznDD9 zVQL}4^H~4wBenT$&op~ zWP~h$(<&3>h&vzis+|X~`Qm1DuoJA`Kf@}>xWAhslZO%uf_BoXj8nuWCIQtKJzs`A z(1y!aIG0kLKzJ$!$D&RqVH{sXkBL)bTF0{{&!Csv9si(eXh{XOgiv%O9xF|nw&!Bc-_KyvJ+30u>p0oVVUj1P@sVjTb-ZPf8 z+Is693wLGXSa!^k*2FV&D`)GY$MK7-m9H68QbM0{~QQ_YmSg} zR083`TwZ#Z%V%~iz&Tw|#I5%b1O-81)0ZfSl z(5cL9bX<<4>jW3XP8|noSj&zeF&pupXfmkaY#%Vj1IeQElF@OGs@SM^s?sh|C>yyX zxK3AeIb<@B)KZiztRUseACl(2DfmD^5a&HecH~c4!Y<`k>$Pl1Q8~30?jHRINTmvq zni0lS^$f&lP$d%Npj24sc~NORW<869Ldx4sWd7#WFlr)1A$gHgn>2HQ&dxT>Gq*V< z7xfS>f4Ae7eNO3lP(>@x2{(j>aa%kX7@h1$QC~Avy60BPI!3Ev&qX7xllzV;QcU&R zD=r%E*pH-Eg+Q$@D_@S3a9Rdo^j)JlnmS> zj&29a4^yiM-L1q)oR~j7Wa|yrciZ>my@#I?q^ZCaf1yH7L0-FT@D zkQ8#>vYrvlyMq2X>Yb-d>o2DDUX1xk_sbKg-_WeR)O)&S2%#=gm|dE&oC7(rV6s8? zM(rby$B8bxR-67+9d3Kk+xBjBoXS=djU4KFoY}1_3Zvsa)ud4Zr3Gf!-GJZ?M`M>2 z{gJU@4OWT^Em4)E>&n#Xo7t@jX=s3@mR<@^Jdb+RW9F%&o;Lfpk9~$0 zZa!;ndv|Pq06pAi%)vJbGpx9i2x%l}FFYqhs=D zFprMSqi5&QbMk0q9z8dYo|i|@&!gk=XjLBlbRNARkB-ly7v|9kdGw+@TAfEjd30hP zos>r>=h2Jv=p}jd(mYy|N5gsavOIcu9-Wd$Ka)qVP-ypCSB^apz&+NmdTCf%hTIxH zWULr%k99Br%ryf>$FEi6%WfBYQm92xafr`6<~@>LSjx-K!yAqGURd6sbnAN+Sl-yG z!k>h0aT@6g3DWY1y-(ceURRW^>3=r02dv& zxWW7bW5qfY>QGmzyVx+dAc|@YL$N`Js1kgF{VztWch#jP>60Vr>q>F!O!uKN{oA7F z)I`QUT^CwvH|y+`q2+Tfl|%e1*asE;y$k}1k;UDmSm4JcDgDo$Q=`PjT|Q{XbDklm z9(faBciACx`aCvgH2auMHbESNM&LDCJuD3#5lzjdm>W?w1yd1B!a`q(x;@oJipV4tbinxB~I+J!@Yvug*_c+IzT_0z9QwOJh z*(7`6cjK!U&M8hWoO_79@Rxk}U+g2#gP@n^9IG@3@8^B^gWNORkPrTtk36))mFG08 zJOdv8>cgki2S3LrUTL3jxmN3?x3_)xH~HZA_=LLz{N=gSs{DaRzYm`QA9+6QLto+( zuH{32vk%VcIxjtN+S3c?IXzzZEFV4>`rzAr`1_sH{7WBtt_yp~bG8qDs*n7feD>nA z!H3T=AAE)nUg4t$?yr@$D5}l}kMrI_wxK&iGM}#sS^KVQ(lBXF*h zY5vS_bPQL@DQ!q(xOWPAX>+nn;HBWD`L7UoLH-fA%nv{E!T-|-|DzAS#RuQvgYWji z)dH=fpP-1>r#J@(N4?4XBhTZM`G-@VbflO0hnE;%X}L!A zamnXGfy;PZBXG%ouE1q}xJ%$NU49^NXgzfs^apWh*Hna{s2aGB4a61WU^BpV?($|>8mDuGLS#)Xdb z(nc|=P#fpiI48frFBJGcI5?Xh{%QI-0%w)1@!K4n;a(*0y9Hh?@UID+QP+IFD{v{# zj~v`B&uW27d44VUNO?93T*@;_;Ico!yhq1)$^Jl4S% z69lgH%y5~7HGk$YI^r__u&$l1+rsuvkjdPr&`S9v)jmvuY>pu8f0+)Oa3tX0W z+5SrUiK2b16!NqRT-IY90+;kZ6u8VMK^3c^Hml77cf2Y@mZOs$8vg8do>}frah}x= zj4<_SIJC>e={L@SINGjNoQ1=qaX{~PB#t&qg*E2_o?`>jw)Xi8n$%Ns?y1mZ)yqT` z9%(OXA6kQ#{0TOAxpP4RhNkj78(&k_{Mj1qcg|5)Vj^s1+zLKC6h`}8IH&D4_0rnX zs!W0TetZL1aTv-1T&IaRbElD>{1smrl>8E(HLEGPsA1Nu39c`A<-sP4+y|}9X=`K> zwehY_o3FIArT+BME&5j)+qzC!K?wSgmB0PK6-bzz19M&c@~1G8m;_e`sOY)yWP9>f zQu4=b)eG3p86i^GStIm6a>7XyGQ3k&$y{GF-DzOI#{wZ-Ks@u2bJxUVSt4G`|2&*i zedNAe0nf+tujg5`2i7gph2h!Fliyp}`GQ;Q^f%~_@nqdW=X@@@*(dx}PQOFX2im@d z&OOmg(kuMEV{IRL-h$z?9&(5OU7zr0vr_}tX8+{=cgLUi{CR~RWTOM8>pS{mz2*)- zg7gK8A?df<3183ifc7#}diuP)XtnCG7I!-ZinMJEj7f04_vKe%gMNS9h#!u@BFTuq6iMG%x|ifMv+4LZ zJVevime%3M>XkphODt`e>5t-;?nvrTiIJksUT8384aE9;>H}Ni*5hXCwPK@#ols-U za{Ld|iIT(Sq>@9XRdURvRVTI&C*O*t28xY)uXBG-M-P{plcI-U+z~y7Yrdn0%lQiP z>F6w zl6pC8{L}i-U|mO#(fKqCzJfcA&dvCZT2H6;95pl79F19BvF^RYVlcE*il;Sy-0Ct@ zyN{XuJEe7sQC{+#Q67J;+$bOQyz%)SqdfY2x$*gKW8|opjFHiofJdJTlA_uupYeRq zA*og*GhPakrW&y+HB()~lD~=^>ftgxI(+AFr)Kvs$viRE8M#P+bEo6fRhxW>5s6?bgZL)>%H_HrSb54Mh7b%&0D22 zM>6U5($0g%N^aOR)5Wp$h}5x?wlmDks6G=pIrUAl$c)+#;fxeVwxR8`Kk9$h48WZB zeKYk23LI-DJN{;RbdPC`-e#uOp{#8jOul2L22s{nCmLgF5yTXHpRx^Bcs;b2-G*Ye zqz5Hz$u^X*B|RuyOSYkKtt&CZ&m^~H`@mU?oaMn;C~Um<*gBAU69ee!?tznW za6)*Kv63dJG-Rnrz1kJEwpMM6SWia&SPPB8{-h*Q^|;w^5Th9ZNYU=<)_(V>|X<2VorvjgCW5xt0=wyjXAj6}F#-Enfr{ zqp{S65}4p`poE8_nY$oj)QBC5T7#)QT~&wT);e>?TaoU;lM%D3L9=1d42?PhQ_uAj z5#L@lLo<#H^!^6vfTWBVv8}0Bx*}CbRQy9qg*PQWp5>wzO=>ET@S~8rol^nexg=t( zv$_vH7u(#0SPeq>Y3cDtVpcCqM|boxS<;YHRZk-o3!F3(N#9ixOLdp_eqxnF97X%H zqgPS&f;>KU<1}mhk$C7##Onnd@njuR3DUGGU5^T9V+o|+m`jUix{sZVELOEGj!jNG zcAE{)ARTsqWIH4HlDXp@v-4nLqZvxzOS9~nFnz8|k3NzU zCUNVu%_T?hrHGQ?P^Ooda8|#S&9dJ^dNlaVA6pZfG7*(Ex~+A{52@W| z+0bW|{igQ?0C$)4j=*^>4{R>!AP4wjPPvee1E(07N<5erj(Y)bd#{$YKFed5oc3hK zjS=h5=$WBCQBk$JLtQ9$o!@~Jb?MJBR>n$Br`4xNM6GAK-z+daw(B6~U>kA8~|jXAiWWDt^7Gb%UwHDt<>2ebMmlrF%1FA2%EJMy#@5_P!A6 zA~eEm*aGYA`@x3sbDGHG+78c*J13dJcK9gT7o&syC)HwVQ+sY{Kwhxz{$Q%Dn#skA z3Pyl)?K93QqUi=*L(eb0CNpI`?CM~={jS~{q0w33ChF0>DaV~tfhM3vxtMdOG~J*my;q-`t@4;U-EKoCo# zSTDHWJ}Dn}5p)TUvP z%+-VF<*d9KVWTr)ZH2bKR;II*oh8lpq&0i*Fib`TVPvWfuq^f#!uuAl#i!X zuzK5%GF>-1cxf7TU!vC(z#hZRwys#X4i>XDR<^4!oXibden&WcW-Oh=9ReX zc&h7|`M|ZAvf*a`bLdc_6FJPxls$EAX4K=V)3qL+%uLB9^a{&k;q^v}SH9I-kDXniR z>_;QR2Wb>K{OMTt9_+z*-|XIpANsmDwY%1)y(IMte9`}R$_ME_oq82g9fbA!1*tbn5EXOyv*z%p&Ea6Tr@|bL zV+R=x1jvxi&G|bo=kI*_+YNs`=I|}%a8U0qH-`_{;Z@rH#^(H;o%46j(C|ug;Xz!6 z_oBz`2?Tt@vow@(3Wb zyo5w-ML=)T_V#)$2&OC#+m8EX@704Q*A?-=YUSz&#&|UZ@4+^cf%X$k|=gViXh zqfw$>|M$I)mryJl$fp#1Y^)=4v5qvcO!=idkc0hDLp>u1%r;S0iIcTyXD(8aPgHSE z6iNi5QZJUK*D{%1sn?2F*4dJK@mq)Ajivxl3@Ct&$#mU*JXgJVmUgovj(zi2c!yFS zU004S+9>-ySIwJk?fjNSS_tzA%V5<$)u-2CLUOP^y&(?eIouo3aY=Rv zRw+7nkI$abKeYy5zIAbi(mp#8TgV}CgeTl2W=>9)6SFeJ{(lc{mvqjK#};k8bargv z>$77^o*0LdmvHiUE%0qG;%Wn~Hl4>SoGpACS5KbLt9NF{dfwql4^F!A+lgE6j-|}k z0WW!Ctgt$pR5@1X@G8gZTwYmL^<p| z#tIR5hA z>re6u+FGqn;}x}fizf$gvLC;Lh`+BKCw~H+NlTS5t1Mu4N&&NB1BI?t4?(-#s*)iKt$xQ9usXhg)d_i4QprqBdjq(wWG0D&M3G}j|FkGF zkXNi1CaoXi71P?olZSD_vV8<LL-672ba#hI&Q zWx}YxFfw`^#VefI96g#>$Q$GlPFR$vS1e9j$zBsWmaEC@BMO)uDa?%O{dh%14)BDz zz6QT8<~%DI#Mlxl5oXZ>W<>?eiVK*DW>CmhGAgsj&@jK5vUgql`q<;`h`VV2r3Dhp&+v z@ljk`?_R8X&BUiBY!^)^9KT^IVXW&;;b;=GPxFbO9mdgs=3QQPTpLGzUiNIpzMnfc zWdzqem7ij!hoI|!&0sa#IIK&9&XN>P17DV?_VdevNuXnop~U^&Le?`XhzmajaKbE~ zg0C;lWU`<`!N)#kN;$7FQ&yEoZ|->MNPNngn^N{*P4c4N)M_{1TD{yi-+F+Pr3TpV z&Cjkp#+C~WTtxn9hzDgEYjphvXk6f(c z7e%!PV&8lU7w9X^te+nxm18J`HI^!qJWTP-a%JIqB^LW0#z(R&s&e%;CoDzxEvk=W z)!gPFCg#&jQC(xc6LZ;jsIsb*xQ8yQ(}XOztoVibM=C443&8CE`o>JGZ%Mfl!2JJE z<@KN~uMS^%bz{*kb$e0ia$ z-Zmy`3(Ja+hFfxKghwfy0t5J${XBs-#ea^`fvo=`e9G(YZ zSXVCa1uwrLUnJLfbptB|s6iO0V}{yHUSd|ExeS;S);y3l26EB5e}Q-18~|dBYrpv= z4=kL?XWTS>!P_t$eX0?UVO>zAJZUCe86WL%B~ZZR{lDgffN2R_Wq49XZr zKeF*&FFP6I`YE*Jlc<`^cSo?tz7pw6y@+M{hN>I6xB{a%*TC?|(MEne-5DRTt)6WO zUm9bG0HeS0*yZ!1?|yv$ix`t)knK+@!*Sc3c1K6+=2+VXFseWYwHn9S$=HJS*|A0KiP>Ik z0Y({%HkmVwI~J`^U{wxg(N}`bye~rUX9g{M;<1GdYuMGJZ#*xyg=e_2WY2~8vpI^s zatlaSOj#2lTmJGw2sn6g% zk=`0l9jMD|7rXr$JYn5mG>S^aa$x2K(N(zV%_$d@50~(dcU)Hls?cjV6rK z`%j_OcjU)lyP8{9u_o4bJG3!lh(tw)DJGM9hyk4Wj7L}ApWsz(7hZyOmB;aVcTEJZ zcX5(f!&kuZ*s(zH7ni7=C2R4gVQo3<>mUq7cWvZZq6@>(T^+2GgSz+^0IDY5_I0%U zkQT{mA8r}Ya~-9kx)?oRB!erQc&eKRd6_|7$r^~k$=YPiAhZdL5^LpN64T%CeQHeu z3CciF2CL}}U8O|uOgF6MS(kbD?A3O*Y_7-JTHDRE%99<>W%y6Gwd2jsRum!LvUzvK z_ie!&cf8=jyfpW|cG;Rps%hjiL(NwSzGeCZ*shQ6skZW5z3)^ zh-rUWEu}j{($O#Fj7e~?19rLIs1a{lD$RX-IBpHDNH>{VHti|q;*x zaD|ZX-(juZ) zmT&R{`G7Yw1+NHH`px9wQ8OMLQ-v1Z#$&kf3Q1_6YN z9K%aApFX^F8{C-2<_Fd~W6lNRg{MpsOz}eFNKW{WN0QwlT+VBWDHHYPDx8`xq;tT%(^|>`*Pt8Ul+04nm~_vBc?dL-K99k`)a<- znS_#tEhZWfL(^!-chL4M(jmUQ1OkLNrlfS!A!7|Mw|9|GcXm5K{ z=S7;YFb0jb7)w#o=-QUfH8`i^;m(Z4luue+l+_8QJ$=bs_CJ*CzJ0(2>q~cq* zAEB*IVf}$BNj{92j~n}$_HhiHk3S(L$Et(*I36i8AGeR@q1R5HmAHqhJH7Y6BxJ#L z=P9}UVe8K2G9PcmAkDvYV&1UNUiBBBkMn&s)=zTt@vot`m-UlA^YM7$&TUDf1Lm66Ck>XW!7H4^m&ouusz ztu{xQh#KL(S55&-_eLxdF;0Tz)FSLaME)c$FZ0yTwW?Y3sQw$0MYpQB~@nQRV=#<)R;@)9Vdt;8#unZH^E#^xUadEzUu;zFu6_Z6I5*kWm*RzRL#*M0WUOH)ci85V zK>-<%B{J9I+1M7lohAm%Cfmz#z%JVZ*k#Ml)?i8%Bd~o>G(?}{78~rci?wo>$0{!~ z1p8};V1Mlpx4*U>`)jcU4}1PDLsj$i{@ahfzxF`OgWY9dQ%~!;$XdI>c1!FwnjG%_ z9wvI&{rWt1zdn6&_Kauj?$-_)nZlI4cBkF^$_=sc)~91_=iL11QtTJtn1?JphvN{V9Bu;bJuEi5cZ2~ zh~4@glG%v;)4AQok6;S`HdC&_X38GfZH>wA`Cj*3Nu&P66}YV{&y4K`OkSF=99 z_+t0pZdip0;)c614}5qPc1b>bH?m~Iy~Nsy-Ak;U*hXU8iESjdof!89?D|8rm_#EE48t{CzB@s!=Fs% z=7)PSn?s+>{}s<;KI>wwkI~?2(1RIk<(>$n=TOh*-y!x#d_KFcWgIt-z+`TC>OCxP z;|X1QGz|Kodu-dZFHeAx%V+H~TKFz-4BjakTt=eTL)q?Q@eG?T-R_|@&-Evc07h%f z94!>bvaf>>;{DzJe*=!hTInD&*Mq-<=HitkyqCrr4#xQgLDV*kyFgl>nS=%dpUP~( z1wJgON@h;*xLjgBmRSoh-&#D)Tb?2xEd zH;QKHnw=1hL*4WSG`JnF4~=euZNg3O)jn#*M`i#O%Rb3bEJjHf-35%2Xj&!k#!qpB zSr|WmB8EK&>_F%M214djqk@6Ztsu>{xeM@cs;`YO4!U&>%H$)oZ{G%aezfroT!oJ| zXtf!0cYMf#(Z)7>E|A-=j`2n}y29AucH~MCevcA|AyBeAx)<(+g2v$ zknQJ8zCrnD9R4zNxpt9)6LNIH6{ge2sNme7Q31_v6^sg+Q4F~cMY@l}BfwGrSakl5j6FHl zuMgmv0;vfF>ob^KeCYi$*NSwm=tD&;6PWe6UMGuF|CJCCr1?yVn_r*n84*M{RS0F^ zQ?Puiwn5Ryj$zPeE!(sJ{G8+lC=dFT*Vq1-^E#n>}j2HGe#D z!l?N)c0r>Ka&GKw=<6ld8+UWL`?GE|mN|0QxNi)G0r+$FhN z82K!ixp?8+nH9s&J-22|_1U#&RLq#ZWY)}zg$pVckEuDQX6)#unh_OE^QJGju7Vbt z=i)}qsFBqp$5srV)7-ph$$4j;HQn+UdELT=*Ug)?WMRwVrdcCl*5s__g$w63&6z%T z!CCX>-7x>mMT-}HaaL1vMN{qQvuD=U&OEni_NeNbb4HD=g=eoZHKS&pTRrxiF*P&K z9yN2+>~m+$;+wljsIBF(xJTPM43jW03$u@0JhE6BIkpCpJ&<3;hzJ*8*m-z6$Hi4g z1Q|L;RN5H$5q=CYG{a60m}E{2s7qNB&5Z*p;sXX71J1C|TxaZKY&9_=k<~or>@&m8 zG7LDUj=b#%XQBBQG`#GrJHtXV8gY;hq8xcU`)&K4AxNt z@@wLN_QL#nFwp-q#^;E>%JJgpJ%AUASLavJ${@XlBkESi=kh!s)EQP7*yV0CwZ)V- zWtOmhBc%AJZ(jIi&JU7FJ`IkKse6a#vpR^+HQ;ln<5T~k%K5q=HuVE07wrwY!Fu$L z>yFQX50&Pk(E8W_HRwHy;VypQ*;l8;fR%;y@$Ux& zX%z<<$`mZB*oGl|$Y*6;Ft^E;NyuN?4h^!|-XA(dBcIB}5?gY2nl$3Ihc7I1xO{&n zx0g7)LI8LCyu;bf>cH2_lq>S^lEQ?a;<+MT=dMN05stpXhZliA>6ba2FD)3#9G~g- z(%4nx>0F14KEnTQ+#{dKBtmeeX3Y6t(?&f76dP-YMpVI{V!kB{2*rWcvdJgdz)f*3 zmkXH{M~*K9+*NVTl2YOAVq>+h5aU&Gt|u?NR~!+Ge}2585O7z;eJlgn8^w{T5c*Gs z;B27_!!J>Pq^$Lww{a1K|1Jc79DKCRa5HuRE$i_>m2akB0QPT&o*kDBW{iQ;C-K~A z8}()!1AGB~164k!Y_!OEhF(TY=zko3AL{eKNQJv{eK)S|GW7ZUH*G!e%kUeh>VxT1 zft_UN^Yy{>kHE`~{`nj-Z94GZ82Y1eW`h~a;Peyg1-R%L3}<4p`R5Zw>pG=a|r&q5I#?Z=yPfapT-bARVc@xbk&9MsSe@O8lq2A z2!Glb50Xp&d_g#uK7#Nn;0zEGN#chow+SP_hk-c9DuSO)5W!Es!@>rS<6P)Zb$zy< zk32!dX)Z?Shble^h07CxWE-1bLVu>CC(hPG@N*qb{`CsyID&!r1pI`)gcTZr_-XhF zE>9eBt>+oIW*|NcKcTNBh(P=l`~+W25P`VP=kFQR;uqsw=+9RAOjI~+-Z7BRX#9l! z2MX8aMH_7lq}S={Qg|iq2_I<*Nw3o-`A=M@D~@Xh;yPWQB!Iw!)`zBx7$}9_I|C=egil5=0=b z>&a|`T0DVsp`Y(?KYy-`F%V~KEcD9>B9OnX&wpo7i|hJ)m&5)1f2`;)!nyGOiNdv> zzYO7XzrwYi4=Fxc&!-ix_57i#hul{n`cx=-T`prB?oZdJ6}>JO_Tvo9H(f3>4BEF` z<~rQZf04pD1{XcQqWI|aW)-f}d#B<<8N%oLivA*n-=lC{Em^jXx8)RtcN z3o8|_^I?_3D-lol{HMZoedtiQra#F@wQ_Ym;W-2K*Y$yA$3Q%epU9m;5P>+`9Kl-% zA`m|VKfzbxoPoI3M@H;^{?fkr`Rj3!*8eoa-SXG^k5{-kaT>UQ|U zh6Vbd&V{EsvwLo)4+~)cy5`8AqM2(p#bU=;v#=!u9i2r*PfAU8Qi% zze(Y`KIrx&4jRe-3PrE$t+abZxX+)^>-L0gn&5wpaosVB|5tF%!1}NA|8HSjr}b>7 zk_di1!^U-7?-F`lAMRGTt`BCbn&YqQ!{drx*9RK%5dM`ok@BK1OTps`*X@SZ=S)j( z(xvrbTg1ThYMgb0!H-Y1u)%fvxlrM{oxe%pT2Ec>8gEzhTA#3SzhMB)y~D3mU)N3l(0c=skt&{G8-)e|}z} zaGjsi6d#?REehB3&95n3=W_*gW1#+jYyAa_Nb)(XzsOK|1nRHz^A3aBx~c1@%x8&d z{y%i|E-DR^FJY@Q)cv`{!PT4^sG_6n>n-Ju*h%LDrmkeW$`tAmGBY3Lh*W zj-|!+g11jp_+*8DT;X>q{3M0%SNITxCs?ou-?(F{0~nm=nkPO1Lk{YQ;# zpu?dsW#OaAY$OX&6=^xtZEAa%`-i%X-EN1vO`lBMZ_QYMYP@(cHrT-zm)RWH(lo!oeOE~K(4|)h zUvq20!sb~cCtiB_nW$z>*5Mbc*UVWnTCQ_ho^!1={U`I7>0=jp6v7V`U-mypeBCz^TaWmD zp2XK(%)fU3C663)Go4&3V30m)BZLRZU*$4I_D$GWg?%%zhY>kQ{(dK)a|Q;=XBXp_ z|BaCJZ*+vRpMyLY{ONBCNq^lXmi``lF!KB1+%NxJba+AO-|oiat6h9K_~nm6{Gjyj zaPlRenSQeL%m1&C{J)ojI0V`EVXyk8pLyAHfB$3~gZrNtn0}6%{qp%CS&;mVm5ddMeA^y!fBofOj>tjs@4d`M zS><9;FV;KK>5S*^UJ3>Y?6$^Plu0lF&5$P?IHKqu`_W9 zuE&p9H7`{7sf+(F3gf9ieuYcFk1W!_MfZRp@#WTd8^5nFP8VN%P7A%HU#>qLl7Bm< zS&DT|AoGuF^AewJDFfFpToto```bR=o|JOXhCnuz`1#|*7w6eE75Pw|KdrFm_U}1k z#+W;2qWK(&;>~>iic)R3Cnjey9;!oM6jincVT;d$;luR1FnhRz z#Q0$FO!xWT@5%ChuCUuKVtZrf4JCvjz7S+$Vpg5fZc=J8IQ(*aegb$X;kVp zEB-D9xNhet_SD4v)7TY(6`Ye(Usxsxl{UP&G_f4&#@<=TCth;)^K4NY2iB^YJx@wBU_h0J; zIO%S}T_ml$ny4$ei@>yIo6X)Vp8gOd_KZBE=a%Sm7lcjt_dhmQ)53TG2 z)BOW{^=?mT@1i>Xz^%CFp@!7OzV=nzOQz55{ymP7%*4`8+{%T_#Il0x$zIc>(#(}* zwVQ4pPP@1r@P%32FME9yjwL6(y>C8H3;>bdDFOVd}Dbxkzg=*mfh zin?>Dq3zQvE;9ybVTLaKq&&|s7MFo*yCAyLOSw<6|C=fW8wmV8?zqZlKV&ZW zIyt@7Xk75wF1*&yTD$-s?waMc`HNbbXH8vtX?y~&WwmPw3hrVh zZZkf19gfqVIDEXrFB&j7F5gMsl>bc9$db8$@TIIbTzq*qL7vhHw(#7hF~_rLzGBMz z0U?dF1$_(m2xy~f1j_jwLp$h+%eAT8z*G1U=eUpI7<({(Kl(Rg{uzR0R%~|vE5`1$ z*sRtB;ao-O8;T=keL)~W-t-L7KGmvf^%LOM9;Zb z5dL@wJ=X&Dw_D~J0qwQ;4OIDQ>MF23A$&NeAE;(@QeW8?>2JCO|GvTV|T=<4^csLJ)x%We9#bK?GttKfh>D zi|hQXa5(w6*S-c>q;TC@wkkaTG+}P9@KSfqgVaOv@2~J@-8pf$yls%(3eP{q(A(8R z(&wL6T;RQJ)1og&MmEp7v3Vqh7T58G+x+S3Z8PuWU-^c;=arXk`sJ7zxh(qf)TIj- z&s^fWksrdSH-ZI2n*x=>Sl~@z^V}wpVBahAJvrICcbqz9d|zp_DtLW~H`aXT9-tv! z!?|0Bd^c&|dM}uD9hA9Ymg5unsuIHGEn=TneYp`|-dTI3$0Ib@E&XPoJjXOV3U!%O%D$=~fV#n0O>pZtR2i&BS+KM;|F z;+MOK(l1k22ETmTD)!4D-B#CFNIIE*wom@_b164S{$$5=Jnrk@m;YJZ43fXw$**>i zDWC0~U;aM<3zC1gW9sMam;cL<`1iVqGJXM>3I6y$1L~JS!V1@@>ii?**MAYPApJKw zrY&Tqf?xiZa4$&ySSP>T#by3+JmZ(Y4ZtGk3{B@A@3wAl~2j$=Xfc)dQOyWzq{xjmU z5A}yS*O~L%at5lwCea@sYpmyvwTq_a@8Q;1M~$s^Bp-f_wOWKiejR@Ndo(o4+i!!v zhsTp}u}x1lPwgOuEL<6r`mY%%{vZ~5;8Li)`9fpW9wtxo{^riWq8dE27($W^5p#4n z|CI5WA}03XF1RwX!ZnY{@L203$ai{}s<25awMl~M#&#r2 zQWN_*l5=x;BvW77d;*xkxPLuXxdwam6NQ{;Ii;rtFcz!~Y_S17Cu8x`Q8XV5#toV3 zo-){dH&J#W$B-DTR~iQnFFL(qZ6!#H)vmjmtAF_*j~i1q!cxU}7D_t{OzT(1J>48+-e34S_31V5gzu)#}l zF7#7E@aYO?_agL*70zx$@S7D**@AyZ;T)z4&U|1Xt;V?~!$6#4D52j#5P>-BfZ*>F zL||3tPw-0f5Ln{8>9t@z3|h1 z!^ZD3R+jH2=J`UP&oNl^X`cI7Ym#QbAii7)sTU@oaR%ZK}1rCR9}=7Dnj@y{AP zrh4>887q$&GscdsKm1rZGBK}LojI+G%s{TU_1<`Fs(0vpLxIH_y3(e~wCx3WP{6eg z+zjx20arV4J;3(_?66>GUQ{I2TfFo{czm^EQ?IGy7B9N4cYDUj>8xq*bZ3PJ#lUy! zWo=A>Yu3XTXzW`ZHJj;Iwqr*{>|1az^Q5=$`F+o%UaIK7$*bA#Rqn=Ly5?N%b-Z3) z7yB06$?Ws?y|C~3)T`zFAN6WhdzJ6wFOBqX1d~#bz_;3a@QJ$*&WcL=@AGOldX?+& zmvTD1j_#5IIVJrOy~C?~3x6r+F|T7+k(IOC+qac+iuyn4)jZ}^cHu9^>Z#sn>^tqz z-8!$BCOdbTa#;g>R>!k-y?ZAPDv7mm6||n#qxYZ=b!7>{aR2iJJGZ zqa;!JOvn2}Ri3 z=S+eRGQm)FkJr&tZd84Y6i~IiKk{pjS9t(`nI+GIhs%;(Br#d?h*$HxR|zK13lr1` zq*s`fXeP+C7xFdYU1o`?5vX}Dm@Ih#x|%HMjP9x2l8C;XOm#&YYu}Hxm0_aMb7W0> zPYjcneH#;%?H&7v?%P<27wOmd{kF3HVD5xTQS8okSFtXmtK75cV=i+cPpdNH2i;TD za*c;BOy8{2gSncl@Ae%fPEUfBT3=ns+|P77uALL~bh(F7JO1 z@YQx#0k+Ic9Hc6>k&m4b2Qm{W7mk$9hpZD_i0WFnRclz}5X#l6qXCnr6xSvWm zp@dwBT?vO*{XDnZp)+!si}8D^e*ZrFvC3o07{hG8tIin3!9JO*J6)c$5AK%; z!N%4ZjpX@oczGPD{^jJE_TsY1$l%(gWwGoBV4i;WmV=SV%E+>jK`G+L5eAnOag^Tu zJN&UVW0KeOf!FaGDu&5v6xN*kPn0;$uKk?MWu<&t{~56wuu;VBNx^j5Fm6PH+{Qk+ z`vLq3(&1ymPjr|I!k+W*=hJWKt(=y-f+C+JL=w4Rhl$yzQ7mvdXfg#iGMALc)0g5m0bX|YbblKR?_=eHoZy^0bY&rPCk&#i@ci~bYH2i;U1(A!z*UG}>6}g1?rXj@nLenq zBvHGfZD8&1qKWkS)Qbc9Z%R)Z6i>YvO>G~L z=)Vr7Y8wK!vBTj#TiV-Wr0SWxa4T|M<4c(ZY&+mS%Ij+9YEtUG=!&E9rv>YJT-xK{ z2um_oT!uwVbRY*(E6O4(2BPINtB!^ptH`O2r^pG+JMKZKE1p&-ZjC@ zG~gq%mB~${yHhXrGaE*KjmtE~cL(=9Q?oab-rvn>vhhXeWfvBuRu?r-!3re$x6;_J z=SRH$@20w=ORx+$03PJwX|UtB9ND99?|20SOQT-@oh0ZKf-#O@Z_m9@!jx6_j}XI4 zbroUggf+{Sc+XX~2nxNDLYPxr@@P1qr;1_k=@M(k+I5nO5hUhW}(&Gf-08+e1$DDIa;6}X+BU0{$3 z-}I?v9s46K18f4KOu!p8?P*dqM>})fG^3i(w)w_>a5=>D`}kDYr^?>r-+XSS z`5O3o%8!7dI;3}dsTcQqnUYet4*GPq>`hQcye&Jtjsq7~ZjFDvWLz>^G6EBs3%w}Z zsdh!Z+V@-5bT6l*^jcA?Z7%YcyL4m8rYG_0!tGA&`8-COpSv_$a$1rVa^Ex5;Z2Of z&GVJaptfQ(n|clM$JKhMZ5{hB%$7Z8RoGRzAL55Y{E1dP{Hv|$^-^o0!s{)o?TZoR zTfWnl=akFP#>qZ-vf#BCEJ98~c41rS`{Sw=!cI0hK0^e~nFD%tq5F zdLtgaBs&hS*SdO>`<{l z<2TfDuAa_b zweqIkNXuv87_K*-o!A@4pdZfeS9Ev3g1d)kQn|!X(4-3A6+er${yT2QvkQA&yE;d= ztGPEd7}%}C?;d={boYg@m3DEw?~ zz>>|Ed%fD`b^Eap(!2wU6|rBpN86F3c3|QJa=bH*yVI}EOe(KwM{9Sdr8@u8@|MrQ z$#>iOI48#3C4WU}?WPqM)PH?leY8CeMzx!kRZ!lThU{nHeJ#e(S7yqF{mI%X>-R6k zxM0(g?TK`I&rzmXrKBhaGG>4yN=W;`@ygyC7w~JE-t?Z1o+Hr_)oxu8Ph^+iahPg` z85nukt?V8;pYd@}q@NzqvFt>z2`fjh6(@@?l)d`yS+7qoEls_0p&3b`&E2vc-YL`1 zc>PN@#ec_UJCWY5+X7|@61?}uhB&?l>DX~(=E~AU?ds(hB)dBJiaGsOa!UuYJdy5b zs4QF8wt4x-**|Wy{p0H1?8Q+I0^g|FjNzvdiouw#lQjHKO25_7ePr#V(&fj3U3xuw zf^}HA*|HwtM?FqN7efnOYt7Doft# z=?B>mTSLa1On)r{?;+nnv%u66{_KWZqhrq$if6 zU7RU<^y1nwxCX331Sk}{joTzwvEJg|THNbu!J1Y3iZ?rLlC@s> zp$k_fk;CXwxb)Yt>q4F;;2bq`QE8&49o=P3JEj(;HMq=7D9>C}uF&!tTw+p|xoD6< zF;}$YgK91s#Khc;TG+s+W?($M4t1yb<8aHqI$66qmiijBy#yB?FTR2cu2ZdpF2*h5 z$&Hz^4PIuL$ zHSNEhY%ckBVA;tSv^Jku(|*gry8$j6klx*~V`y~urv0_+VvQZ0>2>nx;BF-1M$qn& z?BslsbI4=7%n7DidbOjP`bEKEr(5A(p-2fTz^|zEMp9``1pJY>%bukeO*Es zwyNY7`q&E{>jrA~Z$>1eWdTvTX-{p@s8K=-h~adTjQ}t)1ajvO?OuA z*|({3Q~#&a8A-8jsA<8cTJz@4 zunra%%vx%EE7o5+{-UY8z;<72Gia*a+&g_9hNOSnUu@Y_vr%X8f49YH9^Y#+Ty78M zy=S#Mm;I-tOE}E*iZ~~BmBTvRaV(C=6BEq)eZAMFz&~N}DMda9h2(dSi_3SA4AhN_ zwhRmT2mDe+Hw}O@#Pa$0&WmxLC5|BPr5R_pL16QaM-yj(iL=nfDR+g>eF_YWQ{}K3 z1WcT{Ce96r!~2|AFa+Iax@Wrkvw1{(d~XH^jB)Fi(RpPoE{`gol5o?9JYn3sUEGTf z6?cp;F5(Tx?^zeu`6dm{D{Xm|va%y^A&G(cH^gC=7{tCWuXfl- zViTC>*A3tUO!@|Qj{^~gYW$`->@x(Q1Dsa!ySU=pi&pRqd4ZHxOptS9FIDUX8h*L_ zf*(uki_*6ztN4*XSCpWlPTQS)U0>gE*s;_J!NX5%4sI;S=bX&MfCAr;#lH!Z2|g^d zDaH7M@Bsg4{R`@O(NBHV+~^@Tq^_ZkI&N^KrzgGK>yv5S+k(!*!q!+6%c9^*tK7CKuyl?rbxT#QD7? z!!hfunID3%3p*T|87X(sltWx*ARU8@D7c}%2 zgy7Oc6y7d2-bM;BUKK~``ho_Jhu{~5;NwH^Lv+rME7;U2H}cg&41jjrXD; zTt<9__lm_pVj&DZm--NUS)B7+TX?%TVn&07Ag+odpY4MYC^jBK``#*!Oz8_6`h5GW z35p~6_PG$xx6g%mzI`sl^Zi93p6_1-ABHA-pvoWVi~oTBVxUTwwCv9z;y{(pGB%ov zap^#nKhiJ%((upcr{GHsp08J@I)%6=bYRXpM1IU(W$-gaZ98_w)q93dzMYXV^9u&g zw+}LQ{3QC#fvO!4oHpkMM)K{XnLmL4`6gZG=j2Lyd(eRn%*{sJ91m3644-_vvCPHX zVetI(C}TT5=>u~!+58;zKMlQ%Dlj#H9t`CsU6M*SPXvCtq0jegNTvxT21g_pWW0B& z;WJF&oY!G~mo`wfSEo3N_e}nCCSrq(2R9f#`R7{3juTD()C+mem-KChKHolwJ_8K@ zd_OMyYYm=n|INGuT)B=l(0o~9MJ#oaPR22x3l79#mfPlkC^!hs0KsMK-DfG z8%=oG=%4QwPINfOefrxJX<5b@J*ym5B;TSLJ{37!T2iKTplWaBIeo%nZ_{eQKLE z9o*yAy@6^REBXHeQ%^pTlPe?U2|$9<<$+HSE-ez0QQ(u}la4cS@|16Mq(vppIwkmI zoHGz-Ya_U{2gIqn;PM<0uUGgmoHG#DazABIi)*>kQ~2dNa>IvtBmEU zFB#PGVc#Wuq$l#zSB20^`uy}PBL=^oGP3g1Pczhg^8p<*7V6ow*!qK^t4yNKziLi zggw_I47H_SiF3(^*$Pi9yj9`4yrf(xSC^MA7p6`4|Hknl#yEm^IGmU+uO}6*^KGZY z{rR?E(d+h&n-CfN^xO*1K)E{KdpPd^Sc41PUjghu+6_z9nH;GCfkAC<0Ka9`+YSC+xg|6+xcm(Wj9d~Q|v7Zt9{ z@lT2mWe6YbYgp$q$IlFYeQ1xDfx75&JST*HyrS3q`x!2l58Fo3=Ol&CQ@GAgjekL< zH>>DnTt+=L{ZAEtO+U%u{`7u9(XYh0==lSM>w0ye(&rXMKOrRlbvvWW_e#a*R>fz& z!gcwUxqSBPf4sxVTj&4q5PF%P`O9}g2t9o~F!=c&WnqKs@^$JP{5sG`eumNOahlF& zJxLYUq-WEGS#0L{_f%7Z| z;?lPBdXB=SFChLSg-csRe7nMj5O6_1cU&`(P(gtRJbc2O**{|xK2+h86<(q6nF_B| z_+1J=Md5!`_%Ma4=sB-v zpxjTHGy7+V!cSLtwZi2YnpyBcDhTmmk53eT^aMk3cJyjF;D6yF8R|ML{y zs_13z$=i1+e4L{HiNd9=lDr$r2jj zoHuv=T;o=8$<%oZm-=Kbnbp*?c$V2-7VHs{8_$$oNbonv;+zplAQN+2)CwsTZtZ^d z)rd*U+XKy+rJTC}ULXt8N+X=~4QXj0wQ1h0>5H|y$lM*}G%|--UBD#Iz@&X{^Ouc( zzewNg%2Vd;ksAA-5I%qUk}tV<1zABY7foM0eSU$7QbeFB)Pft%#)|Kj@F$My?xeAJ;=Do2|R zvIbM57c3DoKgJ~^G6L3kMxvJ7FnwOjtf{a91c#}}OP=LrfLq=^kch~|K-O7cV+SHj4memI`%8)io7$(e!{jsH;BQ z)^s0;LIZB=FmJica|Q4f>)g|Ug;#mUpYzP7V!z=hrEBhKfOpToxT)Vo=>ObMO!t0~ ztLp6Kk6r&LH{EboE+enwjF^usQkSDBJaNOF9Jm3I4;5eDw@Cy&2O+iwk^MZ0?{I^= zX}my~jvv!0^C+1Myc{C`ZqPF5F&3}=@}Ccp@3}$bjf{jq`5eml<#YW7|IK(8hg{g| z&iwNHY26nhzun27=J-%P*H--UuK+{J_m|&p7f2K+tzsHo3q4{J0yDgW}76Jz2L92LAZm_Zt+y+$BoZAHw3l5|V!vF8)G^ z=#GB*+d=0@3n<6B{9EPF={Ry;?$5tdF#rzIU-r@Z%hfOcsF3`>+bK1(K&!s>{|Lkn z(tllm{#+;U>whei57M9eFc@O?ko)V`|DSLtD89^-X5?bp6My_~0}j&vDmSUS$HkwH zBiASV`hNvjko;9n|HH{|LHr>3Vz^n$=X!@M zU+3h@dkD&A@XPeFTVEH-udW|ed{y8D>x4ZbC zVI&p&>8}aN|2YBrSAmaT|BFNVk2=?Jm~U7PA-^8+gX-T(Cx0?C2Z81PN&Nise-T!G zWsG(B@yni&{1ac)Y_oOn=iknd{M+ajp>+Kn0Y-lPj}B?Sc02v09~T|`@{bH@zjiqJ zo{Px*p}LDwG+3H|b)4k`cbuHf0{>EKWQ<00jLuUk~q<U%8Wixb&YCQvbFG$mcq)Uw&7}^IPrYPb^4%-}d{7koYTI z{AGuUUxoGs|7Ez4r*@&EN9?N_;rf9hf6 z$5DBM$IYPfD|Zjx;o6V;5kE-( zI;a0VPWW^j8}Re%e{x9qEpqbRW8k>-t^b1&KS=%#C%;xe~<>dQ$`}6Oo zA^P9#;vcU3n~?cI`G4<+j86*{LGjyNe5h9t{Q7?l2@HzA(Z!!z5W8>wXAzlY3N;GC zxR2XQfByNe??%KwC;k^8=Ff@0`_GI&*X19oQ9-D4>6iL0H~rTqyZHY6^IUv+{=?$) zJ9B@Yl6LU=)U15-8DNcAU&zZT2KmX|B z|BC?bDDmXT@Ac(elh*n>4qtqs{ZE^JeQfvFx%gMHfmT7%FVMe+Z}^zwF8Tu1fyJ{K0J!Vj8)Y;Exa6{iDwP2)6rc$Br6f$v?d9{=3x%nmXtZ ziPYiC+Gxbs&V|7oSQ_-wZ^QN=45rh}`|}Oyw|0;WMsJ1~S5W2g)bjEOt#6y`=s7URoivNU&ACfblCZTS?9b&hK8#RoE@B#+&Q!V4og;!|Gl_O7s*Sr~E$+deeGO*^&Zsub{ zc3D+L5{8P}+LN(FS7YW{*kIn)7)!j+_GUwRW>sl=UR8;;0@~PgX=!8ArRq$$ihzekDx)!2JFCWExhih9Gol+3nPrdQ*yX`BK^mvYuEb-dB%oC>ulCWF z-xw2SCnkptdCVJ@0I&XAk)L@+_37C;BbPQ;vk4SXZI?1o-FrWK9#g*Q9o{Vu-GeLI z^1D_U)xX@>Rkt*2tN|%&`W`V-50zehZ6~$Lhrglc1GaJP!{Hf=h>6Vf(nR`IlN8j_ zSnC03-I$3rWG+Wl-HfWbsWH<+%i%bE%M|e@RBS#(ur0o|tcsq&OyYGeMzHO|wHQQi-Rhi#}ExByT(XE8pyS*-U$66S{-3c>ssJdfd$95+w>>e+=$yVaW;7blRY2k;Xp|*YT zf0)_{l^Zh9lNGl#*2>+G@c7mUUvow`)Xa^hW*!5*dV4OfY40uqNn?6TGW9a5Xbnsa z(zezR7{l8GYq00nY)(c?*2nIE1=GZ%sEoV4=mGE8)v-I;YkHH>DeK`6;*PEoSPXp1 z)XHS-!z~^0y{n_mCnblCc@!Kzo#Ws|4|=K1$V*uD{bTdZ-iTd&)jAR??CqJ{0PiEI z?bK(l)d!Xg;g}>lWK_+Y$>q0LLgIY;a*` zXnIqZN9NqM8`54R(|@omT+(~{^rzc}b3u2m`cvu7MavJ>pW5<83D}MtQei6jg$8FN zwXOZek66&AeA#9`45Qp;MDhVM!kQok_lxPrvH8^C%%{C}JlAQH`OQO3MLQYln3S_F zl%ccksxwuWW(Rvt!)OQ29g?y77i`=F$3RaT`gEuGszeWEYbD)5NJT8DkF-4vE8>sS zb~Bt19HV946gPIIoh?zei`M6b^P$PgX%!r?=Ef!4jV0b4Q2p+pN%he-^@RhIPod>9c+STB0wf4yg?59& z#&*sqZGrVZY}thMKJ2F9-p%PVXHK0x_r_T>v9)s%ZTS(LXB@;$y}o5`)0go0|E=5a zleKBT?Y=R{4!)~on9e_b+i!JZ`wgboJ|pMo?m#+)^ay6%*v3<~>TWB!y%@IRCMi>O z#(-P(ltRSvy4!GyM83ochPDl6ZJA9RusxdUciWL!F@ZO!D9F1e?C&A^8;;j0Jc5_l zk^5@VHO6)vEan;gT5C6mf>C&KW#fh z*6hA!I#AU^)24!|4tP+$jWB%N!w{VR+=C&wyxSrlO@9Wi8T|Yc7Vg7;hQc-fVGbuB>Lzl950Yor zJ_VQhOZqbv{na>UAU+a5p%=M+KJw0iIO7QY5}Y#-<9jW^zfKT=cr|{4--7aDAkKbI z@DKCNE%Q+5-BvuqhwJ2mGtU{wpL;U|*X5$~^Dk8{r%)&YgC!M&K%X-5=T-TGK z2DLc*Qqli3g|kl;oZ}b<@*$1jpC^bwoU#OOA&5X+*Ym$OXy1DNU4?7?f9-JcVcrUV zozGe>>llMyuBIP?`@-ihRW3UJHUEzrZLB`WE4iZ;uG1?$wO@bMZ3d=Qmt(C#`?e2P zIGlXQQ_}lYg|jXRzDnWLS#YgCdn>^&Q1l}dE_-e$SL02Jp1qs!xnAKq-&z%}^X=OT z*ZKA%h3j_aKOOFGXMUk@_HLrj?-U>1&TLk=Zf7bSPX6XSh`YW@;rca{=t+8MTS&TF z(U-b&9tOL1jP&gLB+OL!Q3B$4ufnBH^7d|pmnnMgAzW6t3TI z|4HHHihhh6I`B5fa=CzI1M``ue4dHxnR9Qj-#l?mfu7!dZs^r_Jq3#nB)7{C5)mIv z@l?K&;=;v}mKo+VD13QnzZ2}sZOQei ztiYr(4pJC7#K&X>Sy;meF4=#DZ_EAx4~%l29Y=SloN4k{32JaG!nnNDf*I96b243U4Yy`7tn zxywHCy%724Lli`s<|0x)+ik!6b-;qsUri7}<^}euZ~8lNBPjjT+`wUj;YMQ9GgDnUmTMD{Z78rGsJlh#!>xyPZNZZw{0H z{Sf)(9Lyl-{AWMvmw#4>{M}Ce9}JiLAAkOHp+6}9>zw>{7nSK}zwDR)HDE#MZ+C;1 z^IUv6_~qY<8$t4AiAtxRO@d$k&x(TO3*q7F-@hY%ko;=5e%IuoEs3U z=1mp8=i(o3Z`yN+EId{8$OU>(t#0(8wff62I!9UO;?HsIsN9hB%k=>;3@X2`v#=1x zI)Ti;3j8F#v}@moeEjbd?s0>8`9_p%I5+mk$KJHFYd*r>w3_PLQDY7Lhu@o4P32vv zGsimAhiIf=?~J@9Rr_WN_5wVFH?Y{qg{=UI%=N?L*$D?PIEX|oy)sd|q!eC6YgRd4E<-SXA_29!*s zZz}CR8QP~GyX7@Z!dJ|WEoi5w$H}u}3(bU-4jmVoUK>ZVe2U|Xvt#dX$MKEXv4gMA zjxBzCDE>TwKV#4SBmcY!cZ-O3;2j(R9C!r|9Ou0ofmg?!IBR|vJ|DNe19yzT@E6x~ z=m=g9<28QEzj(EeHCNINXsgN3?3l3~JBM=HP-XK6*daro*zdJ;Q+4=ZZAxY)VBbPX zRn4||`U&iBT;OJ7$MbhSe?Mw!zp^KiG|p=k3k_!z{#qvyE~ z5Bv164-bB=af*FUEWDutMlT^bak+>HY>TvH1{w9_c}}(|8c&**cu9Pbm52tYy14+r5&gA=kXU z8-J_dwUcf@w{5r8Cs%d4XUBSafWL)fK{Y~Un!>0n2EA=ugx0>*@?Q+}X-eYhhosfS z4Z|aN6B08E!7m^6i>{DAl6+7@{@X^Fk{>A7@24~8cXJMuxt}Zy8#bZm!S7}lb>wE$ zQVVBqs<0L*b$q~0q%Uywc$jOH6tP1oms_MjAk1)}8J;)BiutTmN1EM@&wjq1jdTcx{ zsp_gXBPtKumIoVh5Bp=Q&6Z?5o>f)g1}zHN#SFD(XgBI*y$e(A%i*sy*^%1bZhDq< zJ@#H!>HhS=y1ZhsR+?~4X6n&&AUzZenPWk~RtTB!t&VgT^eHl+B;ndUbz+G!}+L2diUA)3p}fxO+|9o@2}ouRKMp^*4->Z7^bx z_vvTy``PWzXOu|lCb+dlLtTtSz{hI4mpP-V0o$Yjao>4*{A90d{8eBC**2pxqod$u z&!NZVU}84Md1geB7twsaWzjSquAi3-$MEFlp&Wp~LAh6ab7bGfM07XYl&>iTZ|9~w zkzP`6H>ydU!5%QQQl8q-%)NeYhude9>Aha|COBzc>mCf~b3TxYWcCL4SOOUVWGoQ- zsPI8PA)YxhU2MC`@sn}93JJXm$=}9};BNCL(~MyDHeQae1md*| zX3mw2$JXOm+b@CTOY{f0vZF6l_Wa1Hd5Xk=N?tN`A$m^Ebd%ZTHaR%4sbGsLjZ1v* zglSQ=|9hW#RE;ob(bMohj*W6`usiO|*7459bS_Ojuln}iEoipxa~mgJI>juG(_Z1< z{ysZot}MCr@snGHdqYToz6 zSyqv6a1Pd&mw#{C^~FKV5S2PT>v*;B*q4`oZ`sr!R^-EP$r_6$Dj?yqFS z-&gO%fR%;&6t4@}=*PMs_Os_wR)N3UqUo}^tq!-uuJ4hQo!e)b-;0*DJ1t*Rd(rGp zOOPKb+>H7Vv?uMWkQ2?-)O>yB_m_ol@htbBIh^I81N~f*zCwdI=O~r@-O_MwEwdl! zi*hq_(3$u)@<-p>#zwzyD2})V5#O!ih<;0$zgZm7Zv!>%Pp!RIY*rWYbaM9B^iO#% z@+n9g`l|@S?}t)B_$9!#zampFfxUpbuKjYwU7~gwdakC}V4f$Oeha^WN`iR~ft?0@ zv|lds3<0N|=z$S=^Nx2opkr7Ixj}kfgL^^vPeX8)>_AoSrtJcDbx8jFG(_%MA^6cD ze7+Y#|0$zSzH*zs02u9G1*HoQOCWw}2tG8VKAawc&xGtCxpPAFKQ9EI6oT&#!54<; z^WzYGR)z54ciBPu|5FJ51n`0Cc{hC!WU_Ay;xi|N58wF((Q^V9gwy__-eW26#EuE! z^W_k^zcPIC?UM9;7lq{KaUp!nln=U=;CDWLvL{6LEfD83EjZWc8HitqpWxRLL?F)h zB!cU`D|`(j`1f$mK>FkG6P&A*48$o*@J$2}h_m$;{6&HY#Mze!{ysqj;^XiW{0xE! z#I^qaVNknwLRX;X2=@DqNTQ|0{ju)dTZE*H2zEF#GtE^txB= zCf{ll&i0mp@y^9h=tmPo@Z+o-41Qea8{g9ipD!5dzWU5kIA3E5{X&P6KXnkiRpDb4 zF3-1LAC6@i{CK5>`{2@Ike&<6BKHJEuknfy{49t2^PhE?f&8oS6aKpXunr4866Xx0 z*Y*4ygIZkI^C=3~_56zpXWE7TO$r~O@PAOat`EOexaRW*g=;>KEBrK^i`=~mXPYB9 z-_bKLy~FVn{2Ya!qHvA}7)Y=AT&3_+aZmVgFFgb4tMC*27KQ8lzf<9SMuh%{3O`-p z?Ft{N@DCKO_3Y0Ig5Xat_u2@q`CO&&IuM9H^vB6SKDxcq^*b=M1Fhvm^LYf(XR*bGMQpf*-%l!hP_6 zbU3q#KjHsxie5jDzf!oC`(OyZAq3y*aKGGF6up+qaV!JVrSr3bAOiX5S(|52i}!cu zJlv`9qZGbf;nH^y8t&whf0?7)D~A&kcgQp$WRK&FGWC|u3uaT zkgQ-IEu0vzG-X5R6z{Y3@x;`Y1@ji-V`b-Kz=2B_&uyLsk1~C3ES@zTUpW)^`_qst zu-jXag{*UP7u+ywF`QoDvcQW)Zr>|zDAy4xCvYQIZe}-Zh+7GrW7fHj_49!EtRBYa z1JB*YXDR>x%ia6HM^&7A^7!fE{K*YS?XU@#- z?8!Mu@9ppNdGBvvbI$qBGtcwP|2cDJp1JMWWO^R-a6S2x z_=MO>J`OXIKLmmG;&0_I65>530}QB0YUS4f)02OI4|3-U!ThR?zXQ0Q{H6RwTTXvU z60Q7O4B8)IhhEITbMgJkeNHB5kbLB8~DpgGOx$PMz8#1t!w!xtKSv*Z>{RR`gc@mDf1~V zuPjzcZhWol3u1B^Iyms7ztKoFZU^cT)_a{H)Z5)TIjqwe)Bd4S|5o>93s%Rhf9tF6 zFy-I6tp}Cg9)Z=OmJ#NUm3N)qu=b-ZAinU(MUL$-~P7GdY{@BwM zEZdFpuO*t~`8HU2>^G1J3y8{Z!`ix(M}L7QclU{8r}End8|($1jCDtJVFlbosc{>2(ROy3TP#cITm;)(eBF(% zX(O89WV~S8Nj19oBOpH0Mh&o8$d;M-%y6lK1MMTx^j9F0dx7+B6^74n4F_QAeFck7 zT0$VI_dkSM^zc;Rs*Oc+)kPZ%7R{w&`u+zj*Wg3Gerq*y5a}Tlb2v&@{@oq6c0B6W z_L+X8H*R>-kK9bEbp6)_XxBx2skfei)@vBK!|>4iR$l?!EILlyi+O_wI4+*$d6IwR zTl($bqwRkHnHml7{{TKvdOKlh2aMV=JwE#k@KuZt9}wc6r7Nz~Me6a%H^3=7^yptP zz-tU}(KS%J9gUxuW1EP3a)eWpC-5c$;RvU&0$)oY9O2YV3;cBg;k5j_7^>nFcR{~f z!l~I8_y-)P{(*i1r}9INFmxY2{5XMdB$vj$g8oYa;RvVn6L=IQC>-Ik+<1;_ye0PC2a-NdU2K=rUUbHJj zOHNzIp9ZGoNp#{2?IL=Bqq<4)WW5}&VvKbU?)Buq0-T&^kJP9B@@K(APrk6RJ&BmZ zk$ft*TKQi9BNFWxIhG1K93LvG5BSU3`L6WdL70fAARNiVuNMHnYQuK`7nn@?J`XQr zbg!k|sbc-c$Om}%H5vvY{sN|N5qjxIHpt0|cv1RMJ0Zf0{QDG`o~ko>p?;DpOc!FQ z4PRJNR@8r7td4^9#>jSid67C=zVR{g8^a-(I|sWuFy_F1FmCL$&ijscAGXq{3xdxO zMIDy@wk0EC?%Dh5I}`RRkJ6$lHkv$*8~cZ33m5CX_hPZUI~S(MVMV(AD_97A%jx+x zNO_F5`MEn<_F`?j>i-bTNJ|85wEmF@ur6B=#QF&^fTl$?M1Y0mf*=_Llwa5c-4kJkj%^P3evB+tu|=ViZVi<3ODpuQ9#|IBf>xAX{-G1%FeknH*T>xWnM zrcxqG3D~{^n{8m_)#8@SnIbB}`QL%CpW@y+?|zqe7q6&hG zKM5P`?_4_Oo_*Ne{TB;%2lVID;BB!@@_yWX2Fv#Ev{}s`AH3X|kTb4xOa%;SN0Cl5 z8)l!!+ZVP2%(qST_FlsB`4-wVfc-x%o5PJ7a;t5Kuw;wPge|t5n>)v_(MyB*T%-33 z7j}_>(?hljY(8|+27-rdZWrGT(b=%T(!C@Zi9 zt%qvJKft4f6#g3mk_2~ewHy>%-EOrxNW9bg@r?*)G}t;qt);1V+zs;zRDyAN#f*fH zYCx)5UEVXWz}-0e8j`McB$b#P+SgGup>xbPc$Zb$9;IYdlO^Hp25wWmrwyp*a%^i6 zg~)Sxds!f)+@DyWr*s2t1X|na!amI>DFcdN==&Y)$3$L#%0khrHthw>L7hbHA7aBM z&N}-ZrgF~<@MJrt#uq7Z=y}t} zWf3^c#BUOQ4*b58E2{f3gvLHXE!W;T*b(>%`SA@Zq`OdxX$Z~gz1U!Qr){S9h!iVm z%EEzXgSQl6c(JU&Nd-vrsSQXCH;X?@Ux?umLlroU-D_f7B({xA=p6FRN>n&gOA7Xj zuwyO$BD}GM#_4^hHvt~VLG17m9?sl%R6Qw!5y4#|g0z#*M}^?n9RpQny39T9*?W+E zW*k4zoCv$``@&h0;D7*=+1=>~Z_zXnG={hl7tp>X*L(NTITzo!D&JZ@%H`dO9X#!4 zAFgVceYL(LM%@kO;06urIFaCmoNUts&$6|_YeyK21ui9J^V zbgU_y&>4(guFFd8Q8=bVlynoy{}|c|H=(0pERF;~NR|z3tLn{OSLGScwV;;AI8`iB z#p+O<$F@}EvAfV`a>`_)OxB^iOq6XEpzN&s25Kbm09Fcs4R9I-f-9*<_FM}=#wB=n zDXSY0vgZo=5T4ip={eQq-CO6~?cL}09)z88&$X}>8BX&#bFbU`N2DVfASB9EP5(gc zZ4q@XG|Z!v!DykuHp%Hdi$e-Nb9z6o%l!turp*mY|J0!8fRi{h1EsA2jeP|*9FtJU z&v%5og^bbc}?s=JM4iWhJ7ScbE zV+-m0pNLDi_Xt=wc)w(#(Jr%DC|Bp*BTb%b;YvHTkUi@#%43aff-K_(6xWF1(L;2E zfY$6DGJ~cvXAxx*NHIa8w2@)i&frZ{B-~Hpz!X-!8_i$T&&Fn3BuahfL%Uexj(u;p z?!q2O+GF^Iw?}HB)Mkm51Z)qb#F-S}U++D8@T{})xc6i1o8O&#re!LtB1Bl!(3$@p zw!Z!B|3E&H+nIaDiA2loQRT2aWXWyyWq`BFp!5103ZEBA8l$L`q&dK)M& z!ihQhjWONM+;h3Ts&XiLYOeN>5I&Aj`!#20R4^JW!SDl=&)jbJY#gjXgBg~pJ@gi# z^2RPhN-7jD?&tLMDJw>KuEs96^D;+;oOG~?PP^w;1V?+}s=TJOW#PW^n9{~<1DwH# z$h_;|HTXOfTzPEyF`vqUSAVU0=(CNQr-+MMesj;rWrs!8uzczlb{0=xsc8S~8g1+T z1gUtIMVBfHE9N}P#UO{F4*t@ego(&Fg z*n$tnSw0kJQq)a-ozDZGDcVLrN6KVJXH-4w?r=5=3C-wt5w-^HMC_<=e%z^r+f|gJnQng&$Zx(UhbT7g@WL`r-_&SLBd=9muKf?@`$a+ z0YTocxDH&T)!U0+cEy^W1?XU9{pGWg#0FhmdoSw#_isAx3y0N;wtoQ+xA%~%V=)Yl zeAV&*MmqKMBBYv4Xskq1qm^&LkmGcH<)2y;Q093i(aBvnR0|D+_lzqSBMaDwfnAmH z*j4{~s#Pi((KLewR!ayZgE95kb=(opxqQ)MhcCFZXZ0km9y(MPucif_Yj`WeCV6zp z3Cd$1BRt-zW0l8fLb}s!_FM^49(jwn;zh5bz02jjq|{$yj5^(Y+rY$h=#)^nj@gq@ z+9>mLk5Pys>T`0G)fa)dyccqhD61(fMguliXX!Jz1>@ZTHgA4K82U5}J&p%>&=kD8 zqY6>u<7x~w;;BlbeFT?a45iUgpgDBmYGW$GGr{S-2`T$kZ;|(p3`3H(pkc$<24o3d zceuNwf+bg^_p>_hd6fn&U2;cltg~c%toNqahRRQwtpQ*7a5WKoaemHO%qZ9#%m@7s zDuKKsy>p2A`haoRpM8NpP~QqDem?9?5wT+wbv0rXncNTL2qJF6^bf@hO}5ip7v3|4 zis}FJCz<&7qiWAGp>JX0n_V4-F9F}-0?uu)lm$tfW$8SSr68Y*A2~J;)&CowD`rE$ z-riQdZ+LYeT4v;7NeI^SnhBYIAi;3;R1@@MPm+&6S*pjz88d0R9$ptS3G>xpD{N>j z3o($fCLn%I`pnjtE%_mOUTlB(&q;r{3-sqZ;}P@+Jw}v|f8~7GcQKhyKtA3Pn2YeU zA*_}19&RZ8L0BhkrnY)4KMC^hu}6}a$Yv%vvfZew>&k%iuv{_gY3sz6Z^p*>5BTeS zyQKjC$hTOPURqcoNwfr5OZIzMO!7*28E2DRet_Ruq_Yxa&ws|59iJhcsAJJOT7;m7 z)7l|DoRV7)KMq_z8-nFOupqjqPV0-w5r3*fflyF&} zZw&Ckq&OU1=*3I$sWiZEk?;(OeyN1Zd_ck+B@?M|lazntA@Ev`hZ6`V@PFkvn~j(7 z2^<%7OVHC0n;e@Z!d2i?I8JFxPT=&BkDM3_37qU5kh8MCetJ6*z?G>NmTu{|7wNXl z0Dn%x>3g%F-(!H&;GG;Lt4uGi1(ETwj9R6a>+g>xT&|C=8sP77oT4eO(K#>CTX8S+ zm-k)D_&lC|q`!>6Xn@l?cXC>KvRo!`xjf%(fWIQ)X$UCvG^(drQoYEO=$!`m-4ZUR z^KT?vmire8w@Un@rTQY{P6?OWfvE=g{Sq$gvsS`0CAr%rTu#qFOSoKrgK7K=N8U1? zD&ZOM6X{$k;W9n(AV=9lYY4VU=_2DawMR~F2Z%nG<8nJd_$eZWliLBpPct;I9U#1y z<8nJd_&JWt?EvATAF^_Pp+D_wASc$GQ2NN}`F-ZArklLKmBs_)wCVYX3Nu`$UoYV_ z#uMrMngPCF!sYa5^LOym%H_-O87{YDlO#TJJ0sQ-5g!@%7|^rn1};~o7bA1xLpq3f z#Yub;C0tHtc`aRoL{Fo1!KYcmhe`OqO1NCV{$0WcO7x<YZ>KBwVx!yM!h1NO=*C65k z(K~!;b>qTC%joLc)XUaC0?;{UhHs_ip0r;U3k`7;%Zx>{7OVRzafpn6Q!wp7#U4w^ zlh!3-3#xC^Y`_j$@(BRM2F+$BX5r$+O|x6r$-03u0ynive$W$s8jXm0{=y|Q?pwGR z$DinU3Xl61wlo!t|K4pQao7&+Z4HQ*-~yFe7dOv+ph?G{#am0j*I)94&?TV^DBuLw z53co6l%JX{uBs57WujdA?1c;NnpHumPw{0>rJ_vzcdlgbfp>ucY*yOT z$1+}Cg(olW;*pJS36tvzc{=Eij-z@jyJ>j1UU>07D#D2VRXpE{8!b=ro60*B(Z5n( zM)4GNSK#X)Tu=TQ9&hpfOgzbH<*z|tJ^72ce6g64ApZmjgcI!?JrYZ;eA;)5|NZiB5tlFK8$iOGHvUFun7qLUFl%@?l27fUR{mrI z`CXh)%xiEq{nEd|ApUOZ9N;$ageCdZ-fHF3qDP9qHvPv?=MMK>>A%20{uvs?z{%-P z{j*j+eVrls+WIq-%fCQOB&SXPd;|GiRy9x;4@>c<{#YxY#ud8qi5O1IPpMD+%m1hF z(3VM}U74YVSgKyw`582B(aJvpOi#X*N0i1QveU-@5Af8Jf0@fK;(;mtG!E6u-wsSq zzJm)A^LCs~zw-A6JoMz}3{yjhHOnNQ#*te2*}zD?&=a@J{f-8IaAMr8KB=^HPhrRn z!Hu|A5%upK6j>dorKR^>{1?rXFT_k9{z*;65c&&3qkY|7nJPsWC#3jOlPJO`b36|G zH6oagI0I=W@0>_)8aHagW6gK5x`ta`=PlnCu?Mj)(q36qQNfTKU-LbwiYtqYgWWnz z)krmWCmT8L6u$r6XP-@Jd_pd&_hLyTj7opw!k6TRj5JPpF^@T7uhZQg1 zk8Ru8sMLL{rXd-v563QmZu-IvbM3LXe~%Is=VefuIuY-1il)e+H>i&EgtK+!J!V`2 z)&$-w3RE8}Ps6WYo^YgwP&cqVNvq0@3e<6>Z7iBZT6QhId`ksto7jrllL8_-cck)o zOBF!B?R~cJp$n0Lhq?h^$(okaHCMdMX6CNw#;fMVIptd#q~1VumxGF05`2 zUYvq`0B>U-0E)_|?#d6Em*SX^x80TRH7}&&Kt6C^`lH*7)j+%5p3|0=M6Bt;CWQCg zUfM&@ZAR(qYyHCQ`PQQROBAv0xb=N7N_d}cP>61QABFqY_fbr4eIL5q`aV`W5C!%x zV7qbafu4_`zrCwx5Awm=jl(_MopZ5#@|?T-To8DhvB%+4i`#Q8syP_P7q4sQK9c2Tqxql$fw$5?Edz;#!SyZcid;R5Mt=OH|e0;Zo=a--5| zJBYjT&#ixTS9UAyI}snxWy_KwY9(a_xnBjvp*O)c97KX+UhYxmci*ElAF$#`lhK3r znQ?!?sxI+Res#=xk1{&u-I9Bh6$!Eeb$PDdsx0wy=J{4LO%Si8}hnOBHY``BTwjp<*~G$9ps=? zn<+^#oHmf`?mlB}?|Qg$E9qc<7y5*u^%hz$s<-q^Eg06Hv(_vbq*w`c6BhGRYnDu#)@d9i zS_ic;>$oZ}!jjsvRiD2LVw^EIw`o`$ctkA`tKKG7zHV~5 zzgbfkMPkVi>nG1CZLf-EP4z*U^!1Z(2*rCI6V2K=y=LtdwAeS;tf4auc_B} zzwvjOzq7r-66#Z?zuIeBmSn0G(!FXo`Rdn8R{nxqO(E%c;91bAha6qk1{*6g)tTlIg-*qd$IDlH# zW_yyzy1&5vYqm#O5L6x_K%u9)JC#Zp+HVJn8Tt*mpyQA#EH6e8DvfY^OKqt42Wv<^ zdP3GM{^~tEG6m`E6xA2U50Qe(FAkg4nuAr`5>M|=Gq$k&f~O=Fq@g*068^yiEkZ>k z+3ItutZuJVS+Qst#P>Epb2iI_Fmmb$%&0Y#G*NmH^& z4Gji)uh~{odPJO8H2^CNO-}HHLnkNnmlVLD#$}mryO*>C$1{`=6$tSz1kzf#HeV9^ zV}!-kZi~ydh@|N8bmk(>@)4Lv+#k|y`8h8NSed7z4MLK_-d<=xv3yL;Y>G8YQ}onG z1FHW}Yy-tLKn1t=us>&*7T8VWD~&+8Y1VV!{5mc4I&FfjVWVH zjVYJF+fiE6%v9(*q}Pbzpq6CTkYdSo9hy$olDcU(sML~9l3LQKxX0;&-_epL2DGHe z130NY#U4X9Z5N?aY_8Xss;d^!ms<7yg8x8y#4_3O%U+`Vj~R@ zL!q-OhTb?%;^~H3QW_~*kw8|u$-zwydmRZ=9{VW`?9k>Eq56BezNSHACLc6n(*ZUm zVA!a5RzMINI(oVRyw|+A|L{?1qt|71{5T&&K{0?ls}3M(e}Hd{SVVUy$@oKe4!U#D z9a>EK!$*+&drpHTirx!1G=f|nID(|XVFQf_U7r`x=+D81g)}&9py8nFbBtSX$IwOi z``G6zA&op1DY@zc(6-O12VmYCn70ZL1wH#ll#j_HN(UcNVlZ|?Bg$9Uh%!Wa?JL?! z@74WAmDB=EqLvON9wR@uxr;S+-9727GvI?O3}_$53&LM%Ve?F^^~b?V{t8dW(ouf% zhQME-XrqwePKWPxqbcjQ(uS!h8%DEOj*GwOoC1fl2Qi!-tsIPEgIaYci(~cBG0_ow ztSjoal5RPwJW@pxxyyVEGVfG7PHMGD0X`-Tr?Dl;Y_L%#+He*m_@b*314oGux-y&# zxCazbHs6r+dI2E#qVh1Lsb>wcu%lzT$AE*X##GkMvZ$~=J_p%>>e^2>x*?|-$5<}( z>B>?Gd>0;}l=&DbGg^5If58}kaCDeRFr<%OY^eG7WrW-N7PgWg1rw;xr@oDPXg42e*Rn$-ESAwD>w)1r>$hPYAJQb}D4b~rC!>0&;ETniTCWZy_# z&LJ_fzIka3zh$fEdq<;B`A7J)A8mb28l2Dcjc76R@f9muVq^|eR=$CGGO7e#l&EoLr}Roq6ACoBfC+_Abp)=C&@n1U2GEE-mPYItK(P@!o|Ea>if8PVW+V6<+|vji z9X^fVb7%xlaTWt%bp-#}75@l6puchdbLJ!D754@cT$qnIh*9@h)r~hJiL;X$>k_at7?LqS1goYmjXWTew@*+ZcY$@-E9Mlh8mM1S9eDdN! z)&m*!J_%6no;7O!(|`UVk#|4frOsclo`%g|Ork!A&0nC-2h3lb088{fPu)=O^FUzl zL%j{AA_C_xsI$Q|1obgi>U^k+YGd6F>tLv-AwM*C>MTYZ>tmSTE8K4;`S~X@*2>+E zn8-jAdPCjL7S`>A`zA8NA){ZHgN95ykr4sxAR7F?mE&C1187$gXr=>I1vnnj9bnF* z`9mVZ39ii-i0nO(;Z23jh~%i@M=J+>bTmP7p6K2J9V%G^2BQ@;gW+JDE3}+xCZ&sJ zQlvmdXvOe$M8&G}K1cnkdmMepb-Yul%{IOL_{+0+rN{2@uOzs=%m4mf-%0Q6tdVfh z3?vFG-tnnbV6R**y!3w$O#Dg3MY#Q3ZCJ1&hQ`4+IjDi5I0QB@m;D14QH!@f~nC;Ww{c-GR3XR+2t&~vfudo=&d%=8uV$zSlKF!U^R)cOg3!sYNn zmbjAt^?1l(sVSfzIXR3>BkM=^ttiMkY%?;6#BUnxk z4HG7vD6X~c;KRtR%Ly@j@|Fs^GgsCxA*Yk<>hC)B`)264Ozu~J~ zASAgrek)?HO1$xK29zQ~|Bvriq|p>P?Ow%LU}9aaXdehGB4RihbE!}OHdP0kufZI6 zUdgdZR2Vd8hq_{BdO{xy;m3!%V~U*8b~<)~=uA@sg1yaoyh8<2-ixQ6MXTKx88lvh zo7@J&SgqfukM#-E7S*|j( z)238F;M4JFW~WL8;=f_ID20A|i0axhijC?7pCY7@*+eT(ROjZ`)lBYi0sG4JZ_x~x zO?f`t!S6;hda|CNx(a@M4e>RzQ=+M2+^R8(DENt2MMZ1qiyphNuvPbg7(H3oZazKSpZ>D1#n+0lfV4?K-^fQ`Vxre%a6W$i&QUs zAZ{#DJqpDA^*sX8q`jm6}zcLGPX>$fhB{9yGx zU~g$S53mpQNZz9=@V%&a1KC@FN+|Ftj9$Fi`1{#z#^1k+UeKq4Pb`-uU*iy$QR7G-s`Wx2(K8Z#t%TR$o}5cOV1XUAUwr4N8)op z;xk^tPjFmIf8Kz;iU{FI?oId!Ju?V|Bb=6G3S7?LTnWFC{2eCI8|Ck8(2ygwWcqmw zRrQhcw_U>J{Qch&?!vv$|1}Ah^S4z>2RR=ViyAViOS+1MoTK;cvoGx;?qBeva;c~eu zVyLPol`)YHVw_9#wGvME26UBcz^{1OR-BYos@`-Ozd>18aaJk%`Fu)6>{FUh^ah#$@V?U8TvkmAMa9mrimKxws8t{Kf;$J7pWy>}2O#Eeh zmjRz2gn|%`qAi!(8|mNa?MB4+M*8;C=MQu&n2ZJR;4>fks9qqvK7 zcv_;D%gF?(T*>JihOp#_52d-_Bi?{0SgnMMH+P~RCgF5XPD?MhGnw!g{QuE*hUz#u zE&nMh%=DM@>kf`<>F<%~9k>_zJRsp?Bz%R0S4;S#5>D?>g3sd;PVWu^=P>4y)N!(S z7FWV)e5G}SQ$MA3gj0RjI>JR=ko^eHmH~cGIMr3HBV6R2>_@m53u$rxteweZ<(^bd z{BOa2-3U+OG;|U9OSqV0Bm7SK14noYyHo!x;`fA$GD%RIgs1X*y1Xml{#icAq6one zAGS7=J(*1RO1M1x#8$F!`gBf9mvCYLM;9yI2#4M7Y%f1H>Ce{N(qDl6+Y6fRYY_)x zV^_DqZhLjB``xozX3<^2;)Mm^ec#;X7IuDfaoMPXh0V?LalX+U+GNf=7R>-m=S^cD zyn5Jif4ph_tO6sZB^9N5OabdM_2buLT3oEl6tFH+KYl%?_R3;CO#$mN_2buLT2^e= zV+vT8slbti@}c6$rB+yD=ywb^aGbP#U(=jfEq+S{0k#6}!@=CN&3{SL(nYiGyIVG9 zAZPtOt@q6)GRkrts{#GXjea@NDQ+&1gvZP$q!iRQ^flB6aMN5Y z4vxxSG=3sJBK|!F>3@O-IB?>-i2BsO{QcD+{a>L;SvdL*LXPCqyM|W&X@m0j3KbSO z@%=@8>M#E<2IViDPY@rF_S?p|KNML8FqBD{E}#a?>yXY!XT z5uV~t?;j$(z<7fU__&DjBY-b)qZj}4 zI`Pi|tq3ppl5J-_{nv2$6+#fdYTLhG^YW{W{{bG}@g3nO!Cx=_v3#;Z=qcC;{l)VH z+~~zWoKKvI@YMcLmnOms{83QW}8a=qgt+# z?^VQa%c{6SMQ+@d)q!!UF7(&IZXKA@?{CX$63)hL$##3MbkunIf?90YsMcq0#rAk7 zju!4}iFS9?hkGxPiHG<44zLN*Y1l&RjOEz0z7veO?@z$qzooP}H+I#xlmbp={Vtp+ zykhVfq7_?i)E!E{e*{qP=tl1c4Ro;M`%dpi-it8F({hXFYRHPlI;iMwgyoW2y|Akh zmf`lZJE%wgJx%x9KeTr-5H=G$Z!Zn7`oVH}2bJnK*NU*TL%(e?UKZIYwPX*1*-t2H z=y=Wc3W%_~im?+{+JWU}ftIpB*u!P-ay@#c`$VXx%K^_Z*n95%^Qx;#@HV)=6-&(pjP~{ez>5OiCLqwsm*>oN4bng~)#z5wj?vv~7a8 zdYDFHdvVpXb(JkcaMZCl?}!d~N_JO%`~XbO_%UW#;xtZfvVTYiQJ7#lp`qh3CW|E# zrRFVQ?Y@MKV|G}=qV3tVrQ6W}(-4%PKC(QJ!Lk+3FNHZTADT#kVMYT6HcsQL<(2{B zgxcN#bVA)sAK~YyYr-&=tMdFqIO*#&^K@6aZ1*<9j0LeKRt{g7HxP#H%OzV->c%c* zOX*Z!NY7=QH@y}__ju{7WY11>edV#%!*n|FRGcD;v$N8b)l_8Pz;9)J~e>;0r&c^P})P*a$O4d%=4 zN^H)B#Si6?H$kmzffj_q@(VUaw`{b3Sg*2fez7M4yt(jgV99c$H`V^(C7jp#wORQ| z4?r?gP+z%EX`8QdYh>Kis)vZ*%=TY@W^LJH|In?5Tk?JnWs({daHFWSf2g!Q&A74j zP}+w6Loqpz@~Dl;f2c8O|FHF!y|t?9gP7{b@e-fbv@9JVjkNwi)f!B&r%)8pdh_mv zDx7#GN+qir%1@lwN`!0(7DS~mG+6)Fx2w|vPUI*lS;Q?5q}7DfmJ8i>ArM; zDq}Lsl$J!W`91OQ6+Sn@uykcPyvDHnSwR?;Q|uFGY=uNZv5=1+R(tEsHk@9W2zMi_c= z4r6id4G|TfB}Oy`FZ8?*9ho3jv_yGReliOt^la=4wH^lt4t(3@aCD;{o%C7nOxd1>vOYGzrW zwEd7lI9gtGB1G2(koqZ`NiSbP>fit#AU`M6t!kBPG$p^o{4y7anOth*FiqR#hA`yjxzORe?>Z| z1&I3!3#rrsz4?I%6+qN;~w5+UR|PhI-*NxTN~Pm^rsQ5VYEi0{)O4 zLq7I^F7+XsI{vGsq2NPFIDN93MvgRohFPis^{aN#;L*7QOic})Y%uFTK6Op4vL*jv zh`=H8s`eD~duS+sFO0I98!NB1{)vv@jcsiIii&=C%K~Rd=yv2G(kQ590?Yp2fOUNb zi~u0m_v$;oAI^mRo`_K8P&<0ofa3Si+?N#IUA-$9mtG9|NqX-Yf1n2M-<*BlNA+yE z1H<^15X7lh9qhoe3>oKwkG%mF0-_Ms#RiKF-V36_!86)^mg=&_q5RvfUPYA?&Msgj zP9|kTefg+(s26Da3Zp?-HE8tiX73n>$)up#Fp&Zy>EK~6tmfg>1_#W;h}g+SI!hcO zSW2St;yLF%(;I{#w?{q;cP9yhW94ZIY+Qa&kC&J)MIo~9siv18HvA9ubUP}0l!-my z=f&a2U)%RIde4Jh_#Mt4I%iC$A)C*s<@44ltYpIc*B@?-=U;GqI+%*HcKs~>+5GCg z@3J0ANFdwBQ|i5cWQX6X70CV-i@QTv|4#R(p`Ldfh&N)*f-xNtX%RdyzwT}H?yK{{ zb}OnR-U!*r@+>c?;uWF-paIXJmo*%m-C}bIgAwA2k|l0o5K7$E(;4=>)xkgw190)M z(|_x-&GbLOj1DY9K-MIZRnhW8vhPYQwpznbb{f>ipP%Uq0ETYa>DqphT-Hd4_eYSR zF#0S#NBQqt7NAEv+R%}Yg2>-wP)#eCC_zQTiK(h^+)eV`&E!<7DNKI^)CLEI_AIL- zvgtNzlF%;QZA*6kj;gm4=Fox=KgP-FdD{$4d!4ZVffrD!*08_mV17su^psPnEt%Oe zPE`T46R2TF8;4g)B#`_{w*k$C+RKk!@dM}XIyQaI8q1!G7~!k2h91N*yyq&0QIre< zpaem?a|STQUQJhRtwQb2fe04{E%f%(HXb7FM|;y*OXU4C?_g=01m5YYPr^X}M96^hxvZ|?`t&K9TwB4?%1N(ijEJM6WV_)*n z#x@NzrR`Q#0w-#n2oqYZFKGGFK#M}^@oib=Pk>f+_~_H9Wjf1WrR`JHeqQO+(%p_3 z2o#nUC#nsx4a||25u!Fxto9)=8}ILC^LT0@q|>zn%NrZMqR=&Cp(lE*XwNQl)qE;6 zW3OGW(3FvCNEt*>*rZk3ti+uxt6eYisTK6coy_tUwTxDCw0%#@$__JSbK5UKg}z#8 ze-k%q&N8NMwS2eVh79QWKPoG#g}!`#9i~BDsOtGFvz33DLzRijuRnQzWSA+F$VcL) zw9O94Xr=uwu=BWV`F*Xw?1^Ial+7V3ZEv#&Q3}84JJ9nRAn3RQYIkpxjIgxtxdPJ~ z)Krk`IRIN5_Op0%=-taR4{2)Z*$P;CRtI@6vLN_F-~Z`Hj`C#o;$@3k78c%hAO6o+ zL<`-ps*bHXyRT{Std=Gfo6)qCe~UhO>hEJq))u`zqiN*6-wqvg|6T4Yk&k8mWnJFm zmu!bhelynd_V67OCf_#ies{tTl0I%5Fd*Y!p8lfn;F8Ug&Ohdvhl8r}yw)=-Ga#DZrv1?fIypI>ZQt;X6ydMsX+qiAVPi!&s z2cI34eS6gBGlR2dyecoGWpS{WLa=u>5{nJuaMDE*R<@>_vP`*HVO)sW<|>?6P>bC% z^`?oYDW++rS*9k_9Me400-OxH!sIb|O&z9nrYB6#n4U8|Z`x$qjFUfhn7U27OuJ2o zOviD)-6y6VoKAPabk$@whnb_ziaF7oVoo(@nM=&&=1Oz5d4hSe`401R^DOfm^Fnj0 z`9bpvbGy0I{J8lk^K<5n=9kT{nzxv@nY+z<%=^sy&4Ik zf#rTnvt@~;!?N1)gymVwiw@cpCkEdZJUw`J@Z8`P!K;Ehg4YH=6Z~B8i@~o3Zx8Mc-W|Lz zcz^KW;FH0I@wpS|8dNIwkbB&^tn#LYIZE2=#=vhdvYfZ0K{Ln?kpSZVTNNx-axl=#kLlp%+3g zgD7Pd2N zPuRY&{b7f~j)t8K>kT^_b}1|*TnSGM&j`;9&koNGFA1*+cZN?6pAtSTe0und@VVjl zhkL@G4qqR>F?>___V69yJHz*e9}Pbielol#{9O2#;a9>#BElllA~GYgBJv^%Bg!Ib zBkCg>BPK@N7BMYiM#Q{``y-Y_v`2U&R!2M?@m$1<5t|}*M;wVb710}UF5=6GOA*&1 z;s>M;$QWQBP&uG_K>dK*2h18Ud%&Cl3kS3gcyPdq0jmbI59k=McEA$@o*J-zz>5Q3 z8u0pn?E|_8>>qGsz$XJv4>&vE!hnkdERk`MiIJ(1nUT4XBO_}f$45?%yghPyWK-nA z$Oj|6k)4riBcFW-)x zQL~~JL^Ve(iSk5wqaKf17xhfk=BU@BwnlA>+8uQ&>XWG6s0&e-qOL}nqb<=&bbNGr zbVhVu^vLMy=$hz>(YHmHsp#pr9%ebEsyNik_L88O*0g)wC@RWTD{ZjYH3Gd*Tr%>6N~G0S5fiCG=9F6QZ& zS7WxsY>n9&b1>#`%+Z*$G3R2g#Dpo4O0<%sWGT6dU8z;ZD~-xTWr{LQxkH(w%u`k< z>y&4e=alD_P0D8Fb!D4!P&uR=QF@ef%2nl>Vu@8^(_=GYvtsjND`Tr;YhowI&W&x3 zT^9RbY#%0HijH`^R ziyI#|EpA5K?6|pc3*%PBdEz?bo{oDqZe!f@aWBQ~jN27=Fz%zc({bnGzKpvX7dEsXu1&5_ZcM%{c~0{E$xD)#C$C6uPhOq;bn-LF z&nIt6-kiKOxjT7x^197@RqHnWNJDPSf?aQ<)Y389}LnDXA4^0}HH8gK%;n3=#^+OwnP8_;m=>0>zLst)7 zH}u(|n}%*1+C6mF(A`7#4m~#X)X;N7FAcpm)SMojuB4}?SEkpePe`AfJ}133{lWD1 z^vBbmNPjB*ne>h6FQ>nrzAgPw`pNXu>AmR})BDontf|&CYqmAlI?`HV9dB*4PPWdl z&bBsL=USIoms`EoXRR+;U$t(v?zHZ*p0b{{p0%E{UbXgFqch?&$}*f8^%)a0re)lb zF(acnV|hk<#=49rGM>$NIb(Ci>lxh{yE8t@IF|8AMo-3tj4v~;W>|(r3{!@s4$Byp zH7swKeOTqN3Bx81n>}pKu;yW{!&VGyANI(w$A>*LZ2hq3hHV+Peb~`qCx?A9?Ch{h z!z`H*nUR^76U(MW+xhr!|=Hbj^ znWr+(WnRp@k{M!)v?bY6Y`L~-o6}ZnYqZU<&9Tk1Ewe4Rt+2J*p0+(}d)fB7ZJTYE zZLe*g?IYU}+cDd5+n2UWwyQRCR#;YiR!UZOmOZOFt2S#w*2JvltW{Z^S!=VN$a*Gg zeb!4^uV!t}+LyII>qyqgtV>x}vO3k!Eqg}x zyzB+p&Dl$`S7fitemeV^?B}yz&fc88HM=`|SN6f|Q`zUTEjeL1(K+!ssX6I689DZx z>YSRK`kcu*cjQdZnUymqr!{9)&J#K7bGGGd&*{!NoO2}SXwLDRvpJV?EV&`Mak&|} znYlH&<8!CyHs#LEU6|XN>&bm2cXjU5xzFZ4pZikoj@+HOhjTy5J(b&&dp7rCu6acK zh_n$|BML`M9C6!-86%oT%p0*_MDqyG2=9oF5l@VGX2jMJ+eYjfv2Vn&5vNAWKKf>^ys3NnUkcP2PmOiFvo>&COeow=nO)yw1EQ@}A0jE^lMri+S7g_T`<<>&?5E zcO~yyUPQivf~#T+ z6m%EtEZA3YsNi%#Z$U_5L}6rMTw!)$ZlSZVu5dzOW8vh&+Y1*KwiYfgTvg~P+*tTh z;pW1fh5HK+79K4;R(QJbY~h!MR|?HV(M6d>xkcqgRYkWIO)I*iXim}nMazno7qu5X zUbL?0xuO?~wifLu+Fi7_=wQ)DMaPRiDLPklwdh)r#U5c#v1iz`?IZ1#_F8+LeS&?u zeU^QWeSy8%zQX>v{VDr;`-}Eh?K|ze?T770F&A>l-e->}PApC;PAkqWE-Ri^JiT~! z@x0=N#jV9liXSZQEPkqZeev_fn~FCVZz@7J|(pz$&|()ap^2M!h_0>!@v`_Ki9?>eQ&7 zQI|%U%Pr+$<*DU0<#pxtPly2W91!{^D38BF0b@dc2quIxvui*%4aK|uY9?3bLFUkDf4k^5{E8&mKKz^n%gLMn5uo4*G5~a;;K@sGO9AGMpji;)m2TYnpQQV>i((+t5#KctDde} zU$wF7`KnD-TdKBJ?X22cb+GEAs*_cxs=lo1t1^#?9uqevX-xW<+%aWiYR60*GiA&j zW17ay8*~4d_A%ZuPmFnf%5b>XPd6 z>YD1>>V?(K)veXbsvoRwuYSDxiRx#nU#fn&`t|B<)!o&5s`po4tPU9)F;*EHH#Ti- z=Gfe^g=0&`I>+8VcJ|n&u}j9T8vDrDXUA?GyM64Au{+1^8oOugM`MqUJvsLD*mGn1 z#zxje*Ob>()l}CwYo^uAsA;O1Q?smQc}+*n<29RVcGT>vIaG73rl+R2=0eT2np8)I zBg>KJusdoTwT?Q+bjK{m9LEC3BaX)%&pBRnyz1EE*zP#$IPU0mTyk7-L^vazan3|% zhO@+3=B#qoIHx(Aob#MZoDVwJI$v^bac+0+aPD=UcAj%ybY5|Wj0+o=GA?~w=D6H( zh2v_+O&NFFxI4zp8rM8-`8dzG_Ho{EkB@s|+%w}|AGd4V-f@S<9UFIQ+=X#rwMuPz zZB}h|ZAoo;ZDsAm+S_aA)^^l()~>DHSo>n_%eAl9Zm->4yTA5i?djUy+OxG6YOmBr zxFTIiu1r_1tIAd5s&h?nO?FLjO>;H57P>sH)vjk<8(lBCHo3ODcDVMqK5`v(U2$D? zh1A8>#ntI~ZmXMBx1?@)-HN)^b7J@TL7=1NqVekeP=1@0!RA!`M}_(Gp5KB^0VO8mY)PYKu^|j zG0CtK>O|^PfRsKklB4y+{&3^ea4;UKhFl^U4yBML7WRezVpx2MG?D#9aJh zIYw(Hxh+%Z>k0muWp&VfOlue|g%{{Vb-KK!874L}WC+7FfO0 za~5`Lcz>UN+@_>I-DGZhHYM*uKJp}&Nlj!+OAoI?zUbl4BeWjA+W;Sk$z|ErA#2Y- z`z>%iKD0+l56?5uXNiISHyhwvm_7-RqB>SDaZBG#^yHp1zya&h)3*mbJ`Wq{Ga2*) zrE;l4D=jpkj@JX_|P6SJ^jm>o>BO#Iyb*kN)D7lur?Q1 zi2?tw4D_UxVR~|D8HgS})`0&_2K*l~;D3(+{+IzCZ@~YOfj+dxMNj|#V?h6X1DrlM z>hVc6pr^fbdi1n}MGr4B;Qz6K{s%!n5dVY|ecqD{_qUUxJWL0lfzr+}(IPKo^rBZm zU(cIxsLvd{*}3Jyrc5TsvDC-p#82SDo(s{_PvCaklOv3H3Va5Ea9Tc89>{6=EKuQo ze3o#W_>99(@Tc-aj__Li1pW&G;k5iWt1zQ?;9k%lm2ldIB=A!bPJOSypF%p5Be^pD zvl1@Tvv0+qC4H!m7ku8A=yN6fgaIBz4B$vEjll$;TnW#T@EQrHHdxT#DdFi7ey@aE zC48xb)0!{AN4CKy>rYEJ$&sEi|IHkyi<}N@Ngt=DF{$96Lxl-WOHb_*IpQzN{gnZ| zu%V{q!w!Sh;d2);hSSn}IIfkuS;FOf`9#7;fuD%i6^?89r-U%EEM8R-eF?|4^feN_ zoNnt4=wFxU<#fyB?SYp6TmyWq0sbP#wdpe!+Zo7d`FjoUT^uJqR{TV|9hPvp9DXC= zayqB*22jg~wtbKzoLWV}|5*tiE#ZHb@JI=dj=%#P@saU`2KWX8T;W4xEuRtzcS45H zb2P^(J?STKr-V~g5cmX%&o~L6E8%iFESC7l{8vfzH4>knNw~~MY^kGojg{!B?2#ip z6F;G6C4q2+=i?{v?-2+`coBXAe}F(Z!sYVN&Cvek?N1yhdbz&1r1nVFx-nqxEJ)3BwXebFX3{0T@o&rLkdeyn?9s7Il})t z^t?Ft<0ISnll7#wk(^epoIY~CI~cV}FZZ)<377lXDF*lt4e+@JxLmGe{;Le=e`bLH zTEcC(7x~*I;nfm;P{L*UQxY!I(>wq3Vt3I10Jgd;o;KY=S!`J^-#c!~j@VSv+n zB01tO^P$COQA8K0!J=;pkaoRR4 z@DC+=YP$q3kFVtN{F5LM!4dy*`~>}a3AakPJkA*|;rk`}krGbpG072sS`sGshx2g` z;W9nFZ;~TiZdZRI;WqdQJ{u*xM8e;caGB405-!XAvxLk1uSvMfKY|p5ql?TZS;A#L zWfCrz|H%?Ar{{DDm-&u)iu! z{e^Jn`3=!W2@ux`UXKWmmheRq?tgnVnSLeVqVJ$!XCypU;`5D!$4Ph&3527I|E(Dh zSYyd-WvUhng|R;vNo0#KXWTQZxuvBE_AZ;2!fKstq0UFr&u31PX3ZuE0lNogEQUoz z`ZK4A_ywTqGb2!M8z+A6))}?8PKC9`B}6K2>u$M4KzGl5z{Knm3jgMoS&Lif0Y)4l zVG*vd@+s+!#ic&I=aQGO1d1@tO)W6w$$~F#zIX0D><-kx$dB0ibmGsX6YL_A7uo*= zWwR_zwY7MkYC5rb!L0f7k)E?#7A_W4vZ+8}L{y~{sV}HiOQP5FVG-#$9L~pQPE%#O@V+MUcwpB2)}|TsAf>-Zkp*+-&u?0cqHxz-e~#!8&c3&4_B^#L z%HH5_;3Fic-l8bp9l%01`02~idlok_y(v%GeeEsNCfzzwy@x#H^Nb}67vIezEp93C z#Jw;gOC-&$clmH)*#ujnfRXGA?`C%(CScC&yG>lukCEUDnN?Aim+As&@G()2w#=gI zvIXoKP!UBOd5xtd(gh7OW{`!_88aw5bqIi}W!!Iz5;E)sV!Dc&ivO0Q{*!lc0es$| zmmN5928H_Mw?QJFyKzHJ8GmgSu*u=O3%udokq@Nt(DlO0Z9WB(+faJG1%b6Z2|rLs zfBm*(GH_4v6#QsROfCuyt)6`G{xVJ_^ZnJzr*Vc}_zgUSn2#3>wBcVzcs>2kaQ($R zC+SaVtku5i$kudXLn~Uk>3UU)zS~B&rfc`l(O;@ZxzX0_(;9NqR|v z6X8id-D~9sAu!3OcMI7$xcodB#68iH6W9O14c#Ld0^A}V{?P!mfBAXKAiU48z9zvn zkETBGC;1|ued6e43~s%8@%<%Qa^h;``LCk>zw3E;Kce1=a036k8or+`t_?iA)0<(Xw_*eD5J;=My5CQgHwiK}a=(~UaBRu0IUU$#Kv8I*`ZZiS<`IvPZCeYgr!(UfmZ-c(ah>gQg;`+o# zk@$5T3&Y9E!O!;Kp&nZ#v1_+8ixjBu2)nt%b>=**C%C)67~{PVabzpuEyEkkF!m%# zXS-MFORfmQ_J*rwi7GsQQS4_U4yr+OynoaUOeUdq0+%9i#K9J$Py?k-iBPJ68t+@~?$2`6SRT5*$h)M#QWDv&FEU>W#bVju&9^mr zuQhrvHNrHOYE{Z}QmM25HDceJEQdzI5}WxelmmYWVR>{C)u_Is4x4AAY}j-8?s?|# z?e6Xw67gP3fkCL3w4t28qw45=tNXKLmekIOKd^{5djH<&{kGA2j`m3#=GvW%om#e7 zDiEWD>!(4E6ow@`g^9hPL_Z5vMUMHzMO|MU#YTi-NlxOzSzN!XSUoHS^@$5s#o2UA ze=AIMsHwqX<~gB6>}<(|l>_sq4A54!mWZAd2)SpC{V3{dADfA-_gph8t8d1vTW^HD zt2cy!s!57Fozt0Fik+rOE7eB1HUAwp3ue|>ZK1wts{?>~31I@=|IoFrG`B}{r*R(^%j*PDD{sU@FPdx35nNowgQtL^xbj5dTSvlxR z_?k)nftvFc7vr^&k%A=Ps<&qHF;Hm7WfbU-1~?4|^yv2*;2RC_-x%Pl4DhMI<#U%= zxd28(HF@nKD|^6N8IC@ZJ64u)&tDB#{!*TZxq2F3k)wR4_zAp-KsdrFtiWk~1v$bg ztibCCgd?2hq6I#fKsYLA^b>eCfpA10kDtKByA$E`?jvyV?Ui^?>;x|Ao|eyppdm-} zR4N2LSmAk?K|G)qb;zdErr`iC& z-vAeDgtUB47|_QOp^pBXoaGC(Dli1WoM>Sv8Zu60fE?je2Sq-n5(q~)i4wSYCnSvC z-34BWdvaPnR)(s$cuygS>K!?vr#4NvU+^2k7F^c?nr)^DYRnyr z^!X=EC4YwW7iCH04PB@5f>gxomGIL%vUPNX@mEbjW^(xM0&jS6_JIp=cfIhU-4y|} zeFwcEYIzdvWnKuE@_^Jqk3ed{WfN+v8>N_Vl6_T=WT6siE zPQKDTk0$e@KVt5SM)UmJvszUQ64pV%n)9Uxj)@!$9PpfPaS@ZJLl@EU&+APDuGc;|UR7 zl>fg0)8-uod4pGI2lphsY5bxMUsy7#$gWNbvA^Fnhh#4*D=TJ{H$I1SIh{08or7H* zu=-;*O>%i*X#8F8LGRz(WH>R(1_RaJ?lVL(ZKuZmVMU$y0~hSGMZw6W_mJEBrPKQj zSyNlY$lH%9ZEqr&^5`M_g;j9RRdZ_u&F!py3jo=^%jv8Q>zo$@8(Q^ey02L}Yx_DU zgwoTyo|Bg^9q9~?^mM_bl*?xAberGkL#RV1@HE6d`+ZRtp4%sX%kUa>Ck1ywg#-lU~XPR}=(q>95``&ssms!W7gMp!Gx34RzY<4@(OaSRH?6 z;!Gm(@uHjl<)5walB+-j_}R9s=#hy4$~MnE+dro*&1W zT9aV2)4R9c`*)}J8uE1F%lV8(D!44VP;=IW6?rX>xMOGrN>s6sO4?^=Dv z@mZbdJ>=ch*@`wpsMZ?a*(zzOw0R(ks(tLXpJQOHq`Ro_mBJ3A3sZEeRsGnlG~|Y< zR*`^Io0kx_vn2&K_k=lVCb7M1*^Ztcz)vq;)W!rP!TkVwGC_?=Wv0b$v|OZ!p$<;( z5ypXZxCj$-lKl3rrLf6KX937IDL?2(G^jt(iy%U6i0Z?1I5nOUR~{?HI~Qv8tOTK6 z%wD62WPpMtC$-Zs?m+gWb;^@e-dMTRlBh+IdFisysXqbrOB7|@z|c=B&#OMKKO$SgGlv?shygfqjpT(i`2La-N zK8f=s!<^uzw6!BN9nkXZJp}v26{!oM54=kHMiGu)v?t9SgC~t?sIM&iGYUO z`=3nM|7Gt>;G-zg_HzkAfeDI=tH1z36GcfN98uJaCNQH3hoIttz(6>bGhqU#$YF@< z7=w7T-nyRax}Nb|H3;DnP%c3ta%)0}f*f-5f1c{9nVL=)$FBSBe*e$Y*X6ZV6gWCk9ct1Y|Ht@5~^xOD` zNuqo26cLY1p>OfH9+_J`9_RF4BI>q!gq1wj#Whv{!p$%AE} zi1Eef!TDo`4|XSY>Xe$6(jmQ#+dptz?qK(r(eC`T)Q+j0+Yd@jb`Kf}b4K_0-28F) zws)ttyCmh3&hDgPfxy^tm$q#SuHFqlVPEQ})Y0!{%DXAUXbxv=e(k?Bv-QZ3sojazb4(`xy zaJwO$a&wbW4I-$ylju9Hi;A9@5Pfd_y74nnDa6l{G_=>|JoBxXXZGSWP2$t>2szAU zXEq!gF_%3e#xR#n8B--MF${)`evmiT9WI0*UMN3BWc;obx;k z%>Qn22K#7J{v-W67+g>E6yJ{-s4E7=pECPMOf*$o6B}m3SjI^b)5}iUM{GQM0((_r z7jx)``Vbx?;5S0*54ttn5ff4Ar^Y%}x(8%Pe~fSy_&ezetZ!+NQ<0kaXBY(fXskrM z(7F`g;XLJDl*ARCnnQkH;;A!ts~ZXteBB< z!q2V^0*MtXqH0IQMyZ+6$hcVeoV5op>X~iQ9!%@_t8u?h*XpgMOxV%DhaZSe{AUP0 z;rxhp58Ap0K9?KtGY$9(!9RSzR6gH>jMKII+d}5Q5`0dFS6&s=vpqr3t1D~mEon|c z6Fgn3fA!?l5pu)zulkMVf}XQjR#5a`;Zk3BF8X3%=Lhc)KJ|1JZcu7>=tHSqBp_}pONGs8fiVc^g2 zf2aI|jUyg!z?%SP;NXp%<({kI?2Q$DYmE=*Efs#LhNo!wSPiG%M$td5;d*|!w1QCeq z_g#(A?6~S-?6`@Z^Pdc)XFFALd9N9Wv+q%O8bJi&dOcqz(AxEUm4(OgBpK5Kk9j5{pk65U!%WJ%jZH3*Xb)X zT&F*v;W|A(%NZzFFK-ix+soTr!}anu6kIGmdV6kklDO%)Gx1N-_; zG+ghuIZw!7FYi==TIJIF?dLU|?+7LLV~LXwUfm&lp~P9w9W|W$PBIX`6#t43$Nvn( z+u>i~>idT{%c$^v8oiEBFyMMS)af~0#6bT1W>EaMXgK>Eg*TM#f%JNRdx?g#Z&dVp z|E#ySK9ZgX{ww-hG@LRNo-1);`txfSB4R`}KJ_MFYr*{)XV6uAR%=#e>19A3C zDomFr#7|Qoj!$WLeGTV$o`LiY#F_Q8Se_GC&oZGc8t#(kJnYkO_9rT2%63RTs&8Rj zUkz7daN^3hBk9i|Aj4FRzOe#voTcI6uZ+lbz3SUqBpa1GYS7r*qtr4+t~wk!+&?HV zF)HhZp8Ye255;0!9}Gyifc831_e>g_jPLKi9gB2BQ0NLqCtT#oh;Ztz!$%JsNvM{U ziG6`?B!O6)iyv$8Ze*OugdnKJSE0;6PUf+f@#@QQBUj#rm)Dxsx7J$LilwFP{G)5H zV72lwBsVZwE*D~eN>ROog$ZK(~Wg5-HVNO)by@4QH z46AthdQ*jjX}}~@R9hkZqs7{CmcMO_T%oJ8hA&dkE38pCZPwkRCGh3+A__y;U-dA>lO?ZKjh<_G^-?{d^ zL8!*Z@c^@hVqX+!SXLKlz*0ke2xd~ z@*e``RQ~6reEnSx(pv4W1ejC#-*S-8@r7OfI}q+9zf8&(ItvPx!G8bWKw>BP3#9xH zQ9lf9e;lva<+}~_zk?48!tu&~uA%;?axjjdw||a*?DF$~Ih8*_c4+z-i2Us39|_E< z{IeY7lb2mS=W(3mr<|btb%y$X%RxRNyZobu`tK>_AFuy8V5t8E4)XbJYnRV~vQzoT zO8LjT{|61_-{2sh-(hz7Lk;q0O8H6;fTSYW??0E)IoOFz(y1f;MyPY0^m+XwNQ4gP z%jWV`nSP%wfhxaZ`3&Nn>Mw~m3!$e>&-!bLf0bT6*SDbla0_aM=j2D(hq50b8>jXU zo6B}`A?^v;Tz2fxIZY6{Pr~L>`|!#TIn6*`qM^(W9(3JU=4#X}1^;gRC%78btt5rF za1ORMUw=!LAeTSArFF{Z82~H6Tz=uxpBEe%CZI`IO}eR$`0m zesg%Og|N*LHW`JX4%U_iSNVcm6`dWNZ}FELVeJ8Xlt2#{5e1rK^Kfi5>`VWNmS%ft znG&-9Dmbh9qMYEKYL_rsu}of&?(9@>gvA?dSn4PGf@@?h=c)|T*hB2Y9bWW^e1`Mq zE!>_YwhzaK)Zf5<7IhlRAo4q^R^db$)(O)mbzv32+P{_&+yxqDIU*x4^SReD zdpZv_0JA$~)sj`5o01j1#gjfa)75=LcCa!lxD^d2^RfYHfkAQyXUpWdz))CN=_Wou0~CQ#<;?iYM!wnyh+T6_d>1h%{Q+#M7?UHN6qacLM`1a{6l+-yClj41!dJ;RXqqJeJt3Hr;3>{Z@U-umz!nOZM;6|hHvwThe?%Ns;^H_S6inBbID+UW zMLevVaO{crB;XT8Y*bV)9)ZKANA9h1PfUz2v?Yw#ljcQ9`&5|rD()NOynZ<59w+M` zFVb$8d_Lk!+LEdB$!s_v!i?xjN82q=!vW+aUS&AmPM)=S+1512406g7lNy5<%k4aB zkKX_wTAOWE_mA`9#MQML8&c;?oMRRSITR7+{~K(DenkFNSwyDg&q5rX@csszx;uTH zuxOW{y%+zwjS1T(1NA@p`eD(|fqf)!IUvTlXumj8*XNWUz>fHJ2K;=H&+u%$Xse*5 zaj_Hsb_Sd}Pu-SBJUifXxq*JAAwRS=&~0i&dj~C_NvHh$*?|9Ozz-SlQ_=pN__OAn z@cD*v{bIncG4L_jw)|wEFEHTplS_P0uuUl)k$Mi}fay4|8Q3-PU(u`KI^&sE;jM7a zVCTbrfWeMu2-Lz`<6QCSCULvm?i!BInh?F}*UA5U4Id@xiPIiO@mHU2#91c_*UP2j zEkVOz&rga4i*m8-ijUG?k$)2nS91l#*(WOci*e3CoU#<&fgl2LT}P_(p)5tuGBS{! zPpiUn2qF;Ib^C(^YT@Lm=arAmkA}0)R(J~y*Yk6khU@w98t}my?#8*|f0u^q z_3(;@>vG@Ja9!>K4cBdFHfuQNpp@L*8m^bODV|>j)~9Y`(nZ7ddcIl1b^1FrT&I6h z!&^Xx%8&T8lXBe}{+)sTCkO>fw@;gk>|wa^qN3!)$qFVoQFvo9Swk>b>3*2$gE>NPDm^pvD{MHHhzuHNC(t8Cj|t>n z(yjaT7sCtopb<9Jw#7H({~=OLsJ5K^9t#W^)twtFhsL!W7xQz``j{+mRJ}?E8o!Z) z2-!Zl$6u^G*AHb>kRYV8p=v>PXCdS!oDtKXAx38K$06`J*TdboI9B>3ofzl#u^-=8 zcAiW!Q$Ad3+`xA$%c-7S_K6JV;NMC9SP?6~Z{;};cKPg!o#dBE`DZBD{~Zxd^7lE& zXa8uI?}HpC`7@>br<7oMw3nYYNKW$m@@0ZB(>e%WOinsi+Wa}mSMOW({UzDdy8m$o z`IS<>(mC?}6S9~8j|Tb5Pl)>7GRe<1$bU{&)I^z(@?8${TjKd<`RzKN;qqmfBGan_ zX&KaUq&&CN{aL1eR#1n3R62E>j1zSpro#M+y+e_acG~By^tE(8D*aSj0#*M?)>DXg zYClb6|M#jSWc~43SLs#%@dwl&{%VB}<=|nB>|B`*J`(oy(D`&owUjs~r1R<2u5;&; z*7>N9QOM80KYv5MT0Pf$`t*hlz>BGK=u}+O52H9(^Y5BYH@G>$ue@CEk0sJjlweVE zHs<#`XBYo1aTeI9Nz&}#;KX=1g>X&h?dBS2D2sXh1`f#RnUr{b7RKN&fc@exsw zxdqKUUcpBLR#;-X74z^3)D&d6rf+0cxGGubA3BMQfhX-*N$$_h}ZL4)JLqtw-$d3Jw~mJ7j?6dAg8hv zMVH#5+*L_HkSTOKlN&Qb$;{B}R)z|CRX3ZqpUuH_|7~a-j6a|8B{Dvh_XBP!0*P&) zu4t3GTsY3e0{d(fmz7_M|0qULSI`VByoLWroJz3Z0;a{%XSX30Q)~xecJcJY=WwL* zf;y4#ecgt;5Es%sxu$cv(^^U{Zimn_1iw}3MOMg^tD8v{FAxv4G*)$HMpqWUXWgYE ztdNg>LjUmb&v-aoJ(f*7!W;L|Pk3Zp-4}U2MUJA<7l?*%m)8^AiPp(A_sn8vE-laC zYV8DHu=418iLZh-@*qS*j0!#osY*gO;7w6iA}7^<5jTU4m@T_1fJPw@UJO+ih!##H zSoBcPbR0Rsxt`!sc;OJP3ZU(it(2AC6A1u(#%@fA`~-I)Dz#>&P;bb!@gRWi1AZd1 zgBt}=QQ4Gca3FEXXLx`@&qU#zXsB)GS2uxsmBvUeA|(f@>~zp2f`JI({Nj%F%?vJK zXMyGSi-lq_K=s-r-od9tU59E-szLe0;c=2{-EonjU%*#`6(ba+VIn-i;ftQ33)agA zs0MiaL08gd+2Ncb6dwJTYdYN#c!O==>lY7*()K~C=$d{HVxS*`KMh$!uIb|h1Vs_o z+-I}xQ_(6P43Vf8DbO;#meLb791+d=SrG&Ap@bB64kFNsgvu_Igb{olS}Am8;5O8- zXogbPt38`vAqoj(o&%QlbuS+j>oFu#_ByF$cx>9BL*jGxY?;+FmBdZ`hz-ZpeF2Dw>bTst55S6?H;PdikVVvrELBnUWmbmiz@X2nDaDErg1#vmiz> z$SVVsbeoN;cgSjj#9T#pKm%!YUzVc?bx*}p*;jii>61a+Lb!PV`_$#C;_1qwPhvvg z6LB+-C~1E~gC?byuN1V!ZP~${N?(r579*MtU_uI1*YpB*>F64sWATgQ5=-KWa2AC+ zL&qYXhfG(GN~9AaE{jWaJ@6&ssaQOky7yx~St5oWT2Q4u6{To6e*kl#p;ajF(45MSnZHCi~UPf*%hU)AZTTt|@poc-KwS2Y)w;d5CT`{(O;|G~Mi?9a7!^?`owzgh(w(%IQ{ zume!`^YG8`FmF$7J!59WsnHQi%V%O5-Wz>u!4rr~TV z)83785?9x)B>pXM-M@k;KjLZxAAYS`!L3ek{CDb1Irp2O$x^5NaN>ktZopR?aDLM| z@o8Ydxt`LAp05Na9ORDp9}IkY8|b;-%ZY!ofzLGt`mYWAhZ%6{Wt`-)B{<;$1Ae_B zKj#>54z8W}w>9vuZ=mN_l@p)04D^$cpGMjWGxbed0(xCnE}m!bz90X(u3YpCOD zab1UU4&qh0Xs63SdL3V_;jIy;=+9u^jX-+p0u!#Ulc@GA{?wgDe#z^ON3pxo2( zulTDuMdEzFDBO#42I39yukf1)A`owde}#`Gh(H`4a3TCYf(Uj#YL1Dx-cBwR)E2$o zPP!TJJ_dZC0Uv3=Z#Urg81N4?T(3`#`50I(T_?3&pcc;gBUNvwY3)QIH*2{5JgW6o%#W`7o~6<2_49#->oyDvHC(6H z*9YtMcBc0H>d#$k4cFV-Wg4#QMsLt?z6Vr&>OSjRY50>Gy`Il<4cGItRm0sHpY0N7 zvH7p$?$U6cDqP>cxrK(G&WcCip(XwmJuwD0qwuH<<4l4GlvzidSwGX|IdS&$DlC>K z#N!pnBQ$hM_ZnJlX)Q)gdDX4pkf4 ziv5F~KWDJg6nPlqw?1f2V53@YNedDBX0%d$IDGVYs$c{C+i{oK+ADnJ-nXVbYN=HP z3%KmFZBz?s1M_oPkNLw#snx#6C{n~1nx^7)u7C(?MRKfdYK3IzwrMyTcTCmGsio{Ox-I8#oOiTHg=B_3GCWHK$ zlBwIq+%BK*eH)38_?9H>EF&qO{hz)3TY<6sw%Z)_mLzl|P7ikZc}U3g_BQmjOt0!$ z@lf*B^+=?5%6}za>If=5^UwFQO0V#zq%tc2om@rCoE)l@X5R|8#(uZ~Ade05__@pyY=a!&DCnIOn2Dw}+P zxA+WCi5C;1vEy2%?)B^~i**%EfxIf3Mx>Tm`i|S?r0%VH0YFx8wx@98q11)&3B1?U z9Mi&G7I{nJuJqR1;S0tsf{Xb@@m|;8=3nUxPQqF7q(uq1+=t6doD~NaHNoYtBDM*3 zkh~I$>o#}`XUBQc7Z$whOJ3_uUdt>5(mjP6VtunW#HKDBa*3`0?E6xxrHTMl60qjh(Kl zPo%8+2S<<5n_D%YO0& z1FJ9x?8SN-*CStK1rK9w7ST&~^aagE7bS;<46mHR-pygPo@;AhOHA+AeZ8{=_SjsGuswH8<7mPg}f z_mx9j)u0%+3n$}N0jdVo*p=PEX-c0}}6Q+-hqH)&yLJ=JVwvAy+&`==_qbby(iu;jEG&R~9V~ zuJE|L-_1T)C$nTkG#kQH(lxZ z^?Og@4_87(VdS6N2k*tz|M?C4f^SyWs-33=M zbrWy&*J!?I6=1oG4;5DYU0ZSg=}Pa+~?&aFTS>_HoSCG{Iq*_4o7Qh%whaP~e=;apfyAjiwRD}KlfZp3X}fV(0}P@UbP z!dnlW+Bry#he1%|9v{Ku6EkJ8NCTaauvh4u2~AL3HdJ|Tp>D(OAye{Q-r1XCQ{^f> z)TyVqTS71^AuD=GW^k0%6|h<0jz_H3E50iV8&<4F-nj|MlyM(b&!e6R8pO@s!p(|a} zd~$BxCmx`|``GNa@B#Xg572HtGQaWxs>1(lUd@dk;&JWT!Jjhxtk}pO#_k{Ds=(t^ z{R58MaIEwW+6z8&yYF&M$=pT0<<@Cs;XFJ|vkw&%@r5Yd`DbK<&}E`Nh7#5&zW!Bw+s>SPvAj`t-0?3$5_n4I+80jk9#I>JFrvZipul{v+Y z6Me;3P}^C5HTt<|*Nn>%_iIJr<||n*Y{yG{vun_fm$1L|U|sN_*?1N_;vvp<^(bQ> zn17+KBrXAsY(5$Tda*BDg>?LTZAsi0XqBr)t7Mb=1!cf3MQ>ZUG#c-W=s;Ua**mZX92yac>o zWb)!Z^YDDFvL!{q=7GSw0;FQD#n0Y)FiM#8MZCAf8{-Ww@ZmM|an%uI&U#lw zuJL|S;cAU{MAuTqejfEJQdX_P1?mV}N{BacMb$z8-Vf!hz?AG3Wo(FZ*apAk*(x*v zG)bI&i?fPMSzAp~_lEoQnY&zL2JhT~=CqxStvVjp=k3JhE?(|NOI%Tje-P~22=pM1 zs@-ixyE}k(cZB_S;xGK2^h*M&EzX<1qu>?Dz4WYaqkZXRuA-r6WtqV;t1feb^}p~G zcf~jb_6=FEfQT3N8LF7UHP%Zyw7?XF)Izv@!lt50a7D=o^s6r4HmoC`eHg8C2wLZM z*Npv0!d8nh5gI6jTP6&mqdiMCP+#%czT%GFLC~AG`AO_LG=o!@5e;;a51ab>>Min= zWG8adCGVj9unMzUs5PW;^+3bi7e{L_m}`tojL%O61zPWX^m$3B^rco4UF0f!4&1w2 z?e-^v*=)DP0PzMFoAJ<)2Mwpq0&ihCOnkl{GBdm6wrKP?z7@!1<{mVLGPbh~*)6`# zu2<;|#{B}SoM5>x{otgPnc}qCg#wEfQ++NnoVr&g54QQms`hTE^`W8hP?ONRu^*aN zb&c;6)u6yV(br-Q8_?`fqgoznRO@7;ibGM#nqXKa_KsnDT3~BW3r?~eSmWM6-&}g^L*`YuX_^+mvt3JN=g{z18sEuJcYq z>rguHj%c`1S2axVSZjl0XT-$h@f3@Nv6R>y^O3p$S!ewB!9T+enJ%a>!|DWxdC#MQO@)D-uP^ql8sP&m*3ow|05KebJ@gVSCH8$c$8 z*EaG|xYl*0qWu8tkNVMdrJ^kZzgp0T<%;_ajCSz)dSlUsf%8^6$*pg|4;t_y1OBi9 z=UlnImw{T>^@hNy6|jP6V>oSsj5_6$?{_EMZ6z1;7-!>L&Glbyz^Sid;JgQGPtmJ( zL!5FHo`G`);yQm-^TgQ}6}@Vg#Mw6~ycNzFh;u$g;TIA_;3LL=g{KlkAjWAFg;`RDp%2I8F0QS|8q5$yD;FCebxpQBa=d;Yl|LE%iJ_y;t( zdj5kNuIK+T4cG6>T@;8w-g-UjI$*uL+$({B^g16mK?JfpMVwhbedRfEeSZ284cB!- z3p6}lp7YRH$|WCtT5o`c>wOjH?A5xxNCieXN)R4z zx#-T?ML4ucC#U`aPIcd$dW#a@d>=G1DtOHO97 z97IjXoj8_GN^zeDR zX-};cL`AJ(V@J4M-goONJeRDl*_KJ7w>idT@W&yrJ?p`w6UdN6>iwb8*!xs|#@Tt2 zHeM2@$b`%%%c1MVdMYuPB&`%ki|C4V*|oa865(?!thpZ$rw z{7Jx^J=o=|b#U#J0C~)iFYII+&b%_HBkjC+uH-O|VYp2HtaTasRq52R8ZqiT zM1+%g4zwJCowgwW{MFLwsPwPe5~%Vk)?A0^RDWJse={W^?;jzRUOm6;ANa1ahqvTV zt*?w^Hk|H%+xDGOQ%^#tlh!e<^U1D5OOpCo<}rgm_)S2qVUGG3^V7PoFYmPN9B5)v ztN6C~qKe5A)QXtZm1O4&Zuh0v6r83e1bo4er?RZny<&k{QzoaSJzwx#auQ#X2HnPw zn9Yb2JVfNLU{-iAK9Ev)Fs|ToOx0pyufUqns`@+P=4XlepPwZjLys`yuUf<$M35E= zHm)fy1$!~8l2AQNEop$-NzAFN*pNP_plwOo)1ZfjN3EYiRsv%~NyYSUalBlOQ+=VJ z!whpM+ks32tp|(CL`K0Pj?++>RoouHr`C`abcmS#&ejsL-jEnb_jKaE& zxI}NsSg6S``SYt>c;Ov{Y09{z@Xv=83O$*+WJHs!l3YxkS7w)Vnd8F_tW20)GB&}Q zgYgx2$7Cf6gQ*|O|DG>c7c)u;VwY>u`wHhl^K>ZM6P!B*J0Gvdv_6(lWTN)!s|~KX zD1=qwElx|!R9TUf+c-;KI9HoGs$#KJh@7K?3q>rJEIbe&a0gcu9*C1ZB{6GMivbEv zUyijSFi~81&^4u*MZm=#RSs01;Cj#OpPPH4*L#*7^$l8`U6QzpdGbYXx9+Vsh-EOM zRbv4O*Jw`ef|X2S$NP5_hh57E)4!0X5ln%tvw_tYlI-Cg0%DFtlK-x})pf z3eY$tDCr_nXGeoK?`UIjDfJOn88k+`dA^c1SP6v6#u_6nO02V@|3*(Dm(+{40e3D1q+#QE$fob7~xI6n&%zLg*XaowJuzCjr5^!k0#>rw=fUY|?bq~Ur!^Lb|=AKfmU{R{(fou1Y^40ikm4cF^u zqK51Fc~HZ3dbi*no|}}HLg&JBe#*$tauM~2__c86Nrms^3F%K!Adi?$687H5vf!38 zYamtT+nm43%kMv7O#a|;VsdTN*zg4muEQ6~fLM?*CIV0<#SwPjkVD5%1TYZs zaKKVOd>+V?5*ug|1IdcOJ7|Y8Btp9OIq8Q2m`eFk394@KZZzcC;pr6xoNy6T*zO| zLio4XDN6w_KCbB(qd|quxQ5Jxg9{i5ug?r^GZCoaj1gyXl3df-Q{gh&RkRdh3C5$w zFzXZc$w8)T@ZiWfJbCBUEpSc$2jWnZ(&r0j9ALwj6Wk#(#l%m7KusD6zaf~Vv9iqA zyBI6xDnbeF!<>S+u(gbV$fCfNP23pdzKV-1aO-GGWx4>cl#^Y9ohglnxF?FRls(6G(OvQ508@XiF( zl$cO2fEltlk!1+3J-UoFc8`@xCJ9h9=eSZN;F_K**>d75J7_s(DcpC|b$>P@U@TwI zT+qX;Fd7El*SU()VEI*j1zJLCMO7L`_#h4p!LxpmRsKlxO167}tER+0raIY)bhVu{ z4?w6ps#h^S=jBBY5A6fg>Ph`O@fg22t9 z8e}!u`j?__@x)h47gCYU{3;Z-Y9VeB?w7bhD$k=i z`+uizplnpVn&aKa!E$Yz!OVtZBi!wrZkXR>A7Ko0P}NRzoPR@#Xzi=IvE?-=Mg z*X6`#mx0e>1OBZ6r{39#{}BWIy9S*08T#C?Xp_L&80eod$bHU0&-Ub$&$|rx76bng z27HMDf5?DuG05e2qfCWt^h5&sG=Ac%k$viMgx=fW9?V`LMezlR_K`LxErqJN4Y0`c?l zuke=%A`sW-MBfpph3j*ub2MBp*9r~S>A%UvdIJ;>@-$}#kXgFVO4CJrl+|P%>j_dZFI=z|;u+!6_r4t|B2aH~Cr5ZhLY*hX$ zG+b{d^d+YFH`VBqHC)#T=)RZuj4S@bG1OOvCl| z`JBXAZ+iRW-pmZd^||nE8m^c3bTUOCyhU+>se(f^wkcfXJcdf*EJNd8hjT+9XQh2q*dC=R*5e-k&=ucs%fMDle zU&D3&XGz@7{~`@PAN*8)GBjLohqr0C-VR4=xZWR5&~QEflO=A?f02gk`F~pD!*`a- z=ifD4zmM}YT<>RAYq(CoO~dv3UZ0&H0_#mLZ!-st&m3LGgHI$=X9`!>(AYE z1OAwX>-D@^!*%|9G+gIjhc6EVmP_Yzk%sHfb&iJX`~w=U^MAmAziz-k)^NR@%$B&l zoh;CBy`8Mr_~`j}v#x?Co*t=%5Ms=-dfWmX=S`f&mv^diebpX;mMB zK|;M3c7q`eG+3i@M+c}4lNS0ogE_o^cz|Ad>#!N znL7~L#r$01)=3?imikWSVW58;^AWlXY9|MO;WMcVEg0@nAh&%a6 z0$q3sz!>2x={MW-W+lcgY=8C;&xZlwh#c2gSGDyu?GZr|`IsuQsEp8A!GtGbn76_Nz0&) z0ePMx(C|-Rnf}=@B+gVib!>(cb*_{CsxqpBIJeVYYo%AJrV#Z$nSNLZu}*s+Ls04?)*sWV^a}qD>DedQ!vLv6)qUsi6=hEk9azT{cR18Ow~&r$X@aOz=l1O^ z>J#7NeU>Z>^O(UO{3fC%H`l2yYuj|*v$tG5zVJxrUWcFf>*&XKf4Q=4*~t7;y8NSN z*!CM64jHm1xxA>!S9c~qdHvnKes2$dWA}`u?|;*0;Crj*_gl6$IH2jRz8PDJKkB(@ z&8iI><~{Vy8Q#k}ub8&&vB3JkH{)|#Kb4*O!ZW9JIa=_if%yX}%O5y!>b~|*eN*!8 z8y}te=1(Fk_+gt??OLzPPxg0Mc4YJTuX0*F;d|KC|%Gw|}(Y?X+oM z?-;s$(tR=OzpHHd#3$FkKlSQ;Uq5%*%)VzP-!WjzwXemmW|yCzR^?+`QSC)9-?*dKJkz|jHSu%qJTGqX zQ^~!T#*XX$r#FANV{6>Z3kD3F_-@-h6$jhI9@xIT;DS3|x$Ul1ZzYzt%If2tuCAG)6Xr@9|4-#KmY$gA&ge>(oGsRvtK`rhM z?yfjB(BRc=w>`f7;oJ9L|KY=@wSDZhCdrk5J+SKFDSsI9?xklvarUDFzItou2Q|af z<12d}j$8Yhcgm6msj=6-etN4_mp?yrLcxZIr`7!Vx%a+I9`~1?14=J{xK7Ma{1p{Ko}XjEfn+W^nv{ z-_|+McISwnmjB`W<(rp2J+SpP8y>m8+3NQ7D(?ULp4aDZ+4ypi>+yH*s$Zwyjd|Pd zJN4&^zHvndw-5gKy!EfQxc=4lcl3;FaCZAQE}r|>`);0*e`dld2WB-nfBBhP|M=*( zNxnzZo1ESE(Y;?@^!>u?vd8S`S6=$S3w5`@P}=gm#~Vpxk8*18s|dbjR~W#6Fs zcc=UF=hQlB3p?!2d7$j&ncsbI^q$%49w?c$?Y)OzyZNnE7d%+!>+`&0TZ~_K?uT!# z-n4XV^1$XbKi<;op64%X^}?K)&-Hlhoj><08_~VnO_P#dUi4Y>#)oEHvVX?+aTQ;D zQc;<`^1?+`g{{|~cINwO!yfrVmrc9>*yMsae?I?~k3UU#BJbYSKm6&H)4SyVAv(Ur z@9pD1*gi7QQ25W_)IJh37LRJS|B)ZQ2?S2N<>Jpz|7n2t${`P25jQNZ%jngWQ#!YM z?3YWnFT7#xt*g%X%iD|3sowE<^ZPFUYtKF7*Oq@!yz2QnNt>Vi<) zEpEJKqxbX4qaIlN*FK($-l@Ct+VY$G9{nJzsq3?Q7k8X|$7`*2RnGrx%EBLSdgi>- zW~OGmT6%Z=SzX(Xy=~RrBZ1LNSKqxmwrT#dGq<(dvHhWI=S43nyy^4h_jiik{o$Ca z-dufAuU_u<*S22#L$}6LD$f06<-p{;I=aHlPKJE1J<>Q+bEd0Lf`2*hhZsqLr$4*-Q-hnwCADSNX z`}6UCxc?l0=YszXPS3~s6*aTgO|GrmnwuU*?tj&bV;Y%M)LC zcTbm#>Rh_+mYUf1!)~wqQ`rksu6_Ezx}w6i_bmAG+7T(+Mh-qSE^YpfR)2W)#_BWb zPKtdo?vj=*zrAnzq0c@%y!qnXr#F9j)&s33F5G!h;JsF9!}e^s`Kdv#Upgf5#Ssth z9pAd9+oAhDf2DaKYQ@tf@3&iU*~h6Ljr)4;XKU_X-|n^dCr#+QW$TgC$2|0xz)g)l z`@Mho{r&lWc6>Dz{R00P*gtT7S`YZd41M=9UQTs}NbK=?A44L0{C~TRL#SZ36Y9R5 zY!8w|8Pyk7_#2x#yXYvTAr0eC2%OpqE2wXB>I9>;*`TR1ezL&BGdyJy?<#Qlp-+qz zjgW++zVFafiTe?!`$AGLgAWAGS!fyLgcSF6i5A)=iE9%TPPP-Iimf#hWu=Xc@LD4I z33_VHYKK^%?RCPnd}`6LdOjoY@O{x>sRzl(|H1Re;qb*!Unfe_&ute*e^T?pIL2xoc}m zn6dd|3dZ(tmy*`m6qlBg-q947+M&HuTu5REQ^Jm^X=$do)RcBkaUrH+*9E6ibWTk- z#1r67i#_I^&ie-*!uNN>**)_;Q`JQ~t};P}^2H_Wa*t$bXp}G$}bMze>Kko@U7ZFo*ne^rq4) zzHVSn`ClXDD|#i*eocP`OmDkQQ5#M$|Fl`QRgn-i)gk}1?Njnq{vQJ7l>dDvn18PS zbjrUPoGLjYQ<{8rU2Vw!EQkDalyA@fkHDPr-$V|M6}^&YzaC&{KW>@+c=^A@(0<-> z$UkkBlzhdP?*!&QMP*PPJ4^Y;)2Z`$V0wF4?euW~B0Fsk02HBCSfkR*hRJkJ?H@Yr z&X%^?(o`Q$r=8X=MUtGjPP>xEwlZXhV+OuWupbQeGwJP}KZiOjZ_!@Y^o59oCv@+J z%q{=D>GSg2R5FQJ)bbimuq(VbIA3j4?hV56kF_$dsu;1@KLPtu%-}45x408raz|q= z3Crzjo`DrozF*;>Xa!*IB@sRORxDvzx&s?@9K@QOHQDuccxP9-;a-fXgKGqN73-);3;VSEZs1&YRyOZ(7qvMNe zTr+NA;^KyIpM_$>AA9l0svTG>2d7Kf%DEO|gPB!3e6Ba=W(TXi$#X!A$~YW7Wtqig z^0~g^Is)rb85L*;S5w{<)zwW>E2H3ji%#}bqhj+o-LC8(a@Xt;%9D$s4H z{swuHL6pCDPs>-CxZx~1R`Mzja#*#CRd?|4MZa3$iQ4N|#l&2_7ic^GYVr24C`1K# zxF`L3Sr-MPQ_D!`dZa9Pbwc$3?tqh8mQ{3=QldOApM8HA?EVqJMjvN*quXG6hKy*j zb$WhP_4!CMv4y8(0#~W3))#0{cy)ZVw>b8iV4Ho_vG7SpFKeM}@-APG=ByQtC66o| z)=IK)GQZd-NMv8Ee-l{MUywwU_59jp1;R%HwbE}6q*qPA1@=Mm7N6!VPUY&u#@_Uw z#<{%7sLo_bTzx&Z@qweVz$3(sr8gX96pmtmz? zs4hGBg7d6>pY$5W3b|PCpljnxdPPG>b}(&0HC9twcK}aRO|a6E`d_~6D>RQ{_m7{1 z%2G33eD6gGANFvH?=BSH?PJ!3+}aC&DPCE*dwHzAM$G0{KIUsD=U5;Tyx6ZWtm99J zm#1M8{p+7HBkqCNdt!$1%5C}9htK@1hAA;mMM6yB$KoZ+a8FE(UzEXe zxgS%gE}~fWCTw;HL-}J**FQwcSjW%`>7C}3No<~Dwa>s?tYd|jirQk#bFbPSZk+hAO)+r%%+C#F|IK=4ARdo@g@a`JU;ikfG(r}&6 z`x<_hMo*i22IfvAvGaMr7m%Wr80@~Mk|g|{S#K%8^I3hzu1fw-QZz5=yy zelse1x5PPK)yJ&a8ZL*c0-2@Zl%c{Fc|soHrwn~78yo_0_4zCS7$qxvbKCSaVk|3c zIy@RYe0(RMG2L_xyGYO;YNHcaNji%MQt+p~jx2&}z z)2K|z2~M$5E|SxjT-bI;QY+6@HfrU=ibdAELXm;P+_b2`f9>aD+!y`6DsHbzbzR z*h+vo$){TthP~Dy^lO)YFJheJFL030=fN)jXJC%<Rhe{Oe(YWXkud9!Sfej=i*V5g~unIx`*Pxk{(-@fKFg?w&4a z7&2@LRQ|2lsHi-gIF&y|KEL|?=lfHoZz36V0Dsxk6iadJD<9}28OdxowV$@_JEx>u z(-Y$Ncykm`UY)dm^L<*Q&k(uGKs&Jco=VCIF3Ex4C~O57{KiKI&Fo3e#CeRCnta{@+`KswK67U2S&>@s0p~6!d8a+eZe&GRYmrIZJo+dX=cuE=v*O!d&0qnTVO1qP(+tq7Y#ct! z5v58x)$-{A$1Qyl#|kiYA?okZ*(LRT*tT`4t7rleRNa6dk*&i0@Wj?;T#oM?$^RVV1U>uF|{V_ z_)F}$hq9*bm2R*^S=sDlu_m@DILo?UvZRG`qTwxRaW%I^6cI9^$S-FDZWU8Rb3(b* z{oD6Ut(bOz{g&(gcR&zamEn579FI>xEvgBe?k%baG|fuI ztZPj{Qq>dS6N<(z!$lPZo5RnEp zLk9a?kQbPm3);>1UuaI|D(-NY;%V49vti^OghvcMfCh9%@?rRAc!@tcFS&oBHNzA0 zsJ49~=4jB2LCyz)p_)H>S}Py+d8T=$c_uyrm8-m+bFP{p~pFF4+8$S1$mobux`;D8*KYA)n94aZ{`!bceJi3a=` z4X13ypLVJY#B_YQKrQTSoGbcYG+dwK;oKerdFb@*G+d|8)^MGEh=y~%O3A%f!>MXh z_)8kD&neh(KI#4;u&~*zt=kSm1g-)m$d&^?aK0&kqF#((CzuQJ}T)Wg5=829^IGG+fWW zTjFdka=JwzBQ>0|Rd`jNkp2_};<#JG>u5MdtH&lUNY4W)mNQMquA zVVi~&B+|ZBBLcq&hakuD^AB3(;2)=I;`Equ`i{+GmZcYtZdu*0zN-JAfg_LSd4Hl_ zp5cN6=3Ix59-o^(PI%pbcMUq{0P8`+;1t9vw9JX_qCYez3(C+$EY6J{HxM^;kl28e zd7$+$5Kj2g`-a7&mOZh4fBwnyBJ`Vjdr@o#@Zm;yRQ9XZRqZ*afrubUL|egi2L7Fb z-Ub=ZzV}$^)woCTvcHr0Oxk&pb{IP$1m$y##bG)5tTM1qVBp+_qkLH@s(%s0__53X z7MPR#9rdjg>N%r)K4*6Me+K3xe}|N>#&;IC+VUSkgp>SP(k`q_CZv4!7k2rnz?|f7 zkWAG$QnIO4{x*nklHZp%7C|pR@0DGC02t+`;9n2l$xeymT|JPNK^+%r=ORM>+-Yx+ z5?ARIEp^TKt2JjjRi^ja5~%#E^qgIDD!*FXF+dWs{&`DOde#0)kY2vxC8c#xzL=hq zk<5nE{llE;N%`yV)GocFHN|@3c3tAdDsz`1ju{v$L`PZPwNuNcZN%QDQ>X3cuPbx* zt~qj!WS6Vif!^19`gmY4;U?=|yp!f)4Tap)c+4mZS#!)zERhuyIi(f+^eamSY7P~(nWh{INQ>~b6qCn0X`?ERD1 zA$t^8D#Vpq;z})XrIxr-OI)cCS89nXwZxTL;!1Cd%PAfa|9`aH3I9jS-Q@pdxl3+w zAN|r*bSB2WqWrVxZqAKa6I*_G+=?{++k2A6eT_p+(zs`d@N_JiDm9t5=a*=;pjeF%X|Fo^{m23UGwk9s5X=gz+Up{1U(pW=A(4S&A#lx-JRTX?k%HJ5x))m+Pis^(f9R5h1)P}N*(Nq5q9 z?caGMX-aedM*Mb*7Ka`&;&5ZEIP{Mz-!~x}8xdr4djdL@PvHDF_7E5eH5>GDN#2sd zi7C70gkKuknRtJk{QF6~y*7wUdWg8&+7GEJS-mN|5o72GJY0saZ6ySC9u>ISZWC@wFH)00!uA{rIx@_OJM2k^>RvXiD&<|=kV|S z8{5PGvHp!C*ZFfd_lw!UH`+?;jm87sXsfI@+Beo4ZS{%2(bgqZh*yk%<2tuGTjj10 z?;8KcCGLt2sA;^>%H0*0^Q?T`N_1rF+$%TwH?DH8+~%LQ#JzH-e_FYFHzC{6;H3_8U#H!fjTpaH?40RI$RTV)Z}zMq8JBP}N*Zb+)S2K~-~!2UX3r zJ}7F=zw>14`uJ}&K{50c@qQaxM;yk~6^9A&;xMJ&3BL3~?>GNId}&!P=uK#FzxesP z-&=AIEw#({wm|%TEkDutp|(MsTQ50_GU9X1>BSbtX8PY<;%>eq%KvV; zyZI_Kx+6(r&iB7_IC=0~aXuv4|IVJ|!Hcbn82>vp$%9u~7qR|#wk8k$&bo;6zq2lR z@D}Uh6#qM`E*!kwx~SuS;c!dEt*-xtJuMZtc>fDEEfu$V{uj2k1h;8u;g#NL^D^); z?M>g|D!K(9nWE0?ir*g5;&5Y(IP}K=5rdDRapEw>x+~qRyVAqDD>qtqrGLF$bNDdX zgZPNWSFGvCZ+ZsP(TX+ya^8XSQM|p~x?j(Egfe1s>d3f0p$llv!#~44oae}Dm{1tw zY1rhR*sB`4?~j9Ky5tn-glE*bs$u5`>c;l1^HtW;tR-2Cv*u;Z$!ZwS^tUoGLd6NB zf5VoZW1^=->ZquZs_^pKbcl7FC1F`b(U)Cx)qE*)K@kjU$7o z6C62GBYl~i3le1oc7?=o5P|dg3~C;SN8SV83x<#7332{kMi8OghO0ULuMGIN27I#t zuQA|f$SPC$!8T$dG&A7I20YDxUunRVpL@I9;RgDE0iR;P?=#>>ZMdrEdh))i{3!ek z1K!ktUtqvf4ftgSJj;OhFyJ>C@FzIYilEA++S^MuT$T4t1OAZ#pJTw681P*-T(!3& z2E3k}yI1*F^ob0rwg3J_fwM0so@`UvI-zJy#jpB)DLpaHKVbvX8R*vNpV z81Tyscvl17%Yff%z?a!@RnHX$e5(Qf*?{ji;IZ;Os_I9{ZD7F9HsCD`_(cZ%uQptb zW!&Pau=+g?E7bJ>8?N5x&)IM_E|6O^3>{r?$=LicV{`KZw`;oQS{pc6i*Z8A-!bFH zjl|vv1MlcRaQws$sqKaj88xtf?#SUohx5@Eq?@Ox9zC*E9u$-(TC12@2p}XwZ=_J;Bq^5N2X!)=>aouIo1U7POIyiGlDf}h&F!9~Zju^Gd@J)XIz}AE$BM(`IDbC%mZykA_d4Qm zLtUw`q}p;Il5wgN$vD-CWSr_mG8{ZehJz2uaOhQ+(>>H;?pl?^Y0zCuk~sglt2~MG zpSwOyiai?b?_HWi4QKB+lBnVA4OPl=yJ{2JEVXi5YUQ@n%5ABY+fpmHrB-fBt=vN2 z`Abbwsg>JOE4QUqZcDA)mRh+jwQ^h9tL|^91ZB)%tXvpIP>p#c*8dkMHTU2E73X#wpzz!r>)#ARrL`wyCJ|P7>|B*3l}bC8 zBuS;x&hjKnspQZ5G)bCMn@b4u$`+elB%$s zOWH_P*v|5cr7A4%(@UfgNM31MX#^5B`1luEji;+wxGbPTSN9&PO#GywWak#NAG-%$EIGBxe&MqDc!;xXI8yNtzkzueJ=?kNg z0kj#J`CEJ+h_8e-;&+4itrWjI#P2?#c#BY~IoXdi!zV>pr4~Lr)(h<_)XjN9VHH`-txkPe62kq!qB(&6AkIvjer{JozRpL4w*6`ymxOT_0~?;`Oz z*Bb___?)vDtXiLQ9$~5aGxJnx<+s$zZ>g2vQY*iuR(?yZ{FYkzEw%DnYUQ`o%5SNa z-%=~TrB;4Rt^Af+`7Q0`Qr0l7oUCDff7w}feBqY~-iYdD!Z+gYFT4NWUv|rdxzM22 zFo2yq`z~0y&YfL=5#Zd}qc{XyW(@(CSwq0Lts&ss))4URe|-p;_mZ-d&3jr|809^x zhJbk`Y6zHDq=taUw5Tm_jUixD3<1x?5HPibL%`G`4gsHsZEd;#dDzx2^*;~WS_}bS z3XjR2*2ZL!L%>JFL?s$gZ{tXcsJV-Oz~BJOotv!>~-{ul5j7 z$C<@SAUhcG;>Mj;>>xO zb297KjVF%*_-9C`4a0GGG(5F759;<_Bm;yvCnb{=74dsAHexf8lD1s~=yU)<$)N2R zaTP=z;G&Pj-BK4W$_1>o&4xwUKBU-ir5nH0fM*);?gqTC0rwm5kp_Ic0spHFS2h%- z2K*}nzSe;6HsD7M_&GLP7?qzy1AdJGzuth4G2nL?@P`ffGY0&913ue;yKOcps{LGO zz|#!)6$adEz^^mlw;J#v27Igmzr%n}H{df2_$&kdf&o8S8=}*t4x2pz|J8Hd)P}43 za)AL)HQ<*S@GJw~!+_spzy}%d$8ETJj$Sa}|1jY54fsX_zTJS=k+vGDo>hJt8SqX9 z{3-)}s{tQsz^5AUVgvpc1O9gd-atBTQRP+b=WGMs!hm07z&jZ5D-F2MfcG}w{S5d} z1DxJ*MN^P;I|v_ zH*C0ijy^Qt%MJKC1OBT4kKsT~t4}5OJOh4#0nahueGPcN0l&+DKW4z6H{c%`@VN%O zmGw0qYFDcLTx`HQ8E}sQzt(_XZ@~K-@Zko0oB_Yffd9#WKWM<8G~h28@DC067Y6)~ zavZOoYm-f=)mo#XXuHNhdfKO{as8_V5frYz5B@cqP-m-8yNzf2W7>E!_C#zvLH8Tl zcyg_a-M*3aGxmJ`Mn%129YVjXOFbOV#&fVT29$~1dSaaOadWa!yqC_t5T29cJ$^Ru zp4n{-O*Wn{+T@ZKgFXMNIrTnq z8_yIbZuyt3MI*J6DAzw>J4&@_SVj3CwIu!hHsMwnOnhtIrvIEh>hHJd zByQ7x&Z_nI+jPRWN!rHVwBNz^h;D5G-7!rIKebE?;bn=Yh48XO)54d8Y2mV`h0mpB zkGko^BKA>XS{VDZFfELINthPKTKVFWXi2MAFV2U`~-w39Ni~NmXinzkx=%u8U-}xIoowO3hgj>U!WM%gEA2v%g>dBWu z&AiA16T+d z`yc)m7LH%QVO9Jb-NMn6uvRy6^rWo)|H00YWq_&aHevO+R=0Y5=|bsAEAQ!xq)}$r z64Ie<|C82{Lj4_5jh~3ZJ3Q>w&O-i24E`T?LSe0(i}2jI#!4T5i}T~yPzr^(od(Byn}u7l?ZWZi9{(<7DGK{jWhq+w(?Xewf=HQ));0oH#-cV$)<|<# zIFD84uF5SRIqBxEusIJC!AqY|z>w&epBAbdcxF{OYJXa&a)3ycqt>T|Dh6nDn^%2h zlqv*BR3ReGV#7rMi7Em~{#~CId5y8my=#CLv z=#CLv=#CLvXpRx5LenG6W&OXExomdu8^5t0gkwnfhh+JOoT__4Im-Pz5BwGi0a&8o@JUr~*!hXUI?moB_{}jukLaRY12>#fNl{)5PJ%`r^>P zfjA6pC=O#>qA_-}T4)ceh2Chj(Eeu}!wmR;gAK5-?>mnD?q$cZ0shko*b(1a|JXLb zL!Fe6;wwG!=by0wc1vBZl93OVx(%?haqJ`UsZ!@G$_4C0DozoYMgA+BqB%BP*@P@H z;HwSzMgv}L!1oyNqXxX5R2r-Nt9+hez?&NIel}d$0u3|ZcN_2$1OAEuf5(6?HsGrb z_)Y_U$bj2zzg2ndw%-cB#$elgy#XI>z;8F;4;t{N4ETEn{Br|tx3yO7cE5}&KLG>%WCMP$0e{GVKV`sQHsJFO_%Z`tVZgT<@ShF%egl4~ z%|=)CWB+cOV8cy;L{9vu>pV7fIn-%*V}OQ{BASgaRysomjO>U;AsZDy8*w+ zfR8ialMVPQ2K*fZzSw}THsCu9_(21HhRt?Y)qgVs-qC=24EW17T(!5i4EVr|WVuEHA|@MZ?wZab~`_zd*D4R}8TKGcBc8Spy| z_!%}EUDb~@v*9ZLNd~-~0qR<2?-D_FrjEo zt6m2?w&ALnAlOh}GmyX;dInL!#}!R@gvS*KLO^VVL<5#{$FaGsx7UAPKYq9EZEv6a ze)rZ|+j?gp;U#E*pp=M45KV|kR7m23VV;NQ;x|49b;|H=UWeFk_# z2Kb8^;D5>hKb!%6ECakN13ZfdR;OtvFV6tKDg*qw4Ddh(_>>Ir=^5aEt;ePAxa?eg z+TC&LPgQbdY)U^}cf9+b;nP0$v_9>8dp17p!23_|X)nK0De8Y~eYtHdAN01(x-;g-%dlw*=IfS zb^xM=o#R&R@fxf4otjYXv6|2$Z{heEPw0`Y0i*>drVXhNjyt~HyY}zFktBfD$JbPr z)>x0c;py(}`YGF_<4621ewJ-pu>gWa$=nWoo-q2Gybpvj9#BjT>1-CEYx5S6r$^dR_ z${W^HKE|l6==c0F{Nwq?AEE5D513bHM<4gcP%!Q2kNhztui<3V_WIeY@4lm^;aC$+ zHe6jDs)5^IGefs-z&?aH(QtM3-7)M&c#NT0Ee*SxIvE<((9i^htge2*S0B8wDaPPK z0a0LmaCLRCyy2H8Ce@JleH$9qRDY!$8}gjkQIFKve&}KGi9IU3p*~)5;(!W+$-O5I zsc=hue8!2R3=i?w$HOPyQ(#|xy!6C}Dva1}Jh4f{k10rb$mt3`$Ht?LK1%)96zV6e zzPoILh}LkbsWyN)=KA>6Cy?lqO_6f_goGb!y1j-kkn$r<_iSJgNk7;$C&u6?sN?iC{USxii*qW7EVyLr=9tgMW#j;ffRUz;AI=Q+@D?6AvI* z(ex^V3&Hx{rXvi_0`D13Z!=hgv_s*1??cj?PRVABy+B!S6^3Pax43D#e*>6Zi{ICL5cUfR0gzzE z4^f!l6-~PsoCPM-7^J#eDHni>rkVa2ik9ejV!4I$0wLNGmkMe`(ABfxze*`)DJjaS z?YaIIR!J$5YpN;J)hFf&>ML3qn^xcb^%@i@oVmf?7rg84z$R~~wQK!o z(LAWrkNbTp@T8w@l3TIs<3pD>UJA`MZ*BPT^4*t0UCl4nPdw%6{FbVR2sVGKe&Wyp zyR+*jUNN9En_AvfKXKfEX1E+kt}Jfa+t7pBiQBg*pB3TWkJEW%=uCZNCWsz578CZ14MeK>0`GZ;+|=zX@cACfQ+ z-x2D7B#asPzEB`fOPkOJU3%g-R2frD#cru*a_fT^p1Aj^`XKs({ib-&^Tmv3_~PDf zNMj1Q$IfaA#oLjULr3!z`Wq2>$+EkU+~fqY3S$ z%VAZb;SloZQAns}E>p{h(ShZWPP z>h>h*Qi_iD9{8d7+tA9I%738I0WBrknpaejqs*IyGEw*>_HFY~1DbZ|99ey0#ZL*I z(dy=i6md%Y0_y92zFU!N6x8`FsZs+d`d+jOjl#CTD7{R?frgHhVL)mbE$4a z;)|PKZup1gd*vAoNxY)@HNJWy(Wad8979-I7PQ)ESuRbqEE6vr@CF(gmI<^s#}KS& zdWAYW@*f#3nz6|>^~t#Le9Hzy06gCrQ&RL)qt}csZ-NHyZGH<4=stvIG#`fsUP@>n z+}s5XyqwTLX)|pes!i#EZ7+jVgEX^;PkCYqm9Rz8Dq&lq#bPruakZ$VwCQ7(;D-NH zIiQ0t8nWQA(q{;S=Lf~UXh5hM)?~GGfR@t}?A_*F_v}ej_m5#$x7v|ajo2f2KlTW2 z!5+b_*dw?Ddjxk|QD25*r4z?HCtLMoNPJHE+V3#l5f$zC+P4Gq(f)PyH`xjFmYxiI zOOJ<~7irpCwQcwvPciR74g=r2b^|J&w(T2wDuZI$_lQ{?+5o_Mz{rM!$KSv|SnWH0 z3<0p)b-WV+uxvPve!g1RHmt6sG2?7t6t!=}LXmqtY`$hNq8xv?X#4zd(VlQobGYaY zTJ(F+JF0#XRNo*K?fZt`pt@Sle#`soNi}xXwvcnc_Wt^g^)?!pTr`e%w7JcER zCk~0)dMYQO?_SZglRf@XQ63p~Q-k}^dYmBtCHW25=v@(kpqLEBb~sAhyQoYKxD@WH zhFwkQW*EVm$|u;9GYM!q$e-;8x&n-?SX%OuTHSc1wQ8A+SYxx1x0pGfz!ixxV$ry(qzt&Y|02c*N`atD z<_jkK=v|0uQk|=Om_6VWoG7Z)FmeH%2i3uX3H3FybduendX`Qy>5w8SN+FND zgt(&bLRZ{F#1)f6#1(yu#c@(au%_}?G&Wdh6@Qjh;mVk1lNw{73~$< zX-Vj{k3P5c*Jo>AedhMnXF(r*T2lKHx?hmUe(L^LG)&gJbPd)h^2%uO{~?h>n2_;#sOOp*j9VQirPo}f}=KC(s7Ic zK3TLXLN{^_4wad9_R-S7LXULI2HY^kAy(A)6IRqeB&?`kYAcEwpcVCFZADQ7eXJ;G zz_p?%kI1I2C?y+OT302U#Ly~17gG-_iYk%87{&omiEGXM-<1Of78Fy75)D%dx1<#% zGm@Xca&moQ#l9(u*%9>ak*VwL$Q^Z|cnjt(U%xc$>;P658@R7w-6%c0Dq*yzX|vQQd49p zl46hqfPS$`Q87}K+b2cSREjL5Xc|&56y2rr=q@Cw97*!3Bwd9hUC<{< z&ugipx0 zJo0UJ@F4n}O5T@{yz}}bZxxcqb39$|q7YZBD03l%rGz+NLGl>w7gZ$rh<2KaHb+5_ zoadpokqWnfLfoXHEQAnuDIqRakYWl^tb_=#)F>e?R1k|&j8S~1L5c-R3a^6PMJcXQ zah5}hrAmtP6l4M8{ep^RDdJtF;>}hNJT)S_e1a<@ND6YJMEj4@(-y^)D4$a>mLy8^ zC5iiguteF;*EguYpQ^u&>hBr+r5|FVeT6x2^*$_d#1G|I(Hky$My3+EB;dU);K9p5 zR&=GW{?Lr;VhtZw54NKJ&V{<(Z7bdYZF;83F=`!fLe60et0&x|8soGUJ9^2dZXb~&%TCJE9)Ch_8e?DxpHU2sp^^<$kcGGr=j84 z$|gLo-@xZ1J-Zr?tb7H}bum7>bf>DHYT>g%FO$QIlk_r2T#=;bRB^+Ni1$Xs3;J?C zk3;<95dYOZM;fk1yjS!bYq$dOUD|W9;nJ0FG+fwos^P+wZ#N8Gd7@$9%8!|ZueMmx zr)v=Tvs7insme(h_Hq&G6c?dRaS`fNvr5g$W|fL#%}V-{?HC3(E6Gn)4kDSa;Yj;Y zk_JdxPEtt-NF@Ov6~PZGQW5%(&5tquhJEdA4ZmrAVgthm+YdGTviaLF1#fToaq|ya z6uhP3`^}FDPvZYW^Ap0C_|fKX3-5jH?G5Xie?Zv@);k?}`9 z;DfhhQ*Dbc-a0Tt33K~*wu_|8^v`z?SJuY|;h*cb<`0kZjFibgarquAkn)eeJ{R%K zAMwo}>C7MN(V2dEz@Zu@Pn|(tG2)X4FYPMj$@=PTo~%`QSr-o(oLdJ0ZooU&f5YMT z10_Q}!P)`A$Fe6po--jjaKaOVCVXS?q@jbd@50vhoVqlC~B8L)Z{3+n%T{O{M{i-|XB=%=zr3=p|AIPG7$Z!u;8 zlkuiruLB_av1=a$i3hMBXn2e|!zF3Q|Np{|_!}-FG%5dM2ov6-Gr~>lb`AGv{%+cq zyKwyTlDxq`_dO(^8l7pM=Sy6V>SwBfKju9zpWGEJONaSauEWG7+)c-Z6u2wzzoo$4 z^leLlyXkl(1zxVx_viWcxW|`|$$W5m|0BzVsHkwv*s|phEaTzlV?0UFvWmH5mQ*fV zoC?SBDFbF$pW8x>NbH0n|aMw zXYviIxwJ2XK;OrV`(4JQ)$}BMfO0{{GR1#htfRb$mMRnBv6OfTjy$Nax?eX|okTu?bz@ifav)mC8hCM(4-^}Vp9w)-YyePF|>FunDDJh@m@6H zv4nWrlz7l%GqNl^{0*&23v(BdJMy)rLc^N~x1E`OpY6=`BfmC>kk?s^xIiZyEA0Yf zq*|EQT%Ew7jOZ*HT3uM@m+TNY2BeKjU4Kfb>ljK+cz9=0T}VD=Vnf4UBFJ_Y`7u#Z zmrJeEv*D2q858V;$LY&e?O zPKnK7%Zj%x278O!wcVvso1uDbC1-eSNY) zA^>F~2g;cP3#3RLOKQi?YPE(Ru*DO_rYFjDdZNtqV<0>inHE{(FR&w3&{^bRe=!e&M{gypqx__EIVy6Etd&FFSxjkZ$e}O%s%D>be@vwiD z_1W#MZ^GQN9VlX3NyM%HYNhjSIGDFRiIzj}SL?P9Y<9NR&;EVqHp|&uKl}a8JMyfe zWA(E?>bx(1p6xB}gh$=`o&W4(bHm3*zWP;x`}ilmU0EovTIAkFgf+zy?vVSb`a>Ue zerP!dpvU*a;1Lt>*7q%hcR>K$EeD=DNOvxAe}GhY-j~<}v$=lu=FUm^0(ouTJhEsZ z-hDm+sd(E3sX!pd1*b!J6}r5XFdq@^v0@k4D-kq^ghGm%{B1^$Y!q3yi+phj?-Ar} zBKJWFzbtPL>gM4|KYJ!dFjWcrmdMdY?o*YltwQ!Lah{+OCC)BE`+#UqB*g6&%(!qX z7PPGb*_D)amxY$VRcf<{vRMRuLooMi1yhl4DK#e>3Ubld{>wVWEZ|Z^RMR3AD8af#)O$=NrD!|&7E2bMWp;kgUyf2_J3sO-V9`TT_PAoX zSs>BR3qgnmN%{fY*H8;+X(CVhYe;`~t&?t;W};#GK89%L(lCXwEkOE)X*n7uE4tRd zP2@N$Ck)PgrL~`!swLZPm_AHZI_s%wvK9H9RxA}Pgn?l^1V+_s?Fu0w;zn#Y59tM|{GuX`FSC?ARpD{ZLd4soOymj){ z3;EkO@%B7#^}OxkZ3}NN@)pN!>9(m7OjjVhYrl!1!93f$2Ihh)H4T|CyCl$Yw`|3)97C zcS4&Sk>o4*ZgZrP7$bzU4wwU$#26u*b=VxYB*qBgthdeKOJa-=&N^w1Vqhl^QqlG# z^j@9YyWP9)CzvUP@K~im8t%k^pbV>m^L@5cSztR4!tAXswj#RlM1CQK=WJUR87H<_ACz#Vy@fpJBMw%yQQAMTvz6Sx>|O9~{6 z?(J~GYBTJ$c6r+|-*z@jsMp#W$EMM}ZTv{d9AgHgWc`;aU-)$5qfX8UvRN@kEW=NM`M$52Z-!dd0^Dxb7y zy^A@nbLnONCq@Zp*UO}Ffpq5|lKoGqvt3Vd+!D>%#vWR_=^ZdhmNdFE9hP${ed|0O z>a`-5weEya=iXm;V(O>uPUcWTR9(NU$VILBm{dygbk%&eHTFBGtY@oM#_|#eXr;^x zXOQhYQ3I)L=i8i=vz;H*$lpJ6n#y*5RU>~-b8^ylo~yy%x#maz{$DNT&}`9@OIW#{ z=RF?d!Zl_TFebeZL(+K|kuJf2bS1{47{qzumV{f0KTqyHxfjYkAopolUpXw_PSdo8Iv2peab13ZE&?S|sc_HtwJNkD^rG<(% zwOcBcDUv?jlI6V5xeuhIZ`Z_bsSr)HxfDnJ!h^rjD(Y0pPV?;v^uvYI+o|%*79)Yy=rP;uiI1}?)Yje^>VRuqOt?h19iWJgxR)8K_r*UO=iFWT9I z?GfnpN1)dqfnI+Edi@dT^+%xBA5mR=25I_cP7PG0OgS1Fv?>R~(#ie5XjLxG#agg7 zEYaA&20{J2SIz0hDBFKci_MBI&P~icXSUjkP-4y@gH-#VOsuVOI7Vt43q3lfr^L_- z4cAsyXgDUoXkvwiOYvS(5E`zHtI+UzZ3#qXj-u+#uej%JA+EAH(-0hj;S=0I1>JlH~AiWjUcTyjz3eojAe}^5>1K z!QmySsT$vVqJidqqNZw-{k{?6xLPhMn?G1QeSR?a#CHJ0qI2@SK-Zt}y%>Yp8c%Ro z9$YVm<-_@6m=Eq3!wTSlF{}_S7{iLcF?jN@#;oj|^M-hGQ`|7fXD)uc{)z&gna_ZZ z{%kzt^9wS;HJ9ecnfYX2H>f`&@;N~!xT?-9&lIL>Vpe)SH;^9JyS$xQo&lTtvyr@6 ztNFY~KDhGmdrHGz6NrNSLc@M-z+xIke;Hn+ZPMW*2CP+w3j|B~+rTv=& z=m3_idKd>3fA>vQ48`C|<)*ZWPmY4f{q65?{xHvwVt59ob<+%ys=olneGz?s(6 z>oZ6TeNbX_D!}EYtpZ`f11!t9q%7k9QTzxm|1_aGFY%wH`MCQfN|^)vPxukPMMo}W z2(aTCUZ>-A^?Zkh<4-QBO9+kD&#bSUh|1B=i?n>H@YULvCl!A2a7CC3U#`=W3is)F z2xm2NuLU~b!d*RWOo6-l=uUyV`UvQ<zg1H9q#>3wn3Qxfhze+dD%&bcuDcWa-QRT@aUjAexXyg0wbYZ-p2G7;|X z$HTCBrQ-6L^jo$@-7Xk3-w;xcAPIq1k<5c=@gFapQmujCOpB9*O z)UiwNrvKjoONjyy7<`w?pJ#!lchi|l51*mpFDZ8+!%s*7()tV)6^&7E&)#P!-=}2Z zJs`n=XBf0LBY0=o^xH9^whbLx*x5;Y7fwBx)v1DC4WgvMfY7HGL=hsJ)@;AT6}VL~BV zF!p&a4m6M|Xj&RJHZIL+62r277HC-YJR3CD7K2+_!DukJI8026I@8k7ns;eVlNcs@r?fO|-&~s0NXbQ!vp}P#o`IG&Mm9b!4yDXBo*_Y68X8N*ydq_C5R~RgU@}0wt)_0`4(=N#Gi|4dSjgf-yCfD2<^Jtx*oNh zw%{{~DoAfRd@in7SuQ#N;F6V1Thu6)I`!~w#_8o{f zjHw-E13brJhG^`$8oYd2r}=PCaAxq{;C;cedpF~yr>}icfPx}^ZDD6?$k~Mj z@`QKd05Y6%55`+SYS6#C~0}5ThMgUkIomaIjfMOt~2s0ifsx9nvOQHnn9n(gD34^Bd zsO@~v$3`G8v+GTwp(+M{XLPtJZySjqo zowY~2qBp!jduTgsX^^Wyr%kAWf4CV6VFQwDHg5r}QNZ?{;C*_Luh*qlnVsMa7QuKM zMUZ&kGm47~OQA4i(b%pSq1yW16_2x(Lu-fDSf@iJ4DFFmII_UWG_p=`+SVw{YBGbZ z(Y-$0Dp1&)Wn~;q%hF@2HA0POK8a@MT~ugkjZn?8bsbT60W9@A4-fRhvZd`J_<2@; zlD6Qth;3K<+W;*tr0Y=mb1`T}1bZ$3l|o=8RH_nySjmMROL+ zTDatzMT=H0zIy4h%D=6cQ{|g8{@QVK$B&=;r8)D)6c$}Krg;3d`0TA{%-k;(7GF2E zXzsW%bH~j4Qbon6%-@4rNHRwOyza@x4Rh`jhUH^D0;>^NiwF)Yo;<8(bnW2B2So=y zk@Jo0#|C8IoI9*IIIK_*fCl8e;4sjV*8(!abw1mS0GHvq^=%&1^)LKkTExmhwRq$pfCpR&`=mJ!ZAv;UQC@G;+J8}YjEISA13OT9)x zo=+R`iq3&F4!=(u@rwQcBad`^z6(C-;CE$!-=6_aeWc@4n*si*4Db&#$T=wkoZq{q zi}y$d_#ZRC_hx`|)S8a}gMjm5@ua=ro>j1xKwPQtzgOUX@E;p+S|lzXcRh{sJhZP| zIOXR>{w99CK-Ih-tu7aTpN6O6w`G8L8gQoD#A18(wJY`{%EYYn)Wt|tw+ ziT`s0ZsPymfSdR)8gNsd*9^Fcf82nZ>B?pS)cQ2}j4kPQb=O+f-l=HU++{8a%z)k)~ z4Y-MaK07&`E>q4a2HcEynE^NPA2Z-)yuUQyCZ8P!+~o7B0XO*^(Qr0TWXxnsZbE*z`;@M;)*3zp4m&v;K5P$VCAy8 z%MDKnxNs!hJx1Sld+=|{#IK@qZdt{urAfqe&K<5_#+*eJvz9Ec=!2Ye_NbgYt7_Kh zG>#wQhk{5(&*|s!VY;aN`TiZrO=uGP(xj$YcCA^g5}mre47^gt{AcW3GkTd)Rn>!) z#f5J6e&YXMf>IZyK0NNyJ|Qt(Z{3$Ej~KfvpAg+lyJ((3BGflvmPx+(JQ$EiCVF@L z?Q&t?W?uAZOXbP;t=boCy>8#x*D#&>G2zp44Pfcw-=GoQaX!%GN{#=o0ZkYGQtgxS zjBYm=KkHp;{Qq00U!zGJyv5jQ;tEhW;|dsI2EUFUQBvt;@C^8w=-FM8KD8tT*s0?B zAL=i0cg1o4Z^s)qoIpb0HBE2A7*54~O2PX1^t5RDjVTOV{kh<8A&^f01-ksY>7xGG zuDbMWt9ktfzka#{tWIb2UHT>ECT%MHHDe2lu2oJtazE2PK*fb)HOkrh^c1)gfQUbU zAMZn<$v!?k`vK;@|8P)mM6d*36a^r3Fgj_R^_0D^<(9YWr*c!1c5DzqoIO_b5^T(~89=N{$B*P#bN1QMvG}ZbO8_XpR4CJTNUV>eG}19>{v} z860+SvYq#>_~C(e7CuqK8tyS$FQ;P#l%)@)01hE7z0>`^uS9QH$qG|o#ox-Yv$(=; zap9fsbwr98cJsz}msq$*5eDKRSu=e}Guj6>PfNWs*Z?`-eNWjDg%XL2zZNSmlvD#9 zgrXPJ_hlElzh|iy#^e%Wr51mZcJRVp+zE-0)IJggdtbtLL8_(6!jkX9*q14pK=8my zuudgWA>FhT>1rt5Pt!<8{Dtt=+=zE63bP$-$}ilQR;95g{WU=Bue4UdWMUScYD}_9 zCKvDN=(F%(i@ZH7emJ4~Un)*XDmIDhZIoOOE$rz?#|ec($^*9gPACk*^-);wK2Ybe z@~ScbjX*{4(v*UN9aEGBp=T5khIJ;wQI(mOC3Kn#f91)?w{gxRbs1js~P?r>;psxrU z3=tNj6Jetvf>8?~eas+55$~S|jTuQ>4ANEUNITM#T4IXs zc&tL>A#GY{Yl*^22N?C;`7#R7q>NUY25qUSa8%97(_SED_z$a^oF(|zJ28H0hV{|bf}zw^J2Vr5Ui@MKLw*X!)jxl(3MKk(c13oz2E4;HWk?q zqwk5#RN(eDKR)kc^LZDnlcG*(%T-^twbX;WMYh9;vbI9Ue3JHGe}&IJ1WtXh0&IUd zdkqVAj_Tf|Xlww!VwLPFvj%9GYjTyY>y=*D1}z&r@~FeV_lXOD8jMc98F{`g7JQDe zmw0dK2*uyb7Bk5$b-~)+1>VP5luMj$v`l?{if{@}B-?VbU_2FCk>$Bo{LLKeJZx#2eq-i@$T%}SXNS^d3Ed0 zw`w;*nzmfHG}d-!Rln0d8bU*K#Jzg$y4ae_5PxlKup+HnKOABL|7Zf=ihR$X2W_Bl zEb8p5gnv~^KuN(z&uj4jn;Ypb1+G@WinI!7a22qd3iuko6<`0^^$$S<2ND`!NNIo} zrGZ!bYM{Mv{oPPNSS#R9X%vt){g79uf1OJI42(6j0{W*vh$0R<2*wNBn;6pQ+Sw>e zRhNh7;5!4?OABQq$JN*JFBI)*3qx@2v4#9!Od(n0&sBM2hnS)BL+Cv|^?xx#H z7>bGGsTE!JaR|Fh;wX&}^3__`>0P@`NVZzFZ}nJR$dP1bdoL@2|76fxdBF+ZXP(I8 z-`tY|TXa&Ms!sX{eE1~&z+T6%4ZlWsc{Sl5u3+s4@w$4t&{WSm`r-Xsx#)fR=2g8<=e&pC&#Y>1 z^#ybmo(Xj7=gfLW){rSE3@tz8YWaFZM~0P};h9zJt){%ykT>{8B+dgZd)Ho#K%zcd zk+FOGsM~UG!2YgE+lMrjD&X5dXSTn{if41cRbVC93iXlt{Xj9?1dBRZI=t&%#c7^x zpF>~a0h~5YiI0wrlz_VP55OxI0HLdo81rLu8@eCDQUXO#_ch9#+Vp_m! zMWzfw!@8cBq4*^k=pG&RDSV&Ye>0 z%ELoCKe)O9ef;45XI?r#xZtolG|A+(2tQs^Se3vp+sdNL-D$6Xz}s}ba#sRw`o!gH zF6SdI!rf;*#q8-toCAzi9g#uPoQn_LV$e_>sTb#%)4?Cg0H2TnJ}U#9Q?=>%QeZEVrUAdufUh#(UIXs>9Fflm1HQq)H+>&|VZhC` z{kJtdRnH%2IMc~-Gp$5D=1H9pUAmJjusfRo+eBdISC@%ktG(1%vzk$#7 zAs2s%0XO+C9|9y?sqwC&&>Bt@m(TAqz%QrLagmRS@2K+S~%a<=wJ44J`ym;K0RbvZbD3mRnw|Lf=ao2fL-(Gv#w_{HGmYj=D%Q^E~a!z@R zT`IUM1vj&(TDWx4!ir^OBK?C4myA<#r^P@D&VYfq1jBF@NUFhb6`;EWPP#GBsw$P6 z#W+AEdq)@HwOZUqW*6b{FLV76Y;+UTm*MBseUK@BHrlvMdx_7f@t?>L z|1)~u8`mCV{H*t>@sEIhnf@{Onb+TGABAg8Ai~7u<^HpcVYrY$4z+`4^wJ$r^bazBpWjZy4wL1L2~Rd~XRpwi*_E zOyLTC6&Lch@cjZvM|v!B9m^pDOzLkHA&=#}?_HB~0(eXS-dd3%AM>U2yi8t>JdXE6 zPC)n@tRj5(yZnPJ;u5jwfF{8Qz1Sb!AR7YKF4w)c7Z0tEaaJD8*7ja(PY>fHv^f{{tcLKTmy`D=$fkEp9`H6 zwv`2|=tE4~u=HX}K6j4S!oqNbMl*JaefH4EYCaa3WibTXTw4e&;Lw%c352$C&l*feqlWBit%C6; z{vpJ|rUxZJ#Y#k=^&WYVgXN~_JX{KHBWi*7T4G#FjPb;XT;k{212C`+gRIXG4QG~M zr`#P@(SFOpo~KZlvjV58Ky~l&jWZ+9a!Rqg0%hmA2bUkpNw|OuIQZ25M}DQ>$&(7k z+_!j?FRaZI9APK3E|trCtBS8HyKd}NK4rj74u)^{&3?#t!>pzF$}mv5v|y4gC-%*Rra8?Cwf{R(-f+w*QJ;7m{IRSp36q-)e2 zgUAKgOZu6Arj75zGcUq5iag&S_axlqmu^qAr0v$v5Kl3@Q_W`A5MMa!+A(uxEiIcy zKikQZ#w?~i3PW^^M*>Bw{!%8NoJ*O`=Ids`z{R;6^GfaW*)5%S9#pN??0W+^j=hFN5U|eqeE@&(Q z;L*?KY1HvAa1r%?D*ZKprxSIXPCx4uFVa!RF1?%nNr0uw4v@$Feq|LOa50_fY+l$r zUn)8Wzr=Cl^g)Hbv-e9}VAziV3gb~W4|nayZWvv03g%sRHSWRM4|2VaejcHc$fdY@ zEUY%Hdk8568uQ7!c02ys<^y8vKOgGC_AZB~MyK!WVDOPc9D|2P?F~J0*wfM5`<1Bw zb2eILdwi4k>(pW!En?|2_*%bu@c0y`WGD8>ZVE@RhQx+^P`IcwT!c;qryJtD53E~e zVbk-Yvh}(?S`hQ@+>3o*I9i?6_C>HY=Iyf@rbKdj)Mn}jand_OQ=LU0cW^T`?%lo_ z?>~_DpvL(lI1(;A{>2qrkd6ee8D{hTRxe+CJ`!&&<@ z=cN4M@h^BE{W5xRsN9O=_`}YNQ!dVVcZ!qKH6>DVBA00l^}e{`s8ze)V{P3mW^&PH zW)LtVLx6R`32Wq^tdX0hIxrK@+X2mV303X!tQ7~RM5=b?T3chR2sn2Den>0#;~WB5 zDf3!!7-NSOxv$%be!<*TSeH+fA)GvrI2tpA@|Qe$B3bfU&QS6m9MC>o&Oz^2;-)wc z@5KIk=U(jS4IstHiUf5zWD&Bsi9b%iM84ZuuOWYO7{sESADP|vd;*+k2nMs`84++(LuMNQLAiOE}o865fZq2y1Zf?!#TZh1f<6B|Rde z5k(72?)VqIkB;MjiE8)@B!ydYBMC+{Qdf(5Mc9|6_M*z&@G%RPTi;OGbPK@~PBYiH zL?Yenva_+>yHfob^9}VoC6QCJr+@s3GHz=2%#S}o4o=Nh4Z^wRB%?dWEd6x2x@CM`q0O0rRbZK8;TzvfDyZ&E!UM< zXh>lAFUhwqzBP9WTQ6sNSMHRHXTF<gi?4YZZ0_+Lt%jdQH%pCjHgx}gJZ}WaD09d zz_%$}QB1ZQz%XhE2HBMt42J*2PW<)(GBXF>71cR8aHqh2Kb6x5!!4nD2r*t!7}X`j zXy;~QGY7*PHsGUJ|N05q(`3(xVPXk~TrJ6lwA9%VjK7XW^g{#DkWP)xv}2ZYggx=7 z_tA}G+1?W#e_+|C>`@1&L>Gl)?U&U}jb0Gu*iD|<+i%^3#@!S4PB;K8tM*6?MnPy) zyS4&CQU8_FF^+%x!JPIHYRstmfAp3B9uGS^5I0AKK8^tks8INwD9ygeA?pF<{e4B^ zESeRcYh|3F=q2b$Vb1IT&6*eC`aZDTCvT=iFY($A4h&4bX%ldQGE3#^Us(m;!VMSc>K6=Tg zrbKV>Qc?`eAt|<+gToqzx$PK2SB}8%9%R}*bTj!PewBEr_94e7qNG$$?7*#L1cN0b z5MGJR>`YG^dfAXCJ#OG_w}0BO-*o<=K%8$oL;RRJ!~6**u|l>qZn%;nL?pukZa-|bwI7ao3s=TT!W%J%-6%+%qvEAw#@ z4GwVd&EuJ9t#UufLnnqKH;OyEkW*Z<@=h;symwsU)nkQ#?-JOs`= zZ08=uQyt%V%8G_i6y|iaabzI%N62vU?aw<0$$_RXDd82j`a|FCoRlZ=w0^}HtW)ALbsve$HQ4Y;m^XlUfwNBYsnI#+lRVlti_gtDmRVH zlvF9f?^kEzo}`Y1O6M%I`m{Mai~7l&qs&F6JmGpumjPreXYZ35px>CvS;lxu%95GC zBZPdv&Sm1&a&XbeF*a+AD1_u7x9M6g>PU0*E8xb0e2_GK2C*e zy`Eu?7E`SFkiU3U*UH5iq`Y8NGOshv@pApdxO_&K!Ax_!t$JO(T;sEN zFpG6DNzCzn4X{+1NU|{{Ucz{#;_{j0O&1@c$mP=e^t1ct#_vAYApjoz=XiDefs_bS z=_8;w%eBkb()usg0MezK|NyU`y}hFu#-w8u+CC1M^SngbTkic)UhyWAok~rQRj0pVB z1_kWH@X?J5*q3Ka0sHc7RKUJGTNJP_&khCb%ag?cBK76T4@~;W=~KYIJPQTba{wyQ z31=}+BzPJhg5G8#COm9KpwhajI3!=Z-h=9x^D0;~~+sr-CBaY??G151>^kAas@h(Y^GlL<8 z?Kg4@CNI%V`FL&wjPSbnak05jFrvgy# zW-c<76F*pv;9}9aFTb>1E_odA^vU1;ODKI8jnb^ac-K7(TZ`*3YW^OpIGD$jWhbnS zVcF@-i!kS*;nj;UGOOvlXsj6+YcieZwk9+7FR~_+9MGsag85uQeB^MhTA|^ecWngg zjmaKmK4+HTF%^<&#qZfMjxe1gp-~?trxm@A(ngV~#b1Pp(5C8Kz$0^v7@ALssu$-r z&DdwjM^92g44GVP4YFEsrtWM8ghslJ<2O)V;;#=xAG!di>kh0N<$=7vIKKvrIR%D> z-h-dTPH#x7+ZVe1-h6g;=;&03_1`@ox;E+ZAN}v1j~(e>y5|#TLe9JeR3A7cI(8VU zLh91G9j)RvBskif>+4uC8750d{g%$mrNLpzrOt;ip&9b2CAFKl+R1r~^mS(~-k<`? z!XXyqI5s0(K*@Zs$H`Ysi-Zn(t)%aKOG@4v>+ z^37}wXWxOP%QKX76x|lHzNyla4fhCeFiK^PS>9PWXkM7*J)Hd+MPgJav)Hqam=URW zY0}xR__GKiHdX#V+o$|zOlC?w=$lG>c^p}oF`;Ia&E6ve+{tq5W73n^;XEK7u0=LH0%*fO&Y4*3#Xbx`~w$ncRLKgOVACzMT4Ep zn?kisib8ltW)8!$@}3Z@ZdN=01ee@x=Mt|}fqlss5dW||NN7Zp;LZ5JtA7Of86%kK z1v6AKY@L8k^>pd5YCqtfe;j$Jv_uz6)1)2MZ08!pY&m!4rdh)|tpMQB8$3`Jj$MXjcPMYg^6MhX_YZ!yP0Licqd){*x6TknNRbR zVr0rF=8|NrsL{@z>xH2n!n*Y7gz%yvqCRV&PsAaGLj;wPds3NJZ39-!p2ctl&TMYU zo#YnW``mIX+S5r)NNhWILXmFCqVroy=_&)c2%RzC@06mBf*YBnIv3@YXvo)fm?B~< zX^+~)k#SZFb3!&NaPGuv9Gn?Y(>i!=6uu)t16Y=OOVocyD1H>5wp?|0DBgZ^_&n?r zcV`~HO0l|HupkJW{Lt`v(sjczA~YNux?OSy{UflFtO#>7VIv5ACSid!d^47xM_W!= zUTAnDd@CTs+|=)J54&z|)1beL?rlk&`ONea}OPN0iS!rY`h9gv4n zL7wge-5E82Ma@s5fs)bq+(1-dBp*2iTXHCh9OanbKM&HRc@nbV3`thGhJ;e#PFV*N z$YvZ95!jGz$fzmN>1c1^laY&-cL+lC+UWXI!oF0_Es@LY$Svp`QD~6=c4WTKj#L)d zkp~OyNHvJyepMZqA3{y{{+iqOVS6DtAPwy+%3!24H`Im3wJ}uNs0@C5Bvh&!sBQQ< zWM?7V2|~5I6QhCBd@&=kc1zcy>xtMlC_trZnBe_&M>sJ7BkxcuOA8bsoQ0*O6*y{0 zX`zC@?KY^ilePd}tl%ec_F<^@B@x$oKST#k?2sgtz9;0o9D-rdyWP8PG)JJ>u3`3I+W}&X8P}jat*Gr+UmqR1#Ln9kPBe#S`!st0*kNCVj z0xoJJ;G#C-Ymo4Z;-x0d?VePRv>z(d&y=*TkB^@*6L&fzb*N#awvYVFTc}9~zt$V2 zg!~zEaC9fbHnB=eiPB|M%Z*v(Z^3|e` zw{m_BvY@gKw>vigiEB~b%Ce0Np6yB$n8e7WkxW`hsn(#tr$hL}Bv18{QRWpWxMz}0 z9@+SWjm*G-O`))nB_ymk@Zp=MS$R61TzRsh|L!h4!B26fe}U=bIFC+_blY13Td1A} zDIZqmyMA#6@N%SoBg$!BdMC%TaD@}Ut<(C$_3?!hZ!NgO$y%|pzvTV@dp?dO;@^nn zlR@xtq!#k5;ZP?W9l1e>*?vdAm4}{-^Jkop$Ksl|axzQhEy+^(sLFd?F#k?xzLd3Z z`lM82fegjsJ8I_IU8bs>%z}AKvS2`E>N*V@$F2Dd5hPDC5~a z@ef7WJ!=Qi`q}L$_To;d-9(RC(IIHDwd1Gj397t66V-!tqexsy^H_0)OF=z@XQ<$$ z`uX;)BQ13MRj#3Q_T|94jeZ=-B9jdLzvClHN8yBvFw>OkCu%#|MOgWW>gsdl^-^{C zomxITMOmG6HL__I#b6fMky|mUZ?z+S|Vo=1&-AojcX`SyaiSQj;O^vHk@1i}%qlBEt+Drj5QaNxsPtd@}#?){Qbo(3Hsc zAgMENhVAnRq-uSIvuqDCw1=U^3~gg*4nxl|bT>o)hEUkqjmbBfmwG0S({QaHezF-j z*S_Z1e@gT!Ou)gA;^+E#Z3T$Xou8XGFR8AZ@RfF4cq`-$?Mn4zv@6w< z%XwRhW}yZwV0Q&pJa0ul!_NwenlURBE;`2V1&c6HK&+^~?eMYwednZHaTSkCwQHw$vZ`VdrB$L?g7X2(VS$u?qxpL?9jYhrZQ0sZb#A zydMJjR=TaP!4%^i%C){j@J?Zf7QomTqp(}@tj}(TY?SQ2Jdq|}=r;-G^OWX3pFo}$ z2qcCmRGI*r1lUYbeo*KF4<>!XpJr)9^m#_t+b)#Hh4Q4pv6;tYnESW*M2vh9Lq%$e zp^|Efk%+NLVm!z%D1OBlZ$gy$!n#?aX^|+g$H-)icWx<^d{CbD#{>)M|JTm@R0Jx@ zZA`h=<@3V5i61=7qb@NYu(CktRQBN0&NWKw2PL*6^6m&?D@JUA`c41Zxy6o5Di$Gj z)NlHE=WBx3D1g27n||0C!_Kb)YZllmDEGyk4fUHMov+nT_-<#bjcu2sD+BWKRY5!~ zk*Lo#j?JH6KjHVC9r9Xv-=DOuuY!yF+VkMcXTb?zYrGphKhCbOBPhbOrf#w1@6KuR zS9TZ1@Z}i8FTfanDGJCcD>_=2ZR@jW&hCiOkszNYnh&3NrJcXB9WnAsIe}i>srnv# zL-A2(SQWpRC~^lOGgOJ#CJ^~<Sc}i)}TE-eQZ&Nq}jX1h@;6 z0OcTB00J~*Y^Jz$h?!BDAVnJ~s%*v_7~-o$#r&xAfPmh>TtaatK0tj^w$-pB|LB9t z@JX@V3DSMYUE>HquIpUsj^)Sts{ z{ZSCqpTlnbQB4!-&*4s8fA$L1D}+e>v7AQt^PFaRb)^2#;m+yYnFiynlAWtqPtsK? zDVauHT8-Q}AV5`(dL-O4f4-_n0ahezYojK^s$oTQ(y$m4g)&j5k}4#ah+_HAFmp)N zpuK^1*xad8u_J zPEQbxP#tHQztc*nZNt__S`pa4S=M*6QGU)iL&(SwhpOwCr?nz0ilr!LoUoM{LsiJV zunh*=(aHEjbCYqp@L}Lxk0Wcmj}F9c+3#WF+T69DhA`ulPf=g!Zwj{$ zuS=aDte^eVdo7$Kte;)?UTgjA_3w4m&#rk7OF#SV5nn{-gt@^7F*jI^7VmOYA~bk^ zi=~*D?O?6h`6?QS+vIE2pJ0NF`!w0ni)@~E@oxN`oZ8pD(O`G&2cHUiC-3!6-WK%! zHfP!1*4mcKD7q?NwLPAy&sot6c32UVT6_%1x&Ci@P?l@o$y#yLoNF|i_JoTZ;)C1W zBX8%j@J9zOVb@#xMhE8Q;F7An%xW^%!bdUB{2WkLFx?6jz ztvUdbuGZe_X&V4Yx^8=`@7kEkBbLgeF_lM4Dh~+WM-ERai@a18zEl>4DJ%kkR36h( zd6X+2)pspzqyK(V&nRD}`tz<9|=dl%VL;t1)k@9NlGZnrFY#Cm>QwzAK;?UR1ZC`conEW!OLNR#5Gd=2`pd3 zYV^N;)$i~B1BBlymh&SqT&}*B%hLc)4L@?k<;qYdPxuy+0vgvi2@mjmR`1p7zT!8G zjKSx3A?p7!`5WN5^RN5DCn9|!56dhrDR1~^-pMzWdM{haL%@6RBRqCF0=Og(@c%3P zgpbZAx6C;j-lF-q`3P{@Z!_NpJSC|_^(=-w{5G>@v^;uhw4Tq?@H`E7^NHtlo8NLu zodoG;G~7LhRq6rYJ{PX}j8xHhX5s(S1Csi8%e<}OuAbd;5CF?{{%lOaFW366Pl3DXV@J-*GI*mkn-qZb4r-5CN7#MphFKAB|s8z;Vv}OH@BYa6h@&&WS7UH$A4a&=H&H9 z{8D8i{0}Md62>bPm(Q%qx>yrMu9&9x>1X%Pjo*FVg8+E+`{uSq(-)*LPNm-kdbh1| zdGfzdr+=Cjm~_;!OYf%t4Zu>O00ekr<G{WYF_j+Q++KTb-`tMT=x6`UZJ|-X z0wPubXIE!=rWN(J^3hrss~Y?aCA@pHJ|s!t8YC2HZ~w)Q>|xpFmG#xzJXx#qvMwGn zIJXYT zbIWkJz``Z-mzT|{T(Z2%GkQ+t;>8u%A;CR+V8V<^L_xnZYdJ8?BManYgNkL#6d#R9 zUi~)2Wn_v$8SpEY=}0xR#0eF%SIpyk95t1?Wv-;;&%6CNRS%loD%}A5CWXDO`UxnX z`ODN+ClGbO%|{nrg23tM-TZg)Q_B+F+){ZG*R|m-O?W>3nct~x75Ov%)b?&EV7yY} zOMT|KOr$R)vT@bu@c%Gi3=)@@`#;wR%L{$G%tbJPX>k8u!TR+TK26UR2lH~%@4_BO zAf5iowL;uJf%+q@OYg#e30SJ`0P@_W3UzEdr$Db&BW$)d*+xhx5tkj?%Di_BDzOKVd1>Z zzrLMk9Yio$h=+pCiTT)*aXFlrMC27ie|Ih9kT}{uwfT3nCv=1|2E`Gk&oXdN8*U!Y zjNqNYJAyNU({G<f@D!bx9sKv7|LkW!!-iztq4@F3a0dIw!OltfSt~9TG9@`q zw*B2Kpi4CP#H9TetxKHX`|M4|3-^Um)k zxPIe#VJQ!rC!2Ja2t7c9FsZGO#h*`_TR z?a$)1T!wx_4(8R7Z#VNm+fnZ=zlOPHkMCT5edv)M(Qq)GhHJp5?G$cSoKwJ8bBXPn~~W?%+WK zbFv5EltBIOzL)c3U&E8NZjX2ELuj%vgZ||Zj?cDgKg?Z*sra1FSmV3BkCovS9xh^K zcv?5ThKm3AnQU=6yQH8(g1_lP|ql!Sxe+85n>-4+Gf< zoMIpcfsYv&h`>h-3_{>T1_mR5EwgjAvC{ZDV0|R5u87Zo>3()mm%yiTW!4_ z8sF$$dkL1$IydE4RoEyn{5YefTZ#^j6yF;jwHaT246?FbKq8V!2tfWd!$dMn*}wFE z$a@pGn7;pi{8m$nG$Di#LfL9e2%*u$L?u+VD9Rp@vM+6zYh>SflYQUGo)$}4Q* zf#Ztq2Zsdz{NNW5G_e0jD3bs3Q%y_iBUyn5gnq#gVuMs?-iAI-ys z{Aesy2!GNir8Iin2#t{X$5oFzUGm4XaHogSh2nx9cZ%fCZ^BS-h8{pdg7K*g71UQ}J zU0nR5CBUU6z-e5fI6RRhz`KE_;^G&U04JxWxcER{ES&6Jaq+2dLxIGB{)Mpuep-j? zA63H3e-v#OD+UP8|gyzMx|W59u5M-V65>2wolk0-T;HXyX^; zgWhY>S(l6bE1d%U+ITeS*QAp^6r!L_C$$#^Z90i&3flN>)L1d%`{IDbkr+%dX z7xLA{(^&%#&Cv+)8*9Kd+r^%TYvXCH0VgRF@R0LMK|B5;HJGE5bdV4~mWOM{->DIw zcu9zVSp!bv2Lk*$57)-?L?gat{gfd_N1*zziGKl4T@AQqJqUBS+W1L+DG*$<9@=Q& z(d19^cqwSNJB=AqAh>3}Li=jxtJ%JqV|oiXEWg%&EDtCA0+fpzu*gSuW{NhcLs3Cz@YxzLBLHk{8hh!<28q0g*Tk{+QiMz zZ&29C06)K?6dasJUdh${aavi?dk*|-G7cPy^KXBQ1%oO&gP1>dm{8(TJ(61-V#=8J zpi3Z2c&oKW*`qP8Z+ikG9EK9AS`4chd1P>V~xp^{~5v^ zdR$C>lzbR6kDNafna@#;7^B*n$0iGpMcobUfox$|Jzz|zq&aHT+0(U|-!CWq@^Cv1 zmiZsu(wVy?586T4o3|VUtY&c1e9*Wj8Pg2JX$6tJ>-gr@5{sqP4Pj*E+|6pWZ zT>hp6L=gOD_0zAu+c3l{F8^h`@)*x2r1FzLqn&?!z>3S?pU+?L&v`Vzl)pA!6qmm# z?}CT(cqo6;m)iLs2CTUJ6L`K8`T>Z>1?~3V4`^}u&l9WTYvxb-S3Ca)$ei*ouZ~{y zYsVwCEP|+Sg#3jo4ZRdczbBtw=zj=kgml7lStKrweqnEC1s{>>kE&Fge&NjOrUF9# zYEO-g;H6~V&d8$G5&s; zyD{g}+i4-!Moadxxcci^PMz^QK7Xn|>LUp01^LfHdMy>lrBDdQomY-TMsf9zxtkU( z|6uM$Vkd2`p1k?zb2s7jIFh&@C;rzEwRSih4>li95{cM|B2TQjGFQ&+f$ELPiyp4* zMQksU_|!lV(>Mi%aF20pD_0rFRURTaK0}jIl0|B}3YM9qBt7kIP)c;Ei(?V5vJp8wpg|3X>rA(u!0dRa1& z%k6)?ENRH)>c3u=6y$Q@=dwWF5;%FQ1aT9ETK%oK1whJG%B4d+e z>@7jwu!lEizho@FlD(!OL27fw8z{ALVqm9Wp!&iZGN+QHr}!maEDo+*Q?A>CU>$b7#GmxnfO9;yvuNiS3i|GzdpIH66B~!&Xg4IW-*&=)iVxe;daXaj=yT)k|%4z0?4n z8tQtft*#gB&FF3Y8$8&Uudjm|PdPOnjvh6ha%wzIz@s=!PH=8F{Qhu);j`L7lFn7fE^-Hfm+@dGe-mMiNH=Jp12zi~}`0_OhogSjucCO!poXS=guVD2f0UD?0I zlK?y^>PD=gZbXi`)r|EVP$-4@URM2{!v>8UO|1cC7IfuWk!0^`f$u1wCceZ6W2_VmfI>cXqK7m&4Sz{#}2s=xf^_qWAZA{8|*%ybG7{+P26)V-cM3YGe08uj-A5-2GhtvFW$OC;O9>K6^mQ&tVh- zgTKhg$VN;f`fIeG*}tE8{``3YlaPSh{g0SOkC^)P>-S)K^Z+Q~8T0HJ^Z4=OUCgds zc=f0bQ>P9yefsp_%<$oe(!+&uabcP@YqpWuxDipGyS(%NP-+1ZSpo!xon{CSXg+n%wv$M-{i zW0|pIL2ADd%!m=p>C>mTGF!KTMeR*RN5uo8Ou5-x(bp zoy*MS%P3;+WF|S8xqkinL}ubd6t$}rV`ato`1s^7IXNhDkU!(^&$zq04`qf9MbTB; zm~GpbvSrK0GO@9!f)#6-wQCt{8Z>|zFaTBY#f$OsVlG^`P=l#a168u;9&_&=)3|Zt zKqfE{RTFB;n3^)>%d3a~8a8aWo>{-1!FWy>6BdT5DwxI0n#JthyY~t6O)R=Fp)-nM`ITs(5P(laj(nB$6}CnKP*BD-ldY z1XHV8gTCHK$tYP~1?|+;* zejH74*M_mNVX9TD_KErQ2~ASYma(;EEG#SzFb58xX_}5_#*b&jVzB{ZV1OoC^^|$~ zl&Msy(r9M%Xf###tIXA_jJdh_c4qr_G}&t$jbl7LJ;Rys za5Vk4NC-cZmX`J$LJt;*tq);mrc9ag7(xzKSUVlU&9E%n3_=Z-7+?%xW|l5pDuWP% zHN5g6yiA`yeHKD!!6G%PKvJC0HhKAcT=gPftGqAq4A~ z9)|ESr%s)k3!x+Blm}sB6bi*92pL#uy&Z&$`S9U`AA|}l6?PiJ#N4`dt15&DtTpRC zgon}7(>n*D0gFB92w`Eeva;GhNWf}FIuH(~UAuPIArxS_J3bHwX3?TW?hpd7-psOK ze#Y0=cMzB!EEshG%+BcQ>NWI(4!HQ-dYv?FBP4QmJ$~m>8@%#tqEN zV8f6kFfCa0{Zue3^XAPPeK09l^{+!A-MTiI2&^3;2lFsX zmMqx^rU8ow9|W^7ojZ4)4<-StS1<%~F!Ay6Tfh`x`GBur2Bt}qCZ1pduzqeD8lRak zVZszNIz(VIi^gVV&z`*$jSNv((+7>qj2t;~F&Y&jal8S zd#6C7K}0@%Kw~j+adEfMNDviUtf|stzJ2?ag+_tM9B7BeV0!iHwFr#>(HZZH%4e1> z!!$BJsx>e$=!D8!>n7kt}`kHA{P^n%3wZ!{@etW0MQGXfWkAS zN|l<8LPG?Pj6`7>Z*T88C?rJj<2w|NdHM2X90~=I-0=;CVM>=S-3x_)Xf|I4;u%+0 z*I^(UBHEw>h-HQh8FCavLR1~=f;h&(!J$2fg2=vF2V$5F8#a6f5fELcQplXKwzl?0 zrV!zbm&lBnG-*<4WCBq><_hFYYHI2bAcaUfI{+Dzn3%W$NFdr3t&x~{`0(K*B!Y1bZE4)dS} z$SS;tI;L7IMWuok-wZWOTC6_QIkn;(m{XFDeP9!+O;=PeS=qZVd!!|u!B)hDzA)P) zl{aAKsg};7`N{ie3v)qS@DAplwA5UPHF4!&xCi8=)P$NPsWb=s5ciCPxRE!r8{$IN z!WL$hxb*?d0%_CfFl(fB%EAnjHSZ2JPhLd<*paOKDyUD=k^{lcZvoqq_tFsRg{(<)n0fM=Ho+{C zHa!h@guJjBaN9^Ly2IR)^hu$1iQB)yT$6Sj1hYumswdnGlBy*zH{`Xnf*B&KZUi@j zw8UbtHF*W5aBIjqj)&SI>zoO7Oj6Ju>XWqW1*k)^9{CV|lHPhSD`a&Z!<{5;*dJm< zTD~gG7io=la7#(5TSNTFYDGfLlT^k*?UA;*1#?T*_A1O2N#!z_5Au3)pzg@aQ^8D< zmeGZqM^+{eVnyO8Va|Myf!bm z>tsFcpq9xhO@-MdujN22gbzixhMFU-;|()U+GPmba-Y~Qw2+avc~72rl@x@3g(}zMj^}@d9zL7#*_Cs z6mB9}CquXw#AcmefCy$u(b4f66L zV6Mqq90PZWyzUX?mcmPqhWkif-5RJ<(ylLIw#dqKg4;&kax&b1vIb3H21sir!c8Qv zK?i1;yw)dh7f6fOMYn^joC5AKS^wp5H^^%{g6;tIn)ahRLRxqd%ocfzpJ1lRi@5|h zkG$2Ba095fkd5vDd55E62FSa#fq5sd_afY6>Xih+9VRce0^B_EvIAj$$;z#S`6911 z0B$gO!GFQ+VbH`0aL38Ib%wi2-o_!g1JwK42seVPISY4=yeB`n59Gba}!(IVP{t67D$l0?pulQEwy{ZX|ifCt$v*mvjf+Vd{lHLU)yVXKUf6GBDlu;BHXw zY8K2p^#)$S4JR-6I@~(y{Y`}1LcM`w=+2TC@DSZZ2CCT!-AC$;cX=bO@fqL9;Ka`) zUCk3eak{4>>N!4Ad6eK5(>21?<^i_lca3K~{Dc*WZ|5Sa`$|!c0d-V4F5eg=&hEo2swBLOo#o;He_w1ucZZ$cq8KBkF?b zbQvAk6a9q};hx?XBoU6MWf-lWN^sK9H;Q?l|TqY=inlAzB$tllGX|fZoxV($DorEzqeV>J3HZbU*<%l3VrFjeSD9P+Gp( zFlgRiZa|A2-MG5K7R|Yxp&5US^vrXg`5hlH;UlK|_I8#Px-=;+SVchP<)}cZa5RgRC9O!P{ZL(UuGoB;Q(Tc8kzJ7pRdG%( z#pZ;FEJqDm$WeoqTrJ2^hgPTtaWpLx)h;(xPHrfQ!JV}RGH`wi9lcbmn7Fj{9NXJ4 zw;4yh9N))KWy#UB7IHMQr5w~+t@^6K36_?wF;f_>%7jEn1732ovU5|l#6F-{Ix!U6 zZT82)iJ{=HUe=13{&sJYo%@d%7!)+Lzs5#imIEeOI`$tmDkRt`c+|j=W5xtE2@V-d zpL;SQ{DTb{T37ZbdwWqDT1!iTUnaxQ`fxiA!Z73L%6-OzFN0?2;d`AJ5x&@&qmOTP z<{IdFU3R(Ta?$0COR|fJA>kUrr#lBJq(HFA+}+Rk=kc&V#h=2b6Yx9W`8E&Rj7hkX zY1NA^rAaKJdg9+4yiOsV=oU2#BR`T$B2Dm}s>Il~z_}AP+O2E^fhg;%GLBK=Wf{RZJyAinh z!qt)<5QtJfYwlU|8v}w{a!}@{y`Kmk%frL@tAIx+pYV-=02j)4K`XvculKazLb)~f zgyQJr%Ter}O5D0;LH__byG9Laqs$oP$SXzthC-mmCoi7x^Ns#6rjbWx*d9~2xg z+^<`3*vP;!OwmiZI(G3dU4{>wFnHj|AF(x2{eWuX_+@Vm^-AWV_0ZZ2j`>>q&o3X4 zRI~jBOyldS?@IA>Ov9$bkzallHxxGF2zNy4cePj90 z*Di7sNIV@*+|>!|D6vP89L5%F2dP|)r>q;*1$?JdrahDC?tk?Dzx~@>DxVqsApG4P zM)chb**13*`exRZKGfyD%XK6;LP_s^)vt?v&%gTRk_Sj}-?>smbZLHxuZDB2_shHD zzAN31SmYOIhn4^o2M;X)PG!^l?vtwnz!r1xAM^-t5(UlgPz5;2RB`zV%YGZ+eHr`< z-vbG@lH`ce3h;jtpQ!qi_@obo_?Eb*Kyt1r>rMnjAed(B_!AI;;6LdW?wg?>hC{Gn z8eh8<8K!_i100I1pYTn~paGJm4t_u2B_yOs0`8xa3eb`gmXJ(R1pl!CmDa~WT6QjA zL{N|)%J8pj7WE$Ws#)Ju*A({fKm#qEul303VuF=q^EhN0KR>l0;6C{OyYvEo3n;XC zyenR4Rc^7jXv!te5*g*e6KZ^+l5X8t5M+WAu_uDJZe z0jKc0{K<9}m%l?X`IDS$=bsE1=`Wdi-niGs0ojpt{~WdYFkRutxkLnLi-9C zYV!oW7ur~eL)QeJP(f#s&qVF4ty{=8QB)xwZn@Btzy40Q(zlq}bwWw0pIThdjvI_f zfc>IdKk|tkw2%n&3*ce6DX#nld`4716sY{g*_PRWYp5=Y$_3#YxOx0Dp)0Qbpj(^& z+J{qXPc{7K{u~5@@BaPs{+v>SKqrnKwQi02q!Xr}O91ZY|JnVKNY`3$<-!m(fBn15 zXuSLrT}nKpEjNUp7NBYBQX%j9CBzqGocK*smy*qv zXaS!@n=Wk~IsoyCEB`${qu=S!Xr$LrQGBipW67tV$3y6`1Rd(oT&*(ynSa`{w1b!=2>~Z)?!G2dAC8$~}BaKG*_5FXhBV3XnOgtgz>`qiZ zZthA~L3_}d;*oSN1z`+_@VIf1A29y0*vlnA|3t?V5zvW-v#>_XUcJ@ps*VU#wOUUYGyzl+ABW zz2JtYMhqPj@Gn_FhRH(xY1S*%DTSUq@R|Ct=ojkYr|`Rez)z9!@KaminRte9mSjT( zK0_2PX!AIw)y7E?Q+Os4Y(Pn4RMv=FT>kS234*}?>Zf02tPWljm;b$D@+W>5Y?wfo z9I)c@-@|A4yZqagkpIVG@+Ude&c6?zza5{Sa7pBEe&+-1=FHW2E2=oi!lej6a{!MxQRqzo@8l!rE_k2|eD7k9_PpBb(rAu+`XKOE&NdLqK zkpB6+n6U2{5#~fc_|+VvQm`Vc90FrL?7!P86Okp)XKD7QxIG$So4b->E+PEi8k-`y z(AF!ICCRp?&EseSOyIW${C#n@jo43sTjHJq@!3zj_6PGU!Rk2`!A|khC0fuw>Q^D{ zzhqUSQBGd`sMtROU-(5oAlw}95>pI-Z-U4Oxd0N5`&^&_89n=Wk$8-{qr zl|P5iNU&X0{^D#3^_zdH3riFJ`Pfv727@|r z^r&^}k240aEEFektd^oDs(v>&cqBHO87gFDrAUaRViuqt58au;0BR>a>n)%je?gI3#hI z{yyxoN>7}EwStB!XAyT}j1wCa*g(mY)9@<10ay=LV_cm@d8@hHX&IJ_q)-uq(~5KL zx$H>_v8NaIwQs|?23!)ynU%3iQi{qbkk-7t(#%1i!4+HVySMxr+PwJu6*&9h@A4;n zSkGvO`4MZ4gC73NEfLuo3fgNbsIMpV54rtBVT0OpYbuKNA(xx@|FjReU9o$IbJ$D% zAsPRZeqv3;*R(|(ZGe?zyM#GLl4JT8Y*95{2DRaqh(n~oAg5a2^pFSH~f|O zliEl-XwQ9@WP_R_Ash{_zw_&99*>Xu6A9MEDfVLGda7Z+*dQVOke{&rumJ+N zGj572zcBYM*ou;DP!Q4=N9sHtIG)dl%2S1Sk_+@nJcSA~k|JsDg2$Y9cuY3vB7YDwOQ+|T}s$WPJ z>Hj~~xim)kcj<+86v)tSd$Og)>6`*Wia`8Ap(LH#2Ja}U5Rc+gP^vG#_4_*@9-kGT zLVc-U9I%+U{8-MfI+suH@DtWwbuO(JE3W*OeEa=Q=Y}EuPyEd1=g;RqkAJ4e5_GOZ zi$C!Do7uPcJ-fK5M?BY<1VGKEpYgs*#Gll9+3r_zWAJ zrpxpih0COkSXskH3nX{2HJ#40SsoTYB3t|vS!xjuLRb*8KrVTs^0Aa;&GN9~V#`#b zaGWIdS_8LpL(zVjo`?nh1(MUM4%Rj~vpgDcbc1FWmA$&iYPwzY?3JK-zDq-*`>v{k z9amrWLiC~<;)|(KCz3o>2M0;!EDy(jSSKBvH8w~bcUc^lj7ErJv%p5!yH*@` zOC}Y8aYSGo(F#e9s^1VvvYdUDk&MV{#>rss5aXyL7cq|G3Yp}xs^2KN4e*C@(Zz8Y zV4Q`TxPMgA3N&uN@j7|4JSJ1*v*Nh(K(7)a%cREO8sqsypPn%aa+wVl$=P-|laY?@ zqaqarbwAk)64OGinkFhLaVBCQ53a=OOo~M4e31y5so0xfY(a#$QWc4i8E7yA=bEjM zOJ1XJHW_@`)Z{`aC@o(VKZF9Yzo|M5k)V}=_%^jra&4MO(P^{b1m}hpXj6!V)C}?& zD9J+G=wt|0fi^9|jm8W|W3s3Uv@NP4U&dZn`Sg_Ad?qd+5iKg$xuSCM0xOh@lUt!& zKPZJnzEk;lN+7>pMG^^tXEPG>1YvI|Qh^tigNy|-$yrrD1y`YNKS;GIA{Ff8BDDgw zR;-Jj6*%I#ip1vL53#{^q82MPHIE+Dl+5{F2lcjHLvTQ|5>+=}U2oaYCUTpP8tOz_Kd6a;3==UARUIrzEUkVgmdJ$|RMo*; zt^@2Af?W(zfoDm8;(nQa9-MWVSonA)U~iY3)9j>~jWS!vb_st;0ZwG~wv=_2_G z+>pvD;qFbCqe=MbzdT-_v7L-8Ed2prXDIdPQanaV&XjmM2mZ|(R0M2I~Iu?Hdc zDCQHkhlp)Kqa}i5{XFi3Ew~lzJ6E<)rZT7Rjj{Enr$~Gr-|kLN6-Q5j0dI}BajN7Bl8Z2AWk{U|ksJFmhh!Mv!HVcZ zS~fE=$6V>c(A8AwqNALmtL&@Crg2aaT>;fsh8ZZmX{-tdBYqW6Tj<8-x=(*Ej_wC* zFJsdr39d0?aTeis1M$pF0J-aY;15t$1UT+f=-hCTq)OgP(hHx;aNc1d2rEpyhtF{1 zdZ_Oom>Q*NJelK(O)QG4@y5_7P0n7@03adz8qebj6Q7tH6-YAWk|eIY^c^*o7b_mr zXgLV* zm~$<&2(-!At1?w(nF_tfbJ(Gsy#^XZGWINuF8)+Gt}z|ZdLIqO^&wh_BvhZ9&O1d6 z=i(>=L=g&|l)`(;Fho0D$a4jE4-2OB=I)ez)t4#iIBI@U$H_CtOF8?Q%0c`_yTGFm zzh}BUR~eg0?M2&bqpeT`*i1t<7j4Amqk-5=HV@4sW1n$2sadH#)lG?3qy|LW$=P&{ ze}5XFl%(fgz}~_n4gYEQFYjMdu}bP=Qy)d>W7i>Pyl9+LW?~(sKSwlIZ-%a3Wj#87 z5nq&X-EQhXc;cUe`%h^wHYzi*i!zukBy6Kcr#5P&rE%5STuO$Spq*BIzN7ZIYA?Ow z&v*3a(G+`G4(OkZ0T7ZuS%0IBPd&h&!!10T{tV)tE|vhNdF$fh?=1mN?WMV1hpR)t z0y#L1I;aEJF1V%o)*LV9+8D5^>SzqjT~a?=7?ZHlfKxwMfZJ=p4K?604LH??5Wleo zToZo_4Y(%$jv8=H{9YPxP5k=Qc|_2rU#tPw#9vbbu8Chb+l}yO;vddoSNDTyJV7W| zIuED*t>zd{A09vTn>FLV(SXxBTLI5_zJpBhHQ`HnxPV{iYa<#L2u^8QYv8390^F8| zQyD1;@Y+0_Xrmy&tMYJx2L(8-|Dz!24FN8Et0vGT!08(w3W6>X;J4@o!IJy^k#7bM z7x+zxpT@(jwc=mo;f=K5XL&fu1qA`mNggintpGpH!!5bk>i9f}g9!XaFj7xKn8)7; zcm#McYst8&5RJV6)Z=&|!GZll`#0gn>NIx>_+^xj-$6hd{vV9*jVx}t7)L;NztH{z zf(A+%&8Mb6JxP9g5~{bT*#GIxS|rr0R{_r`o&j?O0DtA#un0=e^#7lZ4GLpxC8Zbi zqmUs_mhi~Pa7Xf|9jrMQiDCTt7qn)Z$|=a9ATRv@D~|qAe5D9_n@97DZRmv;#pSQ$ z^H1OtQvRf$wDTwVFE0NCzCr|h!lU^mf6}SN<*(pB$P(m)@~61k`IB5z{+cp}N5-)< z{r*^YtA6@5uR3^9T>hDS{+@&!f$}GPuATpAz$l6~Lx=MD|872PBA*_YpF#yv;>84> zoT4{#aR=BhW3%Rb`plx3>KlQ60Xz#g#g*ThXH*3rk;+djA*2`hZ!2Khbx%nO`1~Ds zg6Tpmp`G5=-d^%Y-wXX~Yckx~bJ&xdI$qd!D#I21UiKT-W4MUp82oqEL3gmTE`G-7 z;b)QvKg0F$<80uDJ(sZQQ(X5_awT?yO1y_|pqrJBEb+dni%}wObrbI!%8gQuUO6d4 zt@NCf=szYtHFr`5S?MP}HZ}UDlv^2~<7$*+l&18uDn*@Y^regy({G8R*P+hb(7`gr zDh$bsTyiUl&bD$5xQ^8qX3kB$+Az*aGe^yZ7j7-Tgxb-43r&8xzQdPE^O2Px0Y#8O%(Yef45e{ml(IG4^!e=4d?$a)@qRc)3zT}j+*$_ z^vOAz0eeL+5lFtt90208KR zhZMzB-w5;z;Lf-yuKfSgH5ps@{KxYd5#7brA8e4c*&oagN~HG9)Qd9y`I-z<4F|!A zqsIv{%g+zuh$*k`iiqdqLE#{Ae!?K}G?5j4FhI-wT5`X3QQu8vhlzRQVz)CGC!KQ{ z_b$^Dj!?m5;w~vspG0FyN#5sf#xr{<;t2$Pnj)sdR|OrElc%eQO4gwfuc-Ta7?v|0 zBa*zx>#T@+_*L=YmgEJ@ikz}{kcb)(0Xyhc-atfo?*JY2V8}gy9C|S39$!(^EyJ~1`AM1z&ExJIw!xWfvxQ3 z6zpWHaHG#guK`mcsvSmYpW=)zxfRasNs=W#FqIj7#^9m@`;1cfS~)6WXi}b$tL)bp zW$=U29aP4%%FsrPMj1|rbR_9qeF8J8f05NFw2^{+CTCB(#c*R8GO2tgP9G~^-?KMx zo)=-mY+amN3^(S2+rx563ML0=N6*Wz`8aT3RUC;F9c zG3tqAso8eSI4al!Rw;y2`m@?Jm z6AUsekbI&k6Uh~vuSqofBM#;Pf!!F#^_)SiW7gUD7>aO^aaK9TO1>bQ6AWK`XQ|md zXQ{HE6hu&6c5F+}Q#es@;R~?n3rCl8??(`3Z)j$nh8; z&m|vGsrz_xdUE85;^Ak-QoT}5e2}rHWQosFim#YtIVO(#NQ6@dKqd`Ep+c=5$t15j zN{#oqvl+O=(h5~f?6^%w1h1VmRF8`N2H+wzE)w8|=acp-(MejRi!#emmuvz6n?c|~ z+$YJ|6wE&G^(l_S_mT&!oTy6OtZvhXl?SZIiN+zKGO61^Z1{N*4W(drSSbLN8ZUKa zzjMoo7g^C53r967*Nx4h`YmD#5S_KMyssR0y9uVT#mW1cjQvhQQCj>Dw_>-{E#{-GMhZ&WhfR( zNXZL{KezClm?rtyUMgC_w}T~+y0UpxU2>_}KH9_d0#ysg@IVCz_ajP0UC*VPeF~!DKFxH0*H~E{RnC@+`#Q0@u+r^@n8=6u|w`+ z4uYxRI|_D{l_3YTSdG;cAbOFD|$=w_7-sDB9tw`jeW=gU$K!-qVhi?^Txzl3mCYi4l%%n_ zXud5_Ropx=`x1hQr51bTQu~F_Hz0*$LIrz`NXkTM#BmpaQ0dMly0WxJTuJj*D9mfl z<5#e=xvzjQe|Hi0XUD(*=@2_r$_ntFu9~efiRYXI3Cfe>v+rI}pV^ zMcEK@gD`5F1iTy~M;#o;QhzHY*aua;gJT%nZ&QF#!ojT3;9WP>Dvm|Kw=2N2knczc z5J(TA6vXvl0Vv4Hvqy2P1yM>O2`76K&6xlgEji+cDpbcg@qrOK3eks2U5SHmQ4!-| z3c;PV-0k#L&mz6mHyh;P?2(UjZa{@S415B(Q$jYek zHfVs|03O21JOSRK0rmnoh?VsOc!vhq7vNE>%pc%A8sI>HLs{7nfDdSZg8&}S%0>Zv zSOXji@MKmt9$;FZBvkBVMZ~G`U;)i}rso4k8I&nsb1?Pk5^9G_-8qVu}IW1gn2gVGyEJdU4NTY6|s#n!py z9?dz>*S@f`Qm0N1Hd^&jgtrdoafF zczo=H76ZJtuXYKHR5fiEdD(p2rc3L3HDO+go{ay_dKztSm-ODRseU_$h?LU-L$CKf zKQ=XV`PIv1&CgwnEamXt_w(6u6_aOGSpBqF+Wf4JGvWTyc`=eWwI{@o}9C($I*r@&Vb7<#He7zN{#j#Pcgxi~>Yhm1@16Z@+3FM5_DRY= z4BC0E!Cf2Y#nvwIJBNx#XNpt1ZhJp`{I(kHy4GH~x$CwI@{9%rvfh(+ewm!1zu2JK z{727aPnsqlxH_b^-i6ZssUxO3TngGd{N(sAqlTs4)GK?pW%kvq0MmPcZ<}|_w9e?g zL*SU#fLo*6hNUF2gRX4jwOE^M0rAr%#$bFTJ^RkCr=Z<)U`o_bU50nb`8) zg!A=#%$4P>in+eSV#(x;27jFo(=jUi>rBDGK4&wXZrz+P&gA*kXY!7rO)d7WK5upB zgqOwCPx5jFdrhp;zwHlO;@x7$`rY*>Uv>9O>AECrp3jqt$2Jy-^m@K(Bs%x3MOB?! z+fK%GYJ0RS(Pn=&&uPjGMDc$w^8`=>9`j1QOXSkEmY;^U2B?j3#m8Bgw2rOuUQ zA=Mmiy-k1DeMZ#wIyG!Zu3j}ds>8kcCq}yXtT480d3*Hf6ibV&hD!>UJh^YUUAFfK zdv0>n)1g(J6&G|Toc^$G%G=fLS5=zS-nAgLHzS^V=j6Z$-$kaDHT!HXlRx$H!=d5M z?OIN}-2eMT%hN9xtx|e-HTW7bA%FAEW+Bx*E(P?ycC@+ZZob{A<%>!g`%SrZ+x$)b z^|h01560>@&*`;jPsNu;Hw$xTF!I~I_AXni+>pM#k_V-Xxg5|Y!T!OenNu^b)@nG| zH==*dQqu-}Xc=u+qj~Edd5<;(+WN1$*y?(-4#%rC){9te{7$F-fr-(}CuBd2o&6^0 z=pwsl(|%i9)cqbD{I+K6!nMP`%(e`j?J~Fix_dY6Tb=b7+C}*_JIB4Pk}=7T3GCHu zwu8&8LC)dTzpbnuax8krMrlCZobr(#(aXYP${%Q#@%?^j>q{F~-ml*+Y16e6UP~X{ z@xFdKaMYkY_cGDrbhgB;-CFNfwAtW;_YOH1)bj6{_Bh(Ez$@f!utE2=Ro8oWyq$Hj z?|_3(s`(6AH2hpt>-3S0Z|Piqel#s(lW&{wIHS$ucDt=VAibV4spaB^5BiC^oA~t) zei0Gq{M2%Mg?CuJR~UAM7!zZU5s-7FTTPjF+)p3yxp zThZtHhHAst?AdU+;uZ^iJL7c$*`t-`ZSNk*O+91Wz3^q3$}Y7YHna9R;Aj)D#^$N) z<>bcIN6zRb@_aLWP>nM>_HPz9T4(2JxLHy`ywJaL^rtbsmepG;_YHi$bzDlfP13@P zvdRr(*WEliIan{emf@7Xyy11bKm>-eL2SG!^B&@cWe_SmDV~3zqj*x{(1lB z8`COYm@qxR=iP2s`hBy#RpnCCxf4GPv-{Y#K=;}T$#U`M_DOs49&R>popZ*xPS#;- zyU6gAH+OH3-s_ilTNoiyM=zZ14 zG|TLGX7BB1K5jeqN1SN8XS+$Ana3RhKkq$Quzy{@x$Qfcf1Nm7uk;CaPZxIMUxEE( zF6-+=>G>XM-M4MX;v3GB(?(3Kk)3Uje<~=becf)E>21LF>CsM zu6wf0yu4DWra6Vv{5y7jw5GZIOwHNz&RyDd^3&en?39x9mQ0FY@kZRlUKnO(ujyChTkH-SEK* z#iFJ8SC6;rSN`SK!dl;|^@)6O+IxZ1x*p|qqpEroPP=#XX@|&eCT2b6ocu6Gs*G4O zJICYeri}+9Qx8>7*b7wGZ;O15qWd3tnk@`VaX&WB$)mkM%ZjiUVSybyclOtYOjE#bz= zX`Z^G6<>O%rFY!iq)OLHZBLHc9bO^1XA`?+ey5Trhv*&N3Fog$ZaE_$JTKkFyA&8ZqT zzf00kp9Qkq{5nlu>1};ow!VMdqp`Z71HUcWH+{l_^S8!Ej*S?n8#90R$JHMc9@!)M z&oznu>p|2M+vt?X#`ckM$CfDe9$2{D(JtS5cb8==cdr>&*5~#D%Np*rmD^fGFS%_q z<#vWo{g;#HshrYl9(*`C;py4~gC6(mpPT%bt)ZFi1F92 zHtNyw+szk2A6C`ga$?)gDdjy%&2pZXu(al^Th$EXr^YUP(s_im%*uAOI=b~--hhQ(m}$?vC*)@|;c*QL-lZQUvVlj#Y1?XHf< zKj3*~cE?gma~z-8?(w?gSDzfI6fRmPb?C8l@D$4%ZRU#aN+*2`k#@PTz3*w|*gcz= zNjl7=Md@KokB`b@pH}O%XA3t5w!fzvFumc;TOmWMEq!^{cHPK^yA1tC^q;tU@XXZ5 z>3KCTC#B@~A6<9HtE85Z7Y@7C8hj<{@!kP#Zy&mJ!gQL0Z|P5MNjI!Ml_Vv zXc)-!wp*oqa=hEDo_f`;P355IbX?!(`}nZHSdt0t#ews)}nhxZd8kAFD*s; z|GJwSS2KT7{N`or#-!hx)TL98**gQBMO~*~G12{8IMI4)K%Dr=+Gc)6mapH%?|xMp`vvM({roYpt!@u`yoAdGQiXA%jpHB08c{sg) z`)q?*D_0+@`)pxIc471-9p&hEqR!Xbw5}Jtj)}fH^-11TuUNMc@^{zY1Z8h`t@rM1 z?5@Pw(&h`Nw)5<7IWFVALtHsM6VH%i`%FGI@w~VF?zoue5jB?f=rFj;ea1_gI#*&j zbosIBh8so6h5F{r+#mY3nRaGS%BHOs`t*Gk{5)%Z@PakAwL7et(qVqfIU`PP>~hMv zoNm-&=RA*EX@{dMb&bvA+SOS2(fmozO4e;hD(a1zbwic-Xk6&zdj<#VmTvq;S7kII z;@GoCby}CVcG!7$Xr*(Z6$ezCnSIE~qSmL?RX0v*VaBA)sv**IDrc1bsMm>WK35)I z8=KR`Y5jcLyE&7*H$QsDJWqOTyy@5h_reoCPj?KJ-f6a{^7Hz2dKm0U*}Z&za*B^d z#K7TI`kVC&J3oD-ZbGT}ao$anp1*C!Hcma+r*7-#X@{zYAF^saA|^lJtmW5@gObCo z9aiZ#y;ORZSL(L2H`YFH`njs8_kc>(8_m-h>@_iL<%e-sC6Yb$=HCjw(7c1H%vr^- zCpRbbe(aOyHcYp0s&lskW9Qm#4F6R2;lUz^~g87USWn(svDkm`xT-o-9Y1<2N8RxDklXn^4*RlIh zI4dM*?Sp5dN4{B6)Aq{w%ax<=CJv7;wIg$_{Jf8Nr7Bt3QsAe>v@dpg7$7ep+ zu)ciL$5Vpirhe22kfE}m4KNq_n{^8J`)rc3PlGqn~sPA;sq zc4x)tc{bCQ9-DS+|LWZhUZmO#-0;A+(HpzXIqkNk%}?;1^|aCIt6RMu8PB*_`g)Zr zemZ*dOO1QqD)w$apDp9FeIDM8_bsS3^I@2(tHJ60`Nw5YPQ9wy0>0-?N{xIRrmKn55Eo*U8tnjww8QGTCdxOYT68(;Qa0S zg$XSqW$!OGThu`(gs4oBOj(l1rN#)P4z8GF8_wFfEO+TGE+Ivi9 z?L!UDM+7*uvUPg|fnR`BL{Zu1>8>xH&@+%R*$j%(=Zs#6=k49wbl>!PV^s!sUHA&0-c zsaN*ti}nknlQxRtS_}@T6!*^a;h>JM6Pur#b4!0@h51phzPFgD{Brff)9a~IzMRee z8en&qeHWJ{vw6OF(4%@)0(}mh&i8tMsAo)?j@JUkwDU(3#omRFUF{6xa?%d=>D}bU z%=;sUZND_ARqcy!8lL$y-Eeisw&#b4b%G2nbE>bqJ5+ULT#xr}-Y4sRPR^R@F)Nu*nRAP-c=r&Ge0=|2{K4q{YphE5Oz8Y! z(Hv#{hyA@LtqIq?om_F;5d9m&g97)v&y%k&I522d;H!k)*QO4AZ=37drNwHyVa?(i zjhP-k-Ra|eSKVC&W8HIF8?LZuZ*8zhAwTRka*U~sQQ{fDRMp#6Go}Rh?@}SA+_)z9 z8&=yNa$w%J$~QJT9<5esis`(atJXE_usgliqcy!;GF&QTy}miq>&z{WPmkUND@Ig) zR$;Qy*^Si$BFFg2-$waVUOMc|MWt^1sF2GS_rFQ+J92{mLd%WeD_w3q@Q>G#ByIJT zY|MMz-lKL%MPG|X)k5CCDNL{G;Z%3F?G2Bn-wq9Snp2^U{`lkTeMepw-;S!iAguCm z_wgh5=JlN3#YjH0x}x2rUEjZsEj&2xq;8$rK4EXSHQ3X^PsiG*;fHq)ZJO8IVmzzU z?rsTBuMG+{Y@Kb|Re$l88@;RTyjJ7=gh%g#q9ejA2Y$Yk)-(QtvfdC;r#Bzpi$_gc z6&t&~LwD<-T;KIC#@?T1w_|v^&5#yb#m%QT`2Mi+;H8JGEQfD>x47=b>nCdz4rwI! z4vRNf^J>Mwd!MSi9(ieAO2_{2IlE&Ozt_%*GU}mp9bgjXJ#|3Vmcp_9I=FP-Yk0Tg zh^tR?^Z%Or`ThN%9gPMn*1JufCVlYK@Ydo3&O>yL`@VR-qq}!gf1@=gUp!cw{a25I zs3S981RUNJSG8q)zq?I8%zfjqmu36AzLK73Q6(YkjKRC9{RTW*{>*T_*e?Tjo+j= z=8tdEw92(Kv*+T=>7~wn2(jFfHnocE+n!DO3$q>$&$*ZpAL_WVaSMffnw!(rgIUQY zM@MX~($ete%cE=dT)ySn-FUEv&Z;)PvLhz~hXt54x_EQSQRSH6X9Lcbd3tNb>t-=` z+u}7Wor#no;|3_?sl`T6S-hp_jvn-Cu_B8{jjrhC4-jFR*X!}$-jAV z-p5@dYKO1i;FN5%YHD_=EsHi?=r_5~rv24x+r|!E;WaB_NU+VmORb_4x_dWgzt4Jd zvhML&0}h;QQv0$Zct_ot3%70^cr(c4fj{i0|H=x8@xV z8eqEEGG^#lmr_?h$9aBg(5p_f56x$e{Nk2yX~UFljVlIiS)zBo@AtB&x0kx{)%H{^ zqhkfx?D+Txe$p;;<*5}qgvF%kH=KU$h(fkVbbIAoqm&s>UrZSzU6HKM$l7smi4f2l!8%bGc(wx0JXqJCYp74ozs+O?R$`yCgI4;V6f!US5N06c`#M zZmeb3_0W($L9w%JBimjqWtYEtbZA7qnYXVxNlV?db)G6q>Sr8eZKRx^x!~PBCjQTXLhaPFX_Wjh`PCp;gsx4{Ab<5|n>7nk3)_Dk~{of~ieTvwd;_05Jl^Ornm zV?3>{>u$xud|G?@lQ`>S*7;_0spAwl{uq zvtB6`PrTTEdg-)-XL}#refND_t5qFa)y>lFK5S~6fvz$2yq=BQ(6!IC%AU%;={Lp( zRgkA_5s7N8eSCP3oivWBBfU+=?|P-CA#d z*tb)&>iSQ-Gw;W~avPqJ_d@>8s#)%y6LXKnUmkE{otJH@tK`i=2d@p*qxEfCDh^lg zv+2ZAi|MwP!>(6xx;K6ByN1%jlZ^*0^f_}mcv?(@@~JDguQl|)TQker^6ByVx|M7K z-I?Ui=8>vbp5@N(YvlX1>Au&Cn|HojYUaN8$Nge+BV-qiYkA&3@yg>tMDmcm?9)fz zGWSgIb^fNRq2uZ5E_04|sQ%J%e!Eqh7sL-*YWQ~N%cGa$XOypU{#hK8$X6 zl{2E^b47+GKJl--TQ`6FwD0S+`==kf`@vD~dw=PG&`Q>BdXAySBeH@{Z=105{v$`- zl!C6k-+WxQW<$M7HVrdhKD2eHzT!w1|W)0KvY z+9vpqk1;s%)~m((DJgbubt`O6X*zqvk@%-q^BVu9iZ}Q&VS-`z+E2$_4pVK2$uHM4 zCF)-A_~9{|DhKqA{owmq%4GH3b8^mW)8r%X!jqoGP8@s0a8LTp^_AOaOo$m>Rd<;5 z%nJW+i)n508;*z^8=dD-_i~J4(6!X&GLNU$=Sufay1do3P4pZ#lNf(Ca#eiLn_bm7cEMl>PeA^z^nvmvxvIddH-po6p#=F5{&w z`*x|*bZuXYrfnA8f0wMYuwG|d-8E;YPF?OOTHK}Ii7%hqne6;9_U*z!Ho=!_wuyJC zamIf8!Hh$n8h%Ky7gZa4FvO$H`UT!P3v2%$>b?aa$|~)D5KSy~khFBmZ7kie(!eX0 zZj68qg)jl$x&gu^?1lRu%$hmkty#aH@%Q}n zeT&W-Ic4dwT2KGQHy{3H`i|cmj(a$9>|Lwh-Zt<*&%WUP?y?~V6DK|KV$;U74YN|8 z9(UK3+b8af&wl9K_3syV9Qez< zwFP6JJ66B&teECKwljwI{pY@mdaQfvul@R6eDCL{{%-FVRd3&V_t|$(zM$XD|55SJXGW6eXjeq-@gNxIjIq~J1?$mbv$TUzmQ{`T>nouO94eJ(0G)<<1Rd75irXu;_+@b5QCFFpI}AqO7$Y}=uU2{$}5XyAg3$rEyykKOz6nGfz6d*J*V zk36|~{kPAL+cLMM*Hh8;%{RV0_|s#**m6qLE9LXEM_)JMs??9)J!R`F1sA>2^uj;- zY@IabuDi-7pY`5C`<#qly}WJx&^6CB4=5P+=#=!&KRA|q^Y~vsy5-(Qj}CZX`HK5f z_T;>J@&TH-A%l?^EC2_rt+c zPo$mRv2IeS`?LKqf5;g2^?)v zhC}wq|2Woc*go{qxf4EJf7zegv*T`?f9YFaKRdZ#)F0n?WWej)Q+}~-)so$ZK0oX7 zWgmUA_xbW2uTMVpi6vWZxO(5rBUfGa-W}84a>Ty-$eWMEy}kJR1GkR(Xv;gJvo2k} z@Si`lk6(1#DZV}bsQvt#^+oAR|FOyU@S55_HyyZZ!aW%moZk1|=aSA|^3}yJo<8o} zhhIBo*M)a~GQR$np)DH^9De+{BLimcS~RBJn>Y9C-LJcvue&+3;cs^5b)KQOKl4b< zj*+_)Z``-6@y@nS+v;ci(C|+C)$jD&bU-~7*m~Cu&Buofx%!6t*5CH_v`c<9{FB~SKL5v?zPb6!{C~7a8zE#}7|cJ$Nkc zgix=i0zR4Nj=SMbi+=1$Ev}E>Sp5Zd`^itaar}LT(~|`}al8q;{meVfvBUAl7*2Ph z^TctwucaT}9&IL$(|b(&u_sdb5snuzytgSX^b;aK%fQMO*z@p<65Y}rg+K8u!>bZb zRtfxD2`BFa9z_a}XeG;^F5%>bke?>uGH(psNRDLH^O=Op@^iS~Broef%%799;)T3Q z2$%J&kZ{@ljS?>VyH~Gn4fJ5z99b^1Y>{p0cV?--XW4 zslGBEP_A0kg(F zAe-wVTH4HSNRi#D_Je1c#!fhyXPM&1@s}Nj|18risVo!8C|e@NQfo=7>w%=mKeC<5 zN&dqwJ4P7wKf=cz*rwr%%BrisZjrW#Q+jsqaq4MNz53dF_rY#A?4E+%Q?c9ETCUc8 zs1Hb1kF4_KgPg4OezN23zoaSGZg3St(cDcX;!C1Bz9=-0tWG3JCl1TYzQZAvruK zH^Vs-uQ8r=*zWCxzbm5;JMG?qg?8_-JMq#bJZ6T6!LZC8O3%z)Gc*p5IkZtd(7UwO zlY{>z5C26jK2JWuJjM1d#(2Lt#WLJ*Ji%@it!Q>1=)lT6Z|(KX5j` zimfBg_^+MK8=$q*i6?fNH)4y+K`WQT7MFv5E{Cm6cnP4P97#1DNi`jbnueY<=&n1FXusul)c5F9Mqk%` zbb8e28NHK7Pl-+*o!&or^o)VYqpv#~0XW5xJi0J0d34#BSy*&uAds6T%XZDxqjxrE|sSQ9Qd4`~c zPVx+8HWANS{t_WKKQE0WLYbaig2ZgZ`AX6Onqq^(?vx6v-xp0=_KkFFHr zNtrS{mvh}Q*Q#F~-bn2ywf<8lS|qw)`*Jrr9M{d?)skh)&Z9T-Sc}+o(hIE8zJ%P%G`*@l2}iV^s4y*m(_lJ}tCYyxkv*Z}3R#fj4l(6#K*~Hi*P} z8e-+!(hKe7nd*EwYQLMbPe|?DWM4iJui^s>`Hm1pH`ihMj;=GYA_FD< zEBuw=Pn%?Kx{Z!aA5O*5h2)rr$3HUpj3R@o3?h5K9y#K zPlD~Ot~3uK5~jH)F}*X$)ZEk1Y^NwoF~bbe(8Tt4QrK<2TgQwD{6FB65!`;CXn(U2 z>=}qdlmJCLmX>fwiS}9Zts&5#30%Y41HKr8Luo_f{4D_$$(sVUjJAL_@Gi9u>ZZ{c zyk%}s7*H;4F{~U1Tky99QHth*h1_0fe`X>rbKGb^Q*)_3m1~3Fc(xw#k0*yyoA*0X zk8W_FiP@K@;yeJ|XcKl8_D{X}KbT5)PrdnjtkA7KiEa{a1)v86VU~CBHAjp#GXXX) zHYPr+o1*$2Xmwc-*%q6$|2Jqm7oYPe;xgJoiRB?>t63X+zz#vy(~}^Ca>Z z6Qy#(_Od+fEKgo7AxBx3;s)Ag#a%PMkuoe^hnj-8y&Tf^n!F}#LDpVVycJuJwAajU z#bWV6?7|dgiM^x8@xyeCEV0+5Mq>+R*lVtIU@<$cjV>1Ydkp^;|K<^hz2pj3gw{(@SQ0$v7|B`~p>fnQ zFIi8c5%wbvL{K4gw9sM;4&f~gSZtvTSg9RH`D&Fr;`zL7M z=r#7B|M-A`qal8vU8nvP(UcYHe_-k{9#wq6dXjIMde(L91^7M#FCq0`!HJ<5IciF% zrFaX-OK%Chgg@`o;uB5#?o=o3A7x$P zkwB*?6qV}VC-pQ;D%5u{^?s+0GWE=S6v1#JP3}^My@gGp^Bg4O- z1r?9iC?mi11|72=g(O$WQJs3$yP{rH>Wv!qTW=H=v%WphdX!ZSs|VBxBG60KgDQz8 z)(>d$5jpi5Eif{%frQmd2PP~X`^ldlXz@8YWt5TMDI+kLQyqa$?bWHr2$*0)y{Ob1 zHSBlF2y5mP8n7H^duXPz4VTYhT8GhE(IHc7#cYK-8%)*8$>M{sV-5|P-tTCOhU4oG z(c*jTdN*NFvH{{=lywPJL@5o*rJs-n*3dgxL+@Y>y#oy$y%HNM*xUg5Xe_`Ag8}J# z7mGQpq$p6d{{doWD=kwGqT;BV zU_ECXR%qs2`!QsNSIPG4Da@`vjvD;}8zrrz{7vBS#c404kSwK%0Xm`%>WDh1BkDj$ z1ZCiZ3bKWY1*))vQlUbjGC_%LCq=IoQkkGgFo4i?1N$uwEHO5W!?@(V4zoM&49xDl zOA%Y`V}`wuEyig0%Hh^W*KN8qv@b`290JlG=?rMcddH1mi2(`RV*;u zcOmGy^qh7s_9884V!H}7Xfv%CrO&9>Wdp2A04dtDg{OPs;fJp?Oh4qbWHwD@f(T(nD6 z3U8gsL*v@UA}e<`oT4RbPyxpDx+c!P%#Qr1K@=j*#EHaSgF1m68a&Ouv0p-`o%?AE zLEE+w_Q^wF;>qxbQ?;x@sI#%wsii3G%QDFnGTy<%LAF1e>}SE1tk4g@c z8Dyq+3!Oyyg=7E!L}*e`NcC8C1uKR)YaQOi>k#5}?cnD9P0VS!07a)tXV9rq|7oi- zjZ>vF)u&1gbbe$^_k70|`WAZ!&-((Wb2-o9&FzJ0Ur=Jsvm;72XZi`#v{{t?my zFXxk&#mq}RC-ZD~fUjY42KdJ~d(tf9BAg<^TZ*Z8nq$CYim4$q!$5?hE5Z^J`4;Dd zIfq)D!{>aDt?Qeyb^SXn&R!*NVNrS%Sji47N;mk9cOVWAbs!GgIuM7Sc2FGF^d8ET zMI#2$xUs|w!hDP8yzMKV^S$r*_07IEsB0ch>V}to;5%Nj!*?9Y24UiWazp^fcciw$ z)AGXYg{pY^T*B@0UeCb=h4@)|HAC~Sxdl&;tz0?2jStv92Vf3KFC^(2lAfA~t*LHo&CSKuTp?`^-9B7PZ0jix-J|89`&RhKhHeK& zC3FEOgyS>^M5SRs#Wp6_ZBHOagQ_Hg9k4I^1F6R-4Gj~Al2YnOqiK+awrpdN21bMQ z3^p?IUprL#6(tQP!zncTveTIzZ2kqhvzaN!(VN2*qdZxR^WhezA=KM^+U_s$XNZLG zEEnblS9etsFW2te8CsKxv~k1*{!}4G_al^$rCjZ*nr%Lnp6k2Aa zjh0Jla+ykul}l=hm`ZeHOKQqV<)T((#khKcBzJWT+xr=gouF~`L`{(cTeMqKo`}Vw z+_oI5ZgG9nw}i&gCEnCVEXY1D+2@5-UNXo_ws>df0?#F}A`&A`FL9#zp70WZmvnm< zRFm=o1C0AVnW(ON@+vrC~{|MXQn}qT8#rEAT8?LqO^^L`F@Xz)y zTQ*F$wfhER1bq;r=BkQ=y?rMtw)Xd}I?zPgM*9X}V7(VZ&GL#vy?x)}LcDMJfz7h2 zJ+i8=OjXM(4)!EfgCNgTU1F+QRdJ{%sTu^9&9HpvP%Nl3Sc2;wa0MsXxxNvY1pK}I zNXv$4wxhmbm<>GI-r2Gt#nuUiJur3~jQzT|@5_p9Wb8I!Y&(qI31biU_I-{E!64r$ zt2!d9>M&I;ulTwrsUl;UDl*nkwW{K9Pf|t3?u6gXC_-+?Sd8NT6y-U%V=t`Q468&r z!8u{o7qDs@tP%!;MOM{;A~aR)fmMbo6ge*^6uD8i13C;<@SPhB-%)z3+)#$OC_O4p z6rlrtzk?#=RXhw+jYma!4#phfL6j4mXsS8_V+~a( za$Zg-a$&5Y3Q@&F0Z~OWg9`j=CfYX20j*+e2U^954z!A49kW|ooRerqFoI?TlW0aT zf@TDLXbA5^GlEGpBbbCi{6t5D@7oTvo-aGldOq)<)`OA16eIr$jQn5H$UlOzjljr% z0we#4(hV*7W2YQkB&u6@W9pD(ma?Z5IyF=Hgm2oMSADxMf!IP5h#tu1>`{8mw+j=9 zU8Q?k@&`=u!KMLIzJ%SSQ`%v7>6FfR^5g^N54Q6MPk95|gQx6{M=yb~mYNiL?(f(S z^|yS69>KQ-6OKvkQyji;+tU+$@3oiZipfO>M!u!^z0=oGlaYvp7e|btY;gOpd;@5H zGNOG(qOV8$QZvuen)8td-P2NBamS*@%+m)vU$)P1_&#sH4o(K-84v9cd*ydjZZY!I6)Jb zB{-vVw9N#Szk4lg@E5EoNBgpAWR7t~0a<(F^}EIodDuYM(oRu zlUK%dAF_!0PhL%8uEBcKw&x(Hw$H41-{AH?lc%WLCmLxT%!fk%3lmvd^CXGbm(e#P zz~6)&gTFuV)2^5y&|u_f8~-EtN3`EZiV$HhwbDAYJ+SY7mSt(p%ap~w>_e*CRnJo0 z8upDL`)HR!1uGOjripFz?VXb?AFF+R+8Gbx{5}V1K6!g#|8vZ!j+*;Pg?-r|!~R6< z7!h|i*-yK$pH{G+%J&0o{@nI|-oA!0_}X8}C8nS54^;e-sqCnEnN-@BO~8`k7b~NF zn18fO@r#ww*|r@;ZT`3Y8`i#tF^+A&vyqs8et%KFe`FL(YwjY7s!7y#uwm3~ch+{W zOKpcNI6+hGE@sz17_)1X4f+mtKN;PFHZ^@Zb%ITVq1mxS@2#g~{eD6+F!5}}10xGkHt$8_BOE zZ%pdblkSNuz#paIAh#v;=@mJ&TOYa?j*ivhkJ27->{I`-2aH3u{`C7D<+Gn^=3CE? zT}+DT*abb=F|zqxery`eZRwcnG7<0xf@|K5s5Mg9xRRz9fWgA(!xRllz?v(VbthAis zywRib^U8DFewO%A3I3hR%1ZkDm7vP6su(?ryYZ7()CNSGla)1IVC+35gV;tZ4@mJG zqdJsRBH!6^zKo)t19xq7>v4ArM!Uy`8z8ksN)-MSE4&$)_d2Hlv)Tm6)+d&h!O1F1 z`_xoD<% zMfA4CZ;Nl@ija*Hy6Qi9{?~qKrV+bYuKMp?D=#y|SKa7($suH1t8R=6*ozI=EAsF8 z?F8G(o*SXTOs?gfRr7vc64%O0xw&JBh8&}ayt<9{0?4t?zSo@Pj{mamC03YKi(U1H z@rr-f%3m`j%bOO>#kY1-SN__yax_P(rl+o2icjxWMkUvuz(*z+3@8>5zH?#jyRh$) z_KUDzB=%Rb%5&D=O0+LhDAw=8H=Uv^A8C)UCTquJ33TU7+_B9*Z$jVHI)ZO%xt4FM zF2cuztMgsUH&pDQsQ^h7oOucGoO|>*_Y7+P^qh~ zb&(JQUHMy4r13}Cj`P*!q=8afD;A)rO5`8~CgsAno73ty#BWaFQ3sCYO-}p0E%s&q zKo&CXjJCgG3kTXBG7$T+-(tg}h%rKlg8wGcT>mkHmNzXe4fY|e{t!P}m0=o>>YU7~ zbBS%*s%lgan-Zkqqae*f)w#~wm$;mDo!xF4=3F(iv+g@b<*@js`i?g0_MI4^dVIU(IXpFK7e_>MyRCHC!h z0+Pqh2GB~tXZAw-{B5}LV<&!V{{eRf9e^Be$CSX`06#;vnrp^J(W+qVKzz={;hJ!; z`XQ+3|BBr;VXGY%T0z@T4~b{1dZgALYHI6g+Zpw`bHz11qFk$75w7}8t_iPIf1KFV z*)!301Rh8K>o(+Z{)@V%WP9@FWXD^HaYs?$&J{Neh;rUOEs7OOj8QDzDr4f0)W6ks z0ZOF)EqsMJi8kJ^+tXox7Pn!P;dY7n2f?%ypUXIw`u4umx~2%UcKfp5Lwy>)kW=@c z4*C!dZut;p3vfl?)$aJDPPgi12fD>~ zI*&9(RHeDf;sHgbmdnHyuZHbS67C zC&nFju1FgYo0^Xgd>nQ0V3z{j(ozd?5e|a!_)g1?w(D?55X#x;-&lv>u6ua}08{|G zB2xd3^CgO9bPx7ruhItlP`&8u(ezh50hGScvhp^{h*suGuK#p+b6S2|>V#cs_NfO_ zS53sX%U?yG_Ej41_EI9AB;mB-2db)5SIsO+U3ppRs)dwMw6CkvBEC$i-;;*BDsLSL z(P^u^F8^5}MW)YL|3{)TTsaV#5`QEaAEsg5 z=rzu3o!2>Yt_|$*S$~hOKS9zgkKX7*jZYA|&|UJujtYQ2{)^rM9|o+#x5x2$nn;6a z+Vb5fMI3bHv+mD1;Z^%`D#H}S_np7P0Z5~*L{*&YTGcz&Ro7gUHsMqItxw`e>Z;z| zU8|-?q3zl0)&Pj#?5cmwb#$960$=iY#Z|W_(!OjkbQ$+>*q^Su`V=`=oZTCW zBGA-3@eD!Tcaip6E=G2L(Xo3z?9XOHKAYtG_okg**eQ0d$nG6Md#7UWdfMwod#7P< z9_``#RL$L86E;;hwe1A;E6F{IYVo1>;T!6{>vq!_u2mD^1FE_1)rh(coxJO3zWyE3 zYG1eF2=_IX`T8;dm9Im9OHRPwShc?uNw}wg%#M})8y?`_1p)qD80?>m#yUh_{b$Mb z$9YKB^i9n_npVG;?HVCO-8%~&)S{zuVEpE`>rmFTW3Qu`82}%E`sTV%TV1QJY<1PY z?`r<42m7oRHK?y4Lr*Hz?L{B=3BFAgojf4Q9-TH|pglT!K#_gsRzeopXEr4X^4vq znRPOT9JnEVTjG&dBC3Xk<*jQ%vwc}9ZYfwh5SKvFU7;C}8^@$zI0qk|sTvUF8eKJ@ zD7Ah}e|U|C^ETq2GRM)Q6E7pD%p1}Ri>;kHY$K$(if zJCUjZ8064(V32be-7=eP#y4%uuUK4O<-It+G%uem@XUP@-jJ1(lszk_%(GDF3484< zE2!`m7dT?akB=V{H+I5BjyZXio&txr%uz8Weq4OQ==}KMj{K6mvbl~0o{Gw19Ecw^ zGHzsoBetljs=V@&i!a7ghoocVT(5U-iKo(AU6Jn@i8lvaT;=taPX z&ib$S4$sDklv3FF4Z7mOWMFsg98$Aj}L z-8CwjjquAXwpHXT-rrHzZE@cytQWB5RehrX(>Yu+9Y=E0g2{DDr-RYh%_R&;oF9@r zU1y;*pB7U{Z#PfhsFaOkuuF}V5;YU!MS{jSJcyLG#rb{&)Z4xHRK z+Sxa1B1AWlJW_8W0?ZCVgylQsjvlMJ-x+yVx5(UxzOlH*W@MdAe#9B}N1=D16iMsg zca=E%Cd#iW>Gq}SO(kRpeTRrr3fUp+A^Ty6;X$OMn`8%EV0KV>HSqjHNJ$rIF2+FB zdrx{Je}s+Ac35ulSpMJHc?Ufa8<_6pIC0DA4vsry5Zg4(C;dV%n=J!-p5bR;X(Wf( zz&cWSb%t;@{gNb&%}91NBM62(MO<)-l;5i&9gbvA|4IPgjATy(tMGooAdpDY+rYz- zHow2(2;B-ABl+d#2OL<(NOrRL26h?BIY#n}wF%&tGI_eHVlKv{ukCZfzjQ% zF?f@VNG$%avj=}MQaP~p0qkQYPnQ^s#Nr;CJ(xYBc5SvH{5V|$wZ;e?nytYf!!eco zU%;!v>0TZc4p@mhG`vGJdj6@w=W6uRZyzdq>NR>MYVd50p8XnmnqjMW4{C4`7bp&P z4Gp6!OQHtpIQ8QKcVL?m;Y0B!aO%4#5l*vNfhQ4&WYvGU0W+Mg=?QuAmlEmuCH@3n zOdt~B=ipD^)dV70_1|K^OrFkfg}mqiNY5|{7cG%+3~Q$RP;67O;^N}76;EW+!SbS? zBYByZY@=k=LpD&d;`G}FB`cm{z(M#-2_J%OQ4ZH}+*)pQEtL}Km&=V}fD+;7;ZNwH zc%wwP1AhXS?V-!K0-ug;N+d7i9)EFw`cnx+BKcVS30(L~xNQGC z>{BBALi`E&KN5&!)w9ch8GbIdg*>${N+ka){0Usl9j$iuMf;^>)qj?R%XY?d+^XkN zN&bB36TEjz@{tn$94SDe6>$ssmnFQ1gcnn0B&&R_gv;`~I8M6dcC=5Dm+R}WBrn$& z&E+VOp7Zc0?3CkEj-Qnzj70KsIlRcwV0@>9%X)@MxXe36DrY%P#7j@Cyn}gpTFc=V zl787=2gfO!=%Wa7Nq8^5O{)S4KUKmPN%(0JevgF9v$!`TT=Y={(L9h6+0&P88H;QQ z_mBQI+dUE>aOWhYx?L%m>=Y>9TfSKO@o=PhZp03hdP?)@c$H^SmH*IOPgPt_ zesOt`ry?i6YLSgprj)T0t<;;yOSQR*hd=Ep|*PF3T$k`W@E7!(StpQ{pL`TUBJ*RN$FY zJy&5<&YTi&{=A&Z;u}0ceACMd@~S-MFS*RD%3v{+L3OEsJw-W%6?xdTm{nNe5h8&x zzz!I%#z9U9@$J&Q5?E%V)9o(aZkJzK6_5AVr6svj$L8RLbH;}M9doFb_>tH(@Hi>n zf9z%%8V>K;0#rEY1#(Ew^8UftW51t@O}3_XNll98MsiA&ccg9VXXI3aov!kWdB4aL z&}ISNfIq8Fl5L8irOhVBJDMYqpQ6vA^K(jRAXo8kH4Yo+`h1&KR{p8Ttm0qCC#IsG zBYqlxto&nvsrVfPB3X4?`6r-$RQcn0esP{LI1@28MEQwzD`1uV zwLHH#j}&S|KCw^Zv&#NOHT+vSe=g5R{?mNQ%HOHsKgcHqLwJ6%vikp>hChxs zaK2*kOHIUH1=qlhl_C#%S26ntNq(}{x~zIv60L3 zi}}4cEO^CwF*d}ukfC)a&o5)NZIwO4@IUCD7;!13(UL)wpU~S6`Bm}f;sw8*3sU{l zkRtMndRc({*0Q54jeIia;L6DiYU9@Y7mpbmKgzhtg)M{ck1>#OW5%%KQiU*U!nx}C^4wvXzBZsoAM>IbIPmq+otUpB@!i7k>q za@CJ_)z6IDXzWp@&Z_QoBN2XHVaKuG!?kj16bI-Ym@E<+=&C>LT7IM|8aMQ$t-Nd+ zpb2U9od=Q)?!a569)l`|<5sClu>BHU$}?}3IxybIgIj^>Pa&&^i67+ScjBkwdpA~} z0rl1WaH9|tOnsFNEO>R?c6LXPX*`tT9fln){&OQVO?0iqO~e1fWwsi+)P|p7Ycf>^ zZWaa_=Cxw?z*QNid$;RxNbjG**>mOJJ5yuxq-$9zU~n&XyebztV|7g@>W=kY z7>nCV`E13N-~AR>#MaJM*UB2)|HWn~&+ic3@Oqku&Boob^YPZzD`Q!gjT<-j#WxW+ z)#0j-Fh!=u`uC9Q$0sobwa%THH|X`41P=!X5IY3`iNlo`(S^rVdR?3DCuKb+)p zrlqB%PfhVd?hJQEa!S$_DYMzZpe+95nJHQBpuYMa78Ys7++X0 zGbN>DW@lukq$klvAe=fSH6EE$+;W?3ASJ zlw`M4u1ApjvtcL8hR~?0uC(Rjftb_++rr|KlF6P-&jRl}Pl2<_HYcwjtGF!RlS~&u z^D9b{Jym(dC6zYs!a~Sam3bO6icNEMIe^yuwomYEMDd;?h!Q$y_N@ejf4|mwcIpk_FYsQC5W-k;JRZDyz%O zy%klSf{fH;nH}FFA*0-RxDK4@nJ?uDJW?(lsqidt=T%mg7ggXMCySesXcTeVmblAx$r z1W-y@RmEbl506P1LZ|{Ug^}ZPWsN;?Y+kj0OXQtbVPX{mGa(bnH}&V6toie*^UBJE zQU1*e|0YV+zf(T1n8Jl;K*L2%@}0S!vQq!1FvIu-#~%$8eq5^DTT((%Z5%ZA%5CKf z%DlEpPgwygRQ#k>OyBM)HA0ZZCvL&3!Yz0R4Qh6V=oP8SD0E2EMis2D%wrPRGX&DT z=zk0mW0QU%$;NMJHrVZ{$TQ-g$dgCBbG!uzL6gP?u?ikbe4N+K3nDG^0CBC!0<$NS z=*-rNhuWt+ltRgg<3HBUpF5xRI-7MqWj!wJx8l}(|I>B~yNp`+->V1fbx(&d%(DL9 zw)4N$9(45{s$6vW1TKm%N^Drx|5N2DXn!ugQ0?f)^8HWev-%_41>K}8G@?%d@e%wjQk3UKIgp-ty z<`buI%af}&Dh*3roC$#jvBB3mc_AnC>*Orzw7b8t9MS0$a)S5g>Mw*oVTO+XWc%xI zCx9%YRX>!i=BFFYFZaA>DW`_yj4 zo|9ewRQs%c{M7pX-}2WQH$SyLL_4sSkF|cR{_5((DreOr_J3|Up|?S7@U_lPAt(F} zB`5lcP;%nBK`1%le<(Ro-=XBhy~Ls9_$`XsaaNRz&?DBCVl|(|?GC^165tlptD;N^i{p-pae}a91t#J|mMc-n)pAVc z5YOGodDklPzM#OiDzM!Oj$;Z;JijN~;^2WG+aj(#$QXSPlah>Gqrl2JCUY!P$gNgj zk1Mby1@_TVz}BQShzhn3#9Og5m{^u{LYGe}wqhTSvOBWN#_~rSZO%eO&fg zvJJL$d!}y`#jbeZOy=*;J8iixV-?s$1?E;@1ssz(7AfTJP+*M;>=^~NiDNRyM+&)v z3amTt%w&HDDzJ+*UA6j+G@tL2zzM--Fya7?ykts?IW3T&$a+pWNkaZKju%_j{q=HQs@?-&K< zQef98uyT&c9Lp4Ps}N>{Y477I}})>0((Y* zZQ>YTF^-QEat9SycYd-h`#Vs9UBoe&Bavfr`^{F!62=TTfZh_D^y zsLhtZx8l)`K#uPy+OoUCm(S^Sc4^q=v zx%D*l2>ov|`DrHJ$TdF3>QVfP>es)7mBV~fUid}VgCcC=S6%;k(Q7PzhMV$&cMFRj zuZauZN16U&6Hh=rQF1YV&-3F3Z0pPP4-3MFG5zyQyp?Y~$mCBmabeG+O#Vs}U&QrK zW#!Pz#DzTd>k+mL6Bp%h4lCzDCNAV@ER3+_n7EKHWA>bB;zIsLX3w=IF6^1i;%$J5 z3;A`dypkpzx;MqkLR1b!k#h~hovSi`mt54JiiLkAHmwM_!Zv&?!`r{zVHArPeQ+s$f_WN!=zJ`l;?8mGd= zs2+GM(l#Uz;CqqmZBfC8BH3HlRQUP9AdpD*_Nw4Rk?bvDDttsR$n;#S!Q(afXbnDA zgOAtX6Eygx8k{{tA9O6zMjwd?PLa0DfU4x6> zCGc>hEi(|{dy%$m4L(DI&(h#mY4B?_xOk&o;NeJHZXm$-B5iXtc!35l)Zj%L{CW*u zqQT2Fc)13z(BM@Xe1QfRqe0-|NcP5~K#cYxZ8rsj3}33jYc=>S8hn`szg2^;(BQXg z@H;g4of^DBga1~8i!0oLha+wG1p<68(s(m-(6LC{?}IP`B5e<7@HHB|QG-9M!5`7! zf7ak@HTYv1{BaHbga%)y!JpRP&uH*xHTZfB{=5bkzf1%kj>M;hR4LNdq=He88#H)} z27g6^Z_?neY4A5R_?sGhs|Meu!Qa*3?`!bw8hnQa|44&>tif9~_-7h?w+7#%!S`wK z{TloW4gQq|Kd8a|*BNAiNSptBClL3a*97AJ>py|G|2jh;?mtft#QoQ20&)NKpFrGy zUK5D>&qo4r|9MRy?!OKYi2KiT19AWPav<)%&J&3HuXhFF{_9AAxc~e#5ci+w2IBtn zzskO|9V;=?!O)ti2JX11>*keU4gj&JUS3h(v(k% z2KQeF2-M?0e-Fg{*8u|YX&U|h>q3F@{_9JDc$P-bbPevm?i#4ae?2D<_g@zZ#QoQo z0&)L!sz5wXV^6*Y_h|6B8oXG8&(q-k>qUWfdNuO%gYc!e{v0i5=G%SytMNZ+@DFf_ zL8a$hTo_g1n>G0O7`6Nm4evM&o_K~@&qQ2;QQ5OyBj18cFe-UE(^uiK8u`yq@+$f3 zG`u4aUuUL)1PhPLf(l>W-+$3Abcz0ImWyL$$uZ>-H?p2T^=O= z7t~jb%|AaE`j4WVV{Ffu^1`0ayAkf6=L`Akm>&Q6m%wjldi>{oLJz&$Ge$a(6Y|%v z^10LG75J5C7csV5OWA>o(c@p^h%pP1M=1J(;$m~HS@Fe6jSUqkK zu=sh{Hk#S#zg{Qgk1+XRLGm@s&I?Uk$PZ?I`OkxdJ2M&8^gZLVyK$H zHBN`CF*dP>uYhswALtDW>PwLH1NI+<#q8l+-gUt}Zs^g*^*^#Ms7~xX}MT zvnSES@8w&O4wCm@Clq>~Wpn@&o5aV zzH8z_PX)7onTZSgFJp0ji-`;QPnrH3OkC)v`^#c%wI(j)D_OZMGI1gQ5sSm8gYX!} zyUxUgo_fZ+*2IOLT*mu^i3|D5nEpSTxR5`@%Iy&o7xLFL{r>AYLOzk{e>g~f6N?{I zCQm}%!+7C@1utUt-YQ`8{>5)uy>B;hq32&fVr>5NXklk7)8qf0Mc@}Od;Gue2tD-t zX^hSPdySBxUugZRXupyWY+tHM(?_zw7`l7A5OuEM|2$iJwOuh+uvK{@a7_VkVDHf+u0mQD*0G0h{*hVD&OO2=C71D}wL`nf#_8{2W&P+k)^<7``+J ze~96a2jO`PZw$hVS-E`_gl923adQDr!rv9Fe6A6&>F+<8o}wW9Omv+ww#gC$?{@mNc{<2MHlsm=?P0#c`<_} zdD))xxIE!8lAa4VPI~B1=oceCVbs?N{8DUFB0Y39Uf^zq8hC#RpDE#VHD1Vz86)W# zDB-n|{23B1*W)P?K2(yI{Ss%;R=-AZdBTZX*fUYmBl|T?!e#y09JlJfTEb=h9!Za^ zzgEI!{kKVah(p*Zu6S7OUoGj8_5V%6<$96FuT7GE9WIx@u78mA$nv^&q?4E9HXM88 zb|lMh*7zmkvYk4=bn-gCbn-gCbn-gCUeov`-^Qp>-^Qp>-^oK@k_>KJ9Y7?lh^sBlh^sBlh^r0SF1#SCAY`7!ob7vSJorT z>-^Qp>-^Qp%l^vawJfh2ujO)}vtU*E$hhp6uHJR>x^mFT>&ihVFPDSt*V`Ju=xkBt zuZ)M|uTEa)uTEa)uTEa)?>id5WIPpk}d7ZyH zd7ZyHd7Zy>)m;^zAB2I+_UqcItVfpD`Ky!H`Ky!H`MX`?*M}OMuBxfZXJ;6=?60nT zWIeLHu6%Uzy7JM<>&l0&KB@ebaoJ9tUpjf6Upjf6Upjf6U%NDZ$#^(^>Ev~O>Ev~O z>Ev~OeJuGUkIOP1&bZtv>5<2^eG)FNxYGI8%Mv~e+mx*5gBKexJJ+PU+C*F>N%;K| z&S9qKCG6lbDNA%NNs06mKAv`vM12YTQUf-xg9`jIjz{ygz=a+7nS~{RPv!dqE%+6D z|7;7M!S@{&Jd5v(^K_wqCdXqf@>lcyi!68!-;cB4*Yo``7QBw{Cs^=%`MxLz6us?J zj?qf!C%jq0W%fkiT3Z|9Kbk#R~a7UC1w2$nWh!evLx@ zKo{~y6!KqmAy3!5D9Ppdr2(;}wfxUl$bZ#^ytv~~*5BTRe5OMG!7k**oocfFLtV(% zDfEBch5UUA`NLhvKdO-brVIIhDdfNHLjFC4yr^@^X05LS3i+d5=ojzak<0T~7xMk7 z!$Feej~ftMTJ0I8kpHd=`AG`-@4Jwnu8{ws3;7a-{E05)>lE@GUC94lA>Y}B{NEJv zcwpH~*7AHwAs->hJ9tilJ~6cf$H{wKj~I_gp2k6u9^YRnLE0*xx7ol3nlp?2`BjuE?+L;bZ?SK4H8cBeIpHEwS>#^>m{7z&*Jh;5-#8M zDwi9{|BA~yBzgJn*+dB^`3tzb?C+@&TnHB*Gf3)e~HVlkZ@UkorIJ8b}qkO!e#kZ2`Bl(Tz;Q~|006#U`6LX zlxRirefR{QehZ^Ss}jCV`-u|XjQw-Dym)^e9hU2>+#)}b%P*2}S-w%io1tq4mtQO4 zvcFp;oaD>7{B{X1;@dcEoVZ{`5XrCL@=?5BBs@xzkCSkcf0)aQ_vewQ+#lvzndA>~c?Y&Bk!WNW@)13ln9X6Vn7ka%i4sowPv`P3 z375;$YR~x!{X-;stop}>&|f6+l0AuBUhdDYm-JihaVzYZE6H2!xkh16SL2tMw>u;| zb0z&&dsO3lSN*Mc=bT*rU5)S6it>@$?@zVo21WVE@nfy8b;{Z@OPnMFHy;GWmvkX7&O^hM7w4g}d{_Np6u)pQ%ZqC#Hl##aAd!jW zZ$BBF@_Q@`&%pNX~wZ4F26#; zW&LXM19>TtXjkL=Wn5nF4+lv4t^MH?E-&|ovb?oF zbaQ#RKa|hEto`9NT)v5nMKkqB?b-}PKx?hobpgS9^t?*f+lLs{P1A1>kg z<^E8XxAuoCxqL1!Lt4r5wGvMD-_Pac{!o^;_JmO4`%kO= z;ySPczEdLANs@jCfk@Pirm`(#A^*-Ou0hffQEntJej_FP8d@L`p2oI}h472;X%fDS zZxfy_;leM%#c!>2_;D^nxSMa&s)=tCekI?g)w_I~@JzlLP zlDw!3!bQ6y`D+Q_sYQ~%PJmd8c1QB!w`e;2g(RO#fJh{WM5{cuWh}(+QH0Nta4`=d zJYT{m5`aXj0=8u=#5{y>kAyFim9`2*o45`K{+Un=2Z{y_3&5}qx|dnH`VA4p!bDLQ_uaNLZ zB>74S7xM>_uafXLB>8Fy7xM>_Um)S%Nb(CMT+AOxevyQq&F2Y(FP3mIe<1t@2~U>f zZ$39ps#r4oLRgx5&;S_!X}aB=;W?7UgRw@UK2Nce6Euaod&6245r zd-L;M(!X579TI-4gpZN%+a%m2;VUFuT#qFE^%7n#$=@#F%OrfIgs+zHJ0$#Z3121Q zO%i^mgug4{cS-m@2^V7`9sWVWej{7xQ)*v zNWb`viw^gf@IOlOu@c@W;S(kNAqf}rXwv_%gcnHif0FP;68?yU-yz|TN_eA$|5?JH zk?_Ar_$CQoE8!nW_+KUbpoBjr;oYN*9rEjM528CE;-r{=9@IOZdMfe3pd2AmJqvF8^*@E8#Cm^0tu`o|3$g1$k9@v^BEAJ2E3H zD=jB!nmcD&*3_K5>P0qhWo1cDerb75Y31CUN>5c>PD$~c{HjGZXI6TAPH~l|G^fn7 zkZY>)EUNOWa9@!+IU{+t_IPTxbB6X{Qc7laMrKNS5^ZRu+?g5KDM{HW$!=#CQkf|; zGE>}18R^+6>3UsPq|DAtNeV*{>YVB6q0}Wgp>Vo8ISkR1%*>2T6nIFLD2l9XXZG|g zZGphH6srwEHG$8%Lj&UX!)Q(4xJ@1q(jRqf;)63YnX@5 zK{d|G^0N`xg73{x*PVnnNttQVAQ1)y z)gAOtNzI&g5;X1%Q3Od;nJ1AGWgv}CVHk*}!kcXv!cd)MOe8{7I-gGD7lr6wsd)TT z2U(oWPs|xjUS(N)&RkDbPH`E!^|YLv!s@d8oScywfqZXisfQ%>lO{3aDXtn>;?2)1 zfm>aPv+*KK*+8el%oI4%gqg|O8pCoWs6~dEON1ni@BWAkD>Jk6WHVWtb68A4O**Vx zLBnwP8(K&|Y29;`RxWY8~2~#f>k9k@VZXRzKknyiC?QYfhN*GQ>5 zd!?|ob5{ykJ9DK_Q0J|bQgqfzIoK7@IV**%ov~U-)%mI=QJX>2J*A|!b5%+Qccw}) zYv*ZP`N^1kIWD~DVmF}gRBDy`O53claT9VQ!_Gk+7;cU;c6C}z# zn#T3DAaHv2lmx$=-&S0(%be}T1-Ti{wCO2yp{9l zT3Sw7bx8>~UwIvv(d8A)shR_^GH;b<2BV5?l42q?%d5aMr+Th!WMDut zwK(^R%V8JT^aYq-;mND==(E#hI-c88lv7xdSL%`MDy;B$WW(6LDppV*>{_)}fElbk zO3~sUaJ6EAL#|dVaPZTL1&vu+$-q%dE2g-rrZ z5_QS1SL;Q1HylF1jetS`u`Vsc*wzFOW~f?SWVzX=>7~rxN-x3`nf(=$^ZyJ}JgUG( zKh)r|#>o6|n)FCq_wZDd;W7oao*YDG{i{=u`C?f{!cmyF=s;I3Advt`q2UTaO0h zrGgS&v{r>qC{UB=#`S7c5`j7b`gy$~i&)x7^tL0%8`B?g(!#HAj~fFuMjs8K_>u9- z85RA$FW(>VBe&=L!g#;1HG2`i>E{eb;1Pbir3pshzBzXNG`wGbRd^s2qWnhK%r0I=bx?Sck_I``C6>3{O2OSihmL3 z7j;DZbW50(f0~9rmlKBKcWL<7D){NvAuE3@>{8WVd6@j?A+yT=?FxRnwZ+Q6<4iSw zZJ7M;A-{@0ir-W$m;Y%B{;mDh{0*F6*vog#_t=R2*O6bvpTPM=oKgMvQSdv@QS&!) zf>8B85&2d8ZiWAL1%JMVe_fdT*J=1`75r$bLG}M4ZoE>(UsIU;>ycmO|2hT#=?ea( zgVg+6!{lF#{3`xd1^)mA{{~I}*UI@r#ovpX{x6!}JTJ!|no3al=R~XhKNu$eRmiXM zKUTqyq6*?K)A-MVLXzj^1hv0njsJ-X{<9=~qFgF9{jYewB2@b;)AYZyIDZ^BoZA0j z1^*fizk?bDQYil4Y4}$t_|a5@%Aei=plW|{Ve+R!PF4Tw75qaK{1K=K6@Oxw{6A>= z|9uMn^A!9CHSy=>{Gr<40Zsf3%mEpah%>7HVb~Y?1io2Q|G8oM-=eAiIL=Bt=NIvUtSq6s4M=}Qeii>g&M)GO;_qVQ6#4}I9OnNj{&k!`RR8ld@~ilx zat$-(_={KYzpLSI3X}gW4S#}yf3$+X9GJ@gtzq)dLw=S2MGF403jV>G`EP5O`~x-p z-)aT_cm;n3CM7EW4|0B*Gs?*tf0rY_%KuHdMlQMjCjhd>U&9${e)fO~|f8rc9e11D$H}-=4_i6gignT21=qHIkS<)x)Lz@0eJck&n{=d-lUvADX z$L|yc|Cwj0%l{zvKNNoq@~g_fR>AL5@UH?!Rb(B%h0;*`E09;kzfQqV&wE?z|58o= z8O@c3;vc8!KU)?2X$t<%7`6Wn&M)jmR+g;s{~hwH{Esd$AxC!=K2NhT`9>;h&}8&s6ZY!+Dke?lAfHBQqB@3Y;%j zDEPA#{A*AVD*oIs`G1G}D*p8f{uv7Xhcxk5&XtOI5zblT?*UEx?c@9+&M5w7Dfn|V z^psp3z(|29Z?`rt>DfpKv_;0{<0#*613zNSZ`BnZ8 zECLyl9RIc07x5(GVgi2DQSmp0$v+19Rs1dm|1Aps63z9Gt(-s9^{cs>>mQ30{L2*l zS7_Q_E9V#Gg{&;0yAMcHH0^IK=NIKn?eA9P6#4`{NHhOE7-sqR*UW#L6#lPJ@K4n6 ziwgpw`rq*y{(}mBdf$)L|A$a6s`wM{*$Kr@?zZ&}@opDnb?iTf^kvgZ!%YH;{hVLz3hF5$s#*e*ywZ#ox;Lg*;P+g*E=h z08sI}IKPN9ioZWA`0F(Be=tn`rJDH9Rq(G>@ZYG3Kk**7P~+bMP5doVl>cK2{y%8= zqkBRaDHQ*G8veBk{>PzD)TgMIt2FWN2$P?_1E8w^?FxQ+ADflGx2FG%3zNU6rvHs9 zq0$SC|8>~6^1rW%|3uC&{9kD1A8rNz zGYbCYy752E@~_p5|3!-Or{7YAKcZY7*YKBz$^RD(|7r#QdIkR{n)t5`lYfUM{x>Q3 zpI7idq>2BAF!>+Q#Q!k`{|gHKGd1UbjhtW97qYTsjsF>067$*O3HT>%p{F@Z~ZeTFY#-|(D z;)xp?%Ks}MuJV7Mg8wzhTK)gw3^jjrnEXePU&TL=F191d<^Klut^DIP^DhS%6!J_N z7S{S7rI~-ZIKOD;RR3=(_>XF?zr=;<|JR!9FS!c;w<`DtY35&vVe&KZ$~iw@A*Ye7@wZ>o z|2e#dyc~bq0SSEqpQQQyr#4Lg6Ewg7ByfJY{q0cj=WF;I!sNeB!(XJ}|470A4`8bL zZw!!*AsHSHA)g0|!`vO#XAyQb8VF%l`C3Jf%?O|G6f9jw$$$LZ6lY0ZsWghRJ`wru<_onfU?p=i>_g>k+4_ z`rjTVzX$nMjkJ9ij3X^|?hJUq!|8xcaSWWw17bbt4ru}bH z@YDA_t?`$q@qb^K{MTswKc?V6Q^6mj>3 z@6yaaXDRs4Qt-c{X@B%wVmSW4scC;J6#Rn~{JS*qw<%2i?V9*oui!sN!T(Q9{o8O| zARPbKY3hHUf`5pD|5DBTDzYx|4Pw7>E&`G3&#|1JgpFa`hX z8voaZ$^VMR|3wOZ`X0U2{}(m>w}#2TUeo`q<@_$A8rb>sa0Ng8ZU8vw{Bz*I!208A zO#8(?$@IR;-|6M#|sPT8Trv9TA1=>&N?;{la^j%8w!Fv8(%lS76 zNBKJ1vfqx3D*qEW|3NNK{1+?u2cQB}{BHa%N{Op6cCfVaMAmzlwi7=Z};4>HFp)KQCU}dm8@_hRIL&8L9a9Dfq`K z_=h61%6|v0OHm3{{^uaSihtk@Mt-^c$1C_}Yxo<(aduT}6*Q1D-(iGK&K%Tsb2 zD{~obZW$Y6b@6|raXgpHQ~X`3;Qti$3^=I$m2>_Co?om){D}RJkY82)t2w_Mf0Gpa zeKF3f_}6j%M$3gwtN*=_U&X(P^NalC|78mP-kS1v<99hqq1s3i-X zenkJXUc>LkbzMrK{QrlBe?^UvKi62X@o%bvze3ahHFEw?^l(xJB<8|#>!kqn_I@l3mX2lwZ`!#W5vpUnu0$G z1p+vz|2gO|GKMPuUn9RN{)%ok^2_C)q2Qp^m&<>;f`5;u{1Z8UqhW@*j5fE7 zjZZb@zmM}bae3I&Y53RH8N{;xvlaY*()2%3=Nb7!#s3;j|Fd1e zf3_I<)5SAcWTOiE9ZA} z`^73+Z1D9&P5E!){JC6?;xA9ZAEW9297Bzaq3XYnrvHmwZseE!&sXsG)s(+0O#WV) z@}H&P_bB-1Yxv8<<3oZHElpBtE%i}H8x<5oCIkrhXa*9PNPq}I z@fkugA(4Bf*V^iBy;u6SZv-EyRKecf*0#2#wY9X@+d|P+@3oez zt^C$^@3qdXv*(Reb$q(fse4N%^>rNjbs3XUogy(gcpI9FjrR^@XQGuD_OY{mbe8C<5%? zPluG3_5am$oy{(43HdiV%|`0ZuxIEU^!##i&D1H=qxn#kk4A0W{!Xi@F*#FWRWqiU z*s^19Y-pNOG%9bAQIQKgyRsVQv@MlS)tP8rPm62EwHV&H}HMDDMNUG){FYWt9% z$n8uF4rfnEY-*_}N#y>R$UXNEo~N43c<#x>P)|k4fumwCHpE^{nBC}# zdWI4?Qm%ezWk>9g$!i*FkIo-_zJE;9(COgbxQhl+(z<fr%iJSiC(4j*&mTkht@6hZHs_N(&yKgAY&FhfbG;K1^ zZxV8%yM&QQ(0?%of@k-f-rIf7C?H$y=ZC_j^;u^+~UJ&Lly5~CFY}5c>|z~=T46$BQ?{afI|gJy;fL=qFut@z*0yR4U0;$IJd~YkQ_@P;Rg^z!3xA6V z2ZwJ6EM1P$jfqWDiDzW{A@T#msgZn}1fCRMe?cUBJZC>fI!Bsv|0S|*p{CrQx9_D4 zQ*L0#Flkp*wxN_xtdq}B{~?sdD33lwNzXF2aB4{(+!KwtL*B@h`*ZFmiQIP#%f{Td(T*1++J8(#R8#IyQ|`Bk z+|L@M2`O(9204sxl$*#s=^NjghOVRWt*jw-DE2IsKX851 z*M7<~N^Z2RASroU4b2z(>*&X*yeTj9NL4_0N7fUM z0}GDKe$)l6ue_&F8S(7|)jBa$Q{knl0TV-}e;UJ3XCC-=2~Fcp6Rjc2 z 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%0D8;;RC%0-k*_$Up`aji#1o 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

      Ym!m zzXNFF>8I6h{u(0OUYgT*WezSRfa#X2aHlXlfDNaQ$E@iSaRnKV6-p0Z*NLd`YoX$p z01Rylm?>R29<#$AzOHBqkSP#gLCT!cOo%9F3i%(HR=A>2)r^_zLpN7%Twj%IscqW5 z=cv)`)`acc-P(Ye@!EhT`Lh>e>t*bEYzyHAR|YipQO?*{Z^RG4nd?zgVSB$1c;Sk{ zahrD(YMcIEIR39g|Ju2mb#juC+6+H zvvv~=wLRZbaif(tHu1*nMa``)#kY`R|D6LDZO7~40>fhwz_r`Co3AD7*nZZ6)+URb zvz>l{EV5wxoTgbz46At!cS7#_Z=7?*^t+kqJ<~Y*eoEf0E!y+Syjx7P=jD0VhwpiD z-Ypo~Q<=sS_*r&yS{`G_i!uk?~Zan z>lmmTSHMQ-6AIi2y}9&&uZk?+0oMR;DQv#CcGE?Ow_Nevx*X26uV7KII%B_Xoiokq zH-%fIZ+>Lpl#Oo#)h1SQR0vVs@!h-wRq_wJ`J}|0?ahy9Mr-Fh)Li;=)8;4hT(5E| zR+3zb?c^>HJ zw&=1k`5gew8HDr@M9t;shF+?JD-ZKf>rqn$Qoke33M7oe~8 z-H)~(Q>OPjEqC9o3nz4q0v93mHJAS88**XuleL@P2MMLS-Kvs5Nky%_@)CfXAF17R z8O~T`P>Tfx$fmn}>dkNKK)m#*yYh;NdRT=rcsDDKtQUcaZehPM&68Gc0e=TrI~)`V zOD)iOgk=cqrd6P0e~U|q*6_&+#V)>Q&n|F9(EMUK19E(3q4am;bzpYBbQdz}wc#_v zue(5dnN#|mvOLr+T=DBHzJr#7=i=Z2T2mVCHLD|>B>xAG3%9`Q47W=2bz71&dc!0*9yNm&8->#0aTWOWcUEXN&qZ(;A3iDX7XV7>h7KkyK`%b>xyfR z&v1izu0%Mt|A35l5HgPrqlw77M_qNX-X;csZ;VgYm8eeCYR zrtSQaOy5$@w^2EH^8L2u8wQH~P7B!vp3h*ve|u1sKJ&P?<#JF0#+Nj|yJCOx>}84byOETfsU7^huo;4^ruF30 z<2-$PgwGayt>9YMP8Gaga26rMD+SkYA?|q#{6&I4?x@Oh-RlL{Z>P%tWrA}~F@xgV zkBa$f@^JXZ@-18wUnjW!{gScyP^d zyrbu55+Cw%{$Prpe9uU-+xt@V|3Hd;c7o4DH~ZHMbk7t-xdvw<{%IJJ$dTYPG0Y6l zWL*D_dyl$&X)ZGv_Y4L;-_e&fb0=h%RoM-;!s@2YUIOvil1!g`Ak-Psom@>@K>SD?irapPeVyWS5oaL1wdZ_?jw0d=UBd20QTVw zinDAO^m(K>>jc9je+u-+$#pKmsS|^?N98la!{NJw;{2hFA?N=3@>LxOX+325>a&=5 zfqxK)mq%Hd%=;bcagGx-?2-uS4^fzHMmTNA)NWL!PQp8 zIlf{bpO?Cr{0Wor2Kv@?^lk_nNw^td3ud=Ajd8wc<%c!*U9G(J!boOe%BPtEnlx9h zlC6HPOPZ~hLRp@-7`_3H`VlXQ_2>x_B*15UJVTFj6ZuUMbI~~YF4I4N{SM+S7I33u zRbQs37hXpC*O1)%x$jeF;y}9L=EKjHttcI$Ob(wYB;uK~3^84}ZAGu0OdF;XdUr8! zl)t>IXYZ5rQj)ppkm25%o|V`@VdOps&}g7%jjLOnm*_JEzvxyk%%1Hpwz&_we##@< zqjVJA{u3Rm+Pk}pBWHt#y1Tk9Vd^L6(kAT|KzvQt^2#j)DrRKz!dWMEa^}cvcdY4w z|CVU#CK;9IYgUw38IGrMx{BOiT(hFhd5nQW8*DTq-^ooA2}bwj=xo}L%@Z>5+)k4w zGyxWrH~8A(Kzrh3&m=GMVdiCsl%2uT>w7{|NNzi51!0zOP%4$wJC0A7v*~Ye-0|;* zpJO~HL%Ir956J`R7Cz8SknS`f9FGv&Hy}RJ7+vdS#4f|NrK6>f`Pyd_d7cdAlhQ8~ zfgI!65T|cI`dBB@ZpAe}z973W-^B>Brg%b?#8{8jn+uGha$k-uH!-y?*S zPg}(DH>KFmJ@7zpzl)Mpoc~LaJ}LiO-Q;DAeR5t6#K7|!HCXvqGc%Le*ia<@fYS0w*a9d-GS?kk?9awh1do)4DxE7dhnE@Nd!nCVa9ugX_|-#wD_UnnnB zR|_HS$MLeJm+F-{9~gD1$6>=&B458R={?n3&tDP!^}e1@;m5Irpy~8hD>4pj#9Ygn zl3u^-D81^h*9%hGug;ZzTnL$enncrU{_jP4WMM>T`T+34x8`2bkXJ=*KxiU-F9AD+x)YmZp?olcQSAP$NTViAaO>=Cfsq1 zA=*!&AZ>6ls?%&#~vTEXgnN$_)Kr!hFs%Ivh50b4~e;wb?m# zuidl{<3pE@$CSB$Abnxz(j20E>unyMM>nOln~uRnVQ4)`CL!vWzNQxSwRRIdh`pwU z(anpQWatKWw|3JPapg+!Ij;lxG=UDYl>%S7)fk?DYO;ktY7H00oqp!H+RcAL{PY*q zZl;r?!ti=bf$jHo#kiJj+WcVcX09HS4p-6-lXPqI@CR90Tx+@x5o1)^v>vIXb|hAda;4Y+%F0Ud z9h6aK_jFEX)B5!qAed@-tUtM~2kNlvLB(n*{R6Y=^4m`z!O7{3c5}lSxCJs}v#%lT z?prYn4t3*dvaQ|p0Bg$del5ex#y8vxKfJY@u66faCHyR+`JprFP!o;>v*zLM3C+VF zzX}OaYM6gKu1?#f6C!gsn@e+1S20!8)taF{kFT7Vha`p4FPj?RAp3{;H~NHV6*S-< zoHE~{YK}^~oWTVxeoA4oS^21QZH7iT%Dq?Zri~O*>Ym^vd$WJ7}Y+$KoY>RyEwq z9$?x(LUm1U>*2ZjCRl3s_PvpZ8pQEjWv#9#y12lkpj;O$irlcTmW}TP_>vcT0eUdU zjBfWqy}>tzhA=&v_IO!%!Z@08k&7hvi5~436Hv=_0(}y%L#1fAclX3+tn+uMP_cFf z`x!jqo~{L!y^QtFKpfuK-BXKW3Egi&o!4XBH}swDtdaxg>v)Uva#wNv%5W3txp-!{ z2_Ej})aAUs!}IY7Sc1J!F38nR$krahl`$=#D&2~XeSYZ~N0t8`q;Vn5yT5?*o(0N$ z(~k8Y`p%VrzQ-S5_Z;w@D;VbwS7Honc9~hN!^6^Vg3aA5bXRbHbm?R`8Vv1T)^BK3 zwlIw^xGw<-Oi(nnl0x0d>o^9i9p5=_QHD{kyWH67uWmm1M#hIu zM{`_H+bCq;dgHX*ZG@&ICysR@b~>dBfZ_Xmi@?Zn()Db-?gmA1GE4K& z#dW#Nz#E~2nI*qsK9-Jf;yF7=R-w}F{PTBj-f`)C&$aU5{1fnTc*s0IpX`1PV;AtL z-Sll-d0q{73ZvR9Kjpwbxpdf#V{nC*2sGRB4cvs<9ACS}^mBJTfX#t0Yy9Alf$suN zQs}V}3US1=do2`7BLDRWa(8n z?=pi}LvX)iGW2xKg(qEiK;FGi^dF1lS3@ipG`tjBI_P@@DuH<#`?UmEJmKfuht~rn z)KG4}Sm8FwcUfqIwVOT#+ccMMFO=@iV;v&i`w0FG$y%^cObIW|E$9xh>Iu!K{8084 zO)_1(={b<|(a;Fq<3}BG@Il1|Llg4bKZmG$pyn4jM$jEge%xaNrn&y}xb1NE^`-lR zbgn%?ubro;y*_+J6#Hd7exDzx%Z10c$^!4}zli(0S-OQ$nm;>M_5k_qthji{mK*<` zWms7>Fpnmf^+NR8<{0H$6BVNoJ_!P61m8JN3h(Ua--J6ha4ibgz2Keu$G{82bH}?E z=^Jn{JiajW%zhWvySI90;6leiR~D+Cc>cE>QZ*0P%m+D#T~eZhi*{d*biPNZ^V_#U4_WoqJiKnw9IU<76sXicbi;@z zoKa*HF*vy}{B=G`V8e*q5Tgauy5}_(TKcVRZYm6a=W6PUo??Nwa_Q!#&3G$vk3bcQ zrIlpdGCV{XP8~P;nqTr-pmh!VDk3XeOZV)#%Cd1U=vbk-tA&}zUUK@Zt+aqN7H0!~ zn9-GQ^YH2q!Ik5=N%Kp$yZxsyZopPqe=E>R!=G^3Vb}Cimme7ZAdWE)(29m#zIJf1 zHUW>kG(@Wb&x z=C?mCtjk?R=;5Ba{t4W48FT6ntorxG{e3iXPpY^U^uG&r;d1Gw6}7LJ!|$4xynN^; z3`HIb+dg5to*em|X41NEko)5E(`5JYsT+dax1(Pn z+Zc%AwN^eGbF;1cb-^jQ{Dl-4DDJ(+aRq&T`z_9p=HaBDrAm)oe=F`e4c&WobI0^L zcO{S1y}t;12|siaOi=|1_h0`bm9YB^jMT#OIlZl@{XOgJk$g8R>I=#74$xPWTF~dQ z>v!Uw%cB+|YDi~c_(=3zurl5X9(H$W=q(hhpQ)s#BvhDk*Uo`6-?hW=WrF{SV0XU! z!D}p4&u4vt)Vb*0nFG3bins(*9l zi!apuG)63}My~i(<=V~7=>KRY*T1rpt{5rhxAUu`jF<2n_bqRUo?Wvf|J}2|rhpQ_ zZ$X=fASKTsZ3aKb48B#~)<=8J^KF^^yBmlMLn5B^i}y5)Imrb+Nvmn)ZVNsCvSq)P zM2no)t=NDy&SAn9y!>@x%2m-#lEgGDIx$?lxTOuNnA^g=wf!q)u``x03(6hwxYT*A z-&)NtFvbRL{l$*H;y}*r3C1nV+=g`PihW%xHZaM;S@Ta^-rkRW`b^?nZ(q*kOqjif0&DBwW_N9Vi@;33 z+Y2r?=d9d{uHu@`OmTfL?Co;djk%v#sNPZRS{Ic{M^E=adslaVZY@nSfQgT}hWZ?Q zPWH8PS2wd%-P^sbw+BCqOB@BApPlhaP@NTB-JO0W?m(Zb2?ISo4;ym0ohxU|?cdmo zjTXCl2Ky`O0N2N3qq@DPZub?(mmTyTm@*}U?fjq&@7ZPN+^P=J24S$(nlF7Aqcjls-o_{7Oms(UVv;5QM zcK~$T0a9vz7xZ9L;?9Wp<2JlR202Uf#IFASL6l-9lgsrFE`JNk*ykgMEh=%RPjc)n z!@VYT@5trFVt3A!7U~hj=6Dy?q>CF-IsltoGUFT2x?Q{UsEARuef4tm?Y+H4%%jbr zpqCeQE6Ge{VJFpMuUvnzxEAW6Gw2;~dG}RmbyufuyqH@oIXn}4V>WkU?@jEmi7a*@ zBglZ?ZnKzCL(t}0348?rLN^T=FEE9ht0CoLcO1%v&Y2~S!fQvlz7vhIDZOleZuuap z4$aH1R{J;8gd;v}(^mHOX4=>E_n<6j3Xrz1$xWNL5IrwEsg8jcG-<>1X7Mh84sIrRhjBCe>iKyMb!SjQ3~UL!w+) z4W)L*?3dUbSJY`k=lHOkm9eMxwqt(ThlC8Xh@Ht-^!2Qz^m3*0<^v7ujAz_N6 zXUqm2>K?0&wlJ+#-s=Y%e8<2bZ0tG!@J16&tVD`u{ttJf!C_5UA5wMEqD~W@&HDvV6^|Sv9@Q zH4A%cmiE*vn^UtY?=GwJHB0j~%Wz|%qYF3AO%m_cLAK(T42B2!r_%4oed_mP0&daw zDg!^tFf`)WD%iVX-Sai|b5Lne?XDd6Zg^FxzKs>BV#`bzE5jdL`CATy+q*HTd@A$5 zxn^mT$$$0hHN(}#5W7}m^OACn3RB&s6xG*<*wPTYJjA+dmdA|2R6nafShMPU7WJ~~%WGCG z^RWdrs|r5W%6hTv0;wI#T9WebG*15WEPk9!^2NeBQsq|Z`E>5X1EO7+3rl>Su+zHn z1;K};y}VZLw+X&e@Dl{D6MP@33#@MpyZ86}4~y_?1V2{rlRbH+U-0(`u5xDze!Jl8 zFBzUie@FfIlQNL0!I>KcKRUwSA^2+qf3;_mnIihnmutD5`GnwI0_eKDC4%#ZaR#;9 z;euZ-xZ3%C(f=b6{u#k_PX9rkU8YO$p9sA^8>R@(wHXWt`%~txlCQrDF2$4CF8Gsz z*9!gH1mA}*&j^bDRrs^7WYGM6K=O5{(7(dp&YUUuG{FxMe1hO}1b?yMcMJbF39kBo zSn!n*-X{2f;99EKx(qA&`?M;H8B67A0ULzIiHG(e@{7k`LCHUcjuM_-0!S9!R zyLN{B^Z+Mxd0uciWp)a_ z5Be){IIhq&$orF`az-8grXLHmt|gipQj*LwSV$gK|A$=C$x zI991PtF9k%+%g&dVpDBad%N)v?%nEetu>j9`pWp4vzlDYk@+k1 ztajd9yg)aW71`-Ny~OxJr>CspqZrRw=jFm8KAv^nT#|6LV&%PTcpAjGS~tcgRswRB zHTJgz={~*6c2@c~pj@>ME5`FvD90rHmAIFL7gG4FPNC;>G>Oj{DSURP==1FqK9{A) zJq+zINp439J=;kV{mChO_^~{Rp3|k1@Z(eH4^Oc}K84R8Q|z#B3ZHqX`bqj6ki!2s zw7VpFzTYI_lh81e@DtG9lW_Vbv_8Y!J37kb8HbnKseAth&hcLopMz8IsVVxf#U=4M zEd`&PV$T<+`&o;Ukd%66uC#F$eoj7w{41xG%I22z= z5P|pya46nQ5P>+KDT;rTAOi8X;86V21QDQ?I~4z-Lp{cKU&X&6IQgtKILnKHICW6^ zI|(8XAH<>fuLvR#e>)Dve@hU7xYbj~N3oudIqH#mJ|j5!SUnGB13-xRA1Zjv{|JLy zI~;5HSpKIQ+}c6Mr{w=q9GYK!k0f4W@S_oDApSZWN`E{-1mZjtuP2B=3{^7VuP2DW z{C)z5(lgFLoOMI-pAtkM{vjNSPc->jVepq3yv^WK48GprYYhHDgRe8VEqBgAV2Ja} z{g)KC_PNsVvE}kfgWGbUuU3Y*KDdciz+<^Lr^vnC@Ue1#XK47_xRtB# zF}%$~<(3S6ox#5#cr5p82Df&;(cso@`aO<(Y`=6IGl@XF2Z!o2MR2lvlfma2oNpgW zKi}XlGWasX|2%`!cP|6wUW7yWlnkHa48GOid4qq*;M7(5eB9ut8=UV246!|bXz=rK zU-|sX;QSV&_@52lX7DErZp-Cq!KtIwljAxDVz0-c{P(AV2t3(xJksE{T^}Pj`J916 z`J7;ITMruyZuOaIaBDaE+U*vhr%Zm^Q~TUzaI5EC2Df_NYw$Y5=bwV}Wc3_JqaYBsdLC+UtLJ2cTl$j( zr!H2XlMUX4dz!CC!^iSJ*Wet}D*bZ92cOmg-evG6gZCQT>T{vNt$lQ#z}P+?G4!@S z;W(LrylsE-O~J{>_9wR+-1aBGGJI@*@>_%3{)FGP7-Bm=W^h|S$KySMAD2!D6#OiM+x};X;IW>ahQ4U{_ov{O8NAETzt`ZG82rlyzrf%-1*bj-7<`w( zn+$%t!I?(w@C$?6`tzvZv7MhY^!zHQeDu3Ed0V*$;r)mqw%dygZsop8@L2BYhW;S% zQ@OJYZsj%`+~#+o!L8gugP&&jUuqZ1>R&53^|Afo(FV8A(eQa``g=Y_sU&lP=`-x)@qvy7fA4Su%4dky|(gD*Gu zsfaVsJ{RIpyOD;0`1^1uZp+t}3*UJe;&Qpv!wxSXu6#;@$K}GY69aKuE?;w~=g%%* z`CMmkb_t5#A~^ZH(cu4O@IHfUJ)!<=BFg7sp(kEr@Fxsz^YygBnMV0MZ*V();9?gB z>dCw-eS^Wb7+k-9lm4v+=kI6?#BI3@3Lcls#Rj+fUvBu=_M+bh$p2$FRL>t9di&ku zF9u&`=$|*Z)sx;a7-Bu?%T95t=Su{qK32~u2DkiY7(R@u{`7Lhz?0=aSMZqs`3ATA zI}IO3mH%pkTmFNFkJaD${^ny*I; zZsqd#L5A3FISxJqUx%~up|4a1(tiYp;;%RO7K5K{@Q)h2XmDE(KVWeC{cRr7GElA^ z-}0Lh1M#=vP<>cN49wn49EuMRL?BL{inDDp5a*%zWdsq3)!|V5;{*{X*Y*QnaOg-r z-x8ek_W6FZ!EL_oF?`tPtK9nyZuS48!L9y}7~JZAfN9rO|HA|)56kCxgP)9hs!zSa ztv;t1-12#?!EL|FC1VV+J$nuPDY&n4FEqH7dx^oV+|35JcKEd5vD|A6z2)PU?~9(c z98aL~2&6p+hw4e)7|8!(9E#g|Yx@npBQubXmD}M^k2NE%e6*gEzwMXaA@syAHT3^s z@Qnu7dP{n%&$U7y>+@}cTYYv49_#Z9gWGX}z%H*#altZXV0s41CC-Ckygvo}b#l#j zItHa*=B~=W^(p>t!R_xI(iH485%nl%afBb_~Soa460?z(751d%x15p8i#cE4}UC-fZyi8G7bj z>3=LZ`CIzO41T$x|Civ@v%%n5)9(12k@Dw~Ooo`h?j=QAz6*!a&oK1;2A^&CPciuG z4Su4*bsSDT=NPtn))ILA(^Kle^# zApTAqihs-Cmd|Ylw|wp~xaISE!KwSlo-Z=v{|gL$l);x7e1_m; zcdWs=rzHdN**KK{Y=iTj;`;tV%+`nHLLb{_Z3>@@483h%TMTaVWq%KSrP0U!9y;6L zpG}ebWrJJ&e_-U=`h2^gw|2PC&|Cd=9R+ERHu^kf_}KcX>nKP++t5F2=&jswG%x}& zTR)F8_%XPr}(i4jPf!=d)k-&KiQx%PL}Mni9ZSG96qWB6OSM<6W&)#AI7%H?l248%W( zL-BhW4uLTUs*o(yYXB@Z@(K`{SV~@Lae`?KQ`m;T$`>W$&;v6q&SV{nar=>3D z|7df2kH_v6Z7Y+9qobUA^xSiU#pJ@Yw0d@@(*S3k5gW~!!VFWF1U9hOBZFcKYw{IT^xmO*w@YAjQd_qq}n77+IJ7p`o zf%OBKDcqUPlL>FSVX)h+l|43;-NOVYHYDyV_V>c&Ns+nm8!nce+;j}A=Z<{!!B0`= z;=XmWorI2_wQJ!I#Hz@Qbai(Pl-(OGT(qFI37bmJS(snc+J-x3%eb;)W!D*Io4BOg zX3s~btVvkjimsf{xTr{EZ0#<9s?heUX=G-~`AqS?PDU6bx<7l-ISX4Cw5=_!<+hR|H}fRw40Bd~ zep6exV#JhhsAN(xo#!HdzpsZ|5Kc*^NZ2XRa`3iaG=FXzvb|UvnPVRKt?KNfLE3uP zb@xP#2AOgjUnSL|;*@!3Ejh7&puJ=D$fgl(vDcwZ#>vK$`vHD(oD}OO?{yA5$JQ zjm_K2ks9?aYC1^v24x35wxnI%Gq-|RJnq^C``cF{w+oxjqW3zq4_0fpuW8fS3)>c+ z*>sM-a*4{1Hb)^{ii=n7k~*t7>^SW1n$+cM7b};pe=0Sgo^^Efp4HRcQ7qTS(Dp-< zZtI3as}WYAmn+R)eK0ojsW-g!yt^;ADXaJE=N`Fe#ckYFwPX2+{Z~V4;llw9uAvRi z+`9YWu?P|j3#HNMV)DTP9 z>UG8`A!&$B3$dvo)(~PLGUMcsG{mNb*whef2(b{EF(V`mv1uVTHN+Z1tQ-kj(oPSt zX(2W>#2P{@L}pA2QbTN7h)oT#@?N(Ant@GkrEo%QT8K>zF>a3Q=|W@%_Oq3wAvP_< zriNHUIfh=!KPWL$XqXc48TElvh)oNzsUg--A4abKR^%o40aAv<6@0dL`pd5$Pyu6& zer4c0C$W7i;Y?$6t(ScNuwfm5(bDUDBTX|wBXYg~>0_R}b@fb7@PH`HZ$Qi^vg^Vm zInysll6?B+V$gNH{;K@@t6uZ_Q-{~#(( zQvQ2ueR_RQ_g5q3)1OIF{wFW+DYnUbBjqzovHasvDU#$bJjADe(4WHJ*#31$pCo_R z8+;OdU#5Ikg;;*G$QLz(oaqyNG#3ybiDk`6k*_cFJ0v~j)1F3~noF|g+kdG0Kru@h<*8j$o`lBu=oNuyGmg`CMn2B!A)IKE1B@ z^H(F=&qt9sN&c>7KE*@E{_Hbj`F-f8D1WLa4}b4G(nmkZPR9h&GU%D#BN?xEX!%cn zosWN_47r%5)AL*?uW?H{@mPCRj>oj;`TC>oWdh+ONnePJqxo0DH>T8|YdbuJ{_f85 zzO2p~0SMStQ;6znJy+&~MasOBM>YXul#>pNT z`(C{h_@P)rqdPZd_Nl7UojGpOd$L2r|9>q8`Cqrk(4S`(N>7(=-}%^Kjax3R8^_qe zjP1kNK8)?VaufR>A3Z+(Tyn&nWV$Tin z)U`X@wCjEVaNa)C7xCWmH}rgVFt@lc{BrDs(fAOJg2+sb_+7fr-OidlHh!@@@;_u@ zVR&C`Trk129s0reGQ*gjdnvUHpX{bQBJIFQL(f+Ydd0BmYdyA27^rtQu`!IBZ|-D;Ck1m<)q2WvFT?9MT+*{tqD3%vrFCKcndT=WA9UedQ48=cFJ#ZHG%X@{} zWoh`Wo;hrkbIcL(Qe2MC#RfjyYIuFFFx)#?3g)`Ip_n5ch33wPhM938*6)R0FM&b7 z$KvD0a%T_S`Xr2c;aP>!k6~otg$=2;7piu0L#lr4IOg|Mz*cyZ_h7rEw_=+H-J0r> zLkq*xl%P<;hG^KGrn=z~ZVB<`5xZhl>aTrz{A`W;)%gDG`HS0{om+2s5MB(Y;O%S9 z8eF>^Utf7=Hol~Y5A4~idb;3L-@%LFvcA~Y+`Xd5T`nrF>+w$H33w?;;W3O}>y%#q;2_Wu40d-^&@-WiEBb+0R~>FF(&b2_JM zWw9Tw@k7>wngPiV4y+oPaCXmHICSsF-UfkiHazHCTLl~Sx3L^trVVzs+a^JcRP5>< zSX8`V5ZYKM2$WsuUXmC2M^q9fuXW>Qck~%yS)-BZ#yV6h+iSf zq^!PDPlH=`XzVi{*Y(aR@-ecqroke8YsxvQtmifpxWl@f0L9tq&lI~m+IwxGc9g9S zC*yr#K7ni-}4@1~3Gt8C+Z#r9CT zv7XcFZ!BkW#4s&gY>(U+)9tMurpb%@f!O|O>0)_f)iW-aI9-(8F<*)c!{^7GKnP!G zy0rQj+aqqzY3cS>-Y+yiG5z=$NV!g<+Y-_5jZX8qH#)5cd!tjkrqQXqxE(8hRX@J3 z_}-|FW70ZvWRgU6m`i!;y#rmc4Q-N}h^QpJB z9_V#i{Zl&4Pfim==UBhV(S5y4doIQ4)AUh3dpmRQ0vn>s@~t!jl_?Tqsr(}9v9kYn z^Q+~f;>W6=(#Pkq@{8%ln%`L7-mcT~6W1H%6XRpmD^1Q8Wi013x`=Gdm#O^5sQA`M zQX0Sa2%VPO7}>jZvyljQIo5GdTpr3x#|e79H+|CbwM7}od2e)@|1`S5Zf^<&!pg{A z`3m`1*{Agnnva-IY}d5(m0G7?sT`$9%U?_v>!s<#d9MVXQrBi_x-|KEU(aJ?pIX0_ zkDk-yZV>{_|K8}dJ?xE6%W-dX+78p`RIk_`s)yz;zOVS+&dOiu()1YXcxSBT{omC; ztv!r&yrcPz?X@?3l)u_3?W}YvC(WK|<0-8-%DjP?oi5=pa9OqZ7Lm~OAv(vV;1cdMB1-t<095^RkKqszdS^Ya+SN>9Hq3}dC2 zDTQOEmnnc_rdJ>CW7S93RF9Q@qEy7O(x>&u`+Kv6zl9KsB4e!2|8KSTEuyYImvWK% zX_u2zZfJYg{$sE0UHHu03qS2Y8dK=DMtEBL(DIDPM_e8xh)lsAasS^1()81DpYl(u zK5Ad3({qf+>9<5cnjSjcQtL$;-T(CSRP&+dNL__ToYVSs)j#H=^+_3}rPup=JL`M6 z(xur;>9m|;y)^y*=^M&(9y&w3mpt<$)2_p}U1IelMo_yDo8yp5Y-s|vCIQ=+fN>oV zgOzc$hbpk|CSZ3YU=Jo>PbXjpNhPy#a|zh=1gwyNotJ>A&rT~t{T*2Bs)V#(PQZ2~ zV0R^84@DTu{a=E;mA1e}?bYjQ#b9EkH~Dn| z>XSj~$#+e}gV@Fhqh9Kt!PP(TU05^Tbx&W8XzM_`L$GCtNBh<BIKdkF`^E5mtt1?#xb~7c$ zJqD{Xj|ZGOGu(S1@vZ&>f0h1ZNB@_AEB%kK@TMwrdBBza8_=UF^FY8SN!|R-i@2tt z>`eqFaG~hnbI0=?qgW3Vdo zyMV7(J}_W)<_!T?J--UPD)YyHE1zw6A*k}xt=+wiqUUT}RXHz5K1sc#%wz3FmGdU( z0p)Wl>OxgUd$>$yq0sN^^uJ85%H_g6e5x|{1$>*tPQ==qYPXw^2UP$4oZK%5dX+oQ z$-O4vL9XMoAmGa94mi50%G?uh<#Q+6U{&T<0beh%8BYIA0atqN%~+NBO~94@IY+-S z;7b2{M}KF)cS-Cjr%&1Yi_(9>>GQ!rulc$GFACMpE4II-`C8@p+!E-O&w%5j(!Bp$ z5?wrj`m5IEa(UG_;y(y{wn^+6S8uNmxazak>GQgPt3FS;`n)~hs!tb?s?558*Gud^ zSH1%QSNfY>`Q8w4%}I}=Ulnkrr!T;&%(VgECb9QB{cjBTdWjtdg{z(SI}fP-wFi;U zjzF*cm!O}i&dd+E(tp+2^R9p^{W;E_zX-V6ZOHNO3%JrRM*FME=!l}+j-GUS&It4> zccHWMhXbyB4szxG(SWPmkGOvIEdf{hyPck23%JsM%(bKDfUDfkJNy4M;L3--;j1!t z1YG(2$mvh-O+F}}L!JJgQ#kb7cRM>=9dPAy=mhe=DBvoWd%;y@eiZO+61&dX`Mm*G zdX9CfGJgyBdWk*k=-(f3rN7qE|0CerB(?<;t*SCl2VC|1rmH9C1YGmG#@YYLfGdAI zUcjd};Pnza)9KS4aHY>VeZCcNmHQt+s+{+Ie@pqi+3ER{K)*|3EfYw8aln=T4X#|) zjKCXRz4}JL*Gud_9skb+T=lu#<+n57%Ku=8|7!&P6;}_R3%K&10s~cLRs>x6)VOy2 z#ehF9u?DBlrvk3}e8lxvrvzNfWrpiNw*_4J?*vknSsw6ui9IlZ__Ba2{br~C#{;h8 zhsR#beq%|%-S`SuoY+>Cc{JdYCH88Ji>lpjOCDGzc$LHRa#emen(gp21O5()y~N?C z2K-eaM&AKwGzlR)V)n5o%DUC|BNJrJUdQ%s)~!yri1I<@N(foEntSApYzCDjA!OYy zb|Y_Oo!9Lo9L7ipS+|?+$QxPb{Wl5cs@IVr>sC}J;YW=Gfn+nsq~OP<;K!xl$EV=7 zw96#f%!%a-6U$~!GFRnj)_H#~Uu!Juyd>&X`J8pTDwVG_mJK@xDB{oAOu2sAJ6Y!q z(IQI!nvo!otlQ;yy?ad^~HO%l2;8c@?#Y(hrOTfn?3N z*AisSIJ^=sk8>*V^7Fb9zr!#BC&-xy)XMcs8>s#BC&N-j^%!E%q|Rv*tZ9 zfQV$xdu1hlrM(RCta+~wAR<|}OP)o1JnOv1CgC3(2?EJxu1dkn<7!Kgb-SHg#K*Il z@^jzb&1SaQ%Mi~xFVx{OM6#LBgt(1lGv#q|C4RNN4DoEHJT3|#BH7HB?PZ8(GuMQ; zjbzRHR3%=1U#P^(I#BC&- z`Gvg<@vQkC5^ImBQvY99CWr%0Z`(pqR$!5y$ zo0WL^y{Qs^&R)9shC@gC$Kj3JQ}AQ(JrJ)pBf{5H=r^a}Po?0$OTh~%a*Hoc*5`c( zW-=2q1{u;C*nSdEZgI+R>NC+ls&O0MeJo+lqez z@23+p<#E2^H#odJ&R2Y%PS%hVaMkPg~RV&?{<93?+Z$Qt-~8e(B~ZvArh2+qRUtLeM<2;&JN}G zKE>BNJ#jPQvjFvEqIn;AtK47d>QXl_kQzol*~f3DTr?F_c38U<&@?l=^%Z z^ho0WmJ~iGr0^M+f4&ACf|UQwsg*DfFkM=zmTMy|$EU*zbKf z)W^KVKahfdFa_smFo_SpttH_cB_`n?Nx?swf`2Rp|3nJDEd~En3jXO7oTJSo{W;o9 z!atvaU!8(~AqD?p3jU=O{3|IqN3BVEel-QZ*5F0N8CZWF#G!op2qKKb@hA?(ZN2(> z3jQsF*C5V7K8IA5`Dl+#oZkqQe-76S#A^+1Tzq&=>|{I zhvm*geNN)E=f@2m>&ZTp!P@h354pcqpC1@J z=EFXM!P4LCA@?^Yaq9C)iSrcm`GefE`fM@umj5n;$9$fbdzSvkqtG8p#SkpL{YsE? zclldUCi7W|^AyXSB7Cg=!-n4Szun+5pT-1z?iz)DQ3CzlqtJIG(Enl-`oRSH{~Co} z_hz#By~oh!Bu=(pHh64@kBeMu&#i{u^8by&V?Mf9wWYs*6#5$z^83Ij^!Fst|9%wu zJqh_@zxtHmIZ4aQmk36vk$(^fk^VWkS0ISM%iS*K|5&?`{y;tm5OVIXr+=yNAk=7Z z((7KImj5F{!_z8>lLhHd68^mgxAa>LPI{d?c$L8|{dR+szFGM1F!)A^^JL5S8wRhJ zxa#=^;S<|O=O*S1{lkV&qrs`q#lpwh=Z}Uy=6|`+=M0}0jbi^R6ZpT~@Q>~PUZJ=4 z*S?L(V*7te=&k(^Gy25#r*CS89qzBMKbHRk2B&>=FVu$&ZomF3=NzIaXxg z$?9Xv_uG!b|B1`@m%=Bu|D%HEBrW+rEpeV2C9eAHD+484zE=O3|I36vXZXBW@tZx#9-1|Mh2>j8t4p7X019`YwwKld~Aw!FS4G(5%S z^-19qm)G|M&q-Rc9<987B=okt_DEWuV*W3*|M__W|F;|dae4ih(A)B|<)!WADudhn zZZ|mdyFvKxFgV=ihhWS1)_{&I->t$Yw$BSK-@QE_WBce{%+@~k*R)ul7g}C7B$QXl z*df+O?Qiw5_K(X;+m|gbTfWx*KQeObC9dWEgB1J!LhziSxBMFo&ie4b-T%B$`#+dq ze{0YGZTrXd=bs7o{HNHEr$&iuxm54tfr7#9ufVbX`wP9TKhH>7p5pp*h|t^m^PHjI zE^*aolF;uk_&W`~t#3aycwFCJE_`D9%n&?h_>VT;(7nQ~eMWnpzR>!kd+S*K?=ty{ z?Y~;|xAw0#{b6kXi-g|V{|duDw*R|@euuG7+WW}Q44>Hk+k{VSe;u#p41YUbZ8SLB zyN*|_ee8I3f}#Jp#CeMK`Fe^z-200m=l=Tf&uI1G9-+7TjMm=&D)haE|NrE8Ro{Qd zs?Q63zZkc#SKQVg+ds$U`$Fr#)=#Uyt)Hum-B=&Aep-9l`uXqb^S|954@|J9&F}Uo zzjZ>t!{D~QJz#L!XNu52WN=$v@%M+RLT|r6SpNU6Jzp#QZTVXMary48e#ZK|(Dtj} zSFJu*imiCE{C{Qe$r5K*`)h;e3{Lwmmi$_J+uj#O^luXSr3T;E^yeE5PW~%}ev84M zk~mM-8l3bO3jKD2|6SrdJs@$4B>m+=|B%6-lsHeeo{*k<4>IVw6Y_b&A^uOJ^ zQRoW>f48CUH8}a-AoS}E{#QdkLE^l9pTX-5PCmD*o)P{+`>X%${^1Xz=T$~e+g@xr zGGE&N??|D4z~H3U_GQa=lhE)K_Yd0t*mAe})SGf4f9-!}8r=3jOAStX?SGaT-1479 zr4V?V^!oiUhd2ZAKf0Lz6Vv}i?3oi9(vSAMc%k%F`+3Hezs+x>za8{{sn8b;{$7dm zw94Sj?<UuAGhZ|(U9q2VdE=S3;@EG5{}*5^jysrC6i3HG%5#QFW0 z(5K}$C;Y2%UMX>&rc0c-^8A0udlUGos%wAzLQvvR5>eYYv__4J1DGI4a7-YP8x0Z# zELLd}k}ybs7%qqtqDj=-2-4QJ+SgV(Sv%7iY1KF&+Gi~t9I9zfs|rE1Y|ZGEnXn=FI-vsPHQl{-DCIQutE} zzgpq1D15cTjX+#e?llT8A%MWc8lJdtg2JyA5XUNoU#IYk72c(A**uidQkNLrt>}9c z{jCbWUf~-ReuKgvRQQbwe?{SX-VDz0CNTPAiv9qF_bU7}h2Ny`28HW!eyhUu_;Z!Q z^|FW)Icnjdm~4#zm>NCE+en(NjboYE^Zjz4FZ7jEyY| z!!lII<@S*slsvc1M6w1==j!Uvh@;-ow1L62clQ9Z72u%qv%7VhQ%Qi03YTDSKeMGI z_eZQ-x=8M8ya$@QyDEyP=-kaQq6rs3F25*?QQLrJQNUrInY&^xl{16ePS(T55qM(4 zH@#djhE`P=yQ!*&siKiemCG$M0dlVHfw_c()wx{ioSK$Pl6@!5jrZR^bLpb8(|0v5 znfFGSOF1|n*uis4%;n;_59Si(8kJ+gTsr?9FPAPVP19y`Eqh5i*|cP<#-yUdDO$%u6I!?U)soUQEfueKvceT z8JW6g$d}65Ak$L}F~Lw2;_xB6pN%?*d{TlvOTL8Oo+e+S$mFneR?m|!VQ!;|ihBqK z^7Kr31?s(%hae)|x z`O-zT(e<49=si7Yz9gBxVu&)bdfI&4XJ(!+@^@RRdv)D(KK8E5l5RU6xhZp&p$xW% z&}_1MEjK#MpO>sBp#0=fBQuXd`RQ|?h4QC~JrLzjko#1WKTYI#KtaXt^s$18N5=~y9`7@JoF>Q6aRQ%V<1}$Y#^bXLm#Ch3Zbf7Dxfh~B z+w&Py&aRz0iglyJ3Cx*TKDn{Fe%g%lBkHZqdH&5d)`F-A8I`X4OrvjVP&OL^QMZyxFzq zPR+zZJ1Bb6cv8e>C6~9Q8t1n+FIaA#)Rw0@+nSd+i^T_I`u5V?IxjV^J$kx3Ytho? z_QbfQ%TjIQrky)`?DAA|%VNi-ZDHg5&gLa;iK*vb*f48GV@rEmb0?s-Hls_!IkgwY zt~gs7#j6?A2%BDGW>n3!DHL;Nr;wv+t$NV5r7g=^+idxo*?~plTN9jfZC<{#Vq8nS zhQu;DG;@qwv^3S$2{SapHku>lvnDkMYR=phtdnp#LjnqfqqrD&v18*QW*gzbcRX!xTTs|80T(NBr#a<^PsI z|1-xU|8S4|O#%5;L(KmV0`faN@{jb$|6suW4MUV)60rY`9{ERkJo3*Aw7-ra%C8T!zfB(b$9m+i-N)bmtr?>H8^l>hc2 z+JEmr`B!@6PxZ(@I#B<2I{8g5-*SlO|L{QlZ*cM@J?&o$CQ_bKE}H`7FMgatACmur zK>2U<dH%Bfrig|MY5>0Eug3DgQ!`{N7Qv{ki7uv`r))cJeDD#GZ)$0$-2xahou%&&e-$ zgp_{~&LzF*wb1oH;~iae;AAbr*D=1=0c=c=<5lnT>%VbdOP5do%aGou|4xto9|g;} z{=Y#5p)PUzy);Dmk0HHJerbc%KWPu9{xsn{F8_zXeDX_?F9xx{y~?DQ>+j;kCx4-n zFXhDYn+Mvs{QEJf=#$TV0~zw!|8AuB$zS8-i~f|~3Vw0bggZ_{i0rvSy}^Sec#{i~e(eD>!(*=PTxldtW+(j$Lav0r}25c7Wt();8$Ir*YL z`@dBl`6C1J?;N81;Q{&UJ@WZoV%+{`2IOxaqWn_=^7}mH&+i=L@^1p>EB_MkWhl3Y z=)a^FfX_ER`xkPsilED%-%Uz-!T&beFF)zzR~jyvf0AC1SCHN(ztqVW{aOBNkVw*t z{D1D}m%nC+@?S%GpZo@o{OdgO#{}}fX^8TV4CH@}M}D_Q{@nrjJBKKLQ$YSkkNoRB z@^1>r9|OBG@$#R5cIK=9O+%D_BGUWHzj&5WKl)yr_3vXI`6mPO z$-mXfm-=hDW%QTp3Y_@l&vEjlo>M;CdOZJQA;%~G;UVUq<>Zs!;pB_{l)ug+|1tOc z79W3Nvmg`lmH#7w=eG?W`RhIMzZJOuR}NAB*FyJykNi(~B&?jHE4u06B zmqT3sCZzYtU+?7aRPt~2$e$V*e?PpxO_;C#oe>y+uerdcFIVzE>yf`3nfK=Z0GqJE zrI$lI|NlZ_U;Z~b`Ase%?f*HP$L+rgiGA`Loct0-st}jI9O-@Xi#aevkoVA({{>vf z<&VKQ+b4hFfhKw0{{Kj%_sMUXW7BK$dZ|KjM(p1h5DHlO_MPJSsfhd}w? zz%efWUxE7Hhj~4QeD;4mQ2%9XXl?&*fnQwyn}Pmc2JZRn|MyV;&&f)JCiCCs|2sI3 z%b$%KKTQo@H5t__@TmOEB^LY7lJse;8?{xAXcIo9%EGO>xgHZc( z@^?Bq*1vmj9+y8nF#g?ih)tNU{ND+T|JO9y^t$}}Jo0Y{l>bgAKVSR1E>Qj(o&5Dy z4b%VM?~(tZK>yQms7<)RrI$n8{s#s6pQa0Utetls4w`QJAwbLc0{6}#fm;c$o{6{67Z4vU7|EB`; z9~~_=eYriD`u`Zt~&wo7< z`{ehP+Jp@*y&NDeD@;RrpZwA`OV;G5Y5ym19+&?>sQ)?KCd`-rdjkE>8Yf@p|0$3B zEusF$$zSF4mqR@NeS!XGqm#ehC1n1e_Q-!TVE=7S{ss~3j&b>a57@tIzD>~Q(oz2J zaUQq-;i$ie%BlYyN7#h<@_#7O`^sMy)71I@qeuSN0`hk{`T6D_z7&wZeu33r&p&MU z$iFfmzqrh%&zJv|0r}e(+VndA&wJ#b5a|EbJNXTkP4qur{>KFRzm7#VNs~*-@_zy6 z@$&x?o^yTWzun2Nbm`?F>E-(KNIya@)Nz}WU+yrV80 zVxRn-PX2nAkmdgx&g1eM1Mhz-kF^Q&)&GwK-v6vwYSZiTf5RjH%Fy`N$#1Z1qW|&y zuMCWTH#+%EE+zB73+M6te;GLba_)b9PW}d$UJh~j+#kVb|KepfMW0JZ`TxRsTz(>8 z|EA+?!hH6B3kvz7D z^&OU?&>4s2&wYm^eTic*8}qzz*^F9qq9y2X^Dxx=Mf~FFPn=LW@ubpBD9@ah+H?E= z35iWqg?udWcq}%Wbf5hm!4;e*0JT*uN}*xsI7RTA9X%abXcOU>!D$F zU0Vw4y51dG)criFPHpeis1+lScuq+&{cKJ8-OalZ4BMW*RUb`n0h)fuT%&|j)063~ z<^n7VinHNNS#($p_PXeLcX-itN8{4z zP@bzp(T!(8p=^fTCmBd-((@b`qXzaIgqVIlH&^U%`R}L9`9@w6c~5q|Q(4r_mU&k1 zRb!3d`reL``t+Oe%qP+qvH{EDSjup;{+U=@tcSr`?zP_^%>|BiPNq;wsc^lR-oap zu{o8(k~qtjFK=(;C6}LB*w(U`xLar!#lN(*bJ?QS(lL`JRZJ+KIQfLqdCkk)T1%HL zE$y68adJiFNi7w}mbSDvFI`Z&vaNIZB1BY-A6GuEvUJSCRH|e7DJP!TYaqP%!NVQk zJtFb9-Epc`;KLGZjW(E;iqpfO6LGnAQ`U(Y1~>3vtd}lz2MBj z-HV?bT&$ZNQIK#G#n~|UA09*OWkKS|0PZF{VzC8@V`7N#IW~a%2fhV~Ons1qGf=Na zt8y{z1Ce*2e;%#uFZiVx3y)4@%1iLsNHbcMi{SK48m;PswDsQ^K2mEleZW@?y-;QF zGmSo&=x{+O_BMPn^;7VBjXsEs(T_Fx&6JDid9~r6vA^I+!~aNOlMws_Afr{e2>yi8 zKT{t>pN)pku@N7^y9|A%UJ3pIqfe%O3jVy&KT|&iXMa9g)pNnYKIeODDv<^s_H*&D zIDr2Sgg*NH0`wn&{yzGnU3>rTrfS($`CkOCJ3dhuw36#q*m&n!l!~i}afS;^ztv~M}!e8V6 zf5@+M1vT>=I=@H2CJga%uduKg^YZas>~@L6Nw4d}6$;noeuKg}wiZ5LRJi8zU4?5t zuPR*AWAI=C_0jbEDO}5~a5$Px;$Zwlp9P9u^XJ?qL!5uN!ZrWTDqQoqQ{h_A|5Ui9 z|AWFc{i_Psa)&WPPESs|NWKak&I5mf7bzTFON1ZfaOSsM;q=jBAkMlWd`fZ7z-Vbx zyk^^EATDj0*Gc|EAfCDFB@!1K)Z%)K*`aW`ClKmZ_}=cEhtDZokK%r)@O|Am505Hb zkM3Sj_$YVI!!CtqMiGg`zOG!DFWrBaDqN2SCn$Wh1z2#GkJ61T%T{22l-Q!Rk*vYVoTM0$U7vUs zmK>fkdseLokeyhRq(L9<$JIAB&R?;#rLl3`;B;y&+h}f}5l`zKZJnt_ZOh{s&YRUZ zK`fKPueGhcE!Adh7*7#dZx9;CRa3<4L6B`!Q{oiyl242?OYWMQ#ub*^Iy;wj=B$s* zddS$;ws|WSIF`|B$(gAbF5at`^L6S*g^yZ`MXTc~MYhO87qc?k0J+6&BDktW+>J4db=#rtVIta6?CuXqDh!F8_@aw*P;>3b$4tN70oV(b!kfo8Du`W{Ml z`d-Cr-Y4Tci6`C7QSJ>Kt23W+uNHhV68q#gkO@LQ`4f=dC%?%fpW}_V{1H&fC%=ip z5%S63jq>x!U*(a{@k?Aj-=+HG%Qz;V{M(S&Cx5+1K6%CEzZQ_c2DA+MtX8`lb-#JA2XM@g{|3Wti*7j$Y7MK5dXHaCw~s=Cj;-loJEf3 ze;R~Sz9Yk#4GoTIr2y_2mw!L#n4WW6I^5{e$8pj!$njNoUT)CLzs)ZF?HS0NNjf=R z?%HpREODWp+)|N}PN2`(^f|s*O)h;&%rIgcT$2D&9XqOX6`&Zy6>7`z5 zLi(5plYW((Y}@AaARAx*4PUHDmDah+{I{N07O>~`zxZNJ8ZQ*@!52#zt;%Ruh5iEI z{|S!>qj1*0Qe64odCN}q(d1EVYbVZ5w6t>Tq}b#{7We=91^WkdCpn?m*`M>uI;dhX zFt7QG_vKY4Huqn=-m=OueY`DJxup5pBKwB8PE7i&OCLYPY1uw}ZDG4hD0(p+>Edna z#0itjoulE9+QLbd6I|07dRs`UN$M)2R~6n)4@=OkZDw8i-DLXBWcrDh7(-{X3+kM+ zS>$&Ga5CJo?&V<6kkzF})}%w*RqbE?x%Ce#0b^PQ9a z5ZxZTKMtB??-H<>4SC4JA5C<{GmN~0k!w?B#mTj^%JxOHi9^h~n-Ejmv%9GKR-E)A zGTB>Oa%yo=&zB9qj>6>HtICRnyn7Q+bCJyU0GlJYcz}HYz`(IS(%Lv_V%WYJXED*u zc#F+32AcZ-+zLyKZp?z=X|naH2L`tJB+QIUxSYy-&Um2>d?DsI*2?}MnljGXF0gf3 z<9xG4-2a7sQr=O-{l>;1?}y^Ya0UOts|dbD)uT$gMyxBidHC=S<7hO6jz+wvB}s#D zF#o}4scSer!0bEfR$>TsY`~E}Q}w7ZHKW!H>vC>P!v{u<0r$v%sTy%6mH*!;bOgS> zd^5<0si#-TUp<%+muo%~NcivYQ~Cy&u^)_wc>sL)lhDV9R|e=m9l);%;GYQazb`<~ z`3RpruLSsX1n931(7zqPe;MGz@xM=>Cj$64!GE;6i<&wM+7BDt4XSW$>L88<2G0x@ zO}zyU*ell!tIe2??=j`QsZVcqZJPA&FG7#sv;L;w5bLc8K$E^&+d2bS&^@M>qZ6f$;f(XRPQ}AAb z2*mk5S8&e%Fz|lPpWwF_9Z)#yso;CF0wItOYn|XF3fFd^UnN7_4)iP+TJnGMk>- zo1@t^m5|wl)@)1)8bjcAI5n5OWN?_nB24OvDn+y@Nrwt;>Du>E##86 zB`r%j!ul^-x+v8+Z_zUSZY;7uw!|S*M)!Z;%jGPd8Oqob2VP1xE?v|*e%ZWBqSvbW z#i@B+@7J>ho7$$@;xAa^#S`9L)^7RBH?>Rbwy|cU6Mypg@7`K9@c~p&*7JBMX6J@* zGApnOt{Ftg4LBo~RhMyHg`Y3zHp2L?BJp79<$fZ(;`gQvNF3)$+A&U{J6%HdAw0%sQO~cSxjg@xN7g4`r@Hh*>dCsO`wbBBNwt(us`w&GJ_9T2?qf`E4PtsLU!u^{ zU&p_qo`q-ycxt={(e}}lkF}q~l_4^Z!uH!S;#X#vR26nr;yHJbL8|cFoGeVH>+y)( zf~RCWXI8jRo%sCBm!#%XEQQU0^^^EEt#^MuB3IqR3SaSv5lTtrh_35hU0Bz9f#FwW zVobgdWK?>q|GA^{u;6W9Wi%}Ji0H$ zDEMB)h~3=WMa&4FH~g+DD@pRf|HqJP*zzN~mY0&fh_Jfaue+dTGX3gZ>&3h#3m*ZC zy7ZR*YpC?rnzBN~Mp6yMKVdRexOM3VE1scUtE6B}9&0le>;4RCc(S*?tcrwJm6cY! zQSoc5NN+o?oarZTDeC?Tcq30Hl3AXMlqd;sFV}DjYDU*P!&4{JR_ypG6|DXl|98EE z$~ePUYsLd){>zPF`oYzRh$Y`uRn+}5;`;Xixm7TGGGsPtyuoEM3W3=!tVYRbl7a;zr(yop29jenA>a`=73v#uP@jHPXu7+RygvPxdKhgC@FXUb zY(GNYJtp$a`t*y29wI6;*?iXOVC{lTY(7Wy0zVT6lU62*Zl3xUKK#4^Wl`}=|6x#q zEyIj2Bv&YyVo5`>_t7vYqhc`z`xBXOGbMXFDPYg2@mu2=skJ>X6s=qBSd=7tK_y0E zM+qcZoa}mTXR_-NB*(clR92j-ds!oF&eDH{Jc_Uq5hxQxF3%&zhk_=@(An?En~j^F9H7Jm0^l1OPicLRvn^>3wl zZC@Z&Oqx-qTwIKg{rBVS*(VI#Zb?z@>_K1+bB!We_aW1?T)&0Fv!YpeBM>9ksJzl( zUo~f;PfhjRvJQfhte06iJq>vhqrbC=>EDa|!$Gb{>5sb|BKl3m1rL`e|b^Cv9 zuK(J<_q)WU=dtFKW(C1x`rmygi=clyuBqA%WFPH4`ZBy|-AsIDlW7ZVT%uu5-|7p} zTO^yQvstWcRwz@KK9kP0Ar3(-xotyi?aB1-3}oh;*>e5_)s2z*f0ri{0|y7P81HrZ z4>h@a0c>sdq~TYmAF9~V(^pq??hdJBQ5}_z{jZq@Xm!Le?dD}rt-l>@Jw89aP|uII zE^KUDy0Wbu?$QaI^MzV#n@N$VNzM_751q>wHh04Ne9_YR%Mu+c=KY^|*C=yn@i}zP zy~zCF7Cy&DbKlXoyfvdX4$JzO_n1Q8$Gp`bL;67AJ9pn)cn#7FQ?ovz=LHym5U+In zklcjh9nKda41)g)=cGT@pmyGmr~l#jpXPA+PN4>O2-1r@)8RWB-(33_L2vGNjz$h8 z(8q^=5sLY6uFvVie-4H|e06|7U&;CCKZyML@TUX(mjv{@H^Bc-0eY5)Pwp*&{4NjB z*9G`|(4dv}OFkgwwd^!yge$A5W1?&tvj z9|rKB1oC@Fz@B^r_vte|P`;G`xu*x@^0w~de{CSYHwWbMVbsTGX@LHXfIeFS_{adC z-v;PsK!5$t&D`UlvvQ79T)F0LVum2r|*d1H!Ga7 z1plnUPgM9eg-=!Z3kv5wP55x+&cJ-}*+X!S^%;mCfuG>x6<(%ru9?9=`eX1D`WA&B zuJGjwFI6~wcp1p296#a1{+WUJQTPddi^BPgEcopT=P+FG%?jt7qu@VRxPIsPD~F?b zn7K%ye@@Y}PZPX=gb37=V+6tZE`Wjfarg-??*NE%-c#_IivCQ6H!57`S0-u6=LAK6 zgQ7oP;q=vGAib_{zft%Y#ECwyDV*a!!DTL)(fkQM9PNmK7$(Ldd|!uC?gtfKrtmWq ze!RkuRQPy@$K`TA42HNpx#of3+Mb+g6I{2)A1Pdym#k+;xg?SNZd3G=6uw>Iy1wy# z#6UfDeJdh>z{3>$g#VEWKUv|jPd20XR`^+tKF2yMA)5lM6_RkDFoP?j?@=Y3XK28Y!J4L_0!nZp-p06E>p6+PE=XHfoP&n6JW*{Gu z2>r1RCpJ;xrz@P#078GZ!nK}F3a?T0ixsZ(d%eQ>K1BHcK;gQ*Z&7%)qW^`$bwBXD z!gc%YcX-^MI~9%z?ns|^6d&Dwi%En)yL|{h(fmPCQ)SWTY{f_G->7h{|6+yf^6FH$F89kF9@nQw(d&HOq;Oq7Kdx|{-&+IxZ&$d^ z@7EO{o!_4+T#qXrRk$8kyr^(Jo_RyzdR#G#ojwBV!(sS|{r6J%Q3@Zea9z(osBnEB zAFJ?E#b=_zs}!D8xaQCOBN(Ws_7%EB;YTA*^uJ2s9JdPoF@qy!gYID z?(n#tJ&IoQxn1GokO#5<-3qT&xV&p-e&46?XBEBfZ{Jk7t|xm_2?X-d{q3;|*Lqec zT<5pa;qm-VQ}mk8425ex7X;CzR4v*{q9YwF@meObl zq<5w@*TzYz;hfqF8>h~i!!La!%yJdHQYl2`|@%<>$uY2(N>%&;^pV3>?OT9$QO-q_LH z*}MenXLK(2dxtR>Q|lU%wdZFn3!5x#>&!4}ZR=dLvdt`AL8B+8o_}G(tQn1PENflS z0k+ZlAx^>gBsOJ4WyeU+EpDCPxNJqLy=`em4vQAiSjfS~uUNdqL^}PNmoKeoOf9on z%A`V`8|N)`=(xeW$a1pEde8_J7Niztm5YOvZRWS7S{BCq&~htKrh+uLFUZz#`JyY@ zbY`e^>T6%j{~OyVqMBGnQakzX9*qqh#Kp#1TjZSBqDq6JB!QZtTn zsuo9%bFN&>wW))3=gz8~hMHs$S4+(KlyfbXsi|=$%*+xr(TvqxZICR&6))1r^#P$M zU5Bu0Z9*Cq+zCCcK2vCL=v>eU8fZIj>G*kzmUc8FfvfDz?d{8266UoH-|NJ^0d=!R zUhHBd8I2cVo!vz1_(hEwJ0=#5Z`GHOips6+XcA-rOp*oY3nrg(u50Gw#v9?Th)gfQ zc(x%EftO4bLW&c&whun;su)*c7K3qJ7Hyf;HVlx-h3OA%7ya-2|2S@x?h!YOO%n%$ z2)A>Ps)CzNiICTDM$8Q_BfKg)%Rb?KS%+gGe6aK~uP13ZmeYar5pkZ3FXqEBLL~^goXAH{g?a;&>FB`(v`p1iRv(|q!;`)7@uQ?cv$G< z-{~p__2$qco*uq`6Xokrx&Y>$TSUGkttcOVvR&bS=)Qk*_yFTVl{pUL`}buK7~j8z zP&s-JO3x*tiz_OSCQ+uDcJgy1wyyxGw5`6&XoC z(6tNBY%k&Tr_5OYAMwwmi+!JWBP1DIoNBHH?~GH;b>L_-S3(=Y2PQjn#+aaCw%|1g z|FhpCeX{pry2`-=>@i-^XOG2j8dwYUG}ND>NwTX~L5m94AiedS{Q+US03( zF6!aCVac2^`{^KoU!~0j1)l)Gx^uyM#K1(?QXS_;1Dm-sI>Rkz3`s8GNz3DK?oci> z-LtH~$khuA?El4beWvKeh;v0*o7|ne z_MdQ`xTffa5|GdfW{hzfN#AetfEoy3a91oT9=LxD;)+F=mVQpsR=go5Lq6AChSa#u z_JExS5UMy=PVHxuwB*Vr>$n?&YgSc-6+4V$>`a4Y9Aiu27+bM}nHOJ76v|Iw9Bb@f zAn(#rjrBJHfR}4s?*V1WwHL#ylMX4`OE&V3b)Tx5RP@qQ&Q#7fwgV_VUFbcATASq^ zJBxDYq$AR460ZI%*Ko3eb(Blj5tISeX98{QJBT#wDt37M;iCG)4$@U)oN0i)crf@ffHQ<^5r|iaz_v&|T5oVXT zaS4SdVo74f2Q6cGjq$9-cgN#Y0A?NMcYagb)RZvy8e+Z zZmSbwkJW^1n-H%y^eAM^w{55@HDSlLKO={><{Or@_pbqET-k=^*!BgoLAjzA$}QJx zO{A$NnQ~pdG%8cqs$Eymw|Z8l3rZz<8wmP=p>Ct0l{;(DJ#RAyR`uz>8ORj)z#iH~ zj&tmZ&6mS2hC(`^9Dg|as-k|{I{{26r&QXE-MZe{v#7fl%(~uzEBk&lbnkR{tHFu7 zu4OuGT2EJ5Y^~y4zt)-o9L-Z)@$2eM-AFk-{hZT$iz%%yf=N_Ckk}R}%aLDT%5{Bj zYgzGh_@DNyf`49r8d1naKNlx=vP`dQ+YdW$G8k>Cj5wC@a6=6bWz#Fvr(e!EgRkS~ zfJO~54ikLQf!c?5-Om6DQAVxj{t31IjwqYC>?X!JAA{TW$xbYDFJyD0N2Awdx50b? z@8uwT2)=-)j(qRFfLu4m=L@(UjmGB-$agu!PlHMfxQ&@G!QoZz8n+M=&Ubu{ch`Im zz)+3b68X%um(h+FdxD|%1>}1VhG!i8RC}4_*W&XL$xd$9ZP zKSNI+zAnIrz8yaLZ$c*@J};o>e+KBkg>v-qX$ata2kfKYC!pu7fIfc-(7ztQM+f-u zixHnbQv>vm1oVF`fL|Bjb9$hB2Lg8fbbt@%WPJL6BESdc@zPHY;QX%9$Nz*t`E~{H zEdl)(2K4`OKyG1x|NH>X$qt|XcLem|-rqj@&jspLae#kUfX}4?JHH#iKOW%Eha#Vz z4FNur0{UDKsE3aR`2Q$??-{UXTR{H}f%2*f@c(i^f4(2}*?~R~KK!l#AHIY4(eEG7 z=du9(`vdq<0enB`qkR+2Jr{X88b1a^XT8JbdwmAtq>*=}A0>!Dd^CQ7FDHmVyc$2j zZz705{B-;Te}o_casBT64+gdPF*q0cw-v5^Xk@(z@|mXS>1)eC{7n3W&uI$hJzH=- zrZbTKIQ#_HK8VLEyjRg{--S;&9M#dxK?1MxciM9+&AuImYXvKdIP--X|( z@Cw8UpW75(rEq@Z!9YIRS3vs?Y9E@vD*CgLM)*g2+ydKQ;p4~{frlyh2|f3JWZ>b0 z_z8Z#!a2<@_@xRzLgCjd{7{8|TH)+7g%A5x1|G`s6TDC12P*tYg^yMEn+n(M?p=qo zTJR_Q_dx&5Knz`DgcmuS$#lCbQ@Cz-Co5db72m$N+!`g9r=rifijS6ig~E0Hq3=5b z_2e^&@R4_5#C1KnOVR88`9BqYq~h~Ch4Xn{_=|5J`RjW1nxfY}pl>U@RPh-}qa%=y zt`9{DPa;m_^8Up@dfiUPDV+CDp`WJk!xhfG?HR~N`&2DZ_$b5)pDPuv>!PD*R=IPgVH7g}6YVT+ROj4kxC4 zShX)2pFu>QX^MV|!Y@|%c!gi8@JfYWtMD>~-==WgZ)|XQyu7}qaGr{u-&1^azww~L zb$|7^!at<={6XQm-1{9K*XJLKUe_P()28#a-(C=g5a&~(aI%zq9pP}6m(JHjh3kBs zp>Qp?R`I87;a{(CEmwTt;&K-${#x!zh3j$1YK7}^zh2?G-mX=+=A(V-biQtL^l^J` zP&m6@$?rE5e{IiF&@hmXBQe(*uaq2Lx*0QP);HGFPMuNX{K4R%);NDzXCr4Qed)4b z%vO3m?IOP&IK~W45GmBYXr3&omhFRQd~3{nsXspB&GY}pM=zSXm5;k4FTKbLW{!73 z+fsbtEo->tciy89lUZpFdju_N<*rF^F!Jm1%Tx0%Ukbm{oPugx(79|yM`LcB=}0=4Er~@% zZh%o<43g6i8B}?lMd`E;qV_m6j&Y`0#Yve5zo((ee#^4?%`GW(dAT%9>7k(?=uER_ zgYhD^uEx2RF)3N=eV&Xu^1Zq%@`aLl>lF7%%(CKq8lO9^WqI=k6d`FWV?0U)nb)Q16f<>NgxF0dEa%VChClT>E!WWR9W0iQ= z$cH?HmpJ)?z_}LY(+%6A^%NIEFy(VBtHW+L7--iZ&L#hHT#6H(^Vvv;#T1BeyFEnz zC7m3(Af22?L^#>o>8&xI$7#nR^T2X^3X5I(g)s(_e}Ts!z0ZEPy7K2(iGkT+T1hYX zbErQYJH^8)C%@7?r%-RB6IW69iA>ZxqO87mRY|gIRcRtsnA}=rEHj-;=keWP#WOWG z{zLp|@G2heAMj*w+~`t4VTE-?HO^lQt|E~Cs`Fy1c54OEyMZ&m$#gqh>I@A$c}f#S z-Lru@Zd=V!{BGci2ltF&kWdfTloGhR8Es|tFmSxF8wmVzn1A|PCfC-KHPxhFHk%Lp zg4g?pDB}U@w0Qp-w$Nq0$*k?%Aws8 zZFk@}AMN}cS|Z9aJLrm8$Rd>XfGrbBlf5h8;>O8R)T^iOdQi9|x7L;tM6KmQc!=66 zQQ~2Q60T2U;kXC0mgge>-r1GOo?oXfw3W1Xdigzk3u3hH>APl%PyMAr5S7X%Ad&k0 zPogwoR@m9(fVJQ8D_Y0b3H4|cRrD`2O(OOFWY^VbibeHnuP&|r@vsWCun}bg3nRay zziz%l1RA%a9HTAyAr#tJOzUWQg-#lSAK zYW?I_Q=<*TNKw9TG)P@<5j}pVr?>0IeUuTF!m@%U6Q+{Y_nuZ()O~ZLtZmWNcCk15 z%aWh1gQfze#<7^I(ofTY3pMsdBOG1UoQx{yY%XSd|0B2>lu1y{v3e-Ha+8s|T#ABQ zlXRWAdqr_w`u8RxxpitG(wT(Tfp?8r*s%Mr27C`Ss{iLmVOy-Jn*FVCU9~c@o6J?9 zGdPI*?~{v|_wrW+&$Q`*sh01);A>5~V(+f2tI%OSD#S4+pBCIQS&7T23Yy|D3|S`q zKf$DgTi(#NkxT>W|1;uz8Tm#w`>dYPs@fb#`Qz-AY}x}48WH`a%w5!yIgOjR>$5_x zYpNl)RkVL45|I*pKlZe#o;9Q{aGUk0vEUpc1wUeuVx^qx0TQ`8os=+7rStYVuhIsY&lb-%`k> z|1vw^IDKbBW9V4a{T=Xt=EmLpOXmEEy7X(z1(y}RMn0SAN2P3<}W{oBa5_f!+nwd>%b9@b8)T~nkT7jQI#4Zn(93K?ZJ zA+8^WF4pJtGM_#>AZWmOg=cFTm6>SDBJ=Oz^A9k|$`pIts5PaZiq>>|0C*-udmJUZ zt}IEU-iI+&aU!+nRx?1g%Bp>jVha)CiB$U}x{p@dTHR&^W**Ay01$l^=p`}V&P6db zc$DPVnib|_+W+m2iF|L)Fqlu`DICua!6$KLLD(me@3G~%>P`x@dj?GzRf@fSsz;S~ z?QxUcJLp!m)em+Msst(fYKGsiyNJ?ZokXVF^QJx4nv@0i4I4EE{Om44+( z^;OwUzj?A&qjZ9ya$nJ@sce z%pMYF;J#0KNv|GL@T|(G)!a}3-$`F6NU&gXLqYbewjnqe`HDYBGlKib`S8Cp&ZNx# z_habq!?y+a(AUOCUl^djHh`Z8HAbuanz{gtz5qV{69aPl0{rg{ue>BEl==>M&N+|2=;cR(M1WY>%H8>`W(y_>!gwA_dHh8Te%e&%DJl z{T%RX1N?Ud?99H|rzibc7+{VpU!-FUYH<#B;$0&R+77POOt9^p_Aq)d?=3V%dDEv5uS1O#-YC=C> z;bRqkmBRHqPk#QwfMPa3;qx(t^X?$HUdKe5R2mXZ5Hx;h+{E@?{kJj@Mg=_xX z6d#@n|0fl$`9G)lX#TG&T=Rch@!_fPFF-%cKuq(0pTpz&AE|I%zLOMQ242GdEX7~T zovG-x57*KFzEa^uivKqi&c0FP{!roC4nK7`bPJ()=aM(g^2xWda3C-f&O zyj0;c6@H?^+ZE1t4#J1)cr#FL8GeG_>hQRIzN+YTJ&`@P$w!y(lL0<|R5(vX?n{cl zF5lM`uK9~EVO-CGJ;4-#xaR*phf`0@{}hF5{?&>Pd5NA$g=_xjD?XZko5FSdyhicS z{BKtD+RnErTU02RoeQsO@vS!Zn{#&@sgMaE!q~KDxcv7}Vmr-OW|F9?vXLxVFzyhsWiv zP&j2vey>q{w0%CMa9u9+|79Q#z7-HYlL;aa-xoi@8wes0*ZS-64EG@HmH(XCY&X%(5>xhfhTw(PxPy;-z7;AWOGj2I3=Js58@Jx&Kt z!#L&*scL3Rs7)N4mY*t&c)H9gV9CDvJTb`bNwE?8tI|Qbp~=5H+06# z6T4{TAW2ir3p}yDRTE=%L9JYvweleAi7i{@X_)buEVq7y&g0M4n7E^#xi%H3v#rf~ zy=5E%vz+X5miTKkZ%pF;bg@4O?nC?p% zS;c>z5M!4(5FPPg>1F;+SQX2OJMtUlI8R1(a1euVr|X=Vj`@^6oO4tR^aJwAU*m29 z(*IlP+_^jMrsk7h;$BcZ6KP7=d#uI>hbIRo#5@?{qija+jFtSQK&jbCH<&kNXIo;pBI^^l~6AgB;6n z!gG;hBJppdOMkln?kMTxxYOl7MwXc2eC*=5q!XO;4#0AJ1RGrXT|(%Nl7E4JjPySH zJ>~4zMP;Z(fo*q7elP8OVAddNb1W%egVbb{b z=p)#112wRr${eZ^=Rl*GbO>-xXQv;Dj9^{4T^}gwSqmC@!(Q=-i7C3}zG06bauf4W zRC{07uHmUuuz+4_BG#8`dWlS9J|nD92Dd&Vi*d=f+!ys5S~wH%1^m&;u0HIwnc(@s z$=+3^a4Lh}6(9H#cb$rVmi(dz2xRFyh+b9H>s07fH>h6ns$Mj+#CQRZeG9F2dnJ44 zz}FE7mo&n`Xp#A+?FZYe0R2VqKmegn@DwC8cvx_TwK>!LO)2D&aL#*_Fq=*;GaIUn ze@pL3_?ysjqu~S9!|i#D8G09v892h8tr}zYyqth2XDhqx)sdu)Hb^v4Ty!i4N*xH_ zks1gy?kjL!nQQApJn6qn*IQd?J#J8|ustn|Qs28~BM#G1%Py~Lc>*hO-NU{ZyG>T_ z-qyA2-4!SJ3hWj!XXJ=;HIRXE@YVCKI(2If{W2htYe(d`!AIHswTb#+{kxyze&zM)ODj!!bUNa>sg{W|zH2Wg-71CypLe1v2R>i_cB<)rVyP?mU2DSR&ube=4W6t4en0TO~PbD$Uvo8HEe72M6C#r}nVz`+vqph?L5nPdOPPZV?KCtRyif*!Rzfw)Q<$a&7OBUJFMZ?|++xc{l!Vv+yEh z#xQ%27CuyZ`XO34Zr@D*lI(h=q!tUBrXNeDAFoTlp6PBL6!Q+!-JHs1b24vB9}taV zb;#QZ_J4slCf>`t`mpFR2N^}(kF#Lm>1*AjGY*ipSuw}5)w&`7wj;-F-L?~`Qq;{h zN_E~JsUu$&h$E%_W?~C>Q6@v!1T8JUMjlp-A zY|w26T)dQbP z%$~{noEw*zv}QG0WNc0}Sdn|sirN@-H+bv@>DV}qT%j_oI538DE9ul;>6gs?Vs131 zd^KsuBGmDDeo-?5C2&unvBmCf*hKpmSh#e=fa!&+)7#jEMqSp-t}_#2tDT1DT5R$A|>!a0%d&?jN|P4e-hw?&BGCVcm@+sl%J*Px2O6qa6-43s*r zZr*!g5vvsX3XCVL3$R&H7H-xb&D@aLi*=njd_@I~2?yg5=%mfc#(X$LV?=XJW5s5S zN|L?hNmo5tiM`JQR}Ig~^Oax`m6*x1NlDHUvisBN>Bs8RTk6t})}<_IBrmK&ri zoy4wmJgTerKIZR6_k^PSxC*x6y7I0=t?w~`*E^j$)-|AH_?ns>bl-8F6w3ng|pJ4?ltzT zq^RfXOnxs@52QA62ngn>OMDe-ix^i*e1o4(<6SpX_WDd8eAs0V6!>(b=Q_AyPx_Ac=orVLBle5o@Zk^BgwB4 z*$i#(bPW_Xz0;ni5shcRgpR5Kci{c_09R+$g9nI#*Gr0B6TY3YhTDg2x6bx|bz4#V*d{qSSR=GX_JHpCNJoAE3D%WK{ebJ=&bi z4c*)uwvH&H1w?!EvDu){pZJW-7~*bY5e&wDh!d*%uGH69Uy3ZE z{SVTfWjZ|waeFr`EO9w}8nHg}94ER&d^imeb?^P>BR=9;%L_9P#&2+ox+mhgu6GHB ztyl9aR_?Toc8`wNR`xw!!Mjvrg@WYT5nI^d))h^CD0yn_n4+Fj4Ds}muE|A3H?PNq zPrGmD2JR#hcZBe3rFYSR^=;-T$g zuMvLxo4rMW5p26O`9RccPQW=Md|QbxNRiU!DC$tWy%p6xw>o#SnWX#W5 zg>_weS~+Y2-fl+?#}n7=QOh2FL!&e_-zB5CoH9E=NH9m?AB`3e6KTOW<9-Bpi z?JpKWL_h0!#WPgX=w7#VS~-x+gxj;5>56IMYRqS+s)c#S9UF2=|2oQP#HVkDORV{D zFjoqyX(4(L_4ltVi|z9y(Ydo`4dj`>HKTw%}XUt-GY+{6tJ>s^|X5CwgX^GbU^@0Q%?Y zXhZm3?%j%C*H-kIct)47*7SlYYH1CgV(~31#sU-{k-SbLw&0^S>NM;jR6=<;B7-Lp z+dHCc7(aUJy%N9W(G>eHM6>$za%@sUiu6=GS=mfllMKwUs%BSJZkc27s1R5)q8<)Y zruZyb7&$|r(QbZ1r4uFlrv~cNU5eN<3K{sEPc!bgZE&07^H9tGY52WD2u(fQ`_Dji zMdD1zx<8ln?umL^a2f8?=EF+2KSaxjYm>ts-o0Hqs_L%O$`VE03sHzZWnUCLG9#a* z`stnQBY!uevRg)gEvf%bkV7CoJLNM&{0>`Fb^!Ar8V&UpoB9Z!6=tIb^>Be$pE~|q zYyUx!I($w<^Ul#Jy7#@w%8h$peeam*>>|1J`gClNQCR2JaQHHSI={SxcYtwNY zZqLwhjD=C8;}{JTjcYo0|Hwb!NuACtR^o;fF3(hqcC+F$&P6**&R6Nd{K8`h%xBBBTKeQHcapRrnO|ov}dt`nxe`KFzWF9 zg}xX|L}12Q_vJe&0)np%DoZeJ>zPC@k(i3?`6@Qd#1b~DEe?;b9h@NH5l7MzmakXC0z#k-A=nLt;E(Udv<{_M%#$3r&{ZGX{WL=?5?E+M@Bm z2Z3WaVg^~r+C6De$rftLBy$6qoNQp_l$^F|eeW`q$JKlk z!?s=fn^u4!QeApRd9npfa$2R>P?eKu!_Pu9HgqN|>i#XSdgrRbDq43Ob?2sQQF*C- z@K#UBE~}@iF-yaclS${ukdx7Y7HfF7z)Z%3cmI!?(7f-$BqkOuc{j6p7plkJ(!ZJq znlp@Y#uFrsTutv?U1*kUGMx_}P))_c)HQmkXS1soZa}$JDs^&Q?+mQB@W_e-UF3Zz z9RTRi`XIpEw@fWF!v#Zw7IQT>xic4LqGrH5@jV6U4UP0a*|+H770;M?++zDK(2CC< z$a2$|EDnpna^Pn^(!a(@`F?-k<37^4;8$F%#wf|Y<`_T~JBkjgq2aGAbP2mEhou%9wvKf2maDcKHY-sKcAAl?8%*l{ z!*Q6uzU#hsy8bzA<%JN03Pi0UTBwCbtkuP$S0PG&8)w(LDibSyIq+K~frSz%mbnkq zb*(N;tQd&{mL@83%uI~Sfjvi_QvE=X%%)42{(wugpc{S;FUhm(;%Q|rj1XXXMu z3+#DedJAsYZlJW+9?}isIsHsCNII?To?-||zno0p=Xk6>1`qn^4*Blnk8X`J!;DL& z4V>bhl+LPn#?Z$eq4yOLwqv{tyrUbdx^o>UWOii4cMsVf26%sEUY*+6(!SJK^)Bgf z?A95*PTB_&%*&*GFmfJ&@ps`xcmoyPj8+w=@2lvW++TD{pNqrtHnadWftXI5uOk=nYq8+T{xEWWa>eOX6atMQm_>1=CG zwb8Ggan;~iyEGi%+}c{v*x3d@;YDprQ@*{uQ=N;f7rt2;mprqV6J8tNbO!5CPA8k9MgC8Za4RAKBow`R3cDO0l`sa*$| zcy=9%MS2QOvdXlvXk&GWudbarwqktc*bkpy-Hg>Gc!Cjs<3uc@g?SeH5Z*B z9d0isa5U-Y=8r1G!ZhcZ|7VeoyxI*_B5__sH^&gH1Oel3a`7{x_>V;KO#3Yte-&<_ zlw(%KDV4Q$){VHi;QHav5KHK|1#_Tb?Wpp(LqLY#o=s%(btvT^aGEA7U-g-MB@tEQ z=*%(F3v2mI8C71*<%6oaM&7jN+C8j>1>=VKmJ|XX-iX#aUc8$#5aSzvhNJBvF$PED zoQq>EO?-=L8$P_z=!b=w zs7Jk{o14qxR)S4rTKJm*GFD5A?A0H>xLbn|&%|GwQU-@w$@?O`eC_Y|S&u zpG~3EX}hD#w7Cln0dz~WGVKWdOC&xy690TUtskZfa`=ik?ex9i`Ga32)C2;Ldn#QN2zvOCDrKzf=>*W%JiySN@zG1F`>ROe^OIa7GUAB$Ke zbJr?k{T!C4jnbHz2wc^ogCu^oi*d!AIL+bbI@~pb#7Pb}?E!IuALsB{F+PVoJn8xn z;a}o#SzF|NE?tqsrOy$3Plx}_@e%wATvPvEm%h{;A9Xk%I~mxP8Mt2;>ACh6!@>5D z_&hQ~{LvWx96n?rewo8dg&zF_@oI-3=J2G$_lVI?cJ}8BR))jvA<^UbbDo7k?on^! zocurI_#9$l6N#w~=R&UxlCK})ob*i&r`s{ZQq*J;|cJWt^CjzGRX9?+j_r1|7l8@ZWwCvth;9j)4_c@BcydjoP;1n{W=d~E=~ z3ipfAiA=pU<7UXc6ZebJiA=pU<6PiBN4`d@e&%Rk3{3(4ufYDJRXe)Vk|*v&{TXdm zt+Rl6#=z-JgJ;^cd4>UAgZuU9M5cdO;`ppL{4@PS(%~bGo|$$k)`5g+#g4)e$PBN0-tQ`c6dY&wkEs|`;1oo|5XmZCQyI& z4%FLixZnBe755eK;dBA^;S~Y;9|!Qy!u~!!WdZtspkn*z9}nbrYk>b{0sapL@L_@c zwgvcqHNfXz0X6_=0R84by*(_@9uE!Fw^@Pv)C&Rrp9<*n zP5_?^Bm3-pZJ@mV7T|L`^c-z=K(`&zi}sLM3_VAiot`aFh5nRbQ=q)KPp40xe;EFm z@rjui0H4nq{+V%(na2SBfj~Xs8h$?hZwKh-n*JY^#RZwu{8ym;9v>)Qt|{)5`+R`U z$UuGD8EB8E8~dPeTrhLNIBy0Yy_WDdUHlScX>>GmiTkC)*97!D7IxEX6<_Px%dwl`l&*mXmMwU2J(Anz&@V}=!xoM0*W(n3x4r6x8nHOmfTGD zU8?9MALthG{FmV)&y&RX>?{1|;hcf|m*XcmJwh3Xb8I3weHIzw{J&~pL%#&)LLbT( z-47YaU+XU|BF?{x#0YWywH>tnjg~w||Bya1pApyR2*)R`&#?+W3g?pFlaySoPg3F9 zo*{kY`97{snUYJLMDFnlCyn4Tf+ZiVkG7lEN1m`qf1~2VaU%m|qRWr?UqBFn^f%)t za+?Vvke+dZFCvH#r@zj^24`Cr`n1Ez2TeJ`Kko22pKmCfZCChw&*9{Qp=gBPBNbkz_~>$>{~1G^|5U|C^FLeRn*S`tNAtf# z;kw*I_3-~yJ4JVE0`0I7zsQ~zHukwi;WY}^<#LY0+lo&3j`5}YkDbn;<}!T z{fOU=pYZt&&KZbnJ3MXB-2Ue|g>zXf;WOZH^3is9SK+#z@2Tp~Y{f^f;i~l+?dap> za*)DVH$)#UM8pu+r&8fsAKnWXNYAm2@OiKG>SQuOh}%;}>~Z~TEV-#`WjGhPa(^Tr zZO?g*p7<<9e~H3%z3Ni9t|y;XxUN?l6t3wvDO}g9pDSF~tH%|t%klRPkK5r-3g=iw z?65=e(RRSg3lnGuU5?yihk>}RSMO7})`wrYGQ{;cMB)1&Ui8uZo7U$P#b4{A>(xxf zhi!*}dTM(fYfy{df^(7kVTEh`KkD$f{%s1^_oHQskJkSS3U9)>$h|}1x?XKo_~i$P zKcM)?b2js(?Rl5t{}n~g`CbOn--@5)OV*YouJw6Z$)#+ee@@|Ap8>^R>+`n4HGi`n z0rwc*GmYpoiXZ~9oADD|+9~M^6n-?$8RGO67B>7j8z6ipJ3LNbr|8*N2>p2h z`esG1pF0)>=w%#5xx7aRf0?NuuIq!?f%)Z6=nup>1F_Ng3C_NSfqZm*n_y6j>-zBT z$lV`2^T{0_kXxhhI~AXQN1y!^pO76w`b<;$d`hr)`DLV+z;wFDhK$2lf4h zbyE0DVMY-sSC30)DV%eOLVuCMbvu&4HE`bCbO2W`*g4v*XOdWGxy*{kp-#sAX^ z*Y~^cDqQRNV~6v=pXhnF!nK~Ypkbh%nvb;WIG>q@+VbWzj_{xB@OXYZ6|VDpsKT{e z&K)tta-PDq z{ue3!x<6T_aBZKJiVtOo{#PsfeG0!p@zMN$qHxXMd{~Y2as9U_{)Z_3T>6b6ZvQ_k zT-*N$GIsRZp0gFM^|{#Laec(kkN83Oi5-?GK03d8&$>@3`o|Rg3Wfh(;a4mCHHB;a z-%|J|6@38*wFtD&$MF+A>F2;eoNZrlzMo|vz6L+Rk5Tw)h3h@*(h8rU=zA5;FYFn} z|J(Qp{~HwkF@=BD;mjU?LjM&-&u3o2f39%N=T(L4@_jwP|80fq`er_5ggol6%eRyO z0uMLfC;FV|@VNe`Df*>~p5G5M@SyelNPthX!gW1dtoUd>uT!|@&kwp8;(D%ExaR*^ z#Ygl1j>0wnA1OY%9Dk;8ZRdv+AI<+6h3j^`2OqAS{(Ipl_AhcclXWQk0EKHk4^e!y zo<}HL>v@9WqxC#r(Q7^zEBYl$pGy_4>rb!Z!)HCo*DVU)Tj8HmeDwYCYYNx*#~&$N z_cOmy{I&jnQ1rUpy{hmll|G~R5Q{+jUx%OQU!m|Wh0jpxZLW1+;bEkE%#!DYyK^YkFF1wC|u_& zrTA$6A5*x_7sp5p5ojMhPOBn_KwRrN&7isV=d%(6`E!gd{O1rvh})lS zjUmo|rG<0Kmu;DW{72y@{BIzL5a<7W3mg2)I2Zc+6|VF93x(gJ=-*Yiw!b-&H!0~yFCji1z?3+YJ5c!!MWfs1M{W(Jv}bf<;8_p8OTHPIZojRBTo2F zQ2cdyovmlec%6)!u5UsZpBB} zAFhzcK>c<7;o5u*#PxmuZ;HRp*ISBS*N1({0D%X6-#<#>S0PU9e~Q9;6fWaiMqjV+ zD-?aV!oR0*UEl6fxW4Z{qHtY~+Z@ik>ij;ba9w|%Q+#wezNv6sj>ZWIycwUjim-jf-o%lTt-`5=l7ykx5FQ@Oz$2fY**?^z4yIO^RM&TDI{5FL*EBvDhXIU_i zzvi=sAOi8T@DsVDVW9rHTqNJ5*W>nIkr;va4E%)8p9mrlUxlCG+ArlAg>yl72GVnk zB=q7>LR^<`siTkUd5pqK6rTx-zpl5_6t3%StHO1DQwl#%^T#;@_0;8ira>*f0q2sh zc?#F%BI85y(dB!sqSxiSUg4V04;&u1&)te%=j&00YdilYz~^a&AC7a$*IyJLZRdX} zT-#aut!aIv9BBt_=MO194LBFM$1405gt~liE&geoi`=g% zT-VzlDqOd(K80&LZ*_RQydG2dQ8*X5Pbogy&N~#Y?L1u7TP=4lhsWg>EBpv0SNvUR zA1!xmfWNf6IDhdQA+Gt?Dn6S39EEHB8r}F zSK*w2Hr94N+n|CTCdapydAxO3vtcM+2QocM7BT-fN2 z#E%ycM|~fZF$<%`|BCcu3Ak{JY8NL8h~u3KFIV`_6keh5mlQr;;o{dsxhE<7|0C~R z;Onfayy26EOF(EsMJaMSlpraWHYuf~T$46w&w-TIwnz~%O_S3$Hceu30rqv!p zv7-&A* z`~JS&o;-X1_u6aiz4qm~?7i1+AOOe9T=BU-ml*s4gKszZJcED1;1?SFaf3G-e6PXh z8{EFnUS#kF|K7x87aM$;!7nlRpusOS_}2`6nZchmxIP;&TFxuNm2z9~Q>SN46K_=z z*I%)L!x3L7KKG~jaCar%X7H^BZ#OviyU~%J_bGKXM>rqx#R}ruVsLHS63wH-mtEO@ zZ6^;b$9eXhYlj9lc8c9SbCi9h-Mg}RzFFl1-Va6=6C_6XM98WO8s|G}f`cP#XnZe_ znqb*45STGjxtuP>qu%PlPZ6TIzQ3kbmP||pH#_a*7a!ey@U2#=YXK%5v zkt&e#FU&8?wJ+BmkZE7OT%z_58Z7nWyLzgk#7xltK>P2>#Bfr)ka+vGgj~-(+QWcDoLhnbke8aU;#8niMQvU`#bAd=MLD z&@0s0@QhHOZHGqLX?Nx@3q8JX2hs6Lkou!J(u~OoHH`8&gR#awXh4!`N0jBfvaosO zP*?wOTpZ+7*0Be#Y`-#*cxiEcVF>J6i>T%`Bd}ZR6I2cmJ|f=F0ZIp7x^QLt%FY!l zm*=lq%waUF8L7rt4u(ULSZrt6s;!v4HQK2xV?fI)G-C{J7i;^v)(zXi2l?^ftd3d3 z#UUAmNLd&f8W<`M{(zb~SBPERd=FY&@7mr1h~pBZaIoMDRhCmmw~fJ}fx)+w@sOE} zV`5o1Xv_)vi0td9SMT|x-$S=i1!cd=O6=eW}gRw7dG?qeP<>7&{f21#&Z>8Ftq2nY8 zskDbwSUS(RVjUgt{oQ?quA$DpuHjz-tIr!Q zc6D#aXtfNid9&3tyEmRDJNpX#>x%1b44=ChTkKk=u||P|Bf~N3wS{6g0OXQmLr-DN z$hweOFNbrvfA#jeNO`^=8H9oCwHbNd_I@MhhOWMmf~|cHYL!ZN4_hH!T#=rJLz3@6 zR}bQGxFGp#bI+9?NqcfFZXS$fCTeJWWe{!Q7A-_Ut_W&ZRL7z0gNM-?{= zl)tgFZ0p^W{$RI8lc4+v`!W-hdwoIzxiLtdkZaQ<4oO<(8Z{GXaOhFKy>$+c3=R$q z6$@aTKrKSM;zs*T1|qJBbZPve7HrEBXH_QgwYagXuWz7R%*7)P=MC_YqS&`NcsHa6v}@$^q(Yu3qiQoxl8mnl>aWIPm;gMe;l*&j|7)c{^cq1pYifnM3S8+ zlz&l*{F*jLZ{;7AApccICzrp4AK>6_^7(L~N}Ek}NS{>xyS)7UK0WpS3jD(IKaYk> zlCb@bv$4S48M7!X)`S7r7+1{Aj8b@;Tp^B)`QoZS(op421G$AU;Wc)_=Uz zcEs|dsw(7P?d5xQtC);_Hx1>5vX-UDzdPqxt@a!#|2X_Y{ojIx11w^w|GWM7SzisF zOJ)5(;`1M-zt^XKZIse^!t#6)1y7Ryj8Cuga>^!5|8b-bbt1HRmqOby%l|6;!t!67 zQvODERyg(<>q7bSkUmL%3n!W2beyC76YvY=bKhE0`CGhvT_-?ZbfNsEDdk_~<=gU~ zi1eZSSEiJIrzbpA`KP9o|E?vH-B|fgN|1jw>N%Qoti9vwJ&(? z5b{?deUkiLUj9xa|I7sWGoX;9^55&_`)(BFBGmsWNS`FX+26RW{Ie3|vrdxat4Z5+ zk!0ry<(~{VN&e#r@@IlJtp80Z>8 z|2Z!o%71;z_&3O#6`b0~cA-l7uS*&K2D@E~7B7(UInN);f18(&+i1*naIl68>pLv# z4Jq>P-Qd!%b{9E!gzE-E`FG+5o238MUcTCu@oXyc^KPUM^F-RZK9}MdGKXXNxeg(e zKQBf8zAT90T6}sJs?x;UsQ5g#2-&Pb&Ya0hfN2 zuUM9!>m)+?|Cmz#@iSa{d%gvcusuAQQvQ42;?h6mE~0;~y9niPOewz}&F~AKUN52i z^(p1wKIBsH{eX_;Z^bW^e;i&)lJviiH%mC*ja&eKL;1%beUkp48g@yh`;?Tw5Wi6V zRbWW@b3C11R`?f(ZuBqfd~qZV@x}i6vC$I2|D~A@_-KHK>09xfqnIVV`fM92`$O6b zai0RF=7%D}RX+Wu;KfMGuY_}uK1qN3y#C~)35cn`9DbT!^|}xG563R@e$p$X#gF66 zcRnHg>q2bL3o$ zTw3sWQ9H_|*jTtf2oD6|uLj}4AdDd^ z#t%bCEQ}@@3**@^7XES&9tpzt24Q^SjHQ1d2tOEv?+?N^2H{OXcykc`R1p4~ApEyM z_+vr%<3SkfS7Z5qTM+(Y5XQHx82#sh@XbN^mLPm<5dL%!-V%gw3&L*?!k-Dkqd|CU z5dOO${D~m^`5?S42)`o;?+U{248mUv!rO!J-v{AR5dL})epe743&OVt;T=Kvjv)N* zAiOgO|3wgfPY`}@5WX`Azb^>?We|RU5Pmoa-xY+%gYXA}@IM6Mhl22jg761}@P~u& zUj^YW1mTYaVce@@{UaLay$8#UvTo8X>lT%C=^7g!<`NC8C+WsyZMLfqr$+Z|&JGS0 zhPklG#;xxf&h`&vF&B#oHXDHz2fb@ID>qqxlI;SUEGDb7nBb1bU>1yE#!a1Oxw4_R ztFL#stB6$#anivqPPP^cLn%}nhqGL9DRcOm5*QXpX8aPZ-e|E*c4P1G#x72y`zVy9 zm|Z(C(vQNp^;}ub6<5*;N@A?`qF#mzJt8)qj0DkyTuQuDLy$PGJS@i0g3!CRtG91t zsF1-Tuz{X}kMS$Qd`Rjv3#Aq@@1MnL+P>ay)=|bqusRvB5&7;~SLo?oR~Rm4qbA^~ zP*IY+oKBG;JrcYZt4A|nB5jErr3Lgv>hjs??Z=ve-X5qz)*?Vv;F=LD zN7bCM1VNgc##(5&v{5|KG&b7(P`0?fci2&L-35BKUphvgU*K5w zO5Y$+PhoA>NMAAQv>=FUQ)n>^u?e|L7BbjK7?hsJR#Q$EK~WQn5wfpz71{Wi+-RBM z!LH%q8wZAZ#6Q$~1BWgz*z^DpdM)DmmJu|3(z~&6I5SwlxFRi4mf8)L*<^bL3LNT+ zF59l9y8$wz3}ZbqDuHij!|S_-P_^tbipbJE%SrgV;fFc0W7zP<-i?JUmv?LG;=oYB zHssVHDT9`faP{;oBB$k0Gma@qUVf@>gHAU)E*p?~1Uer-A$ z)M2J?-M~<9as9@K4tI``{&F+a5taP~>nkH-OCf95?Qn5$LKZG2!wfVPap*-Ua;0HJ zXU?Y($(WQK9vB(wj?0W1gfxK)u~D?^RaPUO_Qs*EL0|bJ{SwgOByo%}npedaJUkTivp(JGlMm}`>oMyoMkgRB1~c%_S=C zKW#+&+Y~=tQseA-e^s2{|LAh=67he%53dSvyg!RuAK-Y;5Qq0oampXh+v4z^B2IBU z_lnba#sAskyZlx0U;FTV0sevyKOW%6F(KSj?h=(t&py~2;PXBG{s4c2$7}qRm&5UU zs}D~P@b~+0Lx6wEhnoXjZ8_!woNEZ^Rt5NXeOSLCGsyh>)Z?21`u#qp$Z8L5P@b`K8?E!v|$L|X8hdjP3z`yJ9`vUx5J^pxr>z>f3 z0{jo2es6#u%f=43Kfu*?O^r{ddOOS0PY>{`Jl+uC-5zfa@L`YV0(_gtR|PoF+@xC{ z;Gg&SrU2jV@$CWr1CQSo;Lmw{SAhS~G53w{x=@KFTnr71fUCt8|dok z#A;-`a1L|jJzo5Rt$KXl;ZklaU6w7hAjUq4u3^wtEb+#RzT?Q1nbbmb;SIUpI5rhYQd|0qh{#l?) zlE2Cm?)3sGpG`HCk9io8AI{MZdWAmk+cU_-F|TxbJ=Oag1ug&Soa+4e?i+KOPOtrl zRlg;C$)~p%{UI&BTNA68qm>1@h-+pdb>ZEB<9*{!s(I zvTLq&{-->|d{d=idd$(zonJ98>wu&=TD~mLljxT}N4xhtp9x%A#M_doht^uJX?^{Q zeCdbz(u=v$ANMjQSNds3>7|a+Z*!%Gu4{c$Yv+W}yFZ{_mM^^!qebZ9+~^}UAhx8E zV3}vRXO)XuVN&Kwk6jlgDD!{t2Vfwnmu!2Xcx2vL)J5iy?Ee2caNxjK*t{Kk%r2jq zEA7_ogCfFD08R!c=S!zfp4Bw&GrIdea5$iWFrmB|XrwE+|4V(fUfsG9I(s2s`qP6y z)jV{R{=G6|?M=^d=KGYCylu>v_Doi{HywEJGW1``#QzGLnfcNqWbs;J$H ziL=Ze>Bb$U!I}xovt^oIxIe43(AccpSaoh}utva+((_GE2-j`nxBi_M&SoIqrspPC zI&6o00Lbll6&Ph6V6XNB56&WxsX8Xp^u4BW0bL4dOyZra+rw0uu@00qSCcFKYp%4{ zwE(Z2>!F=YroHKjSd(RY&6WNmUwSFG=dgNGc+S6&min-SwvBI^ksCXvzN7Tw18mjz zv*osyTu#2qVPV_&$Q+k2UI-2?f;T;#P>9^vCH1)-qU8I(qLihlY{Si==^v3BJ2F?o z-^Def&6(nfxozJo9^IwV=RNldopP;Ruwb+5nmR@NV*Z32`{ZDVZ!c61=B^wS48_TA5$laxZsy5Q@q zjIaI<_~g-F{}e7?eO_t&@(^E*rJva1mwp{ppcHe}b*@&B*1K~1MLwrT0~@oS8*3I` zQTz4n7@2+@dXU8BOOK+JPS2Ivko~c@tr9RtF!CRUYJ48uEH}2YzOJM6`z57)`O<{T zG1skCXQ7B-)cJXm15=)Nb0FUVwfjA%;sGM0^Or zXYv8om%9r_or`yxe%xuw-4X>9a#l?VY0+Yjx%ic}+t}f9W5YGM9XHk2MHG)l+~dmU z(NsbdmGW;uIk5~mbeV~hU#8@)Qa=G&qx=ICx4o2{jwji~#W0%_6Dj1m3i7`t`TZb& zkPouL%GI#b6Q8_Xexaw!(QGm1xvqlno03YxGq&P6!iuiU#5E~7x~7603wSaU4a`yW zEMs#Ndw%Ioc}BQW`dKsbt2I?zmz3EJW$Dj3&3_WoBh617jYp=WbcJ#{-wk&$*Fzw0 z{W{_@6Hns1J+98l^CE`UEFK45MyZBVN_Abn^w`U&rVY5KG7lV&Yw}}9$he#zTiig8 z8+LN?+|~3wSGLmb$=;+=mdd4k!D)x3jI`7A^km}g_r01-Z@;Y3D3u7pJzWQloZOSL z^31$j=D`PM<29PUPR!@yRod_H=5+aTH_r=0J_XDPH_~7gW5wjoayO&yNy;1BF}b{= zcU_xIkqTuw$|vb`i!{nO<`l6Wqti#@mhyk;oLd7FuXAoQ;m<6XTDM^8^wz1_(ZlYj ze)p8?rcM{622p$r%aI0-e$uu&+Uh%|tfCKTYh-?JknwQxss=m{obPqp1$BE0IlnhL zWhr7ZnM?5FeTok2y8_-*x|BIGmN))u)!&RH&oUj{Px!}`W5Lwyf~gIyQyWK*xc%@Q zQlcr}oZ298R4|q)%kBWjyBzZc9k{d$rZ%=tZEl^~GJ53gN9;KKj>Fzv{f;TsM^q7O z1n-DdtCWLdPoL+-a?w#&TRiq*0x`W!xl_x)v^uA)<4B(0SX`!BOO6 zN=ec}bQ_|c^>iQbbU_)~rY^H(n6f3Q2pvePXU=~4Fek5q&(12#sQT_iWwcJ^obFt( zxXHi7&t(2wy`UP~pi-%j>ep0F&7w>aqdEg+qI({BN}B6!#z&s248NE-C+{lo-ise` z4J*Z8BQM0y_w;O=bksNTwGt}tL*+TY#BT|3+G8hvrN>Y5SDu?TC7OA4wxN9#zDFUm z39eecB2`9IM>E9nxax{swl2O}c8teq8LHOJaY0nIe$c7Fb*4BTQJr~Z9Ppv)NXzl) zYB>=yjxkhi^kZYI#e%&>oWD96smgIY4}$$BbbpWfO2T=5QxeWOvLt*H+FKI-vlRS~ z$Vd`B=j@X3&!pfjDf#EO^=Yyr-IZAT%U2PcX6jMKF<_iin`YXH_Jb24cbciMWsY6u z+7!9Z3jgv4OaBQjGmt{hx$J4CoyfQc9xtWPzcvNuoMV#SXfJx2Y3Fj!0RJ;n>i4J= z{N5D)w6mQgmveGS_~j`$&tFTTe@{wz-B5^V=!-))f4oQux0+ zg}x_+{)H6!pQV&{GwL`=pR^}o*Vf3h3~1W~N9B80@2`avxvLSM#D6yMX=YrKdn2$% zkk4smT$N`J;EPlEEJ=|&Rru(W7;H=<-*iLL-(T$l_$$uwbi^C+Q~nPS zgkyW>PjS^7F?87o{|@|gVe}k9dWCNt%6qazr*9C z=NPN}Ut{p&4bHwpM|xYXHwjuBtN(U`+wqO}My1cfPe=Y1x9#Lo z#3}vtB!(mXIru5AdM0l5unA#0;v5TBlf*zunNEY4Xo6d~~F@imxxQ!k*mC{K;I=*dr@^hR$BUJFtjELpI>X>rpBEV1 zw&w)~=NPE%W2`HF%rhbGN~5dDG6X{EVmP#g6EdMtf+}8W82DkOT)8O+>xjtZUo6oyF9_rx}2DkbAoZ(~hscTz9J%7jWv3mZY z!7cx1Quyn6@#Jsya2x?RUaTHYHTao`)B2rhaC?8b)Zq4hvB=<7Z%aHL>TRXLZMk#} zGo!8EiiW>!x3?JF%H3x8TYcVca4YvO4Ie9a8uCHMXsb_-$#lf6KIaPRaH~&_QFNrY z`h1A<2g{s!tvDE`XHIWt zB?qgw-Z?#opkR7zWN*@WRh_8~GMO})8x%N^q-<%MQ^$7J*Jd-SqhOBLNJt~``EOKX z@8w13jERmm8SZ?&7);P3PJAQLscV0}i8dVs+gGgUT#;XV70)zT*uH!v6INiapF>z` zt88mKv0&Zn3*8&Ua68t=%dsEBnWa1_f;^KVqjF)IyuUESbEL3JKCKywm2){*07M5p z)FkQ!?r4&Yg^fJEgU081wM9|fpL}6XFyPS^;adE1lO5?FhmS0mvk%aI}%s(u&Z4JTosF=zCbkMt5$|n$4Zy zB?~Qlob*2$nZVf9c~!nGu^rkT=+<2%^|1u1xVd@Bdb!CrT3HFY_A5g;%K!Q9_jr); zkE}6fbqy}~eLjpC=Wj<5!abJRcLsheXAJ{zI$zFJX-V=29huChd#_wV`P@^RB>%|-`BY^n|0lqbe%uh3EEIT-w%@H-%DX|_Su5rP<|`YC&_Q*O9-5m&*!*M{%QzMlK-Tn z_G@XppO;Ynbx52ff3=st)2C(q^SLmT{{SA8lH}`i9qY%sQ2tktK1u#QFJGUBDWA`o zp?p4{CdpsspW}2MT=Njhe2axH2wMX?>R*J))f71;mZ)*E_adoc$bsjoR{xd1% zf2Q80U_2e=GfScT9lrkgu4~-~{7dLxS`dEEF1lXm$DhW4Znl3}{b+!P=|AGzZ$Os$ zwtd+(k(yqi8Bjj3ial~q`t67Yj{I!l^nHNa?osOTT*ZyAx{RJW< z;THdro#jmnj%+xjhUu|K?!y0$9n`fIPhkHG{o^(H(h;)pWpZBHI^!%j2pe5z z9NViD-_e7mmE}EXFLL7%w)h;LAG;izPW%dQzY~u8Mf|Q1?rZU0Y$@m{z0gtmLq};M z@An|FG|2rlUzDH9)d!x6HbLxWLE*}K^gPL)T9 zls!HxmbI3?oiF_;SNhM`md9U1^KGTyK=WQ*t)169HBc|&($aTu5Mooq=8uTYLzQe| zdyJ-+u%j)9EqrK>$jMFhHMz0NL`kS~zrRN}LX-}xR|xC#NB{Whk)v~C?KK@^>ub2b z(CwPRegv#}7Y=A(>dlRjbLrQzD~g-wT1!v0VawaH)|F_kS8J^_M~x}k5oPxrx|;fi zWVf}1#{DO5L^~YY3r*vG)XPSTcH5JXSM}yl1T^qA^a{5<3r+l~C8ggu`3Gy|P-DV& zEvb)O>9E*Z5Cp~r{ zuWeJaLl8tH8J-Jq%@K>m8{Bgq~uHYDS5UzMdoD~K8%0hP5>X$E1mt` z|NpHbC2sV4ecojEb`TTivDX0V9sPwYdXTMQrx=Z?H2{CB7qyS7{U5qNwQ^_WD@ zck3klkrezdz(0w8hRB5w?_`XE|8D$}=y~>55?)Nf_owh#oI?Ml6#U^7oNHy0^7Hl- z`cqTrH$eq0|9)&C4p_Ay} zpMu{ge2x?z{G;vsOM;hY@8te~c+Nv7@#n7SBph%e&exD6dL92bKJvXv=a{qb(-G%f zqvA^m!V$M~uCEu=y^o;@MD*7ioN1H~>x+)qDflUV6G1rQcFtR$A&B!?LFwz^rz6hV zRD3o;IO5c$;ujHwBhEIc_*Deqh_ej}aUXPy;d8p-qxwG^*!c!O1Ae+NKWw*j zELS~#TCP8b4`nHzm!nVWO6m1}&-_^Z>$ex;^dE{|^&FO$ZGet^8t_v-svqK6gP#XK z9q|+KQ+lpbrwi#@1a-J=|8Fq3Emy(dw*3zp+_rxmFDaLGr}>#_=&f9?+n^)8m3xVx z4!3d_8{Eq6G59&~tK7F3-1a*icPZEQyITys?RPZ>r_Pms*5j;4c?0(0oWbq9)K-I+ zNAL1kkL07WNIK3xaKy`Z&rIeAf;!xPW)$RC2G_Pt=r9iGaO9)+I)=|RIOhh`^%#7r zg1COz;5sHSdY{4V{h^rx;dtS<_sB)l|1txLwFH>QE^iIT0RaPjHxxSU$_}nKh$g#z zM0v)QODABcK3L$fVo82UJ59>DRTEhK;SktzFBUo_b%Y6(LbOB|E!>Ao2>kc^SUmS4Za7BX>_Y~HQtSc*2vM2NIQke%^m0&0PV-+Hk{qn&joa;B` zT##SNHbpJis*0B`AyR8RJzZ88=XLx>$fq~B- zq1(@gMYuOKVo)_Wn>HgBsh-u)*S))2TQN-ahk@CZN#dOKIBRKaX-lJ zVgPOiek_WP?R-Y2quuKy`A@p&=>5P4E1tctM&cy-dWPz_Pe}Q^KZWw&k|JN{OzM4l zy@ciOOOfB`ZyJq0A?5Ra7s{Ujr6iSq3qd%2PjsQmcaKw$KB@exz5JX{Ncp^fhVq9} z_> zSNoDy|9oBu<^Ot0a{ader#n>pn*d!>`E~Bjwm&|9g!1o&o~i0^{LslrK6_dh>i-@j zPLhAGe>k%8`92uR|9Ogho%7W17@CJr{=cTkf5ywV`sX^DQ2sS3^}o;S{}U?MUqkuJ zQ|iCL6OQ|IGjQeeeJH;R7>ZD#|GUALPTwb7sIvdR5fMrH-pyvaqoCzK13vvn z%aHgqonCuT&+50NQ|-%)i3n+V&Hym&E)k`!{m3ESIxW9q+#8itf8$<%&0gRPB*@~Y z=~b_^aS(_Q)~o!>)u1m2+3=AfOpm$y`TkH*v0B?Gf88JFcYpN^(x&q-Xm*qLFMsa- z$#W%3@~6fBJsnzGF?xB`$V^U=zk>EJVd@f7$!FVe4uM45__-if?pov2k=SOiPv*#z=*o|4QlB){5iZ%4pq9~M+$jx)bUqLOVfRkd4h2L~8-JTOvEj+p3$)zh(~@}(MC zt3b|B4h)0hmoHVN6{Hnh(hI^=%!_i*m8J@J=IPVQ-K*Y5JW;$;BAm#~GS(kfRj}%E zHDkw({-LUPh1l-h_PvqIb7PxpoMB(>He2Z1veXz=R0B6xg3`Cz86UI(x z9lHn$Dz0c6-*%vO+xrk93d)ZyKptR(6G7<41w}V$+P;q+g4MFpTT*qp@Qi4Yl`T*i zK@FtUFj{1lt!iOr>)W+Dn06hj8U1}#@z`xojJyg4Icp|Z5~tf{@r$;!jk>h~G++Ef zn61r?4WLXnH#qI>X>VZK)(2g_pDy+w&RMVIQWEuJejV#QVDs6fa+B(_ba~0P@mprl z-tr02%7C(wUBtnJ-}McXuTW~3lx!>Q=b`|ZALfz(zxE+DZx3kRa#4Q7K%&p5m{$z* zHch1^$$y~@wrt(P73P4=?I_>X8h1C1tKO&>I$3+Ol16YbjySWwSdYS(9NI@mcXP+s zYOI5JQSvDYLg(u0faPNv+r%H3%x!wQqx5rFj@8vFplB~^3vF^!7PgNYyan8^)S<{u z)v&A!-U|^+^R%Uf4bo?t4otqH=>V1%VV#7CxPaNY|J9mImJi9=24~`#v5||d6fqX&N8>eM{{-j|X=c#YHBI^;y~gt`VxHCrDHW zgQItR8ZtVt-efw+8fg&~CV{h9NAW$b(<%MT>!x<=cF-*;{VJk@vFRo(Px?)J=^0N` zT%YT{35!^~rDHZ~iQ$r^E2Q?{*2pYinagAGgtI$JH)nF)ZHU5}6x3K%Zmh^!xT!uX zEL<0*wcp9tGLP|CFA-7B(Oj>R_#mKC<4faf#`-p}q9&4lykZ zCE@1qeOO)3m;TFf@y1B=rS=-J8eY4#4`a5h;d&#L*jB%~bx*rINVH=8Q#B;!!OL5h zRinl<^*RUXu%auE)&L>SpeUiMQt>) z$jBv~;PdmIBk{+pU1g1-8@FQofTiwDH8~8HTdB@6zuK+45T;JE7$R%8eU3^Rg~?gi zCH^@5dwkc)kM-3z>k=Nbn#V0QA_G*NA8uH{PfFRb{%4QRdF>q^BtNu86vr(JViVj3 zP{UHS=w(=b<@61W6l7VPGP&j2C8fUl2I)jXGVuhN(qQ>B^thaFJ0(V%>G}XoZ@d6Pw2kw)F;Uvl>P(!^21`a-1*y zt^*cy^J9z9!qgP2bj4NEmyGo{=EwS*qasU-XT4n}%|mnG^xpLJrBl!%Ywz3*OZBix z&4sf0u{YI>UVNYf&0_jUc8}OBaFwP_uY~cG9FGFEwUSKiKaCW&0)D>10E1C?M_+w* z?X23ogcde)jz0)c5Clo`^}GClg*DU#Yl&i+fn*8?0vVE z?dwzE+d+l95qbjZ0n5(Z&;mQy9b-N9(;-3fF6xFw>>U#;LGOwaf6)Ae;!WOyZ|sR> z;uMOZil))yS93zQxFxs+n}3f&9X4{R21oawJF+&XYX(6#@eUAZtXODoI`F_uU`^jU z@FX?$6~<%Ks6%Hi-X~dfm9venI1=Nl0o*1pmJ$h5-k3)BA9wRqD{k^Nqx(-(V24b6 z6d%wLMA?1 zwhczJGYNG5D9}uA&v|mj>Uqf6dEj||Tl)$gp~;A@!f?}^=JRZD{u~>ebHO|p%>19e zBJt&&wOK$Tbhdam%4wS;SZ~MqL!HOGB8q>V#NUAU24MVtL3eRmFi~T`6y`(;~$a#Dzm1E>lWzvErj^PE*PzDTI%tqJ+AY)i#-0z z0Ke4ZzYp-0_{Kv1DlhBfzm9i&;@9|ay}$CzMdJEx^>mM4aG1m2=EG@Uh5WiGs{0I3sjL-Ms7ez-S zS@=yeIo*OVU9Xh4+)lK;b4*Dp*HJ0@e?tm>d`dlj1G1C&p9K9R;Zu;$B>e0Y{9))J ziGE#5xsFbedqqmQewRZ3gB1SHq~vF93jgn>@aI{mN#$aDOv1SzF$upbg}yl@KWNU0 zeBPbH|EDSaqCKU)c&2AkKD$%O`;ip>x2ELhp%k2F&L+v_S*}U=M^pIlo}NU{eVBG_ zuiT?S%kN>+WOfPxIK{7pKZ(zKQ}p(slzeinZW5m#r|@|`1?OC65}&uG)K{aF#?7zH zhF{mL>6|Xu$=r$Jmw9^P9OV?JKIu@rnEf|hlS`bF21vT)XCxGL(J>iQ$MH zg`eW*5`+uowmMjFE0-TF=t8-7I#~EyxgRok4g4zi;~o#?-fwU#x8C3@4IjN%-m=*ZvZry!`quZCagIsZ&YdYjMF1g)gkCkN8E;HP}JZkLYu zGW-<3oFE+W*Wsu55`u8VSr)}@`&nr4e)#D~&$LRvnIIhTHvAMHBM3*l1wX}Yc`eR1 zNk@8{|BD56xXpjw;5PppALz)(=6{2rmHC-v@a6DpKA8tP@}bTZ*LOqWD-5ps3EK~! zTj)s7zN37!J%{w4B{3Z7&%;mY&m;&(oOP}El?364FThXnw-SUS&h-k4>+=h7jxCCR z27bCQKleFU_)u3$|09E2K7TYg>qzNOta1^QYw@hdL%HV}daH+d2A^yAUvBUggIm3w zYH;$TV}4G-PxIML5RUi^{1mtC$I@>lF&ybx7fSzk1mTFk9zVsuKoBnE|Db~f=Qj$a z|Bk`WF}T&g&Cd&l{u)C+%jn1UFWRZ0V}5M^>M(dK;xs?24ZhgmBL-h&@NEWfG5Gro z-fHlV8{GC^nRo#m^Vx3bUoiAm&&RMq!I8cNKh6KE4Q~0IW$@P+`c{KmeJ(e+)#vpF zxBA>@a9iG+4Q|V8?b-5PulfHwLvPE~02(@$*N#he{O5WW<->ar9qBE8y`T=i2!5r1 zm%({&Qv5vzx9#vAgWGZSs|M#gnezFC!THTbaoe8T46gQXnEw+DZpVj{48F*;6D#*x zgWKmKZRb=sf0`e)BTeiT2IrbhI_9SlKc#<%!J7=OYxYS$-{71kUFT_vjIX6hh3*!`DXz;@g&hH6yyxHDj{J+uB zuEJU_H&rq?vWAJHS&VSoNX+bFI1l2sbYM3Mv(?@&6E*q%-Xgb_5L(zfxSsYK9a7$f z!Hpp=XWNL`5fEkYAk!>K=KKyuUN+E~qOhKV6sfEox9y?-hEB}vR9fAPDhC=}SLpBT zMZs;g9IOmN8!_mC!A|Vy5ipiFujE3{m4(e}&vPjzt9tvpiUUK-M%MK8cAKcE^uY2x zm?-OA+gljYgaBLD4HXIzmF~ciy2~%iwJ(=;hAl>gSV3Z03g+HqZq3xhA!&^;sJC-% zU)Q?fvc@49MrylKOnaIJ!aYwL3L82xS%)^~nqRpHuBDcvqz`#5b63n@0ci}klw3zW zsI#lT$0dp?HR?Iex@a1+SPga;hKli7L=;s_q{h(=h0VP^Wju{{xhm`o<)JIXQb%nN zGSP@L#!M(}pPJg*SSYUNAcC!CLw)5ME1-LbX<>mYb{271h}8>fZF6T|p?_U*z2#2E zCdOoAaAY_}xwcU32H^KMxh+eF){wLaP81(nJrQZ7n~_0m4O%PNH7&{N${BDKZAq)U zdawrv#6}d|eTA<6;X+v8Vv2oNuQAC;f7ixBX5sQ{m#tjdNj5{trd#z!;cT*Mh_{Uh z@mwYB8HRDJg^f6Rwp_i^A*DUOjQ%1S_O0vXDmo&!27le1C)Rg_H|OY`DmHfY^$m2( z?lQkZpkjZS7zds;S9fWhubw&TX+n_(P)}V<+BB;vW)qlw-`!{Ri1As@x)vKSem>t>HwzDk2TNbD#PHi^D@M&k`j98_yZuAVCI;ZL z__3V)W=N;cIJe=!CP}_NxA9%Tx==pPcukT&-9Ic@`N(R8{P#j}N%92*{Q)Z+{!soM zNS`EsXM%iIWmx`WkT_Akf9~r&gnXV;nIyl4FUfGb+(q<%6#Sw5U!{~^Hz(+OqGwZ4 z{(DiWN%_zEMma>W^td`9r{xNN1c{UK-^hZ&?Q)k)7FWJch56^XH%anWv$Mk4^$84z^6OIS z?A`~onAkW%&Xs$K5IV)n23<}muM%zbhwHr_xkjky#6&p%dg>oOSym5)jJB? zepscNUhiKQK!1SziiQ%sck&}ZzH{!muF!@A>v z;t@;6&aD^olKCCiyQQ~Fwmp}xZTr{aQ5|E|9b;G4OdjEEdtxaqR+rP#Xz8K7fV(sYuSC4G$80)Ud!_4GlU5@)fU>UY!EW2dev&F^vu}kVD z4OVMk)b#WOzc8)ci50|A#QfbipU!|^tUTJB8F_}w?wu)DNjnLnvyasHy)=nC*`7zM z5>mGz>Mls(J~opqR%8ENyQkC_HWtA&>K{c4*5^CJur9=<(tin&Tqa&xRhQe-BAo)8 zg=)9n20Yqr@#6jbA}WcnCVn~=dXMyA4~7HAZk?Xn!7tOO{GZ&vR0$wORg>p8NN#u8VL8`v~{t(R2t2z$<0qlhS~Udg#DoXvCwtvHTu&cD#*!vG(|<8Mb64X$Y#9;`J93kwzd!uO zRl1zN`wtG@Tp6K8#?r7k6^LWl%eLwh5w*&~Wif(!-^zn#hs=fl+7#gQ**2FcwS} zoN&M4gku)QuWi4=w$aHGT=NkEjrcwylCt|T%`V3sPPjjCtIcsZ7++ukH~nj?}e7SY;i3%2R%@QyO7Hn$$khj?kU4&JhZPp53tYrp$VIz zaD#n-k0(OUz}qESt!j^5EITyXO22drvGZ$mb=^;4dtAcOw|z@FD{LvyE$&r9H^GNI z+~q!qi*%UUt?#Cn_sfxE4dLWwCnw$ls=~I;HZVCeiS%cP5nQ`PFMx7$IoZncg1s_I zyJe87i*`fBMnZ5&aOLp`PZ61G@f2}wELG+Ba^~pxFGu$ucH_0F<4bvLX>eo9kxot6 z%qJrdMqxXym_UQXBx!|qXJT4;nS;gExFO-O&n111&8z|Yk&36vj=i5cNdRAoW|;Rj z#`C39WtUKCFZ!J^`7PQj>+4wT8^t3{?VS&m9=~?CY*>cs+}=sqY>Q_w7%%@l?xoyC zTfUoOx0USXtb2ejB)*;coIJ;E=h*%^c6|-4hs)O6T({;jU6N`pMw15yn1}D>N)wKnTkmvV@8s(QYkly2lI+t+ z*7UR^i?!~y(k}#+u>xkyqsFR?bkyQw1@G(2`~x49YxITN&3E1YWQ;qZ&Y(e&A!hAqxqidfWNmJ2F6_EHtMjd;J=imjqD$xW`^G^o=Mvakc<}tambX&e zMa}bfZVXSCPZt;GMlZ(5 zpm61jb-9k{r71REMDJU2%7Z?bNU5gtt>TqP+epr1NWp+YB+?;^CF)`s8rp{9X&vY z?Q{oQ!PwjI2E51gz>cxzC3wwRug?&$NP<@SUea4sf-A9jx#cpaXPB<5`x z?R5|ja4*V1?4m>r?%$HZJvSzAZ35!uWPWb!jo7|AN5X;0kb}2DH{xR0aW9F!e^xZ9 zv)H6&NauWixzN}|?DD>C{MNH49!3P)7e6FG0kvB{2Y?&D%T%>@{1vdK=g=4?X2Q2K zH#W=?`oa~5VKTuD|qR6=OScX*Zv4-4_!MVo=N%CfkyVe~1P+InAq5bAhat z$F6e6L}uyqeFD#^xv|r<&7qU(c!|b$gi~gItTQT_BM@Ak(;YMXmFFj4em41IJf%>{ zLqoj5%k%Qe70cvXlN-qN7R4uJa9FBO{P9e|h(~wyGJwZmliyR8_$M2rR2UCA^5{Fc z!0EJHz$6{h5|7|I%*Ebsb(j-_D6zYNyT6&v%L2@Z3WPvQ{K3oR>H4HRd^gO)-B54x zBQy`bKXi8Av^&^q4coDPtFluF{~Kq;jJgs&ICZ*YqsGl`)5a&A+^H5#ts9-v zi=F4YW!`(ck0Vd+ogSUC7CX`1+}6i@9A2Hpkw)(SxNap9%iokM^b8+lME1t(I>L95 z7Q9yWa14Nc%@QuaexNoZ!!SE1e^gxo)WsXCI(T=sL__S|D&X<~yq4 zfm^^oNKe4g(?cN+hI_VvPXk??8(beE5x%`!S(ri@#vSV(7Ep!zjI zAw>x5=U+UJKfqtfL-gd$6Z~6TP2j+Gf3k0Ik1&0_jeSkq82fvhr+ZB-uiEc?E{~}) z-OTBMGPd}%GbjV)EVs=!YSWZHxXaUhgLLt{?AE++yn52pok2SA8=Z1}RI}_i`+R)6 zkGFMnv#FzV5r49uZ+?liQTuG0+UUFY^Ha0Pu0+&O4;`NVl?T(q;gx#eSi9Y)T^y6; z1a+wp^o|wk2OY~h?$gyXos{<)>7{H*cRA%OI&gu0BM>GLV~62!@D6s~VM%F+MK z(`!Co@^W9rx`$)k(6LXD|CkGAq@Bb69O{L5Z-D=Wm-|(ZbC!^9t!$899<3=Uv+c`Hz2(K z`)oR>Rzm*TszO|AFT}YjqS7Uuw?(SzsCC5CR99HtcJbAj)8m9bR9#`ER_V`7p+74H zFSiFvP@Or)1|xs9>{^V1k*7K{JMvpkwd|6$i1Sy=F2^KXo_H!Esw=EwDtP_^tfjN@z275%c1 zSj1nW3nk&hDfIu8LVrBQy(B&yrjl^lD^9}aVmwd6KMO`l_1D;Oe^a6Tg^;qObKpO%vU-V~f`3X}Nf zQ}CNnE^9MId*+rDdfJ7wHe4EfD}ATnde_CdYaahTuGSU|_jS>6O=eO)(`-Pj!hLX> zdsCA1kH}x#&ry%l%sB83kMn%JX=Xf;XHmrEptosed^p3?FBAImI5WfJjY3}@H`+aZ zHtK7d8K33d196w2T+_@rFYhwI|4sOxrFX0^3$CH^`n|`6 ze`~}?o<$M*x!?;UT%I`*dQS9H9=GNF0{D}{|GbEPf%kn^=*#y(c}GOt=TqAMe$-1+ zJvOJb=fj|fB>HPp=khCY+{yf+1Zbqb#& zQpVfODf!ut=kg@E+fvGPc8dP5P8m`CGOL<*l$irzkp zevzb~_ovYBPm#MjrM>+{ik{C&;q&8^{6C6%w6?A``~LW>;82ox_5S+alzO=~r9D(h ze=k4xZuNZ5lyUofWuK960|@Phex{k{I{EGZyqF^QH7RoEr{G^m;d65eJ>Pqh>hZfN zeEuqh5ASbDeD0C*mY?$%fsT%oo72quj@HC8Xb;u~nZ8%Hq}2O$!Uvi4PWfSO5aC6EcwYR`^YBYTVy=HGQ#Ek9ij1*@sP7{N&3+{5yZr7 z6L1Lz9r1SjbT9Xr1mQyZs~jwN3;aq?{m_wq5I@Dc3BnQo7=DVcCkRJ;BYujXLlBPm zhw)QfTR8C#82n=R>4;OeNs zMEU${LvQu`WrJHiV;B%e{oIY8mRCpMuw43FMtWPWdW7kS+j2Du>Tp{w@}&#uwNDdo z!%y>bIEmqiUyYyQ`UFUv_aen-z)wfK3qQp#BnU_R68scrp6Q5NJ-#4Y^-gz1Q1iJ#K5F6fBcaq?6_U43QYS9*?hbfmZS{#ijQ>-|dx z=Ur0yjC-7XY`y=J!L8mrEbWJV>LZ4ZUh0+jYzE-8T#8@o;ONVw;(zUN?MI5U4bkcS zQSlob99cgM_4ZmHPx=}7X?blw`jEkwczW`&?P18^wmrPV;5*@0{_ioktry-C>6jn> zl>Tn`>4>pUDgH@N0_)>$PU~t?18x3yTf2+Z*-qiMXsJEq_KGd7FRb<=qfZ=cT=1S%Ce>wughK_OM zPh8uLZO_ENfgjy5?h?`KbD(X{r2o06v+bF9b(M=yJZy*B4~XaRQ~h7(l1Y15Wbh3J zUuN)|3~uRfH~8g-p3iu6l>0XPRPMb5;i#W_{1ktLAROsGh@axm5riZDZu}Jg9YHwa zw%-3JsN+u=N?DT zlh5^r&z%N`R~++l27dj9juDDK!~mRahopalr?>5p_yH2b*>*@=`-8SO<^OiihhaLF z>$Ui)o>eY!+aBzF>MTP)0zVz;t^TzgQVxI0e-wT?Vn^er_zr?_!H-b9c>fgh{ zhxtFp(9ui zk%oR&**&7ajL>2(~i`Xv5lGJ#V*q272;q$AE}Y%SMpf^fv=p0eU((PKe=B}UPZ~Pn zH{z%Gc7kxkH{z$btw+9nE6#fp9qH};;;Vu>d=dOg|G2@62LF!1IR+~I&kb(d;e^Mj zZ~l~ipTUncxPA{{K5aWZ%J&=MwjCa4aGTE)4Q}tJGrU~#c{_fZpK}dv>*ZpD=M4Ru z3~u$d&ft8uQU1&`9p&=bN^$K6#4Y_+gz1R0k1PF7f^ft;@Kapxhs13@KZ!6Maa%83 zx=R<<%Y6;aE>L4zuw>r z4bFE@I_7f=eoAkjGc6y=q9Z-?p!Dw~2uIxN?G8aJ^``xc`aB9hm!3Y<^Y08FD>rT2IMUEx2fya$RR+J^;A!oa zeT|Ogwe9w5K^?vde&v6?!EL+cy@QT?w&17qo8hM;Zux8#)Zw<>YWpO;)#v*>eW=e5 z8=PfSxqs(z^0E5-n!#0)o@gak=4QoE{@%Y)eZa4V79w+}>4L)vgtN%S75B2|TgWGZADZ|I=|2czO z{aZa-{hV*;tsdA1=|cT%ayBZiOFv(=mJFAo}etGCBI9_sB| z2Dk0@M~2VK(c252p7m?n+e?Ozt>0+|AA?`@bBe*KE5)t;O9p4(r=$Lx@l*O5f^fv& zg`eWK{j-lKUJE}R>G{m5_z48zh}&`IEI}P^^FPPnyhkXX1qQeIUt;h}4ZUqwHa|Uv z-i}xHx!2OOEzvRmmY#J)N8Gj(>WVIGCx78!!P!T&T(-a4c4FJ7?O$wTbd+oBWxAja zzYKom-(c{I4Su1)ZT^{-F3f+sg9T?@EB~b)XMSw{*BIRL@AY`df6(BT|62_o%m3X5 zAAn!;ll3_H>oW|YRR-6-L+DO}zta18*=6wK4X*bc^4EJbqo4FN#9!_GyqsL+0>rg1 z5NR{G)*bOdgKJ+Se!Ib6L%_RT20uwbT)$>;y~i?_(ym?M>6RcI!dThqgGZ?q^jhr;OU4xYoemkL2ZhW6%xqwn_A?w(-N5|dUlqH*Z zY+SqXxbA_C8)2|JWFKv~tYBS^iL;GxsloF0#)WQoqZ$Lx4-bzNhH%8}3fLa+>bq)W z$BewhwER`AOWN5t!rY^XPVcbi9j_4=Gt@UMb%vzg5V)y^ zXpd&XHq0clq^+ERRM|bcutFy`b5YNdO{C5edDJPAB56A~vPNAP8X6dKI+5xfHp+Ev zbXLS88Zevzac|cc+V!pX-PF#5AuUgr@7zW?FH+mtl z?nSg*vr&kiBmug&c1`a#SJ+_Zs5acWv9MA4iZinw z?@exegH?8uh4Lr{+?Z3x$l2LH(%0uYp7SPawr8Ldd#|y*JBqH}aXy?+pu&ZcXWE|@zS5X-_(b*9B)(+XzfHj-ND!yoxXs_JNIt7f>$Abw9<#Rin9eksBwgs_& zZ`2s{Sr=b^0uXWuqOr6uTKM14Fl4ar3Wr>c zc~j#3ZHH^-BArl+F{T9|WAFzkObRnh)ylX#7I` z{UoLS8unA1rIr&lI7?8 zM=1Z_Q^xKe$WuH~uP9rGemGZJ(cq5>x-RjA zAih)XB~P`W{5kq@kd=Tu0)vsxxib;2Zk1Cc8kUs4(^1;pTKYk$SbvxvUnXZkJTGZs zQn_|3&2Qo?lw8SRJ-~9rU^%>_^v8~|o9b7?Z1>2qOU7=VF7~^(qej}dJ$uWAt+)N@ zW>6PrIgW9I`Bx!Vv8?|CfQb>LEz74#R>&8CN43bY44`nQpP`&j;50OerKxnbLd0lz z`&$t%7H~#_+UVxFY%rw`Bkgg$k}$7z_T_ae#*Z-?!BXyijqhT6Mk z`i}$3mwu{})eLoXTuytGDPg7Y!tNZTg{kUzLFIH9Dr*TBjb)&sSPKOFvELLU85IQ*KXqp79B9rE;i@$rCZRtVb^_vXlXy& zNa-2)CH2G);cI%jz3DlZfp{bNjAqy!6%n%!-gLmF;Mop)l+IW$pZI(P#+hEBxOSRb z07RW;Vw*+>2Jx>|yquTG)}&0o351i=lVW<}ERMi<7RlB2qw3aEO&X$ecdp-!lY)Mj za=KCv!T~DH5Zx$LS+B@=P9yiq4l7HMH(I ztR6hk$ayfLIiY^HWAzfQqiJ~{!K z0GD8LT+$;4*&k}R&C+(p69Zyhk6R{lr9O6*w)$*ttS+~sufCC5f8L&;qt)V$gpvYC zfBAK;^srOtwsCT3sNH&<%YmY`Teky1I`YIhf4}zQReR|-s)wyFfuiYYFl=(?LFLf( zkQW}`;5r=#7=DDx<1EJf*p1oNv1=M|)Ld>XSF@zF*Ra}t8>rfOfZ#9TA)mUAvB3uA zQ+g=Zy)VDxl6kq&Jvc9Kf9|M#xrg>yOQVM)V}>k2CzpU5loOr#e6S*kO34=qTX( zZ$Q6u&msA$U+3gxu9?5Yt@ckC2ypaU^n`KC8*@8W)`QpcId{|kb_aO4lT2_YzAQa9 zH`Z5Q1CouH(;`kay63+R91wWoBk%jfr zgaV|Zq?&$<&=ou8LfJ*AW9BcIubPgk-*?RXnP#TF^bCe$Ny3W#1oa83>A9IdR+5g= zFWO7{B9g5jX)o<>pSjNv2xm`HEId5?K?)9O?LISDD ze&u-}!f>)tF2U{oTN+(%PSMDaL_Zofz%PJ7lpwc%lYErJa`U!8*T{0Xiz`@3ayDc(WMR9j?!=gxgL!s9-KHbc;is7KXN3t zy4$U^9_$((zHwlvr+oCsP@%hbuonwuJEOR0{YsnxId_V*%!a~-&XN8bhq?wkvHAsr zM}N=IKyOdB;lc}><~Ck1|J>}FuHiyYcA!5yG`DG9Q}g-VO*6CIeO>+QvNsflhH(H$ zwrS3+##znThV{kb;P6GWXLmUsv(^m^tn0&a@sXkK!YnM}on0Il=<8nJ)!RS2ukVJ9 z=V5Ut*UV(Q=bwK;&;0p47k00m)7Ug`PV@Zp8|Tbzn$vS(WAnVZO+6RP>6x?k!a_mb z!1P;wc!mdG6?IPqM{#E#zF+L&kH9{B4v_zxn|U8!R$)IL_VC>~0}FU0Ky%yF)uTt= ze#8zvYv7aBQ=4&Q2F~&jDu1Ry>(teJhuw}J-Ni@ZPZF=Yt76Rlr7D@(-DnL5bEC*> zl5P1(q^pwM#4feI>R$$W;u_9+=D)(7f%rThR$bK~OuXoE|Eiri$@AwsJKYR-k-z^t zY^{GAoaziu_1=SgCgE>P!T&Oa55I{g@!LZ`05x4wxEgbQq@l!s_41K-9yA957 zB}%`+;Aa?o$l&J~T-Tsb?rRLr2TnTTZ12i{%;22HRs6#S=e=6-j~U$3^J^X*`Lhix z{WlG6>x&<2=}2$${~Lo_z40tuI?~Ue~-a!fBb8M z+xEQ6vd_HS%%2xa<9w%no^EVA{`{VZwZtL-92DkP2D}!U2Ba+KGA3Dml`TsAE z^TMCzlWV-_h}ry4^>~>7GYoF?f1bgu+_{FomHR)L`}X*{ifaFpra*w&Q_8ENKnelM zt0bjB%gdxqzTcTy`+U#N-hlW1{&6>xaJ$vR9!BuX9@KL*6 zAh`0sMEEFwzKCFmr_1Jk#_e;J&?}$o1y?=S1Uzn^j|;B$`Ly7gzwDPXkdKz59|*4L z{c*slqw4vT;Hu~IDSX&(XNdE8MR4Uaju#00QGIp~c%089!Fg)_c0j=SqxpNh;A)@K z1XsDXUs_!5S%IE7lVWnu7d|R?soEq3jT=T+Md2B zIL9H34<7DZpj`GP4Bt!eO2Kul#iIn*H5J)MGCmv~XCQyg_nQMA&-V`tzANGwpSy&Q z=KI$LSN``4AIdO39N}ajru=^(e3bvQf~#L~j~<42y8a>jRWA4bV2I0|7;y4Yxg4Zt zi1X)2J_CPvSh|iAT+=l>;Bo#T<+Es{??B3w(_@joS5?erSQ@G`jgA?Za?wueIH&P2t0F1_tW09}eTQTyQPFkEHPViO?&bzX`5T=3gC24Xxlxep2-mCJ9j7-%<@`-kuLKf$&r+@rL=Fp+-qAAJ`ezCHH~9~3_|@62Nn zg6I=-apU5r<~}RqH11kIXfHZ<|8iOqNxY&TpVfE7KmT^0srQb3Jtq!LA4w%E{V2S| zi()SWV;ow@D zT>dM-lH}XkXEsi6GUM`pj~hwypX4AaLQfD#`BWt?|C@+R`F!TqFw8+TgaQ8({U8UpXk5Ev)}n>nC(0w!pWCHe8qSkr)B>f*qAxh_D#-{F$R`? zgE{V&WWQXMr^p3D+K(o&_~t(!Mr8Ia;$aOVAlM%4)SKhE@%WfiebNbI=23efX-@U5 z>f>klyKjC@btNAlLa24Wwb;YFEK@Rv5R+K`#tCu10>QvP%d$hUtk0`+vQdO zjhJ<`meW@X&u|8cyIJ>L%vRdT*)1Hj^7DFzXSrJgJ9f4ZfT16UMHj|%(}ad zac$E2$Y#WYz9U?FGO+qm3ae9$mAA}hT#kN&NkMKF=TE+!Sp=|J!QBElO~5sO0)sG_ zix#5;JO{{SqGP(vDNg){z>#m5PKjC0;2qugH{2L{>H2p$0NL!PXnz8zLmbofxWcq= zMuhxrh2KT7e+IQ0hnG*<^m$m?M{u*V?`Mh56`pdC$1!sZQ`TS8soSUcyrE}$8b7Pd zWe{D%gXSmRxTCuwscA3k*qj|VYNOtJ`RDXDG#lWob*`d$53(Q9xzNjL%t*!!>xLI2Uri16c4SX;@}1$WA;lLtAU5CYTodDc=>c4h z9+5=@rN`r^ zL|7yN6-oo5;o}I*9aVAjps1@eI1e(IH@l7}s58d9I+DZ6uFm+e(*a+Lyl$PbiAs#n zGm>o1F=vNE9iKlXb;jrwm|5y4o+8(SKKaCXqJK3Bn2k%%+DKbQ`8Qhi^|FC~?3zE2 zQx9vSY1#0+TQ?7^tg78Ld&`!}E%n)N{0&nob2mK5Y?yc_I- zD!H{QQ4y{6*8kRO-0(?*iO@9FS1rm;!i3T6q$W%rKeDN+IeTP%RjrGpbc0oE5K~C^ zYN}e1-K)N8DeJUawf|Div4z7g;ylm6i+KeVDoE!`G^~dLT$jCd+sLW7YjItnKAPl( zEu1u3v5DT}lmH29cUB%&`{09`k$;YzblBV1iaCeT!!s_iP?%ruuN3XWYO)#L=Ac8n zA5F-dH^1)K=K1p@95Vzvmt37`?YgYHw==(V*|B)m_`g5JFj_AlKF2Tz`&pOe^K`qU zd4D}6)BbK4pFHiarxwwd;$Yz1ts<|wiPO%QxOv=wO+)-<*~Dpe6D!?h#YuIX(8#v+ z^}^ZEEosgmXIGcW=v4T;Fmn&+iO&m6E5h$kz}v&Mb$y?Ke9~Kdj(;+ICGh9G0fx!` zC-Z&$lK!-CO+RD+xx-l(GuYfip8qRz4B4MCo{VeZ%Q#8G%OE%jXP-L>Uz&m+1Un?r z&q$H`?i9KFR3eGbc`1B8l7jPHP!gZP6#je^OQL@%g`WEgCea@TKS{zLOR*d0ZY0rj zPD&D9k;4CLDf|ah`12id5`V5wk%S+c!e>qjpZBKdb4CiEYzqDFQ}SgX1?RJDlKu~* z=y_!d{yXTYb6s5>2i|2phaL8o-`tGW=4(4-=>>QjQx6h8M0K22~w`!P^Y)}f})Lj)0ER(BZA zrxXU_94j&WKM5j`kG_L?$)O(CcPzT!(O#f2KGTrD4CJHsnIrgtxM%d7yUIZNDjbI2 zAowwYe?V|e?`;8(rSH_*^Tv&fU97aGksN3Bfs5Wcujb zH@5ADKPL2=zt0J-`TJYJwYEIbu(?{)bE@!R{lh@K5{L2MDfq#H?@vMm{^*>YX@aYN9v5($kB9L;QE;sX zYK4#b=edF_|AoRw`L_tJ{5kiWfj`QBrQllbbWWD$7w6zJ@JHuN(Y6f4IXrFYr4KL= z*LS=P4)yrnI5+z91=oDc3$Al0)(Nh1|4ne^Z}l_v(fW{Mw|uK9Ad@S&?3p9_Tk5W!mnS3Nnl&Jfpgncx+; zZ~U(kKC0(Uf~%gN7W`1*^OW#s+Km6pLVtwdQ>Y*UY1ub0daZADZqDUGf2`2ISMX}V z?-0C7@C|}%zE^^Vfw%RYf0si&&awC?$m=|N)DDl-d=b}tR>MW^1-yGn+{5qp_!_bF zrC)TTWLmgH{DY|<@EIR@x>nJ72t`!<(#?(2&+4<4w2vJU4O||2_*Kr zk0d0-#tfoY@o`ajmG0iKmaxQIWcT)1)9zn$_qi9@ZtZo9O?0-mVAP?{86=+I=tilf zF3;nuNM|lbkoa~!X}$t2=0-y#ktG8t?q*4bAr;jvjMv@T(bLk^y11ijOsd8Z{41~V zF&o3LIlj36vdlU2=QsKM!=^#Y@rJe^3zc`bbu4f9787=ygn*^x6RqVkIewE7A`igLxPB-*n5EFYES0NEKpI!O zsW16CPzQ+^-b;F`@3Il=&9`Q_K}T^KPne}Lea09Kmtm6w>=yw$8qJt#07W)#o7cbA_z7o&|mp+COhZvgE-h^ur1Y4s~2+4_Cv!KRN$`{-=3Q-PW;(+ zBjU$-l6D08 zi}I;TT>jS(ney4U)^IO7jR;rxpXfhn8SMA@aL%?=!+}8%$1^loJp1LGYCBiD@0g+r z;yg~f3ycbE%)9x`A^zR5_+!{2evrQL&y+m22`2}9oJi@mP zw?0sK_@XWDX7q19Uf1UaR#jy3@35DL13UK14i13AMUB0%_o154j_3Vbv!W+m&E|tYMlXw9+X%0EKL`F=mVevO_Wo&&Yp=I=lllGY3J1BR-bUvN+&@yY zeRM{W#0TOMKMWvxkLA|cslb~lv2p$IZgqGemp`UvbHmW){uA+%D8EMz>k8$D@os0_ zee{{!&?9*FHGCnk^N`xTwgmLm{BF77bAU`NG92EG+};9KlXJtXDn<|;?;692TOO=P z%X>06xQR0A9@_ftJ`g}J%hwz#cr24;<0wWmAV=BoWjDZI?9bfUgRU1^XXAZA@5 zJ8$Tv>>$6yZYs2M8bQ7)*I0NOi;dtM%V0Hy)VP@~K)stb)chJO)^#x1c(FK*D`qt> z$sRlifM&k7qCUKY$6HuVrpXl^@CLw3$!W|1*89;L>y@05Vej$#C)W);h=LeI)y;lz z<(KuU37J^kA2McWb5r4!?BHXl4Y{Te7uE56!c-khxQQ5N2U+fY){W2fPeyi!#kOdU z*|0J=Pk3!BshWmijO@_ja?EcSxPD5ee_zOPDX{rEgYSY&#|+hQc4$vT;=G$_&H%KD zqbBEv0FmD`-uFI)_pr^jFc1xSud^E7{6eRVpT~uJ&sta5?3i$|q?J`z1m^@YzrPZK z9X@&uU+6N9$y)a+6eg_$qKXeLI|a*+jl2~vYpnz!JtMb)+EbQJ%;5)F4)@jRYDgXV z5NK;&a_JZyhbb|`PMIhX?#?8a8FQ$Ew=*88A z$E0TqNXDe+9g*Cj&EEzA?8l!sN>u*3Sc39hl9n!L5F|YoD#ABMo zgnQUs$_{=Vmmq8^{3SQAwfPkWe+B*U><+mZj;V%9(7nUD{rl=8eg`YPS zMj8v7n=mgb7lf_4Xk;eTvKX9UgB6*E+iKl?Z{KLGzrx&R=SxFS$jaH!W=uF5z7F-D zOaoi@EOfNmXd0&fLH+*yf~MR2jlv4v$Ya`_EsWSd$5WJ+OMWQta9=J`{{Q;6|UK-tdU~8Gdv$tl~KIyXX4^~glelq_w3ub7phc>Tx3>smzt65mk3_m_o z(YLs7)A5Mu^mdu}(EV7?Z0EP&%N}&u!MYO@ls1wy%#?dT$}2tUC#(eFQm{g;>+9u) z(MUYwS|s^HWcQ+Uai zF{DYc-y*R`H|K^MxXNq(-rVr&4N!~cchwjE#AY3R3fTXtosSRf_-FsoN#@wc>ILib zT!$#5$A7&Hd2{oUs7qFAL(Z;p%q$XL4@b^7avY)ou)ybsO<%Mq=2=wp0A@7r6gz)( ziTzNnHa&ql+AC~5M~lEar4gP7i%tKT8i998Bd~+Di7P86OW>W-2m_434>yw|@J?w2 zE@8Rp^Z1t>fpuoze&|!@ir2!N24Pyi*!s6C)g!8i9B2Uv0OU4}6)D z9AQ6ZoQqIfjF4~Lbg*4%E<0l0QFZb&lQ~a~I8QTPuIJ7N(|2vD+59g5<|__N&BHUhQVX!0UdAOl2{hiHK^P6^9n9 zkL=(_Nj2QS1};C(J!y@62oY+~llNKAygJRX+A`eCB@7)y^zo(YtYi1h&#-S8dTG_2 zBiup3`U%#?a++aipqqy0)mkG>V`9GKf~rba(?5lVI@mS4?(fhfw3^Ux_!2)SIhY@< zUs#KmlNYg)dUo(p(ziWsl4*r+5%QC!ElGqwX;hQ-a>goH>i%KA}40-z_Z*fhT{!v+*BF7C!Hxe6zr!)qE=nFv_Ch>8rVPEj zzKSlI>lA5GcJfeYnx%Ndz0Sz#b=`$DpeyrI;6=g6fTwV!<T@YTh zAbL;H%=?<{uwN6OtSd(Mg8jCj1LdFbW^cLfIGl%mBG!kV#q9!~M)rpfR?z%E?p(xK z4}J4p_~ee7=}Gv-BsW8O3&)=teg6TG4>aC*$gXvc=T{h5u|U{MmJmA{WXIy~x@J-{fGvdUi02@`djcrZf&;A3dh8+Z$kb zNN^olSD$0uRSqeQADvo{3ShjO6TQ9;4jo0UW1n^_xD%;2#~xTQE7Sj<7?QB+jTOvI z%<%1_2Qxv%fvx;0E`R-F3i7uFQ9}N@&rKSFEgpd_epVW_e=DcoO9oyS&%g#`;B}UP z{j&zfSCzRm&?zR>y}Au!9MjQx$_-pM3tihoc^Z}A?7F>ijhW)3SY=!_&JJFPlq{KU z<2`i)+b~`Oh8DMO_O|TWAE4g~puX@=UyxytCr~_){g$G8kRr5&%DVsSNRc!3|2$bE z?@sAmM@2B<0R}mb#O@p(Uj-+hBK2o*iP7hstGj`*ojRU6MM8w(k&OUMB5G{s8%cLf(*MkR;7edNCV2U!h`27W1S+9=AZi$}OviZgK9 z16$(rny}b^)@h)%>cyN(SI#`xTjDi__xX}dIb`&4;@J*XNDPrM!suD)>-P4^PZ%lf++eFf$)IqNC2A3ZhhII4qrs3bAseg_~FOh1|Ve655!6D=$>~jAO zizqZfj}iK7k}$6BU23+6E~RVh zS4bU(*cwXen}y*i#y?98cjMaEF0Oq0)7-$dEY_b09ur!Ky6>>Yq%Sa!k?sD;BfMgf z0e+W8Xo-Qhrovx+it&M<+s3E=2p`e6QTF5=emzNckdwkZli|J`8i@XV-4&}CzL}v4 zE2x6o#AEH{&DQ8P4WAV~Qy}}?z~A>U@Ha0kARnc`55U9j;Nm5b=SOgn8@_ys*VsLi zFcJO<0|QkkWPDCRYtT~wTi-+TgY|fN@lSUjvs}WLpl2efco;wv*cO$ty267)n^*a= zAFIJXWl_E3d;;1;KEO9wXl8u&nCRr5dv7Tlx@pA58=$`MZ0w=Ir8p$}G(h6}5F)w)JWH=DsLZN?M$L*-_N>p0C?9eyCe%|nMblUKa zieIKQ4mV61SizSH|Bjq$#6D9_HZp777SQ5l8K)nhKNa1Yy(PQ$ZeRpLuWA@yBaX|T zIk2NVJ2;i(_^^5CVQ5k}a9w76_GW(aUAL{lOhxb*9M5~ z?V1-asugz*$D7@wah^Hgb+%YRQ5*=!`WsXOzQ2!Dh;&61Yd>P^(@90rU zv_Bm~TUv%T!q0Y&+ySeCS>rG}TWlE|t2%d+wO9l0vlE3uA-BVbcTGHCE}1v<>+B#O zN-#DtzV4KLss0tCieX|+1N1} zKO{u{KS|=h2WlLLM|CONf>Hi+!Taw5yc75{YEXRfyY5Edg`as|VgAEvLU{4ztp{`U z`r9~L3O}z8spYJk?Um0H68eHC4ZN3ygI(^6_UgzpwY*zrq7< zk_evaDlM&}``Ew`1}1JZ=@?b5d$<2snh7YDzvge#rSaYSRlB=>BbwH|TyF-$4)3nJ z#7A)hpxx-S`qmFEC>|*%xtLT3ua7V&vNOM}X}G`Ar4iu$_*NM^5w4nIu}Fyx7QMHS z1^j(Ho>l9kCyo63_{8rRxW2K&Yo*4`_r>-6TwP6kigB2r9h+(GQO>{3gPU7oiPM5R+FQ76QcEXRUCY$Zugf&d z<&^8_Lu$_1?88)MuIJT;Wxia*w(g#*Tb6b7^|fBsQQvu4N1x~CrY?J?j%+^pV?8&l zQ5MAdY0Bh@DY`xpnEkt;b6E%4@&Dr+zl5oYnfN!^#QE(N!({%$H`&eD?}Zpg${C*F zKi~u7#(mCh2y^AciYh=0h$CFde{&|{O3*PqRfxxM0eV|Lz2%MLT!QDi|L=rdrr}mopz9V^%JXU&YQ=LdthQEvftfszG0I?>jHhz zH?B6cuJK>7Cu>zIxt{bPQxdrAV~$EAT?Z`x(8%a-!iakBdoilftI0@H(V-<#BB=^NS>5l>pBVHad{S%zb1 zKCm8SsKAGu#OM0Us0{1`AL8r+GX%9WPY0Y&gA5^CGCvFWZ61#39}W2J0cSa6I0Ogz z)9)BK>6YPp$RpyH`b+oyBTr8V`dbRnc^`2Tyr z!xZey?=W$i^p6JI_-_dOKNE1i5>&Rax;yxtoPvytcD)_l1F76@Sa! zs)WUBJ1ciJja?Og%YDmR1j1Q)w315ct@6k_;`o$OAmVdC3eE@Lv7tQjn$mmak@v;% z%2FU)m1m}=;D@H*ho#_$r{G7V;76w5N2lQYT5)VB&m1=v1X3=3YXrmiP{GQGVf_6g z>gyzYDk_j9{5>gr?n%MNq5LNC;kw~Tcs1&`B>esq{=1~%sK=7{d^aV%&!Su>(cgm# zFbV%H%6k(2ofQ0T;JWsP>&wFa|4gBuyesL8{%M}Xb-=pjvZ* zeay*jMXoS0dAg(r~_~F$l_^m1UsuVli zk>dY*r|>y7#h-r;|0!A_N=D|A6#7jm_ypuj5})Q2`e#z~Uyy>Q?e91(g+E{ECFyf0 z{67hwoWf^83ZDrneCkv5pN8_4B=-j?{JDQm68+aw^n4^m?z1U+=2HA*Mhc(#aE&B= z_DD%rRSKVnQ}j6}h0l#C_(+N!PEJYJRVnp6_ti*B*AG+p&rPudUtcEixiuw!zn)@; zPo&^;P+ukSzbnO0)~4vcBZbekDR!QmlCJI)`h8OJ{m~Tr52fILOtHg9Q_}Uf6r68l zlk7Gv1-~{$|GJd^$#W_BTbV+?BZdFQROhIbJ}AU=e{a87S$AkHxh!*zT_>CG=luj$%=Yle8b__~~d zIQ_`@KR^(Hd^BB8IMm}UI5&D5{~-NW1fMSS)WPVPc80i~b38mo&ql#Hc4B&X-Uh~V$QIRkNyMHzi7K?LGC9ENui zL?EvIaFatl&b&7ITLiydaGo=e58jP_^6+63;0oxsdBkCEd$fF z7Kf#aA7L|4E>8{TI1B^n)qmbf0D(X2aTvX=;Ya)q!OsZv@pS20eHRNo#}gRheDZ>` z?K8P+1wT>n+XEh#%e9{w_@nu5`|A)_|9M>KXX2j89TEHkg6|ak6N2xL{s}`|pQ!<7 zG_^y$;L4{_aJ9pwf~y@m10I)qrO>M#J|wu>;SRyo4xdlKzZ~$m+;0oL%6(Yy#ju6h z`3b>Q?k`jL|4!(Y|7(J`3V+>SaGu~7qyNdkeCfeq`q;jM#P1foN9frXGWrh)-XZv> z1Xn&^6+Qn@*ZS(%fXDN9rr=s% zoi2Q|zB*TMZI>?)T>CApg3p$8@p+kn>ADez+5eM*tNwQfJg)y&1fM8;z9oEA|HlMZ z{htwB+tXK5@QMluL!kcJ?oSbXA?{hajuU)9@Y4hz68t>DFA)4n!L_`9E(L!`@H2(a zcEQ!o&jmbgXO2@b5XX=}l&)8VkJ@>+-AV23qx>fZJkEb#!Il5P!bkb<<=H!Zmt$9~N1|FAR8`&tjpcD;fQJQs}Q1{7XXr z1;N#xUk!NNp7#l!6+Yh+K5EZr1XupQ5k8b*`oAQ&@_$YEDE|r4AJ%fmI){OFdmj$t zZ*Mw?-yryrIAq2rrG_gXn->;O*AAgq zKKxuXi4VVcGhFpKOmO9Ms^F^6fu4=C^PM<1|JU-O?MP#wCp#WSuj41$Pn#3yncg)* z&pL#GIO|5^vy>nLan@aiv(057{&5_JTm42{_0;k*OX#({EE8PI%iV(i7tR^T{~jDB zcNfVo?FVvwCkE1=j>G7=M+XD(lW`cH6MTu_x^{KD;C+EUZh!TEwZHnmK9Afha+SZE zMGbk>Q|>Kbn|AU2I z?Q?|Sn%>ZDas1h~T7K!c-y*@M;GBW_+=#>IYX~9`S3A&F3~@c*;bDhsf7Qwz`KTRu z&Jef5Wgd3;B{(;Ix&>#MGMqXykdNZGI@IGgnRG&qHt3LE4hPXZdRXejTVj!Qd;V}Du zgCGL&_v0{pZ-NNKZ^vQy+X*5N@5fbDa!IjT_f~!8;1Xuc>39kHK5nR)2~PidD#2ABmT`u-o@|>Kh-?0`u3#YEg~RmxE@~6e3bvALeDzH z_;cPDLp;CKpS54aWeypr=e0PDkMK%>^M{A&`KsW13T_ki$w$lYzU2TA zh-GMm=Mhk)_)`ZE*z%kG@)00tlf<3b7G+9kJ_zP_^3Xdx6eSi%73Bo;i>7< zBDnJB9-$26qx?BvogtoH9Usv0b($x4^xE#T@5DepieK(fk88h9pHnnlzX;Hu}e6#OK?RevpyYM(2GUisgif`3tP<^LzamCyc?U(5@$ zkNT(5&k%a$Z{K;)ZeI{SIidfQ;O1APKUMI3an3-z3y0}*7(oQ$+OK9GjDh$N4x?`( zh(P=T9EP**Vj!-5vWOr8)#YLItkW2X?T*86ZC}*?sRKitKW)em=l>xOkKwQFj`II{ zpeKLz!^Z{xB+gCGmj!PV`~dNXy97T;03|g z3(m9{z1BZ!pRWkL+NUz$%r>jT37P$g??)g6*5M4q_jhOh-|BEqd`dXy4{gOj+)W-!AxJg4>>@ynVRf4+{Mef=?><7rZ@9@G8NN6nvK8M+weF z=@`i8Xm{rSas4a?;>Wl%|Bv6hF%Y+BKwd8rd^&*;bl#(teRoT?r%YU{2b&tUv@Gdg z-qzAGJ((cd>@jIi)@c7mw=b*P2$5Sp_Vh32KCSM$ZD~i_J_$KX%tz8YW@gCCRXu zkGKV-`rHysPVeH{QA~xqa(COAPc5zad@uO-V`->#ma#RY-pD^~)u&9f!*0xB{i;)L zi_?br^WEZ5SPm+(^6TBcat2N4DI%^+kB1};G+an%aiuF!J^8-d_%+|LB46~`_WEd{ zESkCw7VBKxpYP~v@y^zQ6|`b`5D+1q?^G1Rz}0Um9Gs}P1DWSHg*AVPfZ#8@mPAsn zWH?*}dE6JLaOKU}qBr>-weu@>joHk2@zs7mS*a( zhNacoT1#|_Nb;@A+gp3vU!TYrL@9|^&RjUIWpQVBda{e<#?evh<(=&_`j%^MvJ@7* z&uR|8UYr;-W+M8s3MQA!I^e>cZ9ZzGHg`I9)FqWg=A7n+v$;8S-{mdK`ePmWO+w5WUAWJf7#?H(Y%6 z@>Z--Xkc4s&(e-w0o~r!u6E5|-P6$$5yM&zb%5FxSyS94-1Q^erI5Jm$aJMwa~CZ1 z(Rn|#8J+^I=={br&Tc&WjF!0#=PeK+D0U5V1K>*~S^Db&$;QiOP zL%Nf>>-;QeoYzpIgp21mC#!P73{Nh?(F`Q+E*|BY-3@7UwzRFvT_I%s?rO!N2fAGA zSkl_xWx2=d#(6k8Rx|7zp6<>g6Ehy@eEU{fNP8QL6}QuY3U>4s$z#=0oTk+Eig(++ zZC(C%&S=jBt1m;1(cR{k=;WH9ufJP*@Bz1TI+(PuC#61+Ay_o}{8-Pg+OPkK<{cgq zyXSj_xOH}8z20(#$MqP)J>QH^KOwZ|(`VYr@lJYNrIrh37(sOMhFiBguPgR`s(l^f zy_hDo=dJ(k?@<%{cXx3<6?_?kaPC|Dul)~?(RP_R2oHwDc8w5!QX9Lr%kbD}ml?hX ze!cjUBT9cVDRzAa;>UTCWYMXf(8ele;gXNI6&{YpFczoCUliz`3BUFemw!o${1rj| z(qJ&k-vvip{`mkC(;wn-tVly#ely}HrT^K}d@LJ>q5R!&#N~fv&t&!KOjZ^eL;Q? z?889$C@N#*e-uVd%D>eip3S2p4~BU9Z$bQ|{F`>Br?>Ge%IEvAc=~%$@RH=;MP(6e z{VabqR{k=?Pm=%gSw6-h78(S~r|xn2A4!p)$ud@PT`zw%R{jT5fz>_U{Su?fq9^GsgZ$rPzN%kZ{NoWhDgLu>GJa=D`d<$5A1{$U*8kd5(m!Q^k61zF5SV_BOUKiHR!aM~d2hz@ zYoPcu|3997u5XZJ|H|_{{h|<=@;S~Om;X>o{XL1!iqPnPqW^LE6H?0Wq7eUxD5gJ& z$KNfb{H_lASBLo2e=3f+{`@{aDgW08`L=FfU^Axt&PmC?4MF~z&<;>O+oHJqZ>Gq% zmmhqWr6HdFvvyC`zc#!)c_aV-Q%e2S9OB!0N~S|x{!1zK*Q|v;2G>($VEUPt@$~a{ zlKnS_mov5=B*%l}!5|25Ou5p3Nke>JxJKAz%#cP;iY zY~Bvje>9G`{7;8lFr2gu_B$H#uiC@W|NRg5r*}q(Ke2fBy9^51xsrY(#8-^xaoSsa z`M2fkBl7z~{AXi@!_serHzR(G#NArWm-h%-f1QYHi$BHPh27B4g9*lj+vw~F4~Gn+ z-n3CX{&6SFm@%`m7^;h>mHyoSKXIm~I)29N86H`*$Et>=caAG7TBHnL5Eic}-G?Wy zu(M32)}7X3&8ITA*KS?miCp0oY*X?AZ`dXy*odjW23vL&H&M=?hdphuCkl2D!uIKo z7@M_(ZB4MtE%#^lEJ`=cTMn)c_gn7VjLT@V8E&nDXcX*1ac`B}4KH#hin_v28w;;- zr!DM}(mt>7m%3LUEX((lsOq+U+qUt&-~h&txO>=xtN+X-ZTKeE;n+3RD^#*e(P({~ zH8|zJkt;l(J-D75^k9dX-`~$R(9spPV85Lcu}cfk!p|Kv`^o%M*c)fw?7!r(ZK~h& zr5;F4Uc!|bhn zb!%Dv4sf>(7qMNuo-PB0+as3`0oj8Y%kwUJCN~Hg9B>?e*);o={$Gq< z?MX^4#ntc~9_@Cv)Jyl4GQTK|#3k-sB=1SoCUR}?p=Lv!FtMps?>F_jw5}!iytB{z z<~rx%+!0ZV+i|c>-D}&N(f0udXY~5Qe>;K5lU;I!(NUP*r`YWk9dY4%I~&nE9sb&K(fc92>RB(iM1+cjMGShAhfP*C!FxXXZW>ieC_WKRH zV4z&sw$WDwRA&}S4t6fCb%iA4uI1`MR+Ngl8Y@fj42}E+n?{#PX8ylcgJKzsygC04 z`cIH-)woIi-}@6b7@yKm_zzg3v4FDuGt|;!n~(#tL#%Jy&TS9lq#m0EPvADalVE9h zF82`sD|WbaI>X!6eSk#R$O=Tay3!k?Db7k)Sodz%%0kSi>x znua~!(OP(Yu)E$QROI>7H$43njn0gSShI1SrmHIkTXE*tIHubmfVz=6xL6#wed{)-&d}zjLVMN1dQhC2 zUDtu?&nh6^Sy|PbUB}6!XwGwM-(9t+=A|XYy&_+;%C)eKMd0T(k2KV5_K6%=S+%IF zZr~R?v0=M0oV|7B59}P9Cg-QH1T=G#z}ou4?_9k4vS+a)9Cld6hH$?U+U(FV(CoGP zDs=p@2kFouP^rG~!oahY*}?ssdOK@2bKk-#{--t~y=8NKVPxRHDjpaqAAC4F^fc^; z-RQFGxZ{Blxy`n-gZ+SNwsX7bp@U(wkzR-_ZneHXhmARNv$@gp;LV_fcD5@gyOL(j z6;E1$VjXZk2pflIK2yY2-8WJT&|9h0HJc#M;XV!3z9GI5szm;YZ16Wx>FlJrUqUet zN#-Wh6*S$*wRnn367a4>0q<7b?97HqI!Cp zqEp~>%$rqj9bqnbmIh|modJxcts34Jyz!5KkiTxb;m}`ytv)Jn(ZdQ;5Depbl@Ix( zuu|X#V(vC7PVPXOlk$muM{}e{;luu$O;xon8e^U6e0ygwmFEU3x7jit0(>QAzeAh- z*5~Uuux}vwRi9ZHKVm>5D}mXg*`e8JSX|-8zf+q~`m0CgV=6N0>OGdM_fC+<6G(Ew z(n9nTXDrKWs!X;{mmHE-flAd;WCyQ@8J$I4@vznbmDOows2TfbbHmY`-P;I8@L8Ye z!q3?xW?4z0l@8eVa@gc^kjtSq48D|I^EPrvau?=?9&zsHYWwUUzaK{Z)L8i8-DT)r z;wr@V)kM-$-pD6iJ?1kUHu%@_ItNAm^}ObEXk^lx&Fk#Ct9=BQm^$QY!|WHcL+2n@ zQ5vF*b=fd-&0o18J*rDz%d-{Kr=^wD7N*4}v*-c&+8^f5JC|>&n)Yga)v4GV`foIF z0oPV>uvX>l;u>VIv_G~HDsOYq*wSX_r*2&zmd;5d&oZ)WD<+|`8#x(Pm&@rghHwfqP_6tz2r#G#3)#yZ#b zw;+07@XcUbS=euqSGb)D7Eob23S(FzD$;+19Y@b8+7y1Pdn9^{T-bJ(JY9VWC^8jU zern<81J7YU@s-%jIFuaLELXv{uWl*J@5?a;R4EG`bKY5wJHc0?tRLJ3m25HJkXKH# zCe}qGAB|KiweM|ag!F9k4E6(Ipn;7?PYV`vueoi<^?Tl!8R9yJMa%2>vM!jmdS%tA zne1(wYghlJthVBX?9l177oFHyuLoD`-<$Q(zmHDwJXz6*#|1u5(tgu&v!Cf-FnVEb z_EXtgH`i8d%?=&mqSqJQAr}8=#LvzCC7uta8r#wR?aX-QckvEzN>|mw;?Rz(k zYcV*52J8B%7|*HM-ZXpyWTGE)D!bd>Qm!xb%l^?&b%6ip!)C`m3dPm>2p+If z%&eT`wijM1k0K?xJ@Pr^e^RzQVsc9Ico{T|ilR9Si{VHc_ykht=p*w|7*o6xSi-nu zkjXQc00tP&yI_8EL*W5*?Q?~{)eZdDMpSRP!uN}fEIKNa{Ub_v^c|rY!F=FBJYihA zg;x@a&ktaWMtuUB9XyI+W9fgmKC(S4vGdMC^C04yJ$e0axaKo49ux8hZsLQ2OAJV~ z5N-q&o?-KE2ae*~RCo>w7j}3#da0)!65u=Ih15ChqePOG6r2R_{eYZ)u;g*FrJb(IEcJ934hns6@MgIWr zp0@mHt}woe17ptYb%ht^75?Zn^ZV9k2VaD4n;ykKhx&mkcgmdk32;Cz*Zx}b2%@`N z&KdY(2hY!}gs^?OH;}u*!9;d9hF4S!2UC;RfP>*>QIRHkk4gBa42fn3Kj`72v>P0N zHrW@@kwIMhyQS4J8&`+pxy9!sTga%Gj-G?6_Y~H@iJQAO6=U!8v6*#IY?E%Ayt@(S zXHmFxbORAANcoyqcyt~HlnRgK3O{k>_a7J|_6eXtSSnzO%1r;24)nQ`ztX%M1$#Qj zsQwU@hu^whj338gukpgtGVxO@6Tgj>iRCUoG14VP;^NVHBDMeh-{zqHcRvJUjPCL6 z0#ftcK{HIQ#N6TGz?rJ>wAkslmIqB3yLXjOw4=Kj2fuiBZ>V|1)lm-Ba{@*CVSEEa zf#~G3w>u?Qm|2B7Dwq##nSV^$e`ZL}V}AoZV|~ zWe#oM`1;|#+T8G|RgT%fj-A=T@hE0~tjrHg4&iw|U$qZLOscZ$4#v$Kh8m`1vV-5m zIb_0{d_Mt#r;VHpy=}aLmFN`5xH#s1GnA+sc&N-pvGQ6s`=RVw)T1oG_154OpYf^9 zsZ~+GCcg=eFz~ms{yT#OIEYmu=K4F(M_97nar?cyLx*Db*A!yeV+m%Lx~Rq0m5(-| z1)DZHJ?1X{#$@EuwL-oHMmsOemeH+luPZB*xt|0Z$ z&bm$DfgzT~xb!J1ak7mQtYL|Svho;BZNzFZj9ht$Al z4NCA`;1Eh9D^A}w6}9&-r0|>=bO%A84o-y*>)X*n`+A+xqskz9ljYckSR8a3JQ9ir z=i8oL$6;2yML~(2C7mE;OPdziVq|oTAzj|$Q6D`LW4!8%N!iAgs2m<;8~dRnk6{P~ zzYHbidkX4DycR(Hm_u>HFg5z}F1mMJcM7jvHy2)llA9f**P!@~aH0o>2+==fxw5+1 z6)8Ua0I(wE9#?&K4D1-!|2XP%KlU4#_irS^2F-H8JyF<`p6fM7FA2U4-Wlj|^RMyi z7?jqH8;>-%^#z5Aj|xi7_7Oh3Kz%$_@~Ne<@XOJxdxZ2==j^T5VNmwBI{H#n94{B2 zacW}N+DUc^dD@*~Oy9X#7*l8%dUe%>{)XEzXY}JW+ky2bj#Sr}#x|hFau(_AI?vkD zISY(B=Ac6;%}-X z_VRT<>~$V!#}?3m9p(N1>B<@uVPW$%5cIGoi@L%#SJZ;VT&hqjUH{3^Q--#Go9Rln z7FQ~B$$E3v0-sX*)E9n$@%l!-SVX5AU3zQKETi|&?|Isx<5@F4g~%Kw9{f8_IC>7d z`gEgJn()BrUIV`>D=e(7d4!L9w>(hD)#K%9|J!lZzdz#jPxddqSs!C8dytbHK#+eM z$JpJgQ8-d~_0NXkSxBizG4St^!uw9%pdK#M>^;(-ylWL6blR~*7Kg80`{VAHzE8>y zu6Atj4)Y&)pX@t4v9i-=BOES+eOq;Z@~JDbH5X=y1eh6<9>x%t-~M9XHU8 zj#%|N`V5Ghz4oQ8(L<)1FV-JXrZt;O-q0k*fAkIFxAk7#lkYwb-^=jupZnpf5`MG7 z4`Tg^`^>4uf8gtohUG3^hyOsWy~AB4-0ARi{CJuig#$m5G1#5=cC>YL_V{mKW6=VC z{|&4AA{-wlw)Ax1lTW9o7w>QLJM}SOPitS_Ro%V#hK9)!ZT+WpMDZnk_p%;*TifS| zq6-?ueOcYsy*%H651`xJXYtV$ZRWoB>0G{~J0#G3gqd-lSNhKi{da4X?gQ47D-Y{K z+p)a8x4W~wa@t8J)y%9uVfHbVi(C6T+AF)4SN6`VIk9He@ohCnREclTvo9ev&Xy=@)*nEJSUcXwCY($>!9$8~jG zx$IbcmHM8JwtQvV?Bh>ppFO+%q_!n9s%uW1F>Chm)iY++%xFKUde(_EYuZnk(LQ6z zNgW+W!p9iGl+sMuHRol@R!k~;+l1XJ)}t)X#J#sW3cqGYrf%Y-ITNSUO{^Rkzpng! zrrPB{Cv*G1MS<`l&Wk<7})iuAhLYV zGHO$l=F-cDVTOzOFN#|?aT?>AvQ4}!M$Cbv@;z>c z4N1J{kGB2}+hp=NcVdO}t9t|g-*Xz$SpM}B?99zH?fDjY~7TH-kcpimuQE&iOuBoLeT5LH^*yyA}{bEubE*2`I`DFX)38?`e4X=HZ%e=dr-r{EW5#FxxHC?`y}!ybj=Q@RrqE}WOz`-{Oap@D z>+FDc1bi=lJHxeC$;aj-9}w`rgN``seTD=5Pv+`fJ-&C~^Ok@g7WkVUy9azh;Q#w@ z4Kf!F4gA>;WN>eT@Ou#yrre)8w78zqy&=7K1^nRfI~~8IuMF3d!|&;+1BmlA5kuDh zWDbI2#Qz$u_Xxk;fj%FuP0!B;{Z|Lv>~==514n=uj6Wycl7FW|i}vSUg2ZbA{lsuT z8}Q128~>>&-=u#>!1?6Lz;F1*xvwkzwQGz0X{H>1NugZm^?tegN>UMjUM_o6>)rCm zn-t}@rsf54+^iDEEtPTH)tIFquF50tD7{r~AFhCc1{oX5-B%Dvc+FT4NV(g6y7bl~6=S~x zA;sP(r)(?Y;g>1&EhuP7^c8T~B)oufnuJeD;s11sKATeLf1HBfpCXrQl_lx(bV|BD zk8+zt&xiEMnWCS&{uzu|fE^}_KO4nvkULrY-}S*j&!Md({=ZJqvobBcDfZ_qh9v&a zquxuxpMy?G_!FqNlkm0_edea%m!_om`jmX9os#5EPsy);N4=UvziXQQDg2L4;nS01 z&xI*?Z;ISO*nhH=Q|kd#qrsYt5^UkdaB_T#KXXslr1ZWB`pHtyyJsfw`l|CoC>26u z_-%3ie4N1<*LT9zbmZ4$S#{6#^?NDtz_ ztzG|^)3ex)xaT9>|A5o8*zUOJE#R|pOqO=aJ<|dEGE6pE>Sw6uLZjnzXt)afY+N1b z>no4e<;O2yHoIkQuuF7!LLi11gi zt-iX(*{#@~y5}j_XM^*Tsb;o}dj`VQQ^1qto(KIWyRYbc6!Y_s;c~LH@9voq*p-gI z^^))y>7!-tOG)o;De3xc3ceVAn4~9*ToQf>TqFrUC56wyDfmZI_*{bWp2Yv$6#7r3 zq-#S;ef#|syWNw*AH_XUAFkz@r03gH^m!#k?t4@8vDRww3#r|a}=~|a!hfE6p2U5x@=UgV)b8(8@=A`&- zLy8@~kYZCB#40O&mD%hIMib>ZA9N0aPr|t9!9@X@Ku5zDLC6Qqqm+s`LK>OT=gf7;pgC- zA+G-g9v-9rC4%!A-S}J<@VNf82?KG}f6$>GKN;u7=O)2b|9b_;XB83sCc&9^#^)!3 zb1cK~mj$0G_(WD%2-H*UGgI&a?iruc1lN4GG2(c>pB3ndtKH5QKAP{B3$AvvvPC^_ z6@9G7MVxtIda6I4COF5Q7)Y=F&+!um;%jgipEC#|5Lf%0=TMJdgma^}aTC&?BskN; zKwR^M@4^^}t35yA(6Qy{vx2jCXL7$1aPm=mZWUbZ`KaJ3*Ze1*k3SFe#8vLEg^$X8 zO>mXFr{u5JC;JG!<}b?v1JkAX`%Z^?JS~5_Kx6i)6#7BIS%)x?zxu;`hk9J=!^;I{ z-Wh-LWFQ~S_nRH+an1Kn3$FJ6Lcrtp|Ek~|Wiq+n7CvhK9|^AZ9~JyP!e^)8s?V-c zeyNkmwKW=uG4BlL^brQyLG`imJK~z}v@HYi_u?=Y zdz0Ymx1SMQ{Zs1=_0KIrum14;fRDp357Wo|jo2=NZ^t9xJ%|=Sjjx^*LK`_0MTes+W5@&Mm!lf@{90Kd7H97kc%RYXnz684z64 z`~HB(?f(J6(bbLg{J8MZ^llJb?QbL4v@_Fa={;2F?-2ZK!C5yNz4fEWXHf7yq1XKV zyx{B;8lSHTJ|wudUy8pf^fwBug*eUoj+&8)Vk`RGEtm_QFOmMYNuizgO`s)N|-DP~%2+ls0;dcwJ<$9Cg>xBMC z0cU!d6yx)R(6cTz+}^A6_Iklz7WxkfzRNDSK;Uh*#l~kp!G{GuTX40{MS`pUbO^5g zbGP6#h5ru(uMzwi!A}(YU^X5I)PFV()Bgy;PZ0bR!Il4f!8Ki%3aEJpUu7Wu z5Dv5dm4e?W_zi;37o2O%GQ|0OUvRA-eiU%phlk01QtjWM39k9lA^2LvvGjHcu6p(bJg(<8f~%f`!bkPI zN$^`l?uUdA(_s31S?D!g-w<5W^@QLj3!kS2*Yf+C;Od`m-5rq;sLL80rVrnvF%U1{ zF#HO^)ov>S9=F>n!L{At`)&sESG#>$aJ9om!By^7;jjMusNgF13E`u1Ulv^D&fLSP z>Gag+sdorI10-gjyx>Z|N^qtBu;9lFpSx1J_5=|E^XnQMmfmc@k2)WHNUtL5(DjU8V*bEI|WyL z<^?>ikIjoAuKI8u2m|@6KKlILhkGWsfy4-;{}>L#=>rVJwcoYWp&nO0n(yi-1)*0z z`HbM|C*KwPcAT3&n!hIsJ}UHg3O-Kkp!v?FKp2>=_uw%8HeN(r>&a@N*L<<@qIkZX z9_WehCH%R>3j_IUzG!}_pV+(r(yQEl;ZGT+zwUvla^IIC_jbWm?q>v7JKQVyX(D$j z&KaoZY8<8y^N4}?TpWhKlOO_dEx+^u2I5)|v^&(}=i}V?LW4XrvF~QaTPXs)k@4pm$qVV~(@X>t#v*2p~zYDH*-c9f&I5$1{tjfUjw&F0n z66XxWS!NACnjix4Pv9{8Oo9mUbS?0(qrV#GM$cz_2J*QJhvDzVIRkOcmxmnc@w0Gl z^v?^f^jbfwKiGU?@;^uTXg$olHvWf{c>$z9LvR}hj_b*_ycme9+zSP-$35e(?J_ypnq5#gi$^CiL6e|{$TO5yWo!BwBX1w5|LI06W9eRLdB^*JWc z({7D8%sw`*NStNg@SM=+1b?sKYESz%CY~>M3cdQny@G#I_g_X)w( zAATpergw+nnqD1O)bvgX1(qgU`btVJxCLD%;kstzbwcEEGI+p$if~(zr9Pqf^o)UZyoSWQV2_LoFtAcC& zuzx7;)Kl$qnBZz3?fVTGI1QCeqxRyR&ycPG1Ui)b$3BD8O4CJHzWG!E6w}XPe#qDP0j`;34 zOzv@kp8VBr`keS4p||hZNUw5RQ{*lcd>`S%Wpf$ga@Pp1`Ni)zjQ)6>nEp%;LtG!G zks)peKEpB)pNzx!96%5uu8-FLs?YyM?rxCtKb2caB@rlpiaYcFtUV%5zp`+5I3aFn zBxHU_{A~n6m?ZgSbrf&eb0z5y47B{YMd%L_{87OV7JNJzAn>P>Cm}QoKGi_{-X{1V zf^QJ~P{Hlf3*N30e5UjV4ikK};D-x-o8VR_^Y*U=pCoUpn@On{-q4aj8?isF(MZq*4$ z?d<8qDicl$Ho&cJ;c^!V_bzYk?PTOY5ZeU1WWfwFi0L%uK2<7R)5C4To-Esm<*mqC zZqr(>b(7^m zVhKy9D>Z*Q2fb4o$5t$fiHzVBiMtE=a3z$%*+sqeBvv{|R z;oNIJp030kh!X`PC-}84&Qe+$oX6Ykm@!L*MnuJ(mA(0r)~tzfN{Ji6rI{S81^c+A zYht{dXGHf(l_|Lwl_S`tyS<|Y36GY-Az??m+il$Ksod7xk40!i(wGHm#6QQ}qaEhQ z>oHWCerX$xS+dGaq@XM49m}t5fu>P3GW9ip@xdZA%eYoftZbv=!0J10^KF;)P7}X` zQ0MZ_G2{*-bC#7x67a%ROwKC3SeXYN*e6wv)0#K2aeKHKw5ti1VmaQCWq%~~@jIot z9<2=&ixJ^LWHmFgSfBfag`A;^SrCEHueYl&!D7|^26>jSYjFj_vFq))-18~&^%>II zby=U=`+RO=bFSe$=S54pS^@e!xihRfm@95&qPTGI4mU{F*45G48?LF0s~LPgs5|mj zC@satttDEoDQ2?Qp-f4zYkW%AfQq~`YH_gQQO^~wKJ4l4DXnFqs^YAUtDQ@-`f?S<^5g$bV+YVM+>%nFFJa?>(bcrTiq>w9jlmc2e7o_DXw_MQuWTx<*i+r z>C3zG9n;S^`}|}3@~v%`XRz0M%ks|l8QqKD6M0B`$Kw9WyoX2|;r*ed55`)4nKeL6 zOUvT^CC>Aj&uX}+rN5`8w_}MW{L0p@{tg%6s$T4HAGcFU>pA9TvFS{)h;KLLroavdf((ZPDO$M&mxx2h_RZ>Uj+bkfrh^7Sf`O~qqWl3-A zG7z12QS*XxLcwAltAXISAOl8L+HG=R%;7wtXXnnTbCGcFc};TV@R+NVmP1=D?R5*Q z5mCR=ipdvIyH96=Bh7$A#f;q9XEtu>>+k95?#*}j71~%MwRgZ3mjYl?(22qwpT28Q z5W3qkt|POoa~W1V%S?y=)6H90*?rl;Pe?qy_WS|hC0-jE?2`j zAMRV)T4TgG>Fp**3ay!5qt7A#!}GEUem-S9`oa#6T#x%2!sBTKy$#QG#CDAke^MK} zw#)E1W|x`$!2k8)b4*QxjYAl=7vjfx^4|K{p5o;|crt$Z2wD-YZ46)sA}7gzJkaH1 z369Hu1@V*QucknR9U(q1`3M=8|3y52Cds$w`bIL55SRZs#7~mH;#40g7vfSr$4}z& zCt|=SN&a1YFh;QT0sPh2Z)JB!{3Q9CgZ$eh{U9A9|2HY}H;3_pi%oF&ji>*=Qsgf@ z-AB;$bKEnY{{4U@rN1&H%Er-y_%YuK^Id*Y`tJ(zH%R*5k|2LLCI5TEc*C_OIQ+)b z|Gt#`Z?5$bR)l!W|16Gp`X5QL|I0!CH6gzJ#N|JjV*iJ0eGHXPTgBz?NU1-1LWN@U zXwu}rg7``HudVYj)c$)X$bSm?la&9Dv#=mM_r(!U z|3FIm?+S#}Swmd@^(pCpcCL?Q^&I8zk0UOhW7kRP-y8^SeG1QQZ29NAlceE2`XGNR zm6H&+e<8*G_XYX2unz<6KNUw@{*fv6UlbJI_YLG%rPzN5CnF))dlbq)6h~bC-6%gv z_Fo-d2C&W05KsT75kJZPi^7XUwf|vY6qo-6U`g`V2l=5Iid2Zp|19n#$zPEm|A++n zH$p&?{JVmDTd&9zh|7O3;wQ;pALKtAZqoioCdjXV@Fe-G!^@I~cvC`LemU+Z$zS+x zAE`(DkM9fO_MeRmPLkgoUcT6OhNePX{!GMAlK=3fKE~>xKhw|m4{`Z(5IISHPoNe^twH{k!G3nnF75XN=qK^K+6cn$o>l(j z&KPd-?6)rTzhY#WFNFAU+~OJjH(L58@}~U#87duzh1- z{>{Q+@vUCl9rg<(B#XkLqx@+#JDmvBJ1PHCsT|BMy=l=hRGiSOxH7A9W z%0+vuYG``rxU!-}$}nTTc;&>pf6b_)E!4V`+RQ{y=GHpnY_WUMi2-l&cUu2)j4Y#e z`#-+0dgxMR;%ln2Oxrta%U@#V(@8c}(=_2CX^r1Sz{_N0!1yulzrNNh3VK2)k36z? zlYLrUOVHB9F3n{36z*v)UFIJ2V|s+mF|c@~Q|XnsW+1)A<@HSdLm*yKrl$M%VfJRi zT~7BS$5{8j?i<38J(*NboYX{_ku8v1Y% z=gIpv7uM=LKGHCq#?Nr_OOoFVoPqZ=#N}U%o1}@`aAAm4t&wqV@(pH}H%b3R!TzQv z^`}2ue8X=8M)~o!a1Ag9qxVPUWAgpC13GwuthI>i&TM_JM>7xD6?ThST_G3B&Db9+aC&+&?K)j@_OuofOTX@n5 zW7LRg`@BGe8_w)@AC=?c`?lVmDKdz1-{o&!dGW=3* zNj>Y^XufRj>TYchZxy-y&hkD?d5D_sVylZYyp5SYm(43)$M8K-ABeT-bxk~8Z+n(T ziMN%YioN!vV9%lSwPw8eXMX`46JI?2|832^p}rQkQ?OrcFy4>Cwf!(3H1L{-_Mdpa zmj4ohR8Q{iIr#s2@y*YSRorLK#Em#l(%SsUT!@Irn8Y^y7~qs&;w!lB!NE}L{ulqn z_J-z>0u zm-EIg=g)8Ul$E5c#Qx8SyYq2uC;FCL+YfVPXH^s)!2d~Zm)%RY+=m@LcZPGPQxtz% zO8hA)0YzT|~_pPea zbEc--kpJd;zTB_$jJoTsQ|FvIwRBZ=_vysi%8|A5aXO5+$MWf_2FzG6?3z*BJuLb! zzv8!56*ng-N3zUG?jUL2x2B3eDj%3CLsBi%5u`5?yVxMPv5{E2!{i#xe%R+QHsHh= zlgj#woACv!wPt_eb1v;f9x)rjXVdsCH++7r&4{-ja!bp($+O`f%)|1_d#RIL-t8UI z7!0E3Tmdo_DIfgoISkw?CoXZW4!wshXTuQ|24u3L-b+=SZAKFXd zTz4|~^qjjeu+Om#3!ixe5s348AUO9A7<@jB7B)C-BlK4}oP5}J1@BWh`>){pJKX1g zl%m&qrW8G8NMJu=ARnni#xLVP1md~c%+0lk=W5^jrxbeK3+^I_Kzem)&3ku8>WFl_ z2gN{ouIs~~A5`NsUxt1CJeS5fiRVM`{(fIQpVtbXX0*?{+D$-nHIZj`8y4WPmil_N%Nv+PEAa=LDE+9UqsMto5{?#z5Fu% z2`hgLVP2mnY2R?2WuwbD8Ap~=+CKX#!$DvWC4YlWF5vCUe-Lz0`JZw5ecSr^H^=1P z;_~Z0Psq<-6r;aU3iK6@j~x8`ZzCbfej8kcN`Bgpw)5?GIk2em%RZu9k3eREFaKJg zQTb&b@V)YXJ0|}E2o2wDHEJIOEo=Q8k*QuQv^ z@a3K;)!?kj&yO|Z^b_nN(EN9swCX(np5_V1S5#T@_rGR*gA)iBs?D()Uo*lz&Hlek zsT|?T>yQASJwG6LsJ7hb7i4Fa2SZD-P#n+f7Gz)C%uM_&IMzDmV3?TvB&lTXqa$MFO^X182g zbH(LrvBbED3iba5OUy?zOPyvY?-HX0POeI4x3TQA0(@`2tUh~VIpk)_ORY34u4~=m zwLUv;FhH>9(_#AY?zVD}h2;$s!&>vmz!KGEW4l(4jDf;s?SCKz9cvn(qzYKmR=&&% zIg0D({-tG!-u=Q4$R9^SD>!>PY8K1ud)X+no81x@<-Ks;Tx0xG9o^bs&GW_3$Q7t^ zqam%i!ilx?Tg{^V)L`iNVAi(G?yj7fQlSk{8|k5IN~zfHwALOj#Vq81!iD+RPCub4 zm0QugW^GH>t&zOcITz-U#RW#((v-98s$ryCb%$;+4R&Vb)?9qp6g$ZN-G{=s-A}lb zMS{sn6PZat_Kg7bnq6mi8gla49%?SAIUj9;gcC2Vxvb`LQw^|MJ^D+onv=I*gnZex z{cDTrhYux-Jjs1$DCCKpNs(X-Vv`G)$R7&7`0@P<;W&HaR?_WFK|5nk` zl_8U%Q-WbL(MFe8^&=sxr}9s&T7h_|p(#qJe>(fOv}=*+>^iiCbH^(G`le@^4f4yrlS>`G99fA zja_Znl&L%C!i2os_b+~f2nA!{I*DO>_lZ74g4#)`4)ZblGt7OW{Qz;SW2oUjr1z@y zsempcj&M8wVNV6$uIHZ0gxmR1`;X+lOMf(ymyrhH%lwD^A4^+{Ps4-!j^g5vPfFP@ z+2f<*oHwi_9l|O6m$zTDB;2DR-7`!_IFkSJ_LUYGI0=g@N4!U0`=lJgV zhvnStT?HIu5IAR}KK;eTxUE*ljigdu+ZVZXu9F!8{KOaE2mxE>(k=dTXm*NG{0N6sya!>>Ij62|Vp{vG8gR(o5f-hk7uV6l1%S?qX}!E=+4 z5ztEb$M?MSs$RHoZKGH38qZs$hY9~m-*Ik${n`HfKtE|wIKKxGg`WmHN8vwPhz4W3)!)*#OCq~V`y&t|*@PQP|~uhWdHz#qa- ze^1$rFTlVi(w^-9QFi`p48Ao6mwwN2gwqh&`vzFt6GR|AZ7BFf1QCc+H^C{3fjG-9xS7{GoVFEQ?z8*lJrgtx! zf6T{kG}MLkw<-J}oD2U?I^5Ss#ucCc&lDf6kJKaS4_5r8UHSZFPl@!r`inl&kBC<& zT<%r)eCC6O!RK?0g$;fT&V~Q&3fJSw=M>KSD?)#_!nNJF@M7@wiL=i-OK$Yhe179_ zpU;zuUfVgP=yO+rM50>Z6Wuuv^W8c5OJ61=?Sc5N1Y8jPiSH&LjxV@#;v7#T@OsKX zoa2dvdWB2dU|PGvrSA~$Q#kvhgkLIr4*_|Ee}<;6>q2h>^?|u#VxE-hX>4ubjSKjA zako&!TLq}vI(m%9pZq7W_+a(4hSTSqbB4L&(bLkDY3uB0FdiO4MYna0oZo+_AJsFpvR&{KuU@#qo1S{FiFB#BsVm6 zV{={4`ShGLiVs2>G1d`||$^;ZgE8kO_iZ zzig~*{GG1U1PO*pZzb~JDzoW`87p=hMWchhL^ySmPaFqPHPQJ`PMFC$v{k})Z58Oqw zLdmB|eEDAo7A3#W$zLFX-O-o-CE!u=mqf_t_1c&JB;-WN-{Rz7{vPt509};)yPf!nWN+{a+4G3=akR+gfE|ddZXlbxp8kq1iPbe z|5S|pJ|};R%SZW~_xkeJ0E?1e;R^Mt%P$9CKId;yA#-xWqyuR z6ApA+5r+uij-+LfW3@Z4AgID=F8_Po^PLAq!b@dOJnQmnjORXWoo&Ab_k1@?e%FqL zkCb2H)iLdNqnoUjI)Sv`e)vg#X;(i&eous9y_th8!kw;i$cFQJKR@pI9yi0@#8vls zEnx5V=HK(3J`;C+P4Yi*&-Z+4Vnek#RAa4P_#UhOUaQ;#v^UP|bHqK!znMIEXXjvZ zul1pt@e9jv^JZ^#ABM{@LuT&7MBl;#i}B21$%{skyPuiDuPnR)x>I;|W~q65h|kqh z&jnir=Wti>%4hg z&GY~_ai`P|Ei5Av5V3*>M|h96Dmic>I(dM*cf)4aLGDq#5)y){+T1cb#Sr3_8SV<# z4`smB-P+>qwl*Z%`*gxSIdF^3u$pZPce8T|-!}=Dm0uhT)s{~QhJz_Vw!VCB&_A*t zm0DDDA6pvkog$L5hqB5M+{&)cHkVJW$Ibl8hwCa|2!`6rtH#d6Ei>HPtarCWf&Y}H zq*AY<{SWsW@l9I{wWv{7IiCGJN<{@Kk^`?{prNpeV5qJXsx${p57!UREL}ID6i%$y zL$MMjchzitpeQ*o4ED1JUnaw{46J~gnp;FXvOmKfcJ3`Ubt_U6{*Y|T^*Y8g_LG@bn;)Q#5k23+EzHO-tvEpI$NM#JRb zU65DPU#OhXt8Vax-makkMl?A*O)zwHIUi@hV*r8GA4VEHk58}@HQQjTrlPDSkrh4x zk87Y1QeCF~?Pr_Q=)ufK13*S~@)PT7v(Mvf>3(B#t5+161cyueOqQ18M$> zlFQICvN&0K)L6Q5Q<&WQY|yl}X5EAxQ4>fF`qveOq&KJ7#;Ss$xuwIWk0)0gU0glz z@{(QZ@w!0G)(MMJz312buxQ}nCcmcPhrbwEDQFdoL3|dtj03~4;EK#43f34-+DlheT`ahc|v`Y zE7qbhOsF0}3x5vSH+a$RJ>c%@rF8oSS{T|4*f@gD>}9u=V~_=64_|hPm-n&1;~12&}8|P|0hVdq+jr~YHmFi6_#9fI`Xk9()|w=!CtLW zAJxefj~m5)*Z<;_*8X?Pl7k~4O|CeCoRRgqKjH*^@Hgq~ug6Me^4Zgl#P6Da^SzQ+-Y5oYUn+2+x|0y{6EKX=KXT|I>kT&`j zEF0lkTm+WX-#bY2Y7Lz{)I+*uY&^KUhe|qfEVEFW%(z6~&4jcjt(F*o#^ddyF zYe$n%)D<{ATwgwpCpP^4&PK%!%GyDb!DZnhH0+VB6HY75JdbBug6#VGS#;`=T$I>M}!9307t4>_Z&QkanP?rL$-+51q*- z$EikgU>DHgLKXDiUuLQg7moVuvthM&BALdmmTLxH*};f#@!-S3&}FzD4D9|Uhs>vu zEtEa@&Krf;D6rAfz|ELw@Ov0qYHn?}jf2C_QARqOv$gN8LI1O84{w(B?v47$5nlJq z*bas?J$zX?ByYq8Xq2m&Tn|dFxDvL!AHNZ{_9d^f(ShshTPIvynt2xe|Ni<}&(NOJ zojp&3J+G!caeEif->l~DNLZYKVr&E>Lvr9vthD=<6rmBliZjko`X4M>NBccX8%-Gn zA+LArzj!JsxnlQ$N0+=744qMmAr3>(^Be$JpTDo4^?dj4HXYS@3B=DW>wRe*F2uLa zPGIO=R?hlCMvi~U6%QwWoU_NS$rZD~|3Ng->t2Aieoy^3WQ~A%aq(d3QFhXSi~E9Y z9PpRm!7tN8*>b*vW^7GiThe#K_)tA2O4*u}aA9*AOo7Aby~a8)J36Jw3ldCZ_aB{= zOIVakNDdqXymHg%^IOro`ri3aa_|l)Thq6+2&dHB4kew%?22aSX|Z*GiWPEmve~w;MnQg*4VC3g9OlaZvU)A?;pmlkp{MPO)7)S$BO#$TyOs=m=uRh z9{yOnp-E7pLB9>l^RpoYdD^A3_~-~!)WgZ zpiFKEeQpese?umt&=}g$cE+9U4?5`X!SMOzOY~5|Pi)r@HJ2}$jrGJ%HGLFc(B4v;{0$3tQkiiMjGCt9V1+!W@d(TKH>Imko|*6>AMNFoRkSz z-;GnpkIhWZP1l4B2nJb+<(mAemqHO3!4~yb8EvO#CW7y=$-zTe5uE$|u)Gfn8;OG> zOU@k{D8Cc&pCq>6N&fXGC#rE(x!z7AlLIS+($(DRlhG1`VeUv+4)<}tW_2h2IdrVT zmeSVr>f=3nlQ>jyAI59R5oAXzM+}ZvMi=JFYx!i?j?KFj<4khd&yj`ppPF3p*W{09 zc7+#zDw$kyF2)R8Umm^gnbEJ3Ig1)jelbJmAb>e;vJO_q@x-IcGkfNQt$HIg-ry!q zpKCD{M$4RJwP2mC$HkXR5=@a%Yp0o=M=T}zg3obb_}a8NKOuLBcku`muGfQ&)SmCZb=TFjX{3& z-+->G{jOM zg6Hvxmiblz?Lr{oYtO#SdbFO>u>}?`1Aj*lRUEn`G`Q0^SNxE@VP}?iW0Oq7Gk~?N zG*i}0wX6*5&_b;&x28o0xcx9_Y}PBXvB0s;?J>9``oQ4G(x*`MPSfL%2ZQ6bRp*5q z?Ftps0<2UG6~%SWeSqU}s%E{U$ht0#w9?I4?1r!6Q2u1K!5qbm`O;<2Cb z$ji(&KIZlU^83!gpdULoiqoBuP3wBd4V%{3aZwp(iVC(d=JhY`W~K65;plu!mz}m_ zFGMlq^NI$y4B2_cz8yt)b)?G8c`AQ2DkI-^8htQVEp~=zYXR5r)vpL+s{yXnIV0Gi zZq=(oGWt=ZMhW5LjH(!Uc7YI+Wc$95EaM%E2?nUi`=|+$Eq6bgI#g7VQ!H9t9dm@Ex}hJFZ@3l0xnvxSTif7Ut{+p z=zpe2@4pV8vB45Ler7+GubuoZ$l@A><)|5TaGADRV#oPFGcUt(3Y(UHH7F-v*5298 zW32`n9Ko9;OA|lE1#W3F{riK~MilavxB4Kpckk6dz`>+jGj$_6w&&^}<)g*828BHZ zR>4NHdFO_22IYdFic{u>uP`OdmPpucj7>97_Lnzn??08)IEGa+hHpDi!9ePT+@ z${MI!KfD_?z_O7S<xSgO z$>wBg@13JFaEAJv-SooffygQQYgKEK17AcuJ#=m9Y0Gv!jO)%I`*<*X0j8w0xt9DR zN&1*&#hdA&UTC!6&Dp2>U&1!wc<)u5kFEtJwh13B2KA)mibu9ixDdO9f6jb!Yz_`% zU!lx!|1YgQfsBaH1>vyzvCV7RyV z*2|0QDj(+F=%(vFILe(qphY#`E2?7yFnhcA0c3^P-c(B?uEi*K+BbH>y_3u|wX6K% z=*K|2JWNM*Wnj#3*ZIYpNDB!hw8JB z)Kxxe#_*Zt*skS`q|&;9hkN%*u3lR+3!5YtB6BcYgGOUsNv!8skij)S`|51>9%g;^ zHS^Zk!x?z$fo98a7XjnkvMI9%w_^7RdP!#ujzR|siXKdt92?y74sYZpKl-Fe$7pUB zVWvAi4y@+Z9kCBPFbk*YreCJ9<(SvqxL;F-^0Kiln=p~fMJ$1KWFI5#z)0_(#wHi$ zSatySj#H!OV&fiGQzcFgOypwdgB;ViPu=uO-n~lmmAYe~11$5(s+5dQh9bKoMhLbV~5tP&M>kABU5UOgQRTyn2O9#HOM)#JDz3rJq!Apxsz)OqxZyf_JXzL8$UYyp|-MDaZW1_jU zy&a!fZB8^U=;>G`06Ow=}nPC#Jdc@bO6V{A>E0)9Wv&t-})m_}X6GF~^*8 zXiwtM_U1%;TSrTZ9t=BL@gM)_2BZVe&Emst?JbFJKAdVlUEA4_$aLe&Xq~OCiPpyU zo|Z&cV|P!>g3iwN1iot5)Y8*~$8e1ri6%TO2}g!0JeiuAdT7rP2}ry2(4NavhxVL& zXwSsNrHouYG10vsEN9}P^f@#5d`f9S#g%bDL$Ln~l05)a#np*Ek{9#L1f0oV5e6my z4>ahbLK%`umiKW?BvQ;?oG7ZsRsJ9UGkJ{`ul|&moLu;4*aHeVdpN$Th`uctN8rr^ z22d*E_hAW3Z8Oszd~)d@|1*+}JxX_Dn7G?+J173dJ*e9<@9B!}zq`xU%b6pC)G4tF zgXFMs#A_XPE{}Qd#}->>XLv!DdD|V`G9!q*ces7R9e7Q+ zT)u(}=>hV|ySsNVf0)mx$#T?AnwwXQYl@CgIMkUn{;!(Xs)_;%+W4u9R@qR&>x{|$%l z>W<4DE`34x_c&bMu@OFBarj9tztDfw;k6FO%}Eokbogu+7y64Feu2YrliP$^htGF$ z;Zy1GHivTvU^u|xH`^$NavQFMVOhUP*GGj9_pyi{?&!>#8Rwrt0f~RX;gj5v{(gva zPRSq_oHrf)Z!H|QQ}zMUbNS35a$m%GQRu_PqBI1k}>;!D38Cw zuQ)7C4!^?i;i}sP;oocIN-gEa?mruPE)s1pV>wPa<`kPz+2Y7c?;Gi(e4aiHTIFwB9Sm-Eb!Y5y&35Z9py1p<5#SF5}0w62?+o1`T*F|7SQ`& zA|H$^z;pK0NhQi|`FPIG`MBA5){r?bQSD79mZ*Bq$8-H6A3sz_!}Ai|??ROItNL9Y zeuRqI)8C_A$+bu)9)|WDg=b>uPl~~hjlq8qgFhF8cR{%*eRw}63LlK2e>H~xuVV1e zqn}3c=R22C_#H9yuf^cp3yb1&Yz+UO$CUT<82UeB+|%FHk?Rz1glZoNf}ati=gl$r z8!`Ia8)MH;#?T)ZgY!N~lzmpk(0?n2e(xAO9b^9kV)UN?dq(LK=X+zf7(UO%*mGNq zp7+JzXU6dV_n30+9>eF{82s}wI3F;Kvcp$m=%J{jkE>*F^uXD!foAw6Fw&>T=S=|8V1s9{h3WqF;}3gMrCxd&1{e4yT^iDEtLQ&smDlkH*j+g7pyt z`SU0Ad%6ba<2O2-a?e-vcPd=Bp9d6vilYC$!ZQkgL*Z8`d{=j&p(E#N*zvn^5&!9`zU&@A_Y$=dM)>GMX$>>L*ZI(mExo2o~-arCHHK_XOhA% zQ1q87yh+isD~tY%6#ZEW|Bk}-c)LOI(dGJsqSy8HiozEt{yR}=1lqX;KhftXh3o6o z-ZVM_>2>>`rtqtfCVc7?uE((j3ZJ9s`LZDc`RjUI=5Ur(m-h~ZbJZzwKdt!adi=J+ zHUA$fKAQhe6|VU|sQ769n-s3={dI+Fxo<1}T5gG(G!oNtcXPPkFAh?;=08>O(fp59 zxaL1g@zLd)qi|iW8x^kQ_ACBc?yU;fazC#4Xu01}xR(2acJaL%QLey!r8_1~cAwf@h>;IGBtWs@Ncfo0P5yPv~-yB((J zwcKe6*Y-~53fKG}P<%B1UnpGje?~ru-0w8Yx|TbTGoT|4WLG=KnK= z>vFACxR(2K#b3*PMB!TQGckN#QuLb7D+TA!^7*ZRDxaBZI*xcEfiIIs2D)#1KAdnjD%v%lh_^>NEJ zQ|Hx?A??In_Kn>63U|%W&~u0qddgy;o_c;>X;6z-;auoXRJbm0t->!+^wgQbw*#+P z489!}S=ito#JR}5-r?ko3SC;wK3uXQ--xg{g?>mBaXKd1^Lrdl-kSf96@H+SyIS$l?f*9l*X{oah3omSjAN9^ zEi@_DUN~o9Hr>vTGN{#&TWCT*!{I*t>586XsnDMtLrpDVGx+@5ENpOX z&n}1i_Pkc%yayrtZ&7@-JwK&zZBOoDGLS!QD11^lXP}-equ_@VL?AtvEQ0HPq3QP^ zF#_pnL!sCAP0mm_PEBC9taax+u#YnkpJ~qQKdE=($0>Y@J12g;!cz)ALE%#sUZwB~ zh0jvB(2)O!6khGliJz$OK;iPtkV-b?VtM%zB*XhDZ;d52|Npm?H|2C@dzkLdd5}6K zE`5-=*p0Z*5ZC=e*ZTky5lFA={VswC#C5%|G^oX;P6>&RInwKTPr3RbuIqiK!t?4~ z;kw@Y6wduj3BOc0_Z1~fp+E#40si;EN6Y4ttVwq=?Y zP0KVcXm6pbTl+A%`bK7mi3eT)?Q{aI`0`=+<`yJ$UY9uSf-@Rs*UfHN*xh-p`D!M= zsVN}OW4uLM&%ET6>BNKT89wyBcyS9)a_)JV+}6>Sfi(Mcz7)hfM9)uVs+7>(?>Qz_ zvhbnz@Zoz?7{pIY&!G?M9;0zrOUqRa?TtMd=UbXz2Bp*CoTuqUc#hwAO*RVk!29#! z1ufm;ix^Csd%JQn;L5o(&owo3HTS|@H7Mz|8ix)Zm5G}g;hP#z1EqF!`bKE)Y{ZvE z@#=x9DRK?*oQq@eacvR4KOhJT569M0IjpgUruLS`0$m%WdrNv z+5*b6H5)=tM^`smV5?~r?i8NS7k9$TwbvM%x?37Ef`*Q*$%Ib9%{v+@NB+wj$}sr} z%zjOt*Xt+`*`zW=Qhz35nz}ht?EUvYtV(on&5Gn}E)DL}uPVj7@FBQZvo?KRLrX`q zZw5BIsHPaUXy${dnx%_eZ{2mDe%>W>&!5wvop(bayk4^%=iO|2Zm?-EKDu*F-9*_; zSfQr3Y6@D##>JWUEOF}{o>W!|6rNO`AW(QxdAva3N#$_@g(uTz3RD@Mg(uTzgo)u9 zPP**}b#uenwQU`E?MAgB7T*kk_JtgkVuv{go39p6n~tpZtTH^yoxqv7OU#{xDqwJ^ zq`Py+s6x&vWrC!yG5mre*-5zPo@QKVl4BsX~0-c;U_qs--wbwmrM|Z-o^@_rFt6qqvX$z zkPp(3pU6KSN=3<^?*yJJg5A+C{~Y9xlE1{s7d|XM_Z6f(BL5*^QSwKCGccbHzWn=< z7$twBlV9O7lMmO2zI?9zqvUUK`D9BNZU!G5olm8ItqU0}f@+&6WoRrU7y}tb0 zW90X_1?s*c*d6`)&&J5Vv({$N^}l-Ve z%=JfJNub?y@Z~=kbNwlE8)OwOGx>1;&zHXsj7Jlp8Rdlv5+lsDhw#7T7hq51kFtNY zlfT6gQvN~sNq*_qGh*cTy-)emV&qrUTftiXArbN`&;eL}H(c6G_`ku)KftvgNsy=< zpF#r9(G2p!mXwPMp^KK~QDLvmwZDS=2U$YDUOaXQI+=@-Z$3mu7G4HlKF6fU{4^E< z_h@zS*ull3&0nF3a6ZxH|AL20emVY^E5ApU_=d~xg~NPcO*+(-9iGhga3{!b*Pa?*i7HUWNqeth%bgjuOvsK}kB z?797a{LGmqWyXx@j^zD+^I#<>UM^IdV>RX?MTxohbzoAsnF!pCWOiCfB`;a49hy4G zWa4wcoI-}-dN1DN#c%N9&0f64i+6eP#a_JCi(~ITPoFEj_*GuK+l#k*@$0crU1Q6H1~AE0S3Ma*4CVI z4l>%?dNQe|#t!WGq!zTK%*WFfH+EqC-r0R!YC(4++*PF7I#Sobiw1WlQ!Pun8asOM zb-2Xhww@kxZEElAX-V~5-P_pRVsc#7k_i)A0Jo=l+7{;Mxn@qa_I8+W%q13gHur)p z!8Ry%eIvg-m$Dmt9i5K3(Ideq-EX*KsY9%ersnhwsV;3q$zqqa&)~NrZzG#iP`u{ zVV6rXCVD%r>cD5&QqHy=jf-0ng%xPa-`TM+mxk}tr9vzHZ}1|qr)%fF4+-Aq=a1n? z{)1lve9#>K&x41B`0#ZkMfn1l1-vMM3#|(>r)Bh?@s2JB75}!MF|(Tx`V4L9W!fwXooBX&Ju7D)>Rj$53St=GsR- zGM5fK{4y86*uya%n}Bi71mS<1i(~xE!@uO>%RGFwi{I(tzjE=rJ^XPOU+LkmyZCw! zHw6T?(ZhG6!U&t~A+!VEab$SI9zy(Zhs&B#$~(v5Q`}MTt6Y4lhhOL7RUZB^7Y{uA zdoF&lhp%<%QEEmkp9dj?p+)%+@C@wiY z_TGnoW6Er!V;IKX?KHD*3u^9l_uxi}-ncdQy>NxG_h^KYd=vghK)Ho&Ik;VHtAOJc z-exdg{{+X#{c^jJ>~?W;CHo(peIL2=?BuvTQ)*8h@whv)hbZIxvCr#Jtt0B3V}=fV z&Src0WjvBR{@8XF5`3PdrNeQCz#h!=8!V?QR=5|(c{t_!Ho*MR1U)_z@Z}#4EK2^x zPQI)eb_E^BEnoiqz$o8eGp1a7KFJ+HVghLyvf5;WDSxd##yRPT{4pC*F!G zR0QqkEhfdxv2cTZRSq#{QhtHUH>^^S0gBc%N%;wSk9Uj@uFk;zfzy?muuif-)S78}MMagx-~XEF9`!Imwb7><&*R`bJ{Qs{uW>3k#Qj{XoF48? zZZ>Ch-D!#dFTCUD!arnBne*|t)^M;yC-bn9^+&YkqM8e9&Yu_b|D|eszJAYwuiqeE zVEu42J+i)Jq~a44#s#ePRSVz1<8!BCd3Tce*xH!&-|u;S=MxpC458QeJTJdvyU=U7 zxN?T4!u|)U=x_0gnuc7-zycw^Jn8JVboTA-C?4R0FmT&x&DHD_M;tzVL&dE(&9P$R zYuK0T%Y!4zZI$6?Z8HCd?Z!>6e7n&@f9Rp|eb{X-9XC!4hET}rsh5mDV_Q<5|I5{! zFBsf9lf<$&C!%u1IhdyL5zs!_mdLg4z1u0=)t92p1X+9*2wqAv_-rA+$|v6i!gnf; z$M-9yM=8aRg&MqalT{0=?VMWp#*b|zS9lG?ly{c^vW~rYlnO`jP6_W^fyWMyA`F#? zP{CTpZy(!WndHDA1moL@+i94pM;Ys&Gubw2)iB@Qu;00f((6PifOCOw)oX`TeDiB| zc8l|NKXzs%K2gJ#uDJF_n!8Fkin*@@v#_Cs<}T=yuKaW)j?O6Gi=@uiK?|E8t#>`X`2*o;9FSesmJ2Sh^42;m!080^yb9g7G; zU;1YYTWv@lSc~-J>a)S?jo^s&>1}@rvKxXmn@gF7?dn0gY#?`do*wN6zWQ`uLTctIu<{HUZK5Ppn8?x6&j?+26 z?C6OPXKIWm@NugpE)oqe2|opNMVcd0fbR`fSA(v8_)r?7K3VrH+D*On1dQ0`vD0nV z`~iy}vNgCg)?$38Vf2^afDcCfnv5I=%Qm@s27LL}jQ^G&6FnMVp5X|`il}@!y*g+8 zKA?%@>K>RM#E%C}>w}f>Qp~W_RL3j%)e+2keChOHc*3`tFDTj^3?E$+iXwYd$vwEN z;0v7ic20Jx^;#U+`$Bt5foS&7;%2Oa6a33+F6SjN&k?>GkJI=fQvBsR?<$CIl35S# zxGK&~`J*TY_8oD#7@waqBP;t8NBj!-*Ebhwef2wI`?H30_C#)3`K2JH=gJKPzIcpS;JdbbYVuC&tQmae?YBwN0Cr*fvg2@BH3U2F|W~rbgT3 zzI>Z_AHv`T5sk#VAkJfjP8q*Q*r$SrPM-=s7@Ia;Y6lE_^C3*{ea0%4-{0Ot@TIB} za_wh|LGek7sVdpcZ{OAT09fi2N}nFOIp>r5erFu(HXFTYlf4G{B@Bj64Tg?4S9+ET z-Fj(hB7?7pVSHg@TbD~R>AF6HnEHGNlt#R5d)u#1JHJMqK7os0K@Zu_TnRU2&IpF^ zaVRt|^oYM>zKr%i))HmviTQ0QuicNi(LTR&!r2>yM<|Tzmyu&TjTuGsv^u*j-$4F% zLZttfg%@~!n68wzbn3&AeK?^uP1prYs>Qb&wKFO%kaC|jxDpZH zlP#n&F+SUD6ZI3z3bD`c;+f^%F8C}@@ooc-Dv!P0($M0dd`(P@GXCXnH^kj*;KWt# zHJrd+m*b?K^DTGzIQYfpyRb0ddYA7f+smhYMnj${A389DDFezhdr~R1?J@ULXag?U z82*F*tPSW#y5#oa;*W|E$Vc{`aW5H_KB?^NNu_m@%8D-|BbH0{n$2E&oIRc^EZ1F5 z{%z!|^T7dkXvZ7#^HqU#qswRZ%ym9x|B}|C{EWyK;3xj7Tgb!IGn{OvLOO$+Uhok)!{r}UcRk<=;+)d7{-3<9p)bIGky0-heef-ZSrlG zzS7AH`>1YPcjq?|>OOMO^@m0k*56c++~zWWBahw@ ze?e;6j!P>YZ8>RS>nn`KPdELRyf(V@lOlL^=U5rr(WfSZ)CKcTagkG)5bADq$*BCM z{v9p%zis_ryxse;Bs&5dz)|;P>(J+ljORyEdio~HG$7B7n@#S?EjvhYt!=z6e>xi3NQjC;X{P^ z$t7kK&c`hMVTB-&f5gwV<#S{VA6~r*Ly2miI<=(W4x3FaDY$bdI7j=!P@>wcPA$oM zqcxXOlK1AS#??)w91Q!IdqN7arzLrBoaT~C64kkgIx8_AauwiCOY+|6w&0=Yzq}s# zf%g!jaL$vW@E0+jOjhm3%qhUM%HX;7_C+V?EXbW~Jjz)haQH3YKRFz&6A5{SfzQWJ z4o5FHzeJw1q32}PzvS7BDHyjWhfl&J?7SNEGYp^HIAG?@z&~U3%#Au`UJU%RMo;{6 zLB_*YBNxnEFmryKXYh-%&sRVih0}jT6kZ===TF7ZKNusIbG*r_|JFKvcQW`a7fU3} z90IYKro6nO+aPnWvy46W7dV`oaa^CAI3mQwQv80&Wb>rIO)_(1oVG##$!eT5^MByS zn0n9k_d3V%SYzkCTnuv_clNU3UlHO`u6+!Dsim9`gEmv%+?{$ehePg<;x}3O@YC?iattUL~sJBmAu{?#sKeN{5@B7T!qzXn?qRvG%-IAG>u zNQv{apGI0#`*{F%h{8V=L(lq|ti~}j2L+2)q1aYm8jGVrGgg@zLNAUOQsWSuVTk#Wp zWc@%~m+NxG8T@iJTiD>c;9U5~b%1m%zVU!Q%HTwU)eg=>A}O62P! zGdG|AX^M~L&+(aocF_Fi8PwWSmzTC>Ab(xn6hQ>PUbLRN9%TmW)1PPA82$@!F7|Iy zxUR=59Zo*FTvscca|GdYgTsBh{hOj^n$XAfqq`L!t>=#vuJ!zx;;;2wt8lI7uM{6` z|K}90?XTOF)<^dvt&bkZv_8kg=%f3u*5`CZukH5X7(I3S(R^fl^V^lo=!n?4BrDO}t6;|gb+6#Ca<@OKri`R`C<6IfndU%NV- z<<<4Ihr)IH*r-69nqRYp&pD5=0Ngv1Dbx#koZs3dVJW;lAH3$#ue zqsyhoRb8}{H~{midQkyrFTLh;f1>+xCZFZJ%*U-QxWu&pxq_B_GD1~0?8=u_ix z^4I#DuW+r8z8-12O;_|C2(crs8= zU0<~ZEvzrL0S4A1Z7cd*KoEg^v_6XrYH{6uIu)+vUgL1Tok)KtuGc9aReZGE&nsNZ z{i?$CxWsEQ1NFZWKPi_UAN0KCSP~kzaI2S&;-nIQ@{!BjF4l@7u?Qojo zPkd*^pSm&l_HVGT!L=Rq{7uVU?C5>D8HJbPT*`H`;;-$m=TTbj=M=rRzwSqEivJ#p zp4SMGJ5}L}6dp&f`-`S$Sr}+HjqCc-_y-MjA$`i>wA&WVc-gycKM#P=oOLb;ni5SKR0B<}Yz5Z~XN*?;W{&+Vco68vr-1Lt+hEIG|G~j8orpyxkN~KM7Pn9Wuhk3ZTE`$$7Q0nZGl0GMWzDeVImmW>X z%IXt3Gz7Pv&Tcp-6*r*9i=ywk)aG_R7Om&gww~s;g>8~CPX+oI^QrnJsY zRgx=ELtE(i6z`eRb14I?yIL}E@2qo2+wPFNQ=c3)+k<#u+_W3P$(?=eg3MrVoe;3}!x_t2`!r!=)s ze@2(Wr9~AYI*DDQ!}$2H!onA(-S(BH7!RH za(S&>Hqyd2Xwe*P*wHj;4%A*_?UTp_USrMRoU=-v_t(%5Dx91;x2ylmx8-N>5BvN=j!g;74&EWZ3>V3erx&v*H_w$Z`2|5W6UDu2~MHkY>l&VYRRH(~-7 zC4YmH{}U}7=f3=Fkv~d)pOe4EeQbN|Dae@2Xa>ct@UA8oAA{xvc3M-H($ zwEek8_2u)sFH!Zs#mRqN1iPbO{%Yips{eb+ZH7MAj#z%KwSD=!#mRR}Z*y|x;L9%s zog);+V&-?N(i5Y+7 z5ixl_DNg?RG2@Rs`Xu)SXn*bx`0{IGq!I%F*^wX&P8(jV`N=A3|^Y4ZHQT2DH(|?Q0NBz0a;p@+FB1(QA2U~ zBad#sSNo;zQTmthVu=9udBNA8KDnaur(FKJyxfK37r&zxRsKb8vq{(gk>KT*e@%@1 zE+^j|LM?p#e-UrV7X`0{^={894D+@_wke+BsX^3RIt|682=l}a{Geff1U{ePL0pQ3RQXn*bl z`tm;+Q~&q4hA;c{iXxtqA&mJz@qAZ#L4$<>&tJ5(SL)>e=e0) z!O#EU82v|_{(;L&`*AJh>%Tcheg!A12;Z=W@V_tr`55`76*h~mzgd8M`IiF&i-Psz zGfsZFWfT7Q3a;MmHbagMt5XgG05>} z?p*5GB;wzvxY$DYf<1))C7&Gm4yK%kL^wI#Hxa(9?YaFg{=F-Y zpLM)VegD4dQmTPf8+EGTcMtx(H!~9Z&-&j=)O0j=cfu$1)DupqgkQZ`N2eCxqi4-2 zIAZReS$TYA)r_XfBjAd;5#FA!X@LV|BvekHRxzzAHFZ%Y)7A5#V~>TSWAd1`u(NYv zdrMDeZ+BA*KOA=~yezjjEoyA*IJUk0n#IT93s_fTpEcDqYsPWSvt~7)(9}A;qVo9Z zRkLPPOrKdfz4?TSs^e!?HXk>=d3x&!EiFfw((Gyeqa9s;UZQA8S<$|`?o_%Q1}84} zQV%5!-fwN#&Kspg$P@K0DYHhsYxpwosAl@R82r8%ygLTxdQJQBHDv&HQ4IZH4F2U9 zT-q(02b;OvtCu+gasC8%mt=#nTM529&KXFH?hxWK_an}BFZ6QXn>d$Af**u)2IA~C zf~RoKKz&7L16cpBQC}dGJ$QSYrMIm;)7H^oJzf|3arJH|7!R=S2A}!lTu-~pny9;Q zuK8$LWBWpZ3^m&AHEqo;-6qlad$qFcy~J)b|IWn)X?5qEnLekk0Ir#LPNf0y1w{B% z7dat}ek7Qcgm1J(xRx~r`k(!ye_}WMr_U&_hyv#gR|@Vy{BufI9Q^hL)YdN3MgKU~|6tIA#4 zQtx$b!%$y2-O#`PYuknzql)=g?f%bz)pCC9;QVZA&1&jsTsz){kt@hP9%TQUo=1nx zWm+79W=DhmXE(#2RgkRxRgi^eq|IbWmxn3%VWN-IKUl>0`s$s!6|R(0$$^((Wyi{p zDVpTK&yffee$yN?coMvq8L|&Lx>wB+9tLkOfpT?~FVhn%oHDhS!$)j$c`A8eHK<>$ z&AuXx&9NTte}bV);d6@{;KofbWMWQaraeENy!|xNG;OMUxplcqaz#kPY1+^dI1+tV zEK2{1+$-&Wut;;6_27*U>bSMc5G+%(bzNz4ke6B-7Y3W+Y9K7c;7B@I`*bBdzCHz4 zd=DGkI=0NzGmo+t4RI-dsm9WLUna*x>9zW}cP~U+o--P5~3;JIkFZvfN;I;Z{h|aNdyhf)Y zvo_v+Qw`ZM_>cDV%Bs(Umt_v0jTD?5pnC>3h-?L#18Ke#(m>(tgF*Imv^jVXUiIZ% z!s%sjN|!QR2VYJO97rClPkJ^>51ms+N0NJ6?`h+Y+zT)+CM9#-bi4RBog%BsghAp11q zzmvF88clzKX(Pc9dUS7Xp1ONR>a&>EvV$Ew%%Z*3{DginT}w$Gm;leBOt;}w!#1ou%VMSGi+pkFAi?^vJzKQ znK3)sg4FuDo2or#=En26L3UTT<9s}w{hPR}ot=GY_TUSd&UE$_G^p&;;ds8b=3Xdb zTjQs2g0a=K!*?qmHG&66Zobw4TZ5rJ%MFA!Ztaxg!(4+SHOWsr2r0?INwDzf>tt(N zh%G1T_6#?qz#-$Ro2BC#H+X2TA4i6ozEcy)!3$Z|8@EmhgqK;b;h>RH@-VQ zZu%ff1>emTJm3Uw=fQ39^3;;0SQsC}7&-yt&zTj3ykA z_=cArC5TNa#BN^zZWv+h)raHdCjl()UkhKS=4vYQ1T=trVCW_pByOS$?o~U4tswg< z<2y=xaMRLz@-^xGfQ|_lrlkE#Qi-L{ z@k-ENmB{?wv6a-|ed{>(pE;Rpp$WV!&W*SfRBoafUjjjRG57-_POO>G{T%VI64>2! zQIY%hTYx!pkDiTlIP)1a#PLVq0CP;{KSt3)`y1GKdW>`fn=thP&1$UHLE+NPc2X zcD-?6Y5ZtkfG-E6v%iLKQw)~r>^rdr-WTmOG%&|ET`<I;RP^`Dw|@zo_6o2g@_`fWF4C0{8_P-%?w>p9l4bX^->i`ZBZ=H7>7>5sWta7@*{ zH+-?U<4e(+(Yhz|#lX)^yXLH=-4s&|AZhVxD zpmMx&E2`IBh=L+`Qyv-5t~=tX{&mG%KP6X`4WG4*VE?-D{=cU(uk^pUL-(ku>%Z2F zKapL_q2h;z<>f`>KR64zm_9lBdBCmHq-fU9`|#yO0VZ}&DK$ANLd`wcxFieMW`O;T4-;g!_u!se@@}^G6ac-@g5fXQFqxYysWCd-F0>m znBT(Y*?wfdM`B9J@vAhuKiDS3v2=bfTZk0bAtL&jKyK&|_ zOY)69lZ*agW&e(kk>WjyLwooqRMVR9oj>z{X;))+PYd2S=*cA9hFx=88gbJ zbe||jl2FT5#CjHqJhSJ>uPG`~%$t*L1PD2{7-{o=@oo0FJ@x>q%O3l0*wC=YZv9_| zeopBrb*I~Q9Nyvf33rryq_||o4wI_j8PlYv3@to@mLe;8Ey9msBZt>QUNxT2)cfOn zrp`om_GX4p@So>6%PldHzsKCKic9R3uUU64D^ZjE(hho5M_Bg^ezS^{Rl&yI;H~ z?#gTZ%~Ho5Z`)zmxO*)L;H}o+&gHAQPx6f8c^9{sTTfgCW@tnN)g~$|6 z%Ss5qV>tf-?=QaGcuu{}v}A(OVH*k*b&u%_(6vat31?PtVDUq2%o3M4FD4AXbogB+ zX1|@y)BkcfXUPm=zfU>*X$yz^h8-?#-rcrMT<`E*T>Z;?nqPGI@s1Dck72;!XV_@S z|7wTNbGS2SVv)lya5$nSG&uY+7ngfZ7dm{2!$qIj4(B3@!QF06d=3St-O4SD`)D?B zc0ydn8PR_PiV)kVag-|1Em%=J>p2a_7bn?!}RQ$l=20 zzYs4Dt%du2&fe2duHsO8*Umuu1a77jDSxQak9IKh2RrWe-X|mX82Tea+_6t^l2w#A zD#V3P1_VWkV?w;topDSll80J>3H=4IPqFf|XvQ9g*r)7kjwMojd*K`HRi9{~UMff3%K<=OwCN2>2tka~VSf zy>^w|`{pU*2s@&8o}{b&sSN{rl}#L({-Blr54@}3oA&#%Ss z`D_fI!5F)(is5s644-W=xlhO7%h9i+^m!tN|HoqZd=cfEoZwE44Q8EzQy!!EuaDtBH>SMY43FaTn;1Sv zI6aUp&p%Ct!=bM6*(}c>1qyG$x!@mG_#%a898UiH3H{9uCx1;Z*9YPY75&!~{Q`x5 zN8z0ce?sBi3YU35`D^`OarD&jLyG=&g>$Yi`v2YGm&0}@;Mnl(Pxq3!!@($vsmfFwTj@f{wAMU z3cpFwYx{pp@z?a9QS`cAzNPT%6@T-<3gW(8-i>Bpd9~bME4jK{k16^KkVneJ@qvN- zF{Fj~TZ+C{;d_t}fpRa$Pxu__a2_yJg!qw){!)dXr0B6^3F&KM=+9F)S1}^@28DC2 zD0rX3=PUf94(9vkgF?jgO_^9aX>^cUkN_MffrOBCK3 zgMZ86^9-7GIbN389G~p-sGKDuQ{HqT4_5Z%2zev%qjlmy_!CzMR ze8uN)4)^8CQiQnfr#o;kMPN2vuDu;jdZtNvk5Kf@3O_;N3lx63!u9yi_m~;TThlL8 zcmvWzZo9(gE4;_y)Kk~v^$O=aOZW^ZKDxa21I@O*aWyCOUsCkCyx&l`)^mlzb-DHd zPX?B^1wY}h=WkakT;`jkZ&Nt)G7zuFPx!EpGtdr`@DqFqK?Krsjwkr12qKVvB7TB@ zjvxZ*ufg;p;W4mW3-A+t^n6LT zD_*-9C|B2)?6dpzCGE}EQ+AL@uj@;wMK)L7OC-$VR7>ILsPH=4>eI1dVBGT*Ytn4sTpIM5} zbeuDgUXO358#LZNJ|E6e8OTS^x4E`r@ad($lb$w|a-%36y{?zPDSB;BK99`cmrIW` z+MfHWeyZ(xw8FJLPm000c3_}fJ#XY#%|QGF{KP(c5JaGz^}O*AgIan$Z>&_fwj28h z1NrFo%s#?Exq2Qr&!CoGx90^8Cw&QiqUSA&Ufbb6V(>4;;NNh#ug`ZBz1HU^G4!hy zeHYF}&*x+4H!FJGK410drG3hN0`=5(9#?#H`*h90*k6x79Mc$BFGu1hdQKsTK>oU& z9B9zOc2e$ezn#of^tzp#rf{wQnTn5YCo-N>ANDWVm$*XFb1V}5^*FElW3QtpAKiWi z6rT?(KA()C|FWXLMA83L(QCPD6}?{9{94g#J3OZ7bv^z;;q!4W<$c!Sez~Mw5occ( z`oB7Q)>o6lW&T6FS>e0721Gtu&)pqPdadUNW9a#k1A|X5_lbS|Pf+x_U(3E0`Dk3m zH{x^flk!f&IfJji9^cMIy3l{nQ0M5S-yN!OUBB!*43w+;uO1IcFMQai7^sgP_i7AU z$R}{P&;1j?iVyF1Gx+s&gTi-5y2u?={B?WN z`+Lobo_rZ-&#UkgKDvI{_XU@6jQKcMl<`6HIZx4ZZN&@f%gWPbJ_2-zR4v{SoHO{<~Y@(s!8hg2H8u zK>TfmA5Fl8GBQTs;TUsf|CK9T>Vhd%3O`oS*DGAsAWWXGaOum$GYX$hz=dTBpCKTQ zpHsM86PbLE!jDt*Z!7$Gh40BmhQMUb)52igfQqwd&&#NOX4E=gZdsBz{k%)&ojTy>ZgV)Dv|2CH5s7r`YZKiI<9YA2w{$FQ>wpVsc`h|C z(U~hTjUHd)Q}`@vTVs3M^)2#dIo^?HmY&|OE_lz@aL!Y8S4+!P4egCRnTD3`?#^z{ zdo^85FY2bJX>%;_VC^am>2ydf+S3DZr}0nSVH{K!STKCHw$QkI%s1yQ*EzJN0&wT6 z1;ABqUbN-fhK}C$cB6k&drM=tEmY_^nUxbppk3%jIltZYc9@5Rm0qzA5*ypn=!MT1 znE?{RpG)Je|(rA~= zCOfpK41FQH$HnRFxqwitVH%rHp}j*0q4C7qRm|dr zBiC?Rx-$)p=xTO|L?>ra8y4jI7-=xg1n(6zgk+H&Ueo1Fzg?!fj^c(G%NAE4y4s#L zOHQifrkyD>YVdh9eAH(d->)0HOW&ZC+@fu`F);DnxC=+ zBW@zkIT*`XYT@unKCbVgymqpWkDTl0V-~f>Ta^$|p;|{MW_EU+xHfd44<-Bfrm0wx>{O1j=Vs`0`s~>i;fB zD9;^|2ZJwveoXz}>Ez3NoASAD@5}!Rut@v6b|d?(ATz<2{{^5?_D@wnD}>|D)tjp+E#}|0LqR`~za_pQ5o4_P2-dzhC}+V(ecLA)o7gU;eBZ z`PELoJZ~fl`0{7Q$Pb+Sm8$=-ulw>p3*$xE|E^uF#PdY3JNoiJiTqLaPq@X}7MG9e z?1i5%fA<*q^6CPLmlu5b_s6v#Ha3L!%6~4#xv27|-e>;FG5N*M=X=RNCZ_z=PQGtj zzx>?Kj?#bb`_%urnEdnKXa1{W%HQ=q^G}b--}gTAcf{zw+~t?&vq5HpZ@)I6zKuz^ z#kJp!CYK$*Q#kkA?|6*<)f{XP_Oyrazc2sq$R8ztz1!3XTu%0%gYom_PsK$os{ZFY z`Im%}?TIh{5af@NU*VM*oxibSSXB{Jw4c_%~61+siNI6#f1DeEx2G`F(mn{^)zi_v!t3=X;c&y6ND@ z??)obSfPngAbg_O->3NYQaCw z-{B(10M3~}o_`#NtxfzdeTSV*U_bmA%;ltZQmPB@@p6BgKL#^Cd+(6Xk$1>zCZ%qW zbI_8X+`lMg=JyC&kRJ6;@E?H}sdpK5pZY)ft|aBSVLeatRfuVSwC>Vt-f4}ZZ;Ih_ zmf@3Y>~ihnQc%A$C$<}i;Uhy2#|2I!}ld~#Moq+r)Aya(bu;pVoG%>GkH zr+lc=+?eoE-4=G8aUr%!7*{rro$?N!mRu)T9ZW4mmBaX(#e*qcqQrta&y zGMx#3(^>5$%HF6I>2|PkTfDs2p#6rlE$r=XX||h!J&j!vn}TAh|IzU+L|9j1;nC{CUkB>%y5wyRySizi%b8Ut` z^FQ}b$}h;nIPuG5(i|8#LfVhp43b~$R{}XQ<~dSxD0QIRW2ZV%_CNNx<0=d1QFe}H zar<9<-yc6?x+8!8bE*n%rnpdTj@5WxA9E`EfO;^z>(XH8r1e4e6!?%`59gcHgQ42> zrE5d~X_X_KB?a}?3E6D=zN!MBbapHK2M?KjCpw56I{+k& zzEC+bRysR7%}u;6tGT@9ikgPCPAPW?*1QOxo)b<8vc*u~1bF2w%A?44-RAr~j^=pe z{BvQpSOxFKfpbkrSG!rb35A!bAiK^qO**M_z9r%67;c8ACT~xp&PWFfSYM7o(?)Ru z8Vpb1R0JO0PO5fJ+*X~7xMOB6QFJ~xPzNUTuxoumneq;9N)CL8yx}yq%=zV{GsdB= zGUG?q@!(uGR4IA;m1r`Ro1CmPW~Zx~bMh{Ohuq=)E=^}AJZYrz6;JZA?nCRFw)}tW zy$fJf#kD`Y!=V~qB&I&_Q9agJu~keEG}KoDiJYSWA_Rr{NJ0`wBrlT_g-R>Efy!w_ z>BE-RKIqlnVqbEr-Xd0wMTEB6qPCTP^(t*`3*v)5wDcw4`pwMRd+j+h$)VNn>;2zv zAZO41?KSH)Yi7@${TTX0X6ljOj%HQcxM(_C{am3c@_8yUJ)3#1xMsy0Ma%z#2-2&F z+rSWMQC(U#eZ?C}`P!oDJ?b-=_rd)tUg`qg{M_68949splJD@QItNIMv+vUp8R~# ziVxBgz4+j35@_mN6?jDhuMk=7;3@R0T`W}`#>K`rMYn#5J_lM$Uj`&8sR1&v;DLT( zHSn~l-1ry38tIU#u=L3VoP1Vv!o0x|ceR zaVURQSYClk$I&MZU)_i+2kk6;mV(-I&!^p>?@(jU zu6e4$RXv;PqPDpaosTLbzbPm_=sECcq3~AFM~fF=)Rp@wHabEBD;zhsO)-`W%ySd? zRvB)w(>D4}8hz;Kf9zTy7(4MbUXt=ia3!C+=L68!caCpn(burzpUhI%M;$0b3Dgl z6@Oe+=B9+OOCC)K{o}ZqtQFv2D9^qUaBvU#&4u@RaGV2O^mu>Dg%j+=U-sZ1_uvnB z@FzU@;U0auh+fW3BxxTB->;W*3fxw+3RgoHMW@<7C z=%t@;Rj9_LpVt{2d~j-IKKBb;+Vz;grCrY$+}88gf*!tQ{_=eU$>%7FHzb=+(%`ne zZ3372FBkZ`i66`Tw1@v4f?n#WhF4S`awYzI!AJUYpTMR64}n3HY(F0_aOvmM1TOu9 zPjMq*BjZ7S7h)_OV|(X$=oc39lQlD=NK2o3i1wCZ5+#d*fsn1UYF54Hb<&kh$*4GINjoJ&pcW|b_rT&*19J-*d zV0}LB!N2Okf8fD?YH;W&qkh9wGi#Q5{N2n5tH-!$jE}*5A6*Ib z$DUA+W`ynQ0P!4i&Y`Fjt}GgGoTiG+BjYT~JQWx|OROIfr|Dxn7H%F4HIvBzJ9`50 zSTU^uNXrPyr-kv|_pa~?3(fS#6)CZ8i~5Jb$pA*G`b&?1@U5+b-h0EWI!rb@XZ@@SVbwb9OS<&%<_ z^078S`_1%c^F)!gX266#8wq_G?BtO=;{znzCBKnqk>=}7_-o7mFco&m-(cjYOi9Sc z`No!y87r6kZKfQLYt3$s{rKLNtNb2QfUj45<;$tCOMmsSA{A;h1))E5xAmVum`gtQ ztLoa=@W96Q-x-9t!> zJSTWXrRkc(?hwpDmdmuLANrqjuLIvNMH*)nu>JRLI_`>}m8POsYc{I=<9dh7bNk2p zd{!5yN>t*;2Bk(*F;K%*p6+#=WftyLH#p3V43XCe-|N7w5&gVL{`WeTeN3sMek#rH zSp{^jLoW-piI1lA`cS)~eMD`v#EiMuAdXM6j;l)l-@}iVDby3;+9m(%{Q1A#{{O%I zSndD+uCAF;pS~zvGs{CE;HfpU>eJN%AWnF{yr%lHs@gd<;=t_m zjA^wsb#tazqU$b66Ih#`T2-H(IV0!b^s1>gr@EQ+k1QdL1^>D!)9b2cRZXv{kLeBK z+39J-c$zZ1Zccqe)f}=j?f?gw``rrTTDWea-Z`TB;wx5%8>JfQX2yE5$y+FN^r z_P)M;+Vr*d(rfQC`a9!ObXw6wO6l%Q`(XD7C;UCpy8OR|GSO1@^B!XtBZ?6Rhg z{??$UfBy8=Oj~yga<$#fO={|*NzY&qlUMb!39>>lXy{et54^W2&0(>1=9d z2{5tO?2v99?afpW?3(&BZO{}(Xf&XA-Mjl1rMr6iGf-dqJ{@_nuYF-xQ-+?@GyHm+ zE+dDMgN>czZ36OPO;>Y!Pg`rR`apuNFnAV5DJZj~CuG;Uu)cc{y}Pf;pdc!c{7WAj z&{)r+_By4mGFGXt4|I35Or`g9sUaJ}-tJ6yb9V=c?}eu{+MiiaQPq2Fd>$(Hop^e-9sIPzhf4iK0iB~52 za%BHi^c=}A_Hj1DTmtiM&fJC1zLCyzK6y6&cGtT-=fKy*Y_P2l zaIAJv7v^-vSAQe<{-<_woMQz2!NNk>uEZW%@zRn5`Wr*5PnBU%C0xg^aBX z*9XJ@EI;PMTOYqH6O6EBI@WU}ejM+<`e1$>r@s1NI&QDY5%lE4<2dscZGHCU%iivX z|5<*vTpz!c7U4*ABh@eSnaI?Igx-p!Y{+mpAT=YWr&O+J$UR$2voe3@>fcw~Q%6pu_dQaoDf`FD+C|Ll3tOwoJgoXZZd zD13gyGh(jfqd$K?>G>P#whSNt%KhYDwV(7;_LJTw_vy{{eVj8RY?+Sv`}pSD{+KRb zejNY4_Q(2h{QLSZmdpKd(qlLC#VX7=(s&pj6lc!t@O~XGWbDeoAS{8 zqcF?2%dbuY-=iA1&=j zn!u6RLtpDUt;GuusR3UVlXLVv4ier2e#IM-Rr=%8cfP~&OwK@DUqZdqfKWfv9S*9bc0D5 zl@7Xk2iE4mmO8N229q-GbkJ>ZV2?Yn9S)4weUdT?&51|);CKgC=D?~Q7=Q0W%HVaG zq>N>bvY&Eb>m1m34JKu5bI`r$!1g+@L(L#V>X$T_Y%>!LCgr9aWv_H#Jq~QS16yM- zDdQUsx*-Sl69=}_f&I;3Qbw^EKuI5zILr4#cnr2eKrJh8Ue9Dh~m!=sLf|B&MUo{&GrUPxc2*enP}g*fXu zq~!iw6VWfrou%~0lXyBYeyrkycaL>qKFgIpI~Wf6G%9@xL;5|2;%X(ApRAAMUaa_^ z9@399^v5dxf6L*I2Ve^VUP&Ve*gqFjY!(D>_z@vJ z%l(ql^W_}+R~7xMIrx)wJ}(IPO`}Nv?(NY8$#P zQi30RwvHuYZ*@cm6XM;|2!)=9%iS=aP*0JDyJ04wo=^>U!%RZG6&LP?nS^?)DclV+ z3HA0~xEp2?IbTxMhZ4bwA&tx=f|KNKm`}u3?FeDA_mpTy_yo`a8|Sbhm`?=hFfTKS;1anT<`aSa zB)LA6P^%b)WML)|TpH$OCZXQ&mWa+L)apzw{PJ9okVMW`jF`_A9{Q_1c!LLT^5D%L zyw!s*^x*9te31w5^x)kd{8|s*=fV3u`1Kxqi3i6U5xFT5d?*(rBoW-`!9U``2R!%+ z4}Oye&wB7d56-iq@xzJW);M7H62Zqk_$NL1Z65qH9{jT&{B{ri1rPou5B_BjeuoGD ziUx ze6QRM^9gZX9D#x*mz+(RE@R zkFE#fcyv7&$D`}hI38UO#_{O-E{;dnadAAlj*H{byhj|5=2hZ&vOw;0J`qIMWsG5) z2%_usI3CS!#PM++{?YtEoIaXoVEl`Rp%?jG ze17S{lODWAe6w)*QUn~BnhB(u= zEBfd>%lc0}9Q>p6GSi<+nUdh1kPq{Jh>(&XI=?ghrAp6eT*3HO<%eiI!+aiAdfpxK zXZpL9K1b%@4=H^p7)@e6ct^HG%o{MD&nkURWb*L7&e_TjM~67`c}D_#-WB4^C!zRE z%E3F7U1x+i^XXG|ofYEDr(N0gbPnF7?25(}%;#4`SrR;%L%&h!AB|7A9`93e7>#FG z?r+IuB|$WfV*aNpJ)?0E)8DS*FdCOKzKr^lk{}unGatM|UlK&)Tc%&B>}}7{|Fc9; z5;TQ4^PyLE311lE%;y$m?oSDO?U+MWs4*rVL=ZPHr3cAl# z5_~xaKTXMP&cU0hD=!iAeyq<`N}riI^v@_hgE{!!O76TI{Lc#iNDiJ>`d^=eKcMvK z%)#HO@OR|krz-zU&cUBo_-AtP!&SYUl7nwm`g|t`|Dp23H*@gI6`$jB@c&T$p~h+w z`*V`wQ_gVMjy|FE+?0bKqWJtc2VbH5c}EUDQ_;8P;I}Hj)#TtGQTkk(gTJo$tjfWE zqU2tYgP)}QHjsl~r|=~?`0tcH-8uNV3O_IhpP~G7ZVsL>2z4v!dsqA|F(1zT5Zx9E z9;d(kp+_z35B;|Nr2mnJ{&RWY`Pe1-NP3@LK6;;BK6;;Bw|nf8xYW~EUp{)DT|RoB zT|RoBU7z>ZCGmXh^3nV3^3nV3^3hAX=(ep&XkU_^M-FI5IQzKT#TW9x^YMe^Bk6s9 z@X`DH;G>s*kp0OQJ$6Z4>gkJHAHB~mAHB~mAHB~mT$Q-$QR4a7<)io6<)io6<)fE& z$+(sD`NZv7j~^tSj~{&WK0o;AeSYxKOFziC#c0q~zY@>KE+4(mE+4(mE+4(mu7CH~ zCGmXh^3nV3^3nV3^3nV3y2E3a#PhMsNAI)CNAI)CNAI)iPLEv@&&Mtwz0WQmz0WQm zz0a<%c#xq*3%I>GL_?t)nuo^Mb_l@q>@v=La9X&ksI&>4yZIKnZ@hi~d}8 zNjx9BeDprMeDprMeDprMzUHw@;`!L+qxae6qxae6qnCEcxRvzz#O>ETevo)Re(=%z z{NSVa`N2o;^Mj;6glt3_O@F@YtZ&dUSDZ^cA3yl$eSYxK`~2Xemwu4#_q)QbV#*^G z&|fqQ7rieC{Iei1Nz#9dLE4s?Jk!(kmr9cUZi8WC)1PaON&5A}(9d$v|K~9D%?|o+ z4@1AyL4VIM^q+Fj-#ZLF>niQNZy5T=9Q^-l82aZN^wI2VuK)kwpx-bIe|}Oy>VN+* z^c4sUN|Jt~hSYDF$#eW%>Y#sM82UyB{lml1FLTfj4MTssgZ`0W=)dit|K2e4TOIV9 zhN1tNp{MCvm9UF;`fGzH6{_1c#}1%MfrI`PL!T1(I}HY?P2iv}zyN?!kKU+$i5gPdWI@`m*`YaqyS*W%F-x@R#&<{k9u=S-+c&&e+)X z%kKoQF*LAC^4}nE`11zCe@Ngmes%~P^eYVgPJv5(Z2#P1=#zq8`m<8t;J?Pu%leh| zW%IvtKly*%!T)eL$t0Wqy$=4;pOvN@$InIw|Ka>I@+;d)Z<1k@WI>U1!n1X6WY% zT+%NSIQS=UfktVi-l*}$pG_W{^#TX|@rHhbz_*(`Hakq7{lniz*eP%s&-^4X(@!z{ z`3YX&QvXT-l$d^&p-%~%$L64u{)hgJhCYddlu+zZmD4{qeTReo2ZFxR zdKnLrKev6R=l)Q}iHx5z5K?0L+YNud9s(}=D?C?*#PnY=^o;_S^veVed)FKKl>$G~ znmjh_H{fLgztZG^ zmkXTz27H3RmzzBBvjooV0yyh{!oG0+Kpsy47 z#R6{;_$2~gEbv-^-z@Oy0$(fe83O0)7#yA{@U4QrPTth*@D_pdI0gJ$ z1-?wsFA(^r1inz<>jchyI}U$W;O&Bbo4~IT_=^HxB=Efg?-2N*@6bEYzf<5zfp-af zqQJWao)S3s?Kpg;z^@hbJp%6)_;P{w34D#fGXnpH!21P0B=GA5{u6;;FYuiLUo7yy z34Dpbix1E{@Y@FkUMlb#1YRNVr2?-N_=g1EDDV#pJR|TM1-???%LM*;fqz8c>jnOA z0)JHC0|MVJ@Z|!3S>P)K9vrB5;Gd5Q{0M>HB=B(pUn%hO1fCUmoxndP@D_m&3VgA^ zZx;B?0$(NYwF19I;P(prR)KF7_-cVaC-9F8e2>6CA@I?KdIx^{q`=1t{8IuyUEsF~ zyi(ww7I?kD<@ItLbS^{Xc|EOFH$xr23^~qlVJ{jg{Y;~z&=yFzk8iqEu@{)EO zFW=-Z6d*!FAyM$M?^3%w*poXWS)w;Z46suiDh4qw8$f?zi zDfnpNgFKFuT$TVbJMWSHMX;8Ez(@16Fi*3=G)caXNhe002 zWJ}6}Jl1ORp^pcAJ|%KPKaW!JaL%Iu0y_^fcZlav&(?xUJNG%|yMzr2u!^kC77n~nibYimlO;fzNyHhP9rcXk$M;NAg zw`az8(4uV}be?r|B~d}?kNqhVDNPdc7ZnxLw&q(__7M4&F)@*+a$;G+ye;yDN4^@W zAjz9J-izg3EVnDmyXbHy^?aGcJH>oUp=ZpO*4;hkTiWU)^DQPi%6yB&ddvMOL|taS zK zxFy6p1g-VVDHqpFt@pAw{ef1cs&?AUSzglE2*c-yn6Jgjft{G1QC~ByW*8wDrTdu2 zmw@$?xmvf|W2iUVyWtSsr-t2nwexD`*4NCKO-rOgFBLE|=G4}DmDG({6HZCjH_WEh zS7)Gon`)a%3$fbZocfC@B0A^wm#^Ks&ChA)Zn9XrHlf0+#d;02TDCT;K0Un#C8pKP zsF_t&+c1OHyv4q13B2Pp4D3{!cdHnSJ9eTP`?U1;xQocv;w8#m;kUs{iz@XVbXSa* z+?X33cMoygT$@_vXXbYV<7pYw*74J3%sHbk)6~33*MRoPgm&YT*0zQPy;w3gntxb8 z3$(gDmeV!*No9vPJXO^ENE4rAS3C7n%bN95sjkm|IM&_y$zp*gIy`>~*fN}{@gdDH zd~&*ZoeLV8`ntw9o7S_RO?Et%rS9#b%M)t9?gr>~q#~!aurp0mjMlSO+h}sGWkP#{ ze|RGWkrjDT#(9dy?q}yA%HN* zSt>3o);s%|d&%P5DAN2qtb_5A&Th%iYee!m_xRbs&(=>D=NFwc{Jh*WaX#|A;^*X} z%H>6?$BU6~ye|fq`0;po*%bX;EUIpGf}#^g`FQzgkhoj5|JlkT@ZHbcwAb9M{>ZWM zW9IRd5KK~GVCJ@Fh*yTWc*fjT55Xf38@{}`{T9*}hdG@ort&sV9N95NA0MkX!30tg zb}~Q44?Ef|pPxxN)RgCqEx(Y;yX5aR^2>yL+#0v#Px8obH04H;U*?fNZmMP=<>MBr zEx(8S;;O%%JmoKYI|L&vQ^4A&xBh~*kRNf_jo5TJhhy1l3`RntPf4fIM zFDfbHkE$xi{*%ZrF8>eZDIZ@%cG+K6tr_5gK|5A^9r4-SR zB)`@pf4f8eaSr+W=)n<}{rtS@Nb>(eQ2P1zZ z`+q~_UG^_?*nhG^{vn?DtIJdV0iO65zY>NB;Ue<-gY>e}hAQ zxkG-ZC;o@>l;7rw|D6u`XF25my~JJr+wzpZm&&{9f9y08MoGs1B--bA;<)&{=lW-d zkh0*E?*1(@xgJncW8%De1ubl5-HAwT7juO3V% z`jO&)sz?56hkU$W!v3UUD*c7*blGpOqix7@{Qo)?cG*AVkdOCOZ232N;x9>YjWm+| z|K^FmJr4PJ|HYPno+tjwjC`h7%FvG;f9H7OFPYLM*w2W+Du?{5JlDUKdD=hMbNyRk zKkbmelFr{Q`$t4*8cjj{lXO z^Zz&)ONrwQ@jspRnIGeqd(OXW^Ys5L&-u5~$d~ay(;@!`kNov{%D>JdzsDi}QiuH8 zNRF%ihw_xan&@2dzt$mtwnP4VJmcSOdCEV@GydJ?kUz&E|8AO;a@oJb$me*WqAJ<( z_cbc-vOh2{`Ei^f{w^mD%#ZQAX#UqFe@~wF-$~_N^2ZwaGXCZ{VLoQ zk)LwN$NP1*{diZ@Wq)yk4p16N{$!$Y*}vE!AMfkg@`tEGUGg!njx>_|2dKPD{yK+z zy#Hs*|0D@;$>;BrFuhWSe(d}SN^BI3aO7{AXm{#%`={p&sBzpW1Y zJ00?Od*rXpQ~qx}^7lIAcRS?c{dHITt$|2Nvx|E)CgInEG&{SNt4>860o|2y)u{{kxS^8Z?g z{ntC>_ju&*$y5F!kNj;8`AZz~2MKf8&qk4ZW65s+AEl!%`_*8Zj>-P_2HNNPHQ04_E!KcF6yVL;h{WZuyOQ z%3n?8UGj$<^1tek|2~C|(zuO`I z63_hi`aI=ddD)yU^KL;c@F9GD;DU+`Ri zY|GRBHJJXX5^3L|7)ncOa4xW{f{{0-|UfJ znWy}lJo3lR)*h4bzsVv0Bv1cam#6&WJ^gRWA%C+&{@o>R|2O6-|7%p<<^RPF`CAVI(jmXu z)Bg|UDgSCu|G&&3|7nN(qv!&_W&buKf28<3oXWfGUvK2g`1`3te)1qKKS9T2;_pXR zNRaZjKF3jcm;9{``=1fzS+8F6{PP4$PVs>n;CTQ(3|}Gf_8w9Qd0T(Ja34wkZ&7)d z{(Bwz|D5Eo{j7hDxqi0gSC|vmNb)N^*U#hTz{>di>2tJi%RkB^zb8-mhkNADb;y6- zA^-Y=-Tq&fr~FS}*0^OS!rm3P&D${~NJL;i=! zAujntdCFfx`r@rUo-y6oTX zkpC+2v*Yh;9{Fu~%KwT-e&OXx{aF0%amfFJr~cRGDgRYZ{Z}~T|K1^gvZwuR&r|+H zPy1_g$p525{`nsN7n_0eNcCUg@&6i!{5Kr(f8nt|m8bmYJoayO$lvRb|1MAcFUwOt zzSHcA|Gf_Re{sk^%wzwCJmnX9>>oFmgi(^?=fBZDsjJdhv%S<~|DHVM*Lv)q>yZB@ z$+YEvfSl**f6I!sf@_VQyfHBE26L#q%l|8l{2@b$>n8}Z<$sFC$u9ZZjG($ulFr!j zZ>91s`KfuDzR{G2e5^-i%RkH`KS|dGNF&KF^vGZ5kU!cX|5r3m=CZ#hPx;SNd6)f# zAJFW%t-!2u5Wvpw>MjQl;OJa26O&+y1^GxC!#juQNjHIHone~*+0i9P;aPxBH; zBl-V9D(|v?5b;w`g@qb;O@^PQTWq-;n z`XTMd`lPo17kJ`-t&zXg_>VVs{WtmI-^kx%3Znjt9rEAn@qf<|y5L$CY__)iQ#}4( zbCoVIWXeH)i9`PD9{Y=r)CEVX|2-c2=iyZB=kN?Y#(goL=^1QL- zf8XQ(bw>V>DTw;VTGO`u$9me|HY0ze`ajas{@NO~V6##7<69H9{HLj%5u8*1$)k1o z3cU$`xjX|uqVlf#-`c1t$_ydwKfxhCNe*?%Z#44ja8M-M|Hl#FlE1f67vl1epLEE7 zpD+H#>hj}+Y-DZw-{XnD)O=k~+W&5c{Hs0kcNqC~mVDd(c^>(Tjr>Ma9`<9cGS=U) z5AN~AUm4vOMp{i}WU}Rd%M*Xwjr<*^JmkN}A^)!)`-hIzQWs0%l(*%-;jw>1i!Qj@ zl!yFr4*7qe;2}6C{wt5u1xJ$qDwTJ|U#c}%{(Bwr&-e5{8;tys;t%T#x#Vv*^2>z% zr#s}IX|Dg6&X5N?jC?$EBNKdu#M^qR5YFo(`uE1;g$pwJ&{({QRbtWY7H0Bz*$8 zw<*)!-PPRP-<46{ZEfxC?d}c4Z?dJexx1ykYhkjvwKvngpuM>%)2az@sCP+EX2gT^ zDb~)`OmBO0a#8D&U_n!RM}Kc?vU`4}sl5w@duhFz?#>{tPI7*0NB8x~^0Km^v#Dc2 zcW-BFOS1jCpsT;5BiYouuwN~E(bL`2-M6T{tEWGcq^~?D`}%u&x_dLNEdh=s+sU-9 zzV^OMYgZ=O(?7q%=%5aEw)gdscui?`d_=@}{xz-58BN^VbX{vN`GPcp(5B|*)*i_0 zYt1NcbT&07n>rSD_a=?8;gRm^7g$I7yF#7yk@iemXCTq$_MW!Z-WWvgZ0l}Gl2?+= zy{%M-s5ESog>^yK`eKGMItE7?1-{Ot0Ivzp6K zOEz~j5hpUPkD?-3K4E;>_=@DXwoIm{@BL?>!FYIXT>+bJuZXHhxker$6 z?(S%AquM;PqvN{HGkSWv;j3ix7@dAYoP7i{BdeolxEVJ?+h82gAu)cE z-VNv689&wFDYIpKirJrQ;pWmKXtVGSn|&VBFrUvDe5FOd-t4cja6AWuv`%kA{eNio zH(2%{msh*{`Z^lugrZq8CHUrimmh*P2NdY;H3}GR;TQVV_r-|--xnvL z@vnWq9p7^OHu)>&C*!}prhz_b_IYF6%)6?7fuT*xR4I2v9_?4AnY1%pdG0T`3=KVF z>0;Wmd4gc2=?qea8n>2VXQA02YqqD;7V>Q$(6~e;*?$7C<)fc)$>(Q5i_Jh6@}ZI~ z|9gZ%{sj7yX$L?`e=u9Ur)iOA7(->`%K(b>v@vL;YYEuNyhQP!*JYH0_6r)zxt3UL z%2!CHlxO=HUPBp|s2wK$xSrs@gGG79Hxg!COt~oWyGYv&1RD{fET7BMwFF-rs7r*A zuO%i-I$KfZe=X6|9O+f5vX#LlZ*pTHq{RH74Cjni8nt=eEGAGKQEpAQ)2zH?;&(W(tXU80?MA1T;L8 z#iX)R3jv%^OGUHKE1K*h>f&d`_cL1RCgPrbK^-a|QhIC>3P65Uy>`G!>FgU&;FxrF zpYg?*+QG)+=__8$Os>uTc6UlEp|7)2tJGBGLpbYd?$174LHUR1@+K&Ms(eU+yQk_h z*)3`EZgz1oEIp$(`-Uk(&b@6@{|O|b{}@n^>(vqDw^XW@UjA%$yY}Ig@S@Z{c#G-} zXVSN^{=nY2;VrK}6TD{(yg9mWTsr%+RQ9i_!3&LlDKt{4!5a#d@Y-x&;RB>eu={MS zOuQcd&927-3JOI%j*6<`YEcE;cqW?IIbF%Wk)m>6|KY~wEgYs7QoWnju#2P_pTyPp z1mliiDjzbXBL!5;EgpDtRNo=W?73dXcf=XTtScXyXIQ>9{lWQfZ#;qh+Z0c4jr|wC zz4n9s+ho7$kI_eczy$Ox>I{vnP3UURP7R)$8rV`;YdUFyPEHLbwx~0xXls8mg;WRK ze?iyG1b{UIpdADrv9e9z4Zt7Z&UrvM&EL{8C@Ne8k}2*w!O(! zNq^-^@^%Sy&I;qEj2j0G<82sa@~lDuGHkMH-6Y<67E+iTnpSmtalC2kBj!4I4#D$yFcI} z#7#iK^Z^i--%r2GNROqHTt&vmi@ZR@;kbGOETBOPkH2b+$>-M&_E7b|k!hj2Pi6I4 zh&qCUqZ3ei@WV7H#1)NJD4o4J^%e$1HEZn&i1-jLjNem@0VhIl(tjEoa=~=c7XjT( z-OTPAT#gD`iX%c?^dA^OMcr%Zl62vcy(ool@KnCSDt}gAwfu~<>VFdMRHW%G7p34- ziuLbetCH&Ps^-uoR%+noHW+sN^z4sovzyb|C(_xUkg-+SHwX3=^plA%_M3~P_|V`J zBWOzwZM&lC%BrjMHD=YooBJ~6N{#w$QgwMZaj4FoLq|rXvgeg%Dk)b`w0w{>tXc6! z(Td|(LTd25(o}XDt||K$?ZSLu`77a=CY4=et{(=qYa-&J<#@&_LI-CSZYdxnNKr18 ztpdZMF`FnxkfZgi6;BBmJsu9wYgGKk&}HsY+tFt zrKS3^X?K~U*h4tMDqM#g-6D(HCM;9O%AehJ)tmeFrL#Xut;&$Tbwowi(dyWWp${Lk zVa|-|nzP7~qVLp}9x?E{i^`um=#ko@>X)>{!P?To)Zn%BmoA3io|>NBQ&ax^s>|mf zpft_Eqe*ycI{LH0(@Rr>`bXKHY6cY8m#L|YN?l1= zDl}L)@MnsTyC}Qj`$a2uWBW?ciWO|Lxzoxs053AmEq*Z-*nOJjAM^G@+ilX=WP!TQ zA1h+n#p1th7Ib?w*!=*-3i+w9cCe`o^A*(Bw~^y&)E(mf6m^Q!_KKE2PPAMD1A7aK zR^W0`OF{Ugvb%R*QW0v)Uy4^!vVEcjYJqNqaC2HCtA;R8~8k|}x@j6hSGS8;o-g!Yc&GuAoq|^Ld z&Wx65uOE4NB@EtDU5aTnl_}#)3K=@0ZfTN_iM@=D8(gnC+gq_eu(Y(8LU4fc zsq7D_Yb;uh-V!)M6N`Y+C=v6HgXETu(z;akwTCbbUjBXM9`#ecFO_|@{3(@BWjEv8 za8zp5($YGC6fKWBhipeFU6j10j#gzilSApmS)2X6CP#1eex=VQ>eCd4ur6273+cft zONmlW1ECsM2GOUdb^sySnTt_^h5Qp!@R)CgwdC)m%*>SlFV6eoTZ0WYYNLn`~2 zl9%1AHmhp(9klb2y(gvyhW4eKpGcim3voY4{pqRHz$5!oCq0>3@kr6i_Yp^}dAujP zo#lp?P}jh3JnvakzOVe1+Cg$f?O;o3;jWT|n@xtyXY zrz6^AQ~RmrycIfPc?3myYA{neR%r>Um&l>1W@?rSP8B=`vTAM&px8mnrX4s270EZtYJ3YFYaiq>z|+QTF`9~U}bvsWRH532?Py2{e5l27b30= zj)G0icpORy(CdvhENqn^)LIC&GMzmgf;d$7x~7iymiEk&++z)RifUHtwdoe?81eHS zQ!Z#-Ob;>Pv7A1uq&7A@Y#mjP2eme+hl65{o!y|GVOnAzlIyfKENJhL2F6#Gg%8Rb zTDzL3l1-LatyFL8!l{{F$pJ13kEzP!)xyicu7Q^RrsvS;i6*UbLtp#CuBHqq*Lj-cnWEM^n=VwQ|=$}$nM6pCn#f%e;vnd{lCEaQ&XbD;CH8? zpG|r2nla)R{$n)yL!d zG!o53L;oSfn`-9h7pIIFH)Tv&)tHLvF>4D34!rq*Roq3+8&g5uqB>4g==xMgxwatj ztAa7>3aZAeFPJiB1N{vZq^WFBPi)s18SOq9bukfNaf_%+j4l{6cgmQ?^cb2eDki@C zJ-5Rsj|6PAdC*H@V;$J(4y@8(M=EZbU%f>)k&d+)Y%}O|o#*!J_r?2lQaM;_%GJUj zxxSu8K9i0}95~ADi6PVHLA)zf(su$}&)%L&F;o!Lghh@vx%CHW{Ih1C?bqJ{sR;&+ zJU)k>O7#dnUp4r9Ou1{wKH&UJ+HnS-P^fYAF-Vj2Cb-YgUuO95v$b{fAQkw0%g~KA z+e64M;BT6J*5@FjKjvhS@XQ&~0fx^Lmi~S8>=yX!vhc?Y&VD&bvk9K0eh2i&TKv&} z0e{TUu|9VhdvUpngm#JaAO$7pf2nuFG0B04YW!%l4@%}WzX0t8^zSfui9Q@0PIiq7 zpHMdA3p(~;(tlKNilGXE`@$TaA2gk(z>wXaXR9?mIopvE!66P5{JAB@4<~}6IAHb? zfqBW>I-1~@pL1}I*7$)$z_n=O$HW1%mk2moxAJotqkywZbLdGM(@_$$<(3 z=E9dy|Kh^2p0^ACf`|S@>Q`O#w^0*y;ct-QF8pU6ywhXXLDbY;d?tA8#aPHi{~PMx zT==yfdk^&3b(07Gv`6k=JaV7**n71{AFO}p(*HUS{#y_KA9(1ed+@V7_)k4{eZ>=3 zuY34B;?Z-aCr;*i_}}WmYd!qW@!(h|%jM@&J^FvlLyvoOEmL2j^z;K651$7}{}OQ?RM)9gx4)wHQW8Y{C!cXAQNLFbR1$?w z#8#yrd-QqQ(@*})6A$;3pG$%&!!-ytb57|K_46!uqr#)}0^tzDG}on#yeC!l5r+6zE=4m8doqrp!{$Wlj}JV+Pgye z|9v4o!{m-qdPd^}b*)Orj!<%WbRPuI82Trb{_Nc#P;*Rl>^UVj8ds=mTf%{qh;a+- zM4GJpMvcRyezV1T_a#9zu4DYy%Ksd#WaNsRX@zn#Xgo>!s0 z*-HPDbMSjrJVfKziw(tAazTk0cd0o5I)-=DT>ZwIB-e%Goi`VLpQjz&;pu!|CopVG!K0-`Nzd)lgF;P9{eS$Ul*U(JodgsK6TMQ;Nip9Z4_R?0{Y{3I?tv& z67Y8VW4sC=CE)Yvk8!R~n-5>V0$(KP-%EKU;7#<$eBKX`5^%_3d41s@M;8O*Dp1>~=I7XZ7=PL!?DR8tYBs)G~3z8k5eHvCcomxZwA2K-j z$oTw(!2hSj=NE)s|2M^_?>s(E*em-tc^-eas7Kk~Vw{X*#}AJm?D*kv3-H6}kKNm=Vt}pLV1?E&V&Ce_cM4bjP;lCIZoiddX(cpd44?6 z_`$BP_XzwT!N1Jl@V~4tKF`|qCFAFlg3mv5zLxsz@AG+3y`Ea5+v$3S8>L<1t&G@rE8a#vZH>-`}$9MYb=g&yhkd#@@__udKmG z>cjkPeP9a`@FVDt`J@3-vh}%2!#Vv%i@|OFxMo2DelYzpf37c^zpNLj|0*z{Wb^0o zzpeilHF=Ky_X}L|A2PVje~ZASf1VV4Wc<7+a9Lj`30z($o*{7fkp08`@OueEOft^( z1-~s6xE!BLySRPXc5yudm+cWek?eYr*I&}E8#Q@OJa9eQa%DXhQCYU@GlGxw=Qji{ zs(0+;7aj$7#8LVqk*_Wx3UzD~6D=YAe|q2QCEJW{@XTcXJo{pTpp`g~2`l>(Rg zV+_Fb&j|Y41pbP^p)=Ft8^K7>Q})~Vb|n(nDTr92Y!l=jY5Xm0=CAn*ey&wRK&+V=8zz~(<7_(*?# zOyH6~pLcBjcNu!%(w`3tT-x=R;4kGqA#f>I#=nfKqeXq;+{b=6Mc|(n_(XwAea_zuBG>hoKV zKCcQ~+Phcqk@k*(;*{*T;`V~W(q62Sh=h&g{~m+eadn=+rT$X|A7t4N7YkhSuNQoz z{_lY@lpq)98s>w!2qYUvY$E|bkN%i`4nRu4QI>IB`yc^dOMi@il=4WxrCqBOs{JGF z;&ulNWtb0Q9toJV>mG$_T(-xL3A~x|%txMoagD|}#$ZU`Ka2ht|0Y06z|j{m{t!S) zz%hnr{D%N30ms;k@#g?i0)7SkF}?>NCEys7Fg{kq;gtgC^BVjk{dTsXpC;%V1upq4 z6gbZHEcep_m-U6`Nsw&0+)jbNgZ`M$w*((qUyll0)|WhgNx3h255iFXbK# z1u4PLQZBbI;A#3}{qeRI5^$-{OoL;CKc>G-;8LGPgM*LM=Q@E)eegOC66n#^nE%s) zKeCMfx1g8x{-(esAKZ6C0{rf6ON>=%qeQ0!6lF5~K(0+({{75t^#2LvwVZWer`-0cFFa(^%I z50L-Z&wm#DrQCxcj1mrCM1M?wxWI8O%=j?^pDpn50D{$P$M*@DF%ITjjgwzf<5R3w)cvO9g(YX?Hk$iomM{&SMfBUMBEU1^otr zj}!Qd0zXaQNfB4?75H3%zfa)&txxEAy1>^7`ZEN+Rp30=hr>Grex{%=H1P)hd~J@y z6$0luJ>Z`gIM0Cq|D(Xq0$>u>^Fjjui7Kamju-eOftLyVY=Kt`{2YPL6?lcfI|M#i z;CBlA{Q{St9*({5s9z)v-^?6e+t9F}zpJ^SVf=7pHJ8=Vd!jY-8m89IZRl#fzF|Rc zcV|NnzGFYWx3!~5eK9$gLpgoNSiSn#K;J^obT@Z*)O0oXUNT%M^+KtyRMqSm2P=4nAf~=BJ`72H&Gfq3s`?sD*hfoOGpZ#~7guwAO3=P9Q6l<5YEgQoP(hXG(2)Y886F z^o)yUHiRW+Q*Se4n%a*-%JeTF^3`zsm3d!aT2#KXgm}wc_9c-*2*VhWj}yBbuiDe8 zsonY-g4Y}!4&f%6>6adcr2625lWXkT6PnCty0S%m-NVZ%B9SW62oVbux%G^l zk<_O(oZNHC#CYMN_O7N5aR%vV>dQ2AHuWx27(y=Gp>KXPWV-eKcv`2Zb^Np$bI$0? zG&L^@X3`L7%`_8WPIxV? z^ZOU-ei~yt^^K42=1glwuPq`AVuTI-dzxCX-jqB9wdQwpH!q^^fqbwv5YlNp-`}c8 z&3I}~PYV{P5{?ypsQ8?S4&!i55qKC<^jb^vmvl9CYPM?dk0ULu3!3^nXxqN9m0Yd} zrp}sIS3k2spUW5Yw#HP0`)y3`Bc9blDDlyrrVdAp@Q0!YA_m#2Fs3DRg9YUUo1D`wMbX4K58s%=n%N{hW|xEeL1bP6+fb1>s9@!1bHUf$(Sq;cq^tc#ll-#q0x_a* znb6*VT8R&9pe%hA=j@5ZFSfXi943LIya@is^Ouald$YNz2a~dt{z}JXGSfjJg!{n2 z%;kBASBANG#!P2~;DUpOFP{l1b*9+bZ=&)xPmqi=lNpVM9&?kh6Zf`}c+Tw{kNhD; z6}`V>c5~kGnBbAW(#T(I3PL`nT5S0*dgSx`-90SWY;F5r@W|&$n;}yU@(-jxTmC|F zo~!=U#1GMr4*A!ULQeaQQP5i^TYfK@<)olpHq34{o9Rv8GlDQhBxYs zYJW#NAgcKzSx>Hq4?2?ft+$YjUgYES<+&P*QfF@+I- zxIbdc{|aF)|6@ISq>=o;mS|l5A8RJ58|gR_gQbY_Zayj*}s^|yX5b2*ng5k{&bK09;4_;_NP4Z>&_)%l%)M9)4py0 zrJnw0k0HEIafyEH_^b8wKUQ?bn09f$&z65X4GLWH*JH3kX|~>kzqb5OQ+b#C z;tO?=)utrmXH|V|Gcg$B)d6)d{Q+0`zW*iOq7?RlX(;oRr4Av;|_a^jSu6*3zb;)nM zNSEN}Z6F_~WLrKiid^=u#$b(-sRq46zqbER@WjvBJj>%b6_@<=d6xf+NB&Tr<^S6w zf14?PWN5k0*!G|4@!y_2<==d;+kW*@4~g77g8ZAPysQ5Aq;sq#Izs1r*%ah zIwO6Qjw4^D_M)Ge=Aj#V{L1Bcdo=a)oR3Ne!K?D29dW>>J%jpb!gAJ{-DAr0IF?zk z{k%Vp%Denme5s~rr1(aH|5EhF<;Mb~G@JZqxk%wVPF9;Bg^Nx~&>KS{yZo7x&Mu#r zjM7MJ&7OU>S!yv%9;=0Hp6!|k_7A<;mL5nMvT~E+Y>LYJ{`J)9v@9EkDah>MH z3$>uo8v04oXXcAl0a~-;{jh&5A%|)fE(cs_+)baR-w4YTQy zuq{s5MZ4kG^@TWCs*3ZXFtijyZFUE(?x0D`5c-uGN8~=QAd2&j(u&$_OKBM`U_mQ3q)?gB(j+T}(%I*VmOlpK!B3TL zBU{Oj(K4My%d<+i1Jq(b&Ed*BkkE}nwA4bKTGoNxk0Wzbnd`_HT8Bib1ay%Sf;A{s zr9Pkf$e+)nxGcH}w6%lZE!{z)Q?#fE7Ih#BEUU8W%F-i9Yph*>1tZLADqwXW6{6K9 zXfX&{)FlCy;_)FKU6>S2G0*Y?=0qC%Zg|6$=s+$#MEitac+AAq6k5NgS zt1iE$63Z=&oxP8Ihd;9>%)p~%)I(Jj-L_eE47w`g4fYcpJG>Z4Cjnurz#=5ilEcVZ zY9S26*YsRmK{d-?$&{o9m#e_0d>O z2HASa8|o%V;=QFfqP%DvnB7S$v7nKOl~`ysl-Zsopl}{mX0v%c5D~2o^CDuHTvxd3 z7~(+Y^1h1dU84!qhyUVPiRoSzKm~RGgFY{mpbJ0fDg1a&;h1{6dP#iF>KQ%rJ7cS7 z(0-5g5FJ4ZNlmY!!O#EHwG>k19Ucx{M9tIj9qZ~bvF~{&&TxLlnu@lWKiULWW8mZZ zCib>O?3>uVqsDAcOc}EyanYEaiRv+X=x=YLYRt0H=`q_9qyCTkgW226zzKq^R75to zzLk9fMRS4p#xmw>k#HISexBY{_mPlYMSsBGYw!}Yon>$?Z!QJY(f#=*^Z6vV*zlB_ zKhcg0_kC0DF|x}=|0fUrUXR@SJ#w$~@WDHbF1aUp_z=01{u&RT&w22#dHBrq&_CtD zpZDPSHn+>JsUCW~)8wLm&ZFlI9{R6&@JBp+Fy1Q(qt&!G!md(y)IL<3CJb@v(i86v zxNv??0nPYC`r~&uFt|mcV(O3aX$sZXJBL!9@n(U)Tj19T{9u7&9F7FJxJ+a|UjRr6 z_{sFg_#rthI9B+ zXQGnL{|JFg{>K^I=KpSiOa1vBLz{ov!=LBwZ2p&f_%{hY(mx**IHuLvZ#N5E*5eli zF6;3wgWLN2m!PN1`H;UF{?NW%@BFT!&F6=Lzx3Nr1%GMRZv-yu1!Gktn?J8x16=Zd zQ}B`e4+kM7=#Tctej96WoBt_-Ui#q-fuqebpX(`)Wb^r`hLv2|PVW{t#skb}i@X%l(X@2QK~dWx+@KN4~o%{qvHbmvVn6_)B~D3S7z^g&m`dlsi`7 zQZCkfVR|VS&*~uA_D&Kwvh4p01s^GQj=-hdB$!hI{{vJ`|6tk(2{_%ZjgorKRz2T| z*K+V0)hv1&sbT(-Olu$ZqT}i@TtLppp~EXL=L3z=QP*>fe2L~Os;=Ll$n@%*cd(*| zChMk5udA9xul>~X+gQ2pOf`3RcG7Dt@y8A630w`#oJy}_HJDc=fSOlk_{rYZ-d?;6 zGs1Jlq@?SC;K-5Yd0l>_7mw0*_0jXY$~CdabB(>$6Q?ml)iL?ttMQYL$RMYa7XD4al#DeL!l8t94RrnncyL!0VFqw(d=r#Gu= zr_EF^29-rI_)p}HrGPd~HpZpW+&jTEqfF*>5<(a^0+Ve82P^U8NT%6^M+QW-X(vvv0Gi=s}lOhmfu6LOa2f#8%q2P z8suZVWXr#b>rv9Nf zAiF%>JDQk#zewLp(zyOTd!oL>G^wJjLLbfl-cb(*Y9>{xZ6%HM?0ZMkvyV^DZcb-^ zoUNz(L)q7>vTyDLacaxxQoW@m=2ZrB$uHtac2iZ+f6>C|TNEMS(PU>T`x{A5v%lfhcu^pcQy@n8TNbwRkI-Qdt2*PZ*7q>kUMytXqLeZ7 z&DqyBUQ6V0i?H~*F*5rCO$+N=IHbc0(CvCOED)b&zL;@ZUmNY_p`hTH~6r1 z4{A2!x=dGA9@%k1YSnp_sYmuDnLQ#!5vJ*03eiqh>rwwE zyxp*P;*@1ePu_Qa|A(=C^ZfokZ2x|Krfy*9&E4(kEvnloAKKmY0G#^Zdx+oegCFRi z&4Z^i@3`sa28VKL_W8(YUGXG;BktKMr8dwM^uFB(&~23I*$Xh|esxvDRh#IjPU7Cz zz{_L9pj)x8X!&P}VtRH9Ze(SDid$B63yoH|H;ca`YVRNl1R^a&eLAf>t|F3_%2q*H zPHS@iVtRJ3b|Ebd&bqy}5%Vp^v#%5_U#6I-1;7hyv%jp({@D~sR6RtkLfxWWF{p{u z5t6X`!ivVo?4G#A-%-Y-Ptg|sjrpZ7MWUKJ9C+`nhWU|oIG;p@9ld5f$v^G1r=`t zBTB!;kK~0lnh&^{mmqxxi<3r+k7_;cL>WpcgqJMK>zKyxNt{{Wx>G0FA@5vx+Dy} zrc3VY9{h_Q{HGoq-%E7y$6TljZ}ITKJ(LnPIwk^2s!h;#fc{*3@EtZ6exwJ-3E4&e zkO#;0zKb3M6Bqs?5B<9dM;c9ka!wERg#=vAymgBAo&LgxSZ2_r@-aho%}v0{K|ZIj@_1v zYXv0Wkiqol3;uGB5$z5Mv~sRe&Us3?&4NE5uDiIzURman4};QvfLem-ThKLUZ~5yTIi= zh`S69KGHw;3tYzGkint5)L-5slm3|`_{jDSCao2Pu$}C zf&`h8|B0Su`5@T~UZybGf#7kp__3C2^`0kbY))mj&;xJ9jmJz#5Ygb=;cUSmb zqxdAPA#BLBchaW|nmT*b1p~gda9wLJ$_4Z_2KwX!e@B5X3Z~#|3pum9%vOKZp_`0W ztm%_uO_~1Q){t#S_reC6S?*oZkXh2>oXl09RZ!Ei;E*$KD`wSmE?30Fc+RoVCD4Gr zI}o4R4X>B%>0BWW9PCReA<=m_n#Ollr9Jg)BJH2s;NBtHjh)KS_$Zx=fECF!pAgAV z4j8u|K2XUSYm4?J(^FJ4S^CCJBl$(DZ-VJ`V~MsL1uATpI~`!QB^*}n%T3rbss zeDq(o{9>}xC4a498tbd5yeMmr9WG#+-2b zL4%c9bbmGFN1E%#`HXo=7I=Tsm2BE_0_cCvT=!ZoZxvwsnK#DOF8^&a{%bUZ@E@*$ zxIFuHGnF@?YAE$)EjLILM^FRf3cEbbb)T(gvE}@>%*W@tC!8}u1N-rwM58!yRx0)M zdlGdI(^>SGoj@=zdEf>pId7AhN>sRkR3ThD<5DY3E!KXgwclm!cU${C*8a8DKJ{%e zd2QDIB5S|h+V8dYud(*~to>GNe}T2X(Ap0jVKRC;E~%&ElKRGKdzboDX_8K4$@Z3{ z`5+Van!CFeB+cQ#29o$PX$W@GM*-dk zG29OTw$mL1xaI;U6J8+Z>XK-$CcPDNb?7G0&)I1y0WN$t;c|{j*+>|7H|ST9=dnEI zIgrp_;uzz&enkR?Zj*8L5zOT7oU-A4V#eA3<8Y7?zu3Y*VfI&A_*c#T8VkS2?60%%@0*SI&f4~&Nre4vsu))wtYrs=dZTzPIE zT*hwWDLP>D1nn9F;y4n9+K7Wf>`)r3H|qQ7kROW?+V3&Pla|4@{8Nd}C4Ywj@sJ$F}9=lO|12NArJGQ`8&`2z0_b%~H34e0 zqenO1*mx@+=cgD7udwdvLsV+TzRX2cm(8xjjr+kH3ymWA3ZT2&V7m*fHsPmyU-=tq z4?C2=zb@imEcl;8@uC$TyrF_K%CyPh5j=(R#>V&4evTx~f3|u@_I&JU7AuB~FH%J{ zd+0%qE2K6w^t!z2vZ{In1U;b;zFn&V;zGfrX!%{Vhu6ciW9d19@_mYVI(+RGkC@{L zhU^x4N+x={^p>I3D(Q?E~YSm%%8<>X{vRfWHo%S{oKYEB_ha#mo zJ2X8&?@IRd@cA2aqUbBE>dZT1Ol;ScMGFpjI+4ff-F87F1Le zFoZ(owIn>OTET>x%ZR1jc5An`wcGA)ciY{%kE*4uO+X%Mt0?tJR}o*t)JJVA)UM?J z{ho7vcg~!-mxtQj?Em-4mQ=)PSoDAjWl{Ctv5}D3{ zsU=^7Su)zjkKJzeZ<&u3Nj%`LC1-y^BX{_q*c*e z!+euJxA~*Omn(QhfD8wxFMY!1P<3)UbBJUmOt(W_s#HPKZCn_IX?)nLA%hjw$Sqc- z$&eINI1(KU-s_lSly2Kn$>rSxGhSz%S+9&4O5Sri@Z9r3i`d)*$qHci ztv#XRCDL_iWA@YBz|qQ40q@@6$oo`MS1*o1gpD%KT?@ zx!>QFp`vhF8iVkFUBjodQ!DH$Cf&9Jdlp=f-ccMw__v}|POY)st@h>l(Eb zp}+xr5xc`lGx%dF?7oVy&j}$~l~93NG+)nLQ^)GeNGC^~GivNOyz!RKU$G25M^)p; zC&pBdop5%H9cA-l%a+Dgj7f}3)QoOQ439M}o`)VT)8!LOj2clrq9#_gu(fr0%ef;* z&eJkRd}i6Q&n#|kS+;UTQ!_s(N473owzz5GyhTe#E?&H9$vHTt=d;b|jB1)NdhGlO z6XuU^S}>|QF>X}NgwfTb#w13~A75QFZcJkS*irLGEg0Y2JRC`^Xo$JGeKoY`*{Elr4ZQnfnbdznj?C)K)xC^)oRJdx?Q=Ms*RHM7@=m_$G0< zwe+@9JA=CYgmi)_}5`KgIt~VczM4F+q$U5=u!-nDPQjMQso;hYf;yHulPv}RrE}FL| z8+?JmRT~rcCm8%+4bE>oQklV#497B$k-kdQ$WG3`+?5pUa;IHNtZ)i1uO(`RjE(5~65q=CZY6%~ zU0hPh#l`9_&e|iNl1MO?A(uwNltDP>mj>Y-A^5LCHxY<0Dm)iXRaSxj z3(|eCWq(!o0Y9K{$$h5Y1Aa2XW6ukfe11FJ?7nPO*8`iP^a__gqZe@GE`{gpEOpG6 zm0rn}xqj>6N`B7%Qcv-FZm^ZUqUjoipMd|GRDFrtAK({c=lvo0>ml}E9D-jQf(ft2<1$&aH&ygH@b=5({N8B#fA+xeek7bG`cTQ#h3zAHrjuMAH4cDZ}f!fpA_8r+rtl7$b#y~wxozb&8j zFo}BY@-@)HZN2hdb@lSSOd@W_>x>XNGDhjj851Js0!xk^e!lNWZuqaX@bPdLJ6vPQ zr*6TQS^ReXx68H7KbA^C)O#v^BIja)Ao6ldMex}KLFBjd+cJe}ewH=i|D3^HerY!o zA8GObo#CfmJDfiNkp$*f7)^mgvdc-UJ>Qn^$a`8NUq*fL-6;LPomHx z;Xl@VvdRjNozHJHxNFaL3uo(8^xkI4vGb?B-oY+kKeG7kbom&K26FYDrD0{yVYnB) zbq06&KW*{HEdI}g@N-0q#Po{cC-T3FdlK1iA70Zw)Jc+ipWFd)n!EG<#tk51FEu^9e}|kDZS8UPE>|)?56x z-WdjW!+(W^+jG&J+nh)={%@C-o^@g#nNUrrF@ z%84md$Mpnr&x^dL7~H`Y-eK;EOIwuC9TqNqu!MG6_=)D8mlrKu+KPl?CcP;CqlSkU ze&>>iSE@Vx?=A}$ThT@G8~IPxtm^+$7QfW7boi}>54HG}LOfHB8hsHrYY{?7&$&Jw zS`PuJBL3@^+kM) z^LyN-r(zmOvBI~=RC7MUb?(IYjbc-+{b1cY;?((9hx0Gri6WvxZp?KVuC7cv9W*bU zohHD1M>C#mW0K?@Fb`mm{<+4V^gC-`g?)Il;Xg=!r+JC3F&?R(?`T&)+nYi9<-Npj zV4K|dN8ve0e~o!rN<68b--WLJ+K~8nn)qL8E62U7|Gbd+HyZtR{23Ql|3Biz7!>~) zUzngX^~L}1>i;|N1;u}-(LdMtWc=B_b@lHG(cftFt8r2zgBMr-Lm~RBOrzvZBZvC= zo#*Q3y6&L(?}c4SYOGb?s{gKjj#&oA-z2Hzmz`-gR8$C{)5u5*4S^Z@yJKo(uno# z%Dp|QpWjS2J!Kf*vO(OFmn2v2H^KXAh35V}XcGS0IY`}!Ke=`p{|;MZ5eEeVNc@S@ z%{u+1mm`M%Qs%tG4eoYmR(PU-5CgFLa5s%IJIY-5UUefEOnh5;Q@Ym*zM7IjQb zDt=6~s;P_Kv#dDN^-^^v`m0Raj?zqaME&r0>x*8>On7b8)j?v}&mTN_jy*|MD6hq% zKetV7jHYKF&rX`zTbMhCdB64MFdeT;@wEM^Xyua)MQ>pLw7Q~~lEYt1dHZ{|LzIv; z*DSqpQg8ZGy}gmhiZMY!WwS%!GIM+(06$1Q^JT7@*`W{in2zaaoCk|t2kRnU36Lwz zL_h2wh`|2j77>Zr>uN6hDfQm<6)L>v$2sx+q)he#r8DDwqGupyjq7=i*8Fkb0GYPl zvsMRght>o&-CR+T*?41-3Bi3afIndrlzaq$XAiZ03(59)ddK7#of+;^v29)rT&wWV zFf85me093KEA3sx=epD2Sd}i{N%zdghSSsDKt{G94!)ShcRKhg4IkalfP01IekR<@ zEO*E>I__CAJdOO6Mt&OpMoVDMT!E1G+?Z+G_Q~}6*IF_CQ#CVSVa(V4$to*?JdY>Z z{u7)BllHEy$rRxzB5uZr-5-&2WVYbvKjw92hVQ5^K>~Ox5u)o?!%KHIRzYnG<7EjaLKhCYF)=Qh39;oXqYjq-v5lOubsF=lRZ zK0l7(DkFnfV@Q@IVLk#{(Xjr-m95=tku!h#S#bQEBNsYYc@wM6{ii?*M@g1}j^uuSa2jRVI+ZUz|_ftrGdVzt9t zDh%EH?<+X4`2|tHGp+PVUr&(3+mS6vdw;_Dby~{G&FPI(ixkuL0XPh6KA5wUE2CIC zP?4@kMo*}Z^M7f4!{m|4j#NChVe$xGPu(#29A1ZQn0z*`r)`-0NnXKs7O$som^_@< zGd7?w;(F$W$rE_3+Az6>*WsDA`_JOpU{E)s28W)to`~pF%Ry1~B~9w&Fif#-1&gUj zIG6Sw-1|g zZ5KpVHsh7lGdC#cr_pACo2D{LDx18bWh>h<11=QW9#+LTLAtPZGD zbFF**5}RKCcC?+fO$O^Ga8?&qS+sNZeEr6j;(E-b_cbvWT?>bF+tyMZZ$}4NW21B1 z4i)aUgGkv8V8ni-IPL9)j8QfD;OZ$!pju*vIM(A8D8An6TC-<~Pj25Uo;j?RQ_ z(T(R)J9fS;%WRy2EQE3hSAXs|7XG}f^=vDGs+Iqa)9`RW-jHrCS`aab*R)m~5xIQ9 zCfhsCqSV1;mf$9BthNWC>{d|N$GbUC2~Vg|E^15{?L>|ksUq|RvLZ(_z?f<-iZIjs zJBim&JXn09xBN9?%KEOpo9$~b83QR1{{Y8y(?MCf&;Sk<5#~7c)?%9-tqEnS?i)}d zbtITal^O8%J=9UfbMeYL(nV=32PrFF|5|kYo77r#cD(x)+!%96kiM`4m3Q*zT$ch? zwMawNi)Q`A3O^8LN9FGCLWT;K)1bUiICJ^3=UT(4I@qn{4Sp4`d0FlIr80q1^K7mn z@2L(_HZ5OS-U2Ee8MN_`>4VRUG;7UtW`81=-_Vf;{k(MsG{@53@Ac--cr_};N)2-} zGDGV*JZBMVp4BLpzNpZQg{5%Zq{Lorf*iYY>ra_{@{qTJVObNFAw&vykTOVQ(Wqt4 z-cknf{nTe>%=FpRL!VzTAmdc-T7fi-Cu2aT!-hvOm;A+`x#XBCujbt^WNLs^pVX1( zrT;igRt;pZF-H0W|M{|H{{L;IUo81TadAuj5(Z4kkJN&l<(u@R8>fOf`~Oi?FlQf; zpfBtfl7T{c8F{7*bdYQe1o?7kFTUkLrum4c!hyPeXUm+JH0Rr^p&5 zmGM%Z(?gui8B&?PL^vi*e5QGpSs4I8vfJGv&cEu;8Ptr=NmZ^4v|B) z|I2gh`L0z}qlvFvz8r#c&Os3W`S2Ko6AQvQ<{gA{{5}X@7=m+bK8XLq5d78<{GUVc z>qFw}h2TF9!5ww;aE@;f|HH_)K{(Ix7;LSzSPTE87en}0D*oJT235Af z&%S(nk7-p80zXmVQrb*?1pGq?zrDsl)w#d{2ZnRIl9TIkR`or2>lDt>3r(u-#O+ii zzeM1Ode`7dLe73k_D{$h4(W4*IMwGU_$hcM5ocNmKAa$kayXnJ_!NR5SAK(rl^n_v zeyNXK`Rp$tQ4Yf({NE%9a^-(d!v*qxVBvQ7?=iS5=RS+y4(B!tx8*!y$+7LQ&%!y^ zM8aRn1O`#>F#H4;`@7+>?Qe(Y3yMwvsU`@b96LO93e~tBo=YtJRNRZ47K2m1 zt+&nMA7b%;&%)UkEpq-N1m~A7$&K&R8ZJo3y%uiA_m38ChtsyR9ZnfLb@kq3(#4JM zeHL!(ecZxry)PM@@@>7`gONnso`W^g!tL@n&fvW8C-(f5h1=noYH-T8(|r)0NyJaX zPvndu2qJFlouE*y)7D#S;jD#34&NgrSML=XR=Azt*jGRzKidc*=i3B9)M@Mep+Yr3 z+ZMwAoP~eV!li9Z`7sNhjC+zBUkSgf_hQYi!opfq^v*K48((%Ak%-&zU7^szc->@h z^4oUUVc~YXc8AE>Yw_Fm;a>kF%D3hG(8AAxo5ahuo1Gt+XGpGn=$Ax%0DdB;l^}?E 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

      gvQt9}^L>N8B;H{XZ`r;a zYw^&Axn!qEJE|{aEhjvNXdE|IeSUtnuvrkVv~vVYxjmPcJ9Aa4z7dXz7SH4Z$CY3$ z2b|z3=_uF1^)+(ULS?i(LCri479Q$22i`T5UErFg2-1)efzJxeTJTKXlV zA|Le6F!pTQXBH5*UB0w_2)i4*il1+n#lL&}K)%@LC*Cf=j-~F7Wb40Q!HcaJz#Ek; zEJdE!!AJZ3BCVcqhV@&smPxDH!SfP+kXm?+;n72i$`1=nglBzjt&sr&4n zVHWd%XB!^zJtx1oxrFrxxo`Wkcwfh2{BSsDTWhbAkKO;7Rr5&Z6Z3xzemX5n zUfcPI;7-yPh#QUYf5jKR*vW5?N|RfiiQs;-hVTfVHM||fdl`Rz#9!2OkONJHd8yB@ zr5?kk@w5NFWmn2I;T}7;NFJpR^3!lVuXd}eu%C36->-baclS5)4waX(B5-{_q*7Dn z)MXR@HL4Rk<@S@jEbt8Xy}y?=KG&Odo?e$d?);uLn{hy@lD`@o_@x{(&3evOq|D&c zjpz8$XS@0D2d40#A~H`e@rJMO{)&hD@8$1zOqB1yHTd`W>&d609g zRm#2;#A{ycD%p)4$cFWMB(HySn!PzQk)JA`#r+D5W=p5HWRX)sS=+fq*_Q!>rJapO za;a)8&)9#F+y6XL8nm(pPl0CyPIwi|gX?}`D<8dL#o`OGu5()R>)Ef^nx$oU-FdNm zz{Pzm>uH2s9?tV@syvy;l?mWBfjiiM==Lo7g&phZ_JZGD(Lri>ssNw(d?GLN`402z zy;gqz=@MTPds61h^31oelh9D9@Mqg{`~v53jPZr#$=e zd%n%jn|&*q#CC5wCnfHi1J4WnmDPl2`ge^T#Jnp9Gyk%)`R#mmeBSFse&FIW*2n8O zn>Y6=cW&h-)pxgJ#V7jlavKBLrWc)9L}+zp>*K_#ErZ`L{cp;<13K~^dw!IgPs`v% z-~GZP5|6RtaVz;DcuwPpS0ALffKtpRyN-0F$p98pBSvy~GN0MyPh}bX7V@jM1z75% z6?|J{dFko!PW+t1UFloc6IONp9I1~9_H$?9n)du{yg-_XEeV{$2d!Ahx4+%UzuTY0 zr`7q3U!8EDkNQ54?W<{$-n1ylx}V|v>H1l$v`=x_XXIk;vF#>rxAPmXdgUP8?>B;l z%`49)&OX4-{##A<4x7ZU)SASbUrgm+$Cc){#+2a4;QVuJRAGqYo+&l8i{v~0?k$%u z2QiDKAT~6*9XplzSUR!gI;-ycj-T7rmaVDXOj=f%@gIsz~#0d9BM&*?}te`1?Pa@^w4z@Jg49!8P)u z{Bh;^QprGfzV*R!HhbG4cI&V#xu2`YpZ5GLHHUb>lCxj4^?~hqit|(6GtrjqYWjrT zKiLJY*{|R`-u%UW-FsVl&~!cb8FfQSF8Yvfs|Dv1GJfXMZ+BqX7ca0H#a2sSeoA8_ z-k+4iFPGsRuKmImx)tP~>W*gJZ%yILZ&a19%xcE{JI2y3Wg&KEtQJ_U4bg zN3!pO&$H`mKFga|Jz)*c$4CSBzURwp{Uue88pGE(^=7@U4d8PGW%f}Y)t8$@|kMIdA@}2d1<#P z{L*uyT;Ho1Pub9qFT2&7b!qP)Kdq6Utxg{;cZT;&jcejBpRQ1w*ZE_Z^l$wYeA2YO z^7TuJ?5W){dENXPJihh^HZ^r3Pi=XIyFDn(Sot^n{^YCtW1Tk(_*^*1(b^<)0E z!%2Q`O_=oCt|k0U%r@!Mv42>a|7l5ftIKMaN#aAA%IuH(d*tC6@Q#8`)%kwS=Z$oS%>RS@d{tWi(%La|4ULv0PfRz7pF~_h)Ixqr%*N5o1oRd$DtUxYT%IWme?vF1dNK zKY#LgI6GM*j!k&9Ro)Xjm^UuIkhfpglqXJ0l3xAc#eelU#An%bnU`K-K9|+s$YBwfvvu zx?R8LtLmQNH5(S-sT0o2#>i_dY)WgX|6kMD5ts7P#-H-@m5!&``h-oaaK0Wa z@ZEP(a%xZJI)5{tvS0xJGO?!IWpX}#?D;G?WqwD9A^KTbT(B%N^e-mIE?|8B<2~$< z{T9Ay&PDce-1jW&+9>JA2hpt2%6!tX_!Locw`Z0dF{a!gFtpi&; z_KEa1Z31_n5NEk$Z3TYqQ%RPv*N(SN zd&OHle9J%2YQe4zUBT8A+{Q~Sab`E$T$I8G{>0z8ZsU!-8^L|bm-xReFY>ADUa}?o z7w}DTU%8K~1Iq}0!Uv^$bH~P4*xKtS`KL42rMm&kc%y~C%XQ&;TmN57?59bS+3K40 z*wgeMS)|J z=6ZG~yXLTokFENY*WY=U^{KIxe=O?G_Fei-Do~Pf{^M-fRC_G%R?aAos+!2Yc)gKR zCXC@{{#_%lhVuodetXN(GMch~#vPF2Hgm>G%#^BJO5t|Z#<8iNJMxSZ=UKtfe!TFz zO>DxmQEZJgTy{D%hd;}DC0%Wiz`q)o$#3rb#m{zn$n17EW`jRAlZ$jzLq z@B#Io$zHcFL!6bJY}30Y+u3xdysYgBK5@!=mc8o{+gyLL9MZTApMTOuYW7DZmcPO- zwqeUcmh!_nRu$s3Hiop3*@Ss)kLzo>_qV&eR^nF{JE{>s=?>Q(AAiTIy(%ruOR2{f z%>Bd)J>SF!f5<1FcwdzTE`K9AZJo;o`HW*5D#pM&Ut+mujsENlJO?VU*Bn-&k<3<= zjc48Wb?0aD9cAuU;XH5Hc;0pLcKOlF5q#H&kIXN*GyfKSNtRRGm?_DYH!1Tco8bIC z`{6-2+cLE!v%9#Q?eADm{`s?kUG137Yu~xYUe2Dz*Vm}e+pbAwdzd>P`CDHec;6r1 zmDW{iy|DmWSNoylQtd8xqnQt8uM+4_j} z%|i!{qzeyW7J`OyT&(OHewzN|8`eumE_3_ zY&P&8wwz`oe*af`^eBRjEplF7n|Xwv+2SP6f4+gWsRGZU96FItJ^WCrc&#zJx_2ah zR;LL+V5}j}+ghC0Yx+Vy1MlWK{HzJvSZOie@3c$qYa7ZlvfSkAWef9?M}A?0-`8f% zug>91i#YSWs~$?r%I0T9+8&W=9=*>zrdF5#__+zcd)!%?F=-L|n!HY)@!%zUReAs$ zxMLrGlHe%^t$)Fv{{E1M{8fS-9xz%O4bL&D<9$@Rw84#cwe8M*=4CLrwU^gudxFU= zT1f9ku4QKeCQBo(w_wr!C*)$@k67|w)8x~ihBF`MO?=P1RlMG_3(~SjaP9f~vQof- zW^CusZagjVGTR?lk~9ZxT@A!8Qvv7wWA+^BjG z&kWD29@j?>+|nDK7x7TK@n!};^=m~bMuPVmZVqIR>Ne)r?*+=|eF8b$Rme-9zrs(I z7{x=chVg=1T-k~I=lN@R>1buwO#bQdAJW)jL)n+U^SGUN0-plUmT-UYp5JIuMc#O= zAU8ChAkECY#%ongU;(>Y^K;$5usPWoY{&Y>%=qpV>$%v5MgQ7|WtqaH(VnMS{-0;F z(z6Tl%fpJWN)yWQTW2P*3HH_by$&_yPGvu`fuotcZjuLkIph|9`s-D8&RLf2_t^1K z1?{Bx8U_~c{kI&}EQ8HDI9fj2Hj_K_eWb~dvad{K5? zQjn#utiyY?aA&bKrpobOr}CfgPG|KVui-&of9Ac7Mfm(>H~FHMRrt2&=lM~#jW1l4 z!S4Ujj}@w1R=#-U4G;fzN8T0nnB8$6Ev=d~kykiBMV=Y{mW|CUC!g%-%Hs>Q<+Fa; z%Jbzb!oY}@JEobMjQ_CMIj2l-#)r<&I0(Z2S)?ItHV zEjfU9d%aaI^cbFBeY=KSp~Mx|evB>ixcHV0N%7@g4;OK`s3G}K%cW0vQdFc%e4I<7w`T)SpL!9V)mb&c`yu@U{kW8&(@#tt4>J0UT?e^i9g zC8ANi`jL$qMK+9x_VVy-;N{b(o`;vWr&nY{51$6!o{{yvBE6y;MnzSJ!wqewlHguu zX{eL*T@gF`=@MfG;N`V#ajvl7=iub;P{!ZE#oxi*-@(Jr!KbCeGP_i}DFrg}Pt7;Y zc7lyehAnLiPag7p4;UP5lJUXz7q?n_6Is<|3P~=sEBo zbq^~8*(PZ^+))weNVSPZ*D39=O53&z8-(iD+u>gRT(&MMZ{1cO$o`L}>wEl$22$G; zY-;K7k4Z3q8y=e;MH^G>s~%!~f+r{#6W zN?EHzrj)A=MeN0O*skd+gWpsa_&dkfw)Qp_p7sUtf3&;-#VzuxzRYEVNAbM<5dGk7 z3;!TFqb}+PEMIq_4V0eSg-Tl{Xn8LefV|Xpy)Bp7Rfzoy1)9Rfb&&(`%(J=#<>) znZ})RV|GE~E*5;3#yu?fTczA;W}2zUfh`JmHFHO8sWxnfw~&~*ySB7L;rbe5`ceXH zw}Iy_=}8$Qu+m@AUscDnvcT2H*=+JVeKY-Y*;BXSNcAzIekSuW5e{;U`(0&G$~sKg;+_p zEJqLBY-{dilrqp#FgMWFY#E$)w36WI09GjK$+43P*s@}D)x2y=`iU9Bf-UI}xp_{z z=jJ*7%*}J!JvYy3_uM?EzvbpR{VF%lY4_Zm^b@kdmW(5Up}sl&Bsb3)FS&Wn_|47r zUY0{ULcg_~GjMBn_*mm!0`4N<-J#!F)3aZ|0|k0M2<$v7&@({58v%DF{Z=^^fifq8 zerNEso|I!bSSbP@XVU+b;~-#tLDZS_bKSEJivFDbtQSoP;58#-j_zuTS^}!s`)!pKz*2CY$738&@m67bUkevNRd{}JI-|5pKbL?=Q*zft*egj4LOAUwHwdTwe(XTdjM~FRs!Bhz{3Q5fPfDc@Ua3uMZo6?_zD64Rls)%_z?j=C*U^({E>ja67bIgZeJj$ z9cjB4C!Dr>1p%)v;NAk>Ou$z_$qaUI9NQ z;1>n_F9C-T46Ebxjevg>aCOu$M1JV zWdyvkfWxZ`thR3>0S^%Hb^_jAz@r2_LBNL#_yhr;A>fMye2su_74ZE6enP-63-}!Y z&l2!=0?q}z5IpV!lV$%YDc~*wUQ@su2)Lhs2Mc%?0q-N=0|k7jfTs%hQ~_Tg;Hv~2 z9!+M|&wB*?sDNJ(@LK}@M8IDQ_*Vh9(=Jh1_7i6T|6aiB5l-i^ri9aZEJ(m338#97 z2>4{ess8zdQ$4|W!Wt6R*9|`U{MB_XHhncERg&x^(qPR|3w zBUj9NC|@Pue-KX3i{2-ko)?{5M%9mX!gJ|*y=H3M(r@{-OIgUP5&6o5Q@_D$Gn8bh zr<;Js3ixQktCMo46Hd!rCg58H{D^>OlvC}`;~$M%)@wE4)Xr^$Q#;QI_56v!9QE`_3gYG(<;shw^D z-cY~;1>8xy)M{C;%7jyUJPD`v1PORI0q-l|H7ct8(9#}%!l^wWgj0LM1RQRkQIe(p zQ3CGgVqLx);nbeKgj0Kl2>3(+pCjPiU73@I!_YtQ~{qQ;L9~`1I5&Zk3N6? zPUNc+ewA?QhZh2_hk97nt0ZQIgq+U92EwWSegZyJz$Xd#F2ZU1J|Y|!bwA{DLo4%M zk0>GFZUX*Lz`qE1@haBKttsHgu#q6;gAcX;j)1=ua9O|?VIx7Z>?hkaZdvYW0e>vu zA=ns@P!Dz`-Twm!r}dg3;0p*x*XnxK3HW)!>G9Yr!W$7i9|@<|Pqo91JjYiqkQWoy z%LhKXJuMMJLXNQ_I{yhFB;>T*5eii~?rL=T*@RQSttXuN?XZBKC7k;0rhtDUyfG~6 z_GqWQ75iNX*A8zL|I{E{J8V(pssAxACiFu9e02Sb5kkU#h}(32m|QP55dJ{G^|)2k z(VWQ3M4s{zSRf>n4}_0iZY2S)O*po-F7G4Y@M;$&S=!T?a9XcO!l^xpgj0EX-JIGp ziO9DgcFrN3%C97x`e!HM)Sf>C+{ZSjzEpo}0jJlyseB}nr{%(}*JgiGo<=y;GmCI4 zPp@}V`E^8|^6dhCP{205l;QkQ^5NQc%p!h6!1v`4v&CRl4ZLr z5%6^azFoi%6COzXaF%fDhd%}Up@6>>@P7q7Ujgg&brkS&0$xSHJp}v*0f$FWTlN1> z0^U==`wDoXfR7aLNdi7gz?TU4IsxA<;0Fc#lz?9q@OuKDE#MynT(Yy?E=2^qw18I< z@Y(|IBjC*iysdzD6Yxj@j~DP^0-h$|(*^uz0slq7e-rS10)AY;FA4Z<0e>do9|#YG zuA$H8lD+kQQd+EB_6W)^OZzJGc1w2B);{-fKz{d;tGyz{I;Hw3Ei-7MH@M8jg zQNaHa@TUU)M!>%bxP3wE?Ot5KD+qXX0rwX0W&++yz&ih9X_$~oIBH-r){Dy!(67W|7{#n5Dlk1gqTssN)cLI*Dy})F7oaQOuO$5B9fVUU$ zUILy(IGx8v5l-t1k4my?|7-z=*MV4-UoYT?38(g474XM|2SG{teBNEV$p!uFOL($? zk0IQj$fpbV3ytGxh5SU`wiv8HLXL+dx;-8mx3s4Nk*9hF5>E9jB6_Hun+f+Lh5z()x9L;;^E;EM%(t$=S6@B;#VQoyeW_+0^iF5vG4T))-UvOg3q35@~Cl9v*2 zR{^gj;Ef6Qg>v+E4*0=`zjcM?whaENf~hcg0x zUBDj*_zMAt$IU6pvfXX9Tdys-gMgP6a5n+3E8vXK25+E3ixUP-y-091^k$RUlj1a1pGPSzR=S8eEyzrI*-|D7oIKq zNj1W$9xuYFo*xC=AmAMYytjbI2)I$eM+>+f?`K)xIRg1*0=_}OcMA9+0Y4+)*9H86 zfWHv%PXcaB;{9klItX}K0e2Jdx&q!1^Ij^}(Zq5agJE(*=d`w~veO(vY`8ACXgPZ#jH0=`_pHwyS3!l^w+ z38(g45b#?9{zSlE3;0(7wi;jL?v0;zed2f3iy5jKOx|k1^kYHX9@T_0p|i<$i{koOA2^p z!fCtLA)K}^J|_y3r9T4%yq$pK^RKMwi4yPx0Us{l_&hpm`ez9EQo^Yp))P+sutUHz z1)M&AhU%fupP~G|K+oR-{!zefY_0pDsDPId@X7*SN5C5icz}Sn6Y%Z=9wp%V^D!;^ z=Wv1i1OcBR;EM!&jeu_z@cjaQLclKz_#FYy67Y8d&IP;>IueqlKmSjkZ&OpCr-6X` z33#x8cMZGz&8u{9sxfp;Fk%n4DF^LPu?M%&NCkc+z~I5 zLBh>cPdUP=o+<+FA>cmOrN zX&fNsG!BsRg987Y67Z`6eow%&1^k16OC;`#+F3-vOAB}<0k19KJ_6ocz}pIVHvx|n z@OS|qCg5oTK3%|n7VuvL{5JvLC*a2g{E~p*7Vu{R{#L+c0WWB$OecBvBP9g9qJY;B z@cII7Ae_!)9SEoWxwnAF2)I$eM+^8&!l^yoRQD+H3^id{pSRCx+;SeiE#NN&Tsy6p z$NyD`JoUq0f_dP7%AS1W_Y3udi)IfV&T6Mv6cS6gcFV6qwh*qJdQph}I~w(9x6CTs zpp}bUyLDCJQwY~?AyxQV!d(=i{?mV#p&nPlJrF>`uS&|2`cHq(CvvQ>p7iHcB6rgv ze7{2g3BU9Kg10`KNsE}caLAydHUXi{ zJ9Z6?iyFcdZA6Zi5gip869>AD3|~kwFe(lfax56CmYoz49vhw*Ixsml*H&YApV+9- zq^MYUX9eVnj|?}4t46E&>I~=}l^CC-mR|=-GRF5wF-9dZO>J~k18+0a^M}XA4uf1E zRVTPkk})xtaMB>MUf(km*HvGE_M|~(BL*mTha^Tpof25{_T54{whJ8?H829!^n$SF zNpbOUSXv$YM=PGo^+_>(<8q1tFXXZ**E-mQ>%@h9qe2tBLL>VCjEgr$)oIzbQ|%;U zc*Fp+A^tH++dzXwM;Rmf(aee&nzs^?`^3gXghnUE4-8F6j2Rqmgtsc?G*vE(t;y!} zlTHcHQczqm;(3 z6Ol_SDY*~B?gM=kzEcJ&-xl6d)#l0u_4V}fY|x-V4po~}qk89wNHTgh082GHyr8o- z4+&}z3JV&8u4x?TsdHG+xiQhRj+uL?0$!o|`CvK~{Qp_T=dEf}POj|zv=elnEjDV? zt68=qEFselBh1{_yp(%Eo5sv=EM)$#^6Sqp*E2Zj3)=Sx$ZV+-H=SsVTH!q_IAKD< zXSQHf>~RH>zJI*|+pU$q#Z{Hl-%p^f<$Xr@Qc#NdweUb)Oubnj)_ik_vZULue~%HA z?~6D4L(<>NpswXDAJ3;*tAEIkYW<(Vc1&1*Je0AlKen6I`qzUEko4!ot8017$Gq0c z_wiNB@2VXXVEGtAY*~IiLH#p(sU?7L%u`GWQFqE_`-zgLzB>ElMg z6_~a1?`h@VtAx4K_Q$tYSe9=u@c)J3N;alnmr&R8mTxQYf95E){zJ8lSbq$;wJg6s zFl+VyXM~zjf3J$Vmbd&U*kG;xKBLw0*J`io!16Iv)Ux~qAZD%nW#iQn_4l->YkAAR z0voL5zc5A3Q3m`&lV$t;0voO6|7WV2OMh>QuER3_a@b(4{`aP$)|`0`>yIHSmi2!x zXn)@om>cG`|6o79U&&hepS1D~sv2ef!Aszl<(~#Kt<^tlm6}n1UyY_FPyas#nXQ%Y zJ58-WEgye}SeEZ4DBpL3TB80w9#Q%Bg89Q^i<(1!KaVKCtziC`q}d;)WyJQw-#?c2 z-_XkU(&Y57?pxI*?dPkG6<_0u>K(@Z)s`)qnT2clwc(Q|zYcZ_@+WBdU35Y1+p_;Q z)%AruPQZ2se*5X_-d*Hl{xUJzr#( zc!qg`On(HKjvCT39mnH7%hc1YyulRf<{oT%s%+Q44W=XdVvy;WzGyHVH7}wH6R0ql z0^D3shf^^8vp1y2x_Ja=3^W9rJ_eiQVAFF&FG|Ni9f4}=#@>eXBWAu*l|3*94*-N%8+hEJKqGG{%vErr-*vKNXztfoO3j*q#}}?h3}d3 ze34ZOz6|MsVB0H$>5h`;KA(mKCuyBmAtmp7;FqL=HJE!SLMsvH=BMu-O^yi^3wuXo!h75z0`pqUd zBbG_QjsaN)Xdip%n`=>5qsNXDcEN&DqJ>-V$WGy&w^X-80?4jzO*F$&v>yPoN1#_J znQ$yOv6g*~o*g7|iZbWVw)5mlw%|N{0Nqu_klMtJ84G%5Dg!#Zlv;%8kT$;axq z8yxW(M~!_@#%Rg&gFaq@O`n2Nk4f2GgVGCtdCC-n20{()w=q4z+UA-Vf)q1HxVbCk zrDe7;y>lGj2fC_a`xqu=b%GVY10beWr&We`j%(%zOaEZa%NQD+NDfYY{0(aAn6^%l zh4~ZaB1Ns$8aA|6!&_Lx1@O<>#>>F7M?>9fLfvs%hPk;Xl%3I}W{v|4rauj)mx^6r zL3SbZ0LTS^oODc?9Mu^DrYFOEgLEjkQC4zsLwXZ8wM6i!OV%&nxZ1NUy8ct$Fts<@ zN=0&dGwnxcmP=N7&;l7O#=F4)6=(>%G{>DaOwWqsbNkvPUvekYv($TEQa?$_{j62I z8hAeocc|7jI_R8^$E-)XsTNhJjH+;&FyMam8UI*?pB^<#|h)hsHnwo|##b zv7FQ|QZn?IS1?T*a;E7l*krXjO~AnHGS(`JM{Ww&D;kZZ=<_Qyd#(c1R)(VkWwd6a zB~Z08`k>Rl5!%xgpI}oY8SgMqVV4TiK~U;(33g2ZrVlujAF_F1k2v* zc`NI0+?CpnaP!rTHo8I8)SW6$eDm~u0~$Tb>U7f!lx4NX!lB6vBuAlX=ADph+6!X` zYqji$xk^H=AUGlcV{wv#_QyRsP8Ifw!8u1JML-fvR5Ud@np`bc^@2?>$K}+|F|9mE zXWf9RSt~gnOa2))MkJ;r7~|_kMZlj|XncebPKvA71tLOQw(uGlniMlILAhjO48%B?2gHUgd^;PC=pL|_j-)6!af zOGCR@;}{cbjW-v_1GXxU`(kT)t_yfsfu2->J@{+Jntp$Q{3-#*XK7l~gU<-H#^(w6 zHi12OO4*sb+gg8TB>Z**t_6U=vNDgrH^xHHcL6JN74Yit!Gz~cioi#YT?s-633*ZY z==>*ykdPOKkIs7{gk;J4syGi%6!7JQ1NgLj^pI@XAE~XTq^Pbv@{3OsM~R_~?8K;W%gM9Iv@xvb4vQ@Pe>im#N?{OEj~CXZj(yL3K997^NH_)e-JC<--uX%*idGZ&+X}$0o2`0;W>Cb|;tk(ge#})GF_FN>q65+QAr}osr zLLpiDr@o5w*wch?RH>JX$BmdQ^|V)U9zER%r+OkZj(TXlQV6Gh8>4YczfB~Z>euH< z)KBMCI?t4cZF;@Rk#R@Mb=A0Kx$cD1a=it5ejxIwOE1@-aH@ySORhvdoam?RK7?>O zUri^R&R6pZr}Ncn0T<0ze-e3TV&`MR>3DxnIQ8>aja&K|V>&S57xhn3ja&AgN`zN} zJi4DTwg(f+({b?w;dK6wARMpN>v}Q>r}bS(IIZt$!fAasY8=1tqwC*BIIZtFjidc^ z{=Y>y)&GF#!9`tv7U5Jsoj>V(-W-J>VY&1;wiDsBT#P}&gvHQuBM8Su-5wWM#)Puk zmj4ZZ@yNt?xHY(=?Qk~$?(CFm2h|o|i_E{*X$0|ciFWAJi z;`+kke<&>HT-JXmEJqNO$0ZL8?Gs~6%I%5pXz))|uG42`Pk||+R<{2K>(IY~6LbH; z-2Wn{*{1(OMvJwEsw(FR2gXNYY&BFNF%g|>hL-C|@v(!WLI)*>M=GM&2@;~B2870j zCqZy}Vq$zELxv@*YoH7|mlAFbi+$p}`ozRx3Gn6BCr%N@c;rM?!@%&w0cHi}m4x^N z?1jp@Wl*(VT4Yq8%sK>J6Z+NVyJ{RFJJEl|cu~xo|<`n(B zh$0OCEXzL%%v$+jc<>2njJ6TW$KR!v<@W++t$ZhKGS$!5fS8gj%kK)*TKV_zU<%TF zQa-A*EWZiV6U+BPVUot;P8QN=^~?MpWijdB>$PPMg_3`GumWkR`epvF=hMHp!wy1U zHVa`sEk9+rY$$w~hy7Rak%eJ@q!zaI<4^n-gS-xogkzZH10gTeIW z8Lk>k&3*NSFnyt)A$_>7A&nc0<0UPJU04G{>hLgTwCSN;=1m{2Nv982udRA!_BetH z)r9&D>7zB(RJcbLN{F{BHaK?4bS&1~VAzGSaBYf%nO&*=PJW$11q3fCr5Mr&t0e_` zegKOd$79!nI)p*wkY*-QlS-j>`t@L_-H`NTgDDAuY=TYAgVO^;OwB{m13Q|UcT5lL z3WcTz_B1u`iMldcG)p};3PU~qIV2ZQT?P3Y!nS_tNe02@GMH5r);*(5xWS`5@C(>OH+q*Hr6$gEJx^X6nfvoOTt(sV8hwKNWCH8>dw|7_QT6mr=3S zOEfIDada*lm1~OXRamHA#D87A0Nkutq1Gz9o?6%3AwLPasZba78ha6ba*&A|(mohV1f{oxi{T#)rekUmitp2I8H)v_4++zQUa-HqwgGXZ{q$?G zNDC{y7+mfbdIb8a@(o64Da71aQ!{zDBaF1iSET_y7$MN?eV`}LR<8;}a9j|?W`W}7 zaA{SsNdHFI7vkcAAVi{H5L`Vsn2zT(h%s2V74)WM`Z>-%mfgsj(++}Z3O75A(ZC1@ z-T`a$GWAQnR$QsnkdAk?0x+VqZ~#+t7idMNyyLx0uJNu(rw?~gtg<@ZHPz|EbA)q^ zcPrZ!WyhPlqnSA)9LIMMhR@;nc7pM(=Jb4l&cz{DCMbQdRtS(PKwN;RrlCx6zw{RF zrsnSOWp8S3zaOVC(=+pk3pw6GDbbKVO3kD64rq8SVf%M5q+N0xKNbiCbzpc&3IvTo z28h48rdSQ-IF6qS+k?PHXeG}N3Wl{Z5aOqc7>6OCn?p4-F=#NSGj{+n7fprV@s`Tj z3vE#OsJe0wDilz-xqsNu{*i49T%BZ~$1DB0V}}qJQcBq8TO}v>sg^a>h8)#g9k2bN zmf8Nn=@F{w5JRDx4m$j;>1dNjheXW_Fnxl+5_^nX!4cU8b~fJ`(vu*bN{c}NybA!1E-u=bS^P6Im}|x2^qI!cASWMhJ-iR5Y zNO#z$K`!0><1yMgSP38oc~Awe)Z*tF_USqK@Ud_z#lqBi5T!puE~UyC78GpCBJQ1Y1Ohv6Dc&)68?Add z?mS`<i42r`9(1N0!~|~z+n2UPHC7g zr)Z^o+|N*yYkn%DN8+o8Vb0%3>vDdfk$1Z}K;UF&4 z7^AjP8`HO7(`O75giLTJ#6N1~GL1oMU6ts4xIY2IBcX#p7_(VIi5Aq3V6@677YCo~ z9?~nMm#<70ih3nv+?}+7Vp{gIocIHsLNUnye}f@U@Q9MgUW3S-T>r#32{ z!tQJ7DCiYAM+JS9TTs+-`oLg1L~7R(1}jupZESQHbV3}xYWGE;98M~+*_us;^jdDl z;&7A-9e}A7$j*n*T%^`F&2xwOz6m@c$s)%iAzILP+6Tw+cm+@S!Ke1cZ=SatD~<<- zLoEVTBE;N2H)ex0CPchj;oxly;Yfk{R=7w1l4>aIgdO-6^O( zoqJG*Za-|f5x46%5JT#}(va$^_o4SHzQqmp zFakQomCUP9cDDQbPyDZ@3YC);8 zlvjKL0 z(98bSw}4LkwKoTjU-d&M>pzyK*jgUf=lb0ThxA$BU}uN!&q*CVxb{>dXjxc1Y2 z@~U?^W&7a$K~~S!+<_kwO7Z6VgL2(*6`;)V$}cy1Yna6i5g1I8y&G&-llgp#+Gk+S z4>G+|e%-?jXoI0*9o@ilZJqQ=IgZC0GT~SUw?M_vX>DC#WRaRVjvt`QXd0A}N1WPP z->&F@p9z)%c-O7!xlvHOzQ4xya?-PQ#!Oo0Gq=_osFh+|TcyF2BN)@UT(+IpML;XI zTabG2luKp<$UtAyb>uYq%v_nlH@OWrCTpGnt!>r9bM=VM%I4167Shj*O~4d5D7S?X z1HBCEMGP`lz##(Gs3vO%FZ!?IY#Tgnmisgvn5m|m`2psC_?-ol=4ti!Htg8VCs|-P z!w+uQqscIVlcNN622LNTPXfjWIM~onp+KhcY9{@cQ_cZ$ygrLr^gb`02YNnICpafY zZyIa}+YN9}tNCzB-;cv@czsd1v(&F8EO}Xf|X$pnNSqCdQ(+;2k>t@B?}%kD!)4Ox#e{GsY-?+umOH^=KSCrqUnLj z5N122NaYT!;B;@e@k}cd_AmReIUL91W0^Gzp|~MfoN|*05p^7o@n>-O4f^2z6FTK! z;D&aW3I2$~^Ih64CbiK#IQn(q7)l(gkuv`&b{4S+g!eq z!L6tSoCyx?V%?$2K|Jh^KtOe>xw^Zw?241%2ae`Zr`&bLQLmglgkvIbSps}OR#Rde zg69Y6L8;o<*aM7x^b>|4<3vtF>SxcCUzFDG2K_P5P|0<;k!=S(8OzXzh5AE_4BjKT zZwpF-TYv=j1@%pgPfk!S)+^7|vU-V$49ebqF3CC%kh=QD`L= zLYzSmJYf+xqC{vUDbHK8*b*HR6&s1qwSx=xxo&)lg^T!6iSYQeDAAVqBqKDkdM$Gv zbiDtU{x9>u|E2e!;U#VDvNr3CE{A))Qf*Qk?BTn+gT3;6GyFA*$p!x@+i{EfOrWmF zAT_{$$~L32%^gSKNR)>*=6v-R0#V%Z1Bg; zF8&Vgehwa~1*YWBfLzmTY(6=-D;V?oV_t6%{|hrhipGCxUacI+(NQS}WC1nTml?x2 zIsKVn%Cl*}_BNmpZK$ra>QzCFX&1z`Q}Z31mh6< z-`hl4uVaYO8V_^`QRX`*lx*M) zgjUu?tdDSRvppzTOekR>zDvt1980bP~D4mB`FKhSUjsbfl=5NlX zxA_OC8}bL*ma^LS&)`4gdh9;NV`J(9gAF-8N(B?fCu6z>(JRPLsHir>?0RZ1Y5L>Ku=n z@+MpLC@#+iTji)I4+g*Gj0?Kemh}JJJg5KX=Du{*yll&I#-k2L!n}n07t2&fz`wz` zwkD5}2iEvU7}wVLEP?*bFwa<%Zy?ZfSWxcI0zDH29N!aSty~v@oiQ-aSd;$VvSdV`O_K?5!lmIV9yAFo-u-Q`+|OF(*O12k;8&=vjl!? zERYWqwAWKXKf#f1%@4l_>^~v!^9X^SZ2~>;OfswG{wuJ5xxoLE1b$er_}LY#Qj@;l z{0a0pD^FHbIkpofUkFflW;ye)zQ_6r{N}9u`cvif&%~&Wnm3_@^c1_bn`+f{!!VpW-?uTksowc7lsS8N00Toc(FE#=k)SbcUxd z>PcVPs@Mbnw50rwgymI=9=-P3?_}U-6hBna#hLPZ2-Yyv+?l))0*X_TjZ$uPZH+PI z_YJHaQh3gON571?RPjU3e%W2ixeUIYmAm0pp!_a{#Uw>u_c~)P>Sk6~@qf<#_l3qM zDfP`cPSEQ+5Bjq+d4tCVO};&RJCpss@*5Y}G{yd${bN5(-c2wruzuFYS0ll==qBLh z1mo9UP_CU|ytskitl5M2&|BlK0zK`ZpIDRk5^!i1C4srh-d4Z25ASWjWXbiOV9E6( zUgUo8(e(tP5=fT3t%~z-XhtPj%Io9Rl9w0AQ$2Xpq1!|CP_7?IqJGNto{8L-=&1$E zm@K)!iu3Ssgm;5w-JazFzM1f@M1Gfm({}MC^7=0ewDU*8JHRp~-Ip9snP`T>X~_^7@2(z%nM}4dA28qYp75M;mnB5g{bx z)X!lEAtCpNk1n5p5E63g&mjs`eM$W}ig4WP>3Sw<9Q9CtE+L%y6Qi&&p}ZG-bUoV< zLPA~-K05z@^A85UaQ=Tf|5QU~LPCG~!bkUKBUr{{$@L=;eW!j(h{)wy*eDreH zYVuev?av1Yr~R4kFYw%tu7|c4wWpG%$I_nagyX(R*MnmLlchbaRh-9fXfr01Zw4P- zPbfl2$f-Ti3e7v-2NF*08KQAZdol>8{`r+~Us%@d*+)3-50?q2@(&27^0a?a|I_)i z4dm6!#Xg1!?Wgj%ufc?z%F}tWK5WzVm{1rJ%G3FIhC)?N=jTNNzD~e*3iuHLzaZeZ z1^l^yE7#Xx8`jGgK6-s!C0K!E$uXi%=j~uYm+wuuFX2N49B-Mxg!-u-CDLBw2Kd(X zUnlYn34bTx9dW=xLj6>}zkrVuaQf^qs^_{u{*{0ihTk=q&>lS2((C0)INd*1C!Fpd z4TMww^dQ`y=zaUP2{;}bV8VKJhmWqm7(z(M>9})KsLH9GiG)*o z=pGKt-}pb`s6G8PfXS>u3ZDD%8D)?@K|A+8V`|QEY2$ZY# zIZSYsdvw5g;$d=+7hL70&1*V-YI*M$JrzF^vKXl692_Q>V=M#lr8o@d8ipZG&oVL) z*Y&xMdre3)KG%^Lf%IyJ0f&~}?|edV<}p4xuc`gN9_UG{_W!ovY}>}?3Bh&T{(cJn zuPOMl6gxkef>($7rJhO=VwI>l&kgiw*jZR zJj|Z|AUN|F{+RI5`udUJT3@dSuJczpcrwteD_zY0s|<1Ct%BS7lX#2ZRUuA%h2XaC zBECxSnh+=6Cb&IsA>J-{U5FFU32yy}_;SJ7M;M6rxS0QE_rJuu1YaKF#5)CFE%;i& zjVI}Q1z#uhR|vjd@NU8H7W|`v-y`@Xf^QPsbR+bD;5Jqe8WH^R5a;P>!7mnko8Y!) zAoRT8eId@%_7JBXZ0;kpLvUNmIf#S^JlV4vUY84gDS;695ds5G(_GB|s}bDR>P)fq z1Cy;Th-ZcVN&+F+I)Tak2I6ev5Amx6?-4#W_A+^$;MWWNdckiH+}?j>@{NMuE%eg` zzen&B1m7fhjo?)w&auSSmW1l~4}th(7xVwDjS)XUaI+!t0|ozbh!a0Z@a=-XPw**0 zPtw0%aH~h+Qv~l6`VRb`QwpCxreGp?_2GLj||JJ7xVvqDEN_rSB3GJ$wvv!J=7S8PjxZ>Z@u703;wL&9};{DCl3Vj zImX5OzvY5g3!W4FSix@*{KJBOUhv}t-z2z>4+nA)hCqF^U(Xa=+dtp8WFWn^|8EPf z?SH&|NYi#$jp5_$7wSHNao^YIuB=5Herm!lack}Fxq3Y9!$&}*jD)#-*euhX?c1I; z?N^)AA^*t`0Q*v?ZFQ6cUqt=6_GU?B+>%$dceVGzJJGo5J^d>>J6atX6yYYL&F$;B zfoD%|$Cb^!EnRKlnmc}WwO>_G-d%(pY(dXUoT6<{`6-bYFZNYY;d3L|q&1Z$!8C3M zT&P$ivkliG)3Q08f*&U@*b(O1*A?x38xwCIKJoLWbR~g&*2d!**h>(~ww7EAOEbNwW3;#l6_!*QU$b#2dhQb_{R7-e$T@5{A2V%vRrg_G6X z(%I>EW0nHO7`XP~zq6DYdk>=bZW7*9u!NbQ`KrbB3*2X%qJtSudsy3w&P;s2=W(+5 zw#{wK`&N% z7+koqcz^Ge?K=7=*|>!Ky(`m`vkwOD?@i7vwYvf-8ZO6_uJ%DO9tzEaQX%8ct>X2ldwI!s{*5aalQqF>%3fqo{mKNWH zJQ~?nh7>!~T32CuP%RVZAdU%~g}IM8y7^V@>w2*Ci53^!$b1}iNfPN{8=r>{$N%5h z`8<>P*S-AnYq#jue|%Vv@JFO;2)9!aM4ws2c8?Grsf%6PWw=eS%gnvFk9n{BeCDO0 zQZEqabGA57lGKEogpGl|0cYMam4|D)2YqLcWchaox~g!tQ(XQI$luNzPy~He%IkRf zpH7iq!ygF|vi{`W1=|<#xcuM4C`sk#d-@C&{uKR>%YPI3lghs?$hUUR@{?Cw{^XSY zw>-#yGLq~garyg#E=m5zAipZqBjxk?R9ybeDe`Lq)A9QM^(pc<@ka@SjsE29&*xon z`D;`9-^L)nD&)6Qy!@+E`d{5iK1ViWWcm60EH3}EDe~=kN_EI@r?~t(Qsm!~AfM0U z;`09-SW^4j9?Eae3)AG^iG-y3-d{X)O{Sw1Ae~SLc?cap_N#(Bz^0oc*`D0xE8!7T@!i4%pB-uye@?T4l-!#k9 zub2ME=b3T&U&j2NRQ@WoD+c>s$zPR@e_urYr1Ec@?Q?7l;|T441dh1;Q&ZZ16$fjC zaPk-UA20t&DeZsx={}3r|51SA@}EjsztjZ5S4NV3Brbn5@+XylU67v*`C0y>am3}b znv?9mDahY5(v!zlzKeSpH*i z#O0q210>0>;be)hKIHdTrS-o6`IF@DIK$_#{FHwjj=21XVc;bBoA&ehcluNGKW_i~ zkv~cPy0d(iaw$Kbf5+wL)8vPVe|03;N8cVeDtUvyq9hZN0O8;FR1dUhz1u6Y^QyqjM zX!*IMh|6zD89&zt`9|-U;a|M`m!yoJPuKYzDxXt|@iYAXl>W0Z2(tHiJhxK$-%6?f z?LmH%wBOkY^7-C!QvFwkia*x`hjYCA&mnVC{nyO#88(J|tp8JS#LGV`rT_E<`L-WL zU{hlM8OWa`eEs7MI_jV*gFyM^xMQB29iziv6qS`5f7hk>x)VM_m3jXunDJ z-}pYCalHAvANiBY-xK6NfOH1Rufq|S|I5(+**7)Z8h*63-+e7DnA7P@jPGL;3(Eu} z%Z!8{cOS3}A;shyA$`jx>0iCjQ#>CSQ~$X*EWh=iNl2%N8c!bmUl)EX{$hmqh^b@e zWnuh{k!9YmKPpS2^RmI2DIxz9v=0rYzhOT|{-p9}&JGk(ewxJcTlrr? z{e>zvmhN0LHC*oF&(xcB9M2EmU8l^dDukLsw93c*|C49VbSX1VoITScyY9Pd`$vK< zIMumm9opjr=bLB=wpp!#D}x4XrMeZaM3|i2I>~8Iz?G8`H}GUPU=#T42JAPA{oY?A zEp{d6-j`ozHsDp+4NIr)likobwYqj^L;iV3LxMaBus>)ux8HR8QTmPU=|F(HGk0cN znGxF|lZ(qn_ygJD1G!`5qj$l84h@^8pYBPD_oC(tC=Q2Kez(@!fJEC-XNOOp>XQBD z>NRoSO>Xa58U%h6-pvkQR>g9cg9D0o-PB3c3>$9xaVYsw7w;fl_l+y?vJihi?jX5^h@e#>J~L9vS|c7|_soAbj*PTo06$p4Gu z#@#cp=V<>$1MgJ!@8$Mg^-{c8YD(=`k;hBNW?+%T)p{rv4=BS#m!E@DvEcvLHAL{F-*YCo$ ztFi@E6_s_%D~=tUx*ibXO%=z^o7#g&9V5#tDgkCID=M2nxU8n)*h{8@V(C<*HcrJQ zIzUldM@wdFMVs~|VkJHd&e;u@aEn=Ac>_;RK-3&C#jAA$S#< ze+X@W`mKF#Uf9e$@)GeZvWA-D(ic))&0z=hM@KBlSKYoCSEQL^m)rb{*lqs7%|=%H zM*YCf%3R;rwMk9kZwh1y-DYfIQl5t_PeS8yW%MF_>-0N7W54g4o?u$CQm zP?>#yh_(2agG0r*a#y#_!H;*1ZVe>!#G5>UM-v!TIaP;zSw)MH%7ixEUMKC78g_9qT z(54;edZX(w*v$O0E#T%uVtMEt&AWMmF95WsJK!hkqAjki7rch~{N8sNMxx+a%-pDO zU_90Ng}b2&?D{=Bq&DOi02s;bZ(ClQ&y9)jcNSVJcHe#@_%CDm=*7mYjJ_N7SNhC2 zio6c9=IM&+Tw76P?=Ir9Ev{4Bg%vz1Kl&>t$53@~dwBc))4;oXa+^ zS-)>DXWW6Axqo^6*4?i{#I2-ElCO;X)<=<$!T#1^1hM4Wk%6-^x#zM2H!jcgWB>3U z7(KSh#t06}571@UWlk~hzZ+V*Dli7F1pm*}|Gw2gX zb?w>_Z6k4eqCYIG$_}ra!Zuc3`&PP)?-a|pE?I_WSGU?)bkW}IvkLSO2rl9VI;F_)(K>fA9yS#BAvIrgqSXgWT}y+&^_<{LOEH zmjh=LIu&BZZ$KROzz+6>9HAH{nq9-^TJciW~bI8TzO)SK6v!=h(I^Y zqF(&y?EoHO%jHD4yfA$ajoi?;A-l)G$bLi5R5WbfyrV4J`gB-IptNw{;y9yMHZqeR z8#lkU&%pKx1*$M8f#{fmZN&_~fnyuIBr4#>rZSnb#uu0_z1W=EU+2j`^bJJ2mRv25~t;`>pjobER~duV6l6kaf z^K!peIYtccWDw~LHa=i{W{*40tDlEgP_+CcMX;RpXMZy*W2ZO!*i zWSjSc)Gdc?`f&r-#q>pL9o4G`UqKfvsi)%}Iw~`B+pOb#kIl>f2E$-*GFH^TtJ%L} ztAET1v+MKE(v|A(x#$x&Nmva%SwHZniT#VSd2GLrVz65~-=c4gZiGT!|Kg!;Dk{$5 zwJ-R=uE_D^=x(SKYn86IWkGKMJ3H28bQgfdlV3oh>xKJ?ia|bjm_PKg)23qZNL)oa zz18R(F6~4UUT>OlP&o-iClq z%*tb0wIAi!^%L3U@5wo}prBJ$Q~a(i#{t%|b&jVs&n|b;jmGZ4*|us7AL6wnX;V zp%I!84z`d96_Hf8OJU5Sx-D{?!Ql(*YG+k9C;#%n^DP6@aDVx$hb}P0t*z8kz@`bK zH6^Z#G7oV`l?6xSD~7ikmty*X*G{hI@;~tkW3*W42bxf0xht(3BI)wrw9Xmhli)0* zz;ZV>_B9ULCcEh*@+-PHSQnu6L*;rSj=i+v4{@lztJ?&jfmNZt)pIg<^ zxvIOjBe!~OMqM>DxA2uxxN3l_1-uN6mz$g0+FQHZ=)1sx_AUildRx}c$X(qNQSi0r zh@`oPx!h~m^nT#3dYC0(5Rl=!shR%1_Gzu%D_dG~-M!ORcDAgF$UD~dbob_(SN3+V z&9rql;}xN^=U>FPtKt8l30d)y_O!F{hIf;D5!*%Q&z-lVep(adwCCD;`!YxOomy3W zbXyf(aXogg%+Vk2qfBns$Y}ox#O^}-8mP103 zcW32CJ{ach*F<*@aKrEiIu8hb0%n7R?>R8I?~SAV)vIg%9wwVD+F+YTSmF@&El-QH}Je4yWnIo7?VZ2+n9A^;0czcY?&hNtmAr4;m)nIX7eyr;l%*NEyzB@OYWP#NMI`_n}hv`&Bhr+FF9}=fA zudBo0)5Ls8^r)|fvLh3H2q5cB9M=W@&mbP!e5pT<2c^5fGyZr;!4w_sBrOclsu}w}3q0#v?>oKNDqdYu9&yRXF;iJTd;eaTMoIIk~O} zx-?Xi3k|UIMENDxjYCNJy2A^t;BYc5$GX zh4QoO!L4Z!U*&KZBLv$kWz_LEs~6_M3!Oek7xfV@2B85VH``M|2+C>68<{+V-nt-qR;D4E{UGc z!;)~m1Du5CQ}81(ASBU0nxa2{LrtRpBJj!LyT#U4_hQIPqOZmHnS{TKAt?#JHbws> zDS956LO+sHUo|Oq{%wjrtttF}orr{I^T*yn>O_4s0nK0PV; zsj%l{@$q9TiK|oOUYVljwiGi&Pg45JcT@2DQ`+GfDR$T+MbCvP{bELnp8T;rsa$ua=ra%Z9ZB^3W+MszaSA>+ zrM_-VsjudgaxG2avoVFwms0R=rQn}VvGds}_;*wA1%xus`Z|fAN)N_-3Rf@u_1b1XNGv3pi|VwKjqX#5dqDd_Cd}#CgwQxZQsczf*A9 zlYuzv)aV~2h(P>W9ELwh5CPTfR;`9V>rjvLF2nF22b_Ga6P)ub1984)Vf4Qzh(P>u z9EMjDL?GUT!|*c*A`s`jx8aKkBE>H_(9>bCg#92p%cX`;+YyA!g-YxVS1;0x0zYzS-1lM*xDEJSA{#L>NU2wI( zwcEJ;&CbLp3m-h(aDnAj``hy-;%a}pPbGda4zth6!bkPtyu%RJ$DUos^;s-@R3H0R zDz4AvLa%bKNRhivaJ9qD!bj!aDY)9h%`Lqe1CfA;O#`Qcw_^%K?Y5iU8aJkUyICGQWrwjk}g0l@UP@gMsSUq+UL?C`U z4#Rak$qBCY$g#!fry|ZkK56x+Z*^3i@2J~b)nzehM~->=Ej_#78- z^3i^z^{f3z?X3E+Z!(Zi3l8INPxj(^9!6q>_&9U4haJwj!}w@>P(9}adh%C28wA&O zeu>~8L)`eYE*Qv%_jHD{E*OY^6o=veNDzVeXK)z)JV6BFY%_-cf*=BMo!4xfC*Fm_ z=xwhD;@1d%co@fMH;zR{|KWg>J}>yCg6lYQweaB>XngE9M)LW%;GYscJ%aPO0R#0Z z$6P+@8yl|0e{0N$7_J|E1u=g1;ql*(ObH85Kbwf7Z3(2c_VL3Vxx`+n(Cw z!!@4q(RO}=;720PK>9u$Mt>4P1md5@VfZ|P2*m#!hvAnIL?HfI9ENl3WgxEO26bQ{ zuHznU&Oltp2hJ%BEVkN>x-k&v*ky9>Mx23swBOzDP>*ZB+h6bw#Ep-RGpc`9=x-MK zCc(8_Iv(C7^hXK3@>hMdKdL^9h0jdkqvM9wi`uh2(8uj*^9AvJg}>exs6E-X8E9v< zC(Fn{T*r;ScBsd7+;~KAoxgSnem>$>FMCTr+Dq`sg6}Q(p@Q!z_=y3ho;uE)D)jpZ zeS^?nAh?ZJv>Ol8vrYJv3Eq>!hdzcGsLxUy#z)61rWyX#6#joFd{ob81Xuq5DtNQ- z=lib=l&S6TNWs}QOdmd%V<5e@xB7tdr2RK5xVE?RgpanjRf21K>k~f8e?aIjhHTUG zPQi7&Wt(B3{@T9|cBsd-e;p?{`;_sYCHP9g=LkM1IO~Xka=A7$KGq-O_T*U2z+z~5 zIp;DE=NMvqD2su7)Seux8HlSrzwS_vFG1Y+Y!>`eg8xi#t@l>~9@p~?!Bx*c2p`pR ze`%lRfyVTCpWrH2`@7m_YM_tXXS(oFxm?RJF!@{;^Z%xVxZ&*E3{~#Gr=JnxJXH&R zqTn@x+Zax0w%|4w6S8@Sa!(F4JlVWM+}a-TW&DRg+<5YOIsYLLKgGrTzttg5{8Yhv z1V2sib%LKR_@r6L9ZAJ&)><_Q=^KJf)8EtWZ@BaIj{7KO5b2yIfy05RZdEH4hr!+U6 zKZmM0O*%VPwC2{Cw%B65cr$ih6%`!1_>J5BR}V}Nn(A)t^-C7lHZNIvUc=&rZrk>A z@J&T?Q~i1Mi<;*&&U2940@gM~4O^4zX0wqX{~-fPc6Q-=h46KQXomFYYlhO)@NI_s zuEO(k8m{PHnM#WfJ3OTbiGN)o8{d{B70MFqwzU&;+vi#+S9CwXK<*!vd$G`#i=sfA?XJa(4Rw8{q6;gtTGr@5p+*D6)cUr)VtP z?;BK2=QJ!{Y8T$%r8|MUuY9lpFhASLb!Vaxqy;8h)g_w1Z$sCW%`3Zm*A@%)O+`Qa zk)~+vLX%_74*n;cRWi$DJb?8ucCj*wU}q2y7Zu#=(3*~(6PhYtB{An0xTGwRGne&n6u8y`D z-77A4@y_I@7})*3K;Txr+7k-4q19mJu*4KFLTDlmF9a~SBjrX5W1 z!B>dde8t}4zDp~r4A-972>dr|MKu^tbJY;-wjEiW#c?~2H+SLtvdrA`E^1nOPP6Q+ zEdqm*ZaeKzaNAm&^Qqy!C%LP@&c(&V?po)aH~}Xfhl%tsFTk|+MP6xnHL=j{x;x>v z1mEi=r|NtYKJ_b=ib2EDw7EMYOIotb@X=u@S5}>Ul31DwzLqmdW=NB*%A>J~mDNi^8qC3 z&vG%?@BIF%^xdC2O8~KyuKmTE$ zYk9~_`Fr4q%l`$0C&_;^$lovIw^LmHi^!ZLe|C8AXm+N2G_?}>--l93@~u&hFi}EW z{&$c+Nq$q1UmeOp`FrDtm!I{MB!46@WgZQ2`FtNEN&dQNK9`n%UqEsB_oCw@$=?>3 z(qlYIO1{nucp-h>L7nz$e+deU>tGzd!>}WE=*|pOr5Oa@^?!q|MnoCav69& z6h~bCKcetS<-a?~-;bFk#O3pMv?TjipWriT{T~h}F8|z=@pn^@KVJK5Oc{Uc667C| zAb(HPb5i+7g8a`(*%^(Oe-iR1m48`~ul0Xag8b`YkRT%7c-;PbrpUiL$RE%ClTzf{CyHAC$0W!=tPe@Ke`r-XuU3>mXH zAB!Vi{@YXJ8{v56zcoevJwd*fpG$(c{3R*!D+8fETV_$>!hORt%q$@; ze|?Jld%}-DRV*9=<@0x7V*j?hj>|tGW&T{2Ab&RU z$K}6^!Y7r#Dag0)zA2j_F8`0noK*hEw+!Z229}?{v&H3qHbs7A1#=blGVoWW^6yBI zZ@xuz{NV3)arxWP0F%mJ739xlqJ(()UqJq(^1nu7BkTzIS$_Tw7?*z%`WZ>$?W{Ej zviA%?;)1DT=U2n{7tCyAne|+(Bh(q8zl`LE%gjqD@@nkZ+89O%zqjNw)sJ3k!CA0x|rG31Zqme24hm?wdi?5%!x$iF>S zxmJG5e*p5wNL{Trs!-t)*djZFzR+jfz1&Wy%g; z@Atz)#P2a{+u-H5*!F(;`5Cvx-^al4rnkwfVsN{Qf12?jz7^;+a8&o;%I`<(_Ux{G zW`1EK$H8qb(RPE+=I29`k&2;XF#vfE#oJ%L04Waln_qGh@6r1rX~nePFMGeX7=L#m;=aFpWhl8ZmuidAWc?()6Tzv zy(;djs4a zrd=N4JEx=kFxY1*HV$88ceoj60L4h&lyMtV{Pxnp0Jb0g8*vNMWMju9$@`I!dfOK7 zY#H`9cC9iYbN)rubRIUpe=f8j>=fF+f3%sX-~F-ng{<5BQuoqLVEX7=rjc2II*lEh zMEZ7|lr1Sz!q?B}$=LhR)g1R&ok@QVHKldP@w>Pcg{u4_60o`bf%$Umb3ZdXe0F8N zeiEWJK3Z-S;H%!61h>^;dHpWT4a1kBU0?%guEMedr=e~A&c&`RN0eKr_`-z^q4~|1 z2iQ_C#})L&7P0wXVpCZ3(S|%WW`5F9kbtiOHRiE}GWUnYUYoDFl*ZN_4Fg;EXxRMg zvZx+*KE%i6MY8??K+?}Gq&r_06@xz}0d`o1(*y{BVC?NWFWS7h;+E@ZIP7wYO^;_z z)r3};aGKi;R`9{A9DZ$_evn@}H=xtNu-C#`Z&eIFNlNSq|G}VfsF4>j1aX6SPrI-( zJFp#FG(Qb@77HuuhnG&BZI&6j9SnTlu=TS!9r)R!YptL%UVXDLwjGLw1-rO;gnJZo zdE+=Gj6n37@!~^KrTI&KUlP;~t$(MxeE2VrFuDn^od(6+tYH22C??KD;=}B)kL(dK zDHlRinSQPT9EOXfY!i z=A#RYcVqr--&GPuomy`6t1@^g_Vj%Us*HXe`{o8S#!GRbN%8{9ID~vSh4!*y+7bs8 z*tA{hm!4M$h(=-WcJ=}%!WYd~^^^Z;I&Pio*7~*$IjF~DOmljjBi7cv-86F_8);!f zdFQGI1kf)3xXtB`kWc48*f4xO_tWn`$TOvrh4}z5hWv>H=up*RgXJPI4||GJX?jLYzAUgxJ7d39B99h$9>u-SNkrJL@020#^_J73@Cx6YW`fXLZQ=G_g@&D2VNyj@_|8fDOurcOTd>A@@;im%j!>nQswe%Zn$M zEwD*{V<>0Q5b#qIZnIxeF-ISQJaXkG?eOU07RHVZ_F#8s$nKwM7ueeQ+OWj&TV3a( zBq)$OW-CTK)?Z)wSliYzNJjh*wg-0Jt%>^29-D3KlJxzJ>FYb%*T5s1fP;QE4cY>r z*t19md%Is)e?k5E^-Jlm2u_t2`n4F>0oj4snTo;JU2GjE%bz3a+~b^sIpUd$!7(Nc zPjF4_XD+^uwy79=&RsO%0#r}(V&G~rpaF+#YM=9E!M5Qp>&YlZ!|(#QMySKYw60tz zunjx64QFFN-BW?W&oO6k?O8F{i~nc1#r6=VQ}6-Bvhv~MZhGg_n1L#8-M26g71i|| z!@cc33DriY6egh}+V_Lj)*3~#!J|`)x%7ccR0Flx()?xYY7VC_Z}>gqr@(cCD?66c z)^V+Vt)eitdh>9MaxrtH&E| zM^6JYZ{|?j9k9E#Th2WxVgTQ&*XnJp|N%IpBwHgWL1eN3pS)4Tojcr z%KvKgZweDpQKfyYl;7wqsOAlUcI9su-hrHGs5pZ^wN?zC0-mZN7S#6 z(8MF36>OZh&BqM|JYo!=m~DNk;gqcv8)gD<`_D(k&VjQ-uvCvguDcu<>__{ISXM6T z=o6$ocqJIU+)5O)92cRErMDa#;aHO|W^vo#2U9}GVK{jO!ySEuuxJ>Jn)L`fC!2Is z9ixY1$WIc?duZWz12i0^WgD^Fgzu7y!4KhL_{4e)Kc_rZaU1W8>W9ynbjs5ew>{(H zdz`Yl;|{&+3P-!YCo=&{b$eqyLPg zB<%;Gy>q_Oh(&(Xme26x3zbUBba!!)IlhctoBUT)hqg`+B+=;GATg00iYuB$c{tSi;12p?guGdWrTY%CfOcnY>O`~sU@T~IC zw@sNSODiU^cOQDh@N9l=jT_SW+_qu(GDtof#}(z-Ryds6>We;%8;(}+Z{(d%{p^N; z8>-MT=~)A8{ko}|3JkcJiBE8yQrzN}rK$2<=*I(X)JePF@?x5)xW8uL6*$DA_R)PJ z*bX;A3Ea&5%-uQJGLFsWdY2mxTF@yyZ=$qJqkj5_A&7b?Kwm z;NNIZ3i(Aw?rHO+Jv3#|ySJFu`Cs^tlur2_&?dJh`o3_AM+z1=mlw7!RG_VRhfPbY)RCEv8^;DZTUK!&9RRvBScg*9l!&^J69u?{l` zGknS?6?`C7xQBJt??}RR9VhUpA7T0q6O`-I1MA@aaOm$GBP0aLAj(2`G#R)iQ8Bd7 zA2703;9rt4e@A1Un$ni{w$+$#_eD>~MsH4O)O^>(Ns5}TTLB#i8IA5SiY*=d_;=-7 z$%;({o3Wcw!X>QYIm3Gl?3kGA;Jw8fSZHVfDe#)+YfDWx!UX4YinlkR0^y=%OH%2V znXY!baUHUZeii@RYW-q3HVh(A)o}jf_}WSbDr#v@ z9PwLw@(MqXW)C$G5Vv$uUwSHRiW_k61;nx4iFK`19d9J@_AjE{9P! zdjh5I!)DRZS$mQ(KW7&5t#zH+XKYSVjxSmc$o848)=aS?z!#cxcew>L5(@Wka54Ei zcXy^H$Bjl-tzI$sLqC$xomBavVYpCzBlvwZmw4Pwp<&?0N=&rZPsvSln!^>VUqM9= zEnbEW4a4VD4xBQffAZEkS6^d$y1T!yVyn;3uWT4@#@!npzU~F4Hq)w0yw+_THo`+S zjy-OmgJ37tJ8s+;B+fr$Q04kC0vc8HJcQ5op(!7;R16-B3vYEkd%4jw%m#Tc76!zj z10urWG5cjyPxAD*#VW2aFpVwovWi*I34+6mem+TFa(~}wJ=5!9->84FvUXc^%Jf|1 z%_%evyESz8le{~0uH`PRciwiBH2N1v8Le}7aCrJOj6v*{WvrT^XL5fIGw=LoH2&M` z*DtD>NSS4e^3!9Ie5XUl8<@X(!q_KV|FOphmHgqYoQ*T`{LGqgJ`(e9!-?jUOvT^? zR#N_VZ_TZl*uQsn;94&0_>)P|Ga9x8J{jaa)!fSZ{2u%bf$K6~CMI)pbv#!=)nXb& zB0SLfMAKn-Zp}Rt`VYnGbV|eURn~m*$eOu_kedV(`_Ff|8uAPMD)BZZ^v!hr<|PO; zk8sTN1&U<*Lc7ln{2ULypMg$@V@(*mB}N7JgNJvV<|L58?@`YB{F7s+cuk8N%O1Gz zb9mHPioDoikZ`wJeA@4ysCyrz51wWD?BQr#1eh;LKPt|1&kri&?!t<-*vB$QT5t_E z+Mn_S;h+-oqG=jRk2a)aJr!A#`&X4P9cxIkRkcv~{^C}O$0X67V6=ta8g;DEd$BHH zgN;HH=X-d4;ighMq%wJjR{ z5PoycUDDuOqUT>U=bT(it{HtAiX|0liK!4RbBeTxO?I9Gx^~w2h1;4P*viM>A_{Kp zu-c1_y06NpJ1}qR>IobZzPu>^p|LL}>2y(vPOj;!Lj8vU>_a)+J-_PmLhsQFI1V|+ zyvpLr+sm!Fj>`@oPWP8bVT_oP!L#lBk1h1YffJ3H^pec(h^o%utGl{>o?@w&GnS^y@DrHIP3ysz@W(K=^c$ znOs;BSURB(-Df$t9z&^jb1Tgx-uD}&*OrWuIm9)k>ghCcJ{9$a1d+|Cq2|gPyM&9=daMDbg* zc_4DUhv)n?0hE3wDeS<%z@h?Ub~>{v_i zmmkD^a5*wGY+X>!W^1XqBY`#QWTDQ2@1BJicI@YJd$?a%@)P}F!WJ;RM-(R~rYpeq zw*-$1z~(p%f#h*iFm1Ro!Z6|QLmTs_@z*5&;+Bat;LkdBY??Rtx7|;az2K?;>j6ql2+YcF$<-E#ov~R5_X3%} zbpClu@M$`B_9$EyJ6pw9_wcn^^ksQ_tNRGpZ%7eOS(B8;T}|9~zR6iNS@Vb8DP-G` zUD}1kZOc;F(xPP3i}=1Q9W#peZSkM#FKO^Qrz|_A`Q#bRP4gEotzUf3qK5j$%$nNF zni-ijCuV%o+$?N27nW>Tvb14t^U@2?!KbF~v;Lmx-Cc89`a1eDJ=1eN7VC*(?t|*g zm2m&s(cP6<+0owF)-W&QKHSf&Xz6RuxSc{W=5#j5ThK7SaUSR#{ZhKM?U|0R;PIV* z&-B*SExpaTtGZ3K^Uu3rex@a}BGcF2-j=ztrL(_%I=2L9^V%Qr{1}snKW6v7r3K#xt&&K{XlFe`aK#*UZbEgLPJ@^c#BR*O$Mtup{B=KM` zF_gv7@%qoM_QU@vo%OG{K5>1+EBl2~#4{99ieoW4tT2*8j4rKQyQ*)=xD(@_tVAiA zriTqooU0j1a~30MeByStT>L>cDWnyHKh-9MGa z@Kzt+?j`vH5Z5P8$G0q!LRvlYRg9#NMjxk5qcgT~d&S#LNqdhA*v0Gd^e{GYeGE_2 zH{S27EQ6iX7+QMDIZfZ&WAth4jn4E=wd4P#zM@&~LxL@A3@26-FtZ=Ac?opO60pvM zyz3L_?nt1!CxPzU3D~xTye}uv?MT4(36-hktxCXVCSchF?2-hGKUy=Gj4a}|k30Rs z?u!56vi)Ym8SWf$kL!GH_f#YMw!oji{L}w%!H;m+vNVB9w$`A>oNP<~gK*|ob zIt-j!$ScwpbpU^^%v;#5%Enu8|k-( zbhj^WBqL^%{$iUze1`UaI^^Zsvn6&}X?B6jXC$AF!}hMcFtii+8c*`U{6xGU?Efsw z>@YB2gt)Ko6;|CDj)luYx*IPRusyV)v|HRhsJW1KLXqs^a+V!Fp}3&n$#QNAdHLH_ zp`7#fTOQoX|4IDUb8Olk=&2I}vEKzOoE%o}Zma!%I;3M;<9Fx`?!5?KAHiq#Cnv%y zw?oR2PTFjs-N+26+j;vnp$qh|1ELo+UFaf6qWoN-WnKniwdaE zg5LoCN6Gr~VF;T5?-;B@hVV&YhI^G0=bJ$cwnxOR?pwr+=cG4%L~=n}K2-`tO9yr4jwQ5If27xj4dShuEGDzqSOw+3~+V!tV~T4QLM& zW!G72KgR%{;Jg5MLgW9Y`v$lp;SYu!%M|8|2t=ez=BZ-5Fi#cZ zoXtx^nT+R}T9zq{=f!wo9x2B8u3%{>%M`|EO)Zmotr#!NYsGkBelNxg^Sj}*G38X+ zg`6+Mx+n?%bqf8vSl=YkufqJ8gx{Wm52x@SNa24$3ZE+>G)eB`Dg4uX$8X#>na{iw zJ`+>)nT+*Jl0Mg_(EkMMkRnk)3eUr?MSq;^yxMs}TR(GW zfyvR`Sb_dt$EUD)aIj8&mMFq~O0u z>AwRh?R-uO{?iov_bK>ia6djdb4+9h_v{f@zeT^8>~_`jN$xo!qMu9QvsX&FZcpit zZ=gbx?EH8N|NBz->`amSiYwP~QMuf+OBY>NF?r||De(dY4${@9q( zezv9X|IZYC_!@AM-Pk{pa6Sh~!uL$E^RX%V?3tqf%_%sajVH<7mNKq>AVr_QOc|eB zA$M}-=%^l%-35NpI5~4v34U#gKDVXV`7~`Ju35M6Xc?X>=M*o_lN9D)xJJ3ib%l(>r77Ush z4(G1IJ{W)QojEykg2DcG16+N~;ip8n`LyG{c9S!O`&suJ0I(fck4?_lQ^~?S@(m|< ze#FN;U&d9F!wb(7OrJ(4w{RcrevbhCqYf|Z@H#JWyb|Zhav$w}M*wz^<9|e;5`7%K z&7zr%drl7w=1lBgzi{-0`|Ho)n&G~b_Vaz{3DG6t^C|RJgBVtdeA9!C3tTr0;4mMB zY4mBh^0_I6&!vJZeVSaQSGkHSpES9Aiknm}#g$K*K56u6a=ErjlB>ANUH@OCzxlsN zpH{9kebUO+A#!&`|1|nE{nO~v^iQK#{i~rf1KYpW<1~l*{T7w~8o~KA+v+hV_>F>J zC-^r79}@hZ1t$#y``xWLjQ{rtA`t&N4#R&&5P|q7aTxv|1QCcoi^K381QA$X9)|BE zh(HWOMTGA;fvD$09gN<7Pm1$bpQOtFxWFgQ-`1hzqx{bnxvD>RhGHNe<$sajU(6+|FCpH>;Y`Ycwvsn24yoBh5|OzT~J7OUObMXvJi3^-3bOds`Sto&`> zrvA$3V<~*N6(s{t%I7lyCm+?*-hYepw>^fLjfd%Jd(X!CKc2$>M}lkn`KjP};ZNTK z3~_ya6>y$-m_EN3oOulYQ^4cpttbN#0&&&n;D9rmj&DZ^{Y^+S{-+DB^)grZsGc7Y zTl%CAjkM5>s`}s=1<94`LaNH6_ zd>#}&+J3$#xbpv@@KHOzAh_~>P53DPw*}Ysxfkw38Cc#w!(rw9Kni|@;M(4*Q}9`W zYq`!0c-(ID1=oIeSqh(ap;!BK3a)(mgpb-^*lJ>@p?Q`aMkk!;iGz< zEx79WQNdNujuiX~!L@zfAh_y36!5tId{2pixa$8|;iLM0U2x_9E#af}_<-Qb|4HGa z{GS(G?ej~))jn^h;AP#uI=ZdfXD5;TySkaYlV-tpY?)k`}vgMT3_E4{@QMTltOP$z*t_rKdr_! z19|9u{WOPq`{+97RKe8_^#PCDAuBkiIJ2|8;Xr-V4yyt^akYcpFO$EnSGh)IAib_v z^A7d+J&2p!PYeDxf`3VHz5ilcWg!1;IE>G81QCdT1Bc=NP7r~(+WD6b^|;#YKLQ@N zo8FJB-MDEV1Np1n4ia4Lc1XbE^=tRzgfXB=GJHa{i8J~BBkCu0`lvnwGK*~!Q#-~bf<$rt%AMWzQ5ZCim!IjTE;iG!m zb6na@>xKKWG7$eV4%3tS=rP1`d;UP2ZQJNK2)*KWrr>;@&pwDlVaen^)e;kal0KZxaxnh@Yw)< z)=m}(uKX7XAGOa?!IeMXOJQI!)IQyUEB`BnkMh4>aOMAT;iLTT5?uLzQTQl-zUR+C zO!@y^3Lkq;LVD#hlEUXZ!bkP|so>f^-$x}7Xg97gtX@76@VMLygZMxZZa^BzTqF$88n-B*ArlStz*9FG~g2`K3j0t;f{?kK3VJa2CbNb+zzO z`)?Fn`SX1thB*H(2(J9^5kAWQ+kz|qEy73J4}Ec)T;=~m;iLRt6I}WKTKFjcw**)I z6XiZp`Ovqj>7#u3euCl3=YzsW^{f$G+d20AcY*C(<*pb0D)-}ptK8d#kIMbJ;L877 z!bkZ(Ah_~>T=*#e9}BMhe=2;G|I30a|6d6o<*)bYYPZR9pSuCJvvz)%;HuBj0jDmi z&+&q*J`KW0`|lFLmH$VDkMeI3T>1A3pS2Qom;juJza;xR$pm;BkE}6r4k^wUZX%qvgF>@cV_Hb2kI+p!$5lp{4fu zO2Fg#+$*^1Ls<;uulhXW&{F<<7Q_(e{}T^8T>1Yz;Bo%H6I|{2w(y}0vztBtA*THI z3HQZu{znL|?RJXr*XMpm2Aq7><1o211pi0D&lmj5f;R`8dMf`_LVuIc^H~`~oSrlc z)JN$*;m}h0PX#*9>vFpZ2iBRqkH|oP4w%t$)Sse6Y}WAZ~V0d#)FJ zL7*p}#{^#?_?HD=Be=H1Zwk(5#U__)bq4ak9*5yi6GR}s8HeHjLJ)!Y-{3I(4T1>7 zx8N}RErJNdpTJ@GPJ#%;pTc4IVH1dYT=lf~(@C#-+Ve)@BRGuDLgAzBVR67&Up$Qd ze8D-@8{U$_XSL8PpKigGkG?mh?OETCQax`MKFa?t!Ii(hPo@0nwSgpcz7x!~F_ek=I5A=~WvpTfUGaD6^`li-I?IfS_WM+KZG)&IkStNv|*t6Y2k ziu_e>BZVR`o6?`_P_NGb;#Mv`(_RA8jY?f@?duO86-M zj|)BLER$>PpZe=_40~=*9$H`e-2NuvW9^@Ow7lB>RiE#Qo?6}?iJn^C*9BMp)-T9g z`D?#W{*y?AKs}ZJ2L)Gq9wWHQrK>guo_Lr&PZC_^+Ix?2`{;X*%IBOEK6F0B5ZAv| zaMja(M_@7!)ANcz&y(tTZNTIF_4fkhPp4Z9Jn=C8e<8T?|60J~{2vlr?Y|G1Bar^z zaTx#o2_g_zeRQ3v`W)`4y^i}LZhVdncwC>;1y_Ae68vYvXP)4y&)ET|E~?LYf|nz1 z`dkw5xIVptt3DqST-P&q3$A+Vx<%I;I!-cf`aCauv|QxL5HHs&9(K5v>&<}2%S8ua z48(O_)Aid3(oCQK$$Gd__$)@8A+ArWhaIkVzCv)d!@7XS?Qo;uDmO2Dbo@D9@MjRW z@}{+)WkSz;Rij@oxbpdo;Htmf&&Kt)^)~Se9L8VUkLv%V@K?M2L~xb+V!-2a*~b~; za)0gNlKQgyQ`V!(rQaHcIDfjKVIaNEcl_R*fw<~flfuX5_qd+*!bj~xz6^1F4)Cy( zdne*%=c5HzeU1-!oX?4ZmkA%cPo#X+rzy}ASG(;i_$`Q=KJQDx4-I%+pW}pH?K~%i zUe|$Yhs%Y}t%#dGT>CLlf5rd8p&ox7aieEnU?9Dg>p6#(;&xvaFPDvPB;9nE`c)``4b%LvXv^}eRnuT8NbB*9?pFzRZK5R1#Y(L~_`YXO71?MxdB>FbN zIcG7jIbP^u{$EXq6Sp~tklD@fTNy#9a{oP_?}s=~bs=u_cLe&Z;7dZBr`3W}?&kx2 zkKju~oG03l!T8(#{9PV)_|+lK(*uH&zuo7I2ySZtLfZu=J$;KZyyj1iztXEcKN@Iw zirdr1-zma}{ND=vs{~&c;yl%bxRtk@4Ff^#X>&dCxII4*=+&P6Bn(0Iw>2u0;`-b7 zb#eXANYMYi+CyESSN)YfuK(OXulg&!>VKIPDnb7Rflplj=KrGp_MA)g*ZPXj=c*7Vz6{4oMi7)<>$k}#yLL-@+eesj24>gxyq+L}@xLbU zzs182w=t8D>QA17fxe1~2)tb5V*a1jSF7MPA#QT*d0d>oJ$I-Q`gOvmPH^gDe6oU{ zAL2YI|8~LEo+|~f3USlZp7$xe+B0td9|!wTHwIpw;9~xt>O-3Uial2gpSV5k`D2{_ z8$q9{ke8P_e%1+2eSRJ2)t*XkI*^R?_Wos$@Ub-sp-RDRO-LxN|M6iQi|hYiosaDM z)m_zpe!}?qrJyrU8$;a6+Z5>U5?sq$6>yT-TAI*I!L@&xo}`}^Xn3-*nz*eMiJP5? zYrC@b263}3=}k}KwFE-AH=K#jFc9aF5GQ_Oi1WlX4+C*43$I_}KLp|@xtRa=rw}K8 zvf!1WeG#7}_*B7X3qD)$Qv`1m{8Yi03x1m5Il)gC{1(B_5d4RNpDDO2D6XmhS%P!_ zD+ZqG7zyDz!Rrmg`98tt2)J~1b4A=cd>UQM|9e^RMS|}Te6isB?B*}X=N!SS z1aA_&QSfsGUnjWE*S89;>)5*m*Y)asg6q7KS=+w0wdZR327*(d=I++qj5TonGrhOH zvt@d&eO+#P@VeC7ab@rpG`+F8d1ZfBYjbl#S|MNX`IMNiG)?mrJ8=?masN)DW!x2% zvWv+YEPAR&YjzU6HFKM>l72^W3G&EKAcl4U3n$i=s^Gek&n0a?R!0 zoOhl(JAJ@z{=)el5SD31{6z&`i_dRtbXO&e#Q9Z$d``pC<|Rwd zYgp{vWI1)tfg7wMR9F>z)e=J&CrFEeQ>!a8t~CW4x3%P2$Z>ja_w-^@_qAWqoXaJW z6+D|Yr&6WbYn&Wvm~lww(iPWu8U)u~>14&O+L~KeCzsmXfHk+ZuS}*0&c=*@)^u%? zJ-Mg5qYJid?OwaK9TBvbzV=-6ijHLaigPe@kLjJ=tu391B-e%bnH!(D(C*)xZ))xB zN;a*+U7`2&xGR)anM&(=N&VuBXdvHX=6q!S+@%G3xv?`=%aJiHQ4QnS*f>y3`W}Yy z*<6=T%2R9=Pb?ii(q8*}5+Adc4w7E0f^{-b{=^xPMXV@jb0u;ktZ1N#P|LasS)&&1 zTJsFFYc}Mr{VdFmn0gPg!aNjlOLJ{2KTJi~0So*HH7Pw?X?N++e3a8A^(#Is|m%*1>_Vj-=&udfqT z@0}txcXhORZx-%J;isHvLfVm39+k;lh~I~lBM?`rRD$#wS@39V5aYXefY_x6@hd0&!=;vGY( z>6CGv8#5O+)z3W}lX+`rdrMb;PeEjxUa(;}Z;s6i7xb`$b@Vk~)85-1WoJXob?0EN zt9m?3r!QQ5{xp=cbxr1+IUiwbo6)`E zazEC&^(C6MOM!7#URnAHnv2S%|eyH}g_7(lBGQKf)wRX3)V|wpxZtH7l z?&}D6TYCv!)W)3ePPWuyix$CbDOl~#Skb?dRJ`O;&941I!VkM7kxuECdVL+&v=_7Y z4nbv1Nb(ozTUS^6DzuO*V+>qhY<5mpqvEh7xMhyVy&CPS(Y4_KwIH9ZVa3(f^^20o z!MASuOf6&~-qyaVx7}gByzD2v;0X-6JR=;B4T(v_7< z1smQ>SS~NvUFlk)lu^jbNo`B!kv3{398;WkTjq%L-Cm*Fv#U1nZF=J(3KPekb>m9gueB6FN4 zN$v^{zwFuV05Cq1D`z5tJs0ObVoCDtnU~S~T!rWFcKvtOs0e{mdNiK%8#yIBEK!A{x=1Iz~bN#$RcAfMkz#moQIl=f%8 ztBoiBODXN|o&@=aCdmIyMRNJ8XcUC;Ma3M8By$@*az%fAoklFC0jLHz~cY zpCo^Ec)_olKP)0p{;@dX^6yV6|J|YCnO_<5V2GEW`$#6q-`L{mpGW^-pnSeR5SP#W zJCn*k!od>3z7OVqfgunBr=zm=PQ7Q6Q=X@6Xo{{ovam3{x0xYTg%RlJz+rH%f zs?`3hrlj(3>-RbCDf4H_=ld6N`TXrUN&a>!hG70f{8g!Z4zo$}*M*mS%zroK^L>uE z{LceOlD~@lE3MCpJijnN%?#~Brd-#MSiBrXEZ-A{;IV6%_;Kh zZtyv@{`tO1T>j(0lFDCmgwOvue~SLc%g=X~lgfY3jXukpAt%ev_gCWbZv~ble_N1$ zArmFU<$oM$N%HSn?=x)=`6-|8!^GuJOSylpIm+k1$e*JBarqoyljN_v*=M;Y zGx8_Ne>%vw`lo!}(i%U*Pu@LQe$_6@uSNbO`P&oZHzmkFBt?GBF3Nv@iu@f3^7&p_ zy!_uxv47nz%Kv(b{VP8XVF+et+MjEMxP1DJVEvcj(2x!CXDf)fUt?^4>&_FXLhuT$F3>L6ds z-;yAIeMR`7{Abr zib6SW77@lP|3N9^*8@Sm*8eK-i`V}z_DXL5bwR%A@07v6N{fW^i^z{EC<(76l)nR1 zarvJ@!IS#mwjjSc#@X^4yaD->KnxLH;@`XgJ61|G|{kGmvMt1>lPYgfnf$VCPw(|9G_Uznc%+5`yKkqzCqKyjYB)&=c~H zV0_bH`WyE5$e+~y?zzoVl!ru?|0W!k-`fB8EBrSs#?Q_*d{~9B`hEUPz1QG~=RaZA z$unnH6+%rRTIJ*Z|H(6Fx|A6wo;2%Z7hAs9jq@89Oq@`#$b`(9kzKu1|KEN~;Z>c3 z>hLUcLS{*JXlL$(Z2s-+20q&J-);?!qyyXGPyLe0O z$k=W!n%%s8Qg*|>q#K@8e(@GYLZ}@9|3hxtNujw4oU1aK{zF_YWM+*?=Irpi@^a0c z$<$x4q^TkQZg%LcTsE8kZA>dDdU7drObp6zh8EA{-k%+KqWt3e%eK_MFm@Pp-zP7x@>R5qx0-7pRWl>^G;>e!HZWne;%Ilx@tJG*vBU*@2zA=MJbH z8Q3`~xBtM-iQ}5`{Q3*)FQ`Aie(93z!0S_3*~c~Jzt@oeaYOzO(ApJiV8`ycxdS^U z<>n9Um{>7%Dr(o8W|m9NZg3AkvKtO!fgj~p;SR5T;W3URkMb^e^de?rb&gG}9Vx2P z#`5xzwK2c5G5?m!J2X-;_#CLMc@1ozuxpu~MyBDjtCKnYN;uZ%pIkJwvtsZ?VDpFG zs2KbaA`e4Lf5qPf=H-9w3y5ZPXc5P3ezU1LbPFgwS+N~H8n**S%dw?Nr2GNO;byYc zBt15XlzYk*k*)-3?Q^vw4$MD~Haz9x`b+9Bt-q|k`BFCJF|*+rpGMx?2hR8mP8CCZ zsc2rlb1FKf8~(=j(W`8J-qgy_P0+p_^M?GBCCC#ogeD!@1lEgS(jjiFuxRMzilHwc zl0}^k-N}d_NsKMB%o~Ot{kwr8H{G-)`5--;rWt;)yex^AXLERQuHnY1m97kAdcR}p zMl;c&Vu+t@J0BWb>m9d0)-6m(UR!@~=gvt#p=i<3LavmM;&<9Ev5WG5>Q*DDGU1`B7sy zv@NBS-=p3)L7JnCnc#6I@}(cMtSg6~r`Q|^naQ>GMl`%8P&MXX$v+OcRu)&7tLSQ_4yxS5zvr- zC%bjhR4S0&I&Z35hDGvfv(YeCXdX|^uiZI+=;hoYq0d@MHos+TFQkofOM%)K8f`)_ z{qtMVQgT-xEOQVdfhxy*?_;q^T^;O3>90Y@G<&d7;_}p96a5c*k2Z|4MckazX)f zwb|jB$o*DsAF~m%9FiS+Ay)w)8`ej_%IhCPi8EtmFaXNstXum6dHDf4JAC?7F98rN z>4xctxWhz{>$~y1{0_`?)iTq8DFc@?Zp}5fA^(;wU>ZFFCzusI8 z4Wkv&D90$*Zr^)NKQpS1q|!f{Qu>OauQMfXfw6sKrLP#g+0k(TK%c0K$$$lFOQ9o6 zp#HP`5_(@O>)xMucg0&1w3Fq*Cb$S)ul`YXyLtIH(QPW(ZQSyZ_a_54Vzk)9E$A=a z;w_x_=h|nor);UXb94Ub!Yv!ebJyr^2fO_5d1EttVR?4=#%0;zzU4kU8~J?@hu&59 z){~RaL0sYI;`Rb5pLG}4I{NIe@AVD&1wOGK*}!Ou_LmlimHEyzd@U@vGq>1DB0Fvd zl^rh24xe2t>gDpv@uKcFW@>q5VN5E$}L$SpP&7?!@vzwG8Kbg0`3$;?rN8t>nP-| zw%jb*4GqJv!7%Xk%UL8q7)x;v_TtWMh&R^_zH#+_!*gru^9yQ*=g!1w=J4D~oGORs zo{rP$xOK`7JcXvUr0%hD6N#KhHw^DiZq;a}Q2v?R;RF9(Htga zxr0&0{tF8;a_tLe+=0v$cWfD}$3qj0IvBD!NLOZCD?Ojez=BgCN;cUVKq0Fkc2jv7 zt?c!y#sdPH*=czo;KD*HQkTjeNM)x4NthMw_MW$w=*J_uWl-)wR?sylM#T`<#ncxa z!RuQEeX|?Ta>%X9RS~jP3~}`FSH+$Ez%ndXIl?3*?ukT)+v1kX)v+6Cwy+p>8iut2 zBrVqNLvaPTEQ>~>LiHI#w9&u~1O9f< z+WKbT^(y~}rUC09G!#B(K^6ElZ>V3IejhGH&HgZVzbh*iK#lp|__E~vqVLdbE2;CZ z(#~Ne2Kv3S!-q^AJF9l**vuq@&av|Ni8of7u#kf~t_4-adMZ^e4H){~J5x!>k zmk|hqe^J=I=qi(G?Y+7u*L^~JEB^5DdFz_?t~PviXy2~8&$jW&ocmv}pnTCr(^|K7W&e?`V^xYFO(KFz*ApXR;~CwI1`_0m1mY9mW_}EA3h>%}F^{h?yVo|aJE`WB=9bP?_z+zwTw2eX*1p-9NCSRd z+vdNtg^nv*`a5$Ohxz~0@R4&agRO(Q*Y@J`2C;1jy9ZJ*}8?#yue zla^L|U5R`htb%z8P&YQ_ZNA|)lg)1`t6M4sDn){Zx@Ws7ZB;!661s_*hZj|D_ zKX1Vag?6@g5~j7TZpR1Snfk7_-tLaJs_I#@YG>A*bjtBn_*A*Qt*X1Ls&{7X$+fdj zY^^=Es%e((E!-v9r9 zKE~Yn-gD16_uM;o?#wfDPfI!Z<*0LOA*>VI2i;(Ap`f%tW`=@1+S}0oJrv{-3}>_z z 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�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 yj<1Lg& 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

      6qj=}pfQRsK_r$UUIWQB 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 z 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 z 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%0DAGtF`hZ#J+`rxUIK~2_g`; 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

      ?aQPk1<8l{BkM~&(Yxc`yICh`AM133GpzV! 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
      #)rl`J8!DD+$#@s3uaT;~9KSw8TS2EX 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 z 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%0AYtpsCjKHJvFq%JmG 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

      yt@R=oOVE53Ix0Oy#Oi=|% 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

      mg>6`ni9qJO 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 z zEWCT0U!R3iqPWdn#yOI{OX%++kFIEL{`&#p@<_V8C07}4)4qmmd_Awt-r{K!_IIxb zLl?w|;I?n3=_Bafh+*p11yQf)C0?Fw$zp_%!|(smUy=8LvnXENP1rhJ%psgS!`!0i zcv=EX3O)|#&yTS-!(>f-r1WERvWh0ojry9}8@4=rB;n;Ey-MXqTfQ{Uqm+*m(y6g! zVNV2HYgsstY7d9>q=v6B;{uL^gnK9oLBciRDp(?1nCwTdePj0Xe^ps_d-FFo)ptL(Pl70#$LD!a|r@V&}is0iO= z4Y$x?6GZr0YxpYVZh$DCrKGr~;?ENCsmOrCfO1(18i8k(9rO3)%hJ#nMEZP7u-#te zZi@X*w^V?_%qegxWH<-;vgBGNa^VQ0T$YWEH&>Niu_f3_f0e2^e3vymR=Il?vSF27 zr8V53>~RkvL}fQm4(G$ErQ*j#zvo&rSh~ktU6tK4)^JPuFHx~%_kcB=^&j~t8UOc)aHikoi^Go;d~2?Cp!9Rl*0c+lR{<%KFKZ3bo*`rpyf*AOCPnQBOY2E0-nT3t$H# zURsRyuZ;5X|6cSv*OJWI{x)dLqTMum&PJ!CG1h2H^BP36Hd@0i#XlsPb)PldlD^tW zo;t0w0`yWIP@WbR_((=re|?3vP8My=vSzXrb{uW}TI1u%5I0_S&_z%#EdVFt11V+o zBE3|t%*i*((lH57m%@l}J``x3#s=x7iLR8sCJKgY7?bP*AHTt%_Pp%IS&Ffa*+QDL zq`+6YprOmD#Xiy?{6{wbt0MW}yOR65(!q@w!dI{hbGjWGE_T#i=^l2a`c#ciOb=1c zq`Tr%MR@XE;iWD+$3yb-hlbX2bMDvB)|v2rx>`dzjF#jMTw5N!A+B_poAHSY=^jTf zk7_6#Gm=_U!9YK|=Q;e$!(INmzJN%Gg>axVthocs?Kaji7Gc%D7Khlx#{bzRw)7Wh zWkwhvg%F7|8bN?&Us?fRh$B&8!>=s3tD?@Z&Wc2ssHiixv!aOaK)iNqZf96$DI!di z(itmCi62-A#=W(_BL-GN;=qq0uZR`d8r;A}mUC#};#UmL2u*gdl8(d9E-3)TeyT`G zCx$6On|)XNI>S2KC&ENUow1^}N@vvD*}mP**|zNyu_9X?r|TS-w&iz^Zf96$y&_B$ z&>7oVO7lZ7LhY9RStvahonn=Iaj%ycxqi%{j; z!0sk4Y}4?>Scqsxj*g`9zfBIL07po<8ngPk>*Q3}QDx3iJq>=mU;s59gf(o&Q&3J1 zSh5wW@2_AgH~y52pF0qv@sAp z2~3qIgoWDspG~(J3{f8DuyqPp24x&uK%-@UEY()<~>Eci&e$?`iuTAuU~ZY^8e{m6|d}vZm+CrH7~h^ z1^PZbkGB1nDx2wJ-)sQt@OPSVRB5Eh!De%Ob?>lkj_PB`(LSeG{(@@c49G#5Z^il2 zpHBjAHsuv(y?A*a(7TtS14(02yNTydXi?8Npl!Ja%FkcW>;Ik}ND-E$din8`}SgOYd{7xL81uQF|t1>bMD%1^wGx=r*w;io-Vga4+ z3M&7B0ct93Gr`&D{c60U8eUZMptKOrlJdGYU}rLW;%%qR{4cRFv{5oHe9ynExOY)#eZae1e|60rJq}wGgUp zAb7F+51OmVbVF=`3E6fS+;*h&gR;QEV5HrKv=Qa;?mJfZ1F6HQ^0}atok&%URN1S- z;kjT`1oS94s1ZSx9CV@7AC_DQ!d{24*7dtWD4y>k=Aw-FGT0zB2B!j6wk8OT;jsLL zP$wznyV}_0n1I6*P|eHXJt$X~>qKS`mc>H5YurZ=Y}@of{$wJ#(GuUDw>v z^vqNKu1652v8U0Vxn8tdi=WG!FZ-Xl8p`oRY7TQsN**_6%Kfxdn;S}b+T7lBOq=UU z-@NFrqb9#?J!tC;IG8B-R^vp^Oh7eV>USosSFVd(_HlP)i?lwXD!eSO+#YgllRK&} z@XAe*A79nw>bSOEbXk|{va?5SPdOYNgI|RnxzMcP_U`fN*PHTttNw6;k)I7wQc8Q2DLk)(p} z>W=TXO>&MLeWevR0lb7wIPsZiXG*Bl7$m$%w9SXo9!j%K-2pDI1mmpCSK&S*ASBr! zEp(C-wjVXvCOo$b#RAFr;F>kQw0pOEm;`HTQDUoKg--Q6U0VQMi!?Tp@_)uXTnblW zXU})EEv93T8vYjDx8oas{b@BNJOj>lEkEW+ezxfXOI>`Wo@z?}0?S&jXHgwItcmIZ zcE@vdgX5iisq)!rFue-g5KhfwVMJNAJKna8!ojGkISbZ}@p0L(TYCg|9!8yQl09Y6 zFUs!c>&N^@SV66WVOVuPSYOuc>(ZRUD7CMY1($`#w?h8#R+&MX>nt~C_F$hb1#V^- zfHx+=+$|x{i#!~GPd5AQGC+?d1ftJTT@n{YqtrB<83(O}W5Hcp3{tZ4mS#tHNw}vR zr8drj%1h1H;Hy^^p_vyK2ah%L|RWH=oCK+6h zBp34_8@{N6U18;WC@TMn`DkyS3fpvB?A?87<7ylW+t$qS@cO$U~g=aF;1N_#UmV6^z%kPX;=Z|8akVBq>7|8Puglts`p8(T!E? z^DB{*BId{8@fk6XCcbU(l{Puc6YbJ7H7Knfr4=bdcCqV=xHi(qSDNQSQGTAj^loBy z81-FnQJmFLo=Y zzJoITaze$ov1Jb`to==km(ET{$KK&i*F)e~)wN;grlZ#9_W+C{VG%n9cl9vP_jvTw z!8nJnOz~@HhiNqfN$c*ZhIZ=lae6wkXRFQzJN?H~gZ-%el`(3U&K%n3dO$}FjJI+u zs}tQk!X%iCiY58tbK+CF))Ix|;D|sy^!PZQvT+Y=R1tan8@!AsN8vk+{1QvpzDFFf z@H>Gb3wQxz+gZz&=h4-g;|%|^#~q4yvoLxqUD4mK=3}pGKRAZJ3G>w`>{<}s0j`O1 zj*L}He?ndERrdgCj1yhH4JQEMPGp!0r^eZnurCxGLPwY;=j(YY9Gi;iW>0%Rtn#G} zf_QGDIRe(kHTXCKe!&bjDCFz&)WJ!6LD}UUY^LWn<3$NstkV%^%<26#wv&D02V;Dt zMX;$o@&cUEzPQwxhHKF5?5{E3YnEd-N$)JRx&RCBIxjU-riR8?qCf&gqBm{tycLi63j;3AXJ`$15nz|D!xTP5!(F#>to^p7n|rOs43u z=<};c)gHP9BmZHQCmnxpztWY0;njLiLyVlT^E1=V!MqHBLGfnnB!e|>&NMc%2fK;F z9u)a58nCsq=-0pjZ3dBfbUeJf?|VWic=*FXde6&u6+9|vB^vUt#V}cZ$IX-GJP+ez zr=OV$=sf~U;9`75^_@l6pw%fOa}`5$F%MXT?0H^cUt5k!cvDC!{RN~=v_j=dh8s~~ z^zP&cU(YK_Qk(bxI!e9y!?WngC$K>m9TTvmRa)$OogM4obaih)@$w7`=y*@+cx9wBwPj#c z(2U5{dnO89D?1^S1ub|3M=S~Useu~buGkO4E=SbKH@st1LLwy z$;02h_`Z&E(>ji0*3Q;EuCo!a=5O1j_cp|ea=H}sBx$|(_acwdVx6SdQm!kE`p1?Q z`}O>rwA-m=BHqkTw*jv)_$5DO23P;NL?5yCZ<4d@c7i6n!{GAh>=cTmZ)8)V{vZv1y`gtCms|76ajyRXFnUgcdR*+)7dR(4m(j zV(8Lvi1TlnaCXaiY_j`Q*n|#a_%DF%6rBe4kT(}>@e@%32%TGX`w>#B!w($V3$Kz* zoW^3=6@>e`mH4SO;>UQ@AHS6T><%AFYz%gonJ%(lK_GjB$O|iq)vf4jDoaFFaGJqZ z!0@i1xGn%Py$n(Nz^Ul^2TpMw#l^t=FgyGQV-zTUhS}2gdGbujjp&nPEju2*E|N-q zf_1hCLTv+RMoMm#>4QiFsd32$-XQBz90Yj z5>iSic>-bxzYH-XYgXm~V`BGSUmA7R(ZlCkkMPkRhS65LEb+M=q=|bL`O$T!=`K{R zUFP181<3#AGI6n-UdArU7T84(qu`+ka-c`ja>rA{GB3UAD4FlW8Bc~zi$7FK&F^FJ z6pBe2h6WP8o)V^EinHwyUHsVzS{jq^BQV^j%>{5!+f0zl8mqIY8aR-O`BBB9HCJwc zxI|NM$Ff2%J7Hfe!Y#7HV^E0v)W^q@-2>Vxt77a{!B1n`Y?wIg+cZ^2IkzIzp3D)m zbpZMw(gwqkc-=g#yaE|jc(M|z92?F%daC-;#E2vueCuEbl@SU)kZ=g3X#z!;_A@@s z6xC+fpuFb@&dvJlo-{2YNk0GLvG z7+%D4x{UOtSo>FdL-~wR<PK!fatG6cGjjXUz8Sg6bfUi$L;(-v zE+qBWp&oSkFfY#|3H}Hwn+6U8Gi=qxWJD)nWxc9=k4kGY}6C_FPu^Zu+C4rbOxyaWNN{qfPUFd z&UE(aP)wL3VLiq2{jhmq9&6wo%5e`<#nLbHqNAnEhsm(uH6I$iGS@2rFyXu`V`1&c zdlc9ouvj(NX^XcY2>6+_c4e-KQi~6^PF>@^PKgb zXRD%XZ3%3AM=%-6#8Bj9vcZc0fEl(4><>%yFbtwAJZ(pjNkG-C1yZCOdEkE)CnRACL7TB{Rr%(oR8wnfZKQVEz zxs{P1LLwQO#fGI=0zo>|<{1Rra(i>%KZB=AroNRDU?+X;N8@1u#wURMLcxN(rrlMOp{#*(jSlFnAm1A{<R@DbG?#PZv$u+ zZ*7)aKt5ngWozE(ZC&9)D%E;Uwr9>!)K#n0B@B zC-!Y?<>3+(49LTHa469`iR}ir0<=(Nz!zx`B7aB2Cb~i$5sjR9-Jr(*k21Ogh^*i1 z$vah?MQ#`Ja4mHDk&51k@;NHe`bWVTH5oW3QgGDJGrCRE;Kul5S3>P(v^-S}$ZxEo zEt<15J$ye1#kdcxOg5>e_3m9alb9y_2 z?D1*;rGY1nC(cDnpo`+%v&n&64q$>WvtW{88u*a~eV9D?Dmw;7LEy_>!g*g@=^ACZ z^UZ-3+^aR99*pQjUSI&4?|#yoe5QoCDHy|9f^Me47eN5sN+XJH<@u83P8swJqH{Jk z^aGToLv9{EzLc4VPtAt*l{L&lg3?cNFTpO-!nn=d0j4_1ge$~bH4y_xabp$9Mm7cB z4`5UPRu9G-qo5Q_9-6N-c_~4;9x@2jIv^TW-xWt@_3kd*_vLny$fJyPawdl+PlB@q zvDIybw}nDeuxQk*Kt(V=CrR;pWEjNa#K(IT1McNpje zdntAtLh)YqTxBoKHp678WR1FYsGJ+cdv3vPefHXd+kU#j{~%YvZC_mxDM?6Mk?lr0 zkyDl%8kWRZ9*(Vsu5Y@&oF^Z^9?2rC}n4?n8jEFjiF( z0%UQ(c6WvEL1`E6M7yhFT&ZQTwn+om747Ho@PC=dzvT2qvvWf3ukl%~@d<7+)ri%i zp4t$j92F#&ETPg*ob)q<8;I6f(7c>J6En4= z`|Q1lLLS+l2(52?H4&<8g;*Ke4q7?yDADny6EV%qm>J4lL(YCiBp>C0RJ1!8=*VLa zlWlZhN<#Z!o^pc*pq=YD{d3_!+yxJ>Gy?}>K$hH*HQ z+E5~IQsU;d7HsdE7X;hGr+jO3X&XYOP%a}etriP89KWFd7-JdR)i3Z%2fD32K`x54 zKtgIP4uo7g?F8!)+3Iu$E>Or@OlaiC7Pj0!THaZyd(Hxoss{uc;WtV9C(-AqlEhV0 zr+Xx(U6(g2;9u>g3^^VPbcf0(H!4gv2u(E*DmVn7CyIWt=n6{_j75d^4ZMTixA+*4 zZmc4kD_m{E9r#AQpY+m3bfy*Rb3kE~U6y{{=O6BkWx*Z|r#VRdVex2qQw~r!9l$#| zcQR1pJ`GxSsO4E+d3j|Iv2=?3?A+E$H`N@ln=d3RKXPa3EvPf(s}#=B@Jsx zb{H*C=wIoSkiRzAPMX0vJ)2fY0|G7gXgGNXCn56aq;H+yg|OXCO^@NzlfLcrR8&jU z^2mK z6Q@l~13c_S!e11pTL{3NN+}%<PZ9 z#ILziA+xYP)-7N)oxc*}tuQ!-yNv94FfOSO2!}CoY978RA6+NcF5hO{yEeXbk)dH8 zdZYtd`KVDoT5Uy-wK0BI{e29Ckxyg#78w!DKnB1gx#*3TcGoCg`HT(qGrTDsGi z%!gW>^y6{rO0-&j*A;oAaMY`98es#h+c20*z|oZEQy&C46Y^XK-jt`oACa^|T7Q=t z1`4fKzQcTSdKe2V-m2`bZF?<|5=Yx}F$UnT!cGd;yf`?mq?+38_h|^zDyZke`@!)Y zyl~Uu)6f(iUz!(6ZrhZbkVKf$Gm^zjEH;3-!E`eYeOI?xFO>>Lf<()L)k9R-pTf_8 zbO0W5eLNw-*DCmwvcAJmviGzfDKFMJT)0Rj5)D2=B&wGhNUOk8$RA&t0;e%oYX*rU z1tvcW7M!+aC1!U~GNVlteV$%_kt~H!l zN?xHL!sEp()*tB_B(7v=ojc!&16xw7B-1z@FD9%rb?-c0rku2W#}2)jog(s((D8Q4 zLI^Hn1ZUodLJghYa*3GVLOmefN4S3w@9cw_`wty}JphCo1p8q66~BCA=t^HX zJnWvw&_UO7X6e>M_N`bt8XgjPg}~XPzTI({PZ%^%r89;WMIOg)V|&IRd2aeFmN~WX z<}Ee3bP$ZA-@+-EoHWO!UBV#c1X^(ZLNV=+9n+MFsNhc1LW>-2i%!`Y&O--kd0Cj% zn#syX5HMf~M9wK6yDciJkIv(CY_)BQk#B9w9qpj}d?63TlV1cs@h^DgLpT0+-XrI2n`WowA@7`?(>$bPN`z2x3<# zI~k9RR~ZzyxH$jgM2%0%)*IqNT0W3agB3zTU7-z8^&2S>x;yLhO+7oFLY5*;KI*Jd zn%zJrt`4+gDCx+P-wO5Qzd~go)>!qF0@bv_wxA?cbr!=|TVWDyVN}(f7^J)vq}6v> z5E5z_9|>fyoj4L3>Mic9DuF$?dp`D-cq<&2eNG0~t#`N^=?f2ZD7=iUZ5KngeY3sV zh4j)Ij8z@GiM%V&ol`zC;p!YaDD1t;R{^vbcUVMHSPFqaS3M%fm#)zBUDGO5qAco^$m|W}Q=Zl(15M~|7_idK zHNljl0OYA5;jK2WuZWSqwCRq%-RVVFSjcEV!UOB_no^HpC@_cb$GHNg2$h>pVD~jA z9kIr$-|cX_)F64DbwiAN{ml)QmgWzXF+~>|KZ$^nUcMctL_7L6E3i%P${U*UfybG# zcF7kOK=^rOVFfWTaa)gZWm^edob9wUW!uQR0w09@i4G?T(np;GW-m7~zH~*Xa{4+! zAC5eHM{n6_;hwjX80zXzhH$K*{$}g?OmODo>?kF0J7Yn~m378ZksKV-=a^ zZo*CLo1Pm@kJw4xXRjoU4_3b@EU$F#tqF4wo^Lw)PQQeTV~~TkLwbIuKkz*T*%Fxk zEwC@MdqSgGq{ym}HQ>?h0?U+lRU)z-ro4C{$#=7xM~LPFJFY`qJhmM33|^pyXLo0p ze!{b2M;CX>l1S~wGud%RGxRAeuLbHfrzO;)4Ye8r+=?NQsP(Nwg_zzjk1 zc^MX#cQ1L2>}vR4?H&rGTP0S! zVi{zvo$y%b8zN3U8tCh4bl-~#^vGGI*->Wl*L(`GhNYhVBK$wyU>w%L*vWwsUB!wr zlOMl^(rZ_BtSBur4O8dS&qE^WTWF0r69RZ>JVQ9(Qjam+#XlDy*RlL$P8W^dUL5f) z^AU&MTIeYIp}x>_7MYZ>e=~2e|5Iua)+-98AAX0xwtrq21W{%$gUw54N&TPQ z3J1)Gq)P5I7(#04=A_rG&`N0=UbE=Mj}8w)_9k!;B!PxP&N_E8q@bgGAWC$xZyt#a zK~BiUcckoeEYAtR&)-B%)k7YJ3dtbYoS5)6==>FZiibp3d?BOp)to+zXMN${Ogie7Yvk%QGE4>ZR(XK&zaE?#HcxmJ}^T zD`Si1q6Bf9OXszeBgk9>J@mQTUdZZ2IUegT;`y49;V#G%>l23W!g2IRmK#+W7@a^m zJWG!<)&}4Z>!s?dM5`vsZzDMaUpsP)0{0b%)4!#d8p!&N$r(?yfR1upF;JJSu@? z+5G?N4{78tFaTRlK&>Y{9&*1epTTl-c^D?bRj(u`v3+J&Pf^nkV<%Wg>GWC7P`=3>5szJ^LJe#Kt_4% zIzh*f-%7}hTvQ_I)02N`m&ug+3+iAwvE=z=JegAc50OJ_k~Ygo>5shR5xSh*ShM}- z>O;c-M{ya+P{WM+H5=a7Qea^#!vm_B)n_1WR_=ti5+4{|ZmfU|T(vtnV+(Y4)%>gx zNm{M1$f$yBSgsGClJ{ZMCeKDe2?3pCz`Xw);RyT;F zxqORBTbBgfqxL(wYHq>*RWCF2)jWFu55$Q5<)C);V`zwf%M>8kuWu(Y;R`4$R`<$* zh#b(@tc4J{2O;w-oa3=s>|8sbRZULm8tsbY+LNE_hw4uHfTYjuL*WfDcYOt7(7!^A z_Et6I5ub+`F)X&D~N? z1yuj7b=4eo5Qe8=HQRq1G*exE?t(f`Y=HJB`2h5vLG)O&$xR&mad{`HEBwczH0laX z5L6eaEeSKw?7CCXvkd#P44^a6FWj`eJ038m-Q|F%=z6p>41J)lG-TWpnKW4bsX3aR zj^Z#Hz%~{foiOIVR*QLd@S2e+EJN3jwEYuyuyX$pycZ5#stx$!#s?&3hT6no;wgk9oi#{$YgQd5BatjsW5em*9-q#BaIjFfmSD zBr4V>V#R)SB6OVJKvM(KyF*?wu`6_(X@cY}$%lq(<9M`^CQ`!p$d+J;b`!&1fyS(V zlppM@B;o|Ej&5#iaqnW_8s^5cg$F!l{c|{TnKeBI3BL z!#Lu%`U_Ye*r_2<=Ok(ce!mCUllZ;uB(Bl4E?ZR|#z+M>nSmf+?BU3%M|0HShK z!c80n8!Mpjp8LrGZ{hgPnr_17`(kVrXRx-pSYW!S?^PdpRcJ{;{+7e2hy4{aT2Y06 z_9$tjiHzIWxx!x1VaQ&^M32g#yt6SGGIC&}!T(KoGbkamM#h$ch zK>k{jW)E$88s9e%!f3y9>>}v&nqHMES2JDMX zqG|?o!%AR@l8+nFb?dawI4`krtm$IUhmZP6Qj>_1&x1JiOUb@a*Zc5M-yW0Xy@D?_ zk*1_?k>fkVE;2Re%03X+eJyPh8ti1bw24dzhxd&uPZwdE@WxT5?tw9oygrZsee2jx zkXZi_!@P#w!dB=Yoo+3W_ki&A5%Qv%LEaj8QH?r(-F&u_!sKzYnI=NEw( zJz+4rS=?1LZo)Xq8)d{2Ucbsstgwf{wY=*&IB%VY&4|1IpfgKI8b3Folba|lSPB)` z(TC*$QLV;~-@Nq|fCPf%VU-v?UFUmXsC9lF$3w8`8s>=>m3X6p z3C`R$YBV{?^?wwjJ7Yh{RQEi_e(nM+(i0p(&fGe*!{3f_48R9j`SSqgwXj~Z9;16E zCTT)rC1%*AB0}W1X{w7>2D&B!}l$7qUfV$($fu3S^+H@$cKZ<$7APIFi6Qf!3 zYLFX+Nl|hLm9uAI?trL2<08bBRZpORnbR~_ zU3<%&l9dJ}fXr<$$;#6tYBnn3Q%1r>;LPK%{ER60OJiH#wrOLhp=xe9dm(CbuW!Es%!WQ?El& zyu3-SP3VJwCkE4^nn-x}&!qtA0rfAJQ>a|ZwhyG?Z2vQ%x^B3uI!6SCz#u@q50Ney z1EideJpl!@y3t#u7!6|6cSZ$`#He!mJYIodSTdTk+h--H@&BnD_Lf~8(8pUojx}Jk zUFo_Q(T|X>}7%oZW=!{tA)j zeKb4yD;i2`uqQ`-&r#neEv51CgP%N9)oj7@P>ZqwRh4}|K;Q6-RG)FwQBi>hR`3e|b_{uau3~V%di927J zVnxEX9znvtT8%!*28Of0HuV#)?lD8rIwapky#F<<(pHND z@Or`E%YQUWR*7q~@Yx(QI?7pex?<`g%wP5L71tbA=)|S3f#sAdrZ>bN+4)_?kgFy? zd(+bN$HcsS2Jdd8rzfS3icg9gJvlY|F;lvV!sBD5cVT|E#9LUxH#vv{S53>spUFX9 zV*EAJU~%o8wQgeXHPb*b-3P{MZeD}!8^3R%q!;lmF69=@nyM2XpJdpJo!^?u=rYVf zb6hJTuCDZRp3O^vs*CfE=izyw{MT^?$#ydVwbRvi_`AEmxVPNTN%Nwky35u_~t49G*aQHLEfNw^afW|g{PY+s66l>L% z5Yp1eb<8=mcVRJ9^caA&^j)q^k`S%MP3<3JU;yaJaz~L=7h;u1Ch_f&k`a%v+5Q(oQ(%D)V&BfftE!XQ5)=$t=80ok)06rA24Ygy$w_&R^nw@fEs z;@VT}K%6FKrqE}O3=z#mIEUw5SqBP^iAFUWL-j5*XG&$z(8&aq{imUuDhDODFC-ap zn$@#}egz8I{ZPK-A4z1s(^D%hN6j#Z33|9!%1aCK(46WiJciBajZeRio{EIMhlfy* zQyqM1v7TE>{}-IZw2^DP#EOR!oiw5L?X;J7_kTg}yhS#Kd|0HKMh0q5Ns7xZ#dOP$ zXP&D#yvCgzC_R+AY{?^}`y@Lh53hN+vnLi}^X)XP#R!R5?Wq?z(asE8$xR~z6<_o=g#xoKVp z=F4JaswOoHW7SanwGn0DRQhAAqI*~yUUa)uu+9P{o)GE-e&9aOJ#A$6Hdl(k_6S& zp;60$Yqcb@mWJ2s_)mf<_;rEw3h7A9J*^Uhel^90rsD7q(GM-+I+j5+k;|ySt2p$l z=^^z#@zbxS6Y3wt3%{AN#Ff}kx891_jEw$JCcc6`1rn_$pf4u=Zu05F`2K5kHYkg? zgQj;E>z*9%B2NBp8f1Yo+#M(bD3$56oq0qYqlTf5xXp0}xJU*&9s;P5?Rmqj-6k<< z!F(&DOYg{E*xhDZM<{&c*rC_6CqY$8;pz@Ov$mdT7jI$CboLS{1YurgeJ01s+{1VX zOvFRhReMf_yKo{kq^ubheVoZ6Tas2^R zP|`NUYI_W3{(XvM@9^?=jlzeh=&g`LxlmJ zH%83)%M{$bqwY%q)h)Q}#YDtc{xbCuQJz6CZvBs`r+SXa{>SvdxQ==9D33JAi;#z_ z{ND=#LmRn#ze?wY3eT*#A5npL3NjCKpDU$zdqTRA<&mb<3FfSd>9 z5vq`FVH+A})H~cma5x+?&Rs+--tQ7^n1{^7K?W0E>yMPtPIvh;%OZcLanTj5mAU@$z+uK>T@ea@cTx(Gb4b)g1yBEZCq8M#A6XLkDwj z=U~DDPmH)R*F8i$c4k-?$3Y02)FR(=Qx`EJOY7{5LNybW%t$1F1ML8OYysi`a82AX zP74roH;(M%NS_w{G$N*{zqhz~0sN)tA_sTe6-8zu`j&7vh5VVvlepTNSrRiQWLB3UAtpP0r?M&C3q#SjBx?hNJocvHn2*b1W1gYM$%$&JNwUEGZN|#4T3j zjhmv!rwW+BZ1^N02ABLShtN15A_(O*j`&!4?*PvITfi?!xK@PweftEx`0g!yA51?B zZkN9kSQB^GBO&Y~NII0C!1Y@FOkAY}%-e|13OH;Q?5w$dFH&=B$gUn};iU=yzS83c z*QT8U{mU^>+H=MgQ_j<6uL^Zv;+rowc9h=pG()!W+EG}B%NAxhkcbAnq) zjkuPP>1!Fz$-R|at-fOD0MOoW&3YMvtu5_b@f|t^Gi}G zEtME7hjvVL5=FnjT2|vp2slhwi|a7SY|MigV_>?vin3DNiPn4q1}0yOrfe<6l^Zb^ zcW*C29Nkv8IMJmV@v|mu2N&zsE2v}4d*0ooyX=Im?kM@kAlzl25A_fg!+}+aIs$Bf z)0z15_I`XFHf#mM=`IRw9D}>|6XQH#iLJL8MUkZ%Tpa_Ab+|d_+q>P*kHK~0R9v8C z5dX3K*sCayE;^Y-SxF4B67r;7?FxjF|L}ltz&UV|Qd|-c*Atg?oEr5v)kbg$iMamb zycvHC!yCorzS&of<2!H8!JY{m#GcT_evuBK|7z}qjw}(1ua)CTw1gfE50!(sVNCMt zMag62ZuO=#Je-W*N9B0h)1;a@%kydrzhAmH<{=qS2jXBmq6MUyaIh;hIT?#SKCK$nv7kgB>EkDJaC;@p&Y<8C^|4wuK}|MbG8T_yM&oDhCy9a4$*;jxE- zP*^M$rrEHyz2-RwFvd$fyv5y@dZPC&D21=eGXlZJivAw>CEIrf8gG?jz_sSBAYR*q zds^Hklwh2;!EN?L{&W4%3+g`#LQk=%)B+=mNBX~@6p3BJzf%b{uZ3+`N*FU|fdSSluS zH->W58k!4aE{WOtcZokc;q)}L_gl=ZfPmFLIDvdFWI66 zbw2}BG=-)qrEV_)MBazfV9BkZhlj|!Itl2}yuSMsZtaQREh@6maSje9%tO5a50!zB z;($A*=vk-El!51yxGF9dolyjGqz;3+D zn~Ac0dFCTXR^0Iy<|E?K!DhWUFxZ?bRyYoK6#E96Jw?BV%#%d)EU+2gf5_ZV z_zf{X==<-t@M8V@Q9dGK@E{+tCnw)o7(%fQo*rWEAvS~oRlA|)$s*AQ1vxibT*ZMt zn8(Y9ngi`{>nBdV4qnyGPn~fQ{{il;=LnaF`N*Yt4Z))>9?NpHv1tgR3YzZ{?hZ4QZd07zg06b$Y35Jodbvsc2+1wr+rZtG&vyb4G zx*x7#_jh|0hENT-y(e4H8XV&Jmc4%a5-c%rORqjJMrH)V&fH1}RP6tYtW|ynU#Q{9 zd)gcC-Suoh7ZDx2T&vz9P7-+T@nLKVEdON#ZvPPwDY&Di+y9uQK&SG(gV-d*VO+dg zonh3hJC2CEzl(sWGM|}nb02_>@`~1qDOjY3m`P+PZrk59zzB6Y_7->dV67$}C!S>} zsDAG_oFRk*M6L#JLPM@Y4kho^bgjBpoLmMxGLH;`D>z7#4c-(YDiIJ@o;PbXwZLOJ zvZtiusCsdevsQe3I~10prwrA*=zB_}hkdnLf{6~V0O=}mEj~CBFnJVAdBN-~`d*tB zh~w<*U;vP9+rbNGg75GF<43b`>#Zxcr`>hD|hE<)kDO=?@+zF88bcevo)}N+YiQcCr~hDZ6OXa z-{IDNz<+>4vom&%D+9og2-({M=BhXELJ`mBd5EKwdiO<~z}OxvU)V?QNAQXx+P7Nt z{T>x0obuIcZn}w`*TOgYBPruOWj1|$~`_} z`O{0C9{G#pJ zZH)Vnhuvf1+ll|PtxY<#6^c{0M)-<7ySDhKPl|gV+4(uqVO~vg@JC)v6}2V@FHyZ3 z#|jcB_e@1v`_GNe;^ZT6PG8qOQm@fqzQLcHSoK|?-tz|rY&-wY7xzAP4-{kWz_N78 zTAIa)E?Nf?C~y(?(){(}pamB3!$&=g9rqjrOy0SPb=RdQww0Q%aas=>3}M7QC%v8I zEINCfDjQ#P^OnOW(;$J&`uqhH7REl>X+mv3wu`77p9N;&eyKl@-VrmnzL+O!-qy$O>2EiT*PFyep3n4xe?Lots>|+ zOpr5g$z@n)z2<3rV7}o1z>OZ)B}6?y zMEX7u34{IM$gLW(3-Yf4<6XuljV22cAMp76Z@l%N>*y1@Vbv9WNH1g$m-NTa)%YUF ziInyyr(La~FXh(A?^I&+EOTJsUPKyiozvtDZ@aR}i-`PX;TD9g&3rMaE)#oanID>* z^9b%IVSgdk+9H>elhhR3;mR!=#Z?=r%qp504A#_9eU3q%VUSR9&kYM`suoP|{LPu} z!qBImtH@6_2dcsGPBwQ*?t*Vn=yEfLomugyO-=keq#6G_hY6t46*VHjT&f%Gt~kl? zB0=EXq${G&d&Y+ewonAlHV<^l2E@tBcH-MPW__2-2(+n+5$VV{(aF!HWbyoLvzL<> z#q^P5KB1UzQSQkHpos1o zvA$mqy@;4&b`a+&=4W-gn7(h+K$WzInvEFmS%AWwy}|;aR*Vtr z=bH8Ek)nLA+27I((!*>hWhJXM10+l%p~qe<5hcc%DJl=E}mY&Fb4m&#+~U_7xD zJO)LdEqgk3XN*df^GI7{&h(~{_culwge9o0Ug_6mz^CgU~kzrs-~URN{xye$JyrtE>)a zQ72aCGFr5}+i-w6^$AX`r&Re8+#)lRIN8j}SMgUS(7jmeZE(@r8^ALDd6xE{?4kdL zR(4OIl>Nl!*pVEswCoQZhN=qCpD{-wfdT#*`V7%`9#<7%690*&=at$S(o zD!)LpY%KBrQ1O+>Iz;D*u)-8VPRRQrdv?X3WFwOuSHk(H05Tqdb&b3fd&G=<^kFA zLOWwHhUI}HZKUl>uzb^yjNE7$%yK2s_}FZ*ojFFP0$t=aWhujlHhp=3-A6SVG1!O! zFSRgDQc0I>BcQ62s0ZYDM>g_ivng13#7UKoPzsSqPZq7DQAeg+^bPxwe1EUemA0|U ztz*{KUgI)&6g4dR*X$N4KXnP?Z`12-`MKj8=-!*LkqFL5l@1jCnR`8eV9*s;NiAB^ zwddti)_OOdL@~55*y}7sZxeaYbFHgU*+ImRLBTmNQQ0c=!e(}0bV8Pap&Z}^>hwT7a!ujXR`7xNFe)vnA%5?G;>lfiD_M3Qak=eiR zKPX!oMzqlSAU6(X3KNzVwS$Oa8#007$3^C$Uc(V)%a^6AArb&P1bs#1Vzal!7x6qn z&vJ288ZiyoRG+k(V}&VYOOhR0NCywuT7(7goVkIvk^7;f&8x5#>iu?5u|WvbaA9S5 zGgfVG1>4^atPRS@P*1i(t6o%cqv7IeVuZg)viEZq znZ5(yIAhcR`{^IXSwDeoH<)N?qj52^lKBW6=;=1Fm0BMoz-M7a!a-My$GEjuiBfTEof2xiD7MDJ4XT+L|zLc$zZnMDh>$?ykDRw*WC3wwtUU ziu|Q!zXit;CIiTwF%#M!X=(7%mdyuU7ARqy_zZ9Yc`zf5x6Y__MRYoq*SnL{;A*nr zEx}^tq_Gzx?kqJ2PAx`>Jf7RkV?lE2vxYv1??8(zlqe6w?~&H7p-8CVRB8A%Nb)Q5 z@6Y`xAdOZ3MQ(|b@5u-$8xgRo1&CyCS!p&SdzYih(w|~A&}e;EsF!0}!R*nWY)YZM zA?R3L><=KFjWrrZQabJ501^!YY^^sifRV8z^WBUdky|pVg9592DACHf-*TT}2Z3-!7tMz)V-oGJA1zu6r-d zbbGd`;6Tj$*Tu*WaqUMgOah;8Cttua6Nv!0iU0ImfUtB{Wr+GEHXzZNb&%o^uW*KY zYq)SR=||X+pprL%EcApyo2jQy_dtKxedypJg>s*lfeyff!_H+PBKcRaTr0ySLq%W> zu4P}w#pch`e0w~IyDT->-Zb6lq0N(?esX*;L`UX!pDxJ)G{2;sBgTxzRbj$JF#0p= zp*Zex)CH;^E8_8oRL#S~$Kw{a8JC94%8i;n92XxXJrFexm!iAl@m4Yx+Bh4@VnW5= zkaA{g1pX%hmpt1Wf&-HwKO9zr;KgrIQIuh+UM&0z<_G56OZE@)3>#1+sjx>~?ThSW z2_a)x3K<_P8?xjm~K9rTu0K!7MYIsrBpUIPEvW${b! z!GwX<-rB$nxzz7CJLoGv7(BH;V{z@d#z*hfjq!3;(r9qptaL!xPeVlF$9dpq`X2)M znm6ETv+fGM{gXH3Kth`=N3ivVieZ4uAZB?PfkYcXov4u@$DWrrI*C7=wBVhS-hHwb zJfGbsc7fl@s?g`bhe{?rrgG9r+fAze$)rtI`860CVST`vVGeEe55!DmWnI$N${ji$ zO5rhXV5?GjjpJ}NpLbv)7-$P00MBneFbL4?k)63D5QmmIk-IBj0#}bXw9Q+KP(1Ol zONf2wZhjVQA=a|{iLYlv1K?Ef+?wD3tG$ysrC8j z(y;TOTRC-j^BFkLbH8JNrUI#pGNZLR6`E=!XrWnWC$^+N;3vL%WR$GUoiH5Sy$s?4 zmNWyN%cv(6_WA{{Q1TJzY20+vlENa!`JTbH0z{+y52^zRHCwhS<#4+XuvyLKjo5NsOO*Ef? zILPIEC_np?SjO(#>8NrcFkm*j`(J1h>n>N@ca|yOzYTYlWiR7TwDarm?lb5m&~q_H zI4fBD??3`8ST`CW8c;rYJ2zhxM1>%TG%=_D%2LVydY^;34u0Xs=Y{q8f4(99@-IE+gg zRIw7aV(j-F{45m1wxYU5(p1hRd4`M>@B_G#n)w(cb);Kf-VgXPmSHBao~u_bcT?L7 z!zKqP6MNA}g2uC^6frkR8U7x)&dl4dU;i?C?t@vO)NFiX$090o0S ze-4?77F{=#OKWZh=^}C)ql5Z`V>6c|D@bXW$y0V2TKt)2Xv0nzJXww_KM4_^i+i!c zr~DKI!H6_0_$+fI%?{G4WJ)E!j8&TJO&){}YKh$mQ2}={!az$&%Z4xvWE#VFgGg-3 z*~?Ruz7F9WmtVmYVtXr5=YU@Tsalt0U~sVs7k_)iaRIC=$rV+5g2WT%AffRjW^{PN zbmXADs3Z%=gj{MqqgENV8X^}jK+h_dHj88fvT;HksZQ>`fNU3>Y*fgT#$1-B4bu=tyoYgk*BnD4s`jH3^_)I=l*r6;e!&?hVp~kO#9>2X*M4 zatNSsZDAvZU^&~}8%mT8J<;AYP@|kSuBc;>A7R<4mU);_QNKaY@{SfD(yZKwwM-hl zR-A{D=L4j^38Vbkr2X=+ZZ3xk`dRAzmv6`de|G_NwixG(kEVfsv`V@ZpfM;4ZF}d@V39DS3{$KTD^nC9o^gs+I+6?t zBgv4GC#f-{QW|yH7v1gJv#Usc)*LmK`Io6_D>AdwGqY1O(;rpMd@y2YYODSwM?D-r zk$)v%0+N_^+3BmZRpInk%nsG~3+GKsy@b;~uzkMU2?uY1yUeS_8@tR#68BKQuJIEQ zM>X~$^@zqnJhKf5#SDU?X#bsHko4aTnU9zUG)^M7FT8dy+iiC9wLv6pS^E6U9Fur* zxB0(f*BFDMRPO@PNJnlZ|>!cYk31}oNpA;i@ zTtbJll*Z)}@cI+RuEJ65ksz&Rv08XkxCMynTI@!Z_OrmE%eKm@eJzM{Ssf^y`Yu8I zg8)lLAZyB0u=QEXu#SQk=Rh#=Y&n!A{kvhaihdGe05~GDxJEL?grDxI)o7i>mV+qa z%JYusS3Tqo7EbY!tI9h*4!zmCjFk~R;Ja8P_~49~HyHv@`>&Gt00npd7Qq;AA%Nte z*bOUpOa(v>cp_wF#Bz$u^j`~GckpQZwJ)R)9>D!<+W6NjG{bSy3oO^L4GuTP&`ZLf|xWD%_c8urU+cWU*z6B?^*9VIHa)%HNOiWyB z!3LCfsXs(NVAI6Wg?RV)T1(Gj&!6kN5AUsx5Jx6EMT(l*(avJgM?pHrq?4+AZIF2G zJAHSd{>`lmeZZgT8S+~* z$Qatdt8C!6*uWpQ2^*CBa{a0#n*w5N!VyXax&C=J={IfCYi+^?8~9ooA*FuRB^wN{ z*%WZiCOyU`-NQC)Q{iEo@D?ddA6U|3vMC_R3B%;Ah27`^yF+hpu?d40-60*UsSe?% zZNj*?>5!go6W-o2Y*Fp#7(ueT9SXpOS%)x~avj3Y+JwQ<>yR#N!eDE*OGgjk-mP7P zN(KH=hcK={JA@b8gmF*WA^jPf@K&2Js%(R&5rQk}wg`mtZNl4Z!cWzwAjkDMpial$! zojE|f6{hJ-GKr3&AxzU(_sEhJsq+^sNL{dGQTj?a#4X!t4zf?n&RQncLyc5S|I(xr zlly4A9!Te#D-|z=sSBh~YSxm>g)8K^^vtvs3(}=1ajl=m$8X`1%=yby(pHOir4rHU z0qn3d!Zbc2+#Z`{VPDNq5%Pe>UCg?SQz=9myNP9C8duTl0ZmVFK2+oFxGFts$->9p zeD0vxU@w|G>4Mz{6S<&pGL5xi#Fh}p0QDJhBduF+T?B4K=$V86YL%0SJZzQ>af%v~ zgSV)FrAkkX?GCplgT|=e&j2gK(hixxKgAPuzQBjGqtVgo5ezj2<=qJBbxX%zj-+f@vYe;o+Xguavw8 z$rei9Olf#94f)|@yges}i{)P>{-_*&+9v*-96n$Z|D7DJvWfpilIO);o=w7Cm?sMF z>1!buEA(8Kek8o{PP{vMZc9I{@!@j3R{o_QY9R4k=+WE6C&}SZoA@*-EdKb~?CE2c z6XV(gi9MH{{3cM@o|vG|2eJSoi4bKNFBQi`{zZrdcp$r*4G;)jx{;VE*MjE>Ty#Ahq;Qgmzl zdIjDlzFdwE<#^$GY>bPAyc*CmMEYqhgWPY>6DR$&#y86GGi~DkkmDEI#FNWCdR9w6 zt>us$6CR7I*d`%N&hWHNJXznT=YaInTF^2%zRD(ky&QkuCVqz;{{_d3P2oLVEQjQ{ z>o%~}a{O(Z`1j>_txX4#5EwmroA^!;NT4UwCO$}t=h1KJCj-UV0FgHvdS=?hFO}mL z+r)2><5%0nZcrp5k<(`&08R&ow&`)xFl}-HLa{PIl_+a@``U{(QViM4E z-6lRsiXU~~oLD4hu$>b{a=h)Fcm|SuWXfBbgb4b1ok0Y^*^szFPZ#ghYfeIlSCN7i7dK}(i4WdzfVtk+p?MWD4Q|e(!baj_u4I!|trshj;ZWZH z4>asHzJmk%^|l`{aDYMVS>)4C6B!}4W;;e|wgd^2ri<^J(~p}&yNc<74#97}^QqZe z(}j3@8vMH^4*{Hy_)&`+m(70uz2)S2^2qX+`AE&M^z*sdSM4Jn`rO=KR6BU<)sG0v z=h%3sB8!(squMK%I8-W7HAWnwKw=ybE4Tb4^dJ^J*zGHvOwT?ft|fdvcNR6(skv7J)+$ z{xu}|AN?9CBo*->a%S``WH=q2*e9Fasz=M$>?4-zkLd@DZP&~Oh)4P)o7C+&XO0osf6)mxLe7F(<}>IgTfPN_Tcz}XhRmfvHq@zazNrhd4)q3=DYvM#mAp> zq^fuclFVt$VMn$}6BB06ufeBpQ?m!}9d(#VZ!j#P5aC)C(-tU0X(oy}P!A z|I42MVM%%5bk~8Xf-LzPN!Qs>U{|JDs%Sk6_48AF9O<)frb^6vt2m&$G8h~w6P`i% zzlq<-`rTEXv9Fj=6Y2_8kGOs!{G}0?K~ANTO?nH#!iKyI4FlZrTM9<8Mx~S}S<<7V zGx)DjX=Nx?D+InN5ijpNc;^P-w=>7L@&D!_Oiu`x?;yrIdO3^m88AhZdHL1BBI#%M zEK&E|5-6aRfdzPR8JH5`WWc?`D*&uQGX3uFgSVQ+R;2!uq3=R+Rh}w$sZ{*c%hOLQ zR+KpSi7*|mg!xW9@1}AKSQm<0zyv+!!9_B}S4RqIyH6)U@9)-5Tu!Co&XIN7m~9a4 z>L=eXwlw2<@XFiZi$D<$b7Ob6l#ZA8+4#Lvt>@M_{P_Lj?i1{lsBU5SoN;j6R zSw+C1QN4smp>rp$$&N5MQXSOYtt}^ViOBR3-Xdl$Om_zS?CkD9DrZT;lDB0XZGX@Q zAgwS_GYj{5XTv+ot6d4H8~iV=Fwv0a93+mN9$^qEPCk0)DtUm$iT+7mu=uqJ+;QHu zR-M7FRbHJ93-Lpki$b7>#0{M}b&0%RJxCfvtU zx;E5oR*Q(eeL}>5G^jbaKN*NjFARY?*Bnp1^A~gqz*8$M3yubgyq9`wp|s-Wp*gQ% zy&zGtW;G1p?;QdQd_N(L)hNn#t#lF&X^~!HWLB7yI2+I}NId(!9t3+ttHv@KA#oIU_7p?5>CcV{g?no{%oRqeudIV5(FH0t;T)AZU`^>s*XI z?RZ%4WT#N{3SrET8H5+T*{#N;NZLRWAv59)p3Cr;;b4bKS;~1C$GRF1abc31c?fC( z_t(2Zt``C@O1*e(trs|mkD@ksTVz2%LRE+5S&=qIFd@F+9Lx=!)>qRpxm_ANXKCuG zNYDIloWHVu!H%U)E2246OM|j`r9~ue9zi!bD7)o&f2E~0)E3?yT8>93k>r?0@d4OW z0m{%;1_HE_8M_(j0bnJE0WG!uJY!7u}FsI(K3TQ>Th5#JWh@OEW#maZhTIM+pfobcBJ%_NB7 z!M;tJnS?;EY3TYp!C_zLc*v)9C1&lcQq%I^9$ zZSw_p9CI?`(^$e?%O3Y~LYm;WT@m1gpB|-2>=_tx?hKVZG_K&bA!i_31tVM?cKkp% zq@>@YAK;yN-4@;B3LZg0w0&$g)oc zNDwPdZ1NX>t?TCI7>c+rAm;h{I)70a80H${jR7W#CdVI!J-o>Q zhQMb#+M$7*SR$b2$WW_=?qWqZQC01(dni%C1X#7c12!1{Uye|{3i4+ey^>!;O*>C6%0Xr<%5U$qCt1$d z9lsit11@CcN4doMnKRIOBRz-ZUs^HRd-+jLZ^x0|{shHcjJWq1UO82$R0$%``+%P= zNG|Sa&eln6ef?RpB-Q3V&m~*3YqR?RKIQ0?B%0p_vn?ZjGuWLKeIR%>4m`1vrU^J# z4T5+GAFi(a1m;@qAPAoAo(op9`vm08bAaK3`r8ha0J!R}wm|aeI9TQ-6UYyvuAfnR;P@Z<;$I8@8zJzqE$FvmXH`kFVHHb3^Fe)2FE5h!jG4u_$4^JvaCT~ zf5-v2FPH=ppWYXOVQV6JDSFPkqPb=#LOr6$R>rN(E9Ut?Bu5np6XG6Z)(1chfU zOT}f2Dm*cqenwB8jB~V@baGHB7{|NKg@71USeCDqtjM^i; z635{P5%2pz$C`lOqV&xFiLyAdM%`HquTlF7*Hdce9pB>;AR^b(v+ab=#Yrdhwq`HM z%oe+PzM>aHigxvHJCoCPBAv-=Q~ElK(zR-5@!CnXr#Shc(LtOIwfKwvhsOJf?qer7 z3F}Rl*_zMbA&t)HyBES3f$yXV@)^B;;)WRbRf0L(%PBzyk=qD$=-mfbkfDS_hoLl0 zh8fg{#l15#drMXs=yr+B8$=v&4-j{ELYg*U2l(?L)lRt58G);&30rVHt~}xnQv{<+ zaKzS3#=x43vR!&JU<_C^&%pW0m2x8uNRj+vpej>;) zK$J!jFBs_9b|t1R7bmxB^=kNx$U7J!8WVBY4|oGMpWgW!rsTfS2tyuR2|RK5F(*P} zi!Laj(}Ju=7SVX7`kZ|j5hd6;v-^%9-=WzfMik>mS9A%Rlyvg37Sy6N<4HOra!iw?)*7cI7&w9IX!7fr zg^rj?%z3;gZsyH7(fUFXichqjxP-{K(h~>h2e&rxOIbj>Du1~kB4>C*d>bA(UKTK9 zD^Si?O6iBm_gY&?vcenbK{%s;xYE~ZQ7qajK1?(D_!j;^m6V>~x=LRo)RZ(!VKqWB zh7WJHC-oqebyNh7&(OO(u?3-9qq?bcvXH$B0m9N-#)1%(;%c)WmFtv0Q&4>5$D<=_ zjmLqGL=$|BOh$W|1lCb8apy+Gp^JuE;y$__XC0NK3v~dbO6NIhrtu{8T@w_=*Tmp| zoNh)fqLc7C5C0b<=MWr;#KqG^2hkhBxQgjc9Q)Tok0g;9Y0nx8i5cMp<(60pZw+utS63iVLhJGcO78!a-V&{3vVhcQ6RqFD;re*%Ut-H=l|JHH&Mr8lncaUx_a5a$;ekVq&2@|y%mRAfMzoKzywQ3BMEvYAnW zBw8}0OjLp-YD$p&CIJ#X8BiuH0TM+eKz@?|iKq-HQQ@~2^tCK z(c@`I&&9j$Sb@?H{K9=+Di3D9?bkJ!N`NTv~@5S$b*@GB^Y@ym$nY(0(mg=FJLUXW2N$F=3l90 z@@Otlh+IGmLmQECLxYPXQUQ&;faOe~I?-<|KExtxX>sH=E>RczYn(0?YuPf=8igO^ zCRa(X*@L5EQU9|Gh;uQ;{9?T=6?;OO1m|Ll z`3;r=r1;mUON{EXvBmrrYrV;ZY~y};rAc!%{q6W@dJ>j}*mV-5Wst$X;t#?2FSryA@_ndZ9l z>QlOcZ;*ECn*E<&6kRatV$aH5P;g2u^#PBuZQKKOmSTQ6)kq!1SE`GN`%$r_lwKqtrYnHxR{~<9q9C3J z4O&$x5f2uStY>u>tUSx*^8@*fhnMa_@J~M4dXv{6(2*tt39ZBq%?=)Z|ckFW|{`4nzaajr2egV z8;yQ~&>g$U$-LM!gMJs(zqS$>Tk>aWw1rohMlFILs{aprZypzAx&DvO4BId)Ga$>b z2&jmFrr=V7iXf;14v4r$DQ=LWqA`P-DT59w!-!g`x1pJJ%8Zn>OpQ!YOAX7V(@JI9 zIj012KbcFx?|t3R^9;l2Sw7$I_xJjJ|M)$;nCH3o?YgdeyB0KrllCS``!$8iE>r{X(h1INv>)}eq>3b%EqJ~EEN#lA%Lf2CltBjNm%LZx0jB>*L-Cv+oA z)C5A`&?PV~QsY2TAS8Jb=})pUm0IgVC!{*deSOsdT9jaI!ajI!VHcOf(~&4P*br5ZTY8e!QJQy#e;PMUcH zf^-xFiGSJ%%xZxkfxz%DfxsZa8v;T4D6N8jnbIs51rl*YphzGc{L4l<4iHJ=q=SD+ zq~m3d6UQs~TcUz5)0m~mkEd1eFM&F$_aES>0V=>hL@K~Ic9@P;@DEM~P(4P&m?8%q zP>FqT zTGvrG!*Phh%tuVLn$}=p%V#Z=y5PeI_^8VXDgaEM5GCRx3%rN>vi!5;inlqIT_N|U z@}`P)9Lsp{H6F~dj0c~gV7{87C2b22 zq8W<%9B9G^ML@#OfF|qgkZckK+mKA?a*AT3SwI+yA|jf4KYCbx9_6>Any@~?B7K2c zBU1y&>(Lb-#^FZ?-SSX#!Pob?s(q2vYedAB>Z;a6Zigeqa+y=I`0t32O$?OD66QuO zRjZ{)S2J!UP-9lO+4?P?E&8|Sx0=19q_Hb;H45Tz98!4WQoTXk#GT9J% zSFik;KFo(A%a8-MnqP}f!cPp<3s^qutQ*(EfwO&extY6H@^TW+kuDYW$Ohd?tlkdz zQ$BZdR7`9;PRi4qha)69XD>kSDt2*3v6APR`#j0qlJfNi~X zABQ%*I_;LuS{_+OsR_(>MN-@0eVNcFTetFx&hiZ@iJ7W5kuC$kp;A|6B{D_x)g%mG zf4v-+l?}S1&A53wqdR(4qZdvKQmPhfDqf(dSRv5yM#Wny`n8gtse+ScPrPKZ6J~yI zffcP9Zrw>U@lhy+`WOdh;%TMx}U}~O)r9LMGdilGQ zgAOe$21yQ*5Nt1|ynIH}2xxSPcuzn1EBzy@}%~X#(#y4oMP&OPv(K}8YLC2s*b_l9Z z_*T7&jwT+0ph4=D7wL&Q;hkMod_lshCWHD(Ex!-|&(c{l0Se>jUbm9&zjT;pCh=(|4GN=Zx=DkIGCuiY$TUW8__2!@ zc7>!8mZ~)tP6H-VWS`~SYa$ksY9H>;Q*=^mmJ`mX5h)pw=v!xfpYV|l`f*o~X)Ab~ z(gf^#4xdy5rS4=Ifge5T<`dBC_OUYE+^SKpH~}AB)svC9o}USP)ePq~L{0JG;{*~y z^Wk!uV}wd`qJv6PaH=MS&zc}<&IHP+7;0?#Pp#lt{F_!#p&%$wjQ7)Uak?d}Iia#O z>jQkE2^uuzI+~$YuTI0JjCRknGFO^zb4rqF`GcqnjSWua{y;GA2WtiOLz9v`%y%)k zHGFs86y`};wrSMn0%T5bbtcX7iTM&%;Dh_>;tvhDLmg#4q0}YZC}{y%SFc=r7n_yA z$cUg>ZGJ*b*ZV&vjQkS`p8^M!9&KVDx}tI^(TU)_7P+Gh*30Yng||GuZdGnJgtU5kMFaF z#|I`PgQG!F!kUibzE$sJt4LReilm?>o$#aY^uJgYq)qEYb>W%(+seGqw8Mnjq*o1g z6A3Nfk5k73qku&U!XCgTf5(BO5?pdz;xOeUh9q}@N|d{r5DD*fHsngdSuT013A^Cn zA;`o8-C3BKySpRh&XK&e?XfJ3Tg!+>_&A3!+^ zxX+0ZaDRY^`$8cz(3fNJX@_0dQqaiK z(orw}jl+bw8srr~Xnf>B(Bn-Lq0fm!U#5k>THG?N{6jCOyb_dE@zvXR=#mcz2K6!6 zwA`1gR}-JgsH(wzK&1N82#9H*xJzddY%Ts@(r=zvr-=O~r~MJFO9iSliuW6^_eQ$> zf`Ce=s3UDF0gS6aiui|*lZZ%m#8wDM)qKdd|6`Zm|3O4@Bs>Ygae?skA=>aD)fomv zGG$tR6^9UXq{O8qc6j_1agg{JS%kw~G&0la4Wc`l7V-5DKFmak`8q$NYH&|+`l%C! zy;)Q-{m@YrZz}!ldPYQ;p&e<8f#iY2|tAs&*26q6&oqrFbzZ zToOV=S>r68vSgZ2BlAI;s5QoT`wHr+_7Is8GimCWKHALg{<2Hmc|Dbk6OjtMaUyc@ z3RX@&u0oooYD5<+ z5D!%O4~wV=tDr7_TFswgs($!h@mMT!ly6Ih9QKGn9hbo z)7wXkqR|h!$PYBui1E?}T~|*$hKWp!?>tC7@i;jt8CJ8H&rUd(Fl>p9{b;^c>g27u z&MYghKSA^*TRgO;Un#NyiYa3M+iml=CI2>2~q5J)UphH!OW$Pd; zx&L3O?|)Tcz5GY^*sr^yO}9{69792I^@N)k*R7~BIe7!rD^=w8T1#77P;rk99G~*`R zP?yJ0diiCY3qQ%)|D*<6aA9MzKU9NH;n?h$f{^K=&iWw{Cq?{sY~7VzT4gtQ?12Zl z{N4Bo?8f7)EP5Cu9Iotg8Tc60;%iHT`6q1JF#PG(UJ1JRT}f0^-dTVVpy|DmpOL+K zWhf|OQz3rXuU7yQ$gs)GV-n<4^@`Ii|CrWJ*pdM%evJPP0MVHMB8>7Qz|@q7i2xiX z0&tiJz(N#_zOx9xV!X7@A^?l=(>fy`f?%Y3gi1ON5I*T#vWY-=hycP>gZqh{t&>9> zp;s8H1q!|W>aL!?^Ko0o;o>A+n|b4hW!~Hs!`?hppoMMROW!!X%nmnziL7Rnt0y?% z&R+BhmEUEWD@uqco&jr?S00qM3|ZYj0Hw>c_Rn|;!VuY{V4}L>QJ_z1?7b|4^k_32XjT4tl6z= zD2r`@rJ9`ZXSF5`$cx;L5m`*ih1(T&0#E8tAv)rD?scqQaQvlc;w>hRcZkladw2^OyUu(=dD^&T`|Wb93BhWHiNr?zbb zFxlCB&R&XB+U%BAHttK^Pb#f@s;$N|((vU()lxKZ!=;~SWF?@JfL&?GBW>@mz9A{~K4hwPY_8 zQt%X0R`rBj7}wJnNvgMMp~{YH595Ayq&TvX>XhxY={X4VCjJA=zNAA<@qsJ%s5^wJ zaF1LSo4U~uDEEM}xw1eQ6Ny6`6fIs9O>x?rzarFvuS&z6cQt}@vk!M(^AVh0zO0_o zCX4S;uw+K=W?vrd!%qAKD}&rO-H&bGvnf#S$9;qS+4{36aGXDPJ}*Dx!wzf#*ZB$jc;^m>3bQv~1S`7{ywsJ=5aFxz3kN6j z*$gm16I=0==gL&#t#Zu4kxNRnTsC56&b!FMl4ft4SDeiec3A~w}h~WPhieXWSr#UZ)|zcZh!W?c6U$KsD*7Y{Gd~Vc6Vlb za=WNm{R%C*aqe6XHu!EAcQ)tAK_0xQgyMWde*R3EjR|uGX9=E0W%V7Hmp@~=&E0pv zqxNoQdM`DI?fLtpPS5~#EqM1tfwlk9)R(l1N&Q&dX|-S~ie&`Cl+V8smvfTcfJ)sr zbCQ^AVG!iMWo&zYKrvT%wd8#uTkj|rrTZ)q@wIHU6~g36$Mn>VSxUt|(QaB&(OB^J z{smmGKmB!U1j~J~9GbfNfXBArm_N9G-v$$G>AS-pr(w>tpf-0{i z@MNv;4krs+^Z$gYpu+C30oMD|p)iT%lmiiTI2E({u*-jLg@K?iGr%MMwy#nFGRZZ8 zwN3`da8}_)rD8kO+O}>DV<)=rMx5=X;Jobx({BM+;hYi=b6*RiAS}J)tHB8U0P+N` z=BNmT5{$7aeFE9FWW5_ZxjA0sVlLdAtX16T!P#x)Z?bb6;$immFSSbM)&QknT;lHY zO%R*le)}oktlp3u$QqhPjLvNpFe9~42WovLKMS{W?3!X=xWH~ZclLBqoH|PWDAOqY z`uQclb3b)eaBeSOZVbbfFl5nC# zsXmYz3L7#|+;8SHu;s_LY)t9TM$@ttH#Vu!^ge0cOfNhImN}tm7K2|()vCoNoX48) zI2n8-=`iFP4pFAb$A_=HT`~mMJ(MLq2kFg2gq$!5VQu3@K}Tp(J3I?Nb#w5Oa&R4f zTl$|&C7~ePB&A{^vdhUnm5-2YF;7;8-^=XM@nnCd`7+1ZlwGxYu~YS zG7IkqUZ2NpB8R*R&mgo;$m?awi(<#uKP*x?LQ?qV%oYiCw48^HvQ}(|C?QVfMOpK7 z%NY_}`%RPz1A}p|Ba6`;bw?13r^nr#x}0COwhP^f9E2^Mg}C({;=T=+&T>5d6U!*U zyoe*7?7<=DT7ADsn^mXtUbhjP!7*Sx;ir*7Ns2g6~8=fOW}iYQh1c(Qk16m@YP-? zq95(91#ta$6~}!)fimWL^sCVopxFVSt%HO)-sWMrI7rRr$kD zc9_NpiQn&px6p(j#~^=p{q>#N2E9EHN*g%CvvAoVY9Dq}mbhu2mTn7JX+c}7$rYBrAs9H+U415*O z%S^bsXqL`83R#0QVmZpvS>HnT#BzPbSORRa96Q<^EdQv!t{r3 zP-=FutA5a&Nef3m(4%$pdB2gOblz`Gr?DG(Fjf(dHQE;IRm7tHHHnm-@7n3mN^glI z`CjxdU36RSwrS88DMI%kwd`anbuQ%b}9Z&nj_TG!mcJ&E_@m zmp3Iov_=9riRcQLBgDh}q8_3z0!x8Gcd@ zmLh9*bkqVrwqxlSjmf&2h8V5s1~4rd+@X)Cd+G>sQx3j}R4rp33^nl3mngJfiUka* z|D)Y`I*yDg7N>PXzQsctp zPl-7oz=Bk!bXBXftTYi41jBT^dC? zctL7F%E?s{TBch|BY30IPmYK{EINq%8#M`nBN&8UGzgHY?wy%XsxxGF=o+4LAus5KPq_5Fz_!gxLFQd-Hn!Tw znlLrxU>DF_p-Ubd;1u&=k$@kU6eoyUdjv_MOv|U4mXj&mPA6>m0UymrcmiXd-qJrZ z)AI9h+)Y^i#9&kZ+f}K3+FFiUpvN;U*M{So)ACO}z@DmWw;ZLFs7M@!p|(vG)bIqu zK*K|#mGDOCDcUq1ZN@CaNS+(|Us&Dp>;%{%>tjuci1%Q50=XF>^-dG9hv_W6B6(lM zUr9*S8kJb-eF$$X;f;V6kA&0(2g#{Uy^Oi53}3R+5Q$LtG^H+H>aH7PCjX@_Je^3n zja@jt8iTEzV1ocDtrjBP38#eohF?x|zhWH0sR4}d{*-2E;?+RErW`^%+57Z^VUBvR z9l|KjRmdI}hPh>u-f~wWF~n=#Ka$Ti7u&LFrtvgmei79w^|qst4~)kGln4`=)IaQK z?Au+~ynw!*CT`ma28CNC`4Fy60t>BiAg8>}#O_%>2#GPV+RpQf2I>-8bm|c;daH9J z4B`N+IkGm#f08M-6?IEY$FXcoOUYT`j;Fv{$j+BSPE0zhYhHDg%8V(sM_fmIvj~V9pqc zCDQ0*opmDC(w`eu;IZe+bZBHddf5r{Gw}H6am$ILSHtBe&bR7j+}6pj>*VL{Ly?d8 zu;;#2`?J2!j_bw80VWf1b;lb|v+^_O2^uIo2x<2x(*7`in(4)}6+ZNILkgBQ0mdmq zV&uny&U}!jDVcGZ9Uz-zhaZMO;zY|a1~7qzFi{YmBlh3IFyW5JZr~*|W}r^k!j{_i zB{Hzv!Y+kII#~%gbw&_E&Z4dyh-LhHsF{$z#TEWwcZUa-6%}|yfjN^WQD7kkFXG(^6vYy1BP&#_nAkDdO%9=z!PV(@ONV^1{UX1F+1<)@qRCDuZK0hXM&Gm!oI zOL1gqL^2_nOm;CecZZw6!NGE&ga&Z?E za{ok^aBh)rfjZhR5Rd@(J|C^+GJ2c~-DdRV{w*GM-Vg@+n4{xlEG>0ayamTe>xO93v3Oe1 z%s%{1iEbKZ2#vsT%B&ULyjkDny8=Ang)yNYjW>&n%nxAe--(Z)J0y3uZkg%;i~SH< zEgR!Z{m%~MlqA?;38v=5lA={|MbwI1?l*jE-4ukRE=SEDwCB{7#?ro#g%vS zsS|EzD2}PogeaQj%;#;h|A;TdIFLEu5A8I0!||s5xv0x5*IPN9l%A4CGw9n#>k*{k zO_9mAC|Fr~&+csUN~l-KetNNU6zzs3ePZKnxlHAm6e0OQ_$`&QPY>_xmKg=3lF)`W zOj0$L;vE-_U_L?Mout4ISBJ(Gt~#%ETBmU8uaIK%iu_%yh`j+z*EFPyQ?RA3uZ=J* zrcChk7GAuU)`)(c?EJQiep)-feWD-bM-TPzsfVQf-ocL=ab56(?qPQJX=O+bX?>&g zp@12B2p;Gmzc>d!>cceA?=^~qt~VM4*8~GYACRE=qME{G_p&hi`I&G3m`JxPpD{%qX$DJmq z#C1C07+KO@ZXfw!ajC+SoGEuZeXaPOEBf_eXWas!15fv+mn#9$c4u~RU}PZsQ8Uz2 zF<8#xk5>9CzK7?4jIOTKQfC)-w1+3IgAWyWDSmKe5zQ>rU+N0U>;cMD%Gl85o%}s=|n zu*jmoOc92E!CN6qu*L5qem%?MKPEwId-vqPz-s-*0Mj$bSuPu8OUUa9mkY*JE*oj{ zmnyIguql_N+x(^YLwP2LY1`uIDYwU^l*Z@;|V4U$qK47Ym~)_Rm7%SpC`f&)Jgq!@&%*>UHhLCAi_<7H1YMo5oIrW!FM7 zYT7Uy>Z@u7jngWgcM+|_p4h8p#|G3w?bK8#w|#WwYUr+e0`Wgz16G==le)tBK*=@h2EyKl=#$4YXooqnMNZEW z{M#F*m1d6wgxg!9C8271-sb)xf&;%29iGkoQ3>%W65jn}0l*qxS(M~&Ba~L2Ak5}3 zLDwY(o9g>qKnfjg`N|}a6}ZGGav*Q0R85?Ria9s|>V0J?w)~WA^qb}3zF+bV?Pc>G zCTDAMmO+nm8pig7x)MfubsL^KKa3KGH;gDYgojIDT%iG%DO&~Pbg~OBg?k=$BAE2 z@CS)yUXQ%t!*VaZ0q(CP0CwM@!?e(x-$(8q$Qq)+-jn-y2rS(E2}5jGwcyLDn*vpA zxny}Tqc3z!R=)~Xr|QvWFBYPKP1Hm=c(sbIdcqXjm%i}^G!u40K=WAe znAI*XgdxWlRziRGVW{a|GH|mWYzN0cHRR$~pdh)%4XU?E@nj8|2;OFdmisWAwDAL50)NbQ{>ALb5;vIQ%!iJ|${uJ%O$e3$8T2)(Mn%HdVh>pH z$z2oyV}?$hJXqbMr7(`@2eo>=Z!QJPOeZw7`llM`yF9W8d}B|CKn+|)jZY*Xjvgv` zG5)2J)9n0>?1*AjAghiF0DIJA@R~KKP;%j6ch8N%_z14=jy8KzWu8U*s@NWZ3EUBzO z)nHebEm=x6pb=Aj)E%_W9n}z=WcjyJfq>jeI;7pPNbD@Gn=E-*QxSvh{97e z90ONSvlGUBt#cL_+L2(d3KEf zPV4JCenwV;(4-u@+2i zzhlJej)3$hy$*GVQ~aTRvG7TaSnu4QX*@Fqd9fD1&SKMQT#z3x2-QHhgsa7ZDpgRX zS{n?ts=Si9256X%{evn*y6+qPQEufSAVI^ch{7#WSB@Cu$2LU;0F~YbKO~2C^uGvm ziPHdm9PX>{yak@k88OJ2TjZS%j?O6)Mu`PA(wJO0)Lm@W;WtrG>ohP;Hq1b2HSf&@ zmaio(p;M7x1~vccr%+{@B}Y4&r-F%#k4}viHB~hMLf2lZKx6{q+^GP+B?M|5h;v`* z?CC}H^^S!4GrKQX-3b8y-p z;!9>`2~&A5<(fcua(}@%#YUnD4Lzxnm)80Df_8I)eP8T>7#T};he_((Mxb4_p0axi zsd)7o$?gF+tE?isw7ef$SHLuE=_|18+DtsAoZRNNpk|y(FWH(6vOEsR)_k7;Z%ZGM zRB#LGyg{l@(0bmWB{MNNs;L7J9Svgq z7c@NhsR^Fm_9OW$mR0wa;Jqb_)O_q}sK0nSxFvJ$mqB*PW9Ol7YFsfUMX$~m(YSID zV4Zi`wiV!D410z_Pw%pKlx!_gthy?1PcNG0q+W|>*Y1Nco7;cj)|*vpQ0#?zlOG%5 z4xq>&OY*#L3fBO(dEZ=E!r(_7yTKn~?0HK|{azEXzw#K!N^=5|aokIM2~jxCR}(Se zJ(v4rAF=1SdEKm02_h6U)+2H)nRRdc1YMeAcoTzQ#IR5KA{NcJH8+i|*}0$kff%_P9*EcoEFAL05y5JHJ5>S!HV5}ton)$(|=2drwcEVy`A?8 zRN6icn!pX3Pgz!j40iwxyf+TVAgF4PZX{|MTni?5&KG?+2JFun$y(PVA228b3jens0T64(BH*fI@55MnV1&Jf{HENX2__QByqo3$ z!7c+RGsw9_3xnaYtsWp@F0LLdHVT3-m)3LUh5=rHPWK@!$mHe8?FV_`? z*OA|#yIEKb^+%B&&xgWzGnJ9(f!b$9!;G`aV-+%J1Kmip1|!)<%mu-J=up!O&$(mBg8B33viMu_PMgYgeqGxm zlTl|oWz#t+S!sD`Im1S>A+enTm6DU4AKxWV)1C@E;l^pjZ0?PTk?uBMHZ5dXK!U_4 zF6yzKZZPz=#dtuswUqzJJVQQ9nqr7F+4~q_IkR9|$y}r1p;bg0W1hgBZWocPQupqd z%ZzDr=T4tCV-B+ESe=5o)1K;(_e>{n%(JS&hCnTKLf-UejQNQ0fCg><_5v^lae4Em z8I1YGtZdorfS$Yp?M)`;`MIPX`ymx$>#y(f_v$@!nsHihA&Wfj=1yCfFZfJ; zSaPxL(3G8Dyb!iSJ7o0mKp{)VFt&Heq#!nXP*P^6b_LwFCa~qZt)2bsfTTS{ey|w! z*xugNg~Sb9dhr0R$eVu=%;ilp8mG;G?VaNJyqWV2hPinQ@{0{@IUCl=nc}fA+T8(T zXk^4bAP^FUicAAdGv;$>7k#)XAkm|}vJT@x>6rX+5Ub*!y~5pXq3k*BZht%HY3=Ud zC|fAN6JT9roQ)#I&a^c(k0s641hMUMl^dISWVbI%&h+TG`71nKM z8)wglDcU?5FS~|Fm3EB5acbuLJX=1ji+gE!CmWF>QI$MC>?|(N5acOA!VH6PAX{(n z_Ve!-m)8$SmYSW8ufF0Jd#+-FR^E@*&mEJYxa`VxxT~VYGq~x>O|QB_l*;YhWEQ-1 z6I7l*W{O}Vx(lZ&`%bKe=$XLUzH|y?OTw`q@g6+}D-um4tQW!Qv-uGr%6j32 zsHU$FwK1_LR&u1+y&yO{0*hIt)+bs#O^}YdC$N`OG~q1k@@qcq$E~$)?567$MBOpT zmF<}j3Ow=U^f#Se+iE=_}MwIvGTNJ%W{E-3=VuOj*1F3zPj35zIRw z!Z~!&~u2LKA`uMauP;u6oC9i;O%eHqT+}Nt$U=iWfDTP{}Z1G@S zItT@9AU2Cy0bJ^Rb~g4v1Vzn1S<%{UU15sxa5r>wzpdz;EvwqCJ5FGI9z!9GZfwue zrGZS{?KL;n*C!@I@ueHt6AJLzNz8J1?6AcJ4Lv*?-Q<0GGXNX0+0F2kTA!&&LevTy zVy!zcTq}2GWos}FZ4&_|JaT2y0ll`=hfPyZsT`yX}Q{v_2JLROze`1GzsUPyxer^-u4^ z4NLz3#10!7q0lHm`4PZ##1(Sl8UW|BQRjy@O>$aWk>`)Y$0D%r^% zo+5(9zP1x+Bc6n|x9=>)zZyFnStbmJ1&s)p^M0eiMa^m_0}kVE!PK9n)7T)z(qQ&V zfs22;x04K3YBaw&1yE4gdmd4W$DB9q>=7srX7x?JQHnO4jVC`J$ojlG@PQoPySX<= z@zH}hZdS15{TRieKfq!tuR8B4Zhd0MM1rcPV56dAfWqj^7F_e9a&dDNAapLJP^`2C zIM$r~%aCAfJB7>~)9iEmS0Mqwoew>E!+Uj$Vr#!lcV*c-EWSRQ#ok^l02PQ-+ZVu| z-bXOA?05~kt)g$x$7D5D0r)+?AwEFyMu=b~W9^H(eP{+i|EhM17Xexqc0MV_pBv*) z6yly;>X6TMlN*TVf+eVcyxfktJoWVslXC}Yt6(rnh!Aoqh@XB`W=w9#O&UT2u-61^L!M(sC{vKPnc&k?C7{S3^ zZ%ZIl@SKDDqJw*?gS*VZyBDiExd*~afF2ls3T_cIRet+H}3H4fx`sW+YTNw zaI)J+Ap36}-18jVxD)FTKHtF&-m(ti`5oLS{n-v4GT8zL_tOq;Nc42b5SM)&+y)1C znS*&GudoTT?WsC!_S${vJfz(vY?SS?hsSuFd>HNGpw=B- z?S~QV8I=^-?=89i-1*aH<`vAIE7X2dq9H&ymJxQ%GiM5=O0K-=`A^L*lCg@phEO+g zPtB6&8UjOkD|xi1isvt~ONFMeynYI;YEkiQ?4hYB_TqteJ0F<-b+JW$!1deW6>_He zuJ{a_U!d;c%~#a|&k}yw`Y3F$s@q0jb(dNJV@=22^&kyE^gMxoxeV9N;xiTI(|foU z;AUv3)`zYf?eDc8WiNm36fRiNTRF-th#fYM#hui>2zR#S3*0hR{uM|2!H?m@uJAb= zxJ{{DjQQnq7awNrwy_6$b>DnHxf{Fogz;Cc5u9`2Q)orG1-Jz8`(y(TZ=$znAEacJLo0xY=*tKkZ{0F9zxyBFzxplN|gP ziSAhr{-m6dp2ZIS)uOw?!GEvdX2aLb^O;^R2JUo-bVhU^bnut<97>@~K$|eW*Tr~R z2Y;1f)BX_wrf_jzFwh}*fatGt@F(dfdL{`kTQPZ}|11Z8qv*fb!QU$Qn>qp(B5fBF zY<5UMT94`3DZFe2e=YhSbnq9M<7B5C{C&lh-#6T!t?AuOW$G#VU3Q2&O!U9w;6F+9 zS2~Qr)1tp4)Rl|=(GKxn5c~zGdsU32bBMH8^ml~1k3|1j4)MPf{T-q1H_^YsA-=|0 z=m~;4Q;gt{?R1EgF8Vt{-8|9%ltcVwqW?Dz{?Cj4mmU0f3jV3GI}QQI#RN)mm?@YD z&pFXw>)?M0JKLuN1N#0Uh7WWI_jeJ-Qs>~`3%iFhuP}DuuTE}k@}=TI&IKhnX5*)v zDt-ayMIUy-xkP;ccF!*kBPA$(Cb@^>4jTJ^Zm#_2ohu_)nDtrgQgH}FT2A&%at~8v z$yojS*dalGi83=l(A$zb5BJ~~f?rlD7CW)H#}VrXm=r9j2xNJ#nQn?L>9t|!5Ew;K0b_KL-el98#ma`g19J$z7jR@}*A#7qq zMJ8j~5_+(Udg2N^oDQ@i@(xD-LJDwjv#rjvAP)zI?JemBu_IJl8yr*L)UXu95}L} zT(I7a3kgB~5!~VtCS6Pe_`Vk|=uifhjIuf`<50#M$hV0!R#{6lkUr)b3VE4aScGOP z2#e^f!>Pt48;D!I9P2%BTRT=6t43sZ9KTH?ksS)xLPLQmJ?2w=!bQD0^`b7JL9ZTh zk@JiTVvMN%Qf^3z%Y|A~BXm7em56P4wnO$<5KFc70ZKMC!HpgnNTswJ@m80A1%I6t zTF2)=VL8WL-APj_KR-!_6cD5$b>_tp5E^NtO75rFCsUPp(K~|PO}xDjEHTdOSWT1O z+LM&RE`r_!^y@OE&_(!2w_Hr&3jblSh)b2;6@xq@iT~fU1KFD2ub|uoWhFXmiqcxP z25!r8`fXZ`p9kBU2H%u}0cZx#kF-dL^)E>ywH_t0=4bu5lz`R1MbHr6==r`khLa~~ zQN2%!(L@`Hf=CbARM!cfEbsH4fhI1{`Ha*O$TM0;MeAaY>Ju&*x^<`zsT2^QWq?$l z7C#IeY|G0prXT&g6Er9&_3{~zQGlGnpwxlt6@pw2U~teVt=c>q(lAXi;I|M|$Z(tp z$cC{3KnUa|U^c}${>sYRDe4U;*z(gko!Hf01+J$1DAy)CaTN|xM(ap2Rfwc9g{}q| z%>t07Rs5zq`VSYK`7=%W@;}K`_d)teR}cGGpYV@#^@v|}2_M7A$z{D|h88uB&{^i7 z=lGd0ObP+YeJ~0()~M#oHu!jqMa(i}u#4MwxU#noxVX$l0fk&?#Yo^GC{)6A z2MsC?c-Zn7iC{rrqlkkThFC&Br&J}0joQ%%p0FLDNu7m%b~Xec0dpe(bEl}Rj$*hE zgE>-NbP(MG}qUhOSYB8@i zvVs6O*D8!Y7bP;0G6=n{w?bLcNvC{X!IKivbK{g^K#Mz){tt-8!#auk=`Ghu2@RX} zdu1Ry*MM`#TeA(mrjCkso*62*DWH(182n8X-R6ArK;O6!cc_;+SL;}+i_5cb)7?;mzJSGeH)lW?lvmxom*-}?d z)mi!I2qoEs?@9)94~Q{Sb4U}35CIOTA%NgIpB7rwY=2X6f0iAh0_*kH9zJZ#u1dd| z=|mB3rCT64%A*Mr5=n~KGJ!sbfjY}1<;i3&m4(k}{A0?Q1ifYp;<#X3MZMJ~6TN-9J^!_+JJ%ECGd zr8ekdj_DF^s#nnDL(cQf1!}H!IpIrP)!av9SUbWh5;Q}c)Fu30+(c^&<7}NtB9zza zmP->yIwT>{OS5%Ws7W3R)Dn~^J!Ca9_x(yKk%O|dWz<#ywHFg=4{V=?>&#Lb6f_tm zm9P$Y&y%JgeagX=QcO^{7N7S?fQ@MaN3uKq$fBExCoZmv~9;mSv=s1pvm9FTwiz{3YP0JKtO!zpoIKriT~u!lkb7mJSv`fHW_y;=xsv&Aq6aEvxk?%d+b-HdhX|spkfx^qar&~GnP;MLbu?+D9DGMw+8rdm zSc(oyzx*YWjevy4*lezx#+EgViVFpM0Y9O|on+oobcexm$esZp~ zQY}72EqJu}Y+Fg5C@Gp?>>Ci?j%^7w_aJlU%%$jSf{EVYShjo{DfMc73vUcb4>q z9;0$Y>&9CBapbq^QhA`DwYaHtToAt!*@r#h)v~Ucp{T<5_@{?(M3nB!l*BnH{15WS zlSw}~zBKZ{2_$~W<vLr*As*==GEZ%K$G0$!8k?E86!uAP^PQHD`GJpJ*%Ui7=g z!Vg!5hFUZE-aCm$v-D_@;;aLm^=LD7Zc5 zGN1dt{;pbhWkWtR$~Az0&lSEC{or2#1fu72`a$~?=e(5^UpipoiwpQe>Tw1&n)>7r z6b`o)2TzE=wU|p8PPf*raSz6@ zq;auK5)Y={Uo7UAz(&apom1Nb^$6T02GTCju`f!boS_0C>v-!`lOC)Mko-A!5nnSeIc#yD17>H+}9D5ON4(V=pKeNU`vI z;3i`~Mg{o0zv@QLXqkqof7%Rnzot&Urm^Txd$C4zJ%0uuuEI`oY`f^+3I1{!b%XGT zeIaY&`EV5D0a8A{12`Wh9!a_uA!bSUTEZh`^eWmY=i!VWRMe>};}u7(ZVbzbE1Wm&Nc=JbqWvC6ncgUpc%X!)*Q` zO#RxNa1&XRwU_AQG!2p7sv#ucBov=l*wFh`fx%aJa*ozK z{HU01gA>d4DGOjfP3^A@ewXJV5mA{<<$k7&?O7EQkTRV&(@RV$%n#)FglFE@<}c;2 zkH;qhEj**yk)3nHSyJMBtq&=|^0jG9fYdb0o3tx1I0M5-$EKWu^7pl?cB7`VkhbPl2oBl9 zE2U&@5aZz5^?5GU3k{Jharx7b;+zVZhp<1Pp1<(6Hc}|^YA3XO?VL>zYodO+_bJ2? zdCt}UG(t42hp&e)C|sU{(k= z-bUZAJ>v&?jvgeeL1omDG%Ob$3SLp@$4bqK8j^CwUGEY^Idg0czCMN21H=}UtoeiP z8dh@(Bh7)KdMZX=m4hO=B+9lIPzKMGON7OesActF{A_y{Bi;T*k|$n|0r(`5D4&gI z!4Y}y4^*2AKB=Y?WZc3}T@)&j_$=xzQ}LdRt#5@;Sq7PX;9<=Mz;WW$ah^e^ zkq13g6Z?K}6C{_Le<0AO=EthN#O7y^9SIKH86QJJrtoGr0GaPrjEfc*D!lm(HIM+~ z&Ck6U;^}SQbX@ajW`_hakJ&1SsZiG)zCV`4iO{hZsxhz}pSTbaFZXcgU4Z`=R{F8E zZfljyn}q7_4IKx+MS!`6XbeiD$6i3o>cbDTFD;;WbGTc!a9(HfWKu>S`(W({;$KZq+X=!s!?5~4$@oA4_-1=h{l=UgCp*1Dp4_r`;!^!}p=5?^Cbjn+bolAZ8EOB3HIh6)O&PGVMd<=`UblBOK( z>j-=}{M8uIX}#meppnm@Z(MZ%v)iSGqHH#A;MIHJvc7!-5|&Am!QZ?p9Z{NpDg|*R z(dfn&NQ~DI&eVPcU@0UDM%bg+D4}dFym>b^KNc(YRN)T51n;TBdpVw7_6T&4Q>Z0V zVyHC``nvGe9LP(*oB{dHujYx#D`PQda;l*suoSwIi@B5WEQ}>fpx*iKA%c3Cw_n z&R}O%twL5wm2*(gA32zkU)&nU8v6D`WB$kikuSqGEVjOSDy#k!nch2~AIvfyL5ko= zr58K_Zlnv0+3qKmdfE^7YhD=;d2iPaUy=oG}gWw*>h#YBy^N7k)ie?h#>#2YoT_p+geOKEB8X1}^AW1lX zJ%|5dV9)D)OAbi#?lgCGea}+{!aNaZsCl!gZX2c>v@`MHL zJ;W~cRdiB`GFD(UWIjn*;jAjz;Lh4o3@*&~`IrD!e^~9x#tcw|vH@j=M}=xwQ*g_b zeXD2S0A3dxyQ9E^_%KnrJW0HYx1Gy`<>g1h1dmu)FXl1KAT-wr1Hgt312C;fHu$>d z&lCrbHI`xJ$Gah8uEC3`OAY?)ndL~;6XL3@;Z{!%Ry)i9T$N7>W!smd0mt^a1+a^Y zvOVT?tmgwVUhR^0?GdFKJ4SBreu9*Tg|b(?Y6DoGRKt7^Q7n)PgGF@B_jiH>7^|$9 z5J7@pBNb1(GMwcFx)0&28QI5fT<)v72+RC`WiW_!K3L(-&U^`qvqQf}lz^CW4omBz zfqJFl4s<}>u7HM_rxs&MJ#2Y{IlI z5o|^8IPCMU>;=aP_*oFlYEQofCK;Da??yzi#LhShxSFC@%BQlScPheJVmQnTZHvdc z>2}uvkc!Fgu64f{Ewmwy9ib?75r`5N1sMzI3W#9)y(1w+1i=}I6O}>CBn3;R3!8Un z*oD5xg#?Qfwa$VF&5w0%5Qp-E*i!I3^uyI*dL^r_Mb(Rbr7|i(Spa7so}g*cJ29EopkCyHeb}<*;?tkQI9;5>r7^-Eho| z^8+D$L(Ve=uo1MLneI~qCud^>$|qq}aTZcBOUUV6^#<7xYNPPdOLH+lkMP67EEE+z zOwOW_C`a0^=P>opkbMcRoQ;g9Lpmn6dNX8{#-nuP_i_wrUfE z=}wR{Yc{My!QNgOMc_hBwZDf$NT)mGU${_E0R)|V7W5IiZ?W)_<*@nkFfCj6SpsA^ zdg11Yi*%j&ECKRHVpQowIEQh8t!;l+V2FER5p{S)6ySlxf|j|lhy=_sN3tOK(=O6N zVnJ-cqZ5M^m?Ps6RD0)%i*dKJ+1D;Hdqie#K`JE5+Xch&=z-UUo@!M*A^ z-L;D3f$WZx1p+mF+=EznfeQqroHHZXnLh5Y9X60Hc19SN>TJCWnE1*a7}R*$7^I}t zIG&xX%^9tDH5&`M-e-Y8T;j3rqa3ZfRupT~vHPDG0XP$DP`jU&iBZCeEyS5NUdfg; z7}2i~x&kL0+w-MU4-&ZotJ_~Xxv_f)Q|xjRM4-0#3L;QH$=KApuqU_A_W@}sr4!rp zUJr1${d2VacymdmtbY^sl8b#hGWx|OLP;{qNp=$qcK<5V{r@Jcm)tI0M{zGFnK#7r zY?(R+{{3H9m4&&+y0K5rKvHtbKSu*gNwBH2lOWhMv6CR!MCQm8InL~QQcfUydH)MH4$(nDw5uKNf;@sGb6UQ@`;5;#Ui+F0x zHI6mNu?Gqs1NwJNUJC=00cx#}pxv(hIIo=LjT#%ymh6G1wF&$f(nG3=%*Z@CyM_C{ z0}o#rj{C&tfSkoG3lC$P?!-bSc9Bx))52r4A2fzSB5(yr!9PKRO2MDJ4_g3nTx4b+UnNRx&sTx$KisLFaV*01c^S~3W+42t2M@zvQ#Ne$Rf=vkK4fT4Xga2q61=UZ0QPtH9Kh}7Cj)rYJjzvI* z8YVA;-DTZWBR@9nT>Nd`XIw)(y}*D;qsVa!o%mARSHW>Pq(nt{;XV{vdBc6<#^ z3;7uq`6bfPVxkp4b)kA8*`e$|Q4rx$*6pNBBM8P~8YUQ5TsDk_7I zdGK`{KX6;Bbt*b(+l*Y6biu(*gG(|FMu(}Pdxc7CP@>Mc8v;BPCAckxiBDGe1kMw9 zSq*ndn;XHLYSt#~9^abd1uo{YX^50Dow6cGxVNhemAq&4W2>g&5TkAhPCV);P3}#c z#Z?{~i?f(JP}{~^RM|FAY+J_2NjR6Fv$x7~h`fyrLH*X_YwaAIWVq7tPvIxHMk@R# z3W_Czt983@l5r+K4Aba2gnC~ci)6>M5lZUfc-kee;EP*g4VI(5l~<_IbYPs-c|HzG zJ{yEd?xQWCa&I<&7=&iM*;!RBy?#;Enps^l&d#oeL_y7*2Nvgi8{wLW-NF`++8%=Q zyhm*||I&y{e_0;wDU0UI*l^Fn+WDzirvo}UbRzMRIg4TmVI|96{QNk zH^}g=-ORRa#eq%h$O@bzlzaKHu-IKVOX&_6?W(SgX0bO_lqNu_nCisp%fV?rAp(aF zQzl|PSEB~Kf@WZlywCb5G_{jdJ0-G@L@SY~(FyYPwO4V}Qlmkl>LER` z`i^{!*2qIwAyI~53>Gr3Z0d`NQG#Inw#qfIKRP=zLh*vISYS!dgBhK#A-lGKcbz*s zPP=U09FrTX2!Z+9GjC;y>)-0RxLEAnWdL>ypKQbFsX0okm=6y7ueU)AzAMDIN3=rr z`@$}?xMn(*?rZN^#W{I^oX^Rub+e0|kx<1H`KA+kq}_~_)`{QuL6O8gOi{hRP}|Ie z{v3~vKK##}O17ePo5)+gaGv2|^27`0v1!K_Jt$ASXm(M@=m&25)ovGrjY&F<0{4E| zH=4yyf)(4hyvTxQHqBhQt zcW2I3h7l0r9#v&Xmz&u}xH>QFkbD8s)Ggu34^Z;Ezqo}&rW___9&qZ~v*YrZLS={} zh{t5()*4`9c;GTuTm-H6W@T#)@3@aZe-%xemp_C(xz13>ez@!2oejGX8t6OH`=W>0 zZH;S{%Ub7k#JS`=p8dV<9&-X1hJc+)`5MjwiTy7O(mvMM;GVX2qn&4NA-F?FVf9#f5J&Uy#!)ZVb zPgWfZs`_UkYBAVd%dQ>m=Eh2HIQg(vZy;A=F?Cauj^2;ZrW2>d>AUf3!EO>@(pNLBkuPufViUlQX{1!th z+p)z^$a-#t`lTsb4RI{lqdb^BlN0p}TTze+kUAHQJ3)HL%|T!2HWrh|x7Bn;!Qvn&#g8!9)hG23Ub+Q!E&LGUa8{C1aS9tY zicr@Rkj(W5)oufSbH;F*#nvV%<=0uC$KAsfFF~4@baGTWvvaGUbcB=t*nI4mKXMif zL|1b$D)|id%Jx{O;-T%>7qU$=U^Dv2?}Odg&qJYTB{&b8k>2O_;Bw7~lZ(e2u{9b-@5cT;IY>*$i;)= z8s_9bL*DUyJM}oQc)y{+oxEohOnAGRZ=KWp3{T$s`n_JiKYq{a1@oNG`JB)BoPBvdOOHt3WwZMCT9G&~M=sLP zWsAD9o-5Y(WyyoFLoSj!!sf@0kl7D!lZ&{|b z^k6*g)+B0g*)Kg%k6RY(w)K-W=biB5W;JZ z;M4h?!nN4oEsG8&TjUxuNdrQLZ?g;J)V8>~3}+V`3gcMXzjOw+?*&}BMEp1i^92N5 z(&qp@fS)AfIhv=(t5LvB;!t>7j>a@E1!AK0Lk0@ ztNk%T8w z(9&7nlh}tFAT_JsuoigcSwF*t4Ts}~Vkt>EcU7dAOYWywj3Nowc^VH?#R1ot($+Eh zkx+v9%3N{<(%y>yFiS6@(YK98c#5T~k}tFr&siWB?4ZKFo;3v@0d}r)vk52S4&R1X zcuUE?^~j+&iD3)rdLfh#{^YVLiU0su-AL$LaE;8Skt9F&(IfL9d%`l?|E@4d9Fe1J zT=J*eJt)*00@Y`?VuXkkKIAFZY`@GEY-HFK*JyB~A?Js`n9GMm-(lNs`Gm!jbFb7K zIGy2TNu4->v?rh#`55{voTI~wt8lDa&NGT)KYVEliyD@0ca3h6-Pq78ZyPTfmZbRz zhQ@I`+j8*Nwl$=_duBKO)zW4&wPp;qn4GzE!Cb=$z-0(8mwv-O0O0Q)jSrWRJSNrd zUV82+hu>vRlL4!CC;p|@dJ{$H1DVLaJ1M8$a+Sfm zs>Pu`*p^W_&xrJRI9kH@_B+B=FRGC|>Y^5*I~AL5XL%lRIve~(|J}SLGul(Q{-l0P zCI`&30;9<*7d%TVPC+T^d5|aJ{PHKEKDA|4w2?3{flZ8t^26U`&dLGiZ;w`@(e6MNd^32nnC3 z+jDY-FWWQ&W8s#rUa^V~WOg~+(q#_RiydCk%hL?0XX$!wT_V+iwLi2YkQ@bE3!qsH z8m@yTCJP?9jz_MHO+8DeQ(pO;>C$s+a>(z~aBSf^S$g(LG^36U;w)4<4Y+dI0#nb@ zF~m8c?M3!NCrii^lc3tjHKXA{-X?nlRtu@x+BM^ZwIQWY-m#;7)H~bdJElKJ| z77yx5&{hx_CV^pM9V09;Y{{;L?rgS4oZ+EeiX3G8moD`j*iW}#{QusiiXPsjDmi_0 z*{M+9fIHU`s@igzqLdyrLr&P%q0;TpWkH8}Le-&Y6pIdZ5w8#HP%o2GS&IkiEMuUJn~PcB0w0ZOhVpn!pwMgPG`Z8nCS9ieTOLgK+&|+c_QZ_6C>C&lYG9zt#GE@hK1^K!p9@* zvKF@eJl7Y6xB5~$QQguB|7E9%XUg!#^{p^Lq}H57h!dnPtms6eGefb(UjG)|0r1$S z;eYPR`mGCj=cd`SgPM41&0)5qlO>wHxo}VbTQtOG@PNiE`f&qWaxf3q%~qVTzN{VQ zZTpW|c*5k-I3+`^>DStqGB|u??4Bub~yHFFi+N5>r2v+qfPeFJMD8LCZ%O+gq23OyQIDY-ZTwlipE^h0@vj{1Ij5DAWWqO{DAqd zcxGn%C33aA1-($P>+qENz2y;t8{p6RF29DUb;tDSP}|j4bORxDUqi`#cm0Md$d&w) zm-VtPi(2D*ItIO;dnb%m-p^{|TJ%dpL5M-Yj@ZwO?#{ zNi4G{Hs9wY{37%aJy0~c`>dkTtTZq65Q7$9-e`A0`w{1gOnnEat%QBkk(l)-~o}1Kh^`)y3*>I3! zjM1zc#25GO?RFG zs2sW0fBb_}%%nP|zDRwmmM#e2^2VqcnQ)GyA&ZJ>s7ldm4TO0gNVT5rhZe2t94FHj zozkA1PkVBk^gtCF&q%@dJO4r6yg5(^nrFK!MWmBbIA??micop~52*ay(agcfijGNU zYy}N6!=XSr38d1`*E}Iorpd>$D(3%V*A6!9pDfWSpdl30iRwE%?ZmK4gz$ojmW?q;+0ZP$xc2cd?33K?1zi44uD>E-#T;qS@2sIoj#J?cyULbV4| zHYJI!`ciqDVMbd$hCw|sI^KLG)e{K7NbxL>ZSsOq9lLErbbP}1GTYcAouTnwt3@ro zMP+pEm2V(S7;XL5OYUgt;`{;bDk=pM@3L-)Pk4Wf{SL1O?4_;k)9Vm#OSRvj-Az2l zNs!m;5nH0YQcEtjHjQjoH@w34BZt(Q^C)hcy@a;r*vDfpDLq3em)v(6MzpjI=7#GS zkGKf>>_k`;i+FCK=aaKOM!U70xyb6oXhV4d?^y3~_GC5mrq1oS+Kw#6-jsC7IN}Iy zMuJY!7pS^zvFzi{mP}i_bo9}x;bS!qhZa3 zy_PF-TeVwq*A&-aU}-Ryxw=~mz`2|TU2X=Z_r7G&rkAo4rj9rQ0XAiSm+-k*q?&-P-m%G6 z9Y*o9th~u{>c#w=8KzF6oC<=PJRh>1r$ZOt_RQq_9#^G&DBirx^4T=m%DZ{{g)Jqy zX!Mf%((kzKLV9sD@HLKxP0 zdwEdP^06Ki)DdEc7DG7BbT(tc_jKCErl8g0!Sk@=>}H$F#>7}U1&l!@(n4v#FqAiY zY+WB)C|qn=48COkX(UGW@bnUNn%811J+yy=N~)!2@KJE37!iEGzssg+HZ26Xfo+9W5lx)-7MjrWKIcW66Mf$ ze4?3>!b5a@ez=<@O8YYVpqr(ONuJDXQw1edpO3!c5v0Hn;zgYnYl+ZKV5?#+owX3e zjJ0&twy?SR&2? zsU?>mqz<~wbKd*`t-$T-RAY@mQF7U#?v?@UR(DH`_66n^XX&P0&w9mKBDIs)m^e!m z`*!ox;K3DPyr_I?9%C+#SH?~0IoqTL%n^=y7vo9HQueD2Kd^IgmN4xn?6Iw5f~1NQ z{MS~oi_+M?8exA>yB4pG>ZX9whJw~eI^pXp$cr{sAuPt{EGyfwum)Evy!jNaD8ZV+ zW6JYA(;c%vA2*rl^5G~3xyX4EwMS?*Yb#Sza>Dn>Gt+*TnfCbw?=&p*VEsSz^!EYq zT}lYz7ueYzmT`RxFc-nD309h4EdEOFO~EisHW@K0uBZ@0S!Pd5Oh@CxW3{cUyr(7B z_E)}JYF8wFA<}RL5%Qcz7iA_G`QR0YeF{#7v~9wb*;n$UcOQ(tMH?>X1*(RJfr--s zVe&OdwQYJI^OKwH|z-Qu>$$pSOKVT3RjXTZXyd#IpP`W%;LrDYl6m zvHOLR3lHp1M*AR=={s6NCp{Ge!c9?aDE9a4=(;>iTOgw-&K0_Qh!C3_%vK2>^9Y*R z#U(|Pgjv#l6BZ{-JL{hfWGVNSxdp^y2{79~bq#+)`nc_v-0(d&G~+X--5|E zlV~&?q2-$wFce1zGMIMZM^qF5vn%Zn?s1~najldIYe4wVJnR4?sWm6s^YAHvNMvi} z9fS_l|D%H(2C`G@@WzyHtk#3I1;ui;c~~3&~YewHqdC~ zjOOulWn+@NpS%U)P!#T%S>Ww>^hdrGqnbviA5E~N@ zJ-r3-mVu{VkGH(7H4GbWiWLr?x)T?t>-t*4wWt01Ta4P%V+U9|YFVF(;0w}qDBj(3 z3+r^=$@&J2IP^!7iIfh{R|4gu_9%&n+RPC&nk8Cxqf1by$Q<}kcQ(<%oo8GXNGotr zGJH@d3+OXB(48`H)w0{?Mg+2~woW60e;*xhVns9$NEf&?ZzVf^npQMlnb6G@t1}Arsoef zZgRz7myv!cEH%g@C<-mBIVs{4{7k?u3Rt)&yCIduumM)cdEG8`bLZAp0$o_RbTTTG zQV*fs5*{Trl{CwR9i0#x%F2=~J^}OE3~g{bDVto_{Z`+;?q(pKb77eeJUTJoLQjJ> zf}I}}7R0VEar21qq0KHHZ~2GYe=rHySr?YlN!L|+$%SdBrG;=pi(J{F{*@q<19Q|# zQN4owQ~grnk+?=AiiHSkq9rKOrK8r*lAWGrim>n{8E(^D77+;Z=M|CQnhL&Fz&{gkr9K}Q@UK$bjT|=!uknG;a&|qXHgIaOAIf zK}0+*A`}}AMFL(Z;G!dI#tFDpz?CYE74WA8Tw&B(z;~$dn^9ogOb*f<6cNfezAh3d z7BCRx&sI_5V*+1+cNFk91iYibzbWV__O3e!_$dMZTFc81WeO3oT|_hpLQ0!067XLH zJV4-&6mZ4Nkb++(;9~@y(s^eI_+tVdrI{zc4G|HAA_4{CPo#ja5@DJq=#d0mnP!7! zux2dQAIZ_;ZGCGm>ysTD5*m*hmNZ=jvPLsqynW%$3Q{e>wl7dVNt57+KPzUW|Dfq5 zjZ&=|heP#Tj;NomD6pjI;h@7$HwaOemNeZR@I~THi}FgaXmMb4l>fYY zJaHcfk}}Z9hrFce?0|=(4(J)j3#D{IjiyL2@jI^zrOh>((E?5;*dPFa~(3QiML)<_};?| zA(6lLWxEQ%bZQ1Tx(Ipf`i0Qa$nUfnrTKIea*BZPT@wA9e7PT_4pWh$We)BabQd6# zxF>y&kwx7HtI5mbf!w?v1sM)at*B=~bj=JfxF?889o-9M^~*;EZiL0_I)5LKpEwds zKHteGedr;x-6FXf*}$b)#u;7FJ^Y;v2gQqSF$9CapBto*n@KVFGY0)Nz_B->t&kkw z1bk;X%j+^2wxewMFy&B7a{5W+bUBH9LSK8o0Ah6H3_COeV)n8rjN=d*kMoB>JE=FYvL_+PmpupmO}W{UmS>@39vngTH7+88 zBXg(T87K8VzViiFaroWNBKJeXB54vaMH=@Uw|WT4(FYP!q+ee=4Y5_-iTRmNL%I83 zUeKFe0$BAwfx?g-d`eg&P2RdcmU`P$F z*@KL@+h}fXqGD4iiaQp0<*MveuG{z5&Rz?nm8#kjhWsMDTNM80T z(l&M?vSfUKzwxT(7AvZ4kc|ypwg#33CSy3b&x`VBgD)7MqdX5)sJn#<{vUOb%C-w4P`CelC7Q*#qtZtQ1w!3}l2vu>i+UHdxMbtER6K^h?3P)I##g~)@AtQ2uO5M%RU6zJMz^q9E! zC?E1U&a>q;!Hwf&&j+ao_t1E8`>CtaXsd0i2xOP{#zW7AtT*v_ppnKhH^fs+7Js-Y zpzKJrZ$=O(7Y9&V@iLQ7X>R|d>I%9PkIhI(5cQh(y}!?nWU$vrj>6B39|qj1W-*pC zo`l*A&!TJwVtE#2KHWqoXc>xF?v~tr4vaiSjDa31Z<31H&>G@->m-sWrg4-bfY=tX|{K!GR(?e7SX5Jb8cXnfAX$T}e*V;|N(olFZoa#-%+yxQA(jvrq0Sj(}Ow%o} z2{aXg6f}!U3<*x?gC*EC=QUE6frjQYXzh19<%W?`;b7Odn#4!XQP!m%EF}oU4#{Cw zHyP{}|KQ>y-I4`NrTa*LY+3CTDhSwSp_ib4mi-A?_K5QEcF#nqhd|G8aaeF@4zGi@ zjW#Wv6knlXH+Z~QOC9@L5nr#_nUCc2L^NH#(W4}XLPF*Calu~Wl;rH}JY@;x^K6_S z`sTGalhMOFW@0a3Ob%o_4VXRiZ|@M@SC@t@MCe4+J?|rY3ayXu!ZiL*tYEy4j2&-5 zEltJ9OlrlbuA*6ntBCO)$HypN{hTH&63I_4T8;kSf)w)fLn|F$Ooqv&;C;f*mb|FU zqkac4lsSgg31d53G9N0P@`6N@erOREtiPNGcXfN?(fy_)FFq-7^ECYJ)@(A)6iMpu zcdVcpiIEXUY7n7YsG-Ox8lRiu-UUyMG;a9X%qK#=JQn)^)~Ln)srWaPJFa45AbZdX zq3=CE(4Y>%7^)kDEnzkluWIvac#ALdWlLr}4T1JhSOn6&00NW>PBlGJHYK-i5m4u#9#2sJAWUzRbIL9k!;_YH@F%VAUPbaetq881>r- zDvi~JqW1X$STzG{cFVR+NZW+9nA&18TbnXcbLCS~ky9k5q)hBrv;AnA{2odI)sFeIg_MDb?heu| z<`YyBp9=m!8LIwXjor;zY!KEg4TILf+l&0!@8kPnBBK)W!JaY8g!N-C%-QjYtd4pT zpM-TCFr4bE^@!byO&Eve8F4r~URQ)t(-uGDRdfZpOwaiGXs5EXiz-9hrh@S>=6xJy zC+d1aF)8$0a9ICMIx5l+-7muu>%$g3W&}Hx(9y`=j#=nI3i^u9OgtF|pb?63oTw+{ z`jc4KE7onr8zpNY6x}Jns`QA}Spkbn2P}zTale75;^ly46RfraNaf8%^VTf`tc+ld zM858J0+8PZfm(va)lf!%MEG#dd$YT5$A@SK{{K;cYyQNYgW0;f+hD6Q9Xl<~Vs@h| zYHwS$FWb9dIXo}tLiaT;0!F~ya&bwy)26Z*QVZMFbJH)EJ+_nxC@hL%EqM zVN!}?KKi@s@wU*I5%N2@X9b^k4Pm$4mUy#K1ZODDE=R|Krne7Puz*(Tc; zv8`(@$x*6)0gWchlAOi!<|gnW70#cLz&=`UdxTZi4KlG8pN=yzQ%S7Hj$?ADeal7jFL-bJ$t8lh4^K9+nS0E*^Ez1CW?*Uz;W7R}P!WEa&4XmfvB__8Cy~nxTsR;AePjf600P280mwUpqub z-Q_@S1*$aLLv{r}6ow9&`{5xbDaS+hm2FIx6RdS4IMEANZ(I9$d9dmQiw)9k_}W_% z7sJYYCK&y94VAHP%0C(~{a0`jdVubA7&PZUGr+2q?$WA`>_m4@53gJY-t}GBL+7Q0 z8%guOU}yIjR!xB$DJ*lWZ;X`g!Q$_wg|Nt&N1>!&GZL1?CMOxCJJ91hQX0cv?OckY zl4^e1wbIRn{~N>QLbl=W zEe9XTGY7*$Q=+?vlgX#2U%;K`8gsHi3!?ELn)VvXb>`hyV1S}i5z2MZ4ZNG-yx!y} z)ZWb?Hg`g@QOeb^Q^6HMj2o>w2nc&HRwk7IQhQwNAoaD*Q^I#lS(TO`YsP_E7Vf?2 z8OHW*@d}ZSxUzj@k!dpwIQ8;`U9fpUxF6X6w5QiOjz)-)6=WCqFX+*|KZ2bo_kZZ% zIp_lflU>GpI<@Oo(@r=U+!!0ej)%ZZM4Nf5;~Q~}du9@HZ>yLSFGayR(IjYC7xe%= zZhY=cdwPA&d4#ayz-Mur{4w$k_Vt4eIt2YqV`biMI#}H5f;pqPG|VVv1+tSpQIKk% z^&Q#X=wlvUS&sVCy8-tS{#<2O|q{mof2r8f5Zyo}~KYYPa`?F*9Q z@cETjWzyS&jsCeJ!CG7!(}RxW2HIoqrlX*r=6Onf0=v%F-ROT?e1pI0z#jL83FbUw zwxSMu!n#H9;1MRaW?;3^|Ip(y!L~-fJ0uvRh0Jk0m=^?n^vF>d-w66&&6ZI~u!|n> zu&YCel;S0;IA4rp@ma7b&Q+XyFCGme-IwaTB-HnO+91Vt-C$iWm`vAr);c4TJ>HQNSeExZ4r;BVVNNa!w#!)Z>oE4#D`#r} z@z;&2(39y0!dTtey_I;=!3x<8;=bkDvp($TJ97j7J69k8doAq=kew=a??+_x+qGwX zS=w&P%al>98n3P7d*)-x?KRNdi#6`HzyiQSxRR?*)P|0Yn-Tw4cIL^r*(~{R$%@X( zH#NF8Qo6SSiw3MeJF(Z&E%Zszx%e0FG(SU@pC>nXWr3K<%_VWL;Ml=vD+RvR$_{vkgk$F0@GJK$niYkmMk>+p)uhW{^)KZHKS%g+k& zOP>0)P9JL(_y>sBav2sGQOTHu;j;*vSMi@?J7Q(ip?#`1{H zrab78li)&+->beX>|7?OPJVt67QKtO3(0;QCzrUTOR!UGq_Yhfo_g@% zM$Gp7?W;=h*83V@b*?y|L}cy2zokn^u^%bgU_6;qkkYmVIf4Av?asOJVBIWSVequv zG<)*Vg`O;Q=@OVQBJyppGfh6>a**5qA3NkI%=VWbz}d+KT=_|`#njw{(;qiDx914H z(bWw>1h>}yU@ngBx{~98Y~V^<3vz4OWcR4kPpa zJ;K}11eh|g3=oi7+W|VD8J@5)i-_6yqbE^B=nRo^!~z+v$rTY*qdk4xOaSJyBcnZW zU*V5WtX1pq-8;h@J*GAl!Rg!a&+k;Ff%V<)8;FA2nxDqPe^g!Y$K`^zktjnwu`>;o z#!i%jG9J~%#K=sb^4AwLFH2Aj8%Hr)u1}@NDUBj~;clr+Bu!?6qt#IN-0B+1`Jqi)zS@?~j2~ zzY!xP{8fBfeFoxbM3y5CVzzhe^H|0dNVwMxMz5aUdk8L>Ho~6DttThMvf2@-wAy31 zC8+-kZoA^{;clw97Cp0(V7fX4vk6ufh^vOs$zm5}2+;iCN%2yW~ zHXBcmecjRxZp8d>O;Gcu#lQ}{i4QJ!U$=O%{cmE;-G15<#GdbfJhR@k;1d-c;V3E{_XBTv zct}6H%0`%Lp$&BKb68yBXTgd+>rL#Nb0dxH>F8|+7Lx;Wb-I^`*Co1GmO*d58;+5I z;JrD6BU!Vh7fklz9Mo5o1{~i8Mk1wA6B62CLML*M>v*Te8j*G z<_IU_tps z%;!mi@?u#ry&b31NAGhxv6G#Rn)~|#ELy&_t>N}}qw)}>0|hZV2Q=eq4r2(>@tMar z`VPVA@3-Ry_MZC@^pTyoCiHWIS)!O@uwt`k{C?w(h%scSX0QjcPF^qpQ@sI4LNYxq zb#j&Kcg>Bymr#E$)pY` z8g<~|_{Ctd7`J!c;7I8ktVm>!C{beHEh>v(WB=;nDcypVI@*2f-+0P{#Z026TZ`Es zA7=Etl&wk{%h`%kSrrWWvJ=^Q5BBDqb(z5hPUr(>wG~V%~F>VXF>Walk$M*tn zSWK=*z<-yJLQ}?e8fzt^$;l(CVG8eAoQ`4+Cv|4F5!IMiwlRY?jV(EkQ84o|v&@C)k?W(n|g0hODEwm=ge#s8?2?;P+DMHxd7<6IH z#CC%J`_MmYU%|iBny&cYrtxQUMexi%{HxuLf2lRJ*}a25h~xirg#9*DClbj@$TZoG zjeSwHqSbntW0~!)vS||-zz~2-;#c?vhUx~CZ=s|BorTQu{?VEC+0dW_At)I<8ErFJ z#*s2Z2C3AIBwfrDQUM=qCN*M>r5{RW;`E^P@Z_J1G>7v%$cg8sA%Dh7NDFKa-O)eN-Wbib8^Tazw1?_d(gk@{ojUktDT- zF0OcyD50%jbvlIlX*wqTnE0w$cQ%9J10WaeD@58&WNa z&9wgv3staL(Z*o9{T9sk2n1+Nf%hNVV)YxABMSP`;n2@6hT<1hL|gqrai?5Xy(OJ$ z(tP9O+j2e({&>!2`-67b(wNY1SS_NFZ~JKdhEhbKK`HA&P1Y@$=%Mk@l_EP+6ETRO zL}SVjPe#0RcPcxXXqjQbtSKFGXLbL?~>Ii z8vTZu7%G^W%y^w5zxrh1J(J!YEs_rUU?CPtVtm-6wi}%D-^1grq;xOXe%P2<#d$dB z%tQG!rHP?vWVYXOZs2~7Orb^FKbmR>Mqe-mIckQSnxR(A+)5Y7Qtx|6*;n&?UvHQ1 zBn$;BH(dl>aH!F7notnaZ=gE{#6cxXu4=@fvzDIYy@XosVOgxxiWA z@xPkoTTZ_aI%RFmB3onFhnU*K6fJA-r`B9YfM-MY5Xw8i5Dly@iO#lA=sJ@E-AKgH zguro2&ryZQ-F^V{-<*gaawdM$iFkt#5S4iw%_>MKJmS;+n&1ViqD?#lMd7O<_%|gH z=c?&-nSvZR;uPQ=lm>Luj&@Ljlqf!=3up8Z>pGh;?a@Q5qF`}PKQowAHj1C&p781Z zU0GJV?1Kdle4 zoQBdik_ZjYJjnwLaSOH8pW`$4^vON2v5Q>c&;H^%2vW)?P?*}+U|)CoiU@q+pi;&~ zj7D%O#3{J>aW0p{@sbb62%=@1!EWOzq^&2Hn;ft9ab(V6RV64wMigSp=JiM2l9(pv zC2lfmja$$y4!~);(TK0$M^Y1o>Gxt1K?*I}?aKyF1B{ajysy0b7aNeEEaiXkbF!F*&1$412tY1E_?*Qxh^wFke>WUN=Q3E5l+*#E0kH#vW>c~+~#0CtY z#`HD#iZy3~iAFa6LRQ?@YSi5qnm~{|z4vdI2x*3}yo+S#%*o=jR7+2rQG&_+_`kZu zFlpyXqqe^7sH64Ah0?3|3iofwwY~{wDJ**@zAZOjn*jeg$8jGJ+!+i%$exSSQd%JF zlTwM670C8Uw|d2}lCr{n4Bv0i%AxK)K``fFY{1N@JXjYoZJl~!LI-xMzt!7@z z^|l;sE>ESfQ580+!UjheTHi=8%CkJhd?Df7g$Yn_Hl|`z6>3z`pnj zw}T=RfH8wHJ2B zMO2;z8zEWme$3#xCYF_G4QF?2m+M`r|H~VJh--e)Y|ZQN+xgNU>!u*CpayR}CDKBC zPm{L?SJ~aA0imqZ*Q>l($KSC?<|kQwpgsi={dY%2#W2&1UJ-0*$)=9lTkLL<6`%FL zo;()jv8S$pT$6ho(=DT|z)2nM(QZXzdvF0afQ`Spb=>jxD0~zqgYk6*eIbiSZr%%q5__X-alMey^Ylq)8)B!w zg55n?<_?tidn~`)LrmTo z+E@^BU6%x~@du=E!~Pitm4&6fa6#r+zM4mS;O2~UdNN)GFTKyNk7f~bpwn0XK8jGb zxqCFp8lny=u+r8(0~+$L`ec z#xD2;@e6=?^AN0I54J|)0||@2u7?CnexP-!kMPEX=v z$g%M^5S6765<92sstqXnitRjOp+p`B5r2^dO^#MJkdGMP_oL1R_pGy;bDpm3#lIUnG3}4O9qC2{HV!=L7O(9wd9@E4RN;74I7`=Tz|qRs2a0cKy_t2-`gs-fdMlMHM!v7&ocH@v86* zRr=ia@ixsq_x3e$&ZB)eMa6iQDx9kd7pTHnD*CzY!f4Hcb^wiLttxy{6|Ph;xVs`zux^r$!8a0VcJTNS>iB6v>~zfToksmf5JiZ?igd2cp30eJ6GRbfi|Hq*qb z@KaRbTonWRRP+kk;^onFvJJrVKdDNvRu#@tXQ&DnsKRSi;oFX|SWOFb7~${C4cE@b z*MbF+&{A7~FPQjeo8RWCj1nx3geqeTYl6( zUUUW^T&4j=yFYp@e-hp<-_epwY> zs|v4Eh1aXXn^fVAN?7EtDO3Qw{2Gl#6^52#I|gxk-7bt9^>$&X5VZ@xqzdmB;dGIo z2FI;-393|K9A(agg1Jv=Six#b;NSvMVIWP11^Ejs8Xn@80i@K>E|f!x6Ann>f_eFD%fRKa zQG^XGizUmr+`oJ|GSj+Xk!3-C4rtGtlg}CkNv7VM>f*wj*>m{)t9*%qu;7NG7g**j z7GahgQxw7m#}xVYf?`5K4*4R}@HC69AYA}<=PuzpUsCSC4w$QeESb%|db22$U3s&p z3w!HL+>3qtO_3i9np4!7bs8n(GMLOm?O6taJ%a#W)Qx?KBNiG86N3f_bu0(QH#Ja+V`W%+EzNix$KT_(#-dTo=$!Y70eAv)5DTZ}R zlLFiY`n}PT(LhBjn6YfeVk$eDgMF1I85eQrvIRu~$jeqhVY$uZu&jY1r*=S~Uop$F zLJnGID(R^nP*v7~oSBOjCE z+|zTit$q@F{G!Q^z4oLvmNh+Twc+X(2Zz1WtgmX>yc}yB+xlW$$mzx$D}*k3>uu3~ z1E~k&Y&^-&6aQIdjC+LkEW0}^yj!T!V@cFn>tr5eA7nqexzA-4J8-r+Xn)NBov*zg zyF|*K1xrVJbYy2raFcee#pK1F|3BQK^4r$XM{v)~b!Dd?UxD58ozDKOyvvSm?4`e$ z0%v$2lL+DkPon&TOl1=^$^lsHZ5{Abfj3o!KTd?PIP-_oVdFma2(eK%SVQ@PS%p7J zHuQms9?Zx5QQ%lW_;X17D)5&@xJCu1PgL|=m46)UUcn{Jy53!aY@dpVJ1T^4MEJf6 z{)-4JdM^qCZuEl3D1H@qkO(VAjud#53}-)ovDDwzMgDkPbZ@NmKJ*;8#`fxgva11t)g`^xRRwcgf-54$*%KQ{Pae z`xQG`3S7z1C~ig+_?K`HzceJc?|qq|CQ%iy;G0$OzHnK%(HPwKF#(^iiq99}6)JeS z#BRS58Ekt=z;~(QPm3^#9Mhxlc};|CRB#eKrst{(?n^gtcy6lTJ!QB}b4L|1S|qry zg3lIkI3(wf!q7?)CIiv*DDcf99IJxw6yZevi*;W~uwO)&RS8}b;i)S41reUFf`2N) zD^&1*itr|9IPE)r5`bOK5r8YluR|)hUTgqrRPZ4-DJQn6}*dpA5y`G3V4kQo-N>4RqzD@ev`x5=H6X&wo(DRqr!b&!0)Tz#|7Mz zDjAPb*Y69sQ3d~6z++YL-(`wDC9#7TG(n-LLDmX-b z`IJ0T#3!oaCkeP&1z+GHPsx0bfc)mG;&+I2D^zfNpyN~W+ai9KD*h7zKcs?xE8sOM z_-_J!RR!=1YEheqOm~DE{SVyqnI-lc(8!Ss^C2YJdw){f`F1> zl!!2^666Z_R26)sfX`RKcMA9l75tQdZ*suVhE#&HI(B0%JTKq+#04MW7h02C=UVe; zv2_QA2gxc1B@6K}?b_4HI%eOP?9IM75EsbY^0fiX@My9-i@)vR#hMmc7qGrB;uFHP zW(Y?goK3>kpSz^6U=|FqOWlw`7ul-)-}{i-%CQHmTv(+rXSpm_6XtAho1b(wEYQS)MGDz6^i;kTmQ5 zXhrw3ML2)eopELz($%iOztozs_}|o<$gT1bU%^KVy1#m~a{?Lv0LPz*|99}GN%$OW zAafp2e#z4a7-u)qRtDxmW|=$)=r>%$$RUAChcuibab^ZefpehEu?}MJog9g`A+h~V z!pEtxnIVx1!75B+212$NHUiSs{zBDM^NFzW~#L|RK$#%rv>a-~7~5nwGx z)5~ayR3$0EN_56bQLq}Y;36``DHlk3qn2*S5oV_dGmkheM`TgN7!(ivWq1~k*@Kvb z@A(FdGBu%AT~^J%GTfEsqmf&dKS*dDA>7ZJ?dLfPPdAq+mam-35{j(BHjtYtmxkC# zqB!#K04YK^Z{ZPejnQiT!fZbpy^pdlUul95yS5}AoDK9Pct{Eaf(Fv-oymJfO35Eu zOZXP+15Qm&VBf%rG`SH%d}ev94Xz{3(0nH1Ng#gKrSi=i)&e$ci)#W(Hrq_YF*ABT zg-g!;2cT8tY-mLEROFcnL~u1CdOk^`PTkU93z7*RC%g|!`eW>0bGlTtT#ON$XqF=G}Qf^r#=d`@O(Kp>z1)59# zz;ua5LR98*W661KlP#Fu;Vh5Ct)30dAXaj|6$#N!@IyiEgSP*#?OHkjA~Fpdks;5$ zYpY(<`sgB!#zkMcOaXG{whSYRfeOQdSDU`{(jOo&3b@oMq*ZXGA$L;QdupLkE;ve89@u6T@EiJmXD`F zkp8zGXlt2rN`}4(IWx3PL7U(hM6OMkvSJ~6)kcbZ)rk>mgW8RL!x$uQBQ_Kv?#Z?g z$()4HKr4lW&;Cx7jNFr|qwFrkKzX6r5ueyT{vT*mUN?z+X8xX63#L)NgEg0%;kVgr zzXsavlO01cS&hYt$ZvUeZH$sm0{6RDh(>PDD4J$v7F0Ld3eCGJK7q(=j7lxJ@&ImO zY}7o8x(avggXP@0`c`AQuwou*PsuWttFU}!J*%w#!kJl5h08zhKWKQQ)|4n!&HKia z5zssO;Ai+-vH#k1RV8CiUqK*aevtX)yGI9iMRI!9;xC?F@EE<>xx%2XQ26#g?G@-c z%zxox5v5%KnCn2^iMk` zKsx6XWUbCDI09|azd@Zfdp)FW@|R-=%|+JgCn2`+Q{ZvY_T*WRc@KRA@>1Mzd)hnD z<*lFb7=nI)=>|cnEwmXz?p6L{km51Oh(Fj)5}baxR^HylEy#Ycl7(c=yy?NuX@ zA{&zPaYMkrvt@CmLTS+s&|no8kI{Rl1wu#}hafxG{IQFXMIM0c(&T3#om+JbWXGn! z>eJ;^l&<&J5M@s$8`??bkkq>N$SaTwBO&hx3n3_5e-UD0EiOSYPZ8&Hl z-ajA^&+R_f{VNhS<8onSnhU1a^@dFI@wKq77dLS-{@nwq#>eoc`w?#$u(c_F%gA^K zvijWGXZ0r=Aw&inpVDWrsdyK%&KWO2AfHl7&C<>vNs{^r2y$~7x|S7?Y36ck8AFf} zhb4v17qGZvWL2_JeyahgU~Z=3JJp?87-Cx6o&YqSauOTCzY${Cr>td;TMv5WUZP01KSen|hG! zc>xvn4sKgc;TLMBSrOes*vgV^-m=m|;}4~fO)PVR9>W|MYUHAOW#i2phQ^PBcqfNt z#6Kq3Yw=`jzlZ%NFE3s+Da4BvTm!p}CsAl#fH7Vy1qF~6da-*bsq_|F;!0z~04y-XwH5dWkkHSdp!#@0;RV?W`FE zY}>zsgW1|j>!a-4Yim7OZ4&g9f2y<&Wt9`~adv3m72a&tHmkX7Le2nK=^LJvo{-aD zdFiLT^c64c>mNFXu)i$qKSCM+>jXbxY}`r=_LO!>+;l+M-(pf&osT>0zIA@V#Nx(B zLV(YorS$9)BaM_;R!^^B%(Gj6EAPfWi}p3@ZaAh3`A8q!)wiRUzYK(g;|G-!BBZr2 zXbWv~mLFuplmXjg!Z_4&2om<5y4xWA;mvZx{JOCx(gH%H-9BxHdUpID7I$`grbhtV zvpWjsc2{rMb_>FE*V_nPX=$dXNqQ7q?JEpnXG1r6z%bL<1MZRhXuoK|Os;eMH@9w5 z|9;H>pnF2t{O-#1hMOt=ngVAHT1`T016!9L5NEw;JYAR;l=xTJs40 zb5gd3KL}a&%_r-EInXlgKcviiyINT zf$fYzM!quKfP_@9@K~6Z$jZ;gh4o0CJOPK|R!cB0W%zFTp8ou(0-TAgQj>0tC-k?u z_f%q#b$-qo943funb5uz=JK}>v2BH;16iL%ecajL{mZ=A+~=(E0l9MKI5rDUdv{p( ztznTPD~T1wOZ+cf(q1VOwGw^C7MV8?*P6Gm{n3EAaRmwIO5fM-J$C_Nrte-J&ceEv z>ur-z4!T#e$;S@+rIM9UcaK5whfP>AiZD)9>%hRRT^wgYbR5s3lQYahRGBaCErBBPa#gxa=vV-#n6F$nLo*ky_@v3w~gvArLCyNa#78cRX!E9 z95*OlS1mIg*@|3K+T}{+r*fK=@|&Rp(N@m(m64?|g-y3#``Tb1y%!!9i&F;a7^K7H zA{^0gc!IxwfRUo#Fb?k{?3YH;5py`p+HdVRr#nF0gCj28(95Tq?XJ=A!CLVqIE4p4 zoUP#2R3Ev47#D+xQh$vQW`XpQA$K+U4d*FTvg&&n)!Og|e;@K4UaRS~JoyfU&9^{T z;a~f$k1pnO3NL~g#|`tKMbQR*=@U>J5;qRhz=7jRqZe0bLG8d9C2ugE@XAPj@$@!0 z*EDre=AR~vV^?UZj#S1CMl(D4V}48&=Fwj)aCtil7aQ=E`Z0eu(P0&{2f<@mu7$oV<$%?Fws75wA<+%4>Phq7)~0!ndT_mE#wjIz&==N! z@p&A6Fy)aVcTYILmKi{^I~c%3?qC2TQOl11)!Z@n({wv@not>SS!N&tjc6robj}YPvUj zetchj*Iz&Dyxc+~P(1c~T}C;Fy(pHoT1WR_-@Ib=bH$~B2m9?6YnK4kF$~Ko9m76^ zvw*dMkuOmD4)Zg>wO^{Asl=s1a@nD!cf&B!^I=*u2%&6B{dBo|MDU&rRdL2O8!n}5h+mBUEx z@erOO_Z3w4bxQ=DlkEESk@!AQ=jInusYW&f;X5r0kJ%W>^o5>&EF)&4aU6H>n21XZ zdX&=^p(y>Qp#I0#1g7X?TeP1%`7i#ImivFgC_*Uapxx!JWB& z>=NKH7xk}&X~%?b_Xn}DaT8{;+=+&d<-_^$3uVP@-#_%(Jb3!d2MOU?HZ}sPG{sjo z;tU;vLpawl%iHCT??p*VaKauu5f=WAbwJP^2kD60&^xO(!Bp!WxCLgRi=cQ^VOB04yAG%GT2gKgy@f2#Joz-T{3yYgF&Qie zI5f^6%pz)I1PUFX(TNadaT|Gk1oQ>U{+MHRO`kJ&0XNo1-i}~y5oWZ z=6U?q25X;Td!I@Uv5|gcfWw@l#^Jb+jD7?-x#d&pIucn1XwVSiQL$*jekTNNKVg%Pk5BmQKKA z)e`s6FlQ@~eAI#NWu7#i`F=kkWJm0}fXD^B&J@-m84qUY(W0jXX!^2K_qGT13xH)u zp?oHZum^5`Dj2a#>f&`u#Z zAd#Jeom0bL0ie^ec-fm9-Agdo-^RJ#h;w%BJJ8l^3_pZJ>nvR1jQs|hRmIEJ;Z`QR z6FP6#g%}a!t16C?WjCRta+g%K)4iiv{T$pw_3p70Rt7v${P96_GBgLtQ%8#dl#8d} zW~JT>Z_Q1|VP4OFuYnbli?=-T#!(#&4yHH9g6JR!rjA{+1GgRI!i?X0B$013{#G52 z;aE{V2^!xMVU4c(2}II-vomBmhFiW>E;5DT*>&RiLNZyVe7j}9fqQb$&HD28PivmqGEHwAFtiwevk-= zBjwXGzaft^f0)oZdtiYfkDMFv3gfD&-1KL2#OBgx_f@UlON5mq4MLXblDU;;W#Vj&cD$ueXdxru1(LY>BI5o*#7M{#dc zY-luKc|)N|Th)yIGPt}iEKQIF$+%#s$<|Zayz;(CMtD`;T|oJShmrl~7poU5{5Rw` zaOV@qaz{WG-{og(4;DUe7%orVfC0&oKU)W|sV6;xWQ&m}>*K=NgkP)yvg3!`bvCsZvoz5x)ef`+I2i8DhGl)gBT0dhZZPB}I-}deS zOe=x)X;M)v8`0f!9BZ6{KAW%e@s$4R#_yh5(q6^g(_1hbBc#K)rriPWGOa%kfq#XtDJFLCICgwvU14JJX_xV^ z=tsdbro{&BAhzU9Y^ct_#-fx3-_zkxf305h99Hq;OFX?4DY`+d4`Che;NOvPX9Yz) zbtVaJILNN$4x6uslZE->ZLn;-^SMc|xc9^(RG)k2&PB!v;_dw=kYu#aca1gsY zALPq!#ehjW=AoT|@K=!ZGA`~TUfzfcvFist!Rd+LkN05}xtNhJ_ksmS*s1TxLgr7< zv-Nu@qkWM7KT{Zo*q(?D-7?uInLDw6?->oH-N{R#-RrvZTOCS=ch>yHQZoFwaxYb8 z_#|-X#{RQqbquSD-;E(QX|AU$pVC3-fJLr06E>DGTfZg3; z=J6*zDu2a#7-<}U3&P?{q1fmAKF+ypC!&rS*@>HjVKs2b|3lfAz(rYof6oltu+D%i z10sxq2xtgODyYclpfd=FyHTQMnxW!0%qS{@4wwUiOX)Q#ZF7kdwfZSy5oV@QnQd0| z%XV`hmo`*Xc)#a9&%mJm|L^-gpAWeyOLH(^6vQKf8nr||KZq4K>XE+1x#d_0LwkdpPF@27$b zUiL#{)u4lOf?&{fe$Aw4_Vcr$&}D|y5If@PrDo?njX;q6EAY>~w_pgEyHB7`*;_b` z=l&kZK>`PG{W>1iC07VW9~`XiJGKwi*o-dXu{DqMf{VP;d4BBdqv#eMRz12>RO-(E z3NAWYdtfyf2a0CKQwn^R!_#iodDt)CH{V6{*O2@V+OTfJ;28Gz+SM>Y=~*CV6*Upw z6fXQRLC#w1BT%Vlshi!s92*x#E6GGYoux_x*t@zEc#n7;6L(zaL29grU zRJVe3!kHUR6Y2(c#yOs0zDTJx_|eodO);!y1}2vHv%(&)D<|<_Avc^a_QN>~jzh!@ z>vZI;Fdu4o)cZKy43?rDv4%4rS6Bn zkaqo}NBSGzkg=*!*hw`X#ARnwGuPQ1Ai1<`z#VkkX!PloQLofjQO?u*{DY-GE8=9|s!!LQ(m2u2_U2AtOK!#nVb`X>KiQ)aHhZ*JV91Lc zy04fP7DvRlZzb$UAf5gdkMDO+d=9Tn*Z#(yjye?kn|t85Il)g08iCFl9QRB1bjzeH z74a-5!8n5XOdW@%&H)(P;H%D>%}Ol&jeeml_mLPZx@+KEGwjNXFk^@Yr7Rx!&m(rIOHA7mQCMjaLql~D3;bn zZ#>p#5?E)}@0l<--y2ps+P7epxa+Sx8ur;z}3J_{hVBz;2R>fDgV)iL)!IG_t){E)f@mMx&xGi+S z(!G&~eS&p)>>$L3kkc`~t_<6XDtOSUGj=AHiVMT@klzR;Or~uOg_|2KHU(|z^AYg} z3gR}!+lq9!oSit_d;54e_u`Amrma{c7V<^nw(;@ICwH=r)eSXfvEQGXs$hzLd|cRw zVaCVZJC|~7*>J468ipA+u-qi$-|USOJ|XOEveEtM3(3ZdQZnH|SAZVbTxL%qi4qKm zSDq+Vv-{aIS@qpxy;)QoCO4lMyD9Ba~4}i*w!|0P8uwKK>V@GW&QL`({@>TAa6awKju!H>}rn(DeDKYvNP-%eCGWy z4tBn0V!@ExJ`F4D46IR7zFCW2+=fi^eqM^tfoQ7gG^1J;BpMZug_0_ng=rk}JStNa zBU+X2DdWz0WIs3<-8A(~&`Ab-m7@oz{7y&nBlEQ)wOWGE3R|RwSG6w_nNDk2gm5IYAY`iohb1 zJ;W7&*Ye-T>G)iWs5Q_$?rRBRoAvzz*^B0~0OpfnjF;s|X?A5{bKY=;qmel+FGF~J zsY?#Lap07($-@&&bQKouh007UGb3U0DmiczCfuE1nDxI*Q*E!qTDJpj01yd+2uGjbJP)rcJAXH&dz2TLs@L#lm6RXW8q@p z3nv^oMS<;c)#IjDz}Wa(%7fTPXJ~_xOrG4Oj#|!7G`cGR?TD;tBriz=11c= zDE};+LtQ+KFz#@K+vaRi;LNIW-vr1g{qPpH=YL}0@A?L1a1)ZTF&t+!6t^ptLtc;D zD<%UWmmWBNDV_(0KMDsd9sz4amycT~8+!;_@d=ZRo?P5R24hkwQ(#Q$(6w}|y~%aM zRm3Sf8L~v!Ta)#~2L;24GbbD4XuDiP>$th>2X8->yVxV^rL5t_uyD5UwaM5mEyhOX zemuEX?M8ROPU3|r#$l}KFIaqU-38r;rpW;+Hf<{Q+uVZTg+UnQem4T)BcR{`l?)5Z z>^Z$LObhyhHjaalXJZMqdwCdZdzUtLd*A7imMZ3t1xX3N>mY1l94CMANA=t{9~ zoz+_{TLBFJ8yF;oZtPIVI?;AS`Y7A|iffQ;EiJ@gUop%N8?~>WPEblindbL?qCNS4 zFejYP50W}D^`c;GRQuw{vV9mRWbCpawQQkOaKbffiJLT)&6?yE&dn^6@c`P3d=?wr zPny8i^^FAK39Rh>`vo{{utQQvL@9cEx8b@}+w)Y2M`59EY~hfc1&4;U=E0E|{g zonRz$ejcK!%vU`;pnvB@w)I-fnYGc~3R;3>b&Gipw8muhj~S;6JAj&>U2y<-xXLSP z9wKPaFW_T+KL4F8-fN{&9G*N0E57E^Q~C%?n3x&MK5v5A+%PuloUb*@N}mR+rJ31@i^VSUYcX~kdt+##Fahe5MAB3S%Zr(FJcD05*K5{F#wKE7Tr@jyr zI3rOmTM5e=u-eJ8QdVO^dSRGSdWijSBA_2w7Ccz+>CEQ`A51?fz&^htN;E_k0&h+< zikdLM(UAYN`@-B=Lzb2V5JP<*Z%#s{Cy_SV4N;Xbze zcy>73dv%6j)N{$4c{Hie&bJ@*Q+`tP9>lIjJ?O^fuUzlTHh-j#VN2D0+{{{tcPle6 zQ^+-tDzHw8RB2%K64MAoj-QJ>gD%P_e*I5Td zlC5pE<^wm0ZY~HI3M%@FMGC2IE;lsEErru$Wo=IQ5K2mdV7fdl;X_XL8h&hk9C<^E z9P$HL`s*vkaS8tDjB+?E&{vEYkO6C!TI(%s%-?2>^n3l>uf$9eT6rFPioAYK`i*Yq z2U-`2R6n;vC%vkl`++XzbVkhYS`sAgl%5B!(XbV&wO-_DQD|i$_AeRMU-Z_?+Wwf2 z^>eRwZuPI$O$BB`DTE)t$>J6>VP6xH-|(gYS%NE&Rn}X7fE9m|T^OdfUb5%CkxNxT z9HF#<%+sqCmCqqRjkUpYL%zKC_zEv)ebOfi%S2#+4>z6kTOCvs^hqBpEF%$?@S)Dy zsJs4ohV;D*2#{MYnw<>(8pRQ3FHOAG8)7~uq|iO;DELEXX>(Gn*C20wg?~6CrJU!- z*=032e7x4<4qmigQoObEHyPeK_?uI_vj_45E@uip(^agAOwF*iLyv&os30Tr6Y|qRGRg9LyYBiA39SmHcCb{T%oyyeP)-@#TcLbpaDrmG zHZfH(J;R)st?;F2Uy7bSC2_W5`Xh-;6}|-M3qW*7s?Ks+R#0c#gnYGPsS{D^Io*j% zC>81{B#lGX=0V%&tJ4W!`8vzbD7^_4JFqleO7PQhm+Fk5R;c@>03$@i zokOcg?S@oYj$T<|)JfU=0^?BUk0Bq$UMw)CXxp(8N`nd9%75{qP5NbxM}-#@gJenH z7Il{>gcT@B-75TOYIoXebqtbA9k%0akkJ?;eV#pHG(Kp4*&azkh2uzBMEX6An;E4a zW`JcYi=KewnqGR!auaGZ;0^`zZD*0B+t}e{X?R(?@!RD>Bst*uQYu!B^xu_A-@HF`m?1$R`6OYG~}d) z{;1dWa~jM09h%y5#}3M=J8uSh>m)>gQ>P` z90lZSuu-FJm>=<4$Gz1^EU16l8irfdPn*XDjTVGF(6Hk3i1?b$lXY#}c!dD7lZSiS z!BL?d^_zw;pIOl`Xr2XsV5iDmd|9&}4k4<|K{!jIv$vYta1`b9--*!Tcx)xC(ymEW zvZ5Emaf@-5_D}U#E|RtaO#I?@X23@3kQ7jD6Nk~|0SO&qt;Pons;58)e(4Ba=8)qcJlZKOM6zFkYE&76SX zE0e?xUftW1BH4v-V4nBmTeysB#O{sn5cAw{{mii}BU{DQ<^6Hq_b!g>(!UvuGq$7a zgIJS{4$t^u_#~*W+|=gak17RwGR#kS1g7oK>S2XZeM?=&l!QzS4E4{k9AOWA@NlbX!A zxwEisMuTi1e3_CO0NoSHdI)L&&BvaF2f;o&u$-oC=ao&BI2k(zpBuTid%3f@E3wI- z+dGfhopdRP|EFxic~-lVH@~0V^7ZgARu+Xrq8j*+V@J-?$rF8Ek$Yhif8IrnT_y%c zd!NO)^|Qe$a+ohZ^S{A9wUR6boI3R!$7vJhiH+wtsL9<$XCRTz}S-kD%m&(V*xBDryASXTJ&*iF0iVi&t1a|h_@>hC8s59 zt2r@PDaR!mFM+J|qcrkR;BSV&v2N}S`>ohx$ce*np=2l)lW_DB@==yY>fum>c2Ycf zhKj4;d@6me*CCzsM8{9?)r0JH<)M+*3s}Tris9MV+^N2fH);!zxK6;GR1%)xU;@f5 zbGWU7mbiNpXaK6IosVA*Po<$Kv8Gu5W2YmCEqDHRSO#4`Mw1g$_s$G5-|Vf2c*vkpC&7*S!%?NAKKc@t&aNfSkH{bVrAo6dP;YVFOJRFh z+ORU}UNlQMn)J(4+FGFw-I`{Q8T#ld)~?i*PX$T+XFsC(9-%Auvw%aaT34Qi?Zfa) z=(A=5oNuAvEa@V57uAs+Pnf(+uyACCjhouq#PiTtPun&j7#XvP4~F%`UihTm`l-$e zQR#m)q__LO5dY&yB@#c$&)Gup194}SzT6~`Dz!=rfGCg`ClWut1%SJWUy@wUGZhHP z1AAfH8Kej83y%6U?{ugAT13)$F1Czt5AvMRU#Yf_0;~+F*!zuw0OTvQptS|U+JH37 zBvI}e+9Y@{t2j)VI?^;pX%Rv-wItWql5uaWfUuK2V*$^W8PJnRxZKkBJ_!Vh53(nq z-8d~JLFnBrdFba}7uWmfxntRYXD@8q7i7ljAKKVNduj)2Gwem%L(8|5(zFx#499BJ2bB50{vC$N@rc1YU;Y~t6wFoC`1D(|NSb9UBQKk6Jw zJTpDED^%%y)Wjg#c$TC0?`0;A4I0M)UM-9h>#2$~H_Is>!0IoZxZ|Xod&kbgv3?a0 zquow4_%{-h!^sXq8uozBmK!dLk{!t2a>GecvY)?56{V!p0ks!8Rrwk1!jU0|Zr}up z&6A%6SW9%mWsvJ#9z}>Hi?=K?d%?$P4BAa&*#GP1{@b}P?Krkb%1(HCs6eInEz;bx zW&i&WRkT@*_>1GnTWb}{qrrjpSpnj6hZQnSJQPZtI^KmgkExrVfoUsnQ%qjH>}1d#IMv}J|jT0saO z6rx!bs~O$e>1W3b-7OA|ed`1|UPE*YcMxb)2;Gr!#vZJZoB`n}&V{bG1X$qa%3Pn)FaAaw@)R zQlKV+3IG%#*{ScCp_uTuh;_WRnPZ95vcKu*!%_%$wrc!?FWX@JOO+V>@J}Z(c$)Da zULs3DWgR>XZ=_woT94%;$|YijNg|wuRU;4uI9g*M{mSu}s>g$vP(MB+<4h^jdI?iC z93I+f{5#%QrGJC`Y%>X?P9|i=K?SFHEppe?#-cN9L%TuP0W=&SfdB&k7l6?O@b4|h zGVD3L$#Wn%VqQ~@og87dj{(j!STsk&WQVX~#-c%J4{8Q#Z|cYlu)0*D>S)+3GxqWl zr)=~%mZ|F${X@+9E(W*3UJflwwaCLTic@o1(w()lyBYw<(WF}^%*)&CiEJAYh|`*c z@7_Vrbl5ET6ceFTK_i!^(;z}qyHQAoOgMPU3_h>6)9L%L3~`1b6o$}}3iy%<4WWKm z#?8GK8-f2kXUB$T$_I(POYxuee$m*&e9aC6wKL26I)_6$ZTUQbC8_UP`ayx%PHKjo z1V!w~Bx3f?epE<^E`P^?9g)XOA($qaQX!_nU@p{I@9=QcE}cdUYIip~ibrLM9r4v9 zESm|%TTj_eqAZbPb#kM4+dI_OLOYedK<~(!b0Q4HF7${Iy|bUXjTbK*QFF(hBAQ?& zK$K_Tkc?0iY=6-aiM=^Fi5)-y9R#A&kP<&UBjC=bSgb5q$E(Irb4ezK5w9tDj=*lz zc6ReTp-b$B)-*V#|5Ic(AxMH&=KZ)b7O`E5qxhh48&7-)RAHY}6(ucqP>c`>UM+AG ztf$Pdqy>XWH?hO=2Ex!g6gOGAxn3LjCX4d|Et!V`XTugNO}z84O{NO|FU&~fMI*ZL zBJRtUwt@oTMw>Y^TEH8x!;u-$#zEXS2v`&4XIig;73r+s6E_km{yUwuMNxW{n2|Hp zv6C6u$D+WC_M-@)YcDwR8*nUf$ZGJWsXf>UR_h4X2_;O_zjs10f+B8tpBBOnZtjT7WkFGOzBwAPNhOy{pS`t{7}C@R{5IoF*63<8d}(6=S!~A*F-u?H8i>; z1wHks%?zGI1FiCgj)d zJDu`z^Cr@euIf2}>&u^x+z0?-Rv;B31fm;SFm_S41qnI<0YW?7uGo1zHUoEcC{dSL zzDdZC!-1SQ&NL&86muyid}z$_k?L5Gxg^99#)=7>#$;y>w_OPjx)eo8sZj1H()dHUC@q#-2gXd6%QPDSgG;yg4|nuyr-Y9uYGM7J%Rg4lIKJ zHv*$Bz@Gg8m`0lI$DJ`VK&8EyFy^!h{S9Lu>3*J}xf#*i5Z2{_V|Koh&|uq+V2&fl z@DqITEfJU(HYi=ZiYhrQ;XA?MBFKig6i-I=THP%V^5o8s05Ah}8P!VVNMY&CbLu2f z5FyrJkI?LaW3Fa__feibcrL=x6DK&PK4er63FuZ7c{~z}O6@Ajv7~rTqRe>67!`BO zNo=WGfZ)iZs{B9paEcPr;pL66kexbYjPaRF-&kE^P+{D&jzh-Dso@9{i6avuC{s-w z4qe2TEvcQ%n<{V`Lz@U9+inj)rzlNl+YTG!q&wM(!^R#X!Q+WMJDZWD$%(A8DN{6v zW8&7nn!4(zuqwR4eiM*J{21T zjQnnOfT+{pH;n^vEIjv3W1pUU@qpts>}~D>e2TsBrZLF88ijGLNTvXENf7i(E4%cjajMxquBo#?s9-l2x@e!)3u;46w~jRI#wRZXi!idi(t_3jiy*@t;6+5^ zVyvQMnOGYEDZqzN|6tJuJYl;Ja1igMcGueh*(YxqgHvPdtzc8(jc3QZM?v9q{03{8 z_a6`fr(!YxG4^|4qpble3Jiv>r+9+FwHD1TIVps7T2oocUU;TJr4@?mvZbP^900(C z%kvfCTI#ITGwha4%U7y7Fj>Q}!zZ0u^WR!2yP6Lz!s1YiR*;X4{~NNkyPw|z5#b}o z7`m0*&3tZ;8o(Nl8b@%?=(J>|C*FxQT$s|At^Gi&Qq0yNq?U(EB+xwIF$sg_2ePY| zo!mUQEe*sDcG+>osV~!<+Z@QuM;5!eXH)g?JjXtjmGxt5k7la;iV>E9uouL*lkP|q z#LRDoD`XZqzsn3GCmSR`P1^^0>~j2(c*iBmnU3Xs*fS6NsbrrzlboqJ1XF-i5-zc; zJO}br5((MBlsagG%f;{%gv&a0$>G9J41Wma$s{WAtE*fx=^~TZb48DdSDNjBlu7(% zcP4laGXy=Lke|HV^orwv>QK;96eY#r_&MMP@O3gqEB;Z<+yKBh-pmGeg%H6j} z#UA|z*tYdf2Fh>Z*gMw!kV+N?O9IGHmgU6O{TC(_xh28aA-L1_xsi`5jDo^>{!>o@ zm*6G11)m39$aE4u4q3TSv}yx*Bx zV-O=6$(O7El8@`gJi3(?6hufp7`h?2(LD*N_`GSjfvqBYgKd403r~^$GQ`t;YA4|0 zRxVev#ww((f^j>R_b`46NgcgPj=uDHX$dgM!ewr?AEB`h83>;ZeIW%2d}Uekg-3!n3zQ7&hkz z+=27z9l3_4-?dT=H@jJ$N>*2d`)fhN-2@d6kH1LMq>r1YD~-(2QkdON50r(RecW?0KsdCL>ecYRxP5 zLr9u*<75BD9d5NdKzLImYanyEi=6)Q2B=#x2CcS-I$&)Enz(K?-2W!Qo&2sEjIum( za_m8310Fva(MA?Hv`VJNt_~j$!PTsuX!h|yGG#VN4^W5xJoO+tlx#gVh8Fv?Fk3Lx zlYa-rreDUGY5oP5={^%6)6MCnc?AYyRR_AeaK{MfcE6Vlz1+;v7{AXGiBf(!YJ1&s z-Xlt!^OirWA!7t_mFUeKZXmPRk;71$HxbuuWW|YL*I6UdZUfb|{hTP)Jmf>%e8Y|< zM%cA1;Cux}0=P1KVG43?e#H$KL?pllCOKEm+w23uhGJxzOfu(Oup#{!(nqJTwp`>a z#9GioRWIWw=W!Io!>ZnaK6=fuH3;k1AF+4(qD^lMN7HE!d9&4lnRw%)V*4wod4SwY zTFVB$oF2i-Nb|q(b_wcPwg>h)`@%>ew-6BWBbh89(+$lTI=qpIhuA|XfE!3?z5(I< zEV6sK;g8Lrn2SK9@J|R3$Ib&|X-Y)|wWTc9g*623?Za|^gK5t=8>(NQg19>30-O>r zgkhBNx0>0NXe;M+5b!6Q>OO%~K~Za_NN^#63&5dHp*aO&rFO21KrWoZIN25+g*XQ9 z!94DMn#Oe189$LaLwc`32fPOY&N{Lh1Tqyvmy=`RDW$zrh+>6?B@*SGQaI1v#CcOu zWaSIMKId^X2ygcE2_XL19O!l(KZwTWX&dvkVr(OI8LwN>zH~?(ltZ$n=sc)|cddsE z+>Cch^JY*Tbqe#C3A$=t*vp$_ZD| z^FHK_4wnVMRw;?<c^(fvwW2jGkVy@j{$zo(sFC%7^p87!WeifUMkQN0uiH zoW2CwK>?G{cIFAjK{e;;D-ySzHebEyJIryDmqi2Uh*`RX6 z6eUZ~)1u3(?Tjn7XgkI=87Rr|L{qepSUc}UkG0^hRh5v_;e$4>2O{#wJVi(wdgs|w ze&`*FO}~mkmNO|5Ba+N}6utwRX|6`~t52bJJXsEPe$@;xnkv_LMEs429It-pRPZeC zWg=6K1-kL<-9H0i1BDE$@R7>LOZubsUhy~r;^yczr=nw%*D#E*`2LXaA!DzxSHQuN zS0im%GHgTe5tf&Yn)2AXzmS%6q7{{xZLp6~`V$LeWHgnT1L77NPa_((;&~V@fyU= zLZ+j*5aRfS-01DY<6*p(ZK3SzPJnT>EqaXtC^MEmDOIdl+X>*pGYOfc64J|_cV!Jz zU_I#J%>z7H-2+9GZ0Q37gV=ZHV8fOp9_%KdS(puMID6x^Z>vx#X&#%Ugb{*9GLXw# zrP7Vf-t=Y=%-tSB4P?jN1gv5|H-o)U^Oj8qIzrRf-@F6Gm9IboOVWo0@wr7dNX`ze z!J4UQhCPkPL-x0(^_c1?9~qSY)zn&bi@+y@oIB9LG?~g?65?bZASW`F+XU?&IU1!d z2l?cz*+jBr)YP&-cc$Fq7APCwE+C%b&f;NsSeD_=UQi)H^&Zra_j2=JI|Qnb9Rlq3 z=lX~SbE+W+b>X^F$#&`IW9k?ag(3eEI3^!gg)ic*@>6sox7t!OelNxW$qw?^ka3{E z!X+3;^)-<3GLC&Nl+`?Y7z5-Eq{~JgYE!v2mDIoBs zzkHy>x<4A4xv%4sn`FuR+XrLvV~n-7r9P1mG>pPh^%Fmpn`H64#dDXgda41kZ!^#O zc{`1nGJ{O(j%SB1!folmMJ5;4@i=<@`-{erp3CPgniIEt$zyX2b6Cek2*joQZtTM> zzZ;j5RNT6@>Y$@umyG37w#R1FJ>_&f7&dzkrKAi#s%|#+m$JY#SqMvSF@_B!ODJ}S zrh=bX!AI%;OSYW-ywe*ZbI*EUcM|9w%~J9!gIV~?5CIHa zixp4Rb}Y}UhmMVAP4u?wWq9n_K@oA5HBhsvfP(60hZ0~og*^5&&&A4U)N=`l_CAd_&G7o3Iy>>|KlTnI9% z_bHIO7mG7QBs)l^RBBofk^dDmhNea7Mch4ty;Qy`vc!jHskldsWJ~JYf@H0bfw_tC z5$eYd@7@yVP=TaZ+=G2LCJCu#3;(DBRVXDTcPiG78{OrylkNgS>0>-#qC|u~C-MQ5 zaU6BX{UZj*{*s3k%QFyj%=@KWB~ym7Em;$zu#m}Cxz~;svfs}X>!Gz;j)pF@K?A=j` z;j#!O_TQv4cd6gewqDfI3&HCps&7IA>+>(P zXEQ$r=`>8J^e_uD^cu?zPsOIKfUtg~ftEx6;$(@Tn`@+cI(Dcl!;hwxny%$h(k#(b z%;=~X13jq*Md=`f7AHecAO7UNFK$#z}L$)vxFy2~T+A{TRD`n5ew2Wu6HGAO0U ztW6wWjrD?!j^z+7*yzcRD}J3!z!rY;Rd9VE|A^_Cq{uZ|U zrg1*|{-!b6CBynyq>cr(86yHAOsUwEjJzN{dW_bb(1;4xvg|hFkVntM!t0-03#2#B zXSLFc)<3lgH?`J|nCn(Uq<_M7_fNG69Va@%uYZk8!FUbs^!~Np1PB!FV%oI{?e1q2 z+E28HTmM9KXz!cX&ue=l3~2{IB+gs0=?c5tW=v4q{7|kUJXMk={aibIN@S>_;#KhN zH0$qaF<--{2}`;KEt{Kc?k(eLX(apMmN7VZ#EtnH#jpg!h}-=Cni2o-|Jo7E_qK6~ zYJ@ZYbRNO~WsLCR|EG*Ny7RWtN7@IniHedHxGC1Oo{|@M=`CkHac^&lm{x`#V zlbyL^EQW@szTJ3C`ZIItFiz;*hGT1q z(kj;R8MvkKV-uYVelk?aB&L5_apeG=Ux0c9`gaM_yeI~f;$ne0eo=B6gO7zr;{(s?fn|o zYoyeh_1{YD-pJ?)w@AqSLHJk~V;5aPSX{>~dQDV)sCySDZO{q9(a^)wuq+*q z!wVdIV6E485VDeC*=Q_;or$xTF=y@SsSwM^n?s9bDy{5oY^nI02OTi+(%SDtK=J>B z>7jzYN8wvInBis|IezI6!IWiOc$SF4w#bPp*;lSCwGVtg{N>8BNqOQ9wg*FI#IeGO z%djpaWr%7r3|Q6-1gfh2yxEfVs$QMi4_rZ+mUZlf=b!Uq6-E~~*5GIA%Zg8$oY~AC zrcm}#4^tph)WF3%eA&BUD{bn}!u?HxojU0&f)4YpSCi$k$EAX$x#vw$l2(~)yKFku%z>p-a++1bn9?HuMsMmCn(je)g)>eP=d>!(i`H*B1M5dEg|*HlRi zt_CJ!HV|b_-_1sN-BA4SaY>AK>}i;ImPk&gDv6uv%01bI5L1|XOf=?NxMmxZdU}kG zVmOC?_+&!E!zb}2VLf}Adc}0+M81RQUWrBmq_ghIGfl$g^fZO3X5td*8zJAc)YEA^ zUw!$KX!d+hQ_tZKm8XST$Al`BX=;Tp?BHA0LP{?Mmp!Q&6(gxk+>6%D#D4+z^0ldu z;?m)g^jI#t+0&FD=ROC@XGOE5P*X2fe*2(TFz!%W>r9<#_=Ls%G_p#Mk%6q{<-r~a z*?McM-g-xel<)*7mly_hHqKdaCsD%AvTcrOQVcVtLb7 z1exZ7ul40cN})A(>MF+LBKCx0!`FcBHgofwR`Q&7;FrU$i>rAn2LytRN<@&V=>* zwDJj%=J_2;GaQVf-I1wXMxQb#AuaR`noLuR{+HPHws#D}4QfWD8mJ@7j)Iu~OWCKz zvJH>1S!z?1neJ}YUAfZaV@tp_Yq!?ghtN6=el)cU@yqeEaUr>iUicP8qB^0Vithj@ z%+9>QDGMG+mJN6=t~NKi(`6s`HL1*Bz&`^gO0zPvya<986F`*XK$Hyz4N(m)v$^QS zN1W&srBooUjd@1Av!Dmd^$|#yMWwfXE5w|#?E@`AD*+AkdBH$9gy7*0+D<~>n2{Z1 zd!P^A**}d45-8PC@__{ANaRYc+nI1VBk4y)={Q~hdY`WP?P?YYmrEN`6;GeC3CAN~?_$_=@Mi3Xe&Os4!($rne)zIjE3$|Cj!pFaSYd4T zrnKd0F!ZE@Bq7G-6-_M-58eS#fS^7&L&d=_1az$lA3gljj8+^Opyn_lWhPxxlwvPp z1_c%g5t^j;6{Q!ElmwT-U5&%|R!2|;YsupX+e=PE&4kkJa$(TKN-OPHmD)1Ffl-$) zRstoFZ6&lOe2yN>gd}`Hv}OuNMi**%UkUqGJ+K>!|)qaj&o=M9`-9YZ!ar?W0@LU9rO*~l0rIdYYaSa+F^e6PkAY*@vx|HgQ zEkEQEDTOfN%i-Usd}XxIppXJhqC|`32vxRVHMH^s(!8fq@1Yoh7-^E~ z!Us5Cbif(inn#&H!Yj2rQzxu&AOdCeiUjkpeqcQTn8nH55*Y2jocC?hlIY|5|-s)si;8+k^ zsFrpw#glgs-X$L`D4}BTNY)LbC6c1_7as48_7kTmqOH28@dJA($lrEU%sA9?Mut^{ zq7>dg%qW&zcPL8d0E8s9prO$K4G$Fl6v0E%HWYMv9Tc#x-IGIliI5y9pJ!@_48_P6 z$wpB^t|};HBDmHCq$K$+fg?aBU4%Zs0PM7O4?VN>Bv0z~<0)awr3Ij|nWa%$TZd}`KpbRd;tbC~SD zvnXYYPH%ZXRWZGR%;H40Bg^S$4U}5 zO>itLdLyGjA#7x*ALK2+pe39Oyjs(G!&&rA$mX|HQ}LlKja?%#>7?1KrT-wBAfvQN zx9&P;g;|we|G<1 zT5sCxXg$HTD(#=t%9xrYbxvremO?T^EooV!JB<#&8_M9j13Qy8D@wMa=ePst&Xmqb zDOzWvo>6RG3J|`n;1#jW!RK*QOVZMp8$D`CyQgq(WMMtgl5`wh4NR}squL#HQVRXH zCF0l}e6=VLo?3qc5G|Tx$P(Mk>-8$Y*U12f!)HwLO5AT~X3=3K&xI(b&KNz@ z+_H!H4l;$Aj}u+B6nEBuSNdB=tY{+UviZj-bF4+6RMS0wVQs+I`S3~x#$}(qtC2Sy zQs~NOU_Ur!Hs3YVD5O&hPVQ#fBq?Yx&VF;X~Rm zJbfbO6O0e%q)SEJsh#G6I$CvUY99ppyzyJq8tb@3+KR!e+XOY=lj)V#3DF3S7uGUh zKkUzgu!BDPKSeHPP5^YKl572!=U}Ad_mm)cv*X|O3?eQ$}+^L$7~ zzNJFq%0|5!93e0;&c(X@M6!#0cIodE`v81&n1XuoGs8KLJ@!QYB6}y z5+tyqVjMJ>-5z54lC7`zd_VXJ6e-%moy%=vj`5Mx-R%hG8Ra_IH6E`97;~DWk8{=G zeLrl69%KX9&6l!ZAGh7j&Ep@0((^rRj-Jr=W&cjA4Di$V%$5*%D$yREEJ#$6;I(wZ z29?k3DG1pl#@N`XULG-SGe-N&*860$6Tc1%VA;!7y1G#EU)hA!2f~>53ds7+>}3w- zD8$3h^vLJJ*{mflKJ1C8F&y66X9VDBkwXtI`OifJ^op40+}-b-hWz3^0)V$gz;H+d ztW^e%ep>3I*7&I42>>4A0Oi!?7?9=@pXU&d&q9Y!YOPQwrp$#YpfzLQCS>R@S&E1O z2%Q2trH3|J)W#?QR~r`cKah`Cw&b>^FRSUFCOA%G`CB%-nj;97KSAREofz9vNrc4y z?JI`YiQ#lYN{^fHPf{s{(^iol;(zp9#tY@MK=|yu)@TyL7gIQ~V6X)KoE9V2ir;?X z|F^_&8uj$p!(SA`Ulf8RUgG~sG5mn|ZLbKa{SZR$i{X?Hp8^($5$Eqpa9s?K7Q>0p z(Q`Gz8hZ;9F3TOu~=!I3TAaybZ+YkvZr9e92>> zrOCtX^^r(&A#d@-xWGxb#rUT{_c8}x13!rvFjzbzPGKqI*c$OGW>ew>UVG$pj zm=AqANt}*;QtY9ZvXtK-O3v^5LY70Ix|$^TKk$Y?I+y;>PwT1LUJZHvs!@<-Y8*cX zQp$S_5D{4(58pMpP%F6d&vTIWUjR9a_P33=0!!Wlk=Nn)xfpnUV8k{aMmc24&aWMf;R{8O&PU4Pn@5DP zE6Tkpza}2pyE9G#`&om7!dOS2#cph^yKgU6d9Dn%hDsRZ%6;>VQ08+O!o%q`5Lroo z38L|_BO#&5C4ISodg0E2h?ua@pJk1VfE+*BCKlv?+wfKvnD5PcO5tmPhvmFW(w!tI z-Z%npT(G;bAP}-=f%xP$-?)@@tS=-nvz9|*wV8WTBQe(|ayrK)<2*<Sc14oHQ7o&z~74#&QwmydDGL@?mWdBvMJpH0KmbdJ<}KUwE`}dbPgIxTr`g) zk-2ob@H0vrtp;Gc0 zZgvGxYf`x20<>Jaz+)1StPVef=Bz=ch2;kz;l6Pp9B>(<&`h3a;*f`M-^@!Z^oFz_ zuT0(qNZ{wbXxBK%+eAXTKWxN3I#oJdX~G!Du_wzZ90XDg!_aH@&4&@g3kQ^pyOe8e z-VA?ikAO-z;vSEn8+r8`UtNl!L!V(J+rMia1aCRc>DPcH2X5>@So#u_R#geCDm`)I zT}Y(DG0poD@^?9}LL#1jR$s!1t7@DkekPwp&P}Heqj9)UvJzw7;{t$r3x#~p7m|1? zx+s4X9^pQkrNqr=Y7I!w3k4OCOTLtoxLVJ79wUHf5LNRMb8u4cSCn1FC6tw`L#a;$ETR! z%d6ov_-{Pw;mNWt6@hPDEJDAW1fFsG;fB3t@_3klByo4H;!wDu0M$$0>dk&g-!94@ zH*T|{K}LabG}gj2J|C4`1Qj+9rDaVXjXFL7g`U`1U|Ll^Xi?tOA-|w$gdQSkXHJ%7 z9mB-NEZjI;EX};x#go-cJBXo_2fA*ooeukm=`gP-C>kt7gwPx7UWL#oiL39y@~g}P z63Vl|Ijj1(dG(^1mIOfPu}^x$;wik0?Y{0A6jDTScy2~P!w{%fFHfGJ zk<@+~AL~W7LHh==*bU=ApmPvbx#>;$_CR;I1|6G?f$%7T+Me|lN{LN~1(PDE=0{wG zpuA!X$g;;gVHJNi26N%=2;}(H9%yKt@)HvgPv=@eZNwi*MNCjb3z-8}!ADEpd>uH^ zL?BsrxRd?LdVmR0@x&TA&UrqEkd#z+svG+9AlaAD7R!Q|d3)%y0!-P}9jF(<)Ww2v zR<#44hxr zI4K`t$@Te|O|Fq}&m4Qo=!M{Kr4jg=V1j;(S3hJH zfX3i@FI?NDX2V`!OR`1P!3zLKGgX}o(;tV+BUL3H+w>B8w#*-~9=T|*f zdekEz6qUYOfHmqYFQnau&-4y-d&)J0g*c;(HH%Cz^19H}&*_PL1ABF$DUtoQ(DV`e zaFIzRCt>(UpD?UoOBa~}0_Pf*FPgQ&uv`+C5l8>hCQX_J;rfa1CiY-I{1)TF%nKn_ zbzlf4nq`Yj{_N&r(-ddQf(^_!1+$OyO}-KQm|(>UayAMv`{i>M3v%@f=dGGG*RT?Q z%NOy&n0$#z&5o{?db7=ML*c}$l0?-n#so3z64M~|=n`uW|Fmh@v$DshJv3{@6NU36 z^p&Y)!AngsY}``F=lBgt3}Y{p1o*S6rKULMwanzpl9ri@*n}Mi-Pq=Q-`cr%5vMmy}WzCu} zHsn#v@;=*OeA)FE4>e2i*^JMthvm|hOtE$iTs{Ai0XcfM$Bpeh1~IXw-Vw-POom)0 z$C`UBGN_*m!7=Vp>U=3g=(*@w*|Le~{KZq{vW+m5TLh@QXP(EBX$o9_;#7o-mn9GM zQF+8aAXMiJG9$2E`Pe^X^}zZz$_c9N7wEI*(=~G0PAOBG0dR3ikV-b&gDs7CFp9Mu z1G2du*(8I$*$iaswqhq#>Ei=WtReH&tn33HmHUDOp@;^iCT-S9rD;;;{M%3jx>*E^G^dHR~~h6h*)XbL*#@fSoj0B~y=N^7U(?*sj+g zV&7g7u9RI1WbtPwN3rI=HCPgTt`NFvJvGj&7_3Fba6+>0K~Dv{kOJ}g7ycgU&eDH~ zLNk4#kW1xEVFCJ;+p1id_J~&xHfu0t z4|E@vDzxY@_Gt-FI)Ci|35>>wafP$m&?ZfP9(Doqr!w9CwkD152MX=Z*L9m4WE@m0- zLWip;#*+MN+?nNYj<(|gC{~1lF;|Tm0rg=gAE+|AV;9E-UTZ>AFrg7JcR+RJ0G1fZ zwBt?R4c&Zh+q`J(L`*-bD6j3i-r}&Li>k&c@?iGbvi{!8s92H5JE9a5 z?H9Y;;fd;@-p=g3Bhnshcd6+x8xrA+T9&&*fxU6E=#M9-UY?5btZH^-2u4EeOf2XH zzixAkSbzNEl|LDSwZ!2o=lo++_AIT2s^dKn~ow^jk3l!_K zA9Kx+jnGS~{u!-lq_?OU*r$fEJy0V#834D%C-E5<4*^*6zr$K1fmz(GXXVmjHp<`{ zE)eC46-1Q9y+-tt4I9ShTtAQ|^=z#-1*K9P3DjC` zUo@9|Zs@MC!3!B9gj_X;KskTf>U9^CUcG{U8Qv4KS4pdH#$@S<>0N zd<5}~7W0gq@`87ja-T9=AJEH z%eE%`0|}}j?^8Q)VNYT{RQPwXZYt09)5PAAQ3j2o+iPxO8p3=tLf#)2{ ztvdx^*|0xlZW%;5CbitfBss!Dt|uthOytTFfK$PdT5IWLk^~0w{zYS8b4zejUUv$h zyyf_XHAyCMQ?{qO?59X+5IKl0kFaA4YIKflfX9Zu99Bm}TgbY43 zMcfo;2(^=b?t3uz)$z6<4?rjo=Txc)SeMYr7wwHw30nydsmVV zKMbA##G`w!9=neJ?6Pi0P!{ip?^{ko6?T zRSZB=o=Om$*ul}+1+t6i90_M%!@#$OvB;-Qea&D>!$hVujF=KQ)krut%NPlL%+p{= zAIJ(0f+Z2JkwW3sAw9WDgMux0m6i;@Y$xC-4Bx)mWZ#UW4+U=$8aQ<_B!ZoAG@%rc z2%mRw0Y}YWK46$G;lTmPD2KYa;3}mmm4Nx$p1_Yz+Gx85Ml*N$s-=b{195~vf3uci zxj2_?9qjQ5%kmg6_n~u2`4se^LoN()`ycfQ2QDe3V@yjlYmyu;G=j#U?)eI<}W( zGc$24J`3CLW+^UA`0k>Rt_E}dyBa^624EL*AQm9G*pyV?ELO#4fN~wx0PQ93;Ne}j zncu->@`ji&*#MjXK5q*2TgKyEs2==5ZGZg94|i~v{oL4|GI)IonFCz7HHXGevA?MQ z4eDQ6TU~LUWyTpM-)S_G4HdpE;TI^I{iNwQD!hUN#%3~(()92fICpJ@zI*yY zq~(f+)#+1kka!5DG%}spmSIIftp9@5u<$f0TP!-3pPg+*Za!sGNuwS%c^dzNonUhX zFyYO>?T=;M#z~_`@F<+%e2*>Sh4nb^D_VhT1@1SPTan?OpPEd-ggcmueGZoyO?$Gu zS<7J@N^*=F3$_BW6bmlF>fK>9>{)n-8eWTQ7mjQ)-MjI(w#!Hx(u;h=Z-)1Iat_7H zieD8QsXlX;h<#Pic(IXkmf#Ai?z9pIzwZX%JkskS5Y%v-0XF_MHIkimiR!`54IUWH zGN&ZEGtatMFZW5BEbXjER~hE9%hje(+B9Bx4@Ya{BZ@V?ZhC~hFaxTic2!9icJhF! znA}Fiu;VqjnA66{CotF7ab$Yo)g^M-r-D-CS^w4dwO_%$N?aMjIu-}HvGy(4JEpwS z59cN;Vqpkv?OUMwFUP1nvb(63pVl-ZkX0s4m&?wqJL*c>s*iD|>B$q`ahiS$zSp&|j{&fnJe&nDjdBFv{ z&w33GdQ;M&xyg+$2(Dt);*33vDcL|qi{3& z*?72vuR*)C!}qxC1sU6Nv|ku^UA$t>626gL_u2S<>~+PPgV=>Xa8H*L{XDMWR%XGU z?9Ny>7FTNueCStNq$)*6sH0i^68cP6U?wC zMv}!*VKso+qpmM|xz^P8(YL`UB&6T~rwB00epADhEX8@bC{9=I6={{;bsWP>(eP5} zM1%v=X-o*6#@PKyl2e3ZbZ*CHZJZv&vWK~QuyZeay0F|;9!i#X%oGx}2eDeLlI=*X ziImsTPM2p$n?u?X>}A!*AVIhv;bg~JX?>4oHmv8B37s;mijqx;#>tX4DY_sCDw**1 zg3A0ZRzp!jC3TxyS0bQp0e&33mEPrwhl7|n$Y@DcXEj?}((lblXbc^Id69gQ7Pe4! zS5x+8p$+b_nJl|$ScqJh{#)K-SL<;52lewkEPu>ASjsy+DVS~E?(W0NVxV$;bI=TL z*1E?pNRT=!+L5JVOVbjArEhRmbLmhAchF_z+C8Tij#wHW#9?we+`6;;0Gu{g9Sw&e zZ-{A}ToK3u(*dw|<5Z<=CY*d*v!Euv4x$}pi4Wqm>v!Boa~8!fuQ^k@V#T%d+38D^ zEbDieT`SBkP_mkT4Y&_(&s37GI1I(~0lSP_LPpfCKL-mk?}N(=D%{REldgIipWLBe z`g52JQ~IsP3{j11wK5Jz_eaSMrbw3F2kforUjska!YS8>IO^j5;fuu~bSFYtNxSsK_jZ3_rfvidDgiXhw=96yQ+8xkaE&5usQm5$2+ z;8%^tx>6hjAA(;vxiPmzrf}BqUMB|(-*Lwj%Z}Fd4q_Q6O_Nyr=_HWw|6%S;z@jSK z|M8h&8`c^20g*)!0S&<|Bt=F+2L#2Pti*j65K)0KMg_|OA=|ut&0Mn7%v`Ehi3&kW zjmoXvO0C{3q)@Z8DDnTfpK}fj*!%nbe%JqZUH|{_k~!zu&vTyTe(vRS9|wSsNQXin)?0ril$Z^h`P1^YnifsZG{D*b{@6t)k@lR9g4DanQ+5`nb!GR$l#P;Z{t= zrk;w@EzdlxaRT{)7d;UTvnWTS74`&nysEG*KvUF!4)a?S%Ipt`fuhXsCVyl|ZS$w~ zW}cYR775e_wuo6kj)4)Au4P>3sDuEw289ThyQz)~BU(Hy}$_1U+ zLL!!#?#61C&xk_l;)x`G+Bz%2oyOeucD8%~wjVy)@AxqNnKM_&$k};luMcvFhDY)Z zRKBGb-IUHoj<0eYABKgQu5e5sFaH_530 zBrGhmaZ0uxNA>+n@8s*&G7qfuFO0jM_{`i71`|MF${xa#u_7hZY7D(;)a9nA_-}^( zrp}Vee{jy=PjONujZz*VjgEZ$wmp(PiBMt7Z?sgG;a;>9tq{gm_og%=iLtsuNhooQ z-$2o&ce0laF8#}E+5N^aj{6Uj&Vq`;BRSowdz9)0*B*l7usXcsDyQe>;dbp8|PvejEB8IuWwVvmy z`d3p_gJkQ9F^;hh3>yUFn_9GNvtlnk0KU8r-g)|SzrV$J6n%^D#~cwb z0s@oKA@-tI+UzR%+ooG%t=}{~!9A#7Hk3cN_NFdZ8lsvxx@)KA=;Hk`h$rKa``_N> z9aPi^zmc{H!d104uTsq^nDL3<%nWNos`dR;_^Bb^?^Z;4cRD*S#YREX9~n|l`y(^l z)YDigK7zXL@(KVxVy>I|3h7*oUDcmbz0THkDIxm`={T2)2Y@cQx)?{X1SV=WGaxry zEyq&%Z3k@r5jZRhLTAcv27}jjRA~#SGYu5Z_hG@FEX%e9$mvhn+jSvctVnEo!2ZUL zrX9(YaC6k_>Czow`84N7;`GEPuPNi1p8B>Q6jy_y^wfF-nkCXPEh7_q`71iew%JQ? z+UQ~7kjA@1`1pGSaDdo%u{hs~!}Z>V2cWb14wUa&CPMQzaXcugzz`f>Jkr9T=W?q8 z+H7Mo0e$yAMK`NQx65m7NK>-Lc_gPd}vMryysVw`#~j^ z39GBDL?jN<;>;P7F$o%Y=b=g`l;x&$!-;+KLMu+w$8ef+2DIWr|rfPZ@Ajo!e_XHWT>WPW|bY@XkAjdFmmc}P_L6+_9 z5r-H1c_i9ZHB?s9Yu<>1vuJ}*>D}K8oP?=Uk*;cy&tR%y_#XH&_N9)S4^miYN^Oj|!SAQ`k z(TQHVFq(VJ7y1`wK_{Ejsc>#wdjf>vz@723bK{GF z+c1PD3<4eb1YWnLVT3_bs3o^~h6o{Nl|36z>*>%_-H+-PI`yU2+TCs9|KE(I@BR)@ zw@$Eq%mJ4H;aG29S~TmLitYu3!vWL=39dII!S#aN$h{p2uAs{X27rTiiOv9Uz3RXx zt+tad*zTSft_A<`xbr{3!EIkw4*%_UbdDA*vJ&V6yy#U;g))Kl1BQm1fIH#%GL9It_nC4>g{5Y){sn$|zE0DygKlH||1O_#w4Hj7tGz zobXg(y>$EY%29X2{uJN|7D8$D5=|{s-$%*WACPx9%ER*)|5eKm%W@Gb=FjAQnN@FCZe{lSQci3_U{>lV~OtS8<##nkC z|Lg7=!%i6i9FWXAzVY_i6rd24e!DR4edF7BZx|)RgY^38xJ!WtKG0(LJs&^^vy zhMi+6Y>M@JBX+?-*OvX8Nzo)@<)ZLg$=2_0e;oEr{hbi&)!XN>aodO83HvlAS-Yw%k5nx#W-A=LFPV*cs<@)`qaF=!tKa;`Yw%Pm|R*trwEx04UKMbrDp$ zPuxX|^JmF%&5W$~>+SO(oqIcf8uk$g;aJpbAJ$rWWih(eV60sJJ0tcrT7ONBx{4B< z8{&SgZwaxULu^pkjoasw!w`o2k?0(EmV|3{>%X-V!r~x^ihb~v`s3AHOqF?E@Y!7X zv&G{E^eyf(CF)sF;Ef*Kq3XKi2Vh~Zt9%}Xq*!mKM4f~MwA;!nDd47b2T2XxgxlwY z;zHO*Ms$jJ#y5Q5xcVa%NQsP@_-ucrR*w4pC~xSd(m%DjHLM3Qs?sOWq&{XE^yyO1 zv`UMQA+<6n+BE26-I_g!os*)=spmf*A%`9kimw`7nc9Yv+tTl^BO>n$PLp>IGst}1 zWNk6kUuD6HTHv{Si==6lz5ReQnOb_KHI>B`(kuX-6gO+gAN*4=s`>lnah1o2sV#x(EsC0lwpd-eQ(P$AMr9=v$X}x9C1wWN^iz31P~Yy0r)K9icoS*ZUnr zzjHPuTQ5WbUh_}9ML`z`)ci5qw7SDS@yTKDi$S=~2jgmt+I0K#boC`&**@e-w}Y!E z*$zU^Q5&RksJ@0m3y+>YxvnH8jpfIdP)z z){bQH&IkCzB0>A)?wB>8{9~PQqQh_GT1e)w93?aPUos>`clemm`hH3jZ%*pCyBmy^ zK7*5;uVVHjhaJ-$UKH=DI~{K3?z5GQ?-Z2ee9c*DVoi%nus zw^z{NVvUvra=dz@CGhU_r_p)|umVc7^%53akrG zWDD+q0B+d~xe?<$M)Q%zmH>WBlqC5TvQ=I~*>!t7WQ52k%6*;aPZw8D3Aj=4;mQYk zgRr(|%CkF&zi2kMVu})aXEJ0X7-%5t*z6}~FK8ga1DrB24v!|t1-KARUnk)wKr_+_ z+c3}?=Qv5|jd@NRKNuBE7mK_gWns;=UT*;!aogafek_0ZFDQ)=+u9x{4%f-CnV9X(2d~8F9s*j&)oy+ZP~DP z^YDjKYwI8I7c;~t?I2$y{IZhh&}mINod67Yx%QSjrdrc z(3vDNRtMuR-FT$10LF!dfv$5okTFiyzd;pK3%mE3&SGG!t%Hs)`x$oP)?b?@bSP>S zG6>F$v3dv>_4Cxi`z@nE1w}<2H_bf0YOv8{rVX$p;$g zf>~gVkG7B0(wwac;7z~k?nGV3(^VgHy+@MqhuP95vb>ySAl;E< z=qNvKK+RtcHfT1$8_4H&5#)Efr{UQWK$(WBDQQWNgeA(udoHVXmfUpiL1V`D%!&f2 z6`*G(;)`c6rrSpX8S6J-|FNQ{Ks z83QbsD%OW@$A>q8!BPl^+o`1`v0$G4fT;9}x5GCeik;qbcs#GtzgUln5;!x%$00#H zeYLPKNOMO;e=aNxwtR!uFf)lU$*==UY;jKhE+SaO#>^yE_h|v!J=OX}TXDM)FCIk8 zHsT37m1tZjG)4sNZ7|7zE@-|0t14DrCJ9*z7U3l#<1Cz*-HtP2WLxP4nMzUXeigP6{+W zB<+wY3uS>8fo?Ao?UBGgg3?U5o-vSEI1q~3Fj#>8DA%U=A_nP^#1e>0QkC+r5bm!1 zWm!m57n`Ui=eWC0B3;~F3j1r3KRx)98^kg0VA_(v?SmZ{X47u}ZzdBdLUevinf$BNH8u z6fP+|ukN-0XAi!Z4`NHA%*03Ht2gkC0r^Z*eIIu_Qnj>jy_)v2t+3#TUF{APkMh@g zy3?rDIpAP1nzgWW7TmAXV?m<0+)aVIkvniCc0t2yF-+AY-Fz2zjwP5}#jY@X60tE= zP@NEAqj#stb+qhTh4r2}Y!||iw|Lkx=xwOGg2TpPF7=?11j%&u9q``-wbU}J5~g;0 zq1sXWAGAPFO2P(BaL)GTfSKvhS`HEC@jAmI7J5sf~hyp$%FO{TIzaaXkp<_wM&+u4FCZm z>1PB_e+^px#f71o1u`#c?;BvQmSoM*!cWPiH-bVaaWx1_;o9RwL!VH|JgN2#S1lbI z5((~>xzM2ThUXt%)XVVzdGwC$(f$&t)qns>oUjFoG{L>GDEotRHR;@A;F#Uj3y*#E~(t7w&YB zgXhdpf@xvDfb=7|Zx&v%m*Qs66miBqTY4T@Ra>Z$v*b!yMDQEO3%fXI`o+?cZT2yg zyJ$^6O`S8ny=7MyimG1Mqceuh!MEqQ9dT(W%ycBLQ+DCB^=#p9ag#AHHTZWKn+0Es zr61Kq{BpQ*eIegE(eZPIeF6p{+zZju z3>Bi~NXg`4^T*ilr(S+dOP@azr>FBD7e=c4P>7SSfzGUVzQ>?w;M`|HkdvR*d7506 zBaNx>_Sa;`44)g{{kJQby4q>fJPEbP?Qwybo$v+1Cx4Rp}JF59$nlQ_@4}sU7$NlRnp> zXCpUiot4*?yPu@)Zw=pQ<6wpoR;)pC4!hN|1P8KTT@23JbkQtTq4*Y*@bT+dnj(;7 z;5VB?UHMaF=jP0omw-qb(wOxuY>Q#><#9Kwnu6D24+!=uNPpJv!AJ^zzz23p-$usL z1y+Y?7~rjc_OS;uNt}68y$k+D6|WY#y3ByG=y;PcE@m;s{h1X+Zu^TS(1eFyAEr^Q zkS1gEx3l>>KUhsQr?VnylHG%#tnY^trqPbQA)7jbu+QusoJIp{Mud`IHO_S&|Hkl2 zJh2pX{a-lOZM26jUTrM23wK@1l3ruh+@%Hl8aIl2^i=n!`dfB!u>FP_TGgA_sZNjZ z@i;R0aM3OGky{Q0u^9jF6eS6Nc`x#|+dV>(svU(r{mga#H2sOZE>v4v^f2um(chrX zp;1SRMyj8okYic?)T%9j>`Z{Zc)G!N(A+*yIQuT^ELFXX4J!J1knlCLaFh>z1p8n6 zfu#KVtOZnXyeOS6951p^!MjBxxKanw*pHOfa2oh2Tn>q|H8vG^7IG`V<4SaORpThk zuKmy9u<>3|mS&Fw#qWfj>*#sd8(P0vfcj5hxa?oPE`Sa+zv?7>9cV6KS?UcV_NnX( zp#*LYD0cw%oU|WtqzE=a8Z*g?(@V2QK>+RiF>9zMM>>S4i=@G|Yu6H66`6n2wsp|b z)cv~%La7{h$SU5Dk8&b#a(9Gx16ren_~euw#U~pg(f?s;dn|qZ`$|jS*;1ROudtyg z$3i0lF}I`Bia&wk;N7%h{{TJ^^V|t#TN;~d9`zZ8gWJ(p#qzj4)+P$KlPMdqa4{xN zJ2|>JR7!T1oj7z$r! z8Tcs7JB0IUsURHKVq3$4^_YHr2Mlaq3n_6$*Dy`&0J^bjB348Daq?=IkXigwDlI?b z9DZcZ=Hm5g%ORAbMqgnA>~OX15<+*RJxb}GI$oY|{lP42T%X`SuU2&f#G|UaoG(%d zm!H}HG+&4DAL(hymf|R?J?~*qXVL3hiucfr42?fEZ7cFVvg!F^7d3CZPl&G7BxO+S zryy(+Mq)&3wxLf0*K9O+9+cOmPJMc%2nZ>~+t8gY^A16F2McDJ!EJt#UgVPRU&>itHUV z3`=`oG-K;5G_st1Y$p5%Etv8ZYy*P3zJ^1B5A6{9@$?H@z$?knC;mtP+5Opoj@a;9-XBmLb$N%ig9A2=YxGgAl9x+rsZ z^#IxzWu8hk+nz&JpP9ir|Fc4(8#GxMeJ_uLTK@o7XIk}Br6ZN_o!Iz4+X80%)C2#* zNpgR2JS9HstyRZT?%r`wzet8Q5?GE-G~xiFgxALzw|9mLD+1d8Iryn3GU0tm*bgLb z9;Q|ApXr;(ERAz$86A4sc0Hp zRf>Z%O>*-H)vU4&`RwOIVMOb2vKDfIgj27A5a=6Vp!`#>MpEEoXyfViu=F3%Fbh5$ z_hMAWoLP^<{NLE8YF@xcX^qd)YNpxI2A#CY4~XmAag*<67aKQ_a{qLXrMrDM!W$%? zc_!5rCuNeCDL4Gc1-*HtI)Du;d6!?+X_r@1u9w+A;CV#z=AFbRVO)3oq~9dk=4A$3 z=$Xw1btL`hW!^xCykVik+cUl4ZT?hkmZ_d#5YQ33m&nJzgSUOUQ8Qbch#mTrd=Txp zL#rQ_sKYtF=18bbZyRm^Ss4IimgOIVmBE_R&X?tk^6{?}D{jdOf2|x^M?;qch45yL zUXeHJiw==4YI(1|81IL{G|yMR+r{6kK2q*)e#L<@j$k@$^)WeGzQ8+n+O(C;x#K=< zvuB6e+{c=#xtDn5H(ATV&*GPN{V3K2#*RK;+R;rNw)7z^@i(y=Mv}#}x^)%u)=ItG}(J%{G^B%CEoBqG)0hKXlR(>w{X>V+%{ogr; zA8GAsc2f`K?X17NktthLJinS8#+#l@CJbZ3AabO~Dov@wdWlxJO6Ruh_U*}N=i>Sw z5{K>{63u)4qeA&o{Uodg#`$Zezz~YJc2AA8wO^37_Q1{J=x^5slq}bwnyI0wKWz64 z43y)iDYeT9zE_jSkK6qiRES9f^;imdF4v!O1_n6NYaeEKY0iQCU|PYVp{;XD{3x+E zywa9|RtRKeXGTxmE*GWz0C?yias;rC500->BIMtpbO}{xZh<&Sbo0|3Ra5Oy{4Pcd zlJGlFLy1N=ziz+C#fNrkG5cuXVnG+xRW9%eQ25;KMxyT{Uajg%)7{+tk6eFbY+o3S zHQ3pcM}U(LEr=X!2t0r?yi^9cK_a=h{|2bk&2V*pAbu*7pXVUm?=D%ovck>%m{1g`Ky$m=Sd;^$_mg`OF5eFfCMY?;kTYBh71#oxSMKF>TjTnJ zdgQy9%}*oUiV=}i(;JVY@4f=)%-_(77q&r}7rGJt5+(N0qt9#U=bq-uK$!sR7vJB8 z9OJ!dF`bJvdsBI&xtIc?V6&z7Td60XD05HB4jSpA17(Ix5@j|hyB`gTGDo||#b)HvLnqFPQwJ2<{(zS z?cF5R3zt*vDS|d2#np&K2DGqI%WOspBp?im6xdV_z7s#TZiG(93ygzSoE8m6HiMyE z`4`@%h99fKk-LzFM(+us81oQR8VCAQ#3x(>cR%OMc#c2H@u%m4hj#jv(I7h5rMO_+ z><=BF)fk|hlK50GO^x1z5`XFGOnU~ndQj`+SWnv90&Ya>nLb+07b?mdid36{7^k`J zL^}q!LK}k9NEmY8*fDI|wV_XiXbyv8u_PRx;p4NMXmmG>zuFiVgXUe^;9c?1FJP4b zsyeeNk`iv9wWo2XUP@1dgM8PW-Gp(l84ax+KL|~jjBoAu>R^1un_wcwd^l9A$#S4Y zfsVm0OXug!o4#}&^F*h8Hb08q84gZJ&Z}O4COh=B8?A}MLS&jbviEU%F3ubt5neH} z_u9G|9xb|*v!XD&KZb*%*uNc`M((0-Nx%|PMD#%dRa|Ic3 zr`jt>Re#A9q{n@bT3;WEK3VpG$$BJ5B4FCrHMZ3p>%Vgd8zx0_$=(Dpj2b`f|{O;aO^^@M@E6c zU~)2%{>Ab6o|#BsYt`{0WyhPdfd+Xr-t3QJuI+aSpLKaK;IK{#jp`o61=2%bp?@Qf3~QN#vJL_)rlEuKjc&ODlOk3D_=k(dN?wOSMJ z%m|LQT4u0t!69p~If*vE2Wi0GABP&SP;I=6GhdB2AQU2om{*axkD)j@ zPC2?X5;Imv0q?4ztrIa4(<>nz%S!X?h0f&Ne|!jl*;u57sXPG^Kgax$p?Z0?WlvXp z`8GScbfYc5x%8u>X^BphaKyvS)fY4nJGO-}BYpkqx-Jxv66r}bPC0H)s%oBj$0@Tp z-^T)$At0a%wa|ko(3)oUlX-`i9%@7ymE^P+dWcZyynCEOq)RfH%!Cyk5LfiehOw1r zsU=diEFSeqML=7kmx3F3OU!iJq(qfL%9ocXYotfsUqy@p#R+H&VuB2e<>g%oyaovzT;i`aSm_<6;~WpnuY9? zgWZ0R`i1enj!c$j;h_Kay5O#boEVp*^rPyJ-}UnSG`gfS_M*|XuvQuvXX;HcyN5tL zCy0Iv*P>C$3XHgaM9!3jDW+*FPNh=hw8unxt(>a8!YUCi^VM-LT902AKx$OZ_$yu0 zJ7|*1A&&yaiCXMp>Y@2 z0}OOThF2s_@xo)(11_NMoSz2+E*M&7VnQU#{%p6(a~VWiE3xsekwIqwD_N0J(b= zKmrC!q*sWNVEWRWxNIJ+sty?`_`vWUq%VWc3Rh#t#T=>$>+05)4|ynV_7ERRdIZ4z z!9P2DIIwk9CRs{0jH00j=Ro@SAQTqnB=1%zzO2F|a=8N?z{AIfgwfG%ulYMy%Y)ZM zeKNg5sO2H3oebR)2m1FtSUU}z9u`1$gYtXQg%k)?TDvW77bE+C2%O!8JieIiOW6nh z1?~;!fGUJReU>iu()EPl9oE)bdz=EUJe&tzfMX6QV!b!y#vcr2h)FzdeG%6B9?Nr( zWFlyhi+i@pO1zb7y4+hQ16F=#2l`7O?+UA_@+2pN^B27Cgb@BHkzJqUyIxP zs$VpFglX=F8pfhEeQD_N6fKQE;_7L^`Y0i09L+*wYC`ZwTD`Cy_BfejZ;t@TU7*4y z1q1dD+F{~etYr@!SCnyeNLl+R7h=R8V|6J0igb#Lbq*CWCkE7Pm8u=6`iFYWa=lPR zQ|gtq(v&vPxr8-77MWATdVO#&*2YG{<0PGaxIw2M6{*vY2jtX4@XhL(&3`7x;}862 z={!doSeH}PZmRp=+YfhF!ZX?NHv4l_(Fn(-(grm%RuP{;%fFBE*0tQ9=s8yXk5vNW zz7j7YUZZI*LUD;cu~8>1z^3)TRj{XR$)a2+eCPZ1mv>jWuZ}~}QMyH=Vd5|A@ZrH9 zd1@o@fuTi8OVmq(Mo6Eh^k==~HCAL}=oBRrET&m+QYjh03vkJKKkLD2^~?HjaoF5d z^ljN>A8*)}z_x)u3M&(eEHrj8mZaJZIZnNVUs~ay{y6kVr8dFyD=<|HyhW!$BlVc% z4vtotD3F@>4D+;{F(QJnD|-uwaES9-@?_xNUXWhyjHD}^A+G}CPlVAk$_ zYZSPHO_tP|@0zUk;VE&yVB=mE-jt)%Y64=T{7M2sR7q2iZYuplzib5F3OJC0P8ckz zMbGt3hgay*<9I(Ak3dY2w)bq(!EVQpI`cOr9%!w}6!vwfFKzf&@^JFl;o)e%_I$w@ zS{1V*&;rn61++%$2-GmDQ;@Y@P&#YhFBl;WMNBGomWLsESG3C7J~%524W^klrOx94 z#@~fkNsPpQ3e+m0w0h4df1N1J#APtT#jg}LWs5)1bzzIzPH%L&bKB_T94)WweU$ZG zT6kuvX3d{Fduf4yOvfIenm4iy|5pU6lLQ`at^g(I9tsF7gXGd4BUv*3Cz0-O!tic9+1JTM?8klQA~a*5 z_vPU~Y>JW{MWz4Ky-GkvD84fOft;fqzi7iW-ga#IZV5z{YL%>Zg<5&}=Ie3LR2;56 zE2LV99Ig;%yt?zXOb(Bc9@~7aHQ<0^>rYD|&=OFuM&+awi_alB;t~zwG8kCW*0I%> za>4c@oasC15`Bf+1Ng52sjFOKVBkS=_|;AcrpXCdht1ZZmQf1#QavFe+8eflj;?aK zO^JVF`)9>7irEi~os!Ts*x7TR0G+rE8l)~0Q*hS>90!SFoVOa>(QFtkY&C*#t1)2T zO=B4Em_M}0HZvHA0pI2z$-_Rls{pGe?No#T1lL$7gk1rdIAwevP-3IT8@zJSfu3!y z?a(%8z3dn#yRWKr-xfuuGhn7)&Md^>9)Rm!a1D30VXuJF7~CC7Y!#pvuYS`doDye^ z1*K)W~;3dlk{U9$sHW6_|PpCFI+*bK4m>6?16fcx$a zqRq2F6Nz-?Oeyazp9p5>OhC#(D8AvBo#+uxymdFI=h_dU z^PKQ4d}q9J7bsLU4~2~G)kcW$)M}kfSu7i zcR9MD5q)vGM}IIM8EA286&T5*n{XOga1s&1`^wfwaS##dgx8W*N4QT(xQZludCUa| zL+?DT*y2MQe~$5_Gjmr0n2#cR+kPhgiZr*mGB6Bmc$n?`f&)?qJ!>yYjh1gCTS zi9K10Ja!wVr{Ci^O?`>u)Be}`fCp~@4_@+G@&!&)!uLtb(6!(XevKL9;R<$Mjx(&7 zE)<}Y=1C*bQh(Ij5{Ei2u*qQqf9%s;;g>@AFKOY&l2Ql&sw$AU<|hoxtNu?J!o*of z*}!Jz<`t=o<44D3kDo9ub@a$=1dzw3&;a`LqcN_0#&Qk>tO?wR$i6_bhfm1L7DXV8 z>W4aa5sCUqiL&SC%rCHIfp@4(M2?@IX9Bk}J2i)HB;^Ls7YoLQcJGkve{zYUYisSo%3H>OQ)|y1vtqy z(IGS7{|DEq{m89e?MxRF%vjyvIHjl36j87^Ad2H1J5Yf)mRMkD2;M9?C-3X;1!pkX z%kpMTFPN()aB;;n@kG&@Gh$HwSqB9f^1At*2ie<^9nUnfw<#9~ z!WYLpNUJPf;Lm@DRsQ0Z{g@p!aEp?55lj8W{khCM-)2E};Z{ZHmwxt0nCw=CHBzAZ z9kL4XY#IlMNhqjJN|+246@HA-E!Wbx^MLi(`z?6ZEFqwX?cKtt>D!S|u5EDxM`3Dr zq+7ER8wo>#Jk<<6)z+z4?@K0w=`ikN*HHCuwCztve@$6@A-HKSjdY?OjxJtwbRt-XbNcSGaVkQAtFS-Uj>Ew}LLCgq%cs@@ z(?li!PT5oDcOJoROBeUe76?Pk*w2}v?V%YU*%#30MG#^{?*`|lB+CT?VYdxK>8m7j za$uV`gaKFqYv?Fq#LcEiePNn~z1YA7rfzy|Cyqt^FmP zaUi7fG5~a4)*G4mgr-;N%0l@bwqrKlo92{<{ybtB!Su%)({b9`ucvdQ*Y-fAe!;D?`m9A_$H>Jr$QFuu?UskSvaV7*o9_d8oTI@2{;9nffS3P;7v>`_CtcPD4-F#w$jtehd>6BH=&}Mqiwy#{bPwmI*bcbMVT01 ze7?mP!)X=gHnwWqfaEX)RIK(2m@KKtrq85Ir=9FuPp+Dc}0(hF$;fC1{(wH=0G$`BxUD39#sG9;oXy>p3T;z{cZ z?4YYD+vMj9*Ed~}9-rz*FcfNjQ}T*Wcd_R8_Ge}l)!b5^d0u3}Mc4HlUk}_WX3tn# z>D+*W-WI7}u%`@8Fr(OCU&o9sOC400LpoY2?; zhLiL~EGnCNrBCu|hm2T)l#IOKih4zHjfdL`xwj04*HF5)t?i8VhssNA^I`2()r#>T zeX)8xH-Y)(j$hkineSt){se!e@u2hv%540_wm_ti%9C=OQgYaKLE~G7!`JNLnvruj$ zL()Y2FB=N)&Qjx~b$HMpV&N2HN>_HHg}tGioM`}TG;Xm*3hRW+e_%s!hd&e_0PfTS z80XZo=JY{-=*o^EQR56wdC#|!hS60tt>d@CP-=V`R_K(Qv)o{r#)t(;!Zj7x=zp86 z&xmziWa&VLVA*<@*D{Hx2o@x)HqueJN?^F~5+D&Y*Jrq8edjjpVWD+ImAc&>$f&#hoK6xUb?l2PFpBZ4Psq^|5V$AZR6 zWm+gh%OnjqWD&p0aS%P?mARO?NT^V;A{BW1z?4X})&ZB`C-H4KnNcL;^_)L%CR0W8 zY>Np)JSzob5M_$>g&i$nyU%Lh-`A}WWx)Ru$^iYuF2FKvqO%Y!@73(k1LQ3zgpuL# zGM)o>Tqnw>r^ta$H(Gy6VX_q?m`gxLd_rB>WyAx=Myo4*fGWS)=Wodu8L;&L=}Fr+ zNM~FZ)b8P{sZq4Rb`Fd2YDC4x>R9Ew#MNQE$-_u=cB=J~n6&s@sq9*g@q{s-L%Ai> zl!+w>U2r;;p(0)n!@#T*%P)+47i(53Ap+v#V$GxN&p%276)8ih?ntB$tuz*DEvP2F zqpvODYU`f&kaqe(N^!Ptfz~#Lwr`*qBGOi9^ZtxgB2{m_fUIBf+u;=fv}<5OPA~jj z-8%=R4VX=Fau&mwn+dX?-JedD6eyPn7_ zt-TMnWtN%@Fp~CqL0JFZ7=zsG5Do}zc4?LURq2CTl5}*^H0T4}Q^(T>wdx2Mb*GYa zPo0Q+KdJ1JZtX@a+)1Gz$9a&gwXDMEjH|zt9 zHG|cYCnzuN3Z=?ZG)wdt$848kctW<%wlbzC<@A`%?db~&5Q>vl8%13(GgTmOGcCW0 zGa+$dTj3w6QUAT4oj-uFI#22Qw!xx&G<@?P#pFr1{?&L8h;H{5;V6n&_`fc~+LWGv zPni3UB^X5sGn5i+#;l?7Z+tY#5nB-YvE30{r!|DGU78i-D7jpt>Pxdidax@t&tw}P zYp*tW#+~n+t?|;VZWh^78$7J>t3q)Q9>R2GAERc;*V^xbxM)bW)|Y+@+M>VS)UUsH zs&mlr3O!6}e37>%- z{6^Bzfw0Xv`&yhQ4V!3=pcf{Zz34=Ctii@j?$+;OwX}F}nG21X9{V{pr@F*ChNI9$ zP+Q+^iO@U)5Ul4W_n`MDn|)cgVzT*u;T*}0TY~Ej0MDACy^uLO*+X;Lf#TkL$$+(h zi4_KM=IaNoCY90mm?~cQn{({gNQ47zz$x zbae>Oi}ylqu`3<1Qyz!IFQJYl1^l3uewj}4LS4#rM-G2Wl+!MKQzRW! zmH!0XhzrqFJlOiJvo->s`I7^%#2*ATsP@Oej*rXBA=WAxp9dqyRH)2PISLt$C}oNl ztSNKy0GGC(9j(_^tb<%Y;|P(!S5+wV)}zp}n)?QL`z&XOW~o_X4kTX}bf~;s3t2{D z&n1uxut;nH8#Rc#hJPbg+(l1;i0JAB9rPU^*as0?CU^m(*D~FX*35f zBx2Lp)7G4aA;@gKJs!$suS0?Es}<}&iaW^T^>i(5c3KO`Su5HoBylZ1-DELMLVXWN zO6CEyDD4PDgFtnC%_tGK&3w*ZRW*TW!^;T%&#a?!LIXwYUS zB&m6b?^xzke#jgBz;_p%Ay6uxzYMc5*wd=ia6b(J*zt^mpXMEV0Tu}a@L=S>!O%)|5c#mRh9=NK zimUk=6SJWkdR+t;0aflmkUunjFCRh)m2#>Jk3NY8^H`~Q;YIl_VaaakPID5e_x0gS z+sheN>H+Bg32Ehm1!l%-+U?F!ClC3nVW#;D^m@PZ3*6<<1dz2vkTvI83xmS%|i4#PlqWx@pdkwU2*5Y;@{M83+e4-Dafhf8#@Da?h=EInGqR=#c6eH@yr13%0;0$y_0YXAtoPa?h4ZnV9m$;ka zhL`tvX&ma{w(J#SW(+)%eZc<88hoF0r?2PBNM%#K}{UO^iX8 zeQ3BCg9&_>)}Mf*we>~7Tk&X&F2j7_@uqplPU@TsFXSoBUW+*Kwlmf`VS4kp65n_8 zeF^g2f&q|2mXAu3zh#;oUP?%m1IOW|ME|r*<<921T4tiBgh9}WF;LAu0DWEl&^6hd zfJa_hQl?z>uov?Tn(pw!js%*K4y4}{>rZbT@^+O*V5#kp6I~oQ4s8&2SmiuM#Juqf z+J#n^0_(B(yt_Nb)%COeczEgUA#HhJXKz>pK`g8J+mY%rd%-u|gY4R_ZazfrcOJmJ z$#V6PhMvnLls%(VKMj-%V^FSD{7zrS}eJIj=eQz zO$eMYBtL;Y^8<{-#A74S&pw#3#fL`0Vcn+t{AtEAb1b>Xj&`LlmYKuosTC^&spZFh z?wVnv>Bgb3F7&qRW3H64+`PgLA|k4f3GkuoYo4{Ir&f&yivKo8M|CPKaoOlcRm;sf zTD8KwnQ<_OK5dSn=**W~XknpwC{4R>0i;*jG6(v!&>Z5$!lt}M(;=aR;gW>>f1uR4 zD?L-f<-uB8z5tLWMKv|fb6P&#kopgI0qg9G-&KiC;=~fd2|?%Vb?%xI1MT) z&0k~D*zX55hg~J09-4a|0)3F{5=on@ps|wJyi`jwa$Nuy)D<*?%PB-$c@)Si+F<%R z7ydS47K{p@E_p6Jsj5FDeI*kiWSfzP^yQZ#WUbi|_j$vD9gmuM!F2iWt`XGw?IIZr zCg#o-*aiiGxgaL&=0`A(ty+xX-0H|((L|iCGgXS^%H3{ zKZ1UFc$+`vo*55|gCEgw7;r$bx;a)0Nu-ci#;hL!=VHOzpv3?=CY`wA5~`V@rfJt< zRv5AoAb1fIk*&D|bk^3rYXOsc?lFjkUET256a78#bGuN@QVpGZCeBZD#RB9)c3EH7s|V7y^YCzYx7%VTT06=qfND!YwVrMXb*AS& zal&TCNST3bsVi)3r|yT<)105eJgK7lvpv-wbobvQ{ApOPg+8fHs72YLOxz+|yghMv z3P0e=l78C4$IH+7@Zu8b>2CSU{ua)*Tn=6*|0>08ke@eo3V%s{-qR`kko;WTDO|AN z5q7Fm_*op&SI2bsO;MC7f9jOr2l@GrPT_nI=1VL6Nbd%en02OiQii`P6qu5tLWnftj`dQY-(;E{WhF6UHL% zKs9LZNSx0z3fvDT&Hz(YmkX>C z&1d#Do7uksr$h_<)%FxR5p)5g*g2bI9UGWYPeIdueF1MG430;H^bQpoH*KaQt)D#I zLv#N?Iy4The6p7w^ro%(BOPr_Nh0wQ!fD%2{5oJq7Qp4i@W@UEBfN;#Vs%zTcRg?` zG6;ha*^*CSk$~eTR@|fa7F-O*W~y~$Bs@Jngg+0kxuBO+tu;jwemuu*C^hR<1@J&? zHppewq$<^!tSNeK<3v-%Qb+^FgR_28DxqRH?o$jE!$Ykp;9n1iUQdel9UeA~RxZ?* zZJx`!r)>Jt{wBXP&FYY9X?vnkxE0l8RIG?(vxHj(@u?MwA_!>CdWHKBHh(`QsVp_` zuRN!o92tpw6`16ubYx?OCnd&&J6hPV0+tyMu$fK81M<6=^=)PA^ti9!`*NZcMv?z17?Elk~6P?I-ffXjCS_ zjAvMH2#*?UNzur~OI>9>A*EdQ8N^BO5-Gjn`{0j1TVHAK49n%VT*tA+F)R)D5O+|z z^?%g>xpuJ3|EC5Z<+9HxEbm!g%e^()d=z$ZQ;{1fxg}lQ%E)FVrqw6zUW1sS)lK*K z-*_n_1Wj#LF$aZJOtPZq#XNtOhzpaWN0s+~MAi5ZMtNx~e9j1*#nM(MU0JFKa@Vch z!x<`4FdOU|8F$81@hD~*;L3UBg_|PLUyW>=ASB0i2u-p6tSB>Cf2=uy5UH!V{*Uk^ zNv!bR{Dm=k0GX~&9OixL?-6-@ADpC+&*SLcdSRc_g z^3Gwbg~;Y^VcbqJ+SVXs!%i%>|6~e!9L=8z zX?u#{WJ)MrTGa&YH+K$}1Y@EmBOZ;_r|?(2I309f*o|VZ_l%*@ISX8%$|oDdv7AMu zz=9MacbO6-?41xk%=#0i=OfTQRP2S8wRObWI=J|03on?16{B_&8dbx4%bRMn)@ZG3 z8s1j2RKiS@+NDz%O4=lOcw&FHbsY=Rpdjd#aWllk>F~m!$d#_Wp}cV1FEm}>--k{& zq`F#?Qd!-Lmyle{&^*jx#g3}YTCMcaP*p*k(faP%x6E9V2~d z+w&Xx{G;^~llbJZ(a9+cByt}nlNGC{*)y~Arsq#z43ZgCeE#y;bkV1OcY6Kr{yQnD zcR)nI7}P6SKFt&KF$|vszkVSzk>;p-Pu$VqXDENy6yGSXv;Vnl@D zjWjO;Xza^{KJ@ebX)%=O)=%quUF21%g5_UMWluWmAYbYouhr8h1NM3O&bRR!1Vb!Q zRA#3{UH>W37IYk6pVGBQJR(5f*AMFAOJ_cfadQ4ij=DkSE!#tV*NBE1J+!cVLWaTk zAFiQQ7eJ^F?d$G9s~WaA(2(yPozz=t_3*J#H04%5gXT0$)qisJn{gL{1+}V6n{3Am z+4;I9het_|Z6b_ca4@1vaQDt~S=v-baiFK|$V zsEfr=UJQQaX=8^5GpD?t(%_NlF<5D&C8Cgod>D6#^PFP!1Y4ccknT*G06q7q6|iZa z`ub}@67N}*c-1>n<)}NngAQuJMIt zw5sOj3bcSDF8m$pPD4*df=$g4E#vS$3Et{O^U3&$4TchH0*F?(rX> z76`+p3mOJS;~uGb8?hdJF``_4>w>Ri-3u`W8>~(fT3+C<_$CbdYL;T6?49N)fA?a`Yp~TL zpmqxG`QD9B!xYdPvWe5~5JjI}cMz?&plO?RvG~&f*@Q5Zs^KtUC{>&blPQ57ah1b7 zUU(Yw=CwYUk&M?`dvr5=3;#V1^L=mc2^7fiVGBYQ;Lq=qAd9oNchxHVCW>oWX-HI_ z6b6t0eGqIQg$dQhYO;a*QgR8Fe0zzl^_#lJD{=qDK#F;1;FbygSWJ2hv&mA%jRRr@ zjXm1mn=btj<>13R?@Y_G_F$suC7Vv-8`;0zeKcG6!mfsdLKk zWSqrUMAG#$vElR_I|=siOmb4g9l-tlM`%TXY|^9-c&UrFzc9#Jx|p8)CDWVqUwKT? ze5j!fHzCkVWMKP<J4fkM~^?^)TfROEd8tYBM4j`rt)%F5^ z{7zRuldo}uKJiVY5!NI-UZ4SrQF?gMB`&Tts+=KScQ*W83y z_T-SBbZyZnC*fa3^OTMAJ{mFD4_n_u&~Av(WM;3^L-y5Y?Ieg?;>?tt!DDVS=KiQHaHT%-bj|! zs&Q&ww+OA2TY;+dZS9zVaLxo(STKLk2qk768|~ZV7@|a!u{Mu##>B5s{++-kP3hs0 zwykeL1G(r}6io*=oBb`KhW5Ho$q6Fwse3y()O;q3~j%S{!7!@*FLLqww_b=TvK zrOZs~@I4@FRMki<06t4eod$*FrfG7rHtlAS(ug$1>gSb|;IjbGhhL>B_TFNp&-{v# z7==2;`ANySjdF+9ynzH1_eP1gC9;jHh&9P}@QJ#m!FLF$oA`Lx&I5!C4->1$Cn>l% zf|n+JM>f5%S^Ke&DE6Mm#k;cgpfFj$lJ8OGgC$4o0_;4STyy(`(9h@NeT6qehCN1S zuyrY>7Myj+`K65oW(6=P)Rl#c5?~J31vkPrf-`_mD{_gs*0vr=_7l*Hj&BUZ3(20I z{~;+4nrqS$#gi3_fMnO1A$x@6!6P+KRDk$j;O%xtc}GhLWQ!uh;y{6Q&R zyb;g-BGzta<2u|u)v7*#UkyoHqoCVT9kn01qOx+`wj0dLOJ9|scv4hr8^c; zyleVzL)@nDZ3E(PnabNYZhy* zu+HWh#0vTsMZIY5(Suc|B!dvl8@OPG#e=C5o4C@&thcSFv4ci=yQ~w-8lJV{*|Lt; zB_5h!m16%BHDZ`lJthZ(8fgzMSt_SQ*<5BUZ@m~o26#bLa+dL?t*jV4;F#~#p{o`m zK#(oQ>Irkv@=p7ih&CdPu{wrhJML#TnbSB{8E(=yvdKFTv7$`^J&n#Bh!5^)|0mK) zUu+DQRKptf=rVZ>@=S*30eHWyhl~ksQRNpb0I7C~+;^D`7J1HMdyxo__FgDR;BM2y z%vf#$I^vn*jj5f-glL1bcTYhZ8pHlEfz-%sPM|^pbd9*MEy?1}bT+s;W3u`vTN-c5 z{||HD0v2Vp^*=Kp48vsrxeTZ0npq9Fe z%B<{0YTD_jO{JoiMrG>hlu>!{%z2Pn^XzVGkz|DON*JPhxLE^P%45YB^J2q9(ukLIu;+Q`{cio$bHxuA;k)j` zY*@?;nz=44$Q-bUu32A01?YJVe)g_*=p^<()LqZ&5Z}uYQ`Hb;?uD{q?}E_cVmMVz zW<>{efAQhYRpI^nU~Pr*EeQ&KzmW5NivMl7!>>|<@z8BF*vw*Yu_;u5JN%|7a^Y+~ z@s}LvEd+p#&@gCxgzzrj4gU&c@9Ny%RS-LGNH&OJA8r8?xgW85e};fz)jXV6$r+#s zNa+c7<}4V6(=~yWw7UwXDD%U>Nv?hl21|<9BMB=sSn)pw+ z_KtdFDY#ej!41p40?moM$gapc0JSQwoeiJ^@s@uOJg_JS1O*R1|2L!yh1sq0LE}+f z;yo8U0zOtM8QWqrUOLYZh(eN4u5VxT4b<)OWvAlx}IX=GqG+G)`<7=LY* z7ic)ra~r%MJ_@nj;>!_W%`JqOD)XV)mTR>g96iYxEGY@_+rjSrsgAo0U0yRS$K zGlCnagb93-V#BDgvV44on$u$%d_D02vSloKI0 z+t@t>9P@ELBw%d|7ft8D?P%(CJ9yJCflprbtdb*tA$ZfQS`l>;6=EpaG2kFGKe%of z1cjLons*->&FSi%1hbLT<(&s84y#ow@S5n2Io#zfkgkqA5dyxd3nJc}u2lt~Zr)3B z-h7htXLz-_fXu?r!>T|7=klW<_4-6XpvGSo>3^Pro4!F!h?lLoPY%xiaVuc$80{|> z`f0sISoigvCI86<-+|N1-j!WjqTrZ-(0HHui(x`TwcU!b6I4~gfqmQ2xp;&pFAx~4DD z7kN9zg3A0;&@xsB*^hz3qWBHF0hx^>r%nK?f&usXrA`*2cLHhE^L(rnxB{I%Z`%q%O)0qfoWc0SB4z0@n#R=~992jEH zjvfKr5YgrzKm=ntz6Ss^xcm_ou-v9W> z!-_eq1+<%#k(o^=!V5Cyc*iu1qU>4T;Nr zW&FqY1hc*BStzkIPV5~nn7mxCp>ReTJMWedN!MBp)kSdj@s>}xs7{VYV@9SxQ9=#1 z0SW(fD>dpasM(y%nTT>Tfu*`IkU?cMII2v6wbX&Em(rAo0nRgt>vj|RU57gk>5}Rz z^gH*q>l!GU$9v>ki;#_VU%mt_aD`G2LMMdrSNj_jG^CC>gx+r0ifct4XZcT}wBixF z@Y4f!<<2dQg)y!d=~|0uHK522S}lTS(Bhd;*W&s$RN$T>I~VH@_h-TA`;qvoMBJ4v z4Dc0|(^sKtOVI)Bv!y}*D9GUFPFSZRu!a`ep}ZE>)r_vNaBZnK!gFXdL+v_J&fJk40nYQG@Xdf}`^ePC!4pSS%>eH(}Wj8~bZ1`fsm4YTN zUgVYq%kBkY)nn5|{>&63?SNS9KK4~~0Wr8W7hqSc4B~{YO*wGu;VHH!hrx9KK15nQ znA8uf%)nj5Nf3O1_x*wFo>zly5(Bw%@^R4KjIIEp7U^pNByCwGmg+ZN&}y(@;xx7W zaJN}p)lsX_dWyr8W=i35+%M$ee&O0jt5QUZPoX#50YlXC)-3Z7fxiGb`arSgJ~-NIx(EK~Zwq7*N=>+|5O6H8jSQtjBToI| z5w30in7VX9U$E>q!A|#;_y`}N z-!`wWh%|12Jj_|>ia^^ou0uN7W8HtKal{C<`Z3XR8nDyE`HLgM)iJ{U?uhV+hmk{AgQ&s{yXHfvNPLGq%sZjDk$GnZT_q029x3q{$hi2*h$lc1Q{NjA zE_9mV)5NH+N2DjBW`DVPV>xq*m@}_n`usLzm?+e5KN=QBQL?qZHkW+DbT5Qm1HTy& z>_Z6_%u+3wDx$+|VFEV$pp;jGOORKuqVU-Bt1?7~c@YsrRj0bdL`kmKOR9p0h}t(G zEnEDv7YyxLdqs%R4)~ydb@gkotM|$yFhLrM({H?&XPhWcgAMfq@(wpiJT+k%JUC9n z9_!(wBcKn1H_asw{C6W_Mfngcd%?#LTuX1UAHb843&^1B8smZq2{;=(UEay0p0r>8^(yZ~p}Rc7puQ|l zck>JP{+c^eCu+`kgo@(16EY<4U?+d-5GgjgI>5{6z1U^5#&Gomoek<_5#13xx{qrh zA3Ut14R=vTCME6P+R=6fuF@{5@GIxew3{sygKU)u{we3c_u1qHYK__W`5F zK#wsTfXf4R<0_0Is%K&Qo@l^Z;vo3%DxkN#8VG^xrni%qvw)Zc2r*nS*e;Q|Kcruz{^53F($eEA{d4P(%Y@}VWxeCt`)qFC z>WO00>ia(Lw&+#;KJPjDf)jJ}sm9Tsp8QX%<$r#DbM#AoG|aK+3y#mxFFKqtN57CS zDd*@vI)(QxR1)6LB1N&CepACfRnx~Ae*Xl99uQxEw5i4*HT?!_=r`PBjy~CR2GIW% z_$N52VP_e_r+*4Bu49nr0n!H`5uIu@Fvv)NY&<>3j(})}`(C@O`j0wrHBqa>45EhN zw}PV@9wu;V2B!hIB|kC(ycrzg8f)-(WRCs^36$QR5pyZ0f>8k*2$DdmeNLi2x{PtZ zF{dJ1o#FVf^gEA=Y)$D!4`%{mrOfy97Lv14J?6^qo=R5YB`{CA+6t|6zu6q1LSbz&YAa z|E}3ln`vsuaGc37HJSScW;lD8_3t}QIX*%C$StNJN8+%c9w9o%KWn}*)LaUb>!pPw zC!b3-KWLST>ubK#`Wzn)Q!~CpDiWgMGdrWAU$uVcr7%Z>UB9C#*lhYf!}Kq+e#Z?% zrs;FD=~!mpTu-yWQ}dTeCA)YpSKX zIR4@IC)#?3+A1~j6kJuAYZ_tgYu{%G>FitcRiMw&n#iaj2z-|@D=gwigXQMl=k%)X2KGEGM%~yYJ z;MqSn5G4-OS9DHA`zq!?iRPURGkvPx@eh>qiNVxp`pr~h`V{nJy5u;TVY*@NI|(B4 zOrVasng;aM8M8Cw;Tro9gMMElD9r2}=&Cs$Skq`QI}@sF-qvRJjj1x5en&T;d(3^) zLo!Sk97pu~e%J52RCCGD2F4L&;mq!w10MjA&D2`Rzc*!=zBD`24W<*OQ;y@vt>5=K z0bt6u%LM~O=c<~cfo>2906};ng!RqsoMCEkoRVnF?DTw~<}j+=EElWa*C1y@XPNu@ zJLRRgOWjnXgQjl8-v882+-kFv{!O#pt+u;MZr|*Fx7h6D|GL@k&bCXW z*1p*TZ?)O!|EbyTR@>V*JL49cZTW9D+udq=8zRrS)n@1Zx0~&5wVjE4{4F+n(*LyC z?pE9T=1#uVW>5Q{H=A2M3$3=_%GjR!f8Ff9x%1I#{l0fF{yZOWeA0eyf^)&Y&S^E6 z)#}ZT_cBe58IC$$mva|kN&eF^^^cpa9lS_g#*#7LUsdys*5_@kQk``b1AEojX)&gC z3aew2en$gV$KNwdXY@O;4#-RKBr7k)Uu8JXqF}64H?puw&^qV)KV7LZD#lAomE#L( zB|dM@F#VHOEce8j>9~<;`U(s23R;NkZn=T-GJIWHhJV2F*vQK;)|R)iyx24QPO>pd zZ@F>*)iR9rWu2Gf1XhoA!_?~vH0wrrWH{E|rYNdSl{-OQGCHGdF4Pn;yOM$#iRa$NTciU9UEjByjzihU9b8eT92JM@jeyhzM z_#c|>ZneFyd*{MSc=9bayWfAW+3r@`+a5}iZnfD7|J`Q0TaEJRP!e~G&5rpWHrw55 zI|?`6YO_24kDD#E+K^$g-_ltu0&V=a%+sez&@vu`~1JKkV1E|L^u| z_VfRCzvlVBv0t-;Zvw6jcEJC?Z`bzsNwk%85EsvSY!|z~^oj}lTISNGgY}lgTtSuU z1D~x|z!2ZH>2`n3>ptQ_x-Cp+y?LDZvthS;sH`wIFnfcrkpTTY1A%EZ_a-SI+rc;{P8$O5V zVt@DYV%*a_jSI!ZH*nipM~Z;)S8>~2P39^qLvVu~IR0$F~U(F$f?nGkVkf0)@Clu*w_MxYiW2!$GDOG#L3+&I%)8q45x9x)r0_(n4M|s9zSICq^aX^6SNRMnx-cr@zinc zzHrSzE`}3_ju0&`EHsO!=8y3bM|-XsF23oM5FyfH7eHSz2HH#6A7vYFX6wvD^&a#J zUxIJE^3oSzgyari+_Y4WWzS3(q9({XO$T*j=}vFq7i)0cbHs{kh8vG-H9#z1DJJTN z8GJ59OTCaJKJ>Rni)CbLY}?BVTT=y0g8E!QK#Uf*F{1;JMfRE zs?dw(yOM%5PeLN7W@ET`<<0Kik|GcXm&?IVolo)>&(G;#ROg7P_d$p5{4?EfV+k8# z>Ist7m8qRuZw%G>Vl+8dKlI{2t?(|urDWd0BHW4IwgA`QRgkQTjZQFVU<%Cd?B-bA z(j|+g&Yw4fZaGRm?a)I!)Wg582>5X??n(~!^z-ftI;;nO`p1F=5q8M&!zc#{omw29 zT%y)Hj#doyEzpPCyU z6`q}PW?phD&ivr&hHwTfizD7Efs;%`uY^tM6*-of5Dvd)QA1Ou#ceuz#T}fB%y`4% z1?dTy-i5XJR*y8+Fvt-e3;}pWU?0{#G)S)~?fmMBSIV|H&O(IP=oTS9suF(;^7Ro5 zcP0nE@KcUWZO62CnGI2xF_DlJ5YkP!gWvyYS$jrbMz)MdzH;rmaPY(LvYal7x01pV z+Q&5}8C)_7qc3};wRm#uL_sC)Ao?QtT9WK_+U$rY@otzT__U3Yf>n^+M7Uy58z6F= zvtk0R3m}lqc!aI(Bki(eIexH?Wl3^K_ud3#VP<18yLN&6HN$G`hn6??8;xHjh@^V8 zja`&avf%&;c!ViZ+AO&J>m`xCO2@|Gb>dS$M-UX&x&`(}2aq`bV~o0A7>yN-E(wim z{*1Z;4md8>SbB$v`q4JuA!`*JNfe_m3q=x{7(gM=F>>o{=*w;(u_9>9kwDfFp}z0= z5IZYlA&j#Ux(^|((gcKqq!dwmGD0J3u(3&qHU+F#YC|H#?FzSA+l`DBGx5n~Ram@B z4+n@1mfqS0mYJuxC}pg`W3S^|7g4QJGb)>ebjcKjyWIZk($`35u17$L&TmP z5EI&#al4N=G{#n8_h5aB514R&1tu+ye=tEe(mQq4m)rx_xT`+KJNYjoDzD{tDB~z9 z8%)7_Iklqw2X!6LBpgmbO<^oz+#^6Dcj#-|Tf+Z*I3jACXZlR?zC>P$E)xKfUQUuc9Ep9;tO^p-$J=_? z-taJuhkF0v5?z8?T=-HSEL?jaDpGLZ zWo(faFM;T$fJno^6;Qd4e8mo_GqV0(uzWFoUWe54$u)rxQ=JijbXW87GX;VXd9@Hh z8nq4Sipc&&ZAS<^*PVl4boO3AZdlL@pFcvzI^Z0V1Vq9&DZ3}Wb8#*{r($b1@ox}9 zt9lf&&e=L_(#rkrGHAZmh{Nx$3yUX@Ex~RX2cTOEaSg54NasW!-PteigFo&IzA z?FWQINkY7}+$TunM^<5H_8Hn+TM8NQ)cM#0ZF>fLzx?CnkRJ2Y8nzT=Lk@2PI)M#| zj7k^@+&tq2fsIuowju3TBWl=&hYu#Ld9C>6M ze%nJZVeR@Ho!?Xg(x@W|a5ivVM{??QB(hml1(Cxh5>7oi5W=9_9>T_b%G+@=ylgTz z!I10jf~0tz9Xs^wZb)2bMj0%<$Q4R_bqNYmL(G`L!;m`~LqKa=P+b<8t=v ze#4tMFz9CA4s4Q~CCjO@1a002pvG-IAYeZ6VVo6M2$dzQ)1HFRC`)=)pLq^=`4N;C zIU7*YjF6dTLl!I%THYP?bNNDYm*s>xEb=nsdRe42wHcILMc#rLRORw$G%=YtJejMTXk3?XI zB2K2s&Vn?Y~^8mhP!y{hvG zhFO~Ffv`#XFoe<>X!bhDNa|vH$z7Iu04?V(E5DC$Ko)7T$=*G8UMi)dw=E3-$3c0I zLK2>n1vEkxft#DR6o*2Fp7=K8%(jwW@N-daiEVP59Yu1k`9Fi$Z#i$lgX8`D$;Og= z@KyB``XhUygD`wC-di1E4}^_|4iH`T3Xzg`mdE)xDZKj5zEXIM96m=1uhn?@1rVHm za`$RvWh(BHr43dpKpHsoynqR90Wx-a*UOhHJYEV{xui_4 z$zDkRmwHEM&J`=?%9V0$n+F{V z-76Rtbpc6Ip}pi3bH(U29m7Sw1rt)ifIAHE1ReeOq;Qe91_Lv%7P?Y}w*pUk^?aNy}|M`!_DP z1*=8qI`7V6V~Br%SnY~O>Fc}$#f2lb5D~i4_OpFP0ohody=1y|;gYGQ6cv3hSy;Ge zYM-Qj$*o`gl2Yz${W9IrSNd}2yrVVpPE)^rtzV|3KGK&vX`j}}WK&>Do6o*U{riY3 z??-nN8_Nvonqjg*nkfz7H_dVT)^3`;_omz&v9@_bgk;zL;9>~##$Ur`Ch^IhT5)C- z1iIN+O)l6dwc}*Q&bb$`Hg$WLEZaPTMYWmi-mvKv;<$(@d!ZgO<@YYc`(b-EMYUBC zV(O+*-a_+uUr2;Ul^Jw#5mG0^7R>hPumuyf>otSsl!thtXG*N7n(hro*Tp2QCS4

      Rjaaf3)E_?Vg$kD$t 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 F{{SwY+|2+0 diff --git a/deps/openssl/android/x86_64/usr/local/lib/libssl.a b/deps/openssl/android/x86_64/usr/local/lib/libssl.a index 82892112bdae983c3f9cb7c8fe104d35aeef3fb9..f5464645d6c763d53c649c02aee4eefb26a23a53 100644 GIT binary patch literal 1531204 zcmeFa3!GdwDTtUq^63~GEKzTkhpr_Qb#HfAE0Y;N9RA(9GL!iu|C(lWWcc^Y^D|BM_u{@x(-ZmkrQuA|(f+=@Gt+dGziFKh zWuC~t<_&F`=(qLbnP&VxcEc0?cig4F$UM=0$FJL&IqKi9H)T#(z9)0S$}eY57~DMd zo3g=F8JH>qPwFyo(y5y=iQfx$WKQ~H{oePx%t@i&ZHF@_P5mMpoSb`4CiwfSTQVo> z@3z^QlT&_AIcYfa|MGA8_C1*ycijJ<`en};%>0*rOIK#H|DC@ZTQXVv-gEvR{(G=5 zll>$AT35U$bHv}^&6(E!?C%GgGOfQk@VLKIZu(Z{iTs;cx;gU){oe7d%*-d~@6^}z zW&Y^D_n)6R^?&Gh+Rp|v|C!&@E

      Cjznwb(>VJ`gfB#wT_BX-)YdJh2_s)&+#wC^>2<7sDIqcXZ$hv zUeEZsqeTASd&aM=4*o_5|NWl$jWPe{t@7ICznAn~?SF*%Cs-flKhMGcS{W>hJXEkFdU7HoN?MIxi>Q_mk)Ioi)@N4U!$%V@=7<5v~wyZD=L z)%>QPqWxar;D6C`{?N?)jqJbK*yVrDbNRqZbS2=gZmF>h`DemTQWHvci6@pFXv4-HDLckJ>XMf$Gt?{VK z`EQ~ELDHT-jWPfEMaus%(s%LCV*VKGqyOQNDx3dDp7ZBezg9Hz#tl3EfAHwnmZ(2` zw7dMxtiRY0^Va4cB7Il+E9p7KvP z_%}HCKjayIQ_Np%{j<)aKfwCOhI&uo`Olf2@w@B`6r%KUNG2mfUb{&&*>5}w+}j|t{~pa}mW(s#9=PUfEw{8u>mZ}9MsUaA#;T7>^v z5C7^fqEwNH{_XhfC{ce|)U7|p`lh{TZwlLAl}CTPME&o0 z^e0Nxzs{o{*`z%#=KsydyUSluqJFnWKU$*xACGhM$4b<{*P~xsqW-AI|K<|)|IMS{ zQlkEJkA8~vkJQx|eA@Gevpo94CF;ND1b6&*l<0r`NpAho67_HK=#Q1CUs>hmA7_0E zPbk^(>+zJo;=@{vhWAji^*c%5HU7rGgi$Gc{J|wL(;sKC)wHMlwajniS-jx-;g3A} z%_ZvBd*au^`o-e+nZw=jA7*{Z4kbH&k9+h-O7#D7kN%Dl`EU2=kCw>)?GxSQA7lOY zQ0WVgAGeXdtNpZa`)Of)%pb6%Z`y-tKR+QHE$v{7r}i=p6dONwlfH|8)X{#iBxUpW zd&=L!{IlSkNOt|FJmr6q`FFEE%0J@Zk1uqWf8cUWT5SDpIjui{!j9iC>)Wxh{f~M2 z-w5kl#V_c;Ep&sbi+=~}PZzPnuFd~BkN#+h`WMjz+r>Y|`sGFVKkv~WFHwJk=lp4+ zME$!x`sRo8iur$*Cw>)I=zoZJ@JdNelh>A@aWf;sK3G!zvdG4Z}RB3 zl&F6iHE37+OR>HgZ%i|^+yA*9{ecqoU#9@O_=j1aF0Y1?&3}}Ke@BV>7kTu@Siji# zy~(3LQKJ6Ip7pbekLY3-i~qd&?)XJnpDr(ik{!RDuok8}CAQn`^({`(!}zr@2oah2A)M{j~pyZv^1_&dL@9bd%$gZ}{s|3jy^%fDl@ zrnKiJHviw=yZCoF_#buffALf|{{ZvT^g5L6@_&x>UHrQp{Es>Kf9T=g!ThGaj1xBhqo=$5 zA7%Yw^PkVwx%J0bzu57+;%#pI3D&2})1hSh{}bQw^J=YjTu8fc{Cd`N{H$etx;-(J zZ2nhifTn6GX#XkJKP{wP$o~}zkV}7r^{IM8$>u-YbNz6P_3wjmk!<}k(s#ALac+N4 zvM&1HlVr=ZC(|#dAMEyjc&k?I6x`Ug`R9A)f03M4e0LH380owGzw=wV;BnT6|4%vm zf1iiHmiZ4V!r$cKkL=L=CQji0wS)g}$GhX#%={+a#tl1u$9UGyT1wQ9)VTRmtiRR} z^Va77d(0jGSzP|@tcUXd)=~a{In>QR&is5CBk;oJe}eQ~^*_q|ow^#-`~%l&O*~D# zeA{#U9v;$^(STX+*!;J7j^9<^(Zq%a<$uP(e>g3WK$5yqDD7bWyGTzao4<_oUFEN3 z{ynS@{y#eS=TSgh{Hg0T>s(1r`!@e<(s%J!eGgW{>#vwg+VNlQ;orghuT4>Af)AU2 zrH8+k`4_QsDE~eO{{k9dT;<>KaZNcbVAeY}f7YWv%KF9DzuxcBA1jgnlOFx?68XP! zrn~$TCGtP-(T{vW$E#TRANA;0uzs=l&-9c(S|a}@&+#+H`o)gFpZ4gtu>O)F?dL4d z{9y;{r;F&HPWrC?xA89B|2DEd+W*Ur_P^hA{D|FHTK%0^>25!@CF&ms}& z9{&fJpQg8=WS9R7XSnr8Sf8dRp=9gt_UP{@QU50=y7@<0|J)FJ;qhZP>Dw`d%D5wb zlc|#I@sq2rbS0%KcsSf_XdH7=`^8eMtztzEiu!Da- zx#?;@&CGvok@Ck#*;W2KnSYe^QT{Rq|8tb@;vX-Oe-G)q_&4&2i{!^|^_Q_fW?nU8 zj+;MqvleV%d9$(G|KX(X;$Jk1Qt5YIVT6?}>(2%A<|(Op^A{}A;w^_=+0b;( zc5CUqsFNZOKJHKw# z%J}AI7v+A^n0q;%`+GdMsybYU9Q+kbE1gCYo59f4QS`& zNz)=VkJpSUuz^VS@BIb&9UpwWzhdyY>@-%?rnhA)WAWUtl>;GDsASxrYazyAw6>gSGTg-moV=_*AyPX=r^}6Wsod5^oy1XFHwn z?(433s%|HVMef7L;B)1J=a4(vVz?;pqI``HHNgQ@KvS$sD3c4d_oV&%_t!kN_gLC2 z9qI#VQ|=AcJP0hgy_+8?Yh2t=)i`u)dHqjvk8OTzDt(QW*S|o*S~B-qRK{us|a-<11PQ|?t}%2r0>L#rxh8H=!10^)?HNhp}NFHrrl9{i|5{`*>9Sh z{_?n*d8$U3$#l=A|3pt)Z%1`o1iS5hiMGDpj;?i)%%)5>*^_8bcC_|)XCu9>J;`^U zn2BVPZP~8AUfMl1+Sb#qwyo)P$cohUwx|2L+M`tq7uL*+&0lW7UhIRh`*vDs%em*{#|}^}4>kb=}EKUw^tS zS>4vxGdtVY*WK3H+SNO|yL&^=X{mJI#pFt~ZSmas?TZ(;FKp|W6RTM;XVK!hu{rZ< z=Cm)2Em|n5`9$(m>F}; zIbNKwdYv6vgRW3Fz2fZYv(BC#J$ri9+0$cn(-+lGPi;Qrx`VeJbp6yDrd&OFO6}z7 zi|VGwR6a?OY(?GlGE#;8VYX%F!05_fV$8lS%5Z4&TXJ@4g^-00IGUZtZ5pDfN4RE#)pO2j^b>x?PR zqeFzG?K2J|Z@go}fqgnqS_xwd;%uj92yo%oc<{45_|H5z?t^mKr%MS=yvu{%=E2Fl z)6Nqf-uDqcBRDeBP(=DjLkiE=3+y7TSNK%@g+5LDzmWD_<-&DK7mg)P7mhjoj7Yw| zOk4k?$G)j?cm%E2=oo->673@a$069@H04kUT@?QYH|-c0T9?7!L;FaugSKq&l>jLL zN6ZY~1CSEzAbJMB5+EhWqmLP!Pc;;dK4kD)X&(vlG))Zf#{g0Sj^m+`e*qvR;Ih20 zC{+6+%WDP(yS#@|{E=WsmiI`;A&)%6TP5UW9F_?DEkgdijK7nxV+GzLAtj@)b#h#ET*eB z*`Da=?^V;6LKEa_q`J2+o2))}+4-ksvaN0F!$M@BE7KWRZ%?l6Ul*xPC%ao!A*#c( zr|PDJB1cBScW3i8GMDy%*)xpVKq9<@{v{KB`uafn zHlKYAOnUU2nIzPw2($HDNZbgd@p$8@}88|3R3G ze}wtXH9hbn#y0-M+vb0#hkuOup(m5gf1-zf z#K8~9=Eph*nJ9R7>Tj8Uxg@83$Re37E$ONKm_qX(G42#*USV>Kp4r~d`X=9Of9mQ~ z4%y4d5d9Ub35~J-oyH(g7p#mAzLcdE znE#09Uaxs6p8MCDN9u6vs$K`!{K};MGvh-)xS71BWt9)sedr=}uD%CGtaYHMQOd6Z z?W?NGJ?xS_DI{B;dns5isu=~z1C&n*OHx>ls%Xr;)R@~JH!CMt2l^%D$8!(prJ~#} z&4LW<#cAoHEWY`bDg8&rd6@-SuLN1!rVca?Wp`Df^zSnw+J;g!`DSTjaJ2uO+NjF8 ze3xFC%0s*AcU6&fvwQ-2mW(R1#!y~k+q7Nr&G$!_=CZq@jk)rB5cIuU0~6tunLioa ztVZFqci$@Qaai=vw&=?Q>^sFJ`WIXDJ!Cbgirka5l2bv|QJ3KQP-}!Mn{z*p=l

      we|ilxU8LTS)-*nv+NolIvm-=)%HtDshbV5qXs`rt(mG^4v89v`|7v7==-D1l+cS5qrlCmF&{lLUYLhiO z81dXgb@%Ev{#^N%FOiMLp`H3*^Sp9~T1)QFYH#mvDOWof9xrh1O5vvbY6SRagIXiN z7Y%NtF#_znGU)!)#$7(@UQU+|E~KR%mlxl+?AGW0;2v|oV+roW@D@~8zPn-tU9O*# zlsq2NRSsO4(W6#Av~;-z*G5ltiuG0L-IH`L;s5jN; zChX$^d_ywxiMc$Vpd4-M}31%vwt$uth#TdDhf!RY=pWo!4sqx;3CtfBt#Wsfx8W2>wfX*IfkxN&GE z`RnvA7}#4p1N(qwvOf2QdtkrZ60`?)Jv+!fDF$|Next|prlEtIhOS2#{R6oUpgyfC zI*{LJoGNJ`SN8;{X%WSjl5Rido`A;OFV(z%e|#5R7)Cy(Q%A;!2Gyi6S6?}cZW5>~ zzwx1cM>Wtz>>ORcuDcg<1eb5wZd_^Hc8zK{+inq^#O49m-U@ZOXk6v|C)g!Kv1)f(bpjuGGH(37V%y zNgY?wtD17Z)eR8FzpL~qmmF%!wO7U(bH6Fyf|*q?A9<0!5bA2Qn5`+iq2~8G@M=^a z@@tG1XsDKZp@#quw}lDRP;{C{{Kp02=$65lfeCq3nKRSS`rNp66+f7m=#vL37~OG! z0i^$a+NUU$Z@EfGXXk3#lI=&7MVf$&F3HF|O{;$o+Ze8pXss{omfZS*h)}Jt*JuHtO8ki}t{aZo1C| zUgU4F@cEOiRlfWoj+-y^i7XX7+oAlRz*v6Vl|R9u(Cqyjol_|ntz-Ffrc!hZK?Mdi zLM?Y@UGBlXYe_e6ONcLbd!M1TEjoWG--7G%jdUtF z_;~r2SIPBw?kDlVN6NRL7_>IC`He~a-A&v2r^dIy(nC%9gvLp~ZruD(nL6D>FbB_}2DR^Wx_^qAXWhMjF_jQ* z%XG4%tng7+PQJ~#XK*`E-Oee>)WH;zecv^Pr{UX|#)uR<0rXwt#y!?dcY%V!QAsNOTE6tqmm2ajC^lb*XMABP62|5Z3X z{I+QuF;WDTDLOL4$YT)7(I7${v1Sy9sS3)$L9cA@6Xb!W4NqnkQYjT)^IU%Frf!bw zC_lEIYJV49p_nvwCmsLkT$wC2PI}l3$ruL6q0>|`bI;#>jj@%F0)}yFt9R#QR#Yj_ zau9Nc@;Q3xPBja=q{_v{%@5M)+l7@COLNboyx&53F@BpfN9vuMU!Pun^)ZxjH&(`R zAl02;8K}$cQhkYXHosm`el;$r+>KRqOOAvFaj`=k5*jzZURHkHZRnXa$1K02mO8^Y zb%x!I+m^l(U%b0~%R;iScZdYaj}26&mS49(xu;Yn=T%;V%HZ25k6QKArIY@O5x;^C z;pnUS_P)EW2x0eL+<{@+-^NeQl5c>ZD_o#s?Rl5 z9xxo7BJRvjJm zI4s;?PEX?rRZ|5`HV}qrJxvpjDc^Dm#Yf3fwz-l+bIos)5|n>KTWu;l((W{YHZ304 z5B7eF27=r}F8Qw+dDR-lazxEjHP7wsBt06=T#DZ^icCbOhe7wCJA|uAv*tP4Igxe- zM^)Ws>oEdy;AjFp-(~klWOpy_Au=Ntb$=y?Qhx<_-iC@a?vLS%VgIHL((!y%1G>Oh zDQoHAOXXW$pdC{cbPqM=I)mecxg2=LDwvu9>^{D!hqTodeCKxo)~lNBQPtRIf@0`Hg%zuaV@c=yINVB5U6qS7aZsU9BQl zgGOUoIp&BDR)z1Qmi=GdKWz;Gy8o|ImrSYSH|Bmy-JW_q&6CO~5;S4bM}2N5|E|2t z-B0&z(?ouY3cp%Zo>tk&l8w6#QHq0)XFo{O{f}G_-*(CV_~thbN;lEh?8C({5g^Ty~-`SWu zv$8R_@J=dvWZyKJ_~81}om9DG9Ty!77r)^iQ65&eOWmtbGx~s1egOV)Qsr0ItaRyh z(bXLjK@4i1dijUAiG-d*pnL9XBjtm*fPjcpsFiaS6Lhj`0MnUfg{or?L?dQs+K~@X z_xZ^A@omlI@!t+gpGRM_7sPWvjBoyTipSp$&Mq!I=}4bge#fS%_y4h?{HH2%4^up* zy=C#A5s!t9xwq)cJc=>CD}s>RgOKn#VZrr)r9?R$?p0VZp?jm$z4Yl!E8R+u`>*;l z$wXT+o$c!AYHQ8v8?Y>lZo1+-v+RtzmCI@ZE6wSy4P@cG*CJ&{-7U?!QS#{#-~JNgnyzG;wM6getnxDyTc_@&lUOw1Pq zJ7N_yp&l8~Zb-QVJ!g=BvXxdgthk_IMdPw_mPgN7z9JgQf4^XkM*g=y<)8~Rlgnj4 z>oAY-V>nMe!ls{LsGA<$JoS2dVxh-8qtGxtI{6~=ML!F%iuJC=2trRX(DMwWS3f-l z)f*;Hxopz(Xq{3ydpZWcMfAUwb)JDv@VrFb^eTEPVzYTl;_gZKo_{`q@+wLELDn6^ zmUPKB$jHmdyFiUcDNvSYS?*kxTROe0VR}VI`2ah(aRUi682C+gP~IumPoDfWWry5_ zuk%>$%OPLs*$w!5@O8%9Pm;IlnGf?c$El>7V%?83hZUR2n?-0)2O}*1S;$*;kTPMn z>Ht1I$$IMXIbS?)x8g~9h{H^p5FtH+k8nIkWjxPhIafU4!-brW=N$5NS`eq}U2(dZ zb+It(XhV}P7jeQ-WH-wn26;+x`hS`+%z#4t?q_gboaA~2r*3)*_N!onl3J&s?S=Gz zCSwEO31Y0C;fc{RK6TS;L(lkpd(!my>gmnrPOn`tJszLl+&H~<@(10Nwd!8VTi8DM zkx-@`j2(g%qC!slxuT<|xCvC5%x{vs8OABWe#KO^8~HVOT=rW+WqQzQA9m>fLbio_ z{*lh4{}f|5g9+KEzEe*D3%bwbAK*c$PzQp|9jt#O^eLf_JjmEH00N&$83wsGPJSXh zbj&2t*I4hZ&?}OXG}&@JL-nsz_md)6`Opc^Ng!2In+I;Dfk$aLa#xwganTvcjIjq% zeJVQ^-b+3L|CAOF-b1nMP>o|b9!V`-(DqX_34;8$6q?8X#QrQ|`*_9(=}XMJ!scap zGnSh+GKG1s)arph%h}F43rBsy9}^eE9qBV{2e*A8nL79#`+vNK1AGg|`7-v?^uz5W z2m4=S+_VdfKfrq}`9`*ng#e_Z^(Jz$suyVKWcu9c3SVqsdLBuqr>H$l#*a>MQtg@c zKdJD!23F7I;LDu~M{CtdwN={fS2%8!)5*l)1}g7l^^}Ol)v=Uzzf1p+mxV{h4ZEat;5DmZ?o}Z!vKGqBH}Lv zrbJGVUxWQAkrRV`xicklviutCPl=oo?8}`gcqytQO%d%!W>1OCmS2PYDWaVRAni<1 zPe@2a?@tMyAPVPAiR9b4%$cHQfD$ow^8L=_K266Z(>D!Kg~SGaiJ?2*U4{x119Jo10_$bZ!%|7DN-@gDi3J>|s`uFKDN(D?7d zM?Llr@z_7zW2ebu=Qea;Z$kD5bM-p}cOhUlkeZncTxGeeAr>U@D@*U->BLyUWmu>D^u`}y(8 z%$vVJ$BP+a{8Z-;q%%zAnjyv?Q^vola^=UX0g4OKx0L<-xTNN*gk$Z}=qf?}*re>_ zj~6CB)0O}E@n4-ckEBo}pX^gj1 zRUA$*aB#$WUg6Y8IjQqi+MniWpO;XctGw^=wDT5^e6t6~k2JXKS9|>Vsz-i-r(RC+ z^ounfc{132}9{FkyZjRIxj>u*7Z=ShT>&)~WcvRr0(>@aLdipo= zbpR=$dE?*Uae$P7VUBC?6#yy04%)K8I{;F$?e}Q7zBM+NMz?aa!!LJ5L33xC48{CXfz?%eqJMAOc zc6Mo4;eE7k?EF;V8G&OQK!Tlm`Zw}#0HkEs<3VV+jAOJh^5u-fj;u#qv_i7&{5C0}|pR{hZIZ9fvaoF8w@5*pYtr2z(WB z7(a1KEt1Wm4i|eRJz-9a7pTkzT90%?Y@@SLB&qo9<>Gd3W{~W1 zfeXnl*MLGbj$^m6b1mbrBg=KGz`S6;r$Wgb{xh9F75x3aohg$0+;q*5q4ypaqj{Wc>C$!_+!>p zflJ=A#CQU3BX7oAV3N04*q6Mm0+;qXJ@)aq1(Iza=UGVbQ`)~?;IjSPByc&do~Ep5 zJD8)Ia=|ww*sr92gD(e23Ak(z7bsNY&^7WGF>cpayTGRjdGt*r*q7z{s6sU^%M}&4 zJTEXSz_0@u;}6P?1iYU94UT;z+t2eftnh|b>B=Ac6 zvb@s%$CY$p9R4@V_sYmO6CZQDv*R-${71}<{56c*@xNZ+(*8eUz9;Sb=6in-{>%Bp zp`w4u`QEVtM_(}I#SKYFb~~BPxE+TD0+)W)3Oll$tP{AL@8P#NT)bBZ``|Wy;t2pG zV3JpkGm>{i*pHKrvGX;7%lXo`1un-WGfzN#WSke$cO>9)o`!Q)p)XY~IhZyv_SnVMp?s^B4Fd<6kc1 zD{0@9_rEevnyIyt* zoR%;H`Q3~o{xS}~5xBJf4CA)_X9X_pza;EP`)?EdNX}BMjvFT_X)Q13Gmt@ool5#Q^$VLwz-4<_ zu27BF)4q{6^BlWe7;}(-!2apmlSuWXbWw{Pk(ptWn_Klqt0$(EVoWNy2lIMx? zyx==RUY-{`CU804z94XnrN*CGBL4EcSgvo#xZ&Y;Bs*?+Ld@V8i;Vqu3;Qx|?-#hV z{~=)q9LA1WHv=Z^n|ZZeFIRi)Z}ZqU>mIg!bDhVw|2>cWdp-6a5V-XJC&G@5&+h~- z+tqUdm&YSq_d$Z6vLE64CK7P8Z4=M82)sey^0zG81-@R$%XW3Gz*h7j#^=2Puctf{hxaiKdi)!FwZLV4;jt7X*q8Oy zFK}63c#I6m_6OJR41Nyn7+yTgVDKdZKUBlYjvP{_=5l` z!Cm|t{Ko((0XvNT4gL#&lwe1ew@k!Y*85CRFVenT=cy%I#=coUhkc1(AnZ$gqrhc( zKP~Xfh5g%wKUj-1ytvMb1l}v?-{4OR`7;D=+MzAqfa2W@44>0KQZ|p2#d0;XQONAX72RY8mI9wv+CGSRIU-IG! zOeC8Z4;~{S4wBd0V+>sK;;B0%;F8zee+>JQ_YM#5!yY?75%SW`69SiU!$V|9w*P+- zxb%Mt1X*7Ce;DJo|3?U1@*XYh$hg%AT=K3F_*&vO?V&^9^#bo<-1a9caOuxSgdOS6 z#|2(5?0;I=k#QaoxU~Pz!j81RQ{eT&{zJl!wEw8UrTt$DJJSBM0+;bDCoUvp&!c}6 zPs|~afXnsU4=PmS%W2=pZxHzV1TN2mq@B+Sd1>c1fnOr*JSp&{0{?dp{<6U9h5Q?g z+wI{XG0x8r^5x>VAmfSWJCP6{Y2REgw(ZO7#nQexuZJCJf4Q(P>#IfJlGm&&+Pu9i z4_xxfb$`vorTUn%TJ z`=1oJw111RgI#0)ivpMSzai{M`{uX8Q7&o!&%%zh|B}F^eY$B`CD@VnPhtF>gk$b% z{KS1_NRY=heS@DPa4Ek`;PQSX+~eY*zC=@F?$N za~%QR@Dl}|6}VX&MD~{iezK64^YAKx zoAAvr$1yrI#uA03VCx)7TMzh$N9TSr*i!wd$s{-TPyIG zz()jb>KfU%3w(}{R}F-|!~R@>&qTwa1RU+hq!xkCHy~~0{0HabCfzRNaXxO+Zh_;x zJ4grVJ@DeZJ4ijrp0<>JCK%5HC%XIk*7v6pYd7g3 zvi_8asw3o}Sm+eGMpQI-9}n-#z?e{@Y2@oKU(mMJ-bAKrT`yeePWDEYH#aPUPG)_g zx4$R&Re?6jji3_M4g}PW{lXp-2>o&%<*t7IpGJUmvLjE+-<1UK3+4^2-Tm|?op94P z4GdLme$qkIv@B>yBy7cWVvmJ_Y^9xlxlh=baVg&;^$#6*+$smbVl_%D4rHlAQrZU$}bSfw_Ff9 zMZ#8050uUEKu#6Ph3(l*(q+pn^WXidu*eIC;Ca@hD=Jc^d@qN$NzE8 zH}~)J*Meucx=G)~Kg^STv+epS;bFb6*$#0P}yF_07iSk5Yz*x8JQy4 z{HKz>i+?LFK2lnZ6F^GfFQY{1a#_ls>LE!KckXPWmqXaS&1(RiB#w2->&# zn@QQlKg@z=J(|rF^uO~+-^D+Ii?x(w|9>;SD>UE#v!4DJ<8jYiA7`}!{ytCt+g__R z%scZCjw9*c=6{!`|CyhVcto2CKJECQMEb7sZ(O2PWdA$L!G8n=-xdF{H);K1{SUt# z<>KF6ul0xZMzz1UI{1G_$}axsG_7dv3t}?`@&66!yZBc(Xbsu^k9P2XiYmm#KZ?#u zX-IE^Pdok}Cw&+H4i4NXYoh+&PXBiOk9qok^K`9v80(vj&HrOh|4+rWhB?lGAM1`b zf0d{Gw=lo_-4s}~`A_h)|Ec|WAtJ3U*U=W81rwW_JM@*pF;mO{|kh<%0Gd@ zf)d7TnQZ=NDbrQ{IBveAB+HL=Wt)E+VJ`lPw?R9ie-BLWs!yALE1@p_7UoY;e2`H7 z)9Byk{|R9({s{~gl-{B@!Kcl?n{r(IV;|5eviw;0w)uZS$9Wfj#XGeA<9ZW(+Wcdr z@8aL%;Kw?;&3}W3e}egO%#_LI|Bgq$f-kZ>Bb902*8hgb|HucmqKqG=^tS(f9{xyF z>vJ>KU+B~3-^s`SIe`T0MfKKP$2HlgDs>RCg5NIv+4JVikBSs4 z*w@H{dGl1xqMA7@Qu@1gH}Y5pk81HjpGQ*E^t+zuofJ*#U0nRL^YjD0N&FHw|Fk*% zIQLGB;q(%eJy4}z7~V)f^>5xCnR~$edN*Dph4->5DeKp@G4oV-{v8whPId`miY5dP zrg#TGL%omQlAwP_+)%1F^9HYiE#=*j*;e(64Jv^B64(v&TDtNr|3v)iovIVGLsH_s zVfUK%a&7s#%A?m~6}&PGMy}QnS4dnk^`|b*RHJM%~<8I$QVZr}j+V`L-mT9pE zY~R<~(*OPK`!g1Ww|(Da3I4xs-`_C)6l>pfjluk$dZIhIuC;BG_*wN8E9>&B-s&PD zmXkxMzSLwEz{6PuKRh1F4lX(#z@}L-4=L*3M~~F?wx|2L+M`tq7uL*+&0l#fd2z{H!?UsG}_ZpY`z- z*89KlaUM_1u7HgoE^Z&0reO1ann<~RYZ&)1O%lJ6YR(D31-z9lnQ2a?np2iXFbE*= zsX*lWZ09l!2lxZ@9d?XebIz4zJLj-GCMQS-lb?{s`6QCTvH!p6w`K8`IeWei9~;Pj z7yc^cx$sjx@;G;Q$>X(mF8nADeuf8M=;8gnhZptX;$7ykgJ)=6@|_;}9Uh#_IPGjD ze1`aqVAUT9!!va=f?rnTeogrOWN3z2_@(cvAJX<}5AUx$IL=L6<$8?p8RBZ6@dwXN z%n-kEtoks?9zphJh~Hv1{-8g&?4Rg~C)WLuaGnL<%)OGw0i*;ReaPTgCqM#@zG(1T z+D8IjN&g0aFF;Dbai(GL_XDH^9P3C1{}4b*R6O->@T5XDhEpDc<33j;*uk=x!3Ss` z$+nM~I+AVwdJQXF+P|4`+dj@Skbq-sGQ2o%Kmv|2&)`1*NC~)%gN#4U=Z(Bsn}9rI z48DN&k$~fxk-;wjND25U^l$JCKuW+*q<@2(b_87dY2pK1){Be}VrT4plJ=2+mC?V! z&DsL&$a<0Sk@oK;IV8JYF#aRi_OUjHWZVCPh82E1?Hhky5cmlKpM(K|66_%6Mt+vS zrJv?EP;5U>VtL!on6M+`P$zI{KQ8RRmhs0t+hE&YBkV}~<{1W*OSVt>n<*G4jQwM1 z9|`hR^lxyiOCkZ6?dNobYFxITI)R7E#kd`}vLF3-jbm8m zH2(Y}#xWY&1N;AoaZK9(|7jepwe=MM)P4o!|w;GDNT7X-(7*Rw}T+)W*nUEPoy+@p)KDTMFB4X=*DP28E^ zp6qDt@21CAC~%k3a|~-$BXsAWHnOdBuWe>i54PquRi`xWCr!7vW?TIR^CG3RP`zsA zx&1Xx!h20!QsHJ_7;Uzt@BO6!)Ku5VF8g2EAE5yT^9DQZ=7ksY48F8JS` z!Ep!}&Y@(gm0!d@#!8vKN?#77Z_bO2j(x8C1&3@s1T2{{&wwm+{B( z(&pb!adz>WdrphR|8J!4;@^mq6-uM(Q=b##_-pgySz7Sh_Z+;A#zN^Xy$L=ci)6Nk z&<^%v3eA6fpBt2!&zc;gXSSet?%%kE?Pz+(FkAb$BUM+5)$7w zA4>O)kow)5X;1k}fh*r~2Yti);dc$}rh=g?y9VGL_6S6PaV|rbyUmsE+-4Qrp&=do zM-cqY*hi{)L`VG-I_i7RB9i*@9ngZchQz~d#KrSUn5n7V|fR-PcvG$(F^E`8(doly;x_|6$IcH|h%$U!x_kW7v!h;kIqlKBk!imj)i(NxKLeED4IdlWYmVWph*SohV z+`ld^yJ&FxGNLJrgVhIH*iGE7@K$9>BqWFxBAY*^BEu^dd+1zCh-xPluHl&1RF{91 zt;$xxzd$;)o>lNY)=>Vj&8(duzg?H31l#);g3!UcPP~?A3R&Ci3YaJUn~+d^RuOeMlE8sTs! zgxN+K2R>zT@l&xhdlOP*QBVo`t?K}rUp7j@orBp04gCiySKkpPJ1vY6ey_c;@QqrA z!*=oj&jr=oP;RjAs-d@w?jZl`%}=UC&E8OOprmo0fURYi^D8pc{8n{OBkjckEo>(#$y1AK0n`RxOjD%8@5iW3t1 z1FUeXD6DCMCHYaoK`exAkw9_(3faH1WPjn7mrKG6xTvUZLEU^*Q~r02`2&SR&i~Wv z7(;G94b?rcCiUk72XcQns4_PRL5%TCl_g%6dt^PYsbt?SkQUU1qu&9DHkKSfD_8UQ z(O9@;4d#zQVH4j@;!2dG3426i;a{iW_^J~9d;5+F3Ty7g9vrWOfeF+eR5t9facvTr zfzPoVGKDYFKpdzt`4{=`moAn1d}q~2cc6AF{eE%a2TXStbQW;%4*H+U9vMvk1Y=g_ zUI7g&yR_eKfGv(Y@^g`2|xr*V&3p^*;hN7CyDF0_NskJE^BOPW2DsRF`uStg6wCT*RSf_;6h2L85Ws z8~dTwag>}(BA?@7q%rT#e(DMb=gX0=9a21X?&WKBuiSh$j2e+WdSzh^N}z1$aMg~S z)#G?ooXDWP@^CYMUa;z=jgWQS{$*5MQ1~os>Xn%nmsR#}fjXvDUschVJCLrthC7pe_l{|eY!+B!Z;y%#LbH!!b>v2Md9l=1RY9y)>*4O7>JMeEb z0>;cKM&H2bZW5GDhjp^kWi2|%tSC9jbftCS#UuKT(AJ@6o2wpW$#Uf7>h)-Rb%X1` zmQd+!F_|tc#q9E+@S$pqrD1bGfx+C4S<_$5wlx-RAI~zwiS+7cV0B~RZ__UPRORX& z2xm~`2RSnEp&%IOtqrFCA$wCW{kN5?Z^rH*|1r0-faUMEQqi7|x=63Olxp_wxf%sF z3sc4kXbmGP`)_q|eg=ZGBqtf#gyWRP;PK0vi*^TdXI0j}P8Hd$Lybs1J2uGU@UfXm z4vh&gb;^H*h729-rq>5IZog$6f^-fbA7KK}<}6u#E#|5?CWW*ye>2Anoc%n*dg{k1 zFop>F>D(!BS!4cF98iL-?i9Fk&YrsbmpQheewm&A8YtXyI>n!oLl(@gylpl}<%z4Q zhoW1K#clq(g~)?xc{x%G%zHnbUBtI`dlwysNu)NnqC z4w`!j_49ikk1H#KGiS~yq^2Rh@P3b{bkoJcSYnqrNGsij!WWhW>hk0hNcen1%(CUIcYpK z$URnVk_enFZcuEfc_Fl@@0g(mD1?PU0hWd^JE>4{?%{oB1ci+pUW0SL$icSn_~0Op z!@0R6mm;(bj$53%bpomI9#$9a#V{e8O|^FJdb&;UJ@$cL5SQIcj!dUrr*q# z|KXESO&qE)KJw(6)zq;1h04|6LIB0G=Uu4#S8iT|euwhOZ3OKb4Vk-Bh+NrUfxSa# zxj^mX`o^LULkQoe*g`3&nT{-Q^U>^-4*@K@rbG}ux7iV&ntAC0;IQ0s0Tbhs? zoGfs8LtXv{I4Yuz9gR824it}5%C`Tn*xOjR3GFVN6f}lI^Ce^%nFBTEAI02+10BYt z?0XsucT~9{7y4>4`CZ}Y+&FMk&^U0d8=aSPe7s@U$UJmC+VS?>y|9bfXu!nh2x|`} zK}&gD;KT~{9N5WWyAr2f&RRFp;Hb1$N0{hb;4O{DtE)Ba&o!4=t16*&$T82>&>T|;kc z%paP`=NW(K5F8uoDvv4)w%=^b13|Zi+QOx^92v&eV~U1SD}0py8$iZm{yAx=J;+~I z8^8u^@w?5Ll)u?ooZmu)+cThu&%SpC|jXherF=(!xijB-}&wueWlD>J#+>M9(qXdKaa=){4GP^A!MVK^S-Z1o7Oth7-WX1ca43(N z7GZ|A1LZ0m-wqm?{MTrJd!kh@)Zo5D&Rw?K2FY+H=!A*`gJ(`<|1vgYwr1Cg7vS>! z-axbV9vpvPxe&RVTFg=3X~us-X)>zuz26V5opZrERSm3d0>6zY`rs4Qk5_Tjz?S^Xx)vaZ8d{9 zScYNR#;{!9tX!RgaC8a7*?~-6YmGs;1?GggayLs*4y89v291I4cGcr(pp~}%T{rVV}-vO_*ni#RFBZ)5AY zB|r$i&>_sdL4E`;s~(2nG#5NrBnr3i3a$hYC4WD|QTC{BAwZBn7{0~MH=-zw13Auj z=QZYk*vKO!+W#X?TJA&~j=Q#!=L6XqX8a7f&)_b?z48FRX5a*naTgJ7=p@uG6B;@) zShbDNovoBRlfoyKG4-PWo%cks%l{@@U&-SEF2|RS2S>$@2P>dWE+E8>2Q`DaNA874 zDqFTq>gEv+A*sH7e$~)k*WV5e3KuTK5pp3rn4`si?0*MwzwBf9Xf`^WZD4fb(M^cbvyewKphyA`N3Wg}O2r$T|P?J)Eh%mOW+o^mG#Wu|a+T zlKB@Z8A>sk5r>Wrr)q~RnW!hzv}e0JNU%7-P4ShV%EQ(c&TzjMAmy{QWy%i``!u&fm|g3B~>S`+3bP3J)9K zSCpgu%J_aU79fS)XM1iXI2})s;)eQ5BUxN?r49@nCt|2)JX}%T?jRMIfqvNNj%bBj zTx@qdVq6^A!U2zQ8N7cNHrwc@Lzosu;l}*qjrpBH{x?DXwV;4gWr&2i2~T3*Y(K6W zVJ6Plu6yB<$M%s`PD_b0a{&l#V{DW>E^7a`;_K7nz3sid^4$2mhI#WE=gf8sleu)3 zyYT3Bb6a1xyw7@hdrwQ2uc;1qbhJh9x#oMx1xKvAr~TRpa>=YFfHloE&4?Vs@WSuq zS$)Si*FI}n*^bt$5tLnNQI&40n_D-lVSdBhc^J|ES3g$HYm#*SGv%Yf`0NGUd%}%- zwz69M6|!ZUs2BeSxWzNpc<37sn&--KuWuf`qi2k&U^<;5=hpWDcaN%YI#&xnLbgns z7d+{djfejpM>qw6rzD;7&N591yBMFHn@*1G?pgPjLX_g2^WwAab)&}DjjGNablb?= z%Woc0e)b54(=*&t@^zysux|>)$1_bhF10C5yIWI6tn$NrI~Gg4cevQ0ZO(p#En6dU zvQ*H01LRI&d>3rdUObyWV^nqBsA+YhYIBFIJ$OJZpErW6+U>XY*G@z9-J;8Ve=vH^ z-^=?%FYk!QxK&Ia?#tAX6n6vO5Mavx49NcJtOJP!q8c?8D)bKsz<>cyjF|tr)4Znlxazs zx%SVvaN33f_<7nwH@BoLT$#tz$%tPkREcY&JX5FJC3VAgwocejxTBZ^;LRgOG&xx`W%lQNBG)W(xe+(8jgP(ph0eY_dL(zGQcv(-Y5L#P zG+8$K{zUrexXnmhWz@G=*mD#r)%OFdZ;i-_c~0M*!gQ>m-g{%%qr&u=9?CuA$yI~t zH_ev8@7Xd-Z9x;BuYT%D<8V%=&jpc95oYZQgz=yWGE5;+3ChzmON?+jtG+X^)ntX33o!Z7ae?eGWoiqKBvOfAWMua09D@>NI zJ9dUJTh6t@^jN{T^F79KV5zWwhu`my#m+e5iPDaU_5<;|ByNAnIFQum$`{3sgAJo< z>*G2j^wZ`FsU#^X$BvI-)iJC-hUuDbtFJRgZly4-FWPcP4BHsP9*SXn?;)Ml_kzdR zzV-|2r?B6?dbLfVea%#VSWeZV*tYX}VK&W$F|1SAiA)oYd0pwTqrvVFb~c6TN2Pl( zHj&>G!zmKyMq|*9duI#3ds>#dDvDAmz6x}3@&_fX$L1!4$yJUv(;bT|#^l{$(Ah`t z$MGXyEnNEr7nhN55YG2X(A|eTk@Kb(-PmxG`Zo-O5g!3KM1*-7r^@kG}sZTcZCrD-EmGr$?uSn!8VE&ddkf^ zI_$3Ulr%mI;V&a)1B+`N0FNGY!)k)`BXTRzv(%;$Vsf4D1;O1E@h`LMU2hWpE- z8J#b$wd!;2MLyS7L%JM(G6iBGty=iv% zuJWk$m+mW1)s%urk2`}Hwy(V83undM3DMXA=0F1b%S>pPRsO8Xx1zQ}bge^R*y>yV?1$edVc3hcSZk=qrq+ zyUSCTl>!Nsr{15y^=MJLyF9h16hwM1PvC9_Ic#6Ko23oIu)k$E1SwBlk-*y$_>u&^ zbQpgQhZa3X+nsMmAdWwc<6RuTC4oPf!2b!y**HD-C)jfu4qb8bzfX`qFG2oyIFX3c zGXnFUIL_~?#_@ki(DQHtKQ2Mf%L(N$A))*;nA^wM^NkVl{DA~{eh(;4&rdP$isPS3 z&~smco^L0}&rE0!EeZVbr20+J|BD2B{wbmS|0O}s?FsTfK)V`~D)u{_KdyAV*iV(; z=XkN->5=jSjxUM2oN`PvW6OWtNT!>P4F=pIj zdUWGZ4r9#tshro@#+c&{%yw?Mv!_Zz#cMtn<3{9|@T!X22lJe}-KASRUMOGZlc$F`RBxUl`Bs@OPA}T*ms?iN2bMTP3&~~wbx=DzwGA{cdZMJ!|gmL zkALFSo<4Zu1n&_k6~<{AMEl@8bKC8wW0m z`0?U9HNnpJC)jyHg8Z!s@}EXU$K~sn3H+a2J1m|ryZaBYbxp!?5ZR5@e^Ekt_MvLy z?Dc%B4MY+cUeuC38F4E)fV<0r>>P1I|;=Q@c zogN*1Q{g=>$e)OEh_jRTbmI7#3Hj11Dr}((@zZyF=}1D(Hm*E?pN^bIE9E+l`tm3q z=g8aeQ+dl58?NIP<+}|(0e(7U&;3--8IFebEP-G76^1`)_+5ryYWQ};TMgI#M0;50 zs{iLA@7wbm;grA9$nQ^(KVUfHsQyFQaN)?7;-~zbhIbgwcj40c>7F6nw{x=LHr-mI z$EG{aaGP$c;U7f$YA3q8bJYE9{FH0k^zAt@6nFNw82NJz-)8uL;kF*{Gu+nWcMRWR z^!&l_hYUYn^5xsfM?vYBuXg-2UyTX!w%n}zbw&@5hN|bb1U>7Gyw$_!XX$)9`G_GM z?Ysg%)&I)``B#m+t;g35x9#~LCJ5)JdxYUQ1V!n-T{!Kr?do*HZM&Lm_{WW&cB7wO z%~zL^zryg3C&=qPXulr6l_0+}LH{X8i;jAd#!1eJ)J{EaP`=A>mMxvndqeE_!|gk0? zF`_T!) z{d(amTbClSWwEB`*jt-NjLR(@52JkOWu{PNNE>6fQHZd(1?-hBB(O+8xq z;|#a<bVO)tzSK(C;zJ9Jl4~Z+vDID91Xc`pI;Wv9O*Q47bOT>kVH9zm~&48gAzUYy)(((~h4!H=*-+ow3vExy0}fBc7)FE~h2b zW926q{(d7r!|+bS?=jrAw;vi_W#oTqxRtlZeOo^7HTGNi1%})6wJ#celS%hG3HE3O)P4{a?k1e;~8gBDjUk;^kw9~d9d!B3gbSE9k z+kQ98aN93h48IC~wcpOSZ9BB>$J+T$qvsn&&$|uhu|V}-X!wJM+jefplUt0uP4{8L zZ8;ooxV2}z;nto;!>yh}48Ib7wSSawRvUlHk1_lp!|injTklgup7q;dl_Vv75plHtKqgDPc{56(Q~xu@yo%shYuQiv_1IpcAnX8ZO^v} z_tX8P;VdiF|5>BQwrBP!I@XJA&&N7CyxrRQ!!?jm{aTOIbG6~N9+w-Qg`bY{c6`u$ zk=ya@d~rBe!}2!>yeQ47dGpk#KHox;;j|2m92{|7yQ@ z58~2M9e=84HX$7CzXCtydVQY#^%2A04nG}rl;fxJ#}UF&Pal5D{}Mf{Q`Mv6IqexV z{ABp)e0wH_*xAFe@qa?kwMI``^fO(}Bax2h?OL_@MFZ!&9jDU-4X3G{2k)w#$LDAHb%~uFwxN-?aK_WF#K-_#H}@4 z+Xi=SFkI`D{3XLrAP_g63BqynPUj2%wHdBsFZXOPJROR<|IZqJlHqAKVmR&|=X~M6 zDTZqsL+?HTWU;lJ|?*JA|tG#RePR&qXX zPDee(yN9XNTEow965+oMhEFj3KEt(7arX|x&ouJS8eVPqKEw5z19w+(k_1OPCplmE zZ<^tHEa0Au;o8^87aKm6KwQ>vJ%)1E8pCz&L4K#<(+I?IT^}9oobG(#zuktPV|WE8 z2XK@>*ZIPK#~Xg0;njwpZ+N}oI)-!iLc`x{Z#44v82&!P2Mxc-@TU#W7{1$ZJy+uH zKN+saO7bZc{2!LvoY3q32ZlEpzR2*44evI5uHmZ?-{rkM5Gkprc2g6EqAHl|8R*8|LJ&AcPij+jA`Y3X=N6TvXUi*Z4YfEQqUnd_;R}FKT8fMezOwio1 z9N%NIrk3h-kCk_JENN%d=A|9{{FZ))E8E%YvMmpvFX`!8*4*0J!B2EidB<}6b!6F+ zkabfSn!?hSURcBwVs^S()4ipo#ll?D+1I;NAAj$S|0Gzk_%%gVL2F0%()OOD6yJDn zcRONAC%`wK_~^fckV%G2tFkrVb``%UHEdUD{?uB=VmDmYo#J=h_{FK_>v}p+k5_bb z6;V%nOPeEJ;%pT5#RH}-(|}>Si$>_~l2;VOL@(W6jL+IPUB#3&6V(?X7;_ncwc69Z ztn1q74GOk2RidS>ElvR~ZtZMu>1n22pL7}}S+sM^Wc37TP`>lDmoYqqB|rF(nb5Zb)Fud_4N#ccFu z(NmW-FTp3$I<jmi}wZS9@y+4hLAePFQDvFVETC0#x3wlLYoG;uZt z4tb_9bQd!m?s6?Y>C=EJ4ox-9OS^ir%UhDvRlm{xj$Y)ow{Ka?6`dv4c6N1LjbdS2 z=TO_)(z>)=>ptuX?kj&f{qMnY1yR1FC zw5u(l!0|l`>cSMI34hE|62K4i;Rt+r+LvCb3HQ{AA#d_4? zp%qQBqn%@B$CB&$t;pdbZdB`JJ-?|iWN1DQT`{V#mw6brmr;hl4JS?m+MJuDG`C{n zGhDzm$|M1sN^g5B2BF~!T#uxn(=@y=BnQcR8CM4O zhXtY@+AO*gNWiC%NE6mz|-WkoX%;+@wwC#&*>WYA)RXkQV= z6GV-Qk~0vANG#UNo5Zpr5({&+D3%}&kP$QKv(rV>xMowFc8n|ekgt{DcW!MsR`DAM zxWm5P-!ZApQy6~Jw6!-|bCyi3@om$IJ^!PhIz52JmU1b}o^_^zmN1weRf1D;nJuAH*S^K{4@UgB^cTjYkET8> zeO~j6EB_`*U!QN%Lh$p?Yn5^7cT4&^L=Vd!rVdNL2c0i2eO)(vm?kV+KmBEhAD8~L z`Y?j6|H_#3&r3*u*N8B_dpDY-&5fV_*$L@4N&1=(=AZXX{Q5r_ATIyA1|H#@XK_*B#$1{=9_r_4=x)2{VKL ze*Qm|5Pzjabnl9bVh@l1F~pB6zfD0HX_K@A)*ssv#GTW2^=v}=`jWKsB)&u&X8(^8 z((jgwzPn8Q@&1&b{sRf^m(Od`xp&lsUiaTGzx$HfuUtg7?T7cf{PgccImgxiK6Z9E zeam;S~%VT`4w z{L?^w`mZLG|2nxzs?Vtv%Yq;KDs#4_;PAMaPimH#wJe+47KG5vSp=a>I2IH<;@-y}DScS-$G z2c4h(*$L%WEg9$h&N@H-q=fRjSL|OWk!e5gd;0d@osj-$xk-JAO&oqd{ksyNzQvXQ;9HFUXhQs*5?>BOn*6Z- z!}k)#rN8Sfravtq{yvGnEJ``_`1zllaQxdS^|x5!v;CffpO&YN%X1U*zgQNhc&D$! z^1m;k{dY@zO;5}i7N5@##+Bbni7(AqqYsPUpK$)QLE@u$N}OMQixcACEAeF-6zTBe zUy*S97?k+OL@`5;AOHM>_`4+jEpHNk8sf)|UllU&FP8YM{~7pceQ5n3NGShqS%jqW zqGnk6cVkCv{Ym^c8~?9H{5boUiv8;(VcOq-pW37LuSn=WyCi)cGp+N>zagRhj+Vt% zG7XDV`0+oQ5WiaDzuEY4Bu=X1%CA=9OEXAJ{|lI)#l>Iz7UTZ{n&aZHl=%N1r5t+v z{67yISAYAZ{+^NetiKF?e*L|M0%H1h?H{8omPKuTdK%X4$CKKx#Mk#4Q74_o3qyFH zC*sH1zw^>iLa$@c{yF&h_FtV){<@eBhsP4Z&&pAzODizU9+msWyb{#=h1*Z#ZTV*GC>)Zfat82_b&`0L(c z{4XYy--fps|G0$o?|qB$k4`v#4odufEqK}bTas4lSSr}ol#AE-v96zm39skcs zNWbaiFyfodA9f~`U$?~9^u&x|VPxGVY_q~Ml?|qBuKar6Bj+pe@V$xrbkp50d->yw%R{Z=oC8R(4{gf`Q zJ7@lv;OFQ6%L(a^u43%eus7HG>EE4@{=%5_mqMSP{!y4SO8%Gqb9jjJB!56M|m zrno(ms;5t#rNI`wUyuao_xeFXg%WApzQkxo|j#kt^f1es3iaD`M+2K zXzwfj+TQWJuHUc!FIM(n^E9jk+IxDsdblk0+R10m&&*46iB6h}(>j)Pv|^D~noG6% zdX0ozK9pXLwZ>_;6xr-@kz@CSkz(|QD`C?xAkDSP9W9+5H?(BA`k82X`;}c_45yc1 zfA7-vwsdb_YbzG>Ey1eg>rLX4gj+qAUfPazgl4C+3=bP%ncy4lGZrSqzPkPTbo&ad zAzpr^Th43CO%gClP@dQHwfDM*5@IA}(O_DhHSnrI)U|ajw<(q6(F z@vp6!I5{1Pv@dV%xxO0$iZ~nITq35Ah_R}uq_j+tq=z+7mt<*ch*iQ; z>*EU1_Q={Wk#I3?I%dCL=w5WUTe1=p+pQx_yLF^$Pg8B!?M7)gNZ@g})cm=#n^N;Hoi`uGw&PCiG zVE;V#Zzg>gHBg>9=GAjI;H5JOFP(Xb3q#+f7c|bMlvC^cmj;YMU6)eVrSllg>AIA< zE~PHW^Iw?2C8>Id<39|b-UcS?{>^jgxc_sh6>1jX|4jZzZ2oto0VS+bIAVVAVr_>t9+Re9S~$b+uGCNEJO522sXfQn1|)w9j)$=ua7pdr@P0P@PJ_75==z+TwfY%-uv(b z+Vv?s2-x1U943Zp`_K>5tu4!2v7)>!g%az*lNHgtp`?tWVXLGx`j&THk;OAX?kShP z<;>ib%R6pBnYzbjSar7W!Wj__@9yF=J^p??MY1$~ZA)igdsHq>^Datvph&Vb9~NRI zdMBq>EK<$%u&LQ!!Cy<@uO;A@!2j+~Nk`v6^uHy|OT&6!_*~`*-inD4$j`vLbq z;3t3Gdb@h=hkGMAUeoS$QmNFbvL#y?!|o7vlw9bf+(u#g4q*un+dP9fao>=njxzI> z7rhtqCtMgN=NctCz0SKq_>l1OaJT#B1Le6Uica~#BL5qYKMDcL^BWabp5Iy_f7Rn> z2!GAvT}PMe5}WRAod^U@s9|9r^os3Ug|%|fk-obRxt{ChqA z6S04W$3G&x!Q)&TN(w) z!Uu%wnxf-{|ATO?m+y(4{FW`9*5iQiZNfF(I^o~<^#5M$BFO2~*r%DpM zXFWy_nub3J`KT|8EH_-kHzrjqXE)aYzX`uF(db@$4;7y&iqoSS&`jNzJoTMJ&NT9GC0#C`SN%5Kdc(EkY0m|Q+x%W= zxGV{D_BR-A^)wo8^`L7;_E&ABUgvDTHw3 z?83^=BZMQT&B|F;bmSbfm1hXy$T=n{XPMKHbL>&Rh!BpPc~ss;2uF@(L=o4yI603| zDxZa)j{FGxl;21QN6urE^3{ZJi?)CUd!te7qzllk= zDcnTubGq<{JkI$O-JttlY|j@9f7Iib3*X`K4&hIFyifQ}kN-i!PkUU;=NXTeiJoUY zevt589@p}G!Q)4Y{BDoyeDx)dYx(c<_&*5ik=BH-#hzD&Y_$FGra#^c)l^;r_F z-|IzA-?^^*!@?JOdR9qzk;nTbyx8M;3AcHCK*IWLx~4l_^4saje^SET9{;q2^&KCo z=QF}rc=Fm`ZuI!)CA`w(cT0G+$G;@uH6H(pgx7lf>k?k)abC}&yTjuTOL)DD(vzSrYFmhgQZe@?=iJpO6P??WE{yzoJfe?|DC z9)DQ)4v#-B{7H}VdNJLh;l>@0PKICS!$%u_vEfyQ)35Sp7;eu`rx<>Ukw4GyGYzjd zyxQ=L;qNkhzTv!9q4q2?e7xaphM#75r{V85JZt#rhTmv7^RDTxHhhBNYYm@h_#KAV z7=EYWlMKJh@X3bXV>ruP?YYnJsfIsf_*sTOYB-X_0j@_gQKek1>k>SSm7jo7y zT}8NwIO~$`h;S2e)&bqLm96p)3DFgKzRTl(mheW8A6gcIdpv%O@OwRelJNUHK0){a#~USF^AP z_&krdOSsnKap!$3pJgH!c=FdsIOB0`|4kmhUc&P|{$U9(^!O?XFY9xX$faN{uv3c@VNGu8$JGc39t0{-4b5y@h?eujmN(t;k6$B zx`fwxJnp=Y`F&XA)_d|>C48sHACvF~k3TNqyFC6K32*ec_OE+9{sRf$>+v5;_&$$6 zC*e&Vk2~*Ue&f#j$m7oYT={T-g4^Ngk2~+9yq@>%^yL2_;io^YWc&*2^{{|k{{>(C`)BMhsa#$GRi0i}Ji#{;V+Ew6PRpDOa}J${$)4IW=3e51!-mwLR{+yof2Oj^L@FtIQ{TbatkL$PC7JGd3L81Io zkDn>L+vBr^ukd(_@Rc54DSVB`HwX_?FV@#@g;&T9M&mfPU-)Q`UoQjASdW(rPkUUy z(Kg=W{~`LTJ$|I)$NyfqKVEGR?vGdhEPS!2=N{opJ^oeU{&=-X zxIbP!Bz&c(=bOUUB=EGgTubr0ZWA*T@jO_`*QoG;q3}VkiT<~uO22pGJ}QDwi}dj8J)K>63NZXW1s}tt z4_}d(I5E?ET?an!Gcn7Dz1*kzlA=Z5glg&Jw_38-cjMz=!<2hcZSB3SF;epV3Osa) zZ|qQ8f?TA{8uee#hW(gFF-?<$cmZRS2)vQqe1z0}X2#hn5uy)L>DR<2;+s7vH550t z*DrHhSH%;jPmezEF}3KOQuIzPdM6dVHAQcAt(~BQAnOgKtDS9Uty_1Sw^F5U6h)$ncw6N%% zQuIzPdM6dVHAQcA93C{7VwgWUd_=r9 z@|AjInjXPA_}(bKuJ6_eqtzqZ^RV@Ga@WoiLV*?G#@)|iJ}V?VR<=hX@woI?%KkS? zzXFlt(hp?evrV5x>8H>8D{<)$O8UI_Y@MHf-q(mre^Am7B=Ygta{aQO{s$8Bzfa=5 zS^AeG=pX;mr^m!eV zNpRj_9iQ8y+v%n6r?oyQ{c&OZU0m!9$MlcH&rkmmFec&mpV5-gv0nOq{clEG-zK0` z^#uOM^(^V!OrPt&{q+A6j7j+UKSTQc3tswuTDuU}XF#c-n*VV=&O(P{`bXjCr~gGn zW)fVBVBKgoR=5Hijd5y@Zm+;T`u#C%gA~*{6%-wszN+MPk2w1`NXNfdcGCW%@zeM^ zew+sVap_l&2~&8p^s5j#F8!w3FuqNn>*)RTSxih{iaU&i|AX>C+GisYdMHb$+cS*c z?T~-X%xsL)c)IJm0Ql3(O^Q>CCH|&}gdVkDF|VJ;<=?#k975|vkmb*H{u*D)e+cpY zw#z7EkKuo;ic@o$3Jswb#>Y}8wma3e|;z9*=J8aD-?h0?}S`I!^PFQZ7up@ zS!zMurFECgYii8D(wIN6n>&L1_Hc{0L{1Fyct7O!EmwipJeA4+K_q^b$-m;f`N#D2 zk@?+2lfu0N=Q}k6F85p5U>tvhwSh-AE1;=n(4m^aAopm+2kJgp*L?XlMnd_}p1S$- zg4|1^gZ@`4SM!4}LH>7*`Pb_U?+ON{QpiQ_AFRCX0_-fDE6KWDnf$9k{+ptoA}2F` zA-5kD6d*^(1%=uQc=Xkfl?^*Z>CnWW@Co+e{LWL5#sTJHL|^5qpC34IAf+;gRo?%U z_>q!HhSyAsJ0b%=Pn>(OiOr*O^>qBtgvC>{cS+@m^?={Fqg<#F6Lup z!MR^#?4BRSXumMjz9Q7l(IV1bdE#mWL;Wk`^z&idAm{Wme$NlPm9x zkeC#CizUc?s3Mh}P)zC@^G|OYX8#wRB=uii(erGKDn6}_65q&8|5Ku^v9kV0MOjlE zizpTvhNPnMZ3vZY2$dwp<`dE}u@7;vbKNY8{=rOT!~UXBCjXjAp0~PSY~UoH${t&k zGeVmvlzVU*gi_h*MUlwbzja!^MuEa7YVjXgc>wLR*r0g}H}~Mnuq&1A4Yt>Zj~WL9 z@YEa#@;^n_dAy-!u%YJht5Qv2yU#s38tr`bxlT9a*vgMBj1CGxMbQMYa_Aj}Pf+== z9qcK*orFB@;{N`mJU$%?J@bY_|4O0Zm9;(|uW~BCxPvP5zYa4MMGo@64Dwr}LcZzJ zS8{7maM256!%-%vtk-UgA}vav_Ap8%r7in}!YAeNNE%GKX>J6{*=QJvopTud>-8(hqXs+^*1jdrG= z)L}q4K4w6;sVB&7D{DOWP8Xx+nPDn#x>yZ49jdLq`N#Xc^QKcmWs9mRdVcC@%5P;e zPW3;IG8qhqXICQIa8=|?UKz=*$l}5XFQDjmYP)gOD%-rIn{dKByfg~020G`k6c15N z@?H3J`keGBy&;>~(Y+LJJ%R(PKC5$K9G()3p+R5u#Q2idgvR=F(y3FbCoN1JR*EOI zW>;XBqjUK&@bFDgc%_ljSuMSIA=8A5+OJn)-*-f{y{XxJiJ{YB_oeZr?W{(cH@7Lx zcRBH;OUm%}G`#o8zE&^Y*|DUZpFo$mr*yWZ$K%ydU3hiYX<-V(BcUW++B1tU-9ovw z#lrOXQ&iEsYzy8{H6MvVy0cT{8Sd)KhGh@xl1I`hmfI!nJJfhNRJN~Yd73Z3V*V)v zt)WN*-<{Wnw@WQ^<;M3~K|HM6>)U(rekiADR?CWX1HVU{uEzyT?Cv`(HFsWJI%R4s zl{RIMPP)9Ur>g^LoqcxAlu6vSay~ot@V% zn}F9=U4>VirCX;@p4v8jdfVBpOD0v`wB+pe z_S1@MSN(V6OhI4aypZlz{=>U*W{es;V^q3s)cCql)wzRi8+m*A%_BzK$Y9#-8eKQ4 zB7o?8%ERS(2#Dg%aPjI#)#eUfE0N1jEFTrrjcRHfRa<^h*{Eu$MgozpX^6f7Kf1%% zd1v@GtQ~n<`RyY{yk=~e;a=I};>7*ygr2x}=Uf8evS?*}@!biZ!stzYvM3uRTi){~ ze^A1l4$`d^{{1lMp8ut{UHE?p=cJMDJ;GlNgVDLxNy1+fE~kvCk-`rMKUTIcB44y; zEXxT_^*7Hg#BCtMEMrsI*sNz75RsRALF#)yMK~yjf7SICgFN6rg}aq{9iU( z3WM%BZhA)v?-j1){~NLM7U31L<(eR-d%J{reSq$M;Tv2ieBPhlzZ3p>;aXq+fH3uF zyVv$WvHyv8b!>qixtu_ik>goP9B+l4ah#Vj;yBj;#c|#ri{lFu9ZYL|K#sB zyc&Kw@>B6s`Ev>3$T>zR*M35d!%f6z!%s&(5kHk*KnTZf!Jl&N4`dvRl`nyxj(Y4f zN!L3Xa@wr&Ckdw>mbUVD38x-jw^6R+CHYx~p9eo3^{@<8zL5})@|>_LXT8u-o|jLR zUrPu_&dbWm|BeujoMWEyeGB#V9p%&bsr+{M>HPe@5Mn3KvQqgn zv>!TO{|UmWe;j@)e~OW}jmL31Zmj;>jl3;4z5|Soo5S%_{r4rvf5*rlVdQnq zt8dS%M$dR7KS730%CpaEx=q3vjo0Xvzu(AP`#X$0kI5?En;?Iik>|Lp^6L}izh>ll zOjh}a6Xc&X^1SS=@=qIi+aCVI$lG_!3?;~qV1dDLGX+1@f2eSl8|NCzk2UhP+)g+0 zoD-=$-@QjiJv^o;=Q{}L$T_D_eqn%X z@>YM^$XAJ#@=yyxhEbdHZ##8I5z?b|Tly_-k28uBa3j7BNm6E?zWu z;M{w8*6HZ(%l696d%Wj+ZgX#YR+bv^B2DE>*gVy5q|GA;4f>TpkQ^OBCvc4y?0p7wU9B)m$MuzbfX$tfqCmGKg{9}&JzD}cP-`tGSrqR+bAcBPjY}UPNoeJ;W2@Xa}MijZNT_B&RCa2 z;Em$nYK7tFG0VD}5b$+!|56@2;r4|aH|J$O^?Xy$k2$u*rN2|+>G_TXho#SAic5c? z7^-WYIp^lQ&rkoCU~%a$rZAkIKZT*;`R6zqmwv6B5T&Ucj_Gqg$bJ%uYmu{ul1_U{x%H|cTIHII$&?DFAr)sTJyGve?an+_-}LCO`TOsVrR?8~@At)8FuFJEiyX3in;7qB{1@YVS-vYIt}pD8xM~;U zQEqr&m@-wmf!kWr^;P48e0^0@Z=wy z|O#0O4;!YyfZ2AAzj;gRw17yh*x z|1*XAYq7~^t1`8(e5CPwY7ypEk@Yf^S{r3bL%fFb3Y$(=o4FakIL<;ICN(|$6cAi=T=nU z`GWozvSWk7%!;6}au8|@wTtWAP3esl+0$H(p_+oYZC|*ZOv7)m71PBEK53WO`n!PpQI-JJ*b}HyU7W+c2rR7_LTsppI70MtXyRW{jM>jWpQ}U{IJhWV-Lv(2RVJ*k$g!v|APzp>)V?){v#eKv9-loQGgH z^HzAU8~b*n08_#C9Q|~&`d`T&+gP}1bhsn$cDQ(7Vp_#gf2DSDMc)xfVIhvCq3}R% z6Ev`yj1C6A$d=X6zc-7%^J2KakmIsN?yt=hzQ`pT0cruQc^MRURyFBTg}VH=)XVpi zr*iub&K~cPL$Ze{$$zu4^;<#f6ZHkO!@At-CuI-A|1p*QMU5NXY#)cRm*A; zH+)w1bIR42-wTQ3R~_It3M%`*?-I&w#H1}KObZI@YEgw8HmfrQU9}MuGF95Z9%Hfe z^P0mRF5HOAz^}1$Xl&e`cO!krYxZLN4#&6@#<)E%B&ZsR2=S`Ui&1qOt>UBi&i+D0 z%_~7+eyQcF{~qyJMAJh1u=>j7{IE>nqb}!i+`$lx*l4QxJx&mrzHKq1N`Yqbdo$27 zo+;HfmZ4JWtJ1m?9iZ=nb-7=R2=c$G*^B^re%3$MVyNK{*< zDy>P~K2vk&HSpWO_wXeS#iR~FB9;C7poYUE407W$l4+=U<<(joM9Wikm3M5f%RP@3 zK5C0wLZx;rryVGT)MiezYaSPV(Ds+upi*ycePXR_^A#ub5iOLOy?g!{vMk|ZmasH4gUU#o0=|;9 zWP3pNWY;nRtPR8RuD3G>JlQC=@BYD?Zcr1@(6jGAGtK0G!6jJ8OxR|C=i;D=c;V|S zh9<`u`%h|Y)X+;0=3HvEkV~yD4;Ne2>>V14)AL1^%)wlMsm`s(lEZyB*2iVIgA3&r z(o?qu5wHgD5ss9p>{0dkeMqT0N(qZuF+sS0tZVg;u<;jiJnmzZ$6~qqDvUIoO3lac zK9H$eoB_&Y;9Ka7S!FL~3T;(bs1+W5>K@i($yi0X{fA@^*FdIq_pGvC&nm;n_cJLt zcLxqVcQbE|hl~clgo4QAA7p{R9Cu6`DAXbsnSp}q(}hoj#nDp{QHm_r+l#FPW#doS`KGA&s<|LvJ*_-1F3*4;-M1C$ME4b!L9K>ZSFdjrk`V z^FM6lGGop)IURhp_IRFGY~ld&a2o%x9C0_MHZnJ3c5WxdY}mD{U~?^lQCVfLVc!if zc!i~ag`2rSG%7dUXk$%abYz``H8HZPSP_`LKo#dvY_N!f4*Pm0|642&bp_#iF=h_| z=k8%^!y#~}91${D@VM$xW-00(ScF}Y-;Jo8S@|btah3OXg8aX+Ni2-ki8EiHLB1O~ z16qU$3JeZ1_}A1}xWzl9hApMoDmg!E%s-aNx3RTt4|n9Z>3Btb(}Mn=RIXkP!A#+< zD&7YS3inj8pflL+hiO6K&Z>Rb>KR7q8O=AP2sr4W2*WcHd#;kH>gI{iVjB%phd>T` zQM`>PA`|bZwN)&%%A;0St-&@Jn1KJ-;KU0DBOY@Xa=5Gw^Q4LIWE682wzg`J1Sd+I zdfM1%2dK%?*!xRk!vyZ93D0=3tAoPYs$D3QQUz&{(&Tw@fXTB17L&iDYB$6AAD2cC zN~0rv4g^epyot`m$))kSOXK16a4`vzZPIw95!RPRKtgLskkASj0fRDU-_vlI3JUjC zRj@V4xhtCbB0YM!Gps#Np=?6+B@@uxLserDFIBnvA!5Jv-00^L)MQl4GV`X4l=K-bgQWQW(9H-7|7MS0(M7{n!TlCI+vT5T~%F&<8Ixh zSEZY-l2XV$T8lxT{~wXeo_p|*V=J_TdpSIOk`TilPO&mo6`NOvGA?hZt{XV)VXS+p zmZQda4hCr+f8vHY_naw@^KQJ0x-5FiW?ped$~xrXfDfy(C-4LU2X&kexbzygA6yMV z*D{8}<=(?bKde9WmbSXDu9^j}rhIcREzMwL4lq16=D*7$C9XeYs}^H`tjCD8k!BUb zOC%W2kz_;v3l9L|@X)ZMap1;^TFnOX+_d?7QRBihH!QpztPl?9ujmO)UFGOo*nzOU zon322wx6ke=JwyM8yL@+0-9r@6_TUX8Sa!W~r`kbL&^{LUp? z2P>A$$k(4<8({f*km@^#bHXt=**ZPQZJ)ui3tX`U56E|>mjsg!4>svH&x69eLxP%b z28TY8foN0Z>KB=>2jr{LPImIlLvSUba6*u;-k;|shkP8YVzx!_!MWm|CY zDLIU~0U4Epk#Rmo5BSUh6=@9quJR+{A(e?mO$^-_&s*S7st;Va;>bTX)Df0T$&j*z zPtG`Avp4LrU8sTRIj5o6YhD!^Cye3dBRU?qQq^aaTpM_R5A1|CaQ3`3w)f-m!+{mo z9hcvq|AR(uJ>u4&?E43v-?nKyvbSv$&qlT}r+;<-*GnMV**ihMMom9H-aVlg--hN5 z@-wqF&G_IwZb@JdZ@FKKZ#?(7RRj+31KPdZSJRAz^UJSn*Chqv8#97gbu+`gSa;CZ z-Ha~Td_`wh>(wcLzzm-dNNN9f&kNv-4V8Q{0UN0M|KNs`u2c4(FW@nY_loJx z#+V{&`|&8jg`;+s<=ndd@>9zAxB(tIz@rBhm=Qs&i4ovlL8X%)k4Jv{OH;^bBdlX&}S7kl<{GO0cXw9(&rOk zQQfEwWdWkSKm~BW=D*=KxeOVbM*LfxNr*~a)hr9RZ(vl6)wQdM(x6HH-7u@+mGMM5p|>1jF>TM-H1li%!mu%8PNn^XKcdE!^@I~ zJ6NW})2&CbmE_?=BVtv#wE?x%0r#$OllcErIHbni!+aFBlto|cEUv$wc5ujfZcFEm z%-Hf>UzF!f6goCDx{1R790nskMmVo&(zzo$w#N(S+Fd%;f2i;eggBDtO-iQQCtPlq zr(T6Z^0mTw-<)oja9t;+{71s~hGJN`AG#*!$EksYiknk}yXj{Ur?!b6ZQH76AKE4D znIW>8KfVi=e1~xD+xH4zEZkkVfPb0P%ey@J?;_n1ZslmW!}SA^`JZ^+fU3%)QW3?G ze%^%~?#iRuE8SNl%W5H1o?^t{d~qCF5ROO^vq0XhhI(5b5(+! zqZ8_VZG!x`gmgK;#@P?`v79%W)KBwg7TPU+E@;kn;Yfy;RwKSpIQ6jatNe$BQx;i| zxUQF^{Cf>&d!{2l4?orO3qm;Z@%SlcIna@h!%z7i3E`M7OGEhxlmi{PUB}Pc>2%a{ zGJY!0ciqsD*W;(0&)3nBvu>4_8~Is=A8oj`^ElzYo#PB=|4{wIt^WT=(DO?pZ}t4f zaI5E!Mvt|V$7MS1o{pcE^EAWHGF;#JP5CnozsATDqedc@`bpk1dB64Y%d+2czHGbI!p|jVlLh&s@W;J>3ah-}C)JKwkfaWvhe z`3CRH(oz3O_^G^o9++qG%DG~Pj`F-#q5K$DARKuEe#*xgZp;5P;oR8ruQq&)(Q}S) z>bLbi&+vL9&$%TX)bJ^WZ!+AD^N$E;y40omt^KuzYrCTSL53e}>i0c{PZ3Ue4lSzx zq6GPT0)HZbA4Z8$QnPXM}TO+oyhmg`8La zRKIE)8(o#IzQd_7(FLrzv|};%;@}d7aMNn?eo}G zh^Kl!WaMqR4tyrJY9_dEN)6BOisI+W$vmr?r111>sn3 zSL(^xh%mX9yoH zTjlICbVrAqNDs$!y0PIV;+zZ8>Ggiq!!eF7?fw_-sg`F z%C8Zw_A0+o_+r^AUnya=SNUq;YOnG&!qr~oYlU~qR{1&!XFYz0gjaa{V-i+-RnMKm zS9t(BalZ4e?GA)R@J^5Klkn3Xe_6uMcznNvpY`~kB)rSxxJl{U3m(_|x4S)FA@VPIT(85by;=^3 zioDvZT+egVUgcv&UhP$Wyl}Nwd0M#It6Z=Ds=dnfd`az9uGeRIpM_4ju0K$FmFs+3 z?N!bP@aWWDLy~=BatG&wWg{!^F1L10~@{Dk`S9z0gwO9Fk;nQTRe4&K-T^tGrvd+N(S(Tm{uAD!)^>+N*qnaJ5(YUBcJMR{2H= ztG&wa5w7+s=Y2amwO9Fl!qr~on}n;q${!N0_9`C~uJ$T_RJhu!e1~wgSNW5|@0G3c zof1}imGfHybZW2i?+aIZmH$Av+N+%R>FLy7<NI30s5%zaolR`A#@VASf8+*LgwK?SWcrlhh+!T|p&e^$Z zrQv_0!q{p)nBU_JuP1=hatK5CzpQ;(Yxni3hD(~7n=Wd&jPG8;>cLhnBrJtJE!XiK zL)T(upz}C3B-hi9 zHJJ7lPj1!bmF>&hdzhDS_jh2g=*GRpQ zn6dv#q_L#4<;q^JNuAsruH9^IZE3|S(B>Yz8M~(~;VoCCN~)tJtnTek-s`W7EbGU; z$*PNQ<#3Bxmo+cJOR76dzT4M}w_FP@%{x}juITQ9|&RuspERx2<<+%hm1h^)7Wq z+0)+L+0rV21<8htx0ts=mArN=eEC;w%j#;)B9ZXZgQ-}FzU-1|DnRw<7qrW*Q`Y3L zGP&d0_F+vtZeg-tesMB$ni^)aleuE-RlU*Y|B6;rH}ie&t{CtZHC+Mi-Z3_F?qyB$ z@lrI@L{D?{)-g&gL&M=)$f(ARIHA0b2hlzq5K2H4kp9i0ScVs|56gS_DMr4dU3SR_ z-dv+HJLfjcoHMt+Ia7BT1}8UCG+)=#fnlMy{hB^30B=vlNc6O~v=s$ns}23bl}mTe z6681~#j&iV6N|uy8H;t^EuDBt8&`L8@J&UF&;9q|_??Xly8S8*8Dmb2-rj~6v`GQ9 z_GXKp8;oAC7QIX@dU0CuV|#pC+RUcLvzm)v%q#jLy-2QRBDoVaAHa)_G=Gujv$$9< zmsm^mY>*ost-LsIoE#n_!t-7-Pb^g%NtAjOUv5FRz>3Bek2rBUWersQAX3ffs zZQu8K{_FlEv)BHvYn{)By>=lVaOu9lD}dSD*Zly!ugW#magW(1n9t_^hT~lmdpNm> zi|!+;JGg%@Iu6;~pUFvQTx#FDt5m;s_!q)_Huu}Oh=)t}Kj}WbVu$}Gcq*Iw+qg)F zOYakNpE`y=1oPS4pUK5VT;tWR8-51KcK_)d?r$z~4VwFlN$l`HnZy0f;=W$zVE7p% z+x^eMvW0)4IHdQ(K}=n?`w7r&;a7`q&|BgfQ|aFgYTNyUgr94Z=CzrV+qg>AZ~8~O zukYvP$Ui&9yx#w(ZP4cQ^Y9$`XGw)Cp~nl1Kbp1u{}KY9HU4_J=1*{MsbAau4KSZA z{$_Gf6PGThbf0l#yT3!+M=&z37IA+&J!f3DTijn`Gm6g>_w_gY=svBq-S?s5qZ3>k zG_MC`aH8j%w4U~kzW)UpR1eewa{rACVt#FLZBE}mk@UC3JheLFEDdc=<9=@Z&9vjs zFXr{Sik8>m*Ux1+;%^%lU2(OkU$^{ooTbfc@BI$>-*%fu7RlgC*PrzFFve zi)@}}Io|@syS=flEsUm=GwDy-mE+xDfBbB5MW55gmwjP@2XC$pL^hT~Oh~y)Fc4o* z4(e~dsCUIX6}z2dJq_VAkH+CF;dOa9v7^dgy>8ZL$wPQ}#cdF8z~LN6d!C~Ql#$&H z3n71a(8-iP7;<9|$5AP(@hL6Xyu0BP{mD4WACp!7n4I!QWR*W6r+i6P`I4OS$7Pj2 zE~otQS>=zmX|bIPBPRsMvW@+W4MKQX6#c~<%I?DEdCGn)>uw#ziM zBdIb4zO9zd6z(?)DW8{1J}%XH$G*R_qy`o_TCj+c~9bas@Qo= z96?nfRXmKYg&oR7C#tvwB=H@7TG+`;d`T61kcm&IV#h1N6|fd=g-E#aUWHjkW4gF#a2EMri$%#a&8OTwPdJ;O~} ztxro|-i~ZJfwx0iPUNjfyksX9s zJtc03P}BM&u{$b!ps#Z$4-b@T$v?5za(~{72R>AlTY_EcrUUom*NOO*`qxxPN8;D5 zRaHyC%Fb;GSl_uVK{-{bC19=Rwgjw9-IjorrP~s)W_4SFQmRx-(1$A35~%uLwFIjE zS1p06|5Zz%YJJrbs9ImO1gh457#66y-fan3-McLT{4Fg3+cvZWh*-7+Y}L>but`Hp z!1fF+K^NXGS1lP@f`j;UzG}nJ60iY7OTg9(Edi@>v;?X>DRH4apI z?y;4P9R5+n_2;F&%SNY!m$*Z-&+rZScq4~pm|x*|tVoT;!fOwNc2=~FjBX5e@vWz~ zJQeT2Z70GHOZwwC6#C=Owt?bmi3cdKuGK>=DaafKMi&s@|bskz> zTli}9fY15Ws_MVur?zlQ>D$h;|7hB)=9!`~SObTgNFx-HEy1}ke@}bUelJ=)=hv$W zUv!>*(HA@D1^Oa6E_iss0jP>+`yraH>Nji`y^v;;*kFu8x;o}i zr47=gH`8Yz(w;-*aQlJKmlbWvQySXW71rZm!p;pCmv^p>&-vb2Rwd`PV#+V}d2Q_5 zSo_G>PUTsgw^pdWJAeaHab=tVSRTHu3eh+eksgSBk7-0^q456wp`igB{>Oa1yXF{g zus@%+AzQ_3FcCSdf1AhK%1(<@_sX!7@$dr2txnxP5=`5Q-M-zCvVXv$8crL8&JEz` zzRk$C0USd4rn=)0QlrSo=iXIW3D&zMXB2LEp3oR~Ix(>V_6Kk_sA2_hXvoaob^DRQ`>HOuEX z<}|!U&7;W~;pFa>S^jupV<|PLV3Bes&el@F530O|Z>soX`|ve|gQUV~{WEfxTd-L( zzXwU2Ma<)i@%aZFR*HjQQ8kp-RiS>-x-l)09F)z9r_%yi zrZMrkm0Yn;54%^n+$T?*IcV_dvns}6>kt&4$rC5dp1=)ff}uFAs?ybm!q9gy^al^B zaP1x}ui;9C*U$6R(UpjlBl`tnZ^#M5I7xoUtm4qg zf%t7DSamAb-upmjIThwzuqhBew-{?;=az)`o$W065X3(bAIJCvC$HkG1IoMW3i_ii z>*9~=j+Ya;jdJlt?0f}cA2%%Y$A{pMTqTWgV@2*}l;hMhI%ccU@}pz+M$+#r8_^r( z(}@hB>+uT<1Mwe~sEKyYAR{sepK{qte3NO zKHlFuczPgy2YV3g%ASO7gz7{D4^!O-C&~>H4dL&w(3cqGDodOw(*@`H2BoWvN|-Hu zCGY54pT;}7+Jj)R^pTwi*KGpLcdJfv{2)Y4s3h?L;$}Hq#zeQ+v>Z}ckZ{*y8mfDb z3KpyNi0W6+zxph(6uPi9v(a=S_X8UZr(SSus4mH9KSQy%Qf;U1n(4#zRg;N+<%-S- zf$F5`bU)h{zLh<(Q(d>&b5Qy0SoM52dk{E~_cONl)x9qYc6I%`8SQl^RSr~xqq}*5 z_}#AOn^cFSsa=f-RD3wm0yNag&9GK3c0^s*^blh)A2Wt1GRCQB+wD8X>)g}k4{yK+ zQrr;+d$OsHVwt~be}8lcgQrxqLCL;hsE_(khpGq0BJ@DI z3=#1gZ*F^e$!IPOQ+fporS}3S^y-`Y z;@6Wn8$am<f8qXs8`KO6_s z_k9OzlX55>h($=fAlzb-{}p%NMcGB*~`(Qj?jaiFb??U1#*bd`tU-zYymHC2YX zz2cqltwo;T(edluW5rn*k5w%-qAS!hc}T@ONvEPslb{#XtZGb|vsNPnxGsft_%I2+ zAEA~Vl?NH`sJr5oW$=|Ed@jN#JC>qKHZ$mztGS_R(+pbr!j{;w~c+0QGX;|dMZVI*7DFsk1JHAtqw&4(zCRSYWKxx!p z;6yJ(`B}*dB;`g)T0+H~61xH-D_QGg6{Cg{;~NAk5l7j@sG-EVQ4EQlU5pw^>|-ca zGN)yAlp0EGCB+bZ*~O@##1>JElgugGdKn?52E;<4m4&7VPB7QeRk4NE+`Fo|_m=SL z1Icl1&x(BH2egWhfa_JnupTQ6~@iZ<{x^2|WPwOsLx_VA2U(MZ1=}gy`J`5aOuh++0Xb*c{ zhu6m!(=@+vSHhgH7W%JTE#qR}^ITnqF}L|x#4?5kk?YuKEF-w7iV}m&PlN3~l*bun zdH<+sPA@tXdN*EEit_(@ZS~I3W)=J-r)%7+q56ix;KBGE7{aJ;eK|hocN?~$>dAOd-|K!FNPvhiw&I8+R#C3kJe%`XPPRd?`dHP6q#CFUQ${$ z9kga@ttlO}RCLh7g&nlov?)eVrdvC-*0v5>#mLIa8--A0n&Ke{N^4*Tt?^oGOb0FY z5R|FL4q6%QsG`ObrbkO4Gq?CoFP-J?3l-BZh(3+#QW_Hk8thE+( z(AuE2+B#_M)LJ__Xz}1V<-=kqGJVK4T4_~fYGrI*L5|88-}?ix*L|^F?7PUa+J)O-pf)~pyl?lq!q7Q!?=ViF%^jv@v4W?E_jL~T5AO?x`tN`o#@pb$ zajwU+;yqMQY6bKKR)~pd$SW@_gz?n(i&|KGQA&5Yra5q6-dAp&6z}TJ#LiVU8T!#B zaeq;GZ;caq4Khu8A4TfnD;`kC{k^JR3LXm2IMEiRM^~IEH|^t-N9cBm?=U4IeI+{e zJEi?kU;LbsAs7!jQ8ib)k0rv1vUsM)`^r4cu-NIZC~>&xM6QK5Q1znf-h;OHFHj(O zT;xOt!->!!x=%~hGp5#tG0W|)DjFys?%*cF>aRkdC(589zRZZj&k={&KT^00I?9Cm zVIB6%TRF5zeRNCpxG@k)eFhF5VM7rg-ur*qBsh@|AfC<9qmV3#QskmQ{9I&$d2O(p zlUz=8EKFcKCNqIE|3W;djNn9Sp)`c!f$_WB3qw8Q#ZBL;3{!|Xa1Z7^yNMrm567hK zcz#w3Cm>c+AJw`Q;~@QE8GglTC(?-Zb)V|B!K1TzxHCP>tz#YiaIAQD?qP18 zb<(kr;M7zO9~_?c0USO^vJHmqZE8a5Kzi1I$;=gow7s>l5Ab!{{mi6ZL}Ku!SbNh4 zjPd%|KZ7%~`TtP*|4C#4owtVl5;i)KQlMe?K^f}uRDR-7H2&F4@6$Pf-$qjT;1L8Y z@lS}u#n`&0kLkGdQ8AN-hhTr+(LFescNDIZe3)p@3tjJz-=!P;Yy3^C*vu#AxRcIE z6g7LIf{uZ_Zf_fEtIK{G9On+`zY6V4UY^a9-4H~@jqG|8Y){m)OB26~#ZJu>oJK{{ zs>Qs;dtyR5^a~6ucl)cihEBq3(df!_4&Pi<6Ff1SE1a}Q@Jp=_LHs?5ctB5_odtBe zT?0tYYcL<#;A>w~NU4Ted>EUEc|RSK~w& z<>BvUIng*2&yB!OVgY`#d9r_IRFp%kl}&WQhYcmlU#_1p2k$I9zp!FU)84{DEZ}W} zpi{T%xklWZ_I3dZl_krc%1hkEFDXmnuz!^J38s9XI}xg6_x5f1vDFCk(2@B5ZjsJk zv36wTjU4TBFtVZ>#vd~LfM}1Av1Ln9!qu=S@eC}_7789Eskob<<#hLE$a+TelT#Q4 z#y(aBJ6)>rmEKR3iP&m2W~*^`iK911*Ek^S8n5YvB}l}D2g9D#xZ#3+;}7Yp@gqii zP3yN&Y<>7$+?2uCd#&9OGV%SNw^O_M7i?73I^JMDU# zQLI;)+h13ES%V{_6R++lrRVrCiC=|}Yp;O4x^EsUDpLjL_hg+|V(a4rIb1#_!G_6Q zVoLT%_5TaXT%Y<@c7--FS%QmW>G=k(=ZviWTs{YdwFWHZR8C2+(x_J3jZ-AqD=Zrm z=ai&C8%Dad(K!XdWmt>hGLfEYgz#hW5e46D_Vrnxd;q>zMc(y&@Kk>%mU!3aPINpv z46gswWNPg}m||R0Vzgx$p;38$0E{3U_%=&z{IcFE57kERW2y!7FJB#q?TjyDO8TNR zOG97O#uun;fN{;=?PcSty7-v>Tq9f+sd4UE*YvW7#+ts%?2_`{!u$F=-^7g<5sd}HE7^_pgt|k;E*5H7F4gGi z3?%UIK(i8cbC^F|p0CEU;xR=l zcBzRJcwMh*vm0;{1Om+q7=6yN8dThBe}98-NWmp~LiAO%kDb@&(JF=;PD%BI$U9yc z+DQ3&%D1C$_!r1`MOr)$JGCL+-B{9&x(4-nWj6C|hIyvke`VIF;&|JXdUmi9lo zEB~?iO@?`7hX2_7X2U!uhW^v=zh;;()aE6ZGZp5d7vrYFLO1=eBSO+IF&=tSoEQa( zQS6w-7qj|P`HcMpzpDQHajcfS<3t~$L@IB&&SYd4KBTe%AK*PVOngWs5Fb*p&4*Of z@gWrtd`JZ<@f3O?I+LrK^)UDb*6S&xBX-0^9A{3z+SCfL=)U0n}E! z52&mtdQMF}xszJH_}x2D>9!{h3xAO3I*fV5!WT!zf6IyyQ;dswi>)8&)O{a_y;Sei zVRfwTE!?+ZdXbghhxM_<$k?8M{unHC(P41i-@eV8nn7RR`j(DHHJ;=o>F(j!@^C`@AlWQ6zXZ&!O`Qn0^oHm3>g+@~u4`E63qSuydcqUx z8*nGb@gZN8GZ5q`Usds~k0=Q)jx{U{4EYtkKl{2s{8YXxmADzLp_z#gm>&#O_BV^( z))84(u|3O@d~Ix-yALTfT!zQgrPc%d>sj19>+f8|Miy7o+3XL@orrY?-2ne65W{C+ z)hDoxmRLd>ti~KL=d!{r$h7E`^z+A;a)QqvU&u+1k@0iN1L1Y}Tr)mN`sK*jUNzUO zn(-Do?M^*IVfH7RKHUIN&wUtb3MaZneSp)6JP158{^UIL@Z2Hs(l!vaEAD7LAnr9x zwSL{yx6u9JZ%bz%o}8I_m^B%V{2qoQbOpbVjgPV7`{a83z|Q*c)Wiz2E^CND{0Tq& z>W^ZP89QGhUz0Usx6sIVXVfw3WB2We9tghr4g(j#xzETQUeq>+_W8p5z0RFcL@e@l zAoebraRvda(H_)ks2YP8aAm&SAKqWQyco9oo#8Ln$LAG7S2^&xFSg^rtIhs>;l25@ zP73eIuaEsbct&_nUZ`Aq{RPG*d%edfXa1fz4EONb@51}?AbkA^?x;s~_QLz~)W&w_ z+#T994Sob0DmI4qV4<=71=gtjUP|ylWEGl3GgOF(8r%>O!Eph+f`GBEqWaO@cOrvP z;PiMGX*-W!Me$GEa9(p|KaBFRFM=O=t=>BOr22mUaD6A)?nL+i*#wywpHxS3E9(=S z?oD~*8hS*}-&Y~?bJ|ksJ0-5FB(6Fk602Y`5Izgu<=5HO5M5V|`u)DSWi`fUvB&dE zmSevP{ZYo7RcEuOGk-g;Fa-pml8XHYtlLvPG~#fM@= za$Ut1+V6t_Apc>Se`E3;5@q{@f!5BL6x3}bEcv}A~T^1?fzqUTCg%KZ&vf@NLvy<4yZIi9P)gp-vm|jwT zO{{>5pSZ5_1doT+n1fM+CRi{eUlm zff`t%J9H8Tq1fi29<``=22!n4v{&jX(1h(tH^i`qmp|TRwX1S}WxVZg`g9&ZAojBA z7VP4Ngz(vz4c3v0oQRE7_yD$Ym?a+@+-gx_q3SAR)m7s3t4AeEjP#?JX>Z*lE<;AHKQJ6Ffw9F{qD@hO(2>+9;v)t}M8k0Ydl~ zi`X!?UUf(O;oD$Kr_>C?|8IRXZvA-Z1CDNRgQ&M?=)C;Cs-WD1B37IIAH4a^{r^~4 zX-BI1W3PvADnkp$&6ikRRudi>3mBmbbiLKXt+x&i-_k4SM8Y({o#vqdzNVF&&ndwF z+)`I}GIZm0#o;{%-_U(IXY`#%+nw7l1eLjE|HP2nFr(~7&rs66n&%Bb4a#mv*I_5a zGA9~FGAKt_nFdeESXbfs_Tn{X{*UqCR_#%qLzy@aKTTDtu8*DtHN42lD|*qH&-cg0 z&#F~euna(FZsw*0 z<6ysj)j{oJc4}8uw>$H1M3odDQKgXRukxAGW1Jn^;4HX^a-(YzNX(z)p(_@My{R$| z0u-r)CbuE}Z!yxriS)(ea|olSuKFYFP=_LX3+h4aXK6-P_4xY*Z?8r{FuO zDR`P_Xm7(d$J(;)@sXHD!W}`VjqR41cbOG8XE|ZB+20@Kk6{B7-$~gDu4e}iCjq;cM11m zC==&W5Y|>HhpdIkUOlO;-NiTS<-e8z@{N}sVcgg7b_>4jf{?Hsc zkt8gDk?^)W7LVw=Dn7RcIIjMV4O#e;{Zdc2?$WNa7W5&L1YUs!*T957j@6kqKMVPI zfBX<<*&x37f}M}pdw2-C5&QkI^9!*#y|NZ>4`5Hq+R&@Xp~}lv0Ke8wWFMO*Ybx66 zt9OKsGd3Laa~;a6k+Bm;#!m66;d~OymTGDjxwrLu!%~cHQ+==1@VR;UafF3h=WS^N zR*l8(bI0cg`}@Po8S|cCDK@zt>u+vagi`EpYG1;ent|}gUewJ1v^nzuZO(jTYMZX1 zw!;28qy{FB{)%mzG=w;0rsjYJ(@DyF6IPNA+~(YQJ6Lr0oVnHiy!ED$v2}Rgpq_oR z*v^qij4pRw;>+{RE9U!Po$u=9^UdqQEqH!Cyhvws%(Gz&EsS)+W&tjJ`LOQ5{YH+! zA{RPXH_@!7H`_&DdV`^yIfBh#yXQ32$M55W$w)-akL%;V=8Q$a_4Ezr`QTf0`U3HS zRR|c|oLLmZ`wCl>>#>9B_0DmBZ(j`cC0-+Oy+5iD-dEyx)f_Z04~t^3ay5dl-j8eg zv=K^Q45jruzKOwf(c=wO-ephwH`bnZICTui%{Zfl9cYZ)(2l=fD-C~aErR%&>Ymej zbZxLLQ}1WRGTuPA)SoWlUd}t$&A21|JoE*_`%iQh_@F@lrapdLApCum6RE(nKZfa| z&;7B#!zB!E^!g9CnzN!g8TRa;Wh{A-Mk-=!*LggRb1;~R?8Jaty~)u$wyb}B^CWhP zK7=tnFmRRHPUMCDw51iM5S8W3Mt_95Y42iI|Is$sK8*8wPUJ#lv|-F`PIMH0WfCy) z9p*9*jse@DuR+^Y<6Nd7PEyV>6|dD5W4gDa{% ze!M3XxF_?PRK zHyZrT^mhJWHewoL(6wepuQJ1~&4}C=WwL^^CR*x?0z)dPr!#KQeo_(ZHS9qkjD*4_ z8$?Aqv3^Lh{@<1y14;jK{SJ=*G`{`CV2_)5?Znysc&{>l#VY4n7BRe$bkNIA;Syjp=LWNJUsGo36*A4?(GA2Wx$cvr$T8R`+<6AWSC?k3H(kO07&x{ z*mgAJG_Q%gm)77BR^tBAh*&JehzWL#w7Ls~80*T;Q#IWP3FX68HIdgbjuC@@G7P>9 zbxmY&WijNa~P82qMU6Q_NvNdv|Ma(mih6L61q*p@e)#(Ky$Ajq5D>t zEYl8jG3C%@r_}k)y{@KI12#m*+GP?i@)8cU30ld1CKJO139D_eXH*iSs!a}|% zjdR5?YlIWkK2CNH#2hrK?&9@88GEPSjDT&pjP*8OY?FEc?rRQhoBQ|FQwgyzTHn_F zL3U`)!iWt+nfe%7VRr(i4jrJe9P}Vbb;tGtZ3HK>sYP#W`+;`y$8PJKxta4FEv(;( z^yC#8U2wdOwvz3vw)-P34!g;*rD!p3YJEw+u+gEX-XXl$oLcdYZ}(d4csU;9ZUo;S zL)iD*J#_7u>QOv^G{$5Rw{;b$zW$E@(8YAaBP*Lp^k?0Mexb80z)pHm7o=Q1y4g{}LQNgvtJsQw%0%08NQNy=gquS;8rtGSPs^$S+m1AB!z8K- zclbNhrg_ky!t{|7O`DRLor(|4TsbfPyw zE!v4Q(rPysI*~FU-=7g7TN0N+$u++kkZdqa0EskNg zTetl2hw7Ge{fQ9`_Pg)%$Dic5wl;oCZy$HN53Y-?gJQoEeSirOuR}3!_xDR+1dmsH z_Id*=_-YTYdgsY60~23PL@391%<3^C&l3;c=BOq1s+x-A-X=9ekD*G&66rJ0z)N(T zUatvE#Pa<#E@>1*xtLv_w}X>)<=@ox<{sCUQE*{7$3l3e-=_w6$&27J#AEnhTS^bW zNOMuMYdS%{l>6fYD>f<*-ARG?m_m;IZgpLX*I*eEuSD0y_W7DVqAPqSy2{t|3Aa_$ zMX`7kEGr5A7_ar$Hb3k^3{_ym*d<)Z+v}$J77VrSSruzP=q+}lJhe{k2drg_e6iPj z?c2NJe9#ln_#DUSsO|Mwttd`hk0u@uSTvpHs$v`9Pb_7OMbKrMx334a&@gxbSz7hT zgkw6$xp%b_c^pou6)!IRmN@et#xrJpG4#Vru`QgFfI+_Qj3?H!c={N>&%xFMSWxcl z-1!C`TW-Nmt@G$kC%geF#J?1sc<-kA_!BB0aboBX(DcU=_3>wzr_@WDVIsF?h!->= z3b9^8$K#EhPs7Vg?psL7L9UOLH!#M(>eH{A+ z*QKXx5qsP5mS9cjJq%_mtNpz~uR}~(7&`RNdCI!bpSeQA$UOqJfKmnGb(l#=ZPO18 z(zD$ChN;!Lqt$EYZdCzG9+K6m3Hie$)aBu@$m*9ReNw z2h`Y_q8+GSJ$HGstKqUQOn=?mc2|8_apRYHg&2R$gAv_dL-w!I*1G^wWU zQXB&h%&TM7#^N=K-rz;<2K{xjzDSNl z{CH5eAWIZs@#LO1ys^;dmFicppP{f_RW>*($9cBhchH)|({KfQ5!~12!+W~or36Gt zA^}WWkOh&|`|{ou3z|-(N%`W5Lgg!zr^_Lzcg%AEqJ+~md|gCEHy8C}J3SKV6z&@T zB9#)TklZ(SXoR~)cyO{vBgS82EmEqZi&>GC0J_u3i71{$v9*akc&>OSN8(}*48;vo zf#|M8nSnCXb7P{49fmMo&@r9y;q;njHGbeMntKX@UNp!EjB|Gz;;G^toS%?ANWtNm z!Fe%w~x$Iqj|PDJ4;x9T4xQH?DTI%1>0Q~jAu9wfI)0o+vzL{ESQ_vC+} zVp!F#&v9p!s$xS&X$@7S&Mi_}YVq;-lG=m*jw$%wzTIo`(04^7mN%8sB-S!;LIfUT zC93akzEot6Ptd;NT!)pMxJ04c1(O)9aKe%eOADd{DT=8}%+~Ypm(s)`ki&j2)(S)Z zKvPcmSs3C%1s*Plm+kN|C9z--d|NFR1Yh-`V(b;(+c~%~yf+wJgA_c>AAgSZun(<6 zdNJqss^)$a4q!#MKDJ-Q1&2mIqm_K&t2A^6jbM8^w)kDbeK_u7XnpK!=C=m;mZH7f z;j?Dobw(5_Ni{2KgJ4Kq&E3nvn5 z@uCObx>6B$PxR^#rzB?PvYE`oV&7%w3ty`1^g z%6yzjn8dmm5}1vCTcG--fK#^y`|8G|Rv)fho$il~Qn@?)Ek@29`^R48eo|Sh_r=zu z>(agAGhg-l*oMD0@f0N7SMbvf-89|MO&q2gy0L-q3e_P9UOY1XN3K(F@53DI$|S`G zJh#DKsv7Kf&?`Z{LAPNw)@J?|9L@KI$EG#_Ag_E>J7iAp(EDx~tb}m}keTQNZ17|j zt=N)0c%d56S8opX@W(4(;XwwU*ABV0cW8%9t%rHInK{%|^Z9s1Mkezmys8RcL+@ZY zPS^PBQ)zo8%Z0{n$!3zP4r{6c#kniYntKXD1r-~U=h!QB#X7dSsMrdP*D0yqHVgLR zD+Wz_`MMb<;^32~@{{>bq5AuU`#R$myrdETv->I|y1XTjs5ns3wy>(`Ol+gYa-+X` zf9R_O+ey5Cz~s`e0KuJfvA}8Y?#e3Sv8#TmO07dwYzg0tR`Z@!&a$s{weG(55NxPJ zypENE!81OB7dC|V9Ukn4-;$7j`B6yTWT)jkUkCnmlL>{UKRpruvq~x)H5S1mLBakZ zIPj$#{fq)!{l=_Make;ujjXVy#$5zalI{<;Ca4KJzE`0V1fFw&PnohAYGSu_Gvwg0 z4h(H(2Zmm92Zolq1H&>)2ZnO*>F_lT)Gn&#O+eGVjP)J#!Hv}<_nnCsIP?h5Dapqy zQXHpTVB2U-X|Ld6O>=5Jh@+N9Xe$|~c1Q9kh|FW8Gc$&v$QP5as)Gq8&6LEqU`_j217zx4kl3bl8awDzCf0$4_syJpglW~$3BK@$ z%=bEOhK3X2U87T!EiCd^aCd+%fS6hPO6fqOPAHdL zQz;KVK<^-+=~6!?nL%dxW2;m%c55f^i*wX5ypJ!P2=4!>+%os6&m%7pUAl?-@ssrQ2ur z=hUHN*nN+8z#3KU%1u5^ZE!taGk!^7=zRSWz+6mcsYV#PS5@_>yoBwEEaVf}0AL@73H|}1B-M-R4IFWCF*(wBov?Sk&{t7n0_7zMZ!+IyO0LJR# z?h7S_?EYY;1f8Geq79hDLE($5N-Bn&@dt*&bs_P9>n1x)JWvo@Jj3fSm}K4-0D}V0_Vdk9?g%c#w`3CZ*a5@jRqz)&||s^R;k^t zs6diOAjx(6rgr`e8CvFq*Q*4R&UF7hDjqLlGzGXk@Ae{=GcK6}H=yBU?8j%7MrRfT zmp4^0Afe8?hxg74{ef-1TW}Ijh{F7Kn!)_omkHe{*`X!^#7av(ti!*Ga zS3}VC_uDWB6{6IiHe8Er)?D-iv@oreK(BX$+w0}_E$orl;P!eCrzLT$l}S~}Mu(kf zU(+qUlxMF&pII!~p?lHsY3ws2`@MxuD#qn}FPw*PriKmaEnrUM8ERy7cYEuI(%s$O z&inp+?Fh#keG0A784LdN^r$ zJf7wK#*?UJ=e4&`r*UIhZ}`rb-$BUJS!@zy;5T=?CRyx)|2tVMRGqj7iM#OM%3s$o z8>n)z0lszf*Jv;?oGX6~R3bWm9Y;&7{MDUI=PxW(=FVT+k?4}YnANi8uQqCAh+-?BTUjQTO7Q&V~%M;1R%%Y)E2z4 zRZxZ$gsEUZ6+6*)usWL9f*;=s1Pnb7ZqE~&gTJNqZ>TY$TSEqK&X#-kqrOg#z`*Lt zY`R6r+sVGBC8uW-`wEsQE=8amzHU|9`ZlIca@=N(9DVA%vSc^O{XTWd8Afqx9w9XW z$=ySN>Mw#bFrLGnOS}y`J(Tpt>qd|#@6Y3Z>vJPUysad}S|CBry zMP?ClId_I#?(f7|;re(LdJv%~Vh>Xp)%%=i<6f*Gsrki79ilZ`fRD1uyb3UPN+b@3 ziBynS*b?O+xVzWrn#TQ|W*67YTgI=X$_nZg?va94y)sz4p%+rm(94NOM&uRPW zyZ#INeE*JpcilM!wFhl>FSVavzY3>!^{W^`D|1-7?!I+s`wnk?^`2m#-dtAK1r1W66Fsit8`*vSN1vDQ{~TF-%6}IaA9RV zjz?3j)yMzf3MZ;Y;`pJwFH$1}_ca7%E6+X&&nd*2K{KJkun9{+YW}yCN9ifovDH9{ z9-_RaG*g2CHVuDGS+Ul#q9koa?SMjM$($UPj8L52XX)J2=2HMM+$d1<1Wx!^Jo1d? z0eUVv!y7}O>xRVb@}xs@lIab1AG&%!&<$vYC2kli2XI!QJ`cSUccekj>|x-t7&($Y zPapA!%vFTyj&s$w=RwO&z|5Xz6|7Q&lWdv?Yu}=0W*jT4cNwF^J5jD^C-B;__Rvb^ zg4VCi{1V-ax!Y{^f3Kxd_GfINNc>LgTZQ`2to}-#l+6vNgKUNyYX2}hl8CtXT7y~` zCkbO$=zFc)_^)gQK)du_>-8GAuithFtUtGyrj64U4X) z9KcG&GV=EvM(8`bQr^+XOF4{e5hMLO8d;{$XK34Gj+-w)g-~y(m!RC3KnXaWlPXen z>Z`YfaEe5j6(Dv2;N2y+`ccB}t|gVHKjB)#Njc*4Y{uuUIdU{Nc_b#}&^(`-wK+7o zmo0H3G!d+f@g}}BfF(0E$NhWgjf}nI=d|zv^(79@Db{mh2@@%td1vQlck&c}xS$Nv zl$;(x6wIoRm0~9kGBg0+hrnCa{9I*z{SYh=1g~_Kofhc0L0r|5Tae>0&4VHMiXwF) zt9~28i7bPbv&>tu5$9JAsU7JF-i3iBx*0Fwe2!n?lNUd8{e!v1GIUzZcQ{-P^imx7 zp8iq0o2#*a8+-*5&evx5OzT7&r9ByL#(JboZOmGpWcTEm@auf-O}Q%X)X1> zN_|M-Ju%gy7*fMKqM=$F+u&j7O!wtC-}){bZlxZO!O{<0hD_s3rY zboyqW!1aRZ+6&BjSTC4T6nejQ$oO8Nx7-rOcT;44pScV$aoW_$(}SfAQ>RazJ!SGF z&+N&wuAe;1c%D7&)L_N9X;ZH{Wuj;H>}lhs&6qH0+|{#Ygl5k6)Q#|raW{^SsjS4* z$TV*DogCEKd>%Az;*`k~uN^mY^5j|LW>39(!nCW?a;{^7XM22gqX*y{00Tx0AAz&G zeEb}MSTSSfjVUSDl?m5R9v7-`1(ch!Cfs0&z$31MvppA&_IYag@Au5~C=b9}GiJ=j zUUAn;qes_|8*#}PWfL5jJSRBrx(Rc}HO!iD^>v7!anmMGzdAU@Loo*M2SofMeIq=R zrd~aHcF=Q4{pbPbUVP!DqdXHPO&T|I){N_?PC_(D?7@-&N;zQqgzF|VsK(=fsndg# zXHB0l&EQif84nVXVgw&y7;x3p;A}%+>g)m6PQFfo>!wa00P9`#ggI$7_#{(9JzPC? z(zuCNd6d^mPwYGU#L|fqrca*{EWK)SDFSbNwgD-W?Q0P3*B<194faPKfYrAj0K8!NEyZW_CTC zNTXeE;Lhc@H*qh-{Vm+Nj{G+6*qP|zy5BKi4^J_Hp>ss8| zn_h=|58QdeOi$eJhi5pWu>sG$aOW#FhvNPs?uX&dFNiWu|AJ=@mp0*k1UWo?B<_#m zeiZJ%!JV@S2O|*d^LNGl7~JRLejM(LaX%jShjA~%{Sn;z;{Gwroq+o%xSxpoE#T$2 zH{i~Qx*B&L88iiV?hcuXyBGIsaOZ0UhtpRafms*doL&r!n}_`ZSnuJ2EyIJq)a6BF zKMXm>xt8PlF2kE4hs5AUVaBzV>kT=^hbh;EiG&M1xC7io%e2#%DOYI7v2!7hO4O9| z!VT_5W?E}^j{xJ9AqSZnVOnmn2$*sOa7f3CT05Xca+z|SAgANyhvYg#PRGj+$sJ_5 zYr18s54PMj^-OhF%Ux41Lv7>(T{a&?T=B|~GxC9!dnlWnkq@-oud>M*>89m=olOp` zM*O1XeDoYH(|`F!IN0f>Rh&}il_6(@L(92RmYfleACxn~@q=7Yif6u-zzWDd-`|LBEumtxQzuc*gXir^q z*IU3EBYpAN+qp|&Vc|iA2N!lNEGX<$*tsyTAg@ziXRp_rpXbfX&-do%=NII6%I{oL z=qvpE^Dn-jEAGXrivpj0MmpZSw3Hp;;3rpE7aAb*Bbr z%$PQD%7m%YPn|aH`s)UuSA5OniNVr|)u#=fR9!vkjEN0{23DLtsH*z3frBb522DC+ zVAbiB6_W-Jnlz~4jLDPxxor`A>B+n4Vo%Lk9_NexcZ|2;-HV5JFB#sw z)YrYdw)?1Xr}+hUdl%$;cX+#(`?{AZJxI{*UijZ2W>4n5wtHy#=yd!+@2YeHT-|oow&d8&Wi+v1LsmD_Zk?|rw z7iy7r!{qBeFx=_xf(0;_Kivot4ErIf{dT>|Lpm;ocP}5_eW0&I*?GQ>_j0(3@VmK@F{&wha50>^;^jn3I&ST7PRfSPuVR=F(yFD#t&YoqA1FVBl3z76T>I}CY z%-?Pl73KGVs;qAovpbk39pm5Ey(Yu&Tk?OPtoN3RU)9TYzMHM{T3z?jbF|vc1DA-o z7qjPqbGtX@XL#cG1=&1-Jb*AT?H&{Ro`JeU{{KVTZN}$jk(K0D@wr{t+O&B$KF{sG zG*34y`A=p>C}e40sSGTRrCD5Lm06hIVkM9pE9_JnJcn)NMAS5^RXWWPy=3-uVm3GH z_nhg({JKW$>QGm?ZH1lY$7Rj0u!niC82OS{59WP0%~k!T>%C^x3g;g%Dg@*{H(u(+ z>{ZGJY5#<+Bum+cdSBJul9#QhXB;mQbJvMo195*`*bFi^Z==#XxBKEexBbl@$KHap zz!0gy|28pmJLAYK4{)E2Xu2xDt_xe%%-S4X2^cG5rx4eN{4wpw8o&9QvgKw!j7}4K zE@0;Tm-cw8vK9*%rClvz*H7$l>HdLL&(?Lx<}25(0uFj{skXhNziPWL%&fBy&rxYG zu11Mn`)FZDyR5vJ|4BAqF|GB9ypN^pV5Buu%i)HkOs`Vpl&qjdWSb zsB81rWsjv%o=LE4U^o2WTF)OlJacq-kX8Nvp}JnnOZdedHCFkT;m?0Bo1f{$T-V2# zj4becnck2jf=8hs<#~SY!Ej$)(q;6#g~>_sFNNpJ{ddCuX>p(Mix}s)q+8-~gkL6H z=asuL2}=9*7@Ujuk#%xQ>Tc#GXaMwSS%#{;_cF?k&RqVezjJE{~^=(Ddzl;jD+ut5tZZ z385}l8K#eCsl{Iw`8JC`D15WUPZz$;;swHYT0D&SQT~^7*V>ne{6G!lew^?ci$5&( zjI#J-;o~j-HsX`+&b0Uo!W%7qhwz0KpDKK@#UDaj#PZ0~g?OFl-aPw+pCbHt;jbg1 zDSx%_Ucyg?f}C5&coXVLfAmn3(>v|wA^1l|Y%kRmOKmR0L*8?|* zf9i!7%YCER(w06O`2TC+Tr1+W4gSgZ z+~q#tSG9w= zvghHHJyoK57yavePbkGzKNL@gs(727;;NsEr(G)E2Bo-~tHIO#h@X6SrbX%Lxso$g zygibV*Xd5+P1WKlZKd$0LT__qt}K@~W3?+S;7zrzX-1V-t!!p8m+MlJspnNIo|(** z*SR}W&zovRZLUj|%~j=>3Gw7jwSJjeUbRA+$@t_|E2Y`E9@S^+c|FHv0(tTp`QH@q zs+CofxN5JOy~xH->Igx+p8h%bDLMGS96X&5O#!d!k(-kA0kSDKad=7q94n8RdZ^*%~&cV~|g(=|mTx&k2)LzeZ zDYdEadeqF3iIm!Fw1cLm*ORX2GkLmQ$mBPek14g+b7M+vD!iVX&Bv75>$xSRHWgma zZRTT2?e#RJ)TYAg37d~8wbv6(sZE8~bEo;3QhPn~QfgD-HTox+e7^aZQhSYlMG8XU zHTpA|{O9IlO6@iJ6)6aX*XSo?@^t?vlc)O|nS8PNm{NN^>3%{ALgDqK+wn}E?iXe9 z-@s=F+??(SNoBTC^ z+4u!H+#Q|6pZ}A?KZ|qNzc7b?{)wEH%|GKX@sf?la=5!7hr55v5kI%)kZ(rUGn>2o z9CSARcn<&Eo+G?_bGSRvo8A6VIpX2s9R3XFkROx7-A{7JkI#`VKgv-a&&y%|NQ}R- z#an%j@E(H!S2p>lFh0u0f04ugf6c*XW8jm`9_}m5#%prKb0SB$&dHHap2!iOKh5FK z{yF^lWsdr%PY(G*bMQxU#OH<_;r$4alP!L3%@N*V2|EhK!46DP*&suSI6#2j?i)_vff*mY`nkY4nS95B~Wa{;WW_dK&#ASgWoJ z5I;SQejTh;SAC9r`!(XNr!fxF`xSOz=-$(l?hospD?caSQ>{3-_O2BBUsLv^$4%Ov zLgmkNzfOm%SB`Xi6Xm6c=U%bZ<7pJtJ&NDgf&Wx-wR=M8Y58S}|DuEZH{jXQ>n}OV z%NIG?Yxa<{*>g>f^li;ie)+}KZ1yb6k)Ma>C@;Po{+XGh{v44bfA+}XpUye_^Hz>} z;Ac6?#Wy+P=d2v@%n#*di=W0E{_*FCho8Xyo}Lk@{P2OOV0~8mA5r-^J#WxolvS+u%xFaJuW^~-0gvM@9DWnp3?J;C+Ely zXCd8tdM-}MuN74_0^HMcVTwN^s!Ma^hhyQNY~kvYBVQezBfYN5kx%;MC>OUuzNhDs zls|R+)Ih$cCq2)g`PrSw5eT`|UQMWP%#lyf++_{d9jNDf8sl8Geh%4_RlRzf*zWNx z5!DGQU!9%ex+eNarLQl=)t)Up{RsKLr!k+V_Qrs3%~39%&5^He?nZmk^Id9R8|?X| ziih+(iMId8idUxmqy67ENBn%ABfTEVQBEJuk$;xvkiQ{E{&@>N>}ibar;Cpd$uaIY zJ%|4bbL6X^sdSu?iU+k%1y5{QdU{Su@k>Q@H!@03V;)uQ^@QGuNSB_*JoW&Q=Mlm^ zG4j?InoD*4E=N49$PsVrbI2cs@bX|Wef1T^Jvrj@E9IYZE$$gAsspH(da5^jT=0PK z2`apZJh>LZJg=wifh&Bn1AT$8K2^6zZjmFvOPUFr1+mjb-RiOU5j9^yo9%hst1ls z$$uoO!&JE&nBp~}dQFwDYg7C~QQf8dd2WiUy_0w73dx zNB+M~rOVM;+@tno=ZcE&B=q#urMUL-#mfIjq`2C@jweK?x|maVgaW<{pe~&Q;k;TE z(p;}+QvON&Yu*QHUgSJVS98;T<`K=&JyaL%{}KK*@9kn`&n|=O{Rg&xeva_+qPt7+ zukCr<;N1;(TMfRQ?fDx2+8$kUDbL=E<~lveIjgBTleVEa9zV_ z{@kG1#(!pB>Dtnf(|*ZVl8SbUbqPqX+f!e?51p75Z>e<6I1#eXGS=L;R5 zdjC|TC4Vpla7El(DjvEEpJ(xB#QymfZxg=I;(rl-kHxnN*ZEQVQ|}jh(31aD)ulF)*yVF#jg>*-Qv@Q@38nR;h$Rk zdf_`Qev|NB7Qa>a9*f^D{CkUYe5EeQFMMQudzbJ6i{C9=*Ed@J=faCD`Ckezw)g|W z*_Ys@?a}YuJ=`G{ ze30So|yD(=5JQ_)Lp`D?DiN z{le#1Jih>mhHI|HI}2~LIM2=D6|s1C;qxrsQ}}#~A0~XE#g7zzkHxu;&TEmyj}!i& z#ZM5v*y1M%f6U^i2w!6HLBb!m`02uzTKr7mPh0#f;Vl*)F8q0mpCi1@;^zrpV{tt% zx545Ui~J^wUnYFB#eXdPHH-g5_?s5LO8C1LSLY%jy|!7L=OOXhZt>~DcUXLu@J}s% zz3`nDze)Hmi{C1IkHv2n{=LQT5U!`lsjcdN;RRBjG{0MTp~ZhLyvX9e6kcrc2ZZ;s z_^*WPa}~6^j|k@(PrNk$t?*Kd|6X{R#s4V0+~R){-rwTS3Lj|kR^gQvUm?88;;V!Y zwfH*WH5PwSc&)`>7VfwB7UA5VW5&-`;iD}6ws3t0g^thngpaZ0KNLRJ;vWkiZ}EQ! zpJegRg-@~gSHh=Re7A6}o15YKR(R0j`-RW3c)m<9>$5a;csmPkwB!#K9zR2Ro34hSyCkS6`@sor3&EPk8tVvFA;T(3;g{;~Mi>k&0j^U}Pxn4jw66xZd`9GB%<*SG>^%f-A{ zr|cp3$hfFb^yw}+*MxW#xwn*jZ{fuj=c)I+dbzihe3kGLi*w&0uiox0C4Y(VQj1?D zyv*VU(ZjfO__Y7K3GeS}r|jo?DzAa=EyWKNUTJY{PnE^>{K!y?|6Kf8WATTC*IHc9 zNBAwyug&wScW)_wt`I)T;(GtjB^KA?{4o}PU+iJt2!GAu%Z0yb@fU=@Yw>pB+bqugxV*Nzw^VuA zD13*-UlRVQ#a|J=)8elS-(~T)gzvHV--Lf}@ehRSdYzA~&p#4gAmv!|gz!R(ela7M~!z(c+VZM=U;7 z_&keWCw#uee=2;T#Y4jHvG|R`7g_uk;SXB8N%&%mM}7H<~*xW#`ae5u9n z75=ov?-$-;@rQ&zZ}EqPw^{r*!q-^*e}!+b_!Gi6S^O#Cn=Sr~@YgK9T=<(7e?j=W z7H=26&Eji?Z@2hH;X5q;lJHM0{)+IO7Jps%E{neNdCj5Jge;{1<%XB^Pk?;Zn zT$(3@7h3!?;YAkzQh2e&zZTxh;(LXcSbU%G-WJa*aQ#a#RDQg#o{A{PqX+%!e?6iQsF_1UoL!(#jg}T*Wwd|H(GqM@QB5y z3ZG~3>x9p@_)mo|w0KDPJr=)F_#%tnBK$#%Hwj;C@u={}EFKfS#Ny4uAGi3=gfF%D zy~3Zi`2E6LEdG%2=PmxQ@HUJ8M)(?w|F7^37JowcCW}8Me6z)$5&oLRmkWQ>;x7n) z*W&HMw^@9x@a-1gD13*-UlRVQ#a|J=)8elS-(~T)gzvHV--Lf}@ehQ1q<*Eg>i-Kb zuy{gvp~XKFUS#nvg%?}=YvH{tzE^mO#rFyCZSg#rA1k$ZC*frlKS+4F#k&dbZ}A?& z2U`44;guFYLU@(Mj}|`E;(dhISiGi|-SA9a3b?sl~eqf7;?bgtu7yP~p#8{0QM~7C&0}8jJT4zQN*sg>SNWKjE7#K0x?u7OxQg zro{&ff7jyG!nav`nDFfu_X*!&@jBt3T09_pr^QDK-(~TOgzvHVrNY0r_~pXQbq&`4 zR|+@RHOMCjH`g`DCkr>%HOQw5H`g`DuM^%&>UBPn|5SL1#V-@C*Eh7h_D`uLKN5EF zDzmtLPodo6dLFaC#aFr3c=$dnFYT_LPpq`KE{|0f*X2>4@vrU4qXJirC9lh4t;KbD z^jln)N4_u5OWUu@<0y;k@_32Gb$J|Paa|tATD*_=f4s$Yd7NZ%T^^@cT$jgb7T4u* zrp0x63|d^5$2k^1PU^$C79S|Q(c-#1Ml7z&<2;M&@;Kk(x;!qlxGsIC_EPjjd=PlkOyv^cK;cF}& z6TZRX&B8ZX{Aa>9Tl`+(uUY(l;cr^}A>r>@{9)nSEdCqe+b#aT!gpBw3E`hw{3+o( zE&hz~T^3(1e2>Ln5dOWz+lA{F7x~C~c&+dP>F;R1QFx)n*GV}lvbdgKE4KKDB7Y() zD_pep*Z9}#+Gi5tvbnC;HOCj3)iqe`BkzTOZO<^_4E7mNYwkDXaTGy{kIEr`g&}{0 zAwMyfJY;y$-HRZj-PLc-lC$p7{9X#<(&5tFT+cG&$7A@1T*pKI9K4zq8Zu@7P!Oizuna6n1{$ud3 z!_}7%m+fw)i&grX>2iT^%1^|-|3`yIgxmJtZOH%0kYAib{`ZEw8K3KN$m{-; z9shhsn3wIJVJ=qTw(|p-~~pynCaftNMAGm^fdS&!#_H| z+39|~AUCugC^NS2_%6AuTr=xb4_M7=u=X3IH_}BLPpyoyX9R4*o+l7Y>9)X${ z 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

      8VQ|`6+W$#`4~5_IdDh_6NAh_=&`Uml7r5l} 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

      o$RNZf@;h*SlOk10npapKFG-u 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

      O*A>%a3b>zbmT`5wp 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�>c>USWyiDC21!?~$ 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 z�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

      uMEE_ud12;%@OM$q^87%)S{=^7H(I(Tzh-=3 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

      =eb(8M9LsN9O^~R|0>M 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%0DDx{4sl8p?ohy{(Y$DtfKC9 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%0DYNQeb8+s!Wp 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 p%3Gx%S`e8@=+rdb^FqCMK1bx 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⪈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%0A_wGJ@^^uP2W4?4Ql?+ zXnt40d_>_DvHu-vKd|4$5$L;j?8n*(OylJn?!}w{;jNI*79qfOB?pG#$EX;f&J-~qm z*Sh|Yj#Ia0E1s@Vqu)RV~A(AD$g}7*7T@K8u&Fp^ri^ z9_s1Aqbau%Vdk9rGB(aA76QH=7Yac%^CwYy-cOA3S^FPWCk3WHhAbRn;EfxP| zWBv8?;MXA9#agrfzg|_lS7N%(%B8E_71J|TF7NB>Shk@5y1t%{j^0$q>h=}=%M4IpDR{X< zaLUxSswjLhZ5AOs-R7j;^YB#wj#Rewypwv*JgGO1P*VK;p-$l8$n{r&g9DZu&rGifuew|kw&&fD3H6XZqDTbT-+*hQOySPSU3;ZhF zi4Adp)$t{DjN`A7yCVNb9RJh;-YPEkqU_!zuH3-y-0{Tm$|~gQFx)>!0**7Yr(O96 z-hq4^XZBWcWd``oP7We1>1ll{ z-43D_iQSc^oLJvVl*15J7IwBN^{q7J%KB8g)oB(%mmcMZ?Xpi_K)#3YT?u$U%1?;@ zR0s~?FQXiW@U2PqB*x{7VamS z^U9QePC`2TC?WlCO5ndC0smS8eo%t^Hzt(NAHx1nc|&xA_;(WIoRXk7X>SRB5en($ z`CTFWy$Sfw6ZBSq|8TeZGtRKi_>x+ZAm^e4oGo6+9;kJMU?t}Z@uMHf$4`u5_Z&R~ zZe81YiNTu;ezU>Jqx{-`r+oet=hP7rvM03wKgB;y5JXdyTAmUs{rTqN-N+LcRKgC-N-fZw|4BljLeiI~7&J6rij;?KGy!e4jaox|I zIP0R~Y&S@hb2fg8YkNTa9E0mzSIRlr;Mt4>b5&;U@X=ZF#PNzsgC%wf&#p?)yh&SPTegfPo zpZ!}Brm%*()pE3Ab;8yuxF*x&1@vj-Y*5EH2e2T%(H}SQ0zSZE?o>c~K zG;-c=aBC+&LXnsb*3N%7xV7^~2Df%jV1)+x={Yk2XFo*wt^GF}+}imbgIha4VsL9G z&$m?hQ{d3_|B=CMdhRl~wdW1e5HMbiM$Tylw|1UyaBJsf2Df%DHMq4?+hOXp?E~E; z;+Ns4@w$m1h|zcheu}Swn?!!j-&Xwn1VO%>PsOmqZN2`i!EL?1&)}!Qt@2+o_#A_O z)07`ue}62vZ@;b;_U*5f{POv$1^4-nG4?bWdrlUd!T7eT_Vd|6BF;8naocW8GdTMU zBG^*S!X}`Q^T>NIKa3((yv3kIgT>7m$2>lHk19{5r|-TlsunCh=nPOUD)| z-{wn;kz?^|jU1cKCs8qt0^ELXLSPp0fR31W@mKsN(O2!^&kFw$ z9*%i2jwX3{8wG-njV}dzE|uq{1jCqY=^itY@DsPAf2?aH;;M`HYA5ki2nf~6mAIC9 zLY9B3@bKdEE1&98Ic%Fq8TU7~=Uj2~(jac-*XNCm7su$7I>n*<&2ryuaLe!8!@5e! zxWBPI=ZTw_263zWHo3Rct|gtWg+{^Nv)muf~7L|or_d2gRP?6)Z0ZTK?^;`-kPpKS03 z3I_2q#ku5bxG%^00o!?XtTy{ExHC_S`)&B2nB6(4x>bre0$bsnM^%8wd_<-U#c(`W7WYJVN;U+uD-%Yc_-c-16tfvCAM^*MwB1M zYT12D%DLSZ4`or)b6PPgp!w3~`E9sYQH~e)`$$Fjx-(7txw}d+Q`BRn2-qv7YZ-Pp;g#E%&=(hO^T6w@xoyjP+ivaX zS(R|Qtl4M+rKzo}e}(K7vUGa?ilx_etgvw@OR@IgHX=r*+vUTgMpt{=%B6kn{>~r! zIt(@rT{r^Pl_yq^-hQ`Dj!Ri1ogy4OP_`_tWt)5;Z5?K! zr^Q8Umh&&$a$|Wn_pxc~Th+F-*X>!MQ%-`rRyaeN=PsOomD^^*ZBSuUvT*sf+T`Gw zzUBVK%{s#V#q#TiZF70vHhXT|4ryIMWM<7x@pRlmg^#y3a^aa@*v6z|weFDN(p~o5 zKu{i*TsZQ!=sLH670%DCJG+3*D7f}_mTu{G9IxLIx~}1_M2AVbB(^nAP32%NsF$5* zL-JTCAa}q;OuB&uyrJMKb!h)g(HjwXU*W5iQLfrAQJ8x``ZDR)&CWeYpUHg3U_4cx z;%`OZkp5N%2HEe=y!Z9DAbd#wTG8)T=pY>RGbw%jbxHc=Ijj8@1a;)=KRrSJJ<{o0 zC*i1{U2k9i|4m5$dqltTi;z(V?Wj8Q-P-XZ-P1Nzee z{keqr?;fN6!G!ql4Cp^Rp#S606NzHf)(-z|*#{XCXduK#@qABundX>o{F z6Mw$9`1&7*e@OoZ4%UEleouT?uKybd9MZq`^f*L>@}t9<>}ihg8c32k9!fimuI@sA(Z#R>Y?bMPFr#r=)r&-XN6 zKi{*M{t#0_J4AnH30e%V@N)_2zgPxDB4K3w`QGR2=N{`J{gJ%<)~h19YIueDJ=#wb z`fU*Xw*8$9T*GVo|28}nsb9x$7?!j~^ly!C3xCN=(ksuvpxaNsNM6$SXaB(n9I}6V z!2TNO@$LV2vBlTFM)a?Sza_u@_#8Y#`gK#QbrP8Q$0pU+p92<(zjl0DCA?mI{e$ob z>0ie|P0$keH!in3S`W3>49IV~VX$hkC}!p9-u zfpz=!cejLJ>v^dC8h#SOhvL6m;;-{9nEq_iG`yPk1_bt0IMJ(R5ND5!chYW-WBK8^ zH_eRcnF7@oTzaN=j1=~!sXJSa{T}fH^!B-d-dn%Y3mG44aD-mZ4v}UZEtW{Z2p10U70qgEgX~{=bbFfMkf2 z6g$z_J_qZFTp)(vGiKx^{NY;GJZwig>-G@bRbpx*c1(a`7l1plyzd0)Xu(Rl43E*h zP8Tl??0DtEzdeKSw|aJbtlXEQ7P=tW$uhop7hppvnKoy(F?#Yl*93|dzRt&gy`e5Iqcl z%^m0#@~uRZjRT~sMeHUv-&W->VZQqDmD~F9vs#j06Xb@H<3Az8;c-!0kJ}L*^%f1B zk1Fwb_4TU6wTffAnmFL!0vVl=9k>{wSVKd)mMdNe^>HADx{%E;O3guonawwkt!QJz zB(9pPDp@s$tputI`#V(1b_ZAs{hg3S*QrHuB)a}b<{(xh%h}#=OQg7AC}w+WLUE)@ zXIUXl{tn2$sju3@dR+bsuF^7@$;(vu}8*NX<>r?P0T4L zaOB;wX$N=(-<4iYOhRGibEO(Pg<-`rHVnC@CgYwD*uCPZP3$8$IYV3SJT^V_IRwBC zBAbCK-2eTNH=rOFqL@!r?BqJn_T92O!hQd$%xDXp+Ap)n< z9D69tgXLlV_}a|}eD%mzjY>YKC%FedHe=cQQn-EpDFTc(aECS7KjybdbkB~%9#^L1np^&5geiaPb@AgrcsUE0@~X>r@oXJ!{pOgJx-N-giY9;HL_7 zi`%;XywnPjn(FRZ)!xzDOXjwCTl;RJE`#>Za@)QQ^~GPg&Q@G`7{mw z5%D6f_edf~n*?7g_Xo>$z2Kje`zpB(3H}+mmsjOfkKq3%I6HBqHo?Cf-xj_(wFrK{ z;94zb3jTn{&$URj|2VQ{2ULp8}g3FLqYPR4DJpNk2y9HOh zT;oG~_)H~fIvg+f8iy9g4tTya`T2k&O^h$8%LVV0drjwB;N#2)*;euYsl!#9lri{S z;c!iLDaR7#^;m;>6%sa79HRuBbEHH39Fqy*FDKyR66Ej=Hzeny33BdBkh39y|HcIV z|46`pm4GupLw4SlVE?@d{QsID|IG<<-kX4PAR=T>Izc|?8in{dXFi1AnjoLNA^vj{ zSl>ys$I98}&=@}&Zk5A!l0<%sA6wyIhu6cY{AU>4>WvJ} z&yLD}gTbd7yi0KAW7^<)ZYOc}#Z=CnM$V}QUvF@0=RX_V>gAg>$=CZOgIm217&%t& zcMSd($WuG*+9IoWhmmjN%YiDAAK%{?`BpDSl}XGmtCwrTNxZO*t38tq&TsFE>zovN zv+tm|or`{o!7may)XP4f^7DC3B7O{hieGJT_OTRSX>fiXRlHAd#%YGZZ!`R78vL&f zZqxZ=g7ae2`5z2!^Y=4Gj!oyy2Dj<_JtN1a^OFX*>HLhrZ8~#}KZ)sP(|M1<`T0rH z=WI4QAoAPzULZJw+4!>mNg{6JJIBbe@vU*(F+X*vUipOY^sy`g)g8Tfd4Su}g|DfR1%U-L>(Qk~DbFslc2RDiQRro3YR|tZ9{;$Qb z<39v$<^Q4JKL5`QZu4c-$g%nITZ6w5Zk2D_VVf^@Es~W#*|Zy0{#1io`O_2H6P+8v zcv<;Z8aY@u#N90jQleoOZ7fx@BxF@82q1%d~44=hTq1Edy>_)Bj2_g?=rY;H-?RT+irZq;5NQrGPsTJSB-od->n9> z@%_HRE&nq{{z-_Nrt?b%w|d91(*W|ze_C)qAEy}HrYFylQaLs~8w_sK^HPJ`^ju)% z+w{D_;I`j;hmm8`A#eC?I(*9DHXS}=G1!M z_bu>sRaM?MNudFu2^Fv?j|;R?pp>K(NO_sG3B9pt8`}b{fN7efG_*})asx#Xf@y$j zZ0RT}K1MquXnj{lv7naJ0>w8XA|omV9VCWo9kqh5e*gd8Yn{99zUQ=MX8dNp`PMHt zXP^IBd#$zC-e;eE_Sug;2Dg6ri;-{rFlMY%>-5@kRqkQ*T^5e_Yc}`<3G=Yn;Kvy} zEn$`i%g_FD5^>9amqR_y_uPm$-KhJ9Xg}`e1@jj#X_?iqU{Oosyi4bseXTiF%}x54 zKWkCLq86F@;U=*0>xOO;+uhpJ+u`@z<~)+i{no1P3kfEWVE&cvyq&Dc&couoqAYh; zUcRc8ds8>X>@AI%Q=BQK6R3<@`HGV;bBeM#zX$tTW0F+Ynrz3^+4C+t3;Srdt#tFR zvTL)`u+^@ejKj$~!RE^P$;j+|8$m^L>~xA4W$3Ihzjw0Exx#lNq-5H%zU6*4S`WMy zvx%~qKveuG%9s*!(HRv@$D$WFag3j;?5@SpHp${o@uieF;kunH229B`Ki??g#~*O|JP1}`Y|dDX_7@% z0|T|JltElG&yu_rL{L3K#H2cm@Y*O;7+`&D=?p~PU;G`G8DZAhmN@z@l*#K=eEA3I z`x)agDOwL}-Kk^1L;EXf6liIX{!o9?81TD}@$t8aag4`De5jveZ{pJ5E%Ds9PcO>- z5A}2X^SJb9q_SUexR1w>qsDA8rcpAqQ%kk1#z8*wAEY=(3}0)9&Z{;>o+X`SigP_E+iLQE{qzUT4L z2&DXd#knYUU1z;N*dJ`yX_h8I>Zguh8W`YFoNdwZro5>fdf2WHt^Dg?f809FT$gLS zDWA&Eu_xm(%0Wr-6%Ln<17nYtd|Y<^(7vK1Ttk?h)VS`l{L(D8h3FS?3a=&g#3ilvR3I^NrKiNkXp2VC zUOL~+WY=aY&``WEQ!#5?5{l!w1)T!f(%&{`%Vrxv-l~D)VTCB>#zRC8) zYx#IF*2D{mXDsN0ic0u@Do~9ZRqK2!C@nWB`=%_h{;|aRhM28Oc)gbYVu;U0OA`@! zfAMXd!+2W1s|?QE3}y1#QmMqWKAi}R=~Q`&b6fu~(a&#| zp?+QeB&@$4JxKjY>!0k3(a&~UsDC>!ra!EMcL5{S_(Swx<14^Eg}C%rN~4VaC9(Xm zovHD)Tz*UPe;Sz#O`uVrrS5@^7W{|hkc z*L+6MQ8V(DbfCWX_ad^m%14m@zmfO_AWlMFe*3^*QQ!L>iN7llp!O^LMMREEf0evE z>=8!#{}lW*zLwt^&=Y6sqjE!Slq2nqyZ_ktKBM|&^u3=qLwf38M&G+BbhWU9t)t`M zwXpBK?(&7rTrwng^u)~2c{16zG54JAMV}e!#Y9y1Mwo{%rFr1Nax6x&1M8_=QFnRW zWp#@v<_E(0JoUMm%}*eJZOe7x6HIpAa3i3(xj!}z>@2U|y%AS*u6gdErlF-+$l;eV zh1^NO5)V^~po&2jK{KHq6ZwxDc@o%02S(enuX_*}7XMKFGakBe16C9%#}Xf`#2N=K zLFfwzd5e8I<@3X~g^EAGLa^<9_!mw19qo#XQL8Z;s`vUx1+#=l=fp*7(nyU%bKz?D zqU|GJOO3-4=Ukj1$$pz<$ZyJF7kFmERdrX_y{WF{>K$Z2{_g+V23Irrzd@?T6ho&r zyl=wm{_9D>ZofSpZ|>{t>1bHny{faVGb+gZcKs`m)M#%lhta^V$jA z&$ets>Gk6fs+>6v>qmfRvG5JiLB(@?>&Dd9b;y;Fo(i`U)~f@YMl6Q}7Q8 zE{~E_TJUuN{}!B=xRJB|LXBL1gTvW->8V+coPSel`lw$gILBq%y-Z!c$hH5zZ!rbE zYGMuBt+qEcf`RALtLPpCSRO*U1Ad6ZSsdf=>IA$sK@R7Q#mSkOfUilwKLI>$FUlXo zo|p5@qCdg@l?gc4|2WF*nYjXdB<^h$mo6=*C`K+9w9j92iuf4(6lc4ZL@bS;;-?`@ zB0u{s6hE6FDCD>DnfuDG_bd7N4x;!O2$P80KL1M{>T%kp{8tE0d-zlQD#0n|RD<)G zO(HLSqWo(Jfecx@#I4@54ZqcUo{?|U%kf^M zFuk*l9Gl(+hM(O^>K~4qB8B!`Yxr$B>@oZ-lPV|aexXlDlyA%J!SGx8Du?Rrm)}~P zlZe}I85xIq+}65!uajTf0%WZ+{Q8U}#JnJppSWI2BTORhnz-&Pm8zAa^6PWe+GF|C z!q0rP-)N>A+@?$KQ}Ww%Z8rRxMnYdTxYjKW%6}0Ezv;N~KDNbLxQmAyEFJS%r8t_| zf1_v^wG6=JfYz9?)dwX$=^IS3A^HiW=+le+*b|LxcFXTzmyj+DV{XOZ<=$wZv)}$g zhHLA1=iZgrvto78=a~4x(O~wA?f4WP%=ek%o9{tT4I>2IbGkhX{Y zS#ewECx{%UU;BQSN<`|5`}V>;5aaZ3lz6t?O(;zN-xBm|->a^@PW^mth3RJ<9;ZLe z3KFF6Q2wk~KkLxA^gkls?y4jr^&f^`sGsv%lr2oYj{e(jOhlu|09;g-l zE5v?1XnZ}V@p0*&ERM?vBhw%E?d7Aunf_4!X3<|G@%0eu|1d7Z>F*Z(*8j{ajZb?> zYoUkwr@6EIzg?oA@-2~Jg$i|3V6sn=;IglJ?psrN32kU)qaKh5kFRy)W2(mk?Ci9 zPUCC-J&yR2RVvaQbzbID$p_lac2gK1ea|)3=cgk&(75mEH8nM!`QZDW7n@3?)>&7J zcdhuo=f>OCZ$9?{IeTgy|~ zqYW3mt;8!G&d}0oL`^95Sf`B%h&XDFjTiZ+tI@X7E`HtYqDv7;evE(O4^;f z%Q($bE+5=)Ncq%mEu%$|{+ITRy1u=FzR}WmYv(BQXt6j#ZzE!>VzB-Icx=Ao_xCOm9pp!*`jP8){TeDAby(fsX?Wv^sNZj7Vw2h>=#z{NWwCBw^}+X16)7|WiDUcNR(9Ob($|aCty{V~dOFv%o2<~G#4G#uKa!X$85Ft7 zjs$i?hC|CN1NRDzk>Ka67f+Rs?cge$(=G+=KY3uEg4PWMqU5Goz#GL7?=wrhzlr@v z`?MZAKzyywRHxQ6dj1^*SeJ(Ms2HU64C{ENQ{^enHAxf){rxfe`TPje&+RLyD!d1) zME?pJVMyaEv@}7#_NiL`$MtEk{Sv4DF4143isTsT9|Rs({&oqY)z9a)#@G9A7U~zO znkMq~@Tlm&Q~@~(?BWo*5I{*cMJU448{7e`^X;}Z9L%T8R{v>v;Card`!w;#`MWISdj zw<9xz4dMQ{jpgro{IJK$LUfny%LBNIJ&l@j&$`QQmo>j95e8a*DKoT+I|)6H&6sFN zI8u=UQ-$M4v8~q86P>8K+(Xs-au0j0+#=^L@L~(0hQZwx8#sosdiQd-KU`+$qKVM} z(uXqxYq@3HN69>N6LzfISF!HBIEi+C+5uSif#NoJ*n?#qU#sVm^V0|vjbP=&J(I(J zb8FquRIv$3t(&pC@0JmMPw-Y24jyenG>11-{~~56=m?+raq$)^-Z(T*M}tP&4Rzt7 zbc$9#HM%k`{u^WBd;KQzXjNR)r5ZKHUL8OiZTsdsY;|`SB(f>DD}FpGTMTw>j{T2M z9gVvYDdE4EcrTN}x-?WDUYBv9bL*O$8|TeV6`n3kb@ul5b@bG)S&a|jGWN8$Z`rlj zT&4gE2cE8O?e0bE-F!I~1q)Md)Ty_X|FJcdqdfBW36&>^jjLy4S^pRH-DZ%$DoNx$ zJQj~vojq<(i5;+7nj2SBH?C^txXClerDx{1%5h^~`Mf1P#X?vtD;)d!(Ei50KH?g*#{oicg=T#xW4Yw9Y5b9J!w6A3Qpt3`Tin7FW0S(vvV%^ z57gJqrlj_%ro9=i{d|(a^*(2PPurA#iQ%7Y@M{zBwFW=U@DCW=>eXg0^;(=^5^;`a zRC{I<1ci2Xdf4G7Aguh?C*bcE9By@eyvomZCyDZH-~PWi)Z-^3to#odobMZoe_L?M z=TGq;7@Rs3|Eb`_USsgz8Jzvc%Kuk`TfJjY9!Q~HmRrTG-eUw0^`;F!>v+{W-SAs` zbi6I)SbOS?9P5WU2DkQHX5?ExEH(Vro;MqQYmd$i4eil=Rzm;WYUEpcHX8ZX9`-?! z$ZPfT-I7F{wXyn*eQu->zh7|LGZ8=K|GME%8(g2aZOn=Y!$r(^=)K z9GZ11eoD0xAg=8XLK%az4@pVuF!Hl+La9mu#Pz!hAGvSzJl|0TtK2`P>;6|4WY zu0mY-M3Kx5o;cSPIIiea1I`?$+cJy3Vu%@#gI~|T4mt;kQsjZeZ-DWvwmoNF1Ys72jTa{nL zr!d!}(bn=(8;-W_oR%$EgxTbP8GRkS|C-BjugCG@uJf_|$0Ig3 zcj(ufEV#&e$kMquAts+%qD!?=s4&2K+Yqc57zpPZ7wE7 zW};ObZUbCcR?;m?e%BH`cF*of2~yN>SyYY`}V}PMx6imh<^Jlp$%dB z`7Db||6f`WAyX+r~XvG)QbOu+bpHu4pz{3LmFQp z&S#8E|5nkT5k{t;&r^-B`o95;{txx96`%&!ENOhj9z-BczYbTj{%8A6y|3*3BniR z7pH%z=wB-Q%s;ljL;Wj&#pR!_-#%I5>p|n|c^d+8`iEoE&pgxknt$toQNQ{LK}S!D z(2pn}N6j}qz8wJ#Th{AYS;kPvE8otGzP+v0_(24qsH9cOzzKv-^iYzgUhju$x-?6&GSblfj1iU?i%*^#8RL8lYHLE^Y&FJTkh%S zsXTwFVgpA)4(`sjDT^Pl9!k=$Uqj91nW0Q&X7I7>=^0qJT%+Zl4%803SX%K;7Ol}Y zL0BgD-O*a8EtXTU?mMsuvMSc`g``N{$abQX@I-;_PW~y7|26zlP3zCXe;g+9Fp|bU z|7|b#T^GxJSM;AQXFOD~{#Uq8nf?=$P7=sH-IV(^9N3h5CZ8Dnl&L94EF}KpO#Jx5 z_@f_Kj7~LT0Jv83x8@t8gi(y1$F*`W$?G%10w)bt9KoUNZ9>}P#)2Jhxa?c6l z=zY$f&&GXJqi&G-);sXRgu2}KWHLqWMt*no4$I^o%H(!Bv+(&eldGRtnaTNYwD`sf z)7&MuR?piZ(tY%;#fMXTa{VaI8{2m8do+Wu#Ff?iGPz%2Qbr_-EbnKOp;=Xqf0v7o zv_6L@yxNY;<>Eg&xx*FnhU(p!AsC3PYRnBwV(T7YIT+z02zA?kU0FBqTt(f$-^wa( z`yt@^++XnpR2D9JecKURG9}yhJtI;_=Qg(ePz>C+FwHbV_24!5NLDCm$VWS21+%-83tACuI6+9m&?p*dp)o*Cl=WO5H9mCj*4fmpVu zF}Hinh%}6XIaT z=tXj@RzbOux~=?3=r!kdj$Y}c*5`he8;P*lF4n%x5Z^$!mXf<7Ud7FR{{Uc*4b5VK z$X4uolq)gG7x2+Tak6jWg!k}pGvAV#N71ix`BsF)J1hO9;5%WXeEk;0RqKKEN^ zIg6OT3v*A7mR1k@n%^z$fri32#lYhhn^_nMw;NBbqHox0k4)^xU~ zC!c?Q_4KN9XG}>iYwhi5Pp|1p_e`%oue#=(w(8T{Y9-TYVOGIN|t+ zblZ$`&TXGDqy7B0<W^Nk88G{{L60IpR6y6te+g5toO!#^RFA% z?B2&vS&?4Pf012v<0fOo!N4IK#@tbMYw3+VD;Rk|=6E_3HpPAO-wyT?v&x3P=iCQ= z;(9LTq`oisOi`m>IX@@(9KrQ#{)Ys=O7K_8(f8>b>H2#JsT}TsPQCJK9=$ibLvVdJ zlvjq-ErP3D?PK$EppSIlKPX>uzvkDG?z>%>e<%TeBtg#23HWaldT63B})Ha4ToM;FQCk^51E2Yv(@+9@_aS zgHJSa9yD?eH~4oAzfJEG2Df(p&fr%5(I_V*+HU2u51JI(Io06SKf1;i`K@024d41_ zfzfOI!}miHYH~iK=A56gSG5ACyXSZovsn8n{&|8R;`*Vq+P_C| z^0TcGeSaIWi5qMhuYReoY5UgmRP(C}HjS<z~rW9`= z2qJFtcZoxb%Uh?xt^AK0d?Las{|g2`%iwHBk*JqH<$s(YD75D(54&{P^2YW9iRqn+ zpUT-w5Ja5!vf}P#73Y-CYll8+H~qAHD~^pI@xVB$x6|NOuhu`jY|B-@@Q3#B{gFi6maESi`3$Pw`wVXN4jVZ( zy^k2&ma88a+?Ff0w@I{zb&=||&rNHm>v< zm?We8y2Tjh&bRli?r!PqYVYXErcB&xI{ax1)HKXn*f@V)3!s)YZU#-tO}g*H`jUPt zbUz2an|)bMp1aP0P|LgRz%3)*&Dc-AjL}lCwJT-DLvf`_3J45}deip5shD-bs*bK} zvMYQVdaz37a;wIV(_;E!R}wG=bteqal2l?9&gFgp*Q^CgnitLYVG4G`vN*O3&YafO z>9-$q9fjclt(f$3Y@K(vWGQl`s>Pw5(^?CMbNLZhGjs{dgIpKD$2v!2RYyx;MuBQ9 zhUvMAR>f4j%9ZZ_^uG$+FsvU!dXbGW&{Mpj49RU4Aw1`gZA?qG_QZr)UsxK8$oq@0 z@BJFb)&;~$5jm7ee6ds}!;(1G6%1;7P1{vx1B=tI^`!PwfXz{;pY78){S%}TsucfG zKik!z{yD&?KX7wuF_}SW_dowH)O9H?g&4UfONZVtPe9ZkH>Qj2)VTEbi+=4#p$t-( ze#(r~|Gem5As4Bi?}1_Zp9dDFf2lCO9@i~}`hSj#ar&F3{AMIF^}hnYQ2*EAcXkD%d*34yH=-(n1hynNrnU(uKr zjb9T)(DbX^f5!DV|J^12TPlq7AAPU!_5OJk{1=v8M%i;X|6^>W2&Wl*#|h(eOv}sJ zA81<5^yz+)#)Ds@ap@ariKkk3s7)<|*ZeoD%)kpZb-5>Uzr#n^=Xv#O_zZ@x&e`h+ z{=6@H`uaKh23{(^esb=S%=$64neDsq{qbV5WlH=9t$*KlMP=@x(MInTf|A>jTjXQ6B z5(4O{Ozv4+-^PwgiOmn_*WioiKus#^*ef$bZ{-B_?6tStJcc!P-(^m&deUzMw2gaR zIowam-b{&)>9_=F?H@hECT(O4v~TSP*T6*+_w~JI^aK~VG3QLvFRWW3G*x#PwsG=y zvO+g@z8-eg?Hx0*vJYD?{c+o6V7{NJa-s%@Z#b6d3gNrTX2zZeW{}(RZ=4E%5WRg?|17Vn%)*J(SM$ z+13wJ_TVB(ymu3V)?gL_dJwrYX6KlRo^z)-uVTYy08RdO89i%jEza_z4wi4MJIsk6 znlcfio^n%=Lw$kEx8ohOE8i$b^Ah@ekc$mVix4ZpoF}LGu~QO zqcF1O5`AD~ibBTd-puXD2cOoFE0B7U7?f@tx|af!3qv;6eFUBoO)U9&O%q}?3F8Oy zHxNup$1$$QC=K2>*A&RC6xMMV?=WUxb}S1`|LBCB7@Pt=*b$YRJHF`7UA=M&V&(0c z9H-9T*c_dnXRL~0lmcoTuz}stP3u>|T-i&k4)K%$PQ)#)g?SyjmND{X%)pKkRP19= z6){Eb@{Ao7>zh!91jD#1KX?VVMg~Qs?Aogq!;rwTy+})R8qTwLZqsoC&u)!;3i#d*o$|(8Se& z8dUfhSGbM-;{jkzk&QG;2I~yejL9B@yD+j7i<;~j`5gv#(6S6hd=CB=CnL|`pL;NH z{gk2OC(;+kPgIA|4PStzxOo*aWAZeEb2~0x!aLMGVM?MQdU$AjRtJSdtSB46uf)g` z8GCd;+x7Rcz%;FQO;qQ9BshECz>d!j{JFg1whkn(v2Dypno3^Wx62tjW`xdg!IF_n zHCQ@wp#)1x)m+>w?lFm)Zz(bte?EijhHj;zPxPY^l)Y-*@C~u6io6vW>+JClun!|f zRI#dL`vj{VuDDl*zC=6Q+3Qd-k{)>uK~dq`GxCg{p+)`ywx+k;VUsv= z29yK%|CQL1Tt9o?z>A0VoRJxFrIQ8oR5wPI%|I>IXax=qyJ3qJjoUHwsb+^eaUtWp z!F_9w&;4y+U-``wumR%wBhdQ9XiH!0GbNAgs2;|uMJ{&+9{wYXZ9v%Xk|wcb`?vM8 zU|0EdCz|Hz@kPzk!|QSAaZeVqIC{r5(2ZWg3qyzH;<=O|DgJvS@uO!x;NSh9XXs$$)(3=XZE*pDLzkq$ij zm!Uc31J9Hk_Wglxl;-B(;e|1=xmV!-5xF^NL%bD_hgp-|t5w4~Ogp%k$%#ry-$?~a zSYeH;oZfX6>+YehoF6EOnsJct9bfw{z>$sk=S?hJ$BH@Q@ao;Zd>8C!O8tXxXZ)?o z7qqL{kWP+2atkh_C{#b?3&Y#_JpDBOeeIhXuTY*mnqy31re%Ci(B(gj;v>fhJP`q$ zj_~XIf28NtyWPuWCVm8SW@zjXygTm95`Paw_pcui>RqrI?1nqUJ^6j=cX_#PA|rIoo^x&m+Jyp(TF*zX1~&#TDGp z*g^|3L$fDX1m|gcJ~VrbJxw)x_0sO-AZgSPXUokb&5H~cj2n}0bVv+r*T9J&?-^c# zN|;rdqsv&~a&pWzTJ5Uc%+MwD$jNAX`&Rzm>@iM8Zu`~~!G(DchoIKE8qLJFqGfSX z^t2!9MalOKVz9FLH~5V{jGey{jj^Y)OZ6><&Bp+6 zXJ&>LyV$2hT39^%nCVDK#o#K`h1J8(Do8f85c!%JdSEebB$ozw>*)R=<_qQke1-6p zE|ablhh%bJ-i3?mo)qIt;;V;|^2I|#Jl(s!G<(?I0lu(~$=2`PUeZ^W`{pgr)~1oH zy|?^{$J&ZJA9k;9r|+ER%Z&`1Uon52J~%+_8NGGZRX3 zkEkiQBIVO%i<%#m&%FaK8Pd$_I|k)-qI*e1zlk^Ohoi3qSh4jq3hMW-*Ee8Jhn8@{ z+#VX6L%RX}e{nic^~N~6?g2g;;Jyk!qrmNKjP4%r{?bMBGbX@*Sr`5}hVT!f7dTUU=xF9BZy-}zRPLM&}~dpAKiDd^XcB(oJ;#&$!cMo^JxDAgi<%`Mw=#z zAC;G(0ZJ&yOEN{*k@90*3u>=pEX^J|pkv-{UkS@*kEN8sHslMOt}y z!yDl10(0Sz%uoRzZ6#U$@rM7<%usE)73|sf%U`)a{@ixye!@*w>3vd?MK{I3laQQu zNMujI?`{RhzpH?M$aOO9-99G!it6FLuJ5KayAqSk8hHyl%-<_l@FrfEdt?&tT{j2g zVurF!xkmi+1GCWRq4R9C8KBhy1?CXw`X5VuGdr#_irO# zYHj5XCyTKwv%kwdx??LGo?^sa`cT~0~#=6zC?y6$zF89{W_twqMTX&II zcP{O5$)r8C*@?#5&DpWen$ZfFlQ*-kWC!eY)>-?G6#FXHt;e+(8~bQud$Emg@-|-K zZJeLCv0iMvIIwXFZ9E$6&ZnER$NNA!`$})_5uvS-H?6%pD%h_S)M3O7&sE{p=pfmmb)jn1{01gNL%*tw#T4XfEb{=X+M*g*Wl}TD@CZ0u}2x z6mm2Aul@0mn~?Xzpw#2 zLdZxE1+epJ%B`=n7Q->HnP*#T+lr2s{D_s*!i7zkk<`f%CB40?Bt+1yiqk_-Li0MZ zy=|@C9cgp5t2cjr;n{Ps@kF|}^O`O!-;?TH-MPAhCn>qm(d80=aWejzoTp|jfHH~H z*0ah*sq4BS-Hi0D>Fr3hcHNMgKWkxgdPT=7Y~zqx)7IN9!9`G!UYKoN-5p8DQY#TB zXTid{6nxUx-O}C-H%7$T9zARaP2?>*Xl~E@a`;&Q`8!x*k$gG)98lBh_+^1>BEP_l`=326 z4+iGfa0}<=)!-V(#E~}hpPjc>KW?ecTff^6xXeF`f;__jVs5M#&Hx~iQj|7LDT%ft;5GwB55uE`MujX z|F3LAY3XX+yUnE!`9|W4EbY9EvMVojvL^#d%k}s1I^ zd{FQ<;y$gk5oukhNyT|-t)5W+ixNlc3SvjlZV>Nr60vj)HeE2S2k6I)V2z9j+e&9S zN8-QV|7e9=e@w3D{dg0c-|5OjkGU04 zC@{Oz`>HFdVu0Jl<-S8Ke{zV1x ze=pZhiR52ZaQ$e>*i)nHR~KBLzMtz%+akF>If}pBrH$8g-_`IM^YWb%?*ohnBDP7e z_dCR6UleS!!5$Ipvj+Q#V4pMC9>G|Dlc-~i6nH+XNW>-x*5wetw&xVVeo72}t@CvO zX785%$Q2e8O5Uf7gij74A^z}fWP03O-qTS=OH%G`auJV}=yUJ@BYuwDzmlBPKSK_2 zS7yNL$`#{)kGRHH{QZKnY?E9+KaLAgHpqXz$mjEtRO0Mm7mBBgcL-{s*P~Xt4}$+A;Q(aD}j`zW=6Q?+2KfFX{s*5HGjY5_%DfYEi;_^TWWR%*K+es zXXm96zsp0MrIEnWXtmRP-FF8vuQXL3@oU+5m6LN!glqlW3x<+t=4ZZ*@ig#KcgOoE zZ4$F(Ecxd|a<+)S3H*1=MfQ4+jO?+2vVu|V`734lQkDl1O5P(g?>8HvEGnHAr5x56 z#Z=~2D2~H9D!-V@qLxhIwX&$xhq!AE6oNP_OQnl20%dNNN%5sJ*Aj`tCl!NEj^4e6 zm&>9ZTtocKLO{;SQd1J}sR?*h0NuMm*4GWP^6zEqaFpcn*F7R}Hv zyj+&b-|zNHnYrH!@mhNth09ER5`hSmnfj*?&)08-c)orp#PjuAA)c>)3h|6RjlyN9 zhvTTs)HC*anW;|-@qE3l`0G&r@HrRKiKyS=@Z(WG#o;fYev8A;PLT801pXIL&&SCr zK|LIYADv+THarL8`2T|ELL6S1V9&{LOdLPk6mj^R1Uos$H;(^%33B!&*nb(GQ*m;R zOu#ueI*$M5gnYRn!JnN8`1l0>+?0^6;RHWlnBX_AXBcOHI>DZQNzi*%f*%?Z{O}q0 zf4rG}<=*9x)?XqY$D8LA%Li#K{BQSx&>Hg!q<6gA3BdCqIgVaLV7z%ADgFnf%dY*< zApB1{er>g(k3sNza2#)*%lgC`@9cLif5(YrI+}_9Od&k0A*5Ri`xO=z4*{7WSYK8PA0B1i+T>f%xnDK6hJTK~0e@Jmm z_;~Z&IYschkdX1_`J((tR;>JoAU{s;_nmyrJ--J6Rh*q5=lq2G?zRN}GvJ3fy?48E zQbkpc)PuWRzT}_dS^_RgxQ}jia`Ml2m9yIUC;yzCEPCcRTwC$^{d-=UApaf6!Z`ce zUH)orq@q3LPj~Vsine@v_+yYW-uJe+YmLHjO@jP4xN>!RBuD2+PH}j?{iE;JcRRnq zC?VJXgz(`B@@0yX>(k`WCXD`bq#i?Yac=>NFBZAPXBqyLf+N`}mVM=Cc_4-S8$9gv zE<;%PwIomupW2EqF#NPZ@#O};&ft1qQqJWDf1BaI-Qaf{yx-v8F*t2dy^jmdbn&P7 zQwB#-itv9Eoc1g-_=^U=%;2n-NaSzAPvx`El|(#)pW@X9=UbKH+9yZ;euJ+z{5KhV zAOYw5GAY!%&ERdgu6qB~;Qa=FEu96ToJ;Xje!GT*_47r-ANra56_I$be&!lKB+9pb zUTSdbXV$kQ^7rGX_I%RdEe5x9vX3+PFB15FXYgf)|IY@$%HXZIPf6_WW8I+kbP7&8 zml~Y)5-GI*3kJ7-{=UKc5l`j+DFHu@fIFE{w>4c=q$c7yjD ze0>7$KAwV)mo5LZhTrDbUkq;fCrK3<%3(W}MEqv_G`%f?GuxQ&-^P!$%J5r1=z7+a z^9KA>&U+2NwezzEx8-Em;FiCZg&sut7H7MQMBK_*VQ|a;j|RUPan#N&24|hA_*V?x zVelOWx8?cA25&d~&l%jx`L)5V95?Y5@#+5tBj>2GH~|r_!%yuzR&e@(Z7s#w??fX0 zPW%+V-r)S+rT7Me+j@!f@krFmpYngm;7p3*A2V`ny>y?!ZN2mzgWLLlcLM&B!QW!^ zx{ha@GriWI$D{o~BK}7F)XuXEex<={41R^dX9-RpunJK*a}xO9Y;fz(wMLHh=gkIZ z5>d-uXzToWvexcwi0{nG?uL|&4f_De_Y{9buK1cAi0j}ln#sKH{3{t=Q zpSS-C!Pf=&m4e?M;4Ol`Gr-#f-x%P0pCR4p50O7t3Vv6BuMzx10p2V4rU1WQ@Vf*2 zt%7e3aQ6FYJp+Po3Gmwl|6+g-3BEPJ?-2Z}0sd~mhXee5fK z-wyC&$9Uk;0G}?;gU18>PInKtvhddkkhkE=fgw-Ct4PZH&jNBP$f1QECO@U0H@_%ei*|Gfsc{GT!SfZ^Bn4COC3 z_z{NR_Qy^%c$4Ahvy4PJwm(_R5ApT*sh#?KCw`m3UyU${xV3YVLp^Toywu=UuRf53hA0 z|F6m5rx|>e!6zI1ZiDB)u3{{?!Ot-KPa6D8gTH9-DF&ayN*u(?XStC7x5D644Su7+ z&o=m72Cp*sR)bd?{7HjPGx&=J*R~cfPvCS7sbH z8ob8fcN^T+tNMM1_Skyz+lJrPd%Fy7>#^S(yr5o^2PEa&dgge8+j^tQ;I+p7#Rji4 zxSti~mYePFTeh+TGpL%eGVsEt7QgGc+Y;UFSkHxwBW_L%^UEAhEtpou)r7M>eZ9ij z-gyn?SP3KMleMjE>GqSgTHLI!7M+;m{S2-FnMY1NptH zT4a)1k|fT7Gy9ttXyG-tyl~^ZMGdnX7I2;9xRr`!>13l~zmw=ZpDgOUf6k_smgRk2 zZ7nTR_shp6hnHie=N3$3>uhgnU3CrCZ!TO`+O6>%&E#uYzN*#ntl|2?KKpugZ?gP^ zzo~f)s~JaYLN_c}z`27h9o*b3He<24HKzK3sRuik#d6ro#goK?#U}`Lh-^ENYRJnu$97^Xld{xJaf*MKcPcEX1PRomu7;0?XH=n0s*V zwBD}#ttA`26`7yUkSH%LPhs(oW;aq-S8O(53T5&|e|ws^E{)82>?gPOhL-Nu>sr%NkdH-T;;weA!0O|zt2>IAwZOAtU3NoDZ^Y(6sMrrTub4$gy6r%n%^`K9Oi%=lm>t5E|J9TY$wsqO6Vryw79zZR9y{*^8 zUv=fay`$Z*nGzH&-ENAJ=<=(xySo{8T*ItI9++9TuyIz)toieBFV`W-3q5R?c5hxV zfANx*Sq%#owKUGVbiP@q-Yxjk-w6!#8@w2>NcJ>tJYlKQD9}BX;tUS zj#W~J7qFN#x{_0TQElU-bW@!clqz16oLWsg+ESRc&ejE{x`#{dhhFp!Zfi|7T;AN$ zJf~p^o-{43E>D*AcC_}it!NQ%pmJuV-ZFDxL*0T|nU+~|n_DiOm#?f@8Nhq<8tbFg z^Jh4zy(?Oa*U?XSATd*Io9sUkexls>$AlstZT84J4lBGOuQ?IOcMD>NMu-p82IqPz z%~m~4-Gg@K{^INVqDH9HfE+g=ekhZd`sJlzqwuj0o398+t|NUX<@muk{dmyZ3TZ{xq3EYyBbmAEy5oxDu!Tu38^uv&5wSBk>FMvmYx?|0dCI z`!Faf)c*lsar$fP$emyFpZeJs9qNB9;r<&I{qLg?L!tifB;0@9qTi;UW86diLjdB^ zzf?Nrb$*7L5bD1b@#E4zVWy9=A`fn0`YLDVw3HqzXGnOCw<3s*`Xn$vd{^w)#p9T@3evV^}OaDgE zul?+5L#Y4K1pWE}NxyF}{inz1e{F*PO{}azwy%}vq5dDk_&ED_NqoshMs*a%{~;pB zG5WtXHs1eBMgOa9;t>wh|1jdmrN2K$|FjtW_ax}=7yYa=EQR_vCFs8^M*nmO z3jMz>;rYKs^q*>#BOL0#IpO)gB}PBLM}+#{1?R<<|AW-ec_?xIe-xZ^uuQXx$8xr)_9;E)-1pP0@=x19Y)c+8$IRAHxezwmoh3Q|K zP<|@e*aN-aAEN(Z{7VwzZ;|+$qnJJr#vha5zoqgqSHGvLm@s|^F2tq3QYy~RX+$}O z@qd}nej1keHyt287gLYZUwfR7i0Z9?LjCt7_^(;wcNN4gzJDJ~vR~r=^Z@Z6NNE36 zzTQX7NPIqjF2ye_f3H3)KK+}d;)Qz(C`|vGBtGj_OZQ0pS~}N|p6am+4yH{=Mgcu9 zAMw>*y%?S^k@`D~zenQhcX*8-+P^5F{$4EpyB+yUqW|XLr~37|{t^|Geqb-IZz6s%CihgWp@Pa;`JM{i~J#lVFkGt8Njt_jsa_JIm=R<~N;R zy?bu%_ZypX`(%FutU%wCd-i$8<>J{>GT1oop%PqoP-E^V*ox@;qh~hdem8e;Z{Mlh zx_~?5jW7Zc?D%mm!@3SS_v*q<9-eCluaNS4=V42f39u@|9Xm4Eng#3Z|H!GzJyg9< z7kK4XI)6d5#@s`LyDK)F2^UvC)wF&RMU7%dwi_pwH|2g^{g{i$-6fXd!pOb&S8-B5 z{==F-%H9)=*p^~wE!dwE=IpG-p_}db!fNcYl!YPO5~C^i64u9dtaQh6Zha(HVe66^ zKkd6`J5{b)PlXJ&_N8T_gK{!G=Vm79z_L7TMcbN$N|D(p-?=!iJu*sWuejWB6Eb#t(XoB|}u%E() z^|%YFpPD=Pi;8vE1Fkr!7XIBQ{^br+@NZ!{v#+C1xee8`ncRqRD0WDKutKNS&-h)% z;HTiW5sn;MUU5=AisI1QoPW0#%I(|C%>qmMzR}1cfDEWucNHuu+BdM`_PZgkiN(ut z+H&Q$WZCK6%Yrt`B^A3#w&%A9s>?kHBPAM{*csjc4{YEFtLokP`^To`p^~~8FZBIf zZ=NO?S=lrMu_MR8oVW}<4`L6Tp(9*UK#ITjPm%xg<-6}VbzWtm^Rm-@rc^%`<_TMJ zHXS>Vj-T~?aO6(laaLccR{Jt|GuTFDH;=;d+E&QO7SHHuaS}TV84GrPDZV+13;4p! zEicrf^kj0lhldW$V6&x)+crQbR=CcrcNKM}ZOkp$wrSrkxA)snjWc8Y?HTN}HSkhd z#cf^WmffA&j<`KjvVGq(p0&1opyr5*!57GYtpePZY;ADv#Yj$SWDx&6A9iYs;L$f@ zzZJLpXyyHULij|pB;DimxVYSRsFE9lU^6=I^Olc&jz}LJ8*NJCYS|2S94jB$9IG<3 zzA4)3v|{idXxj{DGNrFAACf)OaywYDVFMd60Rr>;^zW8*EcmdB5eXok)*#aJHE|O0veTXc_4ee4YI~@)V-*igGZ_Soj z|J8|=E^D!c(zYoG$zx>nIQ67(+|P^RPKvE9A1WVs>DWGO24&Kmm!{j-Rt$d4Sk5>{ z^i4WooE+mwR*C^5_x`nTrx5u2WfJ$=89KDiEg|A>wofzdxj%4^nxgxy0jc!&TV`l3 z!j0uaM_tU_2`UCzvkm;|*or~cDVd?Va(Eg0d8);^r^SmSO}y^YG4df;tKp3%d}5vl zMN%K*Lw)7mvg?%aVmMz0_14#w>PjI&kxZAZOr{e+Ztg* zk8S71+{0|>(L>cwVJ{^5%ow>i+&emCfR;xoDLXLA3Z$^ESwSupGx!}*H{ zY5O}fv;^&#rz+Obw1(WnjXAWu{*oE$%$IQAb`QGRl4;yMh|nlkB*jBe*M>nCmV9VRRNk4ru@yN51F9) z+;^I=S90z0-C6JH)s2lhz8V{U}S&xQvP?-t$Y&1THvuU@z zs=vFjcPbvExvx70h#H)rDUP1BzCd!hamSP|jU&%07VsXTI5vZdaoorby&l9Hr+5^P zEvnInQ59|D5NxO4CHOX+Ar%G5x{lSNXIcL?ybAg^r^ccAXeiXVgfBY%rDEw-XXDjnrw^e@v22t$-1B~%yt#-shb_oqTQ^FLHg}u@+})LX=>8IPe`K(wE?lJb3Jb(I2x!c; z;JuLBD?0I`b>JD?ot@&&8gs5J^i3IE23XQeO{en8=rPs1M;_M132(NhA$Rr&r>n#z z<3vq{xYwuVddL`^8pl5+mj62NXLA24_at7_D+ZnOZdF@?62nOqBHejY_h5W)fgEv= zV>BL#Gi$mE^!C38a-tia{RZ%;eb-RZq)U=3q5M=Im_g2V8w%ZzJ?^tYM^9`Kk ze!z~9q1mX8hq*@ch;O30@mDoBXDE=wxl z!oGim((0$Yl7f3y?h-9Pg|BjwU_9Pk%=nFNKaV82%PQk-FeoZKvc(Uc81hv1TL8HT z;PZ5u2L8^+%m2>uReV{QhW@_CHQ5y%Jsh8WL3-ipZ1-i0F0Gl{+PP}knza|C%(ca< zySwY!+j|PYg$pj9$C#G!vgUaO=kw|s7j(3)T3rB6>b0k-i~72v@%@*i7EiCLqS#bJ zduMZNPxc0P(yoxc;F5F01@yxObOb`) z6BnfNuDD=QZ(+hONL@Frvt@R}yoLpJO)Z?Ou`tydASpKz|6)W9c`+>}wE*60Y)-X{ z+nvK)26Q2#G?I*jZ(Ws5$=sE;HQhI)_)jOZP__=uCg18c*L8RXpTF&ETA+hMu_0Ak z7Q0|kc5Lq{)$}Etj`}Q;!>{Yb9ByO)FM5U}RimY9Davy}Ooe5h2`8nIP2Q-cK z7ScF-+@oU#O3PN3xb1K1aCTD^D%~6f-8htsB<|jPny|YL_bs}$wCw98y2%bOzYfkS z;eUb(tv|gF>I(O3Djkk<0UCd)FNz!)UgOqo)j6?m%i9u@S7nn+3bO_|c|#!r`SdYg z3P{7^mniRJZ7us`S)8$m&rewGBC9Muzk+m^Jr|qz;DV?``WdzFZ3`FjLERmzU?Zx{L1B1eX-q>dIp zTqyi96e0Dv@GlTt%iw1O?+E1ID!40`(4lhX34W*W%cthlX@Y-FaGZJ){9eKJld2zk zds6Bv0saL^@37#9iI^e5+0rJdKR+Py8$29+V?JE`@FU@`kn7(R{==kftNf1&Zr31Y zlp6&PpZbS;M^Nt#f-C=S(YsD?_5Z_yze{lS=SKwppy2Kc z3Br>E*FDyBj3M_Bpx%MN&hdgT6Z{B~_bt?Kvzav5KO587T{9Icz z4!<-3Uy~reKEeL=3HH|{$p33Xx;Tb6&dv`f*t0o7Z#CrDy)s_$oXM{oFfzL zpOGNvYYF~&Q-Yk&Ch#AXAfJ01#`&i&0lz%~pOTQ?oeB7H336E9#o6=z1pdZ^baBnO zI60FN_}`d-|1kmQ^CwRJmIQtjpIH7nJTKzp+?T-r$pk-Kl)(Q?0{<@)_^(Q^=g$dp zs=z-!YCTE29J0A~NL;$Q6Xd58_$w1|j!mVU(w)sRZLcQW8?uZ&Mct)7&&Te(+coS(H_ zfMlnx#81}-do98w;w|_ouI+5%Z!vg1!lY2nG7md^3BoFe?GVx#_;ui?_;mz9lyen+ zitBqoD4+33#NUXY^3Ns+LbBa8#TPr&V>1y}-0HRI9W?wLRipfT&XTCt;#(Z*@pT9* z|FFTYHuz5jr=6!5{29S1zu(}05uE&|8oY!R2Pou!mBDR#`DvX*|1H2z?L5QqTmMft z_&md}?^m>kZC;f#Q}~HbGdM>VkZ9+8{FHy0!J7@jJ9@*j^diE?bYo$OGL+wyR^ z!EOGw3r;&v#!uyU8h)FX9pYl&J{M!Ym{rv_XF*thQB6~`WA9@V_ zN`o&m_!NU%|8SrZiF)6JpQiV6gIoW!8r-Jq%?7vmGH7sHPTnav{b0+iU`vkpJyXFW_JZvDycuO#BuZ!-nw!TPPy;Ai2Q%4a*DL^;-P+J_a&Uuoo6`8@`= z@^4I#&!MZNP(D9FlX$T5KWK0(pK~clq5WG8Zu9*C!NYoNr{TBt*hyZzv*!YY)o;@U zr{2p9{(8YFj{Ipk*XIRs{!|X%M@Yo*h>q}oCJ3VZHTWt27YKsLk5{M&{}w?IamG>p z#|eUnpN^m6KP3nvPG2bg3xXixtQ!@_OT8oFXlh0H;if$E*{A%kHTaDNKi9}9H@MdS zw7uQnTF+3gEe{;PN+N#~eyaC2gR^a;IES2)DCcne6#t;%w|bv8{Kpx7?YE#Dwgy$s zX#_w#jKfdyIR>9-@Ls`bKc6+qul-ZJ%r=$c?=$>!48F<8Kh5A@F#Jmm{xgHy{2DJ! zTiRpslLcqAg7ScK67d=M@jZ>i_$0-*`%`wOIa2&KIoEzE#kE{k2K*nDbM1dp{$C3| zA>h|?sn31oKVR}S9q_+LaOM$7`LFP&F6|b7LHIS@%6~KipelceHt&QUom^CX%l&`1 z-YVfIeyQQtZ()@GYJ*>D_-(%E_XEmVYxuQalX7@3sGaN=B@yRao8tN{j5zz46}Ni^ zTD{tjPk!E0%D>ylKhod`IwJpt_-Xm3-6X}|;!g|iYx2KCaHfT%{2%bA(L1H$pA_8Q z*OYUT*k|u+;%5tP?`z^ui=4C^RsNDd4%2ZZe(Hx)g`fBv4bHqK5x4EVB@XrYI)qhD zr@?JI?RtaHGyH5Tl4z$b&-Ok&8`o6+9b^X4p85DGeh)zq@n-xK|1?1m@x}Nl{w0E- zGw@r0pWaE95`MU^$h~I*r;%_AgB0d{G#cwAF zB5wU~heM0+-}f5)OoUa=Cc!Dk`r(TPxAMOtc zg!ytL6AB{Ug`cMDWP>j^c%8x77FGVm2EWGO%MH$FpYrp&35j~G|KDYBz9TFDW`kQl zd`@s4tRL<*xb?%Zkz@U=@B6&`8l(3~!*BIIZRA_M&l%k6-DBify?-?PR_`myU<8Q% zvG?hT2DkQ15}e|!JyQ%m71z|C=NUQHo{J4XpXti4dmM)L=$?hdR~r6njeJ`kbPq!E zTl=pwdaeC$Gr0Aq?j1-u*8UF|z1D9ZH@I!*Ai5*^trkDq-^~k(vkgbG@2#~sZzTvi z!XF}jeIKk0@Z%{EWZSp3IRCxex3+yt{LT20*oGmgJ#P^?X@}-<-P3Bi;Pg)xKg~zh zr6l5%t@w=uLB#nkskpum5?^KT4`-%Suiya7MOzd#T~oNY73?+^{C6#Uc=+E2xF*>e6-qt}-6PZ`{nbKCDd%gDF=-qz0T33fhWaBJsdMz6K=mj<_X z>V3q^Z@^EfRszJe4Ms@IE%EaS2zARbl(X63R?ZfK*GQO$Ck<}x;Y?vtXiwUq{=Pd; z!aT6dkeH9w&aDphxYeueCGxZ1OsQ7%62DME9J>vEvB9?*{1StI+u*M=xYk3IUu*Cc z1VB8@bRqfY*0FZ`1#r#tj;?Ia4Q3C4_KsB@*$#oD_06+AtJ*M z;zhQz+?rjW$X=C=GUBdBdw=BD)DB112PwCM?#+VWjAe%H2a)U*r^zkrj?mPeHGX3b ztUAtN{MN>WEuFG^h@=>c|I6~=(Jldg0}XCEu>w0)g;)!orR_G+g7?Y z*HLDsq3ozB4T~4G9C(9;nT_+YXMrm%%Tqj&U|=97#&9PRYj+If_h1n3(BFB$duB~n z$EwaQ-IgG~<3c{;%)AYEpDbv2gZFdnmI+!I-8>ItaptF1sm^KH7H62>n*ryo1?QZn)7V^BU%#MX;X+&3I;UM1Oz8>kYnv9t z%x6|u6Yf{6sFcbmRB8leq(|H z|Fz7Ur8^azGebkuqEK}diUQ}L?Ti&N(+? zi$c{=C<>f2Jz|SO)lq1=uNSZB=<4Wc#Uu5)bCmm>C^Rh!RY#$GV46ml7KN&#P!u=^ zJ3Tb9xKEuHg{t!*lmfrk5;&@-M)>q9jde~Gnihqst89zmKNS8Y8oKhTRuKRBdVe}u z8;){Snl};eGYAo5pR%P|dt$zJG=OzgP4J$xO8iqrO+G{?ON- zPtadp?PKV;PwIa~jD9Y&gTJEkyGiu#OT^{F#YU@r;0HB zcOCBIGoGa|{rqkkV&vZ?j??!n%BjFF)W0+#|A$5Y6BK4BO#hV${@;48k7WIS6rfQ5 z;|cmVF|$Cg^oQtwsQ-Hj`uE67qTc6BKV^mb7XhRH!}@Dj^y_$Bus90!^W8hn|K;*B z+HLax81RPr_avmhmW2g098}Js{?UZ=ua%eEj3kWde-(bA{v&WbuKc-=-r#3EOJQ2a zB7TUGe^_3AZTUM6c&Psg_$SW)RV*wZ9q;4MitGRHBYvFzyJ~$5d;hV&H`LGX2Gk$8 zIaMnKPs^{DR;>Tah#aTCW|ogJED(r^mmF|04zod`04ixW-d_I~)g0i@Cz7VTr#buwT=!j9*3k zIRCvU{@Wvr^xrA?X?(q}e}l+@3KygM)js0JBm9weQ)C#QYtc@xN=IaZv1`$uTYdg{ zp84R{qFu|1SE$w$2DiT9LwHlO(4GrDHdi~5y+;h5WN@MO)w;0jYLt`e^x?NpIv+BzSj=$tm5@0ZYuX)1=!zntZvzr7 zWfHA0_NElv~t~3$Aj#%1rLZPBd4k`4KN-l~XLF zw+L7K+GXA#Ufzn!$g@1K-T^x)2MbUxnmDFRx5_x}wFmoCBHhgiF$7jOQ)XTWT^n#yl6=(j9xS<%|NBDFA6SDorYKTXP=GHS1E zefa;t;u-QtNR_;0L8@eJWyx!f7+by(6&u?G`n^i3yHqVOeI^{k%5Nsul9<5tBFZ+D zmR`po7TCb*8R^ow=Hx9JMikb$S^P+A`L9q$x3W&hCH+3-#+!f->o-7G{kZ-Tu1|4C zY1!D4acLOfE|pVQGI8!!+}a9vB1(yCMf$x83d-Ch|3-vw6G?%)!Juk@lUu6D0=T391Hp@atmjj5yUz>ohOu#wr zDppQ{-VY}5GoRw*9G4(xbpn1%f*j6$ij%)3f&bUwA8%TKnveGZKgzu|A|hyoKOoQJ z<(D}*e9QHuW3Q@Ee#X1EZ;!is3Bga`7iXv59&8s)z)!zT$}53u@9>)9e6Ju8OXH_F z!z8FL7{fQ&p~d|2%IxIOE|pVn_}PY6{3e52{sDuJH~jAqoc8dia{j^K?4wYe<%h&{ zu{o~z7YKrgkHb }ol)XIWMJNrE8a)}E&w>TR+1JZEs`h056@cxVs%07%4HM=QV0 zN9!NHhmgo`{aNMEVmr?lJoKA>cO-88mN9ay-}pVA6xw->haGPHd8)zr?xN|sNO0;c zGkBfgl+QX+`L%sO-1{|CR zGx~Tu-?Y)(=VG^?wA&21zVn)nUVH-8kG4f^y6A&xfe?N+)o)(Q`j$^y(SiN6d;Sl5 zZv$UdajlJ?5X7L!iHH_Isz(hK6fr^6L{W1f(GwdG1uSYcgb*MKNlebs;AdZqB8}NR-@BRIM z|M}%)&pdn0T5HyP?Af#D!;PAUd`Vr}YCk$_OL;?nBykI z5uPe~Y)M$6LTGCd8Gn8?jkUV?TQpPnCH(?ljL2c49&{CNo+G6FSoS2o*l!!+v+v`( zO84R^-@HI(`lo(;jyaxvRxsq~#u;tcjz8M}a{g7>{Yi$gw&%61Og?^({v;z2FFbBo%CRYPj@IiYh(ojn-6;`Y#y2_Y~Dsyc;E4PUW#PY`^q#&nqvbns{NZP9%68HAMd{Pds1m!oo)ypI7I&QdNn{tZ3?atcX+c0*&H+@kmJE4TT19hR=|;kLoW1U*#eIah2`7=pLw7aW5+W_Wp$)8`p=&G~ax**~~crN>d< zTDJ>)&)QV)gpzckCVPBs_BOlaX8&d!w*pmpXJ8n{qTvtIZ=J7S-ax;rQ!=!j>bi|b z?lkj!7hBt8u)F^%?{pVwFHvT3WCreu%Mb*QMus9sa2$sz#_EW` zFr_&_V(^e}6H?>VnINDJ&QozG$w&c#Rd56o&NQ^AyxH>^__?IFyf*uRkpb?Y3kiy_3{YbW|t(Tw(8A*nb72Z;|6X(_JQ+{f&{0hUtdkQ=Y z!NNJDmJf`uO4|oazVf0k>bc~UJ<=q7g?TvHvvgpKi+%l@_OJg{gY^%6iv4zw{&}TQ z3Y*rPDH^~4!+nSv)>i@i-|G16qVxOOem}>*KWpxc>e<-!+*}83F5l7In8qg>bJI*w zZdzdGf93(1B`wX1@@Z;j%&xw;`f>-F35+_T18l^b`8g+p3B0iz8{68k6?&{`L3?cM zsqI(T;JJzXUE}j^ja{-JF|M>@?2@_TV}~HlRbX~*Vr=__#2j!uHxcwx{dDioF4mg= z`Ts@#`KTtQUuGit{V(4$p5tnC`}*c3Y2$l&siBU=*kt7Gd5)dOtFYmDZX5X@jVw*( zZ$+L$lvWr2SXPMr?wMYAQ0U&_h|2QvsN*I25!>Q0dB-RAY6!L`1RLQhsg9cn!T9}y zPSd4Auupmz#{=aZyparS`uWY!>@h!Ic9_RU!*=n5jCOm_@#5(=`?uSWY}oeg$&rSKc`Qnf%PdF#xyZBW66b(pA*@eexP|nHSZ>mA$jRyYIMP^5a&5UiQCQ zv+uYM=Ep?>Nxu*GokBhj-rVbx>_mkxh@BSuzPsT}7<=B~KXACb!>)7qPaH1akhq^F z`EVSXj^o#KUvcA{N58`Lrpczl6cdnzq*5N`w z!_l{R^aBVNm>sq3jdFLt*WeRf$gbsOz>Yag2ymfa0;C{lHFEUdg#q=x*rq)I?Yjnd zFZu|ZcE)l2pZvB<5rui9`cA09^G4%?8-;ma4FVW^#JV|*zQQ0kd|YzX$E9@mIKOHQ zc47Nsld4ed)2d??VjuG`R~S1n3k z^bi}0b3cMG`a>f4ltl13DT2=f5$W9$fscyd^MeSS`?!r#^=<_8qnif)dcR}oEAW{* zO4VPXpMvr*O4S$hyanwS4FBBMK=b?t&h_b|R6V)}7~M{T=jy5O|C`}+q9wxrdgp5} z_{jnOUFW;f@X6IL^Sr}7?*FFeR7kq`omcNGEpneT{P}g&I>B!@={;27pilFx~qdHV()=Wwty>x$*u^hFBi z2$|q>6h2eoOBJ3}_^k>*PvQ3{oXdB{=;H=kl#FEBaE=?% z5kD6{!KDNeXDceW83ja`{Anw}tKg?2&Y$3y5riWj_7w!biXa?m`Ta=ndV+91pJodW z;&YS2wcVtDL%BL%zM<%6z%O$D-QkqWID)TJxK7tk9PX#<7m8lz%S(#>9QcL*fWpfZ zzDMCYUAlahDEcT|>MQl+cOsE{AoP5X_%QTmeMtH3V&!;-l-e)Gx}_^;*6a64!DWm(G`4 zX;6zF48N3zOB_x?f(d%@*pycXwy`pfPuAPdH zE)PR!065Ck>Ehf3I$m_T4p;QL{+_Jpbv~XJL4Ty-Zsnd1zod7Z!gc;uD?F*_bv@Gd zk>@7GYx~S~e25QMeC9ixcF^|8C|uj;Hiff|68(=*xGv{9UAn$VdqugrzFZu^XQaY) zJDE_pmP?z^k-wIEkwGo4<$glpnvb@RwsVuC_wC%O@I&Ai``oPfYdfz{xVAID8`4pK zZRfZ_2bZ6d6t2q;>lz*T=yatFYH@9!D-^Envq<5ZPn*KEeU>@gw@;_S4~1XsbGO5( zr?$^3g=_mfsBmqcB8RiuOBxA@pSYA&;w(#a#AU3R;bQ)SBYukU*?(eB;$s!A>BlMD zrx*RkI2z&eDHl#Ce1h}yQtA9c|7jQ2>5{$yZ~6S?eIViDkHXa8~C zG#&9{jL-g)^`69!RXFDy(Giz-I)>*d{G$Y%ODp_%0deKrFFNwkqg#6vo*;p9RV0Mt zlyIeG-8<*N?x49jW?6)}1(9PfG$$o+hrLL(`b9e2`Prc=l z<=EbMLtPs4c?ZopHMhaS5tx~v`MW;J6yS)sm z@Ew=-F?ZRBs>7}`stD|V=Om?!HCWy^S2dY8?5aJOam7n znD#Azk`U;MnF0z9v?Xje$EnCK@y43X>9Z%x{g9n?xQkBy1aZgfzhQfv*uP`IL&iLG zb6Q?vLp(=NJJ*Z{&}{gK4GR$Ksr14U^w`C?U*W#uOMgP*OFu-yd*ShU^4?1Ku$5;e z`{PWf@DrThV#DOmBonx2?Irl{%jf>cVe%hx@^`tIl+X7SUq0Ut!{jFj!pV0z8_Mc4q`Kw%~Lf%U$|6u%l`R7N-uXN8@p%;06`q`fdOMkgDu-KXMhlj}TKx8J>FF!M# z{1GD9U48lOh#w|@rW0K1;!!^PS2u z*C@VJwW-t z16`Q>RUz^T`SO=V*nf+Y--tNc`Sm{?VgD^o{(~+u>p$OjeECN~`LOg?f-jwXf3%^& z?Jv(K4oiQBd+AC!K9tY*Ctv;z5%%xo!vgLedkOyg>0c6I|F!OAZL5n(`FtPqjTNwIecH{o{d&U&`;}$aqhLiMYc}(Rj$!W3mY=|6D6qQI-hY{`TiO`|Qc(miWNe z%9X2u%1WbMC7y*`E63iWUi)MoI_nJy{<*ax{SxN>P{}#T+1w)vyFrg2b9~O zimP@wU!!bWZ6Ck=*cEmCOtx7oR<<^^Zu`(ndeh^I%JyQ($PUtUtuK&eDi!N*I}d)h zz^5krWGcJK(4@Nd9F$&%|A%J|eT0_m{{fcWtRNHYj%E1_Je=zNBz57EBeP=e8n=BD zr5LByMqzD><;*oge8<9S9a*NpWNZgiwoNYutU_|Kdjs9D(rqzz8QYl|TGP7}Qr~dK zGF-9TqG1pe@BSpTFw4GPTg}pGNSR73Ch9E5`keOx*4&9N2C&zscagYaL%jQSAx&X< z9dzqqQS4{EDqGt>5|@SX6S{H1oLriQCU%S7YJ1(v7aKF(4B@bts8|PE=a%x^KGWoc zU1L(QK7P+gu58*0j@D55`)f4_jd0}qH5+|q6R{y*%3rgA{mW8_veLyjXK3wz&Bmca!WJJm9$^>m7Zx_>eh2UZ zeC3j~@LiLRXH^lG??>`|%hrK;*kINUzvj-+2pxF#O*maE>>G(Z3vl508+` z$66Slc@gxqOc?zNFbcy9Bk*%0aDH125B9>HbK5a~}Z19i4FMKizAEWTkEBrKtOARIelN3&!>3q2t zS$L4#c@Af~_!E5^9Zo)cw->zK;iRQ)1@CaUPrpLpw4u=dSm7Mb68w)2Cx30{zedo@ z7!2j|nIU}i*?40W{xOs{I^RD0)*$!^@Ccs^9Zr21M{qeSn>b&?1fQw+Bow|-;U_A* zRpDChO%C_va{nPZU+!|nCxQE-&lePaqQbwba4q+r9PZ0~NZ~rY`b;)0_h*X#iAwH^ ziVypAqUY}w&S$vbZz?_@l`8rpou3!haXQj#JV6kS_|e8^|7kr*FYU0;NBT_(7njNA zi<~%)Gtd#&>6LU5m$Z;h+A-qV4qxO=IO5t4YNEt}PK#0R0Q;O8qv_220?d%%aXdI& zi{IDHYXc7J!PJrHIWYM=ax-Df92EEQJvTGPOk2p0lK+W4n7$%W@y*?vnIfCjVeUyo zJx-g#G?W0cCw}2hx@Acont$+@o*#sFC+vxb_pP?Zy7YV;4dx&BHM4rgtXZ|#i>|IU z(;l^R9`5E2;L`SUGYqsunRcTjJE~wdiAqp#zLv3QZiY#of&Dor+QjA_X8E|6M1K+o z=UFkg&GBybc&ofg5jW<&QmR}2+oqaCGWeD`YbZDbDVRVJoLlrix4+&@R4D1Qm0EE+W&|X2_#%G>urT?1ocwVvzFZ`}glpgllRqy+KA-0j zU*x~(@_&*rbk~GqI^V;oE1g_t!4szc3Ku_NsB{1P^24>(VfwEK(VzV+U;l1klrMG` zNe?-u9M92?v~+T1e_Z_bj{Scr8;cO<(+=49gT5Kfbn&-)JVbwiUqk$`^sja4?{I`H zKg=_UFZnkY`G>zjuGBpcW;*87oBd!v{uyNzrDg7v7Jdub-#4Q(&o2GY-;CzEwunkr z@*n=kVRfES!VTq;+*q#R0`4()cB*TW>@K+aW1!qYa&8u8&TYX)PpO7u@hL~n4@qtu zdVFl4&Qj%nRybK=2cH#&6pV-soEk=Z${<>A)2Utl`6g7$>i-a_@`&K20Ss=5fxT|Hf+1>O!sS{b0mW`Z zvBic@?!oi2!|%g2EM4;M&-R}`850@n;<4#xpG)uy6;6JFe_Y}0?+Sjo!+rkpjfFUy z1fg$m^pwlKmf$xjT=VCA7doGRkA)4c`O^+`KL2l6*x>B;iCpSHM|wVj1V51=9C1!( z5PTv*IO2ND>pX*6T5|e@@{#y-Xt=>kZ#k#FaV^an~&} z2p?p0#77yQ{g-fl>X@rd=td}fnDd*<(#E9?t;_P)bmg8X`y8Z_(GotSaEimALm3ns zSw?jLXV~+ccz>jaBOw@ns$0-FKeNamkuk$9N|s)|v$TE*R)EDY#^Ro&{uqlIH3@sj zs*#h>+qo4?!LpW|CRmG7SGO?J+)!6HG4yu+Y80I-|7rg&#ALhSyQf?M>t%sa&I_7x zWMX+`1mQ{*M|)Z3wL1ur_Z45B4-$uMah^kDpC|9jJl+JE!?Er#olJIgnSBM|vQ z|05fJ&^u+hi|^adnMI<XUasx1D}VuYiUleO5?4JU4dLP=T73_%NlG3k5|j1_-g5Cd<8n zO}$sMPh{fTO}}kGx z_4ObyDy4dFfz5WWUXlYaw{-Vv7C}qEyxYCH8DTe0V8pCvIQt(chKEbhVYM{(1YrBA zbpr8d#F5(py_t^*hB9VyElRc9&7Fe{EDkbAz^%)%E&U{`TK=HO_aM&TvK4(^HVOwE ziLlL1e#MN&YnhC|8T-RllJ2fOcieG^Io#Bw!otwzQZody$&sy3b*(RSX+l9?{W%*>MB#%cEMaVw2hIo; zp#%o^-(LMyVOyKsV^T;%{1@&2nDG41+Mj1Ym?_gJD3_sea|W)$Y-QBsZhkJPy!*7; zzV?E$wUwRkpB}$|ZEd{z&z(~WOEa~}yDusjk(knvnOf7eaY%}1l)%7-1q#ds1J%yJ zW-_KT@S3N6m09cuI=tBF;i;9$&MCuU>2`CLui+HN?scEt0%g?+8aCVm7amxR0L6>${txTXihtm%cB^f0fFTqc_yhkN$M%QW z!Kc+t#a0uPs6+6qH!%lFQoXZ^YI~=7vY-~9C2k_SoTYN@dez@aZ5moa87{@Er%ICC zVu9{8=oBU&r+)0tWMBDF0qAS8J8QCkO2!`^hBXz3-E>GQ{TezuN4M>Dk}+ zf0I&`mfw{7gY@GBHN`LUV*kycO?KV}hTR{7w}zbsTj$v}bgkc;OYXuIY?qEt#@F2X z(O53sBtirIN^)b>M~4Wn-#}1p_C4W+epP<^L1T@DF>CrRDv(^;X%=BPW%%iJU&`1s znGRT=8?8Q89MTyZXmNs;89^_IrjqIp$)7VvYqPI_i|x9_nb~K6`Mck2$jrYqZ`Aj;(tP8Me2!Z$U{BIxLdk zc#^N-_&{*XRL5ApWxkZ%Xie%?(V4e63!xx9Jun?zXhVRLl%}x%(}(qQWjhDrXr$#< z#fIBXgx|eT7vu+xnEtyskZaF(6_)m9YBii9$Ot1@G>7M{+rsIb9J=5+ah=xR$@|n&6eI zimyj<0+#e2owoQ4zA3*fLmx4v`HpXe@|-DKmZdm&MO(jvA?<;4Dh035F1(t1kOp8t zoja3@gF|Ob&u&a+f0oMr0=a{JI}f!RpX!^lH`VoiK`LGa7~?r6B{b#HkKlZ>y+Kj~ zMNvPx-XGF-SgNmjZ|AM2?TsPo4m-?|%Ko7$`%dx^D1*@#oXw{WHM2_P`d@gfOVws; zOA^(ra9dK@bO{#5zIW%#d+*r0cT-i#WPXnQegPKAj!AayDahOyWc=)sakzh+skXHx zL!oQt5WeZS?qRm71P9h(l;tHaCs>f!-7>3VKUq?V{BR{8e(&2*8If?X9(rzPn!wKf z=b-_RA(`pu>kVl;f=A2EE-CIjcVcDy{*CKiiw}Qu_d2{+9?7&x8H!iE#k3d|4+D-Q zQpI>r1FYFU8~-E%l18e@?5N^uh9j9UatmUe&REAY7DcCeYfH+jP*I2OMdTz#Lb`4( zNyO5_t9y3G@B0`y(bKaK9xQFGqWWx*UN`AXVo7Y@NTdxwm1~yJ*X@nLyzy>+rGh1& zP4!metWMW5JOW0n|AZ>hIE;w*aCpzOV>|#b-p&3js%^acv&8v|EjC^L8`#>sfwD@z zxKI7hfZDg8YKTc{E&8K+FtEiD$xfuQ1+-)LQei7)f02-xv|oo%u7{cGy#}h^Qe@jF zjDE$t`+1aK!IQ#@!<6x>?& z{u2S)@@TRc9rxAwnRb<7_Xdo7T$Ot&Agh;G0#0%*`y1Z#n2+494je$auB$wjeiSXN zH2REIKyDoR*hj$w-Mvh`l)2jMAHvI9Pfb8&9|x;>-i5Jg|4Jq|*ROCx!2SGy9zUTI z|D75bmkF)B)RAL#+87xOb2&rE(U%?PCD}$s8euby@FemvXM|;UCD$+;1`1&+41l03 zmr|>>StVG8Tt%BHDPjp?MJwBk7O&vw&B@`<4jgAqqMtR#nrDq0OitEag9bzTf8kFX4x*c<&6`QntE{HR?5$pl*y=&Z=ibQV zBm8Uw5_7|dT5q(azIJ@^G1Oo41?BW)_LuB6<_-luHv2>>`x+F&F`WS?lmFQbX7nB% zx8NXIn|?goaM-HrB(FIavTQTP=Id^RQjbtP^CyL;6(0iT8jdxVGWel5r_)H(;7>yt);~yI&vyxOMF*jNixcL_D|R-9I;;!g$Xw z;9|BUx?!;-gLn(eX7?&cqAV3AtB$^efH_qD#!`<-?N8 z@z%b4#*pOlD+(XOLnk&cnkmYRj2A;zGJg25$BKa(dzaf>UXNGx;$+23nLi8+hxb)@ z(=YXG>v$&Bmo6D&UPnLhplygXy*X!3Cwb{~@*|58oE zucW6t(1$pA{gra`T)RFPnqH87v+IN6cuy7tj}_rx^6_!_&zArgZ7jUlzThc9&!=xMH-I0C?+T-HY<6&A;nowC_Mt}DPq?e=ZD0+Ci zvz-QH*tqNl8wdX5O#d3SVN>wNgwB_%tnw9Q%+-ek%b@0~&G>@*8K4s>oX&hn<9E5*JQ;uJ=@bgnV&J{^jUNF@cosEqq z4HzZoVZidnYzMUY1Y&1OADg}cul&+8>rEA<`YtQzXD2e)rzF+&L_z%FtM+!jclsSi zbZ<*1I^V-wg$2&vjOu7Qg=qgx`Go zH>uuKadtFb=+Fs#H))!ZWZoIrwH zM_p~-&`C92Yth|3?i`Njm96EOzkDR`sx8=>9yc}q@Q7nO->FO=TGKae@3hV-V=6P- zYr5Vm$c(?FZ|LzUMn#9T5cDaw$#zO{c3s)pp3V5oV;Wr!F2uXvgo2QEPHo?aqiVX= z?VXE8~s*JR&J zW%tx%->MnEIeym_L<-(P5MXlmTC@~w6HI@Po7Hr45Ch4>knR(EYbu_Of7;~VDL_|L z#UGAUW6A0f0>D7Uvn(R8zXYMqQycEpPJs*+EcALFy41ZG{D&9;_M}sk? ztg?G=`a-ZAI;pCBQ~H&vzE3<})mMk~zIzPNUx8*@GCu7$)qOJ`ukM>`aI`k)-9G#t z@I95~@1?(sL#5YWEssl8zR^yMtI2Mz$v&6LvK!O&&Jgns*EZVptUt%D8{U*MBm22_ z*I;+RV?M&;O^X8`#kIX=G-juH53J>@UO(S{a^3e8UB7>~2IttLSwv;}3+_R;p(RsJ z&0O&izz+)2!;|Rx7EDBez|dN}=QxPS_IJHpR5iRm-opVwWWdn){p+#=ov##Re^c~C z=eu~r`ztsl)))Oc-aPY@$TX>hc2mxp}H2$e6@U2Fx!FMj#kW^*Y zyQXSuEuNcWYT4)NS^G#4sPHD;KO9lWCNrz+nW6n3pkqRLnQFd?-g+Si5YL^Cwgj>aPG@&iojkN71jTcs|}e2{%xr4o8uScNZgojF>#Cvi$Az3wV!#^-8<7ihHuI_Fcsuq^LXEMH1IUxPSZF&6K3kl^8WNA16{S* zXHw%gAhR>aBs=dYn3y@j48F1PPIhfCO0L^cIB*`6Oq#xDP1id^+a|aY=?dttOtH+B zNlVEm@yTHF@xGxa)fD_8)t4%;)Equ- zbBvb>8)4uuXKnOYaTj(j>TBBqQy$Xx8q7+Yw*9vAUDW0E$?mP0=Q`g#J^f7Q6JPFp z_vjlp^nVdiuqPjyTGIp%M-z;EYrb;*^z75wztQc_V!5AeDc9l@zhPPqIIjy{%YV*1TvpN0FQ4xh>(@W zPQiod%Aj!s!@U0DxY~yK#c1nly8ec~c{M5xR?cwP;aO1DWZ&=l;Gpu)3C z_mzMky9@2vK`5F%N0A&oaP+u>-Z_W0qgb`5 z&Tbn1v)&~o#b{_oWdD@wpvOP`Fyyk6ejLBPofSi~a+2<*$GaZ@0U8;@Mp#T;KH}u5 z%d1W+vKvd%gWDeC>x(>SW@4-C~;$BTYD33luepgInHfg~*rR8T&E?aQcqy>`}p3~Sk9)*i;w7m>E!+jiZGZ2a^UxK+d2z!6I z^TzKRvc#M*j!nLBE9HJ9`z&fr-nrmYxh+_E634qAe9y4HgYF%AU*TOt3U7@%o1Jp+ zCnLE1$>lrcS`xyc${NS`&pZD$yk0!AIBE4Rym!cukJF2U6jiT()~<1(zHnj>@*M3j z?gv6wg5NlYr3vJ(lY%KM&&jwo)6sFHz_;0DVl$l4J_M_#j7ecY@@F57ZeRRMasMGl zcNee08SqsjOYJf6g~JO*CXimEVG;IdD+d|BF4L{!Kbw!i9&TO3?m5V9;PyRr-nq%x z2_R2kpp@?K$-~AC%0OXvfg}Q$O$YZEpqt5mMhjDBX#14diRFds(CMZyCWKxsHf{2-&v|K`P0<)l({okCiS&e3h)KdozS4?J6}hdh+O2VQby z5%pW(;;&--!2U_IhhEn~_t@?8Rxp?_+v~A>GT*-F;&DL7m&<%}Lf=sN28k%EAm8fZ z)-$e`Z$mzjGX%@~Q1*}E*d?PQHpXH6ib+S?PH-4U(4zIZIbR*vD4mbQY7w1hC(!*S zJpZdkb{6C{7|o#tAPF+7+f$*siH)tLpjlvI7z&!*l#f6krhT+)Ok{r?)`M{ly99oh zcJK=7-EFGYnSGn*I{If=Z-O!deX2&z>ylRR>Vkav$&vG_Kz_fA%c+aGxY%>iwxv}g zTeWG1JR4RuN)Yu0$EU{eLHVY_Xn%*;^6kp!P&4TZ>uvMo8C_?Ju0vkTSCx8V_N8(8 z@d7=)HXkh>9s{N3wkzk5PkVPeJ{&-yqrF!;>?Hz0J7*iYA&X4;HCdRzZ9b=-a`b!P zCwin!r`Oc^*1P=r04UGPUy!v`f3XY_`xs~ z>3`vHDW{hpT|VRI_zD-8%838VK8)b0(bI$a$o&UqEeP@(HwHDm5Fqguhc50OLqMeU(Xne3M z%v&{^yZ_<$ca>6*<3V4c*;ynXv$#C5^Y0Y~yZ!q3NAm#}D$G0mF-KAuJ24kfzCyE; zrvjX}Fz*!7-2KA5Q%f~IJ{M5F!q{mll=Bt_yA|g!`U+#Y@}ut*#>#Xs@E68%^(6q| zDKw{CYsC5sW9JM84L#S34R(d*blWie{J|iQ!q|locrpT?7J=vLmnJAw^*tZY)%Scn zSKsq-KJ5p)LRH`8?rgMs?Cbb08G+x4b|#E|HW-BBcs_;UZ$O z3};_04Bv_NEeu~4A@`LC`hSVQr$@-WIl>ORBlQ1f1fMG-^gJtqPt^X;ABoWavk`n) zV#Dm#6p=6Ah)C~65&E-V9mfCp2)s0c|C15)d+~@0<9~Kky71f#qvw3UFnmh{|0^Tx zb4mm~Kg@*jXa7D7Ul5_sdf=mCx%S7r3xUTp$kltan6WJ2vyk3VYM*Lp@t=kMqttU# z#-4b-$0)T^>pJkDd&}S`M9vBSV~{VS)bm>Um6t@=XOhw9SYczwc@Sd1d6d}!+uoY# zC|)%92`=QuZxCvXC=bgb%K3GO6J}>5D-^#jq8-~}^v^vX>z!sC9}DAuPegh6H^b*F z7dsZa+xh+u*HP-ZDfpL7zUQ8U((^b7=^bTGNw*B-$?=9M52pwG<$Z^HT#Zuwhm@lz zGyG2p=vO&kMMOS+Ga_9)!)KIwp2`#MS=e(_EE({Za{E1lORv+7M}q42hEJ|PChvc% zBkX)lM13KLuzZ;w!Dqmf=ko$R&3FnzdttXQJ|`JHbN!0fUCb_H&l3YaV&_tm-j4*h z8CON<(Fi;LAVSX>5$Sy)0-qCs{}lX3seU-J)i}`*YQ-MJPxiuLyGlo#rAu(Bp%8=j zj2tfQ4e1vt{37`2i1Xb~_+$ve`FwgTZ0HxmFZB02+^7GVqF<=!Hz=HCO8D$h_)Q8w z2=<|)o@_&eeuTq)xko6RHWB)dDn8dMoS)h0$bSibLeFJ@bi~{66P)Fi&X;?QqHn}~ zpiea`JJ9lU~=~d5Zop z_=P{yNJsjc@e}-Zf^fvOJ$no~SnfRvXBvgi=N(Qy+MeH2xURqJ9nO4V84y0tDtfKw z3kqMR=wETTpYOXAy{<>Pyv8Z{RZ1UipATE!q$fZ-vrGzqriG4p9e#q- zPe)wmFUt&_Z?~luHu&-I3m>-mbmXJ;=PDOE;_TZB{XY?eBd+U)607R>Df0B`pe*_^Xcaq)bbw5o$MeE*{J`G3R0CcV0!@GlPc>2j#R@M{cv|skQn-F@eqG_xZcum4pKS;oam|0KL9Kl>f0i*i((@;FNWf1= zdoIFHaQ%Gwio)N4pN{kzuTkmJIQOQYBR$&$;r|tdYx)fe*Yv+sxNi4`F)?sHe~u>z zuKBkpT=V~o!ZrP)3fFSqP`EB{yB*F8f0Ew!6@HAu4`yQrNBwnqJ73{ipHC=U%e~g& zzT8HIYq@tSKAQjM6|VWOQhao}zNK)@|6dg!ovsZE*ZhB~_-Ot=SGeZ?y9hr0ieB^C zrEtyXFd80iQ29}~whvbfh0(W1;Ga>r=JP{^>vFZ$;eI|oqv-W>e5=B>Jzt98^P0l7 z9d;=`I=>3pSi|wQZubsxxUc6&6us8-Bt`!z@REAL@oGBqzY#ydb$h7mX#zBKq-Pr? z^t#{9XQ<%E!B0o}zsFDTQwYKlXCF-PGJ0>9{^`=2_!eTx1{MPI4#FDm>BhqD|`SNPQqXL{QePFvCW<+jJdCcTT{ z7d=-h{04=8-Qhl;e^vCl{I5|s`-;MUa|EAXDtgUlyP}^8zwr6JqQ6n$!xc{33O)Pq zbhJ+weu9r92uGZKRKd?A2uEDk7y9Y^`ciFSL$CFzbvWr+hJ`=hmFUP{)4OKdn0%fsNqv=l)J~#C84sw!(G&l{wa=pNpU9GmZk` zc;QcQZgWFN`o;JOerW{#m5N^H7x&1cBcFf7PxySq6%^vyZrq`bj<`-&M&X*z-z$76 z;s}3!ccUX8{TzAI;Z%!1p&v;?I9{~=+%koZ7yZ0APvQD`F-_si5l8r6qi}8iuPR*I z+3Ze;_`aT-6}{GTyTg6@V-EroINsLuXDD2!t5V@QT`7g@bj??|PSTbSGNz+juC$lKj9PAKEy#oNBS!KgkC>?S1DZgH#Ggx zprIolKGTIyCH!=>&*k_Deg#1|(l5YI@J9*4k^XS}1b=}b9O=J-pWynvTlZsEsP^GY zivAl4|FXh2DO}U*_t`@fz4WiB=b;M!B>Z&L^D6vA&(9HrBR!vef`6SLoKOER7B=)F z;1~Ke4)^IdD0<2e`sWq>B8BVc&MJkEQS{6s;d8peKcR449@y6s`Xdy*E)O4bICa!| z>gS!-lg|h`rgs&7!hZ?;bUuEgg$-}bzsupIZ^Tdd{DZ=EdUbzEr+1^H_x1m|;-mTN zaVl+}6BWIFE?lH={akoV;aT`a|DP&c^Ep`I-%|9~C|o~ZTx-xVR3b%c&`b$w@CI_B3m@RRheCkRLUEBFb1iqf-H;R*QZ$bW+I*?+ap zPh842p_K}s=={7qsc>m~32jw)sq^zP)agV1WeOjoa2YG+Z9N_+b%FS7MK5g;ap@P4 z|5*f_`!_{@wt%?qQ203tFChasUdoNn{+q3EspGtJtHRG!^iL`LJcXM6L9W} z3YT{c-ukJ+FBM{3|ETbp3NLpJ5cQEZoVVvHoc)2oad~jvjO6s{IxZt_Y)-c=i@Ece zf@7!CZA*Aw)6^Mt^P49vZtU>R(hd%C0s#*tH-{r#I&F6K>^gV$649I>bG|eM)y-d4 zm+ruU;yei49kFE21UIw|iyIrRuUp)LGoGehI^&``wSrllphQxfu&r>iJFSc59o< zt1q*8(2;Iz=3?k}9OlHcqr4N(fix^`Gns^oGDSzog6+Bt)znlj*|}s{ifNZ$Idk@< zT-CiG(;CZ#ni*6=7@caC)wMLV=iR}f=Tr>`u;bFqE6b5SkDahPqg`>7BfYq8y^i$i zo{?q?LQ^YE*3@2ib7NbJPlFO*%J9OrmZdngt04{ZQ4JpKg;>a~N%M_wL1P1bL1x$^ z;ysDrmMaxzO}#o*%h}H-*hjfB9JIvz1D03Jgb|QzM!S9gPHAaG`FN1Ctf^b>#xdJq~xM(Ylokv6GG zZ$`kNN^fhXeQ{8R^>Jz@<%4zL#u58ov zb@?<*(~bVN21;h=eU%!s)55-l+U9Jc&AjFomUvBWafLQ6u3OlKvY+1yv}fjXLxVcj zikz|YP*qY;)WM{&G0*HRtrk;sCf7{X4gmigCBYHnJf4R6YN{iLS4rdAXXeaGl0txR2gdxO4d zqM0ad-1dTZUE171e@F=)i)dKvk$>F!L+RSodgIx34fA9EA%I4vX|t+l%)b0e)8H(q zPuH7@!UEjb*4ENiXCTFn`q#`%R#jaNC_qa`JdbA#G$zav(-R8HFog%Kcl89G#R=0`bfhdCHi(w^E~U+&6wsM zpcBg~#8+XpbNv$N%cB$JW?A41JZ0y|&A?N3wm|SG*{!XO%?s+9>d%tfWq~j7lueeK zfv4&~%5C>aIHfr|496N`P^e8On$;uJXycv*bHiah9iEM{KUmJMx`sql>diVnhy;KhF)el#@9e<@4KypZ-IU&tdXA*;v7ueVVM-{P*P#L;NuLD`il} zl_SbO7C&G9Ux9_mPq^paOd~b-&zHXow?gH+!Jv6AD&>C^KVSZjfrZI$b@I)AQjP~N zzWj%Qg~{LJ|F=5%y8S;nME<8DIIRwg~w%XW1BQT|}mTEPj6a zPm8dB!U*RC&lAzY>|Z?F#(2<0r2JFx^W|5eoQ2tctrN7@#g~gO|3btMlmCd5 zuj~K#5cy9>*nce_7I5|U68!h&bG~7i{9Q~i+*qslAx??{xTm`RgL&S33F5435j-`p@s+Ve+?!$mjPKU;YYUVd>KSh+k(yOU$e)`Ws*q8tLi26UzO$2Zk!;Am?^xq#*|2v#~ z-T&tIDqsFyJm_RCqF^vaFn0K&zJvLMET#s z&Jx`I)j;Oy|oP60IElU0s z5%qUZNc#C5*_Z#6>%UDB0q%OyDb~aHJMAPWSFWR^zf=>!fAu&EeA&Y#o?LkVjQBO_ zyDq-Q==W(qW%EyldvfILEW)jVeYBJG3wB#X{>`0dDIP@qpkw)Amt5jYy}SYZQH2M& zRn8!0Lr>hL-eK|2D61$v`>aIZN&{aaVg2_1*^?)mJ7<+oF1IA}4!NVc_M#yLIg1p; zE*NAVDz@?n{Hqg$ zc%>Kqsu%v67hddzzvP9Nc;O~5{0%SsO)vZvFMORBzTOKj^}_df;XW_i?1jt6WNUidyQe7hIE)eGP2g&*|7%f0Y2FMNj=#=A;h`u@QSw|U{)yzu>A z_;X(P3tsq(UicrqFxu8Ueg4i1-|U5N@xm=$_)ahUDKFgNg)?6GTVA-^3kMB_^USYb zkZ5X6;NxanV|#myL42mgNAB4C=7gP?kuYC98BVt(>f4*k68O^JxTvws-B{4n#t-5_ zs6E}<0*XZalD5YB1H+4>ES=xjrhqma#n2dpIeDV7zBz$!iahB-;x*7{ z3yp;X%*r<=5VAlSKYmm5;>Nb7bbWI}PL%z=&Qc-Kmu8lvn_8DNCfXKYB9x$c5}Gqh zmL%%i7G;)V+FFi;sGXz{#L7>nO?Hl{Ercj2V1tAyi?p$4_)D3v6vO zFwm$q)7IL8Ng%?ey?$X+E?|pKE^IO?*3{mfL8(WrXjve|eJMbeR-3ryMijr6wng>L zO*f;&;_M8Zm64FNHKSOhn{I4OwAQB=a~4!{3k&?hrbP*UC+0yMgq#?ir8#s#V;U2Z z+DSJ!V9- zFiw2HUaGs$yZcP5JHaG27z!E*FV;nd90wLxZv0k2N!XD35OcoaD!QA$UWxgm_6t( z=jX9V_s_T!wr4!YnF`F;b{lmj-ciK;ckC^FFqrx8k>ro(Whl;}NWFLFsU(IYA3CZ> zzs$iuh9Df@OL$N469~c)!)tSZi;dX*$LmnwB3_?e1!|k8djnIw!_Ok`X9Nl=q2<&clcb7ewPa`_HdcY(c$5T6+&6K z5OWzSYBvT;sjN!%G~#$HUKdxUA6;`%HJZoOvX;tdSY#^QgZ3^13B0^$Xkya_yXAj5QuS)y;I|?VL(8n-Q}sF|lzXr;cJO zGAB9X?X2CbjL1#AG!u03N@tnoXwg;13JP!9I)z&vZi20Qxv@fnsn|E335J}=i`(ce zDHoAJrnAU}$GGbRTq)nTL94s3`(uQB`KJI2lb>?(=Q+bL$Rg^? zUk{A(C*h~vTF3NWSFYtAY3bz3PcQVB5>#%+AvPfW5VrFvgui?f0N7f09qMA6ZI#!G8?QHTCf2+_*!nf2)J2H?zWz z&oS|GH_FYi?){C4mrXuyo`$%+>;FAWS!uEEK&d#kd$cy8~t$+~OSC$ldOxDT0uK1MQ*bWcyM z$-a%V-20|NEKUip+3G~zHa@#yAO$dBY*E;OCRVvn}5J9U#+tPk}lvZSi|Q11Oo@fOB3~7%k0>RBw50_BBa=5(i}` zD|W)(i|k$d(IeG&Bz0fICeYwz+a71BT{EO$1kS5=r`nq1qPyPTn?5ZpE@#f<#k~i> zz!NpS$3x%DVKxemokuR5FC~P5kJe;2LETh#qaguua!uC-u}ou4_V|H$JfhqcCxcEO zmF-Ry@6DcY2mJ6OET*_@J8ej!&xu4@?R(-3wwm z$@o0u4K|Y0N1K@JFOZO2Bauc8Uymb_vm3L2sLj4yo!w(aLhqSqE0h&Mm&!`Qwhl}Q zQ|)O{&E_h;*5pd$KrUfxgJuH+&fc?URcANWWPgTMER}sT{sm|^) zqM55bYcrLSwKz3-;LLq01&R>8P$cryiOByyGyk)1m+cPhlZ1VY<*M>cr|i_TEj`Pa z(6y)84Wex-yJO(oFm2xz6S{hCHO6;LG~K^;m0OB#aArEq7`VLh>r7f>8pnM7(H>Eq zL5B4*`a^12o9*9^mRi5ES5c?p-P@sjGW#oN$--G%GBnxOQqc2UGM@UQu~Ef_c;BO- z$*!+1dld$C4<*xH{>f0FypBM7Suv2=-v3!pqUnow-$k}vdq242;=bwv#O&Ew6|dQj z_$ErS;>p`4X4m8S^LCYMb@Le>n(TTK2W-ER`7NG!U4Pq~sgS6KSI6mi#*A0mWYb<4Ni0Rr>kUqw!z1?fQNcS4)a95S9Um^o=c=*ulj;`(RG4?1aG!;8C z!)kjQiUxjQIJ>Xl@<8|mIx7YTJ6me-buCx_`ftG_8vwcnd(*>Hy>}G3XX2pt&puDj zK&uBLD+%U30cr&*9i>z{B-ML$(ZJbd+rpcxKrLym^0boX>YAJurhJ$tJ+*0Q2{kr4 zpzE+Ues2oF?1q}`>$&sMnFF?d;lUwoJ{#V{YzN|{RPS*m1EW&CQ%X|3XDNOn+xB31 z!#F-qP{UxQ@ip1qDYVNcqGOTjz0jy3MIe=3m&z8BZgczr+plns5>>v*~9-#Bs^)x+WNnRo0fBaw`7czLR$n6L)SUzlni97ysGR6wb{2! zY_!R&0ky71TjpriKRz%FD&TIIj0%wf)vTDjM_{cps%Tu5-Q(3f=$>=Tq@k(agV7@} zg>X>)XlPs3nr=Cx1F!VvUtN7VjTddcw%4b*a=VO3n_cppoIU&UnyGVUSJyT0vuvX* z7$tRG*i9_`jgHB!Ciqe5{IPDwg&YTbb1k!LZ9UfbvQuhr{O|u>!d!^@X2N%7`DP-o zvr~Y{JL}zyjPEGs0B#&ljFX~E)fwBF{3EP!6XblaY-K#Sdj5-!e_4KfE0;Zax-59gPxBcMGptM|+-ha%5%R*~g7h=Mgi_ z^Bk`v8Rnhu-Xce)<6La3GY^rk0@?j8&KAbmulyma!;W62tzU3_zUcGG&#QZUTQlw$ z_k!NL@3^=4ajC!TNyKrg1JM5;!}KSgFFGACFX%w{bcOL@e!lAX+)8`w-=2RClW}W_M`!C!{+a7Tn)1&LC;zXzc&vZ0uds%}M;x18 zG&02RaN#0%weyEhjg50*H*GuCGt|;odpO%A@|o}9e}O*4S2_G>cm0mTKkea9J3U1| zo#y|JZ@d)u|DPXhjsE}c{9q|nF7t6Y4&{O6-*=}+;5_F%jGo_S!f;m2F#Pfe{)q_w zWf6QvMbO`h`V}Vks0cn>_Y+3HGlDLg{Zi4{MJa2L3x4=P&m?&H z_Mp%2G|x2PzcBb=j@tFT5E^alb3}lfz6?Uu#y&FR1dm-uaS5)Y)OqKo4+889hQIs3 zfUxNg;`)f;b1Zz;nLYx%orZq6zybYRh8{{eXZpeLpKS1h1rFAgt_Py$=15GQJ2EPE zVn8qUhgjpl&d8LxIZ|GT^V5XjNkeVF$1qKTbC8*i^k?HIcs)Tl;-}#!cnLu`;+hZR z()oO}T+PQV>mJ1CW0uVzJ_kZyinyYue3tR`yeNYIWeV4NE>Jk10>b}#ha-E;H!8u~ z6wXp1_^l47KI0Ys8HJy!@Kp-ea`{G2=ga-Bg$=IdKH_j+?#~s@?~|hED+)hP;ky;i z;TfUlz6*5Z&pImjNeb8ck9WAQf2qQ?{^u$_+HTVouI)BQ;aZ;tg_kKk4}qVK`d8p5 z`b+-q zqHvwAgu>5&U+lv=PUq{d+exke6_$KZKGrK-mrrRY$zP{ex06h>=(Ei6AvR3mI=^&! z?^g7MivCLur`!Xv19hhJ?QpS$4X*8=pBFk^Qf~cx)a6#Et4Z5_6wK0009ie9IS zc}hq9^>bP0BcIV?XRW_}-f8}t&)<_d9QkWLUp1)3HJ`^7uK7H#aLs2x;hLT!)pWkx zvlU)~`;x9|h3kB&b-14|G8dLOdu77s8pTKFOS{6g{SQH0I_jzQm!7AuKY7v-*ZS*n zsP&&_s0TmyFHyMGU)mG$*ZMa(dg5CDBNVRnXCBd!UguZRpcbcYVz+A@PTsm5Xi)T% z75y;^*Y)cph3n^|e!h@KB#2<{DhA#&pIF9A~Bp_4&Sk`!HeJ*K832h>3lp&;W{6se?@&hrudXAdfk7!RN-3B zD;)0YDfNQ5)^m~KqxHN^;ablgg`ceS>{Gb5=OLh>W4d%XOb~>lK0?DV%NQN;Lygb= zOFKVtd1oc`kirjheqLTxxV(c9l6HxFq>d9`;PfY6Ou)I73O`&xT(>KHl){fA12|r! zZZbSq;iCySw@Tqh3W%%Bq2}$Q6h67o28c`FhDb``V=RgJ->UGV6)tm-$w%rkZ*Nib z$0~ZgU;l9mFJ;EUk&pDf4Pf?xm2FkIpEUP;=WN?x@Aur-wqTR^*;mf2HUw%PRsTz1 zut|Jw#;^B{F86KFY$l(-{d?$V!pKeM@d=W<)A9=>rX^>vtkBa;v$OYQ+OjqPm!X=l zNnm~m{P)4se28?bV$F1EGx=FbH6J8}Am1cPd0zrWtiN`+Z^8R#I82lMk&D#`Ae`Px;KZLT#Z$!GUdkv^`_Reu={R4c!GN4lKRksll#Q&<*-VoqRB5>iYE6( zJerT9$>*brDC;#p*Q?^=m$wKKrA)5s8&(HU^}|I53X4duHWT)Cs&>jErfn`FDS|l- z5lljpV}u<*a!8lg(gb@y!}C9|SfK;Y3-`z{&A$9w&dwIx*Em?AoO^5r$oJtR#&;|2 zDs@2l-Qy-e9)oXR@jdZ*&vr6l|Ip`2e3g5M%CnU3X-p^kPIQ7t?f*Q}lEvw@X_C!cg-@>jU@Yx(St`tpAeA%BaL zZ|0a7P3%8E{ojp{zt+hg$Bq>o)6f2`FaJU)Pf>pTndvHJ68E(8<#TOYSo(Lk&R@z! zru;a5zWn(S@>etyb7@hPAEZ(sgMREn_lw>qX@bn)fl%O8&T zVe%8MGppsZKkv&gi;!Q;$_m$OFTsCbKF^~HlV8l2YPhxLzs-NXANcaCfQ6-hm6QJi z7hf*E{0ng-OupUTzR^wa-qU}5r0 zPa<{hIYaxiNc!@BfqE7uf0ZM=iAlU;0XM~7g8zQ{IpH@<{^FBulu{Ry=_ll;zc0f6+ns#* zF7DV2%KzmN_Fw7b?_uKLD1R(|zWmt{>0jXnPxM#``S|I7IwJp8x%m4lzZ(!g%zi7V zES&U{sQ)s-RWEP%WE@jvO(?~%oZ z>%k;-Q{oHsCmVmzTFYV=ztS^~q+jCqN7(N{XTR-EAnkWLeiC2o+KKW57K7YOmvJ-M zX@eshK2rSnSZi5UHkqp|t=sQf%Zf>*A9k%}=eg9tx=M4Yj7^0`ZfzMC0i41WT9Z=Q zKiBl#UX<$EXjevHuKj82_MFi5R6%ZC83@&qfJeCgQf}7t-d>vOZ7+4 zfJ67aK+W>O2jJmKgsxl0#L~mMZYheHB_VEZJXQ`Y?<7Un?YMn#vg>x-ABnl|!TpW} zsfJmJ?3Uzd7bUXmhW|&p9uw@3!?gP`k8l|$=evKjruW7%Oy%euU==Id46a{ZXH<{Z ztP}0I+F@H%(kw5ouf#eCS)t@Ft_zmdrMmuz<(YQ5rd`Pu@BRl!hE}DR_+PfW>^Y-J ziVGv|Ve+u@u=mHUC?u)g&vo$9$H8W|1_9a7R+HUemf3LKpNkE6p{yo^MX~1Ku1*^W zTU{ku`RfpBvs?jG%++SsaLvhjrsWQlhZ{?!ARwGVIHkg45FR7pna0YyKYbTu6lY3z z-(@|gr0(4G2%yxR8+lpH;oGo`yb>bwT&nltQjIZxW+879souI$mnJO2z%mnS4!i!- zl`JeOPM^}Vw&P?LrBp+Ef{Qt_zbo53J-es6Y_r&TXjSjzl3Xru0cHYa#H8PphuM@k zrY8Gr3ac|w_-)3fvYQMCPvmYC@lB@Z2CGwpGois5ISpP7(V&<)$m+|eY-V!WFh|C? z^?xou#MU%ao_>E5&Fl(Xv-rlTxY1m(LW)wZ;=-;uxQ&&~xk^|C0IQ~Ivr@ECv`TAw zt4fMfz4&VlmPdjPw~j_p%OqgD_F^EnGXCBF|=b#gXhkzB}KH@=u{tkMj+NUa&dX_)$2{rOVsP&VQ^W)n77tm zVuDDm{WI%X|5Afu;2tlJv3M~vUcwb?MR#u+67RVLery5|KcO2QHcbDAy|;m{v#9gM zPjU(bsXZa`QWWGM0Sc5h=?kR1nL`tLA}Lf_un3r@N!kR`Bqk@&%3Hfhm9vLHUD3sR zb*=yPD&BQhcI7G}FM$FDaka9@tybNltlMrt>KoKIdcWV9`JLx?=FHQ?yWV@<|7Yj( zIp=xiJHPq;W`6UVmuH@tdH&VyghQv;QZV*1Ji~}?an>`4h7pZOQ~oywhCN+lH@QthcFa5h6lQO- z(Mnn%*G!nQ&HuExg_Gxoyq5aZwy;s~Q-X$<)RSIhq!>59v)FD){-XMl-SqP9K(qO0 zUq^?POr%D)f>{fXE5M)vy#mImuMHoMF_r65Z4Ec$!yh1`sV}!W1<;I^Zhj>-`T|0v zugpBu0AKwx5B}Z^$oHf6jX*>bT7zlX{59x@^S!m{%%h8#3~a#0co-ZOfJFNJs6ib) z!N9Pi>{x5R-Qks0~r1=u2gesik%Uo#`ypG2EOMW=as#?d3csZ9OFICoP& zo_;*_<;PEdEWZ?mvm2F?hN0S$EKUeOrM8)DDxml>i?*l6=CMe~ZsIJcvx><`jlKzr zwj?9l(Nx$tAUA}mu{Xe3?1N{9yo#;K#(?=u;s&5uRGidi&XO2Y;nUsd-@u1wIcsjt zWLV;#W*T^`!gf~{h8aV6(xEdGnpXbR>{u_X2j|n!fDBn=INSmu=48w!*WgU15h0s? z`?e%LTX@LGZx0MFq}r>XbJ~tE%2Q}HG?%KqN!ZDz-@X;ZsnNZ7)I$WEwSb$snuSwkSyv(LIOp2#lxtWnS4h)}Q zt;VE0SH1U3sFYIm*!I(Qn({C1eU$j7H<$;*ET?&Vx5xvw_>H~&pv4g@wtlmod>+8w zuNFDu6bDn;40BX5Z2G2_t^olQVVr4?I7sMj$^XyH>)UNh#5aJpfwhB$hfUSv$v%8! zRceb4_!-^EIH-8lEZ-_u^7j0nhi$#ft)kMZP0`yzKGW8@tmx~AhgnQUT?-y&H8d%z zObpjf)HLCL)gjhPMmVp1%ro?-&WlAFM_+Sb;M2#ENxntDBDku zMHO>862+Am=40qQqd8iL!>>ydvCA^VHn5IMAo<5mKC(FeLXNqy1n2XxvHEk=`#~a&AEK@Cs!*5NZy2s6~`U7ynvv zLHs5pu<{y{Fr;<8xnW)Ec67)2a>C~NYCBFGK~=is0KFt-0!Q zu=-gtW4xl|Ad2HE!zUMvL%$q-?{xfjMY2)#jm>YV7&+w5X?M|xzOIbk>ZTU-+=ofG ziGRk(W-{H$J1Z+UNL$6AkUJGKhM}_nX2U)!66|HIbID6Q1bX7)mvyXPa`F1uJ5TAw^KK%Ayi2egH z`8qjmc zAEW=j2YroMjRB@`W*mj<3DCbjTfvMofS+&l5YRlZums)oA6m;_((4sJwyB?CO!6yhPS$0M)X%9zae}6oZ*i^=Q`c>yGB2U32dLI z;NzN(8nfEe2FWwgJ4|^+{brww`FAG2QU568`J-d(=N}D!x4;EFgg*yF`V0}_f4kv- zqLXIV!P4{RG4}A07`Y#X+>m}aKG$b>a4Rq)dh zZ^lpd$caS}U#sxTa8KvsBNjGzH|~Xx*b(XZ>?gQbIB`CY2!1K<>7Wkt6MVTrtz6bt z!LL_1tygea+eZGR5qz_v=NMG*kH_GDtMEES|9yuuowQ!zv)AF2%i1mY&lG;P!hfxB zjv|C!?38?Tx%{E{Y{g%fi`W{|PZ=UtS`1=Z&thrBwLL6_pN=?fM)*j(MO^1s#_zsd zsX@M6oqjF14SeZ*xi?wZ;94%Ksd1!Vf}f;Q?9;cmnU>txAma-CI~?w(^9+S+J8x3B zPX9`UYr7p#xVFzxg=;&!TjAP%KA~`}hyPdQ9;bh|l-iWnGNf7btlI~TzenXu+w&)5 z@M9GIPQ{-(r(-!@f}hBxuIPx<_5{CxARO&P*LNvj;%~xF=%pPaALd2ycHGkupM#&^ zY24EhZ^TbQe!}Ns+|v=)_Mq#9w(~wiZRxe0 ze@x+;&*v1b`8=X<&F6nAT!A@*MQ>e- zzs~Olg|iJ8`hvon6`oRfqry*BxaKcU7EGt+)1>GdaW8VI6FSnr3%?NFqVOYePv_I0 zWMPA!gL~oA=x~+``*gvx4ksU7jxyf!%kfG_PyBHFgpcm`bvdqc^yIJW-OUQua%DW} z%l&gl@5|NwpqBf2#b3*%PUx5(U0#-X2r9w(}o2oENRnA1QjB-^1A%!1?**Jci&pzj=l0^nb+RzTB;fUd#QO z!nK~irEo3x9X2^8o#*0S^uv2PU+zT~HuPFc)|vwywrp7?ZyKcVn9 zD_r^!($7%%Ojj?6OWV%i*$S62Gx0`+OWR9)rNV0nIM=K2w+M*qClr2^!k<^Tlo5mX zDEt^jpJu}0csbVG*}nw}pQ-Sy!jDrp_uA0$@>X+a|L#!u+Z4W4;m0fd8wx)`;nP(8 zk}*Gnn-qScqVH9BTHy~U{3M0{PT}uRIOm7yn5>h{o&9T7c&)-$Df|?L-=T1+BMkn& z!cSB5GhM}_+*u0uk5Dj2nBcS9T(RMuuE3x=oQ@F;D_`#+CkV`G9lEh6*U>!(-$3l` zvPY5xsJ-(F$|;(!T-Mgqv$ks}*V5OMYwKE{h>(kW`r3O5`ANPsv$VObyM3tJ3yfLf zqE4lVqlnI=D5n^*2iG8>OPksjuUKil?i?HU0n1`866&aro<4kDyZmSuSzd#)Q`*|r z4EJ@kwORc|0dj(jIVEM;6&GF7d=<;7OcD5`dMD42aNkfb3m1;~>Sc^9hVaA?{{)vD zJ}z!k#p5iHkDm74ONZC3?ix&}vqX&TlmxQ$mNB_q@7Jo}`7Z0a*70~3zcB3w=iBh9 zdMBnWMCEeW#;Z}AZ7RQ}nK6dS(p)>(k2KPDbkUhpcAQFB z?~Q-)f^hBJ@Tdq~2Y{GImS`+el-{^*ya;|89rwZFcNQt_jUFQs;aV}D zC-Lfc@IU&NPX_nQXB9y>8LQO;49UOGlG$~O?w%K4{%ph#$!~P>vo0>>bEx9W|EC!F z@*HW_H##1?`0~FQBmZ_Mzk!*9qkPWW`SSNbf1&)#xKoeq$;X%fW5f^TfBa-pM|!4w z&R_WQx5vo84>;Xq@*j_pzcV18&o#dM<6`tbK1KOQ#pr)uKtA*0%YPS?7t%k!ML85<4d!K6m-@`Mvaz{50}K=Z4qTgMVK>&qNHxuXFMHiZShtAOF~x z^rv0=*Sq*kKcDyf^gj-UQ0+56dXJf82OEk=@+$d-23vMj*&mh$=~PVQ~ykhFF)?=uYFEF*q1n8 zeg<|PDnBv2$>Lud6JO3Ank@crV5cGZX%}%a`~4N-hstlJdwA9M%ja}oe}4u!A^BUJ z{K@R+7SM&{Z*lUq{qVWpm;bJq{BL#gA1^7ra{FnH$^X4h{wf!r_Hz<`zWkp73*~>n z4Jc&($+0Q3-VATT6GCh{nH_oJ!%luq0C#0t>Ez0HOT2f(Wd<2n zoRGrmi%iOavET>MWJ5ql$Y<@$(gzdW+Umt1@wmw1Bz$m(CrMBu~& zE`EdShb2JtC;lJA=>KV#A^jZjPDGOU(k|Qr{rkEj?|tqiN7~gxru&RQe4d@PKpmK+ zZqxSO{-3?T9xUg8ROoO;RGvqFjXf(Htcz1%cvv8JB zW(7awjSstH55GO^3Fo<}Z*-?d#}K16e|{}?iGLM^g?+Z$%{eUf&o$SNFU|jK4>_8@ z(wMpT>KN3Ki4jYFCWVkWh2ThnXMFaVhnQ7!m=kxMoBgWSxMPYCfJivFXRo=lf092Q zn{`P`{#z~X_?1vTb7xTeS1Ca<*qZ;5N`gCaEC2LFrJS8rA{-ITSr0hAr2Z93yf{{; zxijUv>7KlwL!O+=RR7B6@y67ro-|v8aU>Pali}WAa&C&}e0q^16^?IsgQL-SG5J<+ z!2`gwzOs|)>oi?lP*q8J8EGGV>|n|&)7RqoT+I@FiFqJnMqa71KB|>v_|w3zpo!yD zFrHm?_>R=*-3WmtV7qt=zD5sqW?K2Z`fnID;oK=@{JHD1`Pnf1SBhG-_VGPq7cZI^ z*q7bRGo{Y;<7Xa*Aak71DVl>!z$H=KnXK4eik+`G5SqjC$3BRlpI*Z*@Qy z7sueV)e!yO82Y!x;P=Mhd{zwc=UNQC*JPDT^IzgxBZnB{evQLf2W!-qWu)vm*3)}# z#vT2j;eUklx%vPfpZ)b-D|yx%LYUs0W$FU3pBg+Gkm)+Dzkh1l2t$iMIF30vgpsv2 zClG`q&S9?LO9;Xd=UlPitpwqSr|=Wp)N6-pJ~sfPBRzE@^fwWNBhGRV{DTDHh-*Hd zHK@gPdj3Y?)T;0i&5#e*wg@ikT!?EuoB}_cFSo_Q2G??BJ&w=kBt@^&AIC>*kbJa0 zW!;UR9zJ8z5!d?E`O^A~%h$z*OSwLEzBHe>e8ur`k9;PbTF>VyxmrK%3fFq>SGd;C z2NbUPY*o0{&!GzE8Y{7fw8J@+;7{C2cSDSWXmP#nhB(VW+-KYkaj`u@&nsNgK&T4! zosRT}nLGQ}sPHO<4=7yfI)fijxU@Ycn*R=Y`HIUfZ*J@DZ|}rkM|%#-C5F5OJLa9P zrL*e^*0c}z=Gq3@bKQp2gtuOH*(FyjYwN&Di}>h9%uuc$@4y2KhE!74^z>R1u5d}r zk(D-6NqpHW@R*dF^${JtUG0Ny_IpS=8)n&3XV0L0dv7^#nNDwi|Ml`+B$eYy7lWv* zQEf44jMQW0ItfN$E=shZ!ds}KBv5%J3=FWI>j*mMaT$TP1VEY7|Mu-P7_6=j!e|F8 z8{APeXyu%F7LhOFj+m|s3~c0I!09^1;5qmmEWY%2!b;j#@t=+xpC`k1yUMoD5pta* z^C@*u<|y_63(2o`8P#=@tbF-D1{RXP!$lN1l+Sj=m;Yg4A^B-1e+|O5^X1=xz>xes zPJY%!rhK+bzWi@OPDuV1Cx4ZTFBf0_GoTB}uXBx;md_;l@;O!y$=~PX%Qz%XKEJOR zlD|G6pW_K%{yJbG`OBQ$cZgtj_4D5iJS1P{xOM*75Bl=&fbfv~aVKBKjgkysK2PQg z$**!lQZ1kTtuLSTHY7jo8ijEY?5@6i#tq3|=Hzd2@o0bS*M0fhfQ97mcJfR5K+yW~ zxu+>4f47sb>mQ$DeEI*w$*;pzyMJ@?C!3>v4-(Jx`z{|!6o`CUH%DAHN4v$v=h+F` zN%{qQ5aA(F`(6HbIzsCISo|cu=w&+W%$b_7G}o1`L6^NEOa@u{@i|9(_QG`0O*Th6 zzwT`JHH4|p(LSI$mqwGi#>COkWOmGq%xFT!{jvOWhld8|a!}PfcW9`0t~-z~Q3`wB zxjf)+Cb8$;+GiE6IItTlEI@7bxIS13-3m45!uWlde z>P+|dr3V+(pIzTDzoY*2bVqM{-`ccW7@Mx2H>Yk+LwZ(sE;lfA?%cUp-%B2I*7oSLw_JaD(h4VV+tvRQw>vSrXb0KsUAGkbGvA(+EZPO2{V*kLpD05e0 z7sRA4X{?D1;54?r@O%6tBkL7&&r?DoX|Uv&KmWUBf1|(y7e51;2av( zsGU55zi4nb@W8#`3k@z>iSYkoaM#c(dO_GO@h8uA8s~ioXImJ;*;0gXHZ38XVn7rB<;%M-+MU>^-XM9^OEc`>fRq8+>Nk< z#n(1YHf+E!xecVB1F z=04+Yu1b-@Oi$_^dx%DkAnE zdQCwN`!L@%IB>U12QQo}_T%%JVNreYk-@Fyu>R1xjs^4Q{lV)xwyF-Z(Im7H?>#CK z%O34ZY&>KS5uPG`n3-?A3SZi|fRMo*M1LYdYI|q@H+%k0&wqpGAN2eM&)?k zp8pQdKj!)G^!yt=|DSvQ_j~@kJpYZJ|0d7B$@33+{+#Du>-oDq|IMENgPwoX^MA*LnU8o_~wyU+?+*J^z5`|A6P$w#)nW z>+z(yu4l+@HC)}^nZ}+qJQ4N}Cg|a0bD9IK+=hWJAVXbvT<`4a=#+FQJiNUv!JqfQf^Ztun5t8+uTr!UPp`n1{DjKlPM ziy@s|y}5RS7$zG`bnLoIV0UY;<=&pl4fd=a##Tm?mNbTlxgI&-jL>wJc|zx z5yd{dp1w86UoO$pIS^&Krw{uhp@ky1p@cvfrW##rP{>ejpueXNJY2LjJzc$>X|tPA zpxof_5D12bhPwtMInYg-YAi*}-prv0bo*6Q9OmUry)G;c)&&=5RQ!;(D1Ycou#2x_|}`Kg;>E9-eXjl^!m0Pu(8Q z^(J)d?WHL9PUpYf!?!yBJs$og=fBs(w>$p>9{$hH|Fnm{=KMQ7JV`~t?Xj0)I*)Pq zeh;7JaCz@eFZFq@!)Lmy;7grf;t77W!yDXH@avsF>*2RJ|4I-4u=96&`2Xkp>plES z&VRdyKkfYYc=!v>f3JuCoAW>5;Rl>w_|a?Z&5hA_dh{}O-{axUj()#~FL!vAy9)p7 zoqwi>k2wD<58vYaB47A?$>CX#{yFDg>EYZfOxNwa7(GI`I!%ubi zy&itP!yoYQOC6pzsj}^fgDm2XHo;jBZuP(*Mgc=@9azRuwr~QcH?(th3&+FQQ$w&2 z0Ovon4}n-uznRljFa)wJ&AJFsl5g4M8xNVV9PBEJHcRNZ6({A);sbCDPPg@&bRlB> zoO+kdfA{4dz@bD>j^opAV)Wad1ZS2-lz#sHcjv|~nG){O?xM8i^iHnRT{!YFgpG*Y>`T)lDNOW5E)&M4ZBQ%|iH8uAAKwMedC3H+T*CEpR>6Y)s2`$rI=V%2p5d(iK z&{u_?QAzs8cowyM!l_7>yy1-!mo%&IBfs1w)%pa%cuksBQyQ`NNwr5ohbD`w6*Njd zvdY27xiYBS#eYXib{Le#`Ooh~S$+H=-;3h8nY3r$ZG(M>@Rxz>Jt$&%FM)yHvtsHH zFuQ&udJ!V@e5a$=ZwUTtq(`p<5&Q!Nj|O0ZKa0Ap_tpr$#NdeJoZx*X{j$m?YGdAP z_@5)>#kPk7LH(T`$=BVWtWn?b68>`xKDUey&k?FICq&pFq5q_jduAE^FN|E7fr--D zV{neJtrI?XntXAUODR6j@IOW1V!qOb&q+mG^2PUpH3^w%isW8u@TlI2+{GqeQN0%Y z2_rYE*MgsD(kU}e5&yePdX6rpN9g~-(4Sm}p9T7meQpP32){Z8e-F|hqTh-1hwuiZ zCxmm3C4}?&h7Mv9jrhr2p2qpwFN9whgTFHdKR*UPF9zpxQb;aKS#WuVW%|!mxK4j# z4E}#JUsFlvRPy`(*LMszS=^D`d&EpRu)Ve&j%H8ww1%*o+KxkayeC8D=&$3L9UeETjBOuP_~vp5KhLf3c^W#`SxVc_ zu^RI!eX-!b02q?Lj7;DrlmAo156Pbukk9diFFzL}e-(wpO(wrTMt);JKF24%{3m1d zKVYO!E`K~m|0@IXnHOI^$1WlLZ=9lh<|(BAfq;BMzWjb*A^BUTDF3<``L_q;b3EqD z=eyL9{H;@z-+}m{{BI4&=lIT-|C1Q`_f1j$i!t&a2*?lZP5dF`gz`V`p=yWA z<-52E<$p&&KF6Pa{__wXlE2#tn5_PdB63Lno`8IgXMOn>AaY3lzA4J*cUwa8<)J{@ zIktZsAN%s<{5!w>Hi-iLWclZjY$5qG-9w3%&+)b||F{_Y^XKOg)i}TWxpzJ!zb+u3 z<9AwS%Kt)){8a(@ob~eMzZG&q@*AD} z$?D(HpbO=HeL((60r_8uDgRYY{$%>+cdhqF8KeKLQ_TNg z#OQxtK>nEl`L94uDF63OQ9jplh4NqJCSP>>$JuVb{>=gwl0QC0`6nZONPapXpR@M9 ze6CRp$=@+W`S}?64FUP}0r|g)k-yu?pRE1)RgC;)0r~R-^0_uGlz%f31p3MBpKIoSd9HwgD>4=^0~$?B!6Q-{yE_1m;YCgdFH>4!jxmbOgGtDBCb(%MP(zn ze_5+n0>b0d{!bgfY%P(*Z*=JpK9YX%bFE@1|M$53vwZ0|{^5H9i7)kXE%fJ!AbDcH zV>;7y3`}>Z|K?hv1@ouAmT3Nb?EN?7Q(sF|wbmrb{587&VQ7-)v9{#j$d1vl5|5_w z_aNs|_uyxCUe#yw+gkGjRV{@}tFoJ)$t}kTxd*{jQ05HmcpI zl^x@NHSq|CjgH_^j%puCR7~dqx#N~Nzf+EM&2B!BtAmW+W(!LoZ#*|6TWGB2%^?)L zLkVS9aP?mNCARU;x@_UmdvIr9BISO|_6V?@Y1kgvT|d6<0hSHfh**ZF4-!7TwXkyK z(#^Yahi4A__<;j(+YnoFqIO3eVqI9cjntyE@`-{4=%x3LfZ-BZHlNZbd>K z{2KnO-5^W1z&`b^z-)dowUQeB7^t?JN>t72P`^0SzKMsnCw?4d` zm$y9p4PK@{yn~lR9)1BA!?m@9D-QL||J2}NuGzv(Gi_oDH&w|^wY|yzb8G&M2X_}4 z;}BtU@bvpKZP#jDg8=25DlEztj>+#ovocq)ZR9{@?x_0lkpmUOzsMFgRAmc;RiQBH z*P8!V6O6Nk2c0JNa_oslfSF<4H{peAYNw5CtH|RbQ5J2x<(-9GXHt>#+_ zk1&4*bdg%~uRr)k5i39KJCQI=9ooEfAvvSh{2C4EO~^b>$u@=vtp*Q5Wi4ey(w z+XFjT5&77t9*A873T;(QFxgqnI4%9M%*Y#+xgPvi3~$JeHPtp`^G&sN*|E{ujbJwMKFzN5 z-m%o|hX3A-14i~A7;dcJrO7E~_>zgswTPx#RQ&1q)Bu_%BnKr@|C~uS;^)R$X`izC z%y08q3n5LD+aqklgvzuSZy&dP(H{r_)g`;Y- zW39E-2fhQ6%{_>nI1^GN9ywY1Wv<-wkC`xNx$>%DRr)I=&X`1?iq}Wog7gO%W#GF4 zsnJ&;CjTAxp#e7tD{qU=L~Cl>B3R7w%=T%usAs5X*FaUp?qqoR-VvbIE=vYCj}%*= z@Ze_RISCnpreS|v!?vMV#}Z4B$e=Ad%R?9Lwl4bU{ErpwFUElp_b^lR{qg(zpW`m~zT16m<)7XrK zwDLJAvS7Px8$UiTy=ml~6~l*cR;K*$L=j9W2@8{D-0V8JM^bP|8S(CV)(n+!T_4o*K#}XT%e6< z_)#q^TX6PmhuY2c2PQHhL%R@aH8?12^H8ZD&nKp9rmgw?>hYnZzojZ$3v-ulekC>f zD(=mo@^>wThl}H4YUMi&Dcn+pUYDH!YGE%+rWb8|{^r_MM)77GYm$`Twt0Mg*4(z_ zpR!L2cmCRFEOlaIVr;>g#d!3^9y^QFtUtB9xZReZUA@N zgz5C6X)tX@YyLN_?lVD|!VKo(L*O>@>&nz9OK;@Y6{*d<;RAyay?2Z8ML92)g{@9# zK=ytMBsSrHP;02ux0fbnlJS@32Fc(}l#IOg72CVlqxMd7gTBryDVc*6N-DqhjROaC zbmXZO&z81IsXn!snvi@%ns^3@bk01ExZzv1F(HoBjFwvR+v5k5=w#hs663t#MH52@ zRcx?9Ma10s9EzN?v@p9CMx2|&;#@638ETN-gZ9CY_2EVsB>X>L}+&}a=&hSJf zHdj1}_71|hcm?w9govZFSy6%8VqKs0Gl%|g9;kE>6d)y(9d zs^7IGGq&LE#R}D0ScM8D58}CVkxuDbp@v0x?miFC-8Vn0jbQJ&c(N}6-tGYtN9kbU zU#uTi6?^x=xR9!-eZe&4ucUQF1-$($2+cp4DKsZW#t)zaPK|I+C+fdZ<)SB3W9)P@ z`6r;&y>G{@8Lv{8ErnrQNs)qctyufZgnf6_K@OAB+*@|ss$+3iWP7xObu>aUyjE}MTmo8N0RX|n%mL)MF- zci{@Qv6zF&9Jmtwk!}C7&?wLci?ccm;6z)t(2TAwxxJZkWW0sv)yRJBhokngtc*A} zmnYBs#gSoP*ecn`JWRP0SI`uo`Ln3``mFQ{6Q^374?ESlW(KxIffp8Uo&HJ^ho>NZ z(yHt!VX{c_l#&`{(z1oGm2`lgH`q<=0B5nUVl}nTj;;C6)NV8gAL=ldGu^cdui&{Z zHTpDyP-CYjQg=R#+x#}9FaIRQG{>8{G4_Xc9weW%YQ@9S@i1`AjZClD$tv+dGKUxC zxV}mr(i$p;-;c7-7M7J1ZSKhyOrw>R>*kGy2b7r|IWLjBGaBW#TJR84sOlA zN=2Y)whyB)io32s-uJc{1z1XqoQ$?|Z!=j%6~c25gRHgMveg>gd!6ZaFwC}e`39R; zVKn@ei5*Cxb9jcDsjCqln{Ttzb>?}=pALg^O6e!}FDaR?&gO4S>+vDRi>3bjjkCP) zQh)x&IxoD`pTDue3orHOZ*26!Oa1v9vtD?qKY!ygFTB*Bzj37(Uh2=^xXKGJ_2+Nw z_QFg3`5Onk@KS&N#`Ru!sek0vjk>(Ez8?=f9fKPNa{Y6;B-s45^$ufMFqg-+xi5m? zWG?HsU;XgBTx+gBR1$r@golIah@`}6Ulzh*-{!?D+B{}hq+8$C-rL*8xI^f${H|J@gj&*#WFEfUR(t?Ac-5ZigL0W^lx0ABc^ zF8i^FO`Aqy?t!(A*i45xa&vy#Y=?pN`s-P`oW>C*f zVA1Fj^=9%b)-P-COJw~?ECT{Wy9U489iK|S+^voJ-_CqK zWT7Bx3E|B59>@Pw7HBBnULCluBE%_!s$y-s!L5Ng9PH@WCbT+?Yq}}pGFN_`9xd%_ zeE_>7fNgb{ls)6#AHbdtVBZg5`vTas!O>U05&^-H3qO10jxWK-5kKS1hCHp zum=LzHv-u10QSoOR>el&)4}lptS*2x1+bL?tT%vd3}AOVOl*tgaj%Eb-X3z8GzCn5 zoWuMl)`b0xQxGMN?LkGNzlh1&!n08iiHo0Upxcih@j>IWb%D41o)7U$9M1I7{Q$Zq z-e$eU(?h-sgC;J0wa9rE^^5qQIeOW5y2+*IREKl6g6Els3>X83D6UJ&Ism>lL)el$kmb+wer+;Z!{8=$)ml8T((u{1&gOcWSh!D<^ zT)9h{6{jKmo#h~qWFixTFOI>RWAG(0xEY0(g(ZuvSZPo)v9uI$zGULE82sHa_~kLU z8CjNvCC!&t%3$c{igFN0GI3=L{+<|oWek2*4F292{OTB-BfN5#OqdaGSwJ%JzA}tJ zve=811}77%N&)9fCfZ~0)iHQS4Bi=ocg5gqV(_&wcy|om6N7VyWw}cxddoo|NqkMh zcccaxc)VMHR=?a*$jkx9eUPhph-_$gFPEH>TErE z4*Ui3TT>jJN6&6!CSOpVb24|BLAmJj=(o6V?g^_=<2oe6xFsh22y{;P>@w*TUzD%^ zV$vCnLu6!mmBBeJ4SrS;Z*g~f zP~Y{Lb(cE)B_sEwBE6Zfgs%yvQ&appKq6u0O@Y77q(2(hA-ZutGWob@Zw{KrjUJ+LspRWOldo06rg)y$hYTK#yF_lz=sy}C3Qh~JNvtm8 zv)agw#)m>bikq55cNzU}O}@lh?YEjq^yfwo*A?j{{o_WTOUm%2CjHSkQ{*0DB+5($)MQ#AIXlt3D{{1&{t{qx zq-QM?da(rJoeGy0%$K_wG<3va!bLv41mVc13qRq%i69(tTD9P8f9QPv^%gEmC(Oh+ z@?k9#J{o751^+|!Hp_6g>EY-?_(+dNxz{Va+0hec-i2OTX5!-t&*7eqcsqVVe+xl4 z;_PJv-->%W;+^;j{yBnhzTW=M!Ukt87WxMqPCmL^zNv6sF0UzE%l*B>eYx`PmbjKX z1ND*4mups?J6y}<*{XD;e-uASKj(qzi1*+p_&a0p%M`Bdyp~Mh$md!7gpanjL51sb zXD=-Dt+=NnpLO^NF6Hj)N7oCTp4-R-&gXNNg$@3G+zbD&D_ra0I}WGZQAPhfMbA;9 z@cF62+Z6t~!nOW6?xkZo*$WFFZbhW?^UH74(ve>0_pJuC_|v!-KBp*rNa3>`?(>(C z`N8<>@;XNG*X4Dp!nK~yQ@EzTI3_(Z1IF}p;3xUIL-FZX_{SCAsqn21_w%dkJNtCu z|M!lba&^6aLgBi8{n+6?|9y&Hm)8M>>vYPuUVT1qR`#I#1#J&Hoo6UJ(dnG8_)v!A zw^7mSbT%tor?WMN&vJ!peO{~h=yVP#T&MFbG5UOm(wnx2jKV*n@+BixmZPp0?TTLK ztJ~qe{%K=$#K}wawt*lVF`chF4Qg?nFKwT?K5ljNzTCf6d~~@`9-U7wdSkfO&zXkW zrl%A4l71O)`g|5SdOyF56(5~nd4ix^o!@3f&$1A?GGZtFbqc>*(d+TXR)y>F$>$Y5 zfP3NpErn}7zf(BNTIi2ZcBtDco)tyMbZS04gOQH7ZpY*s>puSHieB?K1?c#E16N7U zkyJb!`3&PHINM%2;yV4hAJqJhG}M+}^Vj`_=1;zKyw1W;Qe z5Znu&ISwa(Z9f@>Yx_CT;XZ%ON87pXFLb_0Lr1wf{j@zgpFed-N1Sma{WlSW^V9!f z3maUg|6YY_{p)d~w&$l6eF66(_qz($b}0RepZ?z~dfjgD>@qs0U-z3QD_rxxSm8{Y zq~~&l>vn89nZuF4wx8n+YVl6o3!k*Z{q&!v@Iw`Sy~BO|U#xJg|DzSI^{?$m=S$i> z^4Iy&e6(Htp?u!0($kH5(Zf*+?^XD0g=;%GU*Wp_k#RE9uW^oP>4?*|MQ)xT9Py{{ z6a3=@;fQN{*h&!Y4E(g-?lq{T@58DT%C2xvsla@IZ5 z`Lx1$1_d2)%}3Vy`sKJl(d%;L`vp4k>BLXuW*zS5OP&*nGmg+-rTFM_>{qxh$D0(c z)Bj%;uJikOh3oozpTqrhnvL}?jk=wDM)A>h@^gjLHY8timcFm&(j~%Td}TpO1{|i0g7(t@!A2yiwu096zaWZMR=m zxGu-%V(=d*T4yT=(PJo^^fsrlQyQKgZxaBa)8k(e%GkxYp0_9M1McAc2uJ)M@e_O;_jJA;l7^1-+75Mn=|q_Dd5Oeu zKA#B-myLUW<#6)X^}R~jgRbv$6t3&_B{BGw3fJ}{^9Fu8uT%6ozXgSBK7ZkGpUd zG+{3~62Wcd{&%(1j`KOKZEb6Y`#Rd%=9rD{DyaGL%Y(7iUU)yY3NqZTY`(nZ;;Y)0 zWiHPw4f2Zi(fh1a2tP+=x5}6BqoQ+z!$aktZi@=ghAS-%^U8@ftJ%Tlj}MuAcJ*y9r183$!mkkzb| z!u!0TW#k=|5H3ESD9Fj_s{SAes%wLOP%npctt`*bU~hmx=f@CCk_gh2*CX2fn%?%c z5D<*7!XuSOcGuq9(~hXEbB1z*3D$AacMT5q4~BEZME4904R-~?8K%R7=_xAJaWOeU zth%geri?;9Q{PZcE=1A`)2JKaefVQbI?5r_3W>cbXqTgSQqt9xmO z``XuaMJT_aXa9|TIw&#}+W`!A-O%6Bp6lrkP?>C+jzm$ZrmSyx zUAzUFh zQo>@R;HVIddD*<0Mw*emPOdamtF-IJw!Y!sUfr*vo$lm8EIJ8MZL&6vIyBf5_;RNe zG~CCYI8oX;2f-Wh3D7RnZ+p~(UG21Ja0%CW8-)7QHD}4CSDZDJYX@n#>FDel$aTlC zq0Vi%Qp&*aP&vKd3#@C;b#z;atQyuUtxIRu>fyCfpzRxDlHdYO+TFcM%MI?q8Zo@>79TzF>rrS)wqT9!7WZ(oNxRuaQ$ zh1_x*2D%dcLqol7rd6@kooD&9<$BghB8y)>HQ8k}XHRTwv=I*U545cr>?*;GztpJA zh|l1@nYfe%!<-H@KXYGhKM~AA4l=V!iwMn~DnVAKawSKV-6$YHVcH2(-yMbG*)!C} zaa~u*2V#xdO_}mr!cw2wbN%ajIyCYD)b0Kb`yp6!;8U3eFmZOY-`26ZJnc-G3P!h@ zYX{lThIPEU0>UsH68*mXmk~cCzuQe3)iDwr z<#Wo)m;ZMFLiw*I2#4Y+alZV|BYsH!Jx;#N=~6zYLVWp`#K>p4&`l=);u!h&1>_$N ze!lzL9 zeA%Zb3Gn4}9YCo5Kke#Ywd2G3PhI-;?*K9wlE2I`oy>lIgZLr&JKZFBol7|79~Y2+ z;Spi^TO3o_SL)c5+3zC656Q1`lkL(DP(I&F`T74&O#46X3VyQsyCbIkUwMH|@hW>U z?LXThU;g?S`;iV+zat?lzx;;~Ka~FmoP6E>^Szlb|KXVOZ*(2H?DwT?I$!<+G3CF* z$zQ4L?O~e=+Bq`3gUp*%GV4=`u+Sriuj@Y?`|eF#^Ls2*^6#6X{5di59|*|jBb6`zuVd->vE&yF@?zzlxLZ1j)G|k_2Bq z&lwHL-`5%bU-ws!C4km!Rm;WmOA^CMq{*fip%k{qx@k8?O z3CL$(>dW5|Q~t}QnEz*E%KyHAe43;$|8ZnKl>b#zl+Sh2q5MA`kiRq_|Dl-qgMlf^ z{|e%V%fPX1)=Cv_Ln-Z;J7^#Kcdy#hsIt|1~l8Q$5A_e-;xzJ;nG-F#ZhLU)>br zcgDnToMQY5ik_!Q&MN8=l^za3MIzal37?kUEH733s?KWBcAB|~0t2x;Q zH`(~*HpCD0U;6|7*LC3M_upTQk)NKT{QG0%S6^#gqjtIop3{~a#=r;3QZk$7@_0t%ITP1>&)>#G2t zcG%{B0LdtE11|m!DKHo6c@qPO@9T)9vz-2AeKYkxh@ZrlaqYWNe!gtRZ#;$nI5*L4 zreM0?gP$LNZvCQpXE&sauC92OPTPC?fA)d}Cgg0;Tas08x~;kO;>wChBNh0vPUNF> z>jqSzHyWrBdl)Jb_~a};?)Qd#z-|?S9y|trdq{)tI`Xrp?JksGnPZpk!jcFZZZ@7) z_i;q~v3Sru!lE}pfp5p*8;Y&@*B(4sNc3mSw*k~{IX(u>FXA4REu80)@!%OCuxW_C z$#^EPtM}@d_8#8^t9pP6ag6?2%Uci?@7i;!7PocI&}DwZv0_o$vY*tfAhOj7gVo8q^z z@}X~InRXE0L>Z~<#aB`6^X4kXg+o(e9IF%C13KxSh}~|GQaWirHQjvyx+ff_>2?O_ zUJlSnrPt|`ee{~&EY~<_IywJE)5)B@rt5TZHQo9EzdHhSTRl3K*Zm%y%U1C6ktEyb z@^6CN10EF#_n?88(k7pTd*b4EQz?e`AMcwQw2pF@EE{oHnq<*>O5-FGcmN8xq`Uy| z!v6Cc99AL8V(CT-+5kIIU0pHYZ(%1Pd~*za1~EhQzePtM!nyZ0gm-|yJ}X zI~V+43?Dbak2r$Q#=Snf+qAjB-fj5Egm%C=vnPd_JyzouuJ#AV$L`G~C%>Qp$Uaf)ue!lTkmB<@gnWYvkpR)t5_h(1c; zQr3i?R=94xzpwD9HbvjEWcnj3LZ1e^q9Y#Frs$iN#6{<%le2D!>-MHm@rkTGkyxSd zsMbf{xFnyb)98&+#t@3IpHCns20QHuflb!UyH*{e;JpD9wA@Xp=~&thKZkyhDqlNZtTt|*;3>4nT&>f{5>{4 zkAsCP6?z*_CRL?J?`;(+-Kk;gL2+|J`Fil8joB>#@xpDmx6oVX*bt~?>asXquga%1 zJOOf1w_aKQM_=pxDRfHgmwb1hYb+n}0$uY`Bxk=zOt0)HtCPuRe;&&Jswv8U zJ|_Oa6!ZTz(1ql0oT7Z5aTSU${qtn`za*yowoXz0^)d19bMYsW|H~NtjZabj+d)TC zzy9x-qWnTk`gc!J{?}sS@0+50zW)xT-wc!xHd+00$K{qRZk%f!wo+! z;cCtI)>dcnH?yU1p`iz#J6}eD{Q)6GW@oN#%l>ez=+me4OTWD|+aw(U%mi%_UkU6@ga7^pi z&9#lK`2&wEL;4IIJT_|K(yFGyNtsQ*W7nR#>sfHm7B*C6UV9>$+Pnpt9@#MMZK=&4 z#NC?ItFNs|-L{~%dGkwano|Adv2{&z>W1+(ss0PVIgz^aLny1v$nUCBf0jawma!GJ z2foUX?8tADsSmw`5^l=BIP&8D`sWY_IwDugXyTYH*^$Sq)})@_j^DSki@u#2{UYes zr21wbi@z1ePFs`8{S@Ro*JM(=zPl!M>rWeBd!g~Qrz&#O*JM+-{&4#=Gl7iISNE(* zoqNHTMFP2rZ;eY(iF%a>XL|u%B`;Hw=frXqY=DPrh;BfT1iV zbnia^s(+^bx%$@*|M}rxPi@|gVu=)f+qBx2{2r8I>Mk2_;wVcZK~ucBwxOxw$+79P zMjor&^lNJrJcn#){`IB#r<(E;t+2%ErJG;L=38s)ad&TWX&B#B_XbpJvXxVo>`>wHR_1Tf}%8QYp?9C_83)kG))@oI0^F(U|)3YiqVAu34YWzn*>U)oH0OA3yi@m6anu zN#SnJ?JJYuIt@lx(X#0I)aVW1nSWvAC&`iX?@#3Rq`ti1$gx{@H*P%8HuUBEFE;-8 zw;O+Z=I~)pC9XlNipJaPc$s*tb*E`!r6!qFMTScI4|7Li`sdxv+=Af?8;1TA{VJ$`s@1B9?Tq-bBTC=S3{< z=jvbCdj{gJNxAae_}K3H*Eat8eT}KVd}?g^4Hf^02Bnz2BN3$}d()52KfCeSX&Zk# zclfE1Co3nu!}?fhR51iI-FW`7iQM%3w?|$~Zl7k}=xn?hALz(^FFW?GiU^$eI#RJ0 zsX)WF_Y3x#E!>QT5HD@h*+PGnytTa#fu=~CH@}kF{AKtiX0Vx?Y5bps|EcCgV(%w$ z(^6O`(O_l|o+B|$dzMdG+_NJ=Dl@O{tc*k+(1Qx&+o}@dV<}{)tPHD*Jj?AX}fkC zd^pdpe%|~A3(r2MVNvFy#ZAo@C(7Ql;@lHFWM6t&+HByyG_$nXZnEZGTYq0yZ%h__o&UAlYdT>Gg+4T+cJL*qQcl5URtxaQ7{18qy zN!QPtQ#Yp}J*zvH8yGrw?%a0EW6s+C{P8+zqg~iy{B((Z|@E3 z&Kel(=Se&1jz#kqb}m}fc}~Zgd3E(?&udsTzi!@w`gxt_)HR&FpuThAyv})R>qp z9r=`bLH}JV)y^>s-A#w$5ARSfnlbaD8R?5=%(`esU1mnZk{LTHMh?5<(6K}AoOW08 zgO$m)LuWK(X4Dx1kb$^5V_v!%F5$n^QHetD0?3s4E=wP!G8?AM(M}cB(SC! z{+z-I<@bgd9BhL0i-6Nj!;eE@d3QoR&=Kcczu;p8;fNoDpWxdG!uj}17B)C-TIgR@ zIJ;oM`3{VZd{}n{*WX*>`y0VeWX9k~uirVXayUA2Q_F;Yox-aSCitfn&gMXHIoF@y6ncIanT~wemI(e{ zh4bBy;QSsc9qHLd3ZBM29c8*{TH{Y(vbe8fU_)YE*E(K`otkuIbGmVS;zd_n+_toN zY1`Vt{u|9%Xgn=ZK;E0FZ*@Fh=+rbEZqnA*(>ZUbk3xI9`t-p)=8&#~PPVIaZ0zYq z{#&S$4%mMMRT^j}+Kcn{dRkpFW#-$NVs!WOkZODGjqUsW3HF|Oxi)j$kv+bpc(_W( zP_F*$q7Qk-Q7iDbE?(AB*S1h@7Rb$fxtS+7IH$!Z5+}5HllYEFoh`$E$NvJhc}xCMQ{{;nI*zQKGx`F^G`|q>x|dVK7rlU*}_c?^{-i`@LvLdV@t;q*`9qH z-(BI><^rEzWXLp>vOLx$iA#aA`Ny54;R``!?(26=%(EmV&u5RYqjUtprNuk>RA!#Z z%AURk=dG7Tu9r8zyDism&dK`If8IilW1qRsM;KK?XTE!;pSkd0HFD@3@~HKe3O)+&CbTeb*el~{BJ7e%<3?IP3^!!r{9``IIeJR^jJ@z~e zemdfMOkHPCi*q2{GpNP&nEKla*Uwl#P`G~P`-#HYt%}@N9L{E#Kf(Eal#ZBwR(Qjp zHa%6i7y7rb;Nh5l{mhgm2uD5)D>^es=NgxR;nml7xj{RdL#)xkp|uv2MOJ2H+H&cN z<|WPcoN^O8Fla9!1a~+1^v*uEvU}D}I(j#RYuE7MH!5$Cy} z{6k~#^{jMovKHU^?08S^dClTS6LRE)jB9jP|59R02)qc94;EkAKjGuInHM0k&y%$G zI8ffFvJNtzw0$}m!`2dQv8TXJ4TF7zP&Wr82DqL6`m%d z`#XabFW`LIXFvn2Yz$oI;;;00Nd5(W0yiQ3t#Sn_dXn+4#20)agol!Py92A;mFZ^t z?#JgCc)>YS9|PAftgEwI-KPFNdDR(`+eD(#+%_gM(3*MOyMp`IUTDd`-je@aw(uy| zC$tpqujRg!J*0Je*lx}i7SG&nipsq`c$8Us@KpR+y22$hv-wOFM##C_p5j>eUtN4X z5bi3%AX`~FqHS4PJW=Jw zw9+XdDji?39G)%QHj9H1yw3K5Cl4r;1sxsOk z(w-5b<(z6M-yD$QOPh&9Gp3x8azoXW-+wiq4t!N14)Rej`6wJ&KhDJhochd;JcifM z?)}=L-{g)c97$;NbHhL1W|lZ>M%jXy&?`dO`~_rN^mDHz79DIpkQyB^;!a?2cJr>( zC^J}?&y@-9#~l|fjBK0MQnOBn1P(eNOr9>?lO z8mfmEWebgXIhw7?=BL+YJ7!wt<$r>*&3`YOf6V%gZN1OEYIPnY(cLk5%E2D$jHx-y z_g_Kt8F{%nlYap#FSv1YdsA%{iLJ1)TrEs)*KDchHXU%7MOX1{Kt)X~M1x@wCIysnIAZaY#M3a_{rX{okPv=E?{R7DtRe{vGmO|GzBn z=!2SDO#V=2GgWb;y;+jh7Qux|hXKrH^M__PKZpB~?N|tLuF$ajTR2<7($CTo4lz1z z%@1Y0qJuivcx`Vem3Lc--x$-Iw=XgEYo(#I)vnaG`Pp=X2P~(4{Hkr`^DJHOmw6U9 z$I^z;a5N%!-(?!?xuG3jVkmhC>Fnz50@j|xcT>zbox^AxEngo8af=70&I7~@xwNGz zCM1W=BR%sv@c|)wSh^XmuVynGIabfV5$~V+OL?S|&&_oHd-(;xWRB?PB*05{`(8dX zV;1L#4!L96oyof@D}O|eyU<-JXNS87iE+eUa`%Fr5C49L{XMT{0YPzp_g~2VZU}Bs_ZQ1O zc{Z?Xfjit@OdeZ3Y&ODHIqXr=*?BgwZGr-kr4LqC{=%qO3_jbu6>5g~f_=BZ|bWKyF>zx7} z(|ot1)4JtqF*>mo(mmubzK5n`T6Q>$_oaEeMzUsfwLc(ZdXkZ%GEL(??XV>bKshX( zQPn)7dT6rcCW*aBXlO3zz ze!spVah^k?cfN}a{h}f+b&x=4j@RN+%Ef5rCTUg>lwy`%ETuFoe((JBQbOlTmh7gC zNRq~4BEQ@v%ibc|kYrISLMiw$rGWE=_M|f?SuE|+Xvt#B?BiSkUha~KbU6qlnRrJG zZfZ|iSkkNpDucmCtg19DnNSbmDkxdOhk68VS6_&>(*sgJ>T#o)h2LPBycjgk8W zv_B#G2V?M~W8^*-gY$d7A^uQL5dUNh{Ub5@{B{ifWwf6mxqpFt)hK)Ja0NF8`WjWg z1mB1DutwRr;4P3_qwHMpG}^ryv!l;4mVWwL=%+^2YcnnY$v5$RpsZ2tr?lsrq30S^zm9Vp-(>O|wX0xj+%HVNWF|1` zD`y+MMeUo!yvy*3+8Mz=Y4nzMTq8a_7fhdVA^pYg4ZVz36A3eJL+m>I^jR5_ug@C& zMD<Qs>;0KlS^p|r6-iCL8~0v06_~RP-r4W&S?{R zj-)iwB1MokG%1ZulbD!l+xk_5zxV@N>$Xx zQ0RCmWfb!L|7)#h?{(JMhnDgE-gmzDd)F@~d++~x*7H2;eqT!)p&!L(So*n6@u75W zB!+&d_yi-%!siO*FV043BmSbkVf=T2e;7Wc2;NqN&v+5~_p5k;vc{-3KHj-kG)!(& zk$kibe8T8UisZ)$Mfg95@CoB{Y!SI@ipX78MDA5Z=y?ypRIB`7V8Y`R^F;8e{*26> zz1QGyrpCYpPg(S}co)3Y!mqaQP7A-%!uu`!DhuCa;cO!ce`)7Y&ktGnKU(y47B2b5 z)qlI8C(bl0{2w(q`7>1u{v!)N*TOk!L__+E@e_I}|A@1d7>2W7Cb+aiU3zJ05NGZd zdTDu5f95j5?Rc@np#?NFZa7?_VTB{<`F!knw8J4|=&6s*f1SmLGDM%Oh1>jx4Ng8b z|G&3zoBuY8kIny^7H;$Zw#CQh{{suRQXW}RLX9>a(pM#&^QvVQdD}vklyaO~eq_^e1N1+;L?I!#eTKF;x@33$? zUG*58;l`ivxxvCITksnVPRveMoa3Y+Zl|lSDpd2f`QL4D(zCTM{H29M+}6LwqPO*@ zTN+pY^EIq+@)G`WgA=p$zudxY{ZWl5L;8962_HKiR~EtBEu49ThJ3EYPxzcp5Qezz zFKMy3{$k#wAhSpLh^Sj!@CGQj0Q$~sA1&c1j1=O;!g)>Cfy1B5mU_9o^te`7m?XR#?lUw$Z zyD$fZ6J?spEF<$L$U^9x+t{gmA(hX7XKG=qjx75l-kJ{P-8hxT39~RA{mD6>C`5E2 z5s$NqoTcs&#vAwcEbHv(ORJ!VXoe&w0TKS0u5iIFiJaD^Jk_*xNzZ1U1t zgBWIQqLqBr1Zy#0`?Ifz2zx>{j6TmkB<5{v z?u~GvWea1u{iC7G5%P7*`mg}CHJ!oCZ)@ju-Jx_0BD1qPm_MewylrR5G+mj_&d6EL z-ZPcFc#Pe$wsSgs4ehn7!C`KuRKd;nqLqE7A#I_HZL5MJv1G|*sd<+#Y0|dowLRgt z-5c)t>tC&-<_!OQdnJJ(khh-J4_dWI){l^av*ncM=cSe`TMQL1T@ZeOJ>}+S9;WZm zsL0DGp%hA02|dNf-g_5B2C{^le7DBBkG@x}Rw!8Nn;%7#q5P~%kpeyJbq;R2we6TK z{jf`2dhw!y0?({x2+M0!LKTYEng_R-=30m_w|OP7A_~c@1w>TUE{)BSiZB7TapxThXI(g{sN_s(*h(L)$bF^7z~_Lx1k(pp0cq^T|iJ2ALT9 z2DXXYAJ#kD&$g+7!#8sOdz%>Vc3YQLGvVIlNqm)QoJ#vM4vhY+z>h}SqHLRo$|ne8 zx1ss%%4gdwO#XJ$2o^bU(6LYB%IA1rnEd5ODZdf!!{k2|BA-#|$}cYx{sTrnb+(P` z|Bt~kOn+Gy@}lh+@2>j{urU4i8~yJvdc;A;{+O%(R$wGC&0@T1v(5mnJXaRSxm=7K z227`9IX__H_)W&om0#>$pe;tejCa7PGOj*r5x`;c_Zj(i`eDD&mER9JVc{?9N`&5s zF9`oWxDS(mI7B{m7k;7_&pZ#4zt8wz=!?m3E+W6ubpAw691J){D*Ob01;WGRA2jm+ zSp=J>8~(hPIL!YwM*cSAE{-Sr$FBU-kg3At-)#!jNyfcAT=}QKeVBZ?*Gl{u2Ll#q zu6*9h9VUO|DCO@j68`%`!k@ah@~=Sp4U;eDRy+bXwsHM`S&{TF3w{n7$8kKVk}Ln( zBH=Ih+OII~<>AWzaFOsoXa*U!7>98@Ilkb^e|wSemxW&}vuxwae@l_@A25R%cKma^ z!j=CS1b$ffSDJ$RNa^pBa2%HY?g)_|3z6>?sXt;zDSxm?{e5?c{23wg--&b{=KoqF zU*-+qR2et?c~)cJlh2}`<|D__~UttCT z?fl0vU|0V0NIYTbPnNEjWT156KR5ktEaJWr;oy^+ohQ91?yFU?T1%Uv)qc>f*}ZY6#ipwv8KC|7zSbZQAB86ZrZo)N|F6{%_y-WxAELx2FxZ^SLzYyLB_pYC4R~ge3vPU(J&-dXc?j`*G zg7k|hC@@=0z&&U5px&HcbKP@q>zs3ses62Td2`O!)JMO!b-z`J#g(RUteoZfE+1Ts z&05^#Gap+rliq8|+(q0VGy_oPg#9GNuD_($gbjov>65W9lbhH^iEGQ!T5q6S>_LH~|POQYCd5V3qh`rjY2E7~Rq-StD zqdC=uy5fvv98RN8NKSe08pGZ^?uy(Sz1`Y)Nd9LVCUoC$Lw&m1=JFQBWrN=Cmh!Ht zADaLVgt1Z@7xIgT@{6m$1Hbr@`7wN2iuk`JnY(oF?7Hgm zlIWc~aPZEZBe6Zv`>>751gv==wiRbVu`MkB-pAa6xb5Uf_R!~%O<<e@bg~vSzgTz*^_eF?do$P4(jIDgX-%T{Q}wkDX!ub*awE<_@$HLpQAM> zQ!v|n!p#(EhiTILjf!M*8aI4ck8_N%RX1Imn_KNYKzi>UYL*?pXyX!S)|nkIj}HA1 z$Zn3AEZFcnA64o;FO+~2{u1&F`Fb@W+$Wyj;`wKtBRQ5K10)@z;}fJeWMe{fc( z_YpG-o}SDNJO`BT???_S<&wkqFo7h8KXnHl<4)C`_#90ml(fK$ z@HuwAc4vZuLQsb7R^X0(rJnL_uDp79)AHBG$Fr}N^-jnhj%Owg zOc_78{9qZTJ}=;~-`^DZKV)y;74UknFHLVs>yZs< zO;ci5$UDd?@moTA7}K3o*eVVAW4okV=U~%`>w150)@)cY@6n|AZvhYY zmA!eZr&R2Gaz6G0mTfM*RNU-*5@d9Dkn}Kb#vOI7VQmLh zq~-a6G!^=x{ckXp&4H7S>yT+|OvZ3+?8^?_G`LYUDxPYc2xKoZvSn?C?OxVp*w|si zQ<@3XXR>M3*mN<2$(lLR%{G{*a)}xeo2|T7U3CoAMauC znd+BHL7njtg~yE40IyPfPWEvr=Vv3{r&{?-lx>pswS&UH0BJ;s1!D7cBxkmn-_998>i&`2SqdODLN98u(pGA2ZN{Z>f(tbUM}l z3UH3q+k3yHO_Ec5Cc%|9!sjF<7na7Twh!L_M&UvEDPuo8N6g+MsOm7#Cl&voJXh@* z;4%DYSpB>UKUwR_I+TVuV@>c23BnMk?t)8*5sz88%zY3)>nL#X5$R8{=x5@chWHHp zM6Sf3OV4p)n!lFb)}MJx9X<{AhZKBR2nw~YM~&ug8k^?qjUp<2A{E;zH+aLamU<;FhdwBSmDWy@A(x>hV( zc2>ynfxYky%=1?l6R;LsE>102#$|t8Nv>Cxs>=lmoMAOxs51x0XKk>QxG%zmkGSx< zjRPE5QH}MjSXvycWK`rCwca@Fl7)QAHOsK9HL)_?-dnI{59-!gwvK=|at43*cC>b0 znptx#_}X!$ZkP@(G4Af`>s+P+n^$Q212zS!z)Qi>Sv97k0s*T@c~?YO+{?ON*N&Wg zJ7-0&b9J-h;qvv6@g!d3IsfVlx+TlD zj_ca{($}t4=jghj3fKATh{Fi%gLw1uqFP<7kR>VHkflC-m0SC|>Qri1F)nv)mpoh>`7gvc>>?+k0DU9((ykU(cAZ0P3f#LqiI12{E6EQSw(aOo zsdJ_5{~r(@CVwkvX`~;ZzY6<|Jl{A>zB;@NjzkXSv)$mz|0_5lKg=p^6Nw7vt8rLpI1b_3KY;we~7x!xc_-8xGmH%9^^v6hnN$H3G-_`f?u zKC^@?pKYTs`TGdM94Y?UrVEq5&&apaA9=a*Ii?#XUp2TuFa2k{D&vO##voeF2%WqjUaU}V3i^v~1O8F-g$^To7d%LY4=Ksk>@_&s9|5`eNVfo8;x*PsyA@ah) z@9v}2|5xA{=6>WT-A^qNeoq7|)B>&BXdpG`5CjRZdDMgML`K~D zW>BHVFlP91oK4(I`Fk21yRsE;GYB(c^q}5s3%c&PMysLW=+|h~)z#L&+4~1tVoD?R zFK+(NLa3SZ-u+|V&H3lG-jA?i2@5|?_5Lt?3D!4Eyx}}=Pja|?Kn}_up1T9LUU|P8 zzoKHSE&Kh7M>ZoA6@s-6wf;J;WKNALbLmnYu8_y!i!E>GYJ1svIqD-@b@-)KQVV^K|X@HJ2+yuYM! z>v1IlPOSelzK!hYW)B~AdlQEquZ#}O#ygJ4Z$w)SwB~vMS?_&+*9m@45H}Z&+zK7dIHYWa;LW{{uPgj0PzeW4Q7x_b_IWCu0hwuA0ODkSuN-oaUuNhu2o;_UAiv>KYfZ*Di zm^T+I<9;JSKAfx=8rjZuOVQL0Fss?AKGYkuw9L?W|4H8K+3|@R-{Kw2OP}RCc49G| zNmbd$57T=%ufj@@$Lf$6skn0I_6pc>{TkLtQAO_$NdCj~q36UKj!k&)(kJ&{W;veb zO{d0+1(NcF>`2AhA8Rk>A3e_6N8xgeJcrx;MNjJN{u*Q#ldOaE3^nQ(dOv9NcBQ;0 zlio84?@vg}iQ(pIX2+zrq`D${^AEwR8DZz-&FMREMa7}{<)!Jj;99#%xxSngtx@qj zyu#%x_xpJw>CMN5=eR|03erO&`|H2t=9gn>S>vSr**&G+{PIR`W-^Dn5I|Sqt*%O9 z@e^KSDsGzwk-NSKcR>JUPByE*v_LNNl-S0#6eKmt7$S$R!}mjXL8DP#LJ%-XzrWFI z!#(UMG%6Jzg!CL;Xw)JQqMIW~BJ{s;;ujt}jsK%Vf59@U(a9i_D^qG9=KjCIKdl%N z-_=-#NhZ7F<&Yjpe5-^(7aiI`r$59$O_?99pAin`n)Qbx_GJwSkj(1QEkffggv$vY z>UQkvhqehpzC%ynUZ@wX<;l~r%nAzO`qKUP`0jZH;!F46E8leoROYPr7Yv$f-|0}9 zWNu;(5isRFSkFk~=a*rXVsuFCHWfRD{!Ow~wEU;;KR6c0`(wG}wvtTgRXeviiSQ9n znE+KRu^{&T5nxxT3<_s?EU~7u(gt!9?XO7W^2IIQkJRGgSM1`=+p)b2JhQKsWKN17 z+Et#JvYkswlRQJNM`J?U2XOca$1$}IGdDV5 zSbK#egASb^Qx2YWzKb-qB1}29vFD*|{9o)3yjM8i@;M|g=2@`9G2NT#;~Gabj=AKr z%NH*R<{9)S$3t;YN>6LLTJaxx`Vk(m6X=n zyLnS;6I1FFQ{vf)w;VGp_jTS{LacV4wG=PGn*-w1?Loy!pIaBf6$CiN9<(X{PJy2q zd+9&Y%|U~4Jp=W>T-`%(v2s%lsM2J}kI`PQ?`wokSf5$iEzA3ou&Ot7z08<89Mrv{ zxLuU~Xq?iM=Z`B(!~6lK3}=})J`V3R)9|~)@IQqB_%DNo)cZBahxaMn~x z{wDtyj2p?z#10!w$_x5k)>O_nyk(v0O{MFV*AencUs+Qr`jVflsT7PX!pvJCFzgs0@mHzO&9ehfy6VF8d z8T*K`K)=o90m%t~+hc#ux=@gQC0 zU}xV5A&C6Dv*!D@EehS!tgV|APoO*5qgg4htY2Q-M3NS!fN@d?tEl%aZ!;3VVP z)Is?A8h%r)5l2h_UxPbq-h1+^gL%h?td}dqtdtopBVo#aI)t~p>2yXMg*}`r8 zCEdC4HAAye{O$Oa5}x#@;3xXbH1sZ?_gH-F_@dr4F1@T9bHjnMXk7X_4HxKnk%hA~ z7CkREIQj4=_(BV(Y{BjHcDjXk8hX;QO(XPigOj%%K1(g!mV2$i$%kPmd^(EIvmBry z{i*l~{i6h7$UBCg;M{{mL;S7y3H}U081i8p3C=-D8kf&Y8dmgY;a%t_mS_u?o+CRn z?r~%aLwZ{->pL1(F4vk1Zp)2Xd~CVrTDUFu zeHI_SO1NEO(c9_ysv5^;Xjukj7x8(h7@j>&l5Gd!tMIB7;eZTjArp8u?k~Boc%^ILPLB8 zeshdPt$7j`zZ0sraMI5+-%>8Q^vfN3DIW(c+~&W@!pUFwZnJQk{%#8=eY^R7%EG11 zMd&#TCw-s!K5XGOy$VR!N%(xi(8UPAxc-&BmO_84CX2+(vlP!M=ADn(=AF3Ip@gKp zL0sa9_z3^O5I;e^>3{poJMpRJosU17cjA)92uVAExYWhOxpsnvxSA$YUszjg;Vl2f zu-#5WddWNdzSqL52pIFMg$J!@jNn>$(E3HbvGAZ5j4+`<7(VRuY_FNN(}}%iIxl{$ zwU=tBa9Lel*YonuMQbKNE+_Nm7T3zR~@>9 zI^bhzx1zJXwJXyjr_c7Kd(~=Zwa}JlT(9ZLi-F9Vf+K|&wct4G#m&q5R^x#2zE#el z!j|pzt(}?h^~FjvfAOxh+}IE5+GTnP@3nn>XQg}7tsEh?Sod`I6rAR3$TV)2-l|o) zI+|3XN%!`pTf5p?d)sVoT&8YEl@4|$$h_se;nB^6hO=lxjtthG;V^f2WYfmzX&(Zt zq+{f~V1ck%1&k=GJFCvt*NR?fBUOmXr~lP|GtszU`@%H`O{V{_V`+*DpPcP_V#oN1 zeu+EZ@+s{I`Th=G-pIXOX48#bR`YuoelAbqhfU!vfyA~my(0Crl$kxi!sNFAr}>h8 z`2St`t6>u+zs6J&Qm;}zM+IE@w*U*1uRz$zxG7$hapm6(G)(?eM*b=?hoOA7X2Q{ew+i^TsX)3}jvq`aDEfj-8TXt0*)ac)gvdVywBlak<#gyz%$477{4exMxaD5H zKWf6ybw6O-#~DGEanny{k??!Y=s#fGGyPQKC;Eu~=Rz<^WE@;XjTpke6Tm!09eF+o zobR;`-G^9N!rZAJ{(o^N&#&V}-hCpxylULr7~fsmQXPH;YjNc&;ia&*jrd=%*T66= z{+F80q|B=`{La8n+)Mbq2jS<4P^_0u))IK0C=Kh{th4T`vj&U41L?Us_IF;b+vukdMCRgm1CAK*%VN4Dyg?DzZj%2#}dfHcX ztn6rSi>+wyP2+7vYq~v##VYz0cl^Zk9Wt3Nc6?&#?ikwjF}*d>b^~5Efz56HWzCjt zTf17IW4k@QFNTex`u3R+O1Ljh(cRWA+Tf0<&W;ta)$MB|ws@a)Y$aCi;DQ_UbeaQ! zK5Dz^=!;>)XlyOKimoF%RJP@+*1lMKe@{nmJ3CFy5bqEZw281^bxmtp2V|_H%kjFu zGc|^I=xmD|ky`COE<&ussV;Ty^6Y{k8FolUNk8FNRZv& z+I3x?Rd4(C-K!Bhg~>G5*4^IMb$S}{bA5ZPHD;w5to~XR>um434v!VM+bZ1){Sj;Z zE85%Jzzmrs)1kWmwo2fjcPd-HQOQB|o#D*Jd)v8c44}C~NJ3&wM;{W%idB);OnOy! zZ%2A<3_}Akp+bs|b+lnQ8gpuItO&L7tlml<>r#8k16uOP^tE2su0lX**wMA3GlT47 zYsl#CKxpRYW}V9WG7xSNgJ>1h>}2wQ&L}!M5nASIu*e$-B)dRR0S{USd^);R4ur;C zXUZ6l65gW|!kw7jizJFiN*p}lQZ ztOui5eeGD{msV-EwFf%%U^hSW9!A6>qJMWUG6>TZ?sG#_=6R&hw{Jw<(~V+otrbLF z-T3GM*pZHD%ScxN=GV0Lt9KT^eHo)}1fdG=DbD$olN9O9oZ>f!e@t!Sw+U3>npBmq zORR5gSGu)7FQ{BiIq&?)s_wqD3TD47Qp;jv7)M0%V2qjqE!9$pA-Ss34p}zV zn7FhlwxoG+0?BGccQ5YzYii01E#_60@i(-$u8uhQ-?a<;tq)%af-hhp!DnUY{1k;O z$`RGO~?WHBXt!POxgCJkx=Clmk2D4(F5|$`~Xl7_4L9gr%3Qk>vNwdz13O{W~ROH8Mq{XU-g@j4essQq6uIsqIy-Oud zHeZ6W9dC@I#ZVz~iC_C!sN_JE0c`H6K2_DJh-qKblU|Elq1Ss`&_VWzYhKUt*WCObV)md98hD)z0@@Bz-K6O_-^C%<9jogMDR{ z>M9y6DGqnVKx*$uF~6u9HcUjmp9;uCOE$WcBx!OW7EEg-@aN?!I8{pWLCH*gF|?mq z(WYaZVYvR>h@Jhcv}u~%x-Mi9iCl@`MBw(JP!F=m8}xKk_v!!s`@bRZ|HlycZ+_;t znKFpDdsB#;=|KPaM$z{fScdI6_!rLR4$kvzXjbWm zPyZ2v_c*wW3HCeqE<-=y;4d0{lY{ddDVi<%;mbY6;CDE9gTc2t_)3FsbMRq<-|gU> z^Q76XAHLil7<|ORe`WAJ4qj;z&{GaBb7s#u_##8U&%v)V_fqlo_;LsTnZY?1Ny7(K`45BlIC#_)UHuL|&)@?NevQF5 zIrv(GZ*lOu41R}$f8XF+9sDJOZ*%bJW)9_U2fxVR+a3H$gO51)3WM))@J$AP%E7;3 z@aG)-34`x*@Rtm}-@)Hn!PvkaLWfp6S)@|Jnqnc%;21BrV;wj7`(;7?>4y1{RsUN z24C*b?=|=;2cLMXmM4=-!l&8b{SN(&1|M+nI}E$l!N7_;Q19ckqn{A93)X7<`X|Z!`E)4t}C(A3f*ba}B=F!B-f3zk|!2V+S4l zVM8C&(G#Jy6#WV^YcT!gj~J?IKWo9Im!FA6bt_gEtVq+73d`8JT&4!;mSK3G6T}m)!c`Ht`)1!QbYY`sReCEaPBW3?B^{y>3(iDFIY0C)&@Qz!W?FIhGFsqkMOc`)Xh`Rb1F)8Pd|o^HTGkm&Sng8+V6I`lK5gk*~k> zd5mHDSD7_#`;7zY&oCDERfYkp2kKI5zU9$l0_sR}>?9Mvh+96RCj4xS?=J1I#(ErY zM&!IeS1-|D_-?{WnEz!vt@xAvXVE9_1^-82u53V&xY2(bKVYbLSom>{{k(I7iS;AR zvDeRTc++BWA|c?S@w;u1PHW@Xmzy^RbuV9>&*4Nv8JmaL854 z`^)e=h#h(wQjN&L8rTmEYI>e9X?>KL0< zJOmA4{d#lmbll2kZmdjskE!(VY3KldDjj)#kU1p?aod^lb~lW9zl%0MgHy;qcEmfVH$FTP#%{G@fjF3d;54?kV=_4JuYs+kyHuq-*BU6kVDdE;25Q(_cFZN z=>2E2_a91ul=nD7D-)M%FLB4+*tub<-6pE}x8QLY!#^jhS<;JE16JBd{=of;$g)ZA zPrPUo38*5Kdl&BG%p9*}K{EvXswA#jT$s#VV8EBnvy7JK)r~M0-#)TqUqyCg9H(3* zhd*AK%H2?r$h}Pwf~b-gFfLXBy^!~QCiy)fb-}yRI2Y@AMOC+V>>SNE|G=oPKw(1= z68cH+xge0mb9nO3M&2wso<1Yx;VRWb=~HmH5^mO1tZ;yr7Uk_odS#@0BJT!Ll}q6E z#Gylh#}-tmj+QF!RC)NW7F+^anao{Wk$bBo)Ve2dF4yflyggS+$*7g0CgnIJO3>u+ z0-PE)o{To`Rt&YS6SEstw%=KBywCOLqPeAK1$eMI5B}Fj{WL9Ig6$!xMVBsH(Thp$ zcJ7V1G}Tz#688ikc)HqpvE3q8GiOfS?Ar4hFpY=#{k9lpY&z`)sU=Adj=I>+Zg;(@dwIg|_P1n91x^>sHS0?7V)> znV1Mv#|W)xIQP7^hK9B|D^{LUTX+6B^$q9No-@1doVGc&_2UJ+ zA$HVbpchZ6ybR~F%!QlTI;bOm!>4^Vjk(`$bNQ`hHvu4^zr|o&w|^wF7PMhw?mP#x#M)shdkcBAC2{sGXk;(nI}JWh!#>V^ zoTL}`woY$;?A{F67#Z>?Q#(ZDD|nV!=Y#|(`zlVy!&sK(?eq*>{O`N_@a=&T)?4xO zaHd;S`gIB7m+8bcdjN#t%wA!5c@aMEhJ!Hr#YON-ir^em3*$4hh}^~^IQvXtd^o2N zhF?_#=l=RI`oBdwx6i9lWeQ~0C_LE7tI7=E^+ou%7vcXs&`-5y%Ot-%2zvX@JShVv zDf%Ft_;`_U_(w%AGg!fWL|;(+tKdo-RrcVOO>p~8K2@Fp+n{jK4rkMVFU~nQg z84v7Cg`0sZybIoGlb7oc&8!G{Uw55PY{MUQ>ozV3Br_` zpWuTE)i_g;;F}FjK1|huf7!yhRYUNvTR6i?@a;wL?^?L6=hFsv_56v2+j{=W;$!Q1 z$ii(sU$<~u&&eg)g8pS3iT+X|5x3L%EKRP$x!R()Z-j&m4j<#BDt5%+`(moPtvv8@SNWay>?N-@y7A|EP>8Ft~3?D)5 zgYz*g+^)A47(cTHER14R2D&Si5vtp z&0nGqt8fBK5%qIcOO3J=OlmpjdgS|=$6OSTGHsjBAU{+&9OI--D_I0%I*P8@zl+lG zf(x zFXQ8l+>^g;>@t!#=dxU$#FM7*W!*(H13!92>IlK#4=_yra?sL9yIy}4_N|)WK1}{{ zBY(MZNcn6(x$=vhM{v-%Yc)@Kxc)D89>Iu_pEM3BpY^6IKMT)?`kx?-^i%X#q5n64 zF3kTGrjn~Q4k@4Yuq*#`U}5t28Tr!RGHeR^w&WWozdl4h>vdOtqKN!hsg`&o`D}NF z$zK&BpX~%!KHHUH{$Fn7OaD}BQyBhN7Lk94kuPhR7*2#-`Kybh{{dzen49#&|L>;1 zl||Bj(llB|j7!QVHhH|^0ylICL2(+G6nKY`aeeq z%=4SZ{W1q#$)?Heu5`;(zZc+`tlp5;az%PUMxO$C8ZUrUp5=&sx();s% zqMT$s3ri+sq7B!6#3@XnD)__lcL`Plj9nQ@M8Zr2709l>fu}crrJ?Vt4i~(9pn9=Gav3 zeST19w*%Em&cj>Xfx2SQ6+V>nFUsxtW>JO;D8ekf zxTaw9)5_ueSTdKa;(CqO%`I#Qfd+3^;Jaq;Fcueuc+mSgW5M=Zx;=5IslFt`buoUR z&rpFbVb$zCz`%Kg5it5A{L{h2X2R&%SaSphH4`$&C9>;hMWUPL(wl~tw+rguS_zu$ z0~Cz)DrNZ4?iIT~zJ|NmHr);@#Lxd!e+>u0!LT?!h-@sYF<#P&Bp_X4TWfp`v>Hv( zBlNgx5G6g8c8tSO#%A4t(Npm-YpZy7An#hkaxV$T&4)2`mC8NBgsm{Iv3hbU`^a-- zny%U1SUrnxc*a-_q=s*1kS9S^nO#>sIkIu~=*1P}upovA&&6Y~iR~CYCi{yLueo|w z0ey7y+d!_84S1?98P?t4wT5EGPEO^9_TeQvQUXTP>kcHckCikwv{g@z4*ndS4x?$K zxs5J`8{;7PP`s)#GbeFqXcSIM(`Pn$U!#@_y>BvX61#6^#LmDE3vN`JOpITlGR^C# zTHuXYk<9yy>+5Su-{zy^zMre$9n&n(IwE{$ee;b8Qi@ox*W z$Tqz2TDi(bFV^hs$F+@_Xn}ujwlqGK&e^J83HRyKc^_WM1pIkTjrd%`Ex}KT_Pno0=iw^!1nrf-+ zLrmo3=`KV)Rj$m0C!CfLcDs-k;p|0Nl^1dLfe>e#=`5$Dc{^_W#R;e|vagx}!r-6DAp4MN1f*FS{SHLMN}~^jFzC??4#O(qGbk^j0cQ{0)NwW# z_@RpuXx&=1X7>UV>FX~-$x79jjgLuY>mx(2`f3QmIMbIeR0y$UQ>Zb8#3{ZYT<$o?XR z>mIX9P-&_=N&kWUuIS)XxDmkApGxkPlsg^rqQiH=Dpcla1u~;U{U9FY&PyZEmeC2j zvA;uEK7Dj4#hF|k9o&fNK9lAvqC+3WSE#(DA@UkQJlY3&b~^+$=H@igYeHA?*?u(K zHm@Ks+%(Qc3Ys=aFw<+XRsG=AVCiynum(g6y{~PDrK$QG3xy7rL7rZw9UbJ%v5{@o za%1H)s`B-+G&q%86w6&XYiRF=k1+qt$o_f4w~^N((S<+poANt@ru^TopKlbxf?_VG zp5k)1tNHmM+O_dzlGI{vwOJvRC%P+1?%IJgYXIo|i zQYEO+j%p#%J&I^SES38V3EB2XLQdw^RZB+^p;qhdOys`BhM67DDNl!mcPATZR_iR? z25;9w2t$0*_)}xYg5}sE<;#Tk_|V9P`8FRW36%E>0^K*niWU*NNMFO|wuh7gwrVqXLPCl3>F^>XzMjfi}`9fjbT!pwLrp&>C*o6&?B_iH5Id z*TqX$PdDsz9gXc7*~edpO`|70b8XSEE4{{NJ2XPI&;WXZ8gdQ$Zj^_b6PK@>!djl$ z!^dYZh`@0QC5$n@7B02obq9hq*}7jAA3TsbM~9s5Cg8o&L~xV$O-68j`4$~q7bHR@ zf;W(FUJKCMHFl!#U%92R;n&g4*8)b5IX}%Nb9cn(nW4Sue^&`kE?f3?9LK0>Lh9L( zJ$yoR@H-HX`U25{;={5oz>2O?3xU|KOEI*(OqtN@)g|BvAZ_4-*Z$*6o##JZ~V( zhc2WZufq3W7XR0h(LucGEi0pQp`A_$`9nvKqIgqy$O3#*DzbBIxEw+WjIY4RUIXlW zz*>Cl!Aa)2W64}o6&jP%c)?xdA0iRd$U{%!z3#wRc`~~T8!2RoK5oF)DTdpH#@ANB z6CQ`B5k5`P&0FA{n`btCk1yVX)r^it>^<=gVvhm4!4Fom7*YDCyuoS}MY{*9nSjvW zii};ToPQOsZ`L^nTk7_*nE6d&d`Y$H1#%QAM0aX_`~#qe+R@FwR?qaMQSZliQ}R8& z81+X7@sY^gtNfxp5*>;&-p*oFI~FTxu>}9Xr~iE6LC>Eko=12X|3ALayEiWgI3G7Q zzX_qlfTOFQjqR~NkA?}l{Z2rnC#Z-G-JKy@g|aVJ={;Gvyc)SBd$=n7mh9oTMTd6L z``NkG$EPbtzir;5(V=hPmAPuK-JC;poI=S^5xsA2mGUFY6^36DJGW9RaM?OGr6e16 zuKP&}d9-3+Zpnu-t1v*4#%S1_B#OR@v1oF5U9}9e0Z=*D&xaU2VOE@_hj8q}p**w3D#;M-mM5uf(u(VwnV&+RJ0Y=YM@*AW%3SuY=>q zYI_}a3#FsUTnVdhj6(0toG^C2m4pycr>lrM#YEI>M%1(}Q@sBrgtQyT@hQ3AX+~`q;@# zHE+?W#w2cR_EcHOlraIS(o8U4fLN~O~c@pH1-|W3~KL-bl#ONTW%?w^zX5kxwW5k2{W1yZ7akBYSuwq_j77sSY zMmKZiJN#uspCR|$19WPJ`xO`2`B{r*#KRzgv)>B)!FK?Z-~k>4PjrwIctxy!t%WNt zj;rq|B|b$zz~015pg4 z#*(X8vsZ%>oyqS)pmOcxpw|kbs|%E)e_N#CRZ?Nt_z7}=}dCyB0R$I!XP zUhuD@rHITO9sD9*K#a81?ET)bj1JubRCCO4jwUNisDv~}!9_VifQ>erhGDbciiS_Md*P^)Ou;w93cI&`Lmw2YQ#$`D#~l z9;3`+7LNH$5^5v_bwP5{j?C1ty1Ee?NuL6(Sn!?1vRc=fy5LaSCZf0PYAl#jgt9cr z8+Y%+!*67`-#OJkQAH)lum|K@Yzqh9Io00^zCG2?4!)B))ywvQr1vd0s)O&`%?vl| zTg?curkbFXGG_*WMj7xM!HY$I^B(8>xx8=hh6UrKmCKKYbMdF(VS@ZwsTaN$#$cmM74eYpL{wmTLF8J zXO=ZcZ$-N#fb!21T*`-$JD-X(}-MLTx$$S z>`d++pw={WwbQ6@p#rof4m{@ql0_koDF+65pp+gB6EZiXPw8NO76}Qpuq%x zOgFHz4=|BOG844?-ScDoM0L6q4})d-P6L=(ESXc$A-05QlEa_chsPrvvy%oGX6BtS8{08?CtTy@Y=BKM{6;=OIO;0l-UWH#% z-uF`KP>TN@nq#F0gI!`nYPe?af@W_u#yM70CU?)TV!+~A!>5ibj%*;xw&J1Z?eRij zyMFA^kLUD*Nnm&OF#gl1+O?h@&n>_-t4eKntw$1+OH!gudy?KINuagNj}wzQrWPcZ z`Eg)11(fwbky0J^wLs$qXbaFJI4#8!$C5a1mIGZ{fUW|%ya4S1iqj|Z^y>%K11viD zJ*9AV01ur7JS?ez#n4ZIjB;>M!}$gGTO_rkY}GA@yrn*)yo%M%p~Dg|Nh^%Z{W9=m zeehZvytW`NmqH8VMRC47cwH5|_5@7({ntV-spU;7T0f$q^@b{|)j9aE5~NBj?PG=x zj{{Z3i{Imj4&F{eEIeTql9`$7k128)sYL-56}DV(J= zUSju1z=yQklDX_A>h`~^jC4JwS1uicG|}iC=75dr;_VzrR-Rxg9zSGYg*6J;=sm#UzU%|4#7Ms#&E+OcYHt1o(hTRlhQ0#Z(U0Q` zl`yIVr4HieJSLt)@wZnj^!}Lnej@u?>AKS~^!$3G_jU5~1?d4>5H)!(kG0@Awl!Fu zWQJxj(52K0Taw1$3s!BxJyYC=7*vf+{@&wia&9lE7B>7QI(QRanufbE0**d}uk2|? zt7h*@+d<%|6?p+y=8;3drOUvyw^9u=NDqDEdJ|4YV+{J_1tdyVGS;OtdUlbq_v!FC zDW0B}$PHFA*#03B!|1@dP2OwUDzzWRhVvEE?vDYjtz7!Ux^09*fplU(CncSNUq(RK z?A=4jMm?1$QPHc_d+Afr=-lv*M0U3u?+C`x9Z0&W<58^h0IorQ3F9Xy^tdD_S+yMj zA33xGYnon0zdY&v`OuCEOz4uZ@~hyUs!yF6=aQGTlKWj zOTa1^#6?f4F$b8_NmcA5#*|y>VWTYG19}>)b&U>of!}Zw7IOXC+Z7$W5??0qVM;Sb zDx-iu=A|MDTt;XKgV(3@TjbCH8#v{eZ*r8^gLwF03*wOV69+w2XE)aD{pa{o=y#2t zfG}9OB?&=sGQe{dp9E^t#_tN;M2Gsj5+8*oErIOyPBeUi~Q+A`#NQn-9 z8ksA4GC3pspiFvUe186P{alz);**c4rK{HwS2#KRNfnTT%E+g%sB~NmNe{IAH`^kNvueQV{=S>t&$`n z95aBAj$;k>Named*;Bv;=~R5ekl_Lg)jGHnb}2K+869M_98!rrouUVa6z-s7PP>*iHKTV-ZXe3*fv;H|>qpM*L6-JlinarJwb`v^z7{~mb3FP!v zo$ni2wyll@a8GEKBHTH&?L6756Z{P~a{V@d=S6KgEBigyN5)eu>yt8@%j<0G$*eIGPJ`jg&|!UYSoQjo!}n|hiO!6lVj!U+u5HBnTor)cE@{6_HY^mJ-Bp@>t?ULc znLz%@6_d9mOLmO^0@dDj0x&u>-h(%$J5`W~X5;%56KAmHD@gka4{5qYCnV^7V653J>{1n4 z1!h@yQVEQo)<|OU(4Cha>wkJQVKr=ptLPy#>8+zEnfGXH7{Bv>gI36x29Ljt9!@%tb{0uhtUZH%#5C?@PX>HXLzL3xuu9-UiIsY6b4 zK=|f;Tk)&+O4!9FTJ|cVXK_Yr5I^;K{4kP}_wC(KoA-?|9p^jld?%gn7Uz4Z^S#{p zUgdoEINv7a82{&P9>AMVlGNj&_V-rXK6mpr`!kZe`L?`omhZk}*x2E@F=moRU(95b zok-u`I%qQp`ZpM*DQBI4DiI@vzaua2$s|V#|AYkJ%zZOYDt@Rkql2%*9&?#$K?o)c zN0ZUU@1x2^lRWADyCNgiZxy=(nYS;h@7^x3AO!73DL#`45q4jC@`k<5roK zm^++Vci zP7=czU2!HFUXI>+Cg?B?lgfRA>{7c`YY=Z}HLj~h4+ION9!-pYFrM-h0dm2n-`7lV$`uYOxJ<+P;cFQSdUjFax|!Aq)StuD+*ZLQ0t#a%(x+rU zu}Y;$u5dtEAgv%j)Dc;BJBYCv9X#-#Tsx|QWq5uGvMK{8mAi>$u!OkcdOWx?=qKQr zi`QiLO~5P~g2J$ubqve|zXY7fsZu+YyN{fZS-qc_wAlad=->z_Mn8^B$f|1d--3dN zgd@sEzX}@_8>64Y8=%V3PZ2U*TjsCG*hW(*Uu={_F{T~SPh$)1AT^<>Lbh0t2FX@S z{>iIavicIqC;}?s|4roxu)K8P?P}N`z4Z*FG#PcnA|{fQXs{zTDC8yCBbz5KP}zLrzR~BgaR>g-ytPR~nHg5D_I76fj12aG zqAATxtlK;KO}r;^-(W?XeQgQ`6(`?te%;>fk(DSqzqCL4iCbZh&8#yL4d0J${xhgl zdC8z*t&#BVV+EsYc&s}--jq26$0j!AzQGrxGm4hc=NVU~icoPJmSA3;oYyAETSs7$ zA3F@AzkMY?40PQ7BRBGUhU1QkLg2&S=#N0gi>lzcoSn;=XKe>hmSlvnK4TE*TH zy;nMxzJyz>Un^lNDEp@qq0Pq2P~fPzX$cE>mVw1`s;MZpqwJ16G!6fv&HL%UZzMd$ z(P(H2BMDAVB`mJUR{`nm9KGle(&tVj998hKoMR>!twh;|r!qnN6l-d6X~o70y+L6; z=F8D7;C>{fC1%r_hubkBvOcND$@CJI`zN8K(vfO<6DrBp!dczk=*e+bw)IBO+`_o- zwbnho(A%dRVfphCb*ahEGCzjH^a3<2E08W2Y&0m6GuZN_vY{Ee6yNIh>ia%U33+)kcllBXHQP!c4qKhxoP>*93F#H!zFfGk`s=vI3%FZL!O;mW=uialg%S5n zaNUf3Q)npe#AO!fyd|;2VSp(1NsQo`$gu%7nLD6r(e-4uW8vE(g950>HgjEOGYHU@ zxw?848`J$5BLP)XKhPN&m$FnNHO-i^sv4_Dfj-$=QXOl?#1`&?;4}}NrMwrhnQ#!Y zpg?xFwKr#Xbok%Uwp690-j%^gq5-yjvAF)3L~dF&Ct#pzDt0JwQe~!c+w$npcGP>L zCxZt2f40Rllatwpwvl({i(`|$r(St#XozF|>D!ZOU?U1}qV>^xCP95sI3UTiwMeP_v-SV$|v+l6UKv>h0aQo*3)jvsnFmY#*A zUz2@uI^zT3t)o-T66WAdkf5^t6k4aF?}Co@aD_9kZQq4Q7RfCtoI%vP8T?E*G>95@_mtS(17zZ~Bw_-P9u)y`c7 z&!ln-@$p1-@G6ziYt?dO_Sur&_mke9?0Sqw#L>;KWUfYifHv>(;FHL{4;{B3f)l&r zCq5njzF(QV(~j` zD4VKzM^;XWT3>-E)&oIGIV7W?Ex7|qVxyGmFVRBM7m5Z%=M^JNWvoXJtVir#LR_N zp~-Zt-int33UoHJ^^x>3OweO9OtR)?{YEU-Wzn}IIyj7``lRpN_~ZaoyZ|L~^p=kU zVYKw&$#zs_Bs$oFcV#nFyiDO`n=@%l^91o4{8Zr=tVlKvrv?J2bq$X10s!U{)1 z5t&;yZu=fgsu7=Z;62fY0kjWOAt#>l_rLYc%I6UScp~$8(6}U3Y>v&ECNBp4yY`RLv@Z;j-;4t*m7%X zcs=togeLI&k*@S84pQ{eBzCBxZA9f!17Z@fk;%?f{3?@}VR|NVzsQZ=`c9CIPRGB% z?I`OM9U9pE4DTm%C<(H8d(EJ(F?sD@ddvH65`|ffx|Z>_k>T=z?8pQjB2d=we00$s z)F;#F61CaB$=MA!`XadlgqW5&4Vm~P2d=RG?9t%jOcw_UDO!; z(vH4o8Xyi1((h6=b1qeph~9TaY4pCyC!mo(O^Jn$RZY?Ry0HYTv$`C;9G0da>n_D$ zsOsgX-YD8hKrHGCFh>BZbSm z(Eel5fjz9}G0^UR;#gDg_=~&}1Fw}}#pK|D=+KRDKx)kMpw+38&Dh%%px&99d<*YU zoaQqbo8)`J5kb63wKAZ3E!r7Lcn(`h(GF=)EKwOGb6}mM_q*x+GwA)X$@Etvl3RJB z_e)ST=gRjZ>ZdOp8fk{47Os4H*88#Y0TwlIaoO}Hzvq`;+=y&e?!AN*ITi(_`PAg# z8goLW2^Bx`F7EP^EK!9)6)vf&LxW&!Ieu3>fRGy>YuU~cr0xLxQx*Nvp6Dk>da_ReN2M)bw79+j498IQ+s1dC!v~%GEixNsTe(XW|hqk z4MB3^;Wa*|yg4mtCaUpOc3{jDxK{g{jAJW5VZSI-Cyyvl3%63a&s84;i4uYhGizCFOfn>1lj|7Jn&vk?>*XRE_`H) z_&3CT`UGwuZ$clIgrlEBK7_pJ=Kn$V$dMI|-XDUjW!iW8h=ZVXYT zz7EE~OdVsy!%2}P6S&#*QE+FYrDDT5+#nxAL!tsh(8-yJs_1QxHV)67%0f`JXx<9v zYyl7b63#~}@RfLkgS6CdNNuyASgsDnGz^n5)s=9NRaf3F6_zQ8?3cn)m9CGEKOx;;6cr z4(G9}f|zJFi_;|h={=@48kH89%ulr^B&)I?uZ^rlq0@)uM<1V+*zxka64@V=;1XUo znGjEho!YAK0?UYwK9K(&g8a>Fw$6YhTvUwW__h!(5peh~vc< z?ftH!jxJEPwXbZ=bQZYaH5X#l1r;tl)o5^SrlYfMnY#88ZdY`-wYQzQvbTH9neF{O zogFK{amA|k6|0xg5iSeq!qx1p9bM@@1NU@;XlXeU9auaYN_zQ>y0i=F1A)bm_mt7Pnq%+XlC*Z zl|o*PQ+l!!Z#ibz+=y8=^|)|mJ@s%dcX%FyQZFy1|_Jm+R z4Z#i?jCqZQ{K^?FFg8{dg3U76G)=DD#zW|qgkY;euyqE*NV_uBWlIS5WrMMkO~bsn z-C$fG62wD(`Y3xlaw1Zif59zCDdUe0zZzf_Mu~^;Zt^G7xXuvwNN&(&;%q~U=};v* zTe?P-U?|5T)Dj2Bs!St!Cd`l)fR;tRZa2eb0O!A(+7`K{s@IDomBdF6=d zx~#S|EMdcG62B#e*9;0M6=SdK znjqbnJGO7n*HY(=N~ArSN&2C5s1CvE4Q7{L%?2~cOSxShf~6g-8nQMSY!>C_g-u&t zc--x{WqN)r1bZ$7<5>tawtnJK8=Gc4Z(}tf*xV3I?yj)iwuR93hhVpaU|S7lR99ho zZwR(01pBGMOma|e4~Agn=#|^y!uY5%7^gGy>iXZ_p9p1|gza`=PoVHil1x2a?XclfhkIF6VF85C((U(Lv`Hna*M$?OB zJj8eCPruF6Vel6me7V72GdMn#slwPk`FzBDvwJ~vIx;@-f6||-9_H(h5FW(22%1Lt zJchcRc)y0#y}*1;8~h1_OZmSI-=wcGxbRtpbWQw4gL5$yO$X{e;ym}CM);hIa3e0^ zBJ_(8PsF)kg+}nt8vb#nF&GoAkpsrRCmLM%-C+FtZi8ddx-uU(a_1P_6i1P-f`6%X zW1PzGaPeKF?b68mjq6C{X7iSU0;MWPYe2OR@LCOpOCtk@D!8Nj>=TKv^Kq5`@%34S zCwv_0Df0>FSE@=N{Vjc<*Pw7|%F`C$>$QUn`S12i+5f}dw}97Glxy#HwcwI*cL1ZBx#b;K-z>{N|9SNEwBxRdf|xYc&UO~@AY00FjAmJQF{!UE%|tEJdlsC<;&zeP2-9Ll#_HSHx9|iZ|2M7JWb;S1-~R+FYd+tuvohA5RQA| z5dN`ktMk>3)b|H7eRIUkDPCr9x12tF?2hdX2d7D`u_Jf92U zzmaiW2>*kOGeh{}GUN*3KZ(ehCPTUq{fU#p_#rZc3enG%@q7p`j>x$qf-i{V*V`ig z#8MR4l+U3E{V`%sDUFBCI~r+3)lOb)=k3mix7k{9_~Ka8X45qmnlvIS)tLw>L!c zaUfDYyCV2tqPsn&SH-<194Pr-O7~?V)`XuJ{1kVUdnY*2=smdr zUuWq15?tlqDUK^mO;2!@KP2U|G<9_W{<8EJr8It4IX{S$hhZttrF8!&&5H@+Bkl7w zVnE3M_Za&-6MIzeRB2C2Q&$z>-Nw!p1^BThy(rt5RYZ@mewdKU>&O7|%$f1hM%Dc$cVKEvqE z-T#_*qax!{sb8gZf4$sk+GX-3cRzl=!@n=>Kq=kVoA<~PH&qNPHE-)Iq3X>@;VGr@ zyr!$ol%IYlRh~Dxvy)`JQA+o%`rP%0#t+R2y~@Ael;@TNKiQrAz?6qm6I|(UG5E9u zS9@+U>1s^yPIvaQu_t%`E5*`;ubcFiyQ^Gzm}$z@aRvDKrd(+%bI*b6jGWwkw90>8 z`jJw4t|IO-;fuzfx%+D^pF<`eXC-=-euf~Wbf2q!c-oYc)`VX1FBy8ha&uP%+g%!N z2UbS#w@JFh)PnFU0Ymunk^W`3WKf9ynn=G;D*g}AUmmgN+Yx()rJRK1JS46O;k~9D z>f4A^%Dlsq)Nd9)hv=&!i86Am=}msBPf%zQ36KgZxwxm~!`9UqMNVMpY?=G~EUazrFuzY;y6^bSY- z{8KSKM1P0aAHw@gd!BoaZRTT%&MgtYHAmze6B&PAZ`vg>)`fm|d?`{MCPe&sj%f#^ zu(+_%9p7iDA-!iu{C{zzUY{4ikB-!fIT5^5j47q}FJ>;Jq<4`N{g9orBRF=A4$)7KlppN} zqTt-} zK=>-cZzo(!IOr?M9(;v^;M+6R!UgtBBOE?aJ7+lDx2KM9w&y~^KSXlc2)~=~s|jcO zPa>TCsrLB()Hfi&rK%Yekmg&k&A#BE=`e5DCzW57ZUM3d0D#J(m!UK0)a}PWXw0|C(@? zUzCRQLiuM!aOqx5fIWTkQ@zJo*x1Sb`2peV&o=S{=0>QTy9sA{ZAX1SoJ;BAd|ycT zyUETrhvOhkexer(vLitLd*r9~e2{Rq2kQ?Y`1Vu+a5%nORylJB-zM>j>wI2BJK;?KW5QYf9|`AtISq-IfarVVr+S|!9QS;R_e+0-0D7!cq4*7iv;5}>pF;G- zZlDM`uP3~kaQ5@(WW0v}dX|5(^zR73nf^_Lb9uO&aBc@yI2_r@?Z7*Up5_0Fa4eFi zewZZVHw0hK(GK_RoIyC(-wfg0KHNY!*WZ63obCJ$;S0nrwex3$vp=6F{4`3}e-b`} z@H%v^68v;sM>vwIDA0|0JCH$L&KTkN*zeqUKk9RlV zNbiFr=P1IzMfiz?KS1~l!vB@-+KxF7oz_W;aq-x zPxxI#zfA5I5a0*&t!hsX;jH%-!ddm_Y#@C9$#Nk9>E&^Vj?;jbksoS7ECKl8gx_q?!uo=;hX8u^&z}uyam;yD z`+1y`Ctqj~d^z8V;QAyA^s`C+`-~JT=Ul=+ML5QUYR`7U-%j|i34aISX~Nn5sf4rM z^9dgyIjw}VJvxIC>B70%IfdvaQo3dnK8f%}gtMK?Be*Lj#{X=;K3Ro5Y=0xkVf#A> zXZueioaHYeoaL_|oaKWC!S|2cMw!8;;=PAF;5(hvZ!8xt(GA^?uOz=T;{NINSfA!+n4Lm~fWA%i+HK-w@97|3Grs zKRVAFdf{75*GZILjGssN4McxA;ol(q>Ii-t;a?{Dj}Z=EsXbpIobzjl@UId5PQpJ+ z_)~;`h45j*KSwy;<0HU7UzMNQ^9DFx0`QN^Pw^88|03aM5{|m5^yd@)3BoTUoaJ;7 z{&}MBBb?j4TM6g#bBDumz)$V@7s9#xY;w3?KC#gl0&tf90Lj6r%72(}mj8W{!{w8o z1F-z(NDj+?fpC`pN<{vlX;@!q{}B!c8_Pe2aF%}x$zl7?C!F(TDdBgE4)xDU!aqa! zb%Z}k_(sCf7pR;M5&mt$hY0^V;ol{k{rrT(eLp-!IQ!vOB!~U5mvC-}O~Da6P=3&s zs{KdEIRbFBrHao0D8a|;ENpPDU-JpSPtH|NJK-!J_tXf!{C8ToK>oW4XZi3s0_31i zSH14>fWdE#;5QTg8aYRR94wWja@^wwgFi2EiXRJN382SVSMf@K5`aGp3Mfe>Ed$uTf$lX z9~|z>-%B{lA5Z-P%f~Y!1o(l=c`Uys8|p$oAL($&LD^G3>-gWdlgodW=$AS(lK^a#1fe1ZpM)38%%fbd{IsfKx=w*NMIF|hhIs{+-Yb|X2&wi^Q zoYSTEJHDKA96fNhGedIN&dUgAJF5tvK;?W1;TUVFKh^&yN<2TG?;-k4a<261Pxxa! z;h&Uq1V3FE!ytfuo%~eJcL7T9ag6;CfV2JV2e!Y(P^ZjHF1CNU!y#vr{8TS&MgY$C zFED7K-erWdUTwF1zpW+uO>(Y!KT0_3#j_Cv_^m;HN{?p_2$27z{1iW*=;ssOOgPe_ z^s5P9NcejRZzTLvgrn_MIXdozor?&^PK*e!6ZdFJ|7VB8&-=@{;s-&11mIjRUh8li z@Kbsn_X0zkrg*udha9dKJnrRs@n%Pl1N#~Cz7TvrW5Y`X9N5p;z61dW_VW#dv!6E- z&VI(mIS4qgpFd7G`}qqF_x*ey;r}7B)IU2M?)(3@gzrcB^0LEmz|cwM@Hn=J=wD0Y zE0)9KQXUV?Bzo?bs|nvhdU?Eh3*nf*jo_D`9*4tz{M7zy3Fq>&J|aig(DCKGCnD#A zB!|o47Q(q4K0`RSZ#-V*cIIFtR08sy+qc&_9EVNv)AaKDHEw4XJ96?mBsuJ#^+b@I^jTCsUuRH@^L^0C zgx@XaD!+|zmV;+~2$0Y84;r)($Cw!b^kRnSKM|Ot0&%LC#@h z|Il*RUu)39e1EUQA&2J^exC3?Iam1)6VCYy8xSDpO!C8CgIfFpa;|bv zcMw3&^#xlBAi#e7l>Sh{QD+rDisW$nIg@a%7xM{!jO3KbIRfnAbS*Wg#kriTKYjbx zI(py!TL>?abG4tJx3K;9IC{uu`@cpw`}5C)vz@352#~`#`eFp&oZh*FBQMm>r4jt+ zgtHv1GmZfHT(6r6=W$d&;XF@!GvOZ*S!&PygtMIQ5zcaEr(un?hx_*`!nu9Gey&Q- z>B4taiZlIPgfsnPg!6dmCxo*czJFvq4M$4A;iK|XKa>&vHo`wcINS4W!tW;f9}>>~ z{3YS+&;4CPiD<6BB@Rb6;HP#TLHK0Cr;;2l|GI`MlGl5q9|zN0~aeD=dFgtH&sML3s}&k)Xb zK14W|hlAZf0eaaFWrQ<5zT-pi=~ocW_qnSHXFKm9oaH}6IM>t12xmDj63*p+z;(>9 zlj%1Q&iVCThx_^UZ-jHZ{V|fm`L&gB&adwh&U&99`CMO~BAm;~uSgE--Ag#@Ex}7B z34VTEKsft9Ht+XaM9<~qF~Ygs_%Y$!Zs4}LnYzt zhbF?={&J($`iK4SCWrg>)DitUIoI~#3c^`F$|M5p#27~DKWos!e0i4eLx{eZ`dOAg zkMP$K{Yt`_{sNNE>D?N^F-Agw{VWG_zY&1*b0Iv7Kmd+sDVkn9b3*_=BtOM(B%GhO zyoYd>^I5{#{vCv~oj)bKRL)f|&#PfMJb#Aqt56Umz<$Q{y#R35%kyOT{srrVAozax z1mSEaKj&w?|3UPu_m_mTUY+0K>m8TQ*~5C*63%+>iQxAVez%BJKR--3=Od4QSpLgI z&-ei_T!QcCqX-|8c-6Zpg8zVUmjCAnKAFY?oGu;DfQ{vx5uvXo9M3A$PF)M$m(xM? zEdQ1W{(i#Q&d(6e{&_Qv2hbL&Jv^Ra{A!|qJJElY@J|u`3&QUu{CUEeekS$foZhAg zel_8o-uDsCxN8)e_ErJ6~iXpqy~N zTxd{>A5QHX#(oH(|D60Ze?JLOf{%aM!UktKhZD~E66;4UBYMu4Ea5B%=LmlJ=lfii z^PnX+^n5?{bHd+5en`nV0_5Xaf%-w8m-;x*w^=JZO3%*$*#2(|4Fcq_ohzJPG{^X< zoF1}g9pUdM9M3M4p69O~P52jyeiq^UzF;HC=lko^iGI85FMK=y-Qh?V+xc_C`FWuB zFTR|Yh@Ryfo)*CpAfLy9x?Zv`=LAO&{I&8^|5TEk4TST1XC4QZ3k?GFaz3^gv@jpv zPB`BWeur?*_g#cfAwO$*fL^BW78(TLcgRoEbpzqtk8dFSHlpY6Mmb&EiJtZTkZ`U? z&l1jZbpD2KKbI>m4>!4dKT&Mt`>$K5JZvKSKTkOOP3J#AFU!GtSqQ%TUyz(l60iRJ zGvOa4{BMM_e4Vcgz3hiFxkdon@#f6_b-Q!m(+Izd@Dm7shH#`o1MZy>Am=1=X8$?~ zKbi1*2tS4Jt%Oe}d@tepY#GthoF8zgAo>-AR}%gK!u1^oqIVO18qw?g5JaOt)o{J5 zzrbfHC`X-#4E%J$b^HnZ48pgPoY{oy^Ec4XA$%9npGo)&gzG&ZqKi-vBtXtt=FI*b zLHOB(R}g*<;kAUHOSsO{fcz@LJBhxU@U?``CH%dF*ATv$@LIy}BfO6Ay@a1f_(5(w z2|MQzKAZ3i;Y$gxCwv{@=M%n(a2;bHdKcjhM8B8t`GgADoeg)zDz5EKouP6Er!Z#9rCE@oFeih+c3GXCa zpR>XKm4xpi`c;I#KzJA7MF-dm$k9Fv$Pt8JZAr|3E#W>zxNf^t0MAbSBh7^i7yBm8X&;<$8H#hj)E)${9`uqA2xs=l6U z32STbl$}W(JiV`dP2Y6GklS_?n~1udPJ{7~s_{MToh_C~b_;FqS=G`Ri1OqsZ$nel z^8Qt=O-;T5j=->C>r}qxb1|gCZMm9?TB;kIHn}}aql9(?RHe!#EP(fPwYBuMOwW(W zB_|&bx!79X(j%GE)Y`WuH9e=!bC%l!c6v^Fm>_YMGI$dEI%H$lmbNRgp=?)gZ)ejQ zl#-S<*%Y?Dr>{x40&uUvM>H-~w`h@}G6q~!x2XQSi<=s&7gf)obsV7_M>1Obdu)!2$KwTdbSfhYGK_xB!>GgxYnCB4&4OtXWS8Im zRfSpO;OVVhD_06#fot-c3EgYhcT$APE0Z}Ye$t&Aeisw@c8|xMAzIWzK#PSLp~T6}D&>Y~YMy-grUX#is7{woB>i=)1OQ zS%>WHoJ6&Db?0qb?Yj>47jA7$x=k*GsS+hCJ9>LNR$alHVeHH9TOrG}X3X!%5qTi)4ng_E6E-bRXpODx~?hUv1W zHWwb(5qAq3v#Y7Sr>CpOG_lZPuY$x-G;*}0(KSDk5B=>CrI3T4qcQoa4Y%^;ytKSy zRa+jZS4LTiNUdmE)zw$MT*e9E6hm=qXM4-4{_YXl9i=F&`L+zCY8GAGxMX3IxVudR z88TBpldDB_7cIP?uC@sP)#mQ5Zq)JCm5!;pVcx<;O}MOHyr8nFe!-Hud36LVtXWdG zq-pVzMfD5j8M1kG3+fhCH`uXPBF5-Wu5u@4zx58M3rWYG^DTY-J=hO^dDjRoGMqi_ ztGilT`lPC`uWTbgaY+uM07>74x|LL|1fUA9{o4xJ|D7cpLA>v~U;Xpqa%ChB&W&R7 z;2gElk}E}GbcG%Mb+qgD^<=9@El!kn(Hb7=gG~{%@j17M)433=>R*{_7m+J6uC+~8 zfipZayIXo%Rz`D82C5^*oAw;d5UVjmGlRvGqhktiMyO1U9!ZQit-bZC0__P%l?21f zRsEfvwhURm_LVIi4&cF1Z+lNiOI~`kk(RMbuk@dsRO4#XFa;vScAyw)q8P7i>9H45 zW1ITA?6t{JJ9@XtNtudQvv7gb&}yl?iya&-oBPru~1s9_UZE$TzHDR zHZFz(q{Hg$TxMvz;(NtP9c*&~jeSXkX;GHc%RQQm$!+`MT95im>T2^NE?iQR07eRY zB^_l`+l-C^4S9vKsja=cZ-vdOftKqq#u`2OHb44md*~j zMQWEq@AM<4x1-IAp@P-j-@AfSgFH`01Cqskt$ERHEvwocs>PzMeOdn%EF!7oZ5_*( z7YyW4R82%KFU+OkGOa|DjK_M~ms|gVoUh$Er9cwh-<~5DCsxWm(3-vryWxslgg8!m z!a#)K=xpf?b5O*HMOa2^J>6ZsPNA)#d63oL)i<|&c~?)nEqtbc$(UansrGO?Vk!r` z&K^z%aN2_4UJ`|ziL66c%GlPmRY8LMf@??&V?nu%M4>na1xt@x5RtTZ1u==SkhNS| zbWKY8iY9w$D4?yk-wf%SFyzkVF6xdQ_fQ1L8JzB(Agt_Ig^_quU(2%2h~G_axpu9u zr@fs!E3|*hJEV^*<64SrQ-M51LjKIRlO^C^eHZGl3qOj)5 zG6rI}Q;`O~>za0s>Fl_wy;BsSqY^2x{?^HKRJraUACGa%5Tr?N&GF15ro>dnQD{uT zA)1^SrX2LPcP=+WPUy&u%L?KQfUJ~;y+WG9)m>K!2cwmyGwPU;C&#qUz+7p08=Tpi zT7#!ftCwFpy;bv5hMBJM=ReV zw~lFTv95wB12+)mVYvBaM_n*Mr>#qc_ zO3w06-0Q*wJmQd%`8Ot%_N2tSe!cMfGC{Isz!DDGgZVZ9uWa3GqSO?J-zLY9{X1Pe zzk>ke>%T>?kpAv}n}qZ?I!Eh15Kc^iethp5(w|vxIdqxO2fz|4iWz>7R0|5&n?=GE9<@Fl7F1`teH0*FW*#u>LZs7YHxgL-OyZA6tKi^zU-|_1zQF{~G!E z`UfNFFLU+Ixi6~!=1BUNZnP{~&Y{0Jp#NQBRLK7oPQS~>sQ%l8Ka~D%r@z^8Lch4G zApNr={vR5n{?j7<-x<)4BIWykbtL_bueXMeR{yV#q`%@_mcQ8^O#MTV^7S7WX+L*5 z{aMGa2g&Zdfcg>g|HgoRi1hVmq~Q+bf3qt%x=)WP_4U^Xe@Ooxr(fsWBmWNz=${~k zGNgYkh$ZMgp7yG+{_mR{*1z>VmSc+Rn4lkXRQ>dSOZY?jHy&yEpS6eN-%tO25&b*g zZ&|qghe%(4trUuo{}AD#@9pA$ur+N0%qUnKu4oPMQOBYgc& zMABb1M*cg*c_IHbj*%bhpN9CG9lx8lrsfxn{|=9&zk7`QyJPLI0YnDzp5f zrT;6D{&$o6utL)b{j&o4zb^K{MAuDOrSiYC%%0w#Aoj#h|Cfb1l>V(w|7-}C0R3mk z&rknFk@Rnz3a%9GsA{i${a9Zpq<_x`E&XPDF#6}nxvzhwEHn~If9hz<__*WOgRlQo z;ScG*>qC}f$T1@Qn5XOO|Be75{kxq0I~~6seEp9Ie@Oq*4_l5kjuHCLmY=WxHB!Mt z`qv&~8FgP;C#InO7YTnz|4yfWt7|}@|J;E7J7rKD(qA>rY8uame`Q}-H!h}DW4pC{!WPu*}uuzUj*S2;J;e=`T6&f+|-8j z523S?px>$3tHSZ?AB8`pfAhyJ2kSpiAYXrt3=l*5_ncz+Z}1%Gr~e$`59#0X3CpkF z0U-UEfc}Rg{bx5CdkMGLL-OzI9}@nM{>`7XEL?uh7syZl`I7ih`cpG3zpjU;2Kf5x zggK;t$m!n&;S!Mk2Ko8=mpT1jF-w)t1Xp2x`?@ZR=->2d%inAdM*jji_w{2vN0{jM zA5~62$~Ol;{R@QOx5?0d#&QigW~9GSe!l)=BlUNS(~o;D4!-`f$o=z>(_i73p?{J5 zeEnMv3a5Xk(|U)-A){Pcf9fRO%a0sZ*S!S_GDLl5cSX&^%Sw~UehKO_DB&=~m-mkJuv zzjKWIAByPTHAa4X>mAa+XN>$Gk_r~$*N+ZItA9V0jyuF(f}1r7T3_r{VgG^kg+lyg zW8}a0;4pv182Mim!$SJ29KSU0dBJZ#Hb=^D;~4pGjO2f_;~&lcmq+-!9lv`Fk)*-5 z|6<_}wSV1#{-a-{XntzHHdh3O{I}8RS9&$T*Z<~7`@PBWUjgA1eEx<=`+cjke}&^m z`@KefYLD8Vjp#4I&Ax=YB%Xt>e_cfXp3hsZy{-U3|J&r}>pvk`JLzg+l3 z`M3LPmVb{unDO`Z0sW6g+OOt1%h;<1J2`&(9}@nM{wKFu2EKp4F`)mAk@~x9zU9|- zFP-{=@#kT}AJV_^0n33rM}Ys=%1@J{`QI);sQjiD3bBNXM)7~M@Q3slebe&u{qH*j z^7ZeU9M<35X!#pPx&M7i_(S?jhAjUMD*x*O`X@!ke_Iw?{w1U6$GS=({ZD?&@>jVV zOZflhfd1=VXVdR)cP*3rPk4(xZSefBmwLR%l^_59wQ;HCm*G`j@XK$V7!O$$c~q%X zo8xznp^{kDtH=57{v{!BC+UlQ#9k|(#$IIY@AmC4a{Qa6esR$9qu84x<$uaUmSP9B zKeq{_{969Y54GR=t2{k!X?JJtJq+v)wI8Qe&Y4v)vn&Y}$yr&MJ-7d-&$L7{DrU`^ zVQ88UxT&t;yz%359vPQ9$K-|DpvN6}@aaO8IabNN^tjaG%m#Cp^384m@4ZO=b|W^k zeyH!rOmH*}p!7HEoru2!a2U6n> zN>x5yIb?~m!j@UTuWwEDMT;9V*}r54Z>q=)8ugZ7@VeQ~9KFsoSo0dPFW$RCrDq1O zYXs0iKr?_V6CnF@Twf*EnSqCj-dcV6vvQi+22+i`d#B2!!GKe^u=*|47gb+ay<~A_ z;CEB1AAn~w>t8Hh_eCjPne3m%?ApN_OKK0isigYF?InHtZLcxaK`x4l*JCEsU|pG9 zjPE~8TzHzCjq5*g;JUI@U-@8N`TC*$Q-)_|Ys%zY{5e=REn72fuX;nkmB< z+bH2IHk^|Nt}9RVr!DEg-hF+C8MtKNx@r6R4iHAc`d>Tz1}g;w3E#>4z-Pp69^YS* z8Ju5~$zD*D8QAqV$;v4rXF}frne8>E5LXUm4y>C3JTur|A#vmT50_N;)f#ovG6UCD zr23`~)>TOY&K|DKWPfflX#G&}y7!5PBqCc=HN1fFn*=w4erecphEWln4Rid zW)vJM3glvP!{Exs`RkwSZ+iAn;g)R9FAm#lW+SIEgE!1ZF)DL;=}Mn1GT9o56SGhW zjQSZ)Xz{vl39nIipr~t16|dg{VH;|sDAtyj$jMTi6b&B^4ufyFV5yj6qq7a=MST}E z47LmOO#gum+20$5_1TB!XP>X%aDDkWEm|*$SZj>r<8}4fhcnsjQW_hwzcgsgBeloM zI^2`$DxayVe6C@zue_vw@Em1^-G*#_c6w$|%xTD);$%x=Kk}y;Idhyz$!jDf&8hyw zh9?+&@WK_jEa*?yRlZo8-6IuX%3G^1t-h@K^6I9`qzdE(Ti&I#uisa^?hc8n&%RKf zeZ{YulIG%dACqX8=<_O!m+uy&A^RHxiq~(SC)ahA`zoJXUVIdKN)wxX-o%R+>=9m( zrlo%H#)?e#5y#utJn-;16*cGK>$g|0T`*=X6bmon=gM-kX( ztdk-T&;M#ksmcFWH2>#5GU1ri@I=Y}%BRE!QqpXTl;nJU_VUL0+2u>O8so=H-84;@ zF?pNXlNtEWlHyz7<4pDkTMriIO!3`2dsmBb&eXY?^-txDgc%#I3zyM;NrAO7ll_TF zQuQMfju0CwpAsv@#^wSW#lB{-bHz7|ji-ll=?Tpx?F=T3E6Q~S!{aNT%09^{lcY$v zPYpC+A&@z9I%P*=vf{E}Sx6F?7x99_gLe@9RI)Wn`X0pne4x3vVW|6QL$WqE6wl^s$J=QyzkUZ_Pd$&kMzhNcO`lq?jagBtlYQu`jhsh z8j9 zx_Et)48ES7i?Nt(G9Y2DN)X4?W_M|YN*a6XZ!?TBF3(<5mCGFA9h{ecE#)J_1g5@Z zvVU@o%B+UL>oVfJOv9XgeTQnZ@JX#J^RqW*#Cd&1GO);q^pveH(*8Q0{>O%Y4m=5> zuaWhc+JC5^(#s9?9W;22^l00c8qkZKOr`ir;8_;%oTC8+F4FV%NQrgdi~ z`|G5j3_MiwR$FxCI5;oA{tV9Z>(72{uE@tY){cUu-73#z^cor48r=19k`9xC;VCW+ zHa*#i@C6e429@K=N>aUG-CLd3%;0{R!P%L?NtwY4twV`3<)l%Ch%pBk4Ff|HFWzPz zA&5It*;fYkO}MEv)A~r}svX^#4OaWO9orn=z$1Uj6D#gplgVCRUPN-IW;XPd7a8H} zht|B-#b`1I9$F(^jp@@GoOl@>72OL>U&mdBO*hEcUdv(Qwi~M?HnlX**#cw+&&>>; zZcJ?LxwgBn>(n*!0gU-;THU=;zkZgTSH7h|N=FN8^9kDI z68B>H=s*5yf{4Tqx)A>H8uBInPwPW-FE?%fW9fsg^gmKx^{Td>u8y{{X=j{KIkRHc zoRiCzwe+^Pm36Hu>zP@3dgbiXS}RW|Ywc`Vbw!yJHLO-pRykvO#q`-_(^mBLb@!fm z>ZvVO#`G(?x~}MK@9paEX>G@PHK+Dd9pT>D$MT@5E`z z+{s0C+rDR>XRZK^1bLKWLPq|tcjsoEPeVRs?&Pw$lc&v{Tv0uFcJ1WGf&Ffqv|-}y z6YfagJU+c+{N&lylPgTTPzkMQED{+Q8SHSfUcr%N3CF;s+nkK?&qFvfmk2rbXhKli zX3F^#hiycJXfpcBswYo_yot9>xIKNx`0;CT>7+?o!KdE@{bVG*Z|Cz>2<@#--{s&F z`_-2>k8d)rl$469)p~CHZ^lAGUI!j)Bm8e{yUzGWjFKp%akrCyENCSF`>Vs`@tz65 zN>BkLXbTTa=jWjABLJK2==L{=#To)wa{%je7|Xjgfa$uVY|9o;UWMp?$YB_*!4K-Y z+sF57F%-X?r{~80y`CJT=^#{m3F;4&(K3f!4qtJ(vSqY-a#da#&5VnbQONIfvT%-o z<64KYFWwu#HakpxF->^ybC`LI9m{`7IrQxI_))k2>M-*fK+<-hRM*KRy{62ROT4a! zS|R61d#x0%@hzs-8GoYsLAI`g%4yIwP#M$pPZfg=YuyDN4MNAj`0;I~k*Tq=H@SGN zo8bAf!^~q_Yq$KLmz4D+9XwyX6R6ujLhi37-`?z)x}48h@zR54_Fc zZ*a%MocvmMUFMEwI(pMK3ub&JN37*PE_H#Ul6L~G9$*dW@n!{P8)eG7oc>zmk2kYo zEw1_Sf{}B6B1gCp9S7rk*A@-Q&&Ijh0U3^a$g4T78!NoHjkNrRV>2(mFAU zep{3TLfU-QSQwE`v9?@%n(WV^kYCJ~$$2{IITFa6q|NH)`53O!sY44vgKKW*N2il7 zVSW6te863$Q(8LmqtoW=s(cJr>7=L6k4q<|#>dO@0e6+QwWlC1trNw)m~`qG53!f& zRCxqHE`m>s;3r1#lOy=_2!3h=H!Wj9Tsl=*fB{IGuNw-Z(s`?B=i<|;({mSemNp|E z0^DgjZ&mDEd^&Yz?t;$JX0|;6?levHonzBxb~+>WJe{g81O-W_Y9e@D1UEf+L0p>J zPmWBda_vt(o@?I}Z{c0(-+d8Ja)yNTJUC{pdS;@yzsz=jY z{5QlurPOXH=NzLq*B-!ak-&4&uC4Y(l0Z9$n{fd{~HXRYgd&Xdw!Nu|E2hW#{Q!dy($Oys-@Jw zn|n#2`WGqxrPThIai8E-MozAMc2hvieyXL?Vrl4hCtFRvyjJ1Vj%~Un+<*LO93r!j~MwFVcVeiZw-Eo!buK2BuHse zYV3LwAiBz=t1h9}lw2%$NrL81(6fi|&x=1pcuAz4d?F&hRT3VOqy7+g$hbAPCyAC2 z#Lp#MdtTr*gjdTsf-fgyVS|fl$(|?pt^xsaYUQVUpm2mc_c_HiMAg`7FWGIvX`8UZ=@pByR zr#D0NXpNQra>B18{JMyo^+eBp(`PEMXC=vbqnso7 za>7w&lztWA^9X+j;f;j9i*T0z5yESTezU{j4*XQ_=Lwf4Il;f~aHO}E@b44O_3?Sa zxjv4iJXewYqeu>ylj#ok?bjX|c5*p^PY{4}IcYa&Vg2fIIOw^Y=*R&$+cP&Jr-9_K zJF9vvBip3DC+5F#NaANYRqQ#o2MAg7ja z^aTjOx%_jwu9rBK!{vV^;n0Nuy>F7A(sOw}pYWsP9KomO`d%;bDu?UWQo_%G5DAcj zG%7vrLlKZJw3&*-hX}r2lwkxPe~X2U94?2iAslr?Lgst2B5Wsm%4Kt9wS`uSpexbC6KRm5V)>&2ArRwFLCw* z*LNwPzm0J9IdDxc=%)a1;dexTn1VQh&>h}jPtE@!glkzv#5BUSE&xA^@FM}Z&`7wp zQHW|IT-zMrYX~m`;KFT$PgPKkn+QLe@GldtZ8D;F5MEC7eb~T*n58Sx5K@M1L3I+6N)}GlZW+^h1Q7O!)5z*S5k$qrypmo!VC8x{UBs z0l1JMyh1@aUP^c+;oXGKAbcI+dQXk$dk9CrpkXWFvlNu$lZ5Ad+Gd()TI^RAyOm9oy07Jhx!c;?Ww~>J*ib|cL|-@!%dD*IHXft(Sd&>GPyN!3`$%pA1QrD2I;yJJ;! zYpT2?>n>2ne7j1x*qy&5F#t*e=E$wV`qXBp4ztq)?8@6VC{G9c1q!#rPi{T$JStc| zIu&G%E@xy4?2OYhiWKM(-;6>9n~BO>Iy^6VBCs+y198M+=#!cqk#zS4yL%C;%ZeV( zmBR987R!%r6qILNa7Q3rySuMvmDvGE)|kgp>M=Iwp#ovcfd>}aW0EDaC`V6wKGDc? zGR2(E_JXZx@|y>{6AM`!G0tw#LQAOUImy((kx5W$TKfA|GOzD+dJLX2Deki zNSaM|RzQbt((dVy+dnV5e}&mGLNt65UG=fsG9^i^PsGP|`y%M97duUm{8wFqFw zwCq;XIx?YDn}pEp9bts`U_&DCx>m;Rd*H5C@-7Hw{x{k{>_nhD5@5%RWxdjlx2|Yn z{jSlIy-emVuB%>DlWD4%-`I5C0;UO;XIYis+ub3rW})#C8F}mWkLX~u7BoWoubrM> zg!vGKVTTR|^?{coakn7}!l&0Q2l`Qz z{Ph1x2J|8QRZi$DP(r~^|MS8h(!aCZGO>O<3-R@%+y?c#`;F2358jaeGIz7d{>QT| zU;n#>Ii$bY>E9?k9Q^ce5dM(^8U43xbf z|M5H~EGfAN2~w4gg>Nzc0m8Mfd21C(m&+%>wJA-HNp4)wz>YDGruLyG}{X=84|98^P zhxm6oe!Sb_;M@Nj;Sbrr+u6U-F~fd5@AmEA7SUhkUc71g)dpYx0}=ge+)D%Hhkmqm zzW$|=_OsFH_tWO<-xu+J^BDO*8!12CW8|M0@!wj926iNI&K^`TGB#0HOL*;q*^q<#O)p|C#WI^zU-|GmanntK}!;Ca7OFM*QFG^k3%a z_2BCtjQD?=dx^H$F+zWh{CxfG5&c6>|5R1%j=uipi2j{Uf3xF*{yO>j`a1;(`G1eo z?~0+5Qt1CHgg@l}3iq;5{S5u{0{Xx2^y}juRrD99|2qn}BWy*`N0$1qZ>S?sKBYg&roUT;0eNAQxS%|I*GxR1K1sEzpw`3X|(Vlod(w+JY(j}*<~h-eGS4VX<|kdj7wFePLNzP z%K^%IC8y}ZL+9qLp_9p`GqOBNu`D~}78-gMyt&1Ouwc~wvJlb~hi^kP1&y~0Cshu` z;-^LUu_l#Wt#CJ_%DQwF=4AcQjYrE;XBz>yMb5G-X39Ed356_V_RH-xX6$QLadPWd zk!?7YHCyi3CCALb@7HEFEGeI0mg_Mp2CgrkFizH3l68hYJXE%$_^U&*h>NU&Vk`wO zf~=NP#%Yr4yhUur5TCaOmC(=j|}@ujH?(fwoWQ0#$)9 zZ>@qWb$x<5f31Q>&`LPi9?aOF&7Cu*ZLnhHLUWs=L%W3U+I4M&o5zp8Ko^sMy5YfdeG&qUvkytqHW)+v1^$u(0q}VOzgN|m*dm%fJwi@w7myblp^ml|!Z9U+m;>ceQPK-r%`eq)Pus zqgMxVIr-SPuawq+Q2IZM{iR7Sk)wZyk+0fv-$r8pO8(YV+v01De7P}qLEHT)2G`av z*KaH|^3{qQ-eu%VqzhHvX-x`ki>F5DRUYg> z?&uux8FG#Q9CLydcaOvjjyatn9M4Eb!}XpN@~0BLwuHdT2tQuV5r7{pKb5cZL4A5H z$-v=lrN=b_j!3)Wnm@qdZN;_30!QvB?jG$KIhgCLIHwD_ueg?L$eBZUnVcg?_UGM0 zEitIYa-}zwT0uBuX}I2Z3grV;knwEO6?_F%LX7k zQ%8V3>Jwa-5w2wu_)NlcwNLIZ2%ii>7cM2dSV1{<6VCNx9pT!RfbA~AbFHP!y(S#* zd^J2nxRzDK?Ik?dT8baw00}s7uU$sCmQ_P&CQB_|vZ#K+JUi#u0QC!&)Xl3~)Rde1 zOLO6RyL$4bzM7dsHH#XWY=kVPw-ReU<_VISLU#J>g6jEom>ruRE%SnS+8Tt}iG^$W z+E-y6zr1<0i|Q^~ctKrlAxUmxS;vgFrk-}YY9*xgEz6VO6f|}8_V&w~l>VG0Re;%g zvTS8XOXq_AmCHbwn_8zd#?CwdVlX!Cds{WO!>HfsXT&k0t z=^%T9cfdB&9N$6(>tlg!M~X`ucm??d-obnAmMRF_x*Bn!mPi zHJM40rc5lUm$Gl>7=}EJEKl?{t?Fn?VLD&evMXoc+|2=O>FZkA(b|NGh%l;EjFNR= z{ds^W{YhD1|qBQ z7YLrXREIE+#9!sf;I&t{}7Z*7)}3cBKkK4 z^kY2W>pw@ZQ2KWXj__uCNdA5QV~i9^|5m5J*>S@EfPDQsM0rSm6+j6(uD4f(`M*u* zLi(q;K@0mI;}u_jHlkn0CrTgFkMT-KzrIsr{TTnKJjLG~$^W%3{X9m54Zi;?Bm5i3 z$d7OSKk(J@b7W_dS4=D zn&9W(^%4FO$rl73!{gfLzb4ZDWdh|Nw)o}m=}7+TxOcSj_tgl$zRT15W7v-1+y4dO z57i%iCtP9KO#gxVI^X_N#m}MqTkHJi%l7qSZG#a1M#r!9)R|FWKX#Vzb%1tb!2h^k z_3i(ZU?Kfmoc_`L|9FId$niTfgvtg#{ofThWWVl*rsHn|-?g&~0J$^|}^xVeSf2_q73O?& z$xr#!FW(b>UpHiLav7&b*bN?^AMaFWoo?Tf;(xSvs+BWlxR9I9ls zz;USy<^5W9_It9YN+$ca>`S{5=|-{-7I3x?i-KA zg)*)m$_#dvm-H>n3|7g;6idVm*){C7!xzX4LPRLkcjo%XZ#;IesCL7$eRKZ3wz%OJ znZfR&`qrm2S#g5h>gbVLd2}>0UBeT<0T=6*NCjJU z;T`rwd68Nqdx0R6+&)RinjPung|Kn{`sdahBEFLJzbX5?eb;QV*S#vwqJUJc2BYqSoPql5-D*xVNxRBw4&sOr>f^XedCX${8CI+ z$v#P)MD+i5_#5H{6HwpkP~ZMiX^Jp1~J>IdH_ufmhPnPgi<*@$SJa7y0voh|uq zG^rjpgW^K5qc;1zY(!R@ec2Y6p}wm5@-}~A{lGb?e%ajYjl;E;Gk=>MJTW(TV4EHA zPpp5_8)efU_X@xAsf?E6WZSu1d(w!v_|lM+iOlNkcdN5M!iH+uzcdUUulv8%&e>C& z{c~}{?mF3dF(d!aRTsbak?l1mQ>zF5wy*ENIS=1(gpg;SA3i`*eBy?F$-Cbe6Kj#b zM+rE^1FI!ZhbL8kbsVOsdy>X*8th9aUKL-XY1+Qm0*kD|Iq6Qt{*rz)jz*Jd(?0yP&RCOUisWJtj~iVI#&ce1x!vK5wa=fZ!Z z|7v9~FzY|rNm2GqeJQtFS)Xj0_egd2>9`}`DJDi7*&J|W10=oGIPyX`vN7byzluzU zo5$kn&uav4$o|4@&-(W{ROfI_!yGPY5v0wNeX(rslFO8|G!0VS?%Xy!BV=gO%&3KV z`#NfyV&?s5|4{jyX-w{sq*P}gtIz&NwcXoKHfY?xPByJv4~I%Ka^o!73iDVD@%v5^ z|7HfZ*$u43r?T5$Et1THfeUW_HProS-+9Qj|}*AH%=u zfminR9WDQ_^dBN^OKtYoHhqH^6lJR?$mWxSHAS`A?g`o5NtYvB6wn{bCZ7Ab?p^j} zE7|66aD|7ay1|usWgt&Ho8+xR&$aX#p>DyFMHe@<_O#2>-lk>OHucFGC15=JSht&% z;q<8%)Ylfsz|&)S(kdJNNc#S{cNvP$iJB=s#=RxNZ2ZaGBiU<5_7}lEHaCx7ru+QZ zSy5)jRFRO?%1___z0TyY?$Hz5KWO~lLR+&y{|DrU(1t&&Up5KSy?*TOL*p-^J$u}~ zCr^N00-kLl;6BV0D><5Xu6gsVT6MZrGQSJE7abzBIw#7!!9LII!(zUH(D!}U2~E_l zmHBp^C8RnhYI7c+_$7ZYq^A76kR(#*;SYVUSCivU@}p1lLy#Ih7dqsJzW3Xi<1?Er zx&55Hy>iCi8_JK2@akH)X3fGRKaza){%XdO)f&RVj z2KCkIuSi32D)mSFjp~E(PlxoE3+oyu2Yqw?e8chWI4jpecmCBcnaSuBTTS|=>H$YKcP8pFG!spXYTqftG@r;CIW%$vn{j*2>SfB&32o*kfC@$N=Fo5OIHPVw9RTwJ=~ zNtumH%dD4BNYh*-j!);kjnBoz=gRTQcucP?d=A6etKVPd=zIb0D!yOLu?6%`NO?o~ z^uq@t_%%{aLiCqNc?;qHCW1rwRT24riO4@TLVsigZ;If*ir|YQ_&X!`)QFukBlMV? z7V^W##BaR6!!KM$d`H>~o)fpz;eV4O?-yX&L&5fs$p2;pKi$aR-$~8&**}(a@qQm# z({2&Uko~QOK3A?JIVQZ`$UoX$rBV;NGu&d9rpglBw8L_RJ5`>msO$5-VC3MY)rJ~( zyu{$S`m6ZoB)&8mLD_Gwz=HO!lu}^E0)m}m?9o)(d0e0eQku%OKRRdZ4JN;G?Ti_V z2<=*9Pi|IJ8-z%xGV~JZf*I4v`Ns`??uoh?vkAUdejz`f63IuU6*cBNah*GMqFf^Y zuackQ=z|e}pCCWQn*d4x4qnBt1SkPGa#L|UfI#r&+-2bcIlm&jTFzAto?|2Ua`3ng z!M6wFAq3wZeK+mPK^hT!IhwORz0L~*UM@ei^Gpbl;M32yaDn`#gtOmtK9?^?-z@__ zUVfwLeGAFw{JK7Z|4Rhdu{!jgEI-u?8xVk_>?>XgPy%q+toSs55`fQ;pW?`C1mGA` zC|(ax0`Ozxr}#2}5`d$uDz5bmIPMD+e}|kSjCVi9wR{4{`((x6Bj*T^Qzk#fKQ8A8 zz^BSj@vQ(Q0O#~_xx%^9F9)#%&~v`9{fx6c(}hRnY=IC7kOSW;{yl&afV19T8?;a_ z`U?cmv)?9+GjM_5bbWRB4Xv5#J=D=dP8s3T2%k!L1>x*BE^la)RsO3jZ~879_LP$x z%r8a&&gF2PK`qYZa3SGb4zD1b%i&tW*`K#K+%Jc>6Aqg+z1&Wg5&l_64_fx;w+Lr{ zeur>Q7yJ1Xp;5iB*3U>I0_-_Xekup|)d;?y8!c>bwujq8_H#GUv!Av8LO%O>qoeoz z{650btE!zJaX93Z5w86|TJedYcI6bk!1$QJl)*{NlOroL_T^{v9OeNWwo#IPQ8>ewo9O zt|E7igX#soKjE9)Iq(Arf0FP63I848xzU}JfpInha&0ns|fz%}OdAOP2U zcwFB@xRzDmy9n1d7C6S?2#}L^SL@G$HIHjC4c0#B4My9ASVyABJt_9ruJj%xyVbSL zL|J-LJkrY9`4aS*bI?%#u`?b{2Mr1mV(Kza-|ko?Q_Krz-5Yz1w+hy`&P{%%w8?XB zJMrGl_{a4K*3)D05lm;QpjKq5d%8ZoA+T<Z8yh&D5O zT4qk0^H;slubHpiC|^Y^sh-f3ZTlLO=n<)qzatX)r8z1ssiqKzcQQd2 zU;rl>0JV&k}*YOyFx==Tm_T2^h;Go!Xac zpR!57ko{|g7D1nT*sDVQ|0et){hOWsjgAreG4AvAzb&GFlXG;NDt1Rd{rwUBvt1{f zaeUCfpZt9NcyAF(zs}|3F$hHY`jPJ;{xWpL5^!(M!RH5W$bV~{{S}TG_G4V-+mCTk zNPn}_ulEN|Oo9Dar!b^{i_@>=1o|;f^YtGh%pv`2o&M`ou{-+dFBblg{vA$#v*Uw) zjQf237!!x|Yo*@o`1RoHFO!In{%LM7w$U*{KX`rpOCsfGi{J<~_K^Jh`tgl(NdH!+ zKjS!|ALCMA|HBdeDs*R}*`E0Nha&oQAZfN*oi49e{&@w zl>R-g;OV#@`cWi&{rJW`q`%BH$Th0i9sTq_8%h5(H;88c!z5q-YB4^fzuW2m#VGo( z7XDEByPf_r2$z8L1M>B67A&N{8I7HU(b9jn(1i4F#Lcn%UEu2lYF`m82V|zW!T;Ii$Y?H^~w<+k^3cnVkFj50>&1 z(qHCojvsXVdhqoh6e)jOo&GhB5&3_#{CxdCh@^jy)6e(T5asK?EW)oh@xE_-{>Ov> z>DT8Y(19?)Jp_2Cy-fZ=i=aoW)q(R0gXaEjcl;mDLFP>P^jIVPjGi;;DF^aZ?%b#S ziskQ?Ltdy*e$N5we5=Q+dV9tzJz0R7h6$iVj@F)M1#p{@3R{a;xL4iYaPC)&SnB#G-$bp@H zXcQoXQAFB=!IGlkW;E`%xuL zbKp-Ea7VulE)yJ>Yw8@8wl&FRa*~%fg0{+UBz`SdD!?zhmrH~%6SP=|2|@XBFNh@h zZSY403+Znb96|Z*Rbk!vphSf9qi;b_e&`R~L&I+&{c8nBP=0$=s2{u`{ko^7@Bq1@`PDB!6wHyzSuSjJhMLbz1jc13|D+E;y~6d%=*UOw!)I1jx*mV*-}UX(@r>9| zB|rQhEEb^;evM45$8qAb!1LELHGQY@eiBJ}X)*pY)YvvGnHp7jKf; z?d~Iw?6wUx<1(##GaF_>?!71`yKx3tZ>rC3&t$jDCu{Dzx%ES9E^WwOUtW}bFteer zyvTj_B;PkUewhY;FGiWetF4gyFN%&=;qoC?;1ihP^Bj{IR%bStr&BUl|ACVW_*M&& zd=(-}<@=p`Pf;rQ#!EhFE0OQ3s++b6m_quimn?3SFEiwmKlf#Ze3EcGVzb*Mg&U3q zT|@TQ_g2f%m?4SUFyU}<4bZtc^dWrvbjJMk&-Be`$j+1{OnN&o z#=54(jTh86EjxXt>=xMC)z%(}XkTR_{@K3(7|R&XJ>oQDA#MA#O+dMV>k%rfdb#}=UnuGji*@i2#L`V?;<+>m&4!Meti9 z_-7*c2O>DWUEndV$!no4H+U{xCQk*2A4^RyASV*Eyc{IwJQmin)h&1^z0DE)a}oax zMesW#a`YWL`bF5HV`?6QqmC%<9@mwW?IP3j_!+pJ5 z31__zlN{Fj6ydCQm~fOjwTJTybzAXrNAKHHNpd(}=0)&U!dX7bEdu<8M;WU38h{df zz3VJ&=-K{3!r7nicDOI+{e(le>isy$VSj#|aQ5e;gtI+Aj^JeuhdmSBISy#o5r9uJ zXZA1S&Vgf0tznHj0iM^m(|ulkZ;N-YdLx>9JDpF1H@uD}*{^)$n^wMw6>gbT5tvip z<_pwa)Yw#Ky7jr8U9DH8a9wNqe|zmuAjqF6U=x0({1x2t(}NL)8%WTci8xKn zFEmmaQH~qU6z&o0#y|c{gEra8HqV+AR*TC=ye(a|0Q{ZD4@oRSW)>>vntp|UA}1mL-RkOJvm=DxF}_iL zEmt2G<6Tl6r8_vGOI;+=81g@!C7d=BPZ4Yw?O8(Q85NFt?9URWQ39)sc~vrolQn`C zH@eT~UltS}?5}^Z{}8#$-VGwG5`?8O@H9{sF)&!=b7$Wnj=kv(1ABXKoHMYuuW#|$ zDB*HAN$|d-hA-N1>nYNQ54=3Sr*y-u-};L=?LF##_-}a5{f#)x7}z_hZ`#1#Bl@S^ zUkhOB*&Bts{|)zJ^fUb0`%7^+=>DZROuQdM95pIiTRuUaMl_ghQe>&27mZnhoH-~l z1AFJ*c-X++n!e*;+Eim&f7#o=iyR)F0<9AV_P(}%vLIsg@FY1(_GEY4rE<3YZ@tGo zSsZkP{1D8`oxJbD(+7;xFT*WK^#21A6S@ZlL+IY|Ho=jvewZpi2uJ4gJ(ICjFw~6@ zJ?;rYxO>%Z>MfdC9Wzdsa|9H3RDZ=k4^RSdw84t=m>qG7m&rK-s%~E0HiIk~T~+Ad z%zKl7d5z0u&LEbo?PzOi>AXS~SPs4pz+i5=5!WhHSUZ+?$P&Hn@fnpE59Tj}i!oax z-dG??mcqpw15C*L?|5VI3GoB`>4$Cye$9(OesVx{2IjiNB&sSo%RfP0a5!HsM&j3U zq&$9^sgnp_CTRD%%x%Vn1hmgclHbOot%v>!`Eh7;2_3DEn#huL-&5%ipiZ%2qE(x9TMK z&dv-j&NK|xG>b4J=@+0@X=a@{eN3(5us0eO;Iq~j2r7QdkTWjdGLdCg$&u&X7vWj= zi)4ko6*y1~nIcBaH&4flg!oxisQxO$i-d);o{nYSe#=^+KnAM~W#Xz^{D@@ zP?v_YMV{DyC=L%SmOq2X?0}nOh@i`|Nv>37zhmC2T$r`Xc;UkrgJE5{#qaBjj zw;5GfLddLYwavcIKnXGVRh`Q(JIli*6eaJ1OmRugisFO4{Hc6=)Ew#^%`==snm?5; ze*$($mKd#L$dsE#Q*AQ^zH}k4{GLbtFpahPqbRds@zTtO3sy+61y0VX(Pkcv4*@ zUbfndHt&#S@m164?Q$3vVazS#N2^DM`op~b?0>y|UjIC5dR{I4i21WZ@~3;G{GoTr zc8Ku5z5ZlmB#`~j%%JW22Qf5HC4(P1f3@k$NK+%@LMx92xoY)l<^6Zl|4*lXG<~D_ z@BjEmF0cRW{xjpTdb1F@Ec0uddui*B%nYt6%CuIPj^GdTvwNj~H{*O$h0KD;cEXMs zznJ+tx%;VPKFx28JP~*1*3`I?)G=l(cQ$TQ`ln%G)cvZr?}wM(g991Csn$aoL4 z%&LnIp0pJs^5K(=h=##I+~{Qn2iM?`J;>hg{W>wv8ZL`tyX8A&oE6ChW%Ea%$q8~lgvZ1+g(bE*KHDl!RyOQ zutf5Ma$Z09fpXYp2&86%6Ot+p7|E9e@0I0 zH{4f#s~nx}+i>GlB-bezzwRZRV2T-BCAXaohNrmv|Vyw7B(nqkEv2?qS9Q3IuIx=np7zS2 zbs`k6SCZSNZG1F;pR96m>7sV**ASB^?je1hDzRu8T#N9BO#<(h*X-+V}J5g?J&HDP1nPoz!6bE1$-Es4? z=M0x>g7x8yE+xJ~>zzgn|3*xOwK~3$mBQEEE`YQ(a%*9RqknZNSD|7;Rg&^`LTgig zGSo{`G0CJ}(z^q4v-3)fC${3E_~8A%VREF!*bEQgq+X7DzisR^!fZ0GMK>9fhA=SdBN7p#!mrEagW!jlA}n?`O)V}+zRf3ce^y&HKt`-weo zRP*=p|6hOp_x0ykw;Y=QP+uy$3~X})P?>X@$v$ZEGyAX>d#pJf*<}DlcjWQwX!(^} z*WW&-l*;!+JvOEIo0ckjl)Bd`c1l|%75{-Nr6g89p2a-N~!m@ z`#^a&^QDstqYv+7wyzN;6QPgK3`!H|%+v|dVhc3|lJ?>8(wYsPWm*pLI~J&?iOJ#- zgugdGM$50!|mM1 z>y?RLoT;v~LfSg6Xzw-e>QVyEs+@tt1$8rKosJV6%u7FTThbJ!9yRuKtd{qG7qnm7 zB+HE~@0Mozf9rbd{4Tl`1v)T~dI`;=K1)a%KqsLFf023AD<;pLJGrX9U@~>Nu;4v3 z!kh3X{4z-!leW{hkMGtcsLh&oUq-wH*y!kFm2uEDCv=E=8u1d$+(fd!%FP3RC)tm8 zf(Kz}AOTOS^W|Qva%D~S)q0*nnyVZShAg=>+cnf{CwC7_x^3bHJAwR~$rZ9xyjken z%{_;WYaPFtZyB)hde6o!j=s<76Cb&>uTs16Y=jP7Zyh6fXQS}cPF6p>-P3W1w66&G zA|u}qNj~K1fFClB=fCQQTOB{%5eIC%j!ZOVK<6c)+~nK1RQ+J+b~(AD(G{6nJG*A$ zNb<053BqXd^quTzbZf^bZ}S-Gc8-B=rr5vN(X}Emk-9p5aeg&LS}G=hVdV5f{!&Nx zYUOVngM8Srb&Pbo#y|&qi!iBB!b1E-{Bd2rJ4_jv%19a;Gbaw^lJ`4PTn|fV50prTN&M-y(K2wajYJb@0N2A{!m-V@HfF9mSg(}+3UW3( zIcBnxI}gq2MN~TRq9aV`)r&r^Ui5KSX!2o^k1w|hL)v_K7Q!(vyfCEmR`|`ur_C3T zxobU3Ctu4dVvp&h1pByK)G8kq`;YVxm2*@CpBllBiQvaZ@Z%%+2@(9H2!2WgKQ)45 z3VvZor%o#b1xcsOtB!)Wbn1)(3_v>xd zIyJ8V1CTEGO2(3cFT=>Y!O0RFiE{`mm@U;zK;0RF{1{G!r$ zETj_$Xx>c5DjHu-<2N7vOB%rV@JDIf;=@mPiy!}4fd2ad{+O%u@!uBUgAX8l^v?(I zqJW;?3Gjb`oaN&`F2KJaK>u+{@bQ^L<3=BTY@i%N`^o(#z-K~$51zUCG80{rU(c9j!-xmj7#wysOLk=4+# z+t?)aR$E~Eb#rlOa>ICiSh|F{Ux zaO@p))a&tF$oLLJPldx_Iv+m~D93w^AL8+q+^>Jmw3m2%W#$2i*Oq{Px&!s|$^iYV zrW`2~2Pwzz8NbEjz>7J(-snRY2M#jw_@J?uoX0^*bOD{~Z)V##{da-u+7e3l^*_%L ze;FK;3xRT6Wb|2?C-*F)PkSDIy{XUD5ib5e!{~Ev9)4}W582Vs z|I-n@=vhzm%jJo994q)GMs7Ub7W|KfzAul@?tr~mSGhb9kKZCbG!7|Gd@_&Ed}G&x zdHB7iKE&f&@l=oD^Y;<`PdRpqDVKQsEOMVQ{2L zHmUi4`(;j6D3^0lCK+K6gj-BKLn8xdVCl z<%WK0gp07hd&qa&rIW=f6k*XG5+~P9*!%oue`dA+|TFHUu4SbzC8T*hW@e$7e9Z+ z&|i{=_ZUB4o`+91ey-2M#{~TRRby{+L@)ll+1NWX4}Zm!%h?ewdOl#v<*Yn>c0le# z!{>t$y~zEYk-ISuUuo!Nloa=q?=o_yMD(K1{Qv4ue{ZiZr5^ z`vdTKzrv+w0N$r?y{3xRQ~D>+gQv)yL2(3E&si4E({rA};d9}m?bUi-&-AXICo243 z0({V#g#Ri<->GnvDFXQ4L_eXInh#vpp9VTd0Itic$)Ndukn(lQOY8+sT~{P`x#FY! z0NoH=KfKMt2G@E{R=6%N=`p}Z*Q;qv@9HV`0!N(}|40uBK3dPE%*WMJ`xB!?;WJy& zYk%r?t@XT`>0Lc#L;;+-u899i#b4{$t8iWawLi6iV;e`MY{vrf|B% zMS5y`wVt{@XgziP|G45K^$PmDk@|le>j^%(f4fNGy1aCMsM}*w(W5O(xsQat=P>DY zyB-OD%su$@(f&*l4FdcS(mzBW(mzBW(mzD6^*_gGY4yB^;$l~=!dEL?_gBXi#Pr&4 znom;k(RPhQZr7V6SKF)g+^YC%JwxRcq7T`n=`T}$&~}YPpOF3^IZXXS^jd$d59Yw6 zK7{;(z6jx6^!q6NguVpZiKfzA`NCE8vV-LYcB3J9FpH?xxLCix_qBd_(=TxTSY$-KZoQ#s`!jV z?n{dPjmQnz8}f6=-oy2C$lj3LkiA-NDft8e{p~jTNxQBFNC9|1{RDp-KnfUt7ST`e zQvgx`{Ra98z8D|{;ClQ98U*0ws(;qw;V)8}@M!=s1<>D3Kf&J%kOJ^c^b`CRfE0kQ zr=Q?|2atkGk3JRw_yGNc{__AS0KbiXg2NUBcO3pz3mbei#fAPU#$7(&Q}o~^^gmL# z=Cg-!@OeM|g#J~9Yd!zQxU1(V@;L%<&A)_km;Y>qA5U?Sd#l1vQ26}{zmH@H{eues zfWikAuFLB`7>AxmDEb!_{cQ^WouWq`k$XVl+TKDCQE=^jo5J<|(dmrifIPzg9EBgL z@RZ`C?OLpG?Vn`|*LJN^{1FwoJqp)$-KzM!U(w&IaBbIT6d&EL@mw1Lw(55MTZQX( zeG)QL0KIP46$)QLX`=td3P)QOyjkJP6@Hb%Z&!FGfG3Ft0qTN8_*Vj?;M#?;Jpyoj ze}pnZaP8V+P>bvG`Yhv+i=W8-g2HJEHo~_v4*u^~_;(cEr*M6}+p6&M6}|SqrvH?p zpQPx!6|U(&r0@{E9?v|e==C_^KNPO{cPL!*DWx_mejCa4`f%ljuA3pb`nsw0{It?v z+xs(xkHp?%4%6Pll^e1*BsXO5hm~F0-lr8l5_@sY8m@fbLNo|y7g_oVz04=${!#Ne zgU%5^zlwfBKLH>G;P=u`a9xhCD|{sN?G8n+{eUrm@DKUnB%(opJ{YSA{pkQH0Kb`j zg4a?U0r>mqC-@ZrDF8kLF1ktKy5H0N+ZLihaQipi?_q2y z{4th8fLz_b?J}svb^rEGg=@R&6t3->r*LhTF5kZpjp*}6%J;j9PpEvg+{0}zp?0e4 zxz=B|(>KyyG@m!pUNj%=hr?|zAwPu5@o?pa%2CTra=k)5mo^TlN#SESj>9H}mn&SZ z@8BbI;7Hzse-wZpZ({ae8C?qyfJ+_2d7Z-F3V=hu!sQ+fN&l+wu|iD8y$U~3;bS3? z0uIv0;=EDe(su#BQ{g8A;P8mT-yt9!f2nY3<47J|WQmY0_mV*H-Xj9=BqAKHR`{s` z(y?FRrz!jag`ckQA1J&+;eS=QTvL!d2^|;(=yRrt*?(6n{49mvqi`8>BKZ-8k5lx& zR5-3}5=I|kV~~5cfOM==_&EyiQ24nDzenNY75<3ArR^j6mkO^^^am7Pt?(pnekefC zi6&O~(Vue4V@HU12LE%djUW~~U3edCN#O%M56~0vARSI9G@Igrv zEq0TloYm0WoHfRT+6CfVZ1IZDT+k>-WcAZqumRJm_8ZL(nr1g9oEX!Z=1+?f=gu`m(;DWO zW7B2Rn`>H{<~Cem@;A($VR0jN&h&Zp^IDqc&25-H(@-03%?fRcBd$f zU9(fO>P1gCjpdrnNm=o>&Xp_MS7j39hPWY6<269f;*J$InB+DE$Mmlny`&m!nb{xu|#b-*0Oj- zhPH9_@9*lm5Jq-%E?UyEJd^3lEB83X2uU^0oHMtjZDkH28ijH-ElsFoppyzFBB$=b zu&kkz_Yld*om*K|}pqdz@v#m2GdC1NHG ztCn`c2GyELhyY+HadRyLhX}B7<$NRGc2Gp55{zJ90&-A)$Guv9rcfI4q0TWXw-OE?=*n&tQ0}NCPz9dzj*5 z_0AD2^iv#M=v~~<$7`C>6*RAs1yhkXr(^KsK2$pL=k^R928Sd7huprw!{LwwqC?a@ zco;y1P&)F*O`k>|)a&QF(9=PHEVqY<5b(r_83f^Ebvs=cqU5O8h!N^GaH6^gqnGU- zoD|h@I4Q^z_YO`XvIP^7Q*{rXtl?DTRUL#UZ#Wfsbr0dme2C;IH@b;XR!oDjb}3w4swseO6N($$MrwwpT;Yz1p67O!0;APF_YM*~2; zZrY-@qa8!$mZs+BmZsF))U0OW(%zmxvWfU=n5CFMqh(h8EK8L?rZqHTDma?^uGQU( zTDrQs$=tTiCGB=_4qf4~MVX$}?I`J7QY3dRBFkEOR+&4$745XgEidCeo(8~~MT-;T zyVtJ7kp-^kZdqiP(>7g{y~nmuRJy32F$wV*(&CQ9B&t)S#$AO;Ri{WbHNp-xOtL;l zy2qD>&WA_*=!P$5h7;I`JIskD8xQ}-Pm;)a5}7EGYN}VAOBQ7o!CTei^&GIC{y5zD zztTfPo_f#8+RBqNFP7!NwDw$X*g+FEz<7E$O011yxe=ajk3h`X9V)+`J3=N$9W&SH z@&w&pp43g_gaV!i!A_pOOvtmD?IheMe;YDUm~Icze^>sOD6>y~RjtiZ#W^7#Q~0iY zJUjBqHz1|yxod}?In&kN8mti83!maiY z{detONtu1}m#1tNE&o`8T>1McvrqmemVZ|y*+yLXLzLeqzigVNZ{_^3pPG7}{H>&v zPkxd+g#pel2Uq?lDZfvC7t7c7w>fd)LzfXP{Kg4Qf{Zao;^vE9_X#cxe{-vB>4sQ7$6=?rmEWe5~LO!0OyY@dy zfX{w;u3902`RK}jg!23B-{O&v=kl)nX9Mz^_<}l|{Qnh@zuP1K6p#F)1NFamgz`rP z>c2d!)c!x!BmdNZe5~7sFr57-2jo}Hu=%z8(+P6@KM?T$o)OBwJ>dUVkNh({@;?)h zFVDq?v;PwT`I|iQ&+^EBhMuGO>VGW;3lxTv|82@Y%97^%AN0r{M--&431j*AazMVU zk3XFJy#e|AJ@U^cnXdd(Xi(y_e+%2+#(K)ZZU1kl{671WGi{DEXGH&VF8y5jQv&j3 z{r%zWpBRw8oaO8KkM~Sm`PT*7Uo8_3XaCYb``hfXANMS-{QiLaZA>_v{kI0>@A24= z_h4N4M-$*H|2-p=KZ@vlwHjqX3Nr-Dy@8I>!-aQ2@PkYDSOkN0$3 z`IiOSUoFem?`A+BxBkxvw7)Ko{HY%K%L4Lc|AXP|UmTFX#Umg0Qm*|UJi_n)!4dlZ zPRj2q|J@$>crVG7|HXiO*`HxJ`yU9%mnE!q{lhJ>D}T(9e*2UBKFM(MM^k>E{Z$Pl zjDnV*qH|aN!lV51n^-=^j5@gWZyx3M$!}%(Tny&^7ejJaKK8NkwZEpk*s2-v@c<>UTd2iN}V1NJ}bkw23dx%PkSXuth~BeefX%J1`k@ugO4UH(wXmH$#e zzUblXKz@x!{$(EdbI49#`6n@1Kw&ufmr{P8{mVV_XAwWw{(DJ|Pks~2AFlpm zpAet?%`87{tg!Q6=*wOCodNs1Mri+g1NQIn*pK)2T=`!L*uRD44_E)c5U{`OGHbZ5 ze|QhjmH$kj{~cuc!}9fde<>h;gU5cnr|8Q6P@w-Y zAE^@kaQ5F7=zq3*>|f}SkN0PN^*>41b%f#U|9n8cY~-TLAMa7R_8%Ll|FtZCIQ#LQ zsjvN2H5&C3y8Q88rYnDZKz{28?H?DAzlP;&`&&HnpP_o@^MCIM?f*9A_u0SIWB($L z{ND!TZyBNeF9ziA_t=kn8Q1@(2I}A72<<;PQ2&zX>?!E-Z>Mut{>1_Ldq!wK-iP=3 ze>uz7<-g1$zd6wV$d*3C)&JRn{%5nt{uLhis{`_r#}YAx;oASofc!lk`>!K@uK%wJ z)W2GmKb-wn1nOVeY@>co`LFcIUlWkuIzs!q1M(NJd|m#X9{B@-@mKE%?Y})R{@UQN z|9X%7&j;jh8KM233CQ2=vA^3R|7m*8;_LqgSw8OBbSTp&6n}#9``Vw~Ks5LMr-$g> z`geDcU%qVkwb_y9%D;p1`{Y;gje9HS$NbZc^mFBJDDlhRLO6n~uWrxs@BjOV&L@8p z%WvXD$X`o8SN?GU`;*-8e=dUg=-OWruzwE*dla6v2Xp^-6UANm2Lk0U9}U)XemS`E zUkQ}|cK*1eO3A;)BfmRff75X`V~q&rqbq+^!2Z1+`L}xHHw5Hw8ln8Ufc&u->{8J7 z-$v)I|9?w>ul?<2`NQ?UFH(MA{Y$g_w9&%e|MYp}9~J0-_Otxqu0Mr={%4cN{`DUD zQ>mZv*kT$nRqL zy8howGF|z12j(BkPOu85SWh{){r??-`Nu6Rzm+rM`uh?3x$-9m#^0?hf4KHv9TjM4X0+0Mpd*uI9 zKzyf`LQ2)AE{&4-z=L7X`H_LA&nFy%=pQE4a|CNF9*Wd{4 zUmh5LRbjG^g0}zjbneQZ6Og}Wgynx}Kz=LB*Y)o~kNi~N{$Cyt4_E&9zT0>G-|Dgd zpFQ%=3dm26C1MK0^}nYDcGxWAS& zp#3~VKgrMLB_1iY-^>d?IX-)ajg`IK9-;Sg`nmZhR8O5;b6zqERZ%RNv~l}?@}x;7 zWzyuSlPyW>F}Kz?&L}L1JyMW(cT_G`s{Oy2>WG9|6RD+l@d^^@jdbx&Bpx>q{Y!78 zn~6kXUwm#Z!s`5DC;j}~^X%*Cjf!M`>dMp=%}ov2AEmOd?FDIi{b1(Wbap3`McAe3 z?BnTdr9G!)B1@(RZYoY^e`7E@FH2{CTbF&kG5dRi44s(XXr!mJKj&<}HOK1b(%EOz zeNPl$mAW?7at(|V4^dUm32vQn)6JI$sd@D6__X=+>Jy!d-`n1nN#HxTX|>>|B*xJ*j$fby-76@e zdgA!1@ioaxe3IOK!GsBmERXTaIy;wj(5eMJtJ~Vg(}&&@GM$|rZOa#}ST&)eeMAu+LlhNs-8TtX6kuW6DL(qTr#DqX7Z%!CFf6EGI8mY_V#h{ zdQAoIo0}+DQ&w=&=%b1^k#pfUSqn*Q16IX$N)rTD=fM_uunrH_%NR8|6DHCBdpN!x z$5ct#w34yYN|LFP%2Y{J-w}6>y1VH1!onMInlwpesS;65hZ^gj;Z=LY!vDnNfz zfF9qV`1B;$i=P^xzc7GbL3p|Hzp1Ol8}HtitMZb1eXpU9%U9aZPD3BpE2+r1#OS?h zh5jYO=Lkx*LGWX!L(+SM3ND<{UqQO89T>tzKE^+ot~(rh+}<1xJ%)paLys$$(9M;L;C*9^+2I z7csr7{|d%IukF2F;i%WbN9s6L3svjlej2#c1+aka2!c!fOd8bUf&r>kIQZ}_Y%~W1 zKH^)DCh?B~?1Bvv(61u^k85vyFAZGE6m+r<6L8&&b|H}haH*>}@5et1z>hXD`)@PH zfzxeO9O6&Fu^x^3fID}DV3v?EwDT4=)#oiJV?G|FuT1GXLc0o3G_;_PSFdl$WD>Ye zn*~{{h(lypks067*|w+yYoi#6so4voIDP9|KYbof!>UR?qbY_ov5iZ5a@MeLY&5B> zIy3F#XU?8~Zg*x;+jVB46?|MwBP7jd;)=warux}flcoE*mad-e<%dwHjlQ4Hv@=2U z8E&kV`4l#6k4cVwAD_yH`1sm2lUcoD@%T3S&^7miSH(8^Vl*lot#kC*woZN1zY2YZ z8jAF}aV4bt2d=EL_PV5@UFmQkodDBq1nIT-=Lx#)A^98hJ5+w%mOwB43gQS4)6eAz zT)wH1eg)Sp*eU!3e}RPiHyC+?D?e%IuTBoE=hyOcWp={fjGq6m)zX`%A=xYwn-SU5hFrWREd~wj_kI}L#zbRn<7NSL1Zx7LbSN>%I`xmhM zXE`V8A8c{u-$)qjcl&@!fD~%%A^I=*1z1fHpZ!%#sO`tNMDk1fdk5El8NUeMR+bOF zbzs=&415OteERn?VUx~Gao2w-!hHI-vZAe=A9|pzxcXyU1W{rqMNQbv@`sy~8bfqU zDp}3369WTJaA~i%`Sa$a1bE8fA^Hp4LHT|54>I9aCWQScGs!RI_ivQnr)mvXsIh#6 z-WZR$`DspSO4U?5%Y^@S2Fjk>xcx74QWGcE)L3NXb5hA^B$z|3Io2kwA+P7pNtqGg z<3gLC{^rhEz2P~qH+c@tOrbSoUv0=9bSKRg(WF^pcKcp(O?qJaejMzS*u%$C=>txr zcl7~Bn6>`ZOf?fUW?y@_ETYL88k%$K8RN{UnYlDGj~4kK6ME_O2Q%|&Rxh3XOFH`% zEB_lKk)J%Y{LHbq6HoBu-Q(4R5;F$ae|AFgRfrzAwTd+98Jpvm?5=cnI^lzvw>M^A zHBO*-$*$?>)DvIBzoCiNH+HHry%D!gi5;DkWbo?ezJV&WBT+CqQT_euK?6opijgCb zi9&kdlJvmjefGqhe_*#c)Fz=s;lVxCgE~)oK+?w|eN^?+xfCex)cn-EW`}TUL-xm1 z4UEevveRhQkbR;td(c{w{W;m&n0-E-eY7#V_o~#@scSF+3hvPfDMB9OCX_C%Ctu~Z zE}B9U`3>3c8j*i!$o`Fs?HiS3*~9z9QPBS+QwNt9H)dPQ8nbK0HfFn$yG-Zl_cEp= zjK1V$T>5jpOf$DyS4xMznIm33s-UOfan|DDzYvee;Zy;iC9=rH^uQX_napVBWmGYhZXt6pbJnH+n!ZkQ5`DW4_8lxK{lL*Qc4-_KFTQI#etWv$ zv4hVy46HZBO|E!rdZ4xpqK<9M{`TPR^@FAT-zV=j419e9@iCGpzDdQmsQ6YD-$wED zfSKKvZ2JLm>&A912H%%4{H+Fg!sov^!b`6lOqGsV-%koO>{@>h9S~Bx)_;r+xAsC) zQ->O|Mh~Ka{}GUF3mpl9MF{&IqwAWrY2&@y2_RRcvrkq(Z7}MAic`HCZzsGAUC;BB zx}&ftk>GR^0r!!QOZ(3!C!_}M-Aw1%XZoHlNM$!7-nXVWv2IM?H;+hVO`2)&M6hOb zV%@QQj~DbkUCfjNT_hG_Awe;hUmCpWC!B4V(>U+Ad@6QFLv%k0g)mx9~ z`*Y#VM@5XsCe|I(_jHoa(*sRZ*xxVhf1LE|d%9M*P9$!3-A`D0U~X~gL&p#fNAW$-9l%x*1ufZ{{=&RpDE&j+u#W@)EoxBuFE~@)ybj25z_0Q zEA3wi2GP@yxMwFepsRkFJXTwJ@6LUAS+MV-ih~)r8711wPJR!_Y#~sl4TkYxPl=ay zK@RPfL(<-vL%Wq}%M9ORM2DeLw3=fY`o0ckiOjEO4fNE|B?>M`P+8xF@oe?W`^xCB zsc&b2Bu(9U%T*NTM?~fc(k_!HowdhQcGtxV$z)Tj)>CeJhGZWWk-UdeeFxu@*_OKP zAe78}mLjNXnSUU)KwC(akGbs>hEV1fs(AI)zpSr5xNj_xrTU&Ah5jfyrKUbny74_k zVxCsLzzpcw)~+2zrj+JYP?vAuhU}AMch6h;Zmt-0uyp-9C=;&HQ>aVXMvRem0uu^Q z+P}uI-X)i|S=ran7#0)Sko`?#_NGd*aK}bu-xy2612-kc zp&zFPOq;yz7wEpYfu;xO+9d`4bLx|f>&dz6|Ba?k_kElGNf}qaoZV|jCVY)G4;kT^ zHzCB=pLE|#X^i@4n1dF4u(ba%Q_SCK$o_yv0<2%pxQ2mm>>U@@JuWcCc?n^}7FtDx?SLH9T66*%3 zwc~+8=_v`SOGq{;)ZjmZ6K?T+HKTg=qzAfa@L>y%>iF)Vb&>238rHW~1!VVR8v52% zCNi_c4jNTOqSgHip?7owWas$BvwO( zTzS&bILE0xRO(|JvcF4b|CHW%p+eE`;%ju}bke^LJ zC#eIqqnuEabC!^my|0*aS$&;7!5WTO$vZkrw5?v-mFb+Y=KQLu6V|k}t?r;HR5L3K z(nU*_RMFa}H*{V{D+)&FtonKBIdx_VyqmTGSky7QXXWDd)d>)`Ey~b?>pIN#wy(*w zufk*O?gT&2PS7HTv@GGW#ES0j9?H*ii)O;x6RU`tqau%VK?b|(p|LFF2mM?C zgbN%$$f@tX8ELgbz{ijr*WU-6d~%BXz4Y5dzc)3w6<~zS#|G%k*iNM-RooX9zxdK} zFh|egoW$@+NKZFM(gpb3)vq!@=h|Hrpu5+>Yn=1EQ^)SSbO9W?1%kUrhiF6aN3 zzFQ*o25zWhTQw$rlR0b9bugXAdOeuj>}a~JOeb^D;P;3p?`{wFOAmIygN^1&s^um< z*dz~@_Fz{tCOTJ=%r3?@K>jrI-VD7W(>Lm_qPq(V*Wo1^dX(7|^Hn72HO2R52J;S-RT0A8sE-^;w@nKjz+J&fG}fkFO-YaDil z-)_!(GV)S@4YC&;xzz+?Khp_@`Rvhr5qTG=$i2&{AYg9=?NC0B{iv% z+PwSPPLW=YQKHHu~Zy&8CKEP2<2vTm-DNeJ<2E)H9 zj?E%J7s#S`gh{@84F7pdMf2%gAD0nQAd47KT==Xtd@haXg%2hg3KCaD_!^FNj>260 z*%2=Fe2d`&ZEX-fKQ(;j3Y-u=e>jMIt|r^Y8LR+KnhoyF0j#2N94iWMc!QfG0rC^0TR zQL!RbZxu}Cd#*l>;zfz^QCvrg5)<@k6fa6h?Ta82DN3A|3-DP{;`{(UC4ft-%1tg( z?M0^)srHqNo0pn3Wa34ted)v^)xL7^xV`7%_4+i57peX#0x43Y`nOy>?w4}$MtvH^ zi&VRgK#COQyvZ7;6eZ$*DMmpb_n*0V+#d>lGIbfa?zsW$jr#B<0s8Z)U-i+S8Q`;v z`dc6Ui~yer0l5v-ANu&b5}?QWKtB49Qh)2ipCZTj@cRPz{Q-M_8nEm40lX%_XKO&u zUj^)aFktVm0{Y(?p#Qr7|C4E);PcOM0sa3H;6Ei`*I5C4dI0}Xz^=Oke(nw6&j$4D z4B!t1^eG6`bA0OI^V?Sg^!P5bTz!2c_ae^|eYtuoQ^pAg$PeY}`Y80b8$NNrE#u)v z8t0U&e*O;1kI+wcm8rRd_9%%aHWwOUmt}(JX5Z&<1*rTG*Ca+1nk248$SPB5#V!CfDaxml&fzMq#Sn} zyW}kPLsh{4^Nc^~9|y7bI^$3Cu82vI`tYv-eI5_+|Ag`9Ny0vQ7jBusF==gs@PEPJ z)M+{RR}CJI1BJfd;8Gf~y;$d>Tz&H)^tTeOs<&L}v zpvNdz@XG;GaOvf`0eXynh5mXFQ*iZJYhlA*+nZ$Ew%0r(a46F%@Qf~&vW5dcRXq1S%9QsLbcM*!^t`UyP^2TTAy zlYWBB9V_q;D0~vd5rA)?pU~@ib&=(9=DFIM-pyZUQFW+1Xq7N5J!MMT7SIHgaF-jJzS#b;d8MIFM=R|&no%}zFFZJ zg?|`~Dd2#g&~IVf_0QJ=^iL^z-S7QP;acuEz950W#^(p{I~Bf2>G|0J{$+(PRrG@j zU#IY=6n?eBpI12Qr1+-XV@UQc^+ye=HH}gN< zp`Xh9rGFOsiy4>uW5H95CmlZZj8`~#1LNr15roey#?P^EgkR3M9v8ts^BJGy&@W`X z#=$=WK@{}31=o5huM147tydUR368N40?M(SeuCrLhXA~ZeuC@k;57=rli~=V*Y)+e;!tNFU5ubPZYjX;d>Qcr|{PmuI0*eBv+raRK3&uYZTtA_~YAg1n|-H`nsU? zxlz$;d;1i=hY5Gfqn2t$~gMKQleE^Q}sszmk{#nckNj`#p2FG!zI*p9{6br$9y;f@Y7Aq{%ciug~BrmKSSYL6n>_{f1q%=heh&V6<(?6@p%{m z4sx%J^9qH_wH|nl!p{c4pqGIiql?+sH5X5#W>4KkGFE+Lz+3*cP*~_S(ew485poS9rh+vVxlZ#q*YQkhg7H z7WJ&*l?J>takAlV_5sHWxkfOp-%!=kv0`ysW{p~Z!3u6^7rwb_(MlFbiWgYG(iUpD z2ApDFb>E5?k`Po3;+5kI%yyrMk(q8gEIvZhAZ?}w%kiA)u}+H7}( z*RJaBT%Etv2J|o+#V=ml($)@wVHWp@6xVBe*jnbT5hEZI6Evx@Bh@%_&fI9dkcQdw z>SxxQb5*M&gYhyrXbn)mU>>dL(J*JWZ+Q`zAPb93Yna#4OiQQDo*6;&8fMi;jAp0o zi7PSI+1Aba+4E=B&rQv%uY)^XC9tnOugiwYN)4fN@mGk!nx7Vcm`)m zF_R#ykfvK|&&r%rYS^oKIy&5b$QVwQ(c12FWZUW$nH99CjMzOdJ-0qp*V40!mYTWF z0dFMQ_7;;c-dPRC=*rcfx|mE0t*K(gi2*1RNl;!TGHbG_?<-biOy{<;J+oZfXV#IC z!d}w8xM!J8yY+(zR;Q%66+#Ts>M0sQlX1+128#BV$e* znw#gNS}U#wpIJYfDr#d3%CA}Flma(IT%}ChE#IgI2&M)TxaTzKsrmHn#oUH@3tKL$ zU)WHmG*NBI%Sp<|n+WaDzNn2X>gmX|pjxpV1?RZGlDLDXI+(rQ7v z)K+x2pcADpNPIrY`NYI`-N+$`D-^BPBeizrq7JI7S|m)NhSajOXH^@m4P?J+QPN>V z+hW#dwO!*U2Q!ybAS+hU<)0|sMTK&&w~z;?w4ic(+NMs7uYJ*SL{c}jgQC@le2F?| zD3fgh$c<*erLT!2CZ4oNdX&}(7mPnIQGZ2KOZW0c)x_ydUmK~s81I|qhrKlxn{;$; z8V_$H@MZ#l9T_1uQtO<{DdsJ7m`%bDm7mnh31vBF^sJonyF5X%;dDzV_dvK`f}O%o z@PDU)s84>A%^uP7X*91P=RcFop{66{HJ@Sw8 z$lpT(eDb?k;Aj!dM_2xHl;0gFXtOh{%ZmG^5VOe{}zw@ zb~4^)|E3YjZ>7vW`>QG}11%qOX0H9;q=w^@zh#8-cT#?z{8o?rQjh$1Qf8n0Z7d&o zbSTp&6vuNLpZrZ8`D2LQwSQ5d{0CXiaOHn>p!^3t@{jY#Ul)+SdxY}W2ITMe$j7`6 zk((g(|Mzs}^Zy=87QGL}r+NL)%aq{rf08FLbp69Tkt-k1H+=HVd8py!e<2`$n@2w8#a#JVe8gve5+H@) zPkt3oO15%F$Oq)gzlH_{KKZSfprde`Jw*Rq`B;O`Cw~*mALN{nk9kj5{tC+M zlfR$k)_sMUnw7I08g?!ATy7JK{_~gr=SkJ|SqbvWD0sWISE<@0B^Eh|& zzcn!atmXXIB9jVk{xN~^=W@2ciu1yL%=5bT|C$<}&;BheUq5pID_8#Wl;7w7%^vxf zH+JRY`K?d>Aj`i4LRE0(pGKK|@}FY)TRAW6$NN^U{N8~5vd`nmN;aad{F?&yckv{@ z_CMykUHPXG;IqGrjS_lM!<8S}Z>)EO`3nN_H*tRbOu}dXUjyxbi^u+{9{ZmQ^gn|v zU%tx>+5e+}{M{`7DdvOnztAK9WtPv~jfhDcIL1aViVz!Nb`iQaAb&GIY*~)Nr2zRC z(@)A%`la1e&wb@z%N?J5X9^w&Zux(U^1C`2LaulRlzcqrcjZ&{^~=Z23I+YF2j{MQ zu=mM7z!_N$V}FWhUHKp4{*RkGM3}IK<<|(nN69bnU4j0uk{?EC`O_(roe==dv$@SlMmM``b zi3yTl&QVOh^4r4l#ZQnAT_nHY9Rd6Ij?n&P0sFUm?7!3_|2>5H>`(H*aX90-0$luTMGM8`>&vLSN=q9 ze^rJ${{dvOxz*Iw{ZP+$P!b^UBsSCK1uzg&EG|8?;j^GM~k3 zw0zg#Cq%f=*Bd;3du~lcfpMAJdTiqVyft0MDzC)RqMWx5H6Ht4(DSGqeQk0d5%}=w z0eY-aH1mCy**BkseF*Dka17jn-pP96$Qw<*1E9uWr1AX5# zH_-)Be-kf!$_*a3Ai-A|oNkOb2wrV)9#~MC;Gzj78{Ordbd4jI4~KNY#SZkZm^Tw# z^9j+z_QRpayx-x_?tWV*DXM;|U>IY)&51U~OlxSoe} z_2Hpnjy|FzSR|Pb{3*T#G)duf8x#f66ZBH1NW>Tv0eIXx;&=Ih^RyAja^AU?vID*u z|0sZ7+7Qkkz&{GW)sQhU2#^ABzO6Rr>J2*I3!>48Z1|TvW70#v!x_;v(|d>QD@U@& zT27XDlQs2X8oiwpZQ&MC6aSdlyn+<8q^UmlR(#rcMl-xiR++#?_T zw<{mlB%l4gBb1NprO*D&9{IQ)xbka#g&hBVtw+rj8Ohj z0skNH$cL|7`DX{@ZyTZfGXwImW)p(0e;9|k^0B6o&;CJVrXb@XdzN4Smj?X5z#|{y zE?54egh9UB2kvHpHGGtV1F)X} z!6G7xe1r3A3~`qh-#F7>-dyk?=ilux5d8)IN6PH8e=FPnEEB^2N%~2Cu^;<{`c&P- z6%uQ%ArP5&pF_+ApFbs<3QpRY-|$>;_0*|689eg2;N5r#&7syDYiYeN-(0Y{1K20D zyser#$J1oBZtTtX`{rwfg%aqqHBBD-GFQW`nBUnnY>; zeZ+p&#$~jd&|lJhj~CW&ys=;(TJ6%(Q|hQMe`xx_{=rNQB^9Llo-CmFYG4;l=-FGk z<3huiRDZT~$4v!&2QSW)3i4#{O@$Zt4Ay1;SU2uhv{MRgzLI^>Bu?Ggb7AjI2NRib z*ujN27ejqCseK0udrpRghU~u&Wgo_OqC?Xk#_K;u<)JBtid`q0=$%N(2AA#Kj-pB* zZKC(^+bNj^$)+o^v7Wn?j@gH9UNbrGM-5rpgN}BsGq>#3&sEFTH|x%rwf>ix(G3GL z%V_Jh;)d*~3Zoi!Q98z=1d2#)>JKA6a%hDZn6|^5;N5z81fioMkOK78ECbU+(OlibZ8v+f>i=3&zY2ZN?B8!9+-zz+O>`e1}>^Fl(d=9O|)g$ z&^xk^@B0g7C_Sat>>HLA0@^j~mW4R0ldM^6877(kSM|%AXfrL|_Nb1wT5K4&g{*m! z2{H>zD)%n5%}~7a*3G+y?v1xc%Df9gbibC`g@s9}MJ9l3x8>Y6l+6)mOi~biC|K1}feNiuN9>o7z>Dv71U6e&vSW zPHJ|sS4;cy+)e|gP}#_X?IMKrPE z(*E0G8MN2v%b83XwFdiTwY}1q{kEa*uLT}7MO4V5>NhlWOHhlU!Z!bGKS?XcSC zmiF7EXgoceF(Fjo)DKK<7)TczrqxfAPd@%=!PD8N^7rAyK4@v$gLL3l+UeCyojzP6 zQq#NY&0q?avGJw--;#?EZRll67l5KjXV0l9z3W8+sZo*#N5j>PmNj{zkt$WyCeX*N zaVPESHF|1&S>|l(1QcNjjn3!-ZYqbg#M1s&8W0ZDmr;q1mi^+44qqZ_Y*8qRrp-mA zw0}F{vuNwSf$OOMSXn%9%P1q^b61R`exm<&Dne?aqcD@uu<;hEDX2(X7gO2#MBf40 z7Y=KeL2KGH@#c!L>Fm`NNmB5x&rzoIKx0K&<3M#PyK@$<{eP79Q2Nj02$hc3)zzm}K~+k;4@truy-&RwN<|A^Sz@eO((>P5+;JHb6YKt?eCMru7{Q{xD) ztEj2VR-#+3GELQPDu==tAO%vi6=URIY{Yoy6xud$UjbDX!@Y5!l5{M+3%6}_E#8Oa zJxF*z9jxW44fVw2N%FwXg8Hei-*W98^@;w$(hYk^%hHDq@ z01s-yo)`8#NZH9BTtguQL__zA$wRbN+}=Ec;e~xiQr2DdNhoM`HQe_#irFfd+YVFG zB4pr|vwQK-GHKGN7aNF2^>gA}y53dN^@Rwc?y;_-lH6NOy9xi^?Sa-0t~s$_C-r{9 zkUGC7*1wz{IJshN4UNrS<|Zmvpr{M67Z9^?qTc&1ogJbb@vck81JL)1CFm7vP1`|- zOS?Kp8#Ka*EAxyk&7|SJyQymV67fuS zXsj>gS~0BpWzW{f`yLN4?0~dWDY5!xYI6HNMlmWJBfuvG>&Wc;{onFlO4&#L(t!&m zg5`dTvYTK=V=4o+ubd$FumYM#7iQ&x`q}g5F0?Pz;N00g5FgpoGl6rGF-1$)YWmh+ zUc0ex+pNLTCZMIK26n5dp(Q4wt`MuY&CVFMT&jo)MtF z)v@s!Tj0SuJXkMdGUp3^_b?`P0@zl@w2VhQ*lrK@OAmH{F_DW=#AxnB79uTYzqlJ^ z>o?jiu2IFKt>er)+p-qcRPf2)o6Ozk?DW9aWafGKX4b{{G1|i|W%r0X;!eBYT^gsn zMH=m8S4m>=o-o4m_-FGG3Ga{hY`i}nXk`tp#Xi~vF>Mp2S8|0n$9&uBN}BYxYlRIZ z3sNPm4JA!QkNB-j6VIEO=RUu`9G*qH{haI^<5SEFGf(jS0@};1k)nGTPaR=#v!5Kf zjQ5_)+b{0BMZW#wQnam{eGXAYV^##PLqOfEV@%i01&kFNs_?&SXePq<&Rh}Q)fdpp zUB({DZYGiF_-CRAK7m=Xn8cl=A8>i50KE_%BLd)C%$d~}(HF@8;M*9-a~g!%)NulD zHD|QmEFb675%?Sje}Md3sJ>nid;ezisb%VT-#WChg2c24M?FONp26{Cz=j$={s$ck z%nJDyKwU&Qm*f_x6()rqw^#*gWlrILt)a(P95x93TJl4o+D}Bv^<0CCm*e+GzC-@h z`{J2;MJyMR-wMr_r3!|9Sh|#q~MY57qiKiXZ-dc5(ZPm{6oh?H`nj zU!YH;c#&$?5lE3D)vj~#T74SDi&Q@&;NMX{Abq1?IR0Azr)KA+e}USskI#FlJ^Jv4 z)NlCkQv>uz2KZw=b044c0`%7h^xsB?`S?5;(C6`h+;al_KNG;e65xYn!#K@Rj>VsNR;Vm2b^hn|MG&A3fG>DpxD(nz236euL_j-nUEizs=xe90$Rl zH8|cTu|e=H2Im)VC`oXdw zqdbR0Uw@eN(-l3r(*)Npd9N4x*V50Y&!iFHBk_agqv=C_2+@c95TXzHLDPr)AT0}i z)AYyFIfCoAGc8PG%3OL(4oeA%7GF$p@qd@XI~4x@050#wfd5QI|0Sk}KB&XO zAN>P@OaC7hHu!9c3;m0XgAaa!|4!lHB{-gIA^@91Kf%jz;imw+iGG5g%(%;6*3Aa} zWr|+>4|-iL@1S!8(AUvV_)Gb^{AIik`dNzpEQ%ulZ>FE{fh+{zm(ovg%s(Rl*M5`r zPh7d}hT8fPZ9({SG7di4Z|fDV{dT9qwcHOe?#lhB!nNGbDn44St|waVPDMYL;-dc# z6|T!m`#G)XE0`X7zDMEoxXT3i0r$wlU;OXdm9pf<|61qSyWQzbpDGMgI#$ulc{AaNSPvZ6^Zs)b-&H3dbl&{P4Qs zquc3m$V>tL)a~?CgIZkoW0xpg`*WGXb$RtDT=UWWk1oegDte87Md4cRV~oQL-5!6e z=%-O!{P2Rpbv+-Y{HFPws{E$;oTKPL90#rc$ry}MfIhlDpUybw@e@ApQuq-HpQQNc`iymz5x`&f zhs_Gt_AXKUr&1n~dxN6a_3A?kpQh+PrEtyvYl^@2!{ds6y5jRqMX#?f-&gdyfB1u< z*M56l(KjmoW8oMIIA}e`F%BNu4>J_K_5;>0M8HA&p8*8jsy z4@{T)rvrQ*Q1qJ5mlUq~d?UaI^K}TWKHpKe=JR94N7uub6t3&xs|weC_?zOd^&bUc ztdEwPWE|P%(ogE`84B0@&ry6d|ML`%sPN(L%9NMp&(+HKM~~ZaPk{h^bp6!yx?YtT zYCK!A`;zl%^bH7bxpp8eiGLJ;pKoIJAKD0l&8v>f7@RK->gZKgT zCoBAFjsur_e?VOde<#Or5W7Ji&!*;n)1Cw&hX?ow`cnm@;~>X@pT=<-uTGgqN*yI=j{; zR<^HfqeJ{2n0bwi-WN+un?HlLlA6`BY<1_2`it=R9WZ{WOzkC-mll5*?^~-Ndcka= zc{@!u$`Z-JEG7XPgRowCJ3A@HhhEwsBBWQ`>{s`hLo=1vvY>%b(%%M$V{27rTdmz~jugs2cna+;R8{1bW%*l%G zo~|xB@s_074QdIc#`WB{ctm8yLbG}Vnd{x;%8)tv<2u!5-ndk?#!XTduL^8tWh`pT ztnF%VXsSLE$(V~u)?(13>;5AxR zhM_I36hC+Grywtv(3NG<^>$a%IfgUZ6mQwsmvrN@Ax~hH5oL6amyi|{NU*qvH>v{Z>dnW|D;7{Pow7r9Jl%lvsWYN)s6ZIw7Ok+Q$3 z%b1u;@=}^Kk}i@-8?OF;Cm?@8(lXHUk0Z#H zkLMJ=^51Q<4{QIw5S_35HzX|sE&l|9T=_o?)c-v;`>^tN2kQU!q-CJxzl|VQKIS)l z_U~u;!`1)00`-5dNB)T(`3D2_-zY`&3t102lu3k-e-70Dv8P&sR;EkS5%UbL{df-P zv%eJ}1$jTpp5R|WpZ|NAP|w*x2iO1jDAH&DSe|T>>kRB4 z=aK&am9tO&7M3sH2S7H0EB~{U-zUF{ZgicUnMx70c&?u^;nruKdqX{qXs}tiK`!TO4{KPMhk#NZ8<}P9qV_AMpgxHAW7Z@My`sA#&!FPy{a-x%=UR*(LZNv^B^{bW3JaplXt9%(46g5(zn z&)t0fdzR&|VM6eMEs|gS_anl5^0%=4O`Km2WfI}zGj#OHZ$f3E&}#nM_KW8euKZ-c z|NBSi|C0j#-^TLU4W|9zxr{6SY%<O2m0(3=?;}{YyahqcQ&l#i7;Z|JmvS<-^KRp>-P-G zB>BbvtLXYqRX8tfKi)!3$JitEzL0)yeyk-|Q=N>$aBIn(H+kaJ$%cC5Yso#e+UkJ+ zwI*7d=pe7#wW<1EDl?0Hy=GQqGtYXzfm-+QO!~JM_WRG^??dMaxo!);a)B1m?ESp5YvKXnL(WyrHAdjdl?|uO)^hu6R8( zS~W{n*nz(DY2}y3?3%H(N>q}Sc^LC*)~a38lVFc!%f?6RWxVz<-ezO7rzeR^&lpaW zwKcG)+_RC9V8Ov%+st_J9aQp`9o9?1YoMf5!@!KOvj)~BvAPB=`gJJf4rbmFDR(eW zxy+h|fp@dEX0^2CqPi)t_cRR5ruA*EFCG{ZuWOa5Yv@~7MyuRBNO~LchJkgw9$D6` zvet7F*_!U#Rn~i1B`s8Zs-BhMnbe!+q`(Kwua$EnJS9a+H&oDJ+?ErTANvW ztGOwieZ|N-GCfdZe3ISy>h#Kjp0Qb8{R-V9?+a-iBm$!~vNDTk`8_J{ zG}YUuGp%;5o`cUIKT2*^_TAgj5AC~+{`tI*mv#;ASt!Mo7S9spt;OqzY~NP| z%Qa}nG{L2A78Z<-7g^l*QA#E?TS?77K~1&9UNN0Z@5Y@TErdkvVaM&1P+vW0RBOmS zk|RY~t+Hyn91YnnYmljh${ubLbE0ex{B8)i6ns%lnW&}QeP&5YTC58 zUlOZ{nKe+cl9;JTrO_oLdp3=UXpyemwI9=FH7>mvqp$Q{6IXbbtr~imY^H%%G!}vn zxc{WJTVLY~3cP4L3|exJIv4IS;E#7J6Vdb7HRZ%atnhjwdY*>tQRqKt}u|ImpI*~z6>4wjCgE84G3swhxr zY7z~&c@}NK%cJv;%!) z)bPys(2!7*HkYBO%QeFmUOie3HQ=7Z_fMnp zPv3!)d#Xh{bLqBMR53|a3S!u|K+N@oGLvFOHK0dl)7Krwb{nl zcTq(mb4HpL4K7R2HP|d3oH?N(dkQ+Z-0CkKSXBMZRZuP&BPh?zn^FHqQ>FMXssEUN zkYU8do9XJ7IqKqjXtwFiZ3gJdOc;Uxpu`()4^#iE{P!lehY|Sa5-OcH?4QN|RsPB8 zUu)m=iZud%LFgOy*PZ_@{yOHr!(R~khW+)>e~Z7~^55Yv2z|r;+Vh|E7uWy#?04zL z)+~j7iMedhNI8}I2KA)ou5)U7pq}nmXdeQ5OZ4z7BF-da7ZlfJtLT2FEZz5u{pr4^ zX>uoBhI^=kb=dn13SjXpRjFcmr6H9ykw@uVzboXnzFS zfPqqIqN1B3uV%*3-1jx+#?$V=F*MnZ19AuD(M$+dDstvQQaflhWilT-W<;}pR{x{Y z1Jh_Jbz?o^$#nKeF*EP^z`$g_d$YH}@%_&C8nQpYEwC*SJGX$_Fsmpgy>S1Gt8-sX zqUTr(+wDdco2ka062|COl!|*+W47%LPShVmJC@ij9{xX?I$tC9(JWQ|eUNWA7E`}d ze1pEAF56f!x<30vL-vQ5c+LK;abR-ez$LS&=!+ZrE=lxEAEIj9U$GUQ8@Q)pi}4`s z(D2=K_EF<4_;noy7*v-`jxh$NDFpIiX+IuSHsIF3r<`$`t46{LlyFCX#U?tG?ih@2 z$cZ&QVS2GXyQhv;(;t2CUn@2fMea@{pCqJl;OtrB{z&@|P<$56`3_t|_x9J(bg68z zvTM4T7cfH8*i*tj&@gNG+sT1nrgl)~1Sxa(-;n_{JjD#W1xwf83Y%!1|1uidj!w|t z0Ys{2Ab#`JK|(Bh*mEz@(>%tLi7J|!-M5j_Xm(;>E1{Mqx1qpngVP*ETyR70^3h`c zJC`m`9r*MB8Fyrt!VO z1%}*b*B)Y*Ygf*^>CjtDV#=%#FN~vUp4T3JQL@_!kp5LwtlUb2h2TaWR&@%S9jd>9g= z_!PrIm$aKD;E}>!#e($F^LW#0sd)aY12t3=T=_H&kQ1tM&i?Z!#i6YKhpxST4%vf= zDg-2SZPZpy{?* zD8ee~{0YY1kE6TZ_!`mBev7`JY4OClOO73Cz4DxO z){CmVYoe!0%u6oS(Lu$s)CX#^7}NkFg;~~?ETCGBdwT+lo79KzdTnq@>S9e0m41_7b@G^RX!?P z)a_qY`UtTfYq#+!xJWL)S9IijH_AJ5! z_^0($b-wVvd_A}QC-vOR`9AE*({)alAD4ry8FILOS->wnAFf|EalXTq_Y~(l+;W$X z77kZl4ekgj9Im`B&Ud)-w*DvO?fFm28%ysrBdo%|P=sc*Cx+KH&i78_qX7O-Fs84Q&oWkO zsO)>kFERG6oc=SnZzy_ufilWoXOO76h1b6e~Wbxqh*khA&5XG=C0q)N6FG?Z*A zC|XiLXDxhIc$a^7i%oo`VuhWLH!?nx zar3q!#ha;r0R8EV%k^+A^Iz%UKVd#sGcIL2f$8y{Jc969NY@?ke;->Zam&@Ule?`dJiHbgaz^ejw>HHm~7yAh6e$_o=xx`~9T_k_Qd z`jf(FClqSiEa_&$=L$ZH$E;r_q|mI^YLiUcqbRoXEmU8oNqzWx>cv$|+}F0mrB+MS%m$D*87x-@=q ze4=7SW)*k^aJ0y*ChWtf=Yxb4CF%qC%mCgHz%L8nvjX^>0DgG@pBuoN1Ni&^9``ev zph)#6x%hkZX%sI~{aXZ5q=@=qUnok%{i;qcQvFpf9{1b1c-(Ib{(I_IZihK0faX=)WaEzce8CTV%73{{*^T`0zi`xW$Km zC7{oj0&;O*<>T}D0H1dR=t~3m7Xp5GF~GkpK))_fE>i=176<6R8^8+#IM$5w`RDWi zeOCZ~E>J(;8lc}2@aNe9d|!ZneZW7zr%S%it`lf{>%)s^Jn6*)^os)Jm=J>KMB*d%khqrgDOcl3VrxP_`BU$; z^C08DA_Bdq&JB#?Tfp)}eEprmIM!G!SL0!n2g03Xm)^Tbyq}WB6Q_hyTFfR4F)^XDbx{ zQ=orKk)uSG2-J3?APv2)^Ceo64jAlCi5k568E&<%xzo z{BlDdkE?}$2T_)r)sSr#ndg!_L~6!#-yE;GTw%$~{LTu6pU*gGF}jvDnx#ajx#sMl zA|>L|lN(F`J<3Y>XnOQE!{M6G!o#G;X#8;aW0Zb4^x7_&XM!KJUDD&h53P!S6~z%i zkDtiB03Zd>FQuR0vjI|Y>94Y|poqz1phNY3c%;nPw*mi+!TPrM!`!Mcm0ETKLpV0`hc|`5L~=U;n!2T@ShUk z|89ljsv-3F!Vv-dQD+3dM&TKSuTr@7!;K2pe&|)W_QL?WRJ-!Nrfau)*I?anbX1g?B1^lEN`o z68fnMzg6LvDZE$V>lCi*$$G|J|KF+b;}jnmXTdIAPd>-=z;!+Omcq5%?=$Yo{Wpbc zxqB2JEqA}dwcG;=*X1~lamc-#e&WyZie6tAS{1JKU&gqrKgtLJIId;FU&c+Y-^9++T7E1=ic!A`~JHcAuz8x*eV&;1J5 z<@Jw@yXEych3oo&`6UGCqwDi7g=_xbReZD`eyDKG|L2O2=KqSqHUB>=KAL|4PAK4@ z`M-s6SO1e0uKAy?_#i5NewV^E|4E9E)_SfWpK@Ju_1D+6BPpNw0b>9J z*PoxVaGpO$D;#5Z;ge?Em5VVd0{H9kv&_4=^t~Xa0D9ez-DA-FdiV*(LBE`SqR&o6 zuj{{DXF;#~+vk}cIIii!=OxCWr{?nq#zC*!(aGFz0N4HGc*b2my8qXFE>(PV{gLP2 zuHP`9g8=+!`icJ1|3jag`lI;k_5wNt9Ci7QHK^sU{cr~3px6F9U*Z3oy?24Hs<`&Y z&q)xXASWOqR@8$;4T>@0C8?+hB(M(#h&&Xp*d!!DqCjGDqS)FB4OC8Jlv>+*+gfdJ zAGWpq+1pmpwh}}HZmXj8fsbCJwMxVXKJm?eeP_?wd!0Em35fmu+s}^$CwumH)~v_O z?Af#To`=j&esf~x1GfW^BlDqJ$dUPpJ|W1I!}ZFPbDYnf!GEI0!7uwcumNPsM;!x! zUp`-dQK6aqU)8v2&kqH^>~GvEaHQdKTqoqn{zj+3>jnQ7f!7KA8G)}6_`3rCy1-?B zW}(3Oc?vfELg4d6y{Z+sd~Uj0;G-xEf*e`jiWTbPU#2kULz%#3ecmAn29XDUSd_{lSmrBTqoU(3UbT?_csdT|qn`$d}jY z-sBtZ1uTCmgb+av>MG;7mO;R!Ul%LX#}Q_JdEb%z|H}D%sIdQ^ozJqK$b6n7@>Ay9 z5`oKn1`o(Amw)Aa9!U0bJ^5$k^OuDDGGq>snLn}}xP;=_p1rwV_C`M1KoInz>{ve9 zWDszv_uC51#Q&Ac@es0^{rYE=qimOEiTt@z=;i*fS-vfTAGWcbD+DgDuYcuy?l0{B zXXNu8LVlSef8_P@d%^#&oNqB<=RYIgWc`%w`JF=V97lf2_FU%YzhirzEByVxna}9! z@^$_HLOu@?{{G+0=eva7{}=Lku<&t^lJ^i?TjsZwy_VXwCu;Q2RG30yo z4&q@sGX(!~fy?`#e7>mB{HET;0`Di}G;198w+Niy3jvqU7kDNGK|bmR+nEE92>f`) zVI1$2Kqf!#aUk%+X6EPoH0>V=W+L!6(2w~)50D7>H|WPWzb6EacTJ2V&q1dACLdOE zWVx);xXBM)Ajn7Fvi#cs5&_3MG{({9gMj1Nknwu}5&@U}ldTHPwDWO|gJ0VDq66P4 za9K~@)VS%_`vO0l!fdDfJ}c|VF!5Y3>q&*si?U!j{G1E>WqF~G4FWF9>pvBmS$}ZP z1%dwp`my}K10(`2^K+L%eY};z%>SXlPZs!D+AlMIW(j{U68tR!m-)=|b4)oag?!X` zwuis-!hV_0H#_A2RLFr2mc!q9fl2vy3OQ2#0|J-jD8G;38e#b{2quD^ZS-UO1dZd6 zE$~wWjx@|aMaV&$!+4Frzb5czflGU^-XjRIW&VFf<2c~Q@>dI7=FfE+H}n4|0+;#2 zbBMu@wv^@HE%;Xne1p)7AoD*c_~mu|4}nX6-xRp?_kE4yfFH|Og`qL&Z=5g?ihs5W z`F{#^7M8Ho_A^*?sbQt)F0^cHVE+as13!LA90LnuK5J8SC z-%5d_on+$gzu+IuARVzjHVF7BD&+rpLEzlyK};Vo65(*F3i*GA37pFsF_?b`!l6io z{6EVDK1SfT3w*4=-xl~dfsaPxMTF?_D&+sE6Ziyye_!CI2^{lDL6F0B9_ItlU=RT> zRw4gSnZUVkgP1D?e!AfQoxr(oiRf1Zeum)BJIFtQ-ZKThK;Zl>2GKVNyhQN-Mc}0Z z@6*>mf&9q=pCs@p0#6FOOyIW(yjT`CM>q2V#~@Mv0`IpwE&PZr&6=%JU}JH>O6cUo+^RWqX-oNO z3d5%DjSDXxlUz=l$s^OX{JNTC4T_1jlP-{IXe;{i*)vNkXep^ntCGweZloS&a#J(b zNeUhD&qdJ-kHIN&&y1;UT)MO#EGoNPrZprB{QbxqdgBb7$V{Rsp)mjG73X1rl%~3SN4qqQXtx%_w#5 z*JN;t)7qs?>3-9e=nESfL!~t>Ee#hfi=gtiRFOq43&`Wbs-~Le8sf+(LO-)qBm~ta zo0q6;s$EiF(_FQrrX^Xmw5IuzAnSsYrpBf!vPhj5ENe{G7fhQu@06BgP31Q0KaCsxV4V1w=hm9!ZTsyP!B}Svz$! zuTuqL9Xy|l146JY2EBZoXa_8@+zKyis0#}Xg+k{Jxm0y%DLqkjG5|#DEcjy05^5SF zV#PpQ@X4Bmk%E>hmg1O}&s1^I$fn=L7d1C7_2J;UCJT$Om>-rM6lMnZ^fE741<;IE zs{)GXunAD9&FHXM4DSt6CHVESgr+7W2v;aHV|_(ITB{jBY`PWUDuzNRFY6?91v}AgwliJHaILU z8EZt^)R-(5Jtj-22$>_A1G9cPqQXoNt54c&ldDsT<{->~9@4|K^0FQnRP{<@u)5xZ z1jG9(ZVb~Jq$0YM41nsPfly`9cZDTABoIZHo!r%BjW@1MRqAPrXUn$H!m~ z?M-C3&Hh_-I>Y_o{hE%BbW(bo{xw=Zzl(u>yb3V&|1Ukr+VtP96)->RGyQ*((%bZ} z)B5@S9`xgpn&mP67!6jj>F?AEd-H!ArMKzdX7T@Ei~d~>{oD3Z|4xVghPE2+i3OSZ`#bV~Vu_zS8P-_(C3>9OhGriJo43y=Xa{U1W8W@}Y5;Rss zm-&a_uc`kYN^jF&In__HU8jWpqv&VquXXs}srCO#r{{yI{|gTP^QZYK_{bh80*z~W^jJ#eSWPwcmXHj~a{PT{t@&u_0OhwoBjy3>mcU$&ocGTpu{%)^QZeMr2iv@JjTCB3T*mwwf+<<)<@I- zR!VQv-=y_->U8k`c>1wFtbeUT|1DZSukWG7WaNLlLx17fehQxV4E-ls^q);PWt;zT zedAxwiuKX-e=4Q7`M;&YPf)GXLH{WFnf}*1^xvZO-=Nd;!PH;v(4VhACT!OUq5ow1 znfia~$o~@Dtcg1OL-5zs|3gRq^T*n?IwkaVrR(~{+{^NV0 zssCt){-%Mx;n(?x;IHZbFo*ud`s0lBAKxEM{gWK}c}b$){6Ed1|2?f=`j79Krv7!V z`WN$E?ydg+)=~eqRr=|x{ex=%@O{+O|DO*1ah=h(>GXUs^Zy2i{=#$o6f*zuz17tJ zh(rH2t*E#Bf54%?Q|p)ckMFmpeoVHrwLeYhEE0X&KLmeG|34&ww)W>nJxD|Pk4F+y z|B(*;xr2R`z4<@H;eY-dKfUxHT~bs35^Cpd{@~!QE&c#-J!o)>zDqQk~~xYCH?LGZ`1mFYkw9|dYk_f=PC0evizr5^k3u9 zUp>T6-<$teJM?eS`lbK)K5zQp*OC9c)NybAM;-Zpiynj{{YRJ7)SvIrzZMTGM7{Yx z(xJcbJU_kkKS7YGzrQ2@3y1pYd-K1qBmZ;e`{||sXIu22?9kt-_4nrg2@d@?YW>px z85aHPsq)&c|7tv}5iRo%!Qb2<TEYe>BOa|BDE-*}qNe zKSrnLgQ@>AdQP;Z-=)**ZY(Fy=)Ye|>23B`>w)WqIwkDKC2iV|J!5S8)x$RN$8>r= znD%3Qs!jh|i~ji*{nrv^)1QlneIg!D=$~aizojU`roU6`m(P!YO#k-~X47BtIbS2M zAMc-K>i>WuZ2H$M@KfAM^$Udj2W0BMnF<*C# zUGXLch#z463}5Lezrt#tL)M=vf;hddo)PSO0$WV|xp-MXL>u^sN7v4*%zC{k{4BQ-}ZCt9`}N|5}Uw7s+{>|7*4WN?%Oy*Svn7qr^7< zbKopdwfgJVpLzC*adW zT2wr-@U(b9g+VAD_rw0*3FF48n4+R_#S>Jh`jD&2E2d^e!yJjyNYC&L+I`v~ZUQ9= zDxoo|QQF6noR35{Dv181ZK$fwRVS)Dj8`wE#rb$diSy4`9(HjRDof9uQ<+G;>!m*Q z+OMkK0o@g;mTJ9^?nc^~bXs-b3`K$;yVoWXsmGBhb@^gS*u;DF-bgG;h_`u46NF*U z`lH3xlHUs$Qd63+#pR*vkiD$0sFOoTOoTmX=a7Mk)E;fOFP>6jH~5Owa?-!NXZ-~| z=x-gQBfZqKN^;TDUTQn-qgz^~+-}$~ChN-jsF#vQHN#8uRx&BhxIrXyo=9Y%WWsw$tM^tPWit)=e z$z*fG!q#McON98U8n8bq4JWLkT}5$RR+DUPu2)gD3&VSa=~uQiio(l{b3R4BRMKxg z1N(R!wwL_zz2wVx@UZCZni&y97y*ONRqjTrjJ{G3|8Ke%DY9X>b|Oa~ffed7 zKidE+vtV3rB;OJX-wKUM9sJxa)81-H`$r45&4Rt4F@7G(qx1JPrn*|R7b0z{ioM{n zugy9Sp*T51q%d%Rsp4PcaJ zH|bXaYJMcr-$VSs7i(eEg;RuQplC3|EvzTiWM@>&!h#PVeA|wSSxmPm)c;N&6|r zoSPi{SmV_uXQ~6=>cB5?;CKgPlmDs%-{ZhrsXesG!Q6ElKEPp5Kg$2XV$VOm$89A! zgQ;dQ@%`{m1laZt`2xuw9JJ2iyT0cYu3z9&T9&_1={<_Y2fG*kx6-RWI8!X^{fW}6 zKg0+*Nri{kwYr}XHc83XFaGFUzru)oqHwzeV4HO~3L_z(T$JXAf9Q?L0;bUgF(-U8g$02^PkV2$Gs5pcfu;+*XS z9tWU_^AmX3D+v2Cz&WpwB#u8sz>iZQ|Bor3+eay%%LpkX9;b8MV?c5B*OxDQ^(6ua z53W5Bx0A3(ey3inVtqMr3ZJgen*?60!#J!Jc$~tM_4$ngpP<7ynD)=madCZwJ(F}8 zhY}qI9;Y9^ z3|tS>P{>CD=XVx>$#rRm9a1Y zUIEv%@=_7jXuKg7JZdttnvu60Q>pRpSIrO4Tyr9L$4o0LV6};GwlkJmD4*>wy&&cR z$^;qn(D-Gwzrq8o=*g$FwHMrOFF42^2*?AP$yr#H$rbuR6H#fNx&LuR*oG^q zmZqDl*|vI)CS&1DRYt-&xwMGLB9+jXuP#If6IaPTS(((dV_d}sF8Td0L_(NMq$Abh z7zOsJrD9zgG+g^hf2U3)`jIA8>&EeG+#%Eqx;YHkAEFR2e!k;~5)K$gLtJDdCGIJG zj*(v8qY!luB{pRO@6tCpz9*m$0Y6zDroR$Gh~zyN=cfLVl-{QQJ*~eGiHM;8 zAo`j5%N_cwi5JwH{t}1&d~K-I-;d;(`tKyn=6@5E6ZNM5zlq1@|9p%7gNfJFkG<$^ z`d1Jys5ku|(GAy-Zhx|ZzJV4{cDx>kYAr>l>g5tu}%Lvt)J@|${+nSQ~!Go z|8LO>d-MM-N^jH8WBd!X9Oy@tH1+3FVw?ZB@1_3!l-{PFJB?C5`jMu7Jn!4|ckZSB z?-HL)f1&QQO8w}Un);ui`eW0-Z7=md;i!Mr7X9ewn)>HE^ml3fx*5@DneERUhyJw| z{YO~zPjJ+~U0S1j)&!KRaXu6|>R+eUFY7=0;imr!9Qt!nC`4#8C7JpY6lp8JxK6LW z;R*p}`Z9{M)t~L!{%V~T*AM#trv1wZv+3tK&R6R6d@%LHKAZlD`r)cmCxm{yl{fW2 z=E^^+7oZXTA^2c7dMzeMZj@3L%wssBcY{#^YKnXBc%|KlwB z|Bu$M*;q}alW-8qSCX06zi{Y}>xWW)E`PrwXBh9f zOq&q5PCxv5ni2Z(-h|V0x!_%aO@E0NTBy_Wfz$JOoB}re{OO7HKz}~{I6dQwC^7Vp zp`WBCEwoXB6b3JdkE1Dou$g~dI(={XhrL5>_76KksR`bPz<#`oGVMpd)uw-#Zg_gj zKcuzk=Q$pnPtcF|+@^lK*RbiY)cS9scuD50}J9T2{Kb3x_{-+4D>EEUG zFW2e$VCsL2B5e96YRA{=gwS6^KU4oPq#XLqd|s>{D9}HU1YQsyuc8Z|!+wnaw;wvY z7BYFUCN5zaW2AF*`W;3Bwx2~~jJwVME!uzCevGF?oSy5&POA83+XdOXG~+Iv4=@AQ zx|tqhq{oVZ(IRLcBR#%&!o+XVApo4zO-rCXy$ zLa+0!TDLb=74>XY&!eKfm7BMaS>3P=WS-B{gP^^(S8@}nNA>9K_P$=KEH4Kcc~YY7 ztVl9XkB#>_l6g5ajJP88yw04BCBKi-_~zD;JCkmnqE|5lnucbR&_w%CZ`8dN(dWI@ zk9_4Quj3Dus$@uRkVl93jH$jmk1JXAYAZ3Ra^qp&Gsvud39NiY?G1*2(|F|E3rf{^ zP&0(P}4 z^O$3GXKc-5lrp-h`($M`%PC5e5YrO+g%XOM)+{8#+ezv1ky55ges1-vUm2?P1-#3b zMmO!ufi-_1{?zMSg9npjT>yRZ5~;qZol`O7n>~AxGfO#@tRdkSYT;h$MU|8+NsZmJ zhsttNUTV|M$um-C(&1cRZ2G|PA*{|H6`nSb`%ffd&(334zk1bC31qD*s=JTk6p78M zbxZBglLbnv(u!#F)hm#n^wXvXHI*QsR6vJ#9bdf>;Z#2q;vwG3d)KJbp_ucq9^oLB zoFlOw12&aA6{+7MY|K}nbd>&T#00el>3JqVIW^jH8o&^m25|45=e>?^ZlRRxsZ}SF z{#Pl`SEYkoFl@+L^v+O`4slrRgSWVLJKc+)1QR4MJHn5fmndTtLHcG@zYKFJ zS|YXe&9ro_oHOCK95C6;2V9(zR&a(%kivjF={MgIPf=;~jkL2KP7H%`T&xCP+{I_$ zg~oYsYRH=yMD!f+dX5faD}zvaAf-<^8|SA-2WQO3^{+aJNe_HWpK>`aPLB@H41dE2 zBV_Qot_!mw-DrpjP7llpQCWd(U7|CE-(v$?p)s!az;4i(aLsmVo4$o(ke(RT z91%Zh_SJHZ2qh#|*!Yo7%VR5m@jEtt*9$C9UxaLT9$^@Z4#IP2dj4I=*{5_=Yd$Vt zj8#c$Y$1+md7u4wlv7jAX06~8D6!LYdf>LrX?dL9Swv}M443)gI(ePO;RA@r%N$JM zXfWa^dY*uw<-AX4(O~3KI7hFA z{K^t@5>#GkSqJ8>_!+V9b5}6hHIuT_M$v`w*%@!l{kZJ3(Rh+yT@4|iL)mFNP=(R^ zK6hnwm{^29i@7Thmo4hQ5KlO++Dyt$+X*U+&rTbqC-LI&M1-s&H1^P zsd-xK$RztF*d!d~Ee!x{V?0>6O5Eaz5@n{sX!{L-&s4*q<>FYE1efx|Y|Tdi?Z@5O>&%8~X< zIk!0Y?-ID==XMu*@nd_Q5&Y;?GXAE6bj-dA}f%CrErhHzX9sKgT;OAHHj}&qSQy2t(>94HMQz(w@l>Da% zd?<_N2=ei?%Q$=i0iQ}g#?J;w1YFAJ>l!$oGMK-X!XV&yYGxeweGu@4 z^kW?TZ4mGh`Z0brg+ah4(~t3Q0VG2EhqjJ!j3ESpzl?s2{}dn*aHL`UzX1{fmwt5u zB+Al1=Kmjs`uwsS|1NNupRWsC=I4h3mwNFj5d?c=ejX-pnV-iBT;?Y}TY?~`gnn%Q zX#$t|S*~$2KY30c%uk+k2VDBKMdWp2MD{ z8Xs=(U#juAfwyWr&%m$HINuj=3i)5w_-KQFrN(iu0Wtq-jq@7=##0*S_g;(-)j0AT z#5nI$U!u?uZ`b^}8b`HYn*qh~hX^?Ph;z0Rc-UJG`^doY?v5$01Hi+ln@l-}Xg)3% z@Q=_K4ibl6w8fyf`s>@tc?+mS;Na&sCZ510|6+lIA8iDv$v>!kDA!>e)(RZ_mHPZf zfpc38Xq~{p&+T=mz-Q<%4qZBod;ov7KHs5_z@_{g07T5s{^Sb0!e>!`3k44OOLW{s zf%7$oD1Hym@-Nf;)eim@0*CySntzSJr)vxcvwW}7adCY_GA=tnCHO-G9P+=76C&mT zUak=T59bH-+saq^8`o)Zne^9T9OU&lK;Wzw{D%sBfer)bzC9qWSHNQcG_BG{;JFOa zk?R%kK?1)`hkaUM;+X!ffzz^4996l2GP=Ry(f&3!`z5p3a z1f0th=S>3VXBptD1pYYyn(h<$Q4Hb;!TP{$HO{fFGYE(9?F6-H0>@Zyrbz-nmO(n! z2|OVQ*N}Kx=0Dn;(nWu-NcAoO0TbtY7M% zs>#$%jY}G8uc)f6sa;&}!z$yal+T`9MPpHXXv*x0sEip#gs|E0-%pI9e${gb4vVhB65}ZHSZD(KQ_pTeLt9DuY#!8Nn%R z%+7siWyAmJ!e62Xo@`6fUAlAp+Ck}&`ZgGV_fQB}-vIFgCB`|QlDahdBPH%BeNGy8 zdLIN)cT!?grb?o3_I%GTB@lkHJjPd&e>VNxf0lhJ$d!E{oL@=lZTg341%+TDf_`MB zssFnU{nf+^>P`Q*9Qr+r{(dCS)Q^6u&HpASC+bcAH;BjP|8k3djKwhZFQ-DW>0d#- zpx*SiP`|Ge`Z~wwL;UrW9l!ae!R{9F0Efaivh~jI3LDQdYk{ZTlC|($kdN_ zk~aOjw1QSvq>rZlF@)RncWM3AI$bFp0h#(62(#(u=d){ddOn!?>nOsepZAaH)Cr*< z&uymuJ1DVDKR?&?cK!W^(%ba&Cv18B<2lgO{||?L9c?}XslV89 z{m1q5s5p?|y9--W^@g8q^8 zGxfhs@nA9gFSqDImG2mcE#vxoof6y1f1Q5lFGM0D=s%u*rhbf>wCV5ELgl*v$T9u@ zqoe&oy#V!Af9`a&Uput@vi{_gJk$P{9r|}^{qR|mY5zYQ`gz%DsUP1HO#K5$k1hY= zR4+ix@1JGn-+V{o)-)W4N5 zoBm3ze=Q;fnf3oZinHmTul0B7^w3{SKU4oJgxU0W=?^f=DPEGP|0RmF>7S?@p0zqL z^q)>YQ$N;tg?=-i=j)g3H|z9#056D-9#vcp`!W9C-SQ>9h%kA->8H<_oBp0of2(m} zu>CCZT8g*%zeW4c@0&|0!CCa<^j!biD6yeJiM~aD9KinEAlPkde=#?GyuUS99Ms#~ z^oipp`cu>6d%u5IJ}SAU5_K%0Z-bxx+;q$nTwe)KW8doBNc)xX-00NDn0LB}wmR}? zD())uNlQ~tBvNmC?KgoR^Pg#w@)@vg2ma6;Z!fjlkHVDi_AlkqMAp_pI&w4Z0YyM( za#}^|#j?}~Ja@SpY5m=(NKtZ>*B;0?ns&~DjN}kshK|`>qAm#9lZj=J-AtdQ{liTA z3D{TrAtS?nRT1s>)7)In!Xv!)5|v{EQ4)RHb5a8d$=R5;sh7d8EbNJ2&(+^UbI3{P z5ngJy%G*The)zVG=7zT(vhzYJb<7f-tl+{jE9pt8@y#%+ONMV%0FKIXChM}5osY$a?JeD>J z!$khD@+DH!2}sEwJ~`P}x>=cj z!NxTH;}rk$9BYD-93-I>=_J(A=3|lc!X{P`e~_#Va0X=FD|DC6kEFl(LC6oN_s_vw z;be1bOOp2Dy12eJ8KLQ_H7yaEq)Kn%8A}ws|zxS_E#2c<++R}D2e_xP@*dUW2pCYHTEs=nR6c7!#R%_U$8>+rfj^8 z%u5sd&gQWHtzES$lm^co$fLHbrD~2M>g%IgCY}lWxW-`q;w~M>;{-4+ppWjP$T0#) zY9p-oXPY~SXMrd`SWF4^APg3S~!hM=Ari zcNDYJMs0+NveQOwNZj69WT%b7ko=sxA%;+P+6vxbTz1+@-4eIAKG_jDdP4HcQ4$i@ zFC0Qhh4y{_sjwVb6vmv{a_3QEu;H$Kn%;2mk9OckQa!fG$DYSFysv|QvO_-J5!&RO z$u;H1_n=LLs7uQ>2C9P*EG;D2}M#XeBBxmM^O*ydWHrrG9NVJzxkQEyfIMZDt_ z9=0T^4J7xQ&+mY)a}^$z zq`D6f{)mzjUPr2}B>WDAhu58IUkTr!@(o{^d}52EN`BZ|;d|RL3J=>W#tBwL;#6zE zV{ct}j^@X6Xq4_| zcywoeu3x4-1)ATqXRMGT%cWA_(w;hjOMAX7aB0s_jpMzB#Pz2GUlh?t+-AM`0fCjVj|4*1#6CV}&7 zYd~uS4m(Ha^BV;owod6|iouUE0ClRrzCHOmj6+<9QSQh)rg1s|JZ!bXv9!SZGBX_) z=rHhp0%yN~a~p-|RhkF5?3J-!!1e1##rcBZm%X(@WH1r2(GB+4@ zSz0k|mf9&K(+N%?d|*hsMB~via;B!PuBb}AAE;_vsNN5lCMgd8-9f-&jFOb;Tl|r) z1{c1e9rb4Hv_>PKSO;HTSQL=M7iZCR|<1YX>?Hd z;ebwEQUb`>R74e;C?9{kWSE&ME9&dSPB}CvkM;^#PGc2oXmzpzV_2fFipShlv1KwZ zgQ0!4NL2{xr4TmqDU#__lzLOdQT~8zGNY(~I77?*^eAqL`bib4F4Fz~^CDgN+;@}G zR_Mmyheo7sMgrDzDFjTmxri*m9}CI09MONGUr*^}+YEl$*5P~|{Y;s_Z`6$|-xG1a zfh#PJ@ej#=oBm1&A(Cx3&Q1OAQhJ;I+qM2eBqD--+^HR2zgsi|Kd&*rnZD3beofl`tF4DPKY8^GY)PZ+E1x+{^R@c8Eg|8}kaR938yrvJZm=wG23 z3w1j9k2cfP{}+e;F0G%RZ?%|=>u0k=|Lqq2c%CrzFLUUR>r74S(^7iV|7#rSOLTgE zZgScG4T>NU8TU|(9Rf}C55ZrypMh&AU@QMFi~o53;`Ds~TBNU^F)UCY*J`1s7&vSN z@v%mSb#bXU{OQ!`w*-hEF!K-3S2p`|^~1+5ogVdP1pQ3=+X#a#h4hoOMnBy3HpU{N z+i#f`;SACz~qx6Of zCAvg2&e!<>F?h#drpFkI(~2>=!l&NGSQHhWHpb`N`!N>$%>{;);1B&hm`ZJ9FmfZ0w! zCeM?uH59Pl4C5R>^U^F~2IFX6SN$lyr}U;iv#mN#r#IW0QmwbQw&rA=Ub6>>t{{{i zFzqR!Xu>kunl7Epw2QBG9j(TwnR$Y^Cas9u6r@8Qb9%-vAS|uk(K#qrr>|CLejcNo z&GgjP6c>)=mZtadT;mH1_jx=Q?^^~_O7MsN=1{IBQrn90S?ni1MMc;yE* zt<7F**~<58T9>r6PTDza<%jY3oW-qUC}!D3i(5~kn1*<~^|*B;gp#K2rNme|t+P3X zug`$CwROGTwk5YBwehWuiwa`Lu2LFf$CgCezq5AA_Q@89I5a*@{8@%@{m z#zkw%KX3B}6ol9DA91f^cJ5oTpKVcw#f~kbe&n06pLGiPUg}{oA(q?ETlvZwO4U9s zH#VwIo|k%wHs{FoiaOtl{d7w#zfT_7k?XCz4?M9!S*gj&2H4+Y`puo#xuFLcX8Ks} zEH)rEs)8-p1`A^OI1fyS4Vq3i^qM}fz%3&zu|;dG@^a6M$8xI*b;c;WVx#8f#bcuu z#}^dE(?uvB@>n?oZ4ci)R%dTjMzx~jb08~l@laN^gD z?|-!8?T`2DL1`9s7CpT?E3Vjay?VPhEA|^m%Kd(5Xu_+t95gTKxzDZa&F7(*35wG~qUToTviPU?E)EkM^|9B}1Kdr6w zV&xxcGn2XAhVJaQyq|cZo+TbH^@-Opc^B1L;C=i$ySXArnH&VBj&XTms*2Qu6;%16 z&wA1S^+r9ZJx!iT=EvGv$v(QU8aImahQifAd!U1NlKJR(|Yf$)>B2GqEW< zyb%w0qq>uaoBm+5`4p=BX=R-Fc{ex#9iH`hxqpt9^MJ4p6i3DcYBA^auF<^_i7_*M63NZ1tt6p*2)5dvm?^kpDy8`!~=39sj@Nf2ehD^8b0+UOtxAUf%F-X8w2eQ2()3&!?>a z?UO%>ZP~rOt?O8Q^=#4NGecOq0j zKdbxib~5wl)N|d_Iv}=%T8U_cdasi|`jn09V%4}-!DzY@yY3UFW2*}&!Cv0Rvx!yp zKYD17yPrTFrT5SM!Z?1<9x6|2%;?2lW^r6LDeTFlU;oIZ^z3=K!taZapyVawb<2Gj zU52)g$fdFkZ+&@EvHi3 zQKHaDA^529w|_7sxDgAT0r%*iFW6@ zBGTknY`mkYS=g`yTYND@Lm2SF3p;&PF?Jd461Ip|a7r!@*cfVDhA-vf%X+|3yRf#Z zepzkv6-~(iYh1K21FN-Q^|cnhWb@cD8L3+q*NhoIp{j9Neaqs;P!YjJHW0iEaZR@b zHWBOiqA?b<$iyg5sus3fUegq$t*LMEnRF)8b$v=pvZnTufMa<}vaz{7b9e(*G1C=g zKM$*^{@L0P{%-X>T|ZfkaT>XpB7nKx1s3Y>*PK3=1NvA`N4`d7l=I0QhARk9*hx z1w?Ekr{{JY@AAf;w)gMy#!Q?@_ae~Ve>YfB=i7k4B`R1#^Sq;xIXiGd)68P4wjz+) zsDR@;>7;1u892ml*pN~=q2Hub_%Bo{VrBGze+Dto1HKv_srQw=2dauXeZlEF!qRNE z3yn=;37Vb>oz|uVN0NtS#vSELPCc7;yr5fIl6uw;@FcaOPA$owDoS(RR=*otHG+!5 zOTD%7{i~_Y#I74jrzg{Z;zju6^}t2dwd;8}>ZswX3H*WYlWBwOIcn zN^=jcguC%an-cJ>NK{}pEH01a z1!?{gM#y=5FyS}usBfz%$^XUwvG4m-uH1Zy>29CwT2s1O@CPN(g^kf)y zPg*{8h7o2y{lp#hbrt33)7ys2FVOk=|LVDFEJAwI<#R%P_n<8aT%H(4m@Xgfj>-z7 z(p~PRvg2$L8`h#~Jm`-4t%~wpjv6k%L8{jO7%rnq+pmV}klu9pi=n=IaQg^ct_dSd zm#4a;P7b5eT^<}pn5Dd%dQ6Voct%C}E)P_>sluvae?k)1|D@_&W;?xE`< zbouLHgz0jlJ8EtimG1KCVT9>&+#Pk0it=4PN@ZH;a(}q|)1YGG)}_izUdzwX^FW5n ze*tJ~^L`sfm@ePwj{0&KmF{v~7-71ca7PuWDBtD$(0x_P!{~hd&w6(G5TrLt`JJ55 z<+N-0nJ~h1d4oIZr(smO%N=2a>2k9>>O2+YyF5O0U%7ldov*(&sMyw09*gv*%g2QJ z(y!%%!U)slm#NRi7oXov*g>@_f~M%9Fe=^UJHiOlV(xxtmjxPLvOqI{PZC<&p< z6?DEHsdWU0&#pnifW-yIc@Pm@XgYj(U&oo4RM( z-Jsa$4?%Pdtv;WE>u(Dxw$l4jd2SeCx?Jpz zIz~k)H@hzj!^&kWvbFwKJ-fV{?z6;bGlpw*1j1!87AeNIVbtB+;; znt=@cbmXu7G_Q2-oXXUn6RCH-)W=F&DF#-&?ki4hR!6KTbWUk%Q))q8pVAF4WpjKY zbsq=m_08_5+x{M_i2nWVAt@@d3NrG=MO&k;YF#lb5}mM>n&OYq+{BO(vI_PCcebB z(vHj5#}d0XynImGy@#|tAKUO^pOr6SqR7FIANeNvHnBM{O}G9-!e^HKxy5~)WMsds1%B_+}eMbctVrMsUk zZF?y;qhs8utSFWnnH(Ebc1ENk^*SvvR*`zsYafuO(xx`io3R)(`Z*Oz?eGkbLj7Lb zEBP?NOU=#8p_-IPeWZ=pNN%t_97HdBJvl=4j3GKwRiff)+Y^gjeFSVJ+U-)$B+SI<{la;T{C1L{RVg)=S02Y zEwNSKL!xN6*Y-Z;%EQf%cYj@(Fd)w_>D60ftB;@-v-=CwKBik%xA&Hn5^I`eu{&T( z?2h3B3jbQVX1FvdIY5~6L?ZgQ7kw;2|3_`>K96oFiPX04S#&IV7a2-lr62T)AEtcx zpG3!yfs`%LvpXh@p58HTRH9?}II8(k8o4yeYr8*MQT$eE>^mF0;wMUD*WX)F{H{8A znJ^lRwVNQXcxOrMJDbZ_Jsey8dwOYE7T*AyW2Haugi-$Nsovv0~k-5QTv8sY< z;qJdt5_Ku7i@Ks?^vM+|Ux1f-K&7U}i0m$>tA3}~_V-=M0%~c!_GDg8Me1c5MJ?tB*|D#lf_nMLqP4`IJ7)OMHNyw3 z8J-)vV?l0o%z~lOH46sOFELlfrvaf)e!2H6esPQ{V`1B(A zl!%gN@F~&ues=SP+Ml7ZI|k$yK3TeEz+mN5#Zcu(wD8ZRYZeTSuBm`u6+@LTSw5IW zAe~nX%~lTjU^an)e?L>jr>v)%T~6bbBdS8}%%aXu+kN@L4e`Q_UdMowRhy=UH+PK7 z_p+0D!z$VZ*Ptwt6=zJPq||xxDC+?$fCDe0I8;wXTaO8qj6&+)$JI2w??f$|<$E0JZSuL!H{+XKF!ip5- zRu{Fd+l#iUvC7m|^xsD9YyYlT?%aXfV&~CG*}$&Yc^hJb=Ek;BXCT%^A&MCUn7DUQ z!_ptj)FKmepMjcpS8Pz97+4XY8_I?fy1{0({-FC_GQS7A$L_1$;mz5>nWQN3XwVYw5e4(d0O)dwpW`ry`b1f9Y0C z=_yclXfEXfwN^t0(4Vpa6gf!Urw37tSNvFP)frTCO5WWxEVk-Jl^tl(-kaXhhidA8 z;faoM$Cjpcl(u#COSE5kcqB1)(h-T&q#=nEozNAY;}!q4^&ejG-(ss*(iq_GT{MEj zX%U&T0Or6iwrGK}s0=-aK^5AfUy=}5lw9IBu*#Yl9Yd5gG@4l(By+ordJ*kpTKf_* ztLWoIYIM4Z&tpW`>fgb{86>^!AIB!5)Dd~Kg4zk{ef;r*OzbPfOc@eTTK{pF>J&dp zUq%zDJ?h%0PH}|}dNi4VZUsJ$3!sC9gwaJ?+diglV>@2S)V_mfm4&J|=#6@#T*Xzy zrfyAioVzDc{BQ+&L2VnN)QnMY5YukG=&nS^%soYWsO_6rI%deEHA7DKI?kik{Qcwr zFS^@97b^8cbC-v1)?X8&9w#?T0Vl_{-GYSH8o?TS=lvch1n;}k?N*qp!;vsoFqE>6nGs&vMZw0oV=`VuGFBTy`);Z!EYz2 zeqT?Wzc*An`53j6Wvd>Ft^O4mf~N5&bgW2iOSFAJ4b{)-q=-8D_jV^pc+uAGL&?aZ zJya0X-F!%QH%VWAbT_GG8bB>m)Qi616+ep(WJU4ws#6)Ij^YN&>L=0B>=<2$3kYhd zMXp0DN!`o^bexgel4$Fqa`LD{`H;8ab?Q)Vj+UlAC~bS5?i=qH#@g_NRrG52NmLNN z?=w;l!}sS<#I#&*+l$ncP9@(rBsO$YQ%YKq%hM69?jG&*>_W2(ve1N1?-)(_xT)}L zzkf_^=@xEF9|`96P+M>q+S9|(o*qHhAllO-bbER@wL)cwqZK_2t>|H3*`-+e9O1X3 zhg0KIrmlIv^}M~ilU$&?Okc{9Lh5kPT#ILmUJWlwy4w4UCVitw)fQ^FPDX1qIu{5j zC8XkHv{YrIE6UC3TzElytzaqME#;E&eMDLqXydk#wE@}a~UqegvNa?#9 zqRA6rDr~99#oxIQL3Jy)?C@OW`;bB8`XCbaW^5IlE`9f2YAv6kPz60MsMd1G$z;xv z<*A2D+n(!3b$1xejcQ*qp4v;QB&pFwbi<>j@~zgF6U9#@uS#?zs6X=nT`ts18%c7C z-c|jXF=K`ot{INbGu5$oT3_{|Z_*W=81)8S^i*xAb5;sweSf@T_#tD4=d7Vy!yO9_ zq0U(jbTV?vmEM_#n6#CggRw8)FF#e#oIs~vaPN6^My?=s_u$v4Nzt78zwp{ ziRdn>uE)|vP(c@7>do%+=te>6nZow4(r*kC)CtafLm-~)S9dPIQ1z}8(O0R7?8A@j zf~CSAA5+mmZ*Hi^u3jm;S&`~S*EY4Gbats8h0}IlF7>wq39`dwyvAU2>8jdBbI-_U z>Y+tF47-KBk9(Lkw84B?L8N3@#KMpr2{9H4lHTwcTL}pgRbp!UG~?qvd@bGD^&5s zMZCT#YJG!kT2?uZ{(8Z_EJ}g(jyw8Xn|)nYqgdQ{vRcmGI%0o|XkKfrXW(xs`SA?=L51V);1lb`r{$>FF`n_Kl-?7VJs5lW2gM)eI`bc|@Z&T1f3NiB zXW;m99ThvzvmC6^8jYNs!T%%0&$$`q&j5wvDc&cRGmTEO#7^Mq8Yc{E6=jJXywx>F z_@xRDR|{0v5aDZ-JzVOM$Rxr*0}0OxMxI9^s=Xn62UUzLvBNg!)ccB`YZbNWN=hVh zozlxKShxrJdb(z^)Qkn6kvUFO`FW&HP5WQ#&>STvTWrxD;0~1@ zk)5`ac^KzjqdUCbLvEByT%HEuY|#z`AO*4=tzdR!q+|=i+2VQ+KqcpRc^ZVXGgh$j zqq2k6EnroF?2Mfwn156{qdv=4E5>FKv@PT<^QLAnBgpGsj6aHL^5695tcrz#fUr2vV5<6Q&udjN@mQ{ z;S2NQ`!opr$TxcJsp!W5iGb(PkNIx{NCY`k>Bso*0TKZ}n|_S{2_O;hDfDA}6F?&1 zW%OhG&j5*lPp2Q_XlFnsKh8m>{oEr3emwnH&goz#0$xZz#`!rE@(^aciozh1pUVaO zSWlk$SAm(x|pW2>h}>4AHpB zf0V|}`Vbd#WPLc*A!mY+BkRNILXNBt(;afo6*$)WMxgY0{GfK#jx0c(>Kr4D|KF9w_z%FLcP6Byg-d%lUA=kR!{z+QE;Z^dKB$ zJHOh&f1Ti$<^BT)|4#%i%l#KZjx6`P1i$pFQ{Z@tXMZ;dIkMaz75q}p{|bIt?yoxd z-`2QU?(YjZvfOjf`6fcSOT96TLyj!>AsUA`S?(hpa!wWacuK?hP$A^Va-ZYi$E*<$ z^vZHy?%@Bb;Fsn84F~^?0+;1}laM3J{Wifb{rauIWq)s-kR!{TN691qrJRQazbyAI zAz$*pq;a#{UlDR-xqs-8lhqfw?6({9=*Z>OPvd5}57oG7|8WAxvmVPiOURMsKGngG z2~r@l+%IwPw+en)?yDU9?E*i6^st?4g&bM#Hw%90*G~m5@9)19a%8#RE%>DzOqBz{ zUs>*db?`r>akJd&n@kRz}6gXw)B2<0yAKV0AwDUS1VjK*P) zEcapuKjs30%yR#NgMYE$m*sxBga0c6KY{eHoozynEcfdLzx3-r1&%UcIX@6`WV!!J z@Jl&&3VvDc_dEC>(70Ldj|e%k+@EvE*&*b}a(`9Gk>&o8LrzW(O3SYgr_qt~;dqUk zd@LwSKWw~GM;J;MhvfM8da%8!$7W~q$YXmOu@4V&_?3d+!i{O`X zej)VAa=**L->Gr4+&2k1vfLka$az}Gk>%bcg?L1wv^IrwJ^ep&7pI{51ZF3Y_^$dTo~T<}XfuM+r)WH0->O30Dr{!PIz z<=iCrWx3zx;KwQiAhX=p2|2RdH#_7!DCEd;|ErKA%l&zWoYw??I@!hf(Eku+rYc8S z?t?Xsa+myA%m8GT`)LmTQo%3Fz0$#dp1@_fFA#EMxnCmqrJcji!i*~{gAv5+In z{R+V^<+KTYS?;p^ziX zeTm?g_FpFWWx20*@L!{Gv)sQSR?5$W9@Uxs<0+-)G-f_tJ$lzx=17cx)lkc|&X&m)U`ZdhpXF2%-m+wnY zamX2G@UxsUfsYsYnQ+LdH27H#uU(4vM81cqcgR^H$Tq*F0!k(25Icp4lmUE-P z<#X;$4mm$I_*u^H1pawpkD9AR=Vp0z8vHEh0fC<`NXOZF4`=s`ZFJ^eM#{48gfz~z1CXos9UgP-LT30$^g6C85RF!))Ha!UJ^ zM@Q5l5c~nbe&ASf0Hj|V1o%w-9ZPo~0=!%c&}svGl74?Z#1|LfWBdBRFatkHzqcB0 z;3KplaRcY~7qA(`_QwwK&+!ZhV!W^J?~eB20RLFyY$x2AML+IW9IN?(&k#7?Er5WZ zOF!m63m_5jne=0PIzS>5uk&GrFQhQ@UnB5y1U_1fXMir|$5K2X$SBo32KqBCC z=*Rdm0EvK0y?90dnK-UZ5b#R+v7BiDiA?!TKCEzAE(e2=2#2}!3*-n~`gMuG7YTl> zjRrF1tP{8_ulog#JYl_m7P#d1m(2C$OZ+?HJCv03LxD^FDt#S8jm-a}U_23Ung8hf zflM6tdJu4#|K$qxaVdX`z-2zaBXF6|M~HfUG4XKzVD>r)dZnC+0+;?y6}ZeFOgaWZ zj^uw301*z-es1@G%lsJ$W+D?W@L`3^{Fy3nDIawb1UVJ-V}IuZBtmpok7f_ezfA} zwigiZ)d2o{&4a^yT`s`++6RughalkS(=+W7_{j{?u?&nvIPkqg0lcGu*!ZBdd`?wM zeUf(;P&*$mR#&g~FHo4j!6$Y*C}1gA{=Z>aLsG>vC^k?iKew`KN}|#$pIx=IKDoGR zS^eda@|n{TGt2#87(Hd~{Hlh_A|e4ys%cqPWWW~**x#&Fr17OxEo-c8T-K75(h#$- zbx{z-#{P3RX%JZ^H&bQhY5S=PH&kB1f8?#$S|Z4Ig)gmNN<5sOV6SaxT3p}UVoQ-8 z)!c~f7Xon{X)_@xhNhb4nx!o=PXjZ9GU%RmB=rNkUhX%{rT`p42sRtSCAzF4Pr2 zt86*kNZWY0W3kDHI~Lo0=vYw(sI!!{g&f6pgxhfFYl*8$)uPsAwaJFYWzsiD0mHJ^ zr6!DWQ}FEBie+g{^CgjTI%#Tbs!BFisdLuq-s&UMWV8oWOQ^~x7fYQ%g=x6V600uW z7H)3T2@!LRn~ypbMO?0J~Mz2#8V< z)L3dV6@Y{cKv3athl)7$pobnF;rqJVC_ zNNZ66UK{NSjayj&!j(a%5fUwymh)5wDq0!Cues3h$yJVC!m5|&WyDg9HD znZmioc_Sq@WrF2)ojduuA5usd{LDcl5%(vtN`*~-93YW?&Fi1gUsM0@9QwEG4m#_B zemoMG`gc0?7i#@HpO_6W^}p!Qzf0@iHNsB`{U}OPe_zTUsM6WwGt=KygZv=UNiy>~ zN(oI2{9XD1l=BgC4yK=}zmzcOH|tNQ*3a{`iA9m=Ki)Oj^sASi6qf_xM9|-#ex`n` zong~oco23OR^n-(^6GA`glBxexhyE2>|5dD5A5H&Ha_Fzr`j_i; z(2rMirv6JD`gvgvp8u}JWYm9*Z@2lsMeAQ7@*hQN>Yw4zU!otFc>cOezvs~J;Uf!C zT73TS;b!lj3{Xdf$71)n&29h}asS>2H zE{@=c@y|B>)mp#ln|Z!MmmeL{h|{BekYwf`#?RXH-=g(%d9e)h9PfYjCw=jL>VIuN z_5T-T-2T{q$9~$sbwBOLcNqMx4 zoCy2tQu3aCw2Hi!iv9t)zH?~N(>n(jy~->6CpPy{_mZhSE$+ z-TAvM`pLBNjVy%t-_rYO1dHO4L*bT=z7&G4+B>%Sd&gE}VH?UjTaqO@4@qx7wZz^9 z8?nhoB(hmmp$O4PV;vW)X=x(RRQsc=5KdwP8tJ!?Hz<5!wbf+1e7BMcZP}nNty;T+>n? zuWW9-tf8*HIWo4Os9ySn2a1vuQ^(4 zldaA5XC$v^sz0TrslK*hQA4dwwlKM=e(9%7N&6Bnvzvkw z7uVM&D_a*XX{h})uJ5gYu%Oco*oUkOMSSYq4@IO~(R&VtDbtnjOUiVe`<`>@n)f!n zxPa0PXl|+5r&``Sf4cm-#rq__S9Vi6Z4uw&b)KGGb&GrBH{|bQ?$q_lpDw?C-G!HbVN2+~9PQlBtINvnzF2(ro^SO&PY-u`n@;-`MD4nbx%UEd zB;4QfLL*yNKHGI!Y0vAI_RNr8`&{?fMGZ^p9dcy1`#|_W4jjmV137RY2M*-GfgCuH z0|#>8Kn@(pfde^kAO{ZQz=0e%kOK#D;6M%>$bo;y9QZfgGp~&DdbrN-7zP()?$>7S zvG%@gYc-55s?%~lha<^p%bKh9sl)im6~Ksc{DabYgAV^1N5!9YtJ-F7%D|i<1pQ9O z$MvzN!+K(}?bUYBu^7jMQM5kM&?!Zq#C@F4*{*jq&SUuXP^ic&8pn885KnRVd)$}9 zb2WKR_fr}l2WBE32Qp9D!y~aMLK|>G9CGvkc7iME2b!SxSt{k@Kp#($Lb*qo%0r5} zL*W=T?-Tp=HsMjR=hYS+Kaq}EV#Y#T<6TOxDoKTuXnZN*a_=(c_<@p-lJ<%9Zd15k z=z*db2iL#P9%7+izIXoL&u(wAuzb_yi+Um=vc=wm0;c@rD>+1G#52cVBleF}jyA7a zDb9uuaPVJ87le&}HZ4kE!=I)}>o$BaRU{ielCr>tzv948bl5Y+q4zR}op(@H+VrkH z+Kw-C*#CQnJs&ybcn-ZMIQSoT=)KU9Kf@jV&Ue_EbmZGl9ddR$?BD3H|7M5%-41(B zq4va9E>}AA&Ufg=AW^xumAdy4c0t@O{{^}c*z|VNjmn0vq{$IB{6f01*zn~v(a46= z7SLAwJ-Tn$_#dUF)`p)%4X+LFJJ^n6?;0CF_CB@Y%Lmx;dmQ=pT}Qqh;>fob9rC~F z$cIKpKHNn&ZkzqzqFb*Gzu!?VKXR1IlaBVY-jQ#m4!>qQ^cFbuoqwIkmqIr8mhhy7o2l>09o`H8iNZ1$Yv$j?(8`SW8(y+S|KCLe3++wlJ( z(1xE$T~! z!Et|Ycl6Uf@3^mh-+^D~XveN_@PFXYJH;XAXAb_TBOg9;^b_84T)z)FuHPda?d>~` z>ubKFK96(M=h2SqH^(9W+m803+0j1KIIj1j9rz;0_40_Le*W5#KV^=5jyv-CHAg=D zk0T%Mb6mf-IPT-S9M|t(9M|thj(T{$L+^Np-Zc)rbq>8RJKBx=9qq;gj&gME4STht zJ+F1N=f8BcClegk*E5cO{vD3?XP3kNiyZe6tSM`2|FI{G4ga>|y6fY}=Pt)}guM`L z@-esChTr3`bEKm_>~Yw6g~QHyj{5Mv!%iwjMPzQ|8v60tU`0Nx=J!z*2=FR_Q;`Pv zWdf%v5a3_aIOJa^@b3z|OyGA4{Ca_J6!jLvvYMh!4MbL9C{n$=w4iy1Ej(&{O zWuXYTw4a()MUYRozJQ;ql_KEyu^eia6hY2N`Z3P+0lakS1UPs=;6I*z%wGVI2>h^t z@d*HlO!knO);;nMHHVkksYYGPIEw8UanzA>h=MW)SeB z1)8tJjC1|t`p7ufKd#q|OWhE~_~*4;=@;~#sd29V;Qx`vaER+L%c;@lrkyOO@c(1) zO~B*2%KQJZoe&X%BN8BHDNINJ1tMj%*^)!b$g;y2+sR;MaT-8Zmc||tS(-?4qOe8a z1Y|-$lr0n}qGb_f6I*dv1u2Q>Le-L%v_B|fDF^~o{Mg(;@$Y@ldEc4uymQZJf&cUL z-$%#R+;czYeZObD_nx_P7qI`J#CegHxa#OQ$QZ6VSYO>n*)%ft1G1hsTy+Y-pDS@* zj7wb0qjnR9tIi~FEjyzr;M|_0vOaCN>dXMYS>n8ymAIBi)8-6Uoq6En66eKu~3 zSzk0U|BW|wpK0K% zquY7L@HdK27WgMXCj!nox?SWA|D^a7fd4t@i~~oV3B!LXK9j)T1v*o}Sx3j#wBcHw z8Q@vanFWqIbB1eq=7B#4bQXZKj&5IzhHH72fIkm(+zyr2IT>|oct=Y?xt6CE`18Gq z`%D67or0w4v%6GB%aa287l2M0IO=2!*YfDI8Cd@Y(20z_Ztr=+wLAsjy02!rao}7Y z)tN9{%QFf57AVgYaMYPL{OMc~3NyfO^2mM80%x7qN!py@SBTC$@V^9|1>mT&Xt=)9 zdvxUU8NaVSp`IG0Da_d3JBE%izPp8}mUaMa;vOmWb1o+0(g z0)MABai0-z*3t2tH(bk80Dc&B#(|^GgyCAAN#J?VnF5aWnl}6*sn-nfH-XM9aMYPI z{D|nx1AjB;*7wz{N!+#_?wZL_*$o@&-Se`n=pDN|h zcR_Q$f64+9(#BrPlQBFmI$7ZFP!U>2z_~mO!_-JmlL9CaoP*Z!IW{vObo z0**SSPSp{>lQ+fKCJ)b@GO5e-(i50iAK+s54=> z_SYovy`VD%9CfA**Z!ITz7KR}fuqix;o4vGz^?$E1>mexoc|cE{j~)AD$vmjfpnax zP7Qx)r=VQ>s}{I^r)Ik(a4Zl1KE*+Gw7*ioukj}CGYuSdGKOn^Wr1G{IuUTx$s4Zy zRRDefbjE?B&V=FGUz5PE1Dz@0tfR-%X~VU@W`OsA&Ma`$nKNAbYaaMP&{+VEI*W#D ze=Py;1s%QcO#4^sRda?nQm*|~3%n0>lEAS%b%twyrGV!^Ck-5RGKOn^Wq}_8od`JV z=)5;?xb{~8_#o(v14o?+!?nLAfe(Ss6mZm;HeCB_2DtVK%gq8uojJp`zvhA82<2G- zjyj8mYkw^P9|j#g0jlFf+gaaPtz7%7w#GX%9|4^ta4yg7l2&K9_E!q{XF(?o9Cb2= zYky^de-3ma;HZ-~T>Gm4{PUnQ4jgqR4A=ge1U?HoQ@~MY+Hmc!8Q@<4omt?hGiSK= z*F5kqg3bbP)_Jw0EgG)Gm4d=7NRfuqiZ;o4u5z`qPSQ@~m0W=WeiT>EPV z_zOX27C7q68Ls^`5Bx=-vj7}*77f?_S^}=;>Ydz~UR1}4)~m*F?XOzkFM;ylGb*t> z`VMW?*ZxX@&Pzcj4IFhchHHQ6yR}(g&!MthWb8F9Z@BhX0r<%y;bQXZ4&Z6PkUrWIC*y7~qx&jW`zuG>0 z-4}B0uUg=*@Fwmv37pHL=aK3Rf1iGT2mT?@NdrfnjNw1h@9)4r3_1~T)X5uuiF_|D z0G|P!ap0&kVR*mjOalK1=u81eooU1M9cnYcKMFdtz)@$;@b5@@=7E0 zaMYPI{6^842OfdW0&v#RdGDg(?-ZRS-~*tex60`FQJot3;Z?bQ57c*hGd}`4eBBfW zwbyZ2XZR^8kG|8J?eB7){v&PdRVQP3qkJFGcXzYSTRQW zMI>>nlQ(>a=;(fq?Vl<(ycn0b>gf2HFkIVb68Oau=f#x7tCXQxRH@14o?+!@nXrlfaLI&J=Le znKu0Yip~u1H-OG8aMsa%%ADcaU-Q5lKxY9s>MRo+^m}f`aBZI~@Jm1^0**R)!?k@1z@Gs++4IO;4KuH{(*-T^uZ`F^J3 z=hc!{W4M;57I-V@B!P2zRHx2xEl&#g4$w&hXC3{1nlZdX#$gtCGw4LXQAfWYYkglR zIt8##gU&c`*3o_CgyGsglfWB6X9_s#OdGE4GXwk&L1z{?>dYCg+xtB5zXF{F;Ha}` z_+Lr;ECJsNItlsys_oe$X*Gsx`_uw&0-YpqE|2Qe8LsV<0{%?UNdw1vWenHjMHcw0 zKqmr@I(ftOcu@fUM$j1t&N_PDXTor;*Cg<5pfd#=b*2sfk@VLL@H;?f7C7q68UAoN zk1!AXX`rJ~?f0zM*GPi$tA*DBpHOF5vi%ca9d(`v9CebwHO{-abAjh2&iqlpZv*~l z;QAet?au?Qa~tMcfa7~?`K2J;Hy+Im-y+n#x0&8^ORpkrXxKY)bN^^>zJXqSI*@As z+o6$>fo^^by?;3_ze9MS{~*06H&LF#@8k9_(Y})2QPQ35*x#|wy$QJN&D8K-UFYsH z(udsRJF4aNs39ZA>4EqBYGHn{3BP8Q-jzFCd~NZFFCIN?x-c@boK;_bIg4EHau$@+ zawhZu{pC!?+`Ctnv&!|Y$ZU+>;Ih2b3XDdMG%cs2eL-(`>DITq(CdTwJ>T8jFMnC?jmOZaOb1JDgTIXv<`%%zSXDyKwYiwPC4~h*i4DMnG?? zt0wM8?#@g#8#$VGR>m`4tzN~$(moZQ!%%rR}-yaZdb)i3RRw&&h4uBNg+cA<0_t|7F&aJ z^|@V@TxB%IznibSila2pTFUCbf2_f?wEJ9xGweav;H^8+HMkb{qigV8W^Pxde`Fw< z!+aHo()e4sPwd>TN*;c+tz2IQ*~%T_=XO;}R2ot%&jd!&%AIrot=ywHZdUFRKeww= zeHkUOhw3VBrLnSF&nk1fD*5?wv)a65^sLsc+T5;68A~H+wHd;ATCJ;&s@3`x$JS~c ztIh4IG*0Z?u8O_y@baUt%W^gVQ)aYp7x&4eQ@%xQtA7 zBi~;94&;!GjI?Sd<%1W_K~j5gOZVksPZgV;J%9hH?hv~LFYl(`WU7nDmqrFapa#_n zRNXT)LDJe#TdW~Z_71r5$mIqITU77GkZydl(XlU3j%rO7_LA?Jt_MTP@g<=FzJ`*7 zy~>2tuT|Ybc1YEY z;w#06ia;w=t5g-Y@@Dn{{*AhWMEv_o~z_}p~HwubDM zagEQnJa+TuG?Hl8+b}XZoG?F2 zA00i^)?Fa(OIe|i^FJtulBM}7eqbNX^$hn7-8`6R7#teSH9YHztLsNbdwOqxU&{~n z4|N|J9y-$9*FRF|pLt$(C@_~_tZ|KMRP@4!%R&uA`G6xZyMn9GxN&ygHR(ogmL zJAA4;-!s@puR{*hR}0han%DRr8qVbsJ9b~$eIz%^InbK_WuB_yt_|oP>>ussim|~^ zpK*8D_wwKfnoxJAx~&O!CCfMTCb$c!WVF2Hh+Dc&ZD^I=ZD`R*vqqXU(nwVva{Wsh zjSYC+6J9E@n)u%&{qy;(&;5rzdGz_^DSZ712EM16ncPNDOiCAHU$_0&j#pG1r=tR*OyedJ_y;@p~jfirc(C9>drr z+s2=X#F$^WXEpMzF*g6hbkR**{R@)+W5r(=w*Cjn-Xul6ES@$Ay~lYd7?lE2z3x9e~D z9sM7Z^z{$rpVf?IY3u(;@{g%OZTS;tdwYJ4JqBC;3j^El zxRn1u(tC6H`T99q{!AeMalYt~gWQkjS1O-9+!@IK{_DNRNx9CE^XERZ`F}N(KRZxJ zyU)^xt^Zd7`OhEnJ{fUkIo=oA{2xz@`^2{YtmLobj7(fme_iKm597w~7CHW5{+yTk ztL_9b&Ob$e819$+-+_?gcKp0Z+RvCJZoa@0zpnn8y5#+JccC~jCjN6p;v-sq#SaA9 zKa%>7i6K`fNq_3E_5UY=8;RSHzR;5zxk!}D%^KGKlE(J-_EfSMAe!`X|GBlL#o4qq zHnn*Yoq6l7y_av?P->A4^iTB$_imy~GQ;dG*nEU)gkw&R+Pt2?gh%I-e?cbVh= zoH_op-N#R5j{j&Nb{+12>V%$;uQ`T=hvXFoBq z_l{;tsJ&y)$;`3;I_>74WqQw=$ZYt+sc&WOcv$ARyJ3&hfAD`!ojP^)6Vr)u{J_2Y zZvW-zn9FDP@zXA(>@&B|jt*pwUwom5cU*iSljmlR-@W(vsg6_sk~#jLndA3J;xjJX zd;GV>c;@)OySNlFbH`a1W{z*j+<6%lHIcc~-BRETIzG#d^T2tO-2>-PmdF3oYutO9 z>%pDJ7cgKaEz4v79^qqRgXn*U}0_!cX-U90_u-*de zEwJ7K>n*U}0_!cX-U90_u-*deEwJ7K>n*U}0{>fD!2Xu5^`g_pF6jF2+pct$TyyYC zn{Rn)<=P-$wsBK#c%*-5Fmdo`|3F{=;Gv-eT|F{-bR=m49qKtcFq+KL zWfA>!fmousp|PPk(Us|F+)f|$^x3tyx!$c)LPKKFh&6BW=BLt|tZQpAr%Sl-++@zx$DM1aPFvZvIV`rmOW?qQRrL?H!2_5-G6yv5340KwWI5bMm0@z zb?(0|d)4;-zWR~g;adu$Lt4GjY|fuB+uOUGflB<)CUkTWoKqFrEd=gC#OpgFlSlk7iI z7;p|fqrAJNYx1eg4J}QSMv8PN^FV*^;L#%obHgRYRH|hwsh8x`qe88#V>?|(D;L$1 zewjv!H;H1A=n7uzPFFT>r%RgS-2Kp|Z2}a?JVv2D+tsz5lDfJ&T(qKHNFr4%1sSrH z)!Eg_U6fD)0&_`ECf`(tk^yK10{e_Xs zZpn>YJalxlaCG!Ce#{eF@<62xmbcjiJMZdDNPp9kx-sDgSAqu(9XXl;%7a5?!gh94 zkv+||E~e{8kM@op9nM|GR~FanbB+QzK-uYbm$f_dy-tBFN|jiB@k+j{FI~yEO5vdX z{{DhMCBTmER9N1qysCj)mzI|)ul1T`%1cvzz5Qwnv0Cr)yyNaUS#1ecp-~zG<;7TC zOO{lAm;NZJl$T{i4O((8FTyIF%X3~+Lzd^i3JKVR%8Nnsh}8~(6}gn>(wARtCM)r< zd5o<-lNGp_Tvp#+G}BwYVCA{wdYAVo9}6q-D9@vCL+?oAYO`6PQ)N!gYsqN^PUShd z3HNGqTA@=#PFq7W2iVxkJBf0t>eN5T^O*9CRWVW~vNE_YU_eply?xU)y}-M`VAN7xk9)omX{XCdG9rU)lPVmxr3Bxu_AeX%ZXCH)!Kc zT-L#?T8de9hHRR|hN~E|@g|a0sb|T))P=AxDWyR;=SDe{Z`%6|DXCsNT&4H`B z{F#GBKGD&*wXwZ{&tI21CSXt+IahY>DCSa(bIU5Hc-QW0iZ&YO+%f*F&V78+q$kH` zLF;*q%VW-`(?Hx>R4RG!h7k0iQ~10=(P=_wjV!aqyR-P3#w;C3+6IN0GqM>GM z4Qa1l&!^V>PXye2oOvbXZ44<{6^mcN_wVj-GQ1h{uBfFk)zFl3r;howZ8N#D370-( zLPN}%P_`ix+SO`CyxGNN)LzOcWI`RS8HG$}Yt@YSC?1m${aEBxs73)3tus|9U?CdP z{@YoQ;<4G$F5MNHvZKa#rqq~mrc!q4K5t1!@R&M?CTGtF(in?IX>snifQdFZ)iPj# zy%xxZ4%fxn#hYNK#aoDmYfN|S1x4*F9@51$u~cPl*~@q6nzxiSXL;5B*cQ@Z%kBY_ zl+=zj<4sx};{J#=qG@AMiAO-J5!kqz z(RflPT6eW*RP9@}_S=pjkG?I%oqSZChM!eceI^uYvi@&;+$yYNdJ*seb2z*`p$h_&6MP3 zN4#T%ym(`zsV)7^uTof8+I)(apEMQ=#lya64dvq|reAAXiibS>C8;shLe~v&svf6o zDqTB4sd{v=sdPO9`%;t9(rwn(f-XQ|3)v~zRJyW*QhC73lE#0m3|*MQGGa)}kRgrk zd=LGnpX@bKpB);w#r$7FchA^%huff%O(xZ-Mm|SZ{FchA^%huf zf%O(xZ-Mm|SZ{FchA^%huff%O(xZ-Mm|SZ{FchA^%huff%O(xZ-KHF=osu9 z9_sH))@|F?*pg~(zc|V7S?Nm-4JL|Rh9Ubn?HS`W0xny)`XrMRW(?590z`#vM>gl%H7vy?J zlfCWDt$pq7ecO5uHKiK2Hnp`krWW+|6WR%Bb-vAKp^`8n))`s2XQ$7ii$8?SO{{H*=km{DL`4xH~@ zE|y5RcWXHNjnkWJDAKvPhJ8**dQz65#i!c%+4(;`Wz(~!kIiWXAw zbDh1GI+0kA2k0kV`S~pwK18y7pVN7|tR)iqPKkq5{*CUfCO%2ul``o#ziq__t=B)e z`s#}z5{W4udlXt+y)N)8{3-n1E_!~EM^et+t~`$`^0e6h$mu`2$mb+R-9_cp-c2Nu z!k_MR=mi84W@Y(FSDq&;PDG;ruZ~|*i7c(|C^KH&a?1zn;c<9N$b$9LN8W zc93!WkEn^``0J=k;`pBh^lu30zlRPoaXMd2#`9kUbXw_!A#plq(@==xKMs_?B~bns z1$6EWw9mT(<+(agudfI4eQTh;UkkL`&jR{S4%GJrfpYE$)b|Mi{d}PO9|-9DI?!%k z3zVmw-ggn#k57MEJbzb9Jim=Lxj3Cu7sm59G{^H#(Iy?IvxRm6aeOl!&*S)HLpN+nsB!uq3fP|!=&w%(`1b<+_)^+s$L0HsK>r?0 z#oK=>&@W#O^vj+=|NdQ|UoH#u%bgd;mnR+Qm-7PpuM4#EI|BXklYsqLp#9$%X#aZy z?fkyLcC;tZUyFh5Xmg;y`UCwn7U-`B1MUBoKzm*ouzyCNzn&WCum28gN27uEe|ez4 zz7nuc2KsAfpue^R+W$j=_P;MM&Km>m|I|SHzc0|9hXUdc8bQuh#|Yb#9Oj4& z3CvgN>8!E)?KcOGQ6na?f(aX@^=Qx|F%H+-ybM{eW3h9 zf$~3&&Og*9D#IRnxn~@I5}lZcYd$uyvfy zJs!w67iiCO0`2pYN5+@4EzmxX47AU#Kz+}rQ!sJu zb0E;3-=!0(arUzT{a*(54_|+Byv}n1+spN|NyO#*n!0%YkAeRBV4%M~5E%ax=f>;T zoE6W%8yL@fH^Wvp3M5?Sb}u zRG>ZI8yNq`0`2+D!1(`kVEjKJFg_m)l>cdg_P;x@UCamC`2&G=J}(6&W!KhQ-StB5*W|B>C}AOIQeW~JijF{o}UvKpZ^f3*WU%|^|nC0#sd4v`vUcv z3DheU=*P1H{rI*(y;=j`?}kGAw*YT?YJB_O7#Kg#4%j~|(9VAquzxTx|9NC!{(N2F zxcQ5~ett_J-&28l^#<&}6R_VG;BOD;yez<<&=}wT-w*J=OvT$@8?e79FwPSJ{-!`X zKM=6LFHoz+QFhBpZ^W*FF_GCQ&NTA=Z3~U$Y2F`C^7bxeBZSnaw2j=swf%*BH z1H7B&+;RK8(SZHW1LfHj(D`kkoG%UNJU_t41O4)%K)-AZ`(Rw z#^G>aK5#|gcyw3bcs&}J|9mYlfB0Bn{_y_5eCCyb`M{$B$Ge}N7vDY$fpWer!2cuA z{?Dn2*RKzJkN9d}|8RFe=N$o^BZ2nc9VmZip#7g1X#b(W{B2L5Jzo@PpU(vLCzFBw z*gFFIlfl6L`Nn|#Cj$H-0shJWe}3S2`u73*Cj@vVpmTblUSA3DF9r77?Sc0HQD8r? zCD1ST2j*`d56s`r2#k~O1mPP;Is=V@;3?Rd^4c` ze&Bxr_H)4Zfc<^IpACEg_-^3e7tZCUE-jYl7r>ti{5Qa93R$$@K$;x5{JTJZ3vj+> zPutTO(+B5En^a;_0Q+-Le#Ea9uisQYA)JPZ3(EQX00-LryP!Ohb=nQP!1+82%0q{* zBB!qo#d6YcD{?G94RaS*pLRt>dm2_QFy}w5FCFe&;C$QZPq~gawtWcj3nhJK_m4(Zu_Rkh>^{)ndPE-5mfjySLAM8>8MzF{7zZmSfFI4|F zut)vZ0pADx^;Y29L5FrHE^zzMSFxf#O{-nt;h6MM_er}47nq+fabED)=D_?(F6KXY zY;a(%eZ=b-{-D5oFMpW8hz`+-SIfY`@-UC+kAsd|woii&mWS>CNh(Uy0T)z1l65TS z?ZSAGmAKmfQgjX&9?7~c*?vSAFUBOUI*+CA4;;qbr*8+W*97o`66eK~#8u}q(U~?p zlJyzjFOfJe=74j)dC{3SJd*YMf$Kho(GqahdA;bIG(3`Z*WncB^8b-CTIzmJ>-AaD zNiv|IJaTI^-hf{xj2CI(T%Nxd9X>{IusT`b1Kz}a=7F=$H$S>H9Vp;4qJd9^T>UsfV0kvMW@a1NPN=3b)U&e2Y|EAl;}i;M{G8=`Z+;Sn2C zSOETfkKE@;;H>jQ(b1pewI3t#sgeCI^Opj z`4J9T!y`wje}U_qg_8=vS?3X=GiG?i#uUbZ>oJu1UBFrA4@76m@Q95mOamYG$bHTN zXPt{gXU_0QeCC1o2;;>faMo!Roh8E~Hl}bA_-j0JpS3(Gp`iVHjp%GKJaSglzrb%0 z#)~%KT%ManCvAAd#uPHZU+IzijDWMwG118z9*Iu@_)%fJm;lZ?uN9q1!y`7Pa2N1C zkKE@BaMpRN=$tS-5}#S%hlKIse&DS0UeQ@FJYr)Ci@M=%fsf*qA~aaQ)83JPVw4_`EQO1BOSACK3_wQDMB`>smQzy)M|| z*T)TyJWfmi?-j<2Dd1e5t3+qo@Q95m%m5#E#DB~IXPsAw&b;A~_}mYCP#7OA7^V2mOw~>sx@c&JRQ-39G!SINUDU1O>?2-GN1kO6sqH~wwk@!pjf3+}PoB+-`KNp=@!y`7PFbDjF z9=Xp2;H;CT-$ghq8Xh@H{R>>byKxd5E^Btm7Yk1_WsDFXqA&eI(;9Q;$h)$c~ z5gSuT1HZ*1_jv#~>-@dwM21J=lLwv`#*1;_tn(AmnJ_$JV+xbN@ASxhP6KD1^W=;B zjNy^^oB;kJVZ4|J&N^w)x!>@JjVUYue}PBt^CWQA=@%V6QKJ1AiBC<9k1)Sp7%#Q} z|1$6-aMr(7^y>_d#3u#(rJ$1rj`|tktp7&Q&l;}!2Y^2p^z*>~26zED>wi%6#|&5f zap1Rt&LnWuzY93)e@XPG3|IYW;M1T#3!HTpMQ6@%)tLwW4$xTy&N>f!yiZ&*Ty;(Y ze-r4`KGd)1_-PQGErzR368N8iP8)D8&vQg4ZMf=WfWHNFBH*kuDmrwHRdP8hB_v%vopbnXYvI$sx^1;bTm5%?QHM{lUt{`#%x z)ST&!l&elH@OOev9dItsMRb24hm_%wqcpz)ewQ#_WP!6zm*^ZYJYr)C5%AY~sn{^!DYF$tV?t`nWR43F5D!W8g7@yLCi0M0sxMQ7IV zNPOmi>p5pmS^&;EM@47R@Q95mECGL)NA8oaL*}5{<1x{xH9T@w)W5*rDvTE?;9Q>9 ziB6m05gSuT1OH=>+~)z{tn&`hi42d#ClCBR!gw(boOQk^IunLRY)oMi_}e{lpVPou z=RZVe#_&jdP5^&{FkZ|9XPq;i=o9ZZJn}fP0Q^hBcySUq>s%~4`iKYZ$B2z7)W{D= z%s=ah|40I7o#%*7o#B!Aq=0`y7%wuwS?8$eWDSqln8E?zvyS+W0&v#(far`F9*NI5 z@Dsv#aTjpb`HtvJ86L4Qg=ye39=Xq1;H>l5q)(hPJn}d(5B$Tzc(DkabuLLVrR~x1 z$WiKF;GY!6i`vb8Mf-PW(ywnZJn}e^1pawpyl4Z?<+(1&l(t91BS)!!f!`yH7ZGsQ zd1;a z3;b?jytp4Y>-;Fml=ioVM~+he0{^ryw~!xJwZ9&5zE7+%JQAN;;2#sli#p(3o>tM} z>&!W*e&p7ue}R8N7%#HGS?5`zbHMP3jVVOH|H>oxIR>0{t`nVc!z1yT0R9nSyx{vv zIB5BA5S?kmBWFeZ3;c`1crgc@%kvV^nKwLQV+!{J|CC4Wa|t->yjFBh8Xl=nt&ec| zKdOwDTY$69J4GjHcqBe`!2enpFVetS=N{3?7#^`Pg)H#Tc;r6wz**-3(J2@niO(4D zj|=0)ByiR_`$<0WF2f^_6H~z7%8ex91aQ`Qvgphj9*O-N@Hd0b0&v!Ow&*Mxt~yJ= z-v&B0kMJ2WVx4P6r`B-Q*#i7eKqm#9b^1i7&2ZI81AhzX901Nb!=e)zt~z<(`dcTt zCB}iX&ba7I7_K^#z~2t#nFh`}pB0@M!&T=5@Hc|aJaE?ers&*nxauqbe?91&1kO4S zhz{NK>H?cGkK7u~e}KOUbdtc?{#T+?XSnL5fWHBBGQe49(*-``tl_G2060I3Lqh>L z>zpq-V}?iKFb@1q(76jZ>pW9*rVLk|Y2f-BI%hEpoOPZjI&+4r&OGo}LwOc~v(Bxe zvt+pHoCN+_(5a>C3^_1jowtk57Q-V-&oOSLIowVT*i%`e_e+}qFz**-% zMJI1~#3B?5!0+|Qee(UG9JF31MQ76R$XU_+2l$*YT&Rw+I*BNkpGzvPw~=XQ#q~4t zGnC2|%Xyg)IbB!ek#O1FI$nTwOG>(y=SEq#<&1=A;gPIofe(X@ zrfYfrLG1Ei&-!Xt06qdb|p-vT-dz**I4326v(9&9 zz0UB6jVYvn-z0J7Y2d80X(LnG-VKi&rTG=`n?WZ6&N>&0j>)a_ibB3$VJn$ET&H`}O(d%y( z4Og8d;2$LWVvzhfnRR|3>-PGnNE~Xx{{6yukp#{kN-PPNaa}A!XyFG;r2w z7M+aY5gSv;0)GbRM8H|6OLX#vM=V020Q@r083)cf&lQ~s!y^` zX~QEHp)doy19W_9>A3bfDNl_guqo?DvR*4o<{ywaFOm{h`;UuGo#BzJr+|M*;=D*p zTy?%CIvK+wSt6c&3`RpWNT$ZZy6VaJ4Jd*WE;7_;I4@Xd zpXk&W9*KV~@J@+Kl3S<_Kktb{jbFHISU-~WTHqIeP7*lVUoSd!hDWlV0^R^RY2d7r z6P=9Vk*sHd>s)|Q1e|ql5S_f?YF7YW2jv+D&N_O%*M#AbtWN^J2y~`^v(6t&d8Q4I zWPJws#h^0_oORwJI&+3cvOW*I33L{KvyNVWwrF@H>r22d0UbLI|4PcUl5zNC&`C<1 z7hImti;nh%@<_^&0{cdZb5a^O>+tixIAjcu94()>JPmXrWB(h`$s4XZ1>jEw9m&Qu z6PM>S`GQd+32e$dlJ#0yGJingyhuu1?H?{Wb%sZ>o&x?OiSr^Yan(6bbTWoVvYrM0 zV~O)3lDO)eFFJX{)vf@1h@B*i%TjfoCOQ*_N3uQ%{7*qgaIu|RM5hMqL+z~JY1nj& zvAsddKPoy?hQD6;wBeDg&j9~#iSyzF za2^kz6rEYa|55my;gPJ*1AjM^|9;@C|6S2pFnpt22exQcW zt+OffON6gvKfD?Aw@6%dIz=aG_(9<-**~8L`fWyMRCLmY>+xtM`|YQI{sE)&I?;~| z*LluL_UEXt=MY$q+xc^%KW_B(xHDmRL_QoQfusIiz*+zMqCaK0&WEQBk64_-4Dfb| zGd}^G_0OqcO6M~T*Lmrj;gPeZ-|K;+{{6sN|5DLkFkI)Wi-xQI5^&T%37qv0i+%#W zXEE3BFExg%el767BYO>7fV0jUL_cZxXNA`p9*Iy2_^ncAPHF?r`v0uu7e6*-zMA9L zSHzbWNr|hDUPoAGcqHp7;AcTO)4;hrx#JP>_y<8} z95~zS{$axKNY*ETr$A>4IP2(sVA}9V)@OiU2s*RCSx2|`Im07ap9lVQ&=H(q#5#K1 zuK|1Jk*wDO|4)hYA}Mjz(c^oa;gPJTfL{&eNdxD6^*E9-Jd*V+@UuZj)3rQ$yvTz+ z)~f(~3+RjkXZv4B!%P?+$@(Plhl9=(aMsc7ciQks)@Oi^gU&2)*3td&oZ*qI&jW7* zodw{mqx;)M!y{Q=0)8pzxPe1yj95qat2JVyJfbuXwZOMaoOu#B>*)To&hUthDd;xE z$=g83CDI2Y*3ofTBMHhQS+51YA9RwySx5V;&hSXqQ@~#eI)c|!o~|l7zm^KwdYux0 z^*RVTNhl}R>&bF`u&tNsV7&%GCv9}STfco5Xn$Nt~s*JSox18?HJ9;ENLH z#kj;(r$uxo3|E~=;15ci7gG{f9laiX+HlpG0sc^EpIP8suS=yobB3$VJn%<@&H`}O z=@cEUyOvXRmcagrpyLK0rK$aH(Xrd9>fm2(Qqx#67U~@j-B7Cj-B6Xd2oLFL(sAFSlv$T zJXXtt^Vna5PTI_4RVQP(mM07RH=q*%=l0RH;GOy@K=IP5;*JV_FiZBr$r|PJOZ6GaMZ~d{vFZD0`CEx2srELILsTa1pJRcCn4v*8KF*%;rEG7E%56>CkY&N>I^?euH#Pue?I7>ful~w@M}aT3%nb2 zBH*l}^Rc|)+Fu3Whd^f>IOX*Anmn&`HR7Xhx`0W4QKLE$}0tlLXE>dVH@lT>C2p{GZ5PLmD{hWDM8- z$^!qYiqJ9wjyie6wZ96${{?i$fuqiZ;o4u5z`q7MQ@~MY+Hmc!8Q^;En&oDJqt2Y+ z+F$d){}sx!0GxGn-m+-8_SX{d1<*;zd2}5=s#9aQ_E#X$8?OCT0RCOj83&F!6NYPlO#=T9(3t|xI(j^vHeCB_ z2KfI4omt?hGiSK=*F5l_fzASO)LArK`)djK&p{_4=h1ciXua(76STi-!TuMZlLU_C zsWV*rD+TIunL#e@z1406J5^ zQD@q4?XMZ&8$o9lIO@z9uKhI+d=uy_07sog!?nMbfS(3BdO-{$)TycQ4X9lEs}}g_ zppyj7I(i>dYCg{WTB#{h+e|oOQDDy>HQQ?XM-^9|oO-_%TAA z8pE}}YJuxH3U22laMYDFpOPudVpgd_~ul33puKlIyEb&p$iHyD4XIO;4KuKl$H z{2b7+&x_D{)tpI{q`;=Eul-dE{9MpU0%v>GsWV*rD+TEPt_~Sum z0XXU`8m|4d1pE&`Cn4X<8KI80t8(qHTCjft=p=!&j-HRIGyG5V`#bQLfleAY>SPSp z`~0)OUk*AEaMZ~g{uH@^rvUsI=!^qLoe9HxMQ0NDZJ;v+9CfA**Zb{ffZq-}v%pbj z&hYO@dFFw?0(2IDvyPsxTQvMBa-a4R@aKX~Li&>t>e%OFTqioUVE;VONdjk`;`evM zUoAQ*;QAX4xs^R119dWB&-`p&+0 z&N{{OhlXo;3c&NAGY%YeCJfi|Oaku*ohjg~qubZC;jfZ<%>cj8H<|mK1&%s%hJRjk z=7Ik+=qvzd9o@bb4gb05ECK%>=pe-`0GU{3;Ybw(V}U+w7=wQL~&j>r}YvCw(n49S|%lKb?OX1UG5)F0lz}x zyhuyj>SPSp`?|Bh|BRg^M6$FxdBbm$@)UsUy|awQfn&c<7_RLz34Djdc`+q%Esu`F zX~VUBW`JKQabC7}R)LArK z`)djKb3i8nzZauUjp5o~wZPvgnk<(DjyiRQ_endafIkz;lLpQ@`u#LxxVBFg_%6_i zfTK>{aBZIg@cp1O4xDxL`{{(?TAoSZmxIm}aMYPLT+1^9ybE+@fwPXDKb$jM%QFxB z*`Tuk9Ca2A*YYd@zZP^7@Ov@qWM%$bW4M;57Wf{}NdiZmI>WU*Dc}b{Ck>o+^!sVX z@Hfgh%mUvHIuUTx$s7KUqEi5V4d{#mXC0ldP8hE3GYR}zpfd#=b*2s1_L%{G73j3NT2x<@V!u;1pHpiIy!%@F+zxhJPSJGz*%RPwC9B3TCYjq`=DM^z)@$~ z@ZF+61AGURXBIf>%o%<}bmoDlp*$L8Y1a9e*w;vc@)N>qfhVCnf)k9Mt}C=eojTyC zb20EO5@(%y;7Q;Oz;*1g{UyM4F2pXWj%n54;)pUBFv_PXTWQJ`H>; z@TA0fxBdj+1HhBOCxD+1{B6LW1pG6=F94os7|sp!G>qoPMjQHahXzKwZ#PE(UD+jdix9c+%Tmd92sfIjTMH5M{|AMN?nFM zxsk@Ewws503jKpObssu9*gM)kG&tfLg%X=uw}ulN+ncH+df7rxUsdH`x`>C?>*Af+dYsw+|zqYw{)yES>B>AKNfNx9_cBJjD%AA z@}U$iaiBc8-cSl<7E0<1Cyh0=wl=nh9CLkDlgCkb{ zd;*Q|-h;ig;a7O|_8iF#4D|PeExhhB?zEKzEV#VwO@YK>?m>&b;e&^%+`}=osnQ~qZarLdYKh8}V$ow$d1UvD+;T*AY__R* zFjYzB?Q?Xfn|IaSxxwBc-Z`7yplqkhSkd;nj0J6+%UEz#mNDUtbr}=cXqU0ljdvL{ zw-GO6lk4M+c^M<_hhmK!5M5_EoF(^dn}qUVhxH z)=NguYTaZEt=6qHl2+>p<7u_7I;vLdR~%cbb(9gdS~s1SlpRj19JFOJRAxRn)Ll4w zu-YM1ClRZ3lZ{|!=0G)ZKXP|ws@cfVw6mIxjLQ989o4L)!FDcVKSm1m}N zyDENC$k4&Kif5_C*5F)yZdWB&8I6IdXcb3kptY3MfB#s6XKDAj24~oVuEAS(qHAz1 z?nl?)yUg6KO8>|}G>7>r4yEz8a-Z0_U6nliXj{3y46>Cw#Lw-jl&CbMR-Orrq?J4A z09v_6aonujC4O#KrTQ{TVh`0-+)86*wVqYxc2)B8<7Tya$>>?FTeZ1el`@t_(rPn= z@w8f39aXFKD~_$zI#!$8RcV~qxm^`|-{Iv)Uzyug@v1hrtKudb0nhEKTJda#=5|$V zIt72E$`u*Ilx@l<+xV&BArW=CO zI6rHsVj&HCWaQw$(7|P7svG(CswN{Nt(r;s;DvLLG>W*T`*N|Tip|cRzyDNsh~0vh zchhe&)y3mWBLg5%gK7n;?irdOX>F)2){rNA2i$l>asz}ds`p|@H@?~E*cT{AwI&OD z$@fgxgCXVklF$HOLrKD3<*fu?!l`UwuU-B-a8;XfW&Hvs1A@2sKt1B?UB#hV7gTZ6 zujo{XDptJLs%{}Wr0PcTmEuE1pcSfBs)}2AqwCfe&PLBbQ0c3vN+VRUC^bSAqxeRU z+1DD{p}J>$ZaQOILw3u!#^>jzd27h5nqPcQeqy+Wtg1T3=fwxnHRM#qjei;T7me6o zVEvEqe62}Lid-mSQ+R`Rzx&=mhY9nGuFvUkZ)Jl2`8+1Y|3Ds-;L8@5Kw9(@cwCCR zC?GDu{{$YF;@YM+SmKxz`AI*<#s8!qli*7nqs0wIKfcGi#HS1%9T>3fK0+5H^^D{# zc2_yXCBU^gbnwWH^;Wp%dg%xoNDHU1?&!csBVCW>E~SZ6W}CcRY7>_(d!9hvZrcr{ zjnYM1-NS>2Z8MaW%8Xb}8yVrx*aTP5n3NE|;b1_@wMuh$Aa$&LYn3!QryTIRVfbKc zOcGo@r6Xgc|L|bX=+WVvttZ&#IldA@cL7(>karNlL>gDslB*`_K_V>fu9pZVLsbhy z1Gh9br&_}W<^5?;=}`XwT}d%IRN0)obsp)njqLY}yq~4Z?qU*YcNR{R{cw!uNRBQ$ z92xGlilcqGk#4tF=L@9F@O6o~zFc#6mBgmFL|=;-FL#BJzZT47R=mO}HdXedm1Xq% z{yE0S-Z9V1oVHi_?R+7ATNsQhthdD@$I$0Xd4 z>+S8ip_{XdOO~SmRos?@J!0@kp1-LcJy?|H?y{3a4(&gh>lyAFx_L0@si(6N4TD3YxrS$5 zadrL3Xix7AK?gYj0k^mv>>uhrG(2>qyRUzw&_lP%K^lKe>*v!Ff%N{7?%|_@gJgp3 zHZasnm%j&#Q2cHhw&3rllA5CvJaoB#4oX$LT`y0)I-rJ?V@4~~?S`KbI5eEgC3ft- zvinGGl(V2UxAW)baAS+_$Lr=bHW=zN?(TNMUj7;#G@-$n>b55Cra;zj=uPl=qoUFB zmLt4$`TKkE{HUg{>a+uKUufa*DkHU_RU<7LY1T;7inJQloFa0|A(g1H0q-oun=V%# zzo(7f^&VrMl!w3ua(i$Qo}gGYe|(oRJL&zrD)2Fi zSWQkFdxf{iOM$o1D%Z2du4ZIm~JM*(apng`OirHY9Gq~ zcJhzQe@gP-0{Qc!B2-WLa|8L$O8y_xjAd!-e{CTD6O#Y9=y3h{QFk_f9=CDzFUWvM zQaT2kKl{ejzwK4tOY6z`^P{e8{_mmkGqc;^q~x#mUajP>>m$FT|G90x{-OLM%}AEE z{+r1^uKro6|Cso3{U1SpS|4qfr%(fO8`}K!`6Kts^EO1LV*5Xzoa6GJll)#uY(3gm=*A_Hh1>i^>0sq5hMH6iqFY|7QdJ zH}grKe(|0e|MU+D1uvwl(hwDo^Xp#HU=_AYq*dm?ePAQ zIWXG%Ur%On{XZrTgqVf?Kc8%E{!gWbiOYX-r_bLdN|YBi|0j`uT>fo$d#95uPJ!G1 z0{XN0|3xT&dAL+0{;a{l=KtCfi>%Rv5Fc^FYz{B>dT|7jrqNy$GWj-3BR^k?&bTOj{Q$$xya=Ioa? z|2GHnzhCk{ko10>KR++V=Kq;M{pCCDEy_&>-$uKv@%@D^iY$n~c~MMeF;(pLH1gI)5^<4+oIywOnLa+7I=|0PYS zRO7Z}F{FyIWYWj|=hl`Mm(tj@HRVZk=B>N-UcPZdsYNy<{;=4toTr8{DFd&k9ZV;l zNR}Pfc3jhORaZ81{BL(3|Cimzf4=+psYOoD9N(0=eRi~M@9|T6kAKf2TCdC8acSoG zJ%0U;OZOiCt&iTxUyKsFk3Xd2b6l7QF5cDn%SNxXm(5i4UT0ohztpPy?@%)Z%+3T}jBGHvO{%fDZaqpTr{>|%UyX5qY&$#GA_CL$q$-P81_@?)yVxL=N zUWL%DMO4-7z{<=TW6U0%Iexd4{hQKclE^RD zz4v79o>l397`Q=++{v7tG! zZ)eN)#)hVbww6>wV`Fn`OFON!B=|fLKO5>Y|HvUS>ulQI)X>_{)BOm-TU`u zue@?Ed6Q?Vv5`|!4Xv$-{kyZf_U){vlf&D6v=rOEf8S1CqnsO>x6(%wo$~4I=(?)4 zeplxXiFNMi+|I0CBV`3_Zf@AtuyreCDdtyRUUa0`j?0}AE!ca<<=c1cz4F@2cXwr6 zp5)fh!u3uywbP=B&Do#LX|a3ft`6t!A}qj>GS9}gHp-vQRFSi@B6nxSI$K*jBQ4J; zLab}ouAMCF>e14eYM^~wD&@-I(>NzKsx%O1&cvxugnn_WwA(5|YDXEz+EMRxHn}SD zlJlh{|JAEG3P)gIrKbbUh&n+gt)S3=bxOZQi;ZwkvGZNLwPiW6#dZ zfA_PEmD}PvS#N>$7FchA|CKG!G1xae)Zdq^+qSK-CDqz~aq?i#NUkqAG?*N2Y24b_ z*4*28QL=ZSXYg=R<|E0*CYlwrCF}B|qlJ;}ms~`83;clCfVEG+}hXP-nXsyP*bXLYg1c09lYuJaDCfSZChI! z`&yg&nhtHt8=t#_q#>M=GtQ$ui9KgjK8-QB#qZOa2~h0 zSR&z07drcm)0=B3(z&^Y%l9rxPs*~|;(D5Jo|gFODQojQ`hKy&oqhHx?&}6c-$wS# zbzRH#df{#|O?L7XKJhBy=Sc?qdkTk_3D@VUayxJs6HccHT%c7K_kO$mTe9BoT5)XAcS{i!hw(#$f-^Rp4Wlh?U);3XvHo9MXe3I7dV&WUzS!B=C zevx>#pS2}(Akbu8YZK^nv=#4fNTUou7Yb#n_su!kgg7TE} zQu~ziQoYJK{~A#lHbMJi>L%!~a{g#sEygz$e_<@5L=*KRZwEH)4DioT6UW)}IoCMe z7qI8|I>p&h-2Tdww^-9}MV!JHXom`Q8&~&npA=9}L*PFpw{IZCtxOD^M>! z{}X3l7tnunfIo`*ivtxm!TbE*$O)A?h7_3du}wLjhvdNg8T6;TlOYA>m(ri|XEUTg z#dSv?<=u{Ydp-}X`~|@2=glG?29EYG1kPns9U5*faCuNij}**NNB88+QHQ$41uj1y z`&D0$T+I1TxgK#?hktWZ{y2(rU|ZS*i~ItH6xjZJ`cwM`h7{PI%b;B66IOo*8&hC= zE}PnG`&<31*_Z;`bDG-Asb|Nq{QYc9!Rp`WaYgxGES&ARFI4|Fut)vZ0ly6F-wHel zoacueSfA&Ts;~1M8t!FBbDftl$IA+IoHJKVin=ktOXj+b@VW-(s>uv>nCtk2mi7UxuVaIglKeqI^X>Jk73EZ&l%%sg|6ZXXEfLij zmGz9_s)P02CpNr@B(6HImG!*gs#5^Y#}pe>=kt=VlJ=y%$)e$^vjqGCiMxg5 zuR6PBy~c3WsRfSL*(8DU_PAfx`S{C$7r33KfTx^=|40L8d%gBBW4M+l3%nV0BH*m^ zYFW=4t~v$acy4zbIO|Nw`h?-CGYMReHC!z9<7C$PjMzmf6Iv+SFEE=vlOTc$~Q~xP`oXk4)vR-4j>eK>HdjZE|nr@5H_7zfTezY?7Z!&PSz_$8n-1)O!xlJ#lBRc8h`zAI`LIP07*>vM*y z&OC5@N7Vvw)_Iz&FB+~oOTg=)UK-VL(kym0lAv65YJs!)#e~F}<2-yCc-cJM-|6G-!jV_~tnlSh zW!C;qLiz!JnYT;1yF`BH_fEOex-6v-dg%bZRtoQs5wr07qQs!=)lfHAJZ#6^4M@*y z7>j%A0zbomOoD6anA?;k|M=UAy;^*l_CoAE z$I_;OG=6K4y&rM7x5eKe?1pH}4Y)`8D(;l!I#J=aRwO`^$EHiu#-?fG#wJQDR?U%a zL#<5Lkr|h!ImS93>Fcey9k+OMZ^dn(QoafvybY9^y#?t(z;l$r5+Hr8^+a4UVP#>k4i{T+>a2QvBubB6P0>+`D^6cjr|H z{GEhlgx(+6-J7TD!4h7Pcg-<(|M{k=epjE^{NC@^<3nMdP9Dl3Uyh7^G5aLH{5Yj! z;NvxhJ86ZPF-xS;2;!$foTDG7ziR$(F!nnCQ2b$vSWQlIKlsw}eqN!#=bX8oIv>&b z$IIx%T3r4MWXl2PEWB>>e=+&T<-Z`4jto0d;QYz7BLDv;=eYbG1bd3QVDmpo{&D%& z$>c`s$@%knTwDKzK>oE{C<^YkbRTt}Hvj(<$UiOlkBbiH|4{m~`SZAmtN*O{B`F<) z&7aNU>OU(d;IaO3_w4;f`rmE?3zB~pGpD%C|5t(jzhCl?#GmWW=W1>JFAL$ulxB34fkpBrCI6P=6aQ?hW+x(vx z=s&%*AWc3PZ2pf8^xui|y;nw@Ie#8fHh<=E^-uF)r;v1?r4RL2!r#?Q6Zs_B|6~5# zB==T(q>7ZnRkL zo{Q$T_O0G}<@a2)oyjHeA?+4v8p|8>o`uZujhW-^?rwm)#mX=Kcihv!H!t|Ge$Rq$ zhn3y4a0NXX(%!L<_#b{1qOYG!y%P3XMBexEHq1fK6*1F&mu{PEvy+V|gsvs*^T}|< zoPd}`nl}EpYY9I=wi^%C-O5p8u5d{Ex$F^vBzXay|dbwmfZ8egVZfusx3*R%1^oTm18EeV#tAM8>8#(@5d!JbF2>fZ+TsQ)_P+}CQ4*OKtp9p$>c z(&hwPcj@{L=Gqq&ExU#yZXB__juC6mT(`h1CsI&*-B0KoM!D`MlFr)qquMgk{Q~zd zZUq^z$MWZamzBT4ozrm-0GE^L4Dg{*^gty#S3R2GtI&_+I8r(v<<9ju=eX0_CF%IH zSPaEx_fu#E$>3X-Al7atb9%vBE zs{0{m7>X`RQn)nvOx*^qQ@&pKRB-JX@-Oe`+{ zh&Tte_iL5;4^u*1{@Ng#k8azlr~J9(AD4eYGSuU9DF15%`EQX98E0_{oImeRZT_4b zmw!_H@VHK<7482-vSU*_hEn36W+w=?{~k+raqV}P9QZQg%jM^zzAgWoiN)n#ko@Pw zUl%t2Kc;GTGd?GQ<{wtQ}o{#ShG-Xi{EC`xgyzv73Hb6oqS#V`^>Za<#ysK1W? zF7lVEiltxZZ}$fzk<4Px+3D0;XN@(liz~B<}V_Eq=<^ z?*H-Mt9U-dq1tyUZf_2}z3AAq`*>#nA32K0eK%s0@OOgB(eo6tKLDFi$b_06*1<{do$Kc)F7t9v&K|mobzcmRbCriVybsXw8`4 zinzSLYZxVgvU-W&NokndOa|Isig}&?w0)JQHDZ>wr!J-RYW_AqyYEc~{Iim;EtmD@ zT{P#R<5S!c*GOc!eJAVLGO{b5M~(~D_IffRR;!**_T6`6m-(Bx;k<`n!oOQY2Qf?oLKq3lOB=Xw%YTRHFEBhi<0IK`aFwD zbhSJrrsMdp=xHn+pW{=+pXK{YUiRQFD(kIv#~vKL^@?K;KJ(VXu?IJuecL-J{n&%2 zoqan`SohxXWLEmY&*do~+VCXm-joavFb3 zPk*6@=X~>X+;)p(lOXUk1$&Qwd++g|Dn8dZrq6!kmyR#W6LOwsk7leD2>;`caDJ}9 zrMJhpXApb5RO|KBg9*B&*x$pv!{5XFkXN7nn$upp=@lC{9ow+Ej_z&tw=s9PyOqT; zX7PF25LbWf({KAFLEfj}`6O3HVmFaK@2_l_4DcrhIA0?hr*jz{NaFZ60`?CN*dGaS zu1B2yZ>d6Y{ObX}D^Q;Q4(R_|fQRlKeN7IZ!x66{2cmI{zHZonDcQ*Iq$kTFz4f&^4~C|!2C@5Q+_(NCkN(ytWdrgIJb@R z^MK>|Jnlyhtb^x4F9OcrRa8fhrEHJqYdgiBkE^^DtNk^=`M{x^&+Bv0iYCS^@0OLHQQ(=feXBsVuaGf)#{Yl}vFIBGn zl$3Pk=SaR68qVhrI3(R?sr<59IafF56nF00-+gm;@eK&O`{=}D|Dk?*eek}W*U~!? z=xwm_4r6|(mp@l0PfB+a{MGq87k>LHJ$ZxQ=RmK0sLaF~@hdo%H>67{myx0?ESIt1 z7n!uJz=+;nvb>Tj_OgaY`kGcGwY*W|GA6}qBm;K7C;2>U#j6y`dW5go6p1c*6zcq<_-XUHf>JDFXvV{6_QkIJK+5*zC%xm|A8{qQu!4hCcC)$XQiUr&fNYy&#?9XXY!Y< zRMIW=nmIiG$oW`*{tn%|ito_vZT@+y$>hq@}JAX*^e)AxPmywC2tqqCNh zKuQ1A{C>M<<~h&2?>qC(%$f5w$AL)W_hiS!D>T2~FKPrw$kcO~T-5(t1c!b<|Erb1 zRQ`Np(oW64)R=@Z+OHF2`9!a) z@%{+xsKKB7iuk&0crQ^9t1Bx16=aFUUhGmVqw-pxFVd1*?QkQjN_ej>LF$p50?rHp!;P(2B z(=FIF^7H2o0>wJ=;CLP@ijOuIh2!{!fMXPXJdfn@?`4A7^HHP`z_sU{xF3%I+@9Aa z07^i=$mtt7!=%hfJK7otc6E2PUDI*=0W<0Irksd2vC>SW6Hw^rb^y%G(B@;?SGO(O6D4v zfA0Wok;fFAw=FuRT(i7m%AjO@BFB__g>R23PPbs|<>&WTfnxP}@YX!|LwRsFX^?$r z|M>Bkl8`upe@x-r7hHQxsdem7#vAut_A)bLyg+sqC4^( zTk@SJyj}Axb!>q>ew`pIuaT>m%*N+lEPDi7bZn_s;!?+!gyfGZ|M)VGEx1<|b!-_@ z{Zq0Z0m(eamdeT}a%|Zk4_mntmE~W%;CJ?5M-Beu|5aj9Fnp|7@714tUNHPhx2t4- zx!78Aew`drhL6QZu3ZR*e^&XXf0w)Y2i@I#5(j33k&+dX)x*S5~V!}l^gw=})g*k-zUoW!Z+d0sQ zFGz9{Za(Vj@&AW^!3d5VF?>F#@YHPfJunvaKX(75_~%qkUFYh5s{5a6`6Be+`RI() z)&8l}=8{Y5${I^9X(($cxnyTqZ^y4+r?P@;9t@XwCTx-2^ISU`!xE=|5_)U|XRp#{A5N_nG3g(KOf@4$YMBz8O zqyoI>j~d-4znmC1u-#yliBKuuFDk+_4En*8^ckY=)R$aFEv0xvjMEI_ftL#-G*S|4 z(YCS!%yS#kkDrH+69X>MPS_#*pOm)76k$FaIFo&VuwR02fI%(t9LpA zd&J9&axEx!FSb{&nk^{23!jykEocb8Q&FmA#&r*z-whWQPTD{tkw<>rPa+>|{eb4fJTtWA##P0l_bM?cDbNGDf1~cNT~!Ku z*!Am6`D1NEp z!-ZX_u2`A;+I6366YgSbXy4t1g^kWAsV-!T3I}D_k2**Gme^n5R_zXRJzF!sUUU_@ zFPVmbE1yI!7CD9PEsGF$c1rY1BB#)Oc{Rjc9ZK|<@+)*-Bn@#_UWpDm{zV}u|IR0} z{b%_V#xBUb_h~n-h!b$AVys$4{rB3J)LdGSQv;!u>cnqqc;QO>G~7I(+bETFL> zw|e{{SoCJwq1{{LzHn@jFkX~t#ku>6Oh2-FicG)A#o4PYih5X^3uvmyv|CFkT6C2- z+*@SYXD+|eCNuG(Shl}pK#3G(-UzWMaQ1#5&$fTNr^xivTs+$^h;NX7jboc1Ci39t z2~ za>o|Yd9}z{<5p#ngami|mMy+nv&Ot}jbjy@gc{Toft_u^tO5zB_DF??3 z1mGAw$ZwH20&((jJVgMG>+s~i8K4B>m){|spl2+)h?LCAlOhm+6eeZfx}{wBi*PCnPR2OoYUE>RbN zqwR3*dTAyu5HHg-kMqRK6+cI}#Njgp+kPM)HX$I6Kz>!2baPCLbA-kG*y5LKI-y(2 zsnIm;C0?gE?Ij*4PJ4+rC{BBcH!4nhiSJaL_7dlKMSF?gr2HD)5^vEo?Iqr>IPE3g zsW|N=-mN(8CElwz?IoU4oc0nQRGjt_e~aQRx+OlOY1&JCzv8r)_(8>KFY&t+r@h2S z6{o$#?@^rg5+75X_7Z=O;zPP6KCWrnOZ)?h(_Z3-6{o$#KddbU040Erb8h0h07?KK=iJ2YJmDnXwER_R(t^8QteE4$8 zYx_m9k>6^YfI0&6LK$w^tj!V(=Gh z9Gf|VXRmHaeHc8Uacs`h@fh+swg9g-_=Ny8^co!F3BzH7(|6d%cjX};;{yZVUjUAA zfT0S21Z-aFV&Pwd!O^c7It|V-(Cw28|IK?l@OF-@10n0Wr}}zskL7@G>g!5%Gu8ndE>EK;L&&PhKoMHFFQY`( zKevU*m;)Rnx8E%XmRb7?aJV2?S1Pw!dIwTmYTm8;b@p(@G1YEgQpi+q6fwdJDC6Fay}Jf>$JS+ywP-#|ZtLxnHQ;ixWuSa{ zm?hu-f!^l6jvSGS3!iy7EUzb=8|586zkqTRk3u3UW_MplP7asOm=W&H z79-=$49#a`T9xxq*S@Zl8w4=0^t6W$kGVZC@%sbv)+h{DtWO$?wa=zS-3wV?hnZ+!y8Ke1pg8dsV+4F2YRmKc@K}${=CH*Y%z} z`e&XU@{el<=*Qg7*Z+57R8;x-aGDk)6ej;IgV-}m3B zR>)HNAIwvJuHA0+W3KA!f0tlU<)2ul{(B^URQabP%Kv*2`q7J`^y4}(!cyhO+&xPF zT!j8-3D+c`KFG_z9p&#cozW#sBqrZ2V z`oEb+e@ldZoVWP;&&Z>HRP`_A|5JJDe=tHnAYXrV9{m%l|6a*sgWvw~t-PrEAC1tD z^D19|tz?dBe=RDM_Yr7=um5u4Md?4R`gt6|_>1#2U;iG#qVy;9LIAFj*x>8mB|D?^ z*XT)PQZqw84(Y!B&kGi%zh#;Fk4ye2{k;+TFNo0JC(5JrkE{NRC65h$`LRArl>YGu z{TGQKzx@9zkN#=Zk83 z{b>J?;IgLU%+IO6N)ielR$o$TAV&1 z{(ma@|50^3S^ckhiuwPi)ZbIF|K_Kd|MI6;fBjFTnCwtwIiVYK0pI}%qsyn9{A`TMayHd=q^^7G^|>)KOam1nM>8{BzxR7x4#`HO@M z3IpG%{S?YvmtMd^l{e#A`J+1K7`ZX(Uz*%wBgnY zZ^v4>Ce_imueICY^2T>;+g1Z~wVQ-UTDz-DE+|67-mZOXWgEs@2eWa(+wBgQxMr=G z5K~k7Dl)Ok*p=BmTQ+cy#3~)9asv#%X02?Q7S5F>y+!szZe_JHtCd*|X~NWWRT9i= z*2>oLW$X4cy>WAe+b>(UU$$<)rh6+kB|}Y!$sW<^V$ROqiY=AgyQNb0%H_Mg9Rl7~ z5o=s4TSu4Wq?9BvAvLbW0#gtqOQCVk#!bvFpvx{>N0Qa6Tqdkyg-jbOVPWH1*~WJD zwRY|6?dj=m6t>ZK|lM3S-qMn+<+{*RC4VN1{%V`($}Cq`2VA^T!Fwf3iIEFB|g7`(5#@ zZKsRVZgO<$wc-y}h;CU=etTK2e?4(|lhi}PO8*FJV!8FaTpsIpsqKnC!Ww$A?f$pz zkCpLirGKCX*iZd-y4>Uba@*3`M(nJdSSuqJ-feq;SEwO#Q?SVMlle7g8! z<@mAEKTregr+z#AuYUYk=^rcoW2JwDZNSz8k(K#XSQ9J9^ROOPjvwq9;dZ5etn?4m zz{>n8YzM4|FqK^w-XAxfEN|uh2WxhDTfd%H=DT6NJzb9HE60zgmp@ke$J5InEB)i? z<&TyA@$~Y?O8kbfTfU;X~aO8;2tA1nPMYy-9)h%C2% z;Qe0&e|+J%6YkBvi{tZ_I}RE&%#{1MiZKb|hP-7lB7Ja1&@ndC2byjtlWVU7K^{juD7UM_ECykbjV z-uB6kS1ZT!|Cs)<-0^C~AOA7_SnfEqT;9rfwY+hPEPuROZvR;E$4dV|4Y2+Ew&$nI zoi{C)$M(O}mgOUFrGJDqvD|uIE|2xQ)YkV0*Oc+w-;?F796y%wK<@r0ThGh&+loJO z>wBrxia){{^2dYajzi1kE#(L9_x-`8d3^hR)4b(gM_(>)x%Kk9;<3J$+WPgZOVurT zU*oCrmRrxu<^8VedAWL*@&ot#{#fpL#d3Ko#}C%@^0q7f2M{avzyYTDfzsm6(<6fiu3S>YjlHaLc$6~*dAIcwv zW88_tQIAnL=3h}buE+Gs&)182b`*{^B%^SwuRkO|Uk=96C>-|(rsU`I&&h*h{dz36 z>GRz;$s%y9Hy>5rcpe;Utw-^(25}UQwMnCJtXbYGKi^KQzaE9-J5NIqe5{vFT%xW$ zV2iasr{o9u2xun=Zpm-02c(JPJ5NLM^XG}+A1zdv~{=c+mpDhqp!b9c2rcZORlR0k6pPce&wptD_141TvcAXDmi@SUC%gl#@$7KT3Fb;s@%b{Qz%^26?r1UUki3d z>_?e(B}wU)NI{HeW!d*Iv07z8W~EqJQdRwj_Eiu&li6cfXO-cJf2%z!hcd7&GJ1*k zOC-*O*}hidYs|{kuFeEQKSRK{i66hY#_ye-AsEIg;`p8&0=O9Shyz0q*SJ!1K1f@L z>r(sfyMC5`5fT!r!%apG`HdcqrEU>g+<#VYy{5UAH}y6se$eo3Qy4cmYWoIFPZ%70 z)Ca=xaFekU?E_&Z+&CP3>Xm z-)L~~*`Lsd5U>HC{u=l2_ktv0(!=R5ejAQ*=&xCiPk+sOIQ>KO9)^w+4t!KJ?r8yxcKuStW0Pk&7t9DMp~*5KgN zUsyXFf%QXwB|ZEDAuTfwkxzf&8!8CI$>%prh|^y~9-sai^KkkL-#DUt*k2kZV^apV z{+c#8_#D&c3~v3kU~upgDnG7{rv3C+!rSi@~kGdJPW#Wy+s0 zIQaC}l!yPl@@G8!BE{!CoO~XNSYG-ou7@b%^jEou(_hsFhy6*_+h}mu&+(Ao8i9Q9 ztCTuY9>#rGuLw*g&66OtV{l!Bv?XL^zu^Nyh z&>s4$(ZeT0TCCH<>90W#r@ux$ocYYdN}YL1(qC~c2>VOB^2-fw{Z(yn$nR8s zqrt7eS_}?8{XS@L>#u_b2ftV4j~g6(`fI}A;HQ*7Z*cH68H?$IimZn(E5Fpk>92AR zC%?wS>90l)r@uNqoc293sd2E3;S7b34_Ca`YUO0@aeC>;NW-5524B6;128~+^!~RjVXTsnpFa0%TaPaR@{*1xFr@!V54*r<(WBPG=)(`y^H#qq3 zQGU6>t-q=b4*t0E8x3y#)nah)KcM_^gM&|hO?ddD%0KSm^w*4s(_ix*PJi))k@Y}- zmBvFw#ObecgTsFMtH$84pZ;nzIQaBer@_IezXlBsKK(UnaPaA`af5?Te@z-3eD<&7 z1_ys!eh9M$2cP|G-r(TVU&+F`YUO0$p5JF1A|+CH5nZI zN#*w%-1=+C;Nah<{3(NjPk&8&_%D?|=i&6%f`^kI*N>yIztCR^52wGXJ)Hgu3=aFJ z)SecD!+!d!*Wlnkp!|ad2cP~LGdTFil|Nx{@Y%nn3=aN7%I7z&Szh+9IgdZBd|qfG z|IZYUpBqNle!il3qrqVh{ng^(XCkA7K@X?D4thBKHSXc`*Mx`DU&lS1{+cm3>SqeZ zNSHS`?5DqYL7e5Kze@E&IqQf1DmS?GSB=4~zZwm0{ncr3@aeBXgM&|hjT#($`fJ?a z;D1Ga2(tzUpZ=Qn@N?8(#kkQXf#s#YN|e762mcY}FBlwr`l}c>A|%!SEV!rQ{-et8H8}Y6*N}%lSN%2S;q=#G52wGTJe>ZT_Hg=Z&co@i1%tzW`YT=<7KH7G z{z@1eeEO@};3zNs6&M`+S@|Kf7##dThsr$P;Na6=2MrEB{WWHA@aI&{gu%h5zorZh zKK;dSxU;*K;q}AzsfzF{;KwH@*6#z{^Ga8DWCr0H@%6|Uk8mG*gqed7aKP? z%6o(269xzW$BG{}IQaC}jKRTQQ2xBZ!5>sSrZ*a4C-@xyOAQV_{Z(#o@LflfO^w09 zr@tBv4nFRKBa9jxeEMtL!(XEONe`#Lj(a%$HS6K@*Sv?*U&SwUW@W}(`m5C7u%G@) z8XWfD5N40@TjH!w`m4#~(_ftihkW{L$l#Dqe~lU(eERFK!NI4$CJhcg{l#x?!%pz& zuUU^ze}UUK zF*x}2*Py|{r@syw9DMp~+~DBTUlRrgpZ+>-aPZl`W(*EK{WWiJ@Y%m&=SxBY>J5DQ ztH$8q(_f7qe!2Rq)5GbnK@TT?)WhkoaSx}zCOw?~I&N^-pHO>d4G#P1uX%%mU#9%x zgd`*&2|oQ*nvjG9;NbIli)2C)63C~&Y7!34@Yz0_3=aA9SEs=tKM8>nh7xX*kxze( z8XWv8^pg|7(mGE%-E9v3%SK#6FSCheEf1*JCB=i~_ zdg-qrgM&|hjTsz#`s=X4!Kc5b3=Tg1HEnS4>90A1gHL}g7#w{1D}JFQBoxRGeEKV4 zaPaA`7K4M&{?+T@4G<{dpoi06V;)Zagoo2#Qyxx#&3HKdHD_?xU#<4U)Bu*3{)!tM ze72u*gQL9kSGB>xuTlAp1_z)1YB4zYb;=(!IQaC}L4$)ID1Y4G;L~3d1_z(@Id5?A z=`TJ&!g_d}$}cSwk_6(KJy!1FlwafF^jD*Y(_ft)PJay=9QM;+qXvil^w+q-!Kc3_ z4Gup2b==_K(_ga&2cQ0$H#qq8SMkM?kih!cA0}g^1_z)1N*WyU>8~1tgU|XLGC273 z*Qkfzr2abW;q=#}hm$|;;q=$6htppR9!`H1zeJ3a05f2JquP@&IP9mtk_HEVr}6`X zgHL}o865m3<@XvKeEMt1;NY{oV+IGG{yJ=M@LN>=l)=HLzorcie!KGHFO`G@B*CY@ z5+1%=`PCjye+3>+ev60GU%ehqe;xF2`fJSKu)kC7nJ_r)r@y8Q4t}@tXABNL{WWKB z@Ozcd2hWfMpZxA5?y$!NI4$S_}^UTa-U;aPaA`2@j|J z$32|>n(=V*=RKVMid`bgB)|;lrN2r&oc<~|c(L$@)czWSLk|7bXmIfNE5Fm=;L~4& z1_%G3@<$C0KK(UraPaR^{-nXdr@xLH9Q;w`&l((j`fJ|c;NPSC0ZH)buNn`3 zv+|ofoc`+caPo&docLRcdhX zyB$l;w+s&X^jD3+!Kc3(4Gup2)oF0>>90Y9gHL~r8XSE3Yuw=A(_ga&2cQ0$_wc_` ze-*D6k_5H~`m5B#$xnJX{Z-@P^jDLI(_ftihyBOZo*{$7e)?U;R+Th^RUxC5F zpHqH|!NI4$dJPW#qsl*MaPaA`F@u9Yulxyvga2ppLzpr+_&-*DtkUhyl$ZXBd-z9` zU+&@bSG9-JUyUA4f3 z!Kc4s8zdnC)dD{KRcdhX>92BwgHM0e7#w{1tI^=#(_fUE5Fyn>8~LVr@zKLoc=m&aM&ML`=<90l)|0W0$Iz62J8uW1TM?IYW z8uxJeYtqB%uj2-X{pH%;W(|(=(qHoi2mdnV7jKb-1eTZnDm6IxN#!REZv9nbaPX^? z-(+y>uTF!5U#9Q;7}jRv>=YB4zY4ay%hxb@dTgM;6w z{BeVWPk&7q9Q>WipEo%8^jGYal90f9;C!sq!|AVb52wFsJe>Y&^lgSHCgleP2cQ0GGC24x%I`He`1IG1!NG4={+PkRr@syx9Q;n@PZ=D1`fJ+Y z;CCxOULy$!Y!CETqQ=1)e3kO6J)HguJe>R%52wF+J)HhJ=;8F&n89Ixui7(VaFmz+ znld=}Ddo=?9DMp~&fwq=DnC{$2??wp`YUd5@ZX~Ra)VocRT~`qA>}t3-1@7<;Nb69 z{`GB4p+J7nOMjJmIQ>;_aM*uP?Wr+1`{jqwWN`2&l;3M`@aeB1gM

      m1(pSV8C;tx7J;YmCksWGBf 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

      gH@lX8mpq!{tE4Zs*XFGSaR^?uFAW0 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%0D5FKq@`2puV}=4Y1uCe}yg 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

      KjuEUqM-v8`F_w(ho2Cal@g? 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 p>_T!`gt;8V)Z_UGd^6R@;k*I!EiH7u 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%0A#O``Dwt|W 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�FdGU{=EMt;7V(J%fkBcJ^l_4t1> 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%0Ab_*f- zUg2|O#9&i#%AbIt{J+KZIQjZ~WrAmuJBG6U2AM;Q#QUfDEZR&c|1A84@;{a!U!UVV zOXW-mW!;+~e^}(#)9474KMsGPd_J$Bh_Ls_^2G87s{WJAm2Gc1AV#VN798*{*?*x`{hS%7X6cf^3TIxDF6GwC?c%?@^b+q zl=~=m4CSv$7(X(SKco-OKM3KJk75*rD#_ndfadjAcquZ6Jb7(MUXBb1;Z(#I;x8=! zR1}=@?Qd&l84&sUo|6~@X&E&BED}tI`j4=(5f1t&cU1Wb@I7Rl{=M>}yIu&VBIcN> z`E~qUjm(rU)hyIeG$<7p@(#~`fgExAAC&yvIgUP|@)aIMBILwTxg%*AH0JvoP5UeU_hZ5{JB>BVoSN)am7UYjB zf3>`nJtl-x5%c%7=GXE+fblb|J7%fAfX660BpIkTpF@WE=^JO>>`X3H=Th;$acbwy zpW{i++&9ijR-A;ai?h)suq3~o_M7pD|H64HA>zT+f( z;Pm5LW`1wVbNG75`JsU?6fR@g@h8#9bwl_Dx?aAYWghi`@+RuPo$n1#y9Fujm_>RE$MhYM|)E=N_^;% z-$vfw;p4*sK10vb|4hZ6p|eV#8NMSLt;cun{Kj2%LY-Ie8*tQJ#aw)E>%RrR4K`Sg zZ%uFA4V!phAkKeK;5R6p?t2sVIWG30KbW$p=X~fheGt9@s0+Wr9fZ%2REgv5?3Tqj zuQlLX;u44ZZ*sB!p|j!1MfetZg7@*zOuqn&@jX7u_yhRWcvu)JuAz{P&j(crJewU35Vv=4lz?s(?v{a>Js4E_$<+Pi2Y4VA_p#J^!1 znF>EPY$JF`<3G2)5lL-F;48hbKXEAOWA1Z|q#x+P01- z@?0`%|JXhD6qU~q-doXc3W7}O3ov`~Z=K)j@^6y<75vt^9EQ@ljLw6I%@hMFmce;e zu*t0Gm~W=10d5qUS~i|F6E4fz@3y~q?ia|LbdL(1TX&y8CnQDD=fFGeTV_9r=k1{| z{DW)A7Zrjy`)h|6x9b1q@bJk2ehWBUepnc8&pVtYD-7Ro`1yq(&c?bQ8{sbwtmSj` zYVmxwBMuLK$m8-W4(C&e!tg&FEI}JWt(v12g&2m{j`wV`qq!}GFxYhrV z!L8ia44#oRqcZ=XS+DxHWK8j}z zAKOmq4Q|`XqXwT!ffDRDo6{6Tyi@2^AGP)40j~AkFSzQd^t%FF>7N#yc6hImJ81B$ z41UPq*8YbLKGo3U=Ia9aTYCNGk+`LwZ0M~WGJ=P8(EF|8TCOUg5A85Bz?D8DI#VCp zPjyTqZu@E0&|fZTM#~IdW$-ly<Sk;Mz6`>9|L^mXD5O#H%GQqaBhaZu#srxYcvN z!7cw64W5xSqn9Ne@_)tPwtn9bT*m*T>B~c z*#5X&_z<`KvD@HNy(o9=F}Q7qTLo8rw14S0K8oKjytKcoo=VSW?hJ}6z4mwNY5Sw? zr?x-pyE)QZ`@bOkiBI*S-0=;ATYCM*Ii$D!)Y@T!^dl{=mW%U12F0~p6@qJdmA*2- zmA=fgiBizl{_3eT_{EZDq-~h=N<;jY;d2QYNcd&=Oj0H$rk>`Jc7dM6ONF*vV$$o} zj8MklmXEaqah<{ISV2CQNnS=-Nr(C@3viXO(%|orG$YlG^JrUNDwnveuO*U~xUH{d zgIoJ=H+X?P{pvD#P{g$>SiUAJpA_UO6QYamyt(eSrMK1H-O-j`7^ff?%M~q>%dY?_ zSnyW7Kn&gkb;(k0Wz*(O>$_U8yiOLh*rjQBcJ*$^{ll;199-m=UlZonSGCpgfmvNM z94Iz*$WorRIy{XlfZ|tgHFR#8UB@*obiZiUbJ-#|DX}ZHRGZv_t5dD9a%`NYSQ>VB z*C|$4b%3N>=2P~$AOQV4q&HqLTOgxumFw=C#ib1l$+!FXK! zR0rdPbW-~Cu>sw;Al!yCV&S{|YynmNM8`QrnDYaW+dY3uTpMm%Y=~jn}9#ful08rSe*RrXDI(A zP$o~^Ldf#cB&wE{|4)!Vl+7$dDqoDtGIIVO=I2_D+S*JmoNg`0_4BK1Jn@;Y<;dt{ z67sY7<8dOa{>}q`3g7i9_^>a5FZ(psF_dC0$C%ypzkc%hbH01<#OjxRa2NI=%0^$~ zz85IN_NjPp{#N=dtYa99wH{;kjHFBVoPb|(tQ*(^#yc<`)%0U+2-8zaqkHdpKlWfi zzB24{@K#;P?qTdN;m@<9+#6{U)+St9hP^!SZuRW3Sf_w>7dQByp-z_Wb1(?M>z3~y zy)T*XDBfW|2ENnIfX_YiPs0cA#L@2gv$#;7IfeRMef_EVOe*zd%awHu)&~CJ1+C6+JY?C^B+b1uJI?Aqz`aYcMeXIp8Zf=F0FdSDjrzf3V_D=e|vT=Vm z>FhDldEYLn*!J}?(RW{85skiHGH%=S)TQ{F^qpShpFZyI9{ZGM_GUH!QL08Zu;KaKPcP%`Cr`m(qq54?WLW+So+cl>^X8E z6N!d2^0cRuPJ<#t6_RA+ z#FrJEpZP%lIJw4Xk2>s8-q7Rl- z9PKPgZJP@FVeF`Q9s2wTGPCodz8_s$(pUAN?8tQNCqcQ(ell@{dc6L8G+HvxuaOFM z*asb)eC#_=h5bz~0Nt6$K3bO@g?&a}U4b<_uSIP`>9e0{PL=)9FxFEIrN=*$hRs-J zu3zf81bg3b%@u5{)r?CdDuQxSrTiLkh9{XMV9ZQet z`|+2?>~1bOciVz!+;^s@Qs3Ewy5IN5sn2u0SQ+qN1N|`eI{8_;X3ucy-0%GJ*T-@V z*(h$~6jrUdwp z(Pth^R~&6mU%c%nbGJ<@|HXr!8A{KdQC?CuV|K|U=TD3#jxR46H~z<|^FTNG=){tV z1^=KCp zQ@4K&x(>tEucy!5v+%6v7L=q0Z=Al+jR&_coc!eNsWA^N;8>vjknQQg^tnf)H&3qq z5%T<9s`9$wtCsBk(bbOMxeI?gd*bp`_MNh+j>oy+aqiULj!uxrkFI6j@kcX1MO{E< zb9y}Lb^NxEmWkv8e~XCb}~ed`GJD0vmO z(ssWJ;pejlcs_uAG+1YTJ(*u?Hy!6i_nF|ncNF^~CEZVX-9+Sc>_=63iPGWB#xR^9b&@ z@s|T!8%nxYesOXi_Ba|n4ttkj-@Yn*+RM1?Ka|~3Rf=?J_P(kz#1pdft0uVf16Acd zb~F|4+I>}(h$n+)GU77u$@tjOOhdW?e5w%71kFsu6F^h#V@Fei^kmS~B3=NR1<`!! z=;Tr->Op-}H|j)vsT1W=rwO2;KBb~Rbwb+dM7h+7dQcze=;Tr->Pwv{mpV}o>H{4e z4RxZv(5Y-WXtIc>fo2I}>^I|Rmictm@?TxO%hsZ7D^ZS_DBEhp6;ie}K3%mIaVu!* z5!ZmG5pku^H2ZW_E8;DnX-B*OG+l@%3r)9AS8Wj+vEEp>tT$h`qh;?jzvS8*>y33A zVK1h4*1Y8E*QHm!9XkyCSkEpEeynSk z20zv{(yp#)57ss9!MZLJeynTQhIQ>R@T1+_b?~F@TpIjnJEWcMXcyX!cA@Pi2tV2m zHgdLe82HhCE)9OPp-Y1wZHP2&SoS#h^&nmjep?Zj3%_2Zr-9$2ihw}9Vkh$jobVWby;-y4d7-!V;t-*HWY z--u6Fo$zh&wk7kTJC-e+&BL5)=FF*)#JuZ#Vs5P<^YHy)^zVBSAfG!hr0!o8rMA2$ zb?JmDZtaQw25!cUB1M0 zFK(^he{=lC6=gr@@bN|X^A6`zr^4{2!^0m==qE+j-Kze;_$C0(0@6Bp5If&@!`ArIQ+5%{x2lZ ze<=a~rv#k!A1C)v0zM%@AHcDE{viSX1TvhDn$+ON1)Nk1z<1R0iIYQW1m`ZepztpZ}HazSN(Ma92Q*lSNxdZq5dZf zZr?@Y*`5pJf1c1VV!L7>e~VWNPWxvZg+J)K9_nxLnK)-q{qg(8g=)c7f5n-fA=H0~ z!R=ZMeMc1PzuNG(`qv8{>YsaOgzFinfj?yAo<)7GH24yOPc!&{!7aUCyY0(m@g>sb z$lvl=lYp!L#gKk^saJw{rO`+I5fbP3v>F~Y^j4q84KA+{T$cR_c#Yfw$=}j1Prw@u zUZKh$e$?Q0?ZXbiwf$(HS3d>XeiZLFeC+u1w85tux%&-&ZG*i0tl;Et@q>c1{aj)A zyeK%^uf<<6{5eielRQI)zr}|Ir#-Fy*w@(w;+G2#7x9LQK>JudO9c=0FBd%2ze4a( ze;w<%_C(jmP~LJL5Qy9Hx!$23x8q)y!EJx+HMrG3+Ss&lefxdU(hsk!ThelOQ)kyL zn_A$>r`sX7Ey+1;@@rbUT03Xgbv8H5nRi{?hL%kYt#us@vPNZ=ySA}$Ui<}Q!Zbed z+U)R3-jx%79Y7rQitv-cCjjE-K`xCS54kkOIAZ>`@F^4$Yf;><3UFH8(Xgp=LtDp2 z$1Z;cdgd(vW}DNzjc#VqqtG``{`#HmSeDWht^?t9v1qsgq_eYiE_}eO$L^i111#5o z+oHy((}DQZEL@}^tXewj8cw%NqZ{5?LT4@Av#O;%{Ib!1M!S?Dw18DcI@Q~_ZbNYD ze&-MiXUJKb$)sg?%pngU^QrRd{7N%~`L`f*h>>wa8}%fCP-8u~j$d4&0=C*(ga`StfqQvTme$X|K3&tZS}5DDe~1C*!!b3A$O z__(Ysxh9AB1Zf#GeoWF~d;GTKKi#|W1tQ-uHHT(9h#FkwDzr}W%XC8FNb~Q^AwHq? zukddme`ph48<5FCw-8bt{z}&Tayj}k@`tir78&eyZ4CA1eLT#McjL9Q=jL9GXHNHS ze0H@uI(QfF#xqVMcgV`|O4Oj;`=vm4LM_k@_;4?U*?@^g=J*me6N ze!~tu(s;K_KG3BiPH$8~f!^!z?pgI7gx)3KLD@&%g>KA`zk=`SpA^0+ls9u$;rH}m z*`~rSC7?^gPNlHZ4^jRk{X@H#fVb+OWcM_9E`bcS{kyUI!a%n%;B}_DEjpcUc-K$e zw*GJG_K?*Lyxxs&51*lKjsKgvH6-W;+o4Al2APWHK<)bqgyTkd9}dT*F`7~0@Sdx` zZIvv1+9$UJy==Zz^^gqNx$6l-aPIp5EpN^gF7bcsx6mHHYVA4Mk;M9z_U5LJ&TDObDFKB3ie{>wOZl`H9WZM`F-41 z6GPw)I?PLXUBnSo2IciSMBaM@@|ef*3i3RAnmn(_bt~uCY4ViIK&E+wyeNX7Cd?Io zax%Q|4L2~`r!k&lm&5JT36Foy;rb*d&+YddZl7xUYurP)@JlR@&vAIhpP1uS4!_(W zKKX*f!(JIhdmQc#1$mxuPdeh&)!)Xw965B9uVt>0^L+3x-B+B>j2VVV;2^iS#e8^`YbuJmIZecldA z&xw@v8=>^v+pxquC02T_54U^QEB!Yep0~gDhre~WGX_$H`vboFcUyV>j+q?d-c|8Z zvcHGCoeTLC*RSVOT)!SKu3wKA*RRLzQ*I(r^gE@6?-D#3MgJ)Q=bkV+CMqrCaTpik z@bePr|0C)*j-JCy9KHb;&NELhkBRURhv&xu#s9$J`Ef?^zjSzhJW(9}=wju5I6?nE zOrTHl50Qb~a?#mF@5jV84(FbzarmPNcxQq>WeN5?nt%@`@Tp0#1HT`Q)3YG~-pe?%TqbGa*BN|`!L=6~v_jdf$IS+B$-`9xF#O?UmZSagK*P{lvYOM1L22h*!A5Rc=qJxJ*qnjCX|* zSgg@q@k$gqxln~*I<6WBw~;y(J+E$o5= zFBzS&HsH2i2_%J#!cDM}xSc7TDizlTw7F6_(LITbwmt(gZ{jl`^p-V**0kEyaM>4A zlvCd)es`|89KPkn+RX1}#%I4WAmm>+>a_w z9g(@&FQSQ~@Ir;a8$ai5MK)pbyKK32Hig?V$=OD1$JMsp%Xdmi_iO%m?(sYarAT1y zaCl^&FGoxk)OgWioio~d>6Bbu139%|*EF~m=- z8a5F49Ad?Fj1>nR>{6olnCJ5~Oz1=PjsI6i>uAy1b@eh_b${JdwfoI1bP`O?e4 z;^e;|`Rs2SLZPg`ior;?UF6sE1cCBt%256RU~%$CfHUa)+@BT8--ipKPNY31@-t+P zK>2(M9Lhgg5--1B@~NH3gCUglHu8rU>B`UNG5UtB7dCxdU?dJ`KN&w-v)&8cL0l%f9wp)|NF=vC%;?d+xjOI z%3qOC{w@v{2&%t7E0*=agz}eF_#B#_<>%XtQ2r-Tc$Qzp`Aj&fzoTP0#3wYr!dsC! zuKXF1uipevKHn;6e%0&O66E&?)6>c4w*_(X+vQb`mCv`Np?vtth%LYFk$yV)`x4|2 z$^v{VpKnh>`9~Av*UJs~jGOqmPVqhzuzb`}iU&c)VEQ;1Re7P9PYub{|RYfg`bV$oRq=-p(%~97%{!EY|WczXC$N!>G zFR#?q{?kBlIsP=iw%>BtFO*GYYvh&ffYc+^sEWzYwV5^7Wpd$kYcsE#Q!QSO&U|g= zAO~IvSr=zf7H634ICXn1AwF&Tod>?@d>ReIhY>~$__!&7kDD^2qa7KnS$pS!=bYby zcOLjN_%cYrr$GsP8>Hb2snq4;o>s@<no5;TVv$lo#$9GbVM%53py_Yw1cStFvU%wjCvxY-|3-Z@%<3#J#^b`L(%N zf608WfsbE<>GRRY4D(XQ<13axpT*E?5%gQQ+w1%nIh{wbw^OL|#WS;`Cri>t%iyQt zr_h~iRH^?6)>%^b`=X1#(+j!vC6(Kr#NVrsm4?2QR|)?iQ_`0l9S6S`R`w{?om$x^ zA4y>kuo(YQi=)1>{_Fwnb@e7>V_zTm6N>h4xl0`9q^!s(tLO^u{9;6qB1$aK@Z8BKza;!I~KLH z+AeHtORg{IFL%+jrH%gK=5D0c(#y8?(=F;>8=w`t_WMPDsg+ii|Mxp{UC(_zbI+XT z0kL3XKIc3$_jj(ju4`WIx#yml`&c&5C_1eEC6l*M3;%vGSw-)Oo|O?2*aM*(TO`f7I=; zQua%mubY~h*Yso`yW?i)(v9-Ge;Mo1>vJs1b0_NF=jBwV*V?9`-@K=3=yP8{nSU4m z>&C6S1GY83uwhu`5wBxj*I{`hUoWpaygx&)u5sGES%Xj_+NTYa(jj(^ge_KyU^4=Y zyt)Nrzn4uN_}W2tH{Hd)me(tZ!ENFX&Y+oQ&#L*<@plZm`^39AgkZnBku-3(@TWlQ zDamsi?hBKhe(^?$*7q7IMT-UXnor~2=cuXn%19DBM%e>;cs^I`JM`m zdf4H1HrU79=Wsjg>+%0|d65B+GJ*fJqYp=RS@v~@2QSv3_h;tFgWvG^yrY)~n!)|| zmBqbSuWI|asj#_j=g_W`hfb9kO#*It3q z{r>H(%In3Kfd6eadzNbP;{DPA0`^s*yAD7MzchirBY~fpz^_7ku;1ykzUjKqu1+*| z7!-fl(dYM_;;(V^`F*Fj=jOjB9ibQS`$?F4IV`Ru+!MlnQ=O%^xW<$IbiIIY=`F4# zq_=B2mfqreKXGq~-P3ZlFe1*fRkv0GAwJFEoUc*WB>~cpRuKNW1irxFdM}z}ZV!W9 zYip56uIU$hUGz1;Q}kua*zifww;mw=@oB3 zciHmUbFUY5s;eC)8-1=Ia4Eyn+O@$s*T&X3W_91hPmc37);>AA6%R)naE>m8IOFm? zG%nvm4p+ovilQ15F>A#z3ZG7 zR4cBSPwkKOxx(+tWAZQe$qV0}g|hBT$R9MoGqCdc)DGnjLHWkyYd=~q|2%Uh)QOUD zR<(0hK1TTOW|A1CB*i^z|yo%BF9G&UOjL_JIJOC4D}0WxHNCdKUm$%b zn@RXh2wkr*ry6|E3e$7#p<`Ti>7fz35aay%MB{4@+sunW1v=pAhIh>d>_VIcd*+9O zT?ptg;y~;|fc`_FT?k-)O~Tu!X1Jcs3KSGyhimLYeC4-c7XrEtuV>!?b{Bppb|IkK zoO-(buIxfUxBD8@?WkP{KR3$WKwUUneAF(4mW=n=hg+A=7J5|scBKiQ3-U&5?7D zI+j_<_`p5`<2s1Lwe#oq&>qAFjNxKyjURD0Y;o-bXRE;FYg)Xb^J79g3+(Z?J9<0Y z>+!cZ+zj44ob7jG%CcPL-X4b!&jAVXpq1hqLYCd&aQ9P_=2{1Zy<3*O$KhcwgmVcU z9`-)i>+0~Z*U7TqI6d>VIu-s4hv#c@ivNehi))ZSad>gfbqhLPyLPDU`}JUG*8*3H zfHCNpWA-4{IQm?!(m(6?=jEXMuXOZzFR%11j(?snrC;pm^Kwx7&pSLX{|&gN`zHRa z&2)D^x)|1OE>|GuHM6@wG*4F8h^pV8>|V)S23(Bq7) zDE+Sz`YUg)xxQK22tDmrxHinW26ei=sCEYwA0>fs?Y6_eD9p{}g)=V>$)6^9|3KXCfzW<{xE*b3KS2Bfqt8?c6F+JX0&~(wPIOR!;bUz|C)=jDvv&Z;%kkTU0B zj2EOxY8f?Z$)QoYh$#nO>DnNT)djOzEvI4m)}!&oT93+?rlGRMX$tD7m4{g`!ODZL zIqr+}J1u89AYtFZ6GwM6_KcapoqxKc5jz3hmPY&_INtAWjO|49Ed8d%bo_zuMGVh+ zIdoeSX}=g#2L(4(HYTsee1moJSg1n#5h50@KUJy}wE>8$ahKt$ukfF{C~rIRZRYRNvGvR9(18B?pX~n(zQhF8F02Z zlz$emnEaP&&!HT#XTVj5Q2yU1^53XEhc6`ZzcG@3u5N_#=O^;ts6B@+q>q*V)=2(& zON8>9a8ty}zfpS*`x5z|DN7;RenvtzS2aTUw*iaEZ`7W{N0C03|0N>d-v5L``J)o~ zZ`7W{2&9k6cL)1Gp3Q%3Pa^j;GXLzGtZUSs!(t?k$sZ~cQ`VjUR|UfSUz(8LD@=D= zrA&H-Cne-}%Tk+_AKR07Z$f^f_8jg^$lu(cJ%=X~@*B11@Xdt$7O8lff4(1v<$og{ z3Sg16=V0d;SmvaqQ=ji=47WKn|M^o{61*peTu9TY|2=8{0aKwxj6(53=X53eS|-9;>gp z2SL8~L7Uc>9A4aGwb9}Eo(QGC-{E#P*T>x9a64=3aqjD{Jt5lT-*WWf$S%vi;_%?b z8cF^ihv$2FJeMr{jKk%DrXc+F4lnMdYIb;WFV%lLJNc~XjZq!on! zN5EtD9R3t?WA+^W)zRnmqR;M29DQCdihlw!?4GPmBKtV-iP>{_#L?&Zx<%-@r`7J^ za`yqSA3HqH?-N2#@Aq$SR9-Kp7*Gy*z0~5x`{e=<46;NLUXZ}2Ch&J9aE|?A{I5WJ zh}m!Pm#Zr9cnZ>%arnPH|M1 z+i`$FzZwVf8ppkR#13}NWGWK(l|FoaVTz>2O-AAnBSE8f9PUZTzg(o$lYd7-exr6A zUWxLJ<$q>_@?je?n*T=aIJ_evU!RBd^8dDk{3FGV!^ct1vGUjFzK++WItpdI3K6mP z*Qgzb&nM(JYRBQT3HgoMark~h{#F(W+!Nlb{)Tyd8ZjZ}h~-tTO;WbPkFA+-+!HJR zM(sGfn2_J79fuo4e%J>#YR6##(#P`Os2vBEGxHzHZ`6*%;|ckV+HvTR`#+T5s2zv% z68C?jb{uX^$nO<}^gUXdQFYE-uWw1nZ`6*%2f>KtukBR%HfqOVq|~3LQ@>F=4z$BS z`N&3%Yt)WII}*p*U!!&$XvZm(O-1}Sds!oP9454nFIQbX8`5Jh7&pP2oNj#0VOo1$ zG!+-DWEY{-&Vb!#Tn_$e^RUtM_pSJc2Yv-R%6qPC5}VH%&D^Y|-DLWeri{h4x)pY( zGki1OBsLB3y~%^Uuti*gZGk5Ij|AUinrJs+2<-k2d+?{Qnea2%awZRy)!<(NW89uA zCqZ6i@4gj}iyh~GguUrfjqGwD)7q8T4w>EWsO(ky3@!aDd$ZET-#u6x4Xt7Wpj7Ui zUPk!V()y)4p)2(cdG1^Bj}JVLvf9_2t)Y!%Pjk|P&m%v`WLkR_;kDx#*s5qf(Y1@UEQ8ip!Inq042F%iypVP^{>6s$p=mo+ z+Z57%8f`lhgR(saoO`EoMDGpGtTdiK;^K$6rY*HMcUbBzt<@%>a+gG~0;S5^B( z+JqnSU`xsOjlJkkJ>Qei|JK@B-?!qcuAjnvvljm~_G?N5O`q_}yiW*uY)4;2K3ke+ zeK&kAhGV4gxtq_%LONXdPK;+yjng?k1@l>3kA$lv;k(!XO(=f2N)oQ7)U#`HG{3b4 zdbECP%j0N!t}TzF_it@^{I>h6hV9mL&0B_j^Z0egyt;sVLbG)CqAnV5W*k3gFo${i zQ$Vx%H{vYNY{~2{oOgO%w&?u}fn@$<$F6e`G%oBvwSDXtr=$laf^8RI*N!#%{Gh#jI{ z;&ARY*w`VWygOY?zBiZrHVU?xe!!1uo|JeUPcY51g7wl5bYvPmvqa}(m}aO9XnGNj zrRk7(n?~m~Q)xJ#MrYID-Q2le{zi0LA4#*RPMW8KG^4TvsIyT>ndct?TH*$%f~K6{cgUB1H6GQQbxc(HeBb$D^_M#dA%Pjk%!^2T~mc7s6 z;pjfg-sSLouaF9v>hOF|km46OytoIdzr$sdyAs2H2vr!f4>bvKcJETJq`4Fio~A4> zPrZk~?&$OKSNby@eO_Nm|FEOa>sRS_Ieqf-S9(5#o6Kn>O3(8pt=%Z?liAlbnKM#c zzYFXej(=Xx%KvIdpVy=EU+(xLkvQf58(iDHS~`8nwbZ68udmIL?hQ_EUSHZT-|hJ4 z?aK8_NYe%SlCeNh0Uh0Ot~~SmMfG2UxF&Z3rX$OGz2|<9?h*5aaUgrdn4-Dn3wh7O z<9R#JQPQ{C%WAmUwA(6(Ky%HhIC)HSjfEqN7yEO@Hk)>$)V=6}`AiSp`UL*x37pL? z#^(Y=#PGdnpE3M{34B&UF4tUQdJp<+ z3TL~e<6gq~KIncq#-<~Fy$`zIkrJkTu{Rr>V^})c7qhrNf5_)8p2YojN|-qJtE$to z4CU(cB$TUqhH_OO^0`cz!(Sj_;+GqIiG)M`%LBYau6x7}<=ztDO21NY%6+SZ>8&&P z6$ZEE@NR=^enUOWLKEuKCOF%}RKrK>o%lNOlU} z3_erB#Q(tHTAsvhef0`WSPojwiYu>GLa%zNh}#2P>DLNQxwgJOZE#y(%8zm{)eHFj zBuu#$*YYR-d4^ugnfPz>zEgerY7g%_LiD`u2+{M}BSg>c!&uLD(Jj1RRA=Jaw~$o( z2jXut`Fc{qZ2#{u_|p<5z3qRt39kK&Ci!82>xg8#;9>vsY=A5M&jqJk+yA_1aNGa1 z2wnnxKHACWvWRP0k#v-yze>XNIt|tyIuKfC@OMg>-UfqDF!*MJ+u5P52DkOQ&EQuXJ}n0SU6tn>jXvE*p93w=3k{zm zu{^Ia`gfRec(1{y8a&lLFEaEmr97=If#2uyy!a56XT|XOeJ;<5rW{^M`{63eb zzKgIpUP^gRISk5ERp9fH@7LNVj*9VhHExPAV% zKtDR_X`iP$FHYP(UoJHC_IaUpY)EhW&n1Sw;w1T>l?I<^@J}1u-tTJfi~O}tm~5M& z*D@#mbA#LYqHM|~SGn&I7k72h{Nw!PHy@zMQf_PDXN5&WqKx5ZjPV$J7TA%9@}D{; zlbzq5NC%c<6H!HTrqr%6W2Vz5UNL3XlBM%+oHgg><;+u0cFFYV6qLoRQu0$zY}y#( z&gzbRlnBft*R&Z|z7!j-(g&yoS6n9Sw~{dN9rIXczIB4{&bZ}GKI_KU)3Y3Z^ws=` zc$~BFI@bMqz@1+|*8SoK6wdIgG5n0`LehZvJ=d$mtERMKoKULBxy<8S#(Uwk3{_co;6m>y9*FeCcP<}d&?nRt+p)AfNh8XEvUgJ}(_MRI% zvMMz{n*V>`x$k+Xdl>aLHhw|GK`R@f^x`E!S{)Vz%pUD5T*ZCy+{zdsG z;6Id4JeGg`7P=Sl)`jx?-lvB{htIpl>gU>{0{_9r}gKrin8ua>kPmRd` z8(=Z{k2aY9`;b1C|0g5)XO|S_zcrEn3x%oHACfv3$~p}|h>@_f?8vL_hxN}}GL-)~ zuvq?Q2-9A~TNlduM?{7g>3hoj^&flEr+gMkD1Ran$K*dPOzY*J zk2av!49FNysmcEXqGSB7YQ~b6`;z1NVxe_2iF0`dIld zVP(VF{BuYh=KrdM{3RSL!PS$0MMD0TGkkh0pKH9K{69*_@01TM>&d@4A%D=QqI~Y2 z3+2&5wjSbG`pYy_@{DEj^ls}Hd##LnC^AUqFNLo7e-zoh^ zc>ipb^c5xa$*S_@GMk?2KSq0s4MNEKhx5^){+-}Y5p6=JUW=AZNBnqK?W|3dme1e0Z( z2RSb*OFO3CQ}G|BfBm@gCR}h{x$5fK@|ZAgyf@`hZrql~C{-5nEBNPcn=i@LxNx=@ z;2(5&--<6g`y0DphoY1WF{$e#$wOz5AP*pMzbk z8P7L2J;?9fe+6DIz=p)h;CFL&$~XDlduP+o+wR5x&gPRJY(A!R75NWsKIOJy&8I%s zfB*g&;dkX;w*Ri&+TLh_jSaQG(cRR%ru*I5UfSTG%?*BozHh~s9{A05r3YS^)%3ux z-`NcNBK=(cTGm(gK9BG6f9-TE;XD28!6DEO&$vy`;=B6o(2L*J?}XiwXYl=e2D>7s z;oJM}|Gwra^z)lu0L`h{hUvfg<2iq~3;Ah6SkoMX{4mY4_;#Q9TGsUH+rHa$>TOKB z7XGUL-v5R3AcyI!ET*f% zZ5sN`dzywm_XV`O@8W;mxOI2TKz=q1t32X$thI+=+uZ)geR;pQxCwb`M&A0N%#T5t zAM46|?y=PKJ<#)B(X+|5`(Gm;Ecc)hTh98ytIsN(dg7hO zWoxFES_YhT`VU?`s?;+2gUzQsx8Z%~b=>>n{u$rjzyFjySH2l}y99Zhg1kdyOy<;44jWz~(k zx=QYwpP?D?=U-4_q`i9JYp1#IlaKvm%U=#yH}F$AEp?kJgC3`2fv@LEeU=E_Ao`sHU)ve-{Hqi1 z9DMi5cQGH-VZG2lif~{0GCJm(Fz|_edwZQ5jLHOvN%+6rK&jOrKKM@#A5p*`b-299 znAp!boNtr0Zmz>+;BBIQ==6~Rox#89a9L6Mu*2nr)Zjf1mlrjIFLb!Pz!==0$;DaVTKCVc+&DX1 z>mGABXH9F}7ah*o%vv|!;hbfxb&ufEe$(pi4`55t{+hD999+8v&hOQmjQx1MH%kuB z%g41_&~uL7ejDrVO<+HAc&@+p3Dn$v6YBZ{U}re~oTc>6-J1yh26!oJRk%7Q^BBsx zWWEjLeMR?Phv)59@eL@SlCglU_#Zetzh4v|>iCTCO!2EYfurA$`eHfqzacI5SD!%E z_)HAlYydI*h6Fw>f!~_IKZAB2;}1BBe+v;OW_SS>H&FafpxvJ6R=Yf)__+?x`zysc zhjXG^ovNjOt;3N>oYL=dc-|i>u5|o1fqjCyeiGm}2o~3P(%U_Fmfqr)-tNt_^cJ`D zcF&%rx45P6&tul@H-Q@!0!BqbMyj!i-h@{v7-XLCy0+R z^cp0d;=?&lbuWcan=*m_QuuHVRNYJAW9KVh3ZL^-8TctarwI-BcFMG}L)r{(M}t!g zuFrNtGYxKgU2SjVKU!$$^-7qy9X+l!xUKh%2Dj~Jo55}S*<*0qPRfu+N4c6uUUOVT zN8HvUZDJ^H>&5PswdJfETFvG?IU+)~H*t$4Ep#Ob<}O}xGt73$o=$F=UBr!edh!MV z?2fCs=2ko#?|0W(#P6q5B(_nsR!d6MQ#6*&TQJ*gFdb7%L#g#>+%~{^L|)x`R6Yw0 zP>ro>wP^A3d1EfU;_c@yTRwa4_2G6n-HnXenDzcebGzrwy?$Pot(W8$u{m>vEZljC zVl#W=8afZ8x>L>-bI7pH9y-&AlFD*Bou><#vvRmI&Frx=yX(xpI^9v%fH=RoE-uf; zal`VMK6J(&yf_or44l@wGY^~UbWa|FvKy}fRl#X&T1aHi9=H4*>P>oFBg{u(zOUhL zhYS$@PY@~HQI+s52oaMd-6~$GhH3*k-cj@v$nPutKqVAEOn)NMhZso*$t$n+vFwAH z6&(i*B@x`$AUr1javxoHkJ49=I3~XmkQttkL7=TL_XgRLirz0$Y0W+{8b70Pe$Z()+Cg_EK&YCpHQ#-7bVJH2Ryd@ zadsw@Pb^mct0e!U#8)pYYw`;*(zXrqDYTux9+xbVQ2zIT#pG}F$^D$Egz1H{{&xf; z-PDMD&enwTIcAEKWEQE`DMt7$!|luqI<%7)!$G)-qo< z0>$KSZczRoB;*e|(WzgxPsH*+JtF@L3HeVpD1T!@{>+GczDI}o|Eom%+tr}_PbS*m z`iOk?)uH_RfwBDcK0(ks8BpG%*W#0wPW{^v(6Ep3zxRX#Qi%*{@0Ik(Mvc=wid%yO zs=pH7iTGIi+a>v*Ch1xKoHx+)+Wy`H!J%yO?iRugk`JFX>EA>4F=R1J9RT7{+wohAU@K-4@{0#;lYVgel=NMnzRtb>5mN}tq2A5%)LrxQ% zbKo{#9R|00`cGb$a|W|$Kf%F>>ahkJ+=QQxdH)hla_4}WM+i(AELC1_}3 znW&1AkM(0TGIt(}nu9OKub*}8{6(`DWMhJ9^EACbHbmx7tDl)W`rymzn!K1P@}4o6 zO2;?QC?@zfFQkuYR`rEizzP;+{u2f7}K&?(MiD z7LIQ!HB|XUI8Nfd-&cD3JR_GdJ^RWKBi#!EY6-EgVm@0K38#IgTDosjwj@_S~`ZZtBaeI@9Kh2+@3?%Y&OD8A~ia0}>S`Cly!QuD?9 z$L3nEMEX!Rd2730C6UxImY(lA=N-WJ6z8>_FK9kbUa; z`JB&VUo*dH;I|Qc?*Yx)?qe%^%Xs%$bzio(dq8FHs+~MTbt3jm>o*90k3H0pz54F# z(0so%_eyiW_*U$d{vP(WZ^Itv?>8N@<_As3t$7XhNxz714Y=Ri@73qofI}WU4*RBc zzy42}PsLfQuXZ{uYdQ^kr(Yv`r(bj1RP3EzhP~5F|2TL*0p4E)@2`P3dH6E{hq&(@ zm?!Snw|n?sTRGLN{%O-?eSd=ierb0Ez6%XPZuB14aUI7p=SVIq^n-JQ z7->DY9S!>U zw>bK+M}?hshZo2DS_e(w zUo!jFw7!_;K;GRveNlgp7xnjev7G-55o|Z1dk26R&fdW-A(4si`@8v1+}NWDYZ)}?t3-yKv>z9ZOH+9pDX zTmI7wZu$2bTxB_E;k<=&m!!AH_}7Vgn`l5)*hSN0chTfKV1mJ}-#1Vl%huf^A|rXf zxyLCd!{OuxhuWcVbd!VUBdpy!RQFBsfif&0b&Y}5BR6F38RParc&kK*X2|Tmr6~3; zc$bzj$CapW>w-&XkDu7Vj+wV2ZC~lb`%UjJ)#-5rLX2^{1=M!Sdy)CnF_-pFY~wNc zmjkD(xZnIIltq3aM(T1fW~Thun3;oznEczx1Wx;7e^r!qKO$oCJ4C+Ce{9Tr9@59; zcM^m<$9vV^P}Ug4gcymtBl&0V9hU#EfKgP~23L!GttXH;r|I>2Hv%#Fy&`|A5VHJZ zW8Uk4Q4}|&e1su!&R>^;- zPv)LQ?4LEgmMhOD3S~3Nb^!;8PaXMw8m8wv!};UORab9)WNcge1pg6s zM&ez90AVrw+IK7*oLJqdc0pvN=K`PvNAgnFYAYV@9T zOs@A9=-mV!{++?U1BH6TbVE_C#s6yR0e=m3xmEa<%DvOe$MsIXwX}ZePUMTUAqn$v*??|vO#iUlcQ#P&&EPvl%Kkvho$Fhw8`riZ4-M%y9QkH`lWl_E$%5y~ zgVgO-)eU?ORJS<|>eh9Ty3J1LhVpRz5PfywC|vJ-jYqqxabX`G_Dj+wRnvrHhH!L0 zpi1cj;V3^G8`$wGQ`m88z{*{+PqXf5er;(Kp9@Fpx3+u^xAxrd`Qr1t=FP_Y2EAEg z%sM;F=Y?4EgQWONADEt%Zh2klH3Nsa^Qd(!vy$<_JP_kLBwc$ozTe%)-qqsL&XBkb z)wrg$KGw@yF7YaZ@5ieIi^-#oju(8J=FvK7ekk!a&F(sBbnl*~5%Plf33SA+}hqDp~f7!|iN`7r)KncGkz^PdVJq z;&}Yq4!0}G9^Z%uYm=FM(fWNoqU|}oD?NGk8WfHFMqKIt)Y0d1mHsKmKQ9NRzrxYy z<*f9-cJz6^lzyS3&&xsS|JLDo`Ro1gHHYW*UpqYSw-vuJQC}zG79AwAtaopM{`myHBatuV%{lBh z8v)v{a8CV9gX^3$=hQ7eN@&Puw4v`X_!NU*ZE&R_WcA_thB}oS>QfeiP@guzxsOS8 zBV_p>s{EcMvglPL%yQs-oVsoa5Ix_8GNR}wJj6U`-t=$gQ?T@PkgL`@K;Hgc-i3V4Bl?=4FROFkh zi+dTInnKIsYLwQOU8B^#Aam+i;RJ`c#Ynir`e3(v2W3~?ja`SI+0-3tVJzM{BrMfB zB)%}~5cx7RM2Qme``KlaIZq~J!OmN{bn#NZmp>>7e;JL!uJ3uX7s{UVn6$q3q^snv zd2`->ooDZMoX=l2Yw7zJEt-cBe?NW8RTQ z&A;@FaVMy`gVEeMXc0>-NsitIOETIugBt59Fb|{FRS*>GD%fw7KFI8l9bxv5m^Z)_ zLBUOxkArT)JcM=9{a2yA2oXEBiugb!xYkREt8r6t)mQqJHPpp@7JSDEc{0fhGIh9G z(vO7CeCjw{$2D7k#pFK$oX)-@@H&+Br3gm4Rr2E8$qP8jXHkao9{?7U{{nEj4c@E% zhVnm+m=GiJE|Fg*b2!T9Y;Y)_wo_yB*GoDrC-R^RWntfT0V7=tH>$vCddlZ)cPO88 zC^7k)MgB^}TNlbF-w-2xS>)ULkL^8rFp>WYfzzq}{;DYJ{zU#aM)J>D?lAw?0gL5- zhRCm%|2aq>%m3C${&`D;@^?c{Ouo0ZTR;ELCGtO0rsB2ySWjHN2<5K=7L!lC=<4PF z!=Q=fe~HMq^-n02KLnjZO#X6q7I3P+zbeWa1iF}folw*C%s*ElLir0JobpASipf?B zu)B)*fTmZt8;N7`hss2mey>CMoR!w}s@KGX{9a*NPyU4o`Q5VQV&!u+GnD_SgnYFP zQcwQcg#69&v8t8N+4oTXKPBXM$^)&Q{KpdVTcm)ke7*;U^52Vx0$9|{f#EWn#?Bf} z-xvLrr)8LF==S5E;Wl0vce|v&$6yRUro6t^}UT#-~vo=Xz z4w#2*Cm_8vwQ5=hX3EmHmj6g#!||`_wf%k#i9^{;KaCF?IBQ#C6t2Vc+&ej;y_O^?U$!^$?Wixn&%?{Z|iG5syci_wnVvx0VJHi^raOpLE zKi=~zc#g~!50tS-4f3jImK?~r7o%e5UdWjj{C>-y6?1a+yp{0Gi{e=^{=2XIteE=e zT^v0tru5)%^Q@SCD;~w!DJ6VA*Mxnw&2B&N$v7A3$2b=W`?%#?B%Y5l%$+&Zlb!s{ z&ZbjtyA}UC(I(g?|Fh}j+xFwEn#95_sx2cu%-*@Id$SyTg1R)*vYXy9bMy z_K5=}o|vxvS*#-Q7Ml@Z%*9_96NOzW%HbJ`4KEbH(X6W8iBm_N)Lkp0DX^)DsT3v%Ws&5r^B^U60egrym{qYyIWex;Qe_?*f7sb5Q=Pqn8K2 zGJ*dMhsy)e;9qulanIEm4lnM>X?1vUPtIu$=jguH(Y8wMmvcV;Z{gX!Rjv&I<5;1| z?Co)F0Ql36UIz3CYrACowR^E#I|ar$341<G&%c(J}bUaT*V7wgO8#rpDivA#TBtS^t}<;-h!={;0= zIVdgt13A~?D$vL7*HsC;D}ld1fp;YE5efWq)O$>y8-d5ZL;XXvhZD{ByV|dQ!_nvU zs5ti~#m=38I?i!V2z67}PXgTIVR4NoJ^Ms;mfqqTPx{mK0=}iUxRQ|GuJu@Yi?f{R z!aXNbJzT)`nG^1f=`{3qkIK~sKU2c=)+X>SgWEkP>k{|^gO8Fhy^4gX=UEcA9`_j7 zwY(OIBwp<8(bx1rU$%@5pA`Sr1Ee2r=ueX{*Yd0_s5XP=yll@>x7CpbB=)%R#@s=c2e&q~`q{z=fe2z%K*UKz`9jq5PZZn8klxx~Ll0PZCkG ztoxWntst{ro4RCPLnRBo)xL7tC0AT^)#bD1E|@oa(Xx4=9U>zp5Mu>p4AR@KJXUKI(2nf4`jLDXkGKC(TACKS%d@y>?F2 z;J%6El8;*4ueT;dT4yL|ob`mLPFo z>Gip(0`>W$*ViL)h%s&&COzo1gjx}1KDB=y%1F32ujVCG1B!$ ztM6Ucll|6R-kTs`?;M&elhw@2i2G!)8byNStP zLg8>d-mCtGvY0l+NIXb}%ALG`YsG(T4d?;jG5Ncg2u`0%{;DYJ(};-4Un25t`{OMY z=KpzMG5NHKN%w^Js=uME|BILqBk}r({MZ^0_x#4>ccNXol-ZM85hd>I^sf%HSrf zeFBMN^7Y2C^&eXUdbiyFp?qBf((+Szq5QWe?*BHqajpE=8qmE7`5Q!`dh+i~$nT8E zkF5dyJW>8z8kA3)va#}C9g!bf1NtizEbCv(Ny~Yg$gj7C!Zk3a58X{Mr9c$Y&X)8j z#v0cn=|=?#!ur1&@i9?bB>&rlYb$(?w>7=i>i`H2Wi!conX=Gx0;mSxyTbHXLm4~H z8eHZ~k4z_!G2S=WHAi7jG# zVsOI##4%;scR0z}p!k{CV^|KmcEqd=isum*Vh!1#fIcH&`$6r4Tiw-m1}Y-AK>_*? z85<7NzX{l(utD(^;aftU%XMr})arSRvq3?-4J_|1*dn9)Xc++?tl=%qv%dRM)3;(R zstJ0ktqHY(vA@}$PhVYgn4GQIgY_^i%knGpvZRjGw-=A|**hzoB3xVPSB&rMpKWSs zsqAI`b{&`P?cY*)WLPQtOC8Kw8lbF&>M?-Fv)mx2&7eD|@G(m!boY zQHU!I?wyWj`{0S7#~35Zv(!K5*?LmdUdP%UXwP$}S00%I`-t0REvB=?dL4rGL%-J6 z+5Ex_q7wEJ>tqRe*;$;*7lz`V@2H~YNrTQRAc z@1}v3y*to`5$D<}+hFF+4rfI0jbEwHPC=f&U_v>mj^!7b>M$hRAP9m}H|_eaaV z$xn5kk?mz2vyQBuq``kpTmH&`JfF60eNcFY^s{j$0{LkBw)Ss`$I6F1@L#Y`>i7ix z{-g%`eYJn1egA>>`xAq{iMD2-PmK+nn0_A$^+O#D7P~;sE)v4Di*(5J13!BPh3%7L z`aKrv2VDmHyt(r)N(diP{lM=)^cz0Hw;%TP$>+MUA#||yd#kNqu_e?<{mwZ6{kkCI zVD+1w(2rv^>-gSposQuY3&(%qyGS^`l%b&}FUNPRidG?+8mL~&R8#d@UfrtK z$5%t~z|s8Hmdnxltu2qE?YXu*j^4kuD6@% z)v*k0EB@(T!@hr0FL&SxgQmU`9&3<_A#HJ%dHC*q+4U zElhHDA>E5^K!0ulf6n2rFW^6L_}Bveb%$eiDR8$qe0+f7oH>VIP{7~q@Qwn0nZvC` z4NubH@Cys{r@8#Tseq4hcsPo~T(rZBz0N3y7x$($Ih?ByweFWrAG_Pd$8UGI-PPjp ze{s0oz2fl?IlQ%&Ij(MS_=p1D>G0DF_>~Snvw*+J;h0ej+Ja-gJ2QHkM^KIh?D9weDJn7xxmr-Qiqqt94Tx&Q-8l*M$dJQ)CY&TXK{8a>>)L zl4P$!l{cB)SbC3r&C#DJRJk3Pt&V@5FQxxuN1wMV<^La!KCc(0zu(d4^{DiJAzFYWL9RIvMxaS7q{>9;W zdrJa%`p+clWp{%9;|cl`67;XZ81@8r zs<*$xcFT?Syu*4;L7J|!9%&*0$l003r@MVz3n!*)n||3p*}AJ zxblBd@K7HNo}E)%=}!|pEC-!W3FY$aAUeh8_{(fmz+d3ZpK*w<4H3`&Q0aAUCM<_3 zMjw0M%{2JilsSBzuOXlJ8vGVRe}%zsPvEN!Zp(kI;F@1$#XX#Kifeh^DY)j>Q(Z$tZ`;g+Q5BEmWh5GA!l;TS7seL(It{3q8 zNtpB&KTUAvcY&dQDgD^H4WA1Q|Ct7VDgBt`zsm5p<$Sx~TAnI;b%5V3*ZO?X@>KeD z5>Q;}*9#uD6YVF7+jgS;67j2*IegpCTxsxupra%Gbw22RFE_YtZ%Yhr%VD|TVL9{! z_~%51-lv*h72PZJiYxspBiHtydOwEcp!Xedt0(6x=t4d9epFn`|Dix1pBm4p09X3W zf>W;5bF0B^eLZP#Th1zn`f#pBoxQ&-K2QiK*N)!?3$FQ6K0_s-<*c~gkK{8$LHHdK zCce<%+Qx`?8(igv?fC-3NADNnT6c^dW#}gu zdZi(~j=>o{)zH7u(9bk@r@{4}BA;0X?=keV4Zh0Y`b;FW&fwQdnBE41Uu5vj27i;m zw;J5O?`$)8#n87He4@dJ8oa~cqYQqym8Tv1tTTH4uF7+=DYqlBJaufwY#a{ddC3u8 zo^Lk#9}eYtsnO@R**>o~a=RtW{*!BD>UtzVJk@_rRbu#uLwR0i^f?mC^DRdI-&J|4 z3aod|OWY)YeeMwdBf+PMukwDn(fPS@HZw>HI$hE$gDSsU+426DliraS> zi>p4N{;E%?zveg8U*)bRbGT6MX&!bqFzmQU#~8GY(IGVSW*U0?99OxdSD7STXXx#? zXtTjp7NKt$+>TqcJjvgVTlz_P61U@)kp`~_PkJ2&pJ?!z2DjsZ1qQdz<=YKzpLhCx zN`35eXN#e?{rS@dxBcoKgWLY9rO7Kz{z;8c7ork7FR;13Qgj;#F6Soi*cK(=MSBQIq(z0D~Q_ z-mJ@&G;K0%;`E7cowZ=`+}X?L&6>M-(X!=P)l7>sKq6*UuA8@L-qQIn0YetnatPII z?2HFzA%x`q;0Gg~yKR@v|G>Oi%QJ&=f3KiL`y);_FhhybGEIIqLz?vb_C_h&+Zv^W zc(#g0#Di3tNQ2bUUUF(%A2-fk%8kg_$sF!gHdb9&*uhR_%R}ol*hn2Ph{jq|FqCrr zqQy5kP5kiab`76Ast7WKst{!0cEhM z^i3fxq;Dc=7=|d3-NW)Mjl7p))11F(`K-lrm(N>{lQXy-KaXYh!dREjm*E@^)9d)I zFf{d4Jeea`l$~@Y1Rt2a01WhMp})$t&TUljra_Za15mh39MeIoQj`k2KC5;W5_z;s<~`&SR|m#SZ`+?a?!4towDRe2jBuq0CtyCZNFB z8G<@g=Ahg-WFYp5U@J<&m1WR)UQ2D140oy^$795fts*{939j|Bp9aLg6@FjoR|WK8 z`dbhmVocIj=CA*dn0^KS%%^5&D8h9AiT{}VtuD6yxgh@^=wkA>ls$t^?>YI{B2Vo{c5g(JU>oiPfT_}ro{X>lOmEk^B zn1jPbiD)Iw3~tB@y|r03OPJ42dZ!Y`>{J{h_RX01#r7 zzh2~PJF5VDCH_PCE6^xo^7UMj7o{AK)VWaBjYuD2B-||W*GXgr*sJg#%0CV9G5H;m zPS=Z&)VWaBDF8x@gwxLS^tS#_02Io9Ln8lEgz2t2`RDo4G5NhJAMtb*{Bu`wDF5pT z`R7Q3sF(jI67n~WhA=pr{~@>z<(~yCTK*z`6`2?p=5-|ELX70wMgD3@TY-NH{zLiK zAaP9o7Ll**SJ)I}y$k7M@|T?LQ)v1ME>FdOD8CC>O#Ze8^UpPznEX{D-{zmY^F#Uf zB5_Q<|6U{i&I?JM3uWC2AjC*G^c+ub^UvMdq5MmM#pL&}vxZycz3Oi$YZ78YjKpms z-{yZ9@KAm)6365#q3TbbbfK&j078s(TO#>y1s=-32Utx0P$8_B|2vRACVyKb|05#u zpGD%B{PiNgUjBca$ba{_5C*5|D+r&C|1kesfW_o*ZZQ8}Li$+#dquvje|CwX{Qek} z#N=1_u!d9p{Z&y`KctVzA2i0N(DW5tvabu}f4s@dmu}i8!tYFxzq^X~fTmY?71GD# zj}rOQm^ru#{@EpHde!Urg#4)kKnzz;e*c909@*$><+Dmc`EwKUJ2+T@t0(`Og#4{- zKE0Jsl|uOw67ok4^y%x#Z%@b{I<6>xY()O%g#4i#EWy>2|M`UcZrOrv^G_(u|4$S0 zTaI_)>&oAekiWUzr?>LQN94Z}3bBbwars2}eL>`Zt%~@7G-sEF$j@c`65c;sIM{>h z)&%~tnt!>>eujjx`={l6Pq9S^EATt;AC}*z67olJum@MK{?;bsZx#7Ho=sMP&-IE> zK5g|gi_+W?@^0vf-skhhIxPq(1oq(e0#a->e+NWf9&}} z(zs2>)zTKJScO0MJ(zQ`_O1A`J8x(wZ2y&}Rvu~IGVu|-)vp1=wPn~x+PC5>?(Cp_ zE57u=k#>$1b>0ixb1%$l!g)x|I9sWo%j+pPTWLSeR>FFcoUN2S_$%c91=x-|8F{}s zJLQ|J{%+!g&ZeQa-HZR7u;bT!OzA3?$T~_wIZIQ(cQVddngltOy}rD@ z>dNcr8Ct*HGqiXIysYjBw5c%&1)_bL3_aX;d@_u$+N2;|MGDW->0VjI$g5lEM$w-- z@U?^PZn}$oEw5J+gWJTP!ueDAxmF_)y^%Ce2LGVLaLaman6aTTPuMOpJs5* zVW{hp0O@7A)gkK=_yU9Ly)KaRxaaG2256Bm@nWxwd%F+%vf-n_zUW(($oPHHvrVcy zO#6X75I=d`j?0T1QH)N8>fAN9DCss^H)#uj9OKY~Y%` zP|uA@o{*$_0eq@(A585ofmw~55>?$ZP&g#28iQ4I><-DsEW3FjeXOIqtpaX)fZGz# z*cnmz27tKoesh4SvcC5T#F@CFriy0wfY~=-b_|S_y#k~?MCU_&4eh@;TEkkBJPZ%6XLB4 zW!;L%5F`EONdEbD63TxNSWLct3#{)Ak9T zZz%ukhzT)AEU##`{qyZ6l)nd9O#bcC?>yv~x^!^I=JCHage`+NEe2dfc%J*{#`O_Md&u^t;@_QokV|xK!i*k*C zLy>tvYDil4=cD{VNNyp z-V~xQ z&QjVb=j`wtiC&%$6`sMtGat%4AH|;w^(@Y9(KAAbJ&!qap6A4KX!Kkti&^=4E|I1~ znXaCM^Gr(6V{*R(I~VFc(UWJyY&nGILhTT~CFHq$n4b&f&V=H*Ca5EvVKiFLg|cNH ztMlPFlZkk>&cpM-USgeB&#DUaVzcBuVqHGF;!(YKlqS6Iq|4Fh!hJ2bWHmka}!<)$4F<7tWr_a&(nG4E(<3_W!K3?P}LQJIq&Se9aD$3NC$MdRDsS zb*0w~9Ol+%^jXo%cxQXO-`&UF)#BpXC5`h<9Os9oN!$kdfz5KpFOm2P{Yd=kKH{nC zMu}Jb=szJ?FMXpA>9-SuQ+j_@{Jk1CVr;GD`|bwiD5}Ud#eiU;4R~;1g3R(8|4i9^uEc;uBhrL9WJ?QYTcgV7jJ3Q*P-V|SN7v*|hxLe-)a!9+*GPIL!CM@CE?4O$6;k^l* z&yyJapC;&cCFrq1B+7^11;_X|CHVg!L4S3Ep3nCf|CI^+fdrp@3H;iGK7X6Q|2$D& zyAu4*0-qDIy#Lt^z3JZO@VviLT*nVw3mNZ8-S1!tbIr!CVd#C#cP5LE6ngR*Zusc^ zM_j{8 zY?Uy*iiC-uAz^ym1|MPY1riSBE(vfgi{*lc`mo=lQ(WnL9qR4WX&n(-Yw*)0Oi#;! z`k!TRTb|<#Zt1m57@eXYENNLUXB$3;TRTkY$^L<^1pRGqtmQyl!=%$PA)c??=QbaR z+tI~TCW0ew*WPA&*x_R(Ot0JETIPg$49<6cb*m&m{@S()tuy#&3DetPa9i)24SueK z>1{RmIR@Wm@be7bVsN{2WvIb5OlXwB54ZBPYryM_p1;lV)H>ywsBNDeq7QLfo-+(? z%X7KGZTnnnaN9mN8C-QBr0s!nZT&uL=xw_x>ZBJ)`}14la?sj56lt;-ad^r3%l;>>s``O9W4egC3Gv@FmEPk;Dd{cryJ z`p92eCkh5L8)Kr&>s@0C%j-@lXV5^>ci%J%Eco5K`@uKzSju)E#^VRUPHE{4$xtQ9fruLiyW(#pK^9=_-h~E|m2YB14SyPs)^qj-@D{vn`?g z;~*y{U+s-okjA=DRudA3n4^~oTPvSUB9uP`?|(7*rvazacH*y!vbfhUCcjPOYkKCN zMH0&AyFpAo_Y%0|Y`TBc672uIc*$IoH;-GKC=Y$oZI2U11!px$Nthv~6q zJ8tZG<*KW-pvbPd^;_ zZN@rgY%Nsz?&0@wSaasOXDim7sT1|<#pf=wHWc)eL4uZbV+<1sJG?R2XP>2I9q z(sv@hob^t(c_Ux^uSR=Z4S&rf{O@>W?{suUgJW^`Voe^;^u8blu*7+5A2(qt!Zt^Hl@k}&2Q6=5q_^g?{QgsH_GMTkE`q* zR_g!Uj^o@BwKaLS^yL=Nqnwof)|Mjudhl;)sXQ`lNOr?l5a0cd%HC4T#0R)1pyib) z-e$K8du)X)7Q}?w8e=J zpnTS_oMLrRI;nR$`r2q++=@7+VO_MME->#BryJZm9nbSo}xRscRHR; zQ6Bf6(mNg9VmuD%RL9w9R|8UXLvy+v1H*PzD5q-M0&g^dS{JUWh5azP<{B6F^Wh^V ze23t8(K?;mR1A5naWdqrV)-hVhh#`ljSm9{vZg(&d*ST4vle!Z$19*5HqRGjMcwPN zdB67u(Jx=HZ1(If97m6X=M8OOx6xB&;LmOKxH|X7c}thgU%V*PH!N>`wuNWCA8NW# zkJR;{mK(Mgl^f<)@uYv4??4zNiXZB|2Nm*->@8R#@?!DSg`EIhbpjcy+cv?bv0+5cQg^%%rD=q`;QfaiGyZaa81WI;!PwbaPjS7&Rr@?ur^D^6 ztdD!U!>MttdyB(sW?3Dn@tTl2LJ4|`SYt95wT8=?pu9`t5|}8E~7ZAr9wTQ?28gQ*6(`PLSC>1{Fzmsl)U9whPYhGwpYz zTL0fh`>@}IYR!Gv;ko|WPTmH*RBfHu?=Jj*4*n&xDx~-*#5ZMmz4QwGUpjsAa&YYw zaj$c7^KwwROm^h&g~;CFlnv z@X4sh7@zeC{tqPhtV+AKL3!wKaKVl)1S6_VmQ=^;#Vi|^AdXgaRMKS zejp}yX@dTGC}j6eY=<6ndf#wO{6Y`8Uk+&LxORWK54vBy@3|Il@sUCkuB~goLi~+} z&rCyqfx$ITr0+1e_WYqfWuXc6X%n3NBKsC~sz3RwZj7_^Ba|4vrN=u))urgQ+$eW^ zl{&90)nD_b{8fL&%aWFQ>V5}8=NNpfgz0Hsl>d7qPWdT+#VZmY^1s~Rmj4XFmH%wH zo+-ZaSG-g3kpBXMTmCBzK3c-`c)!!BTz{3Ht)ckE60ur*)ko>q2Ds9%7o2)pxt|tX z`O9T>?q6}`^NiW>&sHG_<$f!`mHuhLDfet;4*yw$ zpJQ+hQm)JBQ(_Db`O<47f5g4 z?)AAre3+!AH`VaLoN?7@|4;e}RkU_*p5u{WzNCfKQ4t)7uAhWRyvF2+xiZuCClMXK!}!rHVV4lTVSce9SbzC$rlN zYbN>|JUYpgL8E6VnIv8a6f5iq>?0Ee+E^1cTLAlDr5g+r9K56>W0#=05gI)!sCM6A zzEiNeGL+mh*i*A*(3M_sw_ueGw+-U7o&zwHQ#@4XknJPHgBVjm1=k^+_G*1l3kAB# z8uuYw5ewJ6UzD?qC$++>MgA@}dbl$FxjGZd=X(iQ6v}_Q zFdc|E>q1#4CGy`bA9C3IQ>9S;HIo0Z58N$+wp-yQy~6KGGi() zF%+Usq5PrjY~a?r-~30@EAj&*4(pV0Lto=5tbD4Z=~ezFV3e=*>{G#RmB_zG0r5#o zr~V8mu3;bJf8VKsENIdxyhYN>?V@ltQ_{Bt%tN+cLi$+#J0<_ygku>#--|T8=D!7r zL)lEyDND}Uj;O|{NP6y}9B(#Gnqb+7{qOl=?xwxt{PwbQjqjn%j;BW6Rh(DBMkrS> zt8wY}b=kdzyRZk)+o5S*v!l6b^v>p%2SK-X`S9ba`vJS}J8sSVoyV=oN?R^!#eeso zx2%~zyk*URtoP4h4D;dPz~)bHSyRS7zorvmB3v z>z%x0;@)31H^a7llhggj$7Y}7{=F?(He>6gY|XIJkmouP<{rTJVt-dR?B3th)VyYE zzm^NOH=lximqQ-h**x^YXJo%4)8EuIU=8XKX&65k@h7`-*bX~EJAkoFnD6YE%ELQ= zH6bsg-F|HLaOd4yE^7YB#D|;uZ@FmuV=FIw=A)&DcMj;ih-qy4-lmgp)3l7s{%iku z^hJXy|Bsn~mzWQkF=}I_r~k%@6Iw1BbX80LE$=?7)N(<~ z#O#I-N&V?r4gDGShl8#@4wd5%8Mr9e=h!e@$dEwzao418OUS%acv2Ej&)zIrmy^@ z`O0NztHtyuJ-8#9{-kPKFM%I<@452L$oD1K4>|?=L4Dl;Z`>V$d&dSLciPwMSctD? zI>-8H=04cNHIfi^po#$N0ns{(KqJ|lyS+KOxH+xCg3wf+9$ z*iW|HJ>V|Y#SsKQmxDfLcjhy$%P;P2`hdgpy+O+E{SN1-vDR&McsSz7vd0}R11FP& zdzJhbR0c%w5r-G|W^Hmf-xg{e-_`6MDOa|@*s0n*Pp-UxalF~&-ue)Lb9DuO1ODwE zELZlx{s{ji_m+SF9G}wl#^lmg zZp`*P$erUF$zZ*Jk0F+GTnn*yS#Yj-$Z*Xe=NR1XXzVt)46hxs(%^cp6IyL>V>+<9 z#!tDH{>cRWc7yXBM4g`F5%SS@f8y+G)Y-LIt4|N;=t4d#4Q}bz8Qhk`Lk73`y3?~S z@W0UDwwy0FxaBj`;8vdn2DkaOaxH(oU&H+V(D1SJKR3A5=LLhy>!Kju!&s!I{kBLf zaoZ~@PvR#U4rN0xuj3BUJaWy$_PT9CPu$)&(+qCq_88pCU2AYFSM3^@3Fw;7sjCyD zI8c86a%Y#`Sw?pj+54cJCEM+%Pi}YLt>-C|v-#aOiOu_}?SlGBVK={1EPLye@v|<2 zhAI2?WwAj(#6c&Tn4=t>Lat$VspOuO}jfb{(P%#{Tb>m%uu5|?HBGnWBkeQ#I&hMO&^>$5ACe@6vw;#K+o@= z5pP{^nQ>1Hv2gCLViTFL_Tvh%f9fl}sG;Q5=YRqqMBNl5vzx#t^zQ+{|4tddNPlJx4S{(8Ltfmr@$%Fwk_2q`}{_so8p^0l1^dG-6{ zdUIzdA~Dm4?#kj2+>wN|lO%mOe>F|gZwwfR`M(J1WBK1K`Pb(Y^Uvp&rq_0{5a~nN zPNZ}wPf8^9j?LY2?regYFf+mE+}XJE&hIEY*ZAC7#gt{mDObU>nHu@;RQ-3ke*S{< zW@t?{b7p1Cf9TwSoZM&jtQ>^bMlB)DMoX5-(!!@9f!8|d(y zkKz^JCD(f*0H^m3!!PGM>5ssF5QPM8IId&(SAo}ir!&*g)qaETbQahAacpnpSlo`8 zRXvWqS%&IbBtYEOrX73R+HVtjj=e3P%MEV%*wI|=&{)UL4UC2x9|X%dHnivD2hGtz z=}qy?663AniD9T8cy`gWQr8%mRyyPZPn7BX_%Gf~Syqt;3gHQBf=R)~R8)78X^Cnad<+E1_ z<#QimO#X7LdM{Mgv@Jfx@munnvSMyKihRj$8Yk3k?Nf2%OGyU+I+ZW(m|Ad)+AMHJ$qJB-4ls;oCq%EFAyL6vEDcht{9MA4MRR{}&|xQ-zTA z&wfkOYq>rQER@Y8n?*k7`snD9N0=UCuk*%@^`j~N)*E{rlutZN zy%N7p8JyWMs(1Q_#QqEItMtMaMi!pmfa{SMn{l1w8Q2G*Eta3bz6Qi#eQt2o1`Ee` zdk`05*8WUY2RZ8lD#X4*T`r+Z39l$7?c3~RTjdb|u z7LwKQoh_Bw2XJObE6T;$i9s3Bc8WbSqh7hI-JQP5oxG<=*&k@RPc*t6Bl;nagYEit zwLXHfZGsIFmQ7MOtPxVTl?SQYt*RT(201|8CN-#A*FowwJE0rO!`^H(bJnWb9QLX0?KC{EoxxBusIQQ;ey+9y*HrI^H5O2qmHl2p0Ytu_NH&VSo;Annr zX%wH)N9(t?e16yMxnbKo%jV7N!fOG&Bk4q$K~mh-rVHQWbS$%y@xdBA<2s1Lwe!ct z`}1a)b_OxH4g3kxQl5^3RR+_nA}w4@9@98p@NJq$nE)=8=7&DICe3caQfYKvROJYH z!TVG{juDHtUY5HK*{+cJr0;fkaV5;pC)yQOPd~-czqTNEg2T<=O(@1Vyj-9k;qc)F z`~waTpDvl4Dd!?<(!AY4;nOS2-s14^DU)RvJKW9!cy{d$51%SHi@@O=4cEHYIoz(y z`S?>E&e_je_cZFo&uG@-v>R$|x@i5r9%OcZgKHPS$|#y9bIyj+|CyuDQ1wpO>@J|Hjeh`BM6Yjy^93rT?76^YYjGVXMPkVIY)$GtThKIfv!>7wgyK#rpMl zo-bajYpz-GRh0VY<(#9$Ib&UP%{5;``uHpQ)y{QksznLBGl4&kgxXgs5BfZBDu&NW z;2a;t=u@^{UYF2kVS@ii2#E0?kibttJB-o)Ndljfz~7kArzMf!e@)(a;G6*CzumLb|e3E-*b50&nwPvzDX>N(_Ihgo$(SfV!CyAg*nhklshcIR;aw?VtEq1>vuf zF!8d%*BQLs;2RA727_-lIQK}X+bRL_KVL!k+YJ6jgSQyG)!;)7ex#J=aHId>P@W@< zKEKWKyvWGyHuZR+!FvpzYM&zw{ozoaryG5a#PU4D=>NMaPaU^#4cqpg+BS&W`+cV9 zOx*ULJq9nEeBEwv+n+pSaC@I_F}S^7wj12G!#xJK?O`zVqoba-oOM5I%vyr3!kcZS zZrY1SRn46V~Al8zZjbaN}gM zA&A$QZcmb;ev3z-^^BR2PT{LN9q%ieJ9hL4H5fTLpV#<75LQnPBhx2OV15Eq5d}9@ zK1%suK4s`=fW_oLA?fV90-;dWKSVInts2DNEbDZ?Sw{IR%257ifW_p$An7)UuU;ts zuMrVqq}?U*%VZ8m`J5FF<$tFsE`PnG({dsYx=_})kUqpn*CHRoXnM-$tam7%b1AX> z>mHbuh_^13MZO_M`m)Hk_0L)8Q2u8V`M(f2o$Bwein4g_cTE1qNd7t79m>BBSSDEa8c}s-y_drfe{x*?cFaN&)T}=K=nUdG^BO#ls7@_=+0gK7s zE%H|)-nvj0<3o(}OGLh{e?p=BSEEyi$=B~6RDbfM3uO&K`Ve!3GGX=qv-d85byZc~ z__?{Iq@`kCK#NFkp#o0l9raQIJxqb{vM}Ho0vgX_DqqQeiMW#2}0oty*~o zL{0f%hS4%pMjXOJr;dz+!Z>yQs4XyBr_47nycz}jt>4~jowM#b=OnjG9r6EtyUjg& z|Mq(A=h4$<Odli{ErtBt}h zcHyk~B>lZCbR_-nOVQuNOD|eKRyD2uTT=A5^L=L|{a;Mczx_y3Mo#O;Y`E3`4=MWV z`Gz)<{_mvdujCBY`tdwy^%p6fB%)+4jDo>(bk^kLxzUF_E&Skt!#ouHRW20$+{pZQ zM3D1^e2jmO>%SojP7y;*gzyWzgz5<}Zmt3cRm`6=3|8z}#LrbN{!;Btf+GwILrV-Mwloc%Iy_JZo1bLGFka=%*6%##gRH8{?f z;3f*lH@!ym>vvZ&^p1<1jgg~$WzqXB-`e`?wHZ3&qk_(f$kO>3qxf5OS^CbMKO^IH z+K<`v#wAZ3Niygx+im-<4sMzn46OL|r&fPs51q+UL4LpA@rZj4IV5w@b983O^K^Cz z*}A#2;^-ST(^)1>zrEzC2k6@O+x-vBp}n2pd!FQIzGrE_BzVF1$^}cvp2cL>BC>Dc zR&Von2K>7_-`YBK7|xR^wfU%1^F#Y9vU@8lf|W0m?btJjGd}jwen{B9F*xe`eWbU( zV#*D7(jU%-$&$U$Hzj-24b!qy_m0`Wf2GzvbXa~!>z4Cue!aGWY%4v_rm{c(;45^V z&8wvQH9lLUney!@(mn9lwC!Uk?|M|;eRWbm!ztw55$>Fq=ja?7$+yjvZ$7^+dFscM zZv&KXG^etyk@&$UJUEjCd`QE& zFfDj+aW>e7G9N?sP0Iu?>2%=?o}S?Pn>UgzIFskAohV12hS8Lt{!AXE#h-n%xnj!q z@2Hrv_W{cDAJgBK>Mb{~r1T6-%RlICjLO>PH>K-$@BV-Ce%5%(DOtlC$GHY9&wh=q zG#L8FCdSZr>T^wIQt(=i+lK3^aqnI(=bC(J?3Qs~KKy2XI*K1R+|RUEB+`0H$lS?v zkK-CUZ>3b`D84VadCQo7(ar+R<&(slw5Mv&-3a1)svdB7d{5Oq4v*HzMa>-!*R!`i zX0yZfEUm|X<)EymFGs}AQIn!;~(czkcoXB{5j zTZ6qCrKcTuVV`t3M(3rj*Wo;nR#BVDulGo~Iz-rL%7+TI7sr(?;SW0c=qBju5n-sm zdQX+Br-c2?;gLPAJ`sk!4s?DL`Mi@cKo{AWQKydx{-mRi>Vx2?IQpnQ2o9 z@`tn4U9xHqN+}+1FIWdfzhqqt0ZI5dDfp@s{P-07d@A3h_Z=5e`A$^tYoeaP-RbC~ zb|*MK+&WS1Ko{I|`R@h5263a$kh%;^(`#JQpCAE4uW=!P{1YW$=rul> zX|Tsa??Jg(;qOs$(5~S?ukqy`b~xs1#5J-9^m=c{mJ}TI0S@%IUs#7{8ND`E$ppaT zy)L!+Vd!&KIE9C!pMHS!$0_<_*pIa_o;GzzmBMwaS)y>^1%&z!2RZugBl!kg=TDy} zcl0`cq(26Ij%jdthW)^&D_qX!1g_JiUsH|VuXQu*vb1;6(xpqH^JZ{JP2eCbT@_m! zIySa5fOV7-fLBdQFkT}OEL>VsYd6LY=#lqwlg`O;#zOaqL~PH9bZn#0wYGH?XPxuG z51rQ8RcN@Bb1ZxrSQ(zW0)fSf_}X65ItCwZ6Qwg%rd!o;bb7r|G9$j=(MSs(<=Dz= zA1UUR#JU5EQVrxqk`zJlB^0-Ka-hp5SZ%4oYKt^PRp;M|_b1do;-k4B*u^)D@6&xp zJ0dS}FasD*NrZ9v&{yh_`-Y(B5c6>S_P%BLan^{%AbS@NEhU?#6NYq3|10C8TT=9& z2O;D}(w{b0H-4<=*ZOgnw)$UA(J%exNc#VGO8WB&`Y{T(`mrWJB4Xv&=*=H7{qu=G zDgWCO^rJ|ue$<;J{q3xO24Cf3b%EDnpzUYU#tHwD8^zS-jk62q_vWrM4P1lan}DhgehlrJwF?uy=U$~7UaRXj2^i?ASidfRJoVZ7m$p_>%blX|LnfT?`%n<1 ztyL^bNPp5=3C=b}`fVS)yiEN#1J&jUZ0kwTpR`tj?bTLmicEI2C-j=X`VVU{gr&<*vW*`>5B2R@Js&hCVs0MEcN_I*~@mo3_L$seylar zR_8)D(s>OvHMLAq{#wHzmnH1Veh%Z)GZ69T;xE%vxyrG@c9l=zwIw+|g3N5bb?;|%h zuPt_Vb)LSiv8E1Gv^y$zn@^Zidd73&^!vwXm(n(C5U5O?C*ilJ(Em#c zegokX)XB@6C=7>tbdr4O4>5O$IwMYKClM}v0pg^-V2)PfGnf(YyXiT(9OG7gUg2o# z)>*yM&s)7>C-g=u4^djJUa{HA7aOennQR#3=s8H#b2#YLbA)1#)hqIW>p4it{|w=} zw-Gym>$yp>2RNQ3#MQC~xReo~WeSg0c%uFp^t`3VQ8p?19Q$$UVL#~g%7&y1bDY|K zu?M)e^J10*T-({MaBb&}3fFe_D_q;7r`vERj=#zPH2$6fP#ot~b?a$CH%aH@cDFWkHMg~P`pwOLpitLXTvO<7=}OrJ4?er6J?R-6qyA{U7uLvii|~ zCFy^GaJUwK34g7A^gR{>@lMuXj{rI7Pnvstl<*||a#o_;Pap%%>iTv92D(~KsFXAG zV{~NGzlyLV{Y?PLja2_GA{uKG_?ELGUH%w_S^ZZM2358V_Ot#?6sMi=3$~FwN&0)4 zaF7X+{=~UQ(gRhfhuT%~gCOdcc5Ig80sema119MN2KT4T|5oR2-e7(&E&3Jxf}oxN zi;;7NZWltn+WfnSn3M7^&;6g|Kk^T4QTU}^eTDdAx`}Q(>tDuK*qAi;MsqhcReW-J zj@(FdH}mGsp9i{JuKc;1b~P}`lN~{jr!iRi+)Xg5cg0w{?SM$f0j=4j|FM>|I&XJF#{f^ybmj^>DDo(A($n3MWE z%@0u@QL~M%VgvT5LO*5gwn7J;`RV78YH~D3rN4D(!;Xj2LG=jL&7bMXXPo9J{kzBc zvpPWs-C7o5j>qqJ{kyF%(|*@C>3fC!WW#Ryqx!mu=FVvPrbH1%Cm~l$7dHL#$U^s<7%juVO@Kn@wBdu z?ZseSBZ209)e^zhE=l)(b|u8a1>WYm9J^dX1)Vep_o%A?xRaE+0f);SC5pSv;rglD$9=-#`l-_6 zA9uKZdi3}Xhuc;c1b9cyk4inA{C>sZw$;)3;|`Cvp3ghnw!$FzjKkw|PuDv<+P5is z{dc+Jb5did1IehT^ySQOJYDr1pQ{6ez1QK9{kU(#Z6G;%U#QdztpDk62{wB2;0tt3 z+K-C5ku=BmoWmpgU40>Jj*}mySLzl;(YP;OE*}4V%?UWNA8c9YpW7kx{6NB{pA!c?E`av8lS;5nBx;aAfd7H^N1t|e5Uu7 z{93)EIM(VFJE8YDB|&hjS9(q>AN@U?l`pnI4*C#r(k`J_Kle!fSiL!B1b&hTp=&Ms z#U44o?F`1n9>JF|4mqc?AD86{KSkj^3O_;NSFm67N>s1G=X3a4zKT5@4DXwQ3;iZ0 zfSo4_F#O6 zgMNLF0)k6EG%7y2&7ZN5qV1K0Uh$@Ce*CGCL35By}N!A0@`xLyOOWg6gm z6tPUy>~@TiY&ct&`^?KWX34)st|9PAZL?q>nEEq=`7dr2}L!Qc>*aXzM6l zLeaS;D+!cc$x8_$r?I%Yd#yUkrDS1&xcNJz|IL*JGHv9gg&r&|MBALBr3Ko=?7lfl zKjfVaqS=)6Hdk=8R56=^2Y09Q$7sBgG}`UwA?H6*ymr)#OWXw%0%qq2@+DMJK<+bw z{I1p-ri}F(>RA!`5~Q<|!_s$sn~YDgU+xc$OfMH}Kh7?(7-)M~e-$%A{~`2e_2a&n zq<<&#P3Egytgh23!eXEuVExOO5&H4;W%Z*kP164Y^R48oT&ynSqs2h`VnY7oDb?z4 zC*?`{^8m?>_m}Y3>bjKZEC%A`{OBv?jPwJt`aerplK$nae;dVXXLWs=A}t2`Cf1LA zjBwD8r*5nNG>T8sKZ@JkI4~<`bBm#J)&DnyfyDMfe*T5tlchNAgkP|4kS9t1PM+d;kqMz6vopdk_2Qe9 zPUyF5Evwj|4=}%6I6007*cB{et};nPm=vR4)+vdC+x>8mGBFG6=BdX z$kLw3`N!2I6tji-_k@V|i2VXjC&naIyEy%WOo;Sj z{3!gA{tn`|y1~+m&X%0m0lSZ*Kg*A`o;h=Kp&Mzfr)KW#YENALTF)--3t&$kKlD4? zKHcDmgRoDxA~XCxUD^wq8)2VrhU^$_pDs1pXsw5Bro?UDg|(Ke^Y^W;7(6r68{AhB z^qyI`deMCipI&%hrnln0Y+vTSrWN_2LdBB%Rv$ZfX65pLUdtVIU&S$H?B6B3|L@zs zds(}TD*phs?}qp6|H-w6YtgLKI>2}e_5mXYKOFjyTb+;h5GZ2QqlO5IZqkFOE< z{l2PmVm80umv5j-)O7OexqX-Cgw1n!q*qe%J%>l~r5w`s@BWFSkM!117!E^;q`7^> zz5V9uR;u1nfsv$#J`!9S6LPf5XBNMMru^HbgGm z9NKiE5hpS*cPIC6#7TX@+?~c}FeB!E^&C--aVtNsaI|&ntX>&+SiNE=^y;}R!L44g z*~%9ito)g5806?VF&;7xyMK4ON|eZl96cu{`JW+N_cmfDa6MNh_5jx_n6<16xReo~ zWeV3TO{)~HS5%u6o?|~QJ?w}4qZBUb!knSDU+e*{?Yx+IfonV46|U{PQQ_LoeuZm$ z^yCxWiQ_Yd1jgqJ36$Bw^v%0OR66hXk!9zuIB)p{7o0cjqSLu%h{tbC7hPWQqU&VybkI|6TkN710JDE@S z6@aX+QxY)H4X}Rc2caL3)sK5tlKvM6hr8Ba!e6T&axDhp7ZdV7X>RQ?qD|6|IX5`D zpZQQ+*WXb@l787oE9DG3G0L;)$69-m{$AE!L-E>KUCSxbVxVtgMY{YkYP9-$34tw0{Bnc%yxv zvS+nk?~NVPyJ8XTAte^~UNennhV=eSyDt`W^jESU^(yAiF>bz<3Vfr z-@N?WTVJJpsPcaI5kY=P-s>JbM9t$UyI^;VzF+vTN#(3vRlK{$N8dJ!bbEmmg|6E*PS0nv6K$^+)H2sJu7P8H+bP z`VQJl%X@U|N#1i5#<{4V3!V?!j(cY>ov}KJ_Q+1Y=MyBSz9Ms9eMN8|;$Nn;QoBdh zIl#P`bPwK5f7QJ!?%z$Xr!!My-?YyixV_p&u^W4Xkq*3pE$>S}ML-(S6(&-A6nS<^HzKU7&sd#tJaD#rxdq&zo%Y|+-sRxjRq zIhFNmd{zMD^b(EFgCp;edRaeKjFn{)NjuvI94CgBM z&Huz_%bC=Ji^2S*ROSV$^$IhL${lTkLUMREv>+<`s&mJ&>)sQ{xPBr}{YQ@S-?mk<4Yv-L zCOPW@`{?O*v1vNt6og@fLZ>1rTywYL>FvdiuI6HA;Pp zX!8ER--|#;qt_KMH&w%#mqX(U&l;(`ee7-H+#175j&H}6;&V7}`}Wbdp-jNv1)N+9 zehmLig3$2cDp3ga)BQ>wdim?OX~5DIvm!O zx(ghxXE%NPEQjYxi7B+n;kFl~_Yxc)Z+(|K-1c%*Ob+J<8>Qt#4!6A|)gg!DskPLd z7ZiP)~BS!}YAE$Cpr2_4^jCj!_hDc=~+{SGNg&#L-9Tb#j(`1@1j)TZDcPO<0a6#P$9 z942O>7Ct6en{^Sfj%|R-DvitkG#){E#Di-@&t-8G)ZJLg>1Z z{Z{@egNxjY8Mk`t4KDOej6-h~`*FEK;j9zTgV;XDc492ZJqRZyPc}x#{Df@A$ zXTQbU6`p55E`96={bGf0V!yQ$^&HOH+3!&Qp3|x9$K`&7V?JNplk9UE$h2NioKdx}S9`K~X z=PNn7K4`tVK4`tiklk>wU(3hd4Z+X!UiXXl9pON)>$&WEw)JNv(+e)Pu43HQ^NS5G z^o@)|uaq6^=u)`0r-yOT3tBjQ9|lfvk>AU>wdY!c3;m6ZTYGL*xNdhe_v4(+w|f~E zdps5OKL$USBWQBUIcw*3gA4s2&V`(cm9bBsgpS&ClD z4){Wa*Ro&op`F8L@Kw?)xU^Zw`6DGq?wi1A-Zgaf>=XIj9B$;R$QQhYaVx)9;aa}5 zcai^brn`}^B46;$N{+U_U*QYbuP=~)vI2DeYkVBjh&^B6@OZw8J%UeW9O->8`*E4U ze)QW?78)1%OcsuXM84p<-1U7y_p4F|z|+NyR(=oTR{ph&!~WCQkIUT(*Zso)<5vE? z2FG(I-2MI%8$WC_xX?euIP8(M1A0>7y4_VWjy+9!7GjFRr?DTGnF`Ob9~a3($eFJ2 zW$XujoWfTr{CI^oDO~CRAjyBoIYH6)DSG`rv519fdxLsQUoxh}R@ybkaOl@pooK}!ZHH4^)>J%%CBNRPh_E>>Mx?bWS`uhqnw{m}sZEGU zNpd=6ic&H#MQK7ziqa&?SV6V46&h*#V%s`-nOEMT^>5=w^i%<9>tl*47h}GfB!c|w zxT?63`E3ndDDJ`QCJfXEe%(~Vn>$t&kSRqQ~Sp0Q#|- zVfBBDj7rMC7g?{|w?%{1_1DC2G0^t&KveP%`mu^&_5YBtB>nZ2E;t##`%qlh6BLo8 zzv>9jA@_IaA47ju|NBzX{{-uo^${;Eu4_R``UhBl6~)6rKURUPe!N4Jl>VnVQ8NCA z3^ZcEo zC#L^aR912$rN4&wtxe!tbu@lU(~l-;^S={0oGpwA<9`@7o?=WkM-9xFVc@y z8LR&tDfRCe*1w1O6pGcW!bwl<{bhhL+aXp3^n6I$>c>lY$CKtMq_6W~eAk^jW5gxDdGEX)H zL7rBgGr{P}`sjVypx88*gkMHg9V*x(cK&eL`p7b4{J6**duPD9uiw@@jri$I;+8Pi16#j_A<9h;d zhNs_ls))&pKAl$B+^_!G>H^rUU+NBb_VW!(Mg5V((d(DGuRHtgh@IZeb~tzZiUoaa z)N-SUzjwH5TpaaIhsSpwj&eA643U`NFP-0xH0V8R!Y8PF5YB#*GeMoDDfl+Be}Wrj zd*NaM=IAG=5r*LJqWqbldVfjzA2~Tf<;RVXc&3vhR1y9ghfB{E;U9H!qIxKHVr^zZ z5Yyy>hk`%p@F@QUzue&xitPC_r#H%Hp}-h(0{s&w_*{oa^;Ym> zoSdkh3;t0@&kr8t7aaGB3F;0V=4|Y}On=apdo-sRg1WZmMw&!eyRc<#C(Q#SL?XVa zaA|RNb!}Zsv2}Q&>bdhgk(m*JCO-$zNz)dswAnTGh)>Vu?z1HLa`W(Jq!N7K{Dq4@ z(%jW_(XxdfSW5P~hkf_!z3yWt^HbSfGARYa5sVN$r)~rSI$C8|l9D7q7UnD5Z@O9Q z8fhMc$lUMT;jEuiTQh8Q-3SEL)g$naK;TkOGI(mH5#O63!`-aRoK(x!HCCs_QJIm@ z;iBi%fdFdU@36G~_JT8e?QYlJ+}ue|GlI*iT}bf^*=$(N&J6O zCjZRLoWkGEL?iL~Kso66+xPD%f* zW%92`(f{=_`DHGH#FV&il*vCaMgOGu?Cw|f1fIoe{xFx|Ex@YtT!j= z|5cg%D^mDhDU<)7Q~39n$-gBf{bP|RawD}L^iLqQy*bwC;YONExQu9+)X~e&wj?lt z_D;fV-GvO<6I00@HpC^(CDF6|+}ZQPNBI%I+f!Xr%}@U2Kg;*1$DBNj3-YuNm7e7f zrAPN4)Q-xCCweZ=Mi1`U=)pa!2%-n~Z1musjUL>y(Sv)o@(=g{n{q2he@V~Sc!o*3 z`}=hWd#4V9R~>!yYy)n%?>Jl)l81v1p&6;11%oG875|D(gB^a_5C zlOs~2z5-*i3F<9Ap?}rk5{l^Y?X3xF)?O$scX*Vag7XR5;g*3}Ne@Szg_H-Qw5OrQ z&H@If`csa>kk(yB&qa8U8}9jpM22+!Nrn`-hmZ89iV~h-9xqDhhJDV^l*2twXgadi zKUTO0iu6Yb%`@C{gQg1~AkrTlG=>0+wQe$N$x2y#9PW3Rle`yiBc$C(@nKHRP44j}6{7_-&z*Ap>v8)^Mz z_PiSYGGqB;wil%@ApLpz!|zziiPG~vGAGMDp_e1buG zbrXJi=l^69w0T+(tlxF$9Y>dZ|L+g*o#z}SM#^Lr`R#Yu0HwJeibxvMVgB6jI&q%x zXQ%T;V-SgW)_GK6Nd#S!-pPD`@QJGTcXkto{lTc$)}c>L!V4+*7gKPVVSX1?YMlyR z@($(`u1A77k^@(3aCy#xoH3rn{pQ&ZT-pmDk&iv2(TI;C>^!y^L-}23;TASGy}e}V zin`0{Ru|Vcx6)TO)^`_M8;X9%osTKD($sbW-riAcXj|9b+)``|+{85vi!Lp0OqjGT znMJ3GavBHFRAjNG;H;gctSGdsZR?;R*t&BYi>+PFYno|7e91)%-6W%%W5n(>$t=#B zw{p3Tn38IjUw;dNUmBs5%_RW^)?dP3v0s23d6LrqA`6ssqAekL+1?{X~_Ua*sGPeAf;`!Pd(~l-YdEjxwU1=z%%%!D zvnjZ#sdwy!FK06+PkTqO9`~)SnP6p8Zo-8KH_@3$Bxch|^o`k1Q+$x4wC~KTAt! zX(e&8_~}VE^poDuPx&1Bsm_M}4MxwdH}==yUW|M1vvlUpb9^pUj_~CB@gmBv$R_`d z-cl@>ddxKU_cp&@qZY`0OP{HpBV6kCN>tkLY>v@i^rw*!mg0H{Pr7HH?ixtR-Ni{5 z=WyHe$$X2nlt>u{P|3Y*^1a+s$Mrr<5&9nQ(n;9Cy2no-J0)*ngScxbKa=qNM396p zOrghoND@8fZIbXp3jXgYIG!Jqu1mz3fE&?JvJ@rC4SFiQ`)|fFg87)aj2j6JAX;( zLb@L&rwm;~mV`lYIE#qc#^K`qEaR{gG^aRhyqilLjsi1-!^MYlhjWG{!*t>BVtAjy z@MJPQcu+?BzW!cEm!vWOKCYzLf36)@?+`*5e5=kNg9#@C%;y%plKP``BPylKAPFVO|wK1>nhHr1`CR z^XFEBE|)8ReoMa9h@|B4L%*j`srjYIGi6QkOxi(=4aPq>GaE!czttF6HjEt=`VI+w zqeI`Jp|3LZjR}2YL*HScZ(QhmN9a2|^u06mjSqbjLf^#DH!1W@7GEYzM%xDrNBRj$V)QJbt(np+`L)ALUf)QK!excWqyf+C1*(ob~9; z<3sMEM`0fSth?yZlgE49g`QlETkFE{{m+w~{qbj)-#93~|M_``OAiw%dBCNYU!02I z;I}Tlc>AQ(o#XI#m4Xy{zw47^L>5KA?7Z)e0QOz)uE)mk4u{YzfN=#E&KZ>EJe~da zPDyL^F1^!Z^gna>aWVWaot)!i_&%5388O`N4?iJ>FLC*BVhsNehrB0-U*nLOG5jK@ z7k9!^_hBbr?if)Vo)JrDbbZ_x+(nO?J?_`4^eEfo>)b^@<#-&=rh1KCB%bQx)GrDCh_f^5Hw3@a$&dO0!5?urDPbom!CKmcASZCR#_$6|CIr)C_&>SwJuZg- zr?da~7!Ey2draPNa%P0|l2dm%`V(R}<~$~-Q!Rx4F{d|bcY+sOdZT_%^5HT^AN6~J z54wDa`aQvSyL^uNJ;9H1a-x1u@OmdF>h}bn?(B*BJ;6&K0ObV%TG}W!Ebm_3(%kTY z;>MBIV!%~wNZHPUUDa;SitP3WV0Y@zaXa;^-S6xXcI_7%^zIA)K$*A^MiJ5r0=&0= zj@#Z+J@P*LhU&J~)zxzrY)IJ(uTUXDXHz$qX$)CNT zIxXJGN16E-5ZrIIKO$ndR}w16dW7xMQ8mcKJbLQ1vHaofBaPieu!^h8_KW|w6IaM{o##hg;PLHPwG-vLD4Jr18 zC7BW*mSjr2=bt+-O} zc$xg4O-cW?W%BP#Nk8Vi;6}>-%PH|m>EGhnN94y^LK6R7W%A>U>?D3!^BKwhp%nhV zE>r*MDfvHGCO_s7lkES8GWq``CI6l-lOOLxC+YuLnfzZ)$-g~i@^4Jx|F1InA57tY zqfGv(Dg5|8HQY$`=gTSWcYK-rf1JXPGdj!B->x^9fxfK2NW$OPfWfDk9Oo{tgnfy5aAc?=LO#WY{ zajilgomcwJD3@(1Kbr|pTC;i1(NhO! zoWHln=d%4hTNRe#OWJ$=5XI|#S1_au!=n}rDxMODSzKUm^_drA`{DSd9*a^M;*_|*qL9TvfU&&0 z`b+8_?BgjO`lbFcd9Z~&Bi%DjWq#q4E9!lcv+zP90%q?UGG?naLUbEI)EV@bl>Tz} zU~eUUs~d6;U=Q}ZdFn=`ynO%ih=5K<`;iszb=bxZroQ2b=no5%*wECmQU* z-aX77?0(vVO=FR8?=-cI&`)hG^vCv8(|1a#J%#aUd>=M@v8e!SG6{RJ^Yq?SIeW43 zozfBaX20v$>A{gxkNHE`Pa*fIw0n9B8r(tHn?2VxocKL`lEZC}7zE#k-f+|hzjyC- z^hv!i`sOq|uJ@lwoE`(XbP{$t{Yjp9js6$&f=PHG1)oB8CehzZ=}N*+Ou?H|a6G>x z$-(nW5?+ylFHOOpOu?%-QzlV7#xT;K;&}j0_D&1F%)@REaJ0Hi!$ii>cWZnl<07Af zZ@azO{cITSUD57@=vyC1m&RpY5A=FB&;2Y1^cvr;hu&y6 zKoC5mXV+5|uE)T1|8Wju z+LGSm_qb=9#;yO|E!#^M)60Y54(yV})$~o0d_w*qFC;$%|8v5uZi0eM4DRE^;gZCUd9hkPWdP3(BRylxrd9p}ea6_S49vs0 zz|V_~&Yn_i#ZMc4+VQjg4`B@Kl92F|BP?lt%HM0_t^DtujCkok>hSm&^xF=%EuGE` zb2wKR=l4Hn(?#!X6p83_^xj6n*El?~Q}C}iJhD^p^7en>8%;?Ey_Vdp)CRMqjn#AK z(x$Mq_*KJ4FKwhl&eNF@NxPl+cp&UKL(p~UwhN(Dzcn|D*rHriGPoW5P(kq8{s&?F z*^BrfA<(?DsmEge6iTQtW9~~IX*8TYHet$#Vhtu;rcy^NU#wtXbH5oP z9N|6m2baX}W0HTtmvqnl8`miHlcDGThQsv}rpNvKQM}jwuA>j{c%c!GI6QvOeaPWz zQZ?i_u=ysiWlL6lB0<@bRUD6JNbf{NFZuoF4v*{+{6S*V^I3wQ>*%BO3VyKWxxPqx zrH(}@qBUF6n}q*7g??QMz07f7zCg>9=YPy=L~mCFL5_{Uyo1K87>67^FOyfeo`)(& z?~%-lOOE}}tMT83UOi8w^=kZgp;z(*N!5BaexQ1#95Ih0_f5z@13%<|N3}ir20Cy( zA9RH$cl0H_#P4-Js3&D1vt-7CW=Enia=B+r@u=Af3J25W%2~R^55KJ-8FrT|XB7tG zR)_-+V9|C7kLKO$6*Q!G-*xQ4kiG{)`hzh+a~;)__+5dXV7cqZytj5HNFypgmVK*Z z`EQQEFa5LFV4ns4f+8&DXt|5;VMfg9BAwEvrZB#k5`Z*V`?qlXNc!JL%t`v?Y-z0@ zCRzQzAuLJ%i)HG6jp&l}`}cXHaR<_$G#394!~F zCH*9Mo$F`)Z}nNm&MS&s7AwKv1o8p1&og-jwuF@4BlZiNBTrKP@8a~=Ga>RHqcY*2 z!Z`M4Tiu9~IVFAO<~YJFKc1xyQxpU?n==|1pbz{lHxFAn^Xw)~)=p=Oiv9k=l z#2A;yY}K$Z1i5fpmb`wcn^=f^j^N8^a(TZz9aI!GxCm)ywRu8vP3JN zXd}7eB{uOYHaf5Ulo{D99Yo+h=63ko{i((kO6t#TRKb#-A+TpVsrPSkc)V73Iw<~Z zvD)E>$Mn}Y95uhx?R7Vt@ueVzb~#*+Iz36z;d+$n@sB!OkMcZ@cSLC`gb%3SaSqp` zU>})rxE`f?{JqZp=vhHTt#f$vuCm}4J6u|}ph57OlOMekD={xQ+}?SD;1>>$KYLy3 zaOnX=N)XgLT#pKU+`ApF8ZWatzJ&jj^!BKXM;kIG$eoD)7lmAl}hoZhJ11^*&-{Q8}C!FRj# zM)g7Pzj1h!&w^tuWI{ND5bb50;_#@RNXgA}a$IF0Uvwtde>i(2cOx9nP!rV2U7{Cz zhV|J2f*PZdl>g;DGOUwqYrnLib9UW^ z*>!Wn1LXYs{E)^U!GqU5_ocjtPfy9iNyDClv=ye|_;{niY`1{qe&nllWKebb%h$un zEawetO3u2qYuq|j?48|%{kHD^qJG)k>d^TrSIf7cE2FO2#ZvcJ;tYqh$694;|KkTPDZ25miij(+1R3`t&Q~2x4iW%6H1bR;6yetu9U|5?-^llXs9CjS6+9!dPqm&t!z3jcqW$={yB|LZdO-$>!d z95UQU{Ri?XDgEQi+%%-?ha%GEoK9xKk>;H8 ztUnaUp6^*jj9d7d#83ZYPUc$u^S4hoo*E@TTb+V^qOKhUz|Va?6%8wJQ;B5=S!+lc!}eF7Cel`;QVFX%;`yEdJ?a`!(5UpGNS?{+fp?j=XdirOUs& zGVSDNvs38%0#jXm3SLhBzQE^5S8!U@oZubfkHEJXUOg-rl5aDh4x>)5ruSs(M&;Mv z>FTHdX3(qItdrZD#k(>`I6vj-+>CmkCP1AcUT<@Li29z%`n{Td^L?TQE=TZ@ERvh_ zeWFEVV}3}!(ctS|DQ3Sh@d~Ab+TJ~x;CA}{5!z;jv)8w=NzVVAYr99#_mC!2z8!h8 zez%A0nOrr-Plq0TNKh5crdEt94Q5J%6{W#!Y4DKJ;OIkw_Kvm<&9q&v^K|+)&APVM z)5(uNJniu6p<7n-+rOjdwz~F0M`2xOP<6DL{k3MM#lhyZI3yq~4yj3tL(T1-CwN@wj)_f4*Y#s4vhrD!w#!%eXHee)ITSCf+*v_9Jft9oDj! z(I4Cn{DkjK`7c`J2xsSP@vqboB+Y3*=N`7=bGDNlB&mWj?|$m&<8#hG za(H~s`2mMVbB`kD9*4*0obPaWH1{aL2$FfsRuUhvks5u5+(XthevaXg8MavXf9E3oX?T;)VVNvln)4t%a*)3B`EBS@*zTj$LlBJvn4xsB95%e2SG8$ zjkm5Kc$D%v3GYgwFQ(wj2-o|$WPNlw)suP<1h@r|1a>gy_kf7#JXD0;W; zekVV&R48zkM}#70yz5CRuh&!3J0(TVttt4EDf0g-1^;{sjQw|c$Pd<5=GZD z6fS;1s8?{H&pV(0S;>Cj3l-j^a4iS*8P3Y-b*RU+oPNgfUMIb`9lE>OhxbM`zMXOG z@2d%^OW%Lg_~T3id)}kyr5!+TPT^0mU-08O{3KstPmcY#Jk5T=h5i}Fp?4((N zNiQemeS1Edpw?KQ5Q75vDy;6I)$Zv9qggO-o^Ir&HNk z?5ZnvbhLHER~ZYmmgg7mqi?{bQt_&N0wtdLAqvZa^j31>P}BL0Y&Km#w4q(F7`^ zGnvSWq9xM=QI?9=?-MAE(y|H5)?1d&1R|S+*@`BNYx4`yYJ-N0!fZ`@XD83f)Xk}? z>nyZ%wG?Tyhgtnc1x9UZEUxZe>$gnDnb#FMFQwNk=@V@uP+;51FjNwKaE|MW+u7Ao zpwB6H&`yMw#xzTtJL|ezJE%EzG&gk7js=%rzUkR7GDmY>vxvN_usWF4xp5t?CHYT9 z5VdS-YDrB$>FaiA*M7^x0dS1G`yqK31JKf41=!B665rk2+T{;<$64%dn>(@aX#~pxrgjbF{PlxCbGfl^zb~`SKKoexoM9b03`0 z`;eyvYe+rUSxjQk31H8kZ!p5r|3ty!mad|@Ym{E znxa3?<-d$Mp&z=fevA{7^6v~*WM|?)tKFppB=KV}C7e9Z`%papucnA3{tuVQpG(nS zER%msO8UFXjoId4CCiK?^6>=Tq$8&HQ@o zr}>-^`jPiTZ2Nn&O#ZV|^!xeP(y?cfetbh3X|ej}s(wRkP2&GnivA1BC>SvPd7ydp?On&J<1jhHNxTpnk z*S>`Q2de&hdz&w)xpXD}Y$G^nE$f$#TxAZkKkKgXTJckd zbH!#_Ty{Etyuv=^@I&3N{z2W*-wu;|RK3F^`GTL}@JPPk*E&41KU_t!@1Q2_AEz;G zq1ZXQy0-4JjzW9<`4P_@o`xRyMx>!{&x}CRvbJvV`4`Puvh*Ua&pf5zAq^2J`-*9B z>&CYJ(@F>V$d$(^AER8P0J|yNuwM{>ueJ|D7=KX-dBVKE#C~nfx`HUc&+0<@Jp00O z<*?O1p7138^O;`i3kMyo_;FoDe@Xnn;YQ-GA(|xq2FE=zKUxU*?LDNG`A52k+|B$< z9$wx7p$X2y-zOTI_h6I#c9qP43v5m5!{^laUKzh5oq;uHPW1ur7poPeq(4u8_?<+# zMmBAlPJ4g?+NV=d;r32p>fK>?ahT}0Wkv-_=!0CM#z|bedP4*YJ_I0ZA!wb4RJmmQC&S5J(RDv}nU})!Xns<|j zLJay*pW%eghmwEs{f(r1+g}l$w1W3>hua<{2)Z2}-*50Y4v+Vaw>dnzSBZ6793H>t zecs`!5;Ft#nwOrq;3KYgczl0_Uw^SZQV@K?(I@BFf$txP+YhUBG7}e7BEZ_tEre zazsDmM7vg^=Q^wx=+dcTLxJnov_#>0PC@Rmpck7#+M?+7?v!4IPh>wXn-$KFE)E$` zxRi;5+!%3|o99C}jxHS2#8q`I&8x}p*E>wSn+%kAGYc9DNm?v1gFQ1loN7u_p|!Dv z-b(8#_H-qgBJpXatm!BggT*WUc=^f;>YP7Gl1p?$TSu{Ob#q(Yx?)#TTVuLPOUTkc zUTA4)YX~=2@(s~WD$^*|z1BuAwDruQ&(ZeGqL=F1&>MGGn`y{V(3+dNlh?vP;+%iXn zz9f0x^@oHf*}szcbXx>ubv==QfllUowSJf+cRm?sKzEY>5gSH_2Qh#xNn$-<@IZs787ubmVrsc=H*SrIGW?E2F&D7<;V}pkvae3#-)4dw+ z*gWjsrwNXt=cP?w>7c01z4VNfqxT)&y!;V=<ZS5q=Zm3{L0e_8voc=_(>D~ya|8Lgr6|sn@sr2CVagK zZ!zJYoA9Si_)-(T!G!dCEZ?p#;sYG@*;qgZI%NR*vjh1Ra-0=5{fE;QyEi|)J~=P$N4v^6%907THHthHTD z&fC?}nQLfiF1B{%Hqa}0IGbm6YtHZUYiMq7Dt6@B+KU|pSd&|WtxoR1mF5kMbhkFR zsOHw@t}woNE$wy6(Ia*a522S4OL1MN3)6AA*^)oVGTqey$HiW`8ksCYzcTWdox@HXcfyE~kSVh5Wp5nXM$2Fky# zBIR$xr3#hYV*x}*+tH8{#T-Kn=dJ=$bu5~W-c#|3a#{_np;|mYpEU)YjE4GwE+AbP)+{$SSVwXztpWL$YxI57nyfHEWt1TopkHgoQ;>8wxGWjk!Xh zG4xYf)-+R56}k!FV`m9))lA@hfSyxv7Lx% zC|*iE$l56EI;1G5>RQOs=6k`A2xTXcD5%h1q;r|p79~*vUvTb{kffcCZVCe^fG9vc zYf%R&*&?Bn1f#QTj-alM?JmhKQ9TW7u_ra)#vgBSuHVeHyN=5DHH>txZfS0CoezML z?jC^3Km^0K9w5}ywgz2*)BvtEt!)s8;v*s@z#&n;Um`BIhU9cLHFtv5rHrffYU(HG zc7a=!FLg2q_mzf1D+Gl7QU}eUQbTX;UbmX=I6)~DtZvyTojTb;Im;C2pHV9yOztBb z6~BM97rL5q>!?e~tuE#Yt2^6Tx~bcwJ6R|0s?D9g;S(PuhId!mzntS;%PJim#r55| zp*b>CUzY{$ZiJ}j4(h_YI$T$p^Y_evHv6J+`YyP$SmJG& z!bVEg6zh8mf6xqV-f$}fMP*0OL`--e1;NPl!4MaXiWN^5<+VBIag6NrLTTDY8D;T`y&fF znsbG2nrnBrKSdf)kKA44vb?N=Mq$V#x}~mmrgBsA5v5JRb-`$PzUTBqAQ=+%balGh zWUd=SCu&Y%^$J{6cRRIqjOEbII{zS+vcvTvy_SvnIhmt71LNCeFxITXg?YWM_ zTMT|XhX)M)cO2esaID?H?eLdS{%#KMG&sIR3%AE#LVA=N+&+H^@fya%eLoaN{(pe+ zDSVZDZshPxgZsS}{u`!HA@nyg9oFhK{uK_dGC215!ZjKEDGv7-{8p4-x!y7Qv|1T#(e(sRq(NV)2TK1v5ZST34Jx= zs|@|Qj5itlBaHVLyn*pPgKuDbi@~pFe8Avx)7)U88o=-7&j&a$0AoQ~t zuQl{}#+MoVgN&~-xP0rQ$>5z#-(&DkGTvwKzhHce!N1G+fWcp2e7nI9=keGMgP+9s zPJ=IEe2>9bF}}~>J&aefe#y_zFh0fLTN#&kK7{@e#^u~$!GFN`G9%{|##b49N~JG% zDF=}=i*eaABluFr`;45GjBhb`J>vrgU(fh}l(yxWYP`p5c=KK}5T^6E>^GUb(P)(hkl$z<*7-#B9|f)|i)IDUEF69&uweu}UdX#02*TRj5g@QjFbN?n-( zkQ|=>px@>}FJW-{`4?f~hac`e^p~W659{yehf3&2S1bIY|6d7%e!CZHITKFO51&j+ z7srDu&d~sW6#~jNVDk{Uk@iBh6Ak#StI!)+Rivf8jpBguFgB#DWPWRxq+bZPkS8hs z`f{E^@(KBetPp;|@tkUPgR_?PFK2^sK~Y$K?1frz0DGaT=hyHj*UR4v)h`e6q(4u8 z_&v+#`X&n8gm**Uy!;_LTQ@^z>{ig3!&$dSY9F0zN_M;VNnXw#a?h*TQTMz?=d$Ab zVVv7ayqkMz@6_(>l#}7FuMF_`?C5c}Y8YSPwvuhmr^S!XTm;%&TKw1w7f+d&EdTJV zi{Eu{@=e2(^!E%mRGU^`>UImpvT_pYc- ziQ7$avs2>kJhXQOWiVQFOlG07cg683anr~2uAuu=BHwO`J0d0SsW!mT9N$%l>5 zNA1?>Tts>^<0IR5kF&Oy@>}}~?riQ1o&Otbf{oKjp49((vi;6U0j8}s4~`CM1|F;1 z-u#V)3uq7P`aOrA6Mbx`xD{^k)M-%e)dv4<>!MS7GYgW^W&T2FVk7oZ)Ss=P!5&7`3F(9l~lLt-;s>$Abi{fmN^ zDh~}-_MMy`nwB|g@13K`Pj#*LYHCAtR`;`X)_7&+*y=v2Ymnj3zxMc8vJH$!Dow8b$rnA=KxL-umV>!A*BxGi~3$QTbQ4=O3JWYJO;l z$^~VDv%PWF_v=(HO=Rn9R94SZTlskf!0~>uJlUO#?0tm# zn)Aq(*C-Em9Deq`O3K^*MZry9IX?K|^NUe#$RD5Y1J$sD>OyAnUiz-y$_d2xtIEpx zuhSXqd&WL}bLCGb-_kTS*p{So;R(Gfo};taf0dp5{RNq+pN5RxWaj|cS$Rk>5p`%c z$)rAJXdoLr@M}7I|I3F3+jRV$RK|!uD_gmDA^8_%C-0^C^_5Bb3a9q2m_+uyH+%FA zb=fIs>*QRFm(hn6meJs;@~jcb**O*Fsgk{%rQMsoa)Q`7NPxTulA^ zBI@TeuAe{Yu%~bS_w3Z~pLEjXTW+oxbHhinQ*YQmjGn8G>s@g(<535({?zjC-?tz40BUc+OS_J`<7oO;(9j^+ zTX*QFm*|Y<#Jrn+eD8`P(M-#XTTjo{Kb%fwTz6RT(pRYL2P>xDu$$Tf&hbaS@1SsH z=I9%yyfm$LF4><{7Sm7ZU2!4FONz_P>Rs`EirZf?b?;U>%fD_?@DiPSzq0O{;HA~1 zZx7Wej4OUc*JXPz|6K6S%m@F0bbcT+=7y853T`?pQ@NM=+WW5Bzkg*N)v;dsrbFFf zSN>N&rS06;uO#}4!$D8=_l98R^uzPbGass)5Zp8^GiL9dj%Uo?0_mY=!O2sJX6MHi z)Gj!b|OC9#l3m?x3&&Zn)cOIP#efn-!;mO+mE3B>UHj` z=omrB3Cv4nIirgpZ7bmIF6-*IEO9hB}p*~8dG@}u=w3i`+befa-u}eZ{UfRUOm%ttEM1?YJVpNQqBaEH9YHW}7vcW?noG%^;PqGSG=3bxw0adzk~Y4KDtNaJ`_-$NlM!z)x9fDB>Fwn zCx4Inw@*-+&7trh+4#uSC?~J`Vd}@5Q`%BtPLx0BhqhDMA)Swg>72}U$fvQN>d?=t zgQ0HHMbC?g?di_Bk<0?g{7OoFSU9hD#g{40-y8imH!3NQs4R!3W&Jq!ODVj&$?i{6 zoc(SE?q%Phe0z=VZJ!7Z*?U(?x~IQ4vJvSF}?!bAbsxznD3+gcU1CYTBc$z?LBbg&weVmXQ|v#zwmrA5I&!{ z@8!_F*_XZKss26>Y@)xCHlFr8;Kz&hTRzcq9_sZcgJttjS1U8`s>U-p{9CVB^3+M0 zVZSOI2dYN6g>E`zZkU@^ewZ3p-)kL*p)rh)wlXfO8W`2 zHFPxpP~v1Baz8tXv~)6u_`9Z~dS2qv?0dV@l_Vk|;C7D7ib&__&Fk7*iddy_J6Gvj zNq##eU;USpXwAeOpWx$ga235d&_LHN`BqYa-V_P^PW#iEHv|n`odLZ8a@xA?magW2 zwk4m2&AGJSFrYu$*ciAij(#Wk286Zv4TTPTo{3<0nlFxPplz!7B9o>PBb=nV?si&T zDh@;7c2*|FW7}zA-Eb0k?`@KHWPvh}x7-Jm1>T}Y3&RH#_yR&%O z>SoSCd3na=W})FUmuE>r+>Y1{*o}+)qzhEi8x&*`e9apu!x-}6HO)QPy^AQ?y&agc zg}6HGA@86asU@}OcileI+MU&#M#oF+B{m~q`;T(zcu90bc`;9%=5*S>>Imy)~)Uf9~$L1#+lX3n2K zyQXUHf>U#=>E(q+dQT(QL1&uIuAS2``y_ffvOpXDxqHveuAWsjt2Q^YsjI8K^S!5^ zPIpVln6Z;lEs%sa_sj9A-UEMgpiVmNc-8i?pv3kw?V)3MC-?!dNKc1|oXLjeX_6s+I{!Vqi zAm~EjtsM96y#7Yt?T6n6KK!j@I^hM@WH9U@xq`8NTA_JHpl=&4*ZGET8{R(gHaxUKkCRW=D&+AhOY13f6eW9;t2l3}MCR>dZ$o|{jq;5g zS8ghe&?9?~pC*4=S>`Az#|^a>*M#pVqMVj6&AsH0X#BSr5#Px1?TA-)AeiQ8y)a06 zH-pxp$;l4?h`Y_o0+I%GVXFm?|w>R`W|3D5rynT86J-EbNHi)+`5M@igoE5QURlSN((8v2*FDI&RrSwsKE5)PwR*FaMq7;w! zx7(=S7_W)g-$Bp75yO6a2F&`P@eMMD@inH{KyzIw)Ne)fXz= zn2GRLDIX@PFU`4e3*psd=S0=+WZZ=_uqUb$PzC>$!=rZL#x*48Y$u7($GdM6Rlhe#VYphC&(VEN z^y1x?iNW!nh<;CH-%^*K(?i^i7b)~(qE9N{ucqKXPpNMYr_g`e*&p3!``LmY(fwtj z>bJ#y^dw34oRFfI#kqG)^=OKU#W}ods&R~m;qY$incnMuF+PO@y~d?S!n=~^dJ^}W zXFu=@6uyl8BL71iK98>=UvQK=oRweiP>+9r{kSx-U*vz3!!3Lj`GR*bZsqqXT+8oc zT;w-$_(r~pe8D#>IXZv(6|UtEFfQ^XJ@+y$@&(_fH0PjK-a7_B>nYBO{7?E|FphDNFStCT zTKjV;^5ywe z(R;7KMb7<3zUbX%aG@V$+@|+&BVXj~Fu2Hh!pIl;Ck-z2GKXRH?lSU4&hrKrIeUzJ zp?|^PLND_pR__}|zR016GUsghj$+)_t4f25-pPzxy;F>Q(JS96wt8jW#_FAsqF2UW zR&Py;UKux8z4Gq7)tgVzyNq$@UFx&Y_YVp`TjAn`-uFp>uA|rwy&4x1(4Qp%L$7fe z55S&+qMyNjNw4(tGZ~lk3SPxHDBq)r*NJBb{r-Bb#t;F3R9 zzN8npmcQA^$EF^*E&dXY69n&P+{%}6iBauPX8GHVe8C4(}?ruIu4s#wA@+ucjFMN)8{xS1B){&lz0kPi5Tdtzz8jtueUB zsWtLN?->Rc`elq;z2_PEB4@e5Mb1hiU+7mET@QXK;~oqmeK4n+z`WTNsDlrCcX*8BnyxAwotG=d*h;el5ex9QqvaG?*#J~&&x(!P-1f+umm(!M~i?X>Mn>Xo!F zvGXz3XWN(1%l${}7kb_9bUl>z0(*2lOe?QOPK&j_iE*)0?2$4R{98=d&R4Nh=(`Lq z^j9!$^Z8zduVg1yMWuhwNsv71Q)&b`9;z-j^)_=xtDR|&st^YlM2`NJe^|CPJ@d* z&oC}}#hzUT7y5BLbqjkgRQBW)uI-t@xa5P#pJ{NBe=6hFo+^V2J-+7)XX{Vi$QQj! z3@&n(8Tmqgp23B_YLwS&(^bQ`wf_vpVdrAc>VA6^zDD747LrZZjVXFJ8C>k#%(%5@ zi@}BdZpN)%Icv$LSI)K)T;$wuGJ{U=e{K>fAZ`Xy&_*|1eg9= zo@H!4oX2tm7karDz@DW_ZzKDG>;BndK295#Y}JQsb}2UBjXLhMShdfEBVl3 zaG{s`7xXSw_T10()}C#Qi(Zkx-QXf$?iV(H2AN)Pq2HnOYI}AnTblC`ZE}}^+ejEwMW{c=#_LydlX#c%hlQwm~s)iN>wgP**08syVm{BcxAutKP7)) zzs7ZXb$!dT9I;>0B{YH`%l4JquL}K2Wv5QpCWVVGK${sCy<*Q6gNyuI8Mpb|Z*ZX> zVBD7bc7^MFp3Jz|BkMlL82N(h`mEQpq<%uLUeBsE@}=LD@{)83E_nqxTE5Qb3s@#D z7aRG~&(Em zQeHB@_YC8rSMcYR9G#ypDqQF1J|kb|vEMNA1s}!fw&@zLa9tmyy^H-D{!e$`171~i z<$G=t;RZni1VP1eQCkBdCLus*?QpSlO082;1$iE0tW3^+jwhiFCftF6G zwIy0R6BuWPw)h67zGI#b54GorPxQEY{gD(Q&4-*4}=?%j9Ya|llDH=Wtv zcke#ux7S{4?Z0QAefC~k=q8G<`YV26z$etdF2KWl3!m3om#F$8p;x)u?iL%I259KC zKB_)Sug`bIm0q9M%!g2JhvBb$^f|8jD4#B&SN=+WtHG7NM{q0m&IGxe46b~(82&1E ztHG82KEbWrKEq%6==-Tn?@q&C>311i~JmHs7ztK4G=a$h(6m5+UYS3dgwZtInOe^>en8Rsy)@AXZ>{prtMx?F)oE~@$LkW@rt4ONEBzgU+jMOS@GxE11o(2f4n6GW zE?6(5<2uE)pVYJ~uFq4|U-8cf^Iq{4*Y!es4X*2a4ja5x?k7M$I_0C!zpTM^J&dQ$ z)2seAU8=uLm-d@BUHUxg6#=SGtLS0VrO!>9E`2UoJyovNQ{`Gc?-99HPy4-3_0;cl zzpY%&Ps>MftAA2H|7(K&nxDNQK=s%BwE6sV;bZfe>m%uG{dq-jADXWxs;AXo`P=;0 z{>$cnsq{O&B0%*&L-2`$)8_0&ss#M%09PFdEe`N0a!pVBAM%+R;N5af{Ne!b4e)6J z-XGxMZj`42e0o4X5a5>vxQ?$VSJT2^&41!G0sS=G(-9B9AL%%UIBb;UTzf!YmqYPB z65ulf{J{X%H7N|%=NJO{E^V8}u$5=|B~zL|KTXieQv@rTIA1Z|6AIbD&Hr%JEtB}X}VhM*V{M1}E^ zGbA~FeA3`r0iQFI(HV=7v?P2o8~|LPH-z5Eqyg3Ch!V_97~0VE#P| zKi075Dp;FuYZF5nIm0Q|*nHS%I@jPZRA|md6?D?Vb}B;_m4jS^$u|V_yaK8 z0q!4v0A@MB{o@b7Ob57s`~iS%doXqX&dh!73{DGp@0q!4v0BRiI|B=?!uGJ&| zYNk7^w%Uce|8NKsKE>bk^^b;ee_62`xY}di99|fPVMBrI#T_xQDR9|>yZlXA{?c82 z8NkWnk2Lf)KEGF5%tetwr)Jb20AxDT!f%53*#!AlN_eM?m*loc*1HnqSBw0;l7E!X zcWo8qQYMZHR0!Mp-QKGh`0O{68H(oBjt9ynp)b_t|> z?s~TJna>nq+fThr%nVijKS2CA`3L3YAMfnF3%D+NhQbPIM&1lnK zk|4j~6y+aJNPjj)KKBM%`J6kC%l~Uc{(OXo&gM1e%q>Rx4w1h=BD4I*;b-L!hwwQ0 zy&_-fg-wyH5=4%Zzgy%_2;_5@wenMZ9OT5w?-ThtpPeMX0(5cm_lx|kWDdvlb2qn@ z&-d&&`SsFoDm{77Sy>k$vc*W(E-$^BPRc(QKjo+R3N*Yp`B{$A^pAceWZGcPx+Jav-01akp3oiR&dk2m;1N!*-u)G#0TE%qi8u({ss71`7a}K zT>0NA@^zlcb1RnhBI3u%KP>Vag7m*VM*hzb9w)!4!b{ZsKS}aAPZ=ja`#v9IK~VoL zijjXCusHc!$N2d7doTBIWqlGM79(+wd{jLkF`56IAGG<;XJVZE`RuIWI=q+rx3b93 zVkB;okD_7ubH35azYdWpACI8|w_D`f{!im8aU0^t$?p>RVfs0Lsqs~>&FE(+Kb&JE z?*)8V!0Em)f9Gj=%{X*lmFK6`zgtXdWR=j9=j6+6v=tHK^l!MzQ}hWT%a6};tN)!c zezEfVC4q+}zIqy8??0FD{5~e~yM&PPnMWF5^KW#5{GDPtq*vmrr}6cEWP<#T22Zg- z2q~ZQx*A{QwR1uv+@Ulv5HmW7rH+AkgzQTajn%+{X^)#^*SVdU%V-oBHA7D{6aDc+yaT; zZ30w(CH_Xj^Xssr|ClJp{J#u8jj!eZ6T~+n9P7P&*uvG1@IKkR2R|DhXLHS|t;^(G zb?z#Y@z?%;R-GrRn=z->lbrh5T_=g99PGCAlw=3fu&LeyyWs8qdLOgO>H}j(Oq4ikq;`70ud2sxehs2h9o{qMs=Rw~EQM9rAcw_zhk)FB0V83P26;b)V zL#5?AMy9fJwx!CK&jYsnG@Pq*TJ%IS&XB;=fzv_xQcwIgp`LAmzxi_f=ABWTX1rfj z#?h`j^CUL6gEOhtne!M_{tKnqJp;(Exn(1-e-ZYpSHhnB#p#hBx(#Rd;CtetzkFuf z!nx7u%X@(zlItw4@d&G&8EuRXx>}o1$Uz>L089$zO1k1JZ&6!$mbQ6!p;Bvt{ zVK{*pOt413=Vm976?uCvq3y{GaP7l-NK{~Jaip^{$u69I9$hd0oK3;J?MTMIhB#am z{}zlqui|SZ?pSMvbrFL*z`r0&D=Fb!{2RheLFXA~qwrSOH**A8=x%bjyubuOeyu`9 zfcVS%9K9XEsEtU}QsXu{dU-(%!anQp@&NId>m1J6r(*Z}Wa}*r^@?-H?}3cN-;qGi z11wJMifxG$$>@OUi&u3T1fHgThpPyQXJ_f;K+$<{y;CkJE6nzH%n7|gE ztB=55z%Ndpa`1`6=LW{9O65;nUP~OV<<7MrBZMcttXvb%w=&=E7(_f6Qs(Rn z6AyditpT5c-dNU}@EmEk0)(HZ^9wO#`2<6U{A!#3Hk$BdvG6l#0#WclPoOx(kEcF% z?gQo8wJT;cwk&DEY1u1R-`IxF;H_98va}I)rW;o_x9}K%nv;e5FVFs?W^RaLKW!#x zTrhgU*G2c;(tWFRA1U33N%t|*e};_t-dHWg_gi~^fO=8B9y)XD+8i;w zY8AL_!Cn5QEPv^)=HUNi@wMG(G#j7&wZ%x=A&;gB5|M3@=}gPL;#Wg>oP2G^y+W^^ zmGwbHwis!9M1H?SqUC%D)X*oP3>I zJAm-eSy@SQj7=hFCz-=hK1W|x{>OpE$;UgYbGy8k`?vBxj1Y^FxI*f$HWbQde`)1^ z5yC0I7QfINfAR|1*txcHo7nH5Z|1edXM zEH$+=X4bk%mQ$Z&>93+j-esMa#kuvV=tL>ce+|w&$9bzbtJ$434SkExIm3Co>2!7v z&lj6C4(Fxf%({Ee$PO;3h@O~K6CGKAGfvMxEt-AL2%Ha$Gs$i&$<8@zR5ZJ(#Gk{w zx8%H9)ayBnvt&dxNEwrZbJF@x%b)k0!5Lx$IKz5-s(axSynoLl1<)6xa;fhaHTz%cQ%DP^F{4~y~Ty|DW`cd|p{$|Xlq(|b+ z*3r=sp1lfuFoQX)bPDHi)<%2q?or8mjLj;kH+}_WyDpdmde+PV>71QA+q~4Dc^k(g zHM)CYSIqg3N$2_X;1vb6QJo9Eu4To~Royf_>ki{n#*^ph9c z4eJc&-(EnzFdlvd=}nF6UU*?bUOYRddtnd4Zv38}sq4@5>&H2PY*TucEBR(e737~bk56+D2#b*=7Nnd~N81_pUH@8}NmS0?+ zOrGG+QjH6H7GaYT^5~(n^KJ84v_CvUD&u(EgF1kBlGw0$I8PkonE0^qdH(FD3g?*% z)0ID){W~}}I)!s>OA5}=9V{I-HR&vNr!(sNUC6t4mPRw~Lf&C5#jYM{Gro?GKg7A? zZq!vhd!6wXl;Zq#&|@#pt{#*(&#Wa~56UO*JoJ9FyZm|R`7?Nbvy^k--|qv@*t}>y zFP|5DCg5=%Plxm8sTb?_;{T9rS; zy!7*!FDCz9IiK|CRr$I5C()lh1zLvVSI`eUTUv?k+3STfL2*X)B*({};h5(UckXIB z!t)|Z&nE4cp+|WIznPTncva3s=J~WdzkTj$(Kpd<7E#VXX*8AeCrZvb^crN%8yzj0 zH5&c+Xq;DzJ`T?!oKHROP#^lO^(goE<2nB*o?jP(|5lXUPtbnD+PufA=H{kxJG|m=JWoEOkl;ipSBHHUZ)RD{4FS49@K5_&br`=R%kz72Rw{K^k9fC_$qufAOx35V+}Bt3 zBmHO#%oEn(ht7{Sug96p>Cs-#3#0KH$@4kn_s?*SI_VFVL^Erk+l}atF@E2be(j=J zX?%0ar^lb4-2dwnGcN*NdeljHp?xrI12_*DY1z!Y$NWlV`pl4@&!6W}4nN0_I-uMo zf6uGMd`aa{<M-B= z@XgAe$CUwm8Gdxm_E^kWT6{-rA^{xA+_@_JBWs-Fz^M34u>AR9jNj`h^YJI*ewSc( z&^O=8Fy4%wlJKpfd)&Ehc8BfQ6Ol(&`l%V z5N(19H{j@No9o2h4Z)xFY&LceqSs1fg74$rGeVLv@Yo*M9eiR1HE3HVnM_<%f?&s+qA=l|>k9bFfGV}h?W+OK`W;rVu< z_^%z#*<$ZpUx`cB*fCK)|F!SZg%?Q>wgC@I=p*>Pre~^rG-nsSiW@pHWuQl7r%{R?j+|{$Q5yn>vFDJu9W|WH+<=YAUCp*{x%xB5J9aOFQB zxYg$+gDd?p!EHY1GtJ7?Np8iJPZ`ofXXU01uJjdx+kD6bc$g0t3a)ZBpQ{Y6{M8I!witUhVGK`j&Rj-+X_f>Ee1{I@L${R0yv8 zm0s-{Dz5Z;9*E6{1&048ytwE}!(VZ(-=(wVzA3=N{M=&rtDZWJu<5$n$W?kjj>@+$ zO;=waH|$S#2YAM5?Ejt$@KDbKf~!6%SM3KYu5u3wz2>vhKW}iQ=lGUR`Dnkb&k^OL z_=TR_<@5P+O|L${xt>W~RxXtPI=P=OzVcW6O2Ju1CNeXID&U-1=! zTmG8@Jk0+sf-8T`&#eYuCii!XuX2^X*WgNjzu?p-l)F=KD_5V7iYuSphQG>v(BMk{ zR3P{5a!pU4Q`G0e06#3(Di?DH&K(tB)2p~Xr))m|w$BmO|5TqNN?(uk&{3bTJ?itt z=D$8)G`*Ui4Z=rp<*&~j%?G7lEcA*ieMg{AnE!VKc$oip8o7Vwlao7tTlp)#HQ*Dr zqx%9pY)AJS{$CaTI|Wz%iti5ig#7in$@~oYKW_L7`)I%6ulRuk{&gju!j@OP;94%4 z|CbqD^FJ%Nrc3Gl`*prQSNetox%%9(au+Aay(U3!lfhN)iUheGhQI3HX>jG!W%w)o ztp->6I|R4wWlMmE{nb{%Z9d#>aOH2Go2t)!La*hb^g9#e?lSz9&u)V&p9c+prSCVm z(myV^t#A7cf93O(!IjSe!(ZutYH+33=e5oMqe4$Sqm2c=^5fdXaCWFpXhCeSTSe%8)N~R-eiM&o~PIr}AyNR0$3FObF-~1bCRPD+O2mm2ZQ=|3dB; ziLd%A{bGYFeUsoeT^#|Qk!yPM<(l->0X{JSuMhArz0(3bmz8Vc;Vh`? zL%dRG=ye73VLxzRfahnWuy!=S$ICUn0|6eER|I)-dVerqKl_ z*~ycyD>Q*uxURX#jFH%^OEx?QRteVT5aLbD1&e-j-*o~(TsQsZ?9G8QBc04<97xRf zDI@WeEpCBRjG3(*dJ^keRMUUu5|di1R(G~df8Pf`e979*=9c9-Q(teDEvvk|8#-W) zsVy{*6>pTPV9mDw9B5Z;V>PxjHsuUV&Cad7Zduz|qZXyQrt2#0*6B5Qn^84+Yf&|c zcA{$DN()hScy8xsee(^ZLI%lyDbIBck!Gg1&VB>2VL8NKWX-+aYX776kK^KG@edpM zHvSI~-(uw5E}c@fD8{*Erc?Vl?K@ru7AIfN7t(oikU3{%y$IA|B-|>UklKf$e9p#O z`HO+Y$-hkWR(g;*XJuUt)M6xTn(WAP&v42gj-T?=^xp|APX2t6U&p|}Sy`V$n8irm zCGxu^KINC=XXUQ}7AL=p%EBqVzblrt5&?1YkDc#hXgVpMUjvn&;z{;7x<&pSo=xuG z%1W}&Q6ZDO{SuS%`L)E#=lgkF`pbk+-(Q4HQChD;WUCWt_ltZ@C*||&rj@@oLH^xX zL_w$HEPq!lYgK~$0gM6SuqYVYFiOA3ui#DK^j>|IDdXGzZ@6sDk@m3YUo8=-KgUN_|IMO5 zzgLFtb&-!XWd)A9(y4!iT&o-xh`%RC`m1dUh_CU~|5IG(bx68~8583yEzi9q2Cu+% zNqn8B(m+kW-j6}Vxctk=-k@4=ip zx0%5G4Yl`RMqPcqr#|()2N`yp;&tNTB zQW)YMIXFCwTe$Y@DAqof&Cd?{^uJxznmLbw4(sSD zu^w%#qw#Cw{MyymuvXHojen0{8_zr(#Jauz3X80?j|%Mqu-$Qc6jkxo?kc|wZpjQ9L~{Mq5Bty%RnFq@^ipJqm-~G9ldnC0X;AOGuHTg4Ekst z2-W!pZsPF2O`yLvf&MEA^nCQk@#njC9FBe@79XEL&oO7X7RJ>nU<(|cFBexAf&J3q z`EtzQo^BrahxP*9&(a;_}!i!r39ItC9=y3FlNU3viB= z)LkPNq!0Pj2Y8sT^8-9=1&aebHB5SJqWKx{<^rc2UE@8f^;k_T^xd|;R+L~9b zZL?OiPsS6O#-+-Ixkkj!ax}Kzgmup`6CJYSypV%rS|f^KR-NH4IU-@Opx`LMw9y)XD&gURz$M)GUQgB@sT=SCgP8L5yqQKesjB7EH@03Rs zpUHIWE0|6@HhmWu#K~_0EuFSwe^)GP79z*V-y0*Jkd^-nU~%%bU&*Lo@vW@qfLn~D z2V>;3NUi+KfyK$cn@r$T4}VuI>)i;5lYdO)FOZ1LfA)h`{yJcB@+T04yU%;Me=Cdn zS&YP4sgPX~lk(ZGTKV4rMp3pk>De?xz1#g*;=?O&|0C{&2^5m79PKm!#4LG}06TM( z{zCOvILY?!?wIt)&26lQa4Vaq5QWgzXHKgWb%DUfuL02>g_FI~6j0RtEw)wohyl@ZWAo%}B z_AvG=oHwTmdl-8brsm-L_O5|p*vp~&Ki;DeN+s=t(57^ip;r_!x zm*(&HfiH(XTkzY2;^$Dq+1qOl#lB;bb zx>>H++sJe_#q7)OMg8Ue^#x^U7w?80$Tap+qs`#kz$}(0%d%-WY$krBbTfGzjNy@i zU585S``-dz_he7zo^0@0kNUv<+V`Mb+tD_dXX7BR8TpyU{!H%I=6=QQqbKUx5w;!e zlk**OX$PUU=dO0_drYTF_N6}T=aERW9=05ak65;>{^FX{6R-t&f&vL|x;j&ZhXj~hA15<@o+ z`@dHtgssCq`?iFzX6z~dL_%2V-0p=RMOf0j)4B=C_B>d&?I^crFNijOy(QXQg0dJ8 zyAo`}eb_^~0QGYj%BdW-C)&>_w)N12GQ9_JU3w)>Ir0|vM3e1xWb*mN`rDDvHdB-G zbj;Ul6X@1q5BD_*VUr>2!w74Su{V-IKcn@L_5wmX9qg;|04}uC0b3XC_l`Q&{=IoO zFIzb37;SZw!&XNX>~wq`_3Aq0(_`5CJ852YWC`Mb_e}pRu=S-`_I$IxtV6mm#)<8l z9-8d!3{*8oPo!yo1Lc#3{f+kTrEcC1-pgP&#J1;b*v6nkYSFyy-yMcFiaqw<9pm-9 z32kKHdo%Y3Y;<^j+($Gu^535tBXyn=?og+c^8APRQs%JCD%*DNFkg_8FY7 zW&h#&4onRew)6P;QMPx^k5YG?Uwsw4_I~ia_37UXpVf3@7B+;(ZDe2bT*!kje}Xy| zhEq0v1$|MfD$n;JV=qPd#_g3(S9%)(uLU*&*tfrmu~@gHp&R+Q9_8`=(h6r=U;z8I zmqFhV7|X3knQlP)z??^=8&jn!X069_ZSJV(`hMuW6@5GG4P1{8d5c~+Gn&~xGMdf! z%=7kyJ>(33reypf(meF~iA8_ABs%hG_*2lv`cNleXTsHqd;a~zq8`+VM`4d(9mmGUyvPFiMbzk?+j&+hG%h z_Duc>b_f1%$@q=y(4P;7Zp?$9LFV%qll~k&+X2g^DUE&asc6kW$rtZpUD|}StcQH& zG4p#a>^Ob;l@p6tRv&=hjXKYCoe$eTx%!TM?ic?X(hYuW)6^rKIHawf$fju;g6zSyh=M#Ir{|T-M0+tO4@$dM!-9at3y3FX0%7f7`?wbv52-Gm_DY> z(c;?&?M<``Z@foW=ItnWzD_>sEz>%HZzg=kGMz2-Ul@*hd=~l&*kwRl`T(%ww-kOm z`mbiUVDhwlon^nGbr$brZ;9OkZzkYPS{_)Mw>*GLyHZPy1~e~S(Y7ioG$@d_B*581 z+%3Bi$31$p0%T>@g%z7Ga8Z`6x-p1SY>9xJWYHHdoh1TZAhP2B9ln_@MkV)q|I5BM z?5k<_-J*^doX#Iyi0cIoL8HM#y4co0#n;AswbI4KxXn3@o59^39*XvIo+9@xZP=fA z3jt9?nm(cFAx+HpG_?QdaiO`7e(=4H`VB~!vr(8}V_+g^DyTo4(=(@w*Q5$~wS?~^ zQ34+ZCAk~$5+3($?>BC4hKVb5Pdl8cD|A0{_}PUZ?jCVCzx)@vgAOk%1aarrv4>wf zJjp*gdYO0%VqvTbr=^z<_^!jluOL3`?;NhPJ9+vC93Fl>@?rNnydqC1S6_Abm?GS- z7pg46Z$~+m1YeufHs#-evLw*o)mMp~{LQjB-x#GdD$XB|7w3=1i}T0h#rfm$;{5S= zasGI`IDb4|oIf5fE_aU?*S9MX5GVBq$mckmHeTcKkDwgm@FNNI|C}IqegdD5C(zGK z;Qx;a_`?Z&{vZJdo7i+MML=kOU?=G4dhr_*d^OY>^I3=I>y_f?IX?M%;`&O^^1JL9 z^eF0Fe~p{pI6Pl}T)zqI9>*tNA37xBCCJY)K??2@{6hF~+QqZNIrC2 zZy)0GJ?y?Q&yZ_+WpZuzYv{9w-)Qxkq?&HxT(_hS@A%G9AFhegoNe-OZoln8xo;I; z_ai8MyTO%S^N(`zzLj&EjTrP*9_A#aFpX|A@hre!t*MZz%UE!L8f_23I~mHT+fXL4zy(Z`&@E&oRSa<-TrkrB5TB zbT+*s1-I$daiikO2kQZyv-zywL={*1OdvPxPjuW#eKMY<`(G5$Ulic&0sf8v?+{$| z)Oy@0xay<0Kag2CHmVd{`71tAaPkTHtDOzv zVY(I>{+|;5iw%Fpn-chk`)b4IlNEbJxx(uKZgCxB9djTt?^dpTzAK*!JUtNx0Y1<%2-U2|Uy9n%%&XI5~{H`Ryp4|IyFK58#ZZAS9 zF2Pl<;tvLV!u*fqxj=nF{)-ZDeg2Xj-;Z;yQm$-%P7qx6)cl!f@I7*$5nuIJdL5f7 zuJqG{-sb0`06#~r>FIOF>e(SQR?kj@tK2TZRUg&!R)Z`39fDguw*+`buIbguHR<)5 zkoJ34e|@j9`cFiBI>le`w^2rLtH1W2iYxszp||>97T_7-P4CVC59?Lf-V5qaP~Rp8 ze6*g}e5e;1;$iuQ^&!l+%L4j>enxQ3A1%lE2H!9D3&hv_QTi(luJnrpxB1o@;2F85 z*DcpJU78Qv+rYU;b(#;vD;0#V`VbHIT678x@o*NpC%{8H821Obwq-(^KJqzRXz0Bp z*Tlne(Rxe#+8f0R=m)iXmBzbG>XpmE}9gRGiY)8YX z`PSIc2yB2bRo(^&Y;@q9!=Rv-t!-R$!>UyTa(%#3Y-|j%g{5FO3epz06{YKU zZgZpct=N{*gXg_;sjfNc-vQ~2Psn&cacPEn>lQ*0)Ba5ZvU*|sGIReI;LrHsHwThr z`3G0wz1+XvtIz#daq=4^#^PK|e_`dP0b7ieY3cN|ALq9T(vhA{`?zjg$I0&_5uDQd zyJA_lARtbDgUDAo`fWt{DZUHwXe_rA# zJ;869GUMdGB=Yq;9C^}NSz|zFF-Ir@vLcZ3N8)GY z9|aaCf7fY_OQhfR{9UoEmk|&rKb!F}7D&UQe10vo@-LG1W82?l-pl=4S?43Z z#Yo)q4j-jK@{#h{=B)f%5gwQRgCc*T>0GR=n-JMzlzc!YQ`3Qb_7PV8R}$pE&ccH0 z@LulU%Hp1Fi;?(Xm5)*_F`0gjo2>li1o(t4)9+NOZ`8c+Sd#f4snq~DhKA;xP<%X2Y^ z!7FgPCH`U)LDR3qJU=6@{01cd4htdkkK;*=ul)xX+FIF+Qo&7ZaL0r>)!_Spjn6$< zvu3(YR_<@8Jy|ob57<+m`kt&~!>NgPS?6W3$1S8E1!r`->iOb})!_<294(N);=V`S;j!lyZBH z(%}0FZDD{f+VJcpSo0b349`sC9)(K$7~YBf2;>=tb8Yi$*bDaRM@zuJ)bsD6?T=wN zd+IctfmXI7jkCMB&iN>1V$Eq2&%(l*TCOYQTF~dPCX{Dx@hmbIj+jb?Ch2&- zm$SKn_%6R-4+M1sYb+;C)$^WSbNjaZd04;i>jx{4p>#?1Hr#tuunv!HqRz#Lq6~c# z)*xYvOc?pBkg&z{W6mPFQ^L2>FIbm1w7m_^9mK84K(A94$r68 z)hS?nf7w0na zsm`yVAynW3=IiOj#wp|T4h)P^UeiFW7M>CEB zh9w#cg4@~~uU*r;vdu^+GC;w^4Pk)dcWFpsA^nm? zj1*kk@fG8pEWXxnWntqpuEj{(E?waSiO4p_blNdj3Jl`pUnB7{;;Uz6y^a8jk+wTV zJ|Qdr8DMepZzU5rZLj{WSk}`Bh?BonzDXLy>onB;%hwh8{-D@F|--Tp(sm^ zF{5)ky_fsf^ee#rKQ8~&4o8;|R=|&YXa6|jTiJ}Fb|CbdBXx|6k9Urm>e^F(=a@Bn zmb{jn`a4He@W9GaxhRV{p!_>W`9$nD#dsV0*>{cDId4ws;_P5qH_tFH+40`fQdd8R z_lOL}(V5_#q+IAun~V{`&CC|I02y|MNUtucw}go412e-kaUSJmGr}^J4p?Xbw>~)qXC+UF-uUrNw?~`*sbs>&v!myJ+=4P#in17nbTQ9LqQgJ-?{MSXzDMTW zUc?Du_ivwi zGA^!`*{dIY56)G;9BIbBVU!(hdieVAefN$$RQU}@J!PFZEgNnA0qivVxv3X;wpKFz z7Ei7(@%c}Cl)pyavn{m0{)s1FMH!@#-#zOwB<=%q2p$r0sUV|*W`8gRY)DAEmT+kP_BLFX7^|vT!uQxcHV=0oPzrIZPX+3 zyaPOa|2od~Gs@H3RP{Dg*?t%=%zL)su%7(B&*z|?=iWP$=5*ZHBbc|j5OMUqbt@SZ z%)R8#Z=Qf49X~ga&duTYJ*5nDeBm#S3EM&p&W2I8j-@I%n8Ci#hA)(CDf=S!j(!QU zzwGy&lK%nx=sNfp$R>}Y#NgbTlLQ{5n@AaO_w%n{4{AQ0q?><=bbdZZ)-WWHJ8z0VrcDNnk zVot{4;Vgt_#_z?2vke~qw8J@CEp&hEaE^ov-OUaUXJdRg_l5c{y^x-FZ+;G~IK7@v zae6&ooL-NIvnxcrD|MrDz03QhxmKFTcvV{TmD`7x7Ocq0$0;pXdE@avg;$)LFie$z z-;{v!y)uqZa{`X}@L2jUp&aA*B+W6t0Y2eAMqNi%3qE6ld~j_Tw4X%IUF)Af3Qhxt$j{pf5ytnjeI!*qpsm=8?>eVA{33ApA7 z=T5`9-+G}ZULn`?n&g^zIQM&NfQP-D)(g@Huh_ZsyopyzTzWqZ_>2qiV*#FT1yOFj zCi!sSt!@GC>4;D8m+rqKz|Riw$Xh8^JG$2{;k z)+BJw%{RBKUb(Vu6(*S1w5@1%8vEI2nNx1R2`k^cIp&tmH3`;@bCbTwOj_D+Shc*Z zwGjzB6;YrnSRv-8it}^h#oD#CEGaf-%oSv(pwqQW>Q6$JOaIBqG=;v9PJ!Q$gvznS z74Ru=6hcg#%Q;oJa>rBY$y8m_XXwN{N;9ZoSk}2_22QHN(N%I@RdTik`GEti5JQf& zg0Q#r9IG{GSH+_?>_L>y95^fgbBJs)lJ|@J zu>Ny=V&zXuDF0p=;tnOB>k{MSABd69@s5@MbVB;ClnSw*i3yyQ^^XbZKP>XY@{e0r z_YLr7{wtk|n#dO?xS_sLJp~%Zx9&R<-{O|`1rQLE=9VMxm-w4Z1kFDsd>$7zPZ*Yw zL2X*%v;J}1t?{*9d=lYSHsd$Qf`xivPBwAz`HgDEn^_lE|K`u3>IfD?WT{+~#h9Jn zs0!_0a~=|UZkilLoAdMHSSN=0#cs^ObDogb{iX4?l%JJznR*k#o4p~cE!|1s!%|n1 ze-pwpZf#qkO=5=O$EApy;BUShzk9GQ4dZ<_jiRu5rOCFhQ)S6EULQgj`DISQ_BHjP zE}WBIf?W~Ixh*A1wh`F6Y-!ut&b60%pX2h?tFSG?tp)K|V{6;B%{Q#*bemB+nz7De zZRD7Ct-dyDUa@pp>m|)g)^aqj&elJzqiTcx&C;O`6gX`kmfxw;6)=mtnYXHS&FW>X znX1{dYwD_J&Y6~3(!92{$EGOD}EqJf<&Qy&AR@*RH-{O-mcs(_GrQdi9Ey_U2`)E?u$W#+8?#Xs&B( z>CCjunK83<&YafSE!Wmo*UYM|pEIMnwyvhOb#`_Ath$=knYFF8*UoNho05Nz4d;?G zNQd?T^O+Gj8+&w(YU$LD_uqxcZlzExR!RF`{fQVo}+uW!;3X( zb9nJ6oMTge`e~jwulP($<$A&>+8YGF`MJm9bdg#OJ&++@<;mR~PN-L1fQNG?TGy2S z$AvB{zVcUmLBJ>EzbL>%{?`bu{2S%INqpt6c)Q@7n+o}N26)_Dkn(R4x^D56zv4Xs zpOF8S01x@^3~(9VJ7kyODpy<1ZiBx|?jICi^-=nMgDd^xf-@gNx%&mTa-TA|@;PAm ztK6R&T0D+B&~_^wigb_68ky7CPv=_K8nN zPaMAmd%m!qsyxaL?k$TpPfC>^+K!bbexKO9?Vxe*kyBG88?QLhSbsXsmPn^YY@C)# z@532Bo9|4eAH!K7kM*R|JMNE0?7K7d_6@urnHss{isSchXg_}EV^dNi_CbZgUzGCa z*HF51kcIb&hs&VHsO_(>K4bfDmY#_K&kojcJ|5iR20 zv1g*xku|is_lfb&=UFp(u zHe$W$;A^9zUDzAHCxiF-)p$?eR^rdAUV-c08QDS3IXrs-&v_n;J#})X2+mkoKGNsQ z$3{lGX5)u4b@LLpXL!DYU#pY>|Lp0}t}5_;;eyoW0mvCBE&o7z)E|HT=903_vs3Af zT<7{&$=OKHc2Ry!Oj?y?}dSFXDH4=~)|J zDjm7+A4<;M_rsEr8~-LXa^n-Ja~|tYo%`6!?icOI;7q2`QO$;$H*WjFuTp0`Hl?I| z$CTs$Ys0E#E9z@XMr>$6xmA^*vscdV@5}#amL7{Q-7HnHR6ouj1m8k z8a4H*RKNfInD$fXiW%#^foFifQJe*_0 zI>xXIux6O`Yv7F&i-uvHT2*S;KD67x7Sy2yILD+N*Yk0WzHJZ7IpkG^c9KRrxd?j{ zUo3sc4%GdPI2Xmmx3tSq7cNbmzVAh>Wm|==bMHaAsvWMrm$;d0>9 zYVN%2FOP40Yz58|+ICuWq#5n=mnesGkq?(b-mh@|C+FSv`NKHp=}g4^!QgE_9{c~O z!|;voYhPOb1oCoiN!1n4;Eb-d|JwDfUqn?`to{79r{|WW4;}ew*SCIH9&N6{{qoe< z4bP-T9eO!6dc(8FPb}JoYv{D07wuu<<43=4tp6@}{T0hRRdvP7|I+oX zmp5;Fn)J(4XKqL#{|=#!+;(2}-&ikxF?QS2>D2HInh!5xKPdAa^}TZK+7*|sX=_=% zru9;u?$FWPikYY1^Tm7>>_XwfxfebU^qJ7ZK&*qS_*%(V`D~enUmYQFqwi1?i(ZZ76m4lkZV`Jcc`f^{~!SAyhk-5gDEdgp_`mKkNKW3u9K zu0e^zKM6dXTXE$KjNco^1baSRnE~s78 z`!22TwD#Q+?btay6ASc7ddI65{(Scf^+*5b9P#j-)0kwEv$FMd55}JG9yQcL4q3Fa zvUvsGpu&|0=qP4z5l3Uo>W-TmS2o87u4!Aj`bNI;wZdl8(nd_cT2k~fHI7dLX}%X4 z>g}xScl~zuBjj@2FnCki=fBQT_`Bk9H0KpqC>y@s7 zeH|U!0MjYS%Jrik1s13OUf^_L|G|4JiyurZM!MZ1U)v|;$Gw~J-6c+bMhZpSIeF4q zSxN6!)soOK{Zz@O{}?dJx9^6Jh@fyy8OR)M=rf%0s|g0~pCvxi7dq0?ssHxi+6Bm8 z7c(oyX*>;jCoYKD_alw3`LFbve!ZWG3!A45TOfoBgplROeo^CVzWxN5mCYy^CpouM L6s8yVZub8HguS(I delta 1904246 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%0A7pQ8M#n#_Ez3oxRrkQwL*BCCAXy|7 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

    2. XsKvTtXVsNf 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 z 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%0A0{a8l)9zom6d1#o93IaHH06B6 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

H5*2(&h%aA@P|HC(dDT2ONL;0-B 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ℑ645{qJ(f|M$^u`TK_`{|89# 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